1 /****************************************************************************** 2 * 3 * Name: actbl3.h - ACPI Table Definitions 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2016, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44 #ifndef __ACTBL3_H__ 45 #define __ACTBL3_H__ 46 47 48 /******************************************************************************* 49 * 50 * Additional ACPI Tables (3) 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 * In general, the tables in this file are fully defined within the ACPI 56 * specification. 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_BGRT "BGRT" /* Boot Graphics Resource Table */ 67 #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 68 #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 69 #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 70 #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 71 #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 72 #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 73 #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 74 #define ACPI_SIG_STAO "STAO" /* Status Override table */ 75 #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 76 #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ 77 78 #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 79 #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 80 81 /* Reserved table signatures */ 82 83 #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 84 #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 85 86 /* 87 * All tables must be byte-packed to match the ACPI specification, since 88 * the tables are provided by the system BIOS. 89 */ 90 #pragma pack(1) 91 92 /* 93 * Note: C bitfields are not used for this reason: 94 * 95 * "Bitfields are great and easy to read, but unfortunately the C language 96 * does not specify the layout of bitfields in memory, which means they are 97 * essentially useless for dealing with packed data in on-disk formats or 98 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 99 * this decision was a design error in C. Ritchie could have picked an order 100 * and stuck with it." Norman Ramsey. 101 * See http://stackoverflow.com/a/1053662/41661 102 */ 103 104 105 /******************************************************************************* 106 * 107 * BGRT - Boot Graphics Resource Table (ACPI 5.0) 108 * Version 1 109 * 110 ******************************************************************************/ 111 112 typedef struct acpi_table_bgrt 113 { 114 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 115 UINT16 Version; 116 UINT8 Status; 117 UINT8 ImageType; 118 UINT64 ImageAddress; 119 UINT32 ImageOffsetX; 120 UINT32 ImageOffsetY; 121 122 } ACPI_TABLE_BGRT; 123 124 125 /******************************************************************************* 126 * 127 * DRTM - Dynamic Root of Trust for Measurement table 128 * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 129 * Table version 1 130 * 131 ******************************************************************************/ 132 133 typedef struct acpi_table_drtm 134 { 135 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 136 UINT64 EntryBaseAddress; 137 UINT64 EntryLength; 138 UINT32 EntryAddress32; 139 UINT64 EntryAddress64; 140 UINT64 ExitAddress; 141 UINT64 LogAreaAddress; 142 UINT32 LogAreaLength; 143 UINT64 ArchDependentAddress; 144 UINT32 Flags; 145 146 } ACPI_TABLE_DRTM; 147 148 /* Flag Definitions for above */ 149 150 #define ACPI_DRTM_ACCESS_ALLOWED (1) 151 #define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) 152 #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) 153 #define ACPI_DRTM_AUTHORITY_ORDER (1<<3) 154 155 156 /* 1) Validated Tables List (64-bit addresses) */ 157 158 typedef struct acpi_drtm_vtable_list 159 { 160 UINT32 ValidatedTableCount; 161 UINT64 ValidatedTables[1]; 162 163 } ACPI_DRTM_VTABLE_LIST; 164 165 /* 2) Resources List (of Resource Descriptors) */ 166 167 /* Resource Descriptor */ 168 169 typedef struct acpi_drtm_resource 170 { 171 UINT8 Size[7]; 172 UINT8 Type; 173 UINT64 Address; 174 175 } ACPI_DRTM_RESOURCE; 176 177 typedef struct acpi_drtm_resource_list 178 { 179 UINT32 ResourceCount; 180 ACPI_DRTM_RESOURCE Resources[1]; 181 182 } ACPI_DRTM_RESOURCE_LIST; 183 184 /* 3) Platform-specific Identifiers List */ 185 186 typedef struct acpi_drtm_dps_id 187 { 188 UINT32 DpsIdLength; 189 UINT8 DpsId[16]; 190 191 } ACPI_DRTM_DPS_ID; 192 193 194 /******************************************************************************* 195 * 196 * FPDT - Firmware Performance Data Table (ACPI 5.0) 197 * Version 1 198 * 199 ******************************************************************************/ 200 201 typedef struct acpi_table_fpdt 202 { 203 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 204 205 } ACPI_TABLE_FPDT; 206 207 208 /* FPDT subtable header (Performance Record Structure) */ 209 210 typedef struct acpi_fpdt_header 211 { 212 UINT16 Type; 213 UINT8 Length; 214 UINT8 Revision; 215 216 } ACPI_FPDT_HEADER; 217 218 /* Values for Type field above */ 219 220 enum AcpiFpdtType 221 { 222 ACPI_FPDT_TYPE_BOOT = 0, 223 ACPI_FPDT_TYPE_S3PERF = 1 224 }; 225 226 227 /* 228 * FPDT subtables 229 */ 230 231 /* 0: Firmware Basic Boot Performance Record */ 232 233 typedef struct acpi_fpdt_boot_pointer 234 { 235 ACPI_FPDT_HEADER Header; 236 UINT8 Reserved[4]; 237 UINT64 Address; 238 239 } ACPI_FPDT_BOOT_POINTER; 240 241 242 /* 1: S3 Performance Table Pointer Record */ 243 244 typedef struct acpi_fpdt_s3pt_pointer 245 { 246 ACPI_FPDT_HEADER Header; 247 UINT8 Reserved[4]; 248 UINT64 Address; 249 250 } ACPI_FPDT_S3PT_POINTER; 251 252 253 /* 254 * S3PT - S3 Performance Table. This table is pointed to by the 255 * S3 Pointer Record above. 256 */ 257 typedef struct acpi_table_s3pt 258 { 259 UINT8 Signature[4]; /* "S3PT" */ 260 UINT32 Length; 261 262 } ACPI_TABLE_S3PT; 263 264 265 /* 266 * S3PT Subtables (Not part of the actual FPDT) 267 */ 268 269 /* Values for Type field in S3PT header */ 270 271 enum AcpiS3ptType 272 { 273 ACPI_S3PT_TYPE_RESUME = 0, 274 ACPI_S3PT_TYPE_SUSPEND = 1, 275 ACPI_FPDT_BOOT_PERFORMANCE = 2 276 }; 277 278 typedef struct acpi_s3pt_resume 279 { 280 ACPI_FPDT_HEADER Header; 281 UINT32 ResumeCount; 282 UINT64 FullResume; 283 UINT64 AverageResume; 284 285 } ACPI_S3PT_RESUME; 286 287 typedef struct acpi_s3pt_suspend 288 { 289 ACPI_FPDT_HEADER Header; 290 UINT64 SuspendStart; 291 UINT64 SuspendEnd; 292 293 } ACPI_S3PT_SUSPEND; 294 295 296 /* 297 * FPDT Boot Performance Record (Not part of the actual FPDT) 298 */ 299 typedef struct acpi_fpdt_boot 300 { 301 ACPI_FPDT_HEADER Header; 302 UINT8 Reserved[4]; 303 UINT64 ResetEnd; 304 UINT64 LoadStart; 305 UINT64 StartupStart; 306 UINT64 ExitServicesEntry; 307 UINT64 ExitServicesExit; 308 309 } ACPI_FPDT_BOOT; 310 311 312 /******************************************************************************* 313 * 314 * GTDT - Generic Timer Description Table (ACPI 5.1) 315 * Version 2 316 * 317 ******************************************************************************/ 318 319 typedef struct acpi_table_gtdt 320 { 321 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 322 UINT64 CounterBlockAddresss; 323 UINT32 Reserved; 324 UINT32 SecureEl1Interrupt; 325 UINT32 SecureEl1Flags; 326 UINT32 NonSecureEl1Interrupt; 327 UINT32 NonSecureEl1Flags; 328 UINT32 VirtualTimerInterrupt; 329 UINT32 VirtualTimerFlags; 330 UINT32 NonSecureEl2Interrupt; 331 UINT32 NonSecureEl2Flags; 332 UINT64 CounterReadBlockAddress; 333 UINT32 PlatformTimerCount; 334 UINT32 PlatformTimerOffset; 335 336 } ACPI_TABLE_GTDT; 337 338 /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ 339 340 #define ACPI_GTDT_INTERRUPT_MODE (1) 341 #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) 342 #define ACPI_GTDT_ALWAYS_ON (1<<2) 343 344 345 /* Common GTDT subtable header */ 346 347 typedef struct acpi_gtdt_header 348 { 349 UINT8 Type; 350 UINT16 Length; 351 352 } ACPI_GTDT_HEADER; 353 354 /* Values for GTDT subtable type above */ 355 356 enum AcpiGtdtType 357 { 358 ACPI_GTDT_TYPE_TIMER_BLOCK = 0, 359 ACPI_GTDT_TYPE_WATCHDOG = 1, 360 ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 361 }; 362 363 364 /* GTDT Subtables, correspond to Type in acpi_gtdt_header */ 365 366 /* 0: Generic Timer Block */ 367 368 typedef struct acpi_gtdt_timer_block 369 { 370 ACPI_GTDT_HEADER Header; 371 UINT8 Reserved; 372 UINT64 BlockAddress; 373 UINT32 TimerCount; 374 UINT32 TimerOffset; 375 376 } ACPI_GTDT_TIMER_BLOCK; 377 378 /* Timer Sub-Structure, one per timer */ 379 380 typedef struct acpi_gtdt_timer_entry 381 { 382 UINT8 FrameNumber; 383 UINT8 Reserved[3]; 384 UINT64 BaseAddress; 385 UINT64 El0BaseAddress; 386 UINT32 TimerInterrupt; 387 UINT32 TimerFlags; 388 UINT32 VirtualTimerInterrupt; 389 UINT32 VirtualTimerFlags; 390 UINT32 CommonFlags; 391 392 } ACPI_GTDT_TIMER_ENTRY; 393 394 /* Flag Definitions: TimerFlags and VirtualTimerFlags above */ 395 396 #define ACPI_GTDT_GT_IRQ_MODE (1) 397 #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) 398 399 /* Flag Definitions: CommonFlags above */ 400 401 #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) 402 #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) 403 404 405 /* 1: SBSA Generic Watchdog Structure */ 406 407 typedef struct acpi_gtdt_watchdog 408 { 409 ACPI_GTDT_HEADER Header; 410 UINT8 Reserved; 411 UINT64 RefreshFrameAddress; 412 UINT64 ControlFrameAddress; 413 UINT32 TimerInterrupt; 414 UINT32 TimerFlags; 415 416 } ACPI_GTDT_WATCHDOG; 417 418 /* Flag Definitions: TimerFlags above */ 419 420 #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) 421 #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) 422 #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) 423 424 425 /******************************************************************************* 426 * 427 * MPST - Memory Power State Table (ACPI 5.0) 428 * Version 1 429 * 430 ******************************************************************************/ 431 432 #define ACPI_MPST_CHANNEL_INFO \ 433 UINT8 ChannelId; \ 434 UINT8 Reserved1[3]; \ 435 UINT16 PowerNodeCount; \ 436 UINT16 Reserved2; 437 438 /* Main table */ 439 440 typedef struct acpi_table_mpst 441 { 442 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 443 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 444 445 } ACPI_TABLE_MPST; 446 447 448 /* Memory Platform Communication Channel Info */ 449 450 typedef struct acpi_mpst_channel 451 { 452 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 453 454 } ACPI_MPST_CHANNEL; 455 456 457 /* Memory Power Node Structure */ 458 459 typedef struct acpi_mpst_power_node 460 { 461 UINT8 Flags; 462 UINT8 Reserved1; 463 UINT16 NodeId; 464 UINT32 Length; 465 UINT64 RangeAddress; 466 UINT64 RangeLength; 467 UINT32 NumPowerStates; 468 UINT32 NumPhysicalComponents; 469 470 } ACPI_MPST_POWER_NODE; 471 472 /* Values for Flags field above */ 473 474 #define ACPI_MPST_ENABLED 1 475 #define ACPI_MPST_POWER_MANAGED 2 476 #define ACPI_MPST_HOT_PLUG_CAPABLE 4 477 478 479 /* Memory Power State Structure (follows POWER_NODE above) */ 480 481 typedef struct acpi_mpst_power_state 482 { 483 UINT8 PowerState; 484 UINT8 InfoIndex; 485 486 } ACPI_MPST_POWER_STATE; 487 488 489 /* Physical Component ID Structure (follows POWER_STATE above) */ 490 491 typedef struct acpi_mpst_component 492 { 493 UINT16 ComponentId; 494 495 } ACPI_MPST_COMPONENT; 496 497 498 /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 499 500 typedef struct acpi_mpst_data_hdr 501 { 502 UINT16 CharacteristicsCount; 503 UINT16 Reserved; 504 505 } ACPI_MPST_DATA_HDR; 506 507 typedef struct acpi_mpst_power_data 508 { 509 UINT8 StructureId; 510 UINT8 Flags; 511 UINT16 Reserved1; 512 UINT32 AveragePower; 513 UINT32 PowerSaving; 514 UINT64 ExitLatency; 515 UINT64 Reserved2; 516 517 } ACPI_MPST_POWER_DATA; 518 519 /* Values for Flags field above */ 520 521 #define ACPI_MPST_PRESERVE 1 522 #define ACPI_MPST_AUTOENTRY 2 523 #define ACPI_MPST_AUTOEXIT 4 524 525 526 /* Shared Memory Region (not part of an ACPI table) */ 527 528 typedef struct acpi_mpst_shared 529 { 530 UINT32 Signature; 531 UINT16 PccCommand; 532 UINT16 PccStatus; 533 UINT32 CommandRegister; 534 UINT32 StatusRegister; 535 UINT32 PowerStateId; 536 UINT32 PowerNodeId; 537 UINT64 EnergyConsumed; 538 UINT64 AveragePower; 539 540 } ACPI_MPST_SHARED; 541 542 543 /******************************************************************************* 544 * 545 * PCCT - Platform Communications Channel Table (ACPI 5.0) 546 * Version 1 547 * 548 ******************************************************************************/ 549 550 typedef struct acpi_table_pcct 551 { 552 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 553 UINT32 Flags; 554 UINT64 Reserved; 555 556 } ACPI_TABLE_PCCT; 557 558 /* Values for Flags field above */ 559 560 #define ACPI_PCCT_DOORBELL 1 561 562 /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 563 564 enum AcpiPcctType 565 { 566 ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 567 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 568 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 569 ACPI_PCCT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 570 }; 571 572 /* 573 * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 574 */ 575 576 /* 0: Generic Communications Subspace */ 577 578 typedef struct acpi_pcct_subspace 579 { 580 ACPI_SUBTABLE_HEADER Header; 581 UINT8 Reserved[6]; 582 UINT64 BaseAddress; 583 UINT64 Length; 584 ACPI_GENERIC_ADDRESS DoorbellRegister; 585 UINT64 PreserveMask; 586 UINT64 WriteMask; 587 UINT32 Latency; 588 UINT32 MaxAccessRate; 589 UINT16 MinTurnaroundTime; 590 591 } ACPI_PCCT_SUBSPACE; 592 593 594 /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 595 596 typedef struct acpi_pcct_hw_reduced 597 { 598 ACPI_SUBTABLE_HEADER Header; 599 UINT32 DoorbellInterrupt; 600 UINT8 Flags; 601 UINT8 Reserved; 602 UINT64 BaseAddress; 603 UINT64 Length; 604 ACPI_GENERIC_ADDRESS DoorbellRegister; 605 UINT64 PreserveMask; 606 UINT64 WriteMask; 607 UINT32 Latency; 608 UINT32 MaxAccessRate; 609 UINT16 MinTurnaroundTime; 610 611 } ACPI_PCCT_HW_REDUCED; 612 613 614 /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 615 616 typedef struct acpi_pcct_hw_reduced_type2 617 { 618 ACPI_SUBTABLE_HEADER Header; 619 UINT32 DoorbellInterrupt; 620 UINT8 Flags; 621 UINT8 Reserved; 622 UINT64 BaseAddress; 623 UINT64 Length; 624 ACPI_GENERIC_ADDRESS DoorbellRegister; 625 UINT64 PreserveMask; 626 UINT64 WriteMask; 627 UINT32 Latency; 628 UINT32 MaxAccessRate; 629 UINT16 MinTurnaroundTime; 630 ACPI_GENERIC_ADDRESS DoorbellAckRegister; 631 UINT64 AckPreserveMask; 632 UINT64 AckWriteMask; 633 634 } ACPI_PCCT_HW_REDUCED_TYPE2; 635 636 637 /* Values for doorbell flags above */ 638 639 #define ACPI_PCCT_INTERRUPT_POLARITY (1) 640 #define ACPI_PCCT_INTERRUPT_MODE (1<<1) 641 642 643 /* 644 * PCC memory structures (not part of the ACPI table) 645 */ 646 647 /* Shared Memory Region */ 648 649 typedef struct acpi_pcct_shared_memory 650 { 651 UINT32 Signature; 652 UINT16 Command; 653 UINT16 Status; 654 655 } ACPI_PCCT_SHARED_MEMORY; 656 657 658 /******************************************************************************* 659 * 660 * PMTT - Platform Memory Topology Table (ACPI 5.0) 661 * Version 1 662 * 663 ******************************************************************************/ 664 665 typedef struct acpi_table_pmtt 666 { 667 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 668 UINT32 Reserved; 669 670 } ACPI_TABLE_PMTT; 671 672 673 /* Common header for PMTT subtables that follow main table */ 674 675 typedef struct acpi_pmtt_header 676 { 677 UINT8 Type; 678 UINT8 Reserved1; 679 UINT16 Length; 680 UINT16 Flags; 681 UINT16 Reserved2; 682 683 } ACPI_PMTT_HEADER; 684 685 /* Values for Type field above */ 686 687 #define ACPI_PMTT_TYPE_SOCKET 0 688 #define ACPI_PMTT_TYPE_CONTROLLER 1 689 #define ACPI_PMTT_TYPE_DIMM 2 690 #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ 691 692 /* Values for Flags field above */ 693 694 #define ACPI_PMTT_TOP_LEVEL 0x0001 695 #define ACPI_PMTT_PHYSICAL 0x0002 696 #define ACPI_PMTT_MEMORY_TYPE 0x000C 697 698 699 /* 700 * PMTT subtables, correspond to Type in acpi_pmtt_header 701 */ 702 703 704 /* 0: Socket Structure */ 705 706 typedef struct acpi_pmtt_socket 707 { 708 ACPI_PMTT_HEADER Header; 709 UINT16 SocketId; 710 UINT16 Reserved; 711 712 } ACPI_PMTT_SOCKET; 713 714 715 /* 1: Memory Controller subtable */ 716 717 typedef struct acpi_pmtt_controller 718 { 719 ACPI_PMTT_HEADER Header; 720 UINT32 ReadLatency; 721 UINT32 WriteLatency; 722 UINT32 ReadBandwidth; 723 UINT32 WriteBandwidth; 724 UINT16 AccessWidth; 725 UINT16 Alignment; 726 UINT16 Reserved; 727 UINT16 DomainCount; 728 729 } ACPI_PMTT_CONTROLLER; 730 731 /* 1a: Proximity Domain substructure */ 732 733 typedef struct acpi_pmtt_domain 734 { 735 UINT32 ProximityDomain; 736 737 } ACPI_PMTT_DOMAIN; 738 739 740 /* 2: Physical Component Identifier (DIMM) */ 741 742 typedef struct acpi_pmtt_physical_component 743 { 744 ACPI_PMTT_HEADER Header; 745 UINT16 ComponentId; 746 UINT16 Reserved; 747 UINT32 MemorySize; 748 UINT32 BiosHandle; 749 750 } ACPI_PMTT_PHYSICAL_COMPONENT; 751 752 753 /******************************************************************************* 754 * 755 * RASF - RAS Feature Table (ACPI 5.0) 756 * Version 1 757 * 758 ******************************************************************************/ 759 760 typedef struct acpi_table_rasf 761 { 762 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 763 UINT8 ChannelId[12]; 764 765 } ACPI_TABLE_RASF; 766 767 /* RASF Platform Communication Channel Shared Memory Region */ 768 769 typedef struct acpi_rasf_shared_memory 770 { 771 UINT32 Signature; 772 UINT16 Command; 773 UINT16 Status; 774 UINT16 Version; 775 UINT8 Capabilities[16]; 776 UINT8 SetCapabilities[16]; 777 UINT16 NumParameterBlocks; 778 UINT32 SetCapabilitiesStatus; 779 780 } ACPI_RASF_SHARED_MEMORY; 781 782 /* RASF Parameter Block Structure Header */ 783 784 typedef struct acpi_rasf_parameter_block 785 { 786 UINT16 Type; 787 UINT16 Version; 788 UINT16 Length; 789 790 } ACPI_RASF_PARAMETER_BLOCK; 791 792 /* RASF Parameter Block Structure for PATROL_SCRUB */ 793 794 typedef struct acpi_rasf_patrol_scrub_parameter 795 { 796 ACPI_RASF_PARAMETER_BLOCK Header; 797 UINT16 PatrolScrubCommand; 798 UINT64 RequestedAddressRange[2]; 799 UINT64 ActualAddressRange[2]; 800 UINT16 Flags; 801 UINT8 RequestedSpeed; 802 803 } ACPI_RASF_PATROL_SCRUB_PARAMETER; 804 805 /* Masks for Flags and Speed fields above */ 806 807 #define ACPI_RASF_SCRUBBER_RUNNING 1 808 #define ACPI_RASF_SPEED (7<<1) 809 #define ACPI_RASF_SPEED_SLOW (0<<1) 810 #define ACPI_RASF_SPEED_MEDIUM (4<<1) 811 #define ACPI_RASF_SPEED_FAST (7<<1) 812 813 /* Channel Commands */ 814 815 enum AcpiRasfCommands 816 { 817 ACPI_RASF_EXECUTE_RASF_COMMAND = 1 818 }; 819 820 /* Platform RAS Capabilities */ 821 822 enum AcpiRasfCapabiliities 823 { 824 ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 825 ACPI_SW_PATROL_SCRUB_EXPOSED = 1 826 }; 827 828 /* Patrol Scrub Commands */ 829 830 enum AcpiRasfPatrolScrubCommands 831 { 832 ACPI_RASF_GET_PATROL_PARAMETERS = 1, 833 ACPI_RASF_START_PATROL_SCRUBBER = 2, 834 ACPI_RASF_STOP_PATROL_SCRUBBER = 3 835 }; 836 837 /* Channel Command flags */ 838 839 #define ACPI_RASF_GENERATE_SCI (1<<15) 840 841 /* Status values */ 842 843 enum AcpiRasfStatus 844 { 845 ACPI_RASF_SUCCESS = 0, 846 ACPI_RASF_NOT_VALID = 1, 847 ACPI_RASF_NOT_SUPPORTED = 2, 848 ACPI_RASF_BUSY = 3, 849 ACPI_RASF_FAILED = 4, 850 ACPI_RASF_ABORTED = 5, 851 ACPI_RASF_INVALID_DATA = 6 852 }; 853 854 /* Status flags */ 855 856 #define ACPI_RASF_COMMAND_COMPLETE (1) 857 #define ACPI_RASF_SCI_DOORBELL (1<<1) 858 #define ACPI_RASF_ERROR (1<<2) 859 #define ACPI_RASF_STATUS (0x1F<<3) 860 861 862 /******************************************************************************* 863 * 864 * STAO - Status Override Table (_STA override) - ACPI 6.0 865 * Version 1 866 * 867 * Conforms to "ACPI Specification for Status Override Table" 868 * 6 January 2015 869 * 870 ******************************************************************************/ 871 872 typedef struct acpi_table_stao 873 { 874 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 875 UINT8 IgnoreUart; 876 877 } ACPI_TABLE_STAO; 878 879 880 /******************************************************************************* 881 * 882 * WPBT - Windows Platform Environment Table (ACPI 6.0) 883 * Version 1 884 * 885 * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 886 * 887 ******************************************************************************/ 888 889 typedef struct acpi_table_wpbt 890 { 891 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 892 UINT32 HandoffSize; 893 UINT64 HandoffAddress; 894 UINT8 Layout; 895 UINT8 Type; 896 UINT16 ArgumentsLength; 897 898 } ACPI_TABLE_WPBT; 899 900 901 /******************************************************************************* 902 * 903 * XENV - Xen Environment Table (ACPI 6.0) 904 * Version 1 905 * 906 * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015 907 * 908 ******************************************************************************/ 909 910 typedef struct acpi_table_xenv 911 { 912 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 913 UINT64 GrantTableAddress; 914 UINT64 GrantTableSize; 915 UINT32 EventInterrupt; 916 UINT8 EventFlags; 917 918 } ACPI_TABLE_XENV; 919 920 921 /* Reset to default packing */ 922 923 #pragma pack() 924 925 #endif /* __ACTBL3_H__ */ 926