1 /** @file 2 ACPI 6.0 definitions from the ACPI Specification Revision 6.0 April, 2015. 3 4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 **/ 13 14 #ifndef _ACPI_6_0_H_ 15 #define _ACPI_6_0_H_ 16 17 #include <IndustryStandard/Acpi51.h> 18 19 // 20 // Ensure proper structure formats 21 // 22 #pragma pack(1) 23 24 /// 25 /// ACPI 6.0 Generic Address Space definition 26 /// 27 typedef struct { 28 UINT8 AddressSpaceId; 29 UINT8 RegisterBitWidth; 30 UINT8 RegisterBitOffset; 31 UINT8 AccessSize; 32 UINT64 Address; 33 } EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE; 34 35 // 36 // Generic Address Space Address IDs 37 // 38 #define EFI_ACPI_6_0_SYSTEM_MEMORY 0 39 #define EFI_ACPI_6_0_SYSTEM_IO 1 40 #define EFI_ACPI_6_0_PCI_CONFIGURATION_SPACE 2 41 #define EFI_ACPI_6_0_EMBEDDED_CONTROLLER 3 42 #define EFI_ACPI_6_0_SMBUS 4 43 #define EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL 0x0A 44 #define EFI_ACPI_6_0_FUNCTIONAL_FIXED_HARDWARE 0x7F 45 46 // 47 // Generic Address Space Access Sizes 48 // 49 #define EFI_ACPI_6_0_UNDEFINED 0 50 #define EFI_ACPI_6_0_BYTE 1 51 #define EFI_ACPI_6_0_WORD 2 52 #define EFI_ACPI_6_0_DWORD 3 53 #define EFI_ACPI_6_0_QWORD 4 54 55 // 56 // ACPI 6.0 table structures 57 // 58 59 /// 60 /// Root System Description Pointer Structure 61 /// 62 typedef struct { 63 UINT64 Signature; 64 UINT8 Checksum; 65 UINT8 OemId[6]; 66 UINT8 Revision; 67 UINT32 RsdtAddress; 68 UINT32 Length; 69 UINT64 XsdtAddress; 70 UINT8 ExtendedChecksum; 71 UINT8 Reserved[3]; 72 } EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER; 73 74 /// 75 /// RSD_PTR Revision (as defined in ACPI 6.0 spec.) 76 /// 77 #define EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02 ///< ACPISpec (Revision 6.0) says current value is 2 78 79 /// 80 /// Common table header, this prefaces all ACPI tables, including FACS, but 81 /// excluding the RSD PTR structure 82 /// 83 typedef struct { 84 UINT32 Signature; 85 UINT32 Length; 86 } EFI_ACPI_6_0_COMMON_HEADER; 87 88 // 89 // Root System Description Table 90 // No definition needed as it is a common description table header, the same with 91 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers. 92 // 93 94 /// 95 /// RSDT Revision (as defined in ACPI 6.0 spec.) 96 /// 97 #define EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01 98 99 // 100 // Extended System Description Table 101 // No definition needed as it is a common description table header, the same with 102 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers. 103 // 104 105 /// 106 /// XSDT Revision (as defined in ACPI 6.0 spec.) 107 /// 108 #define EFI_ACPI_6_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01 109 110 /// 111 /// Fixed ACPI Description Table Structure (FADT) 112 /// 113 typedef struct { 114 EFI_ACPI_DESCRIPTION_HEADER Header; 115 UINT32 FirmwareCtrl; 116 UINT32 Dsdt; 117 UINT8 Reserved0; 118 UINT8 PreferredPmProfile; 119 UINT16 SciInt; 120 UINT32 SmiCmd; 121 UINT8 AcpiEnable; 122 UINT8 AcpiDisable; 123 UINT8 S4BiosReq; 124 UINT8 PstateCnt; 125 UINT32 Pm1aEvtBlk; 126 UINT32 Pm1bEvtBlk; 127 UINT32 Pm1aCntBlk; 128 UINT32 Pm1bCntBlk; 129 UINT32 Pm2CntBlk; 130 UINT32 PmTmrBlk; 131 UINT32 Gpe0Blk; 132 UINT32 Gpe1Blk; 133 UINT8 Pm1EvtLen; 134 UINT8 Pm1CntLen; 135 UINT8 Pm2CntLen; 136 UINT8 PmTmrLen; 137 UINT8 Gpe0BlkLen; 138 UINT8 Gpe1BlkLen; 139 UINT8 Gpe1Base; 140 UINT8 CstCnt; 141 UINT16 PLvl2Lat; 142 UINT16 PLvl3Lat; 143 UINT16 FlushSize; 144 UINT16 FlushStride; 145 UINT8 DutyOffset; 146 UINT8 DutyWidth; 147 UINT8 DayAlrm; 148 UINT8 MonAlrm; 149 UINT8 Century; 150 UINT16 IaPcBootArch; 151 UINT8 Reserved1; 152 UINT32 Flags; 153 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE ResetReg; 154 UINT8 ResetValue; 155 UINT16 ArmBootArch; 156 UINT8 MinorVersion; 157 UINT64 XFirmwareCtrl; 158 UINT64 XDsdt; 159 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm1aEvtBlk; 160 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm1bEvtBlk; 161 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm1aCntBlk; 162 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm1bCntBlk; 163 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm2CntBlk; 164 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPmTmrBlk; 165 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XGpe0Blk; 166 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XGpe1Blk; 167 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE SleepControlReg; 168 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE SleepStatusReg; 169 UINT64 HypervisorVendorIdentity; 170 } EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE; 171 172 /// 173 /// FADT Version (as defined in ACPI 6.0 spec.) 174 /// 175 #define EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION 0x06 176 #define EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION 0x00 177 178 // 179 // Fixed ACPI Description Table Preferred Power Management Profile 180 // 181 #define EFI_ACPI_6_0_PM_PROFILE_UNSPECIFIED 0 182 #define EFI_ACPI_6_0_PM_PROFILE_DESKTOP 1 183 #define EFI_ACPI_6_0_PM_PROFILE_MOBILE 2 184 #define EFI_ACPI_6_0_PM_PROFILE_WORKSTATION 3 185 #define EFI_ACPI_6_0_PM_PROFILE_ENTERPRISE_SERVER 4 186 #define EFI_ACPI_6_0_PM_PROFILE_SOHO_SERVER 5 187 #define EFI_ACPI_6_0_PM_PROFILE_APPLIANCE_PC 6 188 #define EFI_ACPI_6_0_PM_PROFILE_PERFORMANCE_SERVER 7 189 #define EFI_ACPI_6_0_PM_PROFILE_TABLET 8 190 191 // 192 // Fixed ACPI Description Table Boot Architecture Flags 193 // All other bits are reserved and must be set to 0. 194 // 195 #define EFI_ACPI_6_0_LEGACY_DEVICES BIT0 196 #define EFI_ACPI_6_0_8042 BIT1 197 #define EFI_ACPI_6_0_VGA_NOT_PRESENT BIT2 198 #define EFI_ACPI_6_0_MSI_NOT_SUPPORTED BIT3 199 #define EFI_ACPI_6_0_PCIE_ASPM_CONTROLS BIT4 200 #define EFI_ACPI_6_0_CMOS_RTC_NOT_PRESENT BIT5 201 202 // 203 // Fixed ACPI Description Table Arm Boot Architecture Flags 204 // All other bits are reserved and must be set to 0. 205 // 206 #define EFI_ACPI_6_0_ARM_PSCI_COMPLIANT BIT0 207 #define EFI_ACPI_6_0_ARM_PSCI_USE_HVC BIT1 208 209 // 210 // Fixed ACPI Description Table Fixed Feature Flags 211 // All other bits are reserved and must be set to 0. 212 // 213 #define EFI_ACPI_6_0_WBINVD BIT0 214 #define EFI_ACPI_6_0_WBINVD_FLUSH BIT1 215 #define EFI_ACPI_6_0_PROC_C1 BIT2 216 #define EFI_ACPI_6_0_P_LVL2_UP BIT3 217 #define EFI_ACPI_6_0_PWR_BUTTON BIT4 218 #define EFI_ACPI_6_0_SLP_BUTTON BIT5 219 #define EFI_ACPI_6_0_FIX_RTC BIT6 220 #define EFI_ACPI_6_0_RTC_S4 BIT7 221 #define EFI_ACPI_6_0_TMR_VAL_EXT BIT8 222 #define EFI_ACPI_6_0_DCK_CAP BIT9 223 #define EFI_ACPI_6_0_RESET_REG_SUP BIT10 224 #define EFI_ACPI_6_0_SEALED_CASE BIT11 225 #define EFI_ACPI_6_0_HEADLESS BIT12 226 #define EFI_ACPI_6_0_CPU_SW_SLP BIT13 227 #define EFI_ACPI_6_0_PCI_EXP_WAK BIT14 228 #define EFI_ACPI_6_0_USE_PLATFORM_CLOCK BIT15 229 #define EFI_ACPI_6_0_S4_RTC_STS_VALID BIT16 230 #define EFI_ACPI_6_0_REMOTE_POWER_ON_CAPABLE BIT17 231 #define EFI_ACPI_6_0_FORCE_APIC_CLUSTER_MODEL BIT18 232 #define EFI_ACPI_6_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE BIT19 233 #define EFI_ACPI_6_0_HW_REDUCED_ACPI BIT20 234 #define EFI_ACPI_6_0_LOW_POWER_S0_IDLE_CAPABLE BIT21 235 236 /// 237 /// Firmware ACPI Control Structure 238 /// 239 typedef struct { 240 UINT32 Signature; 241 UINT32 Length; 242 UINT32 HardwareSignature; 243 UINT32 FirmwareWakingVector; 244 UINT32 GlobalLock; 245 UINT32 Flags; 246 UINT64 XFirmwareWakingVector; 247 UINT8 Version; 248 UINT8 Reserved0[3]; 249 UINT32 OspmFlags; 250 UINT8 Reserved1[24]; 251 } EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE; 252 253 /// 254 /// FACS Version (as defined in ACPI 6.0 spec.) 255 /// 256 #define EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION 0x02 257 258 /// 259 /// Firmware Control Structure Feature Flags 260 /// All other bits are reserved and must be set to 0. 261 /// 262 #define EFI_ACPI_6_0_S4BIOS_F BIT0 263 #define EFI_ACPI_6_0_64BIT_WAKE_SUPPORTED_F BIT1 264 265 /// 266 /// OSPM Enabled Firmware Control Structure Flags 267 /// All other bits are reserved and must be set to 0. 268 /// 269 #define EFI_ACPI_6_0_OSPM_64BIT_WAKE_F BIT0 270 271 // 272 // Differentiated System Description Table, 273 // Secondary System Description Table 274 // and Persistent System Description Table, 275 // no definition needed as they are common description table header, the same with 276 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block. 277 // 278 #define EFI_ACPI_6_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x02 279 #define EFI_ACPI_6_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION 0x02 280 281 /// 282 /// Multiple APIC Description Table header definition. The rest of the table 283 /// must be defined in a platform specific manner. 284 /// 285 typedef struct { 286 EFI_ACPI_DESCRIPTION_HEADER Header; 287 UINT32 LocalApicAddress; 288 UINT32 Flags; 289 } EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER; 290 291 /// 292 /// MADT Revision (as defined in ACPI 6.0 spec.) 293 /// 294 #define EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x03 295 296 /// 297 /// Multiple APIC Flags 298 /// All other bits are reserved and must be set to 0. 299 /// 300 #define EFI_ACPI_6_0_PCAT_COMPAT BIT0 301 302 // 303 // Multiple APIC Description Table APIC structure types 304 // All other values between 0x0D and 0x7F are reserved and 305 // will be ignored by OSPM. 0x80 ~ 0xFF are reserved for OEM. 306 // 307 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC 0x00 308 #define EFI_ACPI_6_0_IO_APIC 0x01 309 #define EFI_ACPI_6_0_INTERRUPT_SOURCE_OVERRIDE 0x02 310 #define EFI_ACPI_6_0_NON_MASKABLE_INTERRUPT_SOURCE 0x03 311 #define EFI_ACPI_6_0_LOCAL_APIC_NMI 0x04 312 #define EFI_ACPI_6_0_LOCAL_APIC_ADDRESS_OVERRIDE 0x05 313 #define EFI_ACPI_6_0_IO_SAPIC 0x06 314 #define EFI_ACPI_6_0_LOCAL_SAPIC 0x07 315 #define EFI_ACPI_6_0_PLATFORM_INTERRUPT_SOURCES 0x08 316 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC 0x09 317 #define EFI_ACPI_6_0_LOCAL_X2APIC_NMI 0x0A 318 #define EFI_ACPI_6_0_GIC 0x0B 319 #define EFI_ACPI_6_0_GICD 0x0C 320 #define EFI_ACPI_6_0_GIC_MSI_FRAME 0x0D 321 #define EFI_ACPI_6_0_GICR 0x0E 322 #define EFI_ACPI_6_0_GIC_ITS 0x0F 323 324 // 325 // APIC Structure Definitions 326 // 327 328 /// 329 /// Processor Local APIC Structure Definition 330 /// 331 typedef struct { 332 UINT8 Type; 333 UINT8 Length; 334 UINT8 AcpiProcessorUid; 335 UINT8 ApicId; 336 UINT32 Flags; 337 } EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_STRUCTURE; 338 339 /// 340 /// Local APIC Flags. All other bits are reserved and must be 0. 341 /// 342 #define EFI_ACPI_6_0_LOCAL_APIC_ENABLED BIT0 343 344 /// 345 /// IO APIC Structure 346 /// 347 typedef struct { 348 UINT8 Type; 349 UINT8 Length; 350 UINT8 IoApicId; 351 UINT8 Reserved; 352 UINT32 IoApicAddress; 353 UINT32 GlobalSystemInterruptBase; 354 } EFI_ACPI_6_0_IO_APIC_STRUCTURE; 355 356 /// 357 /// Interrupt Source Override Structure 358 /// 359 typedef struct { 360 UINT8 Type; 361 UINT8 Length; 362 UINT8 Bus; 363 UINT8 Source; 364 UINT32 GlobalSystemInterrupt; 365 UINT16 Flags; 366 } EFI_ACPI_6_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE; 367 368 /// 369 /// Platform Interrupt Sources Structure Definition 370 /// 371 typedef struct { 372 UINT8 Type; 373 UINT8 Length; 374 UINT16 Flags; 375 UINT8 InterruptType; 376 UINT8 ProcessorId; 377 UINT8 ProcessorEid; 378 UINT8 IoSapicVector; 379 UINT32 GlobalSystemInterrupt; 380 UINT32 PlatformInterruptSourceFlags; 381 UINT8 CpeiProcessorOverride; 382 UINT8 Reserved[31]; 383 } EFI_ACPI_6_0_PLATFORM_INTERRUPT_APIC_STRUCTURE; 384 385 // 386 // MPS INTI flags. 387 // All other bits are reserved and must be set to 0. 388 // 389 #define EFI_ACPI_6_0_POLARITY (3 << 0) 390 #define EFI_ACPI_6_0_TRIGGER_MODE (3 << 2) 391 392 /// 393 /// Non-Maskable Interrupt Source Structure 394 /// 395 typedef struct { 396 UINT8 Type; 397 UINT8 Length; 398 UINT16 Flags; 399 UINT32 GlobalSystemInterrupt; 400 } EFI_ACPI_6_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE; 401 402 /// 403 /// Local APIC NMI Structure 404 /// 405 typedef struct { 406 UINT8 Type; 407 UINT8 Length; 408 UINT8 AcpiProcessorUid; 409 UINT16 Flags; 410 UINT8 LocalApicLint; 411 } EFI_ACPI_6_0_LOCAL_APIC_NMI_STRUCTURE; 412 413 /// 414 /// Local APIC Address Override Structure 415 /// 416 typedef struct { 417 UINT8 Type; 418 UINT8 Length; 419 UINT16 Reserved; 420 UINT64 LocalApicAddress; 421 } EFI_ACPI_6_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE; 422 423 /// 424 /// IO SAPIC Structure 425 /// 426 typedef struct { 427 UINT8 Type; 428 UINT8 Length; 429 UINT8 IoApicId; 430 UINT8 Reserved; 431 UINT32 GlobalSystemInterruptBase; 432 UINT64 IoSapicAddress; 433 } EFI_ACPI_6_0_IO_SAPIC_STRUCTURE; 434 435 /// 436 /// Local SAPIC Structure 437 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String 438 /// 439 typedef struct { 440 UINT8 Type; 441 UINT8 Length; 442 UINT8 AcpiProcessorId; 443 UINT8 LocalSapicId; 444 UINT8 LocalSapicEid; 445 UINT8 Reserved[3]; 446 UINT32 Flags; 447 UINT32 ACPIProcessorUIDValue; 448 } EFI_ACPI_6_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE; 449 450 /// 451 /// Platform Interrupt Sources Structure 452 /// 453 typedef struct { 454 UINT8 Type; 455 UINT8 Length; 456 UINT16 Flags; 457 UINT8 InterruptType; 458 UINT8 ProcessorId; 459 UINT8 ProcessorEid; 460 UINT8 IoSapicVector; 461 UINT32 GlobalSystemInterrupt; 462 UINT32 PlatformInterruptSourceFlags; 463 } EFI_ACPI_6_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE; 464 465 /// 466 /// Platform Interrupt Source Flags. 467 /// All other bits are reserved and must be set to 0. 468 /// 469 #define EFI_ACPI_6_0_CPEI_PROCESSOR_OVERRIDE BIT0 470 471 /// 472 /// Processor Local x2APIC Structure Definition 473 /// 474 typedef struct { 475 UINT8 Type; 476 UINT8 Length; 477 UINT8 Reserved[2]; 478 UINT32 X2ApicId; 479 UINT32 Flags; 480 UINT32 AcpiProcessorUid; 481 } EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE; 482 483 /// 484 /// Local x2APIC NMI Structure 485 /// 486 typedef struct { 487 UINT8 Type; 488 UINT8 Length; 489 UINT16 Flags; 490 UINT32 AcpiProcessorUid; 491 UINT8 LocalX2ApicLint; 492 UINT8 Reserved[3]; 493 } EFI_ACPI_6_0_LOCAL_X2APIC_NMI_STRUCTURE; 494 495 /// 496 /// GIC Structure 497 /// 498 typedef struct { 499 UINT8 Type; 500 UINT8 Length; 501 UINT16 Reserved; 502 UINT32 CPUInterfaceNumber; 503 UINT32 AcpiProcessorUid; 504 UINT32 Flags; 505 UINT32 ParkingProtocolVersion; 506 UINT32 PerformanceInterruptGsiv; 507 UINT64 ParkedAddress; 508 UINT64 PhysicalBaseAddress; 509 UINT64 GICV; 510 UINT64 GICH; 511 UINT32 VGICMaintenanceInterrupt; 512 UINT64 GICRBaseAddress; 513 UINT64 MPIDR; 514 UINT8 ProcessorPowerEfficiencyClass; 515 UINT8 Reserved2[3]; 516 } EFI_ACPI_6_0_GIC_STRUCTURE; 517 518 /// 519 /// GIC Flags. All other bits are reserved and must be 0. 520 /// 521 #define EFI_ACPI_6_0_GIC_ENABLED BIT0 522 #define EFI_ACPI_6_0_PERFORMANCE_INTERRUPT_MODEL BIT1 523 #define EFI_ACPI_6_0_VGIC_MAINTENANCE_INTERRUPT_MODE_FLAGS BIT2 524 525 /// 526 /// GIC Distributor Structure 527 /// 528 typedef struct { 529 UINT8 Type; 530 UINT8 Length; 531 UINT16 Reserved1; 532 UINT32 GicId; 533 UINT64 PhysicalBaseAddress; 534 UINT32 SystemVectorBase; 535 UINT32 Reserved2; 536 } EFI_ACPI_6_0_GIC_DISTRIBUTOR_STRUCTURE; 537 538 /// 539 /// GIC MSI Frame Structure 540 /// 541 typedef struct { 542 UINT8 Type; 543 UINT8 Length; 544 UINT16 Reserved1; 545 UINT32 GicMsiFrameId; 546 UINT64 PhysicalBaseAddress; 547 UINT32 Flags; 548 UINT16 SPICount; 549 UINT16 SPIBase; 550 } EFI_ACPI_6_0_GIC_MSI_FRAME_STRUCTURE; 551 552 /// 553 /// GIC MSI Frame Flags. All other bits are reserved and must be 0. 554 /// 555 #define EFI_ACPI_6_0_SPI_COUNT_BASE_SELECT BIT0 556 557 /// 558 /// GICR Structure 559 /// 560 typedef struct { 561 UINT8 Type; 562 UINT8 Length; 563 UINT16 Reserved; 564 UINT64 DiscoveryRangeBaseAddress; 565 UINT32 DiscoveryRangeLength; 566 } EFI_ACPI_6_0_GICR_STRUCTURE; 567 568 /// 569 /// GIC Interrupt Translation Service Structure 570 /// 571 typedef struct { 572 UINT8 Type; 573 UINT8 Length; 574 UINT16 Reserved; 575 UINT32 GicItsId; 576 UINT64 PhysicalBaseAddress; 577 UINT32 Reserved2; 578 } EFI_ACPI_6_0_GIC_ITS_STRUCTURE; 579 580 /// 581 /// Smart Battery Description Table (SBST) 582 /// 583 typedef struct { 584 EFI_ACPI_DESCRIPTION_HEADER Header; 585 UINT32 WarningEnergyLevel; 586 UINT32 LowEnergyLevel; 587 UINT32 CriticalEnergyLevel; 588 } EFI_ACPI_6_0_SMART_BATTERY_DESCRIPTION_TABLE; 589 590 /// 591 /// SBST Version (as defined in ACPI 6.0 spec.) 592 /// 593 #define EFI_ACPI_6_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01 594 595 /// 596 /// Embedded Controller Boot Resources Table (ECDT) 597 /// The table is followed by a null terminated ASCII string that contains 598 /// a fully qualified reference to the name space object. 599 /// 600 typedef struct { 601 EFI_ACPI_DESCRIPTION_HEADER Header; 602 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE EcControl; 603 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE EcData; 604 UINT32 Uid; 605 UINT8 GpeBit; 606 } EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE; 607 608 /// 609 /// ECDT Version (as defined in ACPI 6.0 spec.) 610 /// 611 #define EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION 0x01 612 613 /// 614 /// System Resource Affinity Table (SRAT). The rest of the table 615 /// must be defined in a platform specific manner. 616 /// 617 typedef struct { 618 EFI_ACPI_DESCRIPTION_HEADER Header; 619 UINT32 Reserved1; ///< Must be set to 1 620 UINT64 Reserved2; 621 } EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER; 622 623 /// 624 /// SRAT Version (as defined in ACPI 6.0 spec.) 625 /// 626 #define EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION 0x03 627 628 // 629 // SRAT structure types. 630 // All other values between 0x04 an 0xFF are reserved and 631 // will be ignored by OSPM. 632 // 633 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY 0x00 634 #define EFI_ACPI_6_0_MEMORY_AFFINITY 0x01 635 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_AFFINITY 0x02 636 #define EFI_ACPI_6_0_GICC_AFFINITY 0x03 637 638 /// 639 /// Processor Local APIC/SAPIC Affinity Structure Definition 640 /// 641 typedef struct { 642 UINT8 Type; 643 UINT8 Length; 644 UINT8 ProximityDomain7To0; 645 UINT8 ApicId; 646 UINT32 Flags; 647 UINT8 LocalSapicEid; 648 UINT8 ProximityDomain31To8[3]; 649 UINT32 ClockDomain; 650 } EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE; 651 652 /// 653 /// Local APIC/SAPIC Flags. All other bits are reserved and must be 0. 654 /// 655 #define EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0) 656 657 /// 658 /// Memory Affinity Structure Definition 659 /// 660 typedef struct { 661 UINT8 Type; 662 UINT8 Length; 663 UINT32 ProximityDomain; 664 UINT16 Reserved1; 665 UINT32 AddressBaseLow; 666 UINT32 AddressBaseHigh; 667 UINT32 LengthLow; 668 UINT32 LengthHigh; 669 UINT32 Reserved2; 670 UINT32 Flags; 671 UINT64 Reserved3; 672 } EFI_ACPI_6_0_MEMORY_AFFINITY_STRUCTURE; 673 674 // 675 // Memory Flags. All other bits are reserved and must be 0. 676 // 677 #define EFI_ACPI_6_0_MEMORY_ENABLED (1 << 0) 678 #define EFI_ACPI_6_0_MEMORY_HOT_PLUGGABLE (1 << 1) 679 #define EFI_ACPI_6_0_MEMORY_NONVOLATILE (1 << 2) 680 681 /// 682 /// Processor Local x2APIC Affinity Structure Definition 683 /// 684 typedef struct { 685 UINT8 Type; 686 UINT8 Length; 687 UINT8 Reserved1[2]; 688 UINT32 ProximityDomain; 689 UINT32 X2ApicId; 690 UINT32 Flags; 691 UINT32 ClockDomain; 692 UINT8 Reserved2[4]; 693 } EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE; 694 695 /// 696 /// GICC Affinity Structure Definition 697 /// 698 typedef struct { 699 UINT8 Type; 700 UINT8 Length; 701 UINT32 ProximityDomain; 702 UINT32 AcpiProcessorUid; 703 UINT32 Flags; 704 UINT32 ClockDomain; 705 } EFI_ACPI_6_0_GICC_AFFINITY_STRUCTURE; 706 707 /// 708 /// GICC Flags. All other bits are reserved and must be 0. 709 /// 710 #define EFI_ACPI_6_0_GICC_ENABLED (1 << 0) 711 712 /// 713 /// System Locality Distance Information Table (SLIT). 714 /// The rest of the table is a matrix. 715 /// 716 typedef struct { 717 EFI_ACPI_DESCRIPTION_HEADER Header; 718 UINT64 NumberOfSystemLocalities; 719 } EFI_ACPI_6_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER; 720 721 /// 722 /// SLIT Version (as defined in ACPI 6.0 spec.) 723 /// 724 #define EFI_ACPI_6_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION 0x01 725 726 /// 727 /// Corrected Platform Error Polling Table (CPEP) 728 /// 729 typedef struct { 730 EFI_ACPI_DESCRIPTION_HEADER Header; 731 UINT8 Reserved[8]; 732 } EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER; 733 734 /// 735 /// CPEP Version (as defined in ACPI 6.0 spec.) 736 /// 737 #define EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION 0x01 738 739 // 740 // CPEP processor structure types. 741 // 742 #define EFI_ACPI_6_0_CPEP_PROCESSOR_APIC_SAPIC 0x00 743 744 /// 745 /// Corrected Platform Error Polling Processor Structure Definition 746 /// 747 typedef struct { 748 UINT8 Type; 749 UINT8 Length; 750 UINT8 ProcessorId; 751 UINT8 ProcessorEid; 752 UINT32 PollingInterval; 753 } EFI_ACPI_6_0_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE; 754 755 /// 756 /// Maximum System Characteristics Table (MSCT) 757 /// 758 typedef struct { 759 EFI_ACPI_DESCRIPTION_HEADER Header; 760 UINT32 OffsetProxDomInfo; 761 UINT32 MaximumNumberOfProximityDomains; 762 UINT32 MaximumNumberOfClockDomains; 763 UINT64 MaximumPhysicalAddress; 764 } EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER; 765 766 /// 767 /// MSCT Version (as defined in ACPI 6.0 spec.) 768 /// 769 #define EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION 0x01 770 771 /// 772 /// Maximum Proximity Domain Information Structure Definition 773 /// 774 typedef struct { 775 UINT8 Revision; 776 UINT8 Length; 777 UINT32 ProximityDomainRangeLow; 778 UINT32 ProximityDomainRangeHigh; 779 UINT32 MaximumProcessorCapacity; 780 UINT64 MaximumMemoryCapacity; 781 } EFI_ACPI_6_0_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE; 782 783 /// 784 /// ACPI RAS Feature Table definition. 785 /// 786 typedef struct { 787 EFI_ACPI_DESCRIPTION_HEADER Header; 788 UINT8 PlatformCommunicationChannelIdentifier[12]; 789 } EFI_ACPI_6_0_RAS_FEATURE_TABLE; 790 791 /// 792 /// RASF Version (as defined in ACPI 6.0 spec.) 793 /// 794 #define EFI_ACPI_6_0_RAS_FEATURE_TABLE_REVISION 0x01 795 796 /// 797 /// ACPI RASF Platform Communication Channel Shared Memory Region definition. 798 /// 799 typedef struct { 800 UINT32 Signature; 801 UINT16 Command; 802 UINT16 Status; 803 UINT16 Version; 804 UINT8 RASCapabilities[16]; 805 UINT8 SetRASCapabilities[16]; 806 UINT16 NumberOfRASFParameterBlocks; 807 UINT32 SetRASCapabilitiesStatus; 808 } EFI_ACPI_6_0_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION; 809 810 /// 811 /// ACPI RASF PCC command code 812 /// 813 #define EFI_ACPI_6_0_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND 0x01 814 815 /// 816 /// ACPI RASF Platform RAS Capabilities 817 /// 818 #define EFI_ACPI_6_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED 0x01 819 #define EFI_ACPI_6_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED_AND_EXPOSED_TO_SOFTWARE 0x02 820 821 /// 822 /// ACPI RASF Parameter Block structure for PATROL_SCRUB 823 /// 824 typedef struct { 825 UINT16 Type; 826 UINT16 Version; 827 UINT16 Length; 828 UINT16 PatrolScrubCommand; 829 UINT64 RequestedAddressRange[2]; 830 UINT64 ActualAddressRange[2]; 831 UINT16 Flags; 832 UINT8 RequestedSpeed; 833 } EFI_ACPI_6_0_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE; 834 835 /// 836 /// ACPI RASF Patrol Scrub command 837 /// 838 #define EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS 0x01 839 #define EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER 0x02 840 #define EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER 0x03 841 842 /// 843 /// Memory Power State Table definition. 844 /// 845 typedef struct { 846 EFI_ACPI_DESCRIPTION_HEADER Header; 847 UINT8 PlatformCommunicationChannelIdentifier; 848 UINT8 Reserved[3]; 849 // Memory Power Node Structure 850 // Memory Power State Characteristics 851 } EFI_ACPI_6_0_MEMORY_POWER_STATUS_TABLE; 852 853 /// 854 /// MPST Version (as defined in ACPI 6.0 spec.) 855 /// 856 #define EFI_ACPI_6_0_MEMORY_POWER_STATE_TABLE_REVISION 0x01 857 858 /// 859 /// MPST Platform Communication Channel Shared Memory Region definition. 860 /// 861 typedef struct { 862 UINT32 Signature; 863 UINT16 Command; 864 UINT16 Status; 865 UINT32 MemoryPowerCommandRegister; 866 UINT32 MemoryPowerStatusRegister; 867 UINT32 PowerStateId; 868 UINT32 MemoryPowerNodeId; 869 UINT64 MemoryEnergyConsumed; 870 UINT64 ExpectedAveragePowerComsuned; 871 } EFI_ACPI_6_0_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION; 872 873 /// 874 /// ACPI MPST PCC command code 875 /// 876 #define EFI_ACPI_6_0_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND 0x03 877 878 /// 879 /// ACPI MPST Memory Power command 880 /// 881 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE 0x01 882 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE 0x02 883 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED 0x03 884 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED 0x04 885 886 /// 887 /// MPST Memory Power Node Table 888 /// 889 typedef struct { 890 UINT8 PowerStateValue; 891 UINT8 PowerStateInformationIndex; 892 } EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE; 893 894 typedef struct { 895 UINT8 Flag; 896 UINT8 Reserved; 897 UINT16 MemoryPowerNodeId; 898 UINT32 Length; 899 UINT64 AddressBase; 900 UINT64 AddressLength; 901 UINT32 NumberOfPowerStates; 902 UINT32 NumberOfPhysicalComponents; 903 //EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE MemoryPowerState[NumberOfPowerStates]; 904 //UINT16 PhysicalComponentIdentifier[NumberOfPhysicalComponents]; 905 } EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE; 906 907 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE 0x01 908 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED 0x02 909 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE 0x04 910 911 typedef struct { 912 UINT16 MemoryPowerNodeCount; 913 UINT8 Reserved[2]; 914 } EFI_ACPI_6_0_MPST_MEMORY_POWER_NODE_TABLE; 915 916 /// 917 /// MPST Memory Power State Characteristics Table 918 /// 919 typedef struct { 920 UINT8 PowerStateStructureID; 921 UINT8 Flag; 922 UINT16 Reserved; 923 UINT32 AveragePowerConsumedInMPS0; 924 UINT32 RelativePowerSavingToMPS0; 925 UINT64 ExitLatencyToMPS0; 926 } EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE; 927 928 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED 0x01 929 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY 0x02 930 #define EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT 0x04 931 932 typedef struct { 933 UINT16 MemoryPowerStateCharacteristicsCount; 934 UINT8 Reserved[2]; 935 } EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE; 936 937 /// 938 /// Memory Topology Table definition. 939 /// 940 typedef struct { 941 EFI_ACPI_DESCRIPTION_HEADER Header; 942 UINT32 Reserved; 943 } EFI_ACPI_6_0_MEMORY_TOPOLOGY_TABLE; 944 945 /// 946 /// PMTT Version (as defined in ACPI 6.0 spec.) 947 /// 948 #define EFI_ACPI_6_0_MEMORY_TOPOLOGY_TABLE_REVISION 0x01 949 950 /// 951 /// Common Memory Aggregator Device Structure. 952 /// 953 typedef struct { 954 UINT8 Type; 955 UINT8 Reserved; 956 UINT16 Length; 957 UINT16 Flags; 958 UINT16 Reserved1; 959 } EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE; 960 961 /// 962 /// Memory Aggregator Device Type 963 /// 964 #define EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_SOCKET 0x1 965 #define EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_MEMORY_CONTROLLER 0x2 966 #define EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_DIMM 0x3 967 968 /// 969 /// Socket Memory Aggregator Device Structure. 970 /// 971 typedef struct { 972 EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE Header; 973 UINT16 SocketIdentifier; 974 UINT16 Reserved; 975 //EFI_ACPI_6_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE MemoryController[]; 976 } EFI_ACPI_6_0_PMMT_SOCKET_MEMORY_AGGREGATOR_DEVICE_STRUCTURE; 977 978 /// 979 /// MemoryController Memory Aggregator Device Structure. 980 /// 981 typedef struct { 982 EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE Header; 983 UINT32 ReadLatency; 984 UINT32 WriteLatency; 985 UINT32 ReadBandwidth; 986 UINT32 WriteBandwidth; 987 UINT16 OptimalAccessUnit; 988 UINT16 OptimalAccessAlignment; 989 UINT16 Reserved; 990 UINT16 NumberOfProximityDomains; 991 //UINT32 ProximityDomain[NumberOfProximityDomains]; 992 //EFI_ACPI_6_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE PhysicalComponent[]; 993 } EFI_ACPI_6_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE; 994 995 /// 996 /// DIMM Memory Aggregator Device Structure. 997 /// 998 typedef struct { 999 EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE Header; 1000 UINT16 PhysicalComponentIdentifier; 1001 UINT16 Reserved; 1002 UINT32 SizeOfDimm; 1003 UINT32 SmbiosHandle; 1004 } EFI_ACPI_6_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE; 1005 1006 /// 1007 /// Boot Graphics Resource Table definition. 1008 /// 1009 typedef struct { 1010 EFI_ACPI_DESCRIPTION_HEADER Header; 1011 /// 1012 /// 2-bytes (16 bit) version ID. This value must be 1. 1013 /// 1014 UINT16 Version; 1015 /// 1016 /// 1-byte status field indicating current status about the table. 1017 /// Bits[7:1] = Reserved (must be zero) 1018 /// Bit [0] = Valid. A one indicates the boot image graphic is valid. 1019 /// 1020 UINT8 Status; 1021 /// 1022 /// 1-byte enumerated type field indicating format of the image. 1023 /// 0 = Bitmap 1024 /// 1 - 255 Reserved (for future use) 1025 /// 1026 UINT8 ImageType; 1027 /// 1028 /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy 1029 /// of the image bitmap. 1030 /// 1031 UINT64 ImageAddress; 1032 /// 1033 /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image. 1034 /// (X, Y) display offset of the top left corner of the boot image. 1035 /// The top left corner of the display is at offset (0, 0). 1036 /// 1037 UINT32 ImageOffsetX; 1038 /// 1039 /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image. 1040 /// (X, Y) display offset of the top left corner of the boot image. 1041 /// The top left corner of the display is at offset (0, 0). 1042 /// 1043 UINT32 ImageOffsetY; 1044 } EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE; 1045 1046 /// 1047 /// BGRT Revision 1048 /// 1049 #define EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION 1 1050 1051 /// 1052 /// BGRT Version 1053 /// 1054 #define EFI_ACPI_6_0_BGRT_VERSION 0x01 1055 1056 /// 1057 /// BGRT Status 1058 /// 1059 #define EFI_ACPI_6_0_BGRT_STATUS_NOT_DISPLAYED 0x00 1060 #define EFI_ACPI_6_0_BGRT_STATUS_DISPLAYED 0x01 1061 1062 /// 1063 /// BGRT Image Type 1064 /// 1065 #define EFI_ACPI_6_0_BGRT_IMAGE_TYPE_BMP 0x00 1066 1067 /// 1068 /// FPDT Version (as defined in ACPI 6.0 spec.) 1069 /// 1070 #define EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION 0x01 1071 1072 /// 1073 /// FPDT Performance Record Types 1074 /// 1075 #define EFI_ACPI_6_0_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER 0x0000 1076 #define EFI_ACPI_6_0_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER 0x0001 1077 1078 /// 1079 /// FPDT Performance Record Revision 1080 /// 1081 #define EFI_ACPI_6_0_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER 0x01 1082 #define EFI_ACPI_6_0_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER 0x01 1083 1084 /// 1085 /// FPDT Runtime Performance Record Types 1086 /// 1087 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME 0x0000 1088 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND 0x0001 1089 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT 0x0002 1090 1091 /// 1092 /// FPDT Runtime Performance Record Revision 1093 /// 1094 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME 0x01 1095 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND 0x01 1096 #define EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT 0x02 1097 1098 /// 1099 /// FPDT Performance Record header 1100 /// 1101 typedef struct { 1102 UINT16 Type; 1103 UINT8 Length; 1104 UINT8 Revision; 1105 } EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER; 1106 1107 /// 1108 /// FPDT Performance Table header 1109 /// 1110 typedef struct { 1111 UINT32 Signature; 1112 UINT32 Length; 1113 } EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER; 1114 1115 /// 1116 /// FPDT Firmware Basic Boot Performance Pointer Record Structure 1117 /// 1118 typedef struct { 1119 EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header; 1120 UINT32 Reserved; 1121 /// 1122 /// 64-bit processor-relative physical address of the Basic Boot Performance Table. 1123 /// 1124 UINT64 BootPerformanceTablePointer; 1125 } EFI_ACPI_6_0_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD; 1126 1127 /// 1128 /// FPDT S3 Performance Table Pointer Record Structure 1129 /// 1130 typedef struct { 1131 EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header; 1132 UINT32 Reserved; 1133 /// 1134 /// 64-bit processor-relative physical address of the S3 Performance Table. 1135 /// 1136 UINT64 S3PerformanceTablePointer; 1137 } EFI_ACPI_6_0_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD; 1138 1139 /// 1140 /// FPDT Firmware Basic Boot Performance Record Structure 1141 /// 1142 typedef struct { 1143 EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header; 1144 UINT32 Reserved; 1145 /// 1146 /// Timer value logged at the beginning of firmware image execution. 1147 /// This may not always be zero or near zero. 1148 /// 1149 UINT64 ResetEnd; 1150 /// 1151 /// Timer value logged just prior to loading the OS boot loader into memory. 1152 /// For non-UEFI compatible boots, this field must be zero. 1153 /// 1154 UINT64 OsLoaderLoadImageStart; 1155 /// 1156 /// Timer value logged just prior to launching the previously loaded OS boot loader image. 1157 /// For non-UEFI compatible boots, the timer value logged will be just prior 1158 /// to the INT 19h handler invocation. 1159 /// 1160 UINT64 OsLoaderStartImageStart; 1161 /// 1162 /// Timer value logged at the point when the OS loader calls the 1163 /// ExitBootServices function for UEFI compatible firmware. 1164 /// For non-UEFI compatible boots, this field must be zero. 1165 /// 1166 UINT64 ExitBootServicesEntry; 1167 /// 1168 /// Timer value logged at the point just prior towhen the OS loader gaining 1169 /// control back from calls the ExitBootServices function for UEFI compatible firmware. 1170 /// For non-UEFI compatible boots, this field must be zero. 1171 /// 1172 UINT64 ExitBootServicesExit; 1173 } EFI_ACPI_6_0_FPDT_FIRMWARE_BASIC_BOOT_RECORD; 1174 1175 /// 1176 /// FPDT Firmware Basic Boot Performance Table signature 1177 /// 1178 #define EFI_ACPI_6_0_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE SIGNATURE_32('F', 'B', 'P', 'T') 1179 1180 // 1181 // FPDT Firmware Basic Boot Performance Table 1182 // 1183 typedef struct { 1184 EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER Header; 1185 // 1186 // one or more Performance Records. 1187 // 1188 } EFI_ACPI_6_0_FPDT_FIRMWARE_BASIC_BOOT_TABLE; 1189 1190 /// 1191 /// FPDT "S3PT" S3 Performance Table 1192 /// 1193 #define EFI_ACPI_6_0_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE SIGNATURE_32('S', '3', 'P', 'T') 1194 1195 // 1196 // FPDT Firmware S3 Boot Performance Table 1197 // 1198 typedef struct { 1199 EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER Header; 1200 // 1201 // one or more Performance Records. 1202 // 1203 } EFI_ACPI_6_0_FPDT_FIRMWARE_S3_BOOT_TABLE; 1204 1205 /// 1206 /// FPDT Basic S3 Resume Performance Record 1207 /// 1208 typedef struct { 1209 EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header; 1210 /// 1211 /// A count of the number of S3 resume cycles since the last full boot sequence. 1212 /// 1213 UINT32 ResumeCount; 1214 /// 1215 /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the 1216 /// OS waking vector. Only the most recent resume cycle's time is retained. 1217 /// 1218 UINT64 FullResume; 1219 /// 1220 /// Average timer value of all resume cycles logged since the last full boot 1221 /// sequence, including the most recent resume. Note that the entire log of 1222 /// timer values does not need to be retained in order to calculate this average. 1223 /// 1224 UINT64 AverageResume; 1225 } EFI_ACPI_6_0_FPDT_S3_RESUME_RECORD; 1226 1227 /// 1228 /// FPDT Basic S3 Suspend Performance Record 1229 /// 1230 typedef struct { 1231 EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header; 1232 /// 1233 /// Timer value recorded at the OS write to SLP_TYP upon entry to S3. 1234 /// Only the most recent suspend cycle's timer value is retained. 1235 /// 1236 UINT64 SuspendStart; 1237 /// 1238 /// Timer value recorded at the final firmware write to SLP_TYP (or other 1239 /// mechanism) used to trigger hardware entry to S3. 1240 /// Only the most recent suspend cycle's timer value is retained. 1241 /// 1242 UINT64 SuspendEnd; 1243 } EFI_ACPI_6_0_FPDT_S3_SUSPEND_RECORD; 1244 1245 /// 1246 /// Firmware Performance Record Table definition. 1247 /// 1248 typedef struct { 1249 EFI_ACPI_DESCRIPTION_HEADER Header; 1250 } EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_RECORD_TABLE; 1251 1252 /// 1253 /// Generic Timer Description Table definition. 1254 /// 1255 typedef struct { 1256 EFI_ACPI_DESCRIPTION_HEADER Header; 1257 UINT64 CntControlBasePhysicalAddress; 1258 UINT32 Reserved; 1259 UINT32 SecurePL1TimerGSIV; 1260 UINT32 SecurePL1TimerFlags; 1261 UINT32 NonSecurePL1TimerGSIV; 1262 UINT32 NonSecurePL1TimerFlags; 1263 UINT32 VirtualTimerGSIV; 1264 UINT32 VirtualTimerFlags; 1265 UINT32 NonSecurePL2TimerGSIV; 1266 UINT32 NonSecurePL2TimerFlags; 1267 UINT64 CntReadBasePhysicalAddress; 1268 UINT32 PlatformTimerCount; 1269 UINT32 PlatformTimerOffset; 1270 } EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE; 1271 1272 /// 1273 /// GTDT Version (as defined in ACPI 6.0 spec.) 1274 /// 1275 #define EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION 0x02 1276 1277 /// 1278 /// Timer Flags. All other bits are reserved and must be 0. 1279 /// 1280 #define EFI_ACPI_6_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE BIT0 1281 #define EFI_ACPI_6_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY BIT1 1282 #define EFI_ACPI_6_0_GTDT_TIMER_FLAG_ALWAYS_ON_CAPABILITY BIT2 1283 1284 /// 1285 /// Platform Timer Type 1286 /// 1287 #define EFI_ACPI_6_0_GTDT_GT_BLOCK 0 1288 #define EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG 1 1289 1290 /// 1291 /// GT Block Structure 1292 /// 1293 typedef struct { 1294 UINT8 Type; 1295 UINT16 Length; 1296 UINT8 Reserved; 1297 UINT64 CntCtlBase; 1298 UINT32 GTBlockTimerCount; 1299 UINT32 GTBlockTimerOffset; 1300 } EFI_ACPI_6_0_GTDT_GT_BLOCK_STRUCTURE; 1301 1302 /// 1303 /// GT Block Timer Structure 1304 /// 1305 typedef struct { 1306 UINT8 GTFrameNumber; 1307 UINT8 Reserved[3]; 1308 UINT64 CntBaseX; 1309 UINT64 CntEL0BaseX; 1310 UINT32 GTxPhysicalTimerGSIV; 1311 UINT32 GTxPhysicalTimerFlags; 1312 UINT32 GTxVirtualTimerGSIV; 1313 UINT32 GTxVirtualTimerFlags; 1314 UINT32 GTxCommonFlags; 1315 } EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_STRUCTURE; 1316 1317 /// 1318 /// GT Block Physical Timers and Virtual Timers Flags. All other bits are reserved and must be 0. 1319 /// 1320 #define EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_MODE BIT0 1321 #define EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_POLARITY BIT1 1322 1323 /// 1324 /// Common Flags Flags. All other bits are reserved and must be 0. 1325 /// 1326 #define EFI_ACPI_6_0_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER BIT0 1327 #define EFI_ACPI_6_0_GTDT_GT_BLOCK_COMMON_FLAG_ALWAYS_ON_CAPABILITY BIT1 1328 1329 /// 1330 /// SBSA Generic Watchdog Structure 1331 /// 1332 typedef struct { 1333 UINT8 Type; 1334 UINT16 Length; 1335 UINT8 Reserved; 1336 UINT64 RefreshFramePhysicalAddress; 1337 UINT64 WatchdogControlFramePhysicalAddress; 1338 UINT32 WatchdogTimerGSIV; 1339 UINT32 WatchdogTimerFlags; 1340 } EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_STRUCTURE; 1341 1342 /// 1343 /// SBSA Generic Watchdog Timer Flags. All other bits are reserved and must be 0. 1344 /// 1345 #define EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_MODE BIT0 1346 #define EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_POLARITY BIT1 1347 #define EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_SECURE_TIMER BIT2 1348 1349 // 1350 // NVDIMM Firmware Interface Table definition. 1351 // 1352 typedef struct { 1353 EFI_ACPI_DESCRIPTION_HEADER Header; 1354 UINT32 Reserved; 1355 } EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE; 1356 1357 // 1358 // NFIT Version (as defined in ACPI 6.0 spec.) 1359 // 1360 #define EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE_REVISION 0x1 1361 1362 // 1363 // Definition for NFIT Table Structure Types 1364 // 1365 #define EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE_TYPE 0 1366 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_TO_SYSTEM_ADDRESS_RANGE_MAP_STRUCTURE_TYPE 1 1367 #define EFI_ACPI_6_0_NFIT_INTERLEAVE_STRUCTURE_TYPE 2 1368 #define EFI_ACPI_6_0_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE_TYPE 3 1369 #define EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE_TYPE 4 1370 #define EFI_ACPI_6_0_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE_TYPE 5 1371 #define EFI_ACPI_6_0_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE_TYPE 6 1372 1373 // 1374 // Definition for NFIT Structure Header 1375 // 1376 typedef struct { 1377 UINT16 Type; 1378 UINT16 Length; 1379 } EFI_ACPI_6_0_NFIT_STRUCTURE_HEADER; 1380 1381 // 1382 // Definition for System Physical Address Range Structure 1383 // 1384 #define EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_CONTROL_REGION_FOR_MANAGEMENT BIT0 1385 #define EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_PROXIMITY_DOMAIN_VALID BIT1 1386 #define EFI_ACPI_6_0_NFIT_GUID_VOLATILE_MEMORY_REGION { 0x7305944F, 0xFDDA, 0x44E3, 0xB1, 0x6C, 0x3F, 0x22, 0xD2, 0x52, 0xE5, 0xD0 } 1387 #define EFI_ACPI_6_0_NFIT_GUID_BYTE_ADDRESSABLE_PERSISTENT_MEMORY_REGION { 0x66F0D379, 0xB4F3, 0x4074, 0xAC, 0x43, 0x0D, 0x33, 0x18, 0xB7, 0x8C, 0xDB } 1388 #define EFI_ACPI_6_0_NFIT_GUID_NVDIMM_CONTROL_REGION { 0x92F701F6, 0x13B4, 0x405D, 0x91, 0x0B, 0x29, 0x93, 0x67, 0xE8, 0x23, 0x4C } 1389 #define EFI_ACPI_6_0_NFIT_GUID_NVDIMM_BLOCK_DATA_WINDOW_REGION { 0x91AF0530, 0x5D86, 0x470E, 0xA6, 0xB0, 0x0A, 0x2D, 0xB9, 0x40, 0x82, 0x49 } 1390 #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 } 1391 #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 } 1392 #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 } 1393 #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 } 1394 typedef struct { 1395 UINT16 Type; 1396 UINT16 Length; 1397 UINT16 SPARangeStructureIndex; 1398 UINT16 Flags; 1399 UINT32 Reserved_8; 1400 UINT32 ProximityDomain; 1401 GUID AddressRangeTypeGUID; 1402 UINT64 SystemPhysicalAddressRangeBase; 1403 UINT64 SystemPhysicalAddressRangeLength; 1404 UINT64 AddressRangeMemoryMappingAttribute; 1405 } EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE; 1406 1407 // 1408 // Definition for Memory Device to System Physical Address Range Mapping Structure 1409 // 1410 typedef struct { 1411 UINT32 DIMMNumber:4; 1412 UINT32 MemoryChannelNumber:4; 1413 UINT32 MemoryControllerID:4; 1414 UINT32 SocketID:4; 1415 UINT32 NodeControllerID:12; 1416 UINT32 Reserved_28:4; 1417 } EFI_ACPI_6_0_NFIT_DEVICE_HANDLE; 1418 1419 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_PREVIOUS_SAVE_FAIL BIT0 1420 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_LAST_RESTORE_FAIL BIT1 1421 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_PLATFORM_FLUSH_FAIL BIT2 1422 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_NOT_ARMED_PRIOR_TO_OSPM_HAND_OFF BIT3 1423 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_SMART_HEALTH_EVENTS_PRIOR_OSPM_HAND_OFF BIT4 1424 #define EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_FIRMWARE_ENABLED_TO_NOTIFY_OSPM_ON_SMART_HEALTH_EVENTS BIT5 1425 typedef struct { 1426 UINT16 Type; 1427 UINT16 Length; 1428 EFI_ACPI_6_0_NFIT_DEVICE_HANDLE NFITDeviceHandle; 1429 UINT16 MemoryDevicePhysicalID; 1430 UINT16 MemoryDeviceRegionID; 1431 UINT16 SPARangeStructureIndex ; 1432 UINT16 NVDIMMControlRegionStructureIndex; 1433 UINT64 MemoryDeviceRegionSize; 1434 UINT64 RegionOffset; 1435 UINT64 MemoryDevicePhysicalAddressRegionBase; 1436 UINT16 InterleaveStructureIndex; 1437 UINT16 InterleaveWays; 1438 UINT16 MemoryDeviceStateFlags; 1439 UINT16 Reserved_46; 1440 } EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_TO_SYSTEM_ADDRESS_RANGE_MAP_STRUCTURE; 1441 1442 // 1443 // Definition for Interleave Structure 1444 // 1445 typedef struct { 1446 UINT16 Type; 1447 UINT16 Length; 1448 UINT16 InterleaveStructureIndex; 1449 UINT16 Reserved_6; 1450 UINT32 NumberOfLines; 1451 UINT32 LineSize; 1452 //UINT32 LineOffset[NumberOfLines]; 1453 } EFI_ACPI_6_0_NFIT_INTERLEAVE_STRUCTURE; 1454 1455 // 1456 // Definition for SMBIOS Management Information Structure 1457 // 1458 typedef struct { 1459 UINT16 Type; 1460 UINT16 Length; 1461 UINT32 Reserved_4; 1462 //UINT8 Data[]; 1463 } EFI_ACPI_6_0_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE; 1464 1465 // 1466 // Definition for NVDIMM Control Region Structure 1467 // 1468 #define EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_FLAGS_BLOCK_DATA_WINDOWS_BUFFERED BIT0 1469 typedef struct { 1470 UINT16 Type; 1471 UINT16 Length; 1472 UINT16 NVDIMMControlRegionStructureIndex; 1473 UINT16 VendorID; 1474 UINT16 DeviceID; 1475 UINT16 RevisionID; 1476 UINT16 SubsystemVendorID; 1477 UINT16 SubsystemDeviceID; 1478 UINT16 SubsystemRevisionID; 1479 UINT8 Reserved_18[6]; 1480 UINT32 SerialNumber; 1481 UINT16 RegionFormatInterfaceCode; 1482 UINT16 NumberOfBlockControlWindows; 1483 UINT64 SizeOfBlockControlWindow; 1484 UINT64 CommandRegisterOffsetInBlockControlWindow; 1485 UINT64 SizeOfCommandRegisterInBlockControlWindows; 1486 UINT64 StatusRegisterOffsetInBlockControlWindow; 1487 UINT64 SizeOfStatusRegisterInBlockControlWindows; 1488 UINT16 NVDIMMControlRegionFlag; 1489 UINT8 Reserved_74[6]; 1490 } EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE; 1491 1492 // 1493 // Definition for NVDIMM Block Data Window Region Structure 1494 // 1495 typedef struct { 1496 UINT16 Type; 1497 UINT16 Length; 1498 UINT16 NVDIMMControlRegionStructureIndex; 1499 UINT16 NumberOfBlockDataWindows; 1500 UINT64 BlockDataWindowStartOffset; 1501 UINT64 SizeOfBlockDataWindow; 1502 UINT64 BlockAccessibleMemoryCapacity; 1503 UINT64 BeginningAddressOfFirstBlockInBlockAccessibleMemory; 1504 } EFI_ACPI_6_0_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE; 1505 1506 // 1507 // Definition for Flush Hint Address Structure 1508 // 1509 typedef struct { 1510 UINT16 Type; 1511 UINT16 Length; 1512 EFI_ACPI_6_0_NFIT_DEVICE_HANDLE NFITDeviceHandle; 1513 UINT16 NumberOfFlushHintAddresses; 1514 UINT8 Reserved_10[6]; 1515 //UINT64 FlushHintAddress[NumberOfFlushHintAddresses]; 1516 } EFI_ACPI_6_0_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE; 1517 1518 /// 1519 /// Boot Error Record Table (BERT) 1520 /// 1521 typedef struct { 1522 EFI_ACPI_DESCRIPTION_HEADER Header; 1523 UINT32 BootErrorRegionLength; 1524 UINT64 BootErrorRegion; 1525 } EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_HEADER; 1526 1527 /// 1528 /// BERT Version (as defined in ACPI 6.0 spec.) 1529 /// 1530 #define EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_REVISION 0x01 1531 1532 /// 1533 /// Boot Error Region Block Status Definition 1534 /// 1535 typedef struct { 1536 UINT32 UncorrectableErrorValid:1; 1537 UINT32 CorrectableErrorValid:1; 1538 UINT32 MultipleUncorrectableErrors:1; 1539 UINT32 MultipleCorrectableErrors:1; 1540 UINT32 ErrorDataEntryCount:10; 1541 UINT32 Reserved:18; 1542 } EFI_ACPI_6_0_ERROR_BLOCK_STATUS; 1543 1544 /// 1545 /// Boot Error Region Definition 1546 /// 1547 typedef struct { 1548 EFI_ACPI_6_0_ERROR_BLOCK_STATUS BlockStatus; 1549 UINT32 RawDataOffset; 1550 UINT32 RawDataLength; 1551 UINT32 DataLength; 1552 UINT32 ErrorSeverity; 1553 } EFI_ACPI_6_0_BOOT_ERROR_REGION_STRUCTURE; 1554 1555 // 1556 // Boot Error Severity types 1557 // 1558 #define EFI_ACPI_6_0_ERROR_SEVERITY_CORRECTABLE 0x00 1559 #define EFI_ACPI_6_0_ERROR_SEVERITY_FATAL 0x01 1560 #define EFI_ACPI_6_0_ERROR_SEVERITY_CORRECTED 0x02 1561 #define EFI_ACPI_6_0_ERROR_SEVERITY_NONE 0x03 1562 1563 /// 1564 /// Generic Error Data Entry Definition 1565 /// 1566 typedef struct { 1567 UINT8 SectionType[16]; 1568 UINT32 ErrorSeverity; 1569 UINT16 Revision; 1570 UINT8 ValidationBits; 1571 UINT8 Flags; 1572 UINT32 ErrorDataLength; 1573 UINT8 FruId[16]; 1574 UINT8 FruText[20]; 1575 } EFI_ACPI_6_0_GENERIC_ERROR_DATA_ENTRY_STRUCTURE; 1576 1577 /// 1578 /// Generic Error Data Entry Version (as defined in ACPI 6.0 spec.) 1579 /// 1580 #define EFI_ACPI_6_0_GENERIC_ERROR_DATA_ENTRY_REVISION 0x0201 1581 1582 /// 1583 /// HEST - Hardware Error Source Table 1584 /// 1585 typedef struct { 1586 EFI_ACPI_DESCRIPTION_HEADER Header; 1587 UINT32 ErrorSourceCount; 1588 } EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_HEADER; 1589 1590 /// 1591 /// HEST Version (as defined in ACPI 6.0 spec.) 1592 /// 1593 #define EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION 0x01 1594 1595 // 1596 // Error Source structure types. 1597 // 1598 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION 0x00 1599 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK 0x01 1600 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_NMI_ERROR 0x02 1601 #define EFI_ACPI_6_0_PCI_EXPRESS_ROOT_PORT_AER 0x06 1602 #define EFI_ACPI_6_0_PCI_EXPRESS_DEVICE_AER 0x07 1603 #define EFI_ACPI_6_0_PCI_EXPRESS_BRIDGE_AER 0x08 1604 #define EFI_ACPI_6_0_GENERIC_HARDWARE_ERROR 0x09 1605 1606 // 1607 // Error Source structure flags. 1608 // 1609 #define EFI_ACPI_6_0_ERROR_SOURCE_FLAG_FIRMWARE_FIRST (1 << 0) 1610 #define EFI_ACPI_6_0_ERROR_SOURCE_FLAG_GLOBAL (1 << 1) 1611 1612 /// 1613 /// IA-32 Architecture Machine Check Exception Structure Definition 1614 /// 1615 typedef struct { 1616 UINT16 Type; 1617 UINT16 SourceId; 1618 UINT8 Reserved0[2]; 1619 UINT8 Flags; 1620 UINT8 Enabled; 1621 UINT32 NumberOfRecordsToPreAllocate; 1622 UINT32 MaxSectionsPerRecord; 1623 UINT64 GlobalCapabilityInitData; 1624 UINT64 GlobalControlInitData; 1625 UINT8 NumberOfHardwareBanks; 1626 UINT8 Reserved1[7]; 1627 } EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE; 1628 1629 /// 1630 /// IA-32 Architecture Machine Check Bank Structure Definition 1631 /// 1632 typedef struct { 1633 UINT8 BankNumber; 1634 UINT8 ClearStatusOnInitialization; 1635 UINT8 StatusDataFormat; 1636 UINT8 Reserved0; 1637 UINT32 ControlRegisterMsrAddress; 1638 UINT64 ControlInitData; 1639 UINT32 StatusRegisterMsrAddress; 1640 UINT32 AddressRegisterMsrAddress; 1641 UINT32 MiscRegisterMsrAddress; 1642 } EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE; 1643 1644 /// 1645 /// IA-32 Architecture Machine Check Bank Structure MCA data format 1646 /// 1647 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32 0x00 1648 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64 0x01 1649 #define EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64 0x02 1650 1651 // 1652 // Hardware Error Notification types. All other values are reserved 1653 // 1654 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_POLLED 0x00 1655 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT 0x01 1656 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT 0x02 1657 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_SCI 0x03 1658 #define EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_NMI 0x04 1659 1660 /// 1661 /// Hardware Error Notification Configuration Write Enable Structure Definition 1662 /// 1663 typedef struct { 1664 UINT16 Type:1; 1665 UINT16 PollInterval:1; 1666 UINT16 SwitchToPollingThresholdValue:1; 1667 UINT16 SwitchToPollingThresholdWindow:1; 1668 UINT16 ErrorThresholdValue:1; 1669 UINT16 ErrorThresholdWindow:1; 1670 UINT16 Reserved:10; 1671 } EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE; 1672 1673 /// 1674 /// Hardware Error Notification Structure Definition 1675 /// 1676 typedef struct { 1677 UINT8 Type; 1678 UINT8 Length; 1679 EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE ConfigurationWriteEnable; 1680 UINT32 PollInterval; 1681 UINT32 Vector; 1682 UINT32 SwitchToPollingThresholdValue; 1683 UINT32 SwitchToPollingThresholdWindow; 1684 UINT32 ErrorThresholdValue; 1685 UINT32 ErrorThresholdWindow; 1686 } EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE; 1687 1688 /// 1689 /// IA-32 Architecture Corrected Machine Check Structure Definition 1690 /// 1691 typedef struct { 1692 UINT16 Type; 1693 UINT16 SourceId; 1694 UINT8 Reserved0[2]; 1695 UINT8 Flags; 1696 UINT8 Enabled; 1697 UINT32 NumberOfRecordsToPreAllocate; 1698 UINT32 MaxSectionsPerRecord; 1699 EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE NotificationStructure; 1700 UINT8 NumberOfHardwareBanks; 1701 UINT8 Reserved1[3]; 1702 } EFI_ACPI_6_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE; 1703 1704 /// 1705 /// IA-32 Architecture NMI Error Structure Definition 1706 /// 1707 typedef struct { 1708 UINT16 Type; 1709 UINT16 SourceId; 1710 UINT8 Reserved0[2]; 1711 UINT32 NumberOfRecordsToPreAllocate; 1712 UINT32 MaxSectionsPerRecord; 1713 UINT32 MaxRawDataLength; 1714 } EFI_ACPI_6_0_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE; 1715 1716 /// 1717 /// PCI Express Root Port AER Structure Definition 1718 /// 1719 typedef struct { 1720 UINT16 Type; 1721 UINT16 SourceId; 1722 UINT8 Reserved0[2]; 1723 UINT8 Flags; 1724 UINT8 Enabled; 1725 UINT32 NumberOfRecordsToPreAllocate; 1726 UINT32 MaxSectionsPerRecord; 1727 UINT32 Bus; 1728 UINT16 Device; 1729 UINT16 Function; 1730 UINT16 DeviceControl; 1731 UINT8 Reserved1[2]; 1732 UINT32 UncorrectableErrorMask; 1733 UINT32 UncorrectableErrorSeverity; 1734 UINT32 CorrectableErrorMask; 1735 UINT32 AdvancedErrorCapabilitiesAndControl; 1736 UINT32 RootErrorCommand; 1737 } EFI_ACPI_6_0_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE; 1738 1739 /// 1740 /// PCI Express Device AER Structure Definition 1741 /// 1742 typedef struct { 1743 UINT16 Type; 1744 UINT16 SourceId; 1745 UINT8 Reserved0[2]; 1746 UINT8 Flags; 1747 UINT8 Enabled; 1748 UINT32 NumberOfRecordsToPreAllocate; 1749 UINT32 MaxSectionsPerRecord; 1750 UINT32 Bus; 1751 UINT16 Device; 1752 UINT16 Function; 1753 UINT16 DeviceControl; 1754 UINT8 Reserved1[2]; 1755 UINT32 UncorrectableErrorMask; 1756 UINT32 UncorrectableErrorSeverity; 1757 UINT32 CorrectableErrorMask; 1758 UINT32 AdvancedErrorCapabilitiesAndControl; 1759 } EFI_ACPI_6_0_PCI_EXPRESS_DEVICE_AER_STRUCTURE; 1760 1761 /// 1762 /// PCI Express Bridge AER Structure Definition 1763 /// 1764 typedef struct { 1765 UINT16 Type; 1766 UINT16 SourceId; 1767 UINT8 Reserved0[2]; 1768 UINT8 Flags; 1769 UINT8 Enabled; 1770 UINT32 NumberOfRecordsToPreAllocate; 1771 UINT32 MaxSectionsPerRecord; 1772 UINT32 Bus; 1773 UINT16 Device; 1774 UINT16 Function; 1775 UINT16 DeviceControl; 1776 UINT8 Reserved1[2]; 1777 UINT32 UncorrectableErrorMask; 1778 UINT32 UncorrectableErrorSeverity; 1779 UINT32 CorrectableErrorMask; 1780 UINT32 AdvancedErrorCapabilitiesAndControl; 1781 UINT32 SecondaryUncorrectableErrorMask; 1782 UINT32 SecondaryUncorrectableErrorSeverity; 1783 UINT32 SecondaryAdvancedErrorCapabilitiesAndControl; 1784 } EFI_ACPI_6_0_PCI_EXPRESS_BRIDGE_AER_STRUCTURE; 1785 1786 /// 1787 /// Generic Hardware Error Source Structure Definition 1788 /// 1789 typedef struct { 1790 UINT16 Type; 1791 UINT16 SourceId; 1792 UINT16 RelatedSourceId; 1793 UINT8 Flags; 1794 UINT8 Enabled; 1795 UINT32 NumberOfRecordsToPreAllocate; 1796 UINT32 MaxSectionsPerRecord; 1797 UINT32 MaxRawDataLength; 1798 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE ErrorStatusAddress; 1799 EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE NotificationStructure; 1800 UINT32 ErrorStatusBlockLength; 1801 } EFI_ACPI_6_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE; 1802 1803 /// 1804 /// Generic Error Status Definition 1805 /// 1806 typedef struct { 1807 EFI_ACPI_6_0_ERROR_BLOCK_STATUS BlockStatus; 1808 UINT32 RawDataOffset; 1809 UINT32 RawDataLength; 1810 UINT32 DataLength; 1811 UINT32 ErrorSeverity; 1812 } EFI_ACPI_6_0_GENERIC_ERROR_STATUS_STRUCTURE; 1813 1814 /// 1815 /// ERST - Error Record Serialization Table 1816 /// 1817 typedef struct { 1818 EFI_ACPI_DESCRIPTION_HEADER Header; 1819 UINT32 SerializationHeaderSize; 1820 UINT8 Reserved0[4]; 1821 UINT32 InstructionEntryCount; 1822 } EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_HEADER; 1823 1824 /// 1825 /// ERST Version (as defined in ACPI 6.0 spec.) 1826 /// 1827 #define EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION 0x01 1828 1829 /// 1830 /// ERST Serialization Actions 1831 /// 1832 #define EFI_ACPI_6_0_ERST_BEGIN_WRITE_OPERATION 0x00 1833 #define EFI_ACPI_6_0_ERST_BEGIN_READ_OPERATION 0x01 1834 #define EFI_ACPI_6_0_ERST_BEGIN_CLEAR_OPERATION 0x02 1835 #define EFI_ACPI_6_0_ERST_END_OPERATION 0x03 1836 #define EFI_ACPI_6_0_ERST_SET_RECORD_OFFSET 0x04 1837 #define EFI_ACPI_6_0_ERST_EXECUTE_OPERATION 0x05 1838 #define EFI_ACPI_6_0_ERST_CHECK_BUSY_STATUS 0x06 1839 #define EFI_ACPI_6_0_ERST_GET_COMMAND_STATUS 0x07 1840 #define EFI_ACPI_6_0_ERST_GET_RECORD_IDENTIFIER 0x08 1841 #define EFI_ACPI_6_0_ERST_SET_RECORD_IDENTIFIER 0x09 1842 #define EFI_ACPI_6_0_ERST_GET_RECORD_COUNT 0x0A 1843 #define EFI_ACPI_6_0_ERST_BEGIN_DUMMY_WRITE_OPERATION 0x0B 1844 #define EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE 0x0D 1845 #define EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH 0x0E 1846 #define EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES 0x0F 1847 1848 /// 1849 /// ERST Action Command Status 1850 /// 1851 #define EFI_ACPI_6_0_ERST_STATUS_SUCCESS 0x00 1852 #define EFI_ACPI_6_0_ERST_STATUS_NOT_ENOUGH_SPACE 0x01 1853 #define EFI_ACPI_6_0_ERST_STATUS_HARDWARE_NOT_AVAILABLE 0x02 1854 #define EFI_ACPI_6_0_ERST_STATUS_FAILED 0x03 1855 #define EFI_ACPI_6_0_ERST_STATUS_RECORD_STORE_EMPTY 0x04 1856 #define EFI_ACPI_6_0_ERST_STATUS_RECORD_NOT_FOUND 0x05 1857 1858 /// 1859 /// ERST Serialization Instructions 1860 /// 1861 #define EFI_ACPI_6_0_ERST_READ_REGISTER 0x00 1862 #define EFI_ACPI_6_0_ERST_READ_REGISTER_VALUE 0x01 1863 #define EFI_ACPI_6_0_ERST_WRITE_REGISTER 0x02 1864 #define EFI_ACPI_6_0_ERST_WRITE_REGISTER_VALUE 0x03 1865 #define EFI_ACPI_6_0_ERST_NOOP 0x04 1866 #define EFI_ACPI_6_0_ERST_LOAD_VAR1 0x05 1867 #define EFI_ACPI_6_0_ERST_LOAD_VAR2 0x06 1868 #define EFI_ACPI_6_0_ERST_STORE_VAR1 0x07 1869 #define EFI_ACPI_6_0_ERST_ADD 0x08 1870 #define EFI_ACPI_6_0_ERST_SUBTRACT 0x09 1871 #define EFI_ACPI_6_0_ERST_ADD_VALUE 0x0A 1872 #define EFI_ACPI_6_0_ERST_SUBTRACT_VALUE 0x0B 1873 #define EFI_ACPI_6_0_ERST_STALL 0x0C 1874 #define EFI_ACPI_6_0_ERST_STALL_WHILE_TRUE 0x0D 1875 #define EFI_ACPI_6_0_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE 0x0E 1876 #define EFI_ACPI_6_0_ERST_GOTO 0x0F 1877 #define EFI_ACPI_6_0_ERST_SET_SRC_ADDRESS_BASE 0x10 1878 #define EFI_ACPI_6_0_ERST_SET_DST_ADDRESS_BASE 0x11 1879 #define EFI_ACPI_6_0_ERST_MOVE_DATA 0x12 1880 1881 /// 1882 /// ERST Instruction Flags 1883 /// 1884 #define EFI_ACPI_6_0_ERST_PRESERVE_REGISTER 0x01 1885 1886 /// 1887 /// ERST Serialization Instruction Entry 1888 /// 1889 typedef struct { 1890 UINT8 SerializationAction; 1891 UINT8 Instruction; 1892 UINT8 Flags; 1893 UINT8 Reserved0; 1894 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE RegisterRegion; 1895 UINT64 Value; 1896 UINT64 Mask; 1897 } EFI_ACPI_6_0_ERST_SERIALIZATION_INSTRUCTION_ENTRY; 1898 1899 /// 1900 /// EINJ - Error Injection Table 1901 /// 1902 typedef struct { 1903 EFI_ACPI_DESCRIPTION_HEADER Header; 1904 UINT32 InjectionHeaderSize; 1905 UINT8 InjectionFlags; 1906 UINT8 Reserved0[3]; 1907 UINT32 InjectionEntryCount; 1908 } EFI_ACPI_6_0_ERROR_INJECTION_TABLE_HEADER; 1909 1910 /// 1911 /// EINJ Version (as defined in ACPI 6.0 spec.) 1912 /// 1913 #define EFI_ACPI_6_0_ERROR_INJECTION_TABLE_REVISION 0x01 1914 1915 /// 1916 /// EINJ Error Injection Actions 1917 /// 1918 #define EFI_ACPI_6_0_EINJ_BEGIN_INJECTION_OPERATION 0x00 1919 #define EFI_ACPI_6_0_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE 0x01 1920 #define EFI_ACPI_6_0_EINJ_SET_ERROR_TYPE 0x02 1921 #define EFI_ACPI_6_0_EINJ_GET_ERROR_TYPE 0x03 1922 #define EFI_ACPI_6_0_EINJ_END_OPERATION 0x04 1923 #define EFI_ACPI_6_0_EINJ_EXECUTE_OPERATION 0x05 1924 #define EFI_ACPI_6_0_EINJ_CHECK_BUSY_STATUS 0x06 1925 #define EFI_ACPI_6_0_EINJ_GET_COMMAND_STATUS 0x07 1926 #define EFI_ACPI_6_0_EINJ_TRIGGER_ERROR 0xFF 1927 1928 /// 1929 /// EINJ Action Command Status 1930 /// 1931 #define EFI_ACPI_6_0_EINJ_STATUS_SUCCESS 0x00 1932 #define EFI_ACPI_6_0_EINJ_STATUS_UNKNOWN_FAILURE 0x01 1933 #define EFI_ACPI_6_0_EINJ_STATUS_INVALID_ACCESS 0x02 1934 1935 /// 1936 /// EINJ Error Type Definition 1937 /// 1938 #define EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_CORRECTABLE (1 << 0) 1939 #define EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL (1 << 1) 1940 #define EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL (1 << 2) 1941 #define EFI_ACPI_6_0_EINJ_ERROR_MEMORY_CORRECTABLE (1 << 3) 1942 #define EFI_ACPI_6_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL (1 << 4) 1943 #define EFI_ACPI_6_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL (1 << 5) 1944 #define EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE (1 << 6) 1945 #define EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL (1 << 7) 1946 #define EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL (1 << 8) 1947 #define EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_CORRECTABLE (1 << 9) 1948 #define EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL (1 << 10) 1949 #define EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL (1 << 11) 1950 1951 /// 1952 /// EINJ Injection Instructions 1953 /// 1954 #define EFI_ACPI_6_0_EINJ_READ_REGISTER 0x00 1955 #define EFI_ACPI_6_0_EINJ_READ_REGISTER_VALUE 0x01 1956 #define EFI_ACPI_6_0_EINJ_WRITE_REGISTER 0x02 1957 #define EFI_ACPI_6_0_EINJ_WRITE_REGISTER_VALUE 0x03 1958 #define EFI_ACPI_6_0_EINJ_NOOP 0x04 1959 1960 /// 1961 /// EINJ Instruction Flags 1962 /// 1963 #define EFI_ACPI_6_0_EINJ_PRESERVE_REGISTER 0x01 1964 1965 /// 1966 /// EINJ Injection Instruction Entry 1967 /// 1968 typedef struct { 1969 UINT8 InjectionAction; 1970 UINT8 Instruction; 1971 UINT8 Flags; 1972 UINT8 Reserved0; 1973 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE RegisterRegion; 1974 UINT64 Value; 1975 UINT64 Mask; 1976 } EFI_ACPI_6_0_EINJ_INJECTION_INSTRUCTION_ENTRY; 1977 1978 /// 1979 /// EINJ Trigger Action Table 1980 /// 1981 typedef struct { 1982 UINT32 HeaderSize; 1983 UINT32 Revision; 1984 UINT32 TableSize; 1985 UINT32 EntryCount; 1986 } EFI_ACPI_6_0_EINJ_TRIGGER_ACTION_TABLE; 1987 1988 /// 1989 /// Platform Communications Channel Table (PCCT) 1990 /// 1991 typedef struct { 1992 EFI_ACPI_DESCRIPTION_HEADER Header; 1993 UINT32 Flags; 1994 UINT64 Reserved; 1995 } EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER; 1996 1997 /// 1998 /// PCCT Version (as defined in ACPI 6.0 spec.) 1999 /// 2000 #define EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION 0x01 2001 2002 /// 2003 /// PCCT Global Flags 2004 /// 2005 #define EFI_ACPI_6_0_PCCT_FLAGS_SCI_DOORBELL BIT0 2006 2007 // 2008 // PCCT Subspace type 2009 // 2010 #define EFI_ACPI_6_0_PCCT_SUBSPACE_TYPE_GENERIC 0x00 2011 2012 /// 2013 /// PCC Subspace Structure Header 2014 /// 2015 typedef struct { 2016 UINT8 Type; 2017 UINT8 Length; 2018 } EFI_ACPI_6_0_PCCT_SUBSPACE_HEADER; 2019 2020 /// 2021 /// Generic Communications Subspace Structure 2022 /// 2023 typedef struct { 2024 UINT8 Type; 2025 UINT8 Length; 2026 UINT8 Reserved[6]; 2027 UINT64 BaseAddress; 2028 UINT64 AddressLength; 2029 EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE DoorbellRegister; 2030 UINT64 DoorbellPreserve; 2031 UINT64 DoorbellWrite; 2032 UINT32 NominalLatency; 2033 UINT32 MaximumPeriodicAccessRate; 2034 UINT16 MinimumRequestTurnaroundTime; 2035 } EFI_ACPI_6_0_PCCT_SUBSPACE_GENERIC; 2036 2037 /// 2038 /// Generic Communications Channel Shared Memory Region 2039 /// 2040 2041 typedef struct { 2042 UINT8 Command; 2043 UINT8 Reserved:7; 2044 UINT8 GenerateSci:1; 2045 } EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND; 2046 2047 typedef struct { 2048 UINT8 CommandComplete:1; 2049 UINT8 SciDoorbell:1; 2050 UINT8 Error:1; 2051 UINT8 PlatformNotification:1; 2052 UINT8 Reserved:4; 2053 UINT8 Reserved1; 2054 } EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS; 2055 2056 typedef struct { 2057 UINT32 Signature; 2058 EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND Command; 2059 EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS Status; 2060 } EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER; 2061 2062 // 2063 // Known table signatures 2064 // 2065 2066 /// 2067 /// "RSD PTR " Root System Description Pointer 2068 /// 2069 #define EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ') 2070 2071 /// 2072 /// "APIC" Multiple APIC Description Table 2073 /// 2074 #define EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('A', 'P', 'I', 'C') 2075 2076 /// 2077 /// "BERT" Boot Error Record Table 2078 /// 2079 #define EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE SIGNATURE_32('B', 'E', 'R', 'T') 2080 2081 /// 2082 /// "BGRT" Boot Graphics Resource Table 2083 /// 2084 #define EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE SIGNATURE_32('B', 'G', 'R', 'T') 2085 2086 /// 2087 /// "CPEP" Corrected Platform Error Polling Table 2088 /// 2089 #define EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE SIGNATURE_32('C', 'P', 'E', 'P') 2090 2091 /// 2092 /// "DSDT" Differentiated System Description Table 2093 /// 2094 #define EFI_ACPI_6_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('D', 'S', 'D', 'T') 2095 2096 /// 2097 /// "ECDT" Embedded Controller Boot Resources Table 2098 /// 2099 #define EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE SIGNATURE_32('E', 'C', 'D', 'T') 2100 2101 /// 2102 /// "EINJ" Error Injection Table 2103 /// 2104 #define EFI_ACPI_6_0_ERROR_INJECTION_TABLE_SIGNATURE SIGNATURE_32('E', 'I', 'N', 'J') 2105 2106 /// 2107 /// "ERST" Error Record Serialization Table 2108 /// 2109 #define EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE SIGNATURE_32('E', 'R', 'S', 'T') 2110 2111 /// 2112 /// "FACP" Fixed ACPI Description Table 2113 /// 2114 #define EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('F', 'A', 'C', 'P') 2115 2116 /// 2117 /// "FACS" Firmware ACPI Control Structure 2118 /// 2119 #define EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE SIGNATURE_32('F', 'A', 'C', 'S') 2120 2121 /// 2122 /// "FPDT" Firmware Performance Data Table 2123 /// 2124 #define EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE SIGNATURE_32('F', 'P', 'D', 'T') 2125 2126 /// 2127 /// "GTDT" Generic Timer Description Table 2128 /// 2129 #define EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('G', 'T', 'D', 'T') 2130 2131 /// 2132 /// "HEST" Hardware Error Source Table 2133 /// 2134 #define EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE SIGNATURE_32('H', 'E', 'S', 'T') 2135 2136 /// 2137 /// "MPST" Memory Power State Table 2138 /// 2139 #define EFI_ACPI_6_0_MEMORY_POWER_STATE_TABLE_SIGNATURE SIGNATURE_32('M', 'P', 'S', 'T') 2140 2141 /// 2142 /// "MSCT" Maximum System Characteristics Table 2143 /// 2144 #define EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE SIGNATURE_32('M', 'S', 'C', 'T') 2145 2146 /// 2147 /// "NFIT" NVDIMM Firmware Interface Table 2148 /// 2149 #define EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE_STRUCTURE_SIGNATURE SIGNATURE_32('N', 'F', 'I', 'T') 2150 2151 /// 2152 /// "PMTT" Platform Memory Topology Table 2153 /// 2154 #define EFI_ACPI_6_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE SIGNATURE_32('P', 'M', 'T', 'T') 2155 2156 /// 2157 /// "PSDT" Persistent System Description Table 2158 /// 2159 #define EFI_ACPI_6_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('P', 'S', 'D', 'T') 2160 2161 /// 2162 /// "RASF" ACPI RAS Feature Table 2163 /// 2164 #define EFI_ACPI_6_0_ACPI_RAS_FEATURE_TABLE_SIGNATURE SIGNATURE_32('R', 'A', 'S', 'F') 2165 2166 /// 2167 /// "RSDT" Root System Description Table 2168 /// 2169 #define EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('R', 'S', 'D', 'T') 2170 2171 /// 2172 /// "SBST" Smart Battery Specification Table 2173 /// 2174 #define EFI_ACPI_6_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE SIGNATURE_32('S', 'B', 'S', 'T') 2175 2176 /// 2177 /// "SLIT" System Locality Information Table 2178 /// 2179 #define EFI_ACPI_6_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE SIGNATURE_32('S', 'L', 'I', 'T') 2180 2181 /// 2182 /// "SRAT" System Resource Affinity Table 2183 /// 2184 #define EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE SIGNATURE_32('S', 'R', 'A', 'T') 2185 2186 /// 2187 /// "SSDT" Secondary System Description Table 2188 /// 2189 #define EFI_ACPI_6_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('S', 'S', 'D', 'T') 2190 2191 /// 2192 /// "XSDT" Extended System Description Table 2193 /// 2194 #define EFI_ACPI_6_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('X', 'S', 'D', 'T') 2195 2196 /// 2197 /// "BOOT" MS Simple Boot Spec 2198 /// 2199 #define EFI_ACPI_6_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE SIGNATURE_32('B', 'O', 'O', 'T') 2200 2201 /// 2202 /// "CSRT" MS Core System Resource Table 2203 /// 2204 #define EFI_ACPI_6_0_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE SIGNATURE_32('C', 'S', 'R', 'T') 2205 2206 /// 2207 /// "DBG2" MS Debug Port 2 Spec 2208 /// 2209 #define EFI_ACPI_6_0_DEBUG_PORT_2_TABLE_SIGNATURE SIGNATURE_32('D', 'B', 'G', '2') 2210 2211 /// 2212 /// "DBGP" MS Debug Port Spec 2213 /// 2214 #define EFI_ACPI_6_0_DEBUG_PORT_TABLE_SIGNATURE SIGNATURE_32('D', 'B', 'G', 'P') 2215 2216 /// 2217 /// "DMAR" DMA Remapping Table 2218 /// 2219 #define EFI_ACPI_6_0_DMA_REMAPPING_TABLE_SIGNATURE SIGNATURE_32('D', 'M', 'A', 'R') 2220 2221 /// 2222 /// "DRTM" Dynamic Root of Trust for Measurement Table 2223 /// 2224 #define EFI_ACPI_6_0_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE SIGNATURE_32('D', 'R', 'T', 'M') 2225 2226 /// 2227 /// "ETDT" Event Timer Description Table 2228 /// 2229 #define EFI_ACPI_6_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('E', 'T', 'D', 'T') 2230 2231 /// 2232 /// "HPET" IA-PC High Precision Event Timer Table 2233 /// 2234 #define EFI_ACPI_6_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE SIGNATURE_32('H', 'P', 'E', 'T') 2235 2236 /// 2237 /// "iBFT" iSCSI Boot Firmware Table 2238 /// 2239 #define EFI_ACPI_6_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE SIGNATURE_32('i', 'B', 'F', 'T') 2240 2241 /// 2242 /// "IORT" Interrupt Source Override 2243 /// 2244 #define EFI_ACPI_6_0_INTERRUPT_SOURCE_OVERRIDE_SIGNATURE SIGNATURE_32('I', 'O', 'R', 'T') 2245 2246 /// 2247 /// "IVRS" I/O Virtualization Reporting Structure 2248 /// 2249 #define EFI_ACPI_6_0_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE SIGNATURE_32('I', 'V', 'R', 'S') 2250 2251 /// 2252 /// "LPIT" Low Power Idle Table 2253 /// 2254 #define EFI_ACPI_6_0_LOW_POWER_IDLE_TABLE_STRUCTURE_SIGNATURE SIGNATURE_32('L', 'P', 'I', 'T') 2255 2256 /// 2257 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table 2258 /// 2259 #define EFI_ACPI_6_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('M', 'C', 'F', 'G') 2260 2261 /// 2262 /// "MCHI" Management Controller Host Interface Table 2263 /// 2264 #define EFI_ACPI_6_0_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE SIGNATURE_32('M', 'C', 'H', 'I') 2265 2266 /// 2267 /// "MSDM" MS Data Management Table 2268 /// 2269 #define EFI_ACPI_6_0_DATA_MANAGEMENT_TABLE_SIGNATURE SIGNATURE_32('M', 'S', 'D', 'M') 2270 2271 /// 2272 /// "SLIC" MS Software Licensing Table Specification 2273 /// 2274 #define EFI_ACPI_6_0_SOFTWARE_LICENSING_TABLE_SIGNATURE SIGNATURE_32('S', 'L', 'I', 'C') 2275 2276 /// 2277 /// "SPCR" Serial Port Concole Redirection Table 2278 /// 2279 #define EFI_ACPI_6_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE SIGNATURE_32('S', 'P', 'C', 'R') 2280 2281 /// 2282 /// "SPMI" Server Platform Management Interface Table 2283 /// 2284 #define EFI_ACPI_6_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE SIGNATURE_32('S', 'P', 'M', 'I') 2285 2286 /// 2287 /// "STAO" _STA Override Table 2288 /// 2289 #define EFI_ACPI_6_0_STA_OVERRIDE_TABLE_SIGNATURE SIGNATURE_32('S', 'T', 'A', 'O') 2290 2291 /// 2292 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table 2293 /// 2294 #define EFI_ACPI_6_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE SIGNATURE_32('T', 'C', 'P', 'A') 2295 2296 /// 2297 /// "TPM2" Trusted Computing Platform 1 Table 2298 /// 2299 #define EFI_ACPI_6_0_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE SIGNATURE_32('T', 'P', 'M', '2') 2300 2301 /// 2302 /// "UEFI" UEFI ACPI Data Table 2303 /// 2304 #define EFI_ACPI_6_0_UEFI_ACPI_DATA_TABLE_SIGNATURE SIGNATURE_32('U', 'E', 'F', 'I') 2305 2306 /// 2307 /// "WAET" Windows ACPI Emulated Devices Table 2308 /// 2309 #define EFI_ACPI_6_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE SIGNATURE_32('W', 'A', 'E', 'T') 2310 2311 /// 2312 /// "WDAT" Watchdog Action Table 2313 /// 2314 #define EFI_ACPI_6_0_WATCHDOG_ACTION_TABLE_SIGNATURE SIGNATURE_32('W', 'D', 'A', 'T') 2315 2316 /// 2317 /// "WDRT" Watchdog Resource Table 2318 /// 2319 #define EFI_ACPI_6_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE SIGNATURE_32('W', 'D', 'R', 'T') 2320 2321 /// 2322 /// "WPBT" MS Platform Binary Table 2323 /// 2324 #define EFI_ACPI_6_0_PLATFORM_BINARY_TABLE_SIGNATURE SIGNATURE_32('W', 'P', 'B', 'T') 2325 2326 /// 2327 /// "XENV" Xen Project Table 2328 /// 2329 #define EFI_ACPI_6_0_XEN_PROJECT_TABLE_SIGNATURE SIGNATURE_32('X', 'E', 'N', 'V') 2330 2331 #pragma pack() 2332 2333 #endif 2334