Home | History | Annotate | Download | only in IndustryStandard
      1 /** @file
      2   ACPI 4.0 definitions from the ACPI Specification Revision 4.0a April 5, 2010
      3 
      4   Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 **/
     13 
     14 #ifndef _ACPI_4_0_H_
     15 #define _ACPI_4_0_H_
     16 
     17 #include <IndustryStandard/Acpi30.h>
     18 
     19 //
     20 // Ensure proper structure formats
     21 //
     22 #pragma pack(1)
     23 
     24 ///
     25 /// ACPI 4.0 Generic Address Space definition
     26 ///
     27 typedef struct {
     28   UINT8   AddressSpaceId;
     29   UINT8   RegisterBitWidth;
     30   UINT8   RegisterBitOffset;
     31   UINT8   AccessSize;
     32   UINT64  Address;
     33 } EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE;
     34 
     35 //
     36 // Generic Address Space Address IDs
     37 //
     38 #define EFI_ACPI_4_0_SYSTEM_MEMORY              0
     39 #define EFI_ACPI_4_0_SYSTEM_IO                  1
     40 #define EFI_ACPI_4_0_PCI_CONFIGURATION_SPACE    2
     41 #define EFI_ACPI_4_0_EMBEDDED_CONTROLLER        3
     42 #define EFI_ACPI_4_0_SMBUS                      4
     43 #define EFI_ACPI_4_0_FUNCTIONAL_FIXED_HARDWARE  0x7F
     44 
     45 //
     46 // Generic Address Space Access Sizes
     47 //
     48 #define EFI_ACPI_4_0_UNDEFINED  0
     49 #define EFI_ACPI_4_0_BYTE       1
     50 #define EFI_ACPI_4_0_WORD       2
     51 #define EFI_ACPI_4_0_DWORD      3
     52 #define EFI_ACPI_4_0_QWORD      4
     53 
     54 //
     55 // ACPI 4.0 table structures
     56 //
     57 
     58 ///
     59 /// Root System Description Pointer Structure
     60 ///
     61 typedef struct {
     62   UINT64  Signature;
     63   UINT8   Checksum;
     64   UINT8   OemId[6];
     65   UINT8   Revision;
     66   UINT32  RsdtAddress;
     67   UINT32  Length;
     68   UINT64  XsdtAddress;
     69   UINT8   ExtendedChecksum;
     70   UINT8   Reserved[3];
     71 } EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
     72 
     73 ///
     74 /// RSD_PTR Revision (as defined in ACPI 4.0b spec.)
     75 ///
     76 #define EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02  ///< ACPISpec (Revision 4.0a) says current value is 2
     77 
     78 ///
     79 /// Common table header, this prefaces all ACPI tables, including FACS, but
     80 /// excluding the RSD PTR structure
     81 ///
     82 typedef struct {
     83   UINT32  Signature;
     84   UINT32  Length;
     85 } EFI_ACPI_4_0_COMMON_HEADER;
     86 
     87 //
     88 // Root System Description Table
     89 // No definition needed as it is a common description table header, the same with
     90 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
     91 //
     92 
     93 ///
     94 /// RSDT Revision (as defined in ACPI 4.0 spec.)
     95 ///
     96 #define EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
     97 
     98 //
     99 // Extended System Description Table
    100 // No definition needed as it is a common description table header, the same with
    101 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
    102 //
    103 
    104 ///
    105 /// XSDT Revision (as defined in ACPI 4.0 spec.)
    106 ///
    107 #define EFI_ACPI_4_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
    108 
    109 ///
    110 /// Fixed ACPI Description Table Structure (FADT)
    111 ///
    112 typedef struct {
    113   EFI_ACPI_DESCRIPTION_HEADER             Header;
    114   UINT32                                  FirmwareCtrl;
    115   UINT32                                  Dsdt;
    116   UINT8                                   Reserved0;
    117   UINT8                                   PreferredPmProfile;
    118   UINT16                                  SciInt;
    119   UINT32                                  SmiCmd;
    120   UINT8                                   AcpiEnable;
    121   UINT8                                   AcpiDisable;
    122   UINT8                                   S4BiosReq;
    123   UINT8                                   PstateCnt;
    124   UINT32                                  Pm1aEvtBlk;
    125   UINT32                                  Pm1bEvtBlk;
    126   UINT32                                  Pm1aCntBlk;
    127   UINT32                                  Pm1bCntBlk;
    128   UINT32                                  Pm2CntBlk;
    129   UINT32                                  PmTmrBlk;
    130   UINT32                                  Gpe0Blk;
    131   UINT32                                  Gpe1Blk;
    132   UINT8                                   Pm1EvtLen;
    133   UINT8                                   Pm1CntLen;
    134   UINT8                                   Pm2CntLen;
    135   UINT8                                   PmTmrLen;
    136   UINT8                                   Gpe0BlkLen;
    137   UINT8                                   Gpe1BlkLen;
    138   UINT8                                   Gpe1Base;
    139   UINT8                                   CstCnt;
    140   UINT16                                  PLvl2Lat;
    141   UINT16                                  PLvl3Lat;
    142   UINT16                                  FlushSize;
    143   UINT16                                  FlushStride;
    144   UINT8                                   DutyOffset;
    145   UINT8                                   DutyWidth;
    146   UINT8                                   DayAlrm;
    147   UINT8                                   MonAlrm;
    148   UINT8                                   Century;
    149   UINT16                                  IaPcBootArch;
    150   UINT8                                   Reserved1;
    151   UINT32                                  Flags;
    152   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  ResetReg;
    153   UINT8                                   ResetValue;
    154   UINT8                                   Reserved2[3];
    155   UINT64                                  XFirmwareCtrl;
    156   UINT64                                  XDsdt;
    157   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk;
    158   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk;
    159   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk;
    160   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk;
    161   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk;
    162   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk;
    163   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk;
    164   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk;
    165 } EFI_ACPI_4_0_FIXED_ACPI_DESCRIPTION_TABLE;
    166 
    167 ///
    168 /// FADT Version (as defined in ACPI 4.0 spec.)
    169 ///
    170 #define EFI_ACPI_4_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x04
    171 
    172 //
    173 // Fixed ACPI Description Table Preferred Power Management Profile
    174 //
    175 #define EFI_ACPI_4_0_PM_PROFILE_UNSPECIFIED         0
    176 #define EFI_ACPI_4_0_PM_PROFILE_DESKTOP             1
    177 #define EFI_ACPI_4_0_PM_PROFILE_MOBILE              2
    178 #define EFI_ACPI_4_0_PM_PROFILE_WORKSTATION         3
    179 #define EFI_ACPI_4_0_PM_PROFILE_ENTERPRISE_SERVER   4
    180 #define EFI_ACPI_4_0_PM_PROFILE_SOHO_SERVER         5
    181 #define EFI_ACPI_4_0_PM_PROFILE_APPLIANCE_PC        6
    182 #define EFI_ACPI_4_0_PM_PROFILE_PERFORMANCE_SERVER  7
    183 
    184 //
    185 // Fixed ACPI Description Table Boot Architecture Flags
    186 // All other bits are reserved and must be set to 0.
    187 //
    188 #define EFI_ACPI_4_0_LEGACY_DEVICES              BIT0
    189 #define EFI_ACPI_4_0_8042                        BIT1
    190 #define EFI_ACPI_4_0_VGA_NOT_PRESENT             BIT2
    191 #define EFI_ACPI_4_0_MSI_NOT_SUPPORTED           BIT3
    192 #define EFI_ACPI_4_0_PCIE_ASPM_CONTROLS          BIT4
    193 
    194 //
    195 // Fixed ACPI Description Table Fixed Feature Flags
    196 // All other bits are reserved and must be set to 0.
    197 //
    198 #define EFI_ACPI_4_0_WBINVD                                 BIT0
    199 #define EFI_ACPI_4_0_WBINVD_FLUSH                           BIT1
    200 #define EFI_ACPI_4_0_PROC_C1                                BIT2
    201 #define EFI_ACPI_4_0_P_LVL2_UP                              BIT3
    202 #define EFI_ACPI_4_0_PWR_BUTTON                             BIT4
    203 #define EFI_ACPI_4_0_SLP_BUTTON                             BIT5
    204 #define EFI_ACPI_4_0_FIX_RTC                                BIT6
    205 #define EFI_ACPI_4_0_RTC_S4                                 BIT7
    206 #define EFI_ACPI_4_0_TMR_VAL_EXT                            BIT8
    207 #define EFI_ACPI_4_0_DCK_CAP                                BIT9
    208 #define EFI_ACPI_4_0_RESET_REG_SUP                          BIT10
    209 #define EFI_ACPI_4_0_SEALED_CASE                            BIT11
    210 #define EFI_ACPI_4_0_HEADLESS                               BIT12
    211 #define EFI_ACPI_4_0_CPU_SW_SLP                             BIT13
    212 #define EFI_ACPI_4_0_PCI_EXP_WAK                            BIT14
    213 #define EFI_ACPI_4_0_USE_PLATFORM_CLOCK                     BIT15
    214 #define EFI_ACPI_4_0_S4_RTC_STS_VALID                       BIT16
    215 #define EFI_ACPI_4_0_REMOTE_POWER_ON_CAPABLE                BIT17
    216 #define EFI_ACPI_4_0_FORCE_APIC_CLUSTER_MODEL               BIT18
    217 #define EFI_ACPI_4_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE   BIT19
    218 
    219 ///
    220 /// Firmware ACPI Control Structure
    221 ///
    222 typedef struct {
    223   UINT32  Signature;
    224   UINT32  Length;
    225   UINT32  HardwareSignature;
    226   UINT32  FirmwareWakingVector;
    227   UINT32  GlobalLock;
    228   UINT32  Flags;
    229   UINT64  XFirmwareWakingVector;
    230   UINT8   Version;
    231   UINT8   Reserved0[3];
    232   UINT32  OspmFlags;
    233   UINT8   Reserved1[24];
    234 } EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
    235 
    236 ///
    237 /// FACS Version (as defined in ACPI 4.0 spec.)
    238 ///
    239 #define EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
    240 
    241 ///
    242 /// Firmware Control Structure Feature Flags
    243 /// All other bits are reserved and must be set to 0.
    244 ///
    245 #define EFI_ACPI_4_0_S4BIOS_F                     BIT0
    246 #define EFI_ACPI_4_0_64BIT_WAKE_SUPPORTED_F       BIT1
    247 
    248 ///
    249 /// OSPM Enabled Firmware Control Structure Flags
    250 /// All other bits are reserved and must be set to 0.
    251 ///
    252 #define EFI_ACPI_4_0_OSPM_64BIT_WAKE__F           BIT0
    253 
    254 //
    255 // Differentiated System Description Table,
    256 // Secondary System Description Table
    257 // and Persistent System Description Table,
    258 // no definition needed as they are common description table header, the same with
    259 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
    260 //
    261 #define EFI_ACPI_4_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION   0x02
    262 #define EFI_ACPI_4_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION        0x02
    263 
    264 ///
    265 /// Multiple APIC Description Table header definition.  The rest of the table
    266 /// must be defined in a platform specific manner.
    267 ///
    268 typedef struct {
    269   EFI_ACPI_DESCRIPTION_HEADER Header;
    270   UINT32                      LocalApicAddress;
    271   UINT32                      Flags;
    272 } EFI_ACPI_4_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
    273 
    274 ///
    275 /// MADT Revision (as defined in ACPI 4.0 spec.)
    276 ///
    277 #define EFI_ACPI_4_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x03
    278 
    279 ///
    280 /// Multiple APIC Flags
    281 /// All other bits are reserved and must be set to 0.
    282 ///
    283 #define EFI_ACPI_4_0_PCAT_COMPAT         BIT0
    284 
    285 //
    286 // Multiple APIC Description Table APIC structure types
    287 // All other values between 0x0B an 0xFF are reserved and
    288 // will be ignored by OSPM.
    289 //
    290 #define EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC           0x00
    291 #define EFI_ACPI_4_0_IO_APIC                        0x01
    292 #define EFI_ACPI_4_0_INTERRUPT_SOURCE_OVERRIDE      0x02
    293 #define EFI_ACPI_4_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
    294 #define EFI_ACPI_4_0_LOCAL_APIC_NMI                 0x04
    295 #define EFI_ACPI_4_0_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
    296 #define EFI_ACPI_4_0_IO_SAPIC                       0x06
    297 #define EFI_ACPI_4_0_LOCAL_SAPIC                    0x07
    298 #define EFI_ACPI_4_0_PLATFORM_INTERRUPT_SOURCES     0x08
    299 #define EFI_ACPI_4_0_PROCESSOR_LOCAL_X2APIC         0x09
    300 #define EFI_ACPI_4_0_LOCAL_X2APIC_NMI               0x0A
    301 
    302 //
    303 // APIC Structure Definitions
    304 //
    305 
    306 ///
    307 /// Processor Local APIC Structure Definition
    308 ///
    309 typedef struct {
    310   UINT8   Type;
    311   UINT8   Length;
    312   UINT8   AcpiProcessorId;
    313   UINT8   ApicId;
    314   UINT32  Flags;
    315 } EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
    316 
    317 ///
    318 /// Local APIC Flags.  All other bits are reserved and must be 0.
    319 ///
    320 #define EFI_ACPI_4_0_LOCAL_APIC_ENABLED        BIT0
    321 
    322 ///
    323 /// IO APIC Structure
    324 ///
    325 typedef struct {
    326   UINT8   Type;
    327   UINT8   Length;
    328   UINT8   IoApicId;
    329   UINT8   Reserved;
    330   UINT32  IoApicAddress;
    331   UINT32  GlobalSystemInterruptBase;
    332 } EFI_ACPI_4_0_IO_APIC_STRUCTURE;
    333 
    334 ///
    335 /// Interrupt Source Override Structure
    336 ///
    337 typedef struct {
    338   UINT8   Type;
    339   UINT8   Length;
    340   UINT8   Bus;
    341   UINT8   Source;
    342   UINT32  GlobalSystemInterrupt;
    343   UINT16  Flags;
    344 } EFI_ACPI_4_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
    345 
    346 ///
    347 /// Platform Interrupt Sources Structure Definition
    348 ///
    349 typedef struct {
    350   UINT8   Type;
    351   UINT8   Length;
    352   UINT16  Flags;
    353   UINT8   InterruptType;
    354   UINT8   ProcessorId;
    355   UINT8   ProcessorEid;
    356   UINT8   IoSapicVector;
    357   UINT32  GlobalSystemInterrupt;
    358   UINT32  PlatformInterruptSourceFlags;
    359   UINT8   CpeiProcessorOverride;
    360   UINT8   Reserved[31];
    361 } EFI_ACPI_4_0_PLATFORM_INTERRUPT_APIC_STRUCTURE;
    362 
    363 //
    364 // MPS INTI flags.
    365 // All other bits are reserved and must be set to 0.
    366 //
    367 #define EFI_ACPI_4_0_POLARITY      (3 << 0)
    368 #define EFI_ACPI_4_0_TRIGGER_MODE  (3 << 2)
    369 
    370 ///
    371 /// Non-Maskable Interrupt Source Structure
    372 ///
    373 typedef struct {
    374   UINT8   Type;
    375   UINT8   Length;
    376   UINT16  Flags;
    377   UINT32  GlobalSystemInterrupt;
    378 } EFI_ACPI_4_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
    379 
    380 ///
    381 /// Local APIC NMI Structure
    382 ///
    383 typedef struct {
    384   UINT8   Type;
    385   UINT8   Length;
    386   UINT8   AcpiProcessorId;
    387   UINT16  Flags;
    388   UINT8   LocalApicLint;
    389 } EFI_ACPI_4_0_LOCAL_APIC_NMI_STRUCTURE;
    390 
    391 ///
    392 /// Local APIC Address Override Structure
    393 ///
    394 typedef struct {
    395   UINT8   Type;
    396   UINT8   Length;
    397   UINT16  Reserved;
    398   UINT64  LocalApicAddress;
    399 } EFI_ACPI_4_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
    400 
    401 ///
    402 /// IO SAPIC Structure
    403 ///
    404 typedef struct {
    405   UINT8   Type;
    406   UINT8   Length;
    407   UINT8   IoApicId;
    408   UINT8   Reserved;
    409   UINT32  GlobalSystemInterruptBase;
    410   UINT64  IoSapicAddress;
    411 } EFI_ACPI_4_0_IO_SAPIC_STRUCTURE;
    412 
    413 ///
    414 /// Local SAPIC Structure
    415 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
    416 ///
    417 typedef struct {
    418   UINT8   Type;
    419   UINT8   Length;
    420   UINT8   AcpiProcessorId;
    421   UINT8   LocalSapicId;
    422   UINT8   LocalSapicEid;
    423   UINT8   Reserved[3];
    424   UINT32  Flags;
    425   UINT32  ACPIProcessorUIDValue;
    426 } EFI_ACPI_4_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
    427 
    428 ///
    429 /// Platform Interrupt Sources Structure
    430 ///
    431 typedef struct {
    432   UINT8   Type;
    433   UINT8   Length;
    434   UINT16  Flags;
    435   UINT8   InterruptType;
    436   UINT8   ProcessorId;
    437   UINT8   ProcessorEid;
    438   UINT8   IoSapicVector;
    439   UINT32  GlobalSystemInterrupt;
    440   UINT32  PlatformInterruptSourceFlags;
    441 } EFI_ACPI_4_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
    442 
    443 ///
    444 /// Platform Interrupt Source Flags.
    445 /// All other bits are reserved and must be set to 0.
    446 ///
    447 #define EFI_ACPI_4_0_CPEI_PROCESSOR_OVERRIDE          BIT0
    448 
    449 ///
    450 /// Processor Local x2APIC Structure Definition
    451 ///
    452 typedef struct {
    453   UINT8   Type;
    454   UINT8   Length;
    455   UINT8   Reserved[2];
    456   UINT32  X2ApicId;
    457   UINT32  Flags;
    458   UINT32  AcpiProcessorUid;
    459 } EFI_ACPI_4_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
    460 
    461 ///
    462 /// Local x2APIC NMI Structure
    463 ///
    464 typedef struct {
    465   UINT8   Type;
    466   UINT8   Length;
    467   UINT16  Flags;
    468   UINT32  AcpiProcessorUid;
    469   UINT8   LocalX2ApicLint;
    470   UINT8   Reserved[3];
    471 } EFI_ACPI_4_0_LOCAL_X2APIC_NMI_STRUCTURE;
    472 
    473 ///
    474 /// Smart Battery Description Table (SBST)
    475 ///
    476 typedef struct {
    477   EFI_ACPI_DESCRIPTION_HEADER Header;
    478   UINT32                      WarningEnergyLevel;
    479   UINT32                      LowEnergyLevel;
    480   UINT32                      CriticalEnergyLevel;
    481 } EFI_ACPI_4_0_SMART_BATTERY_DESCRIPTION_TABLE;
    482 
    483 ///
    484 /// SBST Version (as defined in ACPI 4.0 spec.)
    485 ///
    486 #define EFI_ACPI_4_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
    487 
    488 ///
    489 /// Embedded Controller Boot Resources Table (ECDT)
    490 /// The table is followed by a null terminated ASCII string that contains
    491 /// a fully qualified reference to the name space object.
    492 ///
    493 typedef struct {
    494   EFI_ACPI_DESCRIPTION_HEADER             Header;
    495   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  EcControl;
    496   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE  EcData;
    497   UINT32                                  Uid;
    498   UINT8                                   GpeBit;
    499 } EFI_ACPI_4_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
    500 
    501 ///
    502 /// ECDT Version (as defined in ACPI 4.0 spec.)
    503 ///
    504 #define EFI_ACPI_4_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
    505 
    506 ///
    507 /// System Resource Affinity Table (SRAT.  The rest of the table
    508 /// must be defined in a platform specific manner.
    509 ///
    510 typedef struct {
    511   EFI_ACPI_DESCRIPTION_HEADER Header;
    512   UINT32                      Reserved1;  ///< Must be set to 1
    513   UINT64                      Reserved2;
    514 } EFI_ACPI_4_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
    515 
    516 ///
    517 /// SRAT Version (as defined in ACPI 4.0 spec.)
    518 ///
    519 #define EFI_ACPI_4_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
    520 
    521 //
    522 // SRAT structure types.
    523 // All other values between 0x03 an 0xFF are reserved and
    524 // will be ignored by OSPM.
    525 //
    526 #define EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
    527 #define EFI_ACPI_4_0_MEMORY_AFFINITY                      0x01
    528 #define EFI_ACPI_4_0_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
    529 
    530 ///
    531 /// Processor Local APIC/SAPIC Affinity Structure Definition
    532 ///
    533 typedef struct {
    534   UINT8   Type;
    535   UINT8   Length;
    536   UINT8   ProximityDomain7To0;
    537   UINT8   ApicId;
    538   UINT32  Flags;
    539   UINT8   LocalSapicEid;
    540   UINT8   ProximityDomain31To8[3];
    541   UINT32  ClockDomain;
    542 } EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
    543 
    544 ///
    545 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
    546 ///
    547 #define EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0)
    548 
    549 ///
    550 /// Memory Affinity Structure Definition
    551 ///
    552 typedef struct {
    553   UINT8   Type;
    554   UINT8   Length;
    555   UINT32  ProximityDomain;
    556   UINT16  Reserved1;
    557   UINT32  AddressBaseLow;
    558   UINT32  AddressBaseHigh;
    559   UINT32  LengthLow;
    560   UINT32  LengthHigh;
    561   UINT32  Reserved2;
    562   UINT32  Flags;
    563   UINT64  Reserved3;
    564 } EFI_ACPI_4_0_MEMORY_AFFINITY_STRUCTURE;
    565 
    566 //
    567 // Memory Flags.  All other bits are reserved and must be 0.
    568 //
    569 #define EFI_ACPI_4_0_MEMORY_ENABLED       (1 << 0)
    570 #define EFI_ACPI_4_0_MEMORY_HOT_PLUGGABLE (1 << 1)
    571 #define EFI_ACPI_4_0_MEMORY_NONVOLATILE   (1 << 2)
    572 
    573 ///
    574 /// Processor Local x2APIC Affinity Structure Definition
    575 ///
    576 typedef struct {
    577   UINT8   Type;
    578   UINT8   Length;
    579   UINT8   Reserved1[2];
    580   UINT32  ProximityDomain;
    581   UINT32  X2ApicId;
    582   UINT32  Flags;
    583   UINT32  ClockDomain;
    584   UINT8   Reserved2[4];
    585 } EFI_ACPI_4_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
    586 
    587 ///
    588 /// System Locality Distance Information Table (SLIT).
    589 /// The rest of the table is a matrix.
    590 ///
    591 typedef struct {
    592   EFI_ACPI_DESCRIPTION_HEADER Header;
    593   UINT64                      NumberOfSystemLocalities;
    594 } EFI_ACPI_4_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
    595 
    596 ///
    597 /// SLIT Version (as defined in ACPI 4.0 spec.)
    598 ///
    599 #define EFI_ACPI_4_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
    600 
    601 ///
    602 /// Corrected Platform Error Polling Table (CPEP)
    603 ///
    604 typedef struct {
    605   EFI_ACPI_DESCRIPTION_HEADER Header;
    606   UINT8                       Reserved[8];
    607 } EFI_ACPI_4_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
    608 
    609 ///
    610 /// CPEP Version (as defined in ACPI 4.0 spec.)
    611 ///
    612 #define EFI_ACPI_4_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION 0x01
    613 
    614 //
    615 // CPEP processor structure types.
    616 //
    617 #define EFI_ACPI_4_0_CPEP_PROCESSOR_APIC_SAPIC  0x00
    618 
    619 ///
    620 /// Corrected Platform Error Polling Processor Structure Definition
    621 ///
    622 typedef struct {
    623   UINT8   Type;
    624   UINT8   Length;
    625   UINT8   ProcessorId;
    626   UINT8   ProcessorEid;
    627   UINT32  PollingInterval;
    628 } EFI_ACPI_4_0_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
    629 
    630 ///
    631 /// Maximum System Characteristics Table (MSCT)
    632 ///
    633 typedef struct {
    634   EFI_ACPI_DESCRIPTION_HEADER Header;
    635   UINT32                      OffsetProxDomInfo;
    636   UINT32                      MaximumNumberOfProximityDomains;
    637   UINT32                      MaximumNumberOfClockDomains;
    638   UINT64                      MaximumPhysicalAddress;
    639 } EFI_ACPI_4_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
    640 
    641 ///
    642 /// MSCT Version (as defined in ACPI 4.0 spec.)
    643 ///
    644 #define EFI_ACPI_4_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION 0x01
    645 
    646 ///
    647 /// Maximum Proximity Domain Information Structure Definition
    648 ///
    649 typedef struct {
    650   UINT8   Revision;
    651   UINT8   Length;
    652   UINT32  ProximityDomainRangeLow;
    653   UINT32  ProximityDomainRangeHigh;
    654   UINT32  MaximumProcessorCapacity;
    655   UINT64  MaximumMemoryCapacity;
    656 } EFI_ACPI_4_0_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
    657 
    658 ///
    659 /// Boot Error Record Table (BERT)
    660 ///
    661 typedef struct {
    662   EFI_ACPI_DESCRIPTION_HEADER Header;
    663   UINT32                      BootErrorRegionLength;
    664   UINT64                      BootErrorRegion;
    665 } EFI_ACPI_4_0_BOOT_ERROR_RECORD_TABLE_HEADER;
    666 
    667 ///
    668 /// BERT Version (as defined in ACPI 4.0 spec.)
    669 ///
    670 #define EFI_ACPI_4_0_BOOT_ERROR_RECORD_TABLE_REVISION 0x01
    671 
    672 ///
    673 /// Boot Error Region Block Status Definition
    674 ///
    675 typedef struct {
    676   UINT32       UncorrectableErrorValid:1;
    677   UINT32       CorrectableErrorValid:1;
    678   UINT32       MultipleUncorrectableErrors:1;
    679   UINT32       MultipleCorrectableErrors:1;
    680   UINT32       ErrorDataEntryCount:10;
    681   UINT32       Reserved:18;
    682 } EFI_ACPI_4_0_ERROR_BLOCK_STATUS;
    683 
    684 ///
    685 /// Boot Error Region Definition
    686 ///
    687 typedef struct {
    688   EFI_ACPI_4_0_ERROR_BLOCK_STATUS              BlockStatus;
    689   UINT32                                       RawDataOffset;
    690   UINT32                                       RawDataLength;
    691   UINT32                                       DataLength;
    692   UINT32                                       ErrorSeverity;
    693 } EFI_ACPI_4_0_BOOT_ERROR_REGION_STRUCTURE;
    694 
    695 //
    696 // Boot Error Severity types
    697 //
    698 #define EFI_ACPI_4_0_ERROR_SEVERITY_CORRECTABLE  0x00
    699 #define EFI_ACPI_4_0_ERROR_SEVERITY_FATAL        0x01
    700 #define EFI_ACPI_4_0_ERROR_SEVERITY_CORRECTED    0x02
    701 #define EFI_ACPI_4_0_ERROR_SEVERITY_NONE         0x03
    702 
    703 ///
    704 /// Generic Error Data Entry Definition
    705 ///
    706 typedef struct {
    707   UINT8    SectionType[16];
    708   UINT32   ErrorSeverity;
    709   UINT16   Revision;
    710   UINT8    ValidationBits;
    711   UINT8    Flags;
    712   UINT32   ErrorDataLength;
    713   UINT8    FruId[16];
    714   UINT8    FruText[20];
    715 } EFI_ACPI_4_0_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
    716 
    717 ///
    718 /// Generic Error Data Entry Version (as defined in ACPI 4.0 spec.)
    719 ///
    720 #define EFI_ACPI_4_0_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0201
    721 
    722 ///
    723 /// HEST - Hardware Error Source Table
    724 ///
    725 typedef struct {
    726   EFI_ACPI_DESCRIPTION_HEADER Header;
    727   UINT32                      ErrorSourceCount;
    728 } EFI_ACPI_4_0_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
    729 
    730 ///
    731 /// HEST Version (as defined in ACPI 4.0 spec.)
    732 ///
    733 #define EFI_ACPI_4_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION 0x01
    734 
    735 //
    736 // Error Source structure types.
    737 //
    738 #define EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
    739 #define EFI_ACPI_4_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
    740 #define EFI_ACPI_4_0_IA32_ARCHITECTURE_NMI_ERROR                0x02
    741 #define EFI_ACPI_4_0_PCI_EXPRESS_ROOT_PORT_AER                  0x06
    742 #define EFI_ACPI_4_0_PCI_EXPRESS_DEVICE_AER                     0x07
    743 #define EFI_ACPI_4_0_PCI_EXPRESS_BRIDGE_AER                     0x08
    744 #define EFI_ACPI_4_0_GENERIC_HARDWARE_ERROR                     0x09
    745 
    746 //
    747 // Error Source structure flags.
    748 //
    749 #define EFI_ACPI_4_0_ERROR_SOURCE_FLAG_FIRMWARE_FIRST       (1 << 0)
    750 #define EFI_ACPI_4_0_ERROR_SOURCE_FLAG_GLOBAL               (1 << 1)
    751 
    752 ///
    753 /// IA-32 Architecture Machine Check Exception Structure Definition
    754 ///
    755 typedef struct {
    756   UINT16  Type;
    757   UINT16  SourceId;
    758   UINT8   Reserved0[2];
    759   UINT8   Flags;
    760   UINT8   Enabled;
    761   UINT32  NumberOfRecordsToPreAllocate;
    762   UINT32  MaxSectionsPerRecord;
    763   UINT64  GlobalCapabilityInitData;
    764   UINT64  GlobalControlInitData;
    765   UINT8   NumberOfHardwareBanks;
    766   UINT8   Reserved1[7];
    767 } EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
    768 
    769 ///
    770 /// IA-32 Architecture Machine Check Bank Structure Definition
    771 ///
    772 typedef struct {
    773   UINT8   BankNumber;
    774   UINT8   ClearStatusOnInitialization;
    775   UINT8   StatusDataFormat;
    776   UINT8   Reserved0;
    777   UINT32  ControlRegisterMsrAddress;
    778   UINT64  ControlInitData;
    779   UINT32  StatusRegisterMsrAddress;
    780   UINT32  AddressRegisterMsrAddress;
    781   UINT32  MiscRegisterMsrAddress;
    782 } EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
    783 
    784 ///
    785 /// IA-32 Architecture Machine Check Bank Structure MCA data format
    786 ///
    787 #define EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32      0x00
    788 #define EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64   0x01
    789 #define EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64     0x02
    790 
    791 //
    792 // Hardware Error Notification types. All other values are reserved
    793 //
    794 #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_POLLED                0x00
    795 #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT    0x01
    796 #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT       0x02
    797 #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_SCI                   0x03
    798 #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_NMI                   0x04
    799 
    800 ///
    801 /// Hardware Error Notification Configuration Write Enable Structure Definition
    802 ///
    803 typedef struct {
    804   UINT16    Type:1;
    805   UINT16    PollInterval:1;
    806   UINT16    SwitchToPollingThresholdValue:1;
    807   UINT16    SwitchToPollingThresholdWindow:1;
    808   UINT16    ErrorThresholdValue:1;
    809   UINT16    ErrorThresholdWindow:1;
    810   UINT16    Reserved:10;
    811 } EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
    812 
    813 ///
    814 /// Hardware Error Notification Structure Definition
    815 ///
    816 typedef struct {
    817   UINT8                                                                          Type;
    818   UINT8                                                                          Length;
    819   EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE  ConfigurationWriteEnable;
    820   UINT32                                                                         PollInterval;
    821   UINT32                                                                         Vector;
    822   UINT32                                                                         SwitchToPollingThresholdValue;
    823   UINT32                                                                         SwitchToPollingThresholdWindow;
    824   UINT32                                                                         ErrorThresholdValue;
    825   UINT32                                                                         ErrorThresholdWindow;
    826 } EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
    827 
    828 ///
    829 /// IA-32 Architecture Corrected Machine Check Structure Definition
    830 ///
    831 typedef struct {
    832   UINT16                                                 Type;
    833   UINT16                                                 SourceId;
    834   UINT8                                                  Reserved0[2];
    835   UINT8                                                  Flags;
    836   UINT8                                                  Enabled;
    837   UINT32                                                 NumberOfRecordsToPreAllocate;
    838   UINT32                                                 MaxSectionsPerRecord;
    839   EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
    840   UINT8                                                  NumberOfHardwareBanks;
    841   UINT8                                                  Reserved1[3];
    842 } EFI_ACPI_4_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
    843 
    844 ///
    845 /// IA-32 Architecture NMI Error Structure Definition
    846 ///
    847 typedef struct {
    848   UINT16  Type;
    849   UINT16  SourceId;
    850   UINT8   Reserved0[2];
    851   UINT32  NumberOfRecordsToPreAllocate;
    852   UINT32  MaxSectionsPerRecord;
    853   UINT32  MaxRawDataLength;
    854 } EFI_ACPI_4_0_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
    855 
    856 ///
    857 /// PCI Express Root Port AER Structure Definition
    858 ///
    859 typedef struct {
    860   UINT16  Type;
    861   UINT16  SourceId;
    862   UINT8   Reserved0[2];
    863   UINT8   Flags;
    864   UINT8   Enabled;
    865   UINT32  NumberOfRecordsToPreAllocate;
    866   UINT32  MaxSectionsPerRecord;
    867   UINT32  Bus;
    868   UINT16  Device;
    869   UINT16  Function;
    870   UINT16  DeviceControl;
    871   UINT8   Reserved1[2];
    872   UINT32  UncorrectableErrorMask;
    873   UINT32  UncorrectableErrorSeverity;
    874   UINT32  CorrectableErrorMask;
    875   UINT32  AdvancedErrorCapabilitiesAndControl;
    876   UINT32  RootErrorCommand;
    877 } EFI_ACPI_4_0_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
    878 
    879 ///
    880 /// PCI Express Device AER Structure Definition
    881 ///
    882 typedef struct {
    883   UINT16  Type;
    884   UINT16  SourceId;
    885   UINT8   Reserved0[2];
    886   UINT8   Flags;
    887   UINT8   Enabled;
    888   UINT32  NumberOfRecordsToPreAllocate;
    889   UINT32  MaxSectionsPerRecord;
    890   UINT32  Bus;
    891   UINT16  Device;
    892   UINT16  Function;
    893   UINT16  DeviceControl;
    894   UINT8   Reserved1[2];
    895   UINT32  UncorrectableErrorMask;
    896   UINT32  UncorrectableErrorSeverity;
    897   UINT32  CorrectableErrorMask;
    898   UINT32  AdvancedErrorCapabilitiesAndControl;
    899 } EFI_ACPI_4_0_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
    900 
    901 ///
    902 /// PCI Express Bridge AER Structure Definition
    903 ///
    904 typedef struct {
    905   UINT16  Type;
    906   UINT16  SourceId;
    907   UINT8   Reserved0[2];
    908   UINT8   Flags;
    909   UINT8   Enabled;
    910   UINT32  NumberOfRecordsToPreAllocate;
    911   UINT32  MaxSectionsPerRecord;
    912   UINT32  Bus;
    913   UINT16  Device;
    914   UINT16  Function;
    915   UINT16  DeviceControl;
    916   UINT8   Reserved1[2];
    917   UINT32  UncorrectableErrorMask;
    918   UINT32  UncorrectableErrorSeverity;
    919   UINT32  CorrectableErrorMask;
    920   UINT32  AdvancedErrorCapabilitiesAndControl;
    921   UINT32  SecondaryUncorrectableErrorMask;
    922   UINT32  SecondaryUncorrectableErrorSeverity;
    923   UINT32  SecondaryAdvancedErrorCapabilitiesAndControl;
    924 } EFI_ACPI_4_0_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
    925 
    926 ///
    927 /// Generic Hardware Error Source Structure Definition
    928 ///
    929 typedef struct {
    930   UINT16                                                 Type;
    931   UINT16                                                 SourceId;
    932   UINT16                                                 RelatedSourceId;
    933   UINT8                                                  Flags;
    934   UINT8                                                  Enabled;
    935   UINT32                                                 NumberOfRecordsToPreAllocate;
    936   UINT32                                                 MaxSectionsPerRecord;
    937   UINT32                                                 MaxRawDataLength;
    938   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE                 ErrorStatusAddress;
    939   EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
    940   UINT32                                                 ErrorStatusBlockLength;
    941 } EFI_ACPI_4_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
    942 
    943 ///
    944 /// Generic Error Status Definition
    945 ///
    946 typedef struct {
    947   EFI_ACPI_4_0_ERROR_BLOCK_STATUS              BlockStatus;
    948   UINT32                                       RawDataOffset;
    949   UINT32                                       RawDataLength;
    950   UINT32                                       DataLength;
    951   UINT32                                       ErrorSeverity;
    952 } EFI_ACPI_4_0_GENERIC_ERROR_STATUS_STRUCTURE;
    953 
    954 ///
    955 /// ERST - Error Record Serialization Table
    956 ///
    957 typedef struct {
    958   EFI_ACPI_DESCRIPTION_HEADER Header;
    959   UINT32                      SerializationHeaderSize;
    960   UINT8                       Reserved0[4];
    961   UINT32                      InstructionEntryCount;
    962 } EFI_ACPI_4_0_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
    963 
    964 ///
    965 /// ERST Version (as defined in ACPI 4.0 spec.)
    966 ///
    967 #define EFI_ACPI_4_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION 0x01
    968 
    969 ///
    970 /// ERST Serialization Actions
    971 ///
    972 #define EFI_ACPI_4_0_ERST_BEGIN_WRITE_OPERATION                    0x00
    973 #define EFI_ACPI_4_0_ERST_BEGIN_READ_OPERATION                     0x01
    974 #define EFI_ACPI_4_0_ERST_BEGIN_CLEAR_OPERATION                    0x02
    975 #define EFI_ACPI_4_0_ERST_END_OPERATION                            0x03
    976 #define EFI_ACPI_4_0_ERST_SET_RECORD_OFFSET                        0x04
    977 #define EFI_ACPI_4_0_ERST_EXECUTE_OPERATION                        0x05
    978 #define EFI_ACPI_4_0_ERST_CHECK_BUSY_STATUS                        0x06
    979 #define EFI_ACPI_4_0_ERST_GET_COMMAND_STATUS                       0x07
    980 #define EFI_ACPI_4_0_ERST_GET_RECORD_IDENTIFIER                    0x08
    981 #define EFI_ACPI_4_0_ERST_SET_RECORD_IDENTIFIER                    0x09
    982 #define EFI_ACPI_4_0_ERST_GET_RECORD_COUNT                         0x0A
    983 #define EFI_ACPI_4_0_ERST_BEGIN_DUMMY_WRITE_OPERATION              0x0B
    984 #define EFI_ACPI_4_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE              0x0D
    985 #define EFI_ACPI_4_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH       0x0E
    986 #define EFI_ACPI_4_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES   0x0F
    987 
    988 ///
    989 /// ERST Action Command Status
    990 ///
    991 #define EFI_ACPI_4_0_EINJ_STATUS_SUCCESS                           0x00
    992 #define EFI_ACPI_4_0_EINJ_STATUS_NOT_ENOUGH_SPACE                  0x01
    993 #define EFI_ACPI_4_0_EINJ_STATUS_HARDWARE_NOT_AVAILABLE            0x02
    994 #define EFI_ACPI_4_0_EINJ_STATUS_FAILED                            0x03
    995 #define EFI_ACPI_4_0_EINJ_STATUS_RECORD_STORE_EMPTY                0x04
    996 #define EFI_ACPI_4_0_EINJ_STATUS_RECORD_NOT_FOUND                  0x05
    997 
    998 ///
    999 /// ERST Serialization Instructions
   1000 ///
   1001 #define EFI_ACPI_4_0_ERST_READ_REGISTER                            0x00
   1002 #define EFI_ACPI_4_0_ERST_READ_REGISTER_VALUE                      0x01
   1003 #define EFI_ACPI_4_0_ERST_WRITE_REGISTER                           0x02
   1004 #define EFI_ACPI_4_0_ERST_WRITE_REGISTER_VALUE                     0x03
   1005 #define EFI_ACPI_4_0_ERST_NOOP                                     0x04
   1006 #define EFI_ACPI_4_0_ERST_LOAD_VAR1                                0x05
   1007 #define EFI_ACPI_4_0_ERST_LOAD_VAR2                                0x06
   1008 #define EFI_ACPI_4_0_ERST_STORE_VAR1                               0x07
   1009 #define EFI_ACPI_4_0_ERST_ADD                                      0x08
   1010 #define EFI_ACPI_4_0_ERST_SUBTRACT                                 0x09
   1011 #define EFI_ACPI_4_0_ERST_ADD_VALUE                                0x0A
   1012 #define EFI_ACPI_4_0_ERST_SUBTRACT_VALUE                           0x0B
   1013 #define EFI_ACPI_4_0_ERST_STALL                                    0x0C
   1014 #define EFI_ACPI_4_0_ERST_STALL_WHILE_TRUE                         0x0D
   1015 #define EFI_ACPI_4_0_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE            0x0E
   1016 #define EFI_ACPI_4_0_ERST_GOTO                                     0x0F
   1017 #define EFI_ACPI_4_0_ERST_SET_SRC_ADDRESS_BASE                     0x10
   1018 #define EFI_ACPI_4_0_ERST_SET_DST_ADDRESS_BASE                     0x11
   1019 #define EFI_ACPI_4_0_ERST_MOVE_DATA                                0x12
   1020 
   1021 ///
   1022 /// ERST Instruction Flags
   1023 ///
   1024 #define EFI_ACPI_4_0_ERST_PRESERVE_REGISTER                        0x01
   1025 
   1026 ///
   1027 /// ERST Serialization Instruction Entry
   1028 ///
   1029 typedef struct {
   1030   UINT8                                    SerializationAction;
   1031   UINT8                                    Instruction;
   1032   UINT8                                    Flags;
   1033   UINT8                                    Reserved0;
   1034   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
   1035   UINT64                                   Value;
   1036   UINT64                                   Mask;
   1037 } EFI_ACPI_4_0_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
   1038 
   1039 ///
   1040 /// EINJ - Error Injection Table
   1041 ///
   1042 typedef struct {
   1043   EFI_ACPI_DESCRIPTION_HEADER Header;
   1044   UINT32                      InjectionHeaderSize;
   1045   UINT8                       InjectionFlags;
   1046   UINT8                       Reserved0[3];
   1047   UINT32                      InjectionEntryCount;
   1048 } EFI_ACPI_4_0_ERROR_INJECTION_TABLE_HEADER;
   1049 
   1050 ///
   1051 /// EINJ Version (as defined in ACPI 4.0 spec.)
   1052 ///
   1053 #define EFI_ACPI_4_0_ERROR_INJECTION_TABLE_REVISION 0x01
   1054 
   1055 ///
   1056 /// EINJ Error Injection Actions
   1057 ///
   1058 #define EFI_ACPI_4_0_EINJ_BEGIN_INJECTION_OPERATION                0x00
   1059 #define EFI_ACPI_4_0_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE           0x01
   1060 #define EFI_ACPI_4_0_EINJ_SET_ERROR_TYPE                           0x02
   1061 #define EFI_ACPI_4_0_EINJ_GET_ERROR_TYPE                           0x03
   1062 #define EFI_ACPI_4_0_EINJ_END_OPERATION                            0x04
   1063 #define EFI_ACPI_4_0_EINJ_EXECUTE_OPERATION                        0x05
   1064 #define EFI_ACPI_4_0_EINJ_CHECK_BUSY_STATUS                        0x06
   1065 #define EFI_ACPI_4_0_EINJ_GET_COMMAND_STATUS                       0x07
   1066 #define EFI_ACPI_4_0_EINJ_TRIGGER_ERROR                            0xFF
   1067 
   1068 ///
   1069 /// EINJ Action Command Status
   1070 ///
   1071 #define EFI_ACPI_4_0_EINJ_STATUS_SUCCESS                           0x00
   1072 #define EFI_ACPI_4_0_EINJ_STATUS_UNKNOWN_FAILURE                   0x01
   1073 #define EFI_ACPI_4_0_EINJ_STATUS_INVALID_ACCESS                    0x02
   1074 
   1075 ///
   1076 /// EINJ Error Type Definition
   1077 ///
   1078 #define EFI_ACPI_4_0_EINJ_ERROR_PROCESSOR_CORRECTABLE                 (1 << 0)
   1079 #define EFI_ACPI_4_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL      (1 << 1)
   1080 #define EFI_ACPI_4_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL         (1 << 2)
   1081 #define EFI_ACPI_4_0_EINJ_ERROR_MEMORY_CORRECTABLE                    (1 << 3)
   1082 #define EFI_ACPI_4_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL         (1 << 4)
   1083 #define EFI_ACPI_4_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL            (1 << 5)
   1084 #define EFI_ACPI_4_0_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE               (1 << 6)
   1085 #define EFI_ACPI_4_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL    (1 << 7)
   1086 #define EFI_ACPI_4_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL       (1 << 8)
   1087 #define EFI_ACPI_4_0_EINJ_ERROR_PLATFORM_CORRECTABLE                  (1 << 9)
   1088 #define EFI_ACPI_4_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL       (1 << 10)
   1089 #define EFI_ACPI_4_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL          (1 << 11)
   1090 
   1091 ///
   1092 /// EINJ Injection Instructions
   1093 ///
   1094 #define EFI_ACPI_4_0_EINJ_READ_REGISTER                            0x00
   1095 #define EFI_ACPI_4_0_EINJ_READ_REGISTER_VALUE                      0x01
   1096 #define EFI_ACPI_4_0_EINJ_WRITE_REGISTER                           0x02
   1097 #define EFI_ACPI_4_0_EINJ_WRITE_REGISTER_VALUE                     0x03
   1098 #define EFI_ACPI_4_0_EINJ_NOOP                                     0x04
   1099 
   1100 ///
   1101 /// EINJ Instruction Flags
   1102 ///
   1103 #define EFI_ACPI_4_0_EINJ_PRESERVE_REGISTER                        0x01
   1104 
   1105 ///
   1106 /// EINJ Injection Instruction Entry
   1107 ///
   1108 typedef struct {
   1109   UINT8                                    InjectionAction;
   1110   UINT8                                    Instruction;
   1111   UINT8                                    Flags;
   1112   UINT8                                    Reserved0;
   1113   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
   1114   UINT64                                   Value;
   1115   UINT64                                   Mask;
   1116 } EFI_ACPI_4_0_EINJ_INJECTION_INSTRUCTION_ENTRY;
   1117 
   1118 ///
   1119 /// EINJ Trigger Action Table
   1120 ///
   1121 typedef struct {
   1122   UINT32  HeaderSize;
   1123   UINT32  Revision;
   1124   UINT32  TableSize;
   1125   UINT32  EntryCount;
   1126 } EFI_ACPI_4_0_EINJ_TRIGGER_ACTION_TABLE;
   1127 
   1128 //
   1129 // Known table signatures
   1130 //
   1131 
   1132 ///
   1133 /// "RSD PTR " Root System Description Pointer
   1134 ///
   1135 #define EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
   1136 
   1137 ///
   1138 /// "APIC" Multiple APIC Description Table
   1139 ///
   1140 #define EFI_ACPI_4_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
   1141 
   1142 ///
   1143 /// "BERT" Boot Error Record Table
   1144 ///
   1145 #define EFI_ACPI_4_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
   1146 
   1147 ///
   1148 /// "CPEP" Corrected Platform Error Polling Table
   1149 ///
   1150 #define EFI_ACPI_4_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
   1151 
   1152 ///
   1153 /// "DSDT" Differentiated System Description Table
   1154 ///
   1155 #define EFI_ACPI_4_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
   1156 
   1157 ///
   1158 /// "ECDT" Embedded Controller Boot Resources Table
   1159 ///
   1160 #define EFI_ACPI_4_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
   1161 
   1162 ///
   1163 /// "EINJ" Error Injection Table
   1164 ///
   1165 #define EFI_ACPI_4_0_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
   1166 
   1167 ///
   1168 /// "ERST" Error Record Serialization Table
   1169 ///
   1170 #define EFI_ACPI_4_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
   1171 
   1172 ///
   1173 /// "FACP" Fixed ACPI Description Table
   1174 ///
   1175 #define EFI_ACPI_4_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
   1176 
   1177 ///
   1178 /// "FACS" Firmware ACPI Control Structure
   1179 ///
   1180 #define EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
   1181 
   1182 ///
   1183 /// "HEST" Hardware Error Source Table
   1184 ///
   1185 #define EFI_ACPI_4_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
   1186 
   1187 ///
   1188 /// "MSCT" Maximum System Characteristics Table
   1189 ///
   1190 #define EFI_ACPI_4_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
   1191 
   1192 ///
   1193 /// "PSDT" Persistent System Description Table
   1194 ///
   1195 #define EFI_ACPI_4_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
   1196 
   1197 ///
   1198 /// "RSDT" Root System Description Table
   1199 ///
   1200 #define EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
   1201 
   1202 ///
   1203 /// "SBST" Smart Battery Specification Table
   1204 ///
   1205 #define EFI_ACPI_4_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
   1206 
   1207 ///
   1208 /// "SLIT" System Locality Information Table
   1209 ///
   1210 #define EFI_ACPI_4_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
   1211 
   1212 ///
   1213 /// "SRAT" System Resource Affinity Table
   1214 ///
   1215 #define EFI_ACPI_4_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
   1216 
   1217 ///
   1218 /// "SSDT" Secondary System Description Table
   1219 ///
   1220 #define EFI_ACPI_4_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
   1221 
   1222 ///
   1223 /// "XSDT" Extended System Description Table
   1224 ///
   1225 #define EFI_ACPI_4_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
   1226 
   1227 ///
   1228 /// "BOOT" MS Simple Boot Spec
   1229 ///
   1230 #define EFI_ACPI_4_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
   1231 
   1232 ///
   1233 /// "DBGP" MS Debug Port Spec
   1234 ///
   1235 #define EFI_ACPI_4_0_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
   1236 
   1237 ///
   1238 /// "DMAR" DMA Remapping Table
   1239 ///
   1240 #define EFI_ACPI_4_0_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
   1241 
   1242 ///
   1243 /// "ETDT" Event Timer Description Table
   1244 ///
   1245 #define EFI_ACPI_4_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
   1246 
   1247 ///
   1248 /// "HPET" IA-PC High Precision Event Timer Table
   1249 ///
   1250 #define EFI_ACPI_4_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
   1251 
   1252 ///
   1253 /// "iBFT" iSCSI Boot Firmware Table
   1254 ///
   1255 #define EFI_ACPI_4_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
   1256 
   1257 ///
   1258 /// "IVRS" I/O Virtualization Reporting Structure
   1259 ///
   1260 #define EFI_ACPI_4_0_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
   1261 
   1262 ///
   1263 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
   1264 ///
   1265 #define EFI_ACPI_4_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
   1266 
   1267 ///
   1268 /// "MCHI" Management Controller Host Interface Table
   1269 ///
   1270 #define EFI_ACPI_4_0_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
   1271 
   1272 ///
   1273 /// "SPCR" Serial Port Concole Redirection Table
   1274 ///
   1275 #define EFI_ACPI_4_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
   1276 
   1277 ///
   1278 /// "SPMI" Server Platform Management Interface Table
   1279 ///
   1280 #define EFI_ACPI_4_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
   1281 
   1282 ///
   1283 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
   1284 ///
   1285 #define EFI_ACPI_4_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
   1286 
   1287 ///
   1288 /// "UEFI" UEFI ACPI Data Table
   1289 ///
   1290 #define EFI_ACPI_4_0_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
   1291 
   1292 ///
   1293 /// "WAET" Windows ACPI Enlightenment Table
   1294 ///
   1295 #define EFI_ACPI_4_0_WINDOWS_ACPI_ENLIGHTENMENT_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
   1296 
   1297 ///
   1298 /// "WDAT" Watchdog Action Table
   1299 ///
   1300 #define EFI_ACPI_4_0_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
   1301 
   1302 ///
   1303 /// "WDRT" Watchdog Resource Table
   1304 ///
   1305 #define EFI_ACPI_4_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
   1306 
   1307 #pragma pack()
   1308 
   1309 #endif
   1310