1 /****************************************************************************** 2 * 3 * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2016, 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 __ACTBL2_H__ 45 #define __ACTBL2_H__ 46 47 48 /******************************************************************************* 49 * 50 * Additional ACPI Tables (2) 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 * Generally, the tables in this file are defined by third-party specifications, 56 * and are not defined directly by the ACPI specification itself. 57 * 58 ******************************************************************************/ 59 60 61 /* 62 * Values for description table header signatures for tables defined in this 63 * file. Useful because they make it more difficult to inadvertently type in 64 * the wrong signature. 65 */ 66 #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ 67 #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag 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_HPET "HPET" /* High Precision Event Timer table */ 73 #define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ 74 #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 75 #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 76 #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 77 #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 78 #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 79 #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 80 #define ACPI_SIG_MTMR "MTMR" /* MID Timer table */ 81 #define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ 82 #define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ 83 #define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ 84 #define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ 85 #define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ 86 #define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ 87 #define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ 88 #define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ 89 #define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ 90 #define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ 91 #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ 92 93 #ifdef ACPI_UNDEFINED_TABLES 94 /* 95 * These tables have been seen in the field, but no definition has been found 96 */ 97 #define ACPI_SIG_ATKG "ATKG" 98 #define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ 99 #define ACPI_SIG_IEIT "IEIT" 100 #endif 101 102 /* 103 * All tables must be byte-packed to match the ACPI specification, since 104 * the tables are provided by the system BIOS. 105 */ 106 #pragma pack(1) 107 108 /* 109 * Note: C bitfields are not used for this reason: 110 * 111 * "Bitfields are great and easy to read, but unfortunately the C language 112 * does not specify the layout of bitfields in memory, which means they are 113 * essentially useless for dealing with packed data in on-disk formats or 114 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 115 * this decision was a design error in C. Ritchie could have picked an order 116 * and stuck with it." Norman Ramsey. 117 * See http://stackoverflow.com/a/1053662/41661 118 */ 119 120 121 /******************************************************************************* 122 * 123 * ASF - Alert Standard Format table (Signature "ASF!") 124 * Revision 0x10 125 * 126 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 127 * 128 ******************************************************************************/ 129 130 typedef struct acpi_table_asf 131 { 132 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 133 134 } ACPI_TABLE_ASF; 135 136 137 /* ASF subtable header */ 138 139 typedef struct acpi_asf_header 140 { 141 UINT8 Type; 142 UINT8 Reserved; 143 UINT16 Length; 144 145 } ACPI_ASF_HEADER; 146 147 148 /* Values for Type field above */ 149 150 enum AcpiAsfType 151 { 152 ACPI_ASF_TYPE_INFO = 0, 153 ACPI_ASF_TYPE_ALERT = 1, 154 ACPI_ASF_TYPE_CONTROL = 2, 155 ACPI_ASF_TYPE_BOOT = 3, 156 ACPI_ASF_TYPE_ADDRESS = 4, 157 ACPI_ASF_TYPE_RESERVED = 5 158 }; 159 160 /* 161 * ASF subtables 162 */ 163 164 /* 0: ASF Information */ 165 166 typedef struct acpi_asf_info 167 { 168 ACPI_ASF_HEADER Header; 169 UINT8 MinResetValue; 170 UINT8 MinPollInterval; 171 UINT16 SystemId; 172 UINT32 MfgId; 173 UINT8 Flags; 174 UINT8 Reserved2[3]; 175 176 } ACPI_ASF_INFO; 177 178 /* Masks for Flags field above */ 179 180 #define ACPI_ASF_SMBUS_PROTOCOLS (1) 181 182 183 /* 1: ASF Alerts */ 184 185 typedef struct acpi_asf_alert 186 { 187 ACPI_ASF_HEADER Header; 188 UINT8 AssertMask; 189 UINT8 DeassertMask; 190 UINT8 Alerts; 191 UINT8 DataLength; 192 193 } ACPI_ASF_ALERT; 194 195 typedef struct acpi_asf_alert_data 196 { 197 UINT8 Address; 198 UINT8 Command; 199 UINT8 Mask; 200 UINT8 Value; 201 UINT8 SensorType; 202 UINT8 Type; 203 UINT8 Offset; 204 UINT8 SourceType; 205 UINT8 Severity; 206 UINT8 SensorNumber; 207 UINT8 Entity; 208 UINT8 Instance; 209 210 } ACPI_ASF_ALERT_DATA; 211 212 213 /* 2: ASF Remote Control */ 214 215 typedef struct acpi_asf_remote 216 { 217 ACPI_ASF_HEADER Header; 218 UINT8 Controls; 219 UINT8 DataLength; 220 UINT16 Reserved2; 221 222 } ACPI_ASF_REMOTE; 223 224 typedef struct acpi_asf_control_data 225 { 226 UINT8 Function; 227 UINT8 Address; 228 UINT8 Command; 229 UINT8 Value; 230 231 } ACPI_ASF_CONTROL_DATA; 232 233 234 /* 3: ASF RMCP Boot Options */ 235 236 typedef struct acpi_asf_rmcp 237 { 238 ACPI_ASF_HEADER Header; 239 UINT8 Capabilities[7]; 240 UINT8 CompletionCode; 241 UINT32 EnterpriseId; 242 UINT8 Command; 243 UINT16 Parameter; 244 UINT16 BootOptions; 245 UINT16 OemParameters; 246 247 } ACPI_ASF_RMCP; 248 249 250 /* 4: ASF Address */ 251 252 typedef struct acpi_asf_address 253 { 254 ACPI_ASF_HEADER Header; 255 UINT8 EpromAddress; 256 UINT8 Devices; 257 258 } ACPI_ASF_ADDRESS; 259 260 261 /******************************************************************************* 262 * 263 * BOOT - Simple Boot Flag Table 264 * Version 1 265 * 266 * Conforms to the "Simple Boot Flag Specification", Version 2.1 267 * 268 ******************************************************************************/ 269 270 typedef struct acpi_table_boot 271 { 272 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 273 UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ 274 UINT8 Reserved[3]; 275 276 } ACPI_TABLE_BOOT; 277 278 279 /******************************************************************************* 280 * 281 * CSRT - Core System Resource Table 282 * Version 0 283 * 284 * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 285 * 286 ******************************************************************************/ 287 288 typedef struct acpi_table_csrt 289 { 290 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 291 292 } ACPI_TABLE_CSRT; 293 294 295 /* Resource Group subtable */ 296 297 typedef struct acpi_csrt_group 298 { 299 UINT32 Length; 300 UINT32 VendorId; 301 UINT32 SubvendorId; 302 UINT16 DeviceId; 303 UINT16 SubdeviceId; 304 UINT16 Revision; 305 UINT16 Reserved; 306 UINT32 SharedInfoLength; 307 308 /* Shared data immediately follows (Length = SharedInfoLength) */ 309 310 } ACPI_CSRT_GROUP; 311 312 /* Shared Info subtable */ 313 314 typedef struct acpi_csrt_shared_info 315 { 316 UINT16 MajorVersion; 317 UINT16 MinorVersion; 318 UINT32 MmioBaseLow; 319 UINT32 MmioBaseHigh; 320 UINT32 GsiInterrupt; 321 UINT8 InterruptPolarity; 322 UINT8 InterruptMode; 323 UINT8 NumChannels; 324 UINT8 DmaAddressWidth; 325 UINT16 BaseRequestLine; 326 UINT16 NumHandshakeSignals; 327 UINT32 MaxBlockSize; 328 329 /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ 330 331 } ACPI_CSRT_SHARED_INFO; 332 333 /* Resource Descriptor subtable */ 334 335 typedef struct acpi_csrt_descriptor 336 { 337 UINT32 Length; 338 UINT16 Type; 339 UINT16 Subtype; 340 UINT32 Uid; 341 342 /* Resource-specific information immediately follows */ 343 344 } ACPI_CSRT_DESCRIPTOR; 345 346 347 /* Resource Types */ 348 349 #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 350 #define ACPI_CSRT_TYPE_TIMER 0x0002 351 #define ACPI_CSRT_TYPE_DMA 0x0003 352 353 /* Resource Subtypes */ 354 355 #define ACPI_CSRT_XRUPT_LINE 0x0000 356 #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 357 #define ACPI_CSRT_TIMER 0x0000 358 #define ACPI_CSRT_DMA_CHANNEL 0x0000 359 #define ACPI_CSRT_DMA_CONTROLLER 0x0001 360 361 362 /******************************************************************************* 363 * 364 * DBG2 - Debug Port Table 2 365 * Version 0 (Both main table and subtables) 366 * 367 * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 368 * 369 ******************************************************************************/ 370 371 typedef struct acpi_table_dbg2 372 { 373 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 374 UINT32 InfoOffset; 375 UINT32 InfoCount; 376 377 } ACPI_TABLE_DBG2; 378 379 380 typedef struct acpi_dbg2_header 381 { 382 UINT32 InfoOffset; 383 UINT32 InfoCount; 384 385 } ACPI_DBG2_HEADER; 386 387 388 /* Debug Device Information Subtable */ 389 390 typedef struct acpi_dbg2_device 391 { 392 UINT8 Revision; 393 UINT16 Length; 394 UINT8 RegisterCount; /* Number of BaseAddress registers */ 395 UINT16 NamepathLength; 396 UINT16 NamepathOffset; 397 UINT16 OemDataLength; 398 UINT16 OemDataOffset; 399 UINT16 PortType; 400 UINT16 PortSubtype; 401 UINT16 Reserved; 402 UINT16 BaseAddressOffset; 403 UINT16 AddressSizeOffset; 404 /* 405 * Data that follows: 406 * BaseAddress (required) - Each in 12-byte Generic Address Structure format. 407 * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. 408 * Namepath (required) - Null terminated string. Single dot if not supported. 409 * OemData (optional) - Length is OemDataLength. 410 */ 411 } ACPI_DBG2_DEVICE; 412 413 /* Types for PortType field above */ 414 415 #define ACPI_DBG2_SERIAL_PORT 0x8000 416 #define ACPI_DBG2_1394_PORT 0x8001 417 #define ACPI_DBG2_USB_PORT 0x8002 418 #define ACPI_DBG2_NET_PORT 0x8003 419 420 /* Subtypes for PortSubtype field above */ 421 422 #define ACPI_DBG2_16550_COMPATIBLE 0x0000 423 #define ACPI_DBG2_16550_SUBSET 0x0001 424 #define ACPI_DBG2_ARM_PL011 0x0003 425 #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D 426 #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E 427 #define ACPI_DBG2_ARM_DCC 0x000F 428 #define ACPI_DBG2_BCM2835 0x0010 429 430 #define ACPI_DBG2_1394_STANDARD 0x0000 431 432 #define ACPI_DBG2_USB_XHCI 0x0000 433 #define ACPI_DBG2_USB_EHCI 0x0001 434 435 436 /******************************************************************************* 437 * 438 * DBGP - Debug Port table 439 * Version 1 440 * 441 * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 442 * 443 ******************************************************************************/ 444 445 typedef struct acpi_table_dbgp 446 { 447 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 448 UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ 449 UINT8 Reserved[3]; 450 ACPI_GENERIC_ADDRESS DebugPort; 451 452 } ACPI_TABLE_DBGP; 453 454 455 /******************************************************************************* 456 * 457 * DMAR - DMA Remapping table 458 * Version 1 459 * 460 * Conforms to "Intel Virtualization Technology for Directed I/O", 461 * Version 2.3, October 2014 462 * 463 ******************************************************************************/ 464 465 typedef struct acpi_table_dmar 466 { 467 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 468 UINT8 Width; /* Host Address Width */ 469 UINT8 Flags; 470 UINT8 Reserved[10]; 471 472 } ACPI_TABLE_DMAR; 473 474 /* Masks for Flags field above */ 475 476 #define ACPI_DMAR_INTR_REMAP (1) 477 #define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) 478 #define ACPI_DMAR_X2APIC_MODE (1<<2) 479 480 481 /* DMAR subtable header */ 482 483 typedef struct acpi_dmar_header 484 { 485 UINT16 Type; 486 UINT16 Length; 487 488 } ACPI_DMAR_HEADER; 489 490 /* Values for subtable type in ACPI_DMAR_HEADER */ 491 492 enum AcpiDmarType 493 { 494 ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, 495 ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, 496 ACPI_DMAR_TYPE_ROOT_ATS = 2, 497 ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, 498 ACPI_DMAR_TYPE_NAMESPACE = 4, 499 ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 500 }; 501 502 503 /* DMAR Device Scope structure */ 504 505 typedef struct acpi_dmar_device_scope 506 { 507 UINT8 EntryType; 508 UINT8 Length; 509 UINT16 Reserved; 510 UINT8 EnumerationId; 511 UINT8 Bus; 512 513 } ACPI_DMAR_DEVICE_SCOPE; 514 515 /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ 516 517 enum AcpiDmarScopeType 518 { 519 ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, 520 ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, 521 ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, 522 ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, 523 ACPI_DMAR_SCOPE_TYPE_HPET = 4, 524 ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, 525 ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 526 }; 527 528 typedef struct acpi_dmar_pci_path 529 { 530 UINT8 Device; 531 UINT8 Function; 532 533 } ACPI_DMAR_PCI_PATH; 534 535 536 /* 537 * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER 538 */ 539 540 /* 0: Hardware Unit Definition */ 541 542 typedef struct acpi_dmar_hardware_unit 543 { 544 ACPI_DMAR_HEADER Header; 545 UINT8 Flags; 546 UINT8 Reserved; 547 UINT16 Segment; 548 UINT64 Address; /* Register Base Address */ 549 550 } ACPI_DMAR_HARDWARE_UNIT; 551 552 /* Masks for Flags field above */ 553 554 #define ACPI_DMAR_INCLUDE_ALL (1) 555 556 557 /* 1: Reserved Memory Defininition */ 558 559 typedef struct acpi_dmar_reserved_memory 560 { 561 ACPI_DMAR_HEADER Header; 562 UINT16 Reserved; 563 UINT16 Segment; 564 UINT64 BaseAddress; /* 4K aligned base address */ 565 UINT64 EndAddress; /* 4K aligned limit address */ 566 567 } ACPI_DMAR_RESERVED_MEMORY; 568 569 /* Masks for Flags field above */ 570 571 #define ACPI_DMAR_ALLOW_ALL (1) 572 573 574 /* 2: Root Port ATS Capability Reporting Structure */ 575 576 typedef struct acpi_dmar_atsr 577 { 578 ACPI_DMAR_HEADER Header; 579 UINT8 Flags; 580 UINT8 Reserved; 581 UINT16 Segment; 582 583 } ACPI_DMAR_ATSR; 584 585 /* Masks for Flags field above */ 586 587 #define ACPI_DMAR_ALL_PORTS (1) 588 589 590 /* 3: Remapping Hardware Static Affinity Structure */ 591 592 typedef struct acpi_dmar_rhsa 593 { 594 ACPI_DMAR_HEADER Header; 595 UINT32 Reserved; 596 UINT64 BaseAddress; 597 UINT32 ProximityDomain; 598 599 } ACPI_DMAR_RHSA; 600 601 602 /* 4: ACPI Namespace Device Declaration Structure */ 603 604 typedef struct acpi_dmar_andd 605 { 606 ACPI_DMAR_HEADER Header; 607 UINT8 Reserved[3]; 608 UINT8 DeviceNumber; 609 char DeviceName[1]; 610 611 } ACPI_DMAR_ANDD; 612 613 614 /******************************************************************************* 615 * 616 * HPET - High Precision Event Timer table 617 * Version 1 618 * 619 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", 620 * Version 1.0a, October 2004 621 * 622 ******************************************************************************/ 623 624 typedef struct acpi_table_hpet 625 { 626 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 627 UINT32 Id; /* Hardware ID of event timer block */ 628 ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ 629 UINT8 Sequence; /* HPET sequence number */ 630 UINT16 MinimumTick; /* Main counter min tick, periodic mode */ 631 UINT8 Flags; 632 633 } ACPI_TABLE_HPET; 634 635 /* Masks for Flags field above */ 636 637 #define ACPI_HPET_PAGE_PROTECT_MASK (3) 638 639 /* Values for Page Protect flags */ 640 641 enum AcpiHpetPageProtect 642 { 643 ACPI_HPET_NO_PAGE_PROTECT = 0, 644 ACPI_HPET_PAGE_PROTECT4 = 1, 645 ACPI_HPET_PAGE_PROTECT64 = 2 646 }; 647 648 649 /******************************************************************************* 650 * 651 * IBFT - Boot Firmware Table 652 * Version 1 653 * 654 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b 655 * Specification", Version 1.01, March 1, 2007 656 * 657 * Note: It appears that this table is not intended to appear in the RSDT/XSDT. 658 * Therefore, it is not currently supported by the disassembler. 659 * 660 ******************************************************************************/ 661 662 typedef struct acpi_table_ibft 663 { 664 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 665 UINT8 Reserved[12]; 666 667 } ACPI_TABLE_IBFT; 668 669 670 /* IBFT common subtable header */ 671 672 typedef struct acpi_ibft_header 673 { 674 UINT8 Type; 675 UINT8 Version; 676 UINT16 Length; 677 UINT8 Index; 678 UINT8 Flags; 679 680 } ACPI_IBFT_HEADER; 681 682 /* Values for Type field above */ 683 684 enum AcpiIbftType 685 { 686 ACPI_IBFT_TYPE_NOT_USED = 0, 687 ACPI_IBFT_TYPE_CONTROL = 1, 688 ACPI_IBFT_TYPE_INITIATOR = 2, 689 ACPI_IBFT_TYPE_NIC = 3, 690 ACPI_IBFT_TYPE_TARGET = 4, 691 ACPI_IBFT_TYPE_EXTENSIONS = 5, 692 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 693 }; 694 695 696 /* IBFT subtables */ 697 698 typedef struct acpi_ibft_control 699 { 700 ACPI_IBFT_HEADER Header; 701 UINT16 Extensions; 702 UINT16 InitiatorOffset; 703 UINT16 Nic0Offset; 704 UINT16 Target0Offset; 705 UINT16 Nic1Offset; 706 UINT16 Target1Offset; 707 708 } ACPI_IBFT_CONTROL; 709 710 typedef struct acpi_ibft_initiator 711 { 712 ACPI_IBFT_HEADER Header; 713 UINT8 SnsServer[16]; 714 UINT8 SlpServer[16]; 715 UINT8 PrimaryServer[16]; 716 UINT8 SecondaryServer[16]; 717 UINT16 NameLength; 718 UINT16 NameOffset; 719 720 } ACPI_IBFT_INITIATOR; 721 722 typedef struct acpi_ibft_nic 723 { 724 ACPI_IBFT_HEADER Header; 725 UINT8 IpAddress[16]; 726 UINT8 SubnetMaskPrefix; 727 UINT8 Origin; 728 UINT8 Gateway[16]; 729 UINT8 PrimaryDns[16]; 730 UINT8 SecondaryDns[16]; 731 UINT8 Dhcp[16]; 732 UINT16 Vlan; 733 UINT8 MacAddress[6]; 734 UINT16 PciAddress; 735 UINT16 NameLength; 736 UINT16 NameOffset; 737 738 } ACPI_IBFT_NIC; 739 740 typedef struct acpi_ibft_target 741 { 742 ACPI_IBFT_HEADER Header; 743 UINT8 TargetIpAddress[16]; 744 UINT16 TargetIpSocket; 745 UINT8 TargetBootLun[8]; 746 UINT8 ChapType; 747 UINT8 NicAssociation; 748 UINT16 TargetNameLength; 749 UINT16 TargetNameOffset; 750 UINT16 ChapNameLength; 751 UINT16 ChapNameOffset; 752 UINT16 ChapSecretLength; 753 UINT16 ChapSecretOffset; 754 UINT16 ReverseChapNameLength; 755 UINT16 ReverseChapNameOffset; 756 UINT16 ReverseChapSecretLength; 757 UINT16 ReverseChapSecretOffset; 758 759 } ACPI_IBFT_TARGET; 760 761 762 /******************************************************************************* 763 * 764 * IORT - IO Remapping Table 765 * 766 * Conforms to "IO Remapping Table System Software on ARM Platforms", 767 * Document number: ARM DEN 0049B, October 2015 768 * 769 ******************************************************************************/ 770 771 typedef struct acpi_table_iort 772 { 773 ACPI_TABLE_HEADER Header; 774 UINT32 NodeCount; 775 UINT32 NodeOffset; 776 UINT32 Reserved; 777 778 } ACPI_TABLE_IORT; 779 780 781 /* 782 * IORT subtables 783 */ 784 typedef struct acpi_iort_node 785 { 786 UINT8 Type; 787 UINT16 Length; 788 UINT8 Revision; 789 UINT32 Reserved; 790 UINT32 MappingCount; 791 UINT32 MappingOffset; 792 char NodeData[1]; 793 794 } ACPI_IORT_NODE; 795 796 /* Values for subtable Type above */ 797 798 enum AcpiIortNodeType 799 { 800 ACPI_IORT_NODE_ITS_GROUP = 0x00, 801 ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 802 ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 803 ACPI_IORT_NODE_SMMU = 0x03, 804 ACPI_IORT_NODE_SMMU_V3 = 0x04 805 }; 806 807 808 typedef struct acpi_iort_id_mapping 809 { 810 UINT32 InputBase; /* Lowest value in input range */ 811 UINT32 IdCount; /* Number of IDs */ 812 UINT32 OutputBase; /* Lowest value in output range */ 813 UINT32 OutputReference; /* A reference to the output node */ 814 UINT32 Flags; 815 816 } ACPI_IORT_ID_MAPPING; 817 818 /* Masks for Flags field above for IORT subtable */ 819 820 #define ACPI_IORT_ID_SINGLE_MAPPING (1) 821 822 823 typedef struct acpi_iort_memory_access 824 { 825 UINT32 CacheCoherency; 826 UINT8 Hints; 827 UINT16 Reserved; 828 UINT8 MemoryFlags; 829 830 } ACPI_IORT_MEMORY_ACCESS; 831 832 /* Values for CacheCoherency field above */ 833 834 #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 835 #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 836 837 /* Masks for Hints field above */ 838 839 #define ACPI_IORT_HT_TRANSIENT (1) 840 #define ACPI_IORT_HT_WRITE (1<<1) 841 #define ACPI_IORT_HT_READ (1<<2) 842 #define ACPI_IORT_HT_OVERRIDE (1<<3) 843 844 /* Masks for MemoryFlags field above */ 845 846 #define ACPI_IORT_MF_COHERENCY (1) 847 #define ACPI_IORT_MF_ATTRIBUTES (1<<1) 848 849 850 /* 851 * IORT node specific subtables 852 */ 853 typedef struct acpi_iort_its_group 854 { 855 UINT32 ItsCount; 856 UINT32 Identifiers[1]; /* GIC ITS identifier arrary */ 857 858 } ACPI_IORT_ITS_GROUP; 859 860 861 typedef struct acpi_iort_named_component 862 { 863 UINT32 NodeFlags; 864 UINT64 MemoryProperties; /* Memory access properties */ 865 UINT8 MemoryAddressLimit; /* Memory address size limit */ 866 char DeviceName[1]; /* Path of namespace object */ 867 868 } ACPI_IORT_NAMED_COMPONENT; 869 870 871 typedef struct acpi_iort_root_complex 872 { 873 UINT64 MemoryProperties; /* Memory access properties */ 874 UINT32 AtsAttribute; 875 UINT32 PciSegmentNumber; 876 877 } ACPI_IORT_ROOT_COMPLEX; 878 879 /* Values for AtsAttribute field above */ 880 881 #define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ 882 #define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ 883 884 885 typedef struct acpi_iort_smmu 886 { 887 UINT64 BaseAddress; /* SMMU base address */ 888 UINT64 Span; /* Length of memory range */ 889 UINT32 Model; 890 UINT32 Flags; 891 UINT32 GlobalInterruptOffset; 892 UINT32 ContextInterruptCount; 893 UINT32 ContextInterruptOffset; 894 UINT32 PmuInterruptCount; 895 UINT32 PmuInterruptOffset; 896 UINT64 Interrupts[1]; /* Interrupt array */ 897 898 } ACPI_IORT_SMMU; 899 900 /* Values for Model field above */ 901 902 #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 903 #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 904 #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 905 #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 906 907 /* Masks for Flags field above */ 908 909 #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 910 #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 911 912 913 typedef struct acpi_iort_smmu_v3 914 { 915 UINT64 BaseAddress; /* SMMUv3 base address */ 916 UINT32 Flags; 917 UINT32 Reserved; 918 UINT64 VatosAddress; 919 UINT32 Model; /* O: generic SMMUv3 */ 920 UINT32 EventGsiv; 921 UINT32 PriGsiv; 922 UINT32 GerrGsiv; 923 UINT32 SyncGsiv; 924 925 } ACPI_IORT_SMMU_V3; 926 927 /* Masks for Flags field above */ 928 929 #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 930 #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1) 931 932 933 /******************************************************************************* 934 * 935 * IVRS - I/O Virtualization Reporting Structure 936 * Version 1 937 * 938 * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 939 * Revision 1.26, February 2009. 940 * 941 ******************************************************************************/ 942 943 typedef struct acpi_table_ivrs 944 { 945 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 946 UINT32 Info; /* Common virtualization info */ 947 UINT64 Reserved; 948 949 } ACPI_TABLE_IVRS; 950 951 /* Values for Info field above */ 952 953 #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 954 #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 955 #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 956 957 958 /* IVRS subtable header */ 959 960 typedef struct acpi_ivrs_header 961 { 962 UINT8 Type; /* Subtable type */ 963 UINT8 Flags; 964 UINT16 Length; /* Subtable length */ 965 UINT16 DeviceId; /* ID of IOMMU */ 966 967 } ACPI_IVRS_HEADER; 968 969 /* Values for subtable Type above */ 970 971 enum AcpiIvrsType 972 { 973 ACPI_IVRS_TYPE_HARDWARE = 0x10, 974 ACPI_IVRS_TYPE_MEMORY1 = 0x20, 975 ACPI_IVRS_TYPE_MEMORY2 = 0x21, 976 ACPI_IVRS_TYPE_MEMORY3 = 0x22 977 }; 978 979 /* Masks for Flags field above for IVHD subtable */ 980 981 #define ACPI_IVHD_TT_ENABLE (1) 982 #define ACPI_IVHD_PASS_PW (1<<1) 983 #define ACPI_IVHD_RES_PASS_PW (1<<2) 984 #define ACPI_IVHD_ISOC (1<<3) 985 #define ACPI_IVHD_IOTLB (1<<4) 986 987 /* Masks for Flags field above for IVMD subtable */ 988 989 #define ACPI_IVMD_UNITY (1) 990 #define ACPI_IVMD_READ (1<<1) 991 #define ACPI_IVMD_WRITE (1<<2) 992 #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 993 994 995 /* 996 * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER 997 */ 998 999 /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 1000 1001 typedef struct acpi_ivrs_hardware 1002 { 1003 ACPI_IVRS_HEADER Header; 1004 UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 1005 UINT64 BaseAddress; /* IOMMU control registers */ 1006 UINT16 PciSegmentGroup; 1007 UINT16 Info; /* MSI number and unit ID */ 1008 UINT32 Reserved; 1009 1010 } ACPI_IVRS_HARDWARE; 1011 1012 /* Masks for Info field above */ 1013 1014 #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 1015 #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ 1016 1017 1018 /* 1019 * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. 1020 * Upper two bits of the Type field are the (encoded) length of the structure. 1021 * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 1022 * are reserved for future use but not defined. 1023 */ 1024 typedef struct acpi_ivrs_de_header 1025 { 1026 UINT8 Type; 1027 UINT16 Id; 1028 UINT8 DataSetting; 1029 1030 } ACPI_IVRS_DE_HEADER; 1031 1032 /* Length of device entry is in the top two bits of Type field above */ 1033 1034 #define ACPI_IVHD_ENTRY_LENGTH 0xC0 1035 1036 /* Values for device entry Type field above */ 1037 1038 enum AcpiIvrsDeviceEntryType 1039 { 1040 /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ 1041 1042 ACPI_IVRS_TYPE_PAD4 = 0, 1043 ACPI_IVRS_TYPE_ALL = 1, 1044 ACPI_IVRS_TYPE_SELECT = 2, 1045 ACPI_IVRS_TYPE_START = 3, 1046 ACPI_IVRS_TYPE_END = 4, 1047 1048 /* 8-byte device entries */ 1049 1050 ACPI_IVRS_TYPE_PAD8 = 64, 1051 ACPI_IVRS_TYPE_NOT_USED = 65, 1052 ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ 1053 ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ 1054 ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ 1055 ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ 1056 ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses ACPI_IVRS_DEVICE8C */ 1057 }; 1058 1059 /* Values for Data field above */ 1060 1061 #define ACPI_IVHD_INIT_PASS (1) 1062 #define ACPI_IVHD_EINT_PASS (1<<1) 1063 #define ACPI_IVHD_NMI_PASS (1<<2) 1064 #define ACPI_IVHD_SYSTEM_MGMT (3<<4) 1065 #define ACPI_IVHD_LINT0_PASS (1<<6) 1066 #define ACPI_IVHD_LINT1_PASS (1<<7) 1067 1068 1069 /* Types 0-4: 4-byte device entry */ 1070 1071 typedef struct acpi_ivrs_device4 1072 { 1073 ACPI_IVRS_DE_HEADER Header; 1074 1075 } ACPI_IVRS_DEVICE4; 1076 1077 /* Types 66-67: 8-byte device entry */ 1078 1079 typedef struct acpi_ivrs_device8a 1080 { 1081 ACPI_IVRS_DE_HEADER Header; 1082 UINT8 Reserved1; 1083 UINT16 UsedId; 1084 UINT8 Reserved2; 1085 1086 } ACPI_IVRS_DEVICE8A; 1087 1088 /* Types 70-71: 8-byte device entry */ 1089 1090 typedef struct acpi_ivrs_device8b 1091 { 1092 ACPI_IVRS_DE_HEADER Header; 1093 UINT32 ExtendedData; 1094 1095 } ACPI_IVRS_DEVICE8B; 1096 1097 /* Values for ExtendedData above */ 1098 1099 #define ACPI_IVHD_ATS_DISABLED (1<<31) 1100 1101 /* Type 72: 8-byte device entry */ 1102 1103 typedef struct acpi_ivrs_device8c 1104 { 1105 ACPI_IVRS_DE_HEADER Header; 1106 UINT8 Handle; 1107 UINT16 UsedId; 1108 UINT8 Variety; 1109 1110 } ACPI_IVRS_DEVICE8C; 1111 1112 /* Values for Variety field above */ 1113 1114 #define ACPI_IVHD_IOAPIC 1 1115 #define ACPI_IVHD_HPET 2 1116 1117 1118 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 1119 1120 typedef struct acpi_ivrs_memory 1121 { 1122 ACPI_IVRS_HEADER Header; 1123 UINT16 AuxData; 1124 UINT64 Reserved; 1125 UINT64 StartAddress; 1126 UINT64 MemoryLength; 1127 1128 } ACPI_IVRS_MEMORY; 1129 1130 1131 /******************************************************************************* 1132 * 1133 * LPIT - Low Power Idle Table 1134 * 1135 * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 1136 * 1137 ******************************************************************************/ 1138 1139 typedef struct acpi_table_lpit 1140 { 1141 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1142 1143 } ACPI_TABLE_LPIT; 1144 1145 1146 /* LPIT subtable header */ 1147 1148 typedef struct acpi_lpit_header 1149 { 1150 UINT32 Type; /* Subtable type */ 1151 UINT32 Length; /* Subtable length */ 1152 UINT16 UniqueId; 1153 UINT16 Reserved; 1154 UINT32 Flags; 1155 1156 } ACPI_LPIT_HEADER; 1157 1158 /* Values for subtable Type above */ 1159 1160 enum AcpiLpitType 1161 { 1162 ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 1163 ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 1164 }; 1165 1166 /* Masks for Flags field above */ 1167 1168 #define ACPI_LPIT_STATE_DISABLED (1) 1169 #define ACPI_LPIT_NO_COUNTER (1<<1) 1170 1171 /* 1172 * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER 1173 */ 1174 1175 /* 0x00: Native C-state instruction based LPI structure */ 1176 1177 typedef struct acpi_lpit_native 1178 { 1179 ACPI_LPIT_HEADER Header; 1180 ACPI_GENERIC_ADDRESS EntryTrigger; 1181 UINT32 Residency; 1182 UINT32 Latency; 1183 ACPI_GENERIC_ADDRESS ResidencyCounter; 1184 UINT64 CounterFrequency; 1185 1186 } ACPI_LPIT_NATIVE; 1187 1188 1189 /******************************************************************************* 1190 * 1191 * MCFG - PCI Memory Mapped Configuration table and subtable 1192 * Version 1 1193 * 1194 * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 1195 * 1196 ******************************************************************************/ 1197 1198 typedef struct acpi_table_mcfg 1199 { 1200 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1201 UINT8 Reserved[8]; 1202 1203 } ACPI_TABLE_MCFG; 1204 1205 1206 /* Subtable */ 1207 1208 typedef struct acpi_mcfg_allocation 1209 { 1210 UINT64 Address; /* Base address, processor-relative */ 1211 UINT16 PciSegment; /* PCI segment group number */ 1212 UINT8 StartBusNumber; /* Starting PCI Bus number */ 1213 UINT8 EndBusNumber; /* Final PCI Bus number */ 1214 UINT32 Reserved; 1215 1216 } ACPI_MCFG_ALLOCATION; 1217 1218 1219 /******************************************************************************* 1220 * 1221 * MCHI - Management Controller Host Interface Table 1222 * Version 1 1223 * 1224 * Conforms to "Management Component Transport Protocol (MCTP) Host 1225 * Interface Specification", Revision 1.0.0a, October 13, 2009 1226 * 1227 ******************************************************************************/ 1228 1229 typedef struct acpi_table_mchi 1230 { 1231 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1232 UINT8 InterfaceType; 1233 UINT8 Protocol; 1234 UINT64 ProtocolData; 1235 UINT8 InterruptType; 1236 UINT8 Gpe; 1237 UINT8 PciDeviceFlag; 1238 UINT32 GlobalInterrupt; 1239 ACPI_GENERIC_ADDRESS ControlRegister; 1240 UINT8 PciSegment; 1241 UINT8 PciBus; 1242 UINT8 PciDevice; 1243 UINT8 PciFunction; 1244 1245 } ACPI_TABLE_MCHI; 1246 1247 1248 /******************************************************************************* 1249 * 1250 * MSDM - Microsoft Data Management table 1251 * 1252 * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 1253 * November 29, 2011. Copyright 2011 Microsoft 1254 * 1255 ******************************************************************************/ 1256 1257 /* Basic MSDM table is only the common ACPI header */ 1258 1259 typedef struct acpi_table_msdm 1260 { 1261 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1262 1263 } ACPI_TABLE_MSDM; 1264 1265 1266 /******************************************************************************* 1267 * 1268 * MTMR - MID Timer Table 1269 * Version 1 1270 * 1271 * Conforms to "Simple Firmware Interface Specification", 1272 * Draft 0.8.2, Oct 19, 2010 1273 * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. 1274 * 1275 ******************************************************************************/ 1276 1277 typedef struct acpi_table_mtmr 1278 { 1279 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1280 1281 } ACPI_TABLE_MTMR; 1282 1283 /* MTMR entry */ 1284 1285 typedef struct acpi_mtmr_entry 1286 { 1287 ACPI_GENERIC_ADDRESS PhysicalAddress; 1288 UINT32 Frequency; 1289 UINT32 Irq; 1290 1291 } ACPI_MTMR_ENTRY; 1292 1293 1294 /******************************************************************************* 1295 * 1296 * SLIC - Software Licensing Description Table 1297 * 1298 * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 1299 * November 29, 2011. Copyright 2011 Microsoft 1300 * 1301 ******************************************************************************/ 1302 1303 /* Basic SLIC table is only the common ACPI header */ 1304 1305 typedef struct acpi_table_slic 1306 { 1307 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1308 1309 } ACPI_TABLE_SLIC; 1310 1311 1312 /******************************************************************************* 1313 * 1314 * SPCR - Serial Port Console Redirection table 1315 * Version 2 1316 * 1317 * Conforms to "Serial Port Console Redirection Table", 1318 * Version 1.03, August 10, 2015 1319 * 1320 ******************************************************************************/ 1321 1322 typedef struct acpi_table_spcr 1323 { 1324 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1325 UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ 1326 UINT8 Reserved[3]; 1327 ACPI_GENERIC_ADDRESS SerialPort; 1328 UINT8 InterruptType; 1329 UINT8 PcInterrupt; 1330 UINT32 Interrupt; 1331 UINT8 BaudRate; 1332 UINT8 Parity; 1333 UINT8 StopBits; 1334 UINT8 FlowControl; 1335 UINT8 TerminalType; 1336 UINT8 Reserved1; 1337 UINT16 PciDeviceId; 1338 UINT16 PciVendorId; 1339 UINT8 PciBus; 1340 UINT8 PciDevice; 1341 UINT8 PciFunction; 1342 UINT32 PciFlags; 1343 UINT8 PciSegment; 1344 UINT32 Reserved2; 1345 1346 } ACPI_TABLE_SPCR; 1347 1348 /* Masks for PciFlags field above */ 1349 1350 #define ACPI_SPCR_DO_NOT_DISABLE (1) 1351 1352 /* Values for Interface Type: See the definition of the DBG2 table */ 1353 1354 1355 /******************************************************************************* 1356 * 1357 * SPMI - Server Platform Management Interface table 1358 * Version 5 1359 * 1360 * Conforms to "Intelligent Platform Management Interface Specification 1361 * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with 1362 * June 12, 2009 markup. 1363 * 1364 ******************************************************************************/ 1365 1366 typedef struct acpi_table_spmi 1367 { 1368 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1369 UINT8 InterfaceType; 1370 UINT8 Reserved; /* Must be 1 */ 1371 UINT16 SpecRevision; /* Version of IPMI */ 1372 UINT8 InterruptType; 1373 UINT8 GpeNumber; /* GPE assigned */ 1374 UINT8 Reserved1; 1375 UINT8 PciDeviceFlag; 1376 UINT32 Interrupt; 1377 ACPI_GENERIC_ADDRESS IpmiRegister; 1378 UINT8 PciSegment; 1379 UINT8 PciBus; 1380 UINT8 PciDevice; 1381 UINT8 PciFunction; 1382 UINT8 Reserved2; 1383 1384 } ACPI_TABLE_SPMI; 1385 1386 /* Values for InterfaceType above */ 1387 1388 enum AcpiSpmiInterfaceTypes 1389 { 1390 ACPI_SPMI_NOT_USED = 0, 1391 ACPI_SPMI_KEYBOARD = 1, 1392 ACPI_SPMI_SMI = 2, 1393 ACPI_SPMI_BLOCK_TRANSFER = 3, 1394 ACPI_SPMI_SMBUS = 4, 1395 ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ 1396 }; 1397 1398 1399 /******************************************************************************* 1400 * 1401 * TCPA - Trusted Computing Platform Alliance table 1402 * Version 2 1403 * 1404 * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", 1405 * December 19, 2014 1406 * 1407 * NOTE: There are two versions of the table with the same signature -- 1408 * the client version and the server version. The common PlatformClass 1409 * field is used to differentiate the two types of tables. 1410 * 1411 ******************************************************************************/ 1412 1413 typedef struct acpi_table_tcpa_hdr 1414 { 1415 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1416 UINT16 PlatformClass; 1417 1418 } ACPI_TABLE_TCPA_HDR; 1419 1420 /* 1421 * Values for PlatformClass above. 1422 * This is how the client and server subtables are differentiated 1423 */ 1424 #define ACPI_TCPA_CLIENT_TABLE 0 1425 #define ACPI_TCPA_SERVER_TABLE 1 1426 1427 1428 typedef struct acpi_table_tcpa_client 1429 { 1430 UINT32 MinimumLogLength; /* Minimum length for the event log area */ 1431 UINT64 LogAddress; /* Address of the event log area */ 1432 1433 } ACPI_TABLE_TCPA_CLIENT; 1434 1435 typedef struct acpi_table_tcpa_server 1436 { 1437 UINT16 Reserved; 1438 UINT64 MinimumLogLength; /* Minimum length for the event log area */ 1439 UINT64 LogAddress; /* Address of the event log area */ 1440 UINT16 SpecRevision; 1441 UINT8 DeviceFlags; 1442 UINT8 InterruptFlags; 1443 UINT8 GpeNumber; 1444 UINT8 Reserved2[3]; 1445 UINT32 GlobalInterrupt; 1446 ACPI_GENERIC_ADDRESS Address; 1447 UINT32 Reserved3; 1448 ACPI_GENERIC_ADDRESS ConfigAddress; 1449 UINT8 Group; 1450 UINT8 Bus; /* PCI Bus/Segment/Function numbers */ 1451 UINT8 Device; 1452 UINT8 Function; 1453 1454 } ACPI_TABLE_TCPA_SERVER; 1455 1456 /* Values for DeviceFlags above */ 1457 1458 #define ACPI_TCPA_PCI_DEVICE (1) 1459 #define ACPI_TCPA_BUS_PNP (1<<1) 1460 #define ACPI_TCPA_ADDRESS_VALID (1<<2) 1461 1462 /* Values for InterruptFlags above */ 1463 1464 #define ACPI_TCPA_INTERRUPT_MODE (1) 1465 #define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) 1466 #define ACPI_TCPA_SCI_VIA_GPE (1<<2) 1467 #define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) 1468 1469 1470 /******************************************************************************* 1471 * 1472 * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table 1473 * Version 4 1474 * 1475 * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", 1476 * December 19, 2014 1477 * 1478 ******************************************************************************/ 1479 1480 typedef struct acpi_table_tpm2 1481 { 1482 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1483 UINT16 PlatformClass; 1484 UINT16 Reserved; 1485 UINT64 ControlAddress; 1486 UINT32 StartMethod; 1487 1488 /* Platform-specific data follows */ 1489 1490 } ACPI_TABLE_TPM2; 1491 1492 /* Values for StartMethod above */ 1493 1494 #define ACPI_TPM2_NOT_ALLOWED 0 1495 #define ACPI_TPM2_START_METHOD 2 1496 #define ACPI_TPM2_MEMORY_MAPPED 6 1497 #define ACPI_TPM2_COMMAND_BUFFER 7 1498 #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 1499 1500 1501 /******************************************************************************* 1502 * 1503 * UEFI - UEFI Boot optimization Table 1504 * Version 1 1505 * 1506 * Conforms to "Unified Extensible Firmware Interface Specification", 1507 * Version 2.3, May 8, 2009 1508 * 1509 ******************************************************************************/ 1510 1511 typedef struct acpi_table_uefi 1512 { 1513 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1514 UINT8 Identifier[16]; /* UUID identifier */ 1515 UINT16 DataOffset; /* Offset of remaining data in table */ 1516 1517 } ACPI_TABLE_UEFI; 1518 1519 1520 /******************************************************************************* 1521 * 1522 * VRTC - Virtual Real Time Clock Table 1523 * Version 1 1524 * 1525 * Conforms to "Simple Firmware Interface Specification", 1526 * Draft 0.8.2, Oct 19, 2010 1527 * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. 1528 * 1529 ******************************************************************************/ 1530 1531 typedef struct acpi_table_vrtc 1532 { 1533 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1534 1535 } ACPI_TABLE_VRTC; 1536 1537 /* VRTC entry */ 1538 1539 typedef struct acpi_vrtc_entry 1540 { 1541 ACPI_GENERIC_ADDRESS PhysicalAddress; 1542 UINT32 Irq; 1543 1544 } ACPI_VRTC_ENTRY; 1545 1546 1547 /******************************************************************************* 1548 * 1549 * WAET - Windows ACPI Emulated devices Table 1550 * Version 1 1551 * 1552 * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 1553 * 1554 ******************************************************************************/ 1555 1556 typedef struct acpi_table_waet 1557 { 1558 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1559 UINT32 Flags; 1560 1561 } ACPI_TABLE_WAET; 1562 1563 /* Masks for Flags field above */ 1564 1565 #define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ 1566 #define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ 1567 1568 1569 /******************************************************************************* 1570 * 1571 * WDAT - Watchdog Action Table 1572 * Version 1 1573 * 1574 * Conforms to "Hardware Watchdog Timers Design Specification", 1575 * Copyright 2006 Microsoft Corporation. 1576 * 1577 ******************************************************************************/ 1578 1579 typedef struct acpi_table_wdat 1580 { 1581 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1582 UINT32 HeaderLength; /* Watchdog Header Length */ 1583 UINT16 PciSegment; /* PCI Segment number */ 1584 UINT8 PciBus; /* PCI Bus number */ 1585 UINT8 PciDevice; /* PCI Device number */ 1586 UINT8 PciFunction; /* PCI Function number */ 1587 UINT8 Reserved[3]; 1588 UINT32 TimerPeriod; /* Period of one timer count (msec) */ 1589 UINT32 MaxCount; /* Maximum counter value supported */ 1590 UINT32 MinCount; /* Minimum counter value */ 1591 UINT8 Flags; 1592 UINT8 Reserved2[3]; 1593 UINT32 Entries; /* Number of watchdog entries that follow */ 1594 1595 } ACPI_TABLE_WDAT; 1596 1597 /* Masks for Flags field above */ 1598 1599 #define ACPI_WDAT_ENABLED (1) 1600 #define ACPI_WDAT_STOPPED 0x80 1601 1602 1603 /* WDAT Instruction Entries (actions) */ 1604 1605 typedef struct acpi_wdat_entry 1606 { 1607 UINT8 Action; 1608 UINT8 Instruction; 1609 UINT16 Reserved; 1610 ACPI_GENERIC_ADDRESS RegisterRegion; 1611 UINT32 Value; /* Value used with Read/Write register */ 1612 UINT32 Mask; /* Bitmask required for this register instruction */ 1613 1614 } ACPI_WDAT_ENTRY; 1615 1616 /* Values for Action field above */ 1617 1618 enum AcpiWdatActions 1619 { 1620 ACPI_WDAT_RESET = 1, 1621 ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, 1622 ACPI_WDAT_GET_COUNTDOWN = 5, 1623 ACPI_WDAT_SET_COUNTDOWN = 6, 1624 ACPI_WDAT_GET_RUNNING_STATE = 8, 1625 ACPI_WDAT_SET_RUNNING_STATE = 9, 1626 ACPI_WDAT_GET_STOPPED_STATE = 10, 1627 ACPI_WDAT_SET_STOPPED_STATE = 11, 1628 ACPI_WDAT_GET_REBOOT = 16, 1629 ACPI_WDAT_SET_REBOOT = 17, 1630 ACPI_WDAT_GET_SHUTDOWN = 18, 1631 ACPI_WDAT_SET_SHUTDOWN = 19, 1632 ACPI_WDAT_GET_STATUS = 32, 1633 ACPI_WDAT_SET_STATUS = 33, 1634 ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ 1635 }; 1636 1637 /* Values for Instruction field above */ 1638 1639 enum AcpiWdatInstructions 1640 { 1641 ACPI_WDAT_READ_VALUE = 0, 1642 ACPI_WDAT_READ_COUNTDOWN = 1, 1643 ACPI_WDAT_WRITE_VALUE = 2, 1644 ACPI_WDAT_WRITE_COUNTDOWN = 3, 1645 ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ 1646 ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ 1647 }; 1648 1649 1650 /******************************************************************************* 1651 * 1652 * WDDT - Watchdog Descriptor Table 1653 * Version 1 1654 * 1655 * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", 1656 * Version 001, September 2002 1657 * 1658 ******************************************************************************/ 1659 1660 typedef struct acpi_table_wddt 1661 { 1662 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1663 UINT16 SpecVersion; 1664 UINT16 TableVersion; 1665 UINT16 PciVendorId; 1666 ACPI_GENERIC_ADDRESS Address; 1667 UINT16 MaxCount; /* Maximum counter value supported */ 1668 UINT16 MinCount; /* Minimum counter value supported */ 1669 UINT16 Period; 1670 UINT16 Status; 1671 UINT16 Capability; 1672 1673 } ACPI_TABLE_WDDT; 1674 1675 /* Flags for Status field above */ 1676 1677 #define ACPI_WDDT_AVAILABLE (1) 1678 #define ACPI_WDDT_ACTIVE (1<<1) 1679 #define ACPI_WDDT_TCO_OS_OWNED (1<<2) 1680 #define ACPI_WDDT_USER_RESET (1<<11) 1681 #define ACPI_WDDT_WDT_RESET (1<<12) 1682 #define ACPI_WDDT_POWER_FAIL (1<<13) 1683 #define ACPI_WDDT_UNKNOWN_RESET (1<<14) 1684 1685 /* Flags for Capability field above */ 1686 1687 #define ACPI_WDDT_AUTO_RESET (1) 1688 #define ACPI_WDDT_ALERT_SUPPORT (1<<1) 1689 1690 1691 /******************************************************************************* 1692 * 1693 * WDRT - Watchdog Resource Table 1694 * Version 1 1695 * 1696 * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", 1697 * Version 1.01, August 28, 2006 1698 * 1699 ******************************************************************************/ 1700 1701 typedef struct acpi_table_wdrt 1702 { 1703 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1704 ACPI_GENERIC_ADDRESS ControlRegister; 1705 ACPI_GENERIC_ADDRESS CountRegister; 1706 UINT16 PciDeviceId; 1707 UINT16 PciVendorId; 1708 UINT8 PciBus; /* PCI Bus number */ 1709 UINT8 PciDevice; /* PCI Device number */ 1710 UINT8 PciFunction; /* PCI Function number */ 1711 UINT8 PciSegment; /* PCI Segment number */ 1712 UINT16 MaxCount; /* Maximum counter value supported */ 1713 UINT8 Units; 1714 1715 } ACPI_TABLE_WDRT; 1716 1717 1718 /* Reset to default packing */ 1719 1720 #pragma pack() 1721 1722 #endif /* __ACTBL2_H__ */ 1723