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 112 typedef 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 126 typedef 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 145 typedef 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 189 typedef 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 211 enum 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 229 typedef 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 239 enum 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 257 typedef 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 276 typedef 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 298 typedef 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 317 typedef 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 334 typedef 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 351 typedef 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 378 typedef 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 403 typedef 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 418 typedef 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 425 typedef 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 475 typedef 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 */ 492 typedef struct acpi_tmp23_trailer 493 { 494 UINT32 Reserved; 495 496 } ACPI_TPM23_TRAILER; 497 498 499 /* Revision 4 */ 500 501 typedef 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 532 typedef 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 547 typedef 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 576 typedef 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 592 typedef 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 603 typedef 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 613 enum 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 624 typedef 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 637 typedef 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 647 typedef 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 656 typedef 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 674 typedef 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 697 typedef 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 723 typedef 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 736 enum 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 757 enum 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 778 typedef 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 819 typedef 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 845 typedef 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 856 typedef 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 873 typedef 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 896 typedef 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