Formatting .c/.h files and fix memory leakage issues

Signed-off-by: John Chung <john.chung@arm.com>
Change-Id: Id8328f412c2724992d80c0b3f895c8f85bc4ae68
diff --git a/edk/Cper.h b/edk/Cper.h
index 201bbfe..cc2b3ad 100644
--- a/edk/Cper.h
+++ b/edk/Cper.h
@@ -8,1283 +8,1380 @@
   @par Revision Reference:

   GUIDs defined in UEFI 2.7 Specification.

 

-**/

-#include "BaseTypes.h"

-

-#ifndef __CPER_GUID_H__

-#define __CPER_GUID_H__

-

-#pragma pack(1)

-

-#define EFI_ERROR_RECORD_SIGNATURE_START  SIGNATURE_32('C', 'P', 'E', 'R')

-#define EFI_ERROR_RECORD_SIGNATURE_END    0xFFFFFFFF

-

-#define EFI_ERROR_RECORD_REVISION  0x0101

-

-///

-/// Error Severity in Error Record Header and Error Section Descriptor

-///@{

-#define EFI_GENERIC_ERROR_RECOVERABLE  0x00000000

-#define EFI_GENERIC_ERROR_FATAL        0x00000001

-#define EFI_GENERIC_ERROR_CORRECTED    0x00000002

-#define EFI_GENERIC_ERROR_INFO         0x00000003

-///@}

-

-///

-/// The validation bit mask indicates the validity of the following fields

-/// in Error Record Header.

-///@{

-#define EFI_ERROR_RECORD_HEADER_PLATFORM_ID_VALID   BIT0

-#define EFI_ERROR_RECORD_HEADER_TIME_STAMP_VALID    BIT1

-#define EFI_ERROR_RECORD_HEADER_PARTITION_ID_VALID  BIT2

-///@}

-

-///

-/// Timestamp is precise if this bit is set and correlates to the time of the

-/// error event.

-///

-#define EFI_ERROR_TIME_STAMP_PRECISE  BIT0

-

-///

-/// The timestamp correlates to the time when the error information was collected

-/// by the system software and may not necessarily represent the time of the error

-/// event. The timestamp contains the local time in BCD format.

-///

-typedef struct {

-  UINT8    Seconds;

-  UINT8    Minutes;

-  UINT8    Hours;

-  UINT8    Flag;

-  UINT8    Day;

-  UINT8    Month;

-  UINT8    Year;

-  UINT8    Century;

-} EFI_ERROR_TIME_STAMP;

-

-///

-/// GUID value indicating the record association with an error event notification type.

-///@{

-#define EFI_EVENT_NOTIFICATION_TYEP_CMC_GUID \

-  { \

-    0x2DCE8BB1, 0xBDD7, 0x450e, { 0xB9, 0xAD, 0x9C, 0xF4, 0xEB, 0xD4, 0xF8, 0x90 } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYEP_CPE_GUID \

-  { \

-    0x4E292F96, 0xD843, 0x4a55, { 0xA8, 0xC2, 0xD4, 0x81, 0xF2, 0x7E, 0xBE, 0xEE } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYEP_MCE_GUID \

-  { \

-    0xE8F56FFE, 0x919C, 0x4cc5, { 0xBA, 0x88, 0x65, 0xAB, 0xE1, 0x49, 0x13, 0xBB } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYEP_PCIE_GUID \

-  { \

-    0xCF93C01F, 0x1A16, 0x4dfc, { 0xB8, 0xBC, 0x9C, 0x4D, 0xAF, 0x67, 0xC1, 0x04 } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYEP_INIT_GUID \

-  { \

-    0xCC5263E8, 0x9308, 0x454a, { 0x89, 0xD0, 0x34, 0x0B, 0xD3, 0x9B, 0xC9, 0x8E } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYEP_NMI_GUID \

-  { \

-    0x5BAD89FF, 0xB7E6, 0x42c9, { 0x81, 0x4A, 0xCF, 0x24, 0x85, 0xD6, 0xE9, 0x8A } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYEP_BOOT_GUID \

-  { \

-    0x3D61A466, 0xAB40, 0x409a, { 0xA6, 0x98, 0xF3, 0x62, 0xD4, 0x64, 0xB3, 0x8F } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYEP_DMAR_GUID \

-  { \

-    0x667DD791, 0xC6B3, 0x4c27, { 0x8A, 0x6B, 0x0F, 0x8E, 0x72, 0x2D, 0xEB, 0x41 } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYPE_DMAR_SEA \

-  { \

-    0x9A78788A, 0xBBE8, 0x11E4, { 0x80, 0x9E, 0x67, 0x61, 0x1E, 0x5D, 0x46, 0xB0 } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYPE_DMAR_SEI \

-  { \

-    0x5C284C81, 0xB0AE, 0x4E87, { 0xA3, 0x22, 0xB0, 0x4C, 0x85, 0x62, 0x43, 0x23 } \

-  }

-#define EFI_EVENT_NOTIFICATION_TYPE_DMAR_PEI \

-  { \

-    0x09A9D5AC, 0x5204, 0x4214, { 0x96, 0xE5, 0x94, 0x99, 0x2E, 0x75, 0x2B, 0xCD } \

-  }

-///@}

-

-///

-/// Error Record Header Flags

-///@{

-#define EFI_HW_ERROR_FLAGS_RECOVERED  0x00000001

-#define EFI_HW_ERROR_FLAGS_PREVERR    0x00000002

-#define EFI_HW_ERROR_FLAGS_SIMULATED  0x00000004

-///@}

-

-///

-/// Common error record header

-///

-typedef struct {

-  UINT32                  SignatureStart;

-  UINT16                  Revision;

-  UINT32                  SignatureEnd;

-  UINT16                  SectionCount;

-  UINT32                  ErrorSeverity;

-  UINT32                  ValidationBits;

-  UINT32                  RecordLength;

-  EFI_ERROR_TIME_STAMP    TimeStamp;

-  EFI_GUID                PlatformID;

-  EFI_GUID                PartitionID;

-  EFI_GUID                CreatorID;

-  EFI_GUID                NotificationType;

-  UINT64                  RecordID;

-  UINT32                  Flags;

-  UINT64                  PersistenceInfo;

-  UINT8                   Resv1[12];

-  ///

-  /// An array of SectionCount descriptors for the associated

-  /// sections. The number of valid sections is equivalent to the

-  /// SectionCount. The buffer size of the record may include

-  /// more space to dynamically add additional Section

-  /// Descriptors to the error record.

-  ///

-} EFI_COMMON_ERROR_RECORD_HEADER;

-

-#define EFI_ERROR_SECTION_REVISION  0x0100

-

-///

-/// Validity Fields in Error Section Descriptor.

-///

-#define EFI_ERROR_SECTION_FRU_ID_VALID      BIT0

-#define EFI_ERROR_SECTION_FRU_STRING_VALID  BIT1

-

-///

-/// Flag field contains information that describes the error section

-/// in Error Section Descriptor.

-///

-#define EFI_ERROR_SECTION_FLAGS_PRIMARY                   BIT0

-#define EFI_ERROR_SECTION_FLAGS_CONTAINMENT_WARNING       BIT1

-#define EFI_ERROR_SECTION_FLAGS_RESET                     BIT2

-#define EFI_ERROR_SECTION_FLAGS_ERROR_THRESHOLD_EXCEEDED  BIT3

-#define EFI_ERROR_SECTION_FLAGS_RESOURCE_NOT_ACCESSIBLE   BIT4

-#define EFI_ERROR_SECTION_FLAGS_LATENT_ERROR              BIT5

-

-///

-/// Error Sectition Type GUIDs in Error Section Descriptor

-///@{

-#define EFI_ERROR_SECTION_PROCESSOR_GENERIC_GUID \

-  { \

-    0x9876ccad, 0x47b4, 0x4bdb, { 0xb6, 0x5e, 0x16, 0xf1, 0x93, 0xc4, 0xf3, 0xdb } \

-  }

-#define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_GUID \

-  { \

-    0xdc3ea0b0, 0xa144, 0x4797, { 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d } \

-  }

-#define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_IA32X64_GUID \

-  { \

-    0xdc3ea0b0, 0xa144, 0x4797, { 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d } \

-  }

-#define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_ARM_GUID \

-  { \

-    0xe19e3d16, 0xbc11, 0x11e4, { 0x9c, 0xaa, 0xc2, 0x05, 0x1d, 0x5d, 0x46, 0xb0 } \

-  }

-#define EFI_ERROR_SECTION_PLATFORM_MEMORY_GUID \

-  { \

-    0xa5bc1114, 0x6f64, 0x4ede, { 0xb8, 0x63, 0x3e, 0x83, 0xed, 0x7c, 0x83, 0xb1 } \

-  }

-#define EFI_ERROR_SECTION_PLATFORM_MEMORY2_GUID \

-  { \

-    0x61EC04FC, 0x48E6, 0xD813, { 0x25, 0xC9, 0x8D, 0xAA, 0x44, 0x75, 0x0B, 0x12 } \

-  }

-#define EFI_ERROR_SECTION_PCIE_GUID \

-  { \

-    0xd995e954, 0xbbc1, 0x430f, { 0xad, 0x91, 0xb4, 0x4d, 0xcb, 0x3c, 0x6f, 0x35 } \

-  }

-#define EFI_ERROR_SECTION_FW_ERROR_RECORD_GUID \

-  { \

-    0x81212a96, 0x09ed, 0x4996, { 0x94, 0x71, 0x8d, 0x72, 0x9c, 0x8e, 0x69, 0xed } \

-  }

-#define EFI_ERROR_SECTION_PCI_PCIX_BUS_GUID \

-  { \

-    0xc5753963, 0x3b84, 0x4095, { 0xbf, 0x78, 0xed, 0xda, 0xd3, 0xf9, 0xc9, 0xdd } \

-  }

-#define EFI_ERROR_SECTION_PCI_DEVICE_GUID \

-  { \

-    0xeb5e4685, 0xca66, 0x4769, { 0xb6, 0xa2, 0x26, 0x06, 0x8b, 0x00, 0x13, 0x26 } \

-  }

-#define EFI_ERROR_SECTION_DMAR_GENERIC_GUID \

-  { \

-    0x5b51fef7, 0xc79d, 0x4434, { 0x8f, 0x1b, 0xaa, 0x62, 0xde, 0x3e, 0x2c, 0x64 } \

-  }

-#define EFI_ERROR_SECTION_DIRECTED_IO_DMAR_GUID \

-  { \

-    0x71761d37, 0x32b2, 0x45cd, { 0xa7, 0xd0, 0xb0, 0xfe, 0xdd, 0x93, 0xe8, 0xcf } \

-  }

-#define EFI_ERROR_SECTION_IOMMU_DMAR_GUID \

-  { \

-    0x036f84e1, 0x7f37, 0x428c, { 0xa7, 0x9e, 0x57, 0x5f, 0xdf, 0xaa, 0x84, 0xec } \

-  }

-///@}

-

-///

-/// Error Section Descriptor

-///

-typedef struct {

-  UINT32      SectionOffset;

-  UINT32      SectionLength;

-  UINT16      Revision;

-  UINT8       SecValidMask;

-  UINT8       Resv1;

-  UINT32      SectionFlags;

-  EFI_GUID    SectionType;

-  EFI_GUID    FruId;

-  UINT32      Severity;

-  CHAR8       FruString[20];

-} EFI_ERROR_SECTION_DESCRIPTOR;

-

-///

-/// The validation bit mask indicates whether or not each of the following fields are

-/// valid in Proessor Generic Error section.

-///@{

-#define EFI_GENERIC_ERROR_PROC_TYPE_VALID          BIT0

-#define EFI_GENERIC_ERROR_PROC_ISA_VALID           BIT1

-#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_VALID    BIT2

-#define EFI_GENERIC_ERROR_PROC_OPERATION_VALID     BIT3

-#define EFI_GENERIC_ERROR_PROC_FLAGS_VALID         BIT4

-#define EFI_GENERIC_ERROR_PROC_LEVEL_VALID         BIT5

-#define EFI_GENERIC_ERROR_PROC_VERSION_VALID       BIT6

-#define EFI_GENERIC_ERROR_PROC_BRAND_VALID         BIT7

-#define EFI_GENERIC_ERROR_PROC_ID_VALID            BIT8

-#define EFI_GENERIC_ERROR_PROC_TARGET_ADDR_VALID   BIT9

-#define EFI_GENERIC_ERROR_PROC_REQUESTER_ID_VALID  BIT10

-#define EFI_GENERIC_ERROR_PROC_RESPONDER_ID_VALID  BIT11

-#define EFI_GENERIC_ERROR_PROC_INST_IP_VALID       BIT12

-///@}

-

-///

-/// The type of the processor architecture in Proessor Generic Error section.

-///@{

-#define EFI_GENERIC_ERROR_PROC_TYPE_IA32_X64  0x00

-#define EFI_GENERIC_ERROR_PROC_TYPE_IA64      0x01

-#define EFI_GENERIC_ERROR_PROC_TYPE_ARM       0x02

-///@}

-

-///

-/// The type of the instruction set executing when the error occurred in Proessor

-/// Generic Error section.

-///@{

-#define EFI_GENERIC_ERROR_PROC_ISA_IA32         0x00

-#define EFI_GENERIC_ERROR_PROC_ISA_IA64         0x01

-#define EFI_GENERIC_ERROR_PROC_ISA_X64          0x02

-#define EFI_GENERIC_ERROR_PROC_ISA_ARM_A32_T32  0x03

-#define EFI_GENERIC_ERROR_PROC_ISA_ARM_A64      0x04

-///@}

-

-///

-/// The type of error that occurred in Proessor Generic Error section.

-///@{

-#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_UNKNOWN     0x00

-#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_CACHE       0x01

-#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_TLB         0x02

-#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_BUS         0x04

-#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_MICRO_ARCH  0x08

-///@}

-

-///

-/// The type of operation in Proessor Generic Error section.

-///@{

-#define EFI_GENERIC_ERROR_PROC_OPERATION_GENERIC           0x00

-#define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_READ         0x01

-#define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_WRITE        0x02

-#define EFI_GENERIC_ERROR_PROC_OPERATION_INSTRUCTION_EXEC  0x03

-///@}

-

-///

-/// Flags bit mask indicates additional information about the error in Proessor Generic

-/// Error section

-///@{

-#define EFI_GENERIC_ERROR_PROC_FLAGS_RESTARTABLE  BIT0

-#define EFI_GENERIC_ERROR_PROC_FLAGS_PRECISE_IP   BIT1

-#define EFI_GENERIC_ERROR_PROC_FLAGS_OVERFLOW     BIT2

-#define EFI_GENERIC_ERROR_PROC_FLAGS_CORRECTED    BIT3

-///@}

-

-///

-/// Processor Generic Error Section

-/// describes processor reported hardware errors for logical processors in the system.

-///

-typedef struct {

-  UINT64    ValidFields;

-  UINT8     Type;

-  UINT8     Isa;

-  UINT8     ErrorType;

-  UINT8     Operation;

-  UINT8     Flags;

-  UINT8     Level;

-  UINT16    Resv1;

-  UINT64    VersionInfo;

-  CHAR8     BrandString[128];

-  UINT64    ApicId;

-  UINT64    TargetAddr;

-  UINT64    RequestorId;

-  UINT64    ResponderId;

-  UINT64    InstructionIP;

-} EFI_PROCESSOR_GENERIC_ERROR_DATA;

-

-///

-/// IA32 and x64 Specific definitions.

-///

-

-///

-/// GUID value indicating the type of Processor Error Information structure

-/// in IA32/X64 Processor Error Information Structure.

-///@{

-#define EFI_IA32_X64_ERROR_TYPE_CACHE_CHECK_GUID \

-  { \

-    0xA55701F5, 0xE3EF, 0x43de, {0xAC, 0x72, 0x24, 0x9B, 0x57, 0x3F, 0xAD, 0x2C } \

-  }

-#define EFI_IA32_X64_ERROR_TYPE_TLB_CHECK_GUID \

-  { \

-    0xFC06B535, 0x5E1F, 0x4562, {0x9F, 0x25, 0x0A, 0x3B, 0x9A, 0xDB, 0x63, 0xC3 } \

-  }

-#define EFI_IA32_X64_ERROR_TYPE_BUS_CHECK_GUID \

-  { \

-    0x1CF3F8B3, 0xC5B1, 0x49a2, {0xAA, 0x59, 0x5E, 0xEF, 0x92, 0xFF, 0xA6, 0x3C } \

-  }

-#define EFI_IA32_X64_ERROR_TYPE_MS_CHECK_GUID \

-  { \

-    0x48AB7F57, 0xDC34, 0x4f6c, {0xA7, 0xD3, 0xB0, 0xB5, 0xB0, 0xA7, 0x43, 0x14 } \

-  }

-extern EFI_GUID   gEfiIa32x64ErrorTypeCacheCheckGuid;

-extern EFI_GUID   gEfiIa32x64ErrorTypeTlbCheckGuid;

-extern EFI_GUID   gEfiIa32x64ErrorTypeBusCheckGuid;

-extern EFI_GUID   gEfiIa32x64ErrorTypeMsCheckGuid;

-

-///@}

-

-///

-/// The validation bit mask indicates which fields in the IA32/X64 Processor

-/// Error Record structure are valid.

-///@{

-#define EFI_IA32_X64_PROCESSOR_ERROR_APIC_ID_VALID      BIT0

-#define EFI_IA32_X64_PROCESSOR_ERROR_CPU_ID_INFO_VALID  BIT1

-///@}

-

-///

-/// IA32/X64 Processor Error Record

-///

-typedef struct {

-  UINT64    ValidFields;

-  UINT64    ApicId;

-  UINT8     CpuIdInfo[48];

-} EFI_IA32_X64_PROCESSOR_ERROR_RECORD;

-

-///

-/// The validation bit mask indicates which fields in the Cache Check structure

-/// are valid.

-///@{

-#define EFI_CACHE_CHECK_TRANSACTION_TYPE_VALID  BIT0

-#define EFI_CACHE_CHECK_OPERATION_VALID         BIT1

-#define EFI_CACHE_CHECK_LEVEL_VALID             BIT2

-#define EFI_CACHE_CHECK_CONTEXT_CORRUPT_VALID   BIT3

-#define EFI_CACHE_CHECK_UNCORRECTED_VALID       BIT4

-#define EFI_CACHE_CHECK_PRECISE_IP_VALID        BIT5

-#define EFI_CACHE_CHECK_RESTARTABLE_VALID       BIT6

-#define EFI_CACHE_CHECK_OVERFLOW_VALID          BIT7

-///@}

-

-///

-/// Type of cache error in the Cache Check structure

-///@{

-#define EFI_CACHE_CHECK_ERROR_TYPE_INSTRUCTION  0

-#define EFI_CACHE_CHECK_ERROR_TYPE_DATA_ACCESS  1

-#define EFI_CACHE_CHECK_ERROR_TYPE_GENERIC      2

-///@}

-

-///

-/// Type of cache operation that caused the error in the Cache

-/// Check structure

-///@{

-#define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC            0

-#define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_READ       1

-#define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_WRITE      2

-#define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_READ          3

-#define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_WRITE         4

-#define EFI_CACHE_CHECK_OPERATION_TYPE_INSTRUCTION_FETCH  5

-#define EFI_CACHE_CHECK_OPERATION_TYPE_PREFETCH           6

-#define EFI_CACHE_CHECK_OPERATION_TYPE_EVICTION           7

-#define EFI_CACHE_CHECK_OPERATION_TYPE_SNOOP              8

-///@}

-

-///

-/// IA32/X64 Cache Check Structure

-///

-typedef struct {

-  UINT64    ValidFields      : 16;

-  UINT64    TransactionType  : 2;

-  UINT64    Operation        : 4;

-  UINT64    Level            : 3;

-  UINT64    ContextCorrupt   : 1;

-  UINT64    ErrorUncorrected : 1;

-  UINT64    PreciseIp        : 1;

-  UINT64    RestartableIp    : 1;

-  UINT64    Overflow         : 1;

-  UINT64    Resv1            : 34;

-} EFI_IA32_X64_CACHE_CHECK_INFO;

-

-///

-/// The validation bit mask indicates which fields in the TLB Check structure

-/// are valid.

-///@{

-#define EFI_TLB_CHECK_TRANSACTION_TYPE_VALID  BIT0

-#define EFI_TLB_CHECK_OPERATION_VALID         BIT1

-#define EFI_TLB_CHECK_LEVEL_VALID             BIT2

-#define EFI_TLB_CHECK_CONTEXT_CORRUPT_VALID   BIT3

-#define EFI_TLB_CHECK_UNCORRECTED_VALID       BIT4

-#define EFI_TLB_CHECK_PRECISE_IP_VALID        BIT5

-#define EFI_TLB_CHECK_RESTARTABLE_VALID       BIT6

-#define EFI_TLB_CHECK_OVERFLOW_VALID          BIT7

-///@}

-

-///

-/// Type of cache error in the TLB Check structure

-///@{

-#define EFI_TLB_CHECK_ERROR_TYPE_INSTRUCTION  0

-#define EFI_TLB_CHECK_ERROR_TYPE_DATA_ACCESS  1

-#define EFI_TLB_CHECK_ERROR_TYPE_GENERIC      2

-///@}

-

-///

-/// Type of cache operation that caused the error in the TLB

-/// Check structure

-///@{

-#define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC        0

-#define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_READ   1

-#define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_WRITE  2

-#define EFI_TLB_CHECK_OPERATION_TYPE_DATA_READ      3

-#define EFI_TLB_CHECK_OPERATION_TYPE_DATA_WRITE     4

-#define EFI_TLB_CHECK_OPERATION_TYPE_INST_FETCH     5

-#define EFI_TLB_CHECK_OPERATION_TYPE_PREFETCH       6

-///@}

-

-///

-/// IA32/X64 TLB Check Structure

-///

-typedef struct {

-  UINT64    ValidFields      : 16;

-  UINT64    TransactionType  : 2;

-  UINT64    Operation        : 4;

-  UINT64    Level            : 3;

-  UINT64    ContextCorrupt   : 1;

-  UINT64    ErrorUncorrected : 1;

-  UINT64    PreciseIp        : 1;

-  UINT64    RestartableIp    : 1;

-  UINT64    Overflow         : 1;

-  UINT64    Resv1            : 34;

-} EFI_IA32_X64_TLB_CHECK_INFO;

-

-///

-/// The validation bit mask indicates which fields in the MS Check structure

-/// are valid.

-///@{

-#define EFI_BUS_CHECK_TRANSACTION_TYPE_VALID    BIT0

-#define EFI_BUS_CHECK_OPERATION_VALID           BIT1

-#define EFI_BUS_CHECK_LEVEL_VALID               BIT2

-#define EFI_BUS_CHECK_CONTEXT_CORRUPT_VALID     BIT3

-#define EFI_BUS_CHECK_UNCORRECTED_VALID         BIT4

-#define EFI_BUS_CHECK_PRECISE_IP_VALID          BIT5

-#define EFI_BUS_CHECK_RESTARTABLE_VALID         BIT6

-#define EFI_BUS_CHECK_OVERFLOW_VALID            BIT7

-#define EFI_BUS_CHECK_PARTICIPATION_TYPE_VALID  BIT8

-#define EFI_BUS_CHECK_TIME_OUT_VALID            BIT9

-#define EFI_BUS_CHECK_ADDRESS_SPACE_VALID       BIT10

-///@}

-

-///

-/// Type of cache error in the Bus Check structure

-///@{

-#define EFI_BUS_CHECK_ERROR_TYPE_INSTRUCTION  0

-#define EFI_BUS_CHECK_ERROR_TYPE_DATA_ACCESS  1

-#define EFI_BUS_CHECK_ERROR_TYPE_GENERIC      2

-///@}

-

-///

-/// Type of cache operation that caused the error in the Bus

-/// Check structure

-///@{

-#define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC        0

-#define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_READ   1

-#define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_WRITE  2

-#define EFI_BUS_CHECK_OPERATION_TYPE_DATA_READ      3

-#define EFI_BUS_CHECK_OPERATION_TYPE_DATA_WRITE     4

-#define EFI_BUS_CHECK_OPERATION_TYPE_INST_FETCH     5

-#define EFI_BUS_CHECK_OPERATION_TYPE_PREFETCH       6

-///@}

-

-///

-/// Type of Participation

-///@{

-#define EFI_BUS_CHECK_PARTICIPATION_TYPE_REQUEST    0

-#define EFI_BUS_CHECK_PARTICIPATION_TYPE_RESPONDED  1

-#define EFI_BUS_CHECK_PARTICIPATION_TYPE_OBSERVED   2

-#define EFI_BUS_CHECK_PARTICIPATION_TYPE_GENERIC    3

-///@}

-

-///

-/// Type of Address Space

-///@{

-#define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_MEMORY    0

-#define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_RESERVED  1

-#define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_IO        2

-#define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_OTHER     3

-///@}

-

-///

-/// IA32/X64 Bus Check Structure

-///

-typedef struct {

-  UINT64    ValidFields       : 16;

-  UINT64    TransactionType   : 2;

-  UINT64    Operation         : 4;

-  UINT64    Level             : 3;

-  UINT64    ContextCorrupt    : 1;

-  UINT64    ErrorUncorrected  : 1;

-  UINT64    PreciseIp         : 1;

-  UINT64    RestartableIp     : 1;

-  UINT64    Overflow          : 1;

-  UINT64    ParticipationType : 2;

-  UINT64    TimeOut           : 1;

-  UINT64    AddressSpace      : 2;

-  UINT64    Resv1             : 29;

-} EFI_IA32_X64_BUS_CHECK_INFO;

-

-///

-/// The validation bit mask indicates which fields in the MS Check structure

-/// are valid.

-///@{

-#define EFI_MS_CHECK_ERROR_TYPE_VALID       BIT0

-#define EFI_MS_CHECK_CONTEXT_CORRUPT_VALID  BIT1

-#define EFI_MS_CHECK_UNCORRECTED_VALID      BIT2

-#define EFI_MS_CHECK_PRECISE_IP_VALID       BIT3

-#define EFI_MS_CHECK_RESTARTABLE_VALID      BIT4

-#define EFI_MS_CHECK_OVERFLOW_VALID         BIT5

-///@}

-

-///

-/// Error type identifies the operation that caused the error.

-///@{

-#define EFI_MS_CHECK_ERROR_TYPE_NO                     0

-#define EFI_MS_CHECK_ERROR_TYPE_UNCLASSIFIED           1

-#define EFI_MS_CHECK_ERROR_TYPE_MICROCODE_PARITY       2

-#define EFI_MS_CHECK_ERROR_TYPE_EXTERNAL               3

-#define EFI_MS_CHECK_ERROR_TYPE_FRC                    4

-#define EFI_MS_CHECK_ERROR_TYPE_INTERNAL_UNCLASSIFIED  5

-///@}

-

-///

-/// IA32/X64 MS Check Field Description

-///

-typedef struct {

-  UINT64    ValidFields      : 16;

-  UINT64    ErrorType        : 3;

-  UINT64    ContextCorrupt   : 1;

-  UINT64    ErrorUncorrected : 1;

-  UINT64    PreciseIp        : 1;

-  UINT64    RestartableIp    : 1;

-  UINT64    Overflow         : 1;

-  UINT64    Resv1            : 40;

-} EFI_IA32_X64_MS_CHECK_INFO;

-

-///

-/// IA32/X64 Check Information Item

-///

-typedef union {

-  EFI_IA32_X64_CACHE_CHECK_INFO    CacheCheck;

-  EFI_IA32_X64_TLB_CHECK_INFO      TlbCheck;

-  EFI_IA32_X64_BUS_CHECK_INFO      BusCheck;

-  EFI_IA32_X64_MS_CHECK_INFO       MsCheck;

-  UINT64                           Data64;

-} EFI_IA32_X64_CHECK_INFO_ITEM;

-

-///

-/// The validation bit mask indicates which fields in the IA32/X64 Processor Error

-/// Information Structure are valid.

-///@{

-#define EFI_IA32_X64_ERROR_PROC_CHECK_INFO_VALID    BIT0

-#define EFI_IA32_X64_ERROR_PROC_TARGET_ADDR_VALID   BIT1

-#define EFI_IA32_X64_ERROR_PROC_REQUESTER_ID_VALID  BIT2

-#define EFI_IA32_X64_ERROR_PROC_RESPONDER_ID_VALID  BIT3

-#define EFI_IA32_X64_ERROR_PROC_INST_IP_VALID       BIT4

-///@}

-

-///

-/// IA32/X64 Processor Error Information Structure

-///

-typedef struct {

-  EFI_GUID                        ErrorType;

-  UINT64                          ValidFields;

-  EFI_IA32_X64_CHECK_INFO_ITEM    CheckInfo;

-  UINT64                          TargetId;

-  UINT64                          RequestorId;

-  UINT64                          ResponderId;

-  UINT64                          InstructionIP;

-} EFI_IA32_X64_PROCESS_ERROR_INFO;

-

-///

-/// IA32/X64 Processor Context Information Structure

-///

-typedef struct {

-  UINT16    RegisterType;

-  UINT16    ArraySize;

-  UINT32    MsrAddress;

-  UINT64    MmRegisterAddress;

-  //

-  // This field will provide the contents of the actual registers or raw data.

-  // The number of Registers or size of the raw data reported is determined

-  // by (Array Size / 8) or otherwise specified by the context structure type

-  // definition.

-  //

-} EFI_IA32_X64_PROCESSOR_CONTEXT_INFO;

-

-///

-/// Register Context Type

-///@{

-#define EFI_REG_CONTEXT_TYPE_UNCLASSIFIED  0x0000

-#define EFI_REG_CONTEXT_TYPE_MSR           0x0001

-#define EFI_REG_CONTEXT_TYPE_IA32          0x0002

-#define EFI_REG_CONTEXT_TYPE_X64           0x0003

-#define EFI_REG_CONTEXT_TYPE_FXSAVE        0x0004

-#define EFI_REG_CONTEXT_TYPE_DR_IA32       0x0005

-#define EFI_REG_CONTEXT_TYPE_DR_X64        0x0006

-#define EFI_REG_CONTEXT_TYPE_MEM_MAP       0x0007

-///@}

-

-///

-/// IA32 Register State

-///

-typedef struct {

-  UINT32    Eax;

-  UINT32    Ebx;

-  UINT32    Ecx;

-  UINT32    Edx;

-  UINT32    Esi;

-  UINT32    Edi;

-  UINT32    Ebp;

-  UINT32    Esp;

-  UINT16    Cs;

-  UINT16    Ds;

-  UINT16    Ss;

-  UINT16    Es;

-  UINT16    Fs;

-  UINT16    Gs;

-  UINT32    Eflags;

-  UINT32    Eip;

-  UINT32    Cr0;

-  UINT32    Cr1;

-  UINT32    Cr2;

-  UINT32    Cr3;

-  UINT32    Cr4;

-  UINT32    Gdtr[2];

-  UINT32    Idtr[2];

-  UINT16    Ldtr;

-  UINT16    Tr;

-} EFI_CONTEXT_IA32_REGISTER_STATE;

-

-///

-/// X64 Register State

-///

-typedef struct {

-  UINT64    Rax;

-  UINT64    Rbx;

-  UINT64    Rcx;

-  UINT64    Rdx;

-  UINT64    Rsi;

-  UINT64    Rdi;

-  UINT64    Rbp;

-  UINT64    Rsp;

-  UINT64    R8;

-  UINT64    R9;

-  UINT64    R10;

-  UINT64    R11;

-  UINT64    R12;

-  UINT64    R13;

-  UINT64    R14;

-  UINT64    R15;

-  UINT16    Cs;

-  UINT16    Ds;

-  UINT16    Ss;

-  UINT16    Es;

-  UINT16    Fs;

-  UINT16    Gs;

-  UINT32    Resv1;

-  UINT64    Rflags;

-  UINT64    Rip;

-  UINT64    Cr0;

-  UINT64    Cr1;

-  UINT64    Cr2;

-  UINT64    Cr3;

-  UINT64    Cr4;

-  UINT64    Cr8;

-  UINT64    Gdtr[2];

-  UINT64    Idtr[2];

-  UINT16    Ldtr;

-  UINT16    Tr;

-} EFI_CONTEXT_X64_REGISTER_STATE;

-

-///

-/// The validation bit mask indicates each of the following field is in IA32/X64

-/// Processor Error Section.

-///

-typedef struct {

-  UINT64    ApicIdValid     : 1;

-  UINT64    CpuIdInforValid : 1;

-  UINT64    ErrorInfoNum    : 6;

-  UINT64    ContextNum      : 6;

-  UINT64    Resv1           : 50;

-} EFI_IA32_X64_VALID_BITS;

-

-///

-/// Error Status Fields

-///

-typedef struct {

-  UINT64    Resv1               : 8;

-  UINT64    Type                : 8;

-  UINT64    AddressSignal       : 1;      ///< Error in Address signals or in Address portion of transaction

-  UINT64    ControlSignal       : 1;      ///< Error in Control signals or in Control portion of transaction

-  UINT64    DataSignal          : 1;      ///< Error in Data signals or in Data portion of transaction

-  UINT64    DetectedByResponder : 1;      ///< Error detected by responder

-  UINT64    DetectedByRequester : 1;      ///< Error detected by requestor

-  UINT64    FirstError          : 1;      ///< First Error in the sequence - option field

-  UINT64    OverflowNotLogged   : 1;      ///< Additional errors were not logged due to lack of resources

-  UINT64    Resv2               : 41;

-} EFI_GENERIC_ERROR_STATUS;

-

-///

-/// CPER Generic Error Codes

-///

-#define CPER_GENERIC_ERROR_TYPES_KEYS (int []){1, 16, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}

-#define CPER_GENERIC_ERROR_TYPES_VALUES (const char*[]){"ERR_INTERNAL", "ERR_BUS", "ERR_MEM", "ERR_TLB", \

-    "ERR_CACHE", "ERR_FUNCTION", "ERR_SELFTEST", "ERR_FLOW", "ERR_MAP", "ERR_IMPROPER", "ERR_UNIMPL", \

-    "ERR_LOL", "ERR_RESPONSE", "ERR_PARITY", "ERR_PROTOCOL", "ERR_ERROR", "ERR_TIMEOUT", "ERR_POISONED"}

-#define CPER_GENERIC_ERROR_TYPES_DESCRIPTIONS (const char*[]){\

-    "Error detected internal to the component.", \

-    "Error detected in the bus.", \

-    "Storage error in memory (DRAM).", \

-    "Storage error in TLB.", \

-    "Storage error in cache.", \

-    "Error in one or more functional units.", \

-    "Component failed self test.", \

-    "Overflow or underflow of internal queue.", \

-    "Virtual address not found on IO-TLB or IO-PDIR.", \

-    "Improper access error.", \

-    "Access to a memory address which is not mapped to any component.", \

-    "Loss of Lockstep error.", \

-    "Response not associated with a request.", \

-    "Bus parity error (must also set the A, C, or D bits).", \

-    "Detection of a protocol error.", \

-    "Detection of a PATH_ERROR.", \

-    "Bus operation timeout.", \

-    "A read was issued to data that has been poisoned."}

-

-///

-/// Error Type

-///

-typedef enum {

-  ///

-  /// General Internal errors

-  ///

-  ErrorInternal = 1,

-  ErrorBus      = 16,

-  ///

-  /// Component Internal errors

-  ///

-  ErrorMemStorage     = 4,        // Error in memory device

-  ErrorTlbStorage     = 5,        // TLB error in cache

-  ErrorCacheStorage   = 6,

-  ErrorFunctionalUnit = 7,

-  ErrorSelftest       = 8,

-  ErrorOverflow       = 9,

-  ///

-  /// Bus internal errors

-  ///

-  ErrorVirtualMap      = 17,

-  ErrorAccessInvalid   = 18,      // Improper access

-  ErrorUnimplAccess    = 19,      // Unimplemented memory access

-  ErrorLossOfLockstep  = 20,

-  ErrorResponseInvalid = 21,       // Response not associated with request

-  ErrorParity          = 22,

-  ErrorProtocol        = 23,

-  ErrorPath            = 24,      // Detected path error

-  ErrorTimeout         = 25,      // Bus timeout

-  ErrorPoisoned        = 26       // Read data poisoned

-} EFI_GENERIC_ERROR_STATUS_ERROR_TYPE;

-

-///

-/// Validation bit mask indicates which fields in the memory error record are valid

-/// in Memory Error section

-///@{

-#define EFI_PLATFORM_MEMORY_ERROR_STATUS_VALID                  BIT0

-#define EFI_PLATFORM_MEMORY_PHY_ADDRESS_VALID                   BIT1

-#define EFI_PLATFORM_MEMORY_PHY_ADDRESS_MASK_VALID              BIT2

-#define EFI_PLATFORM_MEMORY_NODE_VALID                          BIT3

-#define EFI_PLATFORM_MEMORY_CARD_VALID                          BIT4

-#define EFI_PLATFORM_MEMORY_MODULE_VALID                        BIT5

-#define EFI_PLATFORM_MEMORY_BANK_VALID                          BIT6

-#define EFI_PLATFORM_MEMORY_DEVICE_VALID                        BIT7

-#define EFI_PLATFORM_MEMORY_ROW_VALID                           BIT8

-#define EFI_PLATFORM_MEMORY_COLUMN_VALID                        BIT9

-#define EFI_PLATFORM_MEMORY_BIT_POS_VALID                       BIT10

-#define EFI_PLATFORM_MEMORY_REQUESTOR_ID_VALID                  BIT11

-#define EFI_PLATFORM_MEMORY_RESPONDER_ID_VALID                  BIT12

-#define EFI_PLATFORM_MEMORY_TARGET_ID_VALID                     BIT13

-#define EFI_PLATFORM_MEMORY_ERROR_TYPE_VALID                    BIT14

-#define EFI_PLATFORM_MEMORY_ERROR_RANK_NUM_VALID                BIT15

-#define EFI_PLATFORM_MEMORY_ERROR_CARD_HANDLE_VALID             BIT16

-#define EFI_PLATFORM_MEMORY_ERROR_MODULE_HANDLE_VALID           BIT17

-#define EFI_PLATFORM_MEMORY_ERROR_EXTENDED_ROW_BIT_16_17_VALID  BIT18

-#define EFI_PLATFORM_MEMORY_ERROR_BANK_GROUP_VALID              BIT19

-#define EFI_PLATFORM_MEMORY_ERROR_BANK_ADDRESS_VALID            BIT20

-#define EFI_PLATFORM_MEMORY_ERROR_CHIP_IDENTIFICATION_VALID     BIT21

-///@}

-

-///

-/// Memory Error Type identifies the type of error that occurred in Memory

-/// Error section

-///@{

-#define EFI_PLATFORM_MEMORY_ERROR_UNKNOWN                 0x00

-#define EFI_PLATFORM_MEMORY_ERROR_NONE                    0x01

-#define EFI_PLATFORM_MEMORY_ERROR_SINGLEBIT_ECC           0x02

-#define EFI_PLATFORM_MEMORY_ERROR_MLTIBIT_ECC             0x03

-#define EFI_PLATFORM_MEMORY_ERROR_SINGLESYMBOLS_CHIPKILL  0x04

-#define EFI_PLATFORM_MEMORY_ERROR_MULTISYMBOL_CHIPKILL    0x05

-#define EFI_PLATFORM_MEMORY_ERROR_MATER_ABORT             0x06

-#define EFI_PLATFORM_MEMORY_ERROR_TARGET_ABORT            0x07

-#define EFI_PLATFORM_MEMORY_ERROR_PARITY                  0x08

-#define EFI_PLATFORM_MEMORY_ERROR_WDT                     0x09

-#define EFI_PLATFORM_MEMORY_ERROR_INVALID_ADDRESS         0x0A

-#define EFI_PLATFORM_MEMORY_ERROR_MIRROR_FAILED           0x0B

-#define EFI_PLATFORM_MEMORY_ERROR_SPARING                 0x0C

-#define EFI_PLATFORM_MEMORY_ERROR_SCRUB_CORRECTED         0x0D

-#define EFI_PLATFORM_MEMORY_ERROR_SCRUB_UNCORRECTED       0x0E

-#define EFI_PLATFORM_MEMORY_ERROR_MEMORY_MAP_EVENT        0x0F

-///@}

-

-///

-/// Memory Error Section

-///

-typedef struct {

-  UINT64                      ValidFields;

-  EFI_GENERIC_ERROR_STATUS    ErrorStatus;

-  UINT64                      PhysicalAddress;     // Error physical address

-  UINT64                      PhysicalAddressMask; // Grnaularity

-  UINT16                      Node;                // Node #

-  UINT16                      Card;

-  UINT16                      ModuleRank;        // Module or Rank#

-  UINT16                      Bank;

-  UINT16                      Device;

-  UINT16                      Row;

-  UINT16                      Column;

-  UINT16                      BitPosition;

-  UINT64                      RequestorId;

-  UINT64                      ResponderId;

-  UINT64                      TargetId;

-  UINT8                       ErrorType;

-  UINT8                       Extended;

-  UINT16                      RankNum;

-  UINT16                      CardHandle;

-  UINT16                      ModuleHandle;

-} EFI_PLATFORM_MEMORY_ERROR_DATA;

-

-///

-/// Validation bit mask indicates which fields in the memory error record 2 are valid

-/// in Memory Error section 2

-///@{

-#define EFI_PLATFORM_MEMORY2_ERROR_STATUS_VALID       BIT0

-#define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_VALID        BIT1

-#define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_MASK_VALID   BIT2

-#define EFI_PLATFORM_MEMORY2_NODE_VALID               BIT3

-#define EFI_PLATFORM_MEMORY2_CARD_VALID               BIT4

-#define EFI_PLATFORM_MEMORY2_MODULE_VALID             BIT5

-#define EFI_PLATFORM_MEMORY2_BANK_VALID               BIT6

-#define EFI_PLATFORM_MEMORY2_DEVICE_VALID             BIT7

-#define EFI_PLATFORM_MEMORY2_ROW_VALID                BIT8

-#define EFI_PLATFORM_MEMORY2_COLUMN_VALID             BIT9

-#define EFI_PLATFORM_MEMORY2_RANK_VALID               BIT10

-#define EFI_PLATFORM_MEMORY2_BIT_POS_VALID            BIT11

-#define EFI_PLATFORM_MEMORY2_CHIP_ID_VALID            BIT12

-#define EFI_PLATFORM_MEMORY2_MEMORY_ERROR_TYPE_VALID  BIT13

-#define EFI_PLATFORM_MEMORY2_STATUS_VALID             BIT14

-#define EFI_PLATFORM_MEMORY2_REQUESTOR_ID_VALID       BIT15

-#define EFI_PLATFORM_MEMORY2_RESPONDER_ID_VALID       BIT16

-#define EFI_PLATFORM_MEMORY2_TARGET_ID_VALID          BIT17

-#define EFI_PLATFORM_MEMORY2_CARD_HANDLE_VALID        BIT18

-#define EFI_PLATFORM_MEMORY2_MODULE_HANDLE_VALID      BIT19

-#define EFI_PLATFORM_MEMORY2_BANK_GROUP_VALID         BIT20

-#define EFI_PLATFORM_MEMORY2_BANK_ADDRESS_VALID       BIT21

-///@}

-

-///

-/// Memory Error Type identifies the type of error that occurred in Memory

-/// Error section 2

-///@{

-#define EFI_PLATFORM_MEMORY2_ERROR_UNKNOWN                0x00

-#define EFI_PLATFORM_MEMORY2_ERROR_NONE                   0x01

-#define EFI_PLATFORM_MEMORY2_ERROR_SINGLEBIT_ECC          0x02

-#define EFI_PLATFORM_MEMORY2_ERROR_MLTIBIT_ECC            0x03

-#define EFI_PLATFORM_MEMORY2_ERROR_SINGLESYMBOL_CHIPKILL  0x04

-#define EFI_PLATFORM_MEMORY2_ERROR_MULTISYMBOL_CHIPKILL   0x05

-#define EFI_PLATFORM_MEMORY2_ERROR_MASTER_ABORT           0x06

-#define EFI_PLATFORM_MEMORY2_ERROR_TARGET_ABORT           0x07

-#define EFI_PLATFORM_MEMORY2_ERROR_PARITY                 0x08

-#define EFI_PLATFORM_MEMORY2_ERROR_WDT                    0x09

-#define EFI_PLATFORM_MEMORY2_ERROR_INVALID_ADDRESS        0x0A

-#define EFI_PLATFORM_MEMORY2_ERROR_MIRROR_BROKEN          0x0B

-#define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_SPARING         0x0C

-#define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_CORRECTED        0x0D

-#define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_UNCORRECTED      0x0E

-#define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_MAP_EVENT       0x0F

-///@}

-

-///

-/// Memory Error Section 2

-///

-typedef struct {

-  UINT64                      ValidFields;

-  EFI_GENERIC_ERROR_STATUS    ErrorStatus;

-  UINT64                      PhysicalAddress;     // Error physical address

-  UINT64                      PhysicalAddressMask; // Grnaularity

-  UINT16                      Node;                // Node #

-  UINT16                      Card;

-  UINT16                      Module;             // Module or Rank#

-  UINT16                      Bank;

-  UINT32                      Device;

-  UINT32                      Row;

-  UINT32                      Column;

-  UINT32                      Rank;

-  UINT32                      BitPosition;

-  UINT8                       ChipId;

-  UINT8                       MemErrorType;

-  UINT8                       Status;

-  UINT8                       Reserved;

-  UINT64                      RequestorId;

-  UINT64                      ResponderId;

-  UINT64                      TargetId;

-  UINT32                      CardHandle;

-  UINT32                      ModuleHandle;

-} EFI_PLATFORM_MEMORY2_ERROR_DATA;

-

-///

-/// Validation bits mask indicates which of the following fields is valid

-/// in PCI Express Error Record.

-///@{

-#define EFI_PCIE_ERROR_PORT_TYPE_VALID        BIT0

-#define EFI_PCIE_ERROR_VERSION_VALID          BIT1

-#define EFI_PCIE_ERROR_COMMAND_STATUS_VALID   BIT2

-#define EFI_PCIE_ERROR_DEVICE_ID_VALID        BIT3

-#define EFI_PCIE_ERROR_SERIAL_NO_VALID        BIT4

-#define EFI_PCIE_ERROR_BRIDGE_CRL_STS_VALID   BIT5

-#define EFI_PCIE_ERROR_CAPABILITY_INFO_VALID  BIT6

-#define EFI_PCIE_ERROR_AER_INFO_VALID         BIT7

-///@}

-

-///

-/// PCIe Device/Port Type as defined in the PCI Express capabilities register

-///@{

-#define EFI_PCIE_ERROR_PORT_PCIE_ENDPOINT         0x00000000

-#define EFI_PCIE_ERROR_PORT_PCI_ENDPOINT          0x00000001

-#define EFI_PCIE_ERROR_PORT_ROOT_PORT             0x00000004

-#define EFI_PCIE_ERROR_PORT_UPSWITCH_PORT         0x00000005

-#define EFI_PCIE_ERROR_PORT_DOWNSWITCH_PORT       0x00000006

-#define EFI_PCIE_ERROR_PORT_PCIE_TO_PCI_BRIDGE    0x00000007

-#define EFI_PCIE_ERROR_PORT_PCI_TO_PCIE_BRIDGE    0x00000008

-#define EFI_PCIE_ERROR_PORT_ROOT_INT_ENDPOINT     0x00000009

-#define EFI_PCIE_ERROR_PORT_ROOT_EVENT_COLLECTOR  0x0000000A

-///@}

-

-///

-/// PCI Slot number

-///

-typedef struct {

-  UINT16    Resv1  : 3;

-  UINT16    Number : 13;

-} EFI_GENERIC_ERROR_PCI_SLOT;

-

-///

-/// PCIe Root Port PCI/bridge PCI compatible device number and

-/// bus number information to uniquely identify the root port or

-/// bridge. Default values for both the bus numbers is zero.

-///

-typedef struct {

-  UINT16                        VendorId;

-  UINT16                        DeviceId;

-  UINT8                         ClassCode[3];

-  UINT8                         Function;

-  UINT8                         Device;

-  UINT16                        Segment;

-  UINT8                         PrimaryOrDeviceBus;

-  UINT8                         SecondaryBus;

-  EFI_GENERIC_ERROR_PCI_SLOT    Slot;

-  UINT8                         Resv1;

-} EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID;

-

-///

-/// PCIe Capability Structure

-///

-typedef struct {

-  UINT8    PcieCap[60];

-} EFI_PCIE_ERROR_DATA_CAPABILITY;

-

-///

-/// PCIe Advanced Error Reporting Extended Capability Structure.

-///

-typedef struct {

-  UINT8    PcieAer[96];

-} EFI_PCIE_ERROR_DATA_AER;

-

-///

-/// PCI Express Error Record

-///

-typedef struct {

-  UINT64                                  ValidFields;

-  UINT32                                  PortType;

-  UINT32                                  Version;

-  UINT32                                  CommandStatus;

-  UINT32                                  Resv2;

-  EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID    DevBridge;

-  UINT64                                  SerialNo;

-  UINT32                                  BridgeControlStatus;

-  EFI_PCIE_ERROR_DATA_CAPABILITY          Capability;

-  EFI_PCIE_ERROR_DATA_AER                 AerInfo;

-} EFI_PCIE_ERROR_DATA;

-

-///

-/// Validation bits Indicates which of the following fields is valid

-/// in PCI/PCI-X Bus Error Section.

-///@{

-#define EFI_PCI_PCIX_BUS_ERROR_STATUS_VALID        BIT0

-#define EFI_PCI_PCIX_BUS_ERROR_TYPE_VALID          BIT1

-#define EFI_PCI_PCIX_BUS_ERROR_BUS_ID_VALID        BIT2

-#define EFI_PCI_PCIX_BUS_ERROR_BUS_ADDRESS_VALID   BIT3

-#define EFI_PCI_PCIX_BUS_ERROR_BUS_DATA_VALID      BIT4

-#define EFI_PCI_PCIX_BUS_ERROR_COMMAND_VALID       BIT5

-#define EFI_PCI_PCIX_BUS_ERROR_REQUESTOR_ID_VALID  BIT6

-#define EFI_PCI_PCIX_BUS_ERROR_COMPLETER_ID_VALID  BIT7

-#define EFI_PCI_PCIX_BUS_ERROR_TARGET_ID_VALID     BIT8

-///@}

-

-///

-/// PCI Bus Error Type in PCI/PCI-X Bus Error Section

-///@{

-#define EFI_PCI_PCIX_BUS_ERROR_UNKNOWN             0x0000

-#define EFI_PCI_PCIX_BUS_ERROR_DATA_PARITY         0x0001

-#define EFI_PCI_PCIX_BUS_ERROR_SYSTEM              0x0002

-#define EFI_PCI_PCIX_BUS_ERROR_MASTER_ABORT        0x0003

-#define EFI_PCI_PCIX_BUS_ERROR_BUS_TIMEOUT         0x0004

-#define EFI_PCI_PCIX_BUS_ERROR_MASTER_DATA_PARITY  0x0005

-#define EFI_PCI_PCIX_BUS_ERROR_ADDRESS_PARITY      0x0006

-#define EFI_PCI_PCIX_BUS_ERROR_COMMAND_PARITY      0x0007

-///@}

-

-///

-/// PCI/PCI-X Bus Error Section

-///

-typedef struct {

-  UINT64                      ValidFields;

-  EFI_GENERIC_ERROR_STATUS    ErrorStatus;

-  UINT16                      Type;

-  UINT16                      BusId;

-  UINT32                      Resv2;

-  UINT64                      BusAddress;

-  UINT64                      BusData;

-  UINT64                      BusCommand;

-  UINT64                      RequestorId;

-  UINT64                      ResponderId;

-  UINT64                      TargetId;

-} EFI_PCI_PCIX_BUS_ERROR_DATA;

-

-///

-/// Validation bits Indicates which of the following fields is valid

-/// in PCI/PCI-X Component Error Section.

-///@{

-#define EFI_PCI_PCIX_DEVICE_ERROR_STATUS_VALID         BIT0

-#define EFI_PCI_PCIX_DEVICE_ERROR_ID_INFO_VALID        BIT1

-#define EFI_PCI_PCIX_DEVICE_ERROR_MEM_NUM_VALID        BIT2

-#define EFI_PCI_PCIX_DEVICE_ERROR_IO_NUM_VALID         BIT3

-#define EFI_PCI_PCIX_DEVICE_ERROR_REG_DATA_PAIR_VALID  BIT4

-///@}

-

-///

-/// PCI/PCI-X Device Identification Information

-///

-typedef struct {

-  UINT16    VendorId;

-  UINT16    DeviceId;

-  UINT8     ClassCode[3];

-  UINT8     Function;

-  UINT8     Device;

-  UINT8     Bus;

-  UINT8     Segment;

-  UINT8     Resv1;

-  UINT32    Resv2;

-} EFI_GENERIC_ERROR_PCI_DEVICE_ID;

-

-///

-/// Identifies the type of firmware error record

-///@{

-#define EFI_FIRMWARE_ERROR_TYPE_IPF_SAL    0x00

-#define EFI_FIRMWARE_ERROR_TYPE_SOC_TYPE1  0x01

-#define EFI_FIRMWARE_ERROR_TYPE_SOC_TYPE2  0x02

-///@}

-

-///

-/// Firmware Error Record Section

-///

-typedef struct {

-  UINT8       ErrorType;

-  UINT8       Revision;

-  UINT8       Resv1[6];

-  UINT64      RecordId;

-  EFI_GUID    RecordIdGuid;

-} EFI_FIRMWARE_ERROR_DATA;

-

-///

-/// Fault Reason in DMAr Generic Error Section

-///@{

-#define EFI_DMA_FAULT_REASON_TABLE_ENTRY_NOT_PRESENT            0x01

-#define EFI_DMA_FAULT_REASON_TABLE_ENTRY_INVALID                0x02

-#define EFI_DMA_FAULT_REASON_ACCESS_MAPPING_TABLE_ERROR         0x03

-#define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_MAPPING_TABLE    0x04

-#define EFI_DMA_FAULT_REASON_ACCESS_ADDR_OUT_OF_SPACE           0x05

-#define EFI_DMA_FAULT_REASON_INVALID_ACCESS                     0x06

-#define EFI_DMA_FAULT_REASON_INVALID_REQUEST                    0x07

-#define EFI_DMA_FAULT_REASON_ACCESS_TRANSLATE_TABLE_ERROR       0x08

-#define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_TRANSLATE_TABLE  0x09

-#define EFI_DMA_FAULT_REASON_INVALID_COMMAOND                   0x0A

-#define EFI_DMA_FAULT_REASON_ACCESS_COMMAND_BUFFER_ERROR        0x0B

-///@}

-

-///

-/// DMA access type in DMAr Generic Error Section

-///@{

-#define EFI_DMA_ACCESS_TYPE_READ   0x00

-#define EFI_DMA_ACCESS_TYPE_WRITE  0x01

-///@}

-

-///

-/// DMA address type in DMAr Generic Error Section

-///@{

-#define EFI_DMA_ADDRESS_UNTRANSLATED  0x00

-#define EFI_DMA_ADDRESS_TRANSLATION   0x01

-///@}

-

-///

-/// Architecture type in DMAr Generic Error Section

-///@{

-#define EFI_DMA_ARCH_TYPE_VT     0x01

-#define EFI_DMA_ARCH_TYPE_IOMMU  0x02

-///@}

-

-///

-/// DMAr Generic Error Section

-///

-typedef struct {

-  UINT16    RequesterId;

-  UINT16    SegmentNumber;

-  UINT8     FaultReason;

-  UINT8     AccessType;

-  UINT8     AddressType;

-  UINT8     ArchType;

-  UINT64    DeviceAddr;

-  UINT8     Resv1[16];

-} EFI_DMAR_GENERIC_ERROR_DATA;

-

-///

-/// Intel VT for Directed I/O specific DMAr Errors

-///

-typedef struct {

-  UINT8     Version;

-  UINT8     Revision;

-  UINT8     OemId[6];

-  UINT64    Capability;

-  UINT64    CapabilityEx;

-  UINT32    GlobalCommand;

-  UINT32    GlobalStatus;

-  UINT32    FaultStatus;

-  UINT8     Resv1[12];

-  UINT64    FaultRecord[2];

-  UINT64    RootEntry[2];

-  UINT64    ContextEntry[2];

-  UINT64    PteL6;

-  UINT64    PteL5;

-  UINT64    PteL4;

-  UINT64    PteL3;

-  UINT64    PteL2;

-  UINT64    PteL1;

-} EFI_DIRECTED_IO_DMAR_ERROR_DATA;

-

-///

-/// IOMMU specific DMAr Errors

-///

-typedef struct {

-  UINT8     Revision;

-  UINT8     Resv1[7];

-  UINT64    Control;

-  UINT64    Status;

-  UINT8     Resv2[8];

-  UINT64    EventLogEntry[2];

-  UINT8     Resv3[16];

-  UINT64    DeviceTableEntry[4];

-  UINT64    PteL6;

-  UINT64    PteL5;

-  UINT64    PteL4;

-  UINT64    PteL3;

-  UINT64    PteL2;

-  UINT64    PteL1;

-} EFI_IOMMU_DMAR_ERROR_DATA;

-

-extern EFI_GUID   gEfiEventNotificationTypeCmcGuid;

-extern EFI_GUID   gEfiEventNotificationTypeCpeGuid;

-extern EFI_GUID   gEfiEventNotificationTypeMceGuid;

-extern EFI_GUID   gEfiEventNotificationTypePcieGuid;

-extern EFI_GUID   gEfiEventNotificationTypeInitGuid;

-extern EFI_GUID   gEfiEventNotificationTypeNmiGuid;

-extern EFI_GUID   gEfiEventNotificationTypeBootGuid;

-extern EFI_GUID   gEfiEventNotificationTypeDmarGuid;

-extern EFI_GUID   gEfiEventNotificationTypeSeaGuid;

-extern EFI_GUID   gEfiEventNotificationTypeSeiGuid;

-extern EFI_GUID   gEfiEventNotificationTypePeiGuid;

-extern EFI_GUID   gEfiEventNotificationTypeCxlGuid;

-extern EFI_GUID   gEfiProcessorGenericErrorSectionGuid;

-extern EFI_GUID   gEfiProcessorSpecificErrorSectionGuid;

-extern EFI_GUID   gEfiIa32X64ProcessorErrorSectionGuid;

-extern EFI_GUID   gEfiIpfProcessorErrorSectionGuid;

-extern EFI_GUID   gEfiArmProcessorErrorSectionGuid;

-extern EFI_GUID   gEfiPlatformMemoryErrorSectionGuid;

-extern EFI_GUID   gEfiPlatformMemoryError2SectionGuid;

-extern EFI_GUID   gEfiPcieErrorSectionGuid;

-extern EFI_GUID   gEfiFirmwareErrorSectionGuid;

-extern EFI_GUID   gEfiPciBusErrorSectionGuid;

-extern EFI_GUID   gEfiPciDevErrorSectionGuid;

-extern EFI_GUID   gEfiDMArGenericErrorSectionGuid;

-extern EFI_GUID   gEfiDirectedIoDMArErrorSectionGuid;

-extern EFI_GUID   gEfiIommuDMArErrorSectionGuid;

-extern EFI_GUID   gEfiCcixPerLogErrorSectionGuid;

-extern EFI_GUID   gEfiCxlProtocolErrorSectionGuid;

-extern EFI_GUID   gEfiCxlGeneralMediaErrorSectionGuid;

-extern EFI_GUID   gEfiCxlDramEventErrorSectionGuid;

-extern EFI_GUID   gEfiCxlMemoryModuleErrorSectionGuid;

-extern EFI_GUID   gEfiCxlPhysicalSwitchErrorSectionGuid;

-extern EFI_GUID   gEfiCxlVirtualSwitchErrorSectionGuid;

-extern EFI_GUID   gEfiCxlMldPortErrorSectionGuid;

-#pragma pack()

-

-#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)

-///

-/// IA32 and x64 Specific definitions.

-///

-

-extern EFI_GUID  gEfiIa32X64ErrorTypeCacheCheckGuid;

-extern EFI_GUID  gEfiIa32X64ErrorTypeTlbCheckGuid;

-extern EFI_GUID  gEfiIa32X64ErrorTypeBusCheckGuid;

-extern EFI_GUID  gEfiIa32X64ErrorTypeMsCheckGuid;

-

-#endif

-

-#endif

+**/
+#include "BaseTypes.h"
+
+#ifndef __CPER_GUID_H__
+#define __CPER_GUID_H__
+
+#pragma pack(1)
+
+#define EFI_ERROR_RECORD_SIGNATURE_START SIGNATURE_32('C', 'P', 'E', 'R')
+#define EFI_ERROR_RECORD_SIGNATURE_END	 0xFFFFFFFF
+
+#define EFI_ERROR_RECORD_REVISION 0x0101
+
+///
+/// Error Severity in Error Record Header and Error Section Descriptor
+///@{
+#define EFI_GENERIC_ERROR_RECOVERABLE 0x00000000
+#define EFI_GENERIC_ERROR_FATAL	      0x00000001
+#define EFI_GENERIC_ERROR_CORRECTED   0x00000002
+#define EFI_GENERIC_ERROR_INFO	      0x00000003
+///@}
+
+///
+/// The validation bit mask indicates the validity of the following fields
+/// in Error Record Header.
+///@{
+#define EFI_ERROR_RECORD_HEADER_PLATFORM_ID_VALID  BIT0
+#define EFI_ERROR_RECORD_HEADER_TIME_STAMP_VALID   BIT1
+#define EFI_ERROR_RECORD_HEADER_PARTITION_ID_VALID BIT2
+///@}
+
+///
+/// Timestamp is precise if this bit is set and correlates to the time of the
+/// error event.
+///
+#define EFI_ERROR_TIME_STAMP_PRECISE BIT0
+
+///
+/// The timestamp correlates to the time when the error information was collected
+/// by the system software and may not necessarily represent the time of the error
+/// event. The timestamp contains the local time in BCD format.
+///
+typedef struct {
+	UINT8 Seconds;
+	UINT8 Minutes;
+	UINT8 Hours;
+	UINT8 Flag;
+	UINT8 Day;
+	UINT8 Month;
+	UINT8 Year;
+	UINT8 Century;
+} EFI_ERROR_TIME_STAMP;
+
+///
+/// GUID value indicating the record association with an error event notification type.
+///@{
+#define EFI_EVENT_NOTIFICATION_TYEP_CMC_GUID                                   \
+	{                                                                      \
+		0x2DCE8BB1, 0xBDD7, 0x450e,                                    \
+		{                                                              \
+			0xB9, 0xAD, 0x9C, 0xF4, 0xEB, 0xD4, 0xF8, 0x90         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYEP_CPE_GUID                                   \
+	{                                                                      \
+		0x4E292F96, 0xD843, 0x4a55,                                    \
+		{                                                              \
+			0xA8, 0xC2, 0xD4, 0x81, 0xF2, 0x7E, 0xBE, 0xEE         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYEP_MCE_GUID                                   \
+	{                                                                      \
+		0xE8F56FFE, 0x919C, 0x4cc5,                                    \
+		{                                                              \
+			0xBA, 0x88, 0x65, 0xAB, 0xE1, 0x49, 0x13, 0xBB         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYEP_PCIE_GUID                                  \
+	{                                                                      \
+		0xCF93C01F, 0x1A16, 0x4dfc,                                    \
+		{                                                              \
+			0xB8, 0xBC, 0x9C, 0x4D, 0xAF, 0x67, 0xC1, 0x04         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYEP_INIT_GUID                                  \
+	{                                                                      \
+		0xCC5263E8, 0x9308, 0x454a,                                    \
+		{                                                              \
+			0x89, 0xD0, 0x34, 0x0B, 0xD3, 0x9B, 0xC9, 0x8E         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYEP_NMI_GUID                                   \
+	{                                                                      \
+		0x5BAD89FF, 0xB7E6, 0x42c9,                                    \
+		{                                                              \
+			0x81, 0x4A, 0xCF, 0x24, 0x85, 0xD6, 0xE9, 0x8A         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYEP_BOOT_GUID                                  \
+	{                                                                      \
+		0x3D61A466, 0xAB40, 0x409a,                                    \
+		{                                                              \
+			0xA6, 0x98, 0xF3, 0x62, 0xD4, 0x64, 0xB3, 0x8F         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYEP_DMAR_GUID                                  \
+	{                                                                      \
+		0x667DD791, 0xC6B3, 0x4c27,                                    \
+		{                                                              \
+			0x8A, 0x6B, 0x0F, 0x8E, 0x72, 0x2D, 0xEB, 0x41         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYPE_DMAR_SEA                                   \
+	{                                                                      \
+		0x9A78788A, 0xBBE8, 0x11E4,                                    \
+		{                                                              \
+			0x80, 0x9E, 0x67, 0x61, 0x1E, 0x5D, 0x46, 0xB0         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYPE_DMAR_SEI                                   \
+	{                                                                      \
+		0x5C284C81, 0xB0AE, 0x4E87,                                    \
+		{                                                              \
+			0xA3, 0x22, 0xB0, 0x4C, 0x85, 0x62, 0x43, 0x23         \
+		}                                                              \
+	}
+#define EFI_EVENT_NOTIFICATION_TYPE_DMAR_PEI                                   \
+	{                                                                      \
+		0x09A9D5AC, 0x5204, 0x4214,                                    \
+		{                                                              \
+			0x96, 0xE5, 0x94, 0x99, 0x2E, 0x75, 0x2B, 0xCD         \
+		}                                                              \
+	}
+///@}
+
+///
+/// Error Record Header Flags
+///@{
+#define EFI_HW_ERROR_FLAGS_RECOVERED 0x00000001
+#define EFI_HW_ERROR_FLAGS_PREVERR   0x00000002
+#define EFI_HW_ERROR_FLAGS_SIMULATED 0x00000004
+///@}
+
+///
+/// Common error record header
+///
+typedef struct {
+	UINT32 SignatureStart;
+	UINT16 Revision;
+	UINT32 SignatureEnd;
+	UINT16 SectionCount;
+	UINT32 ErrorSeverity;
+	UINT32 ValidationBits;
+	UINT32 RecordLength;
+	EFI_ERROR_TIME_STAMP TimeStamp;
+	EFI_GUID PlatformID;
+	EFI_GUID PartitionID;
+	EFI_GUID CreatorID;
+	EFI_GUID NotificationType;
+	UINT64 RecordID;
+	UINT32 Flags;
+	UINT64 PersistenceInfo;
+	UINT8 Resv1[12];
+	///
+	/// An array of SectionCount descriptors for the associated
+	/// sections. The number of valid sections is equivalent to the
+	/// SectionCount. The buffer size of the record may include
+	/// more space to dynamically add additional Section
+	/// Descriptors to the error record.
+	///
+} EFI_COMMON_ERROR_RECORD_HEADER;
+
+#define EFI_ERROR_SECTION_REVISION 0x0100
+
+///
+/// Validity Fields in Error Section Descriptor.
+///
+#define EFI_ERROR_SECTION_FRU_ID_VALID	   BIT0
+#define EFI_ERROR_SECTION_FRU_STRING_VALID BIT1
+
+///
+/// Flag field contains information that describes the error section
+/// in Error Section Descriptor.
+///
+#define EFI_ERROR_SECTION_FLAGS_PRIMARY			 BIT0
+#define EFI_ERROR_SECTION_FLAGS_CONTAINMENT_WARNING	 BIT1
+#define EFI_ERROR_SECTION_FLAGS_RESET			 BIT2
+#define EFI_ERROR_SECTION_FLAGS_ERROR_THRESHOLD_EXCEEDED BIT3
+#define EFI_ERROR_SECTION_FLAGS_RESOURCE_NOT_ACCESSIBLE	 BIT4
+#define EFI_ERROR_SECTION_FLAGS_LATENT_ERROR		 BIT5
+
+///
+/// Error Sectition Type GUIDs in Error Section Descriptor
+///@{
+#define EFI_ERROR_SECTION_PROCESSOR_GENERIC_GUID                               \
+	{                                                                      \
+		0x9876ccad, 0x47b4, 0x4bdb,                                    \
+		{                                                              \
+			0xb6, 0x5e, 0x16, 0xf1, 0x93, 0xc4, 0xf3, 0xdb         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_GUID                              \
+	{                                                                      \
+		0xdc3ea0b0, 0xa144, 0x4797,                                    \
+		{                                                              \
+			0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_IA32X64_GUID                      \
+	{                                                                      \
+		0xdc3ea0b0, 0xa144, 0x4797,                                    \
+		{                                                              \
+			0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_ARM_GUID                          \
+	{                                                                      \
+		0xe19e3d16, 0xbc11, 0x11e4,                                    \
+		{                                                              \
+			0x9c, 0xaa, 0xc2, 0x05, 0x1d, 0x5d, 0x46, 0xb0         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_PLATFORM_MEMORY_GUID                                 \
+	{                                                                      \
+		0xa5bc1114, 0x6f64, 0x4ede,                                    \
+		{                                                              \
+			0xb8, 0x63, 0x3e, 0x83, 0xed, 0x7c, 0x83, 0xb1         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_PLATFORM_MEMORY2_GUID                                \
+	{                                                                      \
+		0x61EC04FC, 0x48E6, 0xD813,                                    \
+		{                                                              \
+			0x25, 0xC9, 0x8D, 0xAA, 0x44, 0x75, 0x0B, 0x12         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_PCIE_GUID                                            \
+	{                                                                      \
+		0xd995e954, 0xbbc1, 0x430f,                                    \
+		{                                                              \
+			0xad, 0x91, 0xb4, 0x4d, 0xcb, 0x3c, 0x6f, 0x35         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_FW_ERROR_RECORD_GUID                                 \
+	{                                                                      \
+		0x81212a96, 0x09ed, 0x4996,                                    \
+		{                                                              \
+			0x94, 0x71, 0x8d, 0x72, 0x9c, 0x8e, 0x69, 0xed         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_PCI_PCIX_BUS_GUID                                    \
+	{                                                                      \
+		0xc5753963, 0x3b84, 0x4095,                                    \
+		{                                                              \
+			0xbf, 0x78, 0xed, 0xda, 0xd3, 0xf9, 0xc9, 0xdd         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_PCI_DEVICE_GUID                                      \
+	{                                                                      \
+		0xeb5e4685, 0xca66, 0x4769,                                    \
+		{                                                              \
+			0xb6, 0xa2, 0x26, 0x06, 0x8b, 0x00, 0x13, 0x26         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_DMAR_GENERIC_GUID                                    \
+	{                                                                      \
+		0x5b51fef7, 0xc79d, 0x4434,                                    \
+		{                                                              \
+			0x8f, 0x1b, 0xaa, 0x62, 0xde, 0x3e, 0x2c, 0x64         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_DIRECTED_IO_DMAR_GUID                                \
+	{                                                                      \
+		0x71761d37, 0x32b2, 0x45cd,                                    \
+		{                                                              \
+			0xa7, 0xd0, 0xb0, 0xfe, 0xdd, 0x93, 0xe8, 0xcf         \
+		}                                                              \
+	}
+#define EFI_ERROR_SECTION_IOMMU_DMAR_GUID                                      \
+	{                                                                      \
+		0x036f84e1, 0x7f37, 0x428c,                                    \
+		{                                                              \
+			0xa7, 0x9e, 0x57, 0x5f, 0xdf, 0xaa, 0x84, 0xec         \
+		}                                                              \
+	}
+///@}
+
+///
+/// Error Section Descriptor
+///
+typedef struct {
+	UINT32 SectionOffset;
+	UINT32 SectionLength;
+	UINT16 Revision;
+	UINT8 SecValidMask;
+	UINT8 Resv1;
+	UINT32 SectionFlags;
+	EFI_GUID SectionType;
+	EFI_GUID FruId;
+	UINT32 Severity;
+	CHAR8 FruString[20];
+} EFI_ERROR_SECTION_DESCRIPTOR;
+
+///
+/// The validation bit mask indicates whether or not each of the following fields are
+/// valid in Proessor Generic Error section.
+///@{
+#define EFI_GENERIC_ERROR_PROC_TYPE_VALID	  BIT0
+#define EFI_GENERIC_ERROR_PROC_ISA_VALID	  BIT1
+#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_VALID	  BIT2
+#define EFI_GENERIC_ERROR_PROC_OPERATION_VALID	  BIT3
+#define EFI_GENERIC_ERROR_PROC_FLAGS_VALID	  BIT4
+#define EFI_GENERIC_ERROR_PROC_LEVEL_VALID	  BIT5
+#define EFI_GENERIC_ERROR_PROC_VERSION_VALID	  BIT6
+#define EFI_GENERIC_ERROR_PROC_BRAND_VALID	  BIT7
+#define EFI_GENERIC_ERROR_PROC_ID_VALID		  BIT8
+#define EFI_GENERIC_ERROR_PROC_TARGET_ADDR_VALID  BIT9
+#define EFI_GENERIC_ERROR_PROC_REQUESTER_ID_VALID BIT10
+#define EFI_GENERIC_ERROR_PROC_RESPONDER_ID_VALID BIT11
+#define EFI_GENERIC_ERROR_PROC_INST_IP_VALID	  BIT12
+///@}
+
+///
+/// The type of the processor architecture in Proessor Generic Error section.
+///@{
+#define EFI_GENERIC_ERROR_PROC_TYPE_IA32_X64 0x00
+#define EFI_GENERIC_ERROR_PROC_TYPE_IA64     0x01
+#define EFI_GENERIC_ERROR_PROC_TYPE_ARM	     0x02
+///@}
+
+///
+/// The type of the instruction set executing when the error occurred in Proessor
+/// Generic Error section.
+///@{
+#define EFI_GENERIC_ERROR_PROC_ISA_IA32	       0x00
+#define EFI_GENERIC_ERROR_PROC_ISA_IA64	       0x01
+#define EFI_GENERIC_ERROR_PROC_ISA_X64	       0x02
+#define EFI_GENERIC_ERROR_PROC_ISA_ARM_A32_T32 0x03
+#define EFI_GENERIC_ERROR_PROC_ISA_ARM_A64     0x04
+///@}
+
+///
+/// The type of error that occurred in Proessor Generic Error section.
+///@{
+#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_UNKNOWN    0x00
+#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_CACHE	     0x01
+#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_TLB	     0x02
+#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_BUS	     0x04
+#define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_MICRO_ARCH 0x08
+///@}
+
+///
+/// The type of operation in Proessor Generic Error section.
+///@{
+#define EFI_GENERIC_ERROR_PROC_OPERATION_GENERIC	  0x00
+#define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_READ	  0x01
+#define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_WRITE	  0x02
+#define EFI_GENERIC_ERROR_PROC_OPERATION_INSTRUCTION_EXEC 0x03
+///@}
+
+///
+/// Flags bit mask indicates additional information about the error in Proessor Generic
+/// Error section
+///@{
+#define EFI_GENERIC_ERROR_PROC_FLAGS_RESTARTABLE BIT0
+#define EFI_GENERIC_ERROR_PROC_FLAGS_PRECISE_IP	 BIT1
+#define EFI_GENERIC_ERROR_PROC_FLAGS_OVERFLOW	 BIT2
+#define EFI_GENERIC_ERROR_PROC_FLAGS_CORRECTED	 BIT3
+///@}
+
+///
+/// Processor Generic Error Section
+/// describes processor reported hardware errors for logical processors in the system.
+///
+typedef struct {
+	UINT64 ValidFields;
+	UINT8 Type;
+	UINT8 Isa;
+	UINT8 ErrorType;
+	UINT8 Operation;
+	UINT8 Flags;
+	UINT8 Level;
+	UINT16 Resv1;
+	UINT64 VersionInfo;
+	CHAR8 BrandString[128];
+	UINT64 ApicId;
+	UINT64 TargetAddr;
+	UINT64 RequestorId;
+	UINT64 ResponderId;
+	UINT64 InstructionIP;
+} EFI_PROCESSOR_GENERIC_ERROR_DATA;
+
+///
+/// IA32 and x64 Specific definitions.
+///
+
+///
+/// GUID value indicating the type of Processor Error Information structure
+/// in IA32/X64 Processor Error Information Structure.
+///@{
+#define EFI_IA32_X64_ERROR_TYPE_CACHE_CHECK_GUID                               \
+	{                                                                      \
+		0xA55701F5, 0xE3EF, 0x43de,                                    \
+		{                                                              \
+			0xAC, 0x72, 0x24, 0x9B, 0x57, 0x3F, 0xAD, 0x2C         \
+		}                                                              \
+	}
+#define EFI_IA32_X64_ERROR_TYPE_TLB_CHECK_GUID                                 \
+	{                                                                      \
+		0xFC06B535, 0x5E1F, 0x4562,                                    \
+		{                                                              \
+			0x9F, 0x25, 0x0A, 0x3B, 0x9A, 0xDB, 0x63, 0xC3         \
+		}                                                              \
+	}
+#define EFI_IA32_X64_ERROR_TYPE_BUS_CHECK_GUID                                 \
+	{                                                                      \
+		0x1CF3F8B3, 0xC5B1, 0x49a2,                                    \
+		{                                                              \
+			0xAA, 0x59, 0x5E, 0xEF, 0x92, 0xFF, 0xA6, 0x3C         \
+		}                                                              \
+	}
+#define EFI_IA32_X64_ERROR_TYPE_MS_CHECK_GUID                                  \
+	{                                                                      \
+		0x48AB7F57, 0xDC34, 0x4f6c,                                    \
+		{                                                              \
+			0xA7, 0xD3, 0xB0, 0xB5, 0xB0, 0xA7, 0x43, 0x14         \
+		}                                                              \
+	}
+extern EFI_GUID gEfiIa32x64ErrorTypeCacheCheckGuid;
+extern EFI_GUID gEfiIa32x64ErrorTypeTlbCheckGuid;
+extern EFI_GUID gEfiIa32x64ErrorTypeBusCheckGuid;
+extern EFI_GUID gEfiIa32x64ErrorTypeMsCheckGuid;
+
+///@}
+
+///
+/// The validation bit mask indicates which fields in the IA32/X64 Processor
+/// Error Record structure are valid.
+///@{
+#define EFI_IA32_X64_PROCESSOR_ERROR_APIC_ID_VALID     BIT0
+#define EFI_IA32_X64_PROCESSOR_ERROR_CPU_ID_INFO_VALID BIT1
+///@}
+
+///
+/// IA32/X64 Processor Error Record
+///
+typedef struct {
+	UINT64 ValidFields;
+	UINT64 ApicId;
+	UINT8 CpuIdInfo[48];
+} EFI_IA32_X64_PROCESSOR_ERROR_RECORD;
+
+///
+/// The validation bit mask indicates which fields in the Cache Check structure
+/// are valid.
+///@{
+#define EFI_CACHE_CHECK_TRANSACTION_TYPE_VALID BIT0
+#define EFI_CACHE_CHECK_OPERATION_VALID	       BIT1
+#define EFI_CACHE_CHECK_LEVEL_VALID	       BIT2
+#define EFI_CACHE_CHECK_CONTEXT_CORRUPT_VALID  BIT3
+#define EFI_CACHE_CHECK_UNCORRECTED_VALID      BIT4
+#define EFI_CACHE_CHECK_PRECISE_IP_VALID       BIT5
+#define EFI_CACHE_CHECK_RESTARTABLE_VALID      BIT6
+#define EFI_CACHE_CHECK_OVERFLOW_VALID	       BIT7
+///@}
+
+///
+/// Type of cache error in the Cache Check structure
+///@{
+#define EFI_CACHE_CHECK_ERROR_TYPE_INSTRUCTION 0
+#define EFI_CACHE_CHECK_ERROR_TYPE_DATA_ACCESS 1
+#define EFI_CACHE_CHECK_ERROR_TYPE_GENERIC     2
+///@}
+
+///
+/// Type of cache operation that caused the error in the Cache
+/// Check structure
+///@{
+#define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC		 0
+#define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_READ	 1
+#define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_WRITE	 2
+#define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_READ	 3
+#define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_WRITE	 4
+#define EFI_CACHE_CHECK_OPERATION_TYPE_INSTRUCTION_FETCH 5
+#define EFI_CACHE_CHECK_OPERATION_TYPE_PREFETCH		 6
+#define EFI_CACHE_CHECK_OPERATION_TYPE_EVICTION		 7
+#define EFI_CACHE_CHECK_OPERATION_TYPE_SNOOP		 8
+///@}
+
+///
+/// IA32/X64 Cache Check Structure
+///
+typedef struct {
+	UINT64 ValidFields : 16;
+	UINT64 TransactionType : 2;
+	UINT64 Operation : 4;
+	UINT64 Level : 3;
+	UINT64 ContextCorrupt : 1;
+	UINT64 ErrorUncorrected : 1;
+	UINT64 PreciseIp : 1;
+	UINT64 RestartableIp : 1;
+	UINT64 Overflow : 1;
+	UINT64 Resv1 : 34;
+} EFI_IA32_X64_CACHE_CHECK_INFO;
+
+///
+/// The validation bit mask indicates which fields in the TLB Check structure
+/// are valid.
+///@{
+#define EFI_TLB_CHECK_TRANSACTION_TYPE_VALID BIT0
+#define EFI_TLB_CHECK_OPERATION_VALID	     BIT1
+#define EFI_TLB_CHECK_LEVEL_VALID	     BIT2
+#define EFI_TLB_CHECK_CONTEXT_CORRUPT_VALID  BIT3
+#define EFI_TLB_CHECK_UNCORRECTED_VALID	     BIT4
+#define EFI_TLB_CHECK_PRECISE_IP_VALID	     BIT5
+#define EFI_TLB_CHECK_RESTARTABLE_VALID	     BIT6
+#define EFI_TLB_CHECK_OVERFLOW_VALID	     BIT7
+///@}
+
+///
+/// Type of cache error in the TLB Check structure
+///@{
+#define EFI_TLB_CHECK_ERROR_TYPE_INSTRUCTION 0
+#define EFI_TLB_CHECK_ERROR_TYPE_DATA_ACCESS 1
+#define EFI_TLB_CHECK_ERROR_TYPE_GENERIC     2
+///@}
+
+///
+/// Type of cache operation that caused the error in the TLB
+/// Check structure
+///@{
+#define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC	   0
+#define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_READ  1
+#define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_WRITE 2
+#define EFI_TLB_CHECK_OPERATION_TYPE_DATA_READ	   3
+#define EFI_TLB_CHECK_OPERATION_TYPE_DATA_WRITE	   4
+#define EFI_TLB_CHECK_OPERATION_TYPE_INST_FETCH	   5
+#define EFI_TLB_CHECK_OPERATION_TYPE_PREFETCH	   6
+///@}
+
+///
+/// IA32/X64 TLB Check Structure
+///
+typedef struct {
+	UINT64 ValidFields : 16;
+	UINT64 TransactionType : 2;
+	UINT64 Operation : 4;
+	UINT64 Level : 3;
+	UINT64 ContextCorrupt : 1;
+	UINT64 ErrorUncorrected : 1;
+	UINT64 PreciseIp : 1;
+	UINT64 RestartableIp : 1;
+	UINT64 Overflow : 1;
+	UINT64 Resv1 : 34;
+} EFI_IA32_X64_TLB_CHECK_INFO;
+
+///
+/// The validation bit mask indicates which fields in the MS Check structure
+/// are valid.
+///@{
+#define EFI_BUS_CHECK_TRANSACTION_TYPE_VALID   BIT0
+#define EFI_BUS_CHECK_OPERATION_VALID	       BIT1
+#define EFI_BUS_CHECK_LEVEL_VALID	       BIT2
+#define EFI_BUS_CHECK_CONTEXT_CORRUPT_VALID    BIT3
+#define EFI_BUS_CHECK_UNCORRECTED_VALID	       BIT4
+#define EFI_BUS_CHECK_PRECISE_IP_VALID	       BIT5
+#define EFI_BUS_CHECK_RESTARTABLE_VALID	       BIT6
+#define EFI_BUS_CHECK_OVERFLOW_VALID	       BIT7
+#define EFI_BUS_CHECK_PARTICIPATION_TYPE_VALID BIT8
+#define EFI_BUS_CHECK_TIME_OUT_VALID	       BIT9
+#define EFI_BUS_CHECK_ADDRESS_SPACE_VALID      BIT10
+///@}
+
+///
+/// Type of cache error in the Bus Check structure
+///@{
+#define EFI_BUS_CHECK_ERROR_TYPE_INSTRUCTION 0
+#define EFI_BUS_CHECK_ERROR_TYPE_DATA_ACCESS 1
+#define EFI_BUS_CHECK_ERROR_TYPE_GENERIC     2
+///@}
+
+///
+/// Type of cache operation that caused the error in the Bus
+/// Check structure
+///@{
+#define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC	   0
+#define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_READ  1
+#define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_WRITE 2
+#define EFI_BUS_CHECK_OPERATION_TYPE_DATA_READ	   3
+#define EFI_BUS_CHECK_OPERATION_TYPE_DATA_WRITE	   4
+#define EFI_BUS_CHECK_OPERATION_TYPE_INST_FETCH	   5
+#define EFI_BUS_CHECK_OPERATION_TYPE_PREFETCH	   6
+///@}
+
+///
+/// Type of Participation
+///@{
+#define EFI_BUS_CHECK_PARTICIPATION_TYPE_REQUEST   0
+#define EFI_BUS_CHECK_PARTICIPATION_TYPE_RESPONDED 1
+#define EFI_BUS_CHECK_PARTICIPATION_TYPE_OBSERVED  2
+#define EFI_BUS_CHECK_PARTICIPATION_TYPE_GENERIC   3
+///@}
+
+///
+/// Type of Address Space
+///@{
+#define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_MEMORY	  0
+#define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_RESERVED 1
+#define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_IO	  2
+#define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_OTHER	  3
+///@}
+
+///
+/// IA32/X64 Bus Check Structure
+///
+typedef struct {
+	UINT64 ValidFields : 16;
+	UINT64 TransactionType : 2;
+	UINT64 Operation : 4;
+	UINT64 Level : 3;
+	UINT64 ContextCorrupt : 1;
+	UINT64 ErrorUncorrected : 1;
+	UINT64 PreciseIp : 1;
+	UINT64 RestartableIp : 1;
+	UINT64 Overflow : 1;
+	UINT64 ParticipationType : 2;
+	UINT64 TimeOut : 1;
+	UINT64 AddressSpace : 2;
+	UINT64 Resv1 : 29;
+} EFI_IA32_X64_BUS_CHECK_INFO;
+
+///
+/// The validation bit mask indicates which fields in the MS Check structure
+/// are valid.
+///@{
+#define EFI_MS_CHECK_ERROR_TYPE_VALID	   BIT0
+#define EFI_MS_CHECK_CONTEXT_CORRUPT_VALID BIT1
+#define EFI_MS_CHECK_UNCORRECTED_VALID	   BIT2
+#define EFI_MS_CHECK_PRECISE_IP_VALID	   BIT3
+#define EFI_MS_CHECK_RESTARTABLE_VALID	   BIT4
+#define EFI_MS_CHECK_OVERFLOW_VALID	   BIT5
+///@}
+
+///
+/// Error type identifies the operation that caused the error.
+///@{
+#define EFI_MS_CHECK_ERROR_TYPE_NO		      0
+#define EFI_MS_CHECK_ERROR_TYPE_UNCLASSIFIED	      1
+#define EFI_MS_CHECK_ERROR_TYPE_MICROCODE_PARITY      2
+#define EFI_MS_CHECK_ERROR_TYPE_EXTERNAL	      3
+#define EFI_MS_CHECK_ERROR_TYPE_FRC		      4
+#define EFI_MS_CHECK_ERROR_TYPE_INTERNAL_UNCLASSIFIED 5
+///@}
+
+///
+/// IA32/X64 MS Check Field Description
+///
+typedef struct {
+	UINT64 ValidFields : 16;
+	UINT64 ErrorType : 3;
+	UINT64 ContextCorrupt : 1;
+	UINT64 ErrorUncorrected : 1;
+	UINT64 PreciseIp : 1;
+	UINT64 RestartableIp : 1;
+	UINT64 Overflow : 1;
+	UINT64 Resv1 : 40;
+} EFI_IA32_X64_MS_CHECK_INFO;
+
+///
+/// IA32/X64 Check Information Item
+///
+typedef union {
+	EFI_IA32_X64_CACHE_CHECK_INFO CacheCheck;
+	EFI_IA32_X64_TLB_CHECK_INFO TlbCheck;
+	EFI_IA32_X64_BUS_CHECK_INFO BusCheck;
+	EFI_IA32_X64_MS_CHECK_INFO MsCheck;
+	UINT64 Data64;
+} EFI_IA32_X64_CHECK_INFO_ITEM;
+
+///
+/// The validation bit mask indicates which fields in the IA32/X64 Processor Error
+/// Information Structure are valid.
+///@{
+#define EFI_IA32_X64_ERROR_PROC_CHECK_INFO_VALID   BIT0
+#define EFI_IA32_X64_ERROR_PROC_TARGET_ADDR_VALID  BIT1
+#define EFI_IA32_X64_ERROR_PROC_REQUESTER_ID_VALID BIT2
+#define EFI_IA32_X64_ERROR_PROC_RESPONDER_ID_VALID BIT3
+#define EFI_IA32_X64_ERROR_PROC_INST_IP_VALID	   BIT4
+///@}
+
+///
+/// IA32/X64 Processor Error Information Structure
+///
+typedef struct {
+	EFI_GUID ErrorType;
+	UINT64 ValidFields;
+	EFI_IA32_X64_CHECK_INFO_ITEM CheckInfo;
+	UINT64 TargetId;
+	UINT64 RequestorId;
+	UINT64 ResponderId;
+	UINT64 InstructionIP;
+} EFI_IA32_X64_PROCESS_ERROR_INFO;
+
+///
+/// IA32/X64 Processor Context Information Structure
+///
+typedef struct {
+	UINT16 RegisterType;
+	UINT16 ArraySize;
+	UINT32 MsrAddress;
+	UINT64 MmRegisterAddress;
+	//
+	// This field will provide the contents of the actual registers or raw data.
+	// The number of Registers or size of the raw data reported is determined
+	// by (Array Size / 8) or otherwise specified by the context structure type
+	// definition.
+	//
+} EFI_IA32_X64_PROCESSOR_CONTEXT_INFO;
+
+///
+/// Register Context Type
+///@{
+#define EFI_REG_CONTEXT_TYPE_UNCLASSIFIED 0x0000
+#define EFI_REG_CONTEXT_TYPE_MSR	  0x0001
+#define EFI_REG_CONTEXT_TYPE_IA32	  0x0002
+#define EFI_REG_CONTEXT_TYPE_X64	  0x0003
+#define EFI_REG_CONTEXT_TYPE_FXSAVE	  0x0004
+#define EFI_REG_CONTEXT_TYPE_DR_IA32	  0x0005
+#define EFI_REG_CONTEXT_TYPE_DR_X64	  0x0006
+#define EFI_REG_CONTEXT_TYPE_MEM_MAP	  0x0007
+///@}
+
+///
+/// IA32 Register State
+///
+typedef struct {
+	UINT32 Eax;
+	UINT32 Ebx;
+	UINT32 Ecx;
+	UINT32 Edx;
+	UINT32 Esi;
+	UINT32 Edi;
+	UINT32 Ebp;
+	UINT32 Esp;
+	UINT16 Cs;
+	UINT16 Ds;
+	UINT16 Ss;
+	UINT16 Es;
+	UINT16 Fs;
+	UINT16 Gs;
+	UINT32 Eflags;
+	UINT32 Eip;
+	UINT32 Cr0;
+	UINT32 Cr1;
+	UINT32 Cr2;
+	UINT32 Cr3;
+	UINT32 Cr4;
+	UINT32 Gdtr[2];
+	UINT32 Idtr[2];
+	UINT16 Ldtr;
+	UINT16 Tr;
+} EFI_CONTEXT_IA32_REGISTER_STATE;
+
+///
+/// X64 Register State
+///
+typedef struct {
+	UINT64 Rax;
+	UINT64 Rbx;
+	UINT64 Rcx;
+	UINT64 Rdx;
+	UINT64 Rsi;
+	UINT64 Rdi;
+	UINT64 Rbp;
+	UINT64 Rsp;
+	UINT64 R8;
+	UINT64 R9;
+	UINT64 R10;
+	UINT64 R11;
+	UINT64 R12;
+	UINT64 R13;
+	UINT64 R14;
+	UINT64 R15;
+	UINT16 Cs;
+	UINT16 Ds;
+	UINT16 Ss;
+	UINT16 Es;
+	UINT16 Fs;
+	UINT16 Gs;
+	UINT32 Resv1;
+	UINT64 Rflags;
+	UINT64 Rip;
+	UINT64 Cr0;
+	UINT64 Cr1;
+	UINT64 Cr2;
+	UINT64 Cr3;
+	UINT64 Cr4;
+	UINT64 Cr8;
+	UINT64 Gdtr[2];
+	UINT64 Idtr[2];
+	UINT16 Ldtr;
+	UINT16 Tr;
+} EFI_CONTEXT_X64_REGISTER_STATE;
+
+///
+/// The validation bit mask indicates each of the following field is in IA32/X64
+/// Processor Error Section.
+///
+typedef struct {
+	UINT64 ApicIdValid : 1;
+	UINT64 CpuIdInforValid : 1;
+	UINT64 ErrorInfoNum : 6;
+	UINT64 ContextNum : 6;
+	UINT64 Resv1 : 50;
+} EFI_IA32_X64_VALID_BITS;
+
+///
+/// Error Status Fields
+///
+typedef struct {
+	UINT64 Resv1 : 8;
+	UINT64 Type : 8;
+	UINT64 AddressSignal : 1; ///< Error in Address signals or in Address portion of transaction
+	UINT64 ControlSignal : 1; ///< Error in Control signals or in Control portion of transaction
+	UINT64 DataSignal : 1; ///< Error in Data signals or in Data portion of transaction
+	UINT64 DetectedByResponder : 1; ///< Error detected by responder
+	UINT64 DetectedByRequester : 1; ///< Error detected by requestor
+	UINT64 FirstError : 1; ///< First Error in the sequence - option field
+	UINT64 OverflowNotLogged : 1; ///< Additional errors were not logged due to lack of resources
+	UINT64 Resv2 : 41;
+} EFI_GENERIC_ERROR_STATUS;
+
+///
+/// CPER Generic Error Codes
+///
+#define CPER_GENERIC_ERROR_TYPES_KEYS                                          \
+	(int[])                                                                \
+	{                                                                      \
+		1, 16, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25,   \
+			26                                                     \
+	}
+#define CPER_GENERIC_ERROR_TYPES_VALUES                                        \
+	(const char *[])                                                       \
+	{                                                                      \
+		"ERR_INTERNAL", "ERR_BUS", "ERR_MEM", "ERR_TLB", "ERR_CACHE",  \
+			"ERR_FUNCTION", "ERR_SELFTEST", "ERR_FLOW", "ERR_MAP", \
+			"ERR_IMPROPER", "ERR_UNIMPL", "ERR_LOL",               \
+			"ERR_RESPONSE", "ERR_PARITY", "ERR_PROTOCOL",          \
+			"ERR_ERROR", "ERR_TIMEOUT", "ERR_POISONED"             \
+	}
+#define CPER_GENERIC_ERROR_TYPES_DESCRIPTIONS                                               \
+	(const char *[])                                                                    \
+	{                                                                                   \
+		"Error detected internal to the component.",                                \
+			"Error detected in the bus.",                                       \
+			"Storage error in memory (DRAM).",                                  \
+			"Storage error in TLB.", "Storage error in cache.",                 \
+			"Error in one or more functional units.",                           \
+			"Component failed self test.",                                      \
+			"Overflow or underflow of internal queue.",                         \
+			"Virtual address not found on IO-TLB or IO-PDIR.",                  \
+			"Improper access error.",                                           \
+			"Access to a memory address which is not mapped to any component.", \
+			"Loss of Lockstep error.",                                          \
+			"Response not associated with a request.",                          \
+			"Bus parity error (must also set the A, C, or D bits).",            \
+			"Detection of a protocol error.",                                   \
+			"Detection of a PATH_ERROR.",                                       \
+			"Bus operation timeout.",                                           \
+			"A read was issued to data that has been poisoned."                 \
+	}
+
+///
+/// Error Type
+///
+typedef enum {
+	///
+	/// General Internal errors
+	///
+	ErrorInternal = 1,
+	ErrorBus = 16,
+	///
+	/// Component Internal errors
+	///
+	ErrorMemStorage = 4, // Error in memory device
+	ErrorTlbStorage = 5, // TLB error in cache
+	ErrorCacheStorage = 6,
+	ErrorFunctionalUnit = 7,
+	ErrorSelftest = 8,
+	ErrorOverflow = 9,
+	///
+	/// Bus internal errors
+	///
+	ErrorVirtualMap = 17,
+	ErrorAccessInvalid = 18,   // Improper access
+	ErrorUnimplAccess = 19,	   // Unimplemented memory access
+	ErrorLossOfLockstep = 20,
+	ErrorResponseInvalid = 21, // Response not associated with request
+	ErrorParity = 22,
+	ErrorProtocol = 23,
+	ErrorPath = 24,	   // Detected path error
+	ErrorTimeout = 25, // Bus timeout
+	ErrorPoisoned = 26 // Read data poisoned
+} EFI_GENERIC_ERROR_STATUS_ERROR_TYPE;
+
+///
+/// Validation bit mask indicates which fields in the memory error record are valid
+/// in Memory Error section
+///@{
+#define EFI_PLATFORM_MEMORY_ERROR_STATUS_VALID		       BIT0
+#define EFI_PLATFORM_MEMORY_PHY_ADDRESS_VALID		       BIT1
+#define EFI_PLATFORM_MEMORY_PHY_ADDRESS_MASK_VALID	       BIT2
+#define EFI_PLATFORM_MEMORY_NODE_VALID			       BIT3
+#define EFI_PLATFORM_MEMORY_CARD_VALID			       BIT4
+#define EFI_PLATFORM_MEMORY_MODULE_VALID		       BIT5
+#define EFI_PLATFORM_MEMORY_BANK_VALID			       BIT6
+#define EFI_PLATFORM_MEMORY_DEVICE_VALID		       BIT7
+#define EFI_PLATFORM_MEMORY_ROW_VALID			       BIT8
+#define EFI_PLATFORM_MEMORY_COLUMN_VALID		       BIT9
+#define EFI_PLATFORM_MEMORY_BIT_POS_VALID		       BIT10
+#define EFI_PLATFORM_MEMORY_REQUESTOR_ID_VALID		       BIT11
+#define EFI_PLATFORM_MEMORY_RESPONDER_ID_VALID		       BIT12
+#define EFI_PLATFORM_MEMORY_TARGET_ID_VALID		       BIT13
+#define EFI_PLATFORM_MEMORY_ERROR_TYPE_VALID		       BIT14
+#define EFI_PLATFORM_MEMORY_ERROR_RANK_NUM_VALID	       BIT15
+#define EFI_PLATFORM_MEMORY_ERROR_CARD_HANDLE_VALID	       BIT16
+#define EFI_PLATFORM_MEMORY_ERROR_MODULE_HANDLE_VALID	       BIT17
+#define EFI_PLATFORM_MEMORY_ERROR_EXTENDED_ROW_BIT_16_17_VALID BIT18
+#define EFI_PLATFORM_MEMORY_ERROR_BANK_GROUP_VALID	       BIT19
+#define EFI_PLATFORM_MEMORY_ERROR_BANK_ADDRESS_VALID	       BIT20
+#define EFI_PLATFORM_MEMORY_ERROR_CHIP_IDENTIFICATION_VALID    BIT21
+///@}
+
+///
+/// Memory Error Type identifies the type of error that occurred in Memory
+/// Error section
+///@{
+#define EFI_PLATFORM_MEMORY_ERROR_UNKNOWN		 0x00
+#define EFI_PLATFORM_MEMORY_ERROR_NONE			 0x01
+#define EFI_PLATFORM_MEMORY_ERROR_SINGLEBIT_ECC		 0x02
+#define EFI_PLATFORM_MEMORY_ERROR_MLTIBIT_ECC		 0x03
+#define EFI_PLATFORM_MEMORY_ERROR_SINGLESYMBOLS_CHIPKILL 0x04
+#define EFI_PLATFORM_MEMORY_ERROR_MULTISYMBOL_CHIPKILL	 0x05
+#define EFI_PLATFORM_MEMORY_ERROR_MATER_ABORT		 0x06
+#define EFI_PLATFORM_MEMORY_ERROR_TARGET_ABORT		 0x07
+#define EFI_PLATFORM_MEMORY_ERROR_PARITY		 0x08
+#define EFI_PLATFORM_MEMORY_ERROR_WDT			 0x09
+#define EFI_PLATFORM_MEMORY_ERROR_INVALID_ADDRESS	 0x0A
+#define EFI_PLATFORM_MEMORY_ERROR_MIRROR_FAILED		 0x0B
+#define EFI_PLATFORM_MEMORY_ERROR_SPARING		 0x0C
+#define EFI_PLATFORM_MEMORY_ERROR_SCRUB_CORRECTED	 0x0D
+#define EFI_PLATFORM_MEMORY_ERROR_SCRUB_UNCORRECTED	 0x0E
+#define EFI_PLATFORM_MEMORY_ERROR_MEMORY_MAP_EVENT	 0x0F
+///@}
+
+///
+/// Memory Error Section
+///
+typedef struct {
+	UINT64 ValidFields;
+	EFI_GENERIC_ERROR_STATUS ErrorStatus;
+	UINT64 PhysicalAddress;	    // Error physical address
+	UINT64 PhysicalAddressMask; // Grnaularity
+	UINT16 Node;		    // Node #
+	UINT16 Card;
+	UINT16 ModuleRank;	    // Module or Rank#
+	UINT16 Bank;
+	UINT16 Device;
+	UINT16 Row;
+	UINT16 Column;
+	UINT16 BitPosition;
+	UINT64 RequestorId;
+	UINT64 ResponderId;
+	UINT64 TargetId;
+	UINT8 ErrorType;
+	UINT8 Extended;
+	UINT16 RankNum;
+	UINT16 CardHandle;
+	UINT16 ModuleHandle;
+} EFI_PLATFORM_MEMORY_ERROR_DATA;
+
+///
+/// Validation bit mask indicates which fields in the memory error record 2 are valid
+/// in Memory Error section 2
+///@{
+#define EFI_PLATFORM_MEMORY2_ERROR_STATUS_VALID	     BIT0
+#define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_VALID	     BIT1
+#define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_MASK_VALID  BIT2
+#define EFI_PLATFORM_MEMORY2_NODE_VALID		     BIT3
+#define EFI_PLATFORM_MEMORY2_CARD_VALID		     BIT4
+#define EFI_PLATFORM_MEMORY2_MODULE_VALID	     BIT5
+#define EFI_PLATFORM_MEMORY2_BANK_VALID		     BIT6
+#define EFI_PLATFORM_MEMORY2_DEVICE_VALID	     BIT7
+#define EFI_PLATFORM_MEMORY2_ROW_VALID		     BIT8
+#define EFI_PLATFORM_MEMORY2_COLUMN_VALID	     BIT9
+#define EFI_PLATFORM_MEMORY2_RANK_VALID		     BIT10
+#define EFI_PLATFORM_MEMORY2_BIT_POS_VALID	     BIT11
+#define EFI_PLATFORM_MEMORY2_CHIP_ID_VALID	     BIT12
+#define EFI_PLATFORM_MEMORY2_MEMORY_ERROR_TYPE_VALID BIT13
+#define EFI_PLATFORM_MEMORY2_STATUS_VALID	     BIT14
+#define EFI_PLATFORM_MEMORY2_REQUESTOR_ID_VALID	     BIT15
+#define EFI_PLATFORM_MEMORY2_RESPONDER_ID_VALID	     BIT16
+#define EFI_PLATFORM_MEMORY2_TARGET_ID_VALID	     BIT17
+#define EFI_PLATFORM_MEMORY2_CARD_HANDLE_VALID	     BIT18
+#define EFI_PLATFORM_MEMORY2_MODULE_HANDLE_VALID     BIT19
+#define EFI_PLATFORM_MEMORY2_BANK_GROUP_VALID	     BIT20
+#define EFI_PLATFORM_MEMORY2_BANK_ADDRESS_VALID	     BIT21
+///@}
+
+///
+/// Memory Error Type identifies the type of error that occurred in Memory
+/// Error section 2
+///@{
+#define EFI_PLATFORM_MEMORY2_ERROR_UNKNOWN		 0x00
+#define EFI_PLATFORM_MEMORY2_ERROR_NONE			 0x01
+#define EFI_PLATFORM_MEMORY2_ERROR_SINGLEBIT_ECC	 0x02
+#define EFI_PLATFORM_MEMORY2_ERROR_MLTIBIT_ECC		 0x03
+#define EFI_PLATFORM_MEMORY2_ERROR_SINGLESYMBOL_CHIPKILL 0x04
+#define EFI_PLATFORM_MEMORY2_ERROR_MULTISYMBOL_CHIPKILL	 0x05
+#define EFI_PLATFORM_MEMORY2_ERROR_MASTER_ABORT		 0x06
+#define EFI_PLATFORM_MEMORY2_ERROR_TARGET_ABORT		 0x07
+#define EFI_PLATFORM_MEMORY2_ERROR_PARITY		 0x08
+#define EFI_PLATFORM_MEMORY2_ERROR_WDT			 0x09
+#define EFI_PLATFORM_MEMORY2_ERROR_INVALID_ADDRESS	 0x0A
+#define EFI_PLATFORM_MEMORY2_ERROR_MIRROR_BROKEN	 0x0B
+#define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_SPARING	 0x0C
+#define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_CORRECTED	 0x0D
+#define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_UNCORRECTED	 0x0E
+#define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_MAP_EVENT	 0x0F
+///@}
+
+///
+/// Memory Error Section 2
+///
+typedef struct {
+	UINT64 ValidFields;
+	EFI_GENERIC_ERROR_STATUS ErrorStatus;
+	UINT64 PhysicalAddress;	    // Error physical address
+	UINT64 PhysicalAddressMask; // Grnaularity
+	UINT16 Node;		    // Node #
+	UINT16 Card;
+	UINT16 Module;		    // Module or Rank#
+	UINT16 Bank;
+	UINT32 Device;
+	UINT32 Row;
+	UINT32 Column;
+	UINT32 Rank;
+	UINT32 BitPosition;
+	UINT8 ChipId;
+	UINT8 MemErrorType;
+	UINT8 Status;
+	UINT8 Reserved;
+	UINT64 RequestorId;
+	UINT64 ResponderId;
+	UINT64 TargetId;
+	UINT32 CardHandle;
+	UINT32 ModuleHandle;
+} EFI_PLATFORM_MEMORY2_ERROR_DATA;
+
+///
+/// Validation bits mask indicates which of the following fields is valid
+/// in PCI Express Error Record.
+///@{
+#define EFI_PCIE_ERROR_PORT_TYPE_VALID	     BIT0
+#define EFI_PCIE_ERROR_VERSION_VALID	     BIT1
+#define EFI_PCIE_ERROR_COMMAND_STATUS_VALID  BIT2
+#define EFI_PCIE_ERROR_DEVICE_ID_VALID	     BIT3
+#define EFI_PCIE_ERROR_SERIAL_NO_VALID	     BIT4
+#define EFI_PCIE_ERROR_BRIDGE_CRL_STS_VALID  BIT5
+#define EFI_PCIE_ERROR_CAPABILITY_INFO_VALID BIT6
+#define EFI_PCIE_ERROR_AER_INFO_VALID	     BIT7
+///@}
+
+///
+/// PCIe Device/Port Type as defined in the PCI Express capabilities register
+///@{
+#define EFI_PCIE_ERROR_PORT_PCIE_ENDPOINT	 0x00000000
+#define EFI_PCIE_ERROR_PORT_PCI_ENDPOINT	 0x00000001
+#define EFI_PCIE_ERROR_PORT_ROOT_PORT		 0x00000004
+#define EFI_PCIE_ERROR_PORT_UPSWITCH_PORT	 0x00000005
+#define EFI_PCIE_ERROR_PORT_DOWNSWITCH_PORT	 0x00000006
+#define EFI_PCIE_ERROR_PORT_PCIE_TO_PCI_BRIDGE	 0x00000007
+#define EFI_PCIE_ERROR_PORT_PCI_TO_PCIE_BRIDGE	 0x00000008
+#define EFI_PCIE_ERROR_PORT_ROOT_INT_ENDPOINT	 0x00000009
+#define EFI_PCIE_ERROR_PORT_ROOT_EVENT_COLLECTOR 0x0000000A
+///@}
+
+///
+/// PCI Slot number
+///
+typedef struct {
+	UINT16 Resv1 : 3;
+	UINT16 Number : 13;
+} EFI_GENERIC_ERROR_PCI_SLOT;
+
+///
+/// PCIe Root Port PCI/bridge PCI compatible device number and
+/// bus number information to uniquely identify the root port or
+/// bridge. Default values for both the bus numbers is zero.
+///
+typedef struct {
+	UINT16 VendorId;
+	UINT16 DeviceId;
+	UINT8 ClassCode[3];
+	UINT8 Function;
+	UINT8 Device;
+	UINT16 Segment;
+	UINT8 PrimaryOrDeviceBus;
+	UINT8 SecondaryBus;
+	EFI_GENERIC_ERROR_PCI_SLOT Slot;
+	UINT8 Resv1;
+} EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID;
+
+///
+/// PCIe Capability Structure
+///
+typedef struct {
+	UINT8 PcieCap[60];
+} EFI_PCIE_ERROR_DATA_CAPABILITY;
+
+///
+/// PCIe Advanced Error Reporting Extended Capability Structure.
+///
+typedef struct {
+	UINT8 PcieAer[96];
+} EFI_PCIE_ERROR_DATA_AER;
+
+///
+/// PCI Express Error Record
+///
+typedef struct {
+	UINT64 ValidFields;
+	UINT32 PortType;
+	UINT32 Version;
+	UINT32 CommandStatus;
+	UINT32 Resv2;
+	EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID DevBridge;
+	UINT64 SerialNo;
+	UINT32 BridgeControlStatus;
+	EFI_PCIE_ERROR_DATA_CAPABILITY Capability;
+	EFI_PCIE_ERROR_DATA_AER AerInfo;
+} EFI_PCIE_ERROR_DATA;
+
+///
+/// Validation bits Indicates which of the following fields is valid
+/// in PCI/PCI-X Bus Error Section.
+///@{
+#define EFI_PCI_PCIX_BUS_ERROR_STATUS_VALID	  BIT0
+#define EFI_PCI_PCIX_BUS_ERROR_TYPE_VALID	  BIT1
+#define EFI_PCI_PCIX_BUS_ERROR_BUS_ID_VALID	  BIT2
+#define EFI_PCI_PCIX_BUS_ERROR_BUS_ADDRESS_VALID  BIT3
+#define EFI_PCI_PCIX_BUS_ERROR_BUS_DATA_VALID	  BIT4
+#define EFI_PCI_PCIX_BUS_ERROR_COMMAND_VALID	  BIT5
+#define EFI_PCI_PCIX_BUS_ERROR_REQUESTOR_ID_VALID BIT6
+#define EFI_PCI_PCIX_BUS_ERROR_COMPLETER_ID_VALID BIT7
+#define EFI_PCI_PCIX_BUS_ERROR_TARGET_ID_VALID	  BIT8
+///@}
+
+///
+/// PCI Bus Error Type in PCI/PCI-X Bus Error Section
+///@{
+#define EFI_PCI_PCIX_BUS_ERROR_UNKNOWN		  0x0000
+#define EFI_PCI_PCIX_BUS_ERROR_DATA_PARITY	  0x0001
+#define EFI_PCI_PCIX_BUS_ERROR_SYSTEM		  0x0002
+#define EFI_PCI_PCIX_BUS_ERROR_MASTER_ABORT	  0x0003
+#define EFI_PCI_PCIX_BUS_ERROR_BUS_TIMEOUT	  0x0004
+#define EFI_PCI_PCIX_BUS_ERROR_MASTER_DATA_PARITY 0x0005
+#define EFI_PCI_PCIX_BUS_ERROR_ADDRESS_PARITY	  0x0006
+#define EFI_PCI_PCIX_BUS_ERROR_COMMAND_PARITY	  0x0007
+///@}
+
+///
+/// PCI/PCI-X Bus Error Section
+///
+typedef struct {
+	UINT64 ValidFields;
+	EFI_GENERIC_ERROR_STATUS ErrorStatus;
+	UINT16 Type;
+	UINT16 BusId;
+	UINT32 Resv2;
+	UINT64 BusAddress;
+	UINT64 BusData;
+	UINT64 BusCommand;
+	UINT64 RequestorId;
+	UINT64 ResponderId;
+	UINT64 TargetId;
+} EFI_PCI_PCIX_BUS_ERROR_DATA;
+
+///
+/// Validation bits Indicates which of the following fields is valid
+/// in PCI/PCI-X Component Error Section.
+///@{
+#define EFI_PCI_PCIX_DEVICE_ERROR_STATUS_VALID	      BIT0
+#define EFI_PCI_PCIX_DEVICE_ERROR_ID_INFO_VALID	      BIT1
+#define EFI_PCI_PCIX_DEVICE_ERROR_MEM_NUM_VALID	      BIT2
+#define EFI_PCI_PCIX_DEVICE_ERROR_IO_NUM_VALID	      BIT3
+#define EFI_PCI_PCIX_DEVICE_ERROR_REG_DATA_PAIR_VALID BIT4
+///@}
+
+///
+/// PCI/PCI-X Device Identification Information
+///
+typedef struct {
+	UINT16 VendorId;
+	UINT16 DeviceId;
+	UINT8 ClassCode[3];
+	UINT8 Function;
+	UINT8 Device;
+	UINT8 Bus;
+	UINT8 Segment;
+	UINT8 Resv1;
+	UINT32 Resv2;
+} EFI_GENERIC_ERROR_PCI_DEVICE_ID;
+
+///
+/// Identifies the type of firmware error record
+///@{
+#define EFI_FIRMWARE_ERROR_TYPE_IPF_SAL	  0x00
+#define EFI_FIRMWARE_ERROR_TYPE_SOC_TYPE1 0x01
+#define EFI_FIRMWARE_ERROR_TYPE_SOC_TYPE2 0x02
+///@}
+
+///
+/// Firmware Error Record Section
+///
+typedef struct {
+	UINT8 ErrorType;
+	UINT8 Revision;
+	UINT8 Resv1[6];
+	UINT64 RecordId;
+	EFI_GUID RecordIdGuid;
+} EFI_FIRMWARE_ERROR_DATA;
+
+///
+/// Fault Reason in DMAr Generic Error Section
+///@{
+#define EFI_DMA_FAULT_REASON_TABLE_ENTRY_NOT_PRESENT	       0x01
+#define EFI_DMA_FAULT_REASON_TABLE_ENTRY_INVALID	       0x02
+#define EFI_DMA_FAULT_REASON_ACCESS_MAPPING_TABLE_ERROR	       0x03
+#define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_MAPPING_TABLE   0x04
+#define EFI_DMA_FAULT_REASON_ACCESS_ADDR_OUT_OF_SPACE	       0x05
+#define EFI_DMA_FAULT_REASON_INVALID_ACCESS		       0x06
+#define EFI_DMA_FAULT_REASON_INVALID_REQUEST		       0x07
+#define EFI_DMA_FAULT_REASON_ACCESS_TRANSLATE_TABLE_ERROR      0x08
+#define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_TRANSLATE_TABLE 0x09
+#define EFI_DMA_FAULT_REASON_INVALID_COMMAOND		       0x0A
+#define EFI_DMA_FAULT_REASON_ACCESS_COMMAND_BUFFER_ERROR       0x0B
+///@}
+
+///
+/// DMA access type in DMAr Generic Error Section
+///@{
+#define EFI_DMA_ACCESS_TYPE_READ  0x00
+#define EFI_DMA_ACCESS_TYPE_WRITE 0x01
+///@}
+
+///
+/// DMA address type in DMAr Generic Error Section
+///@{
+#define EFI_DMA_ADDRESS_UNTRANSLATED 0x00
+#define EFI_DMA_ADDRESS_TRANSLATION  0x01
+///@}
+
+///
+/// Architecture type in DMAr Generic Error Section
+///@{
+#define EFI_DMA_ARCH_TYPE_VT	0x01
+#define EFI_DMA_ARCH_TYPE_IOMMU 0x02
+///@}
+
+///
+/// DMAr Generic Error Section
+///
+typedef struct {
+	UINT16 RequesterId;
+	UINT16 SegmentNumber;
+	UINT8 FaultReason;
+	UINT8 AccessType;
+	UINT8 AddressType;
+	UINT8 ArchType;
+	UINT64 DeviceAddr;
+	UINT8 Resv1[16];
+} EFI_DMAR_GENERIC_ERROR_DATA;
+
+///
+/// Intel VT for Directed I/O specific DMAr Errors
+///
+typedef struct {
+	UINT8 Version;
+	UINT8 Revision;
+	UINT8 OemId[6];
+	UINT64 Capability;
+	UINT64 CapabilityEx;
+	UINT32 GlobalCommand;
+	UINT32 GlobalStatus;
+	UINT32 FaultStatus;
+	UINT8 Resv1[12];
+	UINT64 FaultRecord[2];
+	UINT64 RootEntry[2];
+	UINT64 ContextEntry[2];
+	UINT64 PteL6;
+	UINT64 PteL5;
+	UINT64 PteL4;
+	UINT64 PteL3;
+	UINT64 PteL2;
+	UINT64 PteL1;
+} EFI_DIRECTED_IO_DMAR_ERROR_DATA;
+
+///
+/// IOMMU specific DMAr Errors
+///
+typedef struct {
+	UINT8 Revision;
+	UINT8 Resv1[7];
+	UINT64 Control;
+	UINT64 Status;
+	UINT8 Resv2[8];
+	UINT64 EventLogEntry[2];
+	UINT8 Resv3[16];
+	UINT64 DeviceTableEntry[4];
+	UINT64 PteL6;
+	UINT64 PteL5;
+	UINT64 PteL4;
+	UINT64 PteL3;
+	UINT64 PteL2;
+	UINT64 PteL1;
+} EFI_IOMMU_DMAR_ERROR_DATA;
+
+extern EFI_GUID gEfiEventNotificationTypeCmcGuid;
+extern EFI_GUID gEfiEventNotificationTypeCpeGuid;
+extern EFI_GUID gEfiEventNotificationTypeMceGuid;
+extern EFI_GUID gEfiEventNotificationTypePcieGuid;
+extern EFI_GUID gEfiEventNotificationTypeInitGuid;
+extern EFI_GUID gEfiEventNotificationTypeNmiGuid;
+extern EFI_GUID gEfiEventNotificationTypeBootGuid;
+extern EFI_GUID gEfiEventNotificationTypeDmarGuid;
+extern EFI_GUID gEfiEventNotificationTypeSeaGuid;
+extern EFI_GUID gEfiEventNotificationTypeSeiGuid;
+extern EFI_GUID gEfiEventNotificationTypePeiGuid;
+extern EFI_GUID gEfiEventNotificationTypeCxlGuid;
+extern EFI_GUID gEfiProcessorGenericErrorSectionGuid;
+extern EFI_GUID gEfiProcessorSpecificErrorSectionGuid;
+extern EFI_GUID gEfiIa32X64ProcessorErrorSectionGuid;
+extern EFI_GUID gEfiIpfProcessorErrorSectionGuid;
+extern EFI_GUID gEfiArmProcessorErrorSectionGuid;
+extern EFI_GUID gEfiPlatformMemoryErrorSectionGuid;
+extern EFI_GUID gEfiPlatformMemoryError2SectionGuid;
+extern EFI_GUID gEfiPcieErrorSectionGuid;
+extern EFI_GUID gEfiFirmwareErrorSectionGuid;
+extern EFI_GUID gEfiPciBusErrorSectionGuid;
+extern EFI_GUID gEfiPciDevErrorSectionGuid;
+extern EFI_GUID gEfiDMArGenericErrorSectionGuid;
+extern EFI_GUID gEfiDirectedIoDMArErrorSectionGuid;
+extern EFI_GUID gEfiIommuDMArErrorSectionGuid;
+extern EFI_GUID gEfiCcixPerLogErrorSectionGuid;
+extern EFI_GUID gEfiCxlProtocolErrorSectionGuid;
+extern EFI_GUID gEfiCxlGeneralMediaErrorSectionGuid;
+extern EFI_GUID gEfiCxlDramEventErrorSectionGuid;
+extern EFI_GUID gEfiCxlMemoryModuleErrorSectionGuid;
+extern EFI_GUID gEfiCxlPhysicalSwitchErrorSectionGuid;
+extern EFI_GUID gEfiCxlVirtualSwitchErrorSectionGuid;
+extern EFI_GUID gEfiCxlMldPortErrorSectionGuid;
+#pragma pack()
+
+#if defined(MDE_CPU_IA32) || defined(MDE_CPU_X64)
+///
+/// IA32 and x64 Specific definitions.
+///
+
+extern EFI_GUID gEfiIa32X64ErrorTypeCacheCheckGuid;
+extern EFI_GUID gEfiIa32X64ErrorTypeTlbCheckGuid;
+extern EFI_GUID gEfiIa32X64ErrorTypeBusCheckGuid;
+extern EFI_GUID gEfiIa32X64ErrorTypeMsCheckGuid;
+
+#endif
+
+#endif