/** @file
  Guid & data structure used for EFI System Resource Table (ESRT)

  Copyright (c) 2015 - 2020, Intel Corporation. All rights reserved.<BR>
  Copyright (c) Microsoft Corporation.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Revision Reference:
  GUIDs defined in UEFI 2.5 spec.

**/


#ifndef _SYSTEM_RESOURCE_TABLE_H__
#define _SYSTEM_RESOURCE_TABLE_H__

#define EFI_SYSTEM_RESOURCE_TABLE_GUID \
  { \
    0xb122a263, 0x3661, 0x4f68, {0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21, 0x80 } \
  }

///
/// Current Entry Version
///
#define EFI_SYSTEM_RESOURCE_TABLE_FIRMWARE_RESOURCE_VERSION  1

///
/// Firmware Type Definitions
///
#define ESRT_FW_TYPE_UNKNOWN         0x00000000
#define ESRT_FW_TYPE_SYSTEMFIRMWARE  0x00000001
#define ESRT_FW_TYPE_DEVICEFIRMWARE  0x00000002
#define ESRT_FW_TYPE_UEFIDRIVER      0x00000003

///
/// Last Attempt Status Values
///
#define LAST_ATTEMPT_STATUS_SUCCESS                         0x00000000
#define LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL              0x00000001
#define LAST_ATTEMPT_STATUS_ERROR_INSUFFICIENT_RESOURCES    0x00000002
#define LAST_ATTEMPT_STATUS_ERROR_INCORRECT_VERSION         0x00000003
#define LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT            0x00000004
#define LAST_ATTEMPT_STATUS_ERROR_AUTH_ERROR                0x00000005
#define LAST_ATTEMPT_STATUS_ERROR_PWR_EVT_AC                0x00000006
#define LAST_ATTEMPT_STATUS_ERROR_PWR_EVT_BATT              0x00000007
#define LAST_ATTEMPT_STATUS_ERROR_UNSATISFIED_DEPENDENCIES  0x00000008

///
/// LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MAX is defined as
/// 0x4000 as of UEFI Specification 2.8B. This will be modified in the
/// future to the correct value 0x3FFF. To ensure correct implementation,
/// this change is preemptively made in the value defined below.
///
/// When the UEFI Specification is updated, this comment block can be
/// removed.
///
#define LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN 0x00001000
#define LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MAX 0x00003FFF

typedef struct {
  ///
  /// The firmware class field contains a GUID that identifies a firmware component
  /// that can be updated via UpdateCapsule(). This GUID must be unique within all
  /// entries of the ESRT.
  ///
  EFI_GUID                   FwClass;
  ///
  /// Identifies the type of firmware resource.
  ///
  UINT32                     FwType;
  ///
  /// The firmware version field represents the current version of the firmware
  /// resource, value must always increase as a larger number represents a newer
  /// version.
  ///
  UINT32                     FwVersion;
  ///
  /// The lowest firmware resource version to which a firmware resource can be
  /// rolled back for the given system/device. Generally this is used to protect
  /// against known and fixed security issues.
  ///
  UINT32                     LowestSupportedFwVersion;
  ///
  /// The capsule flags field contains the CapsuleGuid flags (bits 0- 15) as defined
  /// in the EFI_CAPSULE_HEADER that will be set in the capsule header.
  ///
  UINT32                     CapsuleFlags;
  ///
  /// The last attempt version field describes the last firmware version for which
  /// an update was attempted (uses the same format as Firmware Version).
  /// Last Attempt Version is updated each time an UpdateCapsule() is attempted for
  /// an ESRT entry and is preserved across reboots (non-volatile). However, in
  /// cases where the attempt version is not recorded due to limitations in the
  /// update process, the field shall set to zero after a failed update. Similarly,
  /// in the case of a removable device, this value is set to 0 in cases where the
  /// device has not been updated since being added to the system.
  ///
  UINT32                     LastAttemptVersion;
  ///
  /// The last attempt status field describes the result of the last firmware update
  /// attempt for the firmware resource entry.
  /// LastAttemptStatus is updated each time an UpdateCapsule() is attempted for an
  /// ESRT entry and is preserved across reboots (non-volatile).
  /// If a firmware update has never been attempted or is unknown, for example after
  /// fresh insertion of a removable device, LastAttemptStatus must be set to Success.
  ///
  UINT32                     LastAttemptStatus;
} EFI_SYSTEM_RESOURCE_ENTRY;

typedef struct {
  ///
  /// The number of firmware resources in the table, must not be zero.
  ///
  UINT32                     FwResourceCount;
  ///
  /// The maximum number of resource array entries that can be within the table
  /// without reallocating the table, must not be zero.
  ///
  UINT32                     FwResourceCountMax;
  ///
  /// The version of the EFI_SYSTEM_RESOURCE_ENTRY entities used in this table.
  /// This field should be set to 1.
  ///
  UINT64                     FwResourceVersion;
  ///
  /// Array of EFI_SYSTEM_RESOURCE_ENTRY
  ///
  //EFI_SYSTEM_RESOURCE_ENTRY  Entries[];
} EFI_SYSTEM_RESOURCE_TABLE;

extern EFI_GUID gEfiSystemResourceTableGuid;

#endif
