1 /****************************************************************************** 2 * 3 * Name: actbl1.h - Additional ACPI table definitions 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2018, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44 #ifndef __ACTBL1_H__ 45 #define __ACTBL1_H__ 46 47 48 /******************************************************************************* 49 * 50 * Additional ACPI Tables 51 * 52 * These tables are not consumed directly by the ACPICA subsystem, but are 53 * included here to support device drivers and the AML disassembler. 54 * 55 ******************************************************************************/ 56 57 58 /* 59 * Values for description table header signatures for tables defined in this 60 * file. Useful because they make it more difficult to inadvertently type in 61 * the wrong signature. 62 */ 63 #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ 64 #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 65 #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 66 #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ 67 #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 68 #define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ 69 #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ 70 #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ 71 #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ 72 #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 73 #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 74 #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 75 #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 76 #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 77 #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 78 #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 79 #define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ 80 #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ 81 #define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ 82 83 #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 84 #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 85 86 87 /* Reserved table signatures */ 88 89 #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 90 #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 91 92 /* 93 * These tables have been seen in the field, but no definition has been found 94 */ 95 #ifdef ACPI_UNDEFINED_TABLES 96 #define ACPI_SIG_ATKG "ATKG" 97 #define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ 98 #define ACPI_SIG_IEIT "IEIT" 99 #endif 100 101 /* 102 * All tables must be byte-packed to match the ACPI specification, since 103 * the tables are provided by the system BIOS. 104 */ 105 #pragma pack(1) 106 107 /* 108 * Note: C bitfields are not used for this reason: 109 * 110 * "Bitfields are great and easy to read, but unfortunately the C language 111 * does not specify the layout of bitfields in memory, which means they are 112 * essentially useless for dealing with packed data in on-disk formats or 113 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 114 * this decision was a design error in C. Ritchie could have picked an order 115 * and stuck with it." Norman Ramsey. 116 * See http://stackoverflow.com/a/1053662/41661 117 */ 118 119 120 /******************************************************************************* 121 * 122 * Common subtable headers 123 * 124 ******************************************************************************/ 125 126 /* Generic subtable header (used in MADT, SRAT, etc.) */ 127 128 typedef struct acpi_subtable_header 129 { 130 UINT8 Type; 131 UINT8 Length; 132 133 } ACPI_SUBTABLE_HEADER; 134 135 136 /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 137 138 typedef struct acpi_whea_header 139 { 140 UINT8 Action; 141 UINT8 Instruction; 142 UINT8 Flags; 143 UINT8 Reserved; 144 ACPI_GENERIC_ADDRESS RegisterRegion; 145 UINT64 Value; /* Value used with Read/Write register */ 146 UINT64 Mask; /* Bitmask required for this register instruction */ 147 148 } ACPI_WHEA_HEADER; 149 150 151 /******************************************************************************* 152 * 153 * ASF - Alert Standard Format table (Signature "ASF!") 154 * Revision 0x10 155 * 156 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 157 * 158 ******************************************************************************/ 159 160 typedef struct acpi_table_asf 161 { 162 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 163 164 } ACPI_TABLE_ASF; 165 166 167 /* ASF subtable header */ 168 169 typedef struct acpi_asf_header 170 { 171 UINT8 Type; 172 UINT8 Reserved; 173 UINT16 Length; 174 175 } ACPI_ASF_HEADER; 176 177 178 /* Values for Type field above */ 179 180 enum AcpiAsfType 181 { 182 ACPI_ASF_TYPE_INFO = 0, 183 ACPI_ASF_TYPE_ALERT = 1, 184 ACPI_ASF_TYPE_CONTROL = 2, 185 ACPI_ASF_TYPE_BOOT = 3, 186 ACPI_ASF_TYPE_ADDRESS = 4, 187 ACPI_ASF_TYPE_RESERVED = 5 188 }; 189 190 /* 191 * ASF subtables 192 */ 193 194 /* 0: ASF Information */ 195 196 typedef struct acpi_asf_info 197 { 198 ACPI_ASF_HEADER Header; 199 UINT8 MinResetValue; 200 UINT8 MinPollInterval; 201 UINT16 SystemId; 202 UINT32 MfgId; 203 UINT8 Flags; 204 UINT8 Reserved2[3]; 205 206 } ACPI_ASF_INFO; 207 208 /* Masks for Flags field above */ 209 210 #define ACPI_ASF_SMBUS_PROTOCOLS (1) 211 212 213 /* 1: ASF Alerts */ 214 215 typedef struct acpi_asf_alert 216 { 217 ACPI_ASF_HEADER Header; 218 UINT8 AssertMask; 219 UINT8 DeassertMask; 220 UINT8 Alerts; 221 UINT8 DataLength; 222 223 } ACPI_ASF_ALERT; 224 225 typedef struct acpi_asf_alert_data 226 { 227 UINT8 Address; 228 UINT8 Command; 229 UINT8 Mask; 230 UINT8 Value; 231 UINT8 SensorType; 232 UINT8 Type; 233 UINT8 Offset; 234 UINT8 SourceType; 235 UINT8 Severity; 236 UINT8 SensorNumber; 237 UINT8 Entity; 238 UINT8 Instance; 239 240 } ACPI_ASF_ALERT_DATA; 241 242 243 /* 2: ASF Remote Control */ 244 245 typedef struct acpi_asf_remote 246 { 247 ACPI_ASF_HEADER Header; 248 UINT8 Controls; 249 UINT8 DataLength; 250 UINT16 Reserved2; 251 252 } ACPI_ASF_REMOTE; 253 254 typedef struct acpi_asf_control_data 255 { 256 UINT8 Function; 257 UINT8 Address; 258 UINT8 Command; 259 UINT8 Value; 260 261 } ACPI_ASF_CONTROL_DATA; 262 263 264 /* 3: ASF RMCP Boot Options */ 265 266 typedef struct acpi_asf_rmcp 267 { 268 ACPI_ASF_HEADER Header; 269 UINT8 Capabilities[7]; 270 UINT8 CompletionCode; 271 UINT32 EnterpriseId; 272 UINT8 Command; 273 UINT16 Parameter; 274 UINT16 BootOptions; 275 UINT16 OemParameters; 276 277 } ACPI_ASF_RMCP; 278 279 280 /* 4: ASF Address */ 281 282 typedef struct acpi_asf_address 283 { 284 ACPI_ASF_HEADER Header; 285 UINT8 EpromAddress; 286 UINT8 Devices; 287 288 } ACPI_ASF_ADDRESS; 289 290 291 /******************************************************************************* 292 * 293 * BERT - Boot Error Record Table (ACPI 4.0) 294 * Version 1 295 * 296 ******************************************************************************/ 297 298 typedef struct acpi_table_bert 299 { 300 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 301 UINT32 RegionLength; /* Length of the boot error region */ 302 UINT64 Address; /* Physical address of the error region */ 303 304 } ACPI_TABLE_BERT; 305 306 307 /* Boot Error Region (not a subtable, pointed to by Address field above) */ 308 309 typedef struct acpi_bert_region 310 { 311 UINT32 BlockStatus; /* Type of error information */ 312 UINT32 RawDataOffset; /* Offset to raw error data */ 313 UINT32 RawDataLength; /* Length of raw error data */ 314 UINT32 DataLength; /* Length of generic error data */ 315 UINT32 ErrorSeverity; /* Severity code */ 316 317 } ACPI_BERT_REGION; 318 319 /* Values for BlockStatus flags above */ 320 321 #define ACPI_BERT_UNCORRECTABLE (1) 322 #define ACPI_BERT_CORRECTABLE (1<<1) 323 #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 324 #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 325 #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 326 327 /* Values for ErrorSeverity above */ 328 329 enum AcpiBertErrorSeverity 330 { 331 ACPI_BERT_ERROR_CORRECTABLE = 0, 332 ACPI_BERT_ERROR_FATAL = 1, 333 ACPI_BERT_ERROR_CORRECTED = 2, 334 ACPI_BERT_ERROR_NONE = 3, 335 ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 336 }; 337 338 /* 339 * Note: The generic error data that follows the ErrorSeverity field above 340 * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 341 */ 342 343 344 /******************************************************************************* 345 * 346 * BGRT - Boot Graphics Resource Table (ACPI 5.0) 347 * Version 1 348 * 349 ******************************************************************************/ 350 351 typedef struct acpi_table_bgrt 352 { 353 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 354 UINT16 Version; 355 UINT8 Status; 356 UINT8 ImageType; 357 UINT64 ImageAddress; 358 UINT32 ImageOffsetX; 359 UINT32 ImageOffsetY; 360 361 } ACPI_TABLE_BGRT; 362 363 /* Flags for Status field above */ 364 365 #define ACPI_BGRT_DISPLAYED (1) 366 #define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) 367 368 369 /******************************************************************************* 370 * 371 * BOOT - Simple Boot Flag Table 372 * Version 1 373 * 374 * Conforms to the "Simple Boot Flag Specification", Version 2.1 375 * 376 ******************************************************************************/ 377 378 typedef struct acpi_table_boot 379 { 380 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 381 UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ 382 UINT8 Reserved[3]; 383 384 } ACPI_TABLE_BOOT; 385 386 387 /******************************************************************************* 388 * 389 * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 390 * Version 1 391 * 392 ******************************************************************************/ 393 394 typedef struct acpi_table_cpep 395 { 396 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 397 UINT64 Reserved; 398 399 } ACPI_TABLE_CPEP; 400 401 402 /* Subtable */ 403 404 typedef struct acpi_cpep_polling 405 { 406 ACPI_SUBTABLE_HEADER Header; 407 UINT8 Id; /* Processor ID */ 408 UINT8 Eid; /* Processor EID */ 409 UINT32 Interval; /* Polling interval (msec) */ 410 411 } ACPI_CPEP_POLLING; 412 413 414 /******************************************************************************* 415 * 416 * CSRT - Core System Resource Table 417 * Version 0 418 * 419 * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 420 * 421 ******************************************************************************/ 422 423 typedef struct acpi_table_csrt 424 { 425 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 426 427 } ACPI_TABLE_CSRT; 428 429 430 /* Resource Group subtable */ 431 432 typedef struct acpi_csrt_group 433 { 434 UINT32 Length; 435 UINT32 VendorId; 436 UINT32 SubvendorId; 437 UINT16 DeviceId; 438 UINT16 SubdeviceId; 439 UINT16 Revision; 440 UINT16 Reserved; 441 UINT32 SharedInfoLength; 442 443 /* Shared data immediately follows (Length = SharedInfoLength) */ 444 445 } ACPI_CSRT_GROUP; 446 447 /* Shared Info subtable */ 448 449 typedef struct acpi_csrt_shared_info 450 { 451 UINT16 MajorVersion; 452 UINT16 MinorVersion; 453 UINT32 MmioBaseLow; 454 UINT32 MmioBaseHigh; 455 UINT32 GsiInterrupt; 456 UINT8 InterruptPolarity; 457 UINT8 InterruptMode; 458 UINT8 NumChannels; 459 UINT8 DmaAddressWidth; 460 UINT16 BaseRequestLine; 461 UINT16 NumHandshakeSignals; 462 UINT32 MaxBlockSize; 463 464 /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ 465 466 } ACPI_CSRT_SHARED_INFO; 467 468 /* Resource Descriptor subtable */ 469 470 typedef struct acpi_csrt_descriptor 471 { 472 UINT32 Length; 473 UINT16 Type; 474 UINT16 Subtype; 475 UINT32 Uid; 476 477 /* Resource-specific information immediately follows */ 478 479 } ACPI_CSRT_DESCRIPTOR; 480 481 482 /* Resource Types */ 483 484 #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 485 #define ACPI_CSRT_TYPE_TIMER 0x0002 486 #define ACPI_CSRT_TYPE_DMA 0x0003 487 488 /* Resource Subtypes */ 489 490 #define ACPI_CSRT_XRUPT_LINE 0x0000 491 #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 492 #define ACPI_CSRT_TIMER 0x0000 493 #define ACPI_CSRT_DMA_CHANNEL 0x0000 494 #define ACPI_CSRT_DMA_CONTROLLER 0x0001 495 496 497 /******************************************************************************* 498 * 499 * DBG2 - Debug Port Table 2 500 * Version 0 (Both main table and subtables) 501 * 502 * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 503 * 504 ******************************************************************************/ 505 506 typedef struct acpi_table_dbg2 507 { 508 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 509 UINT32 InfoOffset; 510 UINT32 InfoCount; 511 512 } ACPI_TABLE_DBG2; 513 514 515 typedef struct acpi_dbg2_header 516 { 517 UINT32 InfoOffset; 518 UINT32 InfoCount; 519 520 } ACPI_DBG2_HEADER; 521 522 523 /* Debug Device Information Subtable */ 524 525 typedef struct acpi_dbg2_device 526 { 527 UINT8 Revision; 528 UINT16 Length; 529 UINT8 RegisterCount; /* Number of BaseAddress registers */ 530 UINT16 NamepathLength; 531 UINT16 NamepathOffset; 532 UINT16 OemDataLength; 533 UINT16 OemDataOffset; 534 UINT16 PortType; 535 UINT16 PortSubtype; 536 UINT16 Reserved; 537 UINT16 BaseAddressOffset; 538 UINT16 AddressSizeOffset; 539 /* 540 * Data that follows: 541 * BaseAddress (required) - Each in 12-byte Generic Address Structure format. 542 * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. 543 * Namepath (required) - Null terminated string. Single dot if not supported. 544 * OemData (optional) - Length is OemDataLength. 545 */ 546 } ACPI_DBG2_DEVICE; 547 548 /* Types for PortType field above */ 549 550 #define ACPI_DBG2_SERIAL_PORT 0x8000 551 #define ACPI_DBG2_1394_PORT 0x8001 552 #define ACPI_DBG2_USB_PORT 0x8002 553 #define ACPI_DBG2_NET_PORT 0x8003 554 555 /* Subtypes for PortSubtype field above */ 556 557 #define ACPI_DBG2_16550_COMPATIBLE 0x0000 558 #define ACPI_DBG2_16550_SUBSET 0x0001 559 #define ACPI_DBG2_ARM_PL011 0x0003 560 #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D 561 #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E 562 #define ACPI_DBG2_ARM_DCC 0x000F 563 #define ACPI_DBG2_BCM2835 0x0010 564 565 #define ACPI_DBG2_1394_STANDARD 0x0000 566 567 #define ACPI_DBG2_USB_XHCI 0x0000 568 #define ACPI_DBG2_USB_EHCI 0x0001 569 570 571 /******************************************************************************* 572 * 573 * DBGP - Debug Port table 574 * Version 1 575 * 576 * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 577 * 578 ******************************************************************************/ 579 580 typedef struct acpi_table_dbgp 581 { 582 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 583 UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ 584 UINT8 Reserved[3]; 585 ACPI_GENERIC_ADDRESS DebugPort; 586 587 } ACPI_TABLE_DBGP; 588 589 590 /******************************************************************************* 591 * 592 * DMAR - DMA Remapping table 593 * Version 1 594 * 595 * Conforms to "Intel Virtualization Technology for Directed I/O", 596 * Version 2.3, October 2014 597 * 598 ******************************************************************************/ 599 600 typedef struct acpi_table_dmar 601 { 602 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 603 UINT8 Width; /* Host Address Width */ 604 UINT8 Flags; 605 UINT8 Reserved[10]; 606 607 } ACPI_TABLE_DMAR; 608 609 /* Masks for Flags field above */ 610 611 #define ACPI_DMAR_INTR_REMAP (1) 612 #define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) 613 #define ACPI_DMAR_X2APIC_MODE (1<<2) 614 615 616 /* DMAR subtable header */ 617 618 typedef struct acpi_dmar_header 619 { 620 UINT16 Type; 621 UINT16 Length; 622 623 } ACPI_DMAR_HEADER; 624 625 /* Values for subtable type in ACPI_DMAR_HEADER */ 626 627 enum AcpiDmarType 628 { 629 ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, 630 ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, 631 ACPI_DMAR_TYPE_ROOT_ATS = 2, 632 ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, 633 ACPI_DMAR_TYPE_NAMESPACE = 4, 634 ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 635 }; 636 637 638 /* DMAR Device Scope structure */ 639 640 typedef struct acpi_dmar_device_scope 641 { 642 UINT8 EntryType; 643 UINT8 Length; 644 UINT16 Reserved; 645 UINT8 EnumerationId; 646 UINT8 Bus; 647 648 } ACPI_DMAR_DEVICE_SCOPE; 649 650 /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ 651 652 enum AcpiDmarScopeType 653 { 654 ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, 655 ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, 656 ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, 657 ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, 658 ACPI_DMAR_SCOPE_TYPE_HPET = 4, 659 ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, 660 ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 661 }; 662 663 typedef struct acpi_dmar_pci_path 664 { 665 UINT8 Device; 666 UINT8 Function; 667 668 } ACPI_DMAR_PCI_PATH; 669 670 671 /* 672 * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER 673 */ 674 675 /* 0: Hardware Unit Definition */ 676 677 typedef struct acpi_dmar_hardware_unit 678 { 679 ACPI_DMAR_HEADER Header; 680 UINT8 Flags; 681 UINT8 Reserved; 682 UINT16 Segment; 683 UINT64 Address; /* Register Base Address */ 684 685 } ACPI_DMAR_HARDWARE_UNIT; 686 687 /* Masks for Flags field above */ 688 689 #define ACPI_DMAR_INCLUDE_ALL (1) 690 691 692 /* 1: Reserved Memory Defininition */ 693 694 typedef struct acpi_dmar_reserved_memory 695 { 696 ACPI_DMAR_HEADER Header; 697 UINT16 Reserved; 698 UINT16 Segment; 699 UINT64 BaseAddress; /* 4K aligned base address */ 700 UINT64 EndAddress; /* 4K aligned limit address */ 701 702 } ACPI_DMAR_RESERVED_MEMORY; 703 704 /* Masks for Flags field above */ 705 706 #define ACPI_DMAR_ALLOW_ALL (1) 707 708 709 /* 2: Root Port ATS Capability Reporting Structure */ 710 711 typedef struct acpi_dmar_atsr 712 { 713 ACPI_DMAR_HEADER Header; 714 UINT8 Flags; 715 UINT8 Reserved; 716 UINT16 Segment; 717 718 } ACPI_DMAR_ATSR; 719 720 /* Masks for Flags field above */ 721 722 #define ACPI_DMAR_ALL_PORTS (1) 723 724 725 /* 3: Remapping Hardware Static Affinity Structure */ 726 727 typedef struct acpi_dmar_rhsa 728 { 729 ACPI_DMAR_HEADER Header; 730 UINT32 Reserved; 731 UINT64 BaseAddress; 732 UINT32 ProximityDomain; 733 734 } ACPI_DMAR_RHSA; 735 736 737 /* 4: ACPI Namespace Device Declaration Structure */ 738 739 typedef struct acpi_dmar_andd 740 { 741 ACPI_DMAR_HEADER Header; 742 UINT8 Reserved[3]; 743 UINT8 DeviceNumber; 744 char DeviceName[1]; 745 746 } ACPI_DMAR_ANDD; 747 748 749 /******************************************************************************* 750 * 751 * DRTM - Dynamic Root of Trust for Measurement table 752 * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 753 * Table version 1 754 * 755 ******************************************************************************/ 756 757 typedef struct acpi_table_drtm 758 { 759 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 760 UINT64 EntryBaseAddress; 761 UINT64 EntryLength; 762 UINT32 EntryAddress32; 763 UINT64 EntryAddress64; 764 UINT64 ExitAddress; 765 UINT64 LogAreaAddress; 766 UINT32 LogAreaLength; 767 UINT64 ArchDependentAddress; 768 UINT32 Flags; 769 770 } ACPI_TABLE_DRTM; 771 772 /* Flag Definitions for above */ 773 774 #define ACPI_DRTM_ACCESS_ALLOWED (1) 775 #define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) 776 #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) 777 #define ACPI_DRTM_AUTHORITY_ORDER (1<<3) 778 779 780 /* 1) Validated Tables List (64-bit addresses) */ 781 782 typedef struct acpi_drtm_vtable_list 783 { 784 UINT32 ValidatedTableCount; 785 UINT64 ValidatedTables[1]; 786 787 } ACPI_DRTM_VTABLE_LIST; 788 789 /* 2) Resources List (of Resource Descriptors) */ 790 791 /* Resource Descriptor */ 792 793 typedef struct acpi_drtm_resource 794 { 795 UINT8 Size[7]; 796 UINT8 Type; 797 UINT64 Address; 798 799 } ACPI_DRTM_RESOURCE; 800 801 typedef struct acpi_drtm_resource_list 802 { 803 UINT32 ResourceCount; 804 ACPI_DRTM_RESOURCE Resources[1]; 805 806 } ACPI_DRTM_RESOURCE_LIST; 807 808 /* 3) Platform-specific Identifiers List */ 809 810 typedef struct acpi_drtm_dps_id 811 { 812 UINT32 DpsIdLength; 813 UINT8 DpsId[16]; 814 815 } ACPI_DRTM_DPS_ID; 816 817 818 /******************************************************************************* 819 * 820 * ECDT - Embedded Controller Boot Resources Table 821 * Version 1 822 * 823 ******************************************************************************/ 824 825 typedef struct acpi_table_ecdt 826 { 827 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 828 ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 829 ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 830 UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 831 UINT8 Gpe; /* The GPE for the EC */ 832 UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 833 834 } ACPI_TABLE_ECDT; 835 836 837 /******************************************************************************* 838 * 839 * EINJ - Error Injection Table (ACPI 4.0) 840 * Version 1 841 * 842 ******************************************************************************/ 843 844 typedef struct acpi_table_einj 845 { 846 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 847 UINT32 HeaderLength; 848 UINT8 Flags; 849 UINT8 Reserved[3]; 850 UINT32 Entries; 851 852 } ACPI_TABLE_EINJ; 853 854 855 /* EINJ Injection Instruction Entries (actions) */ 856 857 typedef struct acpi_einj_entry 858 { 859 ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 860 861 } ACPI_EINJ_ENTRY; 862 863 /* Masks for Flags field above */ 864 865 #define ACPI_EINJ_PRESERVE (1) 866 867 /* Values for Action field above */ 868 869 enum AcpiEinjActions 870 { 871 ACPI_EINJ_BEGIN_OPERATION = 0, 872 ACPI_EINJ_GET_TRIGGER_TABLE = 1, 873 ACPI_EINJ_SET_ERROR_TYPE = 2, 874 ACPI_EINJ_GET_ERROR_TYPE = 3, 875 ACPI_EINJ_END_OPERATION = 4, 876 ACPI_EINJ_EXECUTE_OPERATION = 5, 877 ACPI_EINJ_CHECK_BUSY_STATUS = 6, 878 ACPI_EINJ_GET_COMMAND_STATUS = 7, 879 ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 880 ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 881 ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 882 ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 883 }; 884 885 /* Values for Instruction field above */ 886 887 enum AcpiEinjInstructions 888 { 889 ACPI_EINJ_READ_REGISTER = 0, 890 ACPI_EINJ_READ_REGISTER_VALUE = 1, 891 ACPI_EINJ_WRITE_REGISTER = 2, 892 ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 893 ACPI_EINJ_NOOP = 4, 894 ACPI_EINJ_FLUSH_CACHELINE = 5, 895 ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 896 }; 897 898 typedef struct acpi_einj_error_type_with_addr 899 { 900 UINT32 ErrorType; 901 UINT32 VendorStructOffset; 902 UINT32 Flags; 903 UINT32 ApicId; 904 UINT64 Address; 905 UINT64 Range; 906 UINT32 PcieId; 907 908 } ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 909 910 typedef struct acpi_einj_vendor 911 { 912 UINT32 Length; 913 UINT32 PcieId; 914 UINT16 VendorId; 915 UINT16 DeviceId; 916 UINT8 RevisionId; 917 UINT8 Reserved[3]; 918 919 } ACPI_EINJ_VENDOR; 920 921 922 /* EINJ Trigger Error Action Table */ 923 924 typedef struct acpi_einj_trigger 925 { 926 UINT32 HeaderSize; 927 UINT32 Revision; 928 UINT32 TableSize; 929 UINT32 EntryCount; 930 931 } ACPI_EINJ_TRIGGER; 932 933 /* Command status return values */ 934 935 enum AcpiEinjCommandStatus 936 { 937 ACPI_EINJ_SUCCESS = 0, 938 ACPI_EINJ_FAILURE = 1, 939 ACPI_EINJ_INVALID_ACCESS = 2, 940 ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 941 }; 942 943 944 /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 945 946 #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 947 #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 948 #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 949 #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 950 #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 951 #define ACPI_EINJ_MEMORY_FATAL (1<<5) 952 #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 953 #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 954 #define ACPI_EINJ_PCIX_FATAL (1<<8) 955 #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 956 #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 957 #define ACPI_EINJ_PLATFORM_FATAL (1<<11) 958 #define ACPI_EINJ_VENDOR_DEFINED (1<<31) 959 960 961 /******************************************************************************* 962 * 963 * ERST - Error Record Serialization Table (ACPI 4.0) 964 * Version 1 965 * 966 ******************************************************************************/ 967 968 typedef struct acpi_table_erst 969 { 970 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 971 UINT32 HeaderLength; 972 UINT32 Reserved; 973 UINT32 Entries; 974 975 } ACPI_TABLE_ERST; 976 977 978 /* ERST Serialization Entries (actions) */ 979 980 typedef struct acpi_erst_entry 981 { 982 ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 983 984 } ACPI_ERST_ENTRY; 985 986 /* Masks for Flags field above */ 987 988 #define ACPI_ERST_PRESERVE (1) 989 990 /* Values for Action field above */ 991 992 enum AcpiErstActions 993 { 994 ACPI_ERST_BEGIN_WRITE = 0, 995 ACPI_ERST_BEGIN_READ = 1, 996 ACPI_ERST_BEGIN_CLEAR = 2, 997 ACPI_ERST_END = 3, 998 ACPI_ERST_SET_RECORD_OFFSET = 4, 999 ACPI_ERST_EXECUTE_OPERATION = 5, 1000 ACPI_ERST_CHECK_BUSY_STATUS = 6, 1001 ACPI_ERST_GET_COMMAND_STATUS = 7, 1002 ACPI_ERST_GET_RECORD_ID = 8, 1003 ACPI_ERST_SET_RECORD_ID = 9, 1004 ACPI_ERST_GET_RECORD_COUNT = 10, 1005 ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 1006 ACPI_ERST_NOT_USED = 12, 1007 ACPI_ERST_GET_ERROR_RANGE = 13, 1008 ACPI_ERST_GET_ERROR_LENGTH = 14, 1009 ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 1010 ACPI_ERST_EXECUTE_TIMINGS = 16, 1011 ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 1012 }; 1013 1014 /* Values for Instruction field above */ 1015 1016 enum AcpiErstInstructions 1017 { 1018 ACPI_ERST_READ_REGISTER = 0, 1019 ACPI_ERST_READ_REGISTER_VALUE = 1, 1020 ACPI_ERST_WRITE_REGISTER = 2, 1021 ACPI_ERST_WRITE_REGISTER_VALUE = 3, 1022 ACPI_ERST_NOOP = 4, 1023 ACPI_ERST_LOAD_VAR1 = 5, 1024 ACPI_ERST_LOAD_VAR2 = 6, 1025 ACPI_ERST_STORE_VAR1 = 7, 1026 ACPI_ERST_ADD = 8, 1027 ACPI_ERST_SUBTRACT = 9, 1028 ACPI_ERST_ADD_VALUE = 10, 1029 ACPI_ERST_SUBTRACT_VALUE = 11, 1030 ACPI_ERST_STALL = 12, 1031 ACPI_ERST_STALL_WHILE_TRUE = 13, 1032 ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 1033 ACPI_ERST_GOTO = 15, 1034 ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 1035 ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 1036 ACPI_ERST_MOVE_DATA = 18, 1037 ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 1038 }; 1039 1040 /* Command status return values */ 1041 1042 enum AcpiErstCommandStatus 1043 { 1044 ACPI_ERST_SUCESS = 0, 1045 ACPI_ERST_NO_SPACE = 1, 1046 ACPI_ERST_NOT_AVAILABLE = 2, 1047 ACPI_ERST_FAILURE = 3, 1048 ACPI_ERST_RECORD_EMPTY = 4, 1049 ACPI_ERST_NOT_FOUND = 5, 1050 ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 1051 }; 1052 1053 1054 /* Error Record Serialization Information */ 1055 1056 typedef struct acpi_erst_info 1057 { 1058 UINT16 Signature; /* Should be "ER" */ 1059 UINT8 Data[48]; 1060 1061 } ACPI_ERST_INFO; 1062 1063 1064 /******************************************************************************* 1065 * 1066 * FPDT - Firmware Performance Data Table (ACPI 5.0) 1067 * Version 1 1068 * 1069 ******************************************************************************/ 1070 1071 typedef struct acpi_table_fpdt 1072 { 1073 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1074 1075 } ACPI_TABLE_FPDT; 1076 1077 1078 /* FPDT subtable header (Performance Record Structure) */ 1079 1080 typedef struct acpi_fpdt_header 1081 { 1082 UINT16 Type; 1083 UINT8 Length; 1084 UINT8 Revision; 1085 1086 } ACPI_FPDT_HEADER; 1087 1088 /* Values for Type field above */ 1089 1090 enum AcpiFpdtType 1091 { 1092 ACPI_FPDT_TYPE_BOOT = 0, 1093 ACPI_FPDT_TYPE_S3PERF = 1 1094 }; 1095 1096 1097 /* 1098 * FPDT subtables 1099 */ 1100 1101 /* 0: Firmware Basic Boot Performance Record */ 1102 1103 typedef struct acpi_fpdt_boot_pointer 1104 { 1105 ACPI_FPDT_HEADER Header; 1106 UINT8 Reserved[4]; 1107 UINT64 Address; 1108 1109 } ACPI_FPDT_BOOT_POINTER; 1110 1111 1112 /* 1: S3 Performance Table Pointer Record */ 1113 1114 typedef struct acpi_fpdt_s3pt_pointer 1115 { 1116 ACPI_FPDT_HEADER Header; 1117 UINT8 Reserved[4]; 1118 UINT64 Address; 1119 1120 } ACPI_FPDT_S3PT_POINTER; 1121 1122 1123 /* 1124 * S3PT - S3 Performance Table. This table is pointed to by the 1125 * S3 Pointer Record above. 1126 */ 1127 typedef struct acpi_table_s3pt 1128 { 1129 UINT8 Signature[4]; /* "S3PT" */ 1130 UINT32 Length; 1131 1132 } ACPI_TABLE_S3PT; 1133 1134 1135 /* 1136 * S3PT Subtables (Not part of the actual FPDT) 1137 */ 1138 1139 /* Values for Type field in S3PT header */ 1140 1141 enum AcpiS3ptType 1142 { 1143 ACPI_S3PT_TYPE_RESUME = 0, 1144 ACPI_S3PT_TYPE_SUSPEND = 1, 1145 ACPI_FPDT_BOOT_PERFORMANCE = 2 1146 }; 1147 1148 typedef struct acpi_s3pt_resume 1149 { 1150 ACPI_FPDT_HEADER Header; 1151 UINT32 ResumeCount; 1152 UINT64 FullResume; 1153 UINT64 AverageResume; 1154 1155 } ACPI_S3PT_RESUME; 1156 1157 typedef struct acpi_s3pt_suspend 1158 { 1159 ACPI_FPDT_HEADER Header; 1160 UINT64 SuspendStart; 1161 UINT64 SuspendEnd; 1162 1163 } ACPI_S3PT_SUSPEND; 1164 1165 1166 /* 1167 * FPDT Boot Performance Record (Not part of the actual FPDT) 1168 */ 1169 typedef struct acpi_fpdt_boot 1170 { 1171 ACPI_FPDT_HEADER Header; 1172 UINT8 Reserved[4]; 1173 UINT64 ResetEnd; 1174 UINT64 LoadStart; 1175 UINT64 StartupStart; 1176 UINT64 ExitServicesEntry; 1177 UINT64 ExitServicesExit; 1178 1179 } ACPI_FPDT_BOOT; 1180 1181 1182 /******************************************************************************* 1183 * 1184 * GTDT - Generic Timer Description Table (ACPI 5.1) 1185 * Version 2 1186 * 1187 ******************************************************************************/ 1188 1189 typedef struct acpi_table_gtdt 1190 { 1191 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1192 UINT64 CounterBlockAddresss; 1193 UINT32 Reserved; 1194 UINT32 SecureEl1Interrupt; 1195 UINT32 SecureEl1Flags; 1196 UINT32 NonSecureEl1Interrupt; 1197 UINT32 NonSecureEl1Flags; 1198 UINT32 VirtualTimerInterrupt; 1199 UINT32 VirtualTimerFlags; 1200 UINT32 NonSecureEl2Interrupt; 1201 UINT32 NonSecureEl2Flags; 1202 UINT64 CounterReadBlockAddress; 1203 UINT32 PlatformTimerCount; 1204 UINT32 PlatformTimerOffset; 1205 1206 } ACPI_TABLE_GTDT; 1207 1208 /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ 1209 1210 #define ACPI_GTDT_INTERRUPT_MODE (1) 1211 #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) 1212 #define ACPI_GTDT_ALWAYS_ON (1<<2) 1213 1214 1215 /* Common GTDT subtable header */ 1216 1217 typedef struct acpi_gtdt_header 1218 { 1219 UINT8 Type; 1220 UINT16 Length; 1221 1222 } ACPI_GTDT_HEADER; 1223 1224 /* Values for GTDT subtable type above */ 1225 1226 enum AcpiGtdtType 1227 { 1228 ACPI_GTDT_TYPE_TIMER_BLOCK = 0, 1229 ACPI_GTDT_TYPE_WATCHDOG = 1, 1230 ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 1231 }; 1232 1233 1234 /* GTDT Subtables, correspond to Type in acpi_gtdt_header */ 1235 1236 /* 0: Generic Timer Block */ 1237 1238 typedef struct acpi_gtdt_timer_block 1239 { 1240 ACPI_GTDT_HEADER Header; 1241 UINT8 Reserved; 1242 UINT64 BlockAddress; 1243 UINT32 TimerCount; 1244 UINT32 TimerOffset; 1245 1246 } ACPI_GTDT_TIMER_BLOCK; 1247 1248 /* Timer Sub-Structure, one per timer */ 1249 1250 typedef struct acpi_gtdt_timer_entry 1251 { 1252 UINT8 FrameNumber; 1253 UINT8 Reserved[3]; 1254 UINT64 BaseAddress; 1255 UINT64 El0BaseAddress; 1256 UINT32 TimerInterrupt; 1257 UINT32 TimerFlags; 1258 UINT32 VirtualTimerInterrupt; 1259 UINT32 VirtualTimerFlags; 1260 UINT32 CommonFlags; 1261 1262 } ACPI_GTDT_TIMER_ENTRY; 1263 1264 /* Flag Definitions: TimerFlags and VirtualTimerFlags above */ 1265 1266 #define ACPI_GTDT_GT_IRQ_MODE (1) 1267 #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) 1268 1269 /* Flag Definitions: CommonFlags above */ 1270 1271 #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) 1272 #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) 1273 1274 1275 /* 1: SBSA Generic Watchdog Structure */ 1276 1277 typedef struct acpi_gtdt_watchdog 1278 { 1279 ACPI_GTDT_HEADER Header; 1280 UINT8 Reserved; 1281 UINT64 RefreshFrameAddress; 1282 UINT64 ControlFrameAddress; 1283 UINT32 TimerInterrupt; 1284 UINT32 TimerFlags; 1285 1286 } ACPI_GTDT_WATCHDOG; 1287 1288 /* Flag Definitions: TimerFlags above */ 1289 1290 #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) 1291 #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) 1292 #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) 1293 1294 1295 /******************************************************************************* 1296 * 1297 * HEST - Hardware Error Source Table (ACPI 4.0) 1298 * Version 1 1299 * 1300 ******************************************************************************/ 1301 1302 typedef struct acpi_table_hest 1303 { 1304 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1305 UINT32 ErrorSourceCount; 1306 1307 } ACPI_TABLE_HEST; 1308 1309 1310 /* HEST subtable header */ 1311 1312 typedef struct acpi_hest_header 1313 { 1314 UINT16 Type; 1315 UINT16 SourceId; 1316 1317 } ACPI_HEST_HEADER; 1318 1319 1320 /* Values for Type field above for subtables */ 1321 1322 enum AcpiHestTypes 1323 { 1324 ACPI_HEST_TYPE_IA32_CHECK = 0, 1325 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 1326 ACPI_HEST_TYPE_IA32_NMI = 2, 1327 ACPI_HEST_TYPE_NOT_USED3 = 3, 1328 ACPI_HEST_TYPE_NOT_USED4 = 4, 1329 ACPI_HEST_TYPE_NOT_USED5 = 5, 1330 ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 1331 ACPI_HEST_TYPE_AER_ENDPOINT = 7, 1332 ACPI_HEST_TYPE_AER_BRIDGE = 8, 1333 ACPI_HEST_TYPE_GENERIC_ERROR = 9, 1334 ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 1335 ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, 1336 ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ 1337 }; 1338 1339 1340 /* 1341 * HEST substructures contained in subtables 1342 */ 1343 1344 /* 1345 * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 1346 * ACPI_HEST_IA_CORRECTED structures. 1347 */ 1348 typedef struct acpi_hest_ia_error_bank 1349 { 1350 UINT8 BankNumber; 1351 UINT8 ClearStatusOnInit; 1352 UINT8 StatusFormat; 1353 UINT8 Reserved; 1354 UINT32 ControlRegister; 1355 UINT64 ControlData; 1356 UINT32 StatusRegister; 1357 UINT32 AddressRegister; 1358 UINT32 MiscRegister; 1359 1360 } ACPI_HEST_IA_ERROR_BANK; 1361 1362 1363 /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 1364 1365 typedef struct acpi_hest_aer_common 1366 { 1367 UINT16 Reserved1; 1368 UINT8 Flags; 1369 UINT8 Enabled; 1370 UINT32 RecordsToPreallocate; 1371 UINT32 MaxSectionsPerRecord; 1372 UINT32 Bus; /* Bus and Segment numbers */ 1373 UINT16 Device; 1374 UINT16 Function; 1375 UINT16 DeviceControl; 1376 UINT16 Reserved2; 1377 UINT32 UncorrectableMask; 1378 UINT32 UncorrectableSeverity; 1379 UINT32 CorrectableMask; 1380 UINT32 AdvancedCapabilities; 1381 1382 } ACPI_HEST_AER_COMMON; 1383 1384 /* Masks for HEST Flags fields */ 1385 1386 #define ACPI_HEST_FIRMWARE_FIRST (1) 1387 #define ACPI_HEST_GLOBAL (1<<1) 1388 #define ACPI_HEST_GHES_ASSIST (1<<2) 1389 1390 /* 1391 * Macros to access the bus/segment numbers in Bus field above: 1392 * Bus number is encoded in bits 7:0 1393 * Segment number is encoded in bits 23:8 1394 */ 1395 #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 1396 #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 1397 1398 1399 /* Hardware Error Notification */ 1400 1401 typedef struct acpi_hest_notify 1402 { 1403 UINT8 Type; 1404 UINT8 Length; 1405 UINT16 ConfigWriteEnable; 1406 UINT32 PollInterval; 1407 UINT32 Vector; 1408 UINT32 PollingThresholdValue; 1409 UINT32 PollingThresholdWindow; 1410 UINT32 ErrorThresholdValue; 1411 UINT32 ErrorThresholdWindow; 1412 1413 } ACPI_HEST_NOTIFY; 1414 1415 /* Values for Notify Type field above */ 1416 1417 enum AcpiHestNotifyTypes 1418 { 1419 ACPI_HEST_NOTIFY_POLLED = 0, 1420 ACPI_HEST_NOTIFY_EXTERNAL = 1, 1421 ACPI_HEST_NOTIFY_LOCAL = 2, 1422 ACPI_HEST_NOTIFY_SCI = 3, 1423 ACPI_HEST_NOTIFY_NMI = 4, 1424 ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 1425 ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 1426 ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 1427 ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 1428 ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 1429 ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 1430 ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ 1431 ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ 1432 }; 1433 1434 /* Values for ConfigWriteEnable bitfield above */ 1435 1436 #define ACPI_HEST_TYPE (1) 1437 #define ACPI_HEST_POLL_INTERVAL (1<<1) 1438 #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 1439 #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 1440 #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 1441 #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 1442 1443 1444 /* 1445 * HEST subtables 1446 */ 1447 1448 /* 0: IA32 Machine Check Exception */ 1449 1450 typedef struct acpi_hest_ia_machine_check 1451 { 1452 ACPI_HEST_HEADER Header; 1453 UINT16 Reserved1; 1454 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1455 UINT8 Enabled; 1456 UINT32 RecordsToPreallocate; 1457 UINT32 MaxSectionsPerRecord; 1458 UINT64 GlobalCapabilityData; 1459 UINT64 GlobalControlData; 1460 UINT8 NumHardwareBanks; 1461 UINT8 Reserved3[7]; 1462 1463 } ACPI_HEST_IA_MACHINE_CHECK; 1464 1465 1466 /* 1: IA32 Corrected Machine Check */ 1467 1468 typedef struct acpi_hest_ia_corrected 1469 { 1470 ACPI_HEST_HEADER Header; 1471 UINT16 Reserved1; 1472 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1473 UINT8 Enabled; 1474 UINT32 RecordsToPreallocate; 1475 UINT32 MaxSectionsPerRecord; 1476 ACPI_HEST_NOTIFY Notify; 1477 UINT8 NumHardwareBanks; 1478 UINT8 Reserved2[3]; 1479 1480 } ACPI_HEST_IA_CORRECTED; 1481 1482 1483 /* 2: IA32 Non-Maskable Interrupt */ 1484 1485 typedef struct acpi_hest_ia_nmi 1486 { 1487 ACPI_HEST_HEADER Header; 1488 UINT32 Reserved; 1489 UINT32 RecordsToPreallocate; 1490 UINT32 MaxSectionsPerRecord; 1491 UINT32 MaxRawDataLength; 1492 1493 } ACPI_HEST_IA_NMI; 1494 1495 1496 /* 3,4,5: Not used */ 1497 1498 /* 6: PCI Express Root Port AER */ 1499 1500 typedef struct acpi_hest_aer_root 1501 { 1502 ACPI_HEST_HEADER Header; 1503 ACPI_HEST_AER_COMMON Aer; 1504 UINT32 RootErrorCommand; 1505 1506 } ACPI_HEST_AER_ROOT; 1507 1508 1509 /* 7: PCI Express AER (AER Endpoint) */ 1510 1511 typedef struct acpi_hest_aer 1512 { 1513 ACPI_HEST_HEADER Header; 1514 ACPI_HEST_AER_COMMON Aer; 1515 1516 } ACPI_HEST_AER; 1517 1518 1519 /* 8: PCI Express/PCI-X Bridge AER */ 1520 1521 typedef struct acpi_hest_aer_bridge 1522 { 1523 ACPI_HEST_HEADER Header; 1524 ACPI_HEST_AER_COMMON Aer; 1525 UINT32 UncorrectableMask2; 1526 UINT32 UncorrectableSeverity2; 1527 UINT32 AdvancedCapabilities2; 1528 1529 } ACPI_HEST_AER_BRIDGE; 1530 1531 1532 /* 9: Generic Hardware Error Source */ 1533 1534 typedef struct acpi_hest_generic 1535 { 1536 ACPI_HEST_HEADER Header; 1537 UINT16 RelatedSourceId; 1538 UINT8 Reserved; 1539 UINT8 Enabled; 1540 UINT32 RecordsToPreallocate; 1541 UINT32 MaxSectionsPerRecord; 1542 UINT32 MaxRawDataLength; 1543 ACPI_GENERIC_ADDRESS ErrorStatusAddress; 1544 ACPI_HEST_NOTIFY Notify; 1545 UINT32 ErrorBlockLength; 1546 1547 } ACPI_HEST_GENERIC; 1548 1549 1550 /* 10: Generic Hardware Error Source, version 2 */ 1551 1552 typedef struct acpi_hest_generic_v2 1553 { 1554 ACPI_HEST_HEADER Header; 1555 UINT16 RelatedSourceId; 1556 UINT8 Reserved; 1557 UINT8 Enabled; 1558 UINT32 RecordsToPreallocate; 1559 UINT32 MaxSectionsPerRecord; 1560 UINT32 MaxRawDataLength; 1561 ACPI_GENERIC_ADDRESS ErrorStatusAddress; 1562 ACPI_HEST_NOTIFY Notify; 1563 UINT32 ErrorBlockLength; 1564 ACPI_GENERIC_ADDRESS ReadAckRegister; 1565 UINT64 ReadAckPreserve; 1566 UINT64 ReadAckWrite; 1567 1568 } ACPI_HEST_GENERIC_V2; 1569 1570 1571 /* Generic Error Status block */ 1572 1573 typedef struct acpi_hest_generic_status 1574 { 1575 UINT32 BlockStatus; 1576 UINT32 RawDataOffset; 1577 UINT32 RawDataLength; 1578 UINT32 DataLength; 1579 UINT32 ErrorSeverity; 1580 1581 } ACPI_HEST_GENERIC_STATUS; 1582 1583 /* Values for BlockStatus flags above */ 1584 1585 #define ACPI_HEST_UNCORRECTABLE (1) 1586 #define ACPI_HEST_CORRECTABLE (1<<1) 1587 #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 1588 #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 1589 #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 1590 1591 1592 /* Generic Error Data entry */ 1593 1594 typedef struct acpi_hest_generic_data 1595 { 1596 UINT8 SectionType[16]; 1597 UINT32 ErrorSeverity; 1598 UINT16 Revision; 1599 UINT8 ValidationBits; 1600 UINT8 Flags; 1601 UINT32 ErrorDataLength; 1602 UINT8 FruId[16]; 1603 UINT8 FruText[20]; 1604 1605 } ACPI_HEST_GENERIC_DATA; 1606 1607 /* Extension for revision 0x0300 */ 1608 1609 typedef struct acpi_hest_generic_data_v300 1610 { 1611 UINT8 SectionType[16]; 1612 UINT32 ErrorSeverity; 1613 UINT16 Revision; 1614 UINT8 ValidationBits; 1615 UINT8 Flags; 1616 UINT32 ErrorDataLength; 1617 UINT8 FruId[16]; 1618 UINT8 FruText[20]; 1619 UINT64 TimeStamp; 1620 1621 } ACPI_HEST_GENERIC_DATA_V300; 1622 1623 /* Values for ErrorSeverity above */ 1624 1625 #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 1626 #define ACPI_HEST_GEN_ERROR_FATAL 1 1627 #define ACPI_HEST_GEN_ERROR_CORRECTED 2 1628 #define ACPI_HEST_GEN_ERROR_NONE 3 1629 1630 /* Flags for ValidationBits above */ 1631 1632 #define ACPI_HEST_GEN_VALID_FRU_ID (1) 1633 #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 1634 #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 1635 1636 1637 /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ 1638 1639 typedef struct acpi_hest_ia_deferred_check 1640 { 1641 ACPI_HEST_HEADER Header; 1642 UINT16 Reserved1; 1643 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1644 UINT8 Enabled; 1645 UINT32 RecordsToPreallocate; 1646 UINT32 MaxSectionsPerRecord; 1647 ACPI_HEST_NOTIFY Notify; 1648 UINT8 NumHardwareBanks; 1649 UINT8 Reserved2[3]; 1650 1651 } ACPI_HEST_IA_DEFERRED_CHECK; 1652 1653 1654 /******************************************************************************* 1655 * 1656 * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) 1657 * Version 1 1658 * 1659 ******************************************************************************/ 1660 1661 typedef struct acpi_table_hmat 1662 { 1663 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1664 UINT32 Reserved; 1665 1666 } ACPI_TABLE_HMAT; 1667 1668 1669 /* Values for HMAT structure types */ 1670 1671 enum AcpiHmatType 1672 { 1673 ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ 1674 ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ 1675 ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ 1676 ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 1677 }; 1678 1679 typedef struct acpi_hmat_structure 1680 { 1681 UINT16 Type; 1682 UINT16 Reserved; 1683 UINT32 Length; 1684 1685 } ACPI_HMAT_STRUCTURE; 1686 1687 1688 /* 1689 * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE 1690 */ 1691 1692 /* 0: Memory subystem address range */ 1693 1694 typedef struct acpi_hmat_address_range 1695 { 1696 ACPI_HMAT_STRUCTURE Header; 1697 UINT16 Flags; 1698 UINT16 Reserved1; 1699 UINT32 ProcessorPD; /* Processor proximity domain */ 1700 UINT32 MemoryPD; /* Memory proximity domain */ 1701 UINT32 Reserved2; 1702 UINT64 PhysicalAddressBase; /* Physical address range base */ 1703 UINT64 PhysicalAddressLength; /* Physical address range length */ 1704 1705 } ACPI_HMAT_ADDRESS_RANGE; 1706 1707 /* Masks for Flags field above */ 1708 1709 #define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ 1710 #define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ 1711 #define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ 1712 1713 1714 /* 1: System locality latency and bandwidth information */ 1715 1716 typedef struct acpi_hmat_locality 1717 { 1718 ACPI_HMAT_STRUCTURE Header; 1719 UINT8 Flags; 1720 UINT8 DataType; 1721 UINT16 Reserved1; 1722 UINT32 NumberOfInitiatorPDs; 1723 UINT32 NumberOfTargetPDs; 1724 UINT32 Reserved2; 1725 UINT64 EntryBaseUnit; 1726 1727 } ACPI_HMAT_LOCALITY; 1728 1729 /* Masks for Flags field above */ 1730 1731 #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) 1732 1733 /* Values for Memory Hierarchy flag */ 1734 1735 #define ACPI_HMAT_MEMORY 0 1736 #define ACPI_HMAT_LAST_LEVEL_CACHE 1 1737 #define ACPI_HMAT_1ST_LEVEL_CACHE 2 1738 #define ACPI_HMAT_2ND_LEVEL_CACHE 3 1739 #define ACPI_HMAT_3RD_LEVEL_CACHE 4 1740 1741 /* Values for DataType field above */ 1742 1743 #define ACPI_HMAT_ACCESS_LATENCY 0 1744 #define ACPI_HMAT_READ_LATENCY 1 1745 #define ACPI_HMAT_WRITE_LATENCY 2 1746 #define ACPI_HMAT_ACCESS_BANDWIDTH 3 1747 #define ACPI_HMAT_READ_BANDWIDTH 4 1748 #define ACPI_HMAT_WRITE_BANDWIDTH 5 1749 1750 1751 /* 2: Memory side cache information */ 1752 1753 typedef struct acpi_hmat_cache 1754 { 1755 ACPI_HMAT_STRUCTURE Header; 1756 UINT32 MemoryPD; 1757 UINT32 Reserved1; 1758 UINT64 CacheSize; 1759 UINT32 CacheAttributes; 1760 UINT16 Reserved2; 1761 UINT16 NumberOfSMBIOSHandles; 1762 1763 } ACPI_HMAT_CACHE; 1764 1765 /* Masks for CacheAttributes field above */ 1766 1767 #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) 1768 #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) 1769 #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) 1770 #define ACPI_HMAT_WRITE_POLICY (0x0000F000) 1771 #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) 1772 1773 /* Values for cache associativity flag */ 1774 1775 #define ACPI_HMAT_CA_NONE (0) 1776 #define ACPI_HMAT_CA_DIRECT_MAPPED (1) 1777 #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) 1778 1779 /* Values for write policy flag */ 1780 1781 #define ACPI_HMAT_CP_NONE (0) 1782 #define ACPI_HMAT_CP_WB (1) 1783 #define ACPI_HMAT_CP_WT (2) 1784 1785 1786 /******************************************************************************* 1787 * 1788 * HPET - High Precision Event Timer table 1789 * Version 1 1790 * 1791 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", 1792 * Version 1.0a, October 2004 1793 * 1794 ******************************************************************************/ 1795 1796 typedef struct acpi_table_hpet 1797 { 1798 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1799 UINT32 Id; /* Hardware ID of event timer block */ 1800 ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ 1801 UINT8 Sequence; /* HPET sequence number */ 1802 UINT16 MinimumTick; /* Main counter min tick, periodic mode */ 1803 UINT8 Flags; 1804 1805 } ACPI_TABLE_HPET; 1806 1807 /* Masks for Flags field above */ 1808 1809 #define ACPI_HPET_PAGE_PROTECT_MASK (3) 1810 1811 /* Values for Page Protect flags */ 1812 1813 enum AcpiHpetPageProtect 1814 { 1815 ACPI_HPET_NO_PAGE_PROTECT = 0, 1816 ACPI_HPET_PAGE_PROTECT4 = 1, 1817 ACPI_HPET_PAGE_PROTECT64 = 2 1818 }; 1819 1820 1821 /******************************************************************************* 1822 * 1823 * IBFT - Boot Firmware Table 1824 * Version 1 1825 * 1826 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b 1827 * Specification", Version 1.01, March 1, 2007 1828 * 1829 * Note: It appears that this table is not intended to appear in the RSDT/XSDT. 1830 * Therefore, it is not currently supported by the disassembler. 1831 * 1832 ******************************************************************************/ 1833 1834 typedef struct acpi_table_ibft 1835 { 1836 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1837 UINT8 Reserved[12]; 1838 1839 } ACPI_TABLE_IBFT; 1840 1841 1842 /* IBFT common subtable header */ 1843 1844 typedef struct acpi_ibft_header 1845 { 1846 UINT8 Type; 1847 UINT8 Version; 1848 UINT16 Length; 1849 UINT8 Index; 1850 UINT8 Flags; 1851 1852 } ACPI_IBFT_HEADER; 1853 1854 /* Values for Type field above */ 1855 1856 enum AcpiIbftType 1857 { 1858 ACPI_IBFT_TYPE_NOT_USED = 0, 1859 ACPI_IBFT_TYPE_CONTROL = 1, 1860 ACPI_IBFT_TYPE_INITIATOR = 2, 1861 ACPI_IBFT_TYPE_NIC = 3, 1862 ACPI_IBFT_TYPE_TARGET = 4, 1863 ACPI_IBFT_TYPE_EXTENSIONS = 5, 1864 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 1865 }; 1866 1867 1868 /* IBFT subtables */ 1869 1870 typedef struct acpi_ibft_control 1871 { 1872 ACPI_IBFT_HEADER Header; 1873 UINT16 Extensions; 1874 UINT16 InitiatorOffset; 1875 UINT16 Nic0Offset; 1876 UINT16 Target0Offset; 1877 UINT16 Nic1Offset; 1878 UINT16 Target1Offset; 1879 1880 } ACPI_IBFT_CONTROL; 1881 1882 typedef struct acpi_ibft_initiator 1883 { 1884 ACPI_IBFT_HEADER Header; 1885 UINT8 SnsServer[16]; 1886 UINT8 SlpServer[16]; 1887 UINT8 PrimaryServer[16]; 1888 UINT8 SecondaryServer[16]; 1889 UINT16 NameLength; 1890 UINT16 NameOffset; 1891 1892 } ACPI_IBFT_INITIATOR; 1893 1894 typedef struct acpi_ibft_nic 1895 { 1896 ACPI_IBFT_HEADER Header; 1897 UINT8 IpAddress[16]; 1898 UINT8 SubnetMaskPrefix; 1899 UINT8 Origin; 1900 UINT8 Gateway[16]; 1901 UINT8 PrimaryDns[16]; 1902 UINT8 SecondaryDns[16]; 1903 UINT8 Dhcp[16]; 1904 UINT16 Vlan; 1905 UINT8 MacAddress[6]; 1906 UINT16 PciAddress; 1907 UINT16 NameLength; 1908 UINT16 NameOffset; 1909 1910 } ACPI_IBFT_NIC; 1911 1912 typedef struct acpi_ibft_target 1913 { 1914 ACPI_IBFT_HEADER Header; 1915 UINT8 TargetIpAddress[16]; 1916 UINT16 TargetIpSocket; 1917 UINT8 TargetBootLun[8]; 1918 UINT8 ChapType; 1919 UINT8 NicAssociation; 1920 UINT16 TargetNameLength; 1921 UINT16 TargetNameOffset; 1922 UINT16 ChapNameLength; 1923 UINT16 ChapNameOffset; 1924 UINT16 ChapSecretLength; 1925 UINT16 ChapSecretOffset; 1926 UINT16 ReverseChapNameLength; 1927 UINT16 ReverseChapNameOffset; 1928 UINT16 ReverseChapSecretLength; 1929 UINT16 ReverseChapSecretOffset; 1930 1931 } ACPI_IBFT_TARGET; 1932 1933 1934 /* Reset to default packing */ 1935 1936 #pragma pack() 1937 1938 #endif /* __ACTBL1_H__ */ 1939