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