iPXE
Acpi60.h
Go to the documentation of this file.
00001 /** @file
00002   ACPI 6.0 definitions from the ACPI Specification Revision 6.0 Errata A January, 2016.
00003 
00004   Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
00005   (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<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_6_0_H_
00016 #define _ACPI_6_0_H_
00017 
00018 FILE_LICENCE ( BSD3 );
00019 
00020 #include <ipxe/efi/IndustryStandard/Acpi51.h>
00021 
00022 //
00023 // Ensure proper structure formats
00024 //
00025 #pragma pack(1)
00026 
00027 ///
00028 /// ACPI 6.0 Generic Address Space definition
00029 ///
00030 typedef struct {
00031   UINT8   AddressSpaceId;
00032   UINT8   RegisterBitWidth;
00033   UINT8   RegisterBitOffset;
00034   UINT8   AccessSize;
00035   UINT64  Address;
00036 } EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE;
00037 
00038 //
00039 // Generic Address Space Address IDs
00040 //
00041 #define EFI_ACPI_6_0_SYSTEM_MEMORY              0
00042 #define EFI_ACPI_6_0_SYSTEM_IO                  1
00043 #define EFI_ACPI_6_0_PCI_CONFIGURATION_SPACE    2
00044 #define EFI_ACPI_6_0_EMBEDDED_CONTROLLER        3
00045 #define EFI_ACPI_6_0_SMBUS                      4
00046 #define EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL  0x0A
00047 #define EFI_ACPI_6_0_FUNCTIONAL_FIXED_HARDWARE       0x7F
00048 
00049 //
00050 // Generic Address Space Access Sizes
00051 //
00052 #define EFI_ACPI_6_0_UNDEFINED  0
00053 #define EFI_ACPI_6_0_BYTE       1
00054 #define EFI_ACPI_6_0_WORD       2
00055 #define EFI_ACPI_6_0_DWORD      3
00056 #define EFI_ACPI_6_0_QWORD      4
00057 
00058 //
00059 // ACPI 6.0 table structures
00060 //
00061 
00062 ///
00063 /// Root System Description Pointer Structure
00064 ///
00065 typedef struct {
00066   UINT64  Signature;
00067   UINT8   Checksum;
00068   UINT8   OemId[6];
00069   UINT8   Revision;
00070   UINT32  RsdtAddress;
00071   UINT32  Length;
00072   UINT64  XsdtAddress;
00073   UINT8   ExtendedChecksum;
00074   UINT8   Reserved[3];
00075 } EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
00076 
00077 ///
00078 /// RSD_PTR Revision (as defined in ACPI 6.0 spec.)
00079 ///
00080 #define EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02  ///< ACPISpec (Revision 6.0) says current value is 2
00081 
00082 ///
00083 /// Common table header, this prefaces all ACPI tables, including FACS, but
00084 /// excluding the RSD PTR structure
00085 ///
00086 typedef struct {
00087   UINT32  Signature;
00088   UINT32  Length;
00089 } EFI_ACPI_6_0_COMMON_HEADER;
00090 
00091 //
00092 // Root System Description Table
00093 // No definition needed as it is a common description table header, the same with
00094 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
00095 //
00096 
00097 ///
00098 /// RSDT Revision (as defined in ACPI 6.0 spec.)
00099 ///
00100 #define EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
00101 
00102 //
00103 // Extended System Description Table
00104 // No definition needed as it is a common description table header, the same with
00105 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
00106 //
00107 
00108 ///
00109 /// XSDT Revision (as defined in ACPI 6.0 spec.)
00110 ///
00111 #define EFI_ACPI_6_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
00112 
00113 ///
00114 /// Fixed ACPI Description Table Structure (FADT)
00115 ///
00116 typedef struct {
00117   EFI_ACPI_DESCRIPTION_HEADER             Header;
00118   UINT32                                  FirmwareCtrl;
00119   UINT32                                  Dsdt;
00120   UINT8                                   Reserved0;
00121   UINT8                                   PreferredPmProfile;
00122   UINT16                                  SciInt;
00123   UINT32                                  SmiCmd;
00124   UINT8                                   AcpiEnable;
00125   UINT8                                   AcpiDisable;
00126   UINT8                                   S4BiosReq;
00127   UINT8                                   PstateCnt;
00128   UINT32                                  Pm1aEvtBlk;
00129   UINT32                                  Pm1bEvtBlk;
00130   UINT32                                  Pm1aCntBlk;
00131   UINT32                                  Pm1bCntBlk;
00132   UINT32                                  Pm2CntBlk;
00133   UINT32                                  PmTmrBlk;
00134   UINT32                                  Gpe0Blk;
00135   UINT32                                  Gpe1Blk;
00136   UINT8                                   Pm1EvtLen;
00137   UINT8                                   Pm1CntLen;
00138   UINT8                                   Pm2CntLen;
00139   UINT8                                   PmTmrLen;
00140   UINT8                                   Gpe0BlkLen;
00141   UINT8                                   Gpe1BlkLen;
00142   UINT8                                   Gpe1Base;
00143   UINT8                                   CstCnt;
00144   UINT16                                  PLvl2Lat;
00145   UINT16                                  PLvl3Lat;
00146   UINT16                                  FlushSize;
00147   UINT16                                  FlushStride;
00148   UINT8                                   DutyOffset;
00149   UINT8                                   DutyWidth;
00150   UINT8                                   DayAlrm;
00151   UINT8                                   MonAlrm;
00152   UINT8                                   Century;
00153   UINT16                                  IaPcBootArch;
00154   UINT8                                   Reserved1;
00155   UINT32                                  Flags;
00156   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  ResetReg;
00157   UINT8                                   ResetValue;
00158   UINT16                                  ArmBootArch;
00159   UINT8                                   MinorVersion;
00160   UINT64                                  XFirmwareCtrl;
00161   UINT64                                  XDsdt;
00162   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk;
00163   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk;
00164   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk;
00165   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk;
00166   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk;
00167   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk;
00168   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk;
00169   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk;
00170   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  SleepControlReg;
00171   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  SleepStatusReg;
00172   UINT64                                  HypervisorVendorIdentity;
00173 } EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE;
00174 
00175 ///
00176 /// FADT Version (as defined in ACPI 6.0 spec.)
00177 ///
00178 #define EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x06
00179 #define EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION  0x00
00180 
00181 //
00182 // Fixed ACPI Description Table Preferred Power Management Profile
00183 //
00184 #define EFI_ACPI_6_0_PM_PROFILE_UNSPECIFIED         0
00185 #define EFI_ACPI_6_0_PM_PROFILE_DESKTOP             1
00186 #define EFI_ACPI_6_0_PM_PROFILE_MOBILE              2
00187 #define EFI_ACPI_6_0_PM_PROFILE_WORKSTATION         3
00188 #define EFI_ACPI_6_0_PM_PROFILE_ENTERPRISE_SERVER   4
00189 #define EFI_ACPI_6_0_PM_PROFILE_SOHO_SERVER         5
00190 #define EFI_ACPI_6_0_PM_PROFILE_APPLIANCE_PC        6
00191 #define EFI_ACPI_6_0_PM_PROFILE_PERFORMANCE_SERVER  7
00192 #define EFI_ACPI_6_0_PM_PROFILE_TABLET              8
00193 
00194 //
00195 // Fixed ACPI Description Table Boot Architecture Flags
00196 // All other bits are reserved and must be set to 0.
00197 //
00198 #define EFI_ACPI_6_0_LEGACY_DEVICES              BIT0
00199 #define EFI_ACPI_6_0_8042                        BIT1
00200 #define EFI_ACPI_6_0_VGA_NOT_PRESENT             BIT2
00201 #define EFI_ACPI_6_0_MSI_NOT_SUPPORTED           BIT3
00202 #define EFI_ACPI_6_0_PCIE_ASPM_CONTROLS          BIT4
00203 #define EFI_ACPI_6_0_CMOS_RTC_NOT_PRESENT        BIT5
00204 
00205 //
00206 // Fixed ACPI Description Table Arm Boot Architecture Flags
00207 // All other bits are reserved and must be set to 0.
00208 //
00209 #define EFI_ACPI_6_0_ARM_PSCI_COMPLIANT              BIT0
00210 #define EFI_ACPI_6_0_ARM_PSCI_USE_HVC                BIT1
00211 
00212 //
00213 // Fixed ACPI Description Table Fixed Feature Flags
00214 // All other bits are reserved and must be set to 0.
00215 //
00216 #define EFI_ACPI_6_0_WBINVD                                 BIT0
00217 #define EFI_ACPI_6_0_WBINVD_FLUSH                           BIT1
00218 #define EFI_ACPI_6_0_PROC_C1                                BIT2
00219 #define EFI_ACPI_6_0_P_LVL2_UP                              BIT3
00220 #define EFI_ACPI_6_0_PWR_BUTTON                             BIT4
00221 #define EFI_ACPI_6_0_SLP_BUTTON                             BIT5
00222 #define EFI_ACPI_6_0_FIX_RTC                                BIT6
00223 #define EFI_ACPI_6_0_RTC_S4                                 BIT7
00224 #define EFI_ACPI_6_0_TMR_VAL_EXT                            BIT8
00225 #define EFI_ACPI_6_0_DCK_CAP                                BIT9
00226 #define EFI_ACPI_6_0_RESET_REG_SUP                          BIT10
00227 #define EFI_ACPI_6_0_SEALED_CASE                            BIT11
00228 #define EFI_ACPI_6_0_HEADLESS                               BIT12
00229 #define EFI_ACPI_6_0_CPU_SW_SLP                             BIT13
00230 #define EFI_ACPI_6_0_PCI_EXP_WAK                            BIT14
00231 #define EFI_ACPI_6_0_USE_PLATFORM_CLOCK                     BIT15
00232 #define EFI_ACPI_6_0_S4_RTC_STS_VALID                       BIT16
00233 #define EFI_ACPI_6_0_REMOTE_POWER_ON_CAPABLE                BIT17
00234 #define EFI_ACPI_6_0_FORCE_APIC_CLUSTER_MODEL               BIT18
00235 #define EFI_ACPI_6_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE   BIT19
00236 #define EFI_ACPI_6_0_HW_REDUCED_ACPI                        BIT20
00237 #define EFI_ACPI_6_0_LOW_POWER_S0_IDLE_CAPABLE              BIT21
00238 
00239 ///
00240 /// Firmware ACPI Control Structure
00241 ///
00242 typedef struct {
00243   UINT32  Signature;
00244   UINT32  Length;
00245   UINT32  HardwareSignature;
00246   UINT32  FirmwareWakingVector;
00247   UINT32  GlobalLock;
00248   UINT32  Flags;
00249   UINT64  XFirmwareWakingVector;
00250   UINT8   Version;
00251   UINT8   Reserved0[3];
00252   UINT32  OspmFlags;
00253   UINT8   Reserved1[24];
00254 } EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
00255 
00256 ///
00257 /// FACS Version (as defined in ACPI 6.0 spec.)
00258 ///
00259 #define EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
00260 
00261 ///
00262 /// Firmware Control Structure Feature Flags
00263 /// All other bits are reserved and must be set to 0.
00264 ///
00265 #define EFI_ACPI_6_0_S4BIOS_F                     BIT0
00266 #define EFI_ACPI_6_0_64BIT_WAKE_SUPPORTED_F       BIT1
00267 
00268 ///
00269 /// OSPM Enabled Firmware Control Structure Flags
00270 /// All other bits are reserved and must be set to 0.
00271 ///
00272 #define EFI_ACPI_6_0_OSPM_64BIT_WAKE_F            BIT0
00273 
00274 //
00275 // Differentiated System Description Table,
00276 // Secondary System Description Table
00277 // and Persistent System Description Table,
00278 // no definition needed as they are common description table header, the same with
00279 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
00280 //
00281 #define EFI_ACPI_6_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION   0x02
00282 #define EFI_ACPI_6_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION        0x02
00283 
00284 ///
00285 /// Multiple APIC Description Table header definition.  The rest of the table
00286 /// must be defined in a platform specific manner.
00287 ///
00288 typedef struct {
00289   EFI_ACPI_DESCRIPTION_HEADER Header;
00290   UINT32                      LocalApicAddress;
00291   UINT32                      Flags;
00292 } EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
00293 
00294 ///
00295 /// MADT Revision (as defined in ACPI 6.0 Errata A spec.)
00296 ///
00297 #define EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x04
00298 
00299 ///
00300 /// Multiple APIC Flags
00301 /// All other bits are reserved and must be set to 0.
00302 ///
00303 #define EFI_ACPI_6_0_PCAT_COMPAT         BIT0
00304 
00305 //
00306 // Multiple APIC Description Table APIC structure types
00307 // All other values between 0x0D and 0x7F are reserved and
00308 // will be ignored by OSPM. 0x80 ~ 0xFF are reserved for OEM.
00309 //
00310 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC           0x00
00311 #define EFI_ACPI_6_0_IO_APIC                        0x01
00312 #define EFI_ACPI_6_0_INTERRUPT_SOURCE_OVERRIDE      0x02
00313 #define EFI_ACPI_6_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
00314 #define EFI_ACPI_6_0_LOCAL_APIC_NMI                 0x04
00315 #define EFI_ACPI_6_0_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
00316 #define EFI_ACPI_6_0_IO_SAPIC                       0x06
00317 #define EFI_ACPI_6_0_LOCAL_SAPIC                    0x07
00318 #define EFI_ACPI_6_0_PLATFORM_INTERRUPT_SOURCES     0x08
00319 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC         0x09
00320 #define EFI_ACPI_6_0_LOCAL_X2APIC_NMI               0x0A
00321 #define EFI_ACPI_6_0_GIC                            0x0B
00322 #define EFI_ACPI_6_0_GICD                           0x0C
00323 #define EFI_ACPI_6_0_GIC_MSI_FRAME                  0x0D
00324 #define EFI_ACPI_6_0_GICR                           0x0E
00325 #define EFI_ACPI_6_0_GIC_ITS                        0x0F
00326 
00327 //
00328 // APIC Structure Definitions
00329 //
00330 
00331 ///
00332 /// Processor Local APIC Structure Definition
00333 ///
00334 typedef struct {
00335   UINT8   Type;
00336   UINT8   Length;
00337   UINT8   AcpiProcessorUid;
00338   UINT8   ApicId;
00339   UINT32  Flags;
00340 } EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
00341 
00342 ///
00343 /// Local APIC Flags.  All other bits are reserved and must be 0.
00344 ///
00345 #define EFI_ACPI_6_0_LOCAL_APIC_ENABLED        BIT0
00346 
00347 ///
00348 /// IO APIC Structure
00349 ///
00350 typedef struct {
00351   UINT8   Type;
00352   UINT8   Length;
00353   UINT8   IoApicId;
00354   UINT8   Reserved;
00355   UINT32  IoApicAddress;
00356   UINT32  GlobalSystemInterruptBase;
00357 } EFI_ACPI_6_0_IO_APIC_STRUCTURE;
00358 
00359 ///
00360 /// Interrupt Source Override Structure
00361 ///
00362 typedef struct {
00363   UINT8   Type;
00364   UINT8   Length;
00365   UINT8   Bus;
00366   UINT8   Source;
00367   UINT32  GlobalSystemInterrupt;
00368   UINT16  Flags;
00369 } EFI_ACPI_6_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
00370 
00371 ///
00372 /// Platform Interrupt Sources Structure Definition
00373 ///
00374 typedef struct {
00375   UINT8   Type;
00376   UINT8   Length;
00377   UINT16  Flags;
00378   UINT8   InterruptType;
00379   UINT8   ProcessorId;
00380   UINT8   ProcessorEid;
00381   UINT8   IoSapicVector;
00382   UINT32  GlobalSystemInterrupt;
00383   UINT32  PlatformInterruptSourceFlags;
00384   UINT8   CpeiProcessorOverride;
00385   UINT8   Reserved[31];
00386 } EFI_ACPI_6_0_PLATFORM_INTERRUPT_APIC_STRUCTURE;
00387 
00388 //
00389 // MPS INTI flags.
00390 // All other bits are reserved and must be set to 0.
00391 //
00392 #define EFI_ACPI_6_0_POLARITY      (3 << 0)
00393 #define EFI_ACPI_6_0_TRIGGER_MODE  (3 << 2)
00394 
00395 ///
00396 /// Non-Maskable Interrupt Source Structure
00397 ///
00398 typedef struct {
00399   UINT8   Type;
00400   UINT8   Length;
00401   UINT16  Flags;
00402   UINT32  GlobalSystemInterrupt;
00403 } EFI_ACPI_6_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
00404 
00405 ///
00406 /// Local APIC NMI Structure
00407 ///
00408 typedef struct {
00409   UINT8   Type;
00410   UINT8   Length;
00411   UINT8   AcpiProcessorUid;
00412   UINT16  Flags;
00413   UINT8   LocalApicLint;
00414 } EFI_ACPI_6_0_LOCAL_APIC_NMI_STRUCTURE;
00415 
00416 ///
00417 /// Local APIC Address Override Structure
00418 ///
00419 typedef struct {
00420   UINT8   Type;
00421   UINT8   Length;
00422   UINT16  Reserved;
00423   UINT64  LocalApicAddress;
00424 } EFI_ACPI_6_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
00425 
00426 ///
00427 /// IO SAPIC Structure
00428 ///
00429 typedef struct {
00430   UINT8   Type;
00431   UINT8   Length;
00432   UINT8   IoApicId;
00433   UINT8   Reserved;
00434   UINT32  GlobalSystemInterruptBase;
00435   UINT64  IoSapicAddress;
00436 } EFI_ACPI_6_0_IO_SAPIC_STRUCTURE;
00437 
00438 ///
00439 /// Local SAPIC Structure
00440 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
00441 ///
00442 typedef struct {
00443   UINT8   Type;
00444   UINT8   Length;
00445   UINT8   AcpiProcessorId;
00446   UINT8   LocalSapicId;
00447   UINT8   LocalSapicEid;
00448   UINT8   Reserved[3];
00449   UINT32  Flags;
00450   UINT32  ACPIProcessorUIDValue;
00451 } EFI_ACPI_6_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
00452 
00453 ///
00454 /// Platform Interrupt Sources Structure
00455 ///
00456 typedef struct {
00457   UINT8   Type;
00458   UINT8   Length;
00459   UINT16  Flags;
00460   UINT8   InterruptType;
00461   UINT8   ProcessorId;
00462   UINT8   ProcessorEid;
00463   UINT8   IoSapicVector;
00464   UINT32  GlobalSystemInterrupt;
00465   UINT32  PlatformInterruptSourceFlags;
00466 } EFI_ACPI_6_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
00467 
00468 ///
00469 /// Platform Interrupt Source Flags.
00470 /// All other bits are reserved and must be set to 0.
00471 ///
00472 #define EFI_ACPI_6_0_CPEI_PROCESSOR_OVERRIDE          BIT0
00473 
00474 ///
00475 /// Processor Local x2APIC Structure Definition
00476 ///
00477 typedef struct {
00478   UINT8   Type;
00479   UINT8   Length;
00480   UINT8   Reserved[2];
00481   UINT32  X2ApicId;
00482   UINT32  Flags;
00483   UINT32  AcpiProcessorUid;
00484 } EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
00485 
00486 ///
00487 /// Local x2APIC NMI Structure
00488 ///
00489 typedef struct {
00490   UINT8   Type;
00491   UINT8   Length;
00492   UINT16  Flags;
00493   UINT32  AcpiProcessorUid;
00494   UINT8   LocalX2ApicLint;
00495   UINT8   Reserved[3];
00496 } EFI_ACPI_6_0_LOCAL_X2APIC_NMI_STRUCTURE;
00497 
00498 ///
00499 /// GIC Structure
00500 ///
00501 typedef struct {
00502   UINT8   Type;
00503   UINT8   Length;
00504   UINT16  Reserved;
00505   UINT32  CPUInterfaceNumber;
00506   UINT32  AcpiProcessorUid;
00507   UINT32  Flags;
00508   UINT32  ParkingProtocolVersion;
00509   UINT32  PerformanceInterruptGsiv;
00510   UINT64  ParkedAddress;
00511   UINT64  PhysicalBaseAddress;
00512   UINT64  GICV;
00513   UINT64  GICH;
00514   UINT32  VGICMaintenanceInterrupt;
00515   UINT64  GICRBaseAddress;
00516   UINT64  MPIDR;
00517   UINT8   ProcessorPowerEfficiencyClass;
00518   UINT8   Reserved2[3];
00519 } EFI_ACPI_6_0_GIC_STRUCTURE;
00520 
00521 ///
00522 /// GIC Flags.  All other bits are reserved and must be 0.
00523 ///
00524 #define EFI_ACPI_6_0_GIC_ENABLED                              BIT0
00525 #define EFI_ACPI_6_0_PERFORMANCE_INTERRUPT_MODEL              BIT1
00526 #define EFI_ACPI_6_0_VGIC_MAINTENANCE_INTERRUPT_MODE_FLAGS    BIT2
00527 
00528 ///
00529 /// GIC Distributor Structure
00530 ///
00531 typedef struct {
00532   UINT8   Type;
00533   UINT8   Length;
00534   UINT16  Reserved1;
00535   UINT32  GicId;
00536   UINT64  PhysicalBaseAddress;
00537   UINT32  SystemVectorBase;
00538   UINT8   GicVersion;
00539   UINT8   Reserved2[3];
00540 } EFI_ACPI_6_0_GIC_DISTRIBUTOR_STRUCTURE;
00541 
00542 ///
00543 /// GIC Version
00544 ///
00545 #define EFI_ACPI_6_0_GIC_V1                                   0x01
00546 #define EFI_ACPI_6_0_GIC_V2                                   0x02
00547 #define EFI_ACPI_6_0_GIC_V3                                   0x03
00548 #define EFI_ACPI_6_0_GIC_V4                                   0x04
00549 
00550 ///
00551 /// GIC MSI Frame Structure
00552 ///
00553 typedef struct {
00554   UINT8   Type;
00555   UINT8   Length;
00556   UINT16  Reserved1;
00557   UINT32  GicMsiFrameId;
00558   UINT64  PhysicalBaseAddress;
00559   UINT32  Flags;
00560   UINT16  SPICount;
00561   UINT16  SPIBase;
00562 } EFI_ACPI_6_0_GIC_MSI_FRAME_STRUCTURE;
00563 
00564 ///
00565 /// GIC MSI Frame Flags.  All other bits are reserved and must be 0.
00566 ///
00567 #define EFI_ACPI_6_0_SPI_COUNT_BASE_SELECT                    BIT0
00568 
00569 ///
00570 /// GICR Structure
00571 ///
00572 typedef struct {
00573   UINT8   Type;
00574   UINT8   Length;
00575   UINT16  Reserved;
00576   UINT64  DiscoveryRangeBaseAddress;
00577   UINT32  DiscoveryRangeLength;
00578 } EFI_ACPI_6_0_GICR_STRUCTURE;
00579 
00580 ///
00581 /// GIC Interrupt Translation Service Structure
00582 ///
00583 typedef struct {
00584   UINT8   Type;
00585   UINT8   Length;
00586   UINT16  Reserved;
00587   UINT32  GicItsId;
00588   UINT64  PhysicalBaseAddress;
00589   UINT32  Reserved2;
00590 } EFI_ACPI_6_0_GIC_ITS_STRUCTURE;
00591 
00592 ///
00593 /// Smart Battery Description Table (SBST)
00594 ///
00595 typedef struct {
00596   EFI_ACPI_DESCRIPTION_HEADER Header;
00597   UINT32                      WarningEnergyLevel;
00598   UINT32                      LowEnergyLevel;
00599   UINT32                      CriticalEnergyLevel;
00600 } EFI_ACPI_6_0_SMART_BATTERY_DESCRIPTION_TABLE;
00601 
00602 ///
00603 /// SBST Version (as defined in ACPI 6.0 spec.)
00604 ///
00605 #define EFI_ACPI_6_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
00606 
00607 ///
00608 /// Embedded Controller Boot Resources Table (ECDT)
00609 /// The table is followed by a null terminated ASCII string that contains
00610 /// a fully qualified reference to the name space object.
00611 ///
00612 typedef struct {
00613   EFI_ACPI_DESCRIPTION_HEADER             Header;
00614   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  EcControl;
00615   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE  EcData;
00616   UINT32                                  Uid;
00617   UINT8                                   GpeBit;
00618 } EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
00619 
00620 ///
00621 /// ECDT Version (as defined in ACPI 6.0 spec.)
00622 ///
00623 #define EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
00624 
00625 ///
00626 /// System Resource Affinity Table (SRAT).  The rest of the table
00627 /// must be defined in a platform specific manner.
00628 ///
00629 typedef struct {
00630   EFI_ACPI_DESCRIPTION_HEADER Header;
00631   UINT32                      Reserved1;  ///< Must be set to 1
00632   UINT64                      Reserved2;
00633 } EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
00634 
00635 ///
00636 /// SRAT Version (as defined in ACPI 6.0 spec.)
00637 ///
00638 #define EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
00639 
00640 //
00641 // SRAT structure types.
00642 // All other values between 0x04 an 0xFF are reserved and
00643 // will be ignored by OSPM.
00644 //
00645 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
00646 #define EFI_ACPI_6_0_MEMORY_AFFINITY                      0x01
00647 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
00648 #define EFI_ACPI_6_0_GICC_AFFINITY                        0x03
00649 
00650 ///
00651 /// Processor Local APIC/SAPIC Affinity Structure Definition
00652 ///
00653 typedef struct {
00654   UINT8   Type;
00655   UINT8   Length;
00656   UINT8   ProximityDomain7To0;
00657   UINT8   ApicId;
00658   UINT32  Flags;
00659   UINT8   LocalSapicEid;
00660   UINT8   ProximityDomain31To8[3];
00661   UINT32  ClockDomain;
00662 } EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
00663 
00664 ///
00665 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
00666 ///
00667 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0)
00668 
00669 ///
00670 /// Memory Affinity Structure Definition
00671 ///
00672 typedef struct {
00673   UINT8   Type;
00674   UINT8   Length;
00675   UINT32  ProximityDomain;
00676   UINT16  Reserved1;
00677   UINT32  AddressBaseLow;
00678   UINT32  AddressBaseHigh;
00679   UINT32  LengthLow;
00680   UINT32  LengthHigh;
00681   UINT32  Reserved2;
00682   UINT32  Flags;
00683   UINT64  Reserved3;
00684 } EFI_ACPI_6_0_MEMORY_AFFINITY_STRUCTURE;
00685 
00686 //
00687 // Memory Flags.  All other bits are reserved and must be 0.
00688 //
00689 #define EFI_ACPI_6_0_MEMORY_ENABLED       (1 << 0)
00690 #define EFI_ACPI_6_0_MEMORY_HOT_PLUGGABLE (1 << 1)
00691 #define EFI_ACPI_6_0_MEMORY_NONVOLATILE   (1 << 2)
00692 
00693 ///
00694 /// Processor Local x2APIC Affinity Structure Definition
00695 ///
00696 typedef struct {
00697   UINT8   Type;
00698   UINT8   Length;
00699   UINT8   Reserved1[2];
00700   UINT32  ProximityDomain;
00701   UINT32  X2ApicId;
00702   UINT32  Flags;
00703   UINT32  ClockDomain;
00704   UINT8   Reserved2[4];
00705 } EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
00706 
00707 ///
00708 /// GICC Affinity Structure Definition
00709 ///
00710 typedef struct {
00711   UINT8   Type;
00712   UINT8   Length;
00713   UINT32  ProximityDomain;
00714   UINT32  AcpiProcessorUid;
00715   UINT32  Flags;
00716   UINT32  ClockDomain;
00717 } EFI_ACPI_6_0_GICC_AFFINITY_STRUCTURE;
00718 
00719 ///
00720 /// GICC Flags.  All other bits are reserved and must be 0.
00721 ///
00722 #define EFI_ACPI_6_0_GICC_ENABLED (1 << 0)
00723 
00724 ///
00725 /// System Locality Distance Information Table (SLIT).
00726 /// The rest of the table is a matrix.
00727 ///
00728 typedef struct {
00729   EFI_ACPI_DESCRIPTION_HEADER Header;
00730   UINT64                      NumberOfSystemLocalities;
00731 } EFI_ACPI_6_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
00732 
00733 ///
00734 /// SLIT Version (as defined in ACPI 6.0 spec.)
00735 ///
00736 #define EFI_ACPI_6_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
00737 
00738 ///
00739 /// Corrected Platform Error Polling Table (CPEP)
00740 ///
00741 typedef struct {
00742   EFI_ACPI_DESCRIPTION_HEADER Header;
00743   UINT8                       Reserved[8];
00744 } EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
00745 
00746 ///
00747 /// CPEP Version (as defined in ACPI 6.0 spec.)
00748 ///
00749 #define EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION 0x01
00750 
00751 //
00752 // CPEP processor structure types.
00753 //
00754 #define EFI_ACPI_6_0_CPEP_PROCESSOR_APIC_SAPIC  0x00
00755 
00756 ///
00757 /// Corrected Platform Error Polling Processor Structure Definition
00758 ///
00759 typedef struct {
00760   UINT8   Type;
00761   UINT8   Length;
00762   UINT8   ProcessorId;
00763   UINT8   ProcessorEid;
00764   UINT32  PollingInterval;
00765 } EFI_ACPI_6_0_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
00766 
00767 ///
00768 /// Maximum System Characteristics Table (MSCT)
00769 ///
00770 typedef struct {
00771   EFI_ACPI_DESCRIPTION_HEADER Header;
00772   UINT32                      OffsetProxDomInfo;
00773   UINT32                      MaximumNumberOfProximityDomains;
00774   UINT32                      MaximumNumberOfClockDomains;
00775   UINT64                      MaximumPhysicalAddress;
00776 } EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
00777 
00778 ///
00779 /// MSCT Version (as defined in ACPI 6.0 spec.)
00780 ///
00781 #define EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION 0x01
00782 
00783 ///
00784 /// Maximum Proximity Domain Information Structure Definition
00785 ///
00786 typedef struct {
00787   UINT8   Revision;
00788   UINT8   Length;
00789   UINT32  ProximityDomainRangeLow;
00790   UINT32  ProximityDomainRangeHigh;
00791   UINT32  MaximumProcessorCapacity;
00792   UINT64  MaximumMemoryCapacity;
00793 } EFI_ACPI_6_0_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
00794 
00795 ///
00796 /// ACPI RAS Feature Table definition.
00797 ///
00798 typedef struct {
00799   EFI_ACPI_DESCRIPTION_HEADER Header;
00800   UINT8                       PlatformCommunicationChannelIdentifier[12];
00801 } EFI_ACPI_6_0_RAS_FEATURE_TABLE;
00802 
00803 ///
00804 /// RASF Version (as defined in ACPI 6.0 spec.)
00805 ///
00806 #define EFI_ACPI_6_0_RAS_FEATURE_TABLE_REVISION 0x01
00807 
00808 ///
00809 /// ACPI RASF Platform Communication Channel Shared Memory Region definition.
00810 ///
00811 typedef struct {
00812   UINT32                      Signature;
00813   UINT16                      Command;
00814   UINT16                      Status;
00815   UINT16                      Version;
00816   UINT8                       RASCapabilities[16];
00817   UINT8                       SetRASCapabilities[16];
00818   UINT16                      NumberOfRASFParameterBlocks;
00819   UINT32                      SetRASCapabilitiesStatus;
00820 } EFI_ACPI_6_0_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
00821 
00822 ///
00823 /// ACPI RASF PCC command code
00824 ///
00825 #define EFI_ACPI_6_0_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND  0x01
00826 
00827 ///
00828 /// ACPI RASF Platform RAS Capabilities
00829 ///
00830 #define EFI_ACPI_6_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED                          0x01
00831 #define EFI_ACPI_6_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED_AND_EXPOSED_TO_SOFTWARE  0x02
00832 
00833 ///
00834 /// ACPI RASF Parameter Block structure for PATROL_SCRUB
00835 ///
00836 typedef struct {
00837   UINT16                      Type;
00838   UINT16                      Version;
00839   UINT16                      Length;
00840   UINT16                      PatrolScrubCommand;
00841   UINT64                      RequestedAddressRange[2];
00842   UINT64                      ActualAddressRange[2];
00843   UINT16                      Flags;
00844   UINT8                       RequestedSpeed;
00845 } EFI_ACPI_6_0_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE;
00846 
00847 ///
00848 /// ACPI RASF Patrol Scrub command
00849 ///
00850 #define EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS   0x01
00851 #define EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER   0x02
00852 #define EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER    0x03
00853 
00854 ///
00855 /// Memory Power State Table definition.
00856 ///
00857 typedef struct {
00858   EFI_ACPI_DESCRIPTION_HEADER Header;
00859   UINT8                       PlatformCommunicationChannelIdentifier;
00860   UINT8                       Reserved[3];
00861 // Memory Power Node Structure
00862 // Memory Power State Characteristics
00863 } EFI_ACPI_6_0_MEMORY_POWER_STATUS_TABLE;
00864 
00865 ///
00866 /// MPST Version (as defined in ACPI 6.0 spec.)
00867 ///
00868 #define EFI_ACPI_6_0_MEMORY_POWER_STATE_TABLE_REVISION 0x01
00869 
00870 ///
00871 /// MPST Platform Communication Channel Shared Memory Region definition.
00872 ///
00873 typedef struct {
00874   UINT32                      Signature;
00875   UINT16                      Command;
00876   UINT16                      Status;
00877   UINT32                      MemoryPowerCommandRegister;
00878   UINT32                      MemoryPowerStatusRegister;
00879   UINT32                      PowerStateId;
00880   UINT32                      MemoryPowerNodeId;
00881   UINT64                      MemoryEnergyConsumed;
00882   UINT64                      ExpectedAveragePowerComsuned;
00883 } EFI_ACPI_6_0_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
00884 
00885 ///
00886 /// ACPI MPST PCC command code
00887 ///
00888 #define EFI_ACPI_6_0_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND  0x03
00889 
00890 ///
00891 /// ACPI MPST Memory Power command
00892 ///
00893 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE       0x01
00894 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE       0x02
00895 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED   0x03
00896 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED   0x04
00897 
00898 ///
00899 /// MPST Memory Power Node Table
00900 ///
00901 typedef struct {
00902   UINT8                                             PowerStateValue;
00903   UINT8                                             PowerStateInformationIndex;
00904 } EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE;
00905 
00906 typedef struct {
00907   UINT8                                             Flag;
00908   UINT8                                             Reserved;
00909   UINT16                                            MemoryPowerNodeId;
00910   UINT32                                            Length;
00911   UINT64                                            AddressBase;
00912   UINT64                                            AddressLength;
00913   UINT32                                            NumberOfPowerStates;
00914   UINT32                                            NumberOfPhysicalComponents;
00915 //EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE              MemoryPowerState[NumberOfPowerStates];
00916 //UINT16                                            PhysicalComponentIdentifier[NumberOfPhysicalComponents];
00917 } EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE;
00918 
00919 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE          0x01
00920 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED   0x02
00921 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE   0x04
00922 
00923 typedef struct {
00924   UINT16                      MemoryPowerNodeCount;
00925   UINT8                       Reserved[2];
00926 } EFI_ACPI_6_0_MPST_MEMORY_POWER_NODE_TABLE;
00927 
00928 ///
00929 /// MPST Memory Power State Characteristics Table
00930 ///
00931 typedef struct {
00932   UINT8                                             PowerStateStructureID;
00933   UINT8                                             Flag;
00934   UINT16                                            Reserved;
00935   UINT32                                            AveragePowerConsumedInMPS0;
00936   UINT32                                            RelativePowerSavingToMPS0;
00937   UINT64                                            ExitLatencyToMPS0;
00938 } EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE;
00939 
00940 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED              0x01
00941 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY   0x02
00942 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT    0x04
00943 
00944 typedef struct {
00945   UINT16                      MemoryPowerStateCharacteristicsCount;
00946   UINT8                       Reserved[2];
00947 } EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE;
00948 
00949 ///
00950 /// Memory Topology Table definition.
00951 ///
00952 typedef struct {
00953   EFI_ACPI_DESCRIPTION_HEADER Header;
00954   UINT32                      Reserved;
00955 } EFI_ACPI_6_0_MEMORY_TOPOLOGY_TABLE;
00956 
00957 ///
00958 /// PMTT Version (as defined in ACPI 6.0 spec.)
00959 ///
00960 #define EFI_ACPI_6_0_MEMORY_TOPOLOGY_TABLE_REVISION 0x01
00961 
00962 ///
00963 /// Common Memory Aggregator Device Structure.
00964 ///
00965 typedef struct {
00966   UINT8                       Type;
00967   UINT8                       Reserved;
00968   UINT16                      Length;
00969   UINT16                      Flags;
00970   UINT16                      Reserved1;
00971 } EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
00972 
00973 ///
00974 /// Memory Aggregator Device Type
00975 ///
00976 #define EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_SOCKET            0x1
00977 #define EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_MEMORY_CONTROLLER 0x2
00978 #define EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_DIMM              0x3
00979 
00980 ///
00981 /// Socket Memory Aggregator Device Structure.
00982 ///
00983 typedef struct {
00984   EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
00985   UINT16                                                       SocketIdentifier;
00986   UINT16                                                       Reserved;
00987 //EFI_ACPI_6_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  MemoryController[];
00988 } EFI_ACPI_6_0_PMMT_SOCKET_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
00989 
00990 ///
00991 /// MemoryController Memory Aggregator Device Structure.
00992 ///
00993 typedef struct {
00994   EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
00995   UINT32                                                       ReadLatency;
00996   UINT32                                                       WriteLatency;
00997   UINT32                                                       ReadBandwidth;
00998   UINT32                                                       WriteBandwidth;
00999   UINT16                                                       OptimalAccessUnit;
01000   UINT16                                                       OptimalAccessAlignment;
01001   UINT16                                                       Reserved;
01002   UINT16                                                       NumberOfProximityDomains;
01003 //UINT32                                                       ProximityDomain[NumberOfProximityDomains];
01004 //EFI_ACPI_6_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    PhysicalComponent[];
01005 } EFI_ACPI_6_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
01006 
01007 ///
01008 /// DIMM Memory Aggregator Device Structure.
01009 ///
01010 typedef struct {
01011   EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
01012   UINT16                                                       PhysicalComponentIdentifier;
01013   UINT16                                                       Reserved;
01014   UINT32                                                       SizeOfDimm;
01015   UINT32                                                       SmbiosHandle;
01016 } EFI_ACPI_6_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
01017 
01018 ///
01019 /// Boot Graphics Resource Table definition.
01020 ///
01021 typedef struct {
01022   EFI_ACPI_DESCRIPTION_HEADER Header;
01023   ///
01024   /// 2-bytes (16 bit) version ID. This value must be 1.
01025   ///
01026   UINT16                      Version;
01027   ///
01028   /// 1-byte status field indicating current status about the table.
01029   ///     Bits[7:1] = Reserved (must be zero)
01030   ///     Bit [0] = Valid. A one indicates the boot image graphic is valid.
01031   ///
01032   UINT8                       Status;
01033   ///
01034   /// 1-byte enumerated type field indicating format of the image.
01035   ///     0 = Bitmap
01036   ///     1 - 255  Reserved (for future use)
01037   ///
01038   UINT8                       ImageType;
01039   ///
01040   /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy
01041   /// of the image bitmap.
01042   ///
01043   UINT64                      ImageAddress;
01044   ///
01045   /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image.
01046   /// (X, Y) display offset of the top left corner of the boot image.
01047   /// The top left corner of the display is at offset (0, 0).
01048   ///
01049   UINT32                      ImageOffsetX;
01050   ///
01051   /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image.
01052   /// (X, Y) display offset of the top left corner of the boot image.
01053   /// The top left corner of the display is at offset (0, 0).
01054   ///
01055   UINT32                      ImageOffsetY;
01056 } EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE;
01057 
01058 ///
01059 /// BGRT Revision
01060 ///
01061 #define EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION 1
01062 
01063 ///
01064 /// BGRT Version
01065 ///
01066 #define EFI_ACPI_6_0_BGRT_VERSION         0x01
01067 
01068 ///
01069 /// BGRT Status
01070 ///
01071 #define EFI_ACPI_6_0_BGRT_STATUS_NOT_DISPLAYED 0x00
01072 #define EFI_ACPI_6_0_BGRT_STATUS_DISPLAYED     0x01
01073 
01074 ///
01075 /// BGRT Image Type
01076 ///
01077 #define EFI_ACPI_6_0_BGRT_IMAGE_TYPE_BMP  0x00
01078 
01079 ///
01080 /// FPDT Version (as defined in ACPI 6.0 spec.)
01081 ///
01082 #define EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION 0x01
01083 
01084 ///
01085 /// FPDT Performance Record Types
01086 ///
01087 #define EFI_ACPI_6_0_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER      0x0000
01088 #define EFI_ACPI_6_0_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER     0x0001
01089 
01090 ///
01091 /// FPDT Performance Record Revision
01092 ///
01093 #define EFI_ACPI_6_0_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER  0x01
01094 #define EFI_ACPI_6_0_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER 0x01
01095 
01096 ///
01097 /// FPDT Runtime Performance Record Types
01098 ///
01099 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME                0x0000
01100 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND               0x0001
01101 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT      0x0002
01102 
01103 ///
01104 /// FPDT Runtime Performance Record Revision
01105 ///
01106 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME            0x01
01107 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND           0x01
01108 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT  0x02
01109 
01110 ///
01111 /// FPDT Performance Record header
01112 ///
01113 typedef struct {
01114   UINT16           Type;
01115   UINT8            Length;
01116   UINT8            Revision;
01117 } EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER;
01118 
01119 ///
01120 /// FPDT Performance Table header
01121 ///
01122 typedef struct {
01123   UINT32  Signature;
01124   UINT32  Length;
01125 } EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER;
01126 
01127 ///
01128 /// FPDT Firmware Basic Boot Performance Pointer Record Structure
01129 ///
01130 typedef struct {
01131   EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01132   UINT32                                          Reserved;
01133   ///
01134   /// 64-bit processor-relative physical address of the Basic Boot Performance Table.
01135   ///
01136   UINT64                                          BootPerformanceTablePointer;
01137 } EFI_ACPI_6_0_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD;
01138 
01139 ///
01140 /// FPDT S3 Performance Table Pointer Record Structure
01141 ///
01142 typedef struct {
01143   EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01144   UINT32                                          Reserved;
01145   ///
01146   /// 64-bit processor-relative physical address of the S3 Performance Table.
01147   ///
01148   UINT64                                          S3PerformanceTablePointer;
01149 } EFI_ACPI_6_0_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD;
01150 
01151 ///
01152 /// FPDT Firmware Basic Boot Performance Record Structure
01153 ///
01154 typedef struct {
01155   EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01156   UINT32                                          Reserved;
01157   ///
01158   /// Timer value logged at the beginning of firmware image execution.
01159   /// This may not always be zero or near zero.
01160   ///
01161   UINT64                                          ResetEnd;
01162   ///
01163   /// Timer value logged just prior to loading the OS boot loader into memory.
01164   /// For non-UEFI compatible boots, this field must be zero.
01165   ///
01166   UINT64                                          OsLoaderLoadImageStart;
01167   ///
01168   /// Timer value logged just prior to launching the previously loaded OS boot loader image.
01169   /// For non-UEFI compatible boots, the timer value logged will be just prior
01170   /// to the INT 19h handler invocation.
01171   ///
01172   UINT64                                          OsLoaderStartImageStart;
01173   ///
01174   /// Timer value logged at the point when the OS loader calls the
01175   /// ExitBootServices function for UEFI compatible firmware.
01176   /// For non-UEFI compatible boots, this field must be zero.
01177   ///
01178   UINT64                                          ExitBootServicesEntry;
01179   ///
01180   /// Timer value logged at the point just prior towhen the OS loader gaining
01181   /// control back from calls the ExitBootServices function for UEFI compatible firmware.
01182   /// For non-UEFI compatible boots, this field must be zero.
01183   ///
01184   UINT64                                          ExitBootServicesExit;
01185 } EFI_ACPI_6_0_FPDT_FIRMWARE_BASIC_BOOT_RECORD;
01186 
01187 ///
01188 /// FPDT Firmware Basic Boot Performance Table signature
01189 ///
01190 #define EFI_ACPI_6_0_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('F', 'B', 'P', 'T')
01191 
01192 //
01193 // FPDT Firmware Basic Boot Performance Table
01194 //
01195 typedef struct {
01196   EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER      Header;
01197   //
01198   // one or more Performance Records.
01199   //
01200 } EFI_ACPI_6_0_FPDT_FIRMWARE_BASIC_BOOT_TABLE;
01201 
01202 ///
01203 /// FPDT "S3PT" S3 Performance Table
01204 ///
01205 #define EFI_ACPI_6_0_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('S', '3', 'P', 'T')
01206 
01207 //
01208 // FPDT Firmware S3 Boot Performance Table
01209 //
01210 typedef struct {
01211   EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER      Header;
01212   //
01213   // one or more Performance Records.
01214   //
01215 } EFI_ACPI_6_0_FPDT_FIRMWARE_S3_BOOT_TABLE;
01216 
01217 ///
01218 /// FPDT Basic S3 Resume Performance Record
01219 ///
01220 typedef struct {
01221   EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01222   ///
01223   /// A count of the number of S3 resume cycles since the last full boot sequence.
01224   ///
01225   UINT32                                          ResumeCount;
01226   ///
01227   /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the
01228   /// OS waking vector. Only the most recent resume cycle's time is retained.
01229   ///
01230   UINT64                                          FullResume;
01231   ///
01232   /// Average timer value of all resume cycles logged since the last full boot
01233   /// sequence, including the most recent resume.  Note that the entire log of
01234   /// timer values does not need to be retained in order to calculate this average.
01235   ///
01236   UINT64                                          AverageResume;
01237 } EFI_ACPI_6_0_FPDT_S3_RESUME_RECORD;
01238 
01239 ///
01240 /// FPDT Basic S3 Suspend Performance Record
01241 ///
01242 typedef struct {
01243   EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
01244   ///
01245   /// Timer value recorded at the OS write to SLP_TYP upon entry to S3.
01246   /// Only the most recent suspend cycle's timer value is retained.
01247   ///
01248   UINT64                                          SuspendStart;
01249   ///
01250   /// Timer value recorded at the final firmware write to SLP_TYP (or other
01251   /// mechanism) used to trigger hardware entry to S3.
01252   /// Only the most recent suspend cycle's timer value is retained.
01253   ///
01254   UINT64                                          SuspendEnd;
01255 } EFI_ACPI_6_0_FPDT_S3_SUSPEND_RECORD;
01256 
01257 ///
01258 /// Firmware Performance Record Table definition.
01259 ///
01260 typedef struct {
01261   EFI_ACPI_DESCRIPTION_HEADER Header;
01262 } EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_RECORD_TABLE;
01263 
01264 ///
01265 /// Generic Timer Description Table definition.
01266 ///
01267 typedef struct {
01268   EFI_ACPI_DESCRIPTION_HEADER Header;
01269   UINT64                      CntControlBasePhysicalAddress;
01270   UINT32                      Reserved;
01271   UINT32                      SecurePL1TimerGSIV;
01272   UINT32                      SecurePL1TimerFlags;
01273   UINT32                      NonSecurePL1TimerGSIV;
01274   UINT32                      NonSecurePL1TimerFlags;
01275   UINT32                      VirtualTimerGSIV;
01276   UINT32                      VirtualTimerFlags;
01277   UINT32                      NonSecurePL2TimerGSIV;
01278   UINT32                      NonSecurePL2TimerFlags;
01279   UINT64                      CntReadBasePhysicalAddress;
01280   UINT32                      PlatformTimerCount;
01281   UINT32                      PlatformTimerOffset;
01282 } EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE;
01283 
01284 ///
01285 /// GTDT Version (as defined in ACPI 6.0 spec.)
01286 ///
01287 #define EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION 0x02
01288 
01289 ///
01290 /// Timer Flags.  All other bits are reserved and must be 0.
01291 ///
01292 #define EFI_ACPI_6_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE          BIT0
01293 #define EFI_ACPI_6_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
01294 #define EFI_ACPI_6_0_GTDT_TIMER_FLAG_ALWAYS_ON_CAPABILITY          BIT2
01295 
01296 ///
01297 /// Platform Timer Type
01298 ///
01299 #define EFI_ACPI_6_0_GTDT_GT_BLOCK                       0
01300 #define EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG          1
01301 
01302 ///
01303 /// GT Block Structure
01304 ///
01305 typedef struct {
01306   UINT8   Type;
01307   UINT16  Length;
01308   UINT8   Reserved;
01309   UINT64  CntCtlBase;
01310   UINT32  GTBlockTimerCount;
01311   UINT32  GTBlockTimerOffset;
01312 } EFI_ACPI_6_0_GTDT_GT_BLOCK_STRUCTURE;
01313 
01314 ///
01315 /// GT Block Timer Structure
01316 ///
01317 typedef struct {
01318   UINT8   GTFrameNumber;
01319   UINT8   Reserved[3];
01320   UINT64  CntBaseX;
01321   UINT64  CntEL0BaseX;
01322   UINT32  GTxPhysicalTimerGSIV;
01323   UINT32  GTxPhysicalTimerFlags;
01324   UINT32  GTxVirtualTimerGSIV;
01325   UINT32  GTxVirtualTimerFlags;
01326   UINT32  GTxCommonFlags;
01327 } EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_STRUCTURE;
01328 
01329 ///
01330 /// GT Block Physical Timers and Virtual Timers Flags.  All other bits are reserved and must be 0.
01331 ///
01332 #define EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_MODE          BIT0
01333 #define EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
01334 
01335 ///
01336 /// Common Flags Flags.  All other bits are reserved and must be 0.
01337 ///
01338 #define EFI_ACPI_6_0_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER              BIT0
01339 #define EFI_ACPI_6_0_GTDT_GT_BLOCK_COMMON_FLAG_ALWAYS_ON_CAPABILITY      BIT1
01340 
01341 ///
01342 /// SBSA Generic Watchdog Structure
01343 ///
01344 typedef struct {
01345   UINT8   Type;
01346   UINT16  Length;
01347   UINT8   Reserved;
01348   UINT64  RefreshFramePhysicalAddress;
01349   UINT64  WatchdogControlFramePhysicalAddress;
01350   UINT32  WatchdogTimerGSIV;
01351   UINT32  WatchdogTimerFlags;
01352 } EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_STRUCTURE;
01353 
01354 ///
01355 /// SBSA Generic Watchdog Timer Flags.  All other bits are reserved and must be 0.
01356 ///
01357 #define EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_MODE          BIT0
01358 #define EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
01359 #define EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_SECURE_TIMER                  BIT2
01360 
01361 //
01362 // NVDIMM Firmware Interface Table definition.
01363 //
01364 typedef struct {
01365   EFI_ACPI_DESCRIPTION_HEADER    Header;
01366   UINT32                         Reserved;
01367 } EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE;
01368 
01369 //
01370 // NFIT Version (as defined in ACPI 6.0 spec.)
01371 //
01372 #define EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE_REVISION 0x1
01373 
01374 //
01375 // Definition for NFIT Table Structure Types
01376 //
01377 #define EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE_TYPE              0
01378 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_TO_SYSTEM_ADDRESS_RANGE_MAP_STRUCTURE_TYPE  1
01379 #define EFI_ACPI_6_0_NFIT_INTERLEAVE_STRUCTURE_TYPE                                 2
01380 #define EFI_ACPI_6_0_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE_TYPE              3
01381 #define EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE_TYPE                      4
01382 #define EFI_ACPI_6_0_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE_TYPE            5
01383 #define EFI_ACPI_6_0_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE_TYPE                         6
01384 
01385 //
01386 // Definition for NFIT Structure Header
01387 //
01388 typedef struct {
01389   UINT16                                      Type;
01390   UINT16                                      Length;
01391 } EFI_ACPI_6_0_NFIT_STRUCTURE_HEADER;
01392 
01393 //
01394 // Definition for System Physical Address Range Structure
01395 //
01396 #define EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_CONTROL_REGION_FOR_MANAGEMENT      BIT0
01397 #define EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_PROXIMITY_DOMAIN_VALID             BIT1
01398 #define EFI_ACPI_6_0_NFIT_GUID_VOLATILE_MEMORY_REGION                             { 0x7305944F, 0xFDDA, 0x44E3, { 0xB1, 0x6C, 0x3F, 0x22, 0xD2, 0x52, 0xE5, 0xD0 }}
01399 #define EFI_ACPI_6_0_NFIT_GUID_BYTE_ADDRESSABLE_PERSISTENT_MEMORY_REGION          { 0x66F0D379, 0xB4F3, 0x4074, { 0xAC, 0x43, 0x0D, 0x33, 0x18, 0xB7, 0x8C, 0xDB }}
01400 #define EFI_ACPI_6_0_NFIT_GUID_NVDIMM_CONTROL_REGION                              { 0x92F701F6, 0x13B4, 0x405D, { 0x91, 0x0B, 0x29, 0x93, 0x67, 0xE8, 0x23, 0x4C }}
01401 #define EFI_ACPI_6_0_NFIT_GUID_NVDIMM_BLOCK_DATA_WINDOW_REGION                    { 0x91AF0530, 0x5D86, 0x470E, { 0xA6, 0xB0, 0x0A, 0x2D, 0xB9, 0x40, 0x82, 0x49 }}
01402 #define EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE   { 0x77AB535A, 0x45FC, 0x624B, { 0x55, 0x60, 0xF7, 0xB2, 0x81, 0xD1, 0xF9, 0x6E }}
01403 #define EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE     { 0x3D5ABD30, 0x4175, 0x87CE, { 0x6D, 0x64, 0xD2, 0xAD, 0xE5, 0x23, 0xC4, 0xBB }}
01404 #define EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT { 0x5CEA02C9, 0x4D07, 0x69D3, { 0x26, 0x9F ,0x44, 0x96, 0xFB, 0xE0, 0x96, 0xF9 }}
01405 #define EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT   { 0x08018188, 0x42CD, 0xBB48, { 0x10, 0x0F, 0x53, 0x87, 0xD5, 0x3D, 0xED, 0x3D }}
01406 typedef struct {
01407   UINT16                                      Type;
01408   UINT16                                      Length;
01409   UINT16                                      SPARangeStructureIndex;
01410   UINT16                                      Flags;
01411   UINT32                                      Reserved_8;
01412   UINT32                                      ProximityDomain;
01413   GUID                                        AddressRangeTypeGUID;
01414   UINT64                                      SystemPhysicalAddressRangeBase;
01415   UINT64                                      SystemPhysicalAddressRangeLength;
01416   UINT64                                      AddressRangeMemoryMappingAttribute;
01417 } EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE;
01418 
01419 //
01420 // Definition for Memory Device to System Physical Address Range Mapping Structure
01421 //
01422 typedef struct {
01423   UINT32                                      DIMMNumber:4;
01424   UINT32                                      MemoryChannelNumber:4;
01425   UINT32                                      MemoryControllerID:4;
01426   UINT32                                      SocketID:4;
01427   UINT32                                      NodeControllerID:12;
01428   UINT32                                      Reserved_28:4;
01429 } EFI_ACPI_6_0_NFIT_DEVICE_HANDLE;
01430 
01431 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_PREVIOUS_SAVE_FAIL                                      BIT0
01432 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_LAST_RESTORE_FAIL                                       BIT1
01433 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_PLATFORM_FLUSH_FAIL                                     BIT2
01434 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_NOT_ARMED_PRIOR_TO_OSPM_HAND_OFF                        BIT3
01435 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_SMART_HEALTH_EVENTS_PRIOR_OSPM_HAND_OFF                 BIT4
01436 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_FIRMWARE_ENABLED_TO_NOTIFY_OSPM_ON_SMART_HEALTH_EVENTS  BIT5
01437 typedef struct {
01438   UINT16                                      Type;
01439   UINT16                                      Length;
01440   EFI_ACPI_6_0_NFIT_DEVICE_HANDLE             NFITDeviceHandle;
01441   UINT16                                      MemoryDevicePhysicalID;
01442   UINT16                                      MemoryDeviceRegionID;
01443   UINT16                                      SPARangeStructureIndex ;
01444   UINT16                                      NVDIMMControlRegionStructureIndex;
01445   UINT64                                      MemoryDeviceRegionSize;
01446   UINT64                                      RegionOffset;
01447   UINT64                                      MemoryDevicePhysicalAddressRegionBase;
01448   UINT16                                      InterleaveStructureIndex;
01449   UINT16                                      InterleaveWays;
01450   UINT16                                      MemoryDeviceStateFlags;
01451   UINT16                                      Reserved_46;
01452 } EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_TO_SYSTEM_ADDRESS_RANGE_MAP_STRUCTURE;
01453 
01454 //
01455 // Definition for Interleave Structure
01456 //
01457 typedef struct {
01458   UINT16                                      Type;
01459   UINT16                                      Length;
01460   UINT16                                      InterleaveStructureIndex;
01461   UINT16                                      Reserved_6;
01462   UINT32                                      NumberOfLines;
01463   UINT32                                      LineSize;
01464 //UINT32                                      LineOffset[NumberOfLines];
01465 } EFI_ACPI_6_0_NFIT_INTERLEAVE_STRUCTURE;
01466 
01467 //
01468 // Definition for SMBIOS Management Information Structure
01469 //
01470 typedef struct {
01471   UINT16                                      Type;
01472   UINT16                                      Length;
01473   UINT32                                      Reserved_4;
01474 //UINT8                                       Data[];
01475 } EFI_ACPI_6_0_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE;
01476 
01477 //
01478 // Definition for NVDIMM Control Region Structure
01479 //
01480 #define EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_FLAGS_BLOCK_DATA_WINDOWS_BUFFERED    BIT0
01481 typedef struct {
01482   UINT16                                      Type;
01483   UINT16                                      Length;
01484   UINT16                                      NVDIMMControlRegionStructureIndex;
01485   UINT16                                      VendorID;
01486   UINT16                                      DeviceID;
01487   UINT16                                      RevisionID;
01488   UINT16                                      SubsystemVendorID;
01489   UINT16                                      SubsystemDeviceID;
01490   UINT16                                      SubsystemRevisionID;
01491   UINT8                                       Reserved_18[6];
01492   UINT32                                      SerialNumber;
01493   UINT16                                      RegionFormatInterfaceCode;
01494   UINT16                                      NumberOfBlockControlWindows;
01495   UINT64                                      SizeOfBlockControlWindow;
01496   UINT64                                      CommandRegisterOffsetInBlockControlWindow;
01497   UINT64                                      SizeOfCommandRegisterInBlockControlWindows;
01498   UINT64                                      StatusRegisterOffsetInBlockControlWindow;
01499   UINT64                                      SizeOfStatusRegisterInBlockControlWindows;
01500   UINT16                                      NVDIMMControlRegionFlag;
01501   UINT8                                       Reserved_74[6];
01502 } EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE;
01503 
01504 //
01505 // Definition for NVDIMM Block Data Window Region Structure
01506 //
01507 typedef struct {
01508   UINT16                                      Type;
01509   UINT16                                      Length;
01510   UINT16                                      NVDIMMControlRegionStructureIndex;
01511   UINT16                                      NumberOfBlockDataWindows;
01512   UINT64                                      BlockDataWindowStartOffset;
01513   UINT64                                      SizeOfBlockDataWindow;
01514   UINT64                                      BlockAccessibleMemoryCapacity;
01515   UINT64                                      BeginningAddressOfFirstBlockInBlockAccessibleMemory;
01516 } EFI_ACPI_6_0_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE;
01517 
01518 //
01519 // Definition for Flush Hint Address Structure
01520 //
01521 typedef struct {
01522   UINT16                                      Type;
01523   UINT16                                      Length;
01524   EFI_ACPI_6_0_NFIT_DEVICE_HANDLE             NFITDeviceHandle;
01525   UINT16                                      NumberOfFlushHintAddresses;
01526   UINT8                                       Reserved_10[6];
01527 //UINT64                                      FlushHintAddress[NumberOfFlushHintAddresses];
01528 } EFI_ACPI_6_0_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE;
01529 
01530 ///
01531 /// Boot Error Record Table (BERT)
01532 ///
01533 typedef struct {
01534   EFI_ACPI_DESCRIPTION_HEADER Header;
01535   UINT32                      BootErrorRegionLength;
01536   UINT64                      BootErrorRegion;
01537 } EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_HEADER;
01538 
01539 ///
01540 /// BERT Version (as defined in ACPI 6.0 spec.)
01541 ///
01542 #define EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_REVISION 0x01
01543 
01544 ///
01545 /// Boot Error Region Block Status Definition
01546 ///
01547 typedef struct {
01548   UINT32       UncorrectableErrorValid:1;
01549   UINT32       CorrectableErrorValid:1;
01550   UINT32       MultipleUncorrectableErrors:1;
01551   UINT32       MultipleCorrectableErrors:1;
01552   UINT32       ErrorDataEntryCount:10;
01553   UINT32       Reserved:18;
01554 } EFI_ACPI_6_0_ERROR_BLOCK_STATUS;
01555 
01556 ///
01557 /// Boot Error Region Definition
01558 ///
01559 typedef struct {
01560   EFI_ACPI_6_0_ERROR_BLOCK_STATUS              BlockStatus;
01561   UINT32                                       RawDataOffset;
01562   UINT32                                       RawDataLength;
01563   UINT32                                       DataLength;
01564   UINT32                                       ErrorSeverity;
01565 } EFI_ACPI_6_0_BOOT_ERROR_REGION_STRUCTURE;
01566 
01567 //
01568 // Boot Error Severity types
01569 //
01570 #define EFI_ACPI_6_0_ERROR_SEVERITY_CORRECTABLE  0x00
01571 #define EFI_ACPI_6_0_ERROR_SEVERITY_FATAL        0x01
01572 #define EFI_ACPI_6_0_ERROR_SEVERITY_CORRECTED    0x02
01573 #define EFI_ACPI_6_0_ERROR_SEVERITY_NONE         0x03
01574 
01575 ///
01576 /// Generic Error Data Entry Definition
01577 ///
01578 typedef struct {
01579   UINT8    SectionType[16];
01580   UINT32   ErrorSeverity;
01581   UINT16   Revision;
01582   UINT8    ValidationBits;
01583   UINT8    Flags;
01584   UINT32   ErrorDataLength;
01585   UINT8    FruId[16];
01586   UINT8    FruText[20];
01587 } EFI_ACPI_6_0_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
01588 
01589 ///
01590 /// Generic Error Data Entry Version (as defined in ACPI 6.0 spec.)
01591 ///
01592 #define EFI_ACPI_6_0_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0201
01593 
01594 ///
01595 /// HEST - Hardware Error Source Table
01596 ///
01597 typedef struct {
01598   EFI_ACPI_DESCRIPTION_HEADER Header;
01599   UINT32                      ErrorSourceCount;
01600 } EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
01601 
01602 ///
01603 /// HEST Version (as defined in ACPI 6.0 spec.)
01604 ///
01605 #define EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION 0x01
01606 
01607 //
01608 // Error Source structure types.
01609 //
01610 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
01611 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
01612 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_NMI_ERROR                0x02
01613 #define EFI_ACPI_6_0_PCI_EXPRESS_ROOT_PORT_AER                  0x06
01614 #define EFI_ACPI_6_0_PCI_EXPRESS_DEVICE_AER                     0x07
01615 #define EFI_ACPI_6_0_PCI_EXPRESS_BRIDGE_AER                     0x08
01616 #define EFI_ACPI_6_0_GENERIC_HARDWARE_ERROR                     0x09
01617 
01618 //
01619 // Error Source structure flags.
01620 //
01621 #define EFI_ACPI_6_0_ERROR_SOURCE_FLAG_FIRMWARE_FIRST       (1 << 0)
01622 #define EFI_ACPI_6_0_ERROR_SOURCE_FLAG_GLOBAL               (1 << 1)
01623 
01624 ///
01625 /// IA-32 Architecture Machine Check Exception Structure Definition
01626 ///
01627 typedef struct {
01628   UINT16  Type;
01629   UINT16  SourceId;
01630   UINT8   Reserved0[2];
01631   UINT8   Flags;
01632   UINT8   Enabled;
01633   UINT32  NumberOfRecordsToPreAllocate;
01634   UINT32  MaxSectionsPerRecord;
01635   UINT64  GlobalCapabilityInitData;
01636   UINT64  GlobalControlInitData;
01637   UINT8   NumberOfHardwareBanks;
01638   UINT8   Reserved1[7];
01639 } EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
01640 
01641 ///
01642 /// IA-32 Architecture Machine Check Bank Structure Definition
01643 ///
01644 typedef struct {
01645   UINT8   BankNumber;
01646   UINT8   ClearStatusOnInitialization;
01647   UINT8   StatusDataFormat;
01648   UINT8   Reserved0;
01649   UINT32  ControlRegisterMsrAddress;
01650   UINT64  ControlInitData;
01651   UINT32  StatusRegisterMsrAddress;
01652   UINT32  AddressRegisterMsrAddress;
01653   UINT32  MiscRegisterMsrAddress;
01654 } EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
01655 
01656 ///
01657 /// IA-32 Architecture Machine Check Bank Structure MCA data format
01658 ///
01659 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32      0x00
01660 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64   0x01
01661 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64     0x02
01662 
01663 //
01664 // Hardware Error Notification types. All other values are reserved
01665 //
01666 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_POLLED                0x00
01667 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT    0x01
01668 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT       0x02
01669 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_SCI                   0x03
01670 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_NMI                   0x04
01671 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_CMCI                  0x05
01672 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_MCE                   0x06
01673 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_GPIO_SIGNAL           0x07
01674 
01675 ///
01676 /// Hardware Error Notification Configuration Write Enable Structure Definition
01677 ///
01678 typedef struct {
01679   UINT16    Type:1;
01680   UINT16    PollInterval:1;
01681   UINT16    SwitchToPollingThresholdValue:1;
01682   UINT16    SwitchToPollingThresholdWindow:1;
01683   UINT16    ErrorThresholdValue:1;
01684   UINT16    ErrorThresholdWindow:1;
01685   UINT16    Reserved:10;
01686 } EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
01687 
01688 ///
01689 /// Hardware Error Notification Structure Definition
01690 ///
01691 typedef struct {
01692   UINT8                                                                          Type;
01693   UINT8                                                                          Length;
01694   EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE  ConfigurationWriteEnable;
01695   UINT32                                                                         PollInterval;
01696   UINT32                                                                         Vector;
01697   UINT32                                                                         SwitchToPollingThresholdValue;
01698   UINT32                                                                         SwitchToPollingThresholdWindow;
01699   UINT32                                                                         ErrorThresholdValue;
01700   UINT32                                                                         ErrorThresholdWindow;
01701 } EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
01702 
01703 ///
01704 /// IA-32 Architecture Corrected Machine Check Structure Definition
01705 ///
01706 typedef struct {
01707   UINT16                                                 Type;
01708   UINT16                                                 SourceId;
01709   UINT8                                                  Reserved0[2];
01710   UINT8                                                  Flags;
01711   UINT8                                                  Enabled;
01712   UINT32                                                 NumberOfRecordsToPreAllocate;
01713   UINT32                                                 MaxSectionsPerRecord;
01714   EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
01715   UINT8                                                  NumberOfHardwareBanks;
01716   UINT8                                                  Reserved1[3];
01717 } EFI_ACPI_6_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
01718 
01719 ///
01720 /// IA-32 Architecture NMI Error Structure Definition
01721 ///
01722 typedef struct {
01723   UINT16  Type;
01724   UINT16  SourceId;
01725   UINT8   Reserved0[2];
01726   UINT32  NumberOfRecordsToPreAllocate;
01727   UINT32  MaxSectionsPerRecord;
01728   UINT32  MaxRawDataLength;
01729 } EFI_ACPI_6_0_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
01730 
01731 ///
01732 /// PCI Express Root Port AER Structure Definition
01733 ///
01734 typedef struct {
01735   UINT16  Type;
01736   UINT16  SourceId;
01737   UINT8   Reserved0[2];
01738   UINT8   Flags;
01739   UINT8   Enabled;
01740   UINT32  NumberOfRecordsToPreAllocate;
01741   UINT32  MaxSectionsPerRecord;
01742   UINT32  Bus;
01743   UINT16  Device;
01744   UINT16  Function;
01745   UINT16  DeviceControl;
01746   UINT8   Reserved1[2];
01747   UINT32  UncorrectableErrorMask;
01748   UINT32  UncorrectableErrorSeverity;
01749   UINT32  CorrectableErrorMask;
01750   UINT32  AdvancedErrorCapabilitiesAndControl;
01751   UINT32  RootErrorCommand;
01752 } EFI_ACPI_6_0_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
01753 
01754 ///
01755 /// PCI Express Device AER Structure Definition
01756 ///
01757 typedef struct {
01758   UINT16  Type;
01759   UINT16  SourceId;
01760   UINT8   Reserved0[2];
01761   UINT8   Flags;
01762   UINT8   Enabled;
01763   UINT32  NumberOfRecordsToPreAllocate;
01764   UINT32  MaxSectionsPerRecord;
01765   UINT32  Bus;
01766   UINT16  Device;
01767   UINT16  Function;
01768   UINT16  DeviceControl;
01769   UINT8   Reserved1[2];
01770   UINT32  UncorrectableErrorMask;
01771   UINT32  UncorrectableErrorSeverity;
01772   UINT32  CorrectableErrorMask;
01773   UINT32  AdvancedErrorCapabilitiesAndControl;
01774 } EFI_ACPI_6_0_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
01775 
01776 ///
01777 /// PCI Express Bridge AER Structure Definition
01778 ///
01779 typedef struct {
01780   UINT16  Type;
01781   UINT16  SourceId;
01782   UINT8   Reserved0[2];
01783   UINT8   Flags;
01784   UINT8   Enabled;
01785   UINT32  NumberOfRecordsToPreAllocate;
01786   UINT32  MaxSectionsPerRecord;
01787   UINT32  Bus;
01788   UINT16  Device;
01789   UINT16  Function;
01790   UINT16  DeviceControl;
01791   UINT8   Reserved1[2];
01792   UINT32  UncorrectableErrorMask;
01793   UINT32  UncorrectableErrorSeverity;
01794   UINT32  CorrectableErrorMask;
01795   UINT32  AdvancedErrorCapabilitiesAndControl;
01796   UINT32  SecondaryUncorrectableErrorMask;
01797   UINT32  SecondaryUncorrectableErrorSeverity;
01798   UINT32  SecondaryAdvancedErrorCapabilitiesAndControl;
01799 } EFI_ACPI_6_0_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
01800 
01801 ///
01802 /// Generic Hardware Error Source Structure Definition
01803 ///
01804 typedef struct {
01805   UINT16                                                 Type;
01806   UINT16                                                 SourceId;
01807   UINT16                                                 RelatedSourceId;
01808   UINT8                                                  Flags;
01809   UINT8                                                  Enabled;
01810   UINT32                                                 NumberOfRecordsToPreAllocate;
01811   UINT32                                                 MaxSectionsPerRecord;
01812   UINT32                                                 MaxRawDataLength;
01813   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE                 ErrorStatusAddress;
01814   EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
01815   UINT32                                                 ErrorStatusBlockLength;
01816 } EFI_ACPI_6_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
01817 
01818 ///
01819 /// Generic Error Status Definition
01820 ///
01821 typedef struct {
01822   EFI_ACPI_6_0_ERROR_BLOCK_STATUS              BlockStatus;
01823   UINT32                                       RawDataOffset;
01824   UINT32                                       RawDataLength;
01825   UINT32                                       DataLength;
01826   UINT32                                       ErrorSeverity;
01827 } EFI_ACPI_6_0_GENERIC_ERROR_STATUS_STRUCTURE;
01828 
01829 ///
01830 /// ERST - Error Record Serialization Table
01831 ///
01832 typedef struct {
01833   EFI_ACPI_DESCRIPTION_HEADER Header;
01834   UINT32                      SerializationHeaderSize;
01835   UINT8                       Reserved0[4];
01836   UINT32                      InstructionEntryCount;
01837 } EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
01838 
01839 ///
01840 /// ERST Version (as defined in ACPI 6.0 spec.)
01841 ///
01842 #define EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION 0x01
01843 
01844 ///
01845 /// ERST Serialization Actions
01846 ///
01847 #define EFI_ACPI_6_0_ERST_BEGIN_WRITE_OPERATION                    0x00
01848 #define EFI_ACPI_6_0_ERST_BEGIN_READ_OPERATION                     0x01
01849 #define EFI_ACPI_6_0_ERST_BEGIN_CLEAR_OPERATION                    0x02
01850 #define EFI_ACPI_6_0_ERST_END_OPERATION                            0x03
01851 #define EFI_ACPI_6_0_ERST_SET_RECORD_OFFSET                        0x04
01852 #define EFI_ACPI_6_0_ERST_EXECUTE_OPERATION                        0x05
01853 #define EFI_ACPI_6_0_ERST_CHECK_BUSY_STATUS                        0x06
01854 #define EFI_ACPI_6_0_ERST_GET_COMMAND_STATUS                       0x07
01855 #define EFI_ACPI_6_0_ERST_GET_RECORD_IDENTIFIER                    0x08
01856 #define EFI_ACPI_6_0_ERST_SET_RECORD_IDENTIFIER                    0x09
01857 #define EFI_ACPI_6_0_ERST_GET_RECORD_COUNT                         0x0A
01858 #define EFI_ACPI_6_0_ERST_BEGIN_DUMMY_WRITE_OPERATION              0x0B
01859 #define EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE              0x0D
01860 #define EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH       0x0E
01861 #define EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES   0x0F
01862 
01863 ///
01864 /// ERST Action Command Status
01865 ///
01866 #define EFI_ACPI_6_0_ERST_STATUS_SUCCESS                           0x00
01867 #define EFI_ACPI_6_0_ERST_STATUS_NOT_ENOUGH_SPACE                  0x01
01868 #define EFI_ACPI_6_0_ERST_STATUS_HARDWARE_NOT_AVAILABLE            0x02
01869 #define EFI_ACPI_6_0_ERST_STATUS_FAILED                            0x03
01870 #define EFI_ACPI_6_0_ERST_STATUS_RECORD_STORE_EMPTY                0x04
01871 #define EFI_ACPI_6_0_ERST_STATUS_RECORD_NOT_FOUND                  0x05
01872 
01873 ///
01874 /// ERST Serialization Instructions
01875 ///
01876 #define EFI_ACPI_6_0_ERST_READ_REGISTER                            0x00
01877 #define EFI_ACPI_6_0_ERST_READ_REGISTER_VALUE                      0x01
01878 #define EFI_ACPI_6_0_ERST_WRITE_REGISTER                           0x02
01879 #define EFI_ACPI_6_0_ERST_WRITE_REGISTER_VALUE                     0x03
01880 #define EFI_ACPI_6_0_ERST_NOOP                                     0x04
01881 #define EFI_ACPI_6_0_ERST_LOAD_VAR1                                0x05
01882 #define EFI_ACPI_6_0_ERST_LOAD_VAR2                                0x06
01883 #define EFI_ACPI_6_0_ERST_STORE_VAR1                               0x07
01884 #define EFI_ACPI_6_0_ERST_ADD                                      0x08
01885 #define EFI_ACPI_6_0_ERST_SUBTRACT                                 0x09
01886 #define EFI_ACPI_6_0_ERST_ADD_VALUE                                0x0A
01887 #define EFI_ACPI_6_0_ERST_SUBTRACT_VALUE                           0x0B
01888 #define EFI_ACPI_6_0_ERST_STALL                                    0x0C
01889 #define EFI_ACPI_6_0_ERST_STALL_WHILE_TRUE                         0x0D
01890 #define EFI_ACPI_6_0_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE            0x0E
01891 #define EFI_ACPI_6_0_ERST_GOTO                                     0x0F
01892 #define EFI_ACPI_6_0_ERST_SET_SRC_ADDRESS_BASE                     0x10
01893 #define EFI_ACPI_6_0_ERST_SET_DST_ADDRESS_BASE                     0x11
01894 #define EFI_ACPI_6_0_ERST_MOVE_DATA                                0x12
01895 
01896 ///
01897 /// ERST Instruction Flags
01898 ///
01899 #define EFI_ACPI_6_0_ERST_PRESERVE_REGISTER                        0x01
01900 
01901 ///
01902 /// ERST Serialization Instruction Entry
01903 ///
01904 typedef struct {
01905   UINT8                                    SerializationAction;
01906   UINT8                                    Instruction;
01907   UINT8                                    Flags;
01908   UINT8                                    Reserved0;
01909   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
01910   UINT64                                   Value;
01911   UINT64                                   Mask;
01912 } EFI_ACPI_6_0_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
01913 
01914 ///
01915 /// EINJ - Error Injection Table
01916 ///
01917 typedef struct {
01918   EFI_ACPI_DESCRIPTION_HEADER Header;
01919   UINT32                      InjectionHeaderSize;
01920   UINT8                       InjectionFlags;
01921   UINT8                       Reserved0[3];
01922   UINT32                      InjectionEntryCount;
01923 } EFI_ACPI_6_0_ERROR_INJECTION_TABLE_HEADER;
01924 
01925 ///
01926 /// EINJ Version (as defined in ACPI 6.0 spec.)
01927 ///
01928 #define EFI_ACPI_6_0_ERROR_INJECTION_TABLE_REVISION 0x01
01929 
01930 ///
01931 /// EINJ Error Injection Actions
01932 ///
01933 #define EFI_ACPI_6_0_EINJ_BEGIN_INJECTION_OPERATION                0x00
01934 #define EFI_ACPI_6_0_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE           0x01
01935 #define EFI_ACPI_6_0_EINJ_SET_ERROR_TYPE                           0x02
01936 #define EFI_ACPI_6_0_EINJ_GET_ERROR_TYPE                           0x03
01937 #define EFI_ACPI_6_0_EINJ_END_OPERATION                            0x04
01938 #define EFI_ACPI_6_0_EINJ_EXECUTE_OPERATION                        0x05
01939 #define EFI_ACPI_6_0_EINJ_CHECK_BUSY_STATUS                        0x06
01940 #define EFI_ACPI_6_0_EINJ_GET_COMMAND_STATUS                       0x07
01941 #define EFI_ACPI_6_0_EINJ_TRIGGER_ERROR                            0xFF
01942 
01943 ///
01944 /// EINJ Action Command Status
01945 ///
01946 #define EFI_ACPI_6_0_EINJ_STATUS_SUCCESS                           0x00
01947 #define EFI_ACPI_6_0_EINJ_STATUS_UNKNOWN_FAILURE                   0x01
01948 #define EFI_ACPI_6_0_EINJ_STATUS_INVALID_ACCESS                    0x02
01949 
01950 ///
01951 /// EINJ Error Type Definition
01952 ///
01953 #define EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_CORRECTABLE                 (1 << 0)
01954 #define EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL      (1 << 1)
01955 #define EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL         (1 << 2)
01956 #define EFI_ACPI_6_0_EINJ_ERROR_MEMORY_CORRECTABLE                    (1 << 3)
01957 #define EFI_ACPI_6_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL         (1 << 4)
01958 #define EFI_ACPI_6_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL            (1 << 5)
01959 #define EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE               (1 << 6)
01960 #define EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL    (1 << 7)
01961 #define EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL       (1 << 8)
01962 #define EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_CORRECTABLE                  (1 << 9)
01963 #define EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL       (1 << 10)
01964 #define EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL          (1 << 11)
01965 
01966 ///
01967 /// EINJ Injection Instructions
01968 ///
01969 #define EFI_ACPI_6_0_EINJ_READ_REGISTER                            0x00
01970 #define EFI_ACPI_6_0_EINJ_READ_REGISTER_VALUE                      0x01
01971 #define EFI_ACPI_6_0_EINJ_WRITE_REGISTER                           0x02
01972 #define EFI_ACPI_6_0_EINJ_WRITE_REGISTER_VALUE                     0x03
01973 #define EFI_ACPI_6_0_EINJ_NOOP                                     0x04
01974 
01975 ///
01976 /// EINJ Instruction Flags
01977 ///
01978 #define EFI_ACPI_6_0_EINJ_PRESERVE_REGISTER                        0x01
01979 
01980 ///
01981 /// EINJ Injection Instruction Entry
01982 ///
01983 typedef struct {
01984   UINT8                                    InjectionAction;
01985   UINT8                                    Instruction;
01986   UINT8                                    Flags;
01987   UINT8                                    Reserved0;
01988   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
01989   UINT64                                   Value;
01990   UINT64                                   Mask;
01991 } EFI_ACPI_6_0_EINJ_INJECTION_INSTRUCTION_ENTRY;
01992 
01993 ///
01994 /// EINJ Trigger Action Table
01995 ///
01996 typedef struct {
01997   UINT32  HeaderSize;
01998   UINT32  Revision;
01999   UINT32  TableSize;
02000   UINT32  EntryCount;
02001 } EFI_ACPI_6_0_EINJ_TRIGGER_ACTION_TABLE;
02002 
02003 ///
02004 /// Platform Communications Channel Table (PCCT)
02005 ///
02006 typedef struct {
02007   EFI_ACPI_DESCRIPTION_HEADER Header;
02008   UINT32                      Flags;
02009   UINT64                      Reserved;
02010 } EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER;
02011 
02012 ///
02013 /// PCCT Version (as defined in ACPI 6.0 spec.)
02014 ///
02015 #define EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION 0x01
02016 
02017 ///
02018 /// PCCT Global Flags
02019 ///
02020 #define EFI_ACPI_6_0_PCCT_FLAGS_SCI_DOORBELL                      BIT0
02021 
02022 //
02023 // PCCT Subspace type
02024 //
02025 #define EFI_ACPI_6_0_PCCT_SUBSPACE_TYPE_GENERIC  0x00
02026 
02027 ///
02028 /// PCC Subspace Structure Header
02029 ///
02030 typedef struct {
02031   UINT8        Type;
02032   UINT8        Length;
02033 } EFI_ACPI_6_0_PCCT_SUBSPACE_HEADER;
02034 
02035 ///
02036 /// Generic Communications Subspace Structure
02037 ///
02038 typedef struct {
02039   UINT8                                    Type;
02040   UINT8                                    Length;
02041   UINT8                                    Reserved[6];
02042   UINT64                                   BaseAddress;
02043   UINT64                                   AddressLength;
02044   EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE   DoorbellRegister;
02045   UINT64                                   DoorbellPreserve;
02046   UINT64                                   DoorbellWrite;
02047   UINT32                                   NominalLatency;
02048   UINT32                                   MaximumPeriodicAccessRate;
02049   UINT16                                   MinimumRequestTurnaroundTime;
02050 } EFI_ACPI_6_0_PCCT_SUBSPACE_GENERIC;
02051 
02052 ///
02053 /// Generic Communications Channel Shared Memory Region
02054 ///
02055 
02056 typedef struct {
02057   UINT8                                    Command;
02058   UINT8                                    Reserved:7;
02059   UINT8                                    GenerateSci:1;
02060 } EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND;
02061 
02062 typedef struct {
02063   UINT8                                    CommandComplete:1;
02064   UINT8                                    SciDoorbell:1;
02065   UINT8                                    Error:1;
02066   UINT8                                    PlatformNotification:1;
02067   UINT8                                    Reserved:4;
02068   UINT8                                    Reserved1;
02069 } EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS;
02070 
02071 typedef struct {
02072   UINT32                                                    Signature;
02073   EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND    Command;
02074   EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS     Status;
02075 } EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER;
02076 
02077 //
02078 // Known table signatures
02079 //
02080 
02081 ///
02082 /// "RSD PTR " Root System Description Pointer
02083 ///
02084 #define EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
02085 
02086 ///
02087 /// "APIC" Multiple APIC Description Table
02088 ///
02089 #define EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
02090 
02091 ///
02092 /// "BERT" Boot Error Record Table
02093 ///
02094 #define EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
02095 
02096 ///
02097 /// "BGRT" Boot Graphics Resource Table
02098 ///
02099 #define EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('B', 'G', 'R', 'T')
02100 
02101 ///
02102 /// "CPEP" Corrected Platform Error Polling Table
02103 ///
02104 #define EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
02105 
02106 ///
02107 /// "DSDT" Differentiated System Description Table
02108 ///
02109 #define EFI_ACPI_6_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
02110 
02111 ///
02112 /// "ECDT" Embedded Controller Boot Resources Table
02113 ///
02114 #define EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
02115 
02116 ///
02117 /// "EINJ" Error Injection Table
02118 ///
02119 #define EFI_ACPI_6_0_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
02120 
02121 ///
02122 /// "ERST" Error Record Serialization Table
02123 ///
02124 #define EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
02125 
02126 ///
02127 /// "FACP" Fixed ACPI Description Table
02128 ///
02129 #define EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
02130 
02131 ///
02132 /// "FACS" Firmware ACPI Control Structure
02133 ///
02134 #define EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
02135 
02136 ///
02137 /// "FPDT" Firmware Performance Data Table
02138 ///
02139 #define EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE  SIGNATURE_32('F', 'P', 'D', 'T')
02140 
02141 ///
02142 /// "GTDT" Generic Timer Description Table
02143 ///
02144 #define EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('G', 'T', 'D', 'T')
02145 
02146 ///
02147 /// "HEST" Hardware Error Source Table
02148 ///
02149 #define EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
02150 
02151 ///
02152 /// "MPST" Memory Power State Table
02153 ///
02154 #define EFI_ACPI_6_0_MEMORY_POWER_STATE_TABLE_SIGNATURE  SIGNATURE_32('M', 'P', 'S', 'T')
02155 
02156 ///
02157 /// "MSCT" Maximum System Characteristics Table
02158 ///
02159 #define EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
02160 
02161 ///
02162 /// "NFIT" NVDIMM Firmware Interface Table
02163 ///
02164 #define EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('N', 'F', 'I', 'T')
02165 
02166 ///
02167 /// "PMTT" Platform Memory Topology Table
02168 ///
02169 #define EFI_ACPI_6_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE  SIGNATURE_32('P', 'M', 'T', 'T')
02170 
02171 ///
02172 /// "PSDT" Persistent System Description Table
02173 ///
02174 #define EFI_ACPI_6_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
02175 
02176 ///
02177 /// "RASF" ACPI RAS Feature Table
02178 ///
02179 #define EFI_ACPI_6_0_ACPI_RAS_FEATURE_TABLE_SIGNATURE  SIGNATURE_32('R', 'A', 'S', 'F')
02180 
02181 ///
02182 /// "RSDT" Root System Description Table
02183 ///
02184 #define EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
02185 
02186 ///
02187 /// "SBST" Smart Battery Specification Table
02188 ///
02189 #define EFI_ACPI_6_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
02190 
02191 ///
02192 /// "SLIT" System Locality Information Table
02193 ///
02194 #define EFI_ACPI_6_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
02195 
02196 ///
02197 /// "SRAT" System Resource Affinity Table
02198 ///
02199 #define EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
02200 
02201 ///
02202 /// "SSDT" Secondary System Description Table
02203 ///
02204 #define EFI_ACPI_6_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
02205 
02206 ///
02207 /// "XSDT" Extended System Description Table
02208 ///
02209 #define EFI_ACPI_6_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
02210 
02211 ///
02212 /// "BOOT" MS Simple Boot Spec
02213 ///
02214 #define EFI_ACPI_6_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
02215 
02216 ///
02217 /// "CSRT" MS Core System Resource Table
02218 ///
02219 #define EFI_ACPI_6_0_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('C', 'S', 'R', 'T')
02220 
02221 ///
02222 /// "DBG2" MS Debug Port 2 Spec
02223 ///
02224 #define EFI_ACPI_6_0_DEBUG_PORT_2_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', '2')
02225 
02226 ///
02227 /// "DBGP" MS Debug Port Spec
02228 ///
02229 #define EFI_ACPI_6_0_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
02230 
02231 ///
02232 /// "DMAR" DMA Remapping Table
02233 ///
02234 #define EFI_ACPI_6_0_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
02235 
02236 ///
02237 /// "DRTM" Dynamic Root of Trust for Measurement Table
02238 ///
02239 #define EFI_ACPI_6_0_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE  SIGNATURE_32('D', 'R', 'T', 'M')
02240 
02241 ///
02242 /// "ETDT" Event Timer Description Table
02243 ///
02244 #define EFI_ACPI_6_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
02245 
02246 ///
02247 /// "HPET" IA-PC High Precision Event Timer Table
02248 ///
02249 #define EFI_ACPI_6_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
02250 
02251 ///
02252 /// "iBFT" iSCSI Boot Firmware Table
02253 ///
02254 #define EFI_ACPI_6_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
02255 
02256 ///
02257 /// "IORT" I/O Remapping Table
02258 ///
02259 #define EFI_ACPI_6_0_IO_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('I', 'O', 'R', 'T')
02260 
02261 ///
02262 /// "IVRS" I/O Virtualization Reporting Structure
02263 ///
02264 #define EFI_ACPI_6_0_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
02265 
02266 ///
02267 /// "LPIT" Low Power Idle Table
02268 ///
02269 #define EFI_ACPI_6_0_LOW_POWER_IDLE_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('L', 'P', 'I', 'T')
02270 
02271 ///
02272 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
02273 ///
02274 #define EFI_ACPI_6_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
02275 
02276 ///
02277 /// "MCHI" Management Controller Host Interface Table
02278 ///
02279 #define EFI_ACPI_6_0_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
02280 
02281 ///
02282 /// "MSDM" MS Data Management Table
02283 ///
02284 #define EFI_ACPI_6_0_DATA_MANAGEMENT_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'D', 'M')
02285 
02286 ///
02287 /// "SLIC" MS Software Licensing Table Specification
02288 ///
02289 #define EFI_ACPI_6_0_SOFTWARE_LICENSING_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'C')
02290 
02291 ///
02292 /// "SPCR" Serial Port Concole Redirection Table
02293 ///
02294 #define EFI_ACPI_6_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
02295 
02296 ///
02297 /// "SPMI" Server Platform Management Interface Table
02298 ///
02299 #define EFI_ACPI_6_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
02300 
02301 ///
02302 /// "STAO" _STA Override Table
02303 ///
02304 #define EFI_ACPI_6_0_STA_OVERRIDE_TABLE_SIGNATURE  SIGNATURE_32('S', 'T', 'A', 'O')
02305 
02306 ///
02307 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
02308 ///
02309 #define EFI_ACPI_6_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
02310 
02311 ///
02312 /// "TPM2" Trusted Computing Platform 1 Table
02313 ///
02314 #define EFI_ACPI_6_0_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE  SIGNATURE_32('T', 'P', 'M', '2')
02315 
02316 ///
02317 /// "UEFI" UEFI ACPI Data Table
02318 ///
02319 #define EFI_ACPI_6_0_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
02320 
02321 ///
02322 /// "WAET" Windows ACPI Emulated Devices Table
02323 ///
02324 #define EFI_ACPI_6_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
02325 
02326 ///
02327 /// "WDAT" Watchdog Action Table
02328 ///
02329 #define EFI_ACPI_6_0_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
02330 
02331 ///
02332 /// "WDRT" Watchdog Resource Table
02333 ///
02334 #define EFI_ACPI_6_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
02335 
02336 ///
02337 /// "WPBT" MS Platform Binary Table
02338 ///
02339 #define EFI_ACPI_6_0_PLATFORM_BINARY_TABLE_SIGNATURE  SIGNATURE_32('W', 'P', 'B', 'T')
02340 
02341 ///
02342 /// "XENV" Xen Project Table
02343 ///
02344 #define EFI_ACPI_6_0_XEN_PROJECT_TABLE_SIGNATURE  SIGNATURE_32('X', 'E', 'N', 'V')
02345 
02346 #pragma pack()
02347 
02348 #endif