Home | History | Annotate | Download | only in IndustryStandard
      1 /** @file
      2   ACPI 5.0 definitions from the ACPI Specification Revision 5.0a November 13, 2013.
      3 
      4   Copyright (c) 2014 Hewlett-Packard Development Company, L.P.<BR>
      5   Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<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 
     15 #ifndef _ACPI_5_0_H_
     16 #define _ACPI_5_0_H_
     17 
     18 #include <IndustryStandard/Acpi40.h>
     19 
     20 //
     21 // Define for Desriptor
     22 //
     23 #define ACPI_SMALL_FIXED_DMA_DESCRIPTOR_NAME                         0x0A
     24 #define ACPI_LARGE_GPIO_CONNECTION_DESCRIPTOR_NAME                   0x0C
     25 #define ACPI_LARGE_GENERIC_SERIAL_BUS_CONNECTION_DESCRIPTOR_NAME     0x0E
     26 
     27 #define ACPI_FIXED_DMA_DESCRIPTOR                         0x55
     28 #define ACPI_GPIO_CONNECTION_DESCRIPTOR                   0x8C
     29 #define ACPI_GENERIC_SERIAL_BUS_CONNECTION_DESCRIPTOR     0x8E
     30 
     31 #pragma pack(1)
     32 
     33 ///
     34 /// Generic DMA Descriptor.
     35 ///
     36 typedef PACKED struct {
     37   ACPI_SMALL_RESOURCE_HEADER   Header;
     38   UINT16                       DmaRequestLine;
     39   UINT16                       DmaChannel;
     40   UINT8                        DmaTransferWidth;
     41 } EFI_ACPI_FIXED_DMA_DESCRIPTOR;
     42 
     43 ///
     44 /// GPIO Connection Descriptor
     45 ///
     46 typedef PACKED struct {
     47   ACPI_LARGE_RESOURCE_HEADER    Header;
     48   UINT8                         RevisionId;
     49   UINT8                         ConnectionType;
     50   UINT16                        GeneralFlags;
     51   UINT16                        InterruptFlags;
     52   UINT8                         PinConfiguration;
     53   UINT16                        OutputDriveStrength;
     54   UINT16                        DebounceTimeout;
     55   UINT16                        PinTableOffset;
     56   UINT8                         ResourceSourceIndex;
     57   UINT16                        ResourceSourceNameOffset;
     58   UINT16                        VendorDataOffset;
     59   UINT16                        VendorDataLength;
     60 } EFI_ACPI_GPIO_CONNECTION_DESCRIPTOR;
     61 
     62 #define EFI_ACPI_GPIO_CONNECTION_TYPE_INTERRUPT   0x0
     63 #define EFI_ACPI_GPIO_CONNECTION_TYPE_IO          0x1
     64 
     65 ///
     66 /// Serial Bus Resource Descriptor (Generic)
     67 ///
     68 typedef PACKED struct {
     69   ACPI_LARGE_RESOURCE_HEADER    Header;
     70   UINT8                         RevisionId;
     71   UINT8                         ResourceSourceIndex;
     72   UINT8                         SerialBusType;
     73   UINT8                         GeneralFlags;
     74   UINT16                        TypeSpecificFlags;
     75   UINT8                         TypeSpecificRevisionId;
     76   UINT16                        TypeDataLength;
     77 // Type specific data
     78 } EFI_ACPI_SERIAL_BUS_RESOURCE_DESCRIPTOR;
     79 
     80 #define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_I2C   0x1
     81 #define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_SPI   0x2
     82 #define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_UART  0x3
     83 
     84 ///
     85 /// Serial Bus Resource Descriptor (I2C)
     86 ///
     87 typedef PACKED struct {
     88   ACPI_LARGE_RESOURCE_HEADER    Header;
     89   UINT8                         RevisionId;
     90   UINT8                         ResourceSourceIndex;
     91   UINT8                         SerialBusType;
     92   UINT8                         GeneralFlags;
     93   UINT16                        TypeSpecificFlags;
     94   UINT8                         TypeSpecificRevisionId;
     95   UINT16                        TypeDataLength;
     96   UINT32                        ConnectionSpeed;
     97   UINT16                        SlaveAddress;
     98 } EFI_ACPI_SERIAL_BUS_RESOURCE_I2C_DESCRIPTOR;
     99 
    100 ///
    101 /// Serial Bus Resource Descriptor (SPI)
    102 ///
    103 typedef PACKED struct {
    104   ACPI_LARGE_RESOURCE_HEADER    Header;
    105   UINT8                         RevisionId;
    106   UINT8                         ResourceSourceIndex;
    107   UINT8                         SerialBusType;
    108   UINT8                         GeneralFlags;
    109   UINT16                        TypeSpecificFlags;
    110   UINT8                         TypeSpecificRevisionId;
    111   UINT16                        TypeDataLength;
    112   UINT32                        ConnectionSpeed;
    113   UINT8                         DataBitLength;
    114   UINT8                         Phase;
    115   UINT8                         Polarity;
    116   UINT16                        DeviceSelection;
    117 } EFI_ACPI_SERIAL_BUS_RESOURCE_SPI_DESCRIPTOR;
    118 
    119 ///
    120 /// Serial Bus Resource Descriptor (UART)
    121 ///
    122 typedef PACKED struct {
    123   ACPI_LARGE_RESOURCE_HEADER    Header;
    124   UINT8                         RevisionId;
    125   UINT8                         ResourceSourceIndex;
    126   UINT8                         SerialBusType;
    127   UINT8                         GeneralFlags;
    128   UINT16                        TypeSpecificFlags;
    129   UINT8                         TypeSpecificRevisionId;
    130   UINT16                        TypeDataLength;
    131   UINT32                        DefaultBaudRate;
    132   UINT16                        RxFIFO;
    133   UINT16                        TxFIFO;
    134   UINT8                         Parity;
    135   UINT8                         SerialLinesEnabled;
    136 } EFI_ACPI_SERIAL_BUS_RESOURCE_UART_DESCRIPTOR;
    137 
    138 #pragma pack()
    139 
    140 //
    141 // Ensure proper structure formats
    142 //
    143 #pragma pack(1)
    144 
    145 ///
    146 /// ACPI 5.0 Generic Address Space definition
    147 ///
    148 typedef struct {
    149   UINT8   AddressSpaceId;
    150   UINT8   RegisterBitWidth;
    151   UINT8   RegisterBitOffset;
    152   UINT8   AccessSize;
    153   UINT64  Address;
    154 } EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE;
    155 
    156 //
    157 // Generic Address Space Address IDs
    158 //
    159 #define EFI_ACPI_5_0_SYSTEM_MEMORY              0
    160 #define EFI_ACPI_5_0_SYSTEM_IO                  1
    161 #define EFI_ACPI_5_0_PCI_CONFIGURATION_SPACE    2
    162 #define EFI_ACPI_5_0_EMBEDDED_CONTROLLER        3
    163 #define EFI_ACPI_5_0_SMBUS                      4
    164 #define EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL  0x0A
    165 #define EFI_ACPI_5_0_FUNCTIONAL_FIXED_HARDWARE       0x7F
    166 
    167 //
    168 // Generic Address Space Access Sizes
    169 //
    170 #define EFI_ACPI_5_0_UNDEFINED  0
    171 #define EFI_ACPI_5_0_BYTE       1
    172 #define EFI_ACPI_5_0_WORD       2
    173 #define EFI_ACPI_5_0_DWORD      3
    174 #define EFI_ACPI_5_0_QWORD      4
    175 
    176 //
    177 // ACPI 5.0 table structures
    178 //
    179 
    180 ///
    181 /// Root System Description Pointer Structure
    182 ///
    183 typedef struct {
    184   UINT64  Signature;
    185   UINT8   Checksum;
    186   UINT8   OemId[6];
    187   UINT8   Revision;
    188   UINT32  RsdtAddress;
    189   UINT32  Length;
    190   UINT64  XsdtAddress;
    191   UINT8   ExtendedChecksum;
    192   UINT8   Reserved[3];
    193 } EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
    194 
    195 ///
    196 /// RSD_PTR Revision (as defined in ACPI 5.0 spec.)
    197 ///
    198 #define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02  ///< ACPISpec (Revision 5.0) says current value is 2
    199 
    200 ///
    201 /// Common table header, this prefaces all ACPI tables, including FACS, but
    202 /// excluding the RSD PTR structure
    203 ///
    204 typedef struct {
    205   UINT32  Signature;
    206   UINT32  Length;
    207 } EFI_ACPI_5_0_COMMON_HEADER;
    208 
    209 //
    210 // Root System Description Table
    211 // No definition needed as it is a common description table header, the same with
    212 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
    213 //
    214 
    215 ///
    216 /// RSDT Revision (as defined in ACPI 5.0 spec.)
    217 ///
    218 #define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
    219 
    220 //
    221 // Extended System Description Table
    222 // No definition needed as it is a common description table header, the same with
    223 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
    224 //
    225 
    226 ///
    227 /// XSDT Revision (as defined in ACPI 5.0 spec.)
    228 ///
    229 #define EFI_ACPI_5_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
    230 
    231 ///
    232 /// Fixed ACPI Description Table Structure (FADT)
    233 ///
    234 typedef struct {
    235   EFI_ACPI_DESCRIPTION_HEADER             Header;
    236   UINT32                                  FirmwareCtrl;
    237   UINT32                                  Dsdt;
    238   UINT8                                   Reserved0;
    239   UINT8                                   PreferredPmProfile;
    240   UINT16                                  SciInt;
    241   UINT32                                  SmiCmd;
    242   UINT8                                   AcpiEnable;
    243   UINT8                                   AcpiDisable;
    244   UINT8                                   S4BiosReq;
    245   UINT8                                   PstateCnt;
    246   UINT32                                  Pm1aEvtBlk;
    247   UINT32                                  Pm1bEvtBlk;
    248   UINT32                                  Pm1aCntBlk;
    249   UINT32                                  Pm1bCntBlk;
    250   UINT32                                  Pm2CntBlk;
    251   UINT32                                  PmTmrBlk;
    252   UINT32                                  Gpe0Blk;
    253   UINT32                                  Gpe1Blk;
    254   UINT8                                   Pm1EvtLen;
    255   UINT8                                   Pm1CntLen;
    256   UINT8                                   Pm2CntLen;
    257   UINT8                                   PmTmrLen;
    258   UINT8                                   Gpe0BlkLen;
    259   UINT8                                   Gpe1BlkLen;
    260   UINT8                                   Gpe1Base;
    261   UINT8                                   CstCnt;
    262   UINT16                                  PLvl2Lat;
    263   UINT16                                  PLvl3Lat;
    264   UINT16                                  FlushSize;
    265   UINT16                                  FlushStride;
    266   UINT8                                   DutyOffset;
    267   UINT8                                   DutyWidth;
    268   UINT8                                   DayAlrm;
    269   UINT8                                   MonAlrm;
    270   UINT8                                   Century;
    271   UINT16                                  IaPcBootArch;
    272   UINT8                                   Reserved1;
    273   UINT32                                  Flags;
    274   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  ResetReg;
    275   UINT8                                   ResetValue;
    276   UINT8                                   Reserved2[3];
    277   UINT64                                  XFirmwareCtrl;
    278   UINT64                                  XDsdt;
    279   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk;
    280   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk;
    281   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk;
    282   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk;
    283   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk;
    284   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk;
    285   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk;
    286   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk;
    287   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  SleepControlReg;
    288   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  SleepStatusReg;
    289 } EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE;
    290 
    291 ///
    292 /// FADT Version (as defined in ACPI 5.0 spec.)
    293 ///
    294 #define EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x05
    295 
    296 //
    297 // Fixed ACPI Description Table Preferred Power Management Profile
    298 //
    299 #define EFI_ACPI_5_0_PM_PROFILE_UNSPECIFIED         0
    300 #define EFI_ACPI_5_0_PM_PROFILE_DESKTOP             1
    301 #define EFI_ACPI_5_0_PM_PROFILE_MOBILE              2
    302 #define EFI_ACPI_5_0_PM_PROFILE_WORKSTATION         3
    303 #define EFI_ACPI_5_0_PM_PROFILE_ENTERPRISE_SERVER   4
    304 #define EFI_ACPI_5_0_PM_PROFILE_SOHO_SERVER         5
    305 #define EFI_ACPI_5_0_PM_PROFILE_APPLIANCE_PC        6
    306 #define EFI_ACPI_5_0_PM_PROFILE_PERFORMANCE_SERVER  7
    307 #define EFI_ACPI_5_0_PM_PROFILE_TABLET              8
    308 
    309 //
    310 // Fixed ACPI Description Table Boot Architecture Flags
    311 // All other bits are reserved and must be set to 0.
    312 //
    313 #define EFI_ACPI_5_0_LEGACY_DEVICES              BIT0
    314 #define EFI_ACPI_5_0_8042                        BIT1
    315 #define EFI_ACPI_5_0_VGA_NOT_PRESENT             BIT2
    316 #define EFI_ACPI_5_0_MSI_NOT_SUPPORTED           BIT3
    317 #define EFI_ACPI_5_0_PCIE_ASPM_CONTROLS          BIT4
    318 #define EFI_ACPI_5_0_CMOS_RTC_NOT_PRESENT        BIT5
    319 
    320 //
    321 // Fixed ACPI Description Table Fixed Feature Flags
    322 // All other bits are reserved and must be set to 0.
    323 //
    324 #define EFI_ACPI_5_0_WBINVD                                 BIT0
    325 #define EFI_ACPI_5_0_WBINVD_FLUSH                           BIT1
    326 #define EFI_ACPI_5_0_PROC_C1                                BIT2
    327 #define EFI_ACPI_5_0_P_LVL2_UP                              BIT3
    328 #define EFI_ACPI_5_0_PWR_BUTTON                             BIT4
    329 #define EFI_ACPI_5_0_SLP_BUTTON                             BIT5
    330 #define EFI_ACPI_5_0_FIX_RTC                                BIT6
    331 #define EFI_ACPI_5_0_RTC_S4                                 BIT7
    332 #define EFI_ACPI_5_0_TMR_VAL_EXT                            BIT8
    333 #define EFI_ACPI_5_0_DCK_CAP                                BIT9
    334 #define EFI_ACPI_5_0_RESET_REG_SUP                          BIT10
    335 #define EFI_ACPI_5_0_SEALED_CASE                            BIT11
    336 #define EFI_ACPI_5_0_HEADLESS                               BIT12
    337 #define EFI_ACPI_5_0_CPU_SW_SLP                             BIT13
    338 #define EFI_ACPI_5_0_PCI_EXP_WAK                            BIT14
    339 #define EFI_ACPI_5_0_USE_PLATFORM_CLOCK                     BIT15
    340 #define EFI_ACPI_5_0_S4_RTC_STS_VALID                       BIT16
    341 #define EFI_ACPI_5_0_REMOTE_POWER_ON_CAPABLE                BIT17
    342 #define EFI_ACPI_5_0_FORCE_APIC_CLUSTER_MODEL               BIT18
    343 #define EFI_ACPI_5_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE   BIT19
    344 #define EFI_ACPI_5_0_HW_REDUCED_ACPI                        BIT20
    345 #define EFI_ACPI_5_0_LOW_POWER_S0_IDLE_CAPABLE              BIT21
    346 
    347 ///
    348 /// Firmware ACPI Control Structure
    349 ///
    350 typedef struct {
    351   UINT32  Signature;
    352   UINT32  Length;
    353   UINT32  HardwareSignature;
    354   UINT32  FirmwareWakingVector;
    355   UINT32  GlobalLock;
    356   UINT32  Flags;
    357   UINT64  XFirmwareWakingVector;
    358   UINT8   Version;
    359   UINT8   Reserved0[3];
    360   UINT32  OspmFlags;
    361   UINT8   Reserved1[24];
    362 } EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
    363 
    364 ///
    365 /// FACS Version (as defined in ACPI 5.0 spec.)
    366 ///
    367 #define EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
    368 
    369 ///
    370 /// Firmware Control Structure Feature Flags
    371 /// All other bits are reserved and must be set to 0.
    372 ///
    373 #define EFI_ACPI_5_0_S4BIOS_F                     BIT0
    374 #define EFI_ACPI_5_0_64BIT_WAKE_SUPPORTED_F       BIT1
    375 
    376 ///
    377 /// OSPM Enabled Firmware Control Structure Flags
    378 /// All other bits are reserved and must be set to 0.
    379 ///
    380 #define EFI_ACPI_5_0_OSPM_64BIT_WAKE_F            BIT0
    381 
    382 //
    383 // Differentiated System Description Table,
    384 // Secondary System Description Table
    385 // and Persistent System Description Table,
    386 // no definition needed as they are common description table header, the same with
    387 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
    388 //
    389 #define EFI_ACPI_5_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION   0x02
    390 #define EFI_ACPI_5_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION        0x02
    391 
    392 ///
    393 /// Multiple APIC Description Table header definition.  The rest of the table
    394 /// must be defined in a platform specific manner.
    395 ///
    396 typedef struct {
    397   EFI_ACPI_DESCRIPTION_HEADER Header;
    398   UINT32                      LocalApicAddress;
    399   UINT32                      Flags;
    400 } EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
    401 
    402 ///
    403 /// MADT Revision (as defined in ACPI 5.0 spec.)
    404 ///
    405 #define EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x03
    406 
    407 ///
    408 /// Multiple APIC Flags
    409 /// All other bits are reserved and must be set to 0.
    410 ///
    411 #define EFI_ACPI_5_0_PCAT_COMPAT         BIT0
    412 
    413 //
    414 // Multiple APIC Description Table APIC structure types
    415 // All other values between 0x0D and 0x7F are reserved and
    416 // will be ignored by OSPM. 0x80 ~ 0xFF are reserved for OEM.
    417 //
    418 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC           0x00
    419 #define EFI_ACPI_5_0_IO_APIC                        0x01
    420 #define EFI_ACPI_5_0_INTERRUPT_SOURCE_OVERRIDE      0x02
    421 #define EFI_ACPI_5_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
    422 #define EFI_ACPI_5_0_LOCAL_APIC_NMI                 0x04
    423 #define EFI_ACPI_5_0_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
    424 #define EFI_ACPI_5_0_IO_SAPIC                       0x06
    425 #define EFI_ACPI_5_0_LOCAL_SAPIC                    0x07
    426 #define EFI_ACPI_5_0_PLATFORM_INTERRUPT_SOURCES     0x08
    427 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC         0x09
    428 #define EFI_ACPI_5_0_LOCAL_X2APIC_NMI               0x0A
    429 #define EFI_ACPI_5_0_GIC                            0x0B
    430 #define EFI_ACPI_5_0_GICD                           0x0C
    431 
    432 //
    433 // APIC Structure Definitions
    434 //
    435 
    436 ///
    437 /// Processor Local APIC Structure Definition
    438 ///
    439 typedef struct {
    440   UINT8   Type;
    441   UINT8   Length;
    442   UINT8   AcpiProcessorId;
    443   UINT8   ApicId;
    444   UINT32  Flags;
    445 } EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
    446 
    447 ///
    448 /// Local APIC Flags.  All other bits are reserved and must be 0.
    449 ///
    450 #define EFI_ACPI_5_0_LOCAL_APIC_ENABLED        BIT0
    451 
    452 ///
    453 /// IO APIC Structure
    454 ///
    455 typedef struct {
    456   UINT8   Type;
    457   UINT8   Length;
    458   UINT8   IoApicId;
    459   UINT8   Reserved;
    460   UINT32  IoApicAddress;
    461   UINT32  GlobalSystemInterruptBase;
    462 } EFI_ACPI_5_0_IO_APIC_STRUCTURE;
    463 
    464 ///
    465 /// Interrupt Source Override Structure
    466 ///
    467 typedef struct {
    468   UINT8   Type;
    469   UINT8   Length;
    470   UINT8   Bus;
    471   UINT8   Source;
    472   UINT32  GlobalSystemInterrupt;
    473   UINT16  Flags;
    474 } EFI_ACPI_5_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
    475 
    476 ///
    477 /// Platform Interrupt Sources Structure Definition
    478 ///
    479 typedef struct {
    480   UINT8   Type;
    481   UINT8   Length;
    482   UINT16  Flags;
    483   UINT8   InterruptType;
    484   UINT8   ProcessorId;
    485   UINT8   ProcessorEid;
    486   UINT8   IoSapicVector;
    487   UINT32  GlobalSystemInterrupt;
    488   UINT32  PlatformInterruptSourceFlags;
    489   UINT8   CpeiProcessorOverride;
    490   UINT8   Reserved[31];
    491 } EFI_ACPI_5_0_PLATFORM_INTERRUPT_APIC_STRUCTURE;
    492 
    493 //
    494 // MPS INTI flags.
    495 // All other bits are reserved and must be set to 0.
    496 //
    497 #define EFI_ACPI_5_0_POLARITY      (3 << 0)
    498 #define EFI_ACPI_5_0_TRIGGER_MODE  (3 << 2)
    499 
    500 ///
    501 /// Non-Maskable Interrupt Source Structure
    502 ///
    503 typedef struct {
    504   UINT8   Type;
    505   UINT8   Length;
    506   UINT16  Flags;
    507   UINT32  GlobalSystemInterrupt;
    508 } EFI_ACPI_5_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
    509 
    510 ///
    511 /// Local APIC NMI Structure
    512 ///
    513 typedef struct {
    514   UINT8   Type;
    515   UINT8   Length;
    516   UINT8   AcpiProcessorId;
    517   UINT16  Flags;
    518   UINT8   LocalApicLint;
    519 } EFI_ACPI_5_0_LOCAL_APIC_NMI_STRUCTURE;
    520 
    521 ///
    522 /// Local APIC Address Override Structure
    523 ///
    524 typedef struct {
    525   UINT8   Type;
    526   UINT8   Length;
    527   UINT16  Reserved;
    528   UINT64  LocalApicAddress;
    529 } EFI_ACPI_5_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
    530 
    531 ///
    532 /// IO SAPIC Structure
    533 ///
    534 typedef struct {
    535   UINT8   Type;
    536   UINT8   Length;
    537   UINT8   IoApicId;
    538   UINT8   Reserved;
    539   UINT32  GlobalSystemInterruptBase;
    540   UINT64  IoSapicAddress;
    541 } EFI_ACPI_5_0_IO_SAPIC_STRUCTURE;
    542 
    543 ///
    544 /// Local SAPIC Structure
    545 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
    546 ///
    547 typedef struct {
    548   UINT8   Type;
    549   UINT8   Length;
    550   UINT8   AcpiProcessorId;
    551   UINT8   LocalSapicId;
    552   UINT8   LocalSapicEid;
    553   UINT8   Reserved[3];
    554   UINT32  Flags;
    555   UINT32  ACPIProcessorUIDValue;
    556 } EFI_ACPI_5_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
    557 
    558 ///
    559 /// Platform Interrupt Sources Structure
    560 ///
    561 typedef struct {
    562   UINT8   Type;
    563   UINT8   Length;
    564   UINT16  Flags;
    565   UINT8   InterruptType;
    566   UINT8   ProcessorId;
    567   UINT8   ProcessorEid;
    568   UINT8   IoSapicVector;
    569   UINT32  GlobalSystemInterrupt;
    570   UINT32  PlatformInterruptSourceFlags;
    571 } EFI_ACPI_5_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
    572 
    573 ///
    574 /// Platform Interrupt Source Flags.
    575 /// All other bits are reserved and must be set to 0.
    576 ///
    577 #define EFI_ACPI_5_0_CPEI_PROCESSOR_OVERRIDE          BIT0
    578 
    579 ///
    580 /// Processor Local x2APIC Structure Definition
    581 ///
    582 typedef struct {
    583   UINT8   Type;
    584   UINT8   Length;
    585   UINT8   Reserved[2];
    586   UINT32  X2ApicId;
    587   UINT32  Flags;
    588   UINT32  AcpiProcessorUid;
    589 } EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
    590 
    591 ///
    592 /// Local x2APIC NMI Structure
    593 ///
    594 typedef struct {
    595   UINT8   Type;
    596   UINT8   Length;
    597   UINT16  Flags;
    598   UINT32  AcpiProcessorUid;
    599   UINT8   LocalX2ApicLint;
    600   UINT8   Reserved[3];
    601 } EFI_ACPI_5_0_LOCAL_X2APIC_NMI_STRUCTURE;
    602 
    603 ///
    604 /// GIC Structure
    605 ///
    606 typedef struct {
    607   UINT8   Type;
    608   UINT8   Length;
    609   UINT16  Reserved;
    610   UINT32  GicId;
    611   UINT32  AcpiProcessorUid;
    612   UINT32  Flags;
    613   UINT32  ParkingProtocolVersion;
    614   UINT32  PerformanceInterruptGsiv;
    615   UINT64  ParkedAddress;
    616   UINT64  PhysicalBaseAddress;
    617 } EFI_ACPI_5_0_GIC_STRUCTURE;
    618 
    619 ///
    620 /// GIC Flags.  All other bits are reserved and must be 0.
    621 ///
    622 #define EFI_ACPI_5_0_GIC_ENABLED                     BIT0
    623 #define EFI_ACPI_5_0_PERFORMANCE_INTERRUPT_MODEL     BIT1
    624 
    625 ///
    626 /// GIC Distributor Structure
    627 ///
    628 typedef struct {
    629   UINT8   Type;
    630   UINT8   Length;
    631   UINT16  Reserved1;
    632   UINT32  GicId;
    633   UINT64  PhysicalBaseAddress;
    634   UINT32  SystemVectorBase;
    635   UINT32  Reserved2;
    636 } EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE;
    637 
    638 ///
    639 /// Smart Battery Description Table (SBST)
    640 ///
    641 typedef struct {
    642   EFI_ACPI_DESCRIPTION_HEADER Header;
    643   UINT32                      WarningEnergyLevel;
    644   UINT32                      LowEnergyLevel;
    645   UINT32                      CriticalEnergyLevel;
    646 } EFI_ACPI_5_0_SMART_BATTERY_DESCRIPTION_TABLE;
    647 
    648 ///
    649 /// SBST Version (as defined in ACPI 5.0 spec.)
    650 ///
    651 #define EFI_ACPI_5_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
    652 
    653 ///
    654 /// Embedded Controller Boot Resources Table (ECDT)
    655 /// The table is followed by a null terminated ASCII string that contains
    656 /// a fully qualified reference to the name space object.
    657 ///
    658 typedef struct {
    659   EFI_ACPI_DESCRIPTION_HEADER             Header;
    660   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  EcControl;
    661   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  EcData;
    662   UINT32                                  Uid;
    663   UINT8                                   GpeBit;
    664 } EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
    665 
    666 ///
    667 /// ECDT Version (as defined in ACPI 5.0 spec.)
    668 ///
    669 #define EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
    670 
    671 ///
    672 /// System Resource Affinity Table (SRAT).  The rest of the table
    673 /// must be defined in a platform specific manner.
    674 ///
    675 typedef struct {
    676   EFI_ACPI_DESCRIPTION_HEADER Header;
    677   UINT32                      Reserved1;  ///< Must be set to 1
    678   UINT64                      Reserved2;
    679 } EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
    680 
    681 ///
    682 /// SRAT Version (as defined in ACPI 5.0 spec.)
    683 ///
    684 #define EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
    685 
    686 //
    687 // SRAT structure types.
    688 // All other values between 0x03 an 0xFF are reserved and
    689 // will be ignored by OSPM.
    690 //
    691 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
    692 #define EFI_ACPI_5_0_MEMORY_AFFINITY                      0x01
    693 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
    694 
    695 ///
    696 /// Processor Local APIC/SAPIC Affinity Structure Definition
    697 ///
    698 typedef struct {
    699   UINT8   Type;
    700   UINT8   Length;
    701   UINT8   ProximityDomain7To0;
    702   UINT8   ApicId;
    703   UINT32  Flags;
    704   UINT8   LocalSapicEid;
    705   UINT8   ProximityDomain31To8[3];
    706   UINT32  ClockDomain;
    707 } EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
    708 
    709 ///
    710 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
    711 ///
    712 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0)
    713 
    714 ///
    715 /// Memory Affinity Structure Definition
    716 ///
    717 typedef struct {
    718   UINT8   Type;
    719   UINT8   Length;
    720   UINT32  ProximityDomain;
    721   UINT16  Reserved1;
    722   UINT32  AddressBaseLow;
    723   UINT32  AddressBaseHigh;
    724   UINT32  LengthLow;
    725   UINT32  LengthHigh;
    726   UINT32  Reserved2;
    727   UINT32  Flags;
    728   UINT64  Reserved3;
    729 } EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE;
    730 
    731 //
    732 // Memory Flags.  All other bits are reserved and must be 0.
    733 //
    734 #define EFI_ACPI_5_0_MEMORY_ENABLED       (1 << 0)
    735 #define EFI_ACPI_5_0_MEMORY_HOT_PLUGGABLE (1 << 1)
    736 #define EFI_ACPI_5_0_MEMORY_NONVOLATILE   (1 << 2)
    737 
    738 ///
    739 /// Processor Local x2APIC Affinity Structure Definition
    740 ///
    741 typedef struct {
    742   UINT8   Type;
    743   UINT8   Length;
    744   UINT8   Reserved1[2];
    745   UINT32  ProximityDomain;
    746   UINT32  X2ApicId;
    747   UINT32  Flags;
    748   UINT32  ClockDomain;
    749   UINT8   Reserved2[4];
    750 } EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
    751 
    752 ///
    753 /// System Locality Distance Information Table (SLIT).
    754 /// The rest of the table is a matrix.
    755 ///
    756 typedef struct {
    757   EFI_ACPI_DESCRIPTION_HEADER Header;
    758   UINT64                      NumberOfSystemLocalities;
    759 } EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
    760 
    761 ///
    762 /// SLIT Version (as defined in ACPI 5.0 spec.)
    763 ///
    764 #define EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
    765 
    766 ///
    767 /// Corrected Platform Error Polling Table (CPEP)
    768 ///
    769 typedef struct {
    770   EFI_ACPI_DESCRIPTION_HEADER Header;
    771   UINT8                       Reserved[8];
    772 } EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
    773 
    774 ///
    775 /// CPEP Version (as defined in ACPI 5.0 spec.)
    776 ///
    777 #define EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION 0x01
    778 
    779 //
    780 // CPEP processor structure types.
    781 //
    782 #define EFI_ACPI_5_0_CPEP_PROCESSOR_APIC_SAPIC  0x00
    783 
    784 ///
    785 /// Corrected Platform Error Polling Processor Structure Definition
    786 ///
    787 typedef struct {
    788   UINT8   Type;
    789   UINT8   Length;
    790   UINT8   ProcessorId;
    791   UINT8   ProcessorEid;
    792   UINT32  PollingInterval;
    793 } EFI_ACPI_5_0_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
    794 
    795 ///
    796 /// Maximum System Characteristics Table (MSCT)
    797 ///
    798 typedef struct {
    799   EFI_ACPI_DESCRIPTION_HEADER Header;
    800   UINT32                      OffsetProxDomInfo;
    801   UINT32                      MaximumNumberOfProximityDomains;
    802   UINT32                      MaximumNumberOfClockDomains;
    803   UINT64                      MaximumPhysicalAddress;
    804 } EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
    805 
    806 ///
    807 /// MSCT Version (as defined in ACPI 5.0 spec.)
    808 ///
    809 #define EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION 0x01
    810 
    811 ///
    812 /// Maximum Proximity Domain Information Structure Definition
    813 ///
    814 typedef struct {
    815   UINT8   Revision;
    816   UINT8   Length;
    817   UINT32  ProximityDomainRangeLow;
    818   UINT32  ProximityDomainRangeHigh;
    819   UINT32  MaximumProcessorCapacity;
    820   UINT64  MaximumMemoryCapacity;
    821 } EFI_ACPI_5_0_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
    822 
    823 ///
    824 /// ACPI RAS Feature Table definition.
    825 ///
    826 typedef struct {
    827   EFI_ACPI_DESCRIPTION_HEADER Header;
    828   UINT8                       PlatformCommunicationChannelIdentifier[12];
    829 } EFI_ACPI_5_0_RAS_FEATURE_TABLE;
    830 
    831 ///
    832 /// RASF Version (as defined in ACPI 5.0 spec.)
    833 ///
    834 #define EFI_ACPI_5_0_RAS_FEATURE_TABLE_REVISION 0x01
    835 
    836 ///
    837 /// ACPI RASF Platform Communication Channel Shared Memory Region definition.
    838 ///
    839 typedef struct {
    840   UINT32                      Signature;
    841   UINT16                      Command;
    842   UINT16                      Status;
    843   UINT16                      Version;
    844   UINT8                       RASCapabilities[16];
    845   UINT8                       SetRASCapabilities[16];
    846   UINT16                      NumberOfRASFParameterBlocks;
    847   UINT32                      SetRASCapabilitiesStatus;
    848 } EFI_ACPI_5_0_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
    849 
    850 ///
    851 /// ACPI RASF PCC command code
    852 ///
    853 #define EFI_ACPI_5_0_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND  0x01
    854 
    855 ///
    856 /// ACPI RASF Platform RAS Capabilities
    857 ///
    858 #define EFI_ACPI_5_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED                          0x01
    859 #define EFI_ACPI_5_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED_AND_EXPOSED_TO_SOFTWARE  0x02
    860 
    861 ///
    862 /// ACPI RASF Parameter Block structure for PATROL_SCRUB
    863 ///
    864 typedef struct {
    865   UINT16                      Type;
    866   UINT16                      Version;
    867   UINT16                      Length;
    868   UINT16                      PatrolScrubCommand;
    869   UINT64                      RequestedAddressRange[2];
    870   UINT64                      ActualAddressRange[2];
    871   UINT16                      Flags;
    872   UINT8                       RequestedSpeed;
    873 } EFI_ACPI_5_0_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE;
    874 
    875 ///
    876 /// ACPI RASF Patrol Scrub command
    877 ///
    878 #define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS   0x01
    879 #define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER   0x02
    880 #define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER    0x03
    881 
    882 ///
    883 /// Memory Power State Table definition.
    884 ///
    885 typedef struct {
    886   EFI_ACPI_DESCRIPTION_HEADER Header;
    887   UINT8                       PlatformCommunicationChannelIdentifier;
    888   UINT8                       Reserved[3];
    889 // Memory Power Node Structure
    890 // Memory Power State Characteristics
    891 } EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE;
    892 
    893 ///
    894 /// MPST Version (as defined in ACPI 5.0 spec.)
    895 ///
    896 #define EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_REVISION 0x01
    897 
    898 ///
    899 /// MPST Platform Communication Channel Shared Memory Region definition.
    900 ///
    901 typedef struct {
    902   UINT32                      Signature;
    903   UINT16                      Command;
    904   UINT16                      Status;
    905   UINT32                      MemoryPowerCommandRegister;
    906   UINT32                      MemoryPowerStatusRegister;
    907   UINT32                      PowerStateId;
    908   UINT32                      MemoryPowerNodeId;
    909   UINT64                      MemoryEnergyConsumed;
    910   UINT64                      ExpectedAveragePowerComsuned;
    911 } EFI_ACPI_5_0_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
    912 
    913 ///
    914 /// ACPI MPST PCC command code
    915 ///
    916 #define EFI_ACPI_5_0_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND  0x03
    917 
    918 ///
    919 /// ACPI MPST Memory Power command
    920 ///
    921 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE       0x01
    922 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE       0x02
    923 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED   0x03
    924 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED   0x04
    925 
    926 ///
    927 /// MPST Memory Power Node Table
    928 ///
    929 typedef struct {
    930   UINT8                                             PowerStateValue;
    931   UINT8                                             PowerStateInformationIndex;
    932 } EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE;
    933 
    934 typedef struct {
    935   UINT8                                             Flag;
    936   UINT8                                             Reserved;
    937   UINT16                                            MemoryPowerNodeId;
    938   UINT32                                            Length;
    939   UINT64                                            AddressBase;
    940   UINT64                                            AddressLength;
    941   UINT32                                            NumberOfPowerStates;
    942   UINT32                                            NumberOfPhysicalComponents;
    943 //EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE              MemoryPowerState[NumberOfPowerStates];
    944 //UINT16                                            PhysicalComponentIdentifier[NumberOfPhysicalComponents];
    945 } EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE;
    946 
    947 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE          0x01
    948 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED   0x02
    949 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE   0x04
    950 
    951 typedef struct {
    952   UINT16                      MemoryPowerNodeCount;
    953   UINT8                       Reserved[2];
    954 } EFI_ACPI_5_0_MPST_MEMORY_POWER_NODE_TABLE;
    955 
    956 ///
    957 /// MPST Memory Power State Characteristics Table
    958 ///
    959 typedef struct {
    960   UINT8                                             PowerStateStructureID;
    961   UINT8                                             Flag;
    962   UINT16                                            Reserved;
    963   UINT32                                            AveragePowerConsumedInMPS0;
    964   UINT32                                            RelativePowerSavingToMPS0;
    965   UINT64                                            ExitLatencyToMPS0;
    966 } EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE;
    967 
    968 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED              0x01
    969 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY   0x02
    970 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT    0x04
    971 
    972 typedef struct {
    973   UINT16                      MemoryPowerStateCharacteristicsCount;
    974   UINT8                       Reserved[2];
    975 } EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE;
    976 
    977 ///
    978 /// Memory Topology Table definition.
    979 ///
    980 typedef struct {
    981   EFI_ACPI_DESCRIPTION_HEADER Header;
    982   UINT32                      Reserved;
    983 } EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE;
    984 
    985 ///
    986 /// PMTT Version (as defined in ACPI 5.0 spec.)
    987 ///
    988 #define EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE_REVISION 0x01
    989 
    990 ///
    991 /// Common Memory Aggregator Device Structure.
    992 ///
    993 typedef struct {
    994   UINT8                       Type;
    995   UINT8                       Reserved;
    996   UINT16                      Length;
    997   UINT16                      Flags;
    998   UINT16                      Reserved1;
    999 } EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
   1000 
   1001 ///
   1002 /// Memory Aggregator Device Type
   1003 ///
   1004 #define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_SOCKET            0x1
   1005 #define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_MEMORY_CONTROLLER 0x2
   1006 #define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_DIMM              0x3
   1007 
   1008 ///
   1009 /// Socket Memory Aggregator Device Structure.
   1010 ///
   1011 typedef struct {
   1012   EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
   1013   UINT16                                                       SocketIdentifier;
   1014   UINT16                                                       Reserved;
   1015 //EFI_ACPI_5_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  MemoryController[];
   1016 } EFI_ACPI_5_0_PMMT_SOCKET_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
   1017 
   1018 ///
   1019 /// MemoryController Memory Aggregator Device Structure.
   1020 ///
   1021 typedef struct {
   1022   EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
   1023   UINT32                                                       ReadLatency;
   1024   UINT32                                                       WriteLatency;
   1025   UINT32                                                       ReadBandwidth;
   1026   UINT32                                                       WriteBandwidth;
   1027   UINT16                                                       OptimalAccessUnit;
   1028   UINT16                                                       OptimalAccessAlignment;
   1029   UINT16                                                       Reserved;
   1030   UINT16                                                       NumberOfProximityDomains;
   1031 //UINT32                                                       ProximityDomain[NumberOfProximityDomains];
   1032 //EFI_ACPI_5_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    PhysicalComponent[];
   1033 } EFI_ACPI_5_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
   1034 
   1035 ///
   1036 /// DIMM Memory Aggregator Device Structure.
   1037 ///
   1038 typedef struct {
   1039   EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
   1040   UINT16                                                       PhysicalComponentIdentifier;
   1041   UINT16                                                       Reserved;
   1042   UINT32                                                       SizeOfDimm;
   1043   UINT32                                                       SmbiosHandle;
   1044 } EFI_ACPI_5_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
   1045 
   1046 ///
   1047 /// Boot Graphics Resource Table definition.
   1048 ///
   1049 typedef struct {
   1050   EFI_ACPI_DESCRIPTION_HEADER Header;
   1051   ///
   1052   /// 2-bytes (16 bit) version ID. This value must be 1.
   1053   ///
   1054   UINT16                      Version;
   1055   ///
   1056   /// 1-byte status field indicating current status about the table.
   1057   ///     Bits[7:1] = Reserved (must be zero)
   1058   ///     Bit [0] = Valid. A one indicates the boot image graphic is valid.
   1059   ///
   1060   UINT8                       Status;
   1061   ///
   1062   /// 1-byte enumerated type field indicating format of the image.
   1063   ///     0 = Bitmap
   1064   ///     1 - 255  Reserved (for future use)
   1065   ///
   1066   UINT8                       ImageType;
   1067   ///
   1068   /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy
   1069   /// of the image bitmap.
   1070   ///
   1071   UINT64                      ImageAddress;
   1072   ///
   1073   /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image.
   1074   /// (X, Y) display offset of the top left corner of the boot image.
   1075   /// The top left corner of the display is at offset (0, 0).
   1076   ///
   1077   UINT32                      ImageOffsetX;
   1078   ///
   1079   /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image.
   1080   /// (X, Y) display offset of the top left corner of the boot image.
   1081   /// The top left corner of the display is at offset (0, 0).
   1082   ///
   1083   UINT32                      ImageOffsetY;
   1084 } EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE;
   1085 
   1086 ///
   1087 /// BGRT Revision
   1088 ///
   1089 #define EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION 1
   1090 
   1091 ///
   1092 /// BGRT Version
   1093 ///
   1094 #define EFI_ACPI_5_0_BGRT_VERSION         0x01
   1095 
   1096 ///
   1097 /// BGRT Status
   1098 ///
   1099 #define EFI_ACPI_5_0_BGRT_STATUS_NOT_DISPLAYED 0x00
   1100 #define EFI_ACPI_5_0_BGRT_STATUS_DISPLAYED     0x01
   1101 #define EFI_ACPI_5_0_BGRT_STATUS_INVALID       EFI_ACPI_5_0_BGRT_STATUS_NOT_DISPLAYED
   1102 #define EFI_ACPI_5_0_BGRT_STATUS_VALID         EFI_ACPI_5_0_BGRT_STATUS_DISPLAYED
   1103 
   1104 ///
   1105 /// BGRT Image Type
   1106 ///
   1107 #define EFI_ACPI_5_0_BGRT_IMAGE_TYPE_BMP  0x00
   1108 
   1109 ///
   1110 /// FPDT Version (as defined in ACPI 5.0 spec.)
   1111 ///
   1112 #define EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION 0x01
   1113 
   1114 ///
   1115 /// FPDT Performance Record Types
   1116 ///
   1117 #define EFI_ACPI_5_0_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER      0x0000
   1118 #define EFI_ACPI_5_0_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER     0x0001
   1119 
   1120 ///
   1121 /// FPDT Performance Record Revision
   1122 ///
   1123 #define EFI_ACPI_5_0_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER  0x01
   1124 #define EFI_ACPI_5_0_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER 0x01
   1125 
   1126 ///
   1127 /// FPDT Runtime Performance Record Types
   1128 ///
   1129 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME                0x0000
   1130 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND               0x0001
   1131 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT      0x0002
   1132 
   1133 ///
   1134 /// FPDT Runtime Performance Record Revision
   1135 ///
   1136 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME            0x01
   1137 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND           0x01
   1138 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT  0x02
   1139 
   1140 ///
   1141 /// FPDT Performance Record header
   1142 ///
   1143 typedef struct {
   1144   UINT16           Type;
   1145   UINT8            Length;
   1146   UINT8            Revision;
   1147 } EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER;
   1148 
   1149 ///
   1150 /// FPDT Performance Table header
   1151 ///
   1152 typedef struct {
   1153   UINT32  Signature;
   1154   UINT32  Length;
   1155 } EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER;
   1156 
   1157 ///
   1158 /// FPDT Firmware Basic Boot Performance Pointer Record Structure
   1159 ///
   1160 typedef struct {
   1161   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
   1162   UINT32                                          Reserved;
   1163   ///
   1164   /// 64-bit processor-relative physical address of the Basic Boot Performance Table.
   1165   ///
   1166   UINT64                                          BootPerformanceTablePointer;
   1167 } EFI_ACPI_5_0_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD;
   1168 
   1169 ///
   1170 /// FPDT S3 Performance Table Pointer Record Structure
   1171 ///
   1172 typedef struct {
   1173   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
   1174   UINT32                                          Reserved;
   1175   ///
   1176   /// 64-bit processor-relative physical address of the S3 Performance Table.
   1177   ///
   1178   UINT64                                          S3PerformanceTablePointer;
   1179 } EFI_ACPI_5_0_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD;
   1180 
   1181 ///
   1182 /// FPDT Firmware Basic Boot Performance Record Structure
   1183 ///
   1184 typedef struct {
   1185   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
   1186   UINT32                                          Reserved;
   1187   ///
   1188   /// Timer value logged at the beginning of firmware image execution.
   1189   /// This may not always be zero or near zero.
   1190   ///
   1191   UINT64                                          ResetEnd;
   1192   ///
   1193   /// Timer value logged just prior to loading the OS boot loader into memory.
   1194   /// For non-UEFI compatible boots, this field must be zero.
   1195   ///
   1196   UINT64                                          OsLoaderLoadImageStart;
   1197   ///
   1198   /// Timer value logged just prior to launching the previously loaded OS boot loader image.
   1199   /// For non-UEFI compatible boots, the timer value logged will be just prior
   1200   /// to the INT 19h handler invocation.
   1201   ///
   1202   UINT64                                          OsLoaderStartImageStart;
   1203   ///
   1204   /// Timer value logged at the point when the OS loader calls the
   1205   /// ExitBootServices function for UEFI compatible firmware.
   1206   /// For non-UEFI compatible boots, this field must be zero.
   1207   ///
   1208   UINT64                                          ExitBootServicesEntry;
   1209   ///
   1210   /// Timer value logged at the point just prior towhen the OS loader gaining
   1211   /// control back from calls the ExitBootServices function for UEFI compatible firmware.
   1212   /// For non-UEFI compatible boots, this field must be zero.
   1213   ///
   1214   UINT64                                          ExitBootServicesExit;
   1215 } EFI_ACPI_5_0_FPDT_FIRMWARE_BASIC_BOOT_RECORD;
   1216 
   1217 ///
   1218 /// FPDT Firmware Basic Boot Performance Table signature
   1219 ///
   1220 #define EFI_ACPI_5_0_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('F', 'B', 'P', 'T')
   1221 
   1222 //
   1223 // FPDT Firmware Basic Boot Performance Table
   1224 //
   1225 typedef struct {
   1226   EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER      Header;
   1227   //
   1228   // one or more Performance Records.
   1229   //
   1230 } EFI_ACPI_5_0_FPDT_FIRMWARE_BASIC_BOOT_TABLE;
   1231 
   1232 ///
   1233 /// FPDT "S3PT" S3 Performance Table
   1234 ///
   1235 #define EFI_ACPI_5_0_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('S', '3', 'P', 'T')
   1236 
   1237 //
   1238 // FPDT Firmware S3 Boot Performance Table
   1239 //
   1240 typedef struct {
   1241   EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER      Header;
   1242   //
   1243   // one or more Performance Records.
   1244   //
   1245 } EFI_ACPI_5_0_FPDT_FIRMWARE_S3_BOOT_TABLE;
   1246 
   1247 ///
   1248 /// FPDT Basic S3 Resume Performance Record
   1249 ///
   1250 typedef struct {
   1251   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
   1252   ///
   1253   /// A count of the number of S3 resume cycles since the last full boot sequence.
   1254   ///
   1255   UINT32                                          ResumeCount;
   1256   ///
   1257   /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the
   1258   /// OS waking vector. Only the most recent resume cycle's time is retained.
   1259   ///
   1260   UINT64                                          FullResume;
   1261   ///
   1262   /// Average timer value of all resume cycles logged since the last full boot
   1263   /// sequence, including the most recent resume.  Note that the entire log of
   1264   /// timer values does not need to be retained in order to calculate this average.
   1265   ///
   1266   UINT64                                          AverageResume;
   1267 } EFI_ACPI_5_0_FPDT_S3_RESUME_RECORD;
   1268 
   1269 ///
   1270 /// FPDT Basic S3 Suspend Performance Record
   1271 ///
   1272 typedef struct {
   1273   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
   1274   ///
   1275   /// Timer value recorded at the OS write to SLP_TYP upon entry to S3.
   1276   /// Only the most recent suspend cycle's timer value is retained.
   1277   ///
   1278   UINT64                                          SuspendStart;
   1279   ///
   1280   /// Timer value recorded at the final firmware write to SLP_TYP (or other
   1281   /// mechanism) used to trigger hardware entry to S3.
   1282   /// Only the most recent suspend cycle's timer value is retained.
   1283   ///
   1284   UINT64                                          SuspendEnd;
   1285 } EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD;
   1286 
   1287 ///
   1288 /// Firmware Performance Record Table definition.
   1289 ///
   1290 typedef struct {
   1291   EFI_ACPI_DESCRIPTION_HEADER Header;
   1292 } EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_RECORD_TABLE;
   1293 
   1294 ///
   1295 /// Generic Timer Description Table definition.
   1296 ///
   1297 typedef struct {
   1298   EFI_ACPI_DESCRIPTION_HEADER Header;
   1299   UINT64                      PhysicalAddress;
   1300   UINT32                      GlobalFlags;
   1301   UINT32                      SecurePL1TimerGSIV;
   1302   UINT32                      SecurePL1TimerFlags;
   1303   UINT32                      NonSecurePL1TimerGSIV;
   1304   UINT32                      NonSecurePL1TimerFlags;
   1305   UINT32                      VirtualTimerGSIV;
   1306   UINT32                      VirtualTimerFlags;
   1307   UINT32                      NonSecurePL2TimerGSIV;
   1308   UINT32                      NonSecurePL2TimerFlags;
   1309 } EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE;
   1310 
   1311 ///
   1312 /// GTDT Version (as defined in ACPI 5.0 spec.)
   1313 ///
   1314 #define EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION 0x01
   1315 
   1316 ///
   1317 /// Global Flags.  All other bits are reserved and must be 0.
   1318 ///
   1319 #define EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_MEMORY_MAPPED_BLOCK_PRESENT   BIT0
   1320 #define EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_INTERRUPT_MODE                BIT1
   1321 
   1322 ///
   1323 /// Timer Flags.  All other bits are reserved and must be 0.
   1324 ///
   1325 #define EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE          BIT0
   1326 #define EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
   1327 
   1328 ///
   1329 /// Boot Error Record Table (BERT)
   1330 ///
   1331 typedef struct {
   1332   EFI_ACPI_DESCRIPTION_HEADER Header;
   1333   UINT32                      BootErrorRegionLength;
   1334   UINT64                      BootErrorRegion;
   1335 } EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_HEADER;
   1336 
   1337 ///
   1338 /// BERT Version (as defined in ACPI 5.0 spec.)
   1339 ///
   1340 #define EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_REVISION 0x01
   1341 
   1342 ///
   1343 /// Boot Error Region Block Status Definition
   1344 ///
   1345 typedef struct {
   1346   UINT32       UncorrectableErrorValid:1;
   1347   UINT32       CorrectableErrorValid:1;
   1348   UINT32       MultipleUncorrectableErrors:1;
   1349   UINT32       MultipleCorrectableErrors:1;
   1350   UINT32       ErrorDataEntryCount:10;
   1351   UINT32       Reserved:18;
   1352 } EFI_ACPI_5_0_ERROR_BLOCK_STATUS;
   1353 
   1354 ///
   1355 /// Boot Error Region Definition
   1356 ///
   1357 typedef struct {
   1358   EFI_ACPI_5_0_ERROR_BLOCK_STATUS              BlockStatus;
   1359   UINT32                                       RawDataOffset;
   1360   UINT32                                       RawDataLength;
   1361   UINT32                                       DataLength;
   1362   UINT32                                       ErrorSeverity;
   1363 } EFI_ACPI_5_0_BOOT_ERROR_REGION_STRUCTURE;
   1364 
   1365 //
   1366 // Boot Error Severity types
   1367 //
   1368 #define EFI_ACPI_5_0_ERROR_SEVERITY_CORRECTABLE  0x00
   1369 #define EFI_ACPI_5_0_ERROR_SEVERITY_FATAL        0x01
   1370 #define EFI_ACPI_5_0_ERROR_SEVERITY_CORRECTED    0x02
   1371 #define EFI_ACPI_5_0_ERROR_SEVERITY_NONE         0x03
   1372 
   1373 ///
   1374 /// Generic Error Data Entry Definition
   1375 ///
   1376 typedef struct {
   1377   UINT8    SectionType[16];
   1378   UINT32   ErrorSeverity;
   1379   UINT16   Revision;
   1380   UINT8    ValidationBits;
   1381   UINT8    Flags;
   1382   UINT32   ErrorDataLength;
   1383   UINT8    FruId[16];
   1384   UINT8    FruText[20];
   1385 } EFI_ACPI_5_0_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
   1386 
   1387 ///
   1388 /// Generic Error Data Entry Version (as defined in ACPI 5.0 spec.)
   1389 ///
   1390 #define EFI_ACPI_5_0_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0201
   1391 
   1392 ///
   1393 /// HEST - Hardware Error Source Table
   1394 ///
   1395 typedef struct {
   1396   EFI_ACPI_DESCRIPTION_HEADER Header;
   1397   UINT32                      ErrorSourceCount;
   1398 } EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
   1399 
   1400 ///
   1401 /// HEST Version (as defined in ACPI 5.0 spec.)
   1402 ///
   1403 #define EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION 0x01
   1404 
   1405 //
   1406 // Error Source structure types.
   1407 //
   1408 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
   1409 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
   1410 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_NMI_ERROR                0x02
   1411 #define EFI_ACPI_5_0_PCI_EXPRESS_ROOT_PORT_AER                  0x06
   1412 #define EFI_ACPI_5_0_PCI_EXPRESS_DEVICE_AER                     0x07
   1413 #define EFI_ACPI_5_0_PCI_EXPRESS_BRIDGE_AER                     0x08
   1414 #define EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR                     0x09
   1415 
   1416 //
   1417 // Error Source structure flags.
   1418 //
   1419 #define EFI_ACPI_5_0_ERROR_SOURCE_FLAG_FIRMWARE_FIRST       (1 << 0)
   1420 #define EFI_ACPI_5_0_ERROR_SOURCE_FLAG_GLOBAL               (1 << 1)
   1421 
   1422 ///
   1423 /// IA-32 Architecture Machine Check Exception Structure Definition
   1424 ///
   1425 typedef struct {
   1426   UINT16  Type;
   1427   UINT16  SourceId;
   1428   UINT8   Reserved0[2];
   1429   UINT8   Flags;
   1430   UINT8   Enabled;
   1431   UINT32  NumberOfRecordsToPreAllocate;
   1432   UINT32  MaxSectionsPerRecord;
   1433   UINT64  GlobalCapabilityInitData;
   1434   UINT64  GlobalControlInitData;
   1435   UINT8   NumberOfHardwareBanks;
   1436   UINT8   Reserved1[7];
   1437 } EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
   1438 
   1439 ///
   1440 /// IA-32 Architecture Machine Check Bank Structure Definition
   1441 ///
   1442 typedef struct {
   1443   UINT8   BankNumber;
   1444   UINT8   ClearStatusOnInitialization;
   1445   UINT8   StatusDataFormat;
   1446   UINT8   Reserved0;
   1447   UINT32  ControlRegisterMsrAddress;
   1448   UINT64  ControlInitData;
   1449   UINT32  StatusRegisterMsrAddress;
   1450   UINT32  AddressRegisterMsrAddress;
   1451   UINT32  MiscRegisterMsrAddress;
   1452 } EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
   1453 
   1454 ///
   1455 /// IA-32 Architecture Machine Check Bank Structure MCA data format
   1456 ///
   1457 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32      0x00
   1458 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64   0x01
   1459 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64     0x02
   1460 
   1461 //
   1462 // Hardware Error Notification types. All other values are reserved
   1463 //
   1464 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_POLLED                0x00
   1465 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT    0x01
   1466 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT       0x02
   1467 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_SCI                   0x03
   1468 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_NMI                   0x04
   1469 
   1470 ///
   1471 /// Hardware Error Notification Configuration Write Enable Structure Definition
   1472 ///
   1473 typedef struct {
   1474   UINT16    Type:1;
   1475   UINT16    PollInterval:1;
   1476   UINT16    SwitchToPollingThresholdValue:1;
   1477   UINT16    SwitchToPollingThresholdWindow:1;
   1478   UINT16    ErrorThresholdValue:1;
   1479   UINT16    ErrorThresholdWindow:1;
   1480   UINT16    Reserved:10;
   1481 } EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
   1482 
   1483 ///
   1484 /// Hardware Error Notification Structure Definition
   1485 ///
   1486 typedef struct {
   1487   UINT8                                                                          Type;
   1488   UINT8                                                                          Length;
   1489   EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE  ConfigurationWriteEnable;
   1490   UINT32                                                                         PollInterval;
   1491   UINT32                                                                         Vector;
   1492   UINT32                                                                         SwitchToPollingThresholdValue;
   1493   UINT32                                                                         SwitchToPollingThresholdWindow;
   1494   UINT32                                                                         ErrorThresholdValue;
   1495   UINT32                                                                         ErrorThresholdWindow;
   1496 } EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
   1497 
   1498 ///
   1499 /// IA-32 Architecture Corrected Machine Check Structure Definition
   1500 ///
   1501 typedef struct {
   1502   UINT16                                                 Type;
   1503   UINT16                                                 SourceId;
   1504   UINT8                                                  Reserved0[2];
   1505   UINT8                                                  Flags;
   1506   UINT8                                                  Enabled;
   1507   UINT32                                                 NumberOfRecordsToPreAllocate;
   1508   UINT32                                                 MaxSectionsPerRecord;
   1509   EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
   1510   UINT8                                                  NumberOfHardwareBanks;
   1511   UINT8                                                  Reserved1[3];
   1512 } EFI_ACPI_5_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
   1513 
   1514 ///
   1515 /// IA-32 Architecture NMI Error Structure Definition
   1516 ///
   1517 typedef struct {
   1518   UINT16  Type;
   1519   UINT16  SourceId;
   1520   UINT8   Reserved0[2];
   1521   UINT32  NumberOfRecordsToPreAllocate;
   1522   UINT32  MaxSectionsPerRecord;
   1523   UINT32  MaxRawDataLength;
   1524 } EFI_ACPI_5_0_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
   1525 
   1526 ///
   1527 /// PCI Express Root Port AER Structure Definition
   1528 ///
   1529 typedef struct {
   1530   UINT16  Type;
   1531   UINT16  SourceId;
   1532   UINT8   Reserved0[2];
   1533   UINT8   Flags;
   1534   UINT8   Enabled;
   1535   UINT32  NumberOfRecordsToPreAllocate;
   1536   UINT32  MaxSectionsPerRecord;
   1537   UINT32  Bus;
   1538   UINT16  Device;
   1539   UINT16  Function;
   1540   UINT16  DeviceControl;
   1541   UINT8   Reserved1[2];
   1542   UINT32  UncorrectableErrorMask;
   1543   UINT32  UncorrectableErrorSeverity;
   1544   UINT32  CorrectableErrorMask;
   1545   UINT32  AdvancedErrorCapabilitiesAndControl;
   1546   UINT32  RootErrorCommand;
   1547 } EFI_ACPI_5_0_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
   1548 
   1549 ///
   1550 /// PCI Express Device AER Structure Definition
   1551 ///
   1552 typedef struct {
   1553   UINT16  Type;
   1554   UINT16  SourceId;
   1555   UINT8   Reserved0[2];
   1556   UINT8   Flags;
   1557   UINT8   Enabled;
   1558   UINT32  NumberOfRecordsToPreAllocate;
   1559   UINT32  MaxSectionsPerRecord;
   1560   UINT32  Bus;
   1561   UINT16  Device;
   1562   UINT16  Function;
   1563   UINT16  DeviceControl;
   1564   UINT8   Reserved1[2];
   1565   UINT32  UncorrectableErrorMask;
   1566   UINT32  UncorrectableErrorSeverity;
   1567   UINT32  CorrectableErrorMask;
   1568   UINT32  AdvancedErrorCapabilitiesAndControl;
   1569 } EFI_ACPI_5_0_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
   1570 
   1571 ///
   1572 /// PCI Express Bridge AER Structure Definition
   1573 ///
   1574 typedef struct {
   1575   UINT16  Type;
   1576   UINT16  SourceId;
   1577   UINT8   Reserved0[2];
   1578   UINT8   Flags;
   1579   UINT8   Enabled;
   1580   UINT32  NumberOfRecordsToPreAllocate;
   1581   UINT32  MaxSectionsPerRecord;
   1582   UINT32  Bus;
   1583   UINT16  Device;
   1584   UINT16  Function;
   1585   UINT16  DeviceControl;
   1586   UINT8   Reserved1[2];
   1587   UINT32  UncorrectableErrorMask;
   1588   UINT32  UncorrectableErrorSeverity;
   1589   UINT32  CorrectableErrorMask;
   1590   UINT32  AdvancedErrorCapabilitiesAndControl;
   1591   UINT32  SecondaryUncorrectableErrorMask;
   1592   UINT32  SecondaryUncorrectableErrorSeverity;
   1593   UINT32  SecondaryAdvancedErrorCapabilitiesAndControl;
   1594 } EFI_ACPI_5_0_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
   1595 
   1596 ///
   1597 /// Generic Hardware Error Source Structure Definition
   1598 ///
   1599 typedef struct {
   1600   UINT16                                                 Type;
   1601   UINT16                                                 SourceId;
   1602   UINT16                                                 RelatedSourceId;
   1603   UINT8                                                  Flags;
   1604   UINT8                                                  Enabled;
   1605   UINT32                                                 NumberOfRecordsToPreAllocate;
   1606   UINT32                                                 MaxSectionsPerRecord;
   1607   UINT32                                                 MaxRawDataLength;
   1608   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE                 ErrorStatusAddress;
   1609   EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
   1610   UINT32                                                 ErrorStatusBlockLength;
   1611 } EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
   1612 
   1613 ///
   1614 /// Generic Error Status Definition
   1615 ///
   1616 typedef struct {
   1617   EFI_ACPI_5_0_ERROR_BLOCK_STATUS              BlockStatus;
   1618   UINT32                                       RawDataOffset;
   1619   UINT32                                       RawDataLength;
   1620   UINT32                                       DataLength;
   1621   UINT32                                       ErrorSeverity;
   1622 } EFI_ACPI_5_0_GENERIC_ERROR_STATUS_STRUCTURE;
   1623 
   1624 ///
   1625 /// ERST - Error Record Serialization Table
   1626 ///
   1627 typedef struct {
   1628   EFI_ACPI_DESCRIPTION_HEADER Header;
   1629   UINT32                      SerializationHeaderSize;
   1630   UINT8                       Reserved0[4];
   1631   UINT32                      InstructionEntryCount;
   1632 } EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
   1633 
   1634 ///
   1635 /// ERST Version (as defined in ACPI 5.0 spec.)
   1636 ///
   1637 #define EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION 0x01
   1638 
   1639 ///
   1640 /// ERST Serialization Actions
   1641 ///
   1642 #define EFI_ACPI_5_0_ERST_BEGIN_WRITE_OPERATION                    0x00
   1643 #define EFI_ACPI_5_0_ERST_BEGIN_READ_OPERATION                     0x01
   1644 #define EFI_ACPI_5_0_ERST_BEGIN_CLEAR_OPERATION                    0x02
   1645 #define EFI_ACPI_5_0_ERST_END_OPERATION                            0x03
   1646 #define EFI_ACPI_5_0_ERST_SET_RECORD_OFFSET                        0x04
   1647 #define EFI_ACPI_5_0_ERST_EXECUTE_OPERATION                        0x05
   1648 #define EFI_ACPI_5_0_ERST_CHECK_BUSY_STATUS                        0x06
   1649 #define EFI_ACPI_5_0_ERST_GET_COMMAND_STATUS                       0x07
   1650 #define EFI_ACPI_5_0_ERST_GET_RECORD_IDENTIFIER                    0x08
   1651 #define EFI_ACPI_5_0_ERST_SET_RECORD_IDENTIFIER                    0x09
   1652 #define EFI_ACPI_5_0_ERST_GET_RECORD_COUNT                         0x0A
   1653 #define EFI_ACPI_5_0_ERST_BEGIN_DUMMY_WRITE_OPERATION              0x0B
   1654 #define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE              0x0D
   1655 #define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH       0x0E
   1656 #define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES   0x0F
   1657 
   1658 ///
   1659 /// ERST Action Command Status
   1660 ///
   1661 #define EFI_ACPI_5_0_ERST_STATUS_SUCCESS                           0x00
   1662 #define EFI_ACPI_5_0_ERST_STATUS_NOT_ENOUGH_SPACE                  0x01
   1663 #define EFI_ACPI_5_0_ERST_STATUS_HARDWARE_NOT_AVAILABLE            0x02
   1664 #define EFI_ACPI_5_0_ERST_STATUS_FAILED                            0x03
   1665 #define EFI_ACPI_5_0_ERST_STATUS_RECORD_STORE_EMPTY                0x04
   1666 #define EFI_ACPI_5_0_ERST_STATUS_RECORD_NOT_FOUND                  0x05
   1667 
   1668 ///
   1669 /// ERST Serialization Instructions
   1670 ///
   1671 #define EFI_ACPI_5_0_ERST_READ_REGISTER                            0x00
   1672 #define EFI_ACPI_5_0_ERST_READ_REGISTER_VALUE                      0x01
   1673 #define EFI_ACPI_5_0_ERST_WRITE_REGISTER                           0x02
   1674 #define EFI_ACPI_5_0_ERST_WRITE_REGISTER_VALUE                     0x03
   1675 #define EFI_ACPI_5_0_ERST_NOOP                                     0x04
   1676 #define EFI_ACPI_5_0_ERST_LOAD_VAR1                                0x05
   1677 #define EFI_ACPI_5_0_ERST_LOAD_VAR2                                0x06
   1678 #define EFI_ACPI_5_0_ERST_STORE_VAR1                               0x07
   1679 #define EFI_ACPI_5_0_ERST_ADD                                      0x08
   1680 #define EFI_ACPI_5_0_ERST_SUBTRACT                                 0x09
   1681 #define EFI_ACPI_5_0_ERST_ADD_VALUE                                0x0A
   1682 #define EFI_ACPI_5_0_ERST_SUBTRACT_VALUE                           0x0B
   1683 #define EFI_ACPI_5_0_ERST_STALL                                    0x0C
   1684 #define EFI_ACPI_5_0_ERST_STALL_WHILE_TRUE                         0x0D
   1685 #define EFI_ACPI_5_0_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE            0x0E
   1686 #define EFI_ACPI_5_0_ERST_GOTO                                     0x0F
   1687 #define EFI_ACPI_5_0_ERST_SET_SRC_ADDRESS_BASE                     0x10
   1688 #define EFI_ACPI_5_0_ERST_SET_DST_ADDRESS_BASE                     0x11
   1689 #define EFI_ACPI_5_0_ERST_MOVE_DATA                                0x12
   1690 
   1691 ///
   1692 /// ERST Instruction Flags
   1693 ///
   1694 #define EFI_ACPI_5_0_ERST_PRESERVE_REGISTER                        0x01
   1695 
   1696 ///
   1697 /// ERST Serialization Instruction Entry
   1698 ///
   1699 typedef struct {
   1700   UINT8                                    SerializationAction;
   1701   UINT8                                    Instruction;
   1702   UINT8                                    Flags;
   1703   UINT8                                    Reserved0;
   1704   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
   1705   UINT64                                   Value;
   1706   UINT64                                   Mask;
   1707 } EFI_ACPI_5_0_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
   1708 
   1709 ///
   1710 /// EINJ - Error Injection Table
   1711 ///
   1712 typedef struct {
   1713   EFI_ACPI_DESCRIPTION_HEADER Header;
   1714   UINT32                      InjectionHeaderSize;
   1715   UINT8                       InjectionFlags;
   1716   UINT8                       Reserved0[3];
   1717   UINT32                      InjectionEntryCount;
   1718 } EFI_ACPI_5_0_ERROR_INJECTION_TABLE_HEADER;
   1719 
   1720 ///
   1721 /// EINJ Version (as defined in ACPI 5.0 spec.)
   1722 ///
   1723 #define EFI_ACPI_5_0_ERROR_INJECTION_TABLE_REVISION 0x01
   1724 
   1725 ///
   1726 /// EINJ Error Injection Actions
   1727 ///
   1728 #define EFI_ACPI_5_0_EINJ_BEGIN_INJECTION_OPERATION                0x00
   1729 #define EFI_ACPI_5_0_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE           0x01
   1730 #define EFI_ACPI_5_0_EINJ_SET_ERROR_TYPE                           0x02
   1731 #define EFI_ACPI_5_0_EINJ_GET_ERROR_TYPE                           0x03
   1732 #define EFI_ACPI_5_0_EINJ_END_OPERATION                            0x04
   1733 #define EFI_ACPI_5_0_EINJ_EXECUTE_OPERATION                        0x05
   1734 #define EFI_ACPI_5_0_EINJ_CHECK_BUSY_STATUS                        0x06
   1735 #define EFI_ACPI_5_0_EINJ_GET_COMMAND_STATUS                       0x07
   1736 #define EFI_ACPI_5_0_EINJ_TRIGGER_ERROR                            0xFF
   1737 
   1738 ///
   1739 /// EINJ Action Command Status
   1740 ///
   1741 #define EFI_ACPI_5_0_EINJ_STATUS_SUCCESS                           0x00
   1742 #define EFI_ACPI_5_0_EINJ_STATUS_UNKNOWN_FAILURE                   0x01
   1743 #define EFI_ACPI_5_0_EINJ_STATUS_INVALID_ACCESS                    0x02
   1744 
   1745 ///
   1746 /// EINJ Error Type Definition
   1747 ///
   1748 #define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_CORRECTABLE                 (1 << 0)
   1749 #define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL      (1 << 1)
   1750 #define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL         (1 << 2)
   1751 #define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_CORRECTABLE                    (1 << 3)
   1752 #define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL         (1 << 4)
   1753 #define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL            (1 << 5)
   1754 #define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE               (1 << 6)
   1755 #define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL    (1 << 7)
   1756 #define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL       (1 << 8)
   1757 #define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_CORRECTABLE                  (1 << 9)
   1758 #define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL       (1 << 10)
   1759 #define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL          (1 << 11)
   1760 
   1761 ///
   1762 /// EINJ Injection Instructions
   1763 ///
   1764 #define EFI_ACPI_5_0_EINJ_READ_REGISTER                            0x00
   1765 #define EFI_ACPI_5_0_EINJ_READ_REGISTER_VALUE                      0x01
   1766 #define EFI_ACPI_5_0_EINJ_WRITE_REGISTER                           0x02
   1767 #define EFI_ACPI_5_0_EINJ_WRITE_REGISTER_VALUE                     0x03
   1768 #define EFI_ACPI_5_0_EINJ_NOOP                                     0x04
   1769 
   1770 ///
   1771 /// EINJ Instruction Flags
   1772 ///
   1773 #define EFI_ACPI_5_0_EINJ_PRESERVE_REGISTER                        0x01
   1774 
   1775 ///
   1776 /// EINJ Injection Instruction Entry
   1777 ///
   1778 typedef struct {
   1779   UINT8                                    InjectionAction;
   1780   UINT8                                    Instruction;
   1781   UINT8                                    Flags;
   1782   UINT8                                    Reserved0;
   1783   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
   1784   UINT64                                   Value;
   1785   UINT64                                   Mask;
   1786 } EFI_ACPI_5_0_EINJ_INJECTION_INSTRUCTION_ENTRY;
   1787 
   1788 ///
   1789 /// EINJ Trigger Action Table
   1790 ///
   1791 typedef struct {
   1792   UINT32  HeaderSize;
   1793   UINT32  Revision;
   1794   UINT32  TableSize;
   1795   UINT32  EntryCount;
   1796 } EFI_ACPI_5_0_EINJ_TRIGGER_ACTION_TABLE;
   1797 
   1798 ///
   1799 /// Platform Communications Channel Table (PCCT)
   1800 ///
   1801 typedef struct {
   1802   EFI_ACPI_DESCRIPTION_HEADER Header;
   1803   UINT32                      Flags;
   1804   UINT64                      Reserved;
   1805 } EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER;
   1806 
   1807 ///
   1808 /// PCCT Version (as defined in ACPI 5.0 spec.)
   1809 ///
   1810 #define EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION 0x01
   1811 
   1812 ///
   1813 /// PCCT Global Flags
   1814 ///
   1815 #define EFI_ACPI_5_0_PCCT_FLAGS_SCI_DOORBELL                      BIT0
   1816 
   1817 //
   1818 // PCCT Subspace type
   1819 //
   1820 #define EFI_ACPI_5_0_PCCT_SUBSPACE_TYPE_GENERIC  0x00
   1821 
   1822 ///
   1823 /// PCC Subspace Structure Header
   1824 ///
   1825 typedef struct {
   1826   UINT8        Type;
   1827   UINT8        Length;
   1828 } EFI_ACPI_5_0_PCCT_SUBSPACE_HEADER;
   1829 
   1830 ///
   1831 /// Generic Communications Subspace Structure
   1832 ///
   1833 typedef struct {
   1834   UINT8                                    Type;
   1835   UINT8                                    Length;
   1836   UINT8                                    Reserved[6];
   1837   UINT64                                   BaseAddress;
   1838   UINT64                                   AddressLength;
   1839   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   DoorbellRegister;
   1840   UINT64                                   DoorbellPreserve;
   1841   UINT64                                   DoorbellWrite;
   1842   UINT32                                   NominalLatency;
   1843   UINT32                                   MaximumPeriodicAccessRate;
   1844   UINT16                                   MinimumRequestTurnaroundTime;
   1845 } EFI_ACPI_5_0_PCCT_SUBSPACE_GENERIC;
   1846 
   1847 ///
   1848 /// Generic Communications Channel Shared Memory Region
   1849 ///
   1850 
   1851 typedef struct {
   1852   UINT8                                    Command;
   1853   UINT8                                    Reserved:7;
   1854   UINT8                                    GenerateSci:1;
   1855 } EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND;
   1856 
   1857 typedef struct {
   1858   UINT8                                    CommandComplete:1;
   1859   UINT8                                    SciDoorbell:1;
   1860   UINT8                                    Error:1;
   1861   UINT8                                    PlatformNotification:1;
   1862   UINT8                                    Reserved:4;
   1863   UINT8                                    Reserved1;
   1864 } EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS;
   1865 
   1866 typedef struct {
   1867   UINT32                                                    Signature;
   1868   EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND    Command;
   1869   EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS     Status;
   1870 } EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER;
   1871 
   1872 //
   1873 // Known table signatures
   1874 //
   1875 
   1876 ///
   1877 /// "RSD PTR " Root System Description Pointer
   1878 ///
   1879 #define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
   1880 
   1881 ///
   1882 /// "APIC" Multiple APIC Description Table
   1883 ///
   1884 #define EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
   1885 
   1886 ///
   1887 /// "BERT" Boot Error Record Table
   1888 ///
   1889 #define EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
   1890 
   1891 ///
   1892 /// "BGRT" Boot Graphics Resource Table
   1893 ///
   1894 #define EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('B', 'G', 'R', 'T')
   1895 
   1896 ///
   1897 /// "CPEP" Corrected Platform Error Polling Table
   1898 ///
   1899 #define EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
   1900 
   1901 ///
   1902 /// "DSDT" Differentiated System Description Table
   1903 ///
   1904 #define EFI_ACPI_5_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
   1905 
   1906 ///
   1907 /// "ECDT" Embedded Controller Boot Resources Table
   1908 ///
   1909 #define EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
   1910 
   1911 ///
   1912 /// "EINJ" Error Injection Table
   1913 ///
   1914 #define EFI_ACPI_5_0_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
   1915 
   1916 ///
   1917 /// "ERST" Error Record Serialization Table
   1918 ///
   1919 #define EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
   1920 
   1921 ///
   1922 /// "FACP" Fixed ACPI Description Table
   1923 ///
   1924 #define EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
   1925 
   1926 ///
   1927 /// "FACS" Firmware ACPI Control Structure
   1928 ///
   1929 #define EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
   1930 
   1931 ///
   1932 /// "FPDT" Firmware Performance Data Table
   1933 ///
   1934 #define EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE  SIGNATURE_32('F', 'P', 'D', 'T')
   1935 
   1936 ///
   1937 /// "GTDT" Generic Timer Description Table
   1938 ///
   1939 #define EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('G', 'T', 'D', 'T')
   1940 
   1941 ///
   1942 /// "HEST" Hardware Error Source Table
   1943 ///
   1944 #define EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
   1945 
   1946 ///
   1947 /// "MPST" Memory Power State Table
   1948 ///
   1949 #define EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_SIGNATURE  SIGNATURE_32('M', 'P', 'S', 'T')
   1950 
   1951 ///
   1952 /// "MSCT" Maximum System Characteristics Table
   1953 ///
   1954 #define EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
   1955 
   1956 ///
   1957 /// "PMTT" Platform Memory Topology Table
   1958 ///
   1959 #define EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE  SIGNATURE_32('P', 'M', 'T', 'T')
   1960 
   1961 ///
   1962 /// "PSDT" Persistent System Description Table
   1963 ///
   1964 #define EFI_ACPI_5_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
   1965 
   1966 ///
   1967 /// "RASF" ACPI RAS Feature Table
   1968 ///
   1969 #define EFI_ACPI_5_0_ACPI_RAS_FEATURE_TABLE_SIGNATURE  SIGNATURE_32('R', 'A', 'S', 'F')
   1970 
   1971 ///
   1972 /// "RSDT" Root System Description Table
   1973 ///
   1974 #define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
   1975 
   1976 ///
   1977 /// "SBST" Smart Battery Specification Table
   1978 ///
   1979 #define EFI_ACPI_5_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
   1980 
   1981 ///
   1982 /// "SLIT" System Locality Information Table
   1983 ///
   1984 #define EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
   1985 
   1986 ///
   1987 /// "SRAT" System Resource Affinity Table
   1988 ///
   1989 #define EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
   1990 
   1991 ///
   1992 /// "SSDT" Secondary System Description Table
   1993 ///
   1994 #define EFI_ACPI_5_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
   1995 
   1996 ///
   1997 /// "XSDT" Extended System Description Table
   1998 ///
   1999 #define EFI_ACPI_5_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
   2000 
   2001 ///
   2002 /// "BOOT" MS Simple Boot Spec
   2003 ///
   2004 #define EFI_ACPI_5_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
   2005 
   2006 ///
   2007 /// "CSRT" MS Core System Resource Table
   2008 ///
   2009 #define EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('C', 'S', 'R', 'T')
   2010 
   2011 ///
   2012 /// "DBG2" MS Debug Port 2 Spec
   2013 ///
   2014 #define EFI_ACPI_5_0_DEBUG_PORT_2_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', '2')
   2015 
   2016 ///
   2017 /// "DBGP" MS Debug Port Spec
   2018 ///
   2019 #define EFI_ACPI_5_0_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
   2020 
   2021 ///
   2022 /// "DMAR" DMA Remapping Table
   2023 ///
   2024 #define EFI_ACPI_5_0_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
   2025 
   2026 ///
   2027 /// "DRTM" Dynamic Root of Trust for Measurement Table
   2028 ///
   2029 #define EFI_ACPI_5_0_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE  SIGNATURE_32('D', 'R', 'T', 'M')
   2030 
   2031 ///
   2032 /// "ETDT" Event Timer Description Table
   2033 ///
   2034 #define EFI_ACPI_5_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
   2035 
   2036 ///
   2037 /// "HPET" IA-PC High Precision Event Timer Table
   2038 ///
   2039 #define EFI_ACPI_5_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
   2040 
   2041 ///
   2042 /// "iBFT" iSCSI Boot Firmware Table
   2043 ///
   2044 #define EFI_ACPI_5_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
   2045 
   2046 ///
   2047 /// "IVRS" I/O Virtualization Reporting Structure
   2048 ///
   2049 #define EFI_ACPI_5_0_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
   2050 
   2051 ///
   2052 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
   2053 ///
   2054 #define EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
   2055 
   2056 ///
   2057 /// "MCHI" Management Controller Host Interface Table
   2058 ///
   2059 #define EFI_ACPI_5_0_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
   2060 
   2061 ///
   2062 /// "MSDM" MS Data Management Table
   2063 ///
   2064 #define EFI_ACPI_5_0_DATA_MANAGEMENT_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'D', 'M')
   2065 
   2066 ///
   2067 /// "SLIC" MS Software Licensing Table Specification
   2068 ///
   2069 #define EFI_ACPI_5_0_SOFTWARE_LICENSING_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'C')
   2070 
   2071 ///
   2072 /// "SPCR" Serial Port Concole Redirection Table
   2073 ///
   2074 #define EFI_ACPI_5_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
   2075 
   2076 ///
   2077 /// "SPMI" Server Platform Management Interface Table
   2078 ///
   2079 #define EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
   2080 
   2081 ///
   2082 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
   2083 ///
   2084 #define EFI_ACPI_5_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
   2085 
   2086 ///
   2087 /// "TPM2" Trusted Computing Platform 1 Table
   2088 ///
   2089 #define EFI_ACPI_5_0_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE  SIGNATURE_32('T', 'P', 'M', '2')
   2090 
   2091 ///
   2092 /// "UEFI" UEFI ACPI Data Table
   2093 ///
   2094 #define EFI_ACPI_5_0_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
   2095 
   2096 ///
   2097 /// "WAET" Windows ACPI Emulated Devices Table
   2098 ///
   2099 #define EFI_ACPI_5_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
   2100 #define EFI_ACPI_5_0_WINDOWS_ACPI_ENLIGHTENMENT_TABLE_SIGNATURE  EFI_ACPI_5_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE
   2101 
   2102 ///
   2103 /// "WDAT" Watchdog Action Table
   2104 ///
   2105 #define EFI_ACPI_5_0_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
   2106 
   2107 ///
   2108 /// "WDRT" Watchdog Resource Table
   2109 ///
   2110 #define EFI_ACPI_5_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
   2111 
   2112 ///
   2113 /// "WPBT" MS Platform Binary Table
   2114 ///
   2115 #define EFI_ACPI_5_0_PLATFORM_BINARY_TABLE_SIGNATURE  SIGNATURE_32('W', 'P', 'B', 'T')
   2116 
   2117 #pragma pack()
   2118 
   2119 #endif
   2120