Home | History | Annotate | Download | only in IndustryStandard
      1 /** @file
      2   ACPI 3.0 definitions from the ACPI Specification Revision 3.0b October 10, 2006
      3 
      4   Copyright (c) 2006 - 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_3_0_H_
     15 #define _ACPI_3_0_H_
     16 
     17 #include <IndustryStandard/Acpi20.h>
     18 
     19 //
     20 // Define for Desriptor
     21 //
     22 #define ACPI_LARGE_EXTENDED_ADDRESS_SPACE_DESCRIPTOR_NAME    0x0B
     23 
     24 #define ACPI_EXTENDED_ADDRESS_SPACE_DESCRIPTOR    0x8B
     25 
     26 //
     27 // Ensure proper structure formats
     28 //
     29 #pragma pack(1)
     30 
     31 ///
     32 /// Extended Address Space Descriptor
     33 ///
     34 typedef PACKED struct {
     35   ACPI_LARGE_RESOURCE_HEADER    Header;
     36   UINT8                         ResType;
     37   UINT8                         GenFlag;
     38   UINT8                         SpecificFlag;
     39   UINT8                         RevisionId;
     40   UINT8                         Reserved;
     41   UINT64                        AddrSpaceGranularity;
     42   UINT64                        AddrRangeMin;
     43   UINT64                        AddrRangeMax;
     44   UINT64                        AddrTranslationOffset;
     45   UINT64                        AddrLen;
     46   UINT64                        TypeSpecificAttribute;
     47 } EFI_ACPI_EXTENDED_ADDRESS_SPACE_DESCRIPTOR;
     48 
     49 #pragma pack()
     50 
     51 //
     52 // Memory Type Specific Flags
     53 //
     54 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_UC  0x0000000000000001
     55 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_WC  0x0000000000000002
     56 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_WT  0x0000000000000004
     57 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_WB  0x0000000000000008
     58 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_UCE 0x0000000000000010
     59 #define EFI_ACPI_MEMORY_TYPE_SPECIFIC_ATTRIBUTES_NV  0x0000000000008000
     60 
     61 //
     62 // Ensure proper structure formats
     63 //
     64 #pragma pack(1)
     65 
     66 ///
     67 /// ACPI 3.0 Generic Address Space definition
     68 ///
     69 typedef struct {
     70   UINT8   AddressSpaceId;
     71   UINT8   RegisterBitWidth;
     72   UINT8   RegisterBitOffset;
     73   UINT8   AccessSize;
     74   UINT64  Address;
     75 } EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE;
     76 
     77 //
     78 // Generic Address Space Address IDs
     79 //
     80 #define EFI_ACPI_3_0_SYSTEM_MEMORY              0
     81 #define EFI_ACPI_3_0_SYSTEM_IO                  1
     82 #define EFI_ACPI_3_0_PCI_CONFIGURATION_SPACE    2
     83 #define EFI_ACPI_3_0_EMBEDDED_CONTROLLER        3
     84 #define EFI_ACPI_3_0_SMBUS                      4
     85 #define EFI_ACPI_3_0_FUNCTIONAL_FIXED_HARDWARE  0x7F
     86 
     87 //
     88 // Generic Address Space Access Sizes
     89 //
     90 #define EFI_ACPI_3_0_UNDEFINED  0
     91 #define EFI_ACPI_3_0_BYTE       1
     92 #define EFI_ACPI_3_0_WORD       2
     93 #define EFI_ACPI_3_0_DWORD      3
     94 #define EFI_ACPI_3_0_QWORD      4
     95 
     96 //
     97 // ACPI 3.0 table structures
     98 //
     99 
    100 ///
    101 /// Root System Description Pointer Structure
    102 ///
    103 typedef struct {
    104   UINT64  Signature;
    105   UINT8   Checksum;
    106   UINT8   OemId[6];
    107   UINT8   Revision;
    108   UINT32  RsdtAddress;
    109   UINT32  Length;
    110   UINT64  XsdtAddress;
    111   UINT8   ExtendedChecksum;
    112   UINT8   Reserved[3];
    113 } EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
    114 
    115 ///
    116 /// RSD_PTR Revision (as defined in ACPI 3.0b spec.)
    117 ///
    118 #define EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02  ///< ACPISpec (Revision 3.0b) says current value is 2
    119 
    120 ///
    121 /// Common table header, this prefaces all ACPI tables, including FACS, but
    122 /// excluding the RSD PTR structure
    123 ///
    124 typedef struct {
    125   UINT32  Signature;
    126   UINT32  Length;
    127 } EFI_ACPI_3_0_COMMON_HEADER;
    128 
    129 //
    130 // Root System Description Table
    131 // No definition needed as it is a common description table header, the same with
    132 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
    133 //
    134 
    135 ///
    136 /// RSDT Revision (as defined in ACPI 3.0 spec.)
    137 ///
    138 #define EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
    139 
    140 //
    141 // Extended System Description Table
    142 // No definition needed as it is a common description table header, the same with
    143 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
    144 //
    145 
    146 ///
    147 /// XSDT Revision (as defined in ACPI 3.0 spec.)
    148 ///
    149 #define EFI_ACPI_3_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
    150 
    151 ///
    152 /// Fixed ACPI Description Table Structure (FADT)
    153 ///
    154 typedef struct {
    155   EFI_ACPI_DESCRIPTION_HEADER             Header;
    156   UINT32                                  FirmwareCtrl;
    157   UINT32                                  Dsdt;
    158   UINT8                                   Reserved0;
    159   UINT8                                   PreferredPmProfile;
    160   UINT16                                  SciInt;
    161   UINT32                                  SmiCmd;
    162   UINT8                                   AcpiEnable;
    163   UINT8                                   AcpiDisable;
    164   UINT8                                   S4BiosReq;
    165   UINT8                                   PstateCnt;
    166   UINT32                                  Pm1aEvtBlk;
    167   UINT32                                  Pm1bEvtBlk;
    168   UINT32                                  Pm1aCntBlk;
    169   UINT32                                  Pm1bCntBlk;
    170   UINT32                                  Pm2CntBlk;
    171   UINT32                                  PmTmrBlk;
    172   UINT32                                  Gpe0Blk;
    173   UINT32                                  Gpe1Blk;
    174   UINT8                                   Pm1EvtLen;
    175   UINT8                                   Pm1CntLen;
    176   UINT8                                   Pm2CntLen;
    177   UINT8                                   PmTmrLen;
    178   UINT8                                   Gpe0BlkLen;
    179   UINT8                                   Gpe1BlkLen;
    180   UINT8                                   Gpe1Base;
    181   UINT8                                   CstCnt;
    182   UINT16                                  PLvl2Lat;
    183   UINT16                                  PLvl3Lat;
    184   UINT16                                  FlushSize;
    185   UINT16                                  FlushStride;
    186   UINT8                                   DutyOffset;
    187   UINT8                                   DutyWidth;
    188   UINT8                                   DayAlrm;
    189   UINT8                                   MonAlrm;
    190   UINT8                                   Century;
    191   UINT16                                  IaPcBootArch;
    192   UINT8                                   Reserved1;
    193   UINT32                                  Flags;
    194   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  ResetReg;
    195   UINT8                                   ResetValue;
    196   UINT8                                   Reserved2[3];
    197   UINT64                                  XFirmwareCtrl;
    198   UINT64                                  XDsdt;
    199   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk;
    200   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk;
    201   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk;
    202   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk;
    203   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk;
    204   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk;
    205   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk;
    206   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk;
    207 } EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE;
    208 
    209 ///
    210 /// FADT Version (as defined in ACPI 3.0 spec.)
    211 ///
    212 #define EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x04
    213 
    214 //
    215 // Fixed ACPI Description Table Preferred Power Management Profile
    216 //
    217 #define EFI_ACPI_3_0_PM_PROFILE_UNSPECIFIED         0
    218 #define EFI_ACPI_3_0_PM_PROFILE_DESKTOP             1
    219 #define EFI_ACPI_3_0_PM_PROFILE_MOBILE              2
    220 #define EFI_ACPI_3_0_PM_PROFILE_WORKSTATION         3
    221 #define EFI_ACPI_3_0_PM_PROFILE_ENTERPRISE_SERVER   4
    222 #define EFI_ACPI_3_0_PM_PROFILE_SOHO_SERVER         5
    223 #define EFI_ACPI_3_0_PM_PROFILE_APPLIANCE_PC        6
    224 #define EFI_ACPI_3_0_PM_PROFILE_PERFORMANCE_SERVER  7
    225 
    226 //
    227 // Fixed ACPI Description Table Boot Architecture Flags
    228 // All other bits are reserved and must be set to 0.
    229 //
    230 #define EFI_ACPI_3_0_LEGACY_DEVICES              BIT0
    231 #define EFI_ACPI_3_0_8042                        BIT1
    232 #define EFI_ACPI_3_0_VGA_NOT_PRESENT             BIT2
    233 #define EFI_ACPI_3_0_MSI_NOT_SUPPORTED           BIT3
    234 #define EFI_ACPI_3_0_PCIE_ASPM_CONTROLS          BIT4
    235 
    236 //
    237 // Fixed ACPI Description Table Fixed Feature Flags
    238 // All other bits are reserved and must be set to 0.
    239 //
    240 #define EFI_ACPI_3_0_WBINVD                                 BIT0
    241 #define EFI_ACPI_3_0_WBINVD_FLUSH                           BIT1
    242 #define EFI_ACPI_3_0_PROC_C1                                BIT2
    243 #define EFI_ACPI_3_0_P_LVL2_UP                              BIT3
    244 #define EFI_ACPI_3_0_PWR_BUTTON                             BIT4
    245 #define EFI_ACPI_3_0_SLP_BUTTON                             BIT5
    246 #define EFI_ACPI_3_0_FIX_RTC                                BIT6
    247 #define EFI_ACPI_3_0_RTC_S4                                 BIT7
    248 #define EFI_ACPI_3_0_TMR_VAL_EXT                            BIT8
    249 #define EFI_ACPI_3_0_DCK_CAP                                BIT9
    250 #define EFI_ACPI_3_0_RESET_REG_SUP                          BIT10
    251 #define EFI_ACPI_3_0_SEALED_CASE                            BIT11
    252 #define EFI_ACPI_3_0_HEADLESS                               BIT12
    253 #define EFI_ACPI_3_0_CPU_SW_SLP                             BIT13
    254 #define EFI_ACPI_3_0_PCI_EXP_WAK                            BIT14
    255 #define EFI_ACPI_3_0_USE_PLATFORM_CLOCK                     BIT15
    256 #define EFI_ACPI_3_0_S4_RTC_STS_VALID                       BIT16
    257 #define EFI_ACPI_3_0_REMOTE_POWER_ON_CAPABLE                BIT17
    258 #define EFI_ACPI_3_0_FORCE_APIC_CLUSTER_MODEL               BIT18
    259 #define EFI_ACPI_3_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE   BIT19
    260 
    261 ///
    262 /// Firmware ACPI Control Structure
    263 ///
    264 typedef struct {
    265   UINT32  Signature;
    266   UINT32  Length;
    267   UINT32  HardwareSignature;
    268   UINT32  FirmwareWakingVector;
    269   UINT32  GlobalLock;
    270   UINT32  Flags;
    271   UINT64  XFirmwareWakingVector;
    272   UINT8   Version;
    273   UINT8   Reserved[31];
    274 } EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
    275 
    276 ///
    277 /// FACS Version (as defined in ACPI 3.0 spec.)
    278 ///
    279 #define EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x01
    280 
    281 ///
    282 /// Firmware Control Structure Feature Flags
    283 /// All other bits are reserved and must be set to 0.
    284 ///
    285 #define EFI_ACPI_3_0_S4BIOS_F       BIT0
    286 
    287 //
    288 // Differentiated System Description Table,
    289 // Secondary System Description Table
    290 // and Persistent System Description Table,
    291 // no definition needed as they are common description table header, the same with
    292 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
    293 //
    294 #define EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION   0x02
    295 #define EFI_ACPI_3_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION        0x02
    296 
    297 ///
    298 /// Multiple APIC Description Table header definition.  The rest of the table
    299 /// must be defined in a platform specific manner.
    300 ///
    301 typedef struct {
    302   EFI_ACPI_DESCRIPTION_HEADER Header;
    303   UINT32                      LocalApicAddress;
    304   UINT32                      Flags;
    305 } EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
    306 
    307 ///
    308 /// MADT Revision (as defined in ACPI 3.0 spec.)
    309 ///
    310 #define EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x02
    311 
    312 ///
    313 /// Multiple APIC Flags
    314 /// All other bits are reserved and must be set to 0.
    315 ///
    316 #define EFI_ACPI_3_0_PCAT_COMPAT         BIT0
    317 
    318 //
    319 // Multiple APIC Description Table APIC structure types
    320 // All other values between 0x09 an 0xFF are reserved and
    321 // will be ignored by OSPM.
    322 //
    323 #define EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC           0x00
    324 #define EFI_ACPI_3_0_IO_APIC                        0x01
    325 #define EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE      0x02
    326 #define EFI_ACPI_3_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
    327 #define EFI_ACPI_3_0_LOCAL_APIC_NMI                 0x04
    328 #define EFI_ACPI_3_0_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
    329 #define EFI_ACPI_3_0_IO_SAPIC                       0x06
    330 #define EFI_ACPI_3_0_LOCAL_SAPIC                    0x07
    331 #define EFI_ACPI_3_0_PLATFORM_INTERRUPT_SOURCES     0x08
    332 
    333 //
    334 // APIC Structure Definitions
    335 //
    336 
    337 ///
    338 /// Processor Local APIC Structure Definition
    339 ///
    340 typedef struct {
    341   UINT8   Type;
    342   UINT8   Length;
    343   UINT8   AcpiProcessorId;
    344   UINT8   ApicId;
    345   UINT32  Flags;
    346 } EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
    347 
    348 ///
    349 /// Local APIC Flags.  All other bits are reserved and must be 0.
    350 ///
    351 #define EFI_ACPI_3_0_LOCAL_APIC_ENABLED        BIT0
    352 
    353 ///
    354 /// IO APIC Structure
    355 ///
    356 typedef struct {
    357   UINT8   Type;
    358   UINT8   Length;
    359   UINT8   IoApicId;
    360   UINT8   Reserved;
    361   UINT32  IoApicAddress;
    362   UINT32  GlobalSystemInterruptBase;
    363 } EFI_ACPI_3_0_IO_APIC_STRUCTURE;
    364 
    365 ///
    366 /// Interrupt Source Override Structure
    367 ///
    368 typedef struct {
    369   UINT8   Type;
    370   UINT8   Length;
    371   UINT8   Bus;
    372   UINT8   Source;
    373   UINT32  GlobalSystemInterrupt;
    374   UINT16  Flags;
    375 } EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
    376 
    377 ///
    378 /// Platform Interrupt Sources Structure Definition
    379 ///
    380 typedef struct {
    381   UINT8   Type;
    382   UINT8   Length;
    383   UINT16  Flags;
    384   UINT8   InterruptType;
    385   UINT8   ProcessorId;
    386   UINT8   ProcessorEid;
    387   UINT8   IoSapicVector;
    388   UINT32  GlobalSystemInterrupt;
    389   UINT32  PlatformInterruptSourceFlags;
    390   UINT8   CpeiProcessorOverride;
    391   UINT8   Reserved[31];
    392 } EFI_ACPI_3_0_PLATFORM_INTERRUPT_APIC_STRUCTURE;
    393 
    394 //
    395 // MPS INTI flags.
    396 // All other bits are reserved and must be set to 0.
    397 //
    398 #define EFI_ACPI_3_0_POLARITY      (3 << 0)
    399 #define EFI_ACPI_3_0_TRIGGER_MODE  (3 << 2)
    400 
    401 ///
    402 /// Non-Maskable Interrupt Source Structure
    403 ///
    404 typedef struct {
    405   UINT8   Type;
    406   UINT8   Length;
    407   UINT16  Flags;
    408   UINT32  GlobalSystemInterrupt;
    409 } EFI_ACPI_3_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
    410 
    411 ///
    412 /// Local APIC NMI Structure
    413 ///
    414 typedef struct {
    415   UINT8   Type;
    416   UINT8   Length;
    417   UINT8   AcpiProcessorId;
    418   UINT16  Flags;
    419   UINT8   LocalApicLint;
    420 } EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE;
    421 
    422 ///
    423 /// Local APIC Address Override Structure
    424 ///
    425 typedef struct {
    426   UINT8   Type;
    427   UINT8   Length;
    428   UINT16  Reserved;
    429   UINT64  LocalApicAddress;
    430 } EFI_ACPI_3_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
    431 
    432 ///
    433 /// IO SAPIC Structure
    434 ///
    435 typedef struct {
    436   UINT8   Type;
    437   UINT8   Length;
    438   UINT8   IoApicId;
    439   UINT8   Reserved;
    440   UINT32  GlobalSystemInterruptBase;
    441   UINT64  IoSapicAddress;
    442 } EFI_ACPI_3_0_IO_SAPIC_STRUCTURE;
    443 
    444 ///
    445 /// Local SAPIC Structure
    446 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
    447 ///
    448 typedef struct {
    449   UINT8   Type;
    450   UINT8   Length;
    451   UINT8   AcpiProcessorId;
    452   UINT8   LocalSapicId;
    453   UINT8   LocalSapicEid;
    454   UINT8   Reserved[3];
    455   UINT32  Flags;
    456   UINT32  ACPIProcessorUIDValue;
    457 } EFI_ACPI_3_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
    458 
    459 ///
    460 /// Platform Interrupt Sources Structure
    461 ///
    462 typedef struct {
    463   UINT8   Type;
    464   UINT8   Length;
    465   UINT16  Flags;
    466   UINT8   InterruptType;
    467   UINT8   ProcessorId;
    468   UINT8   ProcessorEid;
    469   UINT8   IoSapicVector;
    470   UINT32  GlobalSystemInterrupt;
    471   UINT32  PlatformInterruptSourceFlags;
    472 } EFI_ACPI_3_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
    473 
    474 ///
    475 /// Platform Interrupt Source Flags.
    476 /// All other bits are reserved and must be set to 0.
    477 ///
    478 #define EFI_ACPI_3_0_CPEI_PROCESSOR_OVERRIDE          BIT0
    479 
    480 ///
    481 /// Smart Battery Description Table (SBST)
    482 ///
    483 typedef struct {
    484   EFI_ACPI_DESCRIPTION_HEADER Header;
    485   UINT32                      WarningEnergyLevel;
    486   UINT32                      LowEnergyLevel;
    487   UINT32                      CriticalEnergyLevel;
    488 } EFI_ACPI_3_0_SMART_BATTERY_DESCRIPTION_TABLE;
    489 
    490 ///
    491 /// SBST Version (as defined in ACPI 3.0 spec.)
    492 ///
    493 #define EFI_ACPI_3_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
    494 
    495 ///
    496 /// Embedded Controller Boot Resources Table (ECDT)
    497 /// The table is followed by a null terminated ASCII string that contains
    498 /// a fully qualified reference to the name space object.
    499 ///
    500 typedef struct {
    501   EFI_ACPI_DESCRIPTION_HEADER             Header;
    502   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  EcControl;
    503   EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE  EcData;
    504   UINT32                                  Uid;
    505   UINT8                                   GpeBit;
    506 } EFI_ACPI_3_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
    507 
    508 ///
    509 /// ECDT Version (as defined in ACPI 3.0 spec.)
    510 ///
    511 #define EFI_ACPI_3_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
    512 
    513 ///
    514 /// System Resource Affinity Table (SRAT.  The rest of the table
    515 /// must be defined in a platform specific manner.
    516 ///
    517 typedef struct {
    518   EFI_ACPI_DESCRIPTION_HEADER Header;
    519   UINT32                      Reserved1;  ///< Must be set to 1
    520   UINT64                      Reserved2;
    521 } EFI_ACPI_3_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
    522 
    523 ///
    524 /// SRAT Version (as defined in ACPI 3.0 spec.)
    525 ///
    526 #define EFI_ACPI_3_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x02
    527 
    528 //
    529 // SRAT structure types.
    530 // All other values between 0x02 an 0xFF are reserved and
    531 // will be ignored by OSPM.
    532 //
    533 #define EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
    534 #define EFI_ACPI_3_0_MEMORY_AFFINITY                      0x01
    535 
    536 ///
    537 /// Processor Local APIC/SAPIC Affinity Structure Definition
    538 ///
    539 typedef struct {
    540   UINT8   Type;
    541   UINT8   Length;
    542   UINT8   ProximityDomain7To0;
    543   UINT8   ApicId;
    544   UINT32  Flags;
    545   UINT8   LocalSapicEid;
    546   UINT8   ProximityDomain31To8[3];
    547   UINT8   Reserved[4];
    548 } EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
    549 
    550 ///
    551 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
    552 ///
    553 #define EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0)
    554 
    555 ///
    556 /// Memory Affinity Structure Definition
    557 ///
    558 typedef struct {
    559   UINT8   Type;
    560   UINT8   Length;
    561   UINT32  ProximityDomain;
    562   UINT16  Reserved1;
    563   UINT32  AddressBaseLow;
    564   UINT32  AddressBaseHigh;
    565   UINT32  LengthLow;
    566   UINT32  LengthHigh;
    567   UINT32  Reserved2;
    568   UINT32  Flags;
    569   UINT64  Reserved3;
    570 } EFI_ACPI_3_0_MEMORY_AFFINITY_STRUCTURE;
    571 
    572 //
    573 // Memory Flags.  All other bits are reserved and must be 0.
    574 //
    575 #define EFI_ACPI_3_0_MEMORY_ENABLED       (1 << 0)
    576 #define EFI_ACPI_3_0_MEMORY_HOT_PLUGGABLE (1 << 1)
    577 #define EFI_ACPI_3_0_MEMORY_NONVOLATILE   (1 << 2)
    578 
    579 ///
    580 /// System Locality Distance Information Table (SLIT).
    581 /// The rest of the table is a matrix.
    582 ///
    583 typedef struct {
    584   EFI_ACPI_DESCRIPTION_HEADER Header;
    585   UINT64                      NumberOfSystemLocalities;
    586 } EFI_ACPI_3_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
    587 
    588 ///
    589 /// SLIT Version (as defined in ACPI 3.0 spec.)
    590 ///
    591 #define EFI_ACPI_3_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
    592 
    593 //
    594 // Known table signatures
    595 //
    596 
    597 ///
    598 /// "RSD PTR " Root System Description Pointer
    599 ///
    600 #define EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
    601 
    602 ///
    603 /// "APIC" Multiple APIC Description Table
    604 ///
    605 #define EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
    606 
    607 ///
    608 /// "DSDT" Differentiated System Description Table
    609 ///
    610 #define EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
    611 
    612 ///
    613 /// "ECDT" Embedded Controller Boot Resources Table
    614 ///
    615 #define EFI_ACPI_3_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
    616 
    617 ///
    618 /// "FACP" Fixed ACPI Description Table
    619 ///
    620 #define EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
    621 
    622 ///
    623 /// "FACS" Firmware ACPI Control Structure
    624 ///
    625 #define EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
    626 
    627 ///
    628 /// "PSDT" Persistent System Description Table
    629 ///
    630 #define EFI_ACPI_3_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
    631 
    632 ///
    633 /// "RSDT" Root System Description Table
    634 ///
    635 #define EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
    636 
    637 ///
    638 /// "SBST" Smart Battery Specification Table
    639 ///
    640 #define EFI_ACPI_3_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
    641 
    642 ///
    643 /// "SLIT" System Locality Information Table
    644 ///
    645 #define EFI_ACPI_3_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
    646 
    647 ///
    648 /// "SRAT" System Resource Affinity Table
    649 ///
    650 #define EFI_ACPI_3_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
    651 
    652 ///
    653 /// "SSDT" Secondary System Description Table
    654 ///
    655 #define EFI_ACPI_3_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
    656 
    657 ///
    658 /// "XSDT" Extended System Description Table
    659 ///
    660 #define EFI_ACPI_3_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
    661 
    662 ///
    663 /// "BOOT" MS Simple Boot Spec
    664 ///
    665 #define EFI_ACPI_3_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
    666 
    667 ///
    668 /// "CPEP" Corrected Platform Error Polling Table
    669 ///
    670 #define EFI_ACPI_3_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
    671 
    672 ///
    673 /// "DBGP" MS Debug Port Spec
    674 ///
    675 #define EFI_ACPI_3_0_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
    676 
    677 ///
    678 /// "ETDT" Event Timer Description Table
    679 ///
    680 #define EFI_ACPI_3_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
    681 
    682 ///
    683 /// "HPET" IA-PC High Precision Event Timer Table
    684 ///
    685 #define EFI_ACPI_3_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
    686 
    687 ///
    688 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
    689 ///
    690 #define EFI_ACPI_3_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
    691 
    692 ///
    693 /// "SPCR" Serial Port Concole Redirection Table
    694 ///
    695 #define EFI_ACPI_3_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
    696 
    697 ///
    698 /// "SPMI" Server Platform Management Interface Table
    699 ///
    700 #define EFI_ACPI_3_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
    701 
    702 ///
    703 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
    704 ///
    705 #define EFI_ACPI_3_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
    706 
    707 ///
    708 /// "WDRT" Watchdog Resource Table
    709 ///
    710 #define EFI_ACPI_3_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
    711 
    712 ///
    713 /// "WDAT" Watchdog Action Table
    714 ///
    715 #define EFI_ACPI_3_0_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
    716 
    717 ///
    718 /// "WSPT" Windows Specific Properties Table
    719 ///
    720 #define EFI_ACPI_3_0_WINDOWS_SPECIFIC_PROPERTIES_TABLE_SIGNATURE  SIGNATURE_32('W', 'S', 'P', 'T')
    721 
    722 ///
    723 /// "iBFT" iSCSI Boot Firmware Table
    724 ///
    725 #define EFI_ACPI_3_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
    726 
    727 #pragma pack()
    728 
    729 #endif
    730