1 /****************************************************************************** 2 * 3 * Name: actbl1.h - Additional ACPI table definitions 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2020, 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 Definition */ 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_SUCCESS = 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 typedef struct acpi_gtdt_el2 1215 { 1216 UINT32 VirtualEL2TimerGsiv; 1217 UINT32 VirtualEL2TimerFlags; 1218 } ACPI_GTDT_EL2; 1219 1220 1221 /* Common GTDT subtable header */ 1222 1223 typedef struct acpi_gtdt_header 1224 { 1225 UINT8 Type; 1226 UINT16 Length; 1227 1228 } ACPI_GTDT_HEADER; 1229 1230 /* Values for GTDT subtable type above */ 1231 1232 enum AcpiGtdtType 1233 { 1234 ACPI_GTDT_TYPE_TIMER_BLOCK = 0, 1235 ACPI_GTDT_TYPE_WATCHDOG = 1, 1236 ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 1237 }; 1238 1239 1240 /* GTDT Subtables, correspond to Type in acpi_gtdt_header */ 1241 1242 /* 0: Generic Timer Block */ 1243 1244 typedef struct acpi_gtdt_timer_block 1245 { 1246 ACPI_GTDT_HEADER Header; 1247 UINT8 Reserved; 1248 UINT64 BlockAddress; 1249 UINT32 TimerCount; 1250 UINT32 TimerOffset; 1251 1252 } ACPI_GTDT_TIMER_BLOCK; 1253 1254 /* Timer Sub-Structure, one per timer */ 1255 1256 typedef struct acpi_gtdt_timer_entry 1257 { 1258 UINT8 FrameNumber; 1259 UINT8 Reserved[3]; 1260 UINT64 BaseAddress; 1261 UINT64 El0BaseAddress; 1262 UINT32 TimerInterrupt; 1263 UINT32 TimerFlags; 1264 UINT32 VirtualTimerInterrupt; 1265 UINT32 VirtualTimerFlags; 1266 UINT32 CommonFlags; 1267 1268 } ACPI_GTDT_TIMER_ENTRY; 1269 1270 /* Flag Definitions: TimerFlags and VirtualTimerFlags above */ 1271 1272 #define ACPI_GTDT_GT_IRQ_MODE (1) 1273 #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) 1274 1275 /* Flag Definitions: CommonFlags above */ 1276 1277 #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) 1278 #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) 1279 1280 1281 /* 1: SBSA Generic Watchdog Structure */ 1282 1283 typedef struct acpi_gtdt_watchdog 1284 { 1285 ACPI_GTDT_HEADER Header; 1286 UINT8 Reserved; 1287 UINT64 RefreshFrameAddress; 1288 UINT64 ControlFrameAddress; 1289 UINT32 TimerInterrupt; 1290 UINT32 TimerFlags; 1291 1292 } ACPI_GTDT_WATCHDOG; 1293 1294 /* Flag Definitions: TimerFlags above */ 1295 1296 #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) 1297 #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) 1298 #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) 1299 1300 1301 /******************************************************************************* 1302 * 1303 * HEST - Hardware Error Source Table (ACPI 4.0) 1304 * Version 1 1305 * 1306 ******************************************************************************/ 1307 1308 typedef struct acpi_table_hest 1309 { 1310 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1311 UINT32 ErrorSourceCount; 1312 1313 } ACPI_TABLE_HEST; 1314 1315 1316 /* HEST subtable header */ 1317 1318 typedef struct acpi_hest_header 1319 { 1320 UINT16 Type; 1321 UINT16 SourceId; 1322 1323 } ACPI_HEST_HEADER; 1324 1325 1326 /* Values for Type field above for subtables */ 1327 1328 enum AcpiHestTypes 1329 { 1330 ACPI_HEST_TYPE_IA32_CHECK = 0, 1331 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 1332 ACPI_HEST_TYPE_IA32_NMI = 2, 1333 ACPI_HEST_TYPE_NOT_USED3 = 3, 1334 ACPI_HEST_TYPE_NOT_USED4 = 4, 1335 ACPI_HEST_TYPE_NOT_USED5 = 5, 1336 ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 1337 ACPI_HEST_TYPE_AER_ENDPOINT = 7, 1338 ACPI_HEST_TYPE_AER_BRIDGE = 8, 1339 ACPI_HEST_TYPE_GENERIC_ERROR = 9, 1340 ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 1341 ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, 1342 ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ 1343 }; 1344 1345 1346 /* 1347 * HEST substructures contained in subtables 1348 */ 1349 1350 /* 1351 * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 1352 * ACPI_HEST_IA_CORRECTED structures. 1353 */ 1354 typedef struct acpi_hest_ia_error_bank 1355 { 1356 UINT8 BankNumber; 1357 UINT8 ClearStatusOnInit; 1358 UINT8 StatusFormat; 1359 UINT8 Reserved; 1360 UINT32 ControlRegister; 1361 UINT64 ControlData; 1362 UINT32 StatusRegister; 1363 UINT32 AddressRegister; 1364 UINT32 MiscRegister; 1365 1366 } ACPI_HEST_IA_ERROR_BANK; 1367 1368 1369 /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 1370 1371 typedef struct acpi_hest_aer_common 1372 { 1373 UINT16 Reserved1; 1374 UINT8 Flags; 1375 UINT8 Enabled; 1376 UINT32 RecordsToPreallocate; 1377 UINT32 MaxSectionsPerRecord; 1378 UINT32 Bus; /* Bus and Segment numbers */ 1379 UINT16 Device; 1380 UINT16 Function; 1381 UINT16 DeviceControl; 1382 UINT16 Reserved2; 1383 UINT32 UncorrectableMask; 1384 UINT32 UncorrectableSeverity; 1385 UINT32 CorrectableMask; 1386 UINT32 AdvancedCapabilities; 1387 1388 } ACPI_HEST_AER_COMMON; 1389 1390 /* Masks for HEST Flags fields */ 1391 1392 #define ACPI_HEST_FIRMWARE_FIRST (1) 1393 #define ACPI_HEST_GLOBAL (1<<1) 1394 #define ACPI_HEST_GHES_ASSIST (1<<2) 1395 1396 /* 1397 * Macros to access the bus/segment numbers in Bus field above: 1398 * Bus number is encoded in bits 7:0 1399 * Segment number is encoded in bits 23:8 1400 */ 1401 #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 1402 #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 1403 1404 1405 /* Hardware Error Notification */ 1406 1407 typedef struct acpi_hest_notify 1408 { 1409 UINT8 Type; 1410 UINT8 Length; 1411 UINT16 ConfigWriteEnable; 1412 UINT32 PollInterval; 1413 UINT32 Vector; 1414 UINT32 PollingThresholdValue; 1415 UINT32 PollingThresholdWindow; 1416 UINT32 ErrorThresholdValue; 1417 UINT32 ErrorThresholdWindow; 1418 1419 } ACPI_HEST_NOTIFY; 1420 1421 /* Values for Notify Type field above */ 1422 1423 enum AcpiHestNotifyTypes 1424 { 1425 ACPI_HEST_NOTIFY_POLLED = 0, 1426 ACPI_HEST_NOTIFY_EXTERNAL = 1, 1427 ACPI_HEST_NOTIFY_LOCAL = 2, 1428 ACPI_HEST_NOTIFY_SCI = 3, 1429 ACPI_HEST_NOTIFY_NMI = 4, 1430 ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 1431 ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 1432 ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 1433 ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 1434 ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 1435 ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 1436 ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ 1437 ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ 1438 }; 1439 1440 /* Values for ConfigWriteEnable bitfield above */ 1441 1442 #define ACPI_HEST_TYPE (1) 1443 #define ACPI_HEST_POLL_INTERVAL (1<<1) 1444 #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 1445 #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 1446 #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 1447 #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 1448 1449 1450 /* 1451 * HEST subtables 1452 */ 1453 1454 /* 0: IA32 Machine Check Exception */ 1455 1456 typedef struct acpi_hest_ia_machine_check 1457 { 1458 ACPI_HEST_HEADER Header; 1459 UINT16 Reserved1; 1460 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1461 UINT8 Enabled; 1462 UINT32 RecordsToPreallocate; 1463 UINT32 MaxSectionsPerRecord; 1464 UINT64 GlobalCapabilityData; 1465 UINT64 GlobalControlData; 1466 UINT8 NumHardwareBanks; 1467 UINT8 Reserved3[7]; 1468 1469 } ACPI_HEST_IA_MACHINE_CHECK; 1470 1471 1472 /* 1: IA32 Corrected Machine Check */ 1473 1474 typedef struct acpi_hest_ia_corrected 1475 { 1476 ACPI_HEST_HEADER Header; 1477 UINT16 Reserved1; 1478 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1479 UINT8 Enabled; 1480 UINT32 RecordsToPreallocate; 1481 UINT32 MaxSectionsPerRecord; 1482 ACPI_HEST_NOTIFY Notify; 1483 UINT8 NumHardwareBanks; 1484 UINT8 Reserved2[3]; 1485 1486 } ACPI_HEST_IA_CORRECTED; 1487 1488 1489 /* 2: IA32 Non-Maskable Interrupt */ 1490 1491 typedef struct acpi_hest_ia_nmi 1492 { 1493 ACPI_HEST_HEADER Header; 1494 UINT32 Reserved; 1495 UINT32 RecordsToPreallocate; 1496 UINT32 MaxSectionsPerRecord; 1497 UINT32 MaxRawDataLength; 1498 1499 } ACPI_HEST_IA_NMI; 1500 1501 1502 /* 3,4,5: Not used */ 1503 1504 /* 6: PCI Express Root Port AER */ 1505 1506 typedef struct acpi_hest_aer_root 1507 { 1508 ACPI_HEST_HEADER Header; 1509 ACPI_HEST_AER_COMMON Aer; 1510 UINT32 RootErrorCommand; 1511 1512 } ACPI_HEST_AER_ROOT; 1513 1514 1515 /* 7: PCI Express AER (AER Endpoint) */ 1516 1517 typedef struct acpi_hest_aer 1518 { 1519 ACPI_HEST_HEADER Header; 1520 ACPI_HEST_AER_COMMON Aer; 1521 1522 } ACPI_HEST_AER; 1523 1524 1525 /* 8: PCI Express/PCI-X Bridge AER */ 1526 1527 typedef struct acpi_hest_aer_bridge 1528 { 1529 ACPI_HEST_HEADER Header; 1530 ACPI_HEST_AER_COMMON Aer; 1531 UINT32 UncorrectableMask2; 1532 UINT32 UncorrectableSeverity2; 1533 UINT32 AdvancedCapabilities2; 1534 1535 } ACPI_HEST_AER_BRIDGE; 1536 1537 1538 /* 9: Generic Hardware Error Source */ 1539 1540 typedef struct acpi_hest_generic 1541 { 1542 ACPI_HEST_HEADER Header; 1543 UINT16 RelatedSourceId; 1544 UINT8 Reserved; 1545 UINT8 Enabled; 1546 UINT32 RecordsToPreallocate; 1547 UINT32 MaxSectionsPerRecord; 1548 UINT32 MaxRawDataLength; 1549 ACPI_GENERIC_ADDRESS ErrorStatusAddress; 1550 ACPI_HEST_NOTIFY Notify; 1551 UINT32 ErrorBlockLength; 1552 1553 } ACPI_HEST_GENERIC; 1554 1555 1556 /* 10: Generic Hardware Error Source, version 2 */ 1557 1558 typedef struct acpi_hest_generic_v2 1559 { 1560 ACPI_HEST_HEADER Header; 1561 UINT16 RelatedSourceId; 1562 UINT8 Reserved; 1563 UINT8 Enabled; 1564 UINT32 RecordsToPreallocate; 1565 UINT32 MaxSectionsPerRecord; 1566 UINT32 MaxRawDataLength; 1567 ACPI_GENERIC_ADDRESS ErrorStatusAddress; 1568 ACPI_HEST_NOTIFY Notify; 1569 UINT32 ErrorBlockLength; 1570 ACPI_GENERIC_ADDRESS ReadAckRegister; 1571 UINT64 ReadAckPreserve; 1572 UINT64 ReadAckWrite; 1573 1574 } ACPI_HEST_GENERIC_V2; 1575 1576 1577 /* Generic Error Status block */ 1578 1579 typedef struct acpi_hest_generic_status 1580 { 1581 UINT32 BlockStatus; 1582 UINT32 RawDataOffset; 1583 UINT32 RawDataLength; 1584 UINT32 DataLength; 1585 UINT32 ErrorSeverity; 1586 1587 } ACPI_HEST_GENERIC_STATUS; 1588 1589 /* Values for BlockStatus flags above */ 1590 1591 #define ACPI_HEST_UNCORRECTABLE (1) 1592 #define ACPI_HEST_CORRECTABLE (1<<1) 1593 #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 1594 #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 1595 #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 1596 1597 1598 /* Generic Error Data entry */ 1599 1600 typedef struct acpi_hest_generic_data 1601 { 1602 UINT8 SectionType[16]; 1603 UINT32 ErrorSeverity; 1604 UINT16 Revision; 1605 UINT8 ValidationBits; 1606 UINT8 Flags; 1607 UINT32 ErrorDataLength; 1608 UINT8 FruId[16]; 1609 UINT8 FruText[20]; 1610 1611 } ACPI_HEST_GENERIC_DATA; 1612 1613 /* Extension for revision 0x0300 */ 1614 1615 typedef struct acpi_hest_generic_data_v300 1616 { 1617 UINT8 SectionType[16]; 1618 UINT32 ErrorSeverity; 1619 UINT16 Revision; 1620 UINT8 ValidationBits; 1621 UINT8 Flags; 1622 UINT32 ErrorDataLength; 1623 UINT8 FruId[16]; 1624 UINT8 FruText[20]; 1625 UINT64 TimeStamp; 1626 1627 } ACPI_HEST_GENERIC_DATA_V300; 1628 1629 /* Values for ErrorSeverity above */ 1630 1631 #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 1632 #define ACPI_HEST_GEN_ERROR_FATAL 1 1633 #define ACPI_HEST_GEN_ERROR_CORRECTED 2 1634 #define ACPI_HEST_GEN_ERROR_NONE 3 1635 1636 /* Flags for ValidationBits above */ 1637 1638 #define ACPI_HEST_GEN_VALID_FRU_ID (1) 1639 #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 1640 #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 1641 1642 1643 /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ 1644 1645 typedef struct acpi_hest_ia_deferred_check 1646 { 1647 ACPI_HEST_HEADER Header; 1648 UINT16 Reserved1; 1649 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1650 UINT8 Enabled; 1651 UINT32 RecordsToPreallocate; 1652 UINT32 MaxSectionsPerRecord; 1653 ACPI_HEST_NOTIFY Notify; 1654 UINT8 NumHardwareBanks; 1655 UINT8 Reserved2[3]; 1656 1657 } ACPI_HEST_IA_DEFERRED_CHECK; 1658 1659 1660 /******************************************************************************* 1661 * 1662 * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) 1663 * Version 1 1664 * 1665 ******************************************************************************/ 1666 1667 typedef struct acpi_table_hmat 1668 { 1669 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1670 UINT32 Reserved; 1671 1672 } ACPI_TABLE_HMAT; 1673 1674 1675 /* Values for HMAT structure types */ 1676 1677 enum AcpiHmatType 1678 { 1679 ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subsystem address range */ 1680 ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ 1681 ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ 1682 ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 1683 }; 1684 1685 typedef struct acpi_hmat_structure 1686 { 1687 UINT16 Type; 1688 UINT16 Reserved; 1689 UINT32 Length; 1690 1691 } ACPI_HMAT_STRUCTURE; 1692 1693 1694 /* 1695 * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE 1696 */ 1697 1698 /* 0: Memory proximity domain attributes */ 1699 1700 typedef struct acpi_hmat_proximity_domain 1701 { 1702 ACPI_HMAT_STRUCTURE Header; 1703 UINT16 Flags; 1704 UINT16 Reserved1; 1705 UINT32 ProcessorPD; /* Processor proximity domain */ 1706 UINT32 MemoryPD; /* Memory proximity domain */ 1707 UINT32 Reserved2; 1708 UINT64 Reserved3; 1709 UINT64 Reserved4; 1710 1711 } ACPI_HMAT_PROXIMITY_DOMAIN; 1712 1713 /* Masks for Flags field above */ 1714 1715 #define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ 1716 #define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ 1717 #define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ 1718 1719 1720 /* 1: System locality latency and bandwidth information */ 1721 1722 typedef struct acpi_hmat_locality 1723 { 1724 ACPI_HMAT_STRUCTURE Header; 1725 UINT8 Flags; 1726 UINT8 DataType; 1727 UINT16 Reserved1; 1728 UINT32 NumberOfInitiatorPDs; 1729 UINT32 NumberOfTargetPDs; 1730 UINT32 Reserved2; 1731 UINT64 EntryBaseUnit; 1732 1733 } ACPI_HMAT_LOCALITY; 1734 1735 /* Masks for Flags field above */ 1736 1737 #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) 1738 1739 /* Values for Memory Hierarchy flag */ 1740 1741 #define ACPI_HMAT_MEMORY 0 1742 #define ACPI_HMAT_LAST_LEVEL_CACHE 1 1743 #define ACPI_HMAT_1ST_LEVEL_CACHE 2 1744 #define ACPI_HMAT_2ND_LEVEL_CACHE 3 1745 #define ACPI_HMAT_3RD_LEVEL_CACHE 4 1746 1747 /* Values for DataType field above */ 1748 1749 #define ACPI_HMAT_ACCESS_LATENCY 0 1750 #define ACPI_HMAT_READ_LATENCY 1 1751 #define ACPI_HMAT_WRITE_LATENCY 2 1752 #define ACPI_HMAT_ACCESS_BANDWIDTH 3 1753 #define ACPI_HMAT_READ_BANDWIDTH 4 1754 #define ACPI_HMAT_WRITE_BANDWIDTH 5 1755 1756 1757 /* 2: Memory side cache information */ 1758 1759 typedef struct acpi_hmat_cache 1760 { 1761 ACPI_HMAT_STRUCTURE Header; 1762 UINT32 MemoryPD; 1763 UINT32 Reserved1; 1764 UINT64 CacheSize; 1765 UINT32 CacheAttributes; 1766 UINT16 Reserved2; 1767 UINT16 NumberOfSMBIOSHandles; 1768 1769 } ACPI_HMAT_CACHE; 1770 1771 /* Masks for CacheAttributes field above */ 1772 1773 #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) 1774 #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) 1775 #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) 1776 #define ACPI_HMAT_WRITE_POLICY (0x0000F000) 1777 #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) 1778 1779 /* Values for cache associativity flag */ 1780 1781 #define ACPI_HMAT_CA_NONE (0) 1782 #define ACPI_HMAT_CA_DIRECT_MAPPED (1) 1783 #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) 1784 1785 /* Values for write policy flag */ 1786 1787 #define ACPI_HMAT_CP_NONE (0) 1788 #define ACPI_HMAT_CP_WB (1) 1789 #define ACPI_HMAT_CP_WT (2) 1790 1791 1792 /******************************************************************************* 1793 * 1794 * HPET - High Precision Event Timer table 1795 * Version 1 1796 * 1797 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", 1798 * Version 1.0a, October 2004 1799 * 1800 ******************************************************************************/ 1801 1802 typedef struct acpi_table_hpet 1803 { 1804 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1805 UINT32 Id; /* Hardware ID of event timer block */ 1806 ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ 1807 UINT8 Sequence; /* HPET sequence number */ 1808 UINT16 MinimumTick; /* Main counter min tick, periodic mode */ 1809 UINT8 Flags; 1810 1811 } ACPI_TABLE_HPET; 1812 1813 /* Masks for Flags field above */ 1814 1815 #define ACPI_HPET_PAGE_PROTECT_MASK (3) 1816 1817 /* Values for Page Protect flags */ 1818 1819 enum AcpiHpetPageProtect 1820 { 1821 ACPI_HPET_NO_PAGE_PROTECT = 0, 1822 ACPI_HPET_PAGE_PROTECT4 = 1, 1823 ACPI_HPET_PAGE_PROTECT64 = 2 1824 }; 1825 1826 1827 /******************************************************************************* 1828 * 1829 * IBFT - Boot Firmware Table 1830 * Version 1 1831 * 1832 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b 1833 * Specification", Version 1.01, March 1, 2007 1834 * 1835 * Note: It appears that this table is not intended to appear in the RSDT/XSDT. 1836 * Therefore, it is not currently supported by the disassembler. 1837 * 1838 ******************************************************************************/ 1839 1840 typedef struct acpi_table_ibft 1841 { 1842 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1843 UINT8 Reserved[12]; 1844 1845 } ACPI_TABLE_IBFT; 1846 1847 1848 /* IBFT common subtable header */ 1849 1850 typedef struct acpi_ibft_header 1851 { 1852 UINT8 Type; 1853 UINT8 Version; 1854 UINT16 Length; 1855 UINT8 Index; 1856 UINT8 Flags; 1857 1858 } ACPI_IBFT_HEADER; 1859 1860 /* Values for Type field above */ 1861 1862 enum AcpiIbftType 1863 { 1864 ACPI_IBFT_TYPE_NOT_USED = 0, 1865 ACPI_IBFT_TYPE_CONTROL = 1, 1866 ACPI_IBFT_TYPE_INITIATOR = 2, 1867 ACPI_IBFT_TYPE_NIC = 3, 1868 ACPI_IBFT_TYPE_TARGET = 4, 1869 ACPI_IBFT_TYPE_EXTENSIONS = 5, 1870 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 1871 }; 1872 1873 1874 /* IBFT subtables */ 1875 1876 typedef struct acpi_ibft_control 1877 { 1878 ACPI_IBFT_HEADER Header; 1879 UINT16 Extensions; 1880 UINT16 InitiatorOffset; 1881 UINT16 Nic0Offset; 1882 UINT16 Target0Offset; 1883 UINT16 Nic1Offset; 1884 UINT16 Target1Offset; 1885 1886 } ACPI_IBFT_CONTROL; 1887 1888 typedef struct acpi_ibft_initiator 1889 { 1890 ACPI_IBFT_HEADER Header; 1891 UINT8 SnsServer[16]; 1892 UINT8 SlpServer[16]; 1893 UINT8 PrimaryServer[16]; 1894 UINT8 SecondaryServer[16]; 1895 UINT16 NameLength; 1896 UINT16 NameOffset; 1897 1898 } ACPI_IBFT_INITIATOR; 1899 1900 typedef struct acpi_ibft_nic 1901 { 1902 ACPI_IBFT_HEADER Header; 1903 UINT8 IpAddress[16]; 1904 UINT8 SubnetMaskPrefix; 1905 UINT8 Origin; 1906 UINT8 Gateway[16]; 1907 UINT8 PrimaryDns[16]; 1908 UINT8 SecondaryDns[16]; 1909 UINT8 Dhcp[16]; 1910 UINT16 Vlan; 1911 UINT8 MacAddress[6]; 1912 UINT16 PciAddress; 1913 UINT16 NameLength; 1914 UINT16 NameOffset; 1915 1916 } ACPI_IBFT_NIC; 1917 1918 typedef struct acpi_ibft_target 1919 { 1920 ACPI_IBFT_HEADER Header; 1921 UINT8 TargetIpAddress[16]; 1922 UINT16 TargetIpSocket; 1923 UINT8 TargetBootLun[8]; 1924 UINT8 ChapType; 1925 UINT8 NicAssociation; 1926 UINT16 TargetNameLength; 1927 UINT16 TargetNameOffset; 1928 UINT16 ChapNameLength; 1929 UINT16 ChapNameOffset; 1930 UINT16 ChapSecretLength; 1931 UINT16 ChapSecretOffset; 1932 UINT16 ReverseChapNameLength; 1933 UINT16 ReverseChapNameOffset; 1934 UINT16 ReverseChapSecretLength; 1935 UINT16 ReverseChapSecretOffset; 1936 1937 } ACPI_IBFT_TARGET; 1938 1939 1940 /* Reset to default packing */ 1941 1942 #pragma pack() 1943 1944 #endif /* __ACTBL1_H__ */ 1945