xref: /openbmc/libcper/edk/Cper.h (revision a0865e38)
11b0b00e3SLawrence Tang /** @file
21b0b00e3SLawrence Tang   GUIDs and definitions used for Common Platform Error Record.
31b0b00e3SLawrence Tang 
41b0b00e3SLawrence Tang   Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>
51b0b00e3SLawrence Tang   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
61b0b00e3SLawrence Tang   SPDX-License-Identifier: BSD-2-Clause-Patent
71b0b00e3SLawrence Tang 
81b0b00e3SLawrence Tang   @par Revision Reference:
91b0b00e3SLawrence Tang   GUIDs defined in UEFI 2.7 Specification.
101b0b00e3SLawrence Tang 
111b0b00e3SLawrence Tang **/
121b0b00e3SLawrence Tang #include "BaseTypes.h"
131b0b00e3SLawrence Tang 
141b0b00e3SLawrence Tang #ifndef __CPER_GUID_H__
151b0b00e3SLawrence Tang #define __CPER_GUID_H__
161b0b00e3SLawrence Tang 
171b0b00e3SLawrence Tang #pragma pack(1)
181b0b00e3SLawrence Tang 
191b0b00e3SLawrence Tang #define EFI_ERROR_RECORD_SIGNATURE_START  SIGNATURE_32('C', 'P', 'E', 'R')
201b0b00e3SLawrence Tang #define EFI_ERROR_RECORD_SIGNATURE_END    0xFFFFFFFF
211b0b00e3SLawrence Tang 
221b0b00e3SLawrence Tang #define EFI_ERROR_RECORD_REVISION  0x0101
231b0b00e3SLawrence Tang 
241b0b00e3SLawrence Tang ///
251b0b00e3SLawrence Tang /// Error Severity in Error Record Header and Error Section Descriptor
261b0b00e3SLawrence Tang ///@{
271b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_RECOVERABLE  0x00000000
281b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_FATAL        0x00000001
291b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_CORRECTED    0x00000002
301b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_INFO         0x00000003
311b0b00e3SLawrence Tang ///@}
321b0b00e3SLawrence Tang 
331b0b00e3SLawrence Tang ///
341b0b00e3SLawrence Tang /// The validation bit mask indicates the validity of the following fields
351b0b00e3SLawrence Tang /// in Error Record Header.
361b0b00e3SLawrence Tang ///@{
371b0b00e3SLawrence Tang #define EFI_ERROR_RECORD_HEADER_PLATFORM_ID_VALID   BIT0
381b0b00e3SLawrence Tang #define EFI_ERROR_RECORD_HEADER_TIME_STAMP_VALID    BIT1
391b0b00e3SLawrence Tang #define EFI_ERROR_RECORD_HEADER_PARTITION_ID_VALID  BIT2
401b0b00e3SLawrence Tang ///@}
411b0b00e3SLawrence Tang 
421b0b00e3SLawrence Tang ///
431b0b00e3SLawrence Tang /// Timestamp is precise if this bit is set and correlates to the time of the
441b0b00e3SLawrence Tang /// error event.
451b0b00e3SLawrence Tang ///
461b0b00e3SLawrence Tang #define EFI_ERROR_TIME_STAMP_PRECISE  BIT0
471b0b00e3SLawrence Tang 
481b0b00e3SLawrence Tang ///
491b0b00e3SLawrence Tang /// The timestamp correlates to the time when the error information was collected
501b0b00e3SLawrence Tang /// by the system software and may not necessarily represent the time of the error
511b0b00e3SLawrence Tang /// event. The timestamp contains the local time in BCD format.
521b0b00e3SLawrence Tang ///
531b0b00e3SLawrence Tang typedef struct {
541b0b00e3SLawrence Tang   UINT8    Seconds;
551b0b00e3SLawrence Tang   UINT8    Minutes;
561b0b00e3SLawrence Tang   UINT8    Hours;
571b0b00e3SLawrence Tang   UINT8    Flag;
581b0b00e3SLawrence Tang   UINT8    Day;
591b0b00e3SLawrence Tang   UINT8    Month;
601b0b00e3SLawrence Tang   UINT8    Year;
611b0b00e3SLawrence Tang   UINT8    Century;
621b0b00e3SLawrence Tang } EFI_ERROR_TIME_STAMP;
631b0b00e3SLawrence Tang 
641b0b00e3SLawrence Tang ///
651b0b00e3SLawrence Tang /// GUID value indicating the record association with an error event notification type.
661b0b00e3SLawrence Tang ///@{
671b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYEP_CMC_GUID \
681b0b00e3SLawrence Tang   { \
691b0b00e3SLawrence Tang     0x2DCE8BB1, 0xBDD7, 0x450e, { 0xB9, 0xAD, 0x9C, 0xF4, 0xEB, 0xD4, 0xF8, 0x90 } \
701b0b00e3SLawrence Tang   }
711b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYEP_CPE_GUID \
721b0b00e3SLawrence Tang   { \
731b0b00e3SLawrence Tang     0x4E292F96, 0xD843, 0x4a55, { 0xA8, 0xC2, 0xD4, 0x81, 0xF2, 0x7E, 0xBE, 0xEE } \
741b0b00e3SLawrence Tang   }
751b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYEP_MCE_GUID \
761b0b00e3SLawrence Tang   { \
771b0b00e3SLawrence Tang     0xE8F56FFE, 0x919C, 0x4cc5, { 0xBA, 0x88, 0x65, 0xAB, 0xE1, 0x49, 0x13, 0xBB } \
781b0b00e3SLawrence Tang   }
791b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYEP_PCIE_GUID \
801b0b00e3SLawrence Tang   { \
811b0b00e3SLawrence Tang     0xCF93C01F, 0x1A16, 0x4dfc, { 0xB8, 0xBC, 0x9C, 0x4D, 0xAF, 0x67, 0xC1, 0x04 } \
821b0b00e3SLawrence Tang   }
831b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYEP_INIT_GUID \
841b0b00e3SLawrence Tang   { \
851b0b00e3SLawrence Tang     0xCC5263E8, 0x9308, 0x454a, { 0x89, 0xD0, 0x34, 0x0B, 0xD3, 0x9B, 0xC9, 0x8E } \
861b0b00e3SLawrence Tang   }
871b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYEP_NMI_GUID \
881b0b00e3SLawrence Tang   { \
891b0b00e3SLawrence Tang     0x5BAD89FF, 0xB7E6, 0x42c9, { 0x81, 0x4A, 0xCF, 0x24, 0x85, 0xD6, 0xE9, 0x8A } \
901b0b00e3SLawrence Tang   }
911b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYEP_BOOT_GUID \
921b0b00e3SLawrence Tang   { \
931b0b00e3SLawrence Tang     0x3D61A466, 0xAB40, 0x409a, { 0xA6, 0x98, 0xF3, 0x62, 0xD4, 0x64, 0xB3, 0x8F } \
941b0b00e3SLawrence Tang   }
951b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYEP_DMAR_GUID \
961b0b00e3SLawrence Tang   { \
971b0b00e3SLawrence Tang     0x667DD791, 0xC6B3, 0x4c27, { 0x8A, 0x6B, 0x0F, 0x8E, 0x72, 0x2D, 0xEB, 0x41 } \
981b0b00e3SLawrence Tang   }
991b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYPE_DMAR_SEA \
1001b0b00e3SLawrence Tang   { \
1011b0b00e3SLawrence Tang     0x9A78788A, 0xBBE8, 0x11E4, { 0x80, 0x9E, 0x67, 0x61, 0x1E, 0x5D, 0x46, 0xB0 } \
1021b0b00e3SLawrence Tang   }
1031b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYPE_DMAR_SEI \
1041b0b00e3SLawrence Tang   { \
1051b0b00e3SLawrence Tang     0x5C284C81, 0xB0AE, 0x4E87, { 0xA3, 0x22, 0xB0, 0x4C, 0x85, 0x62, 0x43, 0x23 } \
1061b0b00e3SLawrence Tang   }
1071b0b00e3SLawrence Tang #define EFI_EVENT_NOTIFICATION_TYPE_DMAR_PEI \
1081b0b00e3SLawrence Tang   { \
1091b0b00e3SLawrence Tang     0x09A9D5AC, 0x5204, 0x4214, { 0x96, 0xE5, 0x94, 0x99, 0x2E, 0x75, 0x2B, 0xCD } \
1101b0b00e3SLawrence Tang   }
1111b0b00e3SLawrence Tang ///@}
1121b0b00e3SLawrence Tang 
1131b0b00e3SLawrence Tang ///
1141b0b00e3SLawrence Tang /// Error Record Header Flags
1151b0b00e3SLawrence Tang ///@{
1161b0b00e3SLawrence Tang #define EFI_HW_ERROR_FLAGS_RECOVERED  0x00000001
1171b0b00e3SLawrence Tang #define EFI_HW_ERROR_FLAGS_PREVERR    0x00000002
1181b0b00e3SLawrence Tang #define EFI_HW_ERROR_FLAGS_SIMULATED  0x00000004
1191b0b00e3SLawrence Tang ///@}
1201b0b00e3SLawrence Tang 
1211b0b00e3SLawrence Tang ///
1221b0b00e3SLawrence Tang /// Common error record header
1231b0b00e3SLawrence Tang ///
1241b0b00e3SLawrence Tang typedef struct {
1251b0b00e3SLawrence Tang   UINT32                  SignatureStart;
1261b0b00e3SLawrence Tang   UINT16                  Revision;
1271b0b00e3SLawrence Tang   UINT32                  SignatureEnd;
1281b0b00e3SLawrence Tang   UINT16                  SectionCount;
1291b0b00e3SLawrence Tang   UINT32                  ErrorSeverity;
1301b0b00e3SLawrence Tang   UINT32                  ValidationBits;
1311b0b00e3SLawrence Tang   UINT32                  RecordLength;
1321b0b00e3SLawrence Tang   EFI_ERROR_TIME_STAMP    TimeStamp;
1331b0b00e3SLawrence Tang   EFI_GUID                PlatformID;
1341b0b00e3SLawrence Tang   EFI_GUID                PartitionID;
1351b0b00e3SLawrence Tang   EFI_GUID                CreatorID;
1361b0b00e3SLawrence Tang   EFI_GUID                NotificationType;
1371b0b00e3SLawrence Tang   UINT64                  RecordID;
1381b0b00e3SLawrence Tang   UINT32                  Flags;
1391b0b00e3SLawrence Tang   UINT64                  PersistenceInfo;
1401b0b00e3SLawrence Tang   UINT8                   Resv1[12];
1411b0b00e3SLawrence Tang   ///
1421b0b00e3SLawrence Tang   /// An array of SectionCount descriptors for the associated
1431b0b00e3SLawrence Tang   /// sections. The number of valid sections is equivalent to the
1441b0b00e3SLawrence Tang   /// SectionCount. The buffer size of the record may include
1451b0b00e3SLawrence Tang   /// more space to dynamically add additional Section
1461b0b00e3SLawrence Tang   /// Descriptors to the error record.
1471b0b00e3SLawrence Tang   ///
1481b0b00e3SLawrence Tang } EFI_COMMON_ERROR_RECORD_HEADER;
1491b0b00e3SLawrence Tang 
1501b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_REVISION  0x0100
1511b0b00e3SLawrence Tang 
1521b0b00e3SLawrence Tang ///
1531b0b00e3SLawrence Tang /// Validity Fields in Error Section Descriptor.
1541b0b00e3SLawrence Tang ///
1551b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FRU_ID_VALID      BIT0
1561b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FRU_STRING_VALID  BIT1
1571b0b00e3SLawrence Tang 
1581b0b00e3SLawrence Tang ///
1591b0b00e3SLawrence Tang /// Flag field contains information that describes the error section
1601b0b00e3SLawrence Tang /// in Error Section Descriptor.
1611b0b00e3SLawrence Tang ///
1621b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FLAGS_PRIMARY                   BIT0
1631b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FLAGS_CONTAINMENT_WARNING       BIT1
1641b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FLAGS_RESET                     BIT2
1651b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FLAGS_ERROR_THRESHOLD_EXCEEDED  BIT3
1661b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FLAGS_RESOURCE_NOT_ACCESSIBLE   BIT4
1671b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FLAGS_LATENT_ERROR              BIT5
1681b0b00e3SLawrence Tang 
1691b0b00e3SLawrence Tang ///
1701b0b00e3SLawrence Tang /// Error Sectition Type GUIDs in Error Section Descriptor
1711b0b00e3SLawrence Tang ///@{
1721b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PROCESSOR_GENERIC_GUID \
1731b0b00e3SLawrence Tang   { \
1741b0b00e3SLawrence Tang     0x9876ccad, 0x47b4, 0x4bdb, { 0xb6, 0x5e, 0x16, 0xf1, 0x93, 0xc4, 0xf3, 0xdb } \
1751b0b00e3SLawrence Tang   }
1761b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_GUID \
1771b0b00e3SLawrence Tang   { \
1781b0b00e3SLawrence Tang     0xdc3ea0b0, 0xa144, 0x4797, { 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d } \
1791b0b00e3SLawrence Tang   }
1801b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_IA32X64_GUID \
1811b0b00e3SLawrence Tang   { \
1821b0b00e3SLawrence Tang     0xdc3ea0b0, 0xa144, 0x4797, { 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d } \
1831b0b00e3SLawrence Tang   }
1841b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_ARM_GUID \
1851b0b00e3SLawrence Tang   { \
1861b0b00e3SLawrence Tang     0xe19e3d16, 0xbc11, 0x11e4, { 0x9c, 0xaa, 0xc2, 0x05, 0x1d, 0x5d, 0x46, 0xb0 } \
1871b0b00e3SLawrence Tang   }
1881b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PLATFORM_MEMORY_GUID \
1891b0b00e3SLawrence Tang   { \
1901b0b00e3SLawrence Tang     0xa5bc1114, 0x6f64, 0x4ede, { 0xb8, 0x63, 0x3e, 0x83, 0xed, 0x7c, 0x83, 0xb1 } \
1911b0b00e3SLawrence Tang   }
1921b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PLATFORM_MEMORY2_GUID \
1931b0b00e3SLawrence Tang   { \
1941b0b00e3SLawrence Tang     0x61EC04FC, 0x48E6, 0xD813, { 0x25, 0xC9, 0x8D, 0xAA, 0x44, 0x75, 0x0B, 0x12 } \
1951b0b00e3SLawrence Tang   }
1961b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PCIE_GUID \
1971b0b00e3SLawrence Tang   { \
1981b0b00e3SLawrence Tang     0xd995e954, 0xbbc1, 0x430f, { 0xad, 0x91, 0xb4, 0x4d, 0xcb, 0x3c, 0x6f, 0x35 } \
1991b0b00e3SLawrence Tang   }
2001b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_FW_ERROR_RECORD_GUID \
2011b0b00e3SLawrence Tang   { \
2021b0b00e3SLawrence Tang     0x81212a96, 0x09ed, 0x4996, { 0x94, 0x71, 0x8d, 0x72, 0x9c, 0x8e, 0x69, 0xed } \
2031b0b00e3SLawrence Tang   }
2041b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PCI_PCIX_BUS_GUID \
2051b0b00e3SLawrence Tang   { \
2061b0b00e3SLawrence Tang     0xc5753963, 0x3b84, 0x4095, { 0xbf, 0x78, 0xed, 0xda, 0xd3, 0xf9, 0xc9, 0xdd } \
2071b0b00e3SLawrence Tang   }
2081b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_PCI_DEVICE_GUID \
2091b0b00e3SLawrence Tang   { \
2101b0b00e3SLawrence Tang     0xeb5e4685, 0xca66, 0x4769, { 0xb6, 0xa2, 0x26, 0x06, 0x8b, 0x00, 0x13, 0x26 } \
2111b0b00e3SLawrence Tang   }
2121b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_DMAR_GENERIC_GUID \
2131b0b00e3SLawrence Tang   { \
2141b0b00e3SLawrence Tang     0x5b51fef7, 0xc79d, 0x4434, { 0x8f, 0x1b, 0xaa, 0x62, 0xde, 0x3e, 0x2c, 0x64 } \
2151b0b00e3SLawrence Tang   }
2161b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_DIRECTED_IO_DMAR_GUID \
2171b0b00e3SLawrence Tang   { \
2181b0b00e3SLawrence Tang     0x71761d37, 0x32b2, 0x45cd, { 0xa7, 0xd0, 0xb0, 0xfe, 0xdd, 0x93, 0xe8, 0xcf } \
2191b0b00e3SLawrence Tang   }
2201b0b00e3SLawrence Tang #define EFI_ERROR_SECTION_IOMMU_DMAR_GUID \
2211b0b00e3SLawrence Tang   { \
2221b0b00e3SLawrence Tang     0x036f84e1, 0x7f37, 0x428c, { 0xa7, 0x9e, 0x57, 0x5f, 0xdf, 0xaa, 0x84, 0xec } \
2231b0b00e3SLawrence Tang   }
2241b0b00e3SLawrence Tang ///@}
2251b0b00e3SLawrence Tang 
2261b0b00e3SLawrence Tang ///
2271b0b00e3SLawrence Tang /// Error Section Descriptor
2281b0b00e3SLawrence Tang ///
2291b0b00e3SLawrence Tang typedef struct {
2301b0b00e3SLawrence Tang   UINT32      SectionOffset;
2311b0b00e3SLawrence Tang   UINT32      SectionLength;
2321b0b00e3SLawrence Tang   UINT16      Revision;
2331b0b00e3SLawrence Tang   UINT8       SecValidMask;
2341b0b00e3SLawrence Tang   UINT8       Resv1;
2351b0b00e3SLawrence Tang   UINT32      SectionFlags;
2361b0b00e3SLawrence Tang   EFI_GUID    SectionType;
2371b0b00e3SLawrence Tang   EFI_GUID    FruId;
2381b0b00e3SLawrence Tang   UINT32      Severity;
2391b0b00e3SLawrence Tang   CHAR8       FruString[20];
2401b0b00e3SLawrence Tang } EFI_ERROR_SECTION_DESCRIPTOR;
2411b0b00e3SLawrence Tang 
2421b0b00e3SLawrence Tang ///
2431b0b00e3SLawrence Tang /// The validation bit mask indicates whether or not each of the following fields are
2441b0b00e3SLawrence Tang /// valid in Proessor Generic Error section.
2451b0b00e3SLawrence Tang ///@{
2461b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_TYPE_VALID          BIT0
2471b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ISA_VALID           BIT1
2481b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_VALID    BIT2
2491b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_OPERATION_VALID     BIT3
2501b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_FLAGS_VALID         BIT4
2511b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_LEVEL_VALID         BIT5
2521b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_VERSION_VALID       BIT6
2531b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_BRAND_VALID         BIT7
2541b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ID_VALID            BIT8
2551b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_TARGET_ADDR_VALID   BIT9
2561b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_REQUESTER_ID_VALID  BIT10
2571b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_RESPONDER_ID_VALID  BIT11
2581b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_INST_IP_VALID       BIT12
2591b0b00e3SLawrence Tang ///@}
2601b0b00e3SLawrence Tang 
2611b0b00e3SLawrence Tang ///
2621b0b00e3SLawrence Tang /// The type of the processor architecture in Proessor Generic Error section.
2631b0b00e3SLawrence Tang ///@{
2641b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_TYPE_IA32_X64  0x00
2651b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_TYPE_IA64      0x01
2661b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_TYPE_ARM       0x02
2671b0b00e3SLawrence Tang ///@}
2681b0b00e3SLawrence Tang 
2691b0b00e3SLawrence Tang ///
2701b0b00e3SLawrence Tang /// The type of the instruction set executing when the error occurred in Proessor
2711b0b00e3SLawrence Tang /// Generic Error section.
2721b0b00e3SLawrence Tang ///@{
2731b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ISA_IA32         0x00
2741b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ISA_IA64         0x01
2751b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ISA_X64          0x02
2761b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ISA_ARM_A32_T32  0x03
2771b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ISA_ARM_A64      0x04
2781b0b00e3SLawrence Tang ///@}
2791b0b00e3SLawrence Tang 
2801b0b00e3SLawrence Tang ///
2811b0b00e3SLawrence Tang /// The type of error that occurred in Proessor Generic Error section.
2821b0b00e3SLawrence Tang ///@{
2831b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_UNKNOWN     0x00
2841b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_CACHE       0x01
2851b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_TLB         0x02
2861b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_BUS         0x04
2871b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_MICRO_ARCH  0x08
2881b0b00e3SLawrence Tang ///@}
2891b0b00e3SLawrence Tang 
2901b0b00e3SLawrence Tang ///
2911b0b00e3SLawrence Tang /// The type of operation in Proessor Generic Error section.
2921b0b00e3SLawrence Tang ///@{
2931b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_OPERATION_GENERIC           0x00
2941b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_READ         0x01
2951b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_WRITE        0x02
2961b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_OPERATION_INSTRUCTION_EXEC  0x03
2971b0b00e3SLawrence Tang ///@}
2981b0b00e3SLawrence Tang 
2991b0b00e3SLawrence Tang ///
3001b0b00e3SLawrence Tang /// Flags bit mask indicates additional information about the error in Proessor Generic
3011b0b00e3SLawrence Tang /// Error section
3021b0b00e3SLawrence Tang ///@{
3031b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_FLAGS_RESTARTABLE  BIT0
3041b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_FLAGS_PRECISE_IP   BIT1
3051b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_FLAGS_OVERFLOW     BIT2
3061b0b00e3SLawrence Tang #define EFI_GENERIC_ERROR_PROC_FLAGS_CORRECTED    BIT3
3071b0b00e3SLawrence Tang ///@}
3081b0b00e3SLawrence Tang 
3091b0b00e3SLawrence Tang ///
3101b0b00e3SLawrence Tang /// Processor Generic Error Section
3111b0b00e3SLawrence Tang /// describes processor reported hardware errors for logical processors in the system.
3121b0b00e3SLawrence Tang ///
3131b0b00e3SLawrence Tang typedef struct {
3141b0b00e3SLawrence Tang   UINT64    ValidFields;
3151b0b00e3SLawrence Tang   UINT8     Type;
3161b0b00e3SLawrence Tang   UINT8     Isa;
3171b0b00e3SLawrence Tang   UINT8     ErrorType;
3181b0b00e3SLawrence Tang   UINT8     Operation;
3191b0b00e3SLawrence Tang   UINT8     Flags;
3201b0b00e3SLawrence Tang   UINT8     Level;
3211b0b00e3SLawrence Tang   UINT16    Resv1;
3221b0b00e3SLawrence Tang   UINT64    VersionInfo;
3231b0b00e3SLawrence Tang   CHAR8     BrandString[128];
3241b0b00e3SLawrence Tang   UINT64    ApicId;
3251b0b00e3SLawrence Tang   UINT64    TargetAddr;
3261b0b00e3SLawrence Tang   UINT64    RequestorId;
3271b0b00e3SLawrence Tang   UINT64    ResponderId;
3281b0b00e3SLawrence Tang   UINT64    InstructionIP;
3291b0b00e3SLawrence Tang } EFI_PROCESSOR_GENERIC_ERROR_DATA;
3301b0b00e3SLawrence Tang 
3311b0b00e3SLawrence Tang ///
3321b0b00e3SLawrence Tang /// IA32 and x64 Specific definitions.
3331b0b00e3SLawrence Tang ///
3341b0b00e3SLawrence Tang 
3351b0b00e3SLawrence Tang ///
3361b0b00e3SLawrence Tang /// GUID value indicating the type of Processor Error Information structure
3371b0b00e3SLawrence Tang /// in IA32/X64 Processor Error Information Structure.
3381b0b00e3SLawrence Tang ///@{
3391b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_TYPE_CACHE_CHECK_GUID \
3401b0b00e3SLawrence Tang   { \
3411b0b00e3SLawrence Tang     0xA55701F5, 0xE3EF, 0x43de, {0xAC, 0x72, 0x24, 0x9B, 0x57, 0x3F, 0xAD, 0x2C } \
3421b0b00e3SLawrence Tang   }
3431b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_TYPE_TLB_CHECK_GUID \
3441b0b00e3SLawrence Tang   { \
3451b0b00e3SLawrence Tang     0xFC06B535, 0x5E1F, 0x4562, {0x9F, 0x25, 0x0A, 0x3B, 0x9A, 0xDB, 0x63, 0xC3 } \
3461b0b00e3SLawrence Tang   }
3471b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_TYPE_BUS_CHECK_GUID \
3481b0b00e3SLawrence Tang   { \
3491b0b00e3SLawrence Tang     0x1CF3F8B3, 0xC5B1, 0x49a2, {0xAA, 0x59, 0x5E, 0xEF, 0x92, 0xFF, 0xA6, 0x3C } \
3501b0b00e3SLawrence Tang   }
3511b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_TYPE_MS_CHECK_GUID \
3521b0b00e3SLawrence Tang   { \
3531b0b00e3SLawrence Tang     0x48AB7F57, 0xDC34, 0x4f6c, {0xA7, 0xD3, 0xB0, 0xB5, 0xB0, 0xA7, 0x43, 0x14 } \
3541b0b00e3SLawrence Tang   }
355794312c8SLawrence Tang extern EFI_GUID   gEfiIa32x64ErrorTypeCacheCheckGuid;
356794312c8SLawrence Tang extern EFI_GUID   gEfiIa32x64ErrorTypeTlbCheckGuid;
357794312c8SLawrence Tang extern EFI_GUID   gEfiIa32x64ErrorTypeBusCheckGuid;
358794312c8SLawrence Tang extern EFI_GUID   gEfiIa32x64ErrorTypeMsCheckGuid;
359794312c8SLawrence Tang 
3601b0b00e3SLawrence Tang ///@}
3611b0b00e3SLawrence Tang 
3621b0b00e3SLawrence Tang ///
3631b0b00e3SLawrence Tang /// The validation bit mask indicates which fields in the IA32/X64 Processor
3641b0b00e3SLawrence Tang /// Error Record structure are valid.
3651b0b00e3SLawrence Tang ///@{
3661b0b00e3SLawrence Tang #define EFI_IA32_X64_PROCESSOR_ERROR_APIC_ID_VALID      BIT0
3671b0b00e3SLawrence Tang #define EFI_IA32_X64_PROCESSOR_ERROR_CPU_ID_INFO_VALID  BIT1
3681b0b00e3SLawrence Tang ///@}
3691b0b00e3SLawrence Tang 
3701b0b00e3SLawrence Tang ///
3711b0b00e3SLawrence Tang /// IA32/X64 Processor Error Record
3721b0b00e3SLawrence Tang ///
3731b0b00e3SLawrence Tang typedef struct {
3741b0b00e3SLawrence Tang   UINT64    ValidFields;
3751b0b00e3SLawrence Tang   UINT64    ApicId;
3761b0b00e3SLawrence Tang   UINT8     CpuIdInfo[48];
3771b0b00e3SLawrence Tang } EFI_IA32_X64_PROCESSOR_ERROR_RECORD;
3781b0b00e3SLawrence Tang 
3791b0b00e3SLawrence Tang ///
3801b0b00e3SLawrence Tang /// The validation bit mask indicates which fields in the Cache Check structure
3811b0b00e3SLawrence Tang /// are valid.
3821b0b00e3SLawrence Tang ///@{
3831b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_TRANSACTION_TYPE_VALID  BIT0
3841b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_VALID         BIT1
3851b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_LEVEL_VALID             BIT2
3861b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_CONTEXT_CORRUPT_VALID   BIT3
3871b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_UNCORRECTED_VALID       BIT4
3881b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_PRECISE_IP_VALID        BIT5
3891b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_RESTARTABLE_VALID       BIT6
3901b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OVERFLOW_VALID          BIT7
3911b0b00e3SLawrence Tang ///@}
3921b0b00e3SLawrence Tang 
3931b0b00e3SLawrence Tang ///
3941b0b00e3SLawrence Tang /// Type of cache error in the Cache Check structure
3951b0b00e3SLawrence Tang ///@{
3961b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_ERROR_TYPE_INSTRUCTION  0
3971b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_ERROR_TYPE_DATA_ACCESS  1
3981b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_ERROR_TYPE_GENERIC      2
3991b0b00e3SLawrence Tang ///@}
4001b0b00e3SLawrence Tang 
4011b0b00e3SLawrence Tang ///
4021b0b00e3SLawrence Tang /// Type of cache operation that caused the error in the Cache
4031b0b00e3SLawrence Tang /// Check structure
4041b0b00e3SLawrence Tang ///@{
4051b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC            0
4061b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_READ       1
4071b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_WRITE      2
4081b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_READ          3
4091b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_WRITE         4
4101b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_INSTRUCTION_FETCH  5
4111b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_PREFETCH           6
4121b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_EVICTION           7
4131b0b00e3SLawrence Tang #define EFI_CACHE_CHECK_OPERATION_TYPE_SNOOP              8
4141b0b00e3SLawrence Tang ///@}
4151b0b00e3SLawrence Tang 
4161b0b00e3SLawrence Tang ///
4171b0b00e3SLawrence Tang /// IA32/X64 Cache Check Structure
4181b0b00e3SLawrence Tang ///
4191b0b00e3SLawrence Tang typedef struct {
4201b0b00e3SLawrence Tang   UINT64    ValidFields      : 16;
4211b0b00e3SLawrence Tang   UINT64    TransactionType  : 2;
4221b0b00e3SLawrence Tang   UINT64    Operation        : 4;
4231b0b00e3SLawrence Tang   UINT64    Level            : 3;
4241b0b00e3SLawrence Tang   UINT64    ContextCorrupt   : 1;
4251b0b00e3SLawrence Tang   UINT64    ErrorUncorrected : 1;
4261b0b00e3SLawrence Tang   UINT64    PreciseIp        : 1;
4271b0b00e3SLawrence Tang   UINT64    RestartableIp    : 1;
4281b0b00e3SLawrence Tang   UINT64    Overflow         : 1;
4291b0b00e3SLawrence Tang   UINT64    Resv1            : 34;
4301b0b00e3SLawrence Tang } EFI_IA32_X64_CACHE_CHECK_INFO;
4311b0b00e3SLawrence Tang 
4321b0b00e3SLawrence Tang ///
4331b0b00e3SLawrence Tang /// The validation bit mask indicates which fields in the TLB Check structure
4341b0b00e3SLawrence Tang /// are valid.
4351b0b00e3SLawrence Tang ///@{
4361b0b00e3SLawrence Tang #define EFI_TLB_CHECK_TRANSACTION_TYPE_VALID  BIT0
4371b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OPERATION_VALID         BIT1
4381b0b00e3SLawrence Tang #define EFI_TLB_CHECK_LEVEL_VALID             BIT2
4391b0b00e3SLawrence Tang #define EFI_TLB_CHECK_CONTEXT_CORRUPT_VALID   BIT3
4401b0b00e3SLawrence Tang #define EFI_TLB_CHECK_UNCORRECTED_VALID       BIT4
4411b0b00e3SLawrence Tang #define EFI_TLB_CHECK_PRECISE_IP_VALID        BIT5
4421b0b00e3SLawrence Tang #define EFI_TLB_CHECK_RESTARTABLE_VALID       BIT6
4431b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OVERFLOW_VALID          BIT7
4441b0b00e3SLawrence Tang ///@}
4451b0b00e3SLawrence Tang 
4461b0b00e3SLawrence Tang ///
4471b0b00e3SLawrence Tang /// Type of cache error in the TLB Check structure
4481b0b00e3SLawrence Tang ///@{
4491b0b00e3SLawrence Tang #define EFI_TLB_CHECK_ERROR_TYPE_INSTRUCTION  0
4501b0b00e3SLawrence Tang #define EFI_TLB_CHECK_ERROR_TYPE_DATA_ACCESS  1
4511b0b00e3SLawrence Tang #define EFI_TLB_CHECK_ERROR_TYPE_GENERIC      2
4521b0b00e3SLawrence Tang ///@}
4531b0b00e3SLawrence Tang 
4541b0b00e3SLawrence Tang ///
4551b0b00e3SLawrence Tang /// Type of cache operation that caused the error in the TLB
4561b0b00e3SLawrence Tang /// Check structure
4571b0b00e3SLawrence Tang ///@{
4581b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC        0
4591b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_READ   1
4601b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_WRITE  2
4611b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OPERATION_TYPE_DATA_READ      3
4621b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OPERATION_TYPE_DATA_WRITE     4
4631b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OPERATION_TYPE_INST_FETCH     5
4641b0b00e3SLawrence Tang #define EFI_TLB_CHECK_OPERATION_TYPE_PREFETCH       6
4651b0b00e3SLawrence Tang ///@}
4661b0b00e3SLawrence Tang 
4671b0b00e3SLawrence Tang ///
4681b0b00e3SLawrence Tang /// IA32/X64 TLB Check Structure
4691b0b00e3SLawrence Tang ///
4701b0b00e3SLawrence Tang typedef struct {
4711b0b00e3SLawrence Tang   UINT64    ValidFields      : 16;
4721b0b00e3SLawrence Tang   UINT64    TransactionType  : 2;
4731b0b00e3SLawrence Tang   UINT64    Operation        : 4;
4741b0b00e3SLawrence Tang   UINT64    Level            : 3;
4751b0b00e3SLawrence Tang   UINT64    ContextCorrupt   : 1;
4761b0b00e3SLawrence Tang   UINT64    ErrorUncorrected : 1;
4771b0b00e3SLawrence Tang   UINT64    PreciseIp        : 1;
4781b0b00e3SLawrence Tang   UINT64    RestartableIp    : 1;
4791b0b00e3SLawrence Tang   UINT64    Overflow         : 1;
4801b0b00e3SLawrence Tang   UINT64    Resv1            : 34;
4811b0b00e3SLawrence Tang } EFI_IA32_X64_TLB_CHECK_INFO;
4821b0b00e3SLawrence Tang 
4831b0b00e3SLawrence Tang ///
4841b0b00e3SLawrence Tang /// The validation bit mask indicates which fields in the MS Check structure
4851b0b00e3SLawrence Tang /// are valid.
4861b0b00e3SLawrence Tang ///@{
4871b0b00e3SLawrence Tang #define EFI_BUS_CHECK_TRANSACTION_TYPE_VALID    BIT0
4881b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OPERATION_VALID           BIT1
4891b0b00e3SLawrence Tang #define EFI_BUS_CHECK_LEVEL_VALID               BIT2
4901b0b00e3SLawrence Tang #define EFI_BUS_CHECK_CONTEXT_CORRUPT_VALID     BIT3
4911b0b00e3SLawrence Tang #define EFI_BUS_CHECK_UNCORRECTED_VALID         BIT4
4921b0b00e3SLawrence Tang #define EFI_BUS_CHECK_PRECISE_IP_VALID          BIT5
4931b0b00e3SLawrence Tang #define EFI_BUS_CHECK_RESTARTABLE_VALID         BIT6
4941b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OVERFLOW_VALID            BIT7
4951b0b00e3SLawrence Tang #define EFI_BUS_CHECK_PARTICIPATION_TYPE_VALID  BIT8
4961b0b00e3SLawrence Tang #define EFI_BUS_CHECK_TIME_OUT_VALID            BIT9
4971b0b00e3SLawrence Tang #define EFI_BUS_CHECK_ADDRESS_SPACE_VALID       BIT10
4981b0b00e3SLawrence Tang ///@}
4991b0b00e3SLawrence Tang 
5001b0b00e3SLawrence Tang ///
5011b0b00e3SLawrence Tang /// Type of cache error in the Bus Check structure
5021b0b00e3SLawrence Tang ///@{
5031b0b00e3SLawrence Tang #define EFI_BUS_CHECK_ERROR_TYPE_INSTRUCTION  0
5041b0b00e3SLawrence Tang #define EFI_BUS_CHECK_ERROR_TYPE_DATA_ACCESS  1
5051b0b00e3SLawrence Tang #define EFI_BUS_CHECK_ERROR_TYPE_GENERIC      2
5061b0b00e3SLawrence Tang ///@}
5071b0b00e3SLawrence Tang 
5081b0b00e3SLawrence Tang ///
5091b0b00e3SLawrence Tang /// Type of cache operation that caused the error in the Bus
5101b0b00e3SLawrence Tang /// Check structure
5111b0b00e3SLawrence Tang ///@{
5121b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC        0
5131b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_READ   1
5141b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_WRITE  2
5151b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OPERATION_TYPE_DATA_READ      3
5161b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OPERATION_TYPE_DATA_WRITE     4
5171b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OPERATION_TYPE_INST_FETCH     5
5181b0b00e3SLawrence Tang #define EFI_BUS_CHECK_OPERATION_TYPE_PREFETCH       6
5191b0b00e3SLawrence Tang ///@}
5201b0b00e3SLawrence Tang 
5211b0b00e3SLawrence Tang ///
5221b0b00e3SLawrence Tang /// Type of Participation
5231b0b00e3SLawrence Tang ///@{
5241b0b00e3SLawrence Tang #define EFI_BUS_CHECK_PARTICIPATION_TYPE_REQUEST    0
5251b0b00e3SLawrence Tang #define EFI_BUS_CHECK_PARTICIPATION_TYPE_RESPONDED  1
5261b0b00e3SLawrence Tang #define EFI_BUS_CHECK_PARTICIPATION_TYPE_OBSERVED   2
5271b0b00e3SLawrence Tang #define EFI_BUS_CHECK_PARTICIPATION_TYPE_GENERIC    3
5281b0b00e3SLawrence Tang ///@}
5291b0b00e3SLawrence Tang 
5301b0b00e3SLawrence Tang ///
5311b0b00e3SLawrence Tang /// Type of Address Space
5321b0b00e3SLawrence Tang ///@{
5331b0b00e3SLawrence Tang #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_MEMORY    0
5341b0b00e3SLawrence Tang #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_RESERVED  1
5351b0b00e3SLawrence Tang #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_IO        2
5361b0b00e3SLawrence Tang #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_OTHER     3
5371b0b00e3SLawrence Tang ///@}
5381b0b00e3SLawrence Tang 
5391b0b00e3SLawrence Tang ///
5401b0b00e3SLawrence Tang /// IA32/X64 Bus Check Structure
5411b0b00e3SLawrence Tang ///
5421b0b00e3SLawrence Tang typedef struct {
5431b0b00e3SLawrence Tang   UINT64    ValidFields       : 16;
5441b0b00e3SLawrence Tang   UINT64    TransactionType   : 2;
5451b0b00e3SLawrence Tang   UINT64    Operation         : 4;
5461b0b00e3SLawrence Tang   UINT64    Level             : 3;
5471b0b00e3SLawrence Tang   UINT64    ContextCorrupt    : 1;
5481b0b00e3SLawrence Tang   UINT64    ErrorUncorrected  : 1;
5491b0b00e3SLawrence Tang   UINT64    PreciseIp         : 1;
5501b0b00e3SLawrence Tang   UINT64    RestartableIp     : 1;
5511b0b00e3SLawrence Tang   UINT64    Overflow          : 1;
5521b0b00e3SLawrence Tang   UINT64    ParticipationType : 2;
5531b0b00e3SLawrence Tang   UINT64    TimeOut           : 1;
5541b0b00e3SLawrence Tang   UINT64    AddressSpace      : 2;
5551b0b00e3SLawrence Tang   UINT64    Resv1             : 29;
5561b0b00e3SLawrence Tang } EFI_IA32_X64_BUS_CHECK_INFO;
5571b0b00e3SLawrence Tang 
5581b0b00e3SLawrence Tang ///
5591b0b00e3SLawrence Tang /// The validation bit mask indicates which fields in the MS Check structure
5601b0b00e3SLawrence Tang /// are valid.
5611b0b00e3SLawrence Tang ///@{
5621b0b00e3SLawrence Tang #define EFI_MS_CHECK_ERROR_TYPE_VALID       BIT0
5631b0b00e3SLawrence Tang #define EFI_MS_CHECK_CONTEXT_CORRUPT_VALID  BIT1
5641b0b00e3SLawrence Tang #define EFI_MS_CHECK_UNCORRECTED_VALID      BIT2
5651b0b00e3SLawrence Tang #define EFI_MS_CHECK_PRECISE_IP_VALID       BIT3
5661b0b00e3SLawrence Tang #define EFI_MS_CHECK_RESTARTABLE_VALID      BIT4
5671b0b00e3SLawrence Tang #define EFI_MS_CHECK_OVERFLOW_VALID         BIT5
5681b0b00e3SLawrence Tang ///@}
5691b0b00e3SLawrence Tang 
5701b0b00e3SLawrence Tang ///
5711b0b00e3SLawrence Tang /// Error type identifies the operation that caused the error.
5721b0b00e3SLawrence Tang ///@{
5731b0b00e3SLawrence Tang #define EFI_MS_CHECK_ERROR_TYPE_NO                     0
5741b0b00e3SLawrence Tang #define EFI_MS_CHECK_ERROR_TYPE_UNCLASSIFIED           1
5751b0b00e3SLawrence Tang #define EFI_MS_CHECK_ERROR_TYPE_MICROCODE_PARITY       2
5761b0b00e3SLawrence Tang #define EFI_MS_CHECK_ERROR_TYPE_EXTERNAL               3
5771b0b00e3SLawrence Tang #define EFI_MS_CHECK_ERROR_TYPE_FRC                    4
5781b0b00e3SLawrence Tang #define EFI_MS_CHECK_ERROR_TYPE_INTERNAL_UNCLASSIFIED  5
5791b0b00e3SLawrence Tang ///@}
5801b0b00e3SLawrence Tang 
5811b0b00e3SLawrence Tang ///
5821b0b00e3SLawrence Tang /// IA32/X64 MS Check Field Description
5831b0b00e3SLawrence Tang ///
5841b0b00e3SLawrence Tang typedef struct {
5851b0b00e3SLawrence Tang   UINT64    ValidFields      : 16;
5861b0b00e3SLawrence Tang   UINT64    ErrorType        : 3;
5871b0b00e3SLawrence Tang   UINT64    ContextCorrupt   : 1;
5881b0b00e3SLawrence Tang   UINT64    ErrorUncorrected : 1;
5891b0b00e3SLawrence Tang   UINT64    PreciseIp        : 1;
5901b0b00e3SLawrence Tang   UINT64    RestartableIp    : 1;
5911b0b00e3SLawrence Tang   UINT64    Overflow         : 1;
5921b0b00e3SLawrence Tang   UINT64    Resv1            : 40;
5931b0b00e3SLawrence Tang } EFI_IA32_X64_MS_CHECK_INFO;
5941b0b00e3SLawrence Tang 
5951b0b00e3SLawrence Tang ///
5961b0b00e3SLawrence Tang /// IA32/X64 Check Information Item
5971b0b00e3SLawrence Tang ///
5981b0b00e3SLawrence Tang typedef union {
5991b0b00e3SLawrence Tang   EFI_IA32_X64_CACHE_CHECK_INFO    CacheCheck;
6001b0b00e3SLawrence Tang   EFI_IA32_X64_TLB_CHECK_INFO      TlbCheck;
6011b0b00e3SLawrence Tang   EFI_IA32_X64_BUS_CHECK_INFO      BusCheck;
6021b0b00e3SLawrence Tang   EFI_IA32_X64_MS_CHECK_INFO       MsCheck;
6031b0b00e3SLawrence Tang   UINT64                           Data64;
6041b0b00e3SLawrence Tang } EFI_IA32_X64_CHECK_INFO_ITEM;
6051b0b00e3SLawrence Tang 
6061b0b00e3SLawrence Tang ///
6071b0b00e3SLawrence Tang /// The validation bit mask indicates which fields in the IA32/X64 Processor Error
6081b0b00e3SLawrence Tang /// Information Structure are valid.
6091b0b00e3SLawrence Tang ///@{
6101b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_PROC_CHECK_INFO_VALID    BIT0
6111b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_PROC_TARGET_ADDR_VALID   BIT1
6121b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_PROC_REQUESTER_ID_VALID  BIT2
6131b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_PROC_RESPONDER_ID_VALID  BIT3
6141b0b00e3SLawrence Tang #define EFI_IA32_X64_ERROR_PROC_INST_IP_VALID       BIT4
6151b0b00e3SLawrence Tang ///@}
6161b0b00e3SLawrence Tang 
6171b0b00e3SLawrence Tang ///
6181b0b00e3SLawrence Tang /// IA32/X64 Processor Error Information Structure
6191b0b00e3SLawrence Tang ///
6201b0b00e3SLawrence Tang typedef struct {
6211b0b00e3SLawrence Tang   EFI_GUID                        ErrorType;
6221b0b00e3SLawrence Tang   UINT64                          ValidFields;
6231b0b00e3SLawrence Tang   EFI_IA32_X64_CHECK_INFO_ITEM    CheckInfo;
6241b0b00e3SLawrence Tang   UINT64                          TargetId;
6251b0b00e3SLawrence Tang   UINT64                          RequestorId;
6261b0b00e3SLawrence Tang   UINT64                          ResponderId;
6271b0b00e3SLawrence Tang   UINT64                          InstructionIP;
6281b0b00e3SLawrence Tang } EFI_IA32_X64_PROCESS_ERROR_INFO;
6291b0b00e3SLawrence Tang 
6301b0b00e3SLawrence Tang ///
6311b0b00e3SLawrence Tang /// IA32/X64 Processor Context Information Structure
6321b0b00e3SLawrence Tang ///
6331b0b00e3SLawrence Tang typedef struct {
6341b0b00e3SLawrence Tang   UINT16    RegisterType;
6351b0b00e3SLawrence Tang   UINT16    ArraySize;
6361b0b00e3SLawrence Tang   UINT32    MsrAddress;
6371b0b00e3SLawrence Tang   UINT64    MmRegisterAddress;
6381b0b00e3SLawrence Tang   //
6391b0b00e3SLawrence Tang   // This field will provide the contents of the actual registers or raw data.
6401b0b00e3SLawrence Tang   // The number of Registers or size of the raw data reported is determined
6411b0b00e3SLawrence Tang   // by (Array Size / 8) or otherwise specified by the context structure type
6421b0b00e3SLawrence Tang   // definition.
6431b0b00e3SLawrence Tang   //
6441b0b00e3SLawrence Tang } EFI_IA32_X64_PROCESSOR_CONTEXT_INFO;
6451b0b00e3SLawrence Tang 
6461b0b00e3SLawrence Tang ///
6471b0b00e3SLawrence Tang /// Register Context Type
6481b0b00e3SLawrence Tang ///@{
6491b0b00e3SLawrence Tang #define EFI_REG_CONTEXT_TYPE_UNCLASSIFIED  0x0000
6501b0b00e3SLawrence Tang #define EFI_REG_CONTEXT_TYPE_MSR           0x0001
6511b0b00e3SLawrence Tang #define EFI_REG_CONTEXT_TYPE_IA32          0x0002
6521b0b00e3SLawrence Tang #define EFI_REG_CONTEXT_TYPE_X64           0x0003
6531b0b00e3SLawrence Tang #define EFI_REG_CONTEXT_TYPE_FXSAVE        0x0004
6541b0b00e3SLawrence Tang #define EFI_REG_CONTEXT_TYPE_DR_IA32       0x0005
6551b0b00e3SLawrence Tang #define EFI_REG_CONTEXT_TYPE_DR_X64        0x0006
6561b0b00e3SLawrence Tang #define EFI_REG_CONTEXT_TYPE_MEM_MAP       0x0007
6571b0b00e3SLawrence Tang ///@}
6581b0b00e3SLawrence Tang 
6591b0b00e3SLawrence Tang ///
6601b0b00e3SLawrence Tang /// IA32 Register State
6611b0b00e3SLawrence Tang ///
6621b0b00e3SLawrence Tang typedef struct {
6631b0b00e3SLawrence Tang   UINT32    Eax;
6641b0b00e3SLawrence Tang   UINT32    Ebx;
6651b0b00e3SLawrence Tang   UINT32    Ecx;
6661b0b00e3SLawrence Tang   UINT32    Edx;
6671b0b00e3SLawrence Tang   UINT32    Esi;
6681b0b00e3SLawrence Tang   UINT32    Edi;
6691b0b00e3SLawrence Tang   UINT32    Ebp;
6701b0b00e3SLawrence Tang   UINT32    Esp;
6711b0b00e3SLawrence Tang   UINT16    Cs;
6721b0b00e3SLawrence Tang   UINT16    Ds;
6731b0b00e3SLawrence Tang   UINT16    Ss;
6741b0b00e3SLawrence Tang   UINT16    Es;
6751b0b00e3SLawrence Tang   UINT16    Fs;
6761b0b00e3SLawrence Tang   UINT16    Gs;
6771b0b00e3SLawrence Tang   UINT32    Eflags;
6781b0b00e3SLawrence Tang   UINT32    Eip;
6791b0b00e3SLawrence Tang   UINT32    Cr0;
6801b0b00e3SLawrence Tang   UINT32    Cr1;
6811b0b00e3SLawrence Tang   UINT32    Cr2;
6821b0b00e3SLawrence Tang   UINT32    Cr3;
6831b0b00e3SLawrence Tang   UINT32    Cr4;
6841b0b00e3SLawrence Tang   UINT32    Gdtr[2];
6851b0b00e3SLawrence Tang   UINT32    Idtr[2];
6861b0b00e3SLawrence Tang   UINT16    Ldtr;
6871b0b00e3SLawrence Tang   UINT16    Tr;
6881b0b00e3SLawrence Tang } EFI_CONTEXT_IA32_REGISTER_STATE;
6891b0b00e3SLawrence Tang 
6901b0b00e3SLawrence Tang ///
6911b0b00e3SLawrence Tang /// X64 Register State
6921b0b00e3SLawrence Tang ///
6931b0b00e3SLawrence Tang typedef struct {
6941b0b00e3SLawrence Tang   UINT64    Rax;
6951b0b00e3SLawrence Tang   UINT64    Rbx;
6961b0b00e3SLawrence Tang   UINT64    Rcx;
6971b0b00e3SLawrence Tang   UINT64    Rdx;
6981b0b00e3SLawrence Tang   UINT64    Rsi;
6991b0b00e3SLawrence Tang   UINT64    Rdi;
7001b0b00e3SLawrence Tang   UINT64    Rbp;
7011b0b00e3SLawrence Tang   UINT64    Rsp;
7021b0b00e3SLawrence Tang   UINT64    R8;
7031b0b00e3SLawrence Tang   UINT64    R9;
7041b0b00e3SLawrence Tang   UINT64    R10;
7051b0b00e3SLawrence Tang   UINT64    R11;
7061b0b00e3SLawrence Tang   UINT64    R12;
7071b0b00e3SLawrence Tang   UINT64    R13;
7081b0b00e3SLawrence Tang   UINT64    R14;
7091b0b00e3SLawrence Tang   UINT64    R15;
7101b0b00e3SLawrence Tang   UINT16    Cs;
7111b0b00e3SLawrence Tang   UINT16    Ds;
7121b0b00e3SLawrence Tang   UINT16    Ss;
7131b0b00e3SLawrence Tang   UINT16    Es;
7141b0b00e3SLawrence Tang   UINT16    Fs;
7151b0b00e3SLawrence Tang   UINT16    Gs;
7161b0b00e3SLawrence Tang   UINT32    Resv1;
7171b0b00e3SLawrence Tang   UINT64    Rflags;
7181b0b00e3SLawrence Tang   UINT64    Rip;
7191b0b00e3SLawrence Tang   UINT64    Cr0;
7201b0b00e3SLawrence Tang   UINT64    Cr1;
7211b0b00e3SLawrence Tang   UINT64    Cr2;
7221b0b00e3SLawrence Tang   UINT64    Cr3;
7231b0b00e3SLawrence Tang   UINT64    Cr4;
7241b0b00e3SLawrence Tang   UINT64    Gdtr[2];
7251b0b00e3SLawrence Tang   UINT64    Idtr[2];
7261b0b00e3SLawrence Tang   UINT16    Ldtr;
7271b0b00e3SLawrence Tang   UINT16    Tr;
7281b0b00e3SLawrence Tang } EFI_CONTEXT_X64_REGISTER_STATE;
7291b0b00e3SLawrence Tang 
7301b0b00e3SLawrence Tang ///
7311b0b00e3SLawrence Tang /// The validation bit mask indicates each of the following field is in IA32/X64
7321b0b00e3SLawrence Tang /// Processor Error Section.
7331b0b00e3SLawrence Tang ///
7341b0b00e3SLawrence Tang typedef struct {
7351b0b00e3SLawrence Tang   UINT64    ApicIdValid     : 1;
7361b0b00e3SLawrence Tang   UINT64    CpuIdInforValid : 1;
7371b0b00e3SLawrence Tang   UINT64    ErrorInfoNum    : 6;
7381b0b00e3SLawrence Tang   UINT64    ContextNum      : 6;
7391b0b00e3SLawrence Tang   UINT64    Resv1           : 50;
7401b0b00e3SLawrence Tang } EFI_IA32_X64_VALID_BITS;
7411b0b00e3SLawrence Tang 
7422800cd8eSLawrence Tang 
7432800cd8eSLawrence Tang ///
7443d0e4f24SLawrence Tang /// ARM Processor Error Record
7452800cd8eSLawrence Tang ///
7462800cd8eSLawrence Tang typedef struct {
7472800cd8eSLawrence Tang   UINT32    ValidFields;
7482800cd8eSLawrence Tang   UINT16    ErrInfoNum;
7492800cd8eSLawrence Tang   UINT16    ContextInfoNum;
7502800cd8eSLawrence Tang   UINT32    SectionLength;
7512800cd8eSLawrence Tang   UINT32  ErrorAffinityLevel;
7522800cd8eSLawrence Tang   UINT64  MPIDR_EL1;
7532800cd8eSLawrence Tang   UINT64  MIDR_EL1;
7542800cd8eSLawrence Tang   UINT32 RunningState;
7552800cd8eSLawrence Tang   UINT32 PsciState;
7567f21db6cSLawrence Tang } EFI_ARM_ERROR_RECORD;
7572800cd8eSLawrence Tang 
7581b0b00e3SLawrence Tang ///
7593d0e4f24SLawrence Tang /// ARM Processor Error Information Structure
7603d0e4f24SLawrence Tang ///
7613d0e4f24SLawrence Tang typedef struct {
7623d0e4f24SLawrence Tang   UINT64 ValidationBits : 16;
7633d0e4f24SLawrence Tang   UINT64 TransactionType : 2;
7643d0e4f24SLawrence Tang   UINT64 Operation : 4;
7653d0e4f24SLawrence Tang   UINT64 Level : 3;
7667f21db6cSLawrence Tang   UINT64 ProcessorContextCorrupt : 1;
7673d0e4f24SLawrence Tang   UINT64 Corrected : 1;
7683d0e4f24SLawrence Tang   UINT64 PrecisePC : 1;
7693d0e4f24SLawrence Tang   UINT64 RestartablePC : 1;
7703d0e4f24SLawrence Tang   UINT64 Reserved : 34;
7717f21db6cSLawrence Tang } EFI_ARM_CACHE_ERROR_STRUCTURE;
7723d0e4f24SLawrence Tang 
7733d0e4f24SLawrence Tang typedef struct {
7743d0e4f24SLawrence Tang   UINT64 ValidationBits : 16;
7753d0e4f24SLawrence Tang   UINT64 TransactionType : 2;
7763d0e4f24SLawrence Tang   UINT64 Operation : 4;
7773d0e4f24SLawrence Tang   UINT64 Level : 3;
7787f21db6cSLawrence Tang   UINT64 ProcessorContextCorrupt : 1;
7793d0e4f24SLawrence Tang   UINT64 Corrected : 1;
7803d0e4f24SLawrence Tang   UINT64 PrecisePC : 1;
7813d0e4f24SLawrence Tang   UINT64 RestartablePC : 1;
7823d0e4f24SLawrence Tang   UINT64 Reserved : 34;
7837f21db6cSLawrence Tang } EFI_ARM_TLB_ERROR_STRUCTURE;
7843d0e4f24SLawrence Tang 
7853d0e4f24SLawrence Tang typedef struct {
7863d0e4f24SLawrence Tang   UINT64 ValidationBits : 16;
7873d0e4f24SLawrence Tang   UINT64 TransactionType : 2;
7883d0e4f24SLawrence Tang   UINT64 Operation : 4;
7893d0e4f24SLawrence Tang   UINT64 Level : 3;
7907f21db6cSLawrence Tang   UINT64 ProcessorContextCorrupt : 1;
7913d0e4f24SLawrence Tang   UINT64 Corrected : 1;
7923d0e4f24SLawrence Tang   UINT64 PrecisePC : 1;
7933d0e4f24SLawrence Tang   UINT64 RestartablePC : 1;
7943d0e4f24SLawrence Tang   UINT64 ParticipationType : 2;
7953d0e4f24SLawrence Tang   UINT64 TimeOut : 1;
7963d0e4f24SLawrence Tang   UINT64 AddressSpace : 2;
7973d0e4f24SLawrence Tang   UINT64 MemoryAddressAttributes : 8;
7983d0e4f24SLawrence Tang   UINT64 AccessMode : 1;
7993d0e4f24SLawrence Tang   UINT64 Reserved : 19;
8007f21db6cSLawrence Tang } EFI_ARM_BUS_ERROR_STRUCTURE;
8013d0e4f24SLawrence Tang 
80222a467ceSLawrence Tang typedef union {
8037f21db6cSLawrence Tang   EFI_ARM_CACHE_ERROR_STRUCTURE CacheError;
8047f21db6cSLawrence Tang   EFI_ARM_TLB_ERROR_STRUCTURE TlbError;
8057f21db6cSLawrence Tang   EFI_ARM_BUS_ERROR_STRUCTURE BusError;
8067f21db6cSLawrence Tang } EFI_ARM_ERROR_INFORMATION_STRUCTURE;
80722a467ceSLawrence Tang 
80822a467ceSLawrence Tang typedef struct {
80922a467ceSLawrence Tang   UINT8 Version;
81022a467ceSLawrence Tang   UINT8 Length;
81122a467ceSLawrence Tang   UINT16 ValidationBits;
81222a467ceSLawrence Tang   UINT8 Type;
81322a467ceSLawrence Tang   UINT16 MultipleError;
81422a467ceSLawrence Tang   UINT8 Flags;
8157f21db6cSLawrence Tang   EFI_ARM_ERROR_INFORMATION_STRUCTURE ErrorInformation;
81622a467ceSLawrence Tang   UINT64 VirtualFaultAddress;
81722a467ceSLawrence Tang   UINT64 PhysicalFaultAddress;
8187f21db6cSLawrence Tang } EFI_ARM_ERROR_INFORMATION_ENTRY;
8197f21db6cSLawrence Tang 
8207f21db6cSLawrence Tang ///
8217f21db6cSLawrence Tang /// ARM Processor Context Information Structure
8227f21db6cSLawrence Tang ///
8237f21db6cSLawrence Tang typedef struct {
8247f21db6cSLawrence Tang   UINT16 Version;
8257f21db6cSLawrence Tang   UINT16 RegisterContextType;
8267f21db6cSLawrence Tang   UINT32 RegisterArraySize;
8277f21db6cSLawrence Tang } EFI_ARM_CONTEXT_INFORMATION_HEADER;
8287f21db6cSLawrence Tang 
8297f21db6cSLawrence Tang ///
8307f21db6cSLawrence Tang /// ARM Processor Context Register Types
8317f21db6cSLawrence Tang ///
8327f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_AARCH32_GPR 0
8337f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_AARCH32_EL1 1
8347f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_AARCH32_EL2 2
8357f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_AARCH32_SECURE 3
8367f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_AARCH64_GPR 4
8377f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_AARCH64_EL1 5
8387f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_AARCH64_EL2 6
8397f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_AARCH64_EL3 7
8407f21db6cSLawrence Tang #define EFI_ARM_CONTEXT_TYPE_MISC 8
8417f21db6cSLawrence Tang 
8427f21db6cSLawrence Tang typedef struct {
8437f21db6cSLawrence Tang   UINT32 R0;
8447f21db6cSLawrence Tang   UINT32 R1;
8457f21db6cSLawrence Tang   UINT32 R2;
8467f21db6cSLawrence Tang   UINT32 R3;
8477f21db6cSLawrence Tang   UINT32 R4;
8487f21db6cSLawrence Tang   UINT32 R5;
8497f21db6cSLawrence Tang   UINT32 R6;
8507f21db6cSLawrence Tang   UINT32 R7;
8517f21db6cSLawrence Tang   UINT32 R8;
8527f21db6cSLawrence Tang   UINT32 R9;
8537f21db6cSLawrence Tang   UINT32 R10;
8547f21db6cSLawrence Tang   UINT32 R11;
8557f21db6cSLawrence Tang   UINT32 R12;
8567f21db6cSLawrence Tang   UINT32 R13_sp;
8577f21db6cSLawrence Tang   UINT32 R14_lr;
8587f21db6cSLawrence Tang   UINT32 R15_pc;
8597f21db6cSLawrence Tang } EFI_ARM_V8_AARCH32_GPR;
8607f21db6cSLawrence Tang 
8617f21db6cSLawrence Tang typedef struct {
8627f21db6cSLawrence Tang   UINT32 Dfar;
8637f21db6cSLawrence Tang   UINT32 Dfsr;
8647f21db6cSLawrence Tang   UINT32 Ifar;
8657f21db6cSLawrence Tang   UINT32 Isr;
8667f21db6cSLawrence Tang   UINT32 Mair0;
8677f21db6cSLawrence Tang   UINT32 Mair1;
8687f21db6cSLawrence Tang   UINT32 Midr;
8697f21db6cSLawrence Tang   UINT32 Mpidr;
8707f21db6cSLawrence Tang   UINT32 Nmrr;
8717f21db6cSLawrence Tang   UINT32 Prrr;
8727f21db6cSLawrence Tang   UINT32 Sctlr_Ns;
8737f21db6cSLawrence Tang   UINT32 Spsr;
8747f21db6cSLawrence Tang   UINT32 Spsr_Abt;
8757f21db6cSLawrence Tang   UINT32 Spsr_Fiq;
8767f21db6cSLawrence Tang   UINT32 Spsr_Irq;
8777f21db6cSLawrence Tang   UINT32 Spsr_Svc;
8787f21db6cSLawrence Tang   UINT32 Spsr_Und;
8797f21db6cSLawrence Tang   UINT32 Tpidrprw;
8807f21db6cSLawrence Tang   UINT32 Tpidruro;
8817f21db6cSLawrence Tang   UINT32 Tpidrurw;
8827f21db6cSLawrence Tang   UINT32 Ttbcr;
8837f21db6cSLawrence Tang   UINT32 Ttbr0;
8847f21db6cSLawrence Tang   UINT32 Ttbr1;
8857f21db6cSLawrence Tang   UINT32 Dacr;
8867f21db6cSLawrence Tang } EFI_ARM_AARCH32_EL1_CONTEXT_REGISTERS;
8877f21db6cSLawrence Tang 
8887f21db6cSLawrence Tang typedef struct {
8897f21db6cSLawrence Tang   UINT32 Elr_Hyp;
8907f21db6cSLawrence Tang   UINT32 Hamair0;
8917f21db6cSLawrence Tang   UINT32 Hamair1;
8927f21db6cSLawrence Tang   UINT32 Hcr;
8937f21db6cSLawrence Tang   UINT32 Hcr2;
8947f21db6cSLawrence Tang   UINT32 Hdfar;
8957f21db6cSLawrence Tang   UINT32 Hifar;
8967f21db6cSLawrence Tang   UINT32 Hpfar;
8977f21db6cSLawrence Tang   UINT32 Hsr;
8987f21db6cSLawrence Tang   UINT32 Htcr;
8997f21db6cSLawrence Tang   UINT32 Htpidr;
9007f21db6cSLawrence Tang   UINT32 Httbr;
9017f21db6cSLawrence Tang   UINT32 Spsr_Hyp;
9027f21db6cSLawrence Tang   UINT32 Vtcr;
9037f21db6cSLawrence Tang   UINT32 Vttbr;
9047f21db6cSLawrence Tang   UINT32 Dacr32_El2;
9057f21db6cSLawrence Tang } EFI_ARM_AARCH32_EL2_CONTEXT_REGISTERS;
9067f21db6cSLawrence Tang 
9077f21db6cSLawrence Tang typedef struct {
9087f21db6cSLawrence Tang   UINT32 Sctlr_S;
9097f21db6cSLawrence Tang   UINT32 Spsr_Mon;
9107f21db6cSLawrence Tang } EFI_ARM_AARCH32_SECURE_CONTEXT_REGISTERS;
9117f21db6cSLawrence Tang 
9127f21db6cSLawrence Tang typedef struct {
9137f21db6cSLawrence Tang   UINT64 X0;
9147f21db6cSLawrence Tang   UINT64 X1;
9157f21db6cSLawrence Tang   UINT64 X2;
9167f21db6cSLawrence Tang   UINT64 X3;
9177f21db6cSLawrence Tang   UINT64 X4;
9187f21db6cSLawrence Tang   UINT64 X5;
9197f21db6cSLawrence Tang   UINT64 X6;
9207f21db6cSLawrence Tang   UINT64 X7;
9217f21db6cSLawrence Tang   UINT64 X8;
9227f21db6cSLawrence Tang   UINT64 X9;
9237f21db6cSLawrence Tang   UINT64 X10;
9247f21db6cSLawrence Tang   UINT64 X11;
9257f21db6cSLawrence Tang   UINT64 X12;
9267f21db6cSLawrence Tang   UINT64 X13;
9277f21db6cSLawrence Tang   UINT64 X14;
9287f21db6cSLawrence Tang   UINT64 X15;
9297f21db6cSLawrence Tang   UINT64 X16;
9307f21db6cSLawrence Tang   UINT64 X17;
9317f21db6cSLawrence Tang   UINT64 X18;
9327f21db6cSLawrence Tang   UINT64 X19;
9337f21db6cSLawrence Tang   UINT64 X20;
9347f21db6cSLawrence Tang   UINT64 X21;
9357f21db6cSLawrence Tang   UINT64 X22;
9367f21db6cSLawrence Tang   UINT64 X23;
9377f21db6cSLawrence Tang   UINT64 X24;
9387f21db6cSLawrence Tang   UINT64 X25;
9397f21db6cSLawrence Tang   UINT64 X26;
9407f21db6cSLawrence Tang   UINT64 X27;
9417f21db6cSLawrence Tang   UINT64 X28;
9427f21db6cSLawrence Tang   UINT64 X29;
9437f21db6cSLawrence Tang   UINT64 X30;
9447f21db6cSLawrence Tang   UINT64 Sp;
9457f21db6cSLawrence Tang } EFI_ARM_V8_AARCH64_GPR;
9467f21db6cSLawrence Tang 
9477f21db6cSLawrence Tang typedef struct {
9487f21db6cSLawrence Tang   UINT64 Elr_El1;
9497f21db6cSLawrence Tang   UINT64 Esr_El1;
9507f21db6cSLawrence Tang   UINT64 Far_El1;
9517f21db6cSLawrence Tang   UINT64 Isr_El1;
9527f21db6cSLawrence Tang   UINT64 Mair_El1;
9537f21db6cSLawrence Tang   UINT64 Midr_El1;
9547f21db6cSLawrence Tang   UINT64 Mpidr_El1;
9557f21db6cSLawrence Tang   UINT64 Sctlr_El1;
9567f21db6cSLawrence Tang   UINT64 Sp_El0;
9577f21db6cSLawrence Tang   UINT64 Sp_El1;
9587f21db6cSLawrence Tang   UINT64 Spsr_El1;
9597f21db6cSLawrence Tang   UINT64 Tcr_El1;
9607f21db6cSLawrence Tang   UINT64 Tpidr_El0;
9617f21db6cSLawrence Tang   UINT64 Tpidr_El1;
9627f21db6cSLawrence Tang   UINT64 Tpidrro_El0;
9637f21db6cSLawrence Tang   UINT64 Ttbr0_El1;
9647f21db6cSLawrence Tang   UINT64 Ttbr1_El1;
9657f21db6cSLawrence Tang } EFI_ARM_AARCH64_EL1_CONTEXT_REGISTERS;
9667f21db6cSLawrence Tang 
9677f21db6cSLawrence Tang typedef struct {
9687f21db6cSLawrence Tang   UINT64 Elr_El2;
9697f21db6cSLawrence Tang   UINT64 Esr_El2;
9707f21db6cSLawrence Tang   UINT64 Far_El2;
9717f21db6cSLawrence Tang   UINT64 Hacr_El2;
9727f21db6cSLawrence Tang   UINT64 Hcr_El2;
9737f21db6cSLawrence Tang   UINT64 Hpfar_El2;
9747f21db6cSLawrence Tang   UINT64 Mair_El2;
9757f21db6cSLawrence Tang   UINT64 Sctlr_El2;
9767f21db6cSLawrence Tang   UINT64 Sp_El2;
9777f21db6cSLawrence Tang   UINT64 Spsr_El2;
9787f21db6cSLawrence Tang   UINT64 Tcr_El2;
9797f21db6cSLawrence Tang   UINT64 Tpidr_El2;
9807f21db6cSLawrence Tang   UINT64 Ttbr0_El2;
9817f21db6cSLawrence Tang   UINT64 Vtcr_El2;
9827f21db6cSLawrence Tang   UINT64 Vttbr_El2;
9837f21db6cSLawrence Tang } EFI_ARM_AARCH64_EL2_CONTEXT_REGISTERS;
9847f21db6cSLawrence Tang 
9857f21db6cSLawrence Tang typedef struct {
9867f21db6cSLawrence Tang   UINT64 Elr_El3;
9877f21db6cSLawrence Tang   UINT64 Esr_El3;
9887f21db6cSLawrence Tang   UINT64 Far_El3;
9897f21db6cSLawrence Tang   UINT64 Mair_El3;
9907f21db6cSLawrence Tang   UINT64 Sctlr_El3;
9917f21db6cSLawrence Tang   UINT64 Sp_El3;
9927f21db6cSLawrence Tang   UINT64 Spsr_El3;
9937f21db6cSLawrence Tang   UINT64 Tcr_El3;
9947f21db6cSLawrence Tang   UINT64 Tpidr_El3;
9957f21db6cSLawrence Tang   UINT64 Ttbr0_El3;
9967f21db6cSLawrence Tang } EFI_ARM_AARCH64_EL3_CONTEXT_REGISTERS;
9977f21db6cSLawrence Tang 
9987f21db6cSLawrence Tang typedef struct {
9997f21db6cSLawrence Tang   UINT64 MrsOp2 : 3;
10007f21db6cSLawrence Tang   UINT64 MrsCrm : 4;
10017f21db6cSLawrence Tang   UINT64 MrsCrn : 4;
10027f21db6cSLawrence Tang   UINT64 MrsOp1 : 3;
10037f21db6cSLawrence Tang   UINT64 MrsO0 : 1;
10047f21db6cSLawrence Tang   UINT64 Value : 64;
10057f21db6cSLawrence Tang } EFI_ARM_MISC_CONTEXT_REGISTER;
100622a467ceSLawrence Tang 
10073d0e4f24SLawrence Tang ///
10081b0b00e3SLawrence Tang /// Error Status Fields
10091b0b00e3SLawrence Tang ///
10101b0b00e3SLawrence Tang typedef struct {
10111b0b00e3SLawrence Tang   UINT64    Resv1               : 8;
10121b0b00e3SLawrence Tang   UINT64    Type                : 8;
10131b0b00e3SLawrence Tang   UINT64    AddressSignal       : 1;      ///< Error in Address signals or in Address portion of transaction
10141b0b00e3SLawrence Tang   UINT64    ControlSignal       : 1;      ///< Error in Control signals or in Control portion of transaction
10151b0b00e3SLawrence Tang   UINT64    DataSignal          : 1;      ///< Error in Data signals or in Data portion of transaction
10161b0b00e3SLawrence Tang   UINT64    DetectedByResponder : 1;      ///< Error detected by responder
10171b0b00e3SLawrence Tang   UINT64    DetectedByRequester : 1;      ///< Error detected by requestor
10181b0b00e3SLawrence Tang   UINT64    FirstError          : 1;      ///< First Error in the sequence - option field
10191b0b00e3SLawrence Tang   UINT64    OverflowNotLogged   : 1;      ///< Additional errors were not logged due to lack of resources
10201b0b00e3SLawrence Tang   UINT64    Resv2               : 41;
10211b0b00e3SLawrence Tang } EFI_GENERIC_ERROR_STATUS;
10221b0b00e3SLawrence Tang 
10231b0b00e3SLawrence Tang ///
1024*a0865e38SLawrence Tang /// CPER Generic Error Codes
1025*a0865e38SLawrence Tang ///
1026*a0865e38SLawrence Tang #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}
1027*a0865e38SLawrence Tang #define CPER_GENERIC_ERROR_TYPES_VALUES (const char*[]){"ERR_INTERNAL", "ERR_BUS", "ERR_MEM", "ERR_TLB", \
1028*a0865e38SLawrence Tang     "ERR_CACHE", "ERR_FUNCTION", "ERR_SELFTEST", "ERR_FLOW", "ERR_MAP", "ERR_IMPROPER", "ERR_UNIMPL", \
1029*a0865e38SLawrence Tang     "ERR_LOL", "ERR_RESPONSE", "ERR_PARITY", "ERR_PROTOCOL", "ERR_ERROR", "ERR_TIMEOUT", "ERR_POISONED"}
1030*a0865e38SLawrence Tang #define CPER_GENERIC_ERROR_TYPES_DESCRIPTIONS (const char*[]){\
1031*a0865e38SLawrence Tang     "Error detected internal to the component.", \
1032*a0865e38SLawrence Tang     "Error detected in the bus.", \
1033*a0865e38SLawrence Tang     "Storage error in memory (DRAM).", \
1034*a0865e38SLawrence Tang     "Storage error in TLB.", \
1035*a0865e38SLawrence Tang     "Storage error in cache.", \
1036*a0865e38SLawrence Tang     "Error in one or more functional units.", \
1037*a0865e38SLawrence Tang     "Component failed self test.", \
1038*a0865e38SLawrence Tang     "Overflow or underflow of internal queue.", \
1039*a0865e38SLawrence Tang     "Virtual address not found on IO-TLB or IO-PDIR.", \
1040*a0865e38SLawrence Tang     "Improper access error.", \
1041*a0865e38SLawrence Tang     "Access to a memory address which is not mapped to any component.", \
1042*a0865e38SLawrence Tang     "Loss of Lockstep error.", \
1043*a0865e38SLawrence Tang     "Response not associated with a request.", \
1044*a0865e38SLawrence Tang     "Bus parity error (must also set the A, C, or D bits).", \
1045*a0865e38SLawrence Tang     "Detection of a protocol error.", \
1046*a0865e38SLawrence Tang     "Detection of a PATH_ERROR.", \
1047*a0865e38SLawrence Tang     "Bus operation timeout.", \
1048*a0865e38SLawrence Tang     "A read was issued to data that has been poisoned."}
1049*a0865e38SLawrence Tang 
1050*a0865e38SLawrence Tang ///
10511b0b00e3SLawrence Tang /// Error Type
10521b0b00e3SLawrence Tang ///
10531b0b00e3SLawrence Tang typedef enum {
10541b0b00e3SLawrence Tang   ///
10551b0b00e3SLawrence Tang   /// General Internal errors
10561b0b00e3SLawrence Tang   ///
10571b0b00e3SLawrence Tang   ErrorInternal = 1,
10581b0b00e3SLawrence Tang   ErrorBus      = 16,
10591b0b00e3SLawrence Tang   ///
10601b0b00e3SLawrence Tang   /// Component Internal errors
10611b0b00e3SLawrence Tang   ///
10621b0b00e3SLawrence Tang   ErrorMemStorage     = 4,        // Error in memory device
10631b0b00e3SLawrence Tang   ErrorTlbStorage     = 5,        // TLB error in cache
10641b0b00e3SLawrence Tang   ErrorCacheStorage   = 6,
10651b0b00e3SLawrence Tang   ErrorFunctionalUnit = 7,
10661b0b00e3SLawrence Tang   ErrorSelftest       = 8,
10671b0b00e3SLawrence Tang   ErrorOverflow       = 9,
10681b0b00e3SLawrence Tang   ///
10691b0b00e3SLawrence Tang   /// Bus internal errors
10701b0b00e3SLawrence Tang   ///
10711b0b00e3SLawrence Tang   ErrorVirtualMap      = 17,
10721b0b00e3SLawrence Tang   ErrorAccessInvalid   = 18,      // Improper access
10731b0b00e3SLawrence Tang   ErrorUnimplAccess    = 19,      // Unimplemented memory access
10741b0b00e3SLawrence Tang   ErrorLossOfLockstep  = 20,
10751b0b00e3SLawrence Tang   ErrorResponseInvalid = 21,       // Response not associated with request
10761b0b00e3SLawrence Tang   ErrorParity          = 22,
10771b0b00e3SLawrence Tang   ErrorProtocol        = 23,
10781b0b00e3SLawrence Tang   ErrorPath            = 24,      // Detected path error
10791b0b00e3SLawrence Tang   ErrorTimeout         = 25,      // Bus timeout
10801b0b00e3SLawrence Tang   ErrorPoisoned        = 26       // Read data poisoned
10811b0b00e3SLawrence Tang } EFI_GENERIC_ERROR_STATUS_ERROR_TYPE;
10821b0b00e3SLawrence Tang 
10831b0b00e3SLawrence Tang ///
10841b0b00e3SLawrence Tang /// Validation bit mask indicates which fields in the memory error record are valid
10851b0b00e3SLawrence Tang /// in Memory Error section
10861b0b00e3SLawrence Tang ///@{
10871b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_STATUS_VALID                  BIT0
10881b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_PHY_ADDRESS_VALID                   BIT1
10891b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_PHY_ADDRESS_MASK_VALID              BIT2
10901b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_NODE_VALID                          BIT3
10911b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_CARD_VALID                          BIT4
10921b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_MODULE_VALID                        BIT5
10931b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_BANK_VALID                          BIT6
10941b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_DEVICE_VALID                        BIT7
10951b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ROW_VALID                           BIT8
10961b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_COLUMN_VALID                        BIT9
10971b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_BIT_POS_VALID                       BIT10
10981b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_REQUESTOR_ID_VALID                  BIT11
10991b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_RESPONDER_ID_VALID                  BIT12
11001b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_TARGET_ID_VALID                     BIT13
11011b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_TYPE_VALID                    BIT14
11021b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_RANK_NUM_VALID                BIT15
11031b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_CARD_HANDLE_VALID             BIT16
11041b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_MODULE_HANDLE_VALID           BIT17
11051b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_EXTENDED_ROW_BIT_16_17_VALID  BIT18
11061b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_BANK_GROUP_VALID              BIT19
11071b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_BANK_ADDRESS_VALID            BIT20
11081b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_CHIP_IDENTIFICATION_VALID     BIT21
11091b0b00e3SLawrence Tang ///@}
11101b0b00e3SLawrence Tang 
11111b0b00e3SLawrence Tang ///
11121b0b00e3SLawrence Tang /// Memory Error Type identifies the type of error that occurred in Memory
11131b0b00e3SLawrence Tang /// Error section
11141b0b00e3SLawrence Tang ///@{
11151b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_UNKNOWN                 0x00
11161b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_NONE                    0x01
11171b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_SINGLEBIT_ECC           0x02
11181b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_MLTIBIT_ECC             0x03
11191b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_SINGLESYMBOLS_CHIPKILL  0x04
11201b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_MULTISYMBOL_CHIPKILL    0x05
11211b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_MATER_ABORT             0x06
11221b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_TARGET_ABORT            0x07
11231b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_PARITY                  0x08
11241b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_WDT                     0x09
11251b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_INVALID_ADDRESS         0x0A
11261b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_MIRROR_FAILED           0x0B
11271b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_SPARING                 0x0C
11281b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_SCRUB_CORRECTED         0x0D
11291b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_SCRUB_UNCORRECTED       0x0E
11301b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY_ERROR_MEMORY_MAP_EVENT        0x0F
11311b0b00e3SLawrence Tang ///@}
11321b0b00e3SLawrence Tang 
11331b0b00e3SLawrence Tang ///
11341b0b00e3SLawrence Tang /// Memory Error Section
11351b0b00e3SLawrence Tang ///
11361b0b00e3SLawrence Tang typedef struct {
11371b0b00e3SLawrence Tang   UINT64                      ValidFields;
11381b0b00e3SLawrence Tang   EFI_GENERIC_ERROR_STATUS    ErrorStatus;
11391b0b00e3SLawrence Tang   UINT64                      PhysicalAddress;     // Error physical address
11401b0b00e3SLawrence Tang   UINT64                      PhysicalAddressMask; // Grnaularity
11411b0b00e3SLawrence Tang   UINT16                      Node;                // Node #
11421b0b00e3SLawrence Tang   UINT16                      Card;
11431b0b00e3SLawrence Tang   UINT16                      ModuleRank;        // Module or Rank#
11441b0b00e3SLawrence Tang   UINT16                      Bank;
11451b0b00e3SLawrence Tang   UINT16                      Device;
11461b0b00e3SLawrence Tang   UINT16                      Row;
11471b0b00e3SLawrence Tang   UINT16                      Column;
11481b0b00e3SLawrence Tang   UINT16                      BitPosition;
11491b0b00e3SLawrence Tang   UINT64                      RequestorId;
11501b0b00e3SLawrence Tang   UINT64                      ResponderId;
11511b0b00e3SLawrence Tang   UINT64                      TargetId;
11521b0b00e3SLawrence Tang   UINT8                       ErrorType;
11531b0b00e3SLawrence Tang   UINT8                       Extended;
11541b0b00e3SLawrence Tang   UINT16                      RankNum;
11551b0b00e3SLawrence Tang   UINT16                      CardHandle;
11561b0b00e3SLawrence Tang   UINT16                      ModuleHandle;
11571b0b00e3SLawrence Tang } EFI_PLATFORM_MEMORY_ERROR_DATA;
11581b0b00e3SLawrence Tang 
11591b0b00e3SLawrence Tang ///
11601b0b00e3SLawrence Tang /// Validation bit mask indicates which fields in the memory error record 2 are valid
11611b0b00e3SLawrence Tang /// in Memory Error section 2
11621b0b00e3SLawrence Tang ///@{
11631b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_STATUS_VALID       BIT0
11641b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_VALID        BIT1
11651b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_MASK_VALID   BIT2
11661b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_NODE_VALID               BIT3
11671b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_CARD_VALID               BIT4
11681b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_MODULE_VALID             BIT5
11691b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_BANK_VALID               BIT6
11701b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_DEVICE_VALID             BIT7
11711b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ROW_VALID                BIT8
11721b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_COLUMN_VALID             BIT9
11731b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_RANK_VALID               BIT10
11741b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_BIT_POS_VALID            BIT11
11751b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_CHIP_ID_VALID            BIT12
11761b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_MEMORY_ERROR_TYPE_VALID  BIT13
11771b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_STATUS_VALID             BIT14
11781b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_REQUESTOR_ID_VALID       BIT15
11791b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_RESPONDER_ID_VALID       BIT16
11801b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_TARGET_ID_VALID          BIT17
11811b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_CARD_HANDLE_VALID        BIT18
11821b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_MODULE_HANDLE_VALID      BIT19
11831b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_BANK_GROUP_VALID         BIT20
11841b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_BANK_ADDRESS_VALID       BIT21
11851b0b00e3SLawrence Tang ///@}
11861b0b00e3SLawrence Tang 
11871b0b00e3SLawrence Tang ///
11881b0b00e3SLawrence Tang /// Memory Error Type identifies the type of error that occurred in Memory
11891b0b00e3SLawrence Tang /// Error section 2
11901b0b00e3SLawrence Tang ///@{
11911b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_UNKNOWN                0x00
11921b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_NONE                   0x01
11931b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_SINGLEBIT_ECC          0x02
11941b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_MLTIBIT_ECC            0x03
11951b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_SINGLESYMBOL_CHIPKILL  0x04
11961b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_MULTISYMBOL_CHIPKILL   0x05
11971b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_MASTER_ABORT           0x06
11981b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_TARGET_ABORT           0x07
11991b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_PARITY                 0x08
12001b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_WDT                    0x09
12011b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_INVALID_ADDRESS        0x0A
12021b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_MIRROR_BROKEN          0x0B
12031b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_SPARING         0x0C
12041b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_CORRECTED        0x0D
12051b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_UNCORRECTED      0x0E
12061b0b00e3SLawrence Tang #define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_MAP_EVENT       0x0F
12071b0b00e3SLawrence Tang ///@}
12081b0b00e3SLawrence Tang 
12091b0b00e3SLawrence Tang ///
12101b0b00e3SLawrence Tang /// Memory Error Section 2
12111b0b00e3SLawrence Tang ///
12121b0b00e3SLawrence Tang typedef struct {
12131b0b00e3SLawrence Tang   UINT64                      ValidFields;
12141b0b00e3SLawrence Tang   EFI_GENERIC_ERROR_STATUS    ErrorStatus;
12151b0b00e3SLawrence Tang   UINT64                      PhysicalAddress;     // Error physical address
12161b0b00e3SLawrence Tang   UINT64                      PhysicalAddressMask; // Grnaularity
12171b0b00e3SLawrence Tang   UINT16                      Node;                // Node #
12181b0b00e3SLawrence Tang   UINT16                      Card;
12191b0b00e3SLawrence Tang   UINT16                      Module;             // Module or Rank#
12201b0b00e3SLawrence Tang   UINT16                      Bank;
12211b0b00e3SLawrence Tang   UINT32                      Device;
12221b0b00e3SLawrence Tang   UINT32                      Row;
12231b0b00e3SLawrence Tang   UINT32                      Column;
12241b0b00e3SLawrence Tang   UINT32                      Rank;
12251b0b00e3SLawrence Tang   UINT32                      BitPosition;
12261b0b00e3SLawrence Tang   UINT8                       ChipId;
12271b0b00e3SLawrence Tang   UINT8                       MemErrorType;
12281b0b00e3SLawrence Tang   UINT8                       Status;
12291b0b00e3SLawrence Tang   UINT8                       Reserved;
12301b0b00e3SLawrence Tang   UINT64                      RequestorId;
12311b0b00e3SLawrence Tang   UINT64                      ResponderId;
12321b0b00e3SLawrence Tang   UINT64                      TargetId;
12331b0b00e3SLawrence Tang   UINT32                      CardHandle;
12341b0b00e3SLawrence Tang   UINT32                      ModuleHandle;
12351b0b00e3SLawrence Tang } EFI_PLATFORM_MEMORY2_ERROR_DATA;
12361b0b00e3SLawrence Tang 
12371b0b00e3SLawrence Tang ///
12381b0b00e3SLawrence Tang /// Validation bits mask indicates which of the following fields is valid
12391b0b00e3SLawrence Tang /// in PCI Express Error Record.
12401b0b00e3SLawrence Tang ///@{
12411b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_TYPE_VALID        BIT0
12421b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_VERSION_VALID          BIT1
12431b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_COMMAND_STATUS_VALID   BIT2
12441b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_DEVICE_ID_VALID        BIT3
12451b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_SERIAL_NO_VALID        BIT4
12461b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_BRIDGE_CRL_STS_VALID   BIT5
12471b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_CAPABILITY_INFO_VALID  BIT6
12481b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_AER_INFO_VALID         BIT7
12491b0b00e3SLawrence Tang ///@}
12501b0b00e3SLawrence Tang 
12511b0b00e3SLawrence Tang ///
12521b0b00e3SLawrence Tang /// PCIe Device/Port Type as defined in the PCI Express capabilities register
12531b0b00e3SLawrence Tang ///@{
12541b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_PCIE_ENDPOINT         0x00000000
12551b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_PCI_ENDPOINT          0x00000001
12561b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_ROOT_PORT             0x00000004
12571b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_UPSWITCH_PORT         0x00000005
12581b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_DOWNSWITCH_PORT       0x00000006
12591b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_PCIE_TO_PCI_BRIDGE    0x00000007
12601b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_PCI_TO_PCIE_BRIDGE    0x00000008
12611b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_ROOT_INT_ENDPOINT     0x00000009
12621b0b00e3SLawrence Tang #define EFI_PCIE_ERROR_PORT_ROOT_EVENT_COLLECTOR  0x0000000A
12631b0b00e3SLawrence Tang ///@}
12641b0b00e3SLawrence Tang 
12651b0b00e3SLawrence Tang ///
12661b0b00e3SLawrence Tang /// PCI Slot number
12671b0b00e3SLawrence Tang ///
12681b0b00e3SLawrence Tang typedef struct {
12691b0b00e3SLawrence Tang   UINT16    Resv1  : 3;
12701b0b00e3SLawrence Tang   UINT16    Number : 13;
12711b0b00e3SLawrence Tang } EFI_GENERIC_ERROR_PCI_SLOT;
12721b0b00e3SLawrence Tang 
12731b0b00e3SLawrence Tang ///
12741b0b00e3SLawrence Tang /// PCIe Root Port PCI/bridge PCI compatible device number and
12751b0b00e3SLawrence Tang /// bus number information to uniquely identify the root port or
12761b0b00e3SLawrence Tang /// bridge. Default values for both the bus numbers is zero.
12771b0b00e3SLawrence Tang ///
12781b0b00e3SLawrence Tang typedef struct {
12791b0b00e3SLawrence Tang   UINT16                        VendorId;
12801b0b00e3SLawrence Tang   UINT16                        DeviceId;
12811b0b00e3SLawrence Tang   UINT8                         ClassCode[3];
12821b0b00e3SLawrence Tang   UINT8                         Function;
12831b0b00e3SLawrence Tang   UINT8                         Device;
12841b0b00e3SLawrence Tang   UINT16                        Segment;
12851b0b00e3SLawrence Tang   UINT8                         PrimaryOrDeviceBus;
12861b0b00e3SLawrence Tang   UINT8                         SecondaryBus;
12871b0b00e3SLawrence Tang   EFI_GENERIC_ERROR_PCI_SLOT    Slot;
12881b0b00e3SLawrence Tang   UINT8                         Resv1;
12891b0b00e3SLawrence Tang } EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID;
12901b0b00e3SLawrence Tang 
12911b0b00e3SLawrence Tang ///
12921b0b00e3SLawrence Tang /// PCIe Capability Structure
12931b0b00e3SLawrence Tang ///
12941b0b00e3SLawrence Tang typedef struct {
12951b0b00e3SLawrence Tang   UINT8    PcieCap[60];
12961b0b00e3SLawrence Tang } EFI_PCIE_ERROR_DATA_CAPABILITY;
12971b0b00e3SLawrence Tang 
12981b0b00e3SLawrence Tang ///
12991b0b00e3SLawrence Tang /// PCIe Advanced Error Reporting Extended Capability Structure.
13001b0b00e3SLawrence Tang ///
13011b0b00e3SLawrence Tang typedef struct {
13021b0b00e3SLawrence Tang   UINT8    PcieAer[96];
13031b0b00e3SLawrence Tang } EFI_PCIE_ERROR_DATA_AER;
13041b0b00e3SLawrence Tang 
13051b0b00e3SLawrence Tang ///
13061b0b00e3SLawrence Tang /// PCI Express Error Record
13071b0b00e3SLawrence Tang ///
13081b0b00e3SLawrence Tang typedef struct {
13091b0b00e3SLawrence Tang   UINT64                                  ValidFields;
13101b0b00e3SLawrence Tang   UINT32                                  PortType;
13111b0b00e3SLawrence Tang   UINT32                                  Version;
13121b0b00e3SLawrence Tang   UINT32                                  CommandStatus;
13131b0b00e3SLawrence Tang   UINT32                                  Resv2;
13141b0b00e3SLawrence Tang   EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID    DevBridge;
13151b0b00e3SLawrence Tang   UINT64                                  SerialNo;
13161b0b00e3SLawrence Tang   UINT32                                  BridgeControlStatus;
13171b0b00e3SLawrence Tang   EFI_PCIE_ERROR_DATA_CAPABILITY          Capability;
13181b0b00e3SLawrence Tang   EFI_PCIE_ERROR_DATA_AER                 AerInfo;
13191b0b00e3SLawrence Tang } EFI_PCIE_ERROR_DATA;
13201b0b00e3SLawrence Tang 
13211b0b00e3SLawrence Tang ///
13221b0b00e3SLawrence Tang /// Validation bits Indicates which of the following fields is valid
13231b0b00e3SLawrence Tang /// in PCI/PCI-X Bus Error Section.
13241b0b00e3SLawrence Tang ///@{
13251b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_STATUS_VALID        BIT0
13261b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_TYPE_VALID          BIT1
13271b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_BUS_ID_VALID        BIT2
13281b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_BUS_ADDRESS_VALID   BIT3
13291b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_BUS_DATA_VALID      BIT4
13301b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_COMMAND_VALID       BIT5
13311b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_REQUESTOR_ID_VALID  BIT6
13321b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_COMPLETER_ID_VALID  BIT7
13331b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_TARGET_ID_VALID     BIT8
13341b0b00e3SLawrence Tang ///@}
13351b0b00e3SLawrence Tang 
13361b0b00e3SLawrence Tang ///
13371b0b00e3SLawrence Tang /// PCI Bus Error Type in PCI/PCI-X Bus Error Section
13381b0b00e3SLawrence Tang ///@{
13391b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_UNKNOWN             0x0000
13401b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_DATA_PARITY         0x0001
13411b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_SYSTEM              0x0002
13421b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_MASTER_ABORT        0x0003
13431b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_BUS_TIMEOUT         0x0004
13441b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_MASTER_DATA_PARITY  0x0005
13451b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_ADDRESS_PARITY      0x0006
13461b0b00e3SLawrence Tang #define EFI_PCI_PCIX_BUS_ERROR_COMMAND_PARITY      0x0007
13471b0b00e3SLawrence Tang ///@}
13481b0b00e3SLawrence Tang 
13491b0b00e3SLawrence Tang ///
13501b0b00e3SLawrence Tang /// PCI/PCI-X Bus Error Section
13511b0b00e3SLawrence Tang ///
13521b0b00e3SLawrence Tang typedef struct {
13531b0b00e3SLawrence Tang   UINT64                      ValidFields;
13541b0b00e3SLawrence Tang   EFI_GENERIC_ERROR_STATUS    ErrorStatus;
13551b0b00e3SLawrence Tang   UINT16                      Type;
13561b0b00e3SLawrence Tang   UINT16                      BusId;
13571b0b00e3SLawrence Tang   UINT32                      Resv2;
13581b0b00e3SLawrence Tang   UINT64                      BusAddress;
13591b0b00e3SLawrence Tang   UINT64                      BusData;
13601b0b00e3SLawrence Tang   UINT64                      BusCommand;
13611b0b00e3SLawrence Tang   UINT64                      RequestorId;
13621b0b00e3SLawrence Tang   UINT64                      ResponderId;
13631b0b00e3SLawrence Tang   UINT64                      TargetId;
13641b0b00e3SLawrence Tang } EFI_PCI_PCIX_BUS_ERROR_DATA;
13651b0b00e3SLawrence Tang 
13661b0b00e3SLawrence Tang ///
13671b0b00e3SLawrence Tang /// Validation bits Indicates which of the following fields is valid
13681b0b00e3SLawrence Tang /// in PCI/PCI-X Component Error Section.
13691b0b00e3SLawrence Tang ///@{
13701b0b00e3SLawrence Tang #define EFI_PCI_PCIX_DEVICE_ERROR_STATUS_VALID         BIT0
13711b0b00e3SLawrence Tang #define EFI_PCI_PCIX_DEVICE_ERROR_ID_INFO_VALID        BIT1
13721b0b00e3SLawrence Tang #define EFI_PCI_PCIX_DEVICE_ERROR_MEM_NUM_VALID        BIT2
13731b0b00e3SLawrence Tang #define EFI_PCI_PCIX_DEVICE_ERROR_IO_NUM_VALID         BIT3
13741b0b00e3SLawrence Tang #define EFI_PCI_PCIX_DEVICE_ERROR_REG_DATA_PAIR_VALID  BIT4
13751b0b00e3SLawrence Tang ///@}
13761b0b00e3SLawrence Tang 
13771b0b00e3SLawrence Tang ///
13781b0b00e3SLawrence Tang /// PCI/PCI-X Device Identification Information
13791b0b00e3SLawrence Tang ///
13801b0b00e3SLawrence Tang typedef struct {
13811b0b00e3SLawrence Tang   UINT16    VendorId;
13821b0b00e3SLawrence Tang   UINT16    DeviceId;
13831b0b00e3SLawrence Tang   UINT8     ClassCode[3];
13841b0b00e3SLawrence Tang   UINT8     Function;
13851b0b00e3SLawrence Tang   UINT8     Device;
13861b0b00e3SLawrence Tang   UINT8     Bus;
13871b0b00e3SLawrence Tang   UINT8     Segment;
13881b0b00e3SLawrence Tang   UINT8     Resv1;
13891b0b00e3SLawrence Tang   UINT32    Resv2;
13901b0b00e3SLawrence Tang } EFI_GENERIC_ERROR_PCI_DEVICE_ID;
13911b0b00e3SLawrence Tang 
13921b0b00e3SLawrence Tang ///
13931b0b00e3SLawrence Tang /// Identifies the type of firmware error record
13941b0b00e3SLawrence Tang ///@{
13951b0b00e3SLawrence Tang #define EFI_FIRMWARE_ERROR_TYPE_IPF_SAL    0x00
13961b0b00e3SLawrence Tang #define EFI_FIRMWARE_ERROR_TYPE_SOC_TYPE1  0x01
13971b0b00e3SLawrence Tang #define EFI_FIRMWARE_ERROR_TYPE_SOC_TYPE2  0x02
13981b0b00e3SLawrence Tang ///@}
13991b0b00e3SLawrence Tang 
14001b0b00e3SLawrence Tang ///
14011b0b00e3SLawrence Tang /// Firmware Error Record Section
14021b0b00e3SLawrence Tang ///
14031b0b00e3SLawrence Tang typedef struct {
14041b0b00e3SLawrence Tang   UINT8       ErrorType;
14051b0b00e3SLawrence Tang   UINT8       Revision;
14061b0b00e3SLawrence Tang   UINT8       Resv1[6];
14071b0b00e3SLawrence Tang   UINT64      RecordId;
14081b0b00e3SLawrence Tang   EFI_GUID    RecordIdGuid;
14091b0b00e3SLawrence Tang } EFI_FIRMWARE_ERROR_DATA;
14101b0b00e3SLawrence Tang 
14111b0b00e3SLawrence Tang ///
14121b0b00e3SLawrence Tang /// Fault Reason in DMAr Generic Error Section
14131b0b00e3SLawrence Tang ///@{
14141b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_TABLE_ENTRY_NOT_PRESENT            0x01
14151b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_TABLE_ENTRY_INVALID                0x02
14161b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_ACCESS_MAPPING_TABLE_ERROR         0x03
14171b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_MAPPING_TABLE    0x04
14181b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_ACCESS_ADDR_OUT_OF_SPACE           0x05
14191b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_INVALID_ACCESS                     0x06
14201b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_INVALID_REQUEST                    0x07
14211b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_ACCESS_TRANSLATE_TABLE_ERROR       0x08
14221b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_TRANSLATE_TABLE  0x09
14231b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_INVALID_COMMAOND                   0x0A
14241b0b00e3SLawrence Tang #define EFI_DMA_FAULT_REASON_ACCESS_COMMAND_BUFFER_ERROR        0x0B
14251b0b00e3SLawrence Tang ///@}
14261b0b00e3SLawrence Tang 
14271b0b00e3SLawrence Tang ///
14281b0b00e3SLawrence Tang /// DMA access type in DMAr Generic Error Section
14291b0b00e3SLawrence Tang ///@{
14301b0b00e3SLawrence Tang #define EFI_DMA_ACCESS_TYPE_READ   0x00
14311b0b00e3SLawrence Tang #define EFI_DMA_ACCESS_TYPE_WRITE  0x01
14321b0b00e3SLawrence Tang ///@}
14331b0b00e3SLawrence Tang 
14341b0b00e3SLawrence Tang ///
14351b0b00e3SLawrence Tang /// DMA address type in DMAr Generic Error Section
14361b0b00e3SLawrence Tang ///@{
14371b0b00e3SLawrence Tang #define EFI_DMA_ADDRESS_UNTRANSLATED  0x00
14381b0b00e3SLawrence Tang #define EFI_DMA_ADDRESS_TRANSLATION   0x01
14391b0b00e3SLawrence Tang ///@}
14401b0b00e3SLawrence Tang 
14411b0b00e3SLawrence Tang ///
14421b0b00e3SLawrence Tang /// Architecture type in DMAr Generic Error Section
14431b0b00e3SLawrence Tang ///@{
14441b0b00e3SLawrence Tang #define EFI_DMA_ARCH_TYPE_VT     0x01
14451b0b00e3SLawrence Tang #define EFI_DMA_ARCH_TYPE_IOMMU  0x02
14461b0b00e3SLawrence Tang ///@}
14471b0b00e3SLawrence Tang 
14481b0b00e3SLawrence Tang ///
14491b0b00e3SLawrence Tang /// DMAr Generic Error Section
14501b0b00e3SLawrence Tang ///
14511b0b00e3SLawrence Tang typedef struct {
14521b0b00e3SLawrence Tang   UINT16    RequesterId;
14531b0b00e3SLawrence Tang   UINT16    SegmentNumber;
14541b0b00e3SLawrence Tang   UINT8     FaultReason;
14551b0b00e3SLawrence Tang   UINT8     AccessType;
14561b0b00e3SLawrence Tang   UINT8     AddressType;
14571b0b00e3SLawrence Tang   UINT8     ArchType;
14581b0b00e3SLawrence Tang   UINT64    DeviceAddr;
14591b0b00e3SLawrence Tang   UINT8     Resv1[16];
14601b0b00e3SLawrence Tang } EFI_DMAR_GENERIC_ERROR_DATA;
14611b0b00e3SLawrence Tang 
14621b0b00e3SLawrence Tang ///
14631b0b00e3SLawrence Tang /// Intel VT for Directed I/O specific DMAr Errors
14641b0b00e3SLawrence Tang ///
14651b0b00e3SLawrence Tang typedef struct {
14661b0b00e3SLawrence Tang   UINT8     Version;
14671b0b00e3SLawrence Tang   UINT8     Revision;
14681b0b00e3SLawrence Tang   UINT8     OemId[6];
14691b0b00e3SLawrence Tang   UINT64    Capability;
14701b0b00e3SLawrence Tang   UINT64    CapabilityEx;
14711b0b00e3SLawrence Tang   UINT32    GlobalCommand;
14721b0b00e3SLawrence Tang   UINT32    GlobalStatus;
14731b0b00e3SLawrence Tang   UINT32    FaultStatus;
14741b0b00e3SLawrence Tang   UINT8     Resv1[12];
14751b0b00e3SLawrence Tang   UINT64    FaultRecord[2];
14761b0b00e3SLawrence Tang   UINT64    RootEntry[2];
14771b0b00e3SLawrence Tang   UINT64    ContextEntry[2];
14781b0b00e3SLawrence Tang   UINT64    PteL6;
14791b0b00e3SLawrence Tang   UINT64    PteL5;
14801b0b00e3SLawrence Tang   UINT64    PteL4;
14811b0b00e3SLawrence Tang   UINT64    PteL3;
14821b0b00e3SLawrence Tang   UINT64    PteL2;
14831b0b00e3SLawrence Tang   UINT64    PteL1;
14841b0b00e3SLawrence Tang } EFI_DIRECTED_IO_DMAR_ERROR_DATA;
14851b0b00e3SLawrence Tang 
14861b0b00e3SLawrence Tang ///
14871b0b00e3SLawrence Tang /// IOMMU specific DMAr Errors
14881b0b00e3SLawrence Tang ///
14891b0b00e3SLawrence Tang typedef struct {
14901b0b00e3SLawrence Tang   UINT8     Revision;
14911b0b00e3SLawrence Tang   UINT8     Resv1[7];
14921b0b00e3SLawrence Tang   UINT64    Control;
14931b0b00e3SLawrence Tang   UINT64    Status;
14941b0b00e3SLawrence Tang   UINT8     Resv2[8];
14951b0b00e3SLawrence Tang   UINT64    EventLogEntry[2];
14961b0b00e3SLawrence Tang   UINT8     Resv3[16];
14971b0b00e3SLawrence Tang   UINT64    DeviceTableEntry[4];
14981b0b00e3SLawrence Tang   UINT64    PteL6;
14991b0b00e3SLawrence Tang   UINT64    PteL5;
15001b0b00e3SLawrence Tang   UINT64    PteL4;
15011b0b00e3SLawrence Tang   UINT64    PteL3;
15021b0b00e3SLawrence Tang   UINT64    PteL2;
15031b0b00e3SLawrence Tang   UINT64    PteL1;
15041b0b00e3SLawrence Tang } EFI_IOMMU_DMAR_ERROR_DATA;
15051b0b00e3SLawrence Tang 
15061b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeCmcGuid;
15071b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeCpeGuid;
15081b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeMceGuid;
15091b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypePcieGuid;
15101b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeInitGuid;
15111b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeNmiGuid;
15121b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeBootGuid;
15131b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeDmarGuid;
15141b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeSeaGuid;
15151b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeSeiGuid;
15161b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypePeiGuid;
15171b0b00e3SLawrence Tang extern EFI_GUID   gEfiEventNotificationTypeCxlGuid;
15181b0b00e3SLawrence Tang extern EFI_GUID   gEfiProcessorGenericErrorSectionGuid;
15191b0b00e3SLawrence Tang extern EFI_GUID   gEfiProcessorSpecificErrorSectionGuid;
15201b0b00e3SLawrence Tang extern EFI_GUID   gEfiIa32X64ProcessorErrorSectionGuid;
15211b0b00e3SLawrence Tang //todo: Why does the IPF GUID have an excess of elements?
15221b0b00e3SLawrence Tang //extern EFI_GUID   gEfiIpfProcessorErrorSectionGuid;
15231b0b00e3SLawrence Tang extern EFI_GUID   gEfiArmProcessorErrorSectionGuid;
15241b0b00e3SLawrence Tang extern EFI_GUID   gEfiPlatformMemoryErrorSectionGuid;
1525*a0865e38SLawrence Tang extern EFI_GUID   gEfiPlatformMemoryError2SectionGuid;
15261b0b00e3SLawrence Tang extern EFI_GUID   gEfiPcieErrorSectionGuid;
15271b0b00e3SLawrence Tang extern EFI_GUID   gEfiFirmwareErrorSectionGuid;
15281b0b00e3SLawrence Tang extern EFI_GUID   gEfiPciBusErrorSectionGuid;
15291b0b00e3SLawrence Tang extern EFI_GUID   gEfiPciDevErrorSectionGuid;
15301b0b00e3SLawrence Tang extern EFI_GUID   gEfiDMArGenericErrorSectionGuid;
15311b0b00e3SLawrence Tang extern EFI_GUID   gEfiDirectedIoDMArErrorSectionGuid;
15321b0b00e3SLawrence Tang extern EFI_GUID   gEfiIommuDMArErrorSectionGuid;
15331b0b00e3SLawrence Tang 
15341b0b00e3SLawrence Tang #pragma pack()
15351b0b00e3SLawrence Tang 
15361b0b00e3SLawrence Tang #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
15371b0b00e3SLawrence Tang ///
15381b0b00e3SLawrence Tang /// IA32 and x64 Specific definitions.
15391b0b00e3SLawrence Tang ///
15401b0b00e3SLawrence Tang 
15411b0b00e3SLawrence Tang extern EFI_GUID  gEfiIa32X64ErrorTypeCacheCheckGuid;
15421b0b00e3SLawrence Tang extern EFI_GUID  gEfiIa32X64ErrorTypeTlbCheckGuid;
15431b0b00e3SLawrence Tang extern EFI_GUID  gEfiIa32X64ErrorTypeBusCheckGuid;
15441b0b00e3SLawrence Tang extern EFI_GUID  gEfiIa32X64ErrorTypeMsCheckGuid;
15451b0b00e3SLawrence Tang 
15461b0b00e3SLawrence Tang #endif
15471b0b00e3SLawrence Tang 
15481b0b00e3SLawrence Tang #endif
1549