Home | History | Annotate | Download | only in Guid
      1 /** @file
      2   GUIDs and definitions used for Common Platform Error Record.
      3 
      4   Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
      5   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this distribution.  The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14   @par Revision Reference:
     15   GUIDs defined in UEFI 2.6 Specification.
     16 
     17 **/
     18 
     19 #ifndef __CPER_GUID_H__
     20 #define __CPER_GUID_H__
     21 
     22 #pragma pack(1)
     23 
     24 #define EFI_ERROR_RECORD_SIGNATURE_START   SIGNATURE_32('C', 'P', 'E', 'R')
     25 #define EFI_ERROR_RECORD_SIGNATURE_END     0xFFFFFFFF
     26 
     27 #define EFI_ERROR_RECORD_REVISION          0x0101
     28 
     29 ///
     30 /// Error Severity in Error Record Header and Error Section Descriptor
     31 ///@{
     32 #define EFI_GENERIC_ERROR_RECOVERABLE                0x00000000
     33 #define EFI_GENERIC_ERROR_FATAL                      0x00000001
     34 #define EFI_GENERIC_ERROR_CORRECTED                  0x00000002
     35 #define EFI_GENERIC_ERROR_INFO                       0x00000003
     36 ///@}
     37 
     38 ///
     39 /// The validation bit mask indicates the validity of the following fields
     40 /// in Error Record Header.
     41 ///@{
     42 #define EFI_ERROR_RECORD_HEADER_PLATFORM_ID_VALID    BIT0
     43 #define EFI_ERROR_RECORD_HEADER_TIME_STAMP_VALID     BIT1
     44 #define EFI_ERROR_RECORD_HEADER_PARTITION_ID_VALID   BIT2
     45 ///@}
     46 
     47 ///
     48 /// Timestamp is precise if this bit is set and correlates to the time of the
     49 /// error event.
     50 ///
     51 #define EFI_ERROR_TIME_STAMP_PRECISE                 BIT0
     52 
     53 ///
     54 /// The timestamp correlates to the time when the error information was collected
     55 /// by the system software and may not necessarily represent the time of the error
     56 /// event. The timestamp contains the local time in BCD format.
     57 ///
     58 typedef struct {
     59   UINT8              Seconds;
     60   UINT8              Minutes;
     61   UINT8              Hours;
     62   UINT8              Flag;
     63   UINT8              Day;
     64   UINT8              Month;
     65   UINT8              Year;
     66   UINT8              Century;
     67 } EFI_ERROR_TIME_STAMP;
     68 
     69 ///
     70 /// GUID value indicating the record association with an error event notification type.
     71 ///@{
     72 #define EFI_EVENT_NOTIFICATION_TYEP_CMC_GUID \
     73   { \
     74     0x2DCE8BB1, 0xBDD7, 0x450e, { 0xB9, 0xAD, 0x9C, 0xF4, 0xEB, 0xD4, 0xF8, 0x90 } \
     75   }
     76 #define EFI_EVENT_NOTIFICATION_TYEP_CPE_GUID \
     77   { \
     78     0x4E292F96, 0xD843, 0x4a55, { 0xA8, 0xC2, 0xD4, 0x81, 0xF2, 0x7E, 0xBE, 0xEE } \
     79   }
     80 #define EFI_EVENT_NOTIFICATION_TYEP_MCE_GUID \
     81   { \
     82     0xE8F56FFE, 0x919C, 0x4cc5, { 0xBA, 0x88, 0x65, 0xAB, 0xE1, 0x49, 0x13, 0xBB } \
     83   }
     84 #define EFI_EVENT_NOTIFICATION_TYEP_PCIE_GUID \
     85   { \
     86     0xCF93C01F, 0x1A16, 0x4dfc, { 0xB8, 0xBC, 0x9C, 0x4D, 0xAF, 0x67, 0xC1, 0x04 } \
     87   }
     88 #define EFI_EVENT_NOTIFICATION_TYEP_INIT_GUID \
     89   { \
     90     0xCC5263E8, 0x9308, 0x454a, { 0x89, 0xD0, 0x34, 0x0B, 0xD3, 0x9B, 0xC9, 0x8E } \
     91   }
     92 #define EFI_EVENT_NOTIFICATION_TYEP_NMI_GUID \
     93   { \
     94     0x5BAD89FF, 0xB7E6, 0x42c9, { 0x81, 0x4A, 0xCF, 0x24, 0x85, 0xD6, 0xE9, 0x8A } \
     95   }
     96 #define EFI_EVENT_NOTIFICATION_TYEP_BOOT_GUID \
     97   { \
     98     0x3D61A466, 0xAB40, 0x409a, { 0xA6, 0x98, 0xF3, 0x62, 0xD4, 0x64, 0xB3, 0x8F } \
     99   }
    100 #define EFI_EVENT_NOTIFICATION_TYEP_DMAR_GUID \
    101   { \
    102     0x667DD791, 0xC6B3, 0x4c27, { 0x8A, 0x6B, 0x0F, 0x8E, 0x72, 0x2D, 0xEB, 0x41 } \
    103   }
    104 ///@}
    105 
    106 ///
    107 /// Error Record Header Flags
    108 ///@{
    109 #define EFI_HW_ERROR_FLAGS_RECOVERED                 0x00000001
    110 #define EFI_HW_ERROR_FLAGS_PREVERR                   0x00000002
    111 #define EFI_HW_ERROR_FLAGS_SIMULATED                 0x00000004
    112 ///@}
    113 
    114 ///
    115 /// Common error record header
    116 ///
    117 typedef struct {
    118   UINT32               SignatureStart;
    119   UINT16               Revision;
    120   UINT32               SignatureEnd;
    121   UINT16               SectionCount;
    122   UINT32               ErrorSeverity;
    123   UINT32               ValidationBits;
    124   UINT32               RecordLength;
    125   EFI_ERROR_TIME_STAMP TimeStamp;
    126   EFI_GUID             PlatformID;
    127   EFI_GUID             PartitionID;
    128   EFI_GUID             CreatorID;
    129   EFI_GUID             NotificationType;
    130   UINT64               RecordID;
    131   UINT32               Flags;
    132   UINT64               PersistenceInfo;
    133   UINT8                Resv1[12];
    134   ///
    135   /// An array of SectionCount descriptors for the associated
    136   /// sections. The number of valid sections is equivalent to the
    137   /// SectionCount. The buffer size of the record may include
    138   /// more space to dynamically add additional Section
    139   /// Descriptors to the error record.
    140   ///
    141 } EFI_COMMON_ERROR_RECORD_HEADER;
    142 
    143 #define EFI_ERROR_SECTION_REVISION  0x0100
    144 
    145 ///
    146 /// Validity Fields in Error Section Descriptor.
    147 ///
    148 #define EFI_ERROR_SECTION_FRU_ID_VALID               BIT0
    149 #define EFI_ERROR_SECTION_FRU_STRING_VALID           BIT1
    150 
    151 ///
    152 /// Flag field contains information that describes the error section
    153 /// in Error Section Descriptor.
    154 ///
    155 #define EFI_ERROR_SECTION_FLAGS_PRIMARY                        BIT0
    156 #define EFI_ERROR_SECTION_FLAGS_CONTAINMENT_WARNING            BIT1
    157 #define EFI_ERROR_SECTION_FLAGS_RESET                          BIT2
    158 #define EFI_ERROR_SECTION_FLAGS_ERROR_THRESHOLD_EXCEEDED       BIT3
    159 #define EFI_ERROR_SECTION_FLAGS_RESOURCE_NOT_ACCESSIBLE        BIT4
    160 #define EFI_ERROR_SECTION_FLAGS_LATENT_ERROR                   BIT5
    161 
    162 ///
    163 /// Error Sectition Type GUIDs in Error Section Descriptor
    164 ///@{
    165 #define EFI_ERROR_SECTION_PROCESSOR_GENERIC_GUID \
    166   { \
    167     0x9876ccad, 0x47b4, 0x4bdb, { 0xb6, 0x5e, 0x16, 0xf1, 0x93, 0xc4, 0xf3, 0xdb } \
    168   }
    169 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_GUID \
    170   { \
    171     0xdc3ea0b0, 0xa144, 0x4797, { 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d } \
    172   }
    173 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_IA32X64_GUID \
    174   { \
    175     0xdc3ea0b0, 0xa144, 0x4797, { 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d } \
    176   }
    177 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_ARM_GUID \
    178   { \
    179     0xe19e3d16, 0xbc11, 0x11e4, { 0x9c, 0xaa, 0xc2, 0x05, 0x1d, 0x5d, 0x46, 0xb0 } \
    180   }
    181 #define EFI_ERROR_SECTION_PLATFORM_MEMORY_GUID \
    182   { \
    183     0xa5bc1114, 0x6f64, 0x4ede, { 0xb8, 0x63, 0x3e, 0x83, 0xed, 0x7c, 0x83, 0xb1 } \
    184   }
    185 #define EFI_ERROR_SECTION_PLATFORM_MEMORY2_GUID \
    186   { \
    187     0x61EC04FC, 0x48E6, 0xD813, { 0x25, 0xC9, 0x8D, 0xAA, 0x44, 0x75, 0x0B, 0x12 } \
    188   }
    189 #define EFI_ERROR_SECTION_PCIE_GUID \
    190   { \
    191     0xd995e954, 0xbbc1, 0x430f, { 0xad, 0x91, 0xb4, 0x4d, 0xcb, 0x3c, 0x6f, 0x35 } \
    192   }
    193 #define EFI_ERROR_SECTION_FW_ERROR_RECORD_GUID \
    194   { \
    195     0x81212a96, 0x09ed, 0x4996, { 0x94, 0x71, 0x8d, 0x72, 0x9c, 0x8e, 0x69, 0xed } \
    196   }
    197 #define EFI_ERROR_SECTION_PCI_PCIX_BUS_GUID \
    198   { \
    199     0xc5753963, 0x3b84, 0x4095, { 0xbf, 0x78, 0xed, 0xda, 0xd3, 0xf9, 0xc9, 0xdd } \
    200   }
    201 #define EFI_ERROR_SECTION_PCI_DEVICE_GUID \
    202   { \
    203     0xeb5e4685, 0xca66, 0x4769, { 0xb6, 0xa2, 0x26, 0x06, 0x8b, 0x00, 0x13, 0x26 } \
    204   }
    205 #define EFI_ERROR_SECTION_DMAR_GENERIC_GUID \
    206   { \
    207     0x5b51fef7, 0xc79d, 0x4434, { 0x8f, 0x1b, 0xaa, 0x62, 0xde, 0x3e, 0x2c, 0x64 } \
    208   }
    209 #define EFI_ERROR_SECTION_DIRECTED_IO_DMAR_GUID \
    210   { \
    211     0x71761d37, 0x32b2, 0x45cd, { 0xa7, 0xd0, 0xb0, 0xfe, 0xdd, 0x93, 0xe8, 0xcf } \
    212   }
    213 #define EFI_ERROR_SECTION_IOMMU_DMAR_GUID \
    214   { \
    215     0x036f84e1, 0x7f37, 0x428c, { 0xa7, 0x9e, 0x57, 0x5f, 0xdf, 0xaa, 0x84, 0xec } \
    216   }
    217 ///@}
    218 
    219 ///
    220 /// Error Section Descriptor
    221 ///
    222 typedef struct {
    223   UINT32                 SectionOffset;
    224   UINT32                 SectionLength;
    225   UINT16                 Revision;
    226   UINT8                  SecValidMask;
    227   UINT8                  Resv1;
    228   UINT32                 SectionFlags;
    229   EFI_GUID               SectionType;
    230   EFI_GUID               FruId;
    231   UINT32                 Severity;
    232   CHAR8                  FruString[20];
    233 } EFI_ERROR_SECTION_DESCRIPTOR;
    234 
    235 ///
    236 /// The validation bit mask indicates whether or not each of the following fields are
    237 /// valid in Proessor Generic Error section.
    238 ///@{
    239 #define EFI_GENERIC_ERROR_PROC_TYPE_VALID            BIT0
    240 #define EFI_GENERIC_ERROR_PROC_ISA_VALID             BIT1
    241 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_VALID      BIT2
    242 #define EFI_GENERIC_ERROR_PROC_OPERATION_VALID       BIT3
    243 #define EFI_GENERIC_ERROR_PROC_FLAGS_VALID           BIT4
    244 #define EFI_GENERIC_ERROR_PROC_LEVEL_VALID           BIT5
    245 #define EFI_GENERIC_ERROR_PROC_VERSION_VALID         BIT6
    246 #define EFI_GENERIC_ERROR_PROC_BRAND_VALID           BIT7
    247 #define EFI_GENERIC_ERROR_PROC_ID_VALID              BIT8
    248 #define EFI_GENERIC_ERROR_PROC_TARGET_ADDR_VALID     BIT9
    249 #define EFI_GENERIC_ERROR_PROC_REQUESTER_ID_VALID    BIT10
    250 #define EFI_GENERIC_ERROR_PROC_RESPONDER_ID_VALID    BIT11
    251 #define EFI_GENERIC_ERROR_PROC_INST_IP_VALID         BIT12
    252 ///@}
    253 
    254 ///
    255 /// The type of the processor architecture in Proessor Generic Error section.
    256 ///@{
    257 #define EFI_GENERIC_ERROR_PROC_TYPE_IA32_X64         0x00
    258 #define EFI_GENERIC_ERROR_PROC_TYPE_IA64             0x01
    259 ///@}
    260 
    261 ///
    262 /// The type of the instruction set executing when the error occurred in Proessor
    263 /// Generic Error section.
    264 ///@{
    265 #define EFI_GENERIC_ERROR_PROC_ISA_IA32              0x00
    266 #define EFI_GENERIC_ERROR_PROC_ISA_IA64              0x01
    267 #define EFI_GENERIC_ERROR_PROC_ISA_X64               0x02
    268 ///@}
    269 
    270 ///
    271 /// The type of error that occurred in Proessor Generic Error section.
    272 ///@{
    273 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_UNKNOWN    0x00
    274 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_CACHE      0x01
    275 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_TLB        0x02
    276 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_BUS        0x04
    277 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_MICRO_ARCH 0x08
    278 ///@}
    279 
    280 ///
    281 /// The type of operation in Proessor Generic Error section.
    282 ///@{
    283 #define EFI_GENERIC_ERROR_PROC_OPERATION_GENERIC               0x00
    284 #define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_READ             0x01
    285 #define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_WRITE            0x02
    286 #define EFI_GENERIC_ERROR_PROC_OPERATION_INSTRUCTION_EXEC      0x03
    287 ///@}
    288 
    289 ///
    290 /// Flags bit mask indicates additional information about the error in Proessor Generic
    291 /// Error section
    292 ///@{
    293 #define EFI_GENERIC_ERROR_PROC_FLAGS_RESTARTABLE     BIT0
    294 #define EFI_GENERIC_ERROR_PROC_FLAGS_PRECISE_IP      BIT1
    295 #define EFI_GENERIC_ERROR_PROC_FLAGS_OVERFLOW        BIT2
    296 #define EFI_GENERIC_ERROR_PROC_FLAGS_CORRECTED       BIT3
    297 ///@}
    298 
    299 ///
    300 /// Processor Generic Error Section
    301 /// describes processor reported hardware errors for logical processors in the system.
    302 ///
    303 typedef struct {
    304   UINT64             ValidFields;
    305   UINT8              Type;
    306   UINT8              Isa;
    307   UINT8              ErrorType;
    308   UINT8              Operation;
    309   UINT8              Flags;
    310   UINT8              Level;
    311   UINT16             Resv1;
    312   UINT64             VersionInfo;
    313   CHAR8              BrandString[128];
    314   UINT64             ApicId;
    315   UINT64             TargetAddr;
    316   UINT64             RequestorId;
    317   UINT64             ResponderId;
    318   UINT64             InstructionIP;
    319 } EFI_PROCESSOR_GENERIC_ERROR_DATA;
    320 
    321 
    322 #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
    323 ///
    324 /// IA32 and x64 Specific definitions.
    325 ///
    326 
    327 ///
    328 /// GUID value indicating the type of Processor Error Information structure
    329 /// in IA32/X64 Processor Error Information Structure.
    330 ///@{
    331 #define EFI_IA32_X64_ERROR_TYPE_CACHE_CHECK_GUID \
    332   { \
    333     0xA55701F5, 0xE3EF, 0x43de, {0xAC, 0x72, 0x24, 0x9B, 0x57, 0x3F, 0xAD, 0x2C } \
    334   }
    335 #define EFI_IA32_X64_ERROR_TYPE_TLB_CHECK_GUID \
    336   { \
    337     0xFC06B535, 0x5E1F, 0x4562, {0x9F, 0x25, 0x0A, 0x3B, 0x9A, 0xDB, 0x63, 0xC3 } \
    338   }
    339 #define EFI_IA32_X64_ERROR_TYPE_BUS_CHECK_GUID \
    340   { \
    341     0x1CF3F8B3, 0xC5B1, 0x49a2, {0xAA, 0x59, 0x5E, 0xEF, 0x92, 0xFF, 0xA6, 0x3C } \
    342   }
    343 #define EFI_IA32_X64_ERROR_TYPE_MS_CHECK_GUID \
    344   { \
    345     0x48AB7F57, 0xDC34, 0x4f6c, {0xA7, 0xD3, 0xB0, 0xB5, 0xB0, 0xA7, 0x43, 0x14 } \
    346   }
    347 ///@}
    348 
    349 ///
    350 /// The validation bit mask indicates which fields in the IA32/X64 Processor
    351 /// Error Record structure are valid.
    352 ///@{
    353 #define EFI_IA32_X64_PROCESSOR_ERROR_APIC_ID_VALID         BIT0
    354 #define EFI_IA32_X64_PROCESSOR_ERROR_CPU_ID_INFO_VALID     BIT1
    355 ///@}
    356 
    357 ///
    358 /// IA32/X64 Processor Error Record
    359 ///
    360 typedef struct {
    361   UINT64             ValidFields;
    362   UINT64             ApicId;
    363   UINT8              CpuIdInfo[48];
    364 } EFI_IA32_X64_PROCESSOR_ERROR_RECORD;
    365 
    366 ///
    367 /// The validation bit mask indicates which fields in the Cache Check structure
    368 /// are valid.
    369 ///@{
    370 #define EFI_CACHE_CHECK_TRANSACTION_TYPE_VALID       BIT0
    371 #define EFI_CACHE_CHECK_OPERATION_VALID              BIT1
    372 #define EFI_CACHE_CHECK_LEVEL_VALID                  BIT2
    373 #define EFI_CACHE_CHECK_CONTEXT_CORRUPT_VALID        BIT3
    374 #define EFI_CACHE_CHECK_UNCORRECTED_VALID            BIT4
    375 #define EFI_CACHE_CHECK_PRECISE_IP_VALID             BIT5
    376 #define EFI_CACHE_CHECK_RESTARTABLE_VALID            BIT6
    377 #define EFI_CACHE_CHECK_OVERFLOW_VALID               BIT7
    378 ///@}
    379 
    380 ///
    381 /// Type of cache error in the Cache Check structure
    382 ///@{
    383 #define EFI_CACHE_CHECK_ERROR_TYPE_INSTRUCTION       0
    384 #define EFI_CACHE_CHECK_ERROR_TYPE_DATA_ACCESS       1
    385 #define EFI_CACHE_CHECK_ERROR_TYPE_GENERIC           2
    386 ///@}
    387 
    388 ///
    389 /// Type of cache operation that caused the error in the Cache
    390 /// Check structure
    391 ///@{
    392 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC                 0
    393 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_READ            1
    394 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_WRITE           2
    395 #define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_READ               3
    396 #define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_WRITE              4
    397 #define EFI_CACHE_CHECK_OPERATION_TYPE_INSTRUCTION_FETCH       5
    398 #define EFI_CACHE_CHECK_OPERATION_TYPE_PREFETCH                6
    399 #define EFI_CACHE_CHECK_OPERATION_TYPE_EVICTION                7
    400 #define EFI_CACHE_CHECK_OPERATION_TYPE_SNOOP                   8
    401 ///@}
    402 
    403 ///
    404 /// IA32/X64 Cache Check Structure
    405 ///
    406 typedef struct {
    407   UINT64             ValidFields:16;
    408   UINT64             TransactionType:2;
    409   UINT64             Operation:4;
    410   UINT64             Level:3;
    411   UINT64             ContextCorrupt:1;
    412   UINT64             ErrorUncorrected:1;
    413   UINT64             PreciseIp:1;
    414   UINT64             RestartableIp:1;
    415   UINT64             Overflow:1;
    416   UINT64             Resv1:34;
    417 } EFI_IA32_X64_CACHE_CHECK_INFO;
    418 
    419 ///
    420 /// The validation bit mask indicates which fields in the TLB Check structure
    421 /// are valid.
    422 ///@{
    423 #define EFI_TLB_CHECK_TRANSACTION_TYPE_VALID         BIT0
    424 #define EFI_TLB_CHECK_OPERATION_VALID                BIT1
    425 #define EFI_TLB_CHECK_LEVEL_VALID                    BIT2
    426 #define EFI_TLB_CHECK_CONTEXT_CORRUPT_VALID          BIT3
    427 #define EFI_TLB_CHECK_UNCORRECTED_VALID              BIT4
    428 #define EFI_TLB_CHECK_PRECISE_IP_VALID               BIT5
    429 #define EFI_TLB_CHECK_RESTARTABLE_VALID              BIT6
    430 #define EFI_TLB_CHECK_OVERFLOW_VALID                 BIT7
    431 ///@}
    432 
    433 ///
    434 /// Type of cache error in the TLB Check structure
    435 ///@{
    436 #define EFI_TLB_CHECK_ERROR_TYPE_INSTRUCTION         0
    437 #define EFI_TLB_CHECK_ERROR_TYPE_DATA_ACCESS         1
    438 #define EFI_TLB_CHECK_ERROR_TYPE_GENERIC             2
    439 ///@}
    440 
    441 ///
    442 /// Type of cache operation that caused the error in the TLB
    443 /// Check structure
    444 ///@{
    445 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC         0
    446 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_READ    1
    447 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_WRITE   2
    448 #define EFI_TLB_CHECK_OPERATION_TYPE_DATA_READ       3
    449 #define EFI_TLB_CHECK_OPERATION_TYPE_DATA_WRITE      4
    450 #define EFI_TLB_CHECK_OPERATION_TYPE_INST_FETCH      5
    451 #define EFI_TLB_CHECK_OPERATION_TYPE_PREFETCH        6
    452 ///@}
    453 
    454 ///
    455 /// IA32/X64 TLB Check Structure
    456 ///
    457 typedef struct {
    458   UINT64             ValidFields:16;
    459   UINT64             TransactionType:2;
    460   UINT64             Operation:4;
    461   UINT64             Level:3;
    462   UINT64             ContextCorrupt:1;
    463   UINT64             ErrorUncorrected:1;
    464   UINT64             PreciseIp:1;
    465   UINT64             RestartableIp:1;
    466   UINT64             Overflow:1;
    467   UINT64             Resv1:34;
    468 } EFI_IA32_X64_TLB_CHECK_INFO;
    469 
    470 ///
    471 /// The validation bit mask indicates which fields in the MS Check structure
    472 /// are valid.
    473 ///@{
    474 #define EFI_BUS_CHECK_TRANSACTION_TYPE_VALID         BIT0
    475 #define EFI_BUS_CHECK_OPERATION_VALID                BIT1
    476 #define EFI_BUS_CHECK_LEVEL_VALID                    BIT2
    477 #define EFI_BUS_CHECK_CONTEXT_CORRUPT_VALID          BIT3
    478 #define EFI_BUS_CHECK_UNCORRECTED_VALID              BIT4
    479 #define EFI_BUS_CHECK_PRECISE_IP_VALID               BIT5
    480 #define EFI_BUS_CHECK_RESTARTABLE_VALID              BIT6
    481 #define EFI_BUS_CHECK_OVERFLOW_VALID                 BIT7
    482 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_VALID       BIT8
    483 #define EFI_BUS_CHECK_TIME_OUT_VALID                 BIT9
    484 #define EFI_BUS_CHECK_ADDRESS_SPACE_VALID            BIT10
    485 ///@}
    486 
    487 ///
    488 /// Type of cache error in the Bus Check structure
    489 ///@{
    490 #define EFI_BUS_CHECK_ERROR_TYPE_INSTRUCTION         0
    491 #define EFI_BUS_CHECK_ERROR_TYPE_DATA_ACCESS         1
    492 #define EFI_BUS_CHECK_ERROR_TYPE_GENERIC             2
    493 ///@}
    494 
    495 ///
    496 /// Type of cache operation that caused the error in the Bus
    497 /// Check structure
    498 ///@{
    499 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC         0
    500 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_READ    1
    501 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_WRITE   2
    502 #define EFI_BUS_CHECK_OPERATION_TYPE_DATA_READ       3
    503 #define EFI_BUS_CHECK_OPERATION_TYPE_DATA_WRITE      4
    504 #define EFI_BUS_CHECK_OPERATION_TYPE_INST_FETCH      5
    505 #define EFI_BUS_CHECK_OPERATION_TYPE_PREFETCH        6
    506 ///@}
    507 
    508 ///
    509 /// Type of Participation
    510 ///@{
    511 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_REQUEST     0
    512 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_RESPONDED   1
    513 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_OBSERVED    2
    514 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_GENERIC     3
    515 ///@}
    516 
    517 ///
    518 /// Type of Address Space
    519 ///@{
    520 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_MEMORY      0
    521 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_RESERVED    1
    522 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_IO          2
    523 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_OTHER       3
    524 ///@}
    525 
    526 ///
    527 /// IA32/X64 Bus Check Structure
    528 ///
    529 typedef struct {
    530   UINT64             ValidFields:16;
    531   UINT64             TransactionType:2;
    532   UINT64             Operation:4;
    533   UINT64             Level:3;
    534   UINT64             ContextCorrupt:1;
    535   UINT64             ErrorUncorrected:1;
    536   UINT64             PreciseIp:1;
    537   UINT64             RestartableIp:1;
    538   UINT64             Overflow:1;
    539   UINT64             ParticipationType:2;
    540   UINT64             TimeOut:1;
    541   UINT64             AddressSpace:2;
    542   UINT64             Resv1:29;
    543 } EFI_IA32_X64_BUS_CHECK_INFO;
    544 
    545 ///
    546 /// The validation bit mask indicates which fields in the MS Check structure
    547 /// are valid.
    548 ///@{
    549 #define EFI_MS_CHECK_ERROR_TYPE_VALID                BIT0
    550 #define EFI_MS_CHECK_CONTEXT_CORRUPT_VALID           BIT1
    551 #define EFI_MS_CHECK_UNCORRECTED_VALID               BIT2
    552 #define EFI_MS_CHECK_PRECISE_IP_VALID                BIT3
    553 #define EFI_MS_CHECK_RESTARTABLE_VALID               BIT4
    554 #define EFI_MS_CHECK_OVERFLOW_VALID                  BIT5
    555 ///@}
    556 
    557 ///
    558 /// Error type identifies the operation that caused the error.
    559 ///@{
    560 #define EFI_MS_CHECK_ERROR_TYPE_NO                             0
    561 #define EFI_MS_CHECK_ERROR_TYPE_UNCLASSIFIED                   1
    562 #define EFI_MS_CHECK_ERROR_TYPE_MICROCODE_PARITY               2
    563 #define EFI_MS_CHECK_ERROR_TYPE_EXTERNAL                       3
    564 #define EFI_MS_CHECK_ERROR_TYPE_FRC                            4
    565 #define EFI_MS_CHECK_ERROR_TYPE_INTERNAL_UNCLASSIFIED          5
    566 ///@}
    567 
    568 ///
    569 /// IA32/X64 MS Check Field Description
    570 ///
    571 typedef struct {
    572   UINT64             ValidFields:16;
    573   UINT64             ErrorType:3;
    574   UINT64             ContextCorrupt:1;
    575   UINT64             ErrorUncorrected:1;
    576   UINT64             PreciseIp:1;
    577   UINT64             RestartableIp:1;
    578   UINT64             Overflow:1;
    579   UINT64             Resv1:40;
    580 } EFI_IA32_X64_MS_CHECK_INFO;
    581 
    582 ///
    583 /// IA32/X64 Check Information Item
    584 ///
    585 typedef union {
    586   EFI_IA32_X64_CACHE_CHECK_INFO  CacheCheck;
    587   EFI_IA32_X64_TLB_CHECK_INFO    TlbCheck;
    588   EFI_IA32_X64_BUS_CHECK_INFO    BusCheck;
    589   EFI_IA32_X64_MS_CHECK_INFO     MsCheck;
    590   UINT64                         Data64;
    591 } EFI_IA32_X64_CHECK_INFO_ITEM;
    592 
    593 ///
    594 /// The validation bit mask indicates which fields in the IA32/X64 Processor Error
    595 /// Information Structure are valid.
    596 ///@{
    597 #define EFI_IA32_X64_ERROR_PROC_CHECK_INFO_VALID       BIT0
    598 #define EFI_IA32_X64_ERROR_PROC_TARGET_ADDR_VALID      BIT1
    599 #define EFI_IA32_X64_ERROR_PROC_REQUESTER_ID_VALID     BIT2
    600 #define EFI_IA32_X64_ERROR_PROC_RESPONDER_ID_VALID     BIT3
    601 #define EFI_IA32_X64_ERROR_PROC_INST_IP_VALID          BIT4
    602 ///@}
    603 
    604 ///
    605 /// IA32/X64 Processor Error Information Structure
    606 ///
    607 typedef struct {
    608   EFI_GUID                     ErrorType;
    609   UINT64                       ValidFields;
    610   EFI_IA32_X64_CHECK_INFO_ITEM CheckInfo;
    611   UINT64                       TargetId;
    612   UINT64                       RequestorId;
    613   UINT64                       ResponderId;
    614   UINT64                       InstructionIP;
    615 } EFI_IA32_X64_PROCESS_ERROR_INFO;
    616 
    617 ///
    618 /// IA32/X64 Processor Context Information Structure
    619 ///
    620 typedef struct {
    621   UINT16             RegisterType;
    622   UINT16             ArraySize;
    623   UINT32             MsrAddress;
    624   UINT64             MmRegisterAddress;
    625   //
    626   // This field will provide the contents of the actual registers or raw data.
    627   // The number of Registers or size of the raw data reported is determined
    628   // by (Array Size / 8) or otherwise specified by the context structure type
    629   // definition.
    630   //
    631 } EFI_IA32_X64_PROCESSOR_CONTEXT_INFO;
    632 
    633 ///
    634 /// Register Context Type
    635 ///@{
    636 #define EFI_REG_CONTEXT_TYPE_UNCLASSIFIED            0x0000
    637 #define EFI_REG_CONTEXT_TYPE_MSR                     0x0001
    638 #define EFI_REG_CONTEXT_TYPE_IA32                    0x0002
    639 #define EFI_REG_CONTEXT_TYPE_X64                     0x0003
    640 #define EFI_REG_CONTEXT_TYPE_FXSAVE                  0x0004
    641 #define EFI_REG_CONTEXT_TYPE_DR_IA32                 0x0005
    642 #define EFI_REG_CONTEXT_TYPE_DR_X64                  0x0006
    643 #define EFI_REG_CONTEXT_TYPE_MEM_MAP                 0x0007
    644 ///@}
    645 
    646 ///
    647 /// IA32 Register State
    648 ///
    649 typedef struct {
    650   UINT32             Eax;
    651   UINT32             Ebx;
    652   UINT32             Ecx;
    653   UINT32             Edx;
    654   UINT32             Esi;
    655   UINT32             Edi;
    656   UINT32             Ebp;
    657   UINT32             Esp;
    658   UINT16             Cs;
    659   UINT16             Ds;
    660   UINT16             Ss;
    661   UINT16             Es;
    662   UINT16             Fs;
    663   UINT16             Gs;
    664   UINT32             Eflags;
    665   UINT32             Eip;
    666   UINT32             Cr0;
    667   UINT32             Cr1;
    668   UINT32             Cr2;
    669   UINT32             Cr3;
    670   UINT32             Cr4;
    671   UINT32             Gdtr[2];
    672   UINT32             Idtr[2];
    673   UINT16             Ldtr;
    674   UINT16             Tr;
    675 } EFI_CONTEXT_IA32_REGISTER_STATE;
    676 
    677 ///
    678 /// X64 Register State
    679 ///
    680 typedef struct {
    681   UINT64             Rax;
    682   UINT64             Rbx;
    683   UINT64             Rcx;
    684   UINT64             Rdx;
    685   UINT64             Rsi;
    686   UINT64             Rdi;
    687   UINT64             Rbp;
    688   UINT64             Rsp;
    689   UINT64             R8;
    690   UINT64             R9;
    691   UINT64             R10;
    692   UINT64             R11;
    693   UINT64             R12;
    694   UINT64             R13;
    695   UINT64             R14;
    696   UINT64             R15;
    697   UINT16             Cs;
    698   UINT16             Ds;
    699   UINT16             Ss;
    700   UINT16             Es;
    701   UINT16             Fs;
    702   UINT16             Gs;
    703   UINT32             Resv1;
    704   UINT64             Rflags;
    705   UINT64             Rip;
    706   UINT64             Cr0;
    707   UINT64             Cr1;
    708   UINT64             Cr2;
    709   UINT64             Cr3;
    710   UINT64             Cr4;
    711   UINT64             Gdtr[2];
    712   UINT64             Idtr[2];
    713   UINT16             Ldtr;
    714   UINT16             Tr;
    715 } EFI_CONTEXT_X64_REGISTER_STATE;
    716 
    717 ///
    718 /// The validation bit mask indicates each of the following field is in IA32/X64
    719 /// Processor Error Section.
    720 ///
    721 typedef struct {
    722   UINT64             ApicIdValid:1;
    723   UINT64             CpuIdInforValid:1;
    724   UINT64             ErrorInfoNum:6;
    725   UINT64             ContextNum:6;
    726   UINT64             Resv1:50;
    727 } EFI_IA32_X64_VALID_BITS;
    728 
    729 #endif
    730 
    731 ///
    732 /// Error Status Fields
    733 ///
    734 typedef struct {
    735   UINT64          Resv1:8;
    736   UINT64          Type:8;
    737   UINT64          AddressSignal:1;        ///< Error in Address signals or in Address portion of transaction
    738   UINT64          ControlSignal:1;        ///< Error in Control signals or in Control portion of transaction
    739   UINT64          DataSignal:1;           ///< Error in Data signals or in Data portion of transaction
    740   UINT64          DetectedByResponder:1;  ///< Error detected by responder
    741   UINT64          DetectedByRequester:1;  ///< Error detected by requestor
    742   UINT64          FirstError:1;           ///< First Error in the sequence - option field
    743   UINT64          OverflowNotLogged:1;    ///< Additional errors were not logged due to lack of resources
    744   UINT64          Resv2:41;
    745 } EFI_GENERIC_ERROR_STATUS;
    746 
    747 ///
    748 /// Error Type
    749 ///
    750 typedef enum {
    751   ///
    752   /// General Internal errors
    753   ///
    754   ErrorInternal       = 1,
    755   ErrorBus            = 16,
    756   ///
    757   /// Component Internal errors
    758   ///
    759   ErrorMemStorage     = 4,        // Error in memory device
    760   ErrorTlbStorage     = 5,        // TLB error in cache
    761   ErrorCacheStorage   = 6,
    762   ErrorFunctionalUnit = 7,
    763   ErrorSelftest       = 8,
    764   ErrorOverflow       = 9,
    765   ///
    766   /// Bus internal errors
    767   ///
    768   ErrorVirtualMap     = 17,
    769   ErrorAccessInvalid  = 18,       // Improper access
    770   ErrorUnimplAccess   = 19,       // Unimplemented memory access
    771   ErrorLossOfLockstep = 20,
    772   ErrorResponseInvalid= 21,       // Response not associated with request
    773   ErrorParity         = 22,
    774   ErrorProtocol       = 23,
    775   ErrorPath           = 24,       // Detected path error
    776   ErrorTimeout        = 25,       // Bus timeout
    777   ErrorPoisoned       = 26        // Read data poisoned
    778 } EFI_GENERIC_ERROR_STATUS_ERROR_TYPE;
    779 
    780 ///
    781 /// Validation bit mask indicates which fields in the memory error record are valid
    782 /// in Memory Error section
    783 ///@{
    784 #define EFI_PLATFORM_MEMORY_ERROR_STATUS_VALID                 BIT0
    785 #define EFI_PLATFORM_MEMORY_PHY_ADDRESS_VALID                  BIT1
    786 #define EFI_PLATFORM_MEMORY_PHY_ADDRESS_MASK_VALID             BIT2
    787 #define EFI_PLATFORM_MEMORY_NODE_VALID                         BIT3
    788 #define EFI_PLATFORM_MEMORY_CARD_VALID                         BIT4
    789 #define EFI_PLATFORM_MEMORY_MODULE_VALID                       BIT5
    790 #define EFI_PLATFORM_MEMORY_BANK_VALID                         BIT6
    791 #define EFI_PLATFORM_MEMORY_DEVICE_VALID                       BIT7
    792 #define EFI_PLATFORM_MEMORY_ROW_VALID                          BIT8
    793 #define EFI_PLATFORM_MEMORY_COLUMN_VALID                       BIT9
    794 #define EFI_PLATFORM_MEMORY_BIT_POS_VALID                      BIT10
    795 #define EFI_PLATFORM_MEMORY_REQUESTOR_ID_VALID                 BIT11
    796 #define EFI_PLATFORM_MEMORY_RESPONDER_ID_VALID                 BIT12
    797 #define EFI_PLATFORM_MEMORY_TARGET_ID_VALID                    BIT13
    798 #define EFI_PLATFORM_MEMORY_ERROR_TYPE_VALID                   BIT14
    799 #define EFI_PLATFORM_MEMORY_ERROR_RANK_NUM_VALID               BIT15
    800 #define EFI_PLATFORM_MEMORY_ERROR_CARD_HANDLE_VALID            BIT16
    801 #define EFI_PLATFORM_MEMORY_ERROR_MODULE_HANDLE_VALID          BIT17
    802 #define EFI_PLATFORM_MEMORY_ERROR_EXTENDED_ROW_BIT_16_17_VALID BIT18
    803 #define EFI_PLATFORM_MEMORY_ERROR_BANK_GROUP_VALID             BIT19
    804 #define EFI_PLATFORM_MEMORY_ERROR_BANK_ADDRESS_VALID           BIT20
    805 #define EFI_PLATFORM_MEMORY_ERROR_CHIP_IDENTIFICATION_VALID    BIT21
    806 ///@}
    807 
    808 ///
    809 /// Memory Error Type identifies the type of error that occurred in Memory
    810 /// Error section
    811 ///@{
    812 #define EFI_PLATFORM_MEMORY_ERROR_UNKNOWN                      0x00
    813 #define EFI_PLATFORM_MEMORY_ERROR_NONE                         0x01
    814 #define EFI_PLATFORM_MEMORY_ERROR_SINGLEBIT_ECC                0x02
    815 #define EFI_PLATFORM_MEMORY_ERROR_MLTIBIT_ECC                  0x03
    816 #define EFI_PLATFORM_MEMORY_ERROR_SINGLESYMBOLS_CHIPKILL       0x04
    817 #define EFI_PLATFORM_MEMORY_ERROR_MULTISYMBOL_CHIPKILL         0x05
    818 #define EFI_PLATFORM_MEMORY_ERROR_MATER_ABORT                  0x06
    819 #define EFI_PLATFORM_MEMORY_ERROR_TARGET_ABORT                 0x07
    820 #define EFI_PLATFORM_MEMORY_ERROR_PARITY                       0x08
    821 #define EFI_PLATFORM_MEMORY_ERROR_WDT                          0x09
    822 #define EFI_PLATFORM_MEMORY_ERROR_INVALID_ADDRESS              0x0A
    823 #define EFI_PLATFORM_MEMORY_ERROR_MIRROR_FAILED                0x0B
    824 #define EFI_PLATFORM_MEMORY_ERROR_SPARING                      0x0C
    825 #define EFI_PLATFORM_MEMORY_ERROR_SCRUB_CORRECTED              0x0D
    826 #define EFI_PLATFORM_MEMORY_ERROR_SCRUB_UNCORRECTED            0x0E
    827 #define EFI_PLATFORM_MEMORY_ERROR_MEMORY_MAP_EVENT             0x0F
    828 ///@}
    829 
    830 ///
    831 /// Memory Error Section
    832 ///
    833 typedef struct {
    834   UINT64                   ValidFields;
    835   EFI_GENERIC_ERROR_STATUS ErrorStatus;
    836   UINT64                   PhysicalAddress;      // Error physical address
    837   UINT64                   PhysicalAddressMask;  // Grnaularity
    838   UINT16                   Node;                 // Node #
    839   UINT16                   Card;
    840   UINT16                   ModuleRank;           // Module or Rank#
    841   UINT16                   Bank;
    842   UINT16                   Device;
    843   UINT16                   Row;
    844   UINT16                   Column;
    845   UINT16                   BitPosition;
    846   UINT64                   RequestorId;
    847   UINT64                   ResponderId;
    848   UINT64                   TargetId;
    849   UINT8                    ErrorType;
    850   UINT8                    Extended;
    851   UINT16                   RankNum;
    852   UINT16                   CardHandle;
    853   UINT16                   ModuleHandle;
    854 } EFI_PLATFORM_MEMORY_ERROR_DATA;
    855 
    856 ///
    857 /// Validation bit mask indicates which fields in the memory error record 2 are valid
    858 /// in Memory Error section 2
    859 ///@{
    860 #define EFI_PLATFORM_MEMORY2_ERROR_STATUS_VALID                 BIT0
    861 #define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_VALID                  BIT1
    862 #define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_MASK_VALID             BIT2
    863 #define EFI_PLATFORM_MEMORY2_NODE_VALID                         BIT3
    864 #define EFI_PLATFORM_MEMORY2_CARD_VALID                         BIT4
    865 #define EFI_PLATFORM_MEMORY2_MODULE_VALID                       BIT5
    866 #define EFI_PLATFORM_MEMORY2_BANK_VALID                         BIT6
    867 #define EFI_PLATFORM_MEMORY2_DEVICE_VALID                       BIT7
    868 #define EFI_PLATFORM_MEMORY2_ROW_VALID                          BIT8
    869 #define EFI_PLATFORM_MEMORY2_COLUMN_VALID                       BIT9
    870 #define EFI_PLATFORM_MEMORY2_RANK_VALID                         BIT10
    871 #define EFI_PLATFORM_MEMORY2_BIT_POS_VALID                      BIT11
    872 #define EFI_PLATFORM_MEMORY2_CHIP_ID_VALID                      BIT12
    873 #define EFI_PLATFORM_MEMORY2_MEMORY_ERROR_TYPE_VALID            BIT13
    874 #define EFI_PLATFORM_MEMORY2_STATUS_VALID                       BIT14
    875 #define EFI_PLATFORM_MEMORY2_REQUESTOR_ID_VALID                 BIT15
    876 #define EFI_PLATFORM_MEMORY2_RESPONDER_ID_VALID                 BIT16
    877 #define EFI_PLATFORM_MEMORY2_TARGET_ID_VALID                    BIT17
    878 #define EFI_PLATFORM_MEMORY2_CARD_HANDLE_VALID                  BIT18
    879 #define EFI_PLATFORM_MEMORY2_MODULE_HANDLE_VALID                BIT19
    880 #define EFI_PLATFORM_MEMORY2_BANK_GROUP_VALID                   BIT20
    881 #define EFI_PLATFORM_MEMORY2_BANK_ADDRESS_VALID                 BIT21
    882 ///@}
    883 
    884 ///
    885 /// Memory Error Type identifies the type of error that occurred in Memory
    886 /// Error section 2
    887 ///@{
    888 #define EFI_PLATFORM_MEMORY2_ERROR_UNKNOWN                      0x00
    889 #define EFI_PLATFORM_MEMORY2_ERROR_NONE                         0x01
    890 #define EFI_PLATFORM_MEMORY2_ERROR_SINGLEBIT_ECC                0x02
    891 #define EFI_PLATFORM_MEMORY2_ERROR_MLTIBIT_ECC                  0x03
    892 #define EFI_PLATFORM_MEMORY2_ERROR_SINGLESYMBOL_CHIPKILL        0x04
    893 #define EFI_PLATFORM_MEMORY2_ERROR_MULTISYMBOL_CHIPKILL         0x05
    894 #define EFI_PLATFORM_MEMORY2_ERROR_MASTER_ABORT                 0x06
    895 #define EFI_PLATFORM_MEMORY2_ERROR_TARGET_ABORT                 0x07
    896 #define EFI_PLATFORM_MEMORY2_ERROR_PARITY                       0x08
    897 #define EFI_PLATFORM_MEMORY2_ERROR_WDT                          0x09
    898 #define EFI_PLATFORM_MEMORY2_ERROR_INVALID_ADDRESS              0x0A
    899 #define EFI_PLATFORM_MEMORY2_ERROR_MIRROR_BROKEN                0x0B
    900 #define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_SPARING               0x0C
    901 #define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_CORRECTED              0x0D
    902 #define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_UNCORRECTED            0x0E
    903 #define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_MAP_EVENT             0x0F
    904 ///@}
    905 
    906 ///
    907 /// Memory Error Section 2
    908 ///
    909 typedef struct {
    910   UINT64                    ValidFields;
    911   EFI_GENERIC_ERROR_STATUS  ErrorStatus;
    912   UINT64                    PhysicalAddress;      // Error physical address
    913   UINT64                    PhysicalAddressMask;  // Grnaularity
    914   UINT16                    Node;                 // Node #
    915   UINT16                    Card;
    916   UINT16                    Module;               // Module or Rank#
    917   UINT16                    Bank;
    918   UINT32                    Device;
    919   UINT32                    Row;
    920   UINT32                    Column;
    921   UINT32                    Rank;
    922   UINT32                    BitPosition;
    923   UINT8                     ChipId;
    924   UINT8                     MemErrorType;
    925   UINT8                     Status;
    926   UINT8                     Reserved;
    927   UINT64                    RequestorId;
    928   UINT64                    ResponderId;
    929   UINT64                    TargetId;
    930   UINT32                    CardHandle;
    931   UINT32                    ModuleHandle;
    932 } EFI_PLATFORM_MEMORY2_ERROR_DATA;
    933 
    934 ///
    935 /// Validation bits mask indicates which of the following fields is valid
    936 /// in PCI Express Error Record.
    937 ///@{
    938 #define EFI_PCIE_ERROR_PORT_TYPE_VALID               BIT0
    939 #define EFI_PCIE_ERROR_VERSION_VALID                 BIT1
    940 #define EFI_PCIE_ERROR_COMMAND_STATUS_VALID          BIT2
    941 #define EFI_PCIE_ERROR_DEVICE_ID_VALID               BIT3
    942 #define EFI_PCIE_ERROR_SERIAL_NO_VALID               BIT4
    943 #define EFI_PCIE_ERROR_BRIDGE_CRL_STS_VALID          BIT5
    944 #define EFI_PCIE_ERROR_CAPABILITY_INFO_VALID         BIT6
    945 #define EFI_PCIE_ERROR_AER_INFO_VALID                BIT7
    946 ///@}
    947 
    948 ///
    949 /// PCIe Device/Port Type as defined in the PCI Express capabilities register
    950 ///@{
    951 #define EFI_PCIE_ERROR_PORT_PCIE_ENDPOINT            0x00000000
    952 #define EFI_PCIE_ERROR_PORT_PCI_ENDPOINT             0x00000001
    953 #define EFI_PCIE_ERROR_PORT_ROOT_PORT                0x00000004
    954 #define EFI_PCIE_ERROR_PORT_UPSWITCH_PORT            0x00000005
    955 #define EFI_PCIE_ERROR_PORT_DOWNSWITCH_PORT          0x00000006
    956 #define EFI_PCIE_ERROR_PORT_PCIE_TO_PCI_BRIDGE       0x00000007
    957 #define EFI_PCIE_ERROR_PORT_PCI_TO_PCIE_BRIDGE       0x00000008
    958 #define EFI_PCIE_ERROR_PORT_ROOT_INT_ENDPOINT        0x00000009
    959 #define EFI_PCIE_ERROR_PORT_ROOT_EVENT_COLLECTOR     0x0000000A
    960 ///@}
    961 
    962 ///
    963 /// PCI Slot number
    964 ///
    965 typedef struct {
    966   UINT16          Resv1:3;
    967   UINT16          Number:13;
    968 } EFI_GENERIC_ERROR_PCI_SLOT;
    969 
    970 ///
    971 /// PCIe Root Port PCI/bridge PCI compatible device number and
    972 /// bus number information to uniquely identify the root port or
    973 /// bridge. Default values for both the bus numbers is zero.
    974 ///
    975 typedef struct {
    976   UINT16                     VendorId;
    977   UINT16                     DeviceId;
    978   UINT8                      ClassCode[3];
    979   UINT8                      Function;
    980   UINT8                      Device;
    981   UINT16                     Segment;
    982   UINT8                      PrimaryOrDeviceBus;
    983   UINT8                      SecondaryBus;
    984   EFI_GENERIC_ERROR_PCI_SLOT Slot;
    985   UINT8                      Resv1;
    986 } EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID;
    987 
    988 ///
    989 /// PCIe Capability Structure
    990 ///
    991 typedef struct {
    992   UINT8           PcieCap[60];
    993 } EFI_PCIE_ERROR_DATA_CAPABILITY;
    994 
    995 ///
    996 /// PCIe Advanced Error Reporting Extended Capability Structure.
    997 ///
    998 typedef struct {
    999   UINT8           PcieAer[96];
   1000 } EFI_PCIE_ERROR_DATA_AER;
   1001 
   1002 ///
   1003 /// PCI Express Error Record
   1004 ///
   1005 typedef struct {
   1006   UINT64                               ValidFields;
   1007   UINT32                               PortType;
   1008   UINT32                               Version;
   1009   UINT32                               CommandStatus;
   1010   UINT32                               Resv2;
   1011   EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID DevBridge;
   1012   UINT64                               SerialNo;
   1013   UINT32                               BridgeControlStatus;
   1014   EFI_PCIE_ERROR_DATA_CAPABILITY       Capability;
   1015   EFI_PCIE_ERROR_DATA_AER              AerInfo;
   1016 } EFI_PCIE_ERROR_DATA;
   1017 
   1018 ///
   1019 /// Validation bits Indicates which of the following fields is valid
   1020 /// in PCI/PCI-X Bus Error Section.
   1021 ///@{
   1022 #define EFI_PCI_PCIX_BUS_ERROR_STATUS_VALID          BIT0
   1023 #define EFI_PCI_PCIX_BUS_ERROR_TYPE_VALID            BIT1
   1024 #define EFI_PCI_PCIX_BUS_ERROR_BUS_ID_VALID          BIT2
   1025 #define EFI_PCI_PCIX_BUS_ERROR_BUS_ADDRESS_VALID     BIT3
   1026 #define EFI_PCI_PCIX_BUS_ERROR_BUS_DATA_VALID        BIT4
   1027 #define EFI_PCI_PCIX_BUS_ERROR_COMMAND_VALID         BIT5
   1028 #define EFI_PCI_PCIX_BUS_ERROR_REQUESTOR_ID_VALID    BIT6
   1029 #define EFI_PCI_PCIX_BUS_ERROR_COMPLETER_ID_VALID    BIT7
   1030 #define EFI_PCI_PCIX_BUS_ERROR_TARGET_ID_VALID       BIT8
   1031 ///@}
   1032 
   1033 ///
   1034 /// PCI Bus Error Type in PCI/PCI-X Bus Error Section
   1035 ///@{
   1036 #define EFI_PCI_PCIX_BUS_ERROR_UNKNOWN               0x0000
   1037 #define EFI_PCI_PCIX_BUS_ERROR_DATA_PARITY           0x0001
   1038 #define EFI_PCI_PCIX_BUS_ERROR_SYSTEM                0x0002
   1039 #define EFI_PCI_PCIX_BUS_ERROR_MASTER_ABORT          0x0003
   1040 #define EFI_PCI_PCIX_BUS_ERROR_BUS_TIMEOUT           0x0004
   1041 #define EFI_PCI_PCIX_BUS_ERROR_MASTER_DATA_PARITY    0x0005
   1042 #define EFI_PCI_PCIX_BUS_ERROR_ADDRESS_PARITY        0x0006
   1043 #define EFI_PCI_PCIX_BUS_ERROR_COMMAND_PARITY        0x0007
   1044 ///@}
   1045 
   1046 ///
   1047 /// PCI/PCI-X Bus Error Section
   1048 ///
   1049 typedef struct {
   1050   UINT64                   ValidFields;
   1051   EFI_GENERIC_ERROR_STATUS ErrorStatus;
   1052   UINT16                   Type;
   1053   UINT16                   BusId;
   1054   UINT32                   Resv2;
   1055   UINT64                   BusAddress;
   1056   UINT64                   BusData;
   1057   UINT64                   BusCommand;
   1058   UINT64                   RequestorId;
   1059   UINT64                   ResponderId;
   1060   UINT64                   TargetId;
   1061 } EFI_PCI_PCIX_BUS_ERROR_DATA;
   1062 
   1063 ///
   1064 /// Validation bits Indicates which of the following fields is valid
   1065 /// in PCI/PCI-X Component Error Section.
   1066 ///@{
   1067 #define EFI_PCI_PCIX_DEVICE_ERROR_STATUS_VALID                 BIT0
   1068 #define EFI_PCI_PCIX_DEVICE_ERROR_ID_INFO_VALID                BIT1
   1069 #define EFI_PCI_PCIX_DEVICE_ERROR_MEM_NUM_VALID                BIT2
   1070 #define EFI_PCI_PCIX_DEVICE_ERROR_IO_NUM_VALID                 BIT3
   1071 #define EFI_PCI_PCIX_DEVICE_ERROR_REG_DATA_PAIR_VALID          BIT4
   1072 ///@}
   1073 
   1074 ///
   1075 /// PCI/PCI-X Device Identification Information
   1076 ///
   1077 typedef struct {
   1078   UINT16          VendorId;
   1079   UINT16          DeviceId;
   1080   UINT8           ClassCode[3];
   1081   UINT8           Function;
   1082   UINT8           Device;
   1083   UINT8           Bus;
   1084   UINT8           Segment;
   1085   UINT8           Resv1;
   1086   UINT32          Resv2;
   1087 } EFI_GENERIC_ERROR_PCI_DEVICE_ID;
   1088 
   1089 ///
   1090 /// Identifies the type of firmware error record
   1091 ///
   1092 #define EFI_FIRMWARE_ERROR_TYPE_IPF_SAL              0x00
   1093 
   1094 ///
   1095 /// Firmware Error Record Section
   1096 ///
   1097 typedef struct {
   1098   UINT8       ErrorType;
   1099   UINT8       Resv1[7];
   1100   UINT64      RecordId;
   1101 } EFI_FIRMWARE_ERROR_DATA;
   1102 
   1103 ///
   1104 /// Fault Reason in DMAr Generic Error Section
   1105 ///@{
   1106 #define EFI_DMA_FAULT_REASON_TABLE_ENTRY_NOT_PRESENT           0x01
   1107 #define EFI_DMA_FAULT_REASON_TABLE_ENTRY_INVALID               0x02
   1108 #define EFI_DMA_FAULT_REASON_ACCESS_MAPPING_TABLE_ERROR        0x03
   1109 #define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_MAPPING_TABLE   0x04
   1110 #define EFI_DMA_FAULT_REASON_ACCESS_ADDR_OUT_OF_SPACE          0x05
   1111 #define EFI_DMA_FAULT_REASON_INVALID_ACCESS                    0x06
   1112 #define EFI_DMA_FAULT_REASON_INVALID_REQUEST                   0x07
   1113 #define EFI_DMA_FAULT_REASON_ACCESS_TRANSLATE_TABLE_ERROR      0x08
   1114 #define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_TRANSLATE_TABLE 0x09
   1115 #define EFI_DMA_FAULT_REASON_INVALID_COMMAOND                  0x0A
   1116 #define EFI_DMA_FAULT_REASON_ACCESS_COMMAND_BUFFER_ERROR       0x0B
   1117 ///@}
   1118 
   1119 ///
   1120 /// DMA access type in DMAr Generic Error Section
   1121 ///@{
   1122 #define EFI_DMA_ACCESS_TYPE_READ                     0x00
   1123 #define EFI_DMA_ACCESS_TYPE_WRITE                    0x01
   1124 ///@}
   1125 
   1126 ///
   1127 /// DMA address type in DMAr Generic Error Section
   1128 ///@{
   1129 #define EFI_DMA_ADDRESS_UNTRANSLATED                 0x00
   1130 #define EFI_DMA_ADDRESS_TRANSLATION                  0x01
   1131 ///@}
   1132 
   1133 ///
   1134 /// Architecture type in DMAr Generic Error Section
   1135 ///@{
   1136 #define EFI_DMA_ARCH_TYPE_VT                         0x01
   1137 #define EFI_DMA_ARCH_TYPE_IOMMU                      0x02
   1138 ///@}
   1139 
   1140 ///
   1141 /// DMAr Generic Error Section
   1142 ///
   1143 typedef struct {
   1144   UINT16      RequesterId;
   1145   UINT16      SegmentNumber;
   1146   UINT8       FaultReason;
   1147   UINT8       AccessType;
   1148   UINT8       AddressType;
   1149   UINT8       ArchType;
   1150   UINT64      DeviceAddr;
   1151   UINT8       Resv1[16];
   1152 } EFI_DMAR_GENERIC_ERROR_DATA;
   1153 
   1154 ///
   1155 /// Intel VT for Directed I/O specific DMAr Errors
   1156 ///
   1157 typedef struct {
   1158   UINT8           Version;
   1159   UINT8           Revision;
   1160   UINT8           OemId[6];
   1161   UINT64          Capability;
   1162   UINT64          CapabilityEx;
   1163   UINT32          GlobalCommand;
   1164   UINT32          GlobalStatus;
   1165   UINT32          FaultStatus;
   1166   UINT8           Resv1[12];
   1167   UINT64          FaultRecord[2];
   1168   UINT64          RootEntry[2];
   1169   UINT64          ContextEntry[2];
   1170   UINT64          PteL6;
   1171   UINT64          PteL5;
   1172   UINT64          PteL4;
   1173   UINT64          PteL3;
   1174   UINT64          PteL2;
   1175   UINT64          PteL1;
   1176 } EFI_DIRECTED_IO_DMAR_ERROR_DATA;
   1177 
   1178 ///
   1179 /// IOMMU specific DMAr Errors
   1180 ///
   1181 typedef struct {
   1182   UINT8           Revision;
   1183   UINT8           Resv1[7];
   1184   UINT64          Control;
   1185   UINT64          Status;
   1186   UINT8           Resv2[8];
   1187   UINT64          EventLogEntry[2];
   1188   UINT8           Resv3[16];
   1189   UINT64          DeviceTableEntry[4];
   1190   UINT64          PteL6;
   1191   UINT64          PteL5;
   1192   UINT64          PteL4;
   1193   UINT64          PteL3;
   1194   UINT64          PteL2;
   1195   UINT64          PteL1;
   1196 } EFI_IOMMU_DMAR_ERROR_DATA;
   1197 
   1198 #pragma pack()
   1199 
   1200 extern EFI_GUID gEfiEventNotificationTypeCmcGuid;
   1201 extern EFI_GUID gEfiEventNotificationTypeCpeGuid;
   1202 extern EFI_GUID gEfiEventNotificationTypeMceGuid;
   1203 extern EFI_GUID gEfiEventNotificationTypePcieGuid;
   1204 extern EFI_GUID gEfiEventNotificationTypeInitGuid;
   1205 extern EFI_GUID gEfiEventNotificationTypeNmiGuid;
   1206 extern EFI_GUID gEfiEventNotificationTypeBootGuid;
   1207 extern EFI_GUID gEfiEventNotificationTypeDmarGuid;
   1208 
   1209 extern EFI_GUID gEfiProcessorGenericErrorSectionGuid;
   1210 extern EFI_GUID gEfiProcessorSpecificErrorSectionGuid;
   1211 extern EFI_GUID gEfiIa32X64ProcessorErrorSectionGuid;
   1212 extern EFI_GUID gEfiArmProcessorErrorSectionGuid ;
   1213 extern EFI_GUID gEfiPlatformMemoryErrorSectionGuid;
   1214 extern EFI_GUID gEfiPlatformMemory2ErrorSectionGuid;
   1215 extern EFI_GUID gEfiPcieErrorSectionGuid;
   1216 extern EFI_GUID gEfiFirmwareErrorSectionGuid;
   1217 extern EFI_GUID gEfiPciBusErrorSectionGuid;
   1218 extern EFI_GUID gEfiPciDevErrorSectionGuid;
   1219 extern EFI_GUID gEfiDMArGenericErrorSectionGuid;
   1220 extern EFI_GUID gEfiDirectedIoDMArErrorSectionGuid;
   1221 extern EFI_GUID gEfiIommuDMArErrorSectionGuid;
   1222 
   1223 #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
   1224 ///
   1225 /// IA32 and x64 Specific definitions.
   1226 ///
   1227 
   1228 extern EFI_GUID gEfiIa32X64ErrorTypeCacheCheckGuid;
   1229 extern EFI_GUID gEfiIa32X64ErrorTypeTlbCheckGuid;
   1230 extern EFI_GUID gEfiIa32X64ErrorTypeBusCheckGuid;
   1231 extern EFI_GUID gEfiIa32X64ErrorTypeMsCheckGuid;
   1232 
   1233 #endif
   1234 
   1235 #endif
   1236