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