iPXE
Acpi50.h
Go to the documentation of this file.
00001 /** @file
00002   ACPI 5.0 definitions from the ACPI Specification Revision 5.0a November 13, 2013.
00003 
00004   Copyright (c) 2014 Hewlett-Packard Development Company, L.P.<BR>
00005   Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
00006   This program and the accompanying materials
00007   are licensed and made available under the terms and conditions of the BSD License
00008   which accompanies this distribution.  The full text of the license may be found at
00009   http://opensource.org/licenses/bsd-license.php
00010 
00011   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
00012   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
00013 **/
00014 
00015 #ifndef _ACPI_5_0_H_
00016 #define _ACPI_5_0_H_
00017 
00018 FILE_LICENCE ( BSD3 );
00019 
00020 #include <ipxe/efi/IndustryStandard/Acpi40.h>
00021 
00022 //
00023 // Define for Desriptor
00024 //
00025 #define ACPI_SMALL_FIXED_DMA_DESCRIPTOR_NAME                         0x0A
00026 #define ACPI_LARGE_GPIO_CONNECTION_DESCRIPTOR_NAME                   0x0C
00027 #define ACPI_LARGE_GENERIC_SERIAL_BUS_CONNECTION_DESCRIPTOR_NAME     0x0E
00028 
00029 #define ACPI_FIXED_DMA_DESCRIPTOR                         0x55
00030 #define ACPI_GPIO_CONNECTION_DESCRIPTOR                   0x8C
00031 #define ACPI_GENERIC_SERIAL_BUS_CONNECTION_DESCRIPTOR     0x8E
00032 
00033 #pragma pack(1)
00034 
00035 ///
00036 /// Generic DMA Descriptor.
00037 ///
00038 typedef PACKED struct {
00039   ACPI_SMALL_RESOURCE_HEADER   Header;
00040   UINT16                       DmaRequestLine;
00041   UINT16                       DmaChannel;
00042   UINT8                        DmaTransferWidth;
00043 } EFI_ACPI_FIXED_DMA_DESCRIPTOR;
00044 
00045 ///
00046 /// GPIO Connection Descriptor
00047 ///
00048 typedef PACKED struct {
00049   ACPI_LARGE_RESOURCE_HEADER    Header;
00050   UINT8                         RevisionId;
00051   UINT8                         ConnectionType;
00052   UINT16                        GeneralFlags;
00053   UINT16                        InterruptFlags;
00054   UINT8                         PinConfiguration;
00055   UINT16                        OutputDriveStrength;
00056   UINT16                        DebounceTimeout;
00057   UINT16                        PinTableOffset;
00058   UINT8                         ResourceSourceIndex;
00059   UINT16                        ResourceSourceNameOffset;
00060   UINT16                        VendorDataOffset;
00061   UINT16                        VendorDataLength;
00062 } EFI_ACPI_GPIO_CONNECTION_DESCRIPTOR;
00063 
00064 #define EFI_ACPI_GPIO_CONNECTION_TYPE_INTERRUPT   0x0
00065 #define EFI_ACPI_GPIO_CONNECTION_TYPE_IO          0x1
00066 
00067 ///
00068 /// Serial Bus Resource Descriptor (Generic)
00069 ///
00070 typedef PACKED struct {
00071   ACPI_LARGE_RESOURCE_HEADER    Header;
00072   UINT8                         RevisionId;
00073   UINT8                         ResourceSourceIndex;
00074   UINT8                         SerialBusType;
00075   UINT8                         GeneralFlags;
00076   UINT16                        TypeSpecificFlags;
00077   UINT8                         TypeSpecificRevisionId;
00078   UINT16                        TypeDataLength;
00079 // Type specific data
00080 } EFI_ACPI_SERIAL_BUS_RESOURCE_DESCRIPTOR;
00081 
00082 #define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_I2C   0x1
00083 #define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_SPI   0x2
00084 #define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_UART  0x3
00085 
00086 ///
00087 /// Serial Bus Resource Descriptor (I2C)
00088 ///
00089 typedef PACKED struct {
00090   ACPI_LARGE_RESOURCE_HEADER    Header;
00091   UINT8                         RevisionId;
00092   UINT8                         ResourceSourceIndex;
00093   UINT8                         SerialBusType;
00094   UINT8                         GeneralFlags;
00095   UINT16                        TypeSpecificFlags;
00096   UINT8                         TypeSpecificRevisionId;
00097   UINT16                        TypeDataLength;
00098   UINT32                        ConnectionSpeed;
00099   UINT16                        SlaveAddress;
00100 } EFI_ACPI_SERIAL_BUS_RESOURCE_I2C_DESCRIPTOR;
00101 
00102 ///
00103 /// Serial Bus Resource Descriptor (SPI)
00104 ///
00105 typedef PACKED struct {
00106   ACPI_LARGE_RESOURCE_HEADER    Header;
00107   UINT8                         RevisionId;
00108   UINT8                         ResourceSourceIndex;
00109   UINT8                         SerialBusType;
00110   UINT8                         GeneralFlags;
00111   UINT16                        TypeSpecificFlags;
00112   UINT8                         TypeSpecificRevisionId;
00113   UINT16                        TypeDataLength;
00114   UINT32                        ConnectionSpeed;
00115   UINT8                         DataBitLength;
00116   UINT8                         Phase;
00117   UINT8                         Polarity;
00118   UINT16                        DeviceSelection;
00119 } EFI_ACPI_SERIAL_BUS_RESOURCE_SPI_DESCRIPTOR;
00120 
00121 ///
00122 /// Serial Bus Resource Descriptor (UART)
00123 ///
00124 typedef PACKED struct {
00125   ACPI_LARGE_RESOURCE_HEADER    Header;
00126   UINT8                         RevisionId;
00127   UINT8                         ResourceSourceIndex;
00128   UINT8                         SerialBusType;
00129   UINT8                         GeneralFlags;
00130   UINT16                        TypeSpecificFlags;
00131   UINT8                         TypeSpecificRevisionId;
00132   UINT16                        TypeDataLength;
00133   UINT32                        DefaultBaudRate;
00134   UINT16                        RxFIFO;
00135   UINT16                        TxFIFO;
00136   UINT8                         Parity;
00137   UINT8                         SerialLinesEnabled;
00138 } EFI_ACPI_SERIAL_BUS_RESOURCE_UART_DESCRIPTOR;
00139 
00140 #pragma pack()
00141 
00142 //
00143 // Ensure proper structure formats
00144 //
00145 #pragma pack(1)
00146 
00147 ///
00148 /// ACPI 5.0 Generic Address Space definition
00149 ///
00150 typedef struct {
00151   UINT8   AddressSpaceId;
00152   UINT8   RegisterBitWidth;
00153   UINT8   RegisterBitOffset;
00154   UINT8   AccessSize;
00155   UINT64  Address;
00156 } EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE;
00157 
00158 //
00159 // Generic Address Space Address IDs
00160 //
00161 #define EFI_ACPI_5_0_SYSTEM_MEMORY              0
00162 #define EFI_ACPI_5_0_SYSTEM_IO                  1
00163 #define EFI_ACPI_5_0_PCI_CONFIGURATION_SPACE    2
00164 #define EFI_ACPI_5_0_EMBEDDED_CONTROLLER        3
00165 #define EFI_ACPI_5_0_SMBUS                      4
00166 #define EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL  0x0A
00167 #define EFI_ACPI_5_0_FUNCTIONAL_FIXED_HARDWARE       0x7F
00168 
00169 //
00170 // Generic Address Space Access Sizes
00171 //
00172 #define EFI_ACPI_5_0_UNDEFINED  0
00173 #define EFI_ACPI_5_0_BYTE       1
00174 #define EFI_ACPI_5_0_WORD       2
00175 #define EFI_ACPI_5_0_DWORD      3
00176 #define EFI_ACPI_5_0_QWORD      4
00177 
00178 //
00179 // ACPI 5.0 table structures
00180 //
00181 
00182 ///
00183 /// Root System Description Pointer Structure
00184 ///
00185 typedef struct {
00186   UINT64  Signature;
00187   UINT8   Checksum;
00188   UINT8   OemId[6];
00189   UINT8   Revision;
00190   UINT32  RsdtAddress;
00191   UINT32  Length;
00192   UINT64  XsdtAddress;
00193   UINT8   ExtendedChecksum;
00194   UINT8   Reserved[3];
00195 } EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
00196 
00197 ///
00198 /// RSD_PTR Revision (as defined in ACPI 5.0 spec.)
00199 ///
00200 #define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02  ///< ACPISpec (Revision 5.0) says current value is 2
00201 
00202 ///
00203 /// Common table header, this prefaces all ACPI tables, including FACS, but
00204 /// excluding the RSD PTR structure
00205 ///
00206 typedef struct {
00207   UINT32  Signature;
00208   UINT32  Length;
00209 } EFI_ACPI_5_0_COMMON_HEADER;
00210 
00211 //
00212 // Root System Description Table
00213 // No definition needed as it is a common description table header, the same with
00214 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
00215 //
00216 
00217 ///
00218 /// RSDT Revision (as defined in ACPI 5.0 spec.)
00219 ///
00220 #define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
00221 
00222 //
00223 // Extended System Description Table
00224 // No definition needed as it is a common description table header, the same with
00225 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
00226 //
00227 
00228 ///
00229 /// XSDT Revision (as defined in ACPI 5.0 spec.)
00230 ///
00231 #define EFI_ACPI_5_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
00232 
00233 ///
00234 /// Fixed ACPI Description Table Structure (FADT)
00235 ///
00236 typedef struct {
00237   EFI_ACPI_DESCRIPTION_HEADER             Header;
00238   UINT32                                  FirmwareCtrl;
00239   UINT32                                  Dsdt;
00240   UINT8                                   Reserved0;
00241   UINT8                                   PreferredPmProfile;
00242   UINT16                                  SciInt;
00243   UINT32                                  SmiCmd;
00244   UINT8                                   AcpiEnable;
00245   UINT8                                   AcpiDisable;
00246   UINT8                                   S4BiosReq;
00247   UINT8                                   PstateCnt;
00248   UINT32                                  Pm1aEvtBlk;
00249   UINT32                                  Pm1bEvtBlk;
00250   UINT32                                  Pm1aCntBlk;
00251   UINT32                                  Pm1bCntBlk;
00252   UINT32                                  Pm2CntBlk;
00253   UINT32                                  PmTmrBlk;
00254   UINT32                                  Gpe0Blk;
00255   UINT32                                  Gpe1Blk;
00256   UINT8                                   Pm1EvtLen;
00257   UINT8                                   Pm1CntLen;
00258   UINT8                                   Pm2CntLen;
00259   UINT8                                   PmTmrLen;
00260   UINT8                                   Gpe0BlkLen;
00261   UINT8                                   Gpe1BlkLen;
00262   UINT8                                   Gpe1Base;
00263   UINT8                                   CstCnt;
00264   UINT16                                  PLvl2Lat;
00265   UINT16                                  PLvl3Lat;
00266   UINT16                                  FlushSize;
00267   UINT16                                  FlushStride;
00268   UINT8                                   DutyOffset;
00269   UINT8                                   DutyWidth;
00270   UINT8                                   DayAlrm;
00271   UINT8                                   MonAlrm;
00272   UINT8                                   Century;
00273   UINT16                                  IaPcBootArch;
00274   UINT8                                   Reserved1;
00275   UINT32                                  Flags;
00276   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  ResetReg;
00277   UINT8                                   ResetValue;
00278   UINT8                                   Reserved2[3];
00279   UINT64                                  XFirmwareCtrl;
00280   UINT64                                  XDsdt;
00281   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk;
00282   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk;
00283   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk;
00284   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk;
00285   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk;
00286   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk;
00287   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk;
00288   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk;
00289   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  SleepControlReg;
00290   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  SleepStatusReg;
00291 } EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE;
00292 
00293 ///
00294 /// FADT Version (as defined in ACPI 5.0 spec.)
00295 ///
00296 #define EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x05
00297 
00298 //
00299 // Fixed ACPI Description Table Preferred Power Management Profile
00300 //
00301 #define EFI_ACPI_5_0_PM_PROFILE_UNSPECIFIED         0
00302 #define EFI_ACPI_5_0_PM_PROFILE_DESKTOP             1
00303 #define EFI_ACPI_5_0_PM_PROFILE_MOBILE              2
00304 #define EFI_ACPI_5_0_PM_PROFILE_WORKSTATION         3
00305 #define EFI_ACPI_5_0_PM_PROFILE_ENTERPRISE_SERVER   4
00306 #define EFI_ACPI_5_0_PM_PROFILE_SOHO_SERVER         5
00307 #define EFI_ACPI_5_0_PM_PROFILE_APPLIANCE_PC        6
00308 #define EFI_ACPI_5_0_PM_PROFILE_PERFORMANCE_SERVER  7
00309 #define EFI_ACPI_5_0_PM_PROFILE_TABLET              8
00310 
00311 //
00312 // Fixed ACPI Description Table Boot Architecture Flags
00313 // All other bits are reserved and must be set to 0.
00314 //
00315 #define EFI_ACPI_5_0_LEGACY_DEVICES              BIT0
00316 #define EFI_ACPI_5_0_8042                        BIT1
00317 #define EFI_ACPI_5_0_VGA_NOT_PRESENT             BIT2
00318 #define EFI_ACPI_5_0_MSI_NOT_SUPPORTED           BIT3
00319 #define EFI_ACPI_5_0_PCIE_ASPM_CONTROLS          BIT4
00320 #define EFI_ACPI_5_0_CMOS_RTC_NOT_PRESENT        BIT5
00321 
00322 //
00323 // Fixed ACPI Description Table Fixed Feature Flags
00324 // All other bits are reserved and must be set to 0.
00325 //
00326 #define EFI_ACPI_5_0_WBINVD                                 BIT0
00327 #define EFI_ACPI_5_0_WBINVD_FLUSH                           BIT1
00328 #define EFI_ACPI_5_0_PROC_C1                                BIT2
00329 #define EFI_ACPI_5_0_P_LVL2_UP                              BIT3
00330 #define EFI_ACPI_5_0_PWR_BUTTON                             BIT4
00331 #define EFI_ACPI_5_0_SLP_BUTTON                             BIT5
00332 #define EFI_ACPI_5_0_FIX_RTC                                BIT6
00333 #define EFI_ACPI_5_0_RTC_S4                                 BIT7
00334 #define EFI_ACPI_5_0_TMR_VAL_EXT                            BIT8
00335 #define EFI_ACPI_5_0_DCK_CAP                                BIT9
00336 #define EFI_ACPI_5_0_RESET_REG_SUP                          BIT10
00337 #define EFI_ACPI_5_0_SEALED_CASE                            BIT11
00338 #define EFI_ACPI_5_0_HEADLESS                               BIT12
00339 #define EFI_ACPI_5_0_CPU_SW_SLP                             BIT13
00340 #define EFI_ACPI_5_0_PCI_EXP_WAK                            BIT14
00341 #define EFI_ACPI_5_0_USE_PLATFORM_CLOCK                     BIT15
00342 #define EFI_ACPI_5_0_S4_RTC_STS_VALID                       BIT16
00343 #define EFI_ACPI_5_0_REMOTE_POWER_ON_CAPABLE                BIT17
00344 #define EFI_ACPI_5_0_FORCE_APIC_CLUSTER_MODEL               BIT18
00345 #define EFI_ACPI_5_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE   BIT19
00346 #define EFI_ACPI_5_0_HW_REDUCED_ACPI                        BIT20
00347 #define EFI_ACPI_5_0_LOW_POWER_S0_IDLE_CAPABLE              BIT21
00348 
00349 ///
00350 /// Firmware ACPI Control Structure
00351 ///
00352 typedef struct {
00353   UINT32  Signature;
00354   UINT32  Length;
00355   UINT32  HardwareSignature;
00356   UINT32  FirmwareWakingVector;
00357   UINT32  GlobalLock;
00358   UINT32  Flags;
00359   UINT64  XFirmwareWakingVector;
00360   UINT8   Version;
00361   UINT8   Reserved0[3];
00362   UINT32  OspmFlags;
00363   UINT8   Reserved1[24];
00364 } EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
00365 
00366 ///
00367 /// FACS Version (as defined in ACPI 5.0 spec.)
00368 ///
00369 #define EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
00370 
00371 ///
00372 /// Firmware Control Structure Feature Flags
00373 /// All other bits are reserved and must be set to 0.
00374 ///
00375 #define EFI_ACPI_5_0_S4BIOS_F                     BIT0
00376 #define EFI_ACPI_5_0_64BIT_WAKE_SUPPORTED_F       BIT1
00377 
00378 ///
00379 /// OSPM Enabled Firmware Control Structure Flags
00380 /// All other bits are reserved and must be set to 0.
00381 ///
00382 #define EFI_ACPI_5_0_OSPM_64BIT_WAKE_F            BIT0
00383 
00384 //
00385 // Differentiated System Description Table,
00386 // Secondary System Description Table
00387 // and Persistent System Description Table,
00388 // no definition needed as they are common description table header, the same with
00389 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
00390 //
00391 #define EFI_ACPI_5_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION   0x02
00392 #define EFI_ACPI_5_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION        0x02
00393 
00394 ///
00395 /// Multiple APIC Description Table header definition.  The rest of the table
00396 /// must be defined in a platform specific manner.
00397 ///
00398 typedef struct {
00399   EFI_ACPI_DESCRIPTION_HEADER Header;
00400   UINT32                      LocalApicAddress;
00401   UINT32                      Flags;
00402 } EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
00403 
00404 ///
00405 /// MADT Revision (as defined in ACPI 5.0 spec.)
00406 ///
00407 #define EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x03
00408 
00409 ///
00410 /// Multiple APIC Flags
00411 /// All other bits are reserved and must be set to 0.
00412 ///
00413 #define EFI_ACPI_5_0_PCAT_COMPAT         BIT0
00414 
00415 //
00416 // Multiple APIC Description Table APIC structure types
00417 // All other values between 0x0D and 0x7F are reserved and
00418 // will be ignored by OSPM. 0x80 ~ 0xFF are reserved for OEM.
00419 //
00420 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC           0x00
00421 #define EFI_ACPI_5_0_IO_APIC                        0x01
00422 #define EFI_ACPI_5_0_INTERRUPT_SOURCE_OVERRIDE      0x02
00423 #define EFI_ACPI_5_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
00424 #define EFI_ACPI_5_0_LOCAL_APIC_NMI                 0x04
00425 #define EFI_ACPI_5_0_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
00426 #define EFI_ACPI_5_0_IO_SAPIC                       0x06
00427 #define EFI_ACPI_5_0_LOCAL_SAPIC                    0x07
00428 #define EFI_ACPI_5_0_PLATFORM_INTERRUPT_SOURCES     0x08
00429 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC         0x09
00430 #define EFI_ACPI_5_0_LOCAL_X2APIC_NMI               0x0A
00431 #define EFI_ACPI_5_0_GIC                            0x0B
00432 #define EFI_ACPI_5_0_GICD                           0x0C
00433 
00434 //
00435 // APIC Structure Definitions
00436 //
00437 
00438 ///
00439 /// Processor Local APIC Structure Definition
00440 ///
00441 typedef struct {
00442   UINT8   Type;
00443   UINT8   Length;
00444   UINT8   AcpiProcessorId;
00445   UINT8   ApicId;
00446   UINT32  Flags;
00447 } EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
00448 
00449 ///
00450 /// Local APIC Flags.  All other bits are reserved and must be 0.
00451 ///
00452 #define EFI_ACPI_5_0_LOCAL_APIC_ENABLED        BIT0
00453 
00454 ///
00455 /// IO APIC Structure
00456 ///
00457 typedef struct {
00458   UINT8   Type;
00459   UINT8   Length;
00460   UINT8   IoApicId;
00461   UINT8   Reserved;
00462   UINT32  IoApicAddress;
00463   UINT32  GlobalSystemInterruptBase;
00464 } EFI_ACPI_5_0_IO_APIC_STRUCTURE;
00465 
00466 ///
00467 /// Interrupt Source Override Structure
00468 ///
00469 typedef struct {
00470   UINT8   Type;
00471   UINT8   Length;
00472   UINT8   Bus;
00473   UINT8   Source;
00474   UINT32  GlobalSystemInterrupt;
00475   UINT16  Flags;
00476 } EFI_ACPI_5_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
00477 
00478 ///
00479 /// Platform Interrupt Sources Structure Definition
00480 ///
00481 typedef struct {
00482   UINT8   Type;
00483   UINT8   Length;
00484   UINT16  Flags;
00485   UINT8   InterruptType;
00486   UINT8   ProcessorId;
00487   UINT8   ProcessorEid;
00488   UINT8   IoSapicVector;
00489   UINT32  GlobalSystemInterrupt;
00490   UINT32  PlatformInterruptSourceFlags;
00491   UINT8   CpeiProcessorOverride;
00492   UINT8   Reserved[31];
00493 } EFI_ACPI_5_0_PLATFORM_INTERRUPT_APIC_STRUCTURE;
00494 
00495 //
00496 // MPS INTI flags.
00497 // All other bits are reserved and must be set to 0.
00498 //
00499 #define EFI_ACPI_5_0_POLARITY      (3 << 0)
00500 #define EFI_ACPI_5_0_TRIGGER_MODE  (3 << 2)
00501 
00502 ///
00503 /// Non-Maskable Interrupt Source Structure
00504 ///
00505 typedef struct {
00506   UINT8   Type;
00507   UINT8   Length;
00508   UINT16  Flags;
00509   UINT32  GlobalSystemInterrupt;
00510 } EFI_ACPI_5_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
00511 
00512 ///
00513 /// Local APIC NMI Structure
00514 ///
00515 typedef struct {
00516   UINT8   Type;
00517   UINT8   Length;
00518   UINT8   AcpiProcessorId;
00519   UINT16  Flags;
00520   UINT8   LocalApicLint;
00521 } EFI_ACPI_5_0_LOCAL_APIC_NMI_STRUCTURE;
00522 
00523 ///
00524 /// Local APIC Address Override Structure
00525 ///
00526 typedef struct {
00527   UINT8   Type;
00528   UINT8   Length;
00529   UINT16  Reserved;
00530   UINT64  LocalApicAddress;
00531 } EFI_ACPI_5_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
00532 
00533 ///
00534 /// IO SAPIC Structure
00535 ///
00536 typedef struct {
00537   UINT8   Type;
00538   UINT8   Length;
00539   UINT8   IoApicId;
00540   UINT8   Reserved;
00541   UINT32  GlobalSystemInterruptBase;
00542   UINT64  IoSapicAddress;
00543 } EFI_ACPI_5_0_IO_SAPIC_STRUCTURE;
00544 
00545 ///
00546 /// Local SAPIC Structure
00547 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
00548 ///
00549 typedef struct {
00550   UINT8   Type;
00551   UINT8   Length;
00552   UINT8   AcpiProcessorId;
00553   UINT8   LocalSapicId;
00554   UINT8   LocalSapicEid;
00555   UINT8   Reserved[3];
00556   UINT32  Flags;
00557   UINT32  ACPIProcessorUIDValue;
00558 } EFI_ACPI_5_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
00559 
00560 ///
00561 /// Platform Interrupt Sources Structure
00562 ///
00563 typedef struct {
00564   UINT8   Type;
00565   UINT8   Length;
00566   UINT16  Flags;
00567   UINT8   InterruptType;
00568   UINT8   ProcessorId;
00569   UINT8   ProcessorEid;
00570   UINT8   IoSapicVector;
00571   UINT32  GlobalSystemInterrupt;
00572   UINT32  PlatformInterruptSourceFlags;
00573 } EFI_ACPI_5_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
00574 
00575 ///
00576 /// Platform Interrupt Source Flags.
00577 /// All other bits are reserved and must be set to 0.
00578 ///
00579 #define EFI_ACPI_5_0_CPEI_PROCESSOR_OVERRIDE          BIT0
00580 
00581 ///
00582 /// Processor Local x2APIC Structure Definition
00583 ///
00584 typedef struct {
00585   UINT8   Type;
00586   UINT8   Length;
00587   UINT8   Reserved[2];
00588   UINT32  X2ApicId;
00589   UINT32  Flags;
00590   UINT32  AcpiProcessorUid;
00591 } EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
00592 
00593 ///
00594 /// Local x2APIC NMI Structure
00595 ///
00596 typedef struct {
00597   UINT8   Type;
00598   UINT8   Length;
00599   UINT16  Flags;
00600   UINT32  AcpiProcessorUid;
00601   UINT8   LocalX2ApicLint;
00602   UINT8   Reserved[3];
00603 } EFI_ACPI_5_0_LOCAL_X2APIC_NMI_STRUCTURE;
00604 
00605 ///
00606 /// GIC Structure
00607 ///
00608 typedef struct {
00609   UINT8   Type;
00610   UINT8   Length;
00611   UINT16  Reserved;
00612   UINT32  GicId;
00613   UINT32  AcpiProcessorUid;
00614   UINT32  Flags;
00615   UINT32  ParkingProtocolVersion;
00616   UINT32  PerformanceInterruptGsiv;
00617   UINT64  ParkedAddress;
00618   UINT64  PhysicalBaseAddress;
00619 } EFI_ACPI_5_0_GIC_STRUCTURE;
00620 
00621 ///
00622 /// GIC Flags.  All other bits are reserved and must be 0.
00623 ///
00624 #define EFI_ACPI_5_0_GIC_ENABLED                     BIT0
00625 #define EFI_ACPI_5_0_PERFORMANCE_INTERRUPT_MODEL     BIT1
00626 
00627 ///
00628 /// GIC Distributor Structure
00629 ///
00630 typedef struct {
00631   UINT8   Type;
00632   UINT8   Length;
00633   UINT16  Reserved1;
00634   UINT32  GicId;
00635   UINT64  PhysicalBaseAddress;
00636   UINT32  SystemVectorBase;
00637   UINT32  Reserved2;
00638 } EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE;
00639 
00640 ///
00641 /// Smart Battery Description Table (SBST)
00642 ///
00643 typedef struct {
00644   EFI_ACPI_DESCRIPTION_HEADER Header;
00645   UINT32                      WarningEnergyLevel;
00646   UINT32                      LowEnergyLevel;
00647   UINT32                      CriticalEnergyLevel;
00648 } EFI_ACPI_5_0_SMART_BATTERY_DESCRIPTION_TABLE;
00649 
00650 ///
00651 /// SBST Version (as defined in ACPI 5.0 spec.)
00652 ///
00653 #define EFI_ACPI_5_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
00654 
00655 ///
00656 /// Embedded Controller Boot Resources Table (ECDT)
00657 /// The table is followed by a null terminated ASCII string that contains
00658 /// a fully qualified reference to the name space object.
00659 ///
00660 typedef struct {
00661   EFI_ACPI_DESCRIPTION_HEADER             Header;
00662   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  EcControl;
00663   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  EcData;
00664   UINT32                                  Uid;
00665   UINT8                                   GpeBit;
00666 } EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
00667 
00668 ///
00669 /// ECDT Version (as defined in ACPI 5.0 spec.)
00670 ///
00671 #define EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
00672 
00673 ///
00674 /// System Resource Affinity Table (SRAT).  The rest of the table
00675 /// must be defined in a platform specific manner.
00676 ///
00677 typedef struct {
00678   EFI_ACPI_DESCRIPTION_HEADER Header;
00679   UINT32                      Reserved1;  ///< Must be set to 1
00680   UINT64                      Reserved2;
00681 } EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
00682 
00683 ///
00684 /// SRAT Version (as defined in ACPI 5.0 spec.)
00685 ///
00686 #define EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
00687 
00688 //
00689 // SRAT structure types.
00690 // All other values between 0x03 an 0xFF are reserved and
00691 // will be ignored by OSPM.
00692 //
00693 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
00694 #define EFI_ACPI_5_0_MEMORY_AFFINITY                      0x01
00695 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
00696 
00697 ///
00698 /// Processor Local APIC/SAPIC Affinity Structure Definition
00699 ///
00700 typedef struct {
00701   UINT8   Type;
00702   UINT8   Length;
00703   UINT8   ProximityDomain7To0;
00704   UINT8   ApicId;
00705   UINT32  Flags;
00706   UINT8   LocalSapicEid;
00707   UINT8   ProximityDomain31To8[3];
00708   UINT32  ClockDomain;
00709 } EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
00710 
00711 ///
00712 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
00713 ///
00714 #define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0)
00715 
00716 ///
00717 /// Memory Affinity Structure Definition
00718 ///
00719 typedef struct {
00720   UINT8   Type;
00721   UINT8   Length;
00722   UINT32  ProximityDomain;
00723   UINT16  Reserved1;
00724   UINT32  AddressBaseLow;
00725   UINT32  AddressBaseHigh;
00726   UINT32  LengthLow;
00727   UINT32  LengthHigh;
00728   UINT32  Reserved2;
00729   UINT32  Flags;
00730   UINT64  Reserved3;
00731 } EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE;
00732 
00733 //
00734 // Memory Flags.  All other bits are reserved and must be 0.
00735 //
00736 #define EFI_ACPI_5_0_MEMORY_ENABLED       (1 << 0)
00737 #define EFI_ACPI_5_0_MEMORY_HOT_PLUGGABLE (1 << 1)
00738 #define EFI_ACPI_5_0_MEMORY_NONVOLATILE   (1 << 2)
00739 
00740 ///
00741 /// Processor Local x2APIC Affinity Structure Definition
00742 ///
00743 typedef struct {
00744   UINT8   Type;
00745   UINT8   Length;
00746   UINT8   Reserved1[2];
00747   UINT32  ProximityDomain;
00748   UINT32  X2ApicId;
00749   UINT32  Flags;
00750   UINT32  ClockDomain;
00751   UINT8   Reserved2[4];
00752 } EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
00753 
00754 ///
00755 /// System Locality Distance Information Table (SLIT).
00756 /// The rest of the table is a matrix.
00757 ///
00758 typedef struct {
00759   EFI_ACPI_DESCRIPTION_HEADER Header;
00760   UINT64                      NumberOfSystemLocalities;
00761 } EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
00762 
00763 ///
00764 /// SLIT Version (as defined in ACPI 5.0 spec.)
00765 ///
00766 #define EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
00767 
00768 ///
00769 /// Corrected Platform Error Polling Table (CPEP)
00770 ///
00771 typedef struct {
00772   EFI_ACPI_DESCRIPTION_HEADER Header;
00773   UINT8                       Reserved[8];
00774 } EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
00775 
00776 ///
00777 /// CPEP Version (as defined in ACPI 5.0 spec.)
00778 ///
00779 #define EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION 0x01
00780 
00781 //
00782 // CPEP processor structure types.
00783 //
00784 #define EFI_ACPI_5_0_CPEP_PROCESSOR_APIC_SAPIC  0x00
00785 
00786 ///
00787 /// Corrected Platform Error Polling Processor Structure Definition
00788 ///
00789 typedef struct {
00790   UINT8   Type;
00791   UINT8   Length;
00792   UINT8   ProcessorId;
00793   UINT8   ProcessorEid;
00794   UINT32  PollingInterval;
00795 } EFI_ACPI_5_0_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
00796 
00797 ///
00798 /// Maximum System Characteristics Table (MSCT)
00799 ///
00800 typedef struct {
00801   EFI_ACPI_DESCRIPTION_HEADER Header;
00802   UINT32                      OffsetProxDomInfo;
00803   UINT32                      MaximumNumberOfProximityDomains;
00804   UINT32                      MaximumNumberOfClockDomains;
00805   UINT64                      MaximumPhysicalAddress;
00806 } EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
00807 
00808 ///
00809 /// MSCT Version (as defined in ACPI 5.0 spec.)
00810 ///
00811 #define EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION 0x01
00812 
00813 ///
00814 /// Maximum Proximity Domain Information Structure Definition
00815 ///
00816 typedef struct {
00817   UINT8   Revision;
00818   UINT8   Length;
00819   UINT32  ProximityDomainRangeLow;
00820   UINT32  ProximityDomainRangeHigh;
00821   UINT32  MaximumProcessorCapacity;
00822   UINT64  MaximumMemoryCapacity;
00823 } EFI_ACPI_5_0_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
00824 
00825 ///
00826 /// ACPI RAS Feature Table definition.
00827 ///
00828 typedef struct {
00829   EFI_ACPI_DESCRIPTION_HEADER Header;
00830   UINT8                       PlatformCommunicationChannelIdentifier[12];
00831 } EFI_ACPI_5_0_RAS_FEATURE_TABLE;
00832 
00833 ///
00834 /// RASF Version (as defined in ACPI 5.0 spec.)
00835 ///
00836 #define EFI_ACPI_5_0_RAS_FEATURE_TABLE_REVISION 0x01
00837 
00838 ///
00839 /// ACPI RASF Platform Communication Channel Shared Memory Region definition.
00840 ///
00841 typedef struct {
00842   UINT32                      Signature;
00843   UINT16                      Command;
00844   UINT16                      Status;
00845   UINT16                      Version;
00846   UINT8                       RASCapabilities[16];
00847   UINT8                       SetRASCapabilities[16];
00848   UINT16                      NumberOfRASFParameterBlocks;
00849   UINT32                      SetRASCapabilitiesStatus;
00850 } EFI_ACPI_5_0_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
00851 
00852 ///
00853 /// ACPI RASF PCC command code
00854 ///
00855 #define EFI_ACPI_5_0_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND  0x01
00856 
00857 ///
00858 /// ACPI RASF Platform RAS Capabilities
00859 ///
00860 #define EFI_ACPI_5_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED                          0x01
00861 #define EFI_ACPI_5_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED_AND_EXPOSED_TO_SOFTWARE  0x02
00862 
00863 ///
00864 /// ACPI RASF Parameter Block structure for PATROL_SCRUB
00865 ///
00866 typedef struct {
00867   UINT16                      Type;
00868   UINT16                      Version;
00869   UINT16                      Length;
00870   UINT16                      PatrolScrubCommand;
00871   UINT64                      RequestedAddressRange[2];
00872   UINT64                      ActualAddressRange[2];
00873   UINT16                      Flags;
00874   UINT8                       RequestedSpeed;
00875 } EFI_ACPI_5_0_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE;
00876 
00877 ///
00878 /// ACPI RASF Patrol Scrub command
00879 ///
00880 #define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS   0x01
00881 #define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER   0x02
00882 #define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER    0x03
00883 
00884 ///
00885 /// Memory Power State Table definition.
00886 ///
00887 typedef struct {
00888   EFI_ACPI_DESCRIPTION_HEADER Header;
00889   UINT8                       PlatformCommunicationChannelIdentifier;
00890   UINT8                       Reserved[3];
00891 // Memory Power Node Structure
00892 // Memory Power State Characteristics
00893 } EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE;
00894 
00895 ///
00896 /// MPST Version (as defined in ACPI 5.0 spec.)
00897 ///
00898 #define EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_REVISION 0x01
00899 
00900 ///
00901 /// MPST Platform Communication Channel Shared Memory Region definition.
00902 ///
00903 typedef struct {
00904   UINT32                      Signature;
00905   UINT16                      Command;
00906   UINT16                      Status;
00907   UINT32                      MemoryPowerCommandRegister;
00908   UINT32                      MemoryPowerStatusRegister;
00909   UINT32                      PowerStateId;
00910   UINT32                      MemoryPowerNodeId;
00911   UINT64                      MemoryEnergyConsumed;
00912   UINT64                      ExpectedAveragePowerComsuned;
00913 } EFI_ACPI_5_0_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
00914 
00915 ///
00916 /// ACPI MPST PCC command code
00917 ///
00918 #define EFI_ACPI_5_0_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND  0x03
00919 
00920 ///
00921 /// ACPI MPST Memory Power command
00922 ///
00923 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE       0x01
00924 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE       0x02
00925 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED   0x03
00926 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED   0x04
00927 
00928 ///
00929 /// MPST Memory Power Node Table
00930 ///
00931 typedef struct {
00932   UINT8                                             PowerStateValue;
00933   UINT8                                             PowerStateInformationIndex;
00934 } EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE;
00935 
00936 typedef struct {
00937   UINT8                                             Flag;
00938   UINT8                                             Reserved;
00939   UINT16                                            MemoryPowerNodeId;
00940   UINT32                                            Length;
00941   UINT64                                            AddressBase;
00942   UINT64                                            AddressLength;
00943   UINT32                                            NumberOfPowerStates;
00944   UINT32                                            NumberOfPhysicalComponents;
00945 //EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE              MemoryPowerState[NumberOfPowerStates];
00946 //UINT16                                            PhysicalComponentIdentifier[NumberOfPhysicalComponents];
00947 } EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE;
00948 
00949 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE          0x01
00950 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED   0x02
00951 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE   0x04
00952 
00953 typedef struct {
00954   UINT16                      MemoryPowerNodeCount;
00955   UINT8                       Reserved[2];
00956 } EFI_ACPI_5_0_MPST_MEMORY_POWER_NODE_TABLE;
00957 
00958 ///
00959 /// MPST Memory Power State Characteristics Table
00960 ///
00961 typedef struct {
00962   UINT8                                             PowerStateStructureID;
00963   UINT8                                             Flag;
00964   UINT16                                            Reserved;
00965   UINT32                                            AveragePowerConsumedInMPS0;
00966   UINT32                                            RelativePowerSavingToMPS0;
00967   UINT64                                            ExitLatencyToMPS0;
00968 } EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE;
00969 
00970 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED              0x01
00971 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY   0x02
00972 #define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT    0x04
00973 
00974 typedef struct {
00975   UINT16                      MemoryPowerStateCharacteristicsCount;
00976   UINT8                       Reserved[2];
00977 } EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE;
00978 
00979 ///
00980 /// Memory Topology Table definition.
00981 ///
00982 typedef struct {
00983   EFI_ACPI_DESCRIPTION_HEADER Header;
00984   UINT32                      Reserved;
00985 } EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE;
00986 
00987 ///
00988 /// PMTT Version (as defined in ACPI 5.0 spec.)
00989 ///
00990 #define EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE_REVISION 0x01
00991 
00992 ///
00993 /// Common Memory Aggregator Device Structure.
00994 ///
00995 typedef struct {
00996   UINT8                       Type;
00997   UINT8                       Reserved;
00998   UINT16                      Length;
00999   UINT16                      Flags;
01000   UINT16                      Reserved1;
01001 } EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
01002 
01003 ///
01004 /// Memory Aggregator Device Type
01005 ///
01006 #define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_SOCKET            0x1
01007 #define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_MEMORY_CONTROLLER 0x2
01008 #define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_DIMM              0x3
01009 
01010 ///
01011 /// Socket Memory Aggregator Device Structure.
01012 ///
01013 typedef struct {
01014   EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
01015   UINT16                                                       SocketIdentifier;
01016   UINT16                                                       Reserved;
01017 //EFI_ACPI_5_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  MemoryController[];
01018 } EFI_ACPI_5_0_PMMT_SOCKET_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
01019 
01020 ///
01021 /// MemoryController Memory Aggregator Device Structure.
01022 ///
01023 typedef struct {
01024   EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
01025   UINT32                                                       ReadLatency;
01026   UINT32                                                       WriteLatency;
01027   UINT32                                                       ReadBandwidth;
01028   UINT32                                                       WriteBandwidth;
01029   UINT16                                                       OptimalAccessUnit;
01030   UINT16                                                       OptimalAccessAlignment;
01031   UINT16                                                       Reserved;
01032   UINT16                                                       NumberOfProximityDomains;
01033 //UINT32                                                       ProximityDomain[NumberOfProximityDomains];
01034 //EFI_ACPI_5_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    PhysicalComponent[];
01035 } EFI_ACPI_5_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
01036 
01037 ///
01038 /// DIMM Memory Aggregator Device Structure.
01039 ///
01040 typedef struct {
01041   EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
01042   UINT16                                                       PhysicalComponentIdentifier;
01043   UINT16                                                       Reserved;
01044   UINT32                                                       SizeOfDimm;
01045   UINT32                                                       SmbiosHandle;
01046 } EFI_ACPI_5_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
01047 
01048 ///
01049 /// Boot Graphics Resource Table definition.
01050 ///
01051 typedef struct {
01052   EFI_ACPI_DESCRIPTION_HEADER Header;
01053   ///
01054   /// 2-bytes (16 bit) version ID. This value must be 1.
01055   ///
01056   UINT16                      Version;
01057   ///
01058   /// 1-byte status field indicating current status about the table.
01059   ///     Bits[7:1] = Reserved (must be zero)
01060   ///     Bit [0] = Valid. A one indicates the boot image graphic is valid.
01061   ///
01062   UINT8                       Status;
01063   ///
01064   /// 1-byte enumerated type field indicating format of the image.
01065   ///     0 = Bitmap
01066   ///     1 - 255  Reserved (for future use)
01067   ///
01068   UINT8                       ImageType;
01069   ///
01070   /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy
01071   /// of the image bitmap.
01072   ///
01073   UINT64                      ImageAddress;
01074   ///
01075   /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image.
01076   /// (X, Y) display offset of the top left corner of the boot image.
01077   /// The top left corner of the display is at offset (0, 0).
01078   ///
01079   UINT32                      ImageOffsetX;
01080   ///
01081   /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image.
01082   /// (X, Y) display offset of the top left corner of the boot image.
01083   /// The top left corner of the display is at offset (0, 0).
01084   ///
01085   UINT32                      ImageOffsetY;
01086 } EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE;
01087 
01088 ///
01089 /// BGRT Revision
01090 ///
01091 #define EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION 1
01092 
01093 ///
01094 /// BGRT Version
01095 ///
01096 #define EFI_ACPI_5_0_BGRT_VERSION         0x01
01097 
01098 ///
01099 /// BGRT Status
01100 ///
01101 #define EFI_ACPI_5_0_BGRT_STATUS_NOT_DISPLAYED 0x00
01102 #define EFI_ACPI_5_0_BGRT_STATUS_DISPLAYED     0x01
01103 #define EFI_ACPI_5_0_BGRT_STATUS_INVALID       EFI_ACPI_5_0_BGRT_STATUS_NOT_DISPLAYED
01104 #define EFI_ACPI_5_0_BGRT_STATUS_VALID         EFI_ACPI_5_0_BGRT_STATUS_DISPLAYED
01105 
01106 ///
01107 /// BGRT Image Type
01108 ///
01109 #define EFI_ACPI_5_0_BGRT_IMAGE_TYPE_BMP  0x00
01110 
01111 ///
01112 /// FPDT Version (as defined in ACPI 5.0 spec.)
01113 ///
01114 #define EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION 0x01
01115 
01116 ///
01117 /// FPDT Performance Record Types
01118 ///
01119 #define EFI_ACPI_5_0_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER      0x0000
01120 #define EFI_ACPI_5_0_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER     0x0001
01121 
01122 ///
01123 /// FPDT Performance Record Revision
01124 ///
01125 #define EFI_ACPI_5_0_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER  0x01
01126 #define EFI_ACPI_5_0_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER 0x01
01127 
01128 ///
01129 /// FPDT Runtime Performance Record Types
01130 ///
01131 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME                0x0000
01132 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND               0x0001
01133 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT      0x0002
01134 
01135 ///
01136 /// FPDT Runtime Performance Record Revision
01137 ///
01138 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME            0x01
01139 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND           0x01
01140 #define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT  0x02
01141 
01142 ///
01143 /// FPDT Performance Record header
01144 ///
01145 typedef struct {
01146   UINT16           Type;
01147   UINT8            Length;
01148   UINT8            Revision;
01149 } EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER;
01150 
01151 ///
01152 /// FPDT Performance Table header
01153 ///
01154 typedef struct {
01155   UINT32  Signature;
01156   UINT32  Length;
01157 } EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER;
01158 
01159 ///
01160 /// FPDT Firmware Basic Boot Performance Pointer Record Structure
01161 ///
01162 typedef struct {
01163   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01164   UINT32                                          Reserved;
01165   ///
01166   /// 64-bit processor-relative physical address of the Basic Boot Performance Table.
01167   ///
01168   UINT64                                          BootPerformanceTablePointer;
01169 } EFI_ACPI_5_0_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD;
01170 
01171 ///
01172 /// FPDT S3 Performance Table Pointer Record Structure
01173 ///
01174 typedef struct {
01175   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01176   UINT32                                          Reserved;
01177   ///
01178   /// 64-bit processor-relative physical address of the S3 Performance Table.
01179   ///
01180   UINT64                                          S3PerformanceTablePointer;
01181 } EFI_ACPI_5_0_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD;
01182 
01183 ///
01184 /// FPDT Firmware Basic Boot Performance Record Structure
01185 ///
01186 typedef struct {
01187   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01188   UINT32                                          Reserved;
01189   ///
01190   /// Timer value logged at the beginning of firmware image execution.
01191   /// This may not always be zero or near zero.
01192   ///
01193   UINT64                                          ResetEnd;
01194   ///
01195   /// Timer value logged just prior to loading the OS boot loader into memory.
01196   /// For non-UEFI compatible boots, this field must be zero.
01197   ///
01198   UINT64                                          OsLoaderLoadImageStart;
01199   ///
01200   /// Timer value logged just prior to launching the previously loaded OS boot loader image.
01201   /// For non-UEFI compatible boots, the timer value logged will be just prior
01202   /// to the INT 19h handler invocation.
01203   ///
01204   UINT64                                          OsLoaderStartImageStart;
01205   ///
01206   /// Timer value logged at the point when the OS loader calls the
01207   /// ExitBootServices function for UEFI compatible firmware.
01208   /// For non-UEFI compatible boots, this field must be zero.
01209   ///
01210   UINT64                                          ExitBootServicesEntry;
01211   ///
01212   /// Timer value logged at the point just prior towhen the OS loader gaining
01213   /// control back from calls the ExitBootServices function for UEFI compatible firmware.
01214   /// For non-UEFI compatible boots, this field must be zero.
01215   ///
01216   UINT64                                          ExitBootServicesExit;
01217 } EFI_ACPI_5_0_FPDT_FIRMWARE_BASIC_BOOT_RECORD;
01218 
01219 ///
01220 /// FPDT Firmware Basic Boot Performance Table signature
01221 ///
01222 #define EFI_ACPI_5_0_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('F', 'B', 'P', 'T')
01223 
01224 //
01225 // FPDT Firmware Basic Boot Performance Table
01226 //
01227 typedef struct {
01228   EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER      Header;
01229   //
01230   // one or more Performance Records.
01231   //
01232 } EFI_ACPI_5_0_FPDT_FIRMWARE_BASIC_BOOT_TABLE;
01233 
01234 ///
01235 /// FPDT "S3PT" S3 Performance Table
01236 ///
01237 #define EFI_ACPI_5_0_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('S', '3', 'P', 'T')
01238 
01239 //
01240 // FPDT Firmware S3 Boot Performance Table
01241 //
01242 typedef struct {
01243   EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER      Header;
01244   //
01245   // one or more Performance Records.
01246   //
01247 } EFI_ACPI_5_0_FPDT_FIRMWARE_S3_BOOT_TABLE;
01248 
01249 ///
01250 /// FPDT Basic S3 Resume Performance Record
01251 ///
01252 typedef struct {
01253   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01254   ///
01255   /// A count of the number of S3 resume cycles since the last full boot sequence.
01256   ///
01257   UINT32                                          ResumeCount;
01258   ///
01259   /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the
01260   /// OS waking vector. Only the most recent resume cycle's time is retained.
01261   ///
01262   UINT64                                          FullResume;
01263   ///
01264   /// Average timer value of all resume cycles logged since the last full boot
01265   /// sequence, including the most recent resume.  Note that the entire log of
01266   /// timer values does not need to be retained in order to calculate this average.
01267   ///
01268   UINT64                                          AverageResume;
01269 } EFI_ACPI_5_0_FPDT_S3_RESUME_RECORD;
01270 
01271 ///
01272 /// FPDT Basic S3 Suspend Performance Record
01273 ///
01274 typedef struct {
01275   EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01276   ///
01277   /// Timer value recorded at the OS write to SLP_TYP upon entry to S3.
01278   /// Only the most recent suspend cycle's timer value is retained.
01279   ///
01280   UINT64                                          SuspendStart;
01281   ///
01282   /// Timer value recorded at the final firmware write to SLP_TYP (or other
01283   /// mechanism) used to trigger hardware entry to S3.
01284   /// Only the most recent suspend cycle's timer value is retained.
01285   ///
01286   UINT64                                          SuspendEnd;
01287 } EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD;
01288 
01289 ///
01290 /// Firmware Performance Record Table definition.
01291 ///
01292 typedef struct {
01293   EFI_ACPI_DESCRIPTION_HEADER Header;
01294 } EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_RECORD_TABLE;
01295 
01296 ///
01297 /// Generic Timer Description Table definition.
01298 ///
01299 typedef struct {
01300   EFI_ACPI_DESCRIPTION_HEADER Header;
01301   UINT64                      PhysicalAddress;
01302   UINT32                      GlobalFlags;
01303   UINT32                      SecurePL1TimerGSIV;
01304   UINT32                      SecurePL1TimerFlags;
01305   UINT32                      NonSecurePL1TimerGSIV;
01306   UINT32                      NonSecurePL1TimerFlags;
01307   UINT32                      VirtualTimerGSIV;
01308   UINT32                      VirtualTimerFlags;
01309   UINT32                      NonSecurePL2TimerGSIV;
01310   UINT32                      NonSecurePL2TimerFlags;
01311 } EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE;
01312 
01313 ///
01314 /// GTDT Version (as defined in ACPI 5.0 spec.)
01315 ///
01316 #define EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION 0x01
01317 
01318 ///
01319 /// Global Flags.  All other bits are reserved and must be 0.
01320 ///
01321 #define EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_MEMORY_MAPPED_BLOCK_PRESENT   BIT0
01322 #define EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_INTERRUPT_MODE                BIT1
01323 
01324 ///
01325 /// Timer Flags.  All other bits are reserved and must be 0.
01326 ///
01327 #define EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE          BIT0
01328 #define EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
01329 
01330 ///
01331 /// Boot Error Record Table (BERT)
01332 ///
01333 typedef struct {
01334   EFI_ACPI_DESCRIPTION_HEADER Header;
01335   UINT32                      BootErrorRegionLength;
01336   UINT64                      BootErrorRegion;
01337 } EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_HEADER;
01338 
01339 ///
01340 /// BERT Version (as defined in ACPI 5.0 spec.)
01341 ///
01342 #define EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_REVISION 0x01
01343 
01344 ///
01345 /// Boot Error Region Block Status Definition
01346 ///
01347 typedef struct {
01348   UINT32       UncorrectableErrorValid:1;
01349   UINT32       CorrectableErrorValid:1;
01350   UINT32       MultipleUncorrectableErrors:1;
01351   UINT32       MultipleCorrectableErrors:1;
01352   UINT32       ErrorDataEntryCount:10;
01353   UINT32       Reserved:18;
01354 } EFI_ACPI_5_0_ERROR_BLOCK_STATUS;
01355 
01356 ///
01357 /// Boot Error Region Definition
01358 ///
01359 typedef struct {
01360   EFI_ACPI_5_0_ERROR_BLOCK_STATUS              BlockStatus;
01361   UINT32                                       RawDataOffset;
01362   UINT32                                       RawDataLength;
01363   UINT32                                       DataLength;
01364   UINT32                                       ErrorSeverity;
01365 } EFI_ACPI_5_0_BOOT_ERROR_REGION_STRUCTURE;
01366 
01367 //
01368 // Boot Error Severity types
01369 //
01370 #define EFI_ACPI_5_0_ERROR_SEVERITY_CORRECTABLE  0x00
01371 #define EFI_ACPI_5_0_ERROR_SEVERITY_FATAL        0x01
01372 #define EFI_ACPI_5_0_ERROR_SEVERITY_CORRECTED    0x02
01373 #define EFI_ACPI_5_0_ERROR_SEVERITY_NONE         0x03
01374 
01375 ///
01376 /// Generic Error Data Entry Definition
01377 ///
01378 typedef struct {
01379   UINT8    SectionType[16];
01380   UINT32   ErrorSeverity;
01381   UINT16   Revision;
01382   UINT8    ValidationBits;
01383   UINT8    Flags;
01384   UINT32   ErrorDataLength;
01385   UINT8    FruId[16];
01386   UINT8    FruText[20];
01387 } EFI_ACPI_5_0_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
01388 
01389 ///
01390 /// Generic Error Data Entry Version (as defined in ACPI 5.0 spec.)
01391 ///
01392 #define EFI_ACPI_5_0_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0201
01393 
01394 ///
01395 /// HEST - Hardware Error Source Table
01396 ///
01397 typedef struct {
01398   EFI_ACPI_DESCRIPTION_HEADER Header;
01399   UINT32                      ErrorSourceCount;
01400 } EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
01401 
01402 ///
01403 /// HEST Version (as defined in ACPI 5.0 spec.)
01404 ///
01405 #define EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION 0x01
01406 
01407 //
01408 // Error Source structure types.
01409 //
01410 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
01411 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
01412 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_NMI_ERROR                0x02
01413 #define EFI_ACPI_5_0_PCI_EXPRESS_ROOT_PORT_AER                  0x06
01414 #define EFI_ACPI_5_0_PCI_EXPRESS_DEVICE_AER                     0x07
01415 #define EFI_ACPI_5_0_PCI_EXPRESS_BRIDGE_AER                     0x08
01416 #define EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR                     0x09
01417 
01418 //
01419 // Error Source structure flags.
01420 //
01421 #define EFI_ACPI_5_0_ERROR_SOURCE_FLAG_FIRMWARE_FIRST       (1 << 0)
01422 #define EFI_ACPI_5_0_ERROR_SOURCE_FLAG_GLOBAL               (1 << 1)
01423 
01424 ///
01425 /// IA-32 Architecture Machine Check Exception Structure Definition
01426 ///
01427 typedef struct {
01428   UINT16  Type;
01429   UINT16  SourceId;
01430   UINT8   Reserved0[2];
01431   UINT8   Flags;
01432   UINT8   Enabled;
01433   UINT32  NumberOfRecordsToPreAllocate;
01434   UINT32  MaxSectionsPerRecord;
01435   UINT64  GlobalCapabilityInitData;
01436   UINT64  GlobalControlInitData;
01437   UINT8   NumberOfHardwareBanks;
01438   UINT8   Reserved1[7];
01439 } EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
01440 
01441 ///
01442 /// IA-32 Architecture Machine Check Bank Structure Definition
01443 ///
01444 typedef struct {
01445   UINT8   BankNumber;
01446   UINT8   ClearStatusOnInitialization;
01447   UINT8   StatusDataFormat;
01448   UINT8   Reserved0;
01449   UINT32  ControlRegisterMsrAddress;
01450   UINT64  ControlInitData;
01451   UINT32  StatusRegisterMsrAddress;
01452   UINT32  AddressRegisterMsrAddress;
01453   UINT32  MiscRegisterMsrAddress;
01454 } EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
01455 
01456 ///
01457 /// IA-32 Architecture Machine Check Bank Structure MCA data format
01458 ///
01459 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32      0x00
01460 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64   0x01
01461 #define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64     0x02
01462 
01463 //
01464 // Hardware Error Notification types. All other values are reserved
01465 //
01466 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_POLLED                0x00
01467 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT    0x01
01468 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT       0x02
01469 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_SCI                   0x03
01470 #define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_NMI                   0x04
01471 
01472 ///
01473 /// Hardware Error Notification Configuration Write Enable Structure Definition
01474 ///
01475 typedef struct {
01476   UINT16    Type:1;
01477   UINT16    PollInterval:1;
01478   UINT16    SwitchToPollingThresholdValue:1;
01479   UINT16    SwitchToPollingThresholdWindow:1;
01480   UINT16    ErrorThresholdValue:1;
01481   UINT16    ErrorThresholdWindow:1;
01482   UINT16    Reserved:10;
01483 } EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
01484 
01485 ///
01486 /// Hardware Error Notification Structure Definition
01487 ///
01488 typedef struct {
01489   UINT8                                                                          Type;
01490   UINT8                                                                          Length;
01491   EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE  ConfigurationWriteEnable;
01492   UINT32                                                                         PollInterval;
01493   UINT32                                                                         Vector;
01494   UINT32                                                                         SwitchToPollingThresholdValue;
01495   UINT32                                                                         SwitchToPollingThresholdWindow;
01496   UINT32                                                                         ErrorThresholdValue;
01497   UINT32                                                                         ErrorThresholdWindow;
01498 } EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
01499 
01500 ///
01501 /// IA-32 Architecture Corrected Machine Check Structure Definition
01502 ///
01503 typedef struct {
01504   UINT16                                                 Type;
01505   UINT16                                                 SourceId;
01506   UINT8                                                  Reserved0[2];
01507   UINT8                                                  Flags;
01508   UINT8                                                  Enabled;
01509   UINT32                                                 NumberOfRecordsToPreAllocate;
01510   UINT32                                                 MaxSectionsPerRecord;
01511   EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
01512   UINT8                                                  NumberOfHardwareBanks;
01513   UINT8                                                  Reserved1[3];
01514 } EFI_ACPI_5_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
01515 
01516 ///
01517 /// IA-32 Architecture NMI Error Structure Definition
01518 ///
01519 typedef struct {
01520   UINT16  Type;
01521   UINT16  SourceId;
01522   UINT8   Reserved0[2];
01523   UINT32  NumberOfRecordsToPreAllocate;
01524   UINT32  MaxSectionsPerRecord;
01525   UINT32  MaxRawDataLength;
01526 } EFI_ACPI_5_0_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
01527 
01528 ///
01529 /// PCI Express Root Port AER Structure Definition
01530 ///
01531 typedef struct {
01532   UINT16  Type;
01533   UINT16  SourceId;
01534   UINT8   Reserved0[2];
01535   UINT8   Flags;
01536   UINT8   Enabled;
01537   UINT32  NumberOfRecordsToPreAllocate;
01538   UINT32  MaxSectionsPerRecord;
01539   UINT32  Bus;
01540   UINT16  Device;
01541   UINT16  Function;
01542   UINT16  DeviceControl;
01543   UINT8   Reserved1[2];
01544   UINT32  UncorrectableErrorMask;
01545   UINT32  UncorrectableErrorSeverity;
01546   UINT32  CorrectableErrorMask;
01547   UINT32  AdvancedErrorCapabilitiesAndControl;
01548   UINT32  RootErrorCommand;
01549 } EFI_ACPI_5_0_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
01550 
01551 ///
01552 /// PCI Express Device AER Structure Definition
01553 ///
01554 typedef struct {
01555   UINT16  Type;
01556   UINT16  SourceId;
01557   UINT8   Reserved0[2];
01558   UINT8   Flags;
01559   UINT8   Enabled;
01560   UINT32  NumberOfRecordsToPreAllocate;
01561   UINT32  MaxSectionsPerRecord;
01562   UINT32  Bus;
01563   UINT16  Device;
01564   UINT16  Function;
01565   UINT16  DeviceControl;
01566   UINT8   Reserved1[2];
01567   UINT32  UncorrectableErrorMask;
01568   UINT32  UncorrectableErrorSeverity;
01569   UINT32  CorrectableErrorMask;
01570   UINT32  AdvancedErrorCapabilitiesAndControl;
01571 } EFI_ACPI_5_0_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
01572 
01573 ///
01574 /// PCI Express Bridge AER Structure Definition
01575 ///
01576 typedef struct {
01577   UINT16  Type;
01578   UINT16  SourceId;
01579   UINT8   Reserved0[2];
01580   UINT8   Flags;
01581   UINT8   Enabled;
01582   UINT32  NumberOfRecordsToPreAllocate;
01583   UINT32  MaxSectionsPerRecord;
01584   UINT32  Bus;
01585   UINT16  Device;
01586   UINT16  Function;
01587   UINT16  DeviceControl;
01588   UINT8   Reserved1[2];
01589   UINT32  UncorrectableErrorMask;
01590   UINT32  UncorrectableErrorSeverity;
01591   UINT32  CorrectableErrorMask;
01592   UINT32  AdvancedErrorCapabilitiesAndControl;
01593   UINT32  SecondaryUncorrectableErrorMask;
01594   UINT32  SecondaryUncorrectableErrorSeverity;
01595   UINT32  SecondaryAdvancedErrorCapabilitiesAndControl;
01596 } EFI_ACPI_5_0_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
01597 
01598 ///
01599 /// Generic Hardware Error Source Structure Definition
01600 ///
01601 typedef struct {
01602   UINT16                                                 Type;
01603   UINT16                                                 SourceId;
01604   UINT16                                                 RelatedSourceId;
01605   UINT8                                                  Flags;
01606   UINT8                                                  Enabled;
01607   UINT32                                                 NumberOfRecordsToPreAllocate;
01608   UINT32                                                 MaxSectionsPerRecord;
01609   UINT32                                                 MaxRawDataLength;
01610   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE                 ErrorStatusAddress;
01611   EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
01612   UINT32                                                 ErrorStatusBlockLength;
01613 } EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
01614 
01615 ///
01616 /// Generic Error Status Definition
01617 ///
01618 typedef struct {
01619   EFI_ACPI_5_0_ERROR_BLOCK_STATUS              BlockStatus;
01620   UINT32                                       RawDataOffset;
01621   UINT32                                       RawDataLength;
01622   UINT32                                       DataLength;
01623   UINT32                                       ErrorSeverity;
01624 } EFI_ACPI_5_0_GENERIC_ERROR_STATUS_STRUCTURE;
01625 
01626 ///
01627 /// ERST - Error Record Serialization Table
01628 ///
01629 typedef struct {
01630   EFI_ACPI_DESCRIPTION_HEADER Header;
01631   UINT32                      SerializationHeaderSize;
01632   UINT8                       Reserved0[4];
01633   UINT32                      InstructionEntryCount;
01634 } EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
01635 
01636 ///
01637 /// ERST Version (as defined in ACPI 5.0 spec.)
01638 ///
01639 #define EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION 0x01
01640 
01641 ///
01642 /// ERST Serialization Actions
01643 ///
01644 #define EFI_ACPI_5_0_ERST_BEGIN_WRITE_OPERATION                    0x00
01645 #define EFI_ACPI_5_0_ERST_BEGIN_READ_OPERATION                     0x01
01646 #define EFI_ACPI_5_0_ERST_BEGIN_CLEAR_OPERATION                    0x02
01647 #define EFI_ACPI_5_0_ERST_END_OPERATION                            0x03
01648 #define EFI_ACPI_5_0_ERST_SET_RECORD_OFFSET                        0x04
01649 #define EFI_ACPI_5_0_ERST_EXECUTE_OPERATION                        0x05
01650 #define EFI_ACPI_5_0_ERST_CHECK_BUSY_STATUS                        0x06
01651 #define EFI_ACPI_5_0_ERST_GET_COMMAND_STATUS                       0x07
01652 #define EFI_ACPI_5_0_ERST_GET_RECORD_IDENTIFIER                    0x08
01653 #define EFI_ACPI_5_0_ERST_SET_RECORD_IDENTIFIER                    0x09
01654 #define EFI_ACPI_5_0_ERST_GET_RECORD_COUNT                         0x0A
01655 #define EFI_ACPI_5_0_ERST_BEGIN_DUMMY_WRITE_OPERATION              0x0B
01656 #define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE              0x0D
01657 #define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH       0x0E
01658 #define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES   0x0F
01659 
01660 ///
01661 /// ERST Action Command Status
01662 ///
01663 #define EFI_ACPI_5_0_ERST_STATUS_SUCCESS                           0x00
01664 #define EFI_ACPI_5_0_ERST_STATUS_NOT_ENOUGH_SPACE                  0x01
01665 #define EFI_ACPI_5_0_ERST_STATUS_HARDWARE_NOT_AVAILABLE            0x02
01666 #define EFI_ACPI_5_0_ERST_STATUS_FAILED                            0x03
01667 #define EFI_ACPI_5_0_ERST_STATUS_RECORD_STORE_EMPTY                0x04
01668 #define EFI_ACPI_5_0_ERST_STATUS_RECORD_NOT_FOUND                  0x05
01669 
01670 ///
01671 /// ERST Serialization Instructions
01672 ///
01673 #define EFI_ACPI_5_0_ERST_READ_REGISTER                            0x00
01674 #define EFI_ACPI_5_0_ERST_READ_REGISTER_VALUE                      0x01
01675 #define EFI_ACPI_5_0_ERST_WRITE_REGISTER                           0x02
01676 #define EFI_ACPI_5_0_ERST_WRITE_REGISTER_VALUE                     0x03
01677 #define EFI_ACPI_5_0_ERST_NOOP                                     0x04
01678 #define EFI_ACPI_5_0_ERST_LOAD_VAR1                                0x05
01679 #define EFI_ACPI_5_0_ERST_LOAD_VAR2                                0x06
01680 #define EFI_ACPI_5_0_ERST_STORE_VAR1                               0x07
01681 #define EFI_ACPI_5_0_ERST_ADD                                      0x08
01682 #define EFI_ACPI_5_0_ERST_SUBTRACT                                 0x09
01683 #define EFI_ACPI_5_0_ERST_ADD_VALUE                                0x0A
01684 #define EFI_ACPI_5_0_ERST_SUBTRACT_VALUE                           0x0B
01685 #define EFI_ACPI_5_0_ERST_STALL                                    0x0C
01686 #define EFI_ACPI_5_0_ERST_STALL_WHILE_TRUE                         0x0D
01687 #define EFI_ACPI_5_0_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE            0x0E
01688 #define EFI_ACPI_5_0_ERST_GOTO                                     0x0F
01689 #define EFI_ACPI_5_0_ERST_SET_SRC_ADDRESS_BASE                     0x10
01690 #define EFI_ACPI_5_0_ERST_SET_DST_ADDRESS_BASE                     0x11
01691 #define EFI_ACPI_5_0_ERST_MOVE_DATA                                0x12
01692 
01693 ///
01694 /// ERST Instruction Flags
01695 ///
01696 #define EFI_ACPI_5_0_ERST_PRESERVE_REGISTER                        0x01
01697 
01698 ///
01699 /// ERST Serialization Instruction Entry
01700 ///
01701 typedef struct {
01702   UINT8                                    SerializationAction;
01703   UINT8                                    Instruction;
01704   UINT8                                    Flags;
01705   UINT8                                    Reserved0;
01706   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
01707   UINT64                                   Value;
01708   UINT64                                   Mask;
01709 } EFI_ACPI_5_0_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
01710 
01711 ///
01712 /// EINJ - Error Injection Table
01713 ///
01714 typedef struct {
01715   EFI_ACPI_DESCRIPTION_HEADER Header;
01716   UINT32                      InjectionHeaderSize;
01717   UINT8                       InjectionFlags;
01718   UINT8                       Reserved0[3];
01719   UINT32                      InjectionEntryCount;
01720 } EFI_ACPI_5_0_ERROR_INJECTION_TABLE_HEADER;
01721 
01722 ///
01723 /// EINJ Version (as defined in ACPI 5.0 spec.)
01724 ///
01725 #define EFI_ACPI_5_0_ERROR_INJECTION_TABLE_REVISION 0x01
01726 
01727 ///
01728 /// EINJ Error Injection Actions
01729 ///
01730 #define EFI_ACPI_5_0_EINJ_BEGIN_INJECTION_OPERATION                0x00
01731 #define EFI_ACPI_5_0_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE           0x01
01732 #define EFI_ACPI_5_0_EINJ_SET_ERROR_TYPE                           0x02
01733 #define EFI_ACPI_5_0_EINJ_GET_ERROR_TYPE                           0x03
01734 #define EFI_ACPI_5_0_EINJ_END_OPERATION                            0x04
01735 #define EFI_ACPI_5_0_EINJ_EXECUTE_OPERATION                        0x05
01736 #define EFI_ACPI_5_0_EINJ_CHECK_BUSY_STATUS                        0x06
01737 #define EFI_ACPI_5_0_EINJ_GET_COMMAND_STATUS                       0x07
01738 #define EFI_ACPI_5_0_EINJ_TRIGGER_ERROR                            0xFF
01739 
01740 ///
01741 /// EINJ Action Command Status
01742 ///
01743 #define EFI_ACPI_5_0_EINJ_STATUS_SUCCESS                           0x00
01744 #define EFI_ACPI_5_0_EINJ_STATUS_UNKNOWN_FAILURE                   0x01
01745 #define EFI_ACPI_5_0_EINJ_STATUS_INVALID_ACCESS                    0x02
01746 
01747 ///
01748 /// EINJ Error Type Definition
01749 ///
01750 #define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_CORRECTABLE                 (1 << 0)
01751 #define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL      (1 << 1)
01752 #define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL         (1 << 2)
01753 #define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_CORRECTABLE                    (1 << 3)
01754 #define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL         (1 << 4)
01755 #define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL            (1 << 5)
01756 #define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE               (1 << 6)
01757 #define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL    (1 << 7)
01758 #define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL       (1 << 8)
01759 #define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_CORRECTABLE                  (1 << 9)
01760 #define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL       (1 << 10)
01761 #define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL          (1 << 11)
01762 
01763 ///
01764 /// EINJ Injection Instructions
01765 ///
01766 #define EFI_ACPI_5_0_EINJ_READ_REGISTER                            0x00
01767 #define EFI_ACPI_5_0_EINJ_READ_REGISTER_VALUE                      0x01
01768 #define EFI_ACPI_5_0_EINJ_WRITE_REGISTER                           0x02
01769 #define EFI_ACPI_5_0_EINJ_WRITE_REGISTER_VALUE                     0x03
01770 #define EFI_ACPI_5_0_EINJ_NOOP                                     0x04
01771 
01772 ///
01773 /// EINJ Instruction Flags
01774 ///
01775 #define EFI_ACPI_5_0_EINJ_PRESERVE_REGISTER                        0x01
01776 
01777 ///
01778 /// EINJ Injection Instruction Entry
01779 ///
01780 typedef struct {
01781   UINT8                                    InjectionAction;
01782   UINT8                                    Instruction;
01783   UINT8                                    Flags;
01784   UINT8                                    Reserved0;
01785   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
01786   UINT64                                   Value;
01787   UINT64                                   Mask;
01788 } EFI_ACPI_5_0_EINJ_INJECTION_INSTRUCTION_ENTRY;
01789 
01790 ///
01791 /// EINJ Trigger Action Table
01792 ///
01793 typedef struct {
01794   UINT32  HeaderSize;
01795   UINT32  Revision;
01796   UINT32  TableSize;
01797   UINT32  EntryCount;
01798 } EFI_ACPI_5_0_EINJ_TRIGGER_ACTION_TABLE;
01799 
01800 ///
01801 /// Platform Communications Channel Table (PCCT)
01802 ///
01803 typedef struct {
01804   EFI_ACPI_DESCRIPTION_HEADER Header;
01805   UINT32                      Flags;
01806   UINT64                      Reserved;
01807 } EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER;
01808 
01809 ///
01810 /// PCCT Version (as defined in ACPI 5.0 spec.)
01811 ///
01812 #define EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION 0x01
01813 
01814 ///
01815 /// PCCT Global Flags
01816 ///
01817 #define EFI_ACPI_5_0_PCCT_FLAGS_SCI_DOORBELL                      BIT0
01818 
01819 //
01820 // PCCT Subspace type
01821 //
01822 #define EFI_ACPI_5_0_PCCT_SUBSPACE_TYPE_GENERIC  0x00
01823 
01824 ///
01825 /// PCC Subspace Structure Header
01826 ///
01827 typedef struct {
01828   UINT8        Type;
01829   UINT8        Length;
01830 } EFI_ACPI_5_0_PCCT_SUBSPACE_HEADER;
01831 
01832 ///
01833 /// Generic Communications Subspace Structure
01834 ///
01835 typedef struct {
01836   UINT8                                    Type;
01837   UINT8                                    Length;
01838   UINT8                                    Reserved[6];
01839   UINT64                                   BaseAddress;
01840   UINT64                                   AddressLength;
01841   EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   DoorbellRegister;
01842   UINT64                                   DoorbellPreserve;
01843   UINT64                                   DoorbellWrite;
01844   UINT32                                   NominalLatency;
01845   UINT32                                   MaximumPeriodicAccessRate;
01846   UINT16                                   MinimumRequestTurnaroundTime;
01847 } EFI_ACPI_5_0_PCCT_SUBSPACE_GENERIC;
01848 
01849 ///
01850 /// Generic Communications Channel Shared Memory Region
01851 ///
01852 
01853 typedef struct {
01854   UINT8                                    Command;
01855   UINT8                                    Reserved:7;
01856   UINT8                                    GenerateSci:1;
01857 } EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND;
01858 
01859 typedef struct {
01860   UINT8                                    CommandComplete:1;
01861   UINT8                                    SciDoorbell:1;
01862   UINT8                                    Error:1;
01863   UINT8                                    PlatformNotification:1;
01864   UINT8                                    Reserved:4;
01865   UINT8                                    Reserved1;
01866 } EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS;
01867 
01868 typedef struct {
01869   UINT32                                                    Signature;
01870   EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND    Command;
01871   EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS     Status;
01872 } EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER;
01873 
01874 //
01875 // Known table signatures
01876 //
01877 
01878 ///
01879 /// "RSD PTR " Root System Description Pointer
01880 ///
01881 #define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
01882 
01883 ///
01884 /// "APIC" Multiple APIC Description Table
01885 ///
01886 #define EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
01887 
01888 ///
01889 /// "BERT" Boot Error Record Table
01890 ///
01891 #define EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
01892 
01893 ///
01894 /// "BGRT" Boot Graphics Resource Table
01895 ///
01896 #define EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('B', 'G', 'R', 'T')
01897 
01898 ///
01899 /// "CPEP" Corrected Platform Error Polling Table
01900 ///
01901 #define EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
01902 
01903 ///
01904 /// "DSDT" Differentiated System Description Table
01905 ///
01906 #define EFI_ACPI_5_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
01907 
01908 ///
01909 /// "ECDT" Embedded Controller Boot Resources Table
01910 ///
01911 #define EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
01912 
01913 ///
01914 /// "EINJ" Error Injection Table
01915 ///
01916 #define EFI_ACPI_5_0_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
01917 
01918 ///
01919 /// "ERST" Error Record Serialization Table
01920 ///
01921 #define EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
01922 
01923 ///
01924 /// "FACP" Fixed ACPI Description Table
01925 ///
01926 #define EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
01927 
01928 ///
01929 /// "FACS" Firmware ACPI Control Structure
01930 ///
01931 #define EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
01932 
01933 ///
01934 /// "FPDT" Firmware Performance Data Table
01935 ///
01936 #define EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE  SIGNATURE_32('F', 'P', 'D', 'T')
01937 
01938 ///
01939 /// "GTDT" Generic Timer Description Table
01940 ///
01941 #define EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('G', 'T', 'D', 'T')
01942 
01943 ///
01944 /// "HEST" Hardware Error Source Table
01945 ///
01946 #define EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
01947 
01948 ///
01949 /// "MPST" Memory Power State Table
01950 ///
01951 #define EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_SIGNATURE  SIGNATURE_32('M', 'P', 'S', 'T')
01952 
01953 ///
01954 /// "MSCT" Maximum System Characteristics Table
01955 ///
01956 #define EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
01957 
01958 ///
01959 /// "PMTT" Platform Memory Topology Table
01960 ///
01961 #define EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE  SIGNATURE_32('P', 'M', 'T', 'T')
01962 
01963 ///
01964 /// "PSDT" Persistent System Description Table
01965 ///
01966 #define EFI_ACPI_5_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
01967 
01968 ///
01969 /// "RASF" ACPI RAS Feature Table
01970 ///
01971 #define EFI_ACPI_5_0_ACPI_RAS_FEATURE_TABLE_SIGNATURE  SIGNATURE_32('R', 'A', 'S', 'F')
01972 
01973 ///
01974 /// "RSDT" Root System Description Table
01975 ///
01976 #define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
01977 
01978 ///
01979 /// "SBST" Smart Battery Specification Table
01980 ///
01981 #define EFI_ACPI_5_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
01982 
01983 ///
01984 /// "SLIT" System Locality Information Table
01985 ///
01986 #define EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
01987 
01988 ///
01989 /// "SRAT" System Resource Affinity Table
01990 ///
01991 #define EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
01992 
01993 ///
01994 /// "SSDT" Secondary System Description Table
01995 ///
01996 #define EFI_ACPI_5_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
01997 
01998 ///
01999 /// "XSDT" Extended System Description Table
02000 ///
02001 #define EFI_ACPI_5_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
02002 
02003 ///
02004 /// "BOOT" MS Simple Boot Spec
02005 ///
02006 #define EFI_ACPI_5_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
02007 
02008 ///
02009 /// "CSRT" MS Core System Resource Table
02010 ///
02011 #define EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('C', 'S', 'R', 'T')
02012 
02013 ///
02014 /// "DBG2" MS Debug Port 2 Spec
02015 ///
02016 #define EFI_ACPI_5_0_DEBUG_PORT_2_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', '2')
02017 
02018 ///
02019 /// "DBGP" MS Debug Port Spec
02020 ///
02021 #define EFI_ACPI_5_0_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
02022 
02023 ///
02024 /// "DMAR" DMA Remapping Table
02025 ///
02026 #define EFI_ACPI_5_0_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
02027 
02028 ///
02029 /// "DRTM" Dynamic Root of Trust for Measurement Table
02030 ///
02031 #define EFI_ACPI_5_0_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE  SIGNATURE_32('D', 'R', 'T', 'M')
02032 
02033 ///
02034 /// "ETDT" Event Timer Description Table
02035 ///
02036 #define EFI_ACPI_5_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
02037 
02038 ///
02039 /// "HPET" IA-PC High Precision Event Timer Table
02040 ///
02041 #define EFI_ACPI_5_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
02042 
02043 ///
02044 /// "iBFT" iSCSI Boot Firmware Table
02045 ///
02046 #define EFI_ACPI_5_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
02047 
02048 ///
02049 /// "IVRS" I/O Virtualization Reporting Structure
02050 ///
02051 #define EFI_ACPI_5_0_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
02052 
02053 ///
02054 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
02055 ///
02056 #define EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
02057 
02058 ///
02059 /// "MCHI" Management Controller Host Interface Table
02060 ///
02061 #define EFI_ACPI_5_0_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
02062 
02063 ///
02064 /// "MSDM" MS Data Management Table
02065 ///
02066 #define EFI_ACPI_5_0_DATA_MANAGEMENT_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'D', 'M')
02067 
02068 ///
02069 /// "SLIC" MS Software Licensing Table Specification
02070 ///
02071 #define EFI_ACPI_5_0_SOFTWARE_LICENSING_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'C')
02072 
02073 ///
02074 /// "SPCR" Serial Port Concole Redirection Table
02075 ///
02076 #define EFI_ACPI_5_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
02077 
02078 ///
02079 /// "SPMI" Server Platform Management Interface Table
02080 ///
02081 #define EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
02082 
02083 ///
02084 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
02085 ///
02086 #define EFI_ACPI_5_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
02087 
02088 ///
02089 /// "TPM2" Trusted Computing Platform 1 Table
02090 ///
02091 #define EFI_ACPI_5_0_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE  SIGNATURE_32('T', 'P', 'M', '2')
02092 
02093 ///
02094 /// "UEFI" UEFI ACPI Data Table
02095 ///
02096 #define EFI_ACPI_5_0_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
02097 
02098 ///
02099 /// "WAET" Windows ACPI Emulated Devices Table
02100 ///
02101 #define EFI_ACPI_5_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
02102 #define EFI_ACPI_5_0_WINDOWS_ACPI_ENLIGHTENMENT_TABLE_SIGNATURE  EFI_ACPI_5_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE
02103 
02104 ///
02105 /// "WDAT" Watchdog Action Table
02106 ///
02107 #define EFI_ACPI_5_0_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
02108 
02109 ///
02110 /// "WDRT" Watchdog Resource Table
02111 ///
02112 #define EFI_ACPI_5_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
02113 
02114 ///
02115 /// "WPBT" MS Platform Binary Table
02116 ///
02117 #define EFI_ACPI_5_0_PLATFORM_BINARY_TABLE_SIGNATURE  SIGNATURE_32('W', 'P', 'B', 'T')
02118 
02119 #pragma pack()
02120 
02121 #endif