actbl3.h revision 1.1.1.16
1/****************************************************************************** 2 * 3 * Name: actbl3.h - ACPI Table Definitions 4 * 5 *****************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2023, 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 MERCHANTABILITY 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 __ACTBL3_H__ 45#define __ACTBL3_H__ 46 47 48/******************************************************************************* 49 * 50 * Additional ACPI Tables 51 * 52 * These tables are not consumed directly by the ACPICA subsystem, but are 53 * included here to support device drivers and the AML disassembler. 54 * 55 ******************************************************************************/ 56 57 58/* 59 * Values for description table header signatures for tables defined in this 60 * file. Useful because they make it more difficult to inadvertently type in 61 * the wrong signature. 62 */ 63#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ 64#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 65#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ 66#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ 67#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 68#define ACPI_SIG_STAO "STAO" /* Status Override table */ 69#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ 70#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ 71#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ 72#define ACPI_SIG_VIOT "VIOT" /* Virtual I/O Translation Table */ 73#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ 74#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ 75#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ 76#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ 77#define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 78#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Mitigations Table */ 79#define ACPI_SIG_XENV "XENV" /* Xen Environment table */ 80#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ 81 82/* 83 * All tables must be byte-packed to match the ACPI specification, since 84 * the tables are provided by the system BIOS. 85 */ 86#pragma pack(1) 87 88/* 89 * Note: C bitfields are not used for this reason: 90 * 91 * "Bitfields are great and easy to read, but unfortunately the C language 92 * does not specify the layout of bitfields in memory, which means they are 93 * essentially useless for dealing with packed data in on-disk formats or 94 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 95 * this decision was a design error in C. Ritchie could have picked an order 96 * and stuck with it." Norman Ramsey. 97 * See http://stackoverflow.com/a/1053662/41661 98 */ 99 100 101/******************************************************************************* 102 * 103 * SLIC - Software Licensing Description Table 104 * 105 * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 106 * November 29, 2011. Copyright 2011 Microsoft 107 * 108 ******************************************************************************/ 109 110/* Basic SLIC table is only the common ACPI header */ 111 112typedef struct acpi_table_slic 113{ 114 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 115 116} ACPI_TABLE_SLIC; 117 118 119/******************************************************************************* 120 * 121 * SLIT - System Locality Distance Information Table 122 * Version 1 123 * 124 ******************************************************************************/ 125 126typedef struct acpi_table_slit 127{ 128 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 129 UINT64 LocalityCount; 130 UINT8 Entry[1]; /* Real size = localities^2 */ 131 132} ACPI_TABLE_SLIT; 133 134 135/******************************************************************************* 136 * 137 * SPCR - Serial Port Console Redirection table 138 * Version 2 139 * 140 * Conforms to "Serial Port Console Redirection Table", 141 * Version 1.03, August 10, 2015 142 * 143 ******************************************************************************/ 144 145typedef struct acpi_table_spcr 146{ 147 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 148 UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ 149 UINT8 Reserved[3]; 150 ACPI_GENERIC_ADDRESS SerialPort; 151 UINT8 InterruptType; 152 UINT8 PcInterrupt; 153 UINT32 Interrupt; 154 UINT8 BaudRate; 155 UINT8 Parity; 156 UINT8 StopBits; 157 UINT8 FlowControl; 158 UINT8 TerminalType; 159 UINT8 Reserved1; 160 UINT16 PciDeviceId; 161 UINT16 PciVendorId; 162 UINT8 PciBus; 163 UINT8 PciDevice; 164 UINT8 PciFunction; 165 UINT32 PciFlags; 166 UINT8 PciSegment; 167 UINT32 Reserved2; 168 169} ACPI_TABLE_SPCR; 170 171/* Masks for PciFlags field above */ 172 173#define ACPI_SPCR_DO_NOT_DISABLE (1) 174 175/* Values for Interface Type: See the definition of the DBG2 table */ 176 177 178/******************************************************************************* 179 * 180 * SPMI - Server Platform Management Interface table 181 * Version 5 182 * 183 * Conforms to "Intelligent Platform Management Interface Specification 184 * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with 185 * June 12, 2009 markup. 186 * 187 ******************************************************************************/ 188 189typedef struct acpi_table_spmi 190{ 191 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 192 UINT8 InterfaceType; 193 UINT8 Reserved; /* Must be 1 */ 194 UINT16 SpecRevision; /* Version of IPMI */ 195 UINT8 InterruptType; 196 UINT8 GpeNumber; /* GPE assigned */ 197 UINT8 Reserved1; 198 UINT8 PciDeviceFlag; 199 UINT32 Interrupt; 200 ACPI_GENERIC_ADDRESS IpmiRegister; 201 UINT8 PciSegment; 202 UINT8 PciBus; 203 UINT8 PciDevice; 204 UINT8 PciFunction; 205 UINT8 Reserved2; 206 207} ACPI_TABLE_SPMI; 208 209/* Values for InterfaceType above */ 210 211enum AcpiSpmiInterfaceTypes 212{ 213 ACPI_SPMI_NOT_USED = 0, 214 ACPI_SPMI_KEYBOARD = 1, 215 ACPI_SPMI_SMI = 2, 216 ACPI_SPMI_BLOCK_TRANSFER = 3, 217 ACPI_SPMI_SMBUS = 4, 218 ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ 219}; 220 221 222/******************************************************************************* 223 * 224 * SRAT - System Resource Affinity Table 225 * Version 3 226 * 227 ******************************************************************************/ 228 229typedef struct acpi_table_srat 230{ 231 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 232 UINT32 TableRevision; /* Must be value '1' */ 233 UINT64 Reserved; /* Reserved, must be zero */ 234 235} ACPI_TABLE_SRAT; 236 237/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 238 239enum AcpiSratType 240{ 241 ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 242 ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 243 ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 244 ACPI_SRAT_TYPE_GICC_AFFINITY = 3, 245 ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ 246 ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5, /* ACPI 6.3 */ 247 ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6, /* ACPI 6.4 */ 248 ACPI_SRAT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ 249}; 250 251/* 252 * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 253 */ 254 255/* 0: Processor Local APIC/SAPIC Affinity */ 256 257typedef struct acpi_srat_cpu_affinity 258{ 259 ACPI_SUBTABLE_HEADER Header; 260 UINT8 ProximityDomainLo; 261 UINT8 ApicId; 262 UINT32 Flags; 263 UINT8 LocalSapicEid; 264 UINT8 ProximityDomainHi[3]; 265 UINT32 ClockDomain; 266 267} ACPI_SRAT_CPU_AFFINITY; 268 269/* Flags */ 270 271#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 272 273 274/* 1: Memory Affinity */ 275 276typedef struct acpi_srat_mem_affinity 277{ 278 ACPI_SUBTABLE_HEADER Header; 279 UINT32 ProximityDomain; 280 UINT16 Reserved; /* Reserved, must be zero */ 281 UINT64 BaseAddress; 282 UINT64 Length; 283 UINT32 Reserved1; 284 UINT32 Flags; 285 UINT64 Reserved2; /* Reserved, must be zero */ 286 287} ACPI_SRAT_MEM_AFFINITY; 288 289/* Flags */ 290 291#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 292#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 293#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 294 295 296/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 297 298typedef struct acpi_srat_x2apic_cpu_affinity 299{ 300 ACPI_SUBTABLE_HEADER Header; 301 UINT16 Reserved; /* Reserved, must be zero */ 302 UINT32 ProximityDomain; 303 UINT32 ApicId; 304 UINT32 Flags; 305 UINT32 ClockDomain; 306 UINT32 Reserved2; 307 308} ACPI_SRAT_X2APIC_CPU_AFFINITY; 309 310/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 311 312#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 313 314 315/* 3: GICC Affinity (ACPI 5.1) */ 316 317typedef struct acpi_srat_gicc_affinity 318{ 319 ACPI_SUBTABLE_HEADER Header; 320 UINT32 ProximityDomain; 321 UINT32 AcpiProcessorUid; 322 UINT32 Flags; 323 UINT32 ClockDomain; 324 325} ACPI_SRAT_GICC_AFFINITY; 326 327/* Flags for ACPI_SRAT_GICC_AFFINITY */ 328 329#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ 330 331 332/* 4: GCC ITS Affinity (ACPI 6.2) */ 333 334typedef struct acpi_srat_gic_its_affinity 335{ 336 ACPI_SUBTABLE_HEADER Header; 337 UINT32 ProximityDomain; 338 UINT16 Reserved; 339 UINT32 ItsId; 340 341} ACPI_SRAT_GIC_ITS_AFFINITY; 342 343/* 344 * Common structure for SRAT subtable types: 345 * 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY 346 * 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY 347 */ 348 349#define ACPI_SRAT_DEVICE_HANDLE_SIZE 16 350 351typedef struct acpi_srat_generic_affinity 352{ 353 ACPI_SUBTABLE_HEADER Header; 354 UINT8 Reserved; 355 UINT8 DeviceHandleType; 356 UINT32 ProximityDomain; 357 UINT8 DeviceHandle[ACPI_SRAT_DEVICE_HANDLE_SIZE]; 358 UINT32 Flags; 359 UINT32 Reserved1; 360 361} ACPI_SRAT_GENERIC_AFFINITY; 362 363/* Flags for ACPI_SRAT_GENERIC_AFFINITY */ 364 365#define ACPI_SRAT_GENERIC_AFFINITY_ENABLED (1) /* 00: Use affinity structure */ 366#define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS (1<<1) /* ACPI 6.4 */ 367 368/******************************************************************************* 369 * 370 * STAO - Status Override Table (_STA override) - ACPI 6.0 371 * Version 1 372 * 373 * Conforms to "ACPI Specification for Status Override Table" 374 * 6 January 2015 375 * 376 ******************************************************************************/ 377 378typedef struct acpi_table_stao 379{ 380 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 381 UINT8 IgnoreUart; 382 383} ACPI_TABLE_STAO; 384 385 386/******************************************************************************* 387 * 388 * TCPA - Trusted Computing Platform Alliance table 389 * Version 2 390 * 391 * TCG Hardware Interface Table for TPM 1.2 Clients and Servers 392 * 393 * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", 394 * Version 1.2, Revision 8 395 * February 27, 2017 396 * 397 * NOTE: There are two versions of the table with the same signature -- 398 * the client version and the server version. The common PlatformClass 399 * field is used to differentiate the two types of tables. 400 * 401 ******************************************************************************/ 402 403typedef struct acpi_table_tcpa_hdr 404{ 405 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 406 UINT16 PlatformClass; 407 408} ACPI_TABLE_TCPA_HDR; 409 410/* 411 * Values for PlatformClass above. 412 * This is how the client and server subtables are differentiated 413 */ 414#define ACPI_TCPA_CLIENT_TABLE 0 415#define ACPI_TCPA_SERVER_TABLE 1 416 417 418typedef struct acpi_table_tcpa_client 419{ 420 UINT32 MinimumLogLength; /* Minimum length for the event log area */ 421 UINT64 LogAddress; /* Address of the event log area */ 422 423} ACPI_TABLE_TCPA_CLIENT; 424 425typedef struct acpi_table_tcpa_server 426{ 427 UINT16 Reserved; 428 UINT64 MinimumLogLength; /* Minimum length for the event log area */ 429 UINT64 LogAddress; /* Address of the event log area */ 430 UINT16 SpecRevision; 431 UINT8 DeviceFlags; 432 UINT8 InterruptFlags; 433 UINT8 GpeNumber; 434 UINT8 Reserved2[3]; 435 UINT32 GlobalInterrupt; 436 ACPI_GENERIC_ADDRESS Address; 437 UINT32 Reserved3; 438 ACPI_GENERIC_ADDRESS ConfigAddress; 439 UINT8 Group; 440 UINT8 Bus; /* PCI Bus/Segment/Function numbers */ 441 UINT8 Device; 442 UINT8 Function; 443 444} ACPI_TABLE_TCPA_SERVER; 445 446/* Values for DeviceFlags above */ 447 448#define ACPI_TCPA_PCI_DEVICE (1) 449#define ACPI_TCPA_BUS_PNP (1<<1) 450#define ACPI_TCPA_ADDRESS_VALID (1<<2) 451 452/* Values for InterruptFlags above */ 453 454#define ACPI_TCPA_INTERRUPT_MODE (1) 455#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) 456#define ACPI_TCPA_SCI_VIA_GPE (1<<2) 457#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) 458 459 460/******************************************************************************* 461 * 462 * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table 463 * Version 4 464 * 465 * TCG Hardware Interface Table for TPM 2.0 Clients and Servers 466 * 467 * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", 468 * Version 1.2, Revision 8 469 * February 27, 2017 470 * 471 ******************************************************************************/ 472 473/* Revision 3 */ 474 475typedef struct acpi_table_tpm23 476{ 477 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 478 UINT32 Reserved; 479 UINT64 ControlAddress; 480 UINT32 StartMethod; 481 482} ACPI_TABLE_TPM23; 483 484/* Value for StartMethod above */ 485 486#define ACPI_TPM23_ACPI_START_METHOD 2 487 488/* 489 * Optional trailer for revision 3. If start method is 2, there is a 4 byte 490 * reserved area of all zeros. 491 */ 492typedef struct acpi_tmp23_trailer 493{ 494 UINT32 Reserved; 495 496} ACPI_TPM23_TRAILER; 497 498 499/* Revision 4 */ 500 501typedef struct acpi_table_tpm2 502{ 503 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 504 UINT16 PlatformClass; 505 UINT16 Reserved; 506 UINT64 ControlAddress; 507 UINT32 StartMethod; 508 509 /* Platform-specific data follows */ 510 511} ACPI_TABLE_TPM2; 512 513/* Values for StartMethod above */ 514 515#define ACPI_TPM2_NOT_ALLOWED 0 516#define ACPI_TPM2_RESERVED1 1 517#define ACPI_TPM2_START_METHOD 2 518#define ACPI_TPM2_RESERVED3 3 519#define ACPI_TPM2_RESERVED4 4 520#define ACPI_TPM2_RESERVED5 5 521#define ACPI_TPM2_MEMORY_MAPPED 6 522#define ACPI_TPM2_COMMAND_BUFFER 7 523#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 524#define ACPI_TPM2_RESERVED9 9 525#define ACPI_TPM2_RESERVED10 10 526#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ 527#define ACPI_TPM2_RESERVED 12 528 529 530/* Optional trailer appears after any StartMethod subtables */ 531 532typedef struct acpi_tpm2_trailer 533{ 534 UINT8 MethodParameters[12]; 535 UINT32 MinimumLogLength; /* Minimum length for the event log area */ 536 UINT64 LogAddress; /* Address of the event log area */ 537 538} ACPI_TPM2_TRAILER; 539 540 541/* 542 * Subtables (StartMethod-specific) 543 */ 544 545/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ 546 547typedef struct acpi_tpm2_arm_smc 548{ 549 UINT32 GlobalInterrupt; 550 UINT8 InterruptFlags; 551 UINT8 OperationFlags; 552 UINT16 Reserved; 553 UINT32 FunctionId; 554 555} ACPI_TPM2_ARM_SMC; 556 557/* Values for InterruptFlags above */ 558 559#define ACPI_TPM2_INTERRUPT_SUPPORT (1) 560 561/* Values for OperationFlags above */ 562 563#define ACPI_TPM2_IDLE_SUPPORT (1) 564 565 566/******************************************************************************* 567 * 568 * UEFI - UEFI Boot optimization Table 569 * Version 1 570 * 571 * Conforms to "Unified Extensible Firmware Interface Specification", 572 * Version 2.3, May 8, 2009 573 * 574 ******************************************************************************/ 575 576typedef struct acpi_table_uefi 577{ 578 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 579 UINT8 Identifier[16]; /* UUID identifier */ 580 UINT16 DataOffset; /* Offset of remaining data in table */ 581 582} ACPI_TABLE_UEFI; 583 584 585/******************************************************************************* 586 * 587 * VIOT - Virtual I/O Translation Table 588 * Version 1 589 * 590 ******************************************************************************/ 591 592typedef struct acpi_table_viot 593{ 594 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 595 UINT16 NodeCount; 596 UINT16 NodeOffset; 597 UINT8 Reserved[8]; 598 599} ACPI_TABLE_VIOT; 600 601/* VIOT subtable header */ 602 603typedef struct acpi_viot_header 604{ 605 UINT8 Type; 606 UINT8 Reserved; 607 UINT16 Length; 608 609} ACPI_VIOT_HEADER; 610 611/* Values for Type field above */ 612 613enum AcpiViotNodeType 614{ 615 ACPI_VIOT_NODE_PCI_RANGE = 0x01, 616 ACPI_VIOT_NODE_MMIO = 0x02, 617 ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03, 618 ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04, 619 ACPI_VIOT_RESERVED = 0x05 620}; 621 622/* VIOT subtables */ 623 624typedef struct acpi_viot_pci_range 625{ 626 ACPI_VIOT_HEADER Header; 627 UINT32 EndpointStart; 628 UINT16 SegmentStart; 629 UINT16 SegmentEnd; 630 UINT16 BdfStart; 631 UINT16 BdfEnd; 632 UINT16 OutputNode; 633 UINT8 Reserved[6]; 634 635} ACPI_VIOT_PCI_RANGE; 636 637typedef struct acpi_viot_mmio 638{ 639 ACPI_VIOT_HEADER Header; 640 UINT32 Endpoint; 641 UINT64 BaseAddress; 642 UINT16 OutputNode; 643 UINT8 Reserved[6]; 644 645} ACPI_VIOT_MMIO; 646 647typedef struct acpi_viot_virtio_iommu_pci 648{ 649 ACPI_VIOT_HEADER Header; 650 UINT16 Segment; 651 UINT16 Bdf; 652 UINT8 Reserved[8]; 653 654} ACPI_VIOT_VIRTIO_IOMMU_PCI; 655 656typedef struct acpi_viot_virtio_iommu_mmio 657{ 658 ACPI_VIOT_HEADER Header; 659 UINT8 Reserved[4]; 660 UINT64 BaseAddress; 661 662} ACPI_VIOT_VIRTIO_IOMMU_MMIO; 663 664 665/******************************************************************************* 666 * 667 * WAET - Windows ACPI Emulated devices Table 668 * Version 1 669 * 670 * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 671 * 672 ******************************************************************************/ 673 674typedef struct acpi_table_waet 675{ 676 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 677 UINT32 Flags; 678 679} ACPI_TABLE_WAET; 680 681/* Masks for Flags field above */ 682 683#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ 684#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ 685 686 687/******************************************************************************* 688 * 689 * WDAT - Watchdog Action Table 690 * Version 1 691 * 692 * Conforms to "Hardware Watchdog Timers Design Specification", 693 * Copyright 2006 Microsoft Corporation. 694 * 695 ******************************************************************************/ 696 697typedef struct acpi_table_wdat 698{ 699 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 700 UINT32 HeaderLength; /* Watchdog Header Length */ 701 UINT16 PciSegment; /* PCI Segment number */ 702 UINT8 PciBus; /* PCI Bus number */ 703 UINT8 PciDevice; /* PCI Device number */ 704 UINT8 PciFunction; /* PCI Function number */ 705 UINT8 Reserved[3]; 706 UINT32 TimerPeriod; /* Period of one timer count (msec) */ 707 UINT32 MaxCount; /* Maximum counter value supported */ 708 UINT32 MinCount; /* Minimum counter value */ 709 UINT8 Flags; 710 UINT8 Reserved2[3]; 711 UINT32 Entries; /* Number of watchdog entries that follow */ 712 713} ACPI_TABLE_WDAT; 714 715/* Masks for Flags field above */ 716 717#define ACPI_WDAT_ENABLED (1) 718#define ACPI_WDAT_STOPPED 0x80 719 720 721/* WDAT Instruction Entries (actions) */ 722 723typedef struct acpi_wdat_entry 724{ 725 UINT8 Action; 726 UINT8 Instruction; 727 UINT16 Reserved; 728 ACPI_GENERIC_ADDRESS RegisterRegion; 729 UINT32 Value; /* Value used with Read/Write register */ 730 UINT32 Mask; /* Bitmask required for this register instruction */ 731 732} ACPI_WDAT_ENTRY; 733 734/* Values for Action field above */ 735 736enum AcpiWdatActions 737{ 738 ACPI_WDAT_RESET = 1, 739 ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, 740 ACPI_WDAT_GET_COUNTDOWN = 5, 741 ACPI_WDAT_SET_COUNTDOWN = 6, 742 ACPI_WDAT_GET_RUNNING_STATE = 8, 743 ACPI_WDAT_SET_RUNNING_STATE = 9, 744 ACPI_WDAT_GET_STOPPED_STATE = 10, 745 ACPI_WDAT_SET_STOPPED_STATE = 11, 746 ACPI_WDAT_GET_REBOOT = 16, 747 ACPI_WDAT_SET_REBOOT = 17, 748 ACPI_WDAT_GET_SHUTDOWN = 18, 749 ACPI_WDAT_SET_SHUTDOWN = 19, 750 ACPI_WDAT_GET_STATUS = 32, 751 ACPI_WDAT_SET_STATUS = 33, 752 ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ 753}; 754 755/* Values for Instruction field above */ 756 757enum AcpiWdatInstructions 758{ 759 ACPI_WDAT_READ_VALUE = 0, 760 ACPI_WDAT_READ_COUNTDOWN = 1, 761 ACPI_WDAT_WRITE_VALUE = 2, 762 ACPI_WDAT_WRITE_COUNTDOWN = 3, 763 ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ 764 ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ 765}; 766 767 768/******************************************************************************* 769 * 770 * WDDT - Watchdog Descriptor Table 771 * Version 1 772 * 773 * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", 774 * Version 001, September 2002 775 * 776 ******************************************************************************/ 777 778typedef struct acpi_table_wddt 779{ 780 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 781 UINT16 SpecVersion; 782 UINT16 TableVersion; 783 UINT16 PciVendorId; 784 ACPI_GENERIC_ADDRESS Address; 785 UINT16 MaxCount; /* Maximum counter value supported */ 786 UINT16 MinCount; /* Minimum counter value supported */ 787 UINT16 Period; 788 UINT16 Status; 789 UINT16 Capability; 790 791} ACPI_TABLE_WDDT; 792 793/* Flags for Status field above */ 794 795#define ACPI_WDDT_AVAILABLE (1) 796#define ACPI_WDDT_ACTIVE (1<<1) 797#define ACPI_WDDT_TCO_OS_OWNED (1<<2) 798#define ACPI_WDDT_USER_RESET (1<<11) 799#define ACPI_WDDT_WDT_RESET (1<<12) 800#define ACPI_WDDT_POWER_FAIL (1<<13) 801#define ACPI_WDDT_UNKNOWN_RESET (1<<14) 802 803/* Flags for Capability field above */ 804 805#define ACPI_WDDT_AUTO_RESET (1) 806#define ACPI_WDDT_ALERT_SUPPORT (1<<1) 807 808 809/******************************************************************************* 810 * 811 * WDRT - Watchdog Resource Table 812 * Version 1 813 * 814 * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", 815 * Version 1.01, August 28, 2006 816 * 817 ******************************************************************************/ 818 819typedef struct acpi_table_wdrt 820{ 821 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 822 ACPI_GENERIC_ADDRESS ControlRegister; 823 ACPI_GENERIC_ADDRESS CountRegister; 824 UINT16 PciDeviceId; 825 UINT16 PciVendorId; 826 UINT8 PciBus; /* PCI Bus number */ 827 UINT8 PciDevice; /* PCI Device number */ 828 UINT8 PciFunction; /* PCI Function number */ 829 UINT8 PciSegment; /* PCI Segment number */ 830 UINT16 MaxCount; /* Maximum counter value supported */ 831 UINT8 Units; 832 833} ACPI_TABLE_WDRT; 834 835 836/******************************************************************************* 837 * 838 * WPBT - Windows Platform Environment Table (ACPI 6.0) 839 * Version 1 840 * 841 * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 842 * 843 ******************************************************************************/ 844 845typedef struct acpi_table_wpbt 846{ 847 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 848 UINT32 HandoffSize; 849 UINT64 HandoffAddress; 850 UINT8 Layout; 851 UINT8 Type; 852 UINT16 ArgumentsLength; 853 854} ACPI_TABLE_WPBT; 855 856typedef struct acpi_wpbt_unicode 857{ 858 UINT16 *UnicodeString; 859 860} ACPI_WPBT_UNICODE; 861 862 863/******************************************************************************* 864 * 865 * WSMT - Windows SMM Security Mitigations Table 866 * Version 1 867 * 868 * Conforms to "Windows SMM Security Mitigations Table", 869 * Version 1.0, April 18, 2016 870 * 871 ******************************************************************************/ 872 873typedef struct acpi_table_wsmt 874{ 875 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 876 UINT32 ProtectionFlags; 877 878} ACPI_TABLE_WSMT; 879 880/* Flags for ProtectionFlags field above */ 881 882#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) 883#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) 884#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) 885 886 887/******************************************************************************* 888 * 889 * XENV - Xen Environment Table (ACPI 6.0) 890 * Version 1 891 * 892 * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015 893 * 894 ******************************************************************************/ 895 896typedef struct acpi_table_xenv 897{ 898 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 899 UINT64 GrantTableAddress; 900 UINT64 GrantTableSize; 901 UINT32 EventInterrupt; 902 UINT8 EventFlags; 903 904} ACPI_TABLE_XENV; 905 906 907/* Reset to default packing */ 908 909#pragma pack() 910 911#endif /* __ACTBL3_H__ */ 912