11638Srgrimes/****************************************************************************** 250476Speter * 31638Srgrimes * Name: actbl3.h - ACPI Table Definitions 43470Srgrimes * 53470Srgrimes *****************************************************************************/ 61638Srgrimes 774942Sru/* 823559Swosch * Copyright (C) 2000 - 2016, Intel Corp. 91638Srgrimes * All rights reserved. 1023559Swosch * 1123559Swosch * Redistribution and use in source and binary forms, with or without 1223559Swosch * modification, are permitted provided that the following conditions 1323559Swosch * are met: 1423559Swosch * 1. Redistributions of source code must retain the above copyright 1523559Swosch * notice, this list of conditions, and the following disclaimer, 1623559Swosch * without modification. 1723559Swosch * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1823559Swosch * substantially similar to the "NO WARRANTY" disclaimer below 1923559Swosch * ("Disclaimer") and any redistribution must be conditioned upon 2023559Swosch * including a substantially similar Disclaimer requirement for further 2123559Swosch * binary redistribution. 2223559Swosch * 3. Neither the names of the above-listed copyright holders nor the names 2323559Swosch * of any contributors may be used to endorse or promote products derived 2423559Swosch * from this software without specific prior written permission. 2523559Swosch * 2623559Swosch * Alternatively, this software may be distributed under the terms of the 271638Srgrimes * GNU General Public License ("GPL") version 2 as published by the Free 281638Srgrimes * Software Foundation. 291638Srgrimes * 3023578Swosch * NO WARRANTY 3123578Swosch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3223578Swosch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 331638Srgrimes * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 341638Srgrimes * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 351638Srgrimes * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 361638Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 371638Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 381638Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 391638Srgrimes * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 401638Srgrimes * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 411638Srgrimes * POSSIBILITY OF SUCH DAMAGES. 421638Srgrimes */ 431638Srgrimes 441638Srgrimes#ifndef __ACTBL3_H__ 451638Srgrimes#define __ACTBL3_H__ 461638Srgrimes 471638Srgrimes 481638Srgrimes/******************************************************************************* 491638Srgrimes * 501638Srgrimes * Additional ACPI Tables (3) 511638Srgrimes * 521638Srgrimes * These tables are not consumed directly by the ACPICA subsystem, but are 531638Srgrimes * included here to support device drivers and the AML disassembler. 541638Srgrimes * 551638Srgrimes * In general, the tables in this file are fully defined within the ACPI 561638Srgrimes * specification. 571638Srgrimes * 581638Srgrimes ******************************************************************************/ 591638Srgrimes 601638Srgrimes 611638Srgrimes/* 621638Srgrimes * Values for description table header signatures for tables defined in this 631638Srgrimes * file. Useful because they make it more difficult to inadvertently type in 641638Srgrimes * the wrong signature. 651638Srgrimes */ 661638Srgrimes#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 671638Srgrimes#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 681638Srgrimes#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 691638Srgrimes#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 701638Srgrimes#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 711638Srgrimes#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 721638Srgrimes#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 731638Srgrimes#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 741638Srgrimes#define ACPI_SIG_STAO "STAO" /* Status Override table */ 751638Srgrimes#define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 761638Srgrimes#define ACPI_SIG_XENV "XENV" /* Xen Environment table */ 771638Srgrimes 781638Srgrimes#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 791638Srgrimes#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 801638Srgrimes 811638Srgrimes/* Reserved table signatures */ 821638Srgrimes 831638Srgrimes#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 841638Srgrimes#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 851638Srgrimes 861638Srgrimes/* 871638Srgrimes * All tables must be byte-packed to match the ACPI specification, since 881638Srgrimes * the tables are provided by the system BIOS. 891638Srgrimes */ 901638Srgrimes#pragma pack(1) 911638Srgrimes 921638Srgrimes/* 931638Srgrimes * Note: C bitfields are not used for this reason: 941638Srgrimes * 951638Srgrimes * "Bitfields are great and easy to read, but unfortunately the C language 961638Srgrimes * does not specify the layout of bitfields in memory, which means they are 971638Srgrimes * essentially useless for dealing with packed data in on-disk formats or 981638Srgrimes * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 991638Srgrimes * this decision was a design error in C. Ritchie could have picked an order 1001638Srgrimes * and stuck with it." Norman Ramsey. 1011638Srgrimes * See http://stackoverflow.com/a/1053662/41661 1021638Srgrimes */ 1031638Srgrimes 1041638Srgrimes 1051638Srgrimes/******************************************************************************* 1061638Srgrimes * 1071638Srgrimes * BGRT - Boot Graphics Resource Table (ACPI 5.0) 1081638Srgrimes * Version 1 1091638Srgrimes * 1101638Srgrimes ******************************************************************************/ 11174942Sru 1121638Srgrimestypedef struct acpi_table_bgrt 11358494Sru{ 1141638Srgrimes ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1151638Srgrimes UINT16 Version; 1161638Srgrimes UINT8 Status; 11774942Sru UINT8 ImageType; 11874942Sru UINT64 ImageAddress; 1191638Srgrimes UINT32 ImageOffsetX; 1201638Srgrimes UINT32 ImageOffsetY; 1211638Srgrimes 1221638Srgrimes} ACPI_TABLE_BGRT; 1231638Srgrimes 1241638Srgrimes 1251638Srgrimes/******************************************************************************* 1261638Srgrimes * 1271638Srgrimes * DRTM - Dynamic Root of Trust for Measurement table 1281638Srgrimes * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 1291638Srgrimes * Table version 1 1301638Srgrimes * 1311638Srgrimes ******************************************************************************/ 1321638Srgrimes 1331638Srgrimestypedef struct acpi_table_drtm 1341638Srgrimes{ 1351638Srgrimes ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1361638Srgrimes UINT64 EntryBaseAddress; 1371638Srgrimes UINT64 EntryLength; 1381638Srgrimes UINT32 EntryAddress32; 1391638Srgrimes UINT64 EntryAddress64; 1401638Srgrimes UINT64 ExitAddress; 1411638Srgrimes UINT64 LogAreaAddress; 1421638Srgrimes UINT32 LogAreaLength; 1431638Srgrimes UINT64 ArchDependentAddress; 1441638Srgrimes UINT32 Flags; 1451638Srgrimes 1461638Srgrimes} ACPI_TABLE_DRTM; 1471638Srgrimes 1481638Srgrimes/* Flag Definitions for above */ 1491638Srgrimes 1501638Srgrimes#define ACPI_DRTM_ACCESS_ALLOWED (1) 1511638Srgrimes#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) 1521638Srgrimes#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) 1531638Srgrimes#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) 1541638Srgrimes 1551638Srgrimes 1561638Srgrimes/* 1) Validated Tables List (64-bit addresses) */ 1571638Srgrimes 1581638Srgrimestypedef struct acpi_drtm_vtable_list 1591638Srgrimes{ 1601638Srgrimes UINT32 ValidatedTableCount; 1611638Srgrimes UINT64 ValidatedTables[1]; 1621638Srgrimes 1631638Srgrimes} ACPI_DRTM_VTABLE_LIST; 1641638Srgrimes 1651638Srgrimes/* 2) Resources List (of Resource Descriptors) */ 1661638Srgrimes 1671638Srgrimes/* Resource Descriptor */ 1681638Srgrimes 1691638Srgrimestypedef struct acpi_drtm_resource 1701638Srgrimes{ 1711638Srgrimes UINT8 Size[7]; 1721638Srgrimes UINT8 Type; 1731638Srgrimes UINT64 Address; 1741638Srgrimes 1751638Srgrimes} ACPI_DRTM_RESOURCE; 1761638Srgrimes 1771638Srgrimestypedef struct acpi_drtm_resource_list 1781638Srgrimes{ 1791638Srgrimes UINT32 ResourceCount; 1801638Srgrimes ACPI_DRTM_RESOURCE Resources[1]; 1811638Srgrimes 1821638Srgrimes} ACPI_DRTM_RESOURCE_LIST; 1831638Srgrimes 1841638Srgrimes/* 3) Platform-specific Identifiers List */ 1851638Srgrimes 1861638Srgrimestypedef struct acpi_drtm_dps_id 1871638Srgrimes{ 1881638Srgrimes UINT32 DpsIdLength; 18916437Sphk UINT8 DpsId[16]; 19016437Sphk 19116437Sphk} ACPI_DRTM_DPS_ID; 1921638Srgrimes 1931638Srgrimes 1941638Srgrimes/******************************************************************************* 1951638Srgrimes * 1961638Srgrimes * FPDT - Firmware Performance Data Table (ACPI 5.0) 1971638Srgrimes * Version 1 1981638Srgrimes * 1991638Srgrimes ******************************************************************************/ 2001638Srgrimes 2011638Srgrimestypedef struct acpi_table_fpdt 2021638Srgrimes{ 2031638Srgrimes ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2041638Srgrimes 2051638Srgrimes} ACPI_TABLE_FPDT; 2061638Srgrimes 2071638Srgrimes 2081638Srgrimes/* FPDT subtable header (Performance Record Structure) */ 2091638Srgrimes 2101638Srgrimestypedef struct acpi_fpdt_header 2111638Srgrimes{ 2121638Srgrimes UINT16 Type; 2131638Srgrimes UINT8 Length; 21474942Sru UINT8 Revision; 21574942Sru 2161638Srgrimes} ACPI_FPDT_HEADER; 2171638Srgrimes 2181638Srgrimes/* Values for Type field above */ 2191638Srgrimes 22075083Sruenum AcpiFpdtType 22175083Sru{ 22275083Sru ACPI_FPDT_TYPE_BOOT = 0, 22353965Smharo ACPI_FPDT_TYPE_S3PERF = 1 2241638Srgrimes}; 2251638Srgrimes 2261638Srgrimes 2271638Srgrimes/* 2281638Srgrimes * FPDT subtables 2291638Srgrimes */ 2301638Srgrimes 2311638Srgrimes/* 0: Firmware Basic Boot Performance Record */ 23214701Sbde 23314701Sbdetypedef struct acpi_fpdt_boot_pointer 23414701Sbde{ 23514701Sbde ACPI_FPDT_HEADER Header; 2361638Srgrimes UINT8 Reserved[4]; 23714701Sbde UINT64 Address; 23814701Sbde 23914701Sbde} ACPI_FPDT_BOOT_POINTER; 24014701Sbde 24114701Sbde 24214701Sbde/* 1: S3 Performance Table Pointer Record */ 24314701Sbde 24414701Sbdetypedef struct acpi_fpdt_s3pt_pointer 2451638Srgrimes{ 2461638Srgrimes ACPI_FPDT_HEADER Header; 2471638Srgrimes UINT8 Reserved[4]; 2481638Srgrimes UINT64 Address; 2491638Srgrimes 2501638Srgrimes} ACPI_FPDT_S3PT_POINTER; 2511638Srgrimes 2521638Srgrimes 25375284Sru/* 25475284Sru * S3PT - S3 Performance Table. This table is pointed to by the 25575284Sru * S3 Pointer Record above. 25675284Sru */ 25775284Srutypedef struct acpi_table_s3pt 25874942Sru{ 25974942Sru UINT8 Signature[4]; /* "S3PT" */ 2601638Srgrimes UINT32 Length; 2611638Srgrimes 2621638Srgrimes} ACPI_TABLE_S3PT; 2631638Srgrimes 2641638Srgrimes 2651638Srgrimes/* 2661638Srgrimes * S3PT Subtables (Not part of the actual FPDT) 2671638Srgrimes */ 2681638Srgrimes 2691638Srgrimes/* Values for Type field in S3PT header */ 2701638Srgrimes 27158494Sruenum AcpiS3ptType 2721638Srgrimes{ 2731638Srgrimes ACPI_S3PT_TYPE_RESUME = 0, 2741638Srgrimes ACPI_S3PT_TYPE_SUSPEND = 1, 2751638Srgrimes ACPI_FPDT_BOOT_PERFORMANCE = 2 2761638Srgrimes}; 2771638Srgrimes 2781638Srgrimestypedef struct acpi_s3pt_resume 2791638Srgrimes{ 2801638Srgrimes ACPI_FPDT_HEADER Header; 2811638Srgrimes UINT32 ResumeCount; 2821638Srgrimes UINT64 FullResume; 2831638Srgrimes UINT64 AverageResume; 2841638Srgrimes 2851638Srgrimes} ACPI_S3PT_RESUME; 2861638Srgrimes 2871638Srgrimestypedef struct acpi_s3pt_suspend 2881638Srgrimes{ 2891638Srgrimes ACPI_FPDT_HEADER Header; 2901638Srgrimes UINT64 SuspendStart; 2911638Srgrimes UINT64 SuspendEnd; 2921638Srgrimes 2931638Srgrimes} ACPI_S3PT_SUSPEND; 2941638Srgrimes 2951638Srgrimes 2961638Srgrimes/* 2971638Srgrimes * FPDT Boot Performance Record (Not part of the actual FPDT) 2981638Srgrimes */ 2991638Srgrimestypedef struct acpi_fpdt_boot 3001638Srgrimes{ 3011638Srgrimes ACPI_FPDT_HEADER Header; 3021638Srgrimes UINT8 Reserved[4]; 3031638Srgrimes UINT64 ResetEnd; 3041638Srgrimes UINT64 LoadStart; 3051638Srgrimes UINT64 StartupStart; 3061638Srgrimes UINT64 ExitServicesEntry; 3071638Srgrimes UINT64 ExitServicesExit; 3081638Srgrimes 3091638Srgrimes} ACPI_FPDT_BOOT; 3101638Srgrimes 3111638Srgrimes 31274942Sru/******************************************************************************* 3131638Srgrimes * 3141638Srgrimes * GTDT - Generic Timer Description Table (ACPI 5.1) 3151638Srgrimes * Version 2 3161638Srgrimes * 3171638Srgrimes ******************************************************************************/ 3181638Srgrimes 31974942Srutypedef struct acpi_table_gtdt 32074942Sru{ 3211638Srgrimes ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3221638Srgrimes UINT64 CounterBlockAddresss; 3231638Srgrimes UINT32 Reserved; 3241638Srgrimes UINT32 SecureEl1Interrupt; 3251638Srgrimes 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 347typedef 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 356enum 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 368typedef 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 380typedef 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 407typedef 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 440typedef 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 450typedef 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 459typedef 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 481typedef 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 491typedef 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 500typedef struct acpi_mpst_data_hdr 501{ 502 UINT16 CharacteristicsCount; 503 UINT16 Reserved; 504 505} ACPI_MPST_DATA_HDR; 506 507typedef 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 528typedef 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 550typedef 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 564enum 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 578typedef 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 596typedef 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 616typedef 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 649typedef 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 665typedef 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 675typedef 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 706typedef 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 717typedef 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 733typedef struct acpi_pmtt_domain 734{ 735 UINT32 ProximityDomain; 736 737} ACPI_PMTT_DOMAIN; 738 739 740/* 2: Physical Component Identifier (DIMM) */ 741 742typedef 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 760typedef 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 769typedef 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 784typedef 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 794typedef 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 815enum AcpiRasfCommands 816{ 817 ACPI_RASF_EXECUTE_RASF_COMMAND = 1 818}; 819 820/* Platform RAS Capabilities */ 821 822enum AcpiRasfCapabiliities 823{ 824 ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 825 ACPI_SW_PATROL_SCRUB_EXPOSED = 1 826}; 827 828/* Patrol Scrub Commands */ 829 830enum 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 843enum 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 872typedef 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 889typedef 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 910typedef 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