xref: /freebsd/sys/contrib/dev/acpica/include/actbl3.h (revision efcc2a30547c400649a351e85e6cd97dab8f3817)
13f0275a0SJung-uk Kim /******************************************************************************
23f0275a0SJung-uk Kim  *
33f0275a0SJung-uk Kim  * Name: actbl3.h - ACPI Table Definitions
43f0275a0SJung-uk Kim  *
53f0275a0SJung-uk Kim  *****************************************************************************/
63f0275a0SJung-uk Kim 
73f0275a0SJung-uk Kim /*
8*efcc2a30SJung-uk Kim  * Copyright (C) 2000 - 2013, Intel Corp.
93f0275a0SJung-uk Kim  * All rights reserved.
103f0275a0SJung-uk Kim  *
113f0275a0SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
123f0275a0SJung-uk Kim  * modification, are permitted provided that the following conditions
133f0275a0SJung-uk Kim  * are met:
143f0275a0SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
153f0275a0SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
163f0275a0SJung-uk Kim  *    without modification.
173f0275a0SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
183f0275a0SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
193f0275a0SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
203f0275a0SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
213f0275a0SJung-uk Kim  *    binary redistribution.
223f0275a0SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
233f0275a0SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
243f0275a0SJung-uk Kim  *    from this software without specific prior written permission.
253f0275a0SJung-uk Kim  *
263f0275a0SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
273f0275a0SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
283f0275a0SJung-uk Kim  * Software Foundation.
293f0275a0SJung-uk Kim  *
303f0275a0SJung-uk Kim  * NO WARRANTY
313f0275a0SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
323f0275a0SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
333f0275a0SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
343f0275a0SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
353f0275a0SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
363f0275a0SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
373f0275a0SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
383f0275a0SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
393f0275a0SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
403f0275a0SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
413f0275a0SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
423f0275a0SJung-uk Kim  */
433f0275a0SJung-uk Kim 
443f0275a0SJung-uk Kim #ifndef __ACTBL3_H__
453f0275a0SJung-uk Kim #define __ACTBL3_H__
463f0275a0SJung-uk Kim 
473f0275a0SJung-uk Kim 
483f0275a0SJung-uk Kim /*******************************************************************************
493f0275a0SJung-uk Kim  *
503f0275a0SJung-uk Kim  * Additional ACPI Tables (3)
513f0275a0SJung-uk Kim  *
523f0275a0SJung-uk Kim  * These tables are not consumed directly by the ACPICA subsystem, but are
533f0275a0SJung-uk Kim  * included here to support device drivers and the AML disassembler.
543f0275a0SJung-uk Kim  *
553f0275a0SJung-uk Kim  * The tables in this file are fully defined within the ACPI specification.
563f0275a0SJung-uk Kim  *
573f0275a0SJung-uk Kim  ******************************************************************************/
583f0275a0SJung-uk Kim 
593f0275a0SJung-uk Kim 
603f0275a0SJung-uk Kim /*
613f0275a0SJung-uk Kim  * Values for description table header signatures for tables defined in this
623f0275a0SJung-uk Kim  * file. Useful because they make it more difficult to inadvertently type in
633f0275a0SJung-uk Kim  * the wrong signature.
643f0275a0SJung-uk Kim  */
653f0275a0SJung-uk Kim #define ACPI_SIG_BGRT           "BGRT"      /* Boot Graphics Resource Table */
663f0275a0SJung-uk Kim #define ACPI_SIG_DRTM           "DRTM"      /* Dynamic Root of Trust for Measurement table */
673f0275a0SJung-uk Kim #define ACPI_SIG_FPDT           "FPDT"      /* Firmware Performance Data Table */
683f0275a0SJung-uk Kim #define ACPI_SIG_GTDT           "GTDT"      /* Generic Timer Description Table */
693f0275a0SJung-uk Kim #define ACPI_SIG_MPST           "MPST"      /* Memory Power State Table */
703f0275a0SJung-uk Kim #define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
713f0275a0SJung-uk Kim #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
723f0275a0SJung-uk Kim #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
73*efcc2a30SJung-uk Kim #define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
743f0275a0SJung-uk Kim 
753f0275a0SJung-uk Kim #define ACPI_SIG_S3PT           "S3PT"      /* S3 Performance (sub)Table */
763f0275a0SJung-uk Kim #define ACPI_SIG_PCCS           "PCC"       /* PCC Shared Memory Region */
773f0275a0SJung-uk Kim 
783f0275a0SJung-uk Kim /* Reserved table signatures */
793f0275a0SJung-uk Kim 
803f0275a0SJung-uk Kim #define ACPI_SIG_MATR           "MATR"      /* Memory Address Translation Table */
813f0275a0SJung-uk Kim #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
823f0275a0SJung-uk Kim #define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
833f0275a0SJung-uk Kim 
843f0275a0SJung-uk Kim /*
853f0275a0SJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
863f0275a0SJung-uk Kim  * the tables are provided by the system BIOS.
873f0275a0SJung-uk Kim  */
883f0275a0SJung-uk Kim #pragma pack(1)
893f0275a0SJung-uk Kim 
903f0275a0SJung-uk Kim /*
911df130f1SJung-uk Kim  * Note: C bitfields are not used for this reason:
921df130f1SJung-uk Kim  *
931df130f1SJung-uk Kim  * "Bitfields are great and easy to read, but unfortunately the C language
941df130f1SJung-uk Kim  * does not specify the layout of bitfields in memory, which means they are
951df130f1SJung-uk Kim  * essentially useless for dealing with packed data in on-disk formats or
961df130f1SJung-uk Kim  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
971df130f1SJung-uk Kim  * this decision was a design error in C. Ritchie could have picked an order
981df130f1SJung-uk Kim  * and stuck with it." Norman Ramsey.
991df130f1SJung-uk Kim  * See http://stackoverflow.com/a/1053662/41661
1003f0275a0SJung-uk Kim  */
1013f0275a0SJung-uk Kim 
1023f0275a0SJung-uk Kim 
1033f0275a0SJung-uk Kim /*******************************************************************************
1043f0275a0SJung-uk Kim  *
1053f0275a0SJung-uk Kim  * BGRT - Boot Graphics Resource Table (ACPI 5.0)
1063f0275a0SJung-uk Kim  *        Version 1
1073f0275a0SJung-uk Kim  *
1083f0275a0SJung-uk Kim  ******************************************************************************/
1093f0275a0SJung-uk Kim 
1103f0275a0SJung-uk Kim typedef struct acpi_table_bgrt
1113f0275a0SJung-uk Kim {
1123f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1133f0275a0SJung-uk Kim     UINT16                  Version;
1143f0275a0SJung-uk Kim     UINT8                   Status;
1153f0275a0SJung-uk Kim     UINT8                   ImageType;
1163f0275a0SJung-uk Kim     UINT64                  ImageAddress;
1173f0275a0SJung-uk Kim     UINT32                  ImageOffsetX;
1183f0275a0SJung-uk Kim     UINT32                  ImageOffsetY;
1193f0275a0SJung-uk Kim 
1203f0275a0SJung-uk Kim } ACPI_TABLE_BGRT;
1213f0275a0SJung-uk Kim 
1223f0275a0SJung-uk Kim 
1233f0275a0SJung-uk Kim /*******************************************************************************
1243f0275a0SJung-uk Kim  *
1253f0275a0SJung-uk Kim  * DRTM - Dynamic Root of Trust for Measurement table
1263f0275a0SJung-uk Kim  *
1273f0275a0SJung-uk Kim  ******************************************************************************/
1283f0275a0SJung-uk Kim 
1293f0275a0SJung-uk Kim typedef struct acpi_table_drtm
1303f0275a0SJung-uk Kim {
1313f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1323f0275a0SJung-uk Kim     UINT64                  EntryBaseAddress;
1333f0275a0SJung-uk Kim     UINT64                  EntryLength;
1343f0275a0SJung-uk Kim     UINT32                  EntryAddress32;
1353f0275a0SJung-uk Kim     UINT64                  EntryAddress64;
1363f0275a0SJung-uk Kim     UINT64                  ExitAddress;
1373f0275a0SJung-uk Kim     UINT64                  LogAreaAddress;
1383f0275a0SJung-uk Kim     UINT32                  LogAreaLength;
1393f0275a0SJung-uk Kim     UINT64                  ArchDependentAddress;
1403f0275a0SJung-uk Kim     UINT32                  Flags;
1413f0275a0SJung-uk Kim 
1423f0275a0SJung-uk Kim } ACPI_TABLE_DRTM;
1433f0275a0SJung-uk Kim 
1443f0275a0SJung-uk Kim /* 1) Validated Tables List */
1453f0275a0SJung-uk Kim 
1463f0275a0SJung-uk Kim typedef struct acpi_drtm_vtl_list
1473f0275a0SJung-uk Kim {
1483f0275a0SJung-uk Kim     UINT32                  ValidatedTableListCount;
1493f0275a0SJung-uk Kim 
1503f0275a0SJung-uk Kim } ACPI_DRTM_VTL_LIST;
1513f0275a0SJung-uk Kim 
1523f0275a0SJung-uk Kim /* 2) Resources List */
1533f0275a0SJung-uk Kim 
1543f0275a0SJung-uk Kim typedef struct acpi_drtm_resource_list
1553f0275a0SJung-uk Kim {
1563f0275a0SJung-uk Kim     UINT32                  ResourceListCount;
1573f0275a0SJung-uk Kim 
1583f0275a0SJung-uk Kim } ACPI_DRTM_RESOURCE_LIST;
1593f0275a0SJung-uk Kim 
1603f0275a0SJung-uk Kim /* 3) Platform-specific Identifiers List */
1613f0275a0SJung-uk Kim 
1623f0275a0SJung-uk Kim typedef struct acpi_drtm_id_list
1633f0275a0SJung-uk Kim {
1643f0275a0SJung-uk Kim     UINT32                  IdListCount;
1653f0275a0SJung-uk Kim 
1663f0275a0SJung-uk Kim } ACPI_DRTM_ID_LIST;
1673f0275a0SJung-uk Kim 
1683f0275a0SJung-uk Kim 
1693f0275a0SJung-uk Kim /*******************************************************************************
1703f0275a0SJung-uk Kim  *
1713f0275a0SJung-uk Kim  * FPDT - Firmware Performance Data Table (ACPI 5.0)
1723f0275a0SJung-uk Kim  *        Version 1
1733f0275a0SJung-uk Kim  *
1743f0275a0SJung-uk Kim  ******************************************************************************/
1753f0275a0SJung-uk Kim 
1763f0275a0SJung-uk Kim typedef struct acpi_table_fpdt
1773f0275a0SJung-uk Kim {
1783f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1793f0275a0SJung-uk Kim 
1803f0275a0SJung-uk Kim } ACPI_TABLE_FPDT;
1813f0275a0SJung-uk Kim 
1823f0275a0SJung-uk Kim 
1833f0275a0SJung-uk Kim /* FPDT subtable header */
1843f0275a0SJung-uk Kim 
1853f0275a0SJung-uk Kim typedef struct acpi_fpdt_header
1863f0275a0SJung-uk Kim {
1873f0275a0SJung-uk Kim     UINT16                  Type;
1883f0275a0SJung-uk Kim     UINT8                   Length;
1893f0275a0SJung-uk Kim     UINT8                   Revision;
1903f0275a0SJung-uk Kim 
1913f0275a0SJung-uk Kim } ACPI_FPDT_HEADER;
1923f0275a0SJung-uk Kim 
1933f0275a0SJung-uk Kim /* Values for Type field above */
1943f0275a0SJung-uk Kim 
1953f0275a0SJung-uk Kim enum AcpiFpdtType
1963f0275a0SJung-uk Kim {
1973f0275a0SJung-uk Kim     ACPI_FPDT_TYPE_BOOT                 = 0,
1983f0275a0SJung-uk Kim     ACPI_FPDT_TYPE_S3PERF               = 1,
1993f0275a0SJung-uk Kim };
2003f0275a0SJung-uk Kim 
2013f0275a0SJung-uk Kim 
2023f0275a0SJung-uk Kim /*
2033f0275a0SJung-uk Kim  * FPDT subtables
2043f0275a0SJung-uk Kim  */
2053f0275a0SJung-uk Kim 
2063f0275a0SJung-uk Kim /* 0: Firmware Basic Boot Performance Record */
2073f0275a0SJung-uk Kim 
2083f0275a0SJung-uk Kim typedef struct acpi_fpdt_boot
2093f0275a0SJung-uk Kim {
2103f0275a0SJung-uk Kim     ACPI_FPDT_HEADER        Header;
2113f0275a0SJung-uk Kim     UINT8                   Reserved[4];
2123f0275a0SJung-uk Kim     UINT64                  ResetEnd;
2133f0275a0SJung-uk Kim     UINT64                  LoadStart;
2143f0275a0SJung-uk Kim     UINT64                  StartupStart;
2153f0275a0SJung-uk Kim     UINT64                  ExitServicesEntry;
2163f0275a0SJung-uk Kim     UINT64                  ExitServicesExit;
2173f0275a0SJung-uk Kim 
2183f0275a0SJung-uk Kim } ACPI_FPDT_BOOT;
2193f0275a0SJung-uk Kim 
2203f0275a0SJung-uk Kim 
2213f0275a0SJung-uk Kim /* 1: S3 Performance Table Pointer Record */
2223f0275a0SJung-uk Kim 
2233f0275a0SJung-uk Kim typedef struct acpi_fpdt_s3pt_ptr
2243f0275a0SJung-uk Kim {
2253f0275a0SJung-uk Kim     ACPI_FPDT_HEADER        Header;
2263f0275a0SJung-uk Kim     UINT8                   Reserved[4];
2273f0275a0SJung-uk Kim     UINT64                  Address;
2283f0275a0SJung-uk Kim 
2293f0275a0SJung-uk Kim } ACPI_FPDT_S3PT_PTR;
2303f0275a0SJung-uk Kim 
2313f0275a0SJung-uk Kim 
2323f0275a0SJung-uk Kim /*
2333f0275a0SJung-uk Kim  * S3PT - S3 Performance Table. This table is pointed to by the
2343f0275a0SJung-uk Kim  * FPDT S3 Pointer Record above.
2353f0275a0SJung-uk Kim  */
2363f0275a0SJung-uk Kim typedef struct acpi_table_s3pt
2373f0275a0SJung-uk Kim {
2383f0275a0SJung-uk Kim     UINT8                   Signature[4]; /* "S3PT" */
2393f0275a0SJung-uk Kim     UINT32                  Length;
2403f0275a0SJung-uk Kim 
2413f0275a0SJung-uk Kim } ACPI_TABLE_S3PT;
2423f0275a0SJung-uk Kim 
2433f0275a0SJung-uk Kim 
2443f0275a0SJung-uk Kim /*
2453f0275a0SJung-uk Kim  * S3PT Subtables
2463f0275a0SJung-uk Kim  */
2473f0275a0SJung-uk Kim typedef struct acpi_s3pt_header
2483f0275a0SJung-uk Kim {
2493f0275a0SJung-uk Kim     UINT16                  Type;
2503f0275a0SJung-uk Kim     UINT8                   Length;
2513f0275a0SJung-uk Kim     UINT8                   Revision;
2523f0275a0SJung-uk Kim 
2533f0275a0SJung-uk Kim } ACPI_S3PT_HEADER;
2543f0275a0SJung-uk Kim 
2553f0275a0SJung-uk Kim /* Values for Type field above */
2563f0275a0SJung-uk Kim 
2573f0275a0SJung-uk Kim enum AcpiS3ptType
2583f0275a0SJung-uk Kim {
2593f0275a0SJung-uk Kim     ACPI_S3PT_TYPE_RESUME               = 0,
2603f0275a0SJung-uk Kim     ACPI_S3PT_TYPE_SUSPEND              = 1,
2613f0275a0SJung-uk Kim };
2623f0275a0SJung-uk Kim 
2633f0275a0SJung-uk Kim typedef struct acpi_s3pt_resume
2643f0275a0SJung-uk Kim {
2653f0275a0SJung-uk Kim     ACPI_S3PT_HEADER        Header;
2663f0275a0SJung-uk Kim     UINT32                  ResumeCount;
2673f0275a0SJung-uk Kim     UINT64                  FullResume;
2683f0275a0SJung-uk Kim     UINT64                  AverageResume;
2693f0275a0SJung-uk Kim 
2703f0275a0SJung-uk Kim } ACPI_S3PT_RESUME;
2713f0275a0SJung-uk Kim 
2723f0275a0SJung-uk Kim typedef struct acpi_s3pt_suspend
2733f0275a0SJung-uk Kim {
2743f0275a0SJung-uk Kim     ACPI_S3PT_HEADER        Header;
2753f0275a0SJung-uk Kim     UINT64                  SuspendStart;
2763f0275a0SJung-uk Kim     UINT64                  SuspendEnd;
2773f0275a0SJung-uk Kim 
2783f0275a0SJung-uk Kim } ACPI_S3PT_SUSPEND;
2793f0275a0SJung-uk Kim 
2803f0275a0SJung-uk Kim 
2813f0275a0SJung-uk Kim /*******************************************************************************
2823f0275a0SJung-uk Kim  *
2833f0275a0SJung-uk Kim  * GTDT - Generic Timer Description Table (ACPI 5.0)
2843f0275a0SJung-uk Kim  *        Version 1
2853f0275a0SJung-uk Kim  *
2863f0275a0SJung-uk Kim  ******************************************************************************/
2873f0275a0SJung-uk Kim 
2883f0275a0SJung-uk Kim typedef struct acpi_table_gtdt
2893f0275a0SJung-uk Kim {
2903f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2913f0275a0SJung-uk Kim     UINT64                  Address;
2923f0275a0SJung-uk Kim     UINT32                  Flags;
2933f0275a0SJung-uk Kim     UINT32                  SecurePl1Interrupt;
2943f0275a0SJung-uk Kim     UINT32                  SecurePl1Flags;
2953f0275a0SJung-uk Kim     UINT32                  NonSecurePl1Interrupt;
2963f0275a0SJung-uk Kim     UINT32                  NonSecurePl1Flags;
2973f0275a0SJung-uk Kim     UINT32                  VirtualTimerInterrupt;
2983f0275a0SJung-uk Kim     UINT32                  VirtualTimerFlags;
2993f0275a0SJung-uk Kim     UINT32                  NonSecurePl2Interrupt;
3003f0275a0SJung-uk Kim     UINT32                  NonSecurePl2Flags;
3013f0275a0SJung-uk Kim 
3023f0275a0SJung-uk Kim } ACPI_TABLE_GTDT;
3033f0275a0SJung-uk Kim 
3043f0275a0SJung-uk Kim /* Values for Flags field above */
3053f0275a0SJung-uk Kim 
3063f0275a0SJung-uk Kim #define ACPI_GTDT_MAPPED_BLOCK_PRESENT      1
3073f0275a0SJung-uk Kim 
3083f0275a0SJung-uk Kim /* Values for all "TimerFlags" fields above */
3093f0275a0SJung-uk Kim 
3103f0275a0SJung-uk Kim #define ACPI_GTDT_INTERRUPT_MODE            1
3113f0275a0SJung-uk Kim #define ACPI_GTDT_INTERRUPT_POLARITY        2
3123f0275a0SJung-uk Kim 
3133f0275a0SJung-uk Kim 
3143f0275a0SJung-uk Kim /*******************************************************************************
3153f0275a0SJung-uk Kim  *
3163f0275a0SJung-uk Kim  * MPST - Memory Power State Table (ACPI 5.0)
3173f0275a0SJung-uk Kim  *        Version 1
3183f0275a0SJung-uk Kim  *
3193f0275a0SJung-uk Kim  ******************************************************************************/
3203f0275a0SJung-uk Kim 
3213f0275a0SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \
3223f0275a0SJung-uk Kim     UINT8                   ChannelId; \
3238ef1a331SJung-uk Kim     UINT8                   Reserved1[3]; \
3248ef1a331SJung-uk Kim     UINT16                  PowerNodeCount; \
3258ef1a331SJung-uk Kim     UINT16                  Reserved2;
3263f0275a0SJung-uk Kim 
3273f0275a0SJung-uk Kim /* Main table */
3283f0275a0SJung-uk Kim 
3293f0275a0SJung-uk Kim typedef struct acpi_table_mpst
3303f0275a0SJung-uk Kim {
3313f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3323f0275a0SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
3333f0275a0SJung-uk Kim 
3343f0275a0SJung-uk Kim } ACPI_TABLE_MPST;
3353f0275a0SJung-uk Kim 
3363f0275a0SJung-uk Kim 
3373f0275a0SJung-uk Kim /* Memory Platform Communication Channel Info */
3383f0275a0SJung-uk Kim 
3393f0275a0SJung-uk Kim typedef struct acpi_mpst_channel
3403f0275a0SJung-uk Kim {
3413f0275a0SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
3423f0275a0SJung-uk Kim 
3433f0275a0SJung-uk Kim } ACPI_MPST_CHANNEL;
3443f0275a0SJung-uk Kim 
3453f0275a0SJung-uk Kim 
3463f0275a0SJung-uk Kim /* Memory Power Node Structure */
3473f0275a0SJung-uk Kim 
3483f0275a0SJung-uk Kim typedef struct acpi_mpst_power_node
3493f0275a0SJung-uk Kim {
3503f0275a0SJung-uk Kim     UINT8                   Flags;
3513f0275a0SJung-uk Kim     UINT8                   Reserved1;
3523f0275a0SJung-uk Kim     UINT16                  NodeId;
3533f0275a0SJung-uk Kim     UINT32                  Length;
3543f0275a0SJung-uk Kim     UINT64                  RangeAddress;
3553f0275a0SJung-uk Kim     UINT64                  RangeLength;
3568ef1a331SJung-uk Kim     UINT32                  NumPowerStates;
3578ef1a331SJung-uk Kim     UINT32                  NumPhysicalComponents;
3583f0275a0SJung-uk Kim 
3593f0275a0SJung-uk Kim } ACPI_MPST_POWER_NODE;
3603f0275a0SJung-uk Kim 
3613f0275a0SJung-uk Kim /* Values for Flags field above */
3623f0275a0SJung-uk Kim 
3633f0275a0SJung-uk Kim #define ACPI_MPST_ENABLED               1
3643f0275a0SJung-uk Kim #define ACPI_MPST_POWER_MANAGED         2
3653f0275a0SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE      4
3663f0275a0SJung-uk Kim 
3673f0275a0SJung-uk Kim 
3683f0275a0SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */
3693f0275a0SJung-uk Kim 
3703f0275a0SJung-uk Kim typedef struct acpi_mpst_power_state
3713f0275a0SJung-uk Kim {
3723f0275a0SJung-uk Kim     UINT8                   PowerState;
3733f0275a0SJung-uk Kim     UINT8                   InfoIndex;
3743f0275a0SJung-uk Kim 
3753f0275a0SJung-uk Kim } ACPI_MPST_POWER_STATE;
3763f0275a0SJung-uk Kim 
3773f0275a0SJung-uk Kim 
3783f0275a0SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */
3793f0275a0SJung-uk Kim 
3803f0275a0SJung-uk Kim typedef struct acpi_mpst_component
3813f0275a0SJung-uk Kim {
3823f0275a0SJung-uk Kim     UINT16                  ComponentId;
3833f0275a0SJung-uk Kim 
3843f0275a0SJung-uk Kim } ACPI_MPST_COMPONENT;
3853f0275a0SJung-uk Kim 
3863f0275a0SJung-uk Kim 
3873f0275a0SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
3883f0275a0SJung-uk Kim 
3893f0275a0SJung-uk Kim typedef struct acpi_mpst_data_hdr
3903f0275a0SJung-uk Kim {
3913f0275a0SJung-uk Kim     UINT16                  CharacteristicsCount;
3928ef1a331SJung-uk Kim     UINT16                  Reserved;
3933f0275a0SJung-uk Kim 
3943f0275a0SJung-uk Kim } ACPI_MPST_DATA_HDR;
3953f0275a0SJung-uk Kim 
3963f0275a0SJung-uk Kim typedef struct acpi_mpst_power_data
3973f0275a0SJung-uk Kim {
3988ef1a331SJung-uk Kim     UINT8                   StructureId;
3993f0275a0SJung-uk Kim     UINT8                   Flags;
4003f0275a0SJung-uk Kim     UINT16                  Reserved1;
4013f0275a0SJung-uk Kim     UINT32                  AveragePower;
4023f0275a0SJung-uk Kim     UINT32                  PowerSaving;
4033f0275a0SJung-uk Kim     UINT64                  ExitLatency;
4043f0275a0SJung-uk Kim     UINT64                  Reserved2;
4053f0275a0SJung-uk Kim 
4063f0275a0SJung-uk Kim } ACPI_MPST_POWER_DATA;
4073f0275a0SJung-uk Kim 
4083f0275a0SJung-uk Kim /* Values for Flags field above */
4093f0275a0SJung-uk Kim 
4103f0275a0SJung-uk Kim #define ACPI_MPST_PRESERVE              1
4113f0275a0SJung-uk Kim #define ACPI_MPST_AUTOENTRY             2
4123f0275a0SJung-uk Kim #define ACPI_MPST_AUTOEXIT              4
4133f0275a0SJung-uk Kim 
4143f0275a0SJung-uk Kim 
4153f0275a0SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */
4163f0275a0SJung-uk Kim 
4173f0275a0SJung-uk Kim typedef struct acpi_mpst_shared
4183f0275a0SJung-uk Kim {
4193f0275a0SJung-uk Kim     UINT32                  Signature;
4203f0275a0SJung-uk Kim     UINT16                  PccCommand;
4213f0275a0SJung-uk Kim     UINT16                  PccStatus;
4228ef1a331SJung-uk Kim     UINT32                  CommandRegister;
4238ef1a331SJung-uk Kim     UINT32                  StatusRegister;
4248ef1a331SJung-uk Kim     UINT32                  PowerStateId;
4258ef1a331SJung-uk Kim     UINT32                  PowerNodeId;
4263f0275a0SJung-uk Kim     UINT64                  EnergyConsumed;
4273f0275a0SJung-uk Kim     UINT64                  AveragePower;
4283f0275a0SJung-uk Kim 
4293f0275a0SJung-uk Kim } ACPI_MPST_SHARED;
4303f0275a0SJung-uk Kim 
4313f0275a0SJung-uk Kim 
4323f0275a0SJung-uk Kim /*******************************************************************************
4333f0275a0SJung-uk Kim  *
4343f0275a0SJung-uk Kim  * PCCT - Platform Communications Channel Table (ACPI 5.0)
4353f0275a0SJung-uk Kim  *        Version 1
4363f0275a0SJung-uk Kim  *
4373f0275a0SJung-uk Kim  ******************************************************************************/
4383f0275a0SJung-uk Kim 
4393f0275a0SJung-uk Kim typedef struct acpi_table_pcct
4403f0275a0SJung-uk Kim {
4413f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
4423f0275a0SJung-uk Kim     UINT32                  Flags;
4433f0275a0SJung-uk Kim     UINT32                  Latency;
4443f0275a0SJung-uk Kim     UINT32                  Reserved;
4453f0275a0SJung-uk Kim 
4463f0275a0SJung-uk Kim } ACPI_TABLE_PCCT;
4473f0275a0SJung-uk Kim 
4483f0275a0SJung-uk Kim /* Values for Flags field above */
4493f0275a0SJung-uk Kim 
4503f0275a0SJung-uk Kim #define ACPI_PCCT_DOORBELL              1
4513f0275a0SJung-uk Kim 
4523f0275a0SJung-uk Kim /*
4533f0275a0SJung-uk Kim  * PCCT subtables
4543f0275a0SJung-uk Kim  */
4553f0275a0SJung-uk Kim 
4563f0275a0SJung-uk Kim /* 0: Generic Communications Subspace */
4573f0275a0SJung-uk Kim 
4583f0275a0SJung-uk Kim typedef struct acpi_pcct_subspace
4593f0275a0SJung-uk Kim {
4603f0275a0SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
4613f0275a0SJung-uk Kim     UINT8                   Reserved[6];
4623f0275a0SJung-uk Kim     UINT64                  BaseAddress;
4633f0275a0SJung-uk Kim     UINT64                  Length;
4643f0275a0SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
4653f0275a0SJung-uk Kim     UINT64                  PreserveMask;
4663f0275a0SJung-uk Kim     UINT64                  WriteMask;
4673f0275a0SJung-uk Kim 
4683f0275a0SJung-uk Kim } ACPI_PCCT_SUBSPACE;
4693f0275a0SJung-uk Kim 
4703f0275a0SJung-uk Kim 
4713f0275a0SJung-uk Kim /*
4723f0275a0SJung-uk Kim  * PCC memory structures (not part of the ACPI table)
4733f0275a0SJung-uk Kim  */
4743f0275a0SJung-uk Kim 
4753f0275a0SJung-uk Kim /* Shared Memory Region */
4763f0275a0SJung-uk Kim 
4773f0275a0SJung-uk Kim typedef struct acpi_pcct_shared_memory
4783f0275a0SJung-uk Kim {
4793f0275a0SJung-uk Kim     UINT32                  Signature;
4803f0275a0SJung-uk Kim     UINT16                  Command;
4813f0275a0SJung-uk Kim     UINT16                  Status;
4823f0275a0SJung-uk Kim 
4833f0275a0SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY;
4843f0275a0SJung-uk Kim 
4853f0275a0SJung-uk Kim 
4863f0275a0SJung-uk Kim /*******************************************************************************
4873f0275a0SJung-uk Kim  *
4883f0275a0SJung-uk Kim  * PMTT - Platform Memory Topology Table (ACPI 5.0)
4893f0275a0SJung-uk Kim  *        Version 1
4903f0275a0SJung-uk Kim  *
4913f0275a0SJung-uk Kim  ******************************************************************************/
4923f0275a0SJung-uk Kim 
4933f0275a0SJung-uk Kim typedef struct acpi_table_pmtt
4943f0275a0SJung-uk Kim {
4953f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
4963f0275a0SJung-uk Kim     UINT32                  Reserved;
4973f0275a0SJung-uk Kim 
4983f0275a0SJung-uk Kim } ACPI_TABLE_PMTT;
4993f0275a0SJung-uk Kim 
5003f0275a0SJung-uk Kim 
5013f0275a0SJung-uk Kim /* Common header for PMTT subtables that follow main table */
5023f0275a0SJung-uk Kim 
5033f0275a0SJung-uk Kim typedef struct acpi_pmtt_header
5043f0275a0SJung-uk Kim {
5053f0275a0SJung-uk Kim     UINT8                   Type;
5063f0275a0SJung-uk Kim     UINT8                   Reserved1;
5073f0275a0SJung-uk Kim     UINT16                  Length;
5083f0275a0SJung-uk Kim     UINT16                  Flags;
5093f0275a0SJung-uk Kim     UINT16                  Reserved2;
5103f0275a0SJung-uk Kim 
5113f0275a0SJung-uk Kim } ACPI_PMTT_HEADER;
5123f0275a0SJung-uk Kim 
5133f0275a0SJung-uk Kim /* Values for Type field above */
5143f0275a0SJung-uk Kim 
5153f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET           0
5163f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER       1
5173f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM             2
5183f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFF are reserved */
5193f0275a0SJung-uk Kim 
5203f0275a0SJung-uk Kim /* Values for Flags field above */
5213f0275a0SJung-uk Kim 
5223f0275a0SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL             0x0001
5233f0275a0SJung-uk Kim #define ACPI_PMTT_PHYSICAL              0x0002
5243f0275a0SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE           0x000C
5253f0275a0SJung-uk Kim 
5263f0275a0SJung-uk Kim 
5273f0275a0SJung-uk Kim /*
5283f0275a0SJung-uk Kim  * PMTT subtables, correspond to Type in acpi_pmtt_header
5293f0275a0SJung-uk Kim  */
5303f0275a0SJung-uk Kim 
5313f0275a0SJung-uk Kim 
5323f0275a0SJung-uk Kim /* 0: Socket Structure */
5333f0275a0SJung-uk Kim 
5343f0275a0SJung-uk Kim typedef struct acpi_pmtt_socket
5353f0275a0SJung-uk Kim {
5363f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
5373f0275a0SJung-uk Kim     UINT16                  SocketId;
5383f0275a0SJung-uk Kim     UINT16                  Reserved;
5393f0275a0SJung-uk Kim 
5403f0275a0SJung-uk Kim } ACPI_PMTT_SOCKET;
5413f0275a0SJung-uk Kim 
5423f0275a0SJung-uk Kim 
5433f0275a0SJung-uk Kim /* 1: Memory Controller subtable */
5443f0275a0SJung-uk Kim 
5453f0275a0SJung-uk Kim typedef struct acpi_pmtt_controller
5463f0275a0SJung-uk Kim {
5473f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
5483f0275a0SJung-uk Kim     UINT32                  ReadLatency;
5493f0275a0SJung-uk Kim     UINT32                  WriteLatency;
5503f0275a0SJung-uk Kim     UINT32                  ReadBandwidth;
5513f0275a0SJung-uk Kim     UINT32                  WriteBandwidth;
5523f0275a0SJung-uk Kim     UINT16                  AccessWidth;
5533f0275a0SJung-uk Kim     UINT16                  Alignment;
5543f0275a0SJung-uk Kim     UINT16                  Reserved;
5553f0275a0SJung-uk Kim     UINT16                  DomainCount;
5563f0275a0SJung-uk Kim 
5573f0275a0SJung-uk Kim } ACPI_PMTT_CONTROLLER;
5583f0275a0SJung-uk Kim 
5593f0275a0SJung-uk Kim /* 1a: Proximity Domain substructure */
5603f0275a0SJung-uk Kim 
5613f0275a0SJung-uk Kim typedef struct acpi_pmtt_domain
5623f0275a0SJung-uk Kim {
5633f0275a0SJung-uk Kim     UINT32                  ProximityDomain;
5643f0275a0SJung-uk Kim 
5653f0275a0SJung-uk Kim } ACPI_PMTT_DOMAIN;
5663f0275a0SJung-uk Kim 
5673f0275a0SJung-uk Kim 
5683f0275a0SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */
5693f0275a0SJung-uk Kim 
5703f0275a0SJung-uk Kim typedef struct acpi_pmtt_physical_component
5713f0275a0SJung-uk Kim {
5723f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
5733f0275a0SJung-uk Kim     UINT16                  ComponentId;
5743f0275a0SJung-uk Kim     UINT16                  Reserved;
5753f0275a0SJung-uk Kim     UINT32                  MemorySize;
5763f0275a0SJung-uk Kim     UINT32                  BiosHandle;
5773f0275a0SJung-uk Kim 
5783f0275a0SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT;
5793f0275a0SJung-uk Kim 
5803f0275a0SJung-uk Kim 
5813f0275a0SJung-uk Kim /*******************************************************************************
5823f0275a0SJung-uk Kim  *
5833f0275a0SJung-uk Kim  * RASF - RAS Feature Table (ACPI 5.0)
5843f0275a0SJung-uk Kim  *        Version 1
5853f0275a0SJung-uk Kim  *
5863f0275a0SJung-uk Kim  ******************************************************************************/
5873f0275a0SJung-uk Kim 
5883f0275a0SJung-uk Kim typedef struct acpi_table_rasf
5893f0275a0SJung-uk Kim {
5903f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
5913f0275a0SJung-uk Kim     UINT8                   ChannelId[12];
5923f0275a0SJung-uk Kim 
5933f0275a0SJung-uk Kim } ACPI_TABLE_RASF;
5943f0275a0SJung-uk Kim 
5953f0275a0SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */
5963f0275a0SJung-uk Kim 
5973f0275a0SJung-uk Kim typedef struct acpi_rasf_shared_memory
5983f0275a0SJung-uk Kim {
5993f0275a0SJung-uk Kim     UINT32                  Signature;
6003f0275a0SJung-uk Kim     UINT16                  Command;
6013f0275a0SJung-uk Kim     UINT16                  Status;
6023f0275a0SJung-uk Kim     UINT64                  RequestedAddress;
6033f0275a0SJung-uk Kim     UINT64                  RequestedLength;
6043f0275a0SJung-uk Kim     UINT64                  ActualAddress;
6053f0275a0SJung-uk Kim     UINT64                  ActualLength;
6063f0275a0SJung-uk Kim     UINT16                  Flags;
6073f0275a0SJung-uk Kim     UINT8                   Speed;
6083f0275a0SJung-uk Kim 
6093f0275a0SJung-uk Kim } ACPI_RASF_SHARED_MEMORY;
6103f0275a0SJung-uk Kim 
6113f0275a0SJung-uk Kim /* Masks for Flags and Speed fields above */
6123f0275a0SJung-uk Kim 
6133f0275a0SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING      1
6143f0275a0SJung-uk Kim #define ACPI_RASF_SPEED                 (7<<1)
6153f0275a0SJung-uk Kim 
6163f0275a0SJung-uk Kim /* Channel Commands */
6173f0275a0SJung-uk Kim 
6183f0275a0SJung-uk Kim enum AcpiRasfCommands
6193f0275a0SJung-uk Kim {
6203f0275a0SJung-uk Kim     ACPI_RASF_GET_RAS_CAPABILITIES      = 1,
6213f0275a0SJung-uk Kim     ACPI_RASF_GET_PATROL_PARAMETERS     = 2,
6223f0275a0SJung-uk Kim     ACPI_RASF_START_PATROL_SCRUBBER     = 3,
6233f0275a0SJung-uk Kim     ACPI_RASF_STOP_PATROL_SCRUBBER      = 4
6243f0275a0SJung-uk Kim };
6253f0275a0SJung-uk Kim 
6263f0275a0SJung-uk Kim /* Channel Command flags */
6273f0275a0SJung-uk Kim 
6283f0275a0SJung-uk Kim #define ACPI_RASF_GENERATE_SCI          (1<<15)
6293f0275a0SJung-uk Kim 
6303f0275a0SJung-uk Kim /* Status values */
6313f0275a0SJung-uk Kim 
6323f0275a0SJung-uk Kim enum AcpiRasfStatus
6333f0275a0SJung-uk Kim {
6343f0275a0SJung-uk Kim     ACPI_RASF_SUCCESS                   = 0,
6353f0275a0SJung-uk Kim     ACPI_RASF_NOT_VALID                 = 1,
6363f0275a0SJung-uk Kim     ACPI_RASF_NOT_SUPPORTED             = 2,
6373f0275a0SJung-uk Kim     ACPI_RASF_BUSY                      = 3,
6383f0275a0SJung-uk Kim     ACPI_RASF_FAILED                    = 4,
6393f0275a0SJung-uk Kim     ACPI_RASF_ABORTED                   = 5,
6403f0275a0SJung-uk Kim     ACPI_RASF_INVALID_DATA              = 6
6413f0275a0SJung-uk Kim };
6423f0275a0SJung-uk Kim 
6433f0275a0SJung-uk Kim /* Status flags */
6443f0275a0SJung-uk Kim 
6453f0275a0SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE      (1)
6463f0275a0SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL          (1<<1)
6473f0275a0SJung-uk Kim #define ACPI_RASF_ERROR                 (1<<2)
6483f0275a0SJung-uk Kim #define ACPI_RASF_STATUS                (0x1F<<3)
6493f0275a0SJung-uk Kim 
6503f0275a0SJung-uk Kim 
651*efcc2a30SJung-uk Kim /*******************************************************************************
652*efcc2a30SJung-uk Kim  *
653*efcc2a30SJung-uk Kim  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
654*efcc2a30SJung-uk Kim  *        Version 3
655*efcc2a30SJung-uk Kim  *
656*efcc2a30SJung-uk Kim  * Conforms to "TPM 2.0 Hardware Interface Table (TPM2)" 29 November 2011
657*efcc2a30SJung-uk Kim  *
658*efcc2a30SJung-uk Kim  ******************************************************************************/
659*efcc2a30SJung-uk Kim 
660*efcc2a30SJung-uk Kim typedef struct acpi_table_tpm2
661*efcc2a30SJung-uk Kim {
662*efcc2a30SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
663*efcc2a30SJung-uk Kim     UINT32                  Flags;
664*efcc2a30SJung-uk Kim     UINT64                  ControlAddress;
665*efcc2a30SJung-uk Kim     UINT32                  StartMethod;
666*efcc2a30SJung-uk Kim 
667*efcc2a30SJung-uk Kim } ACPI_TABLE_TPM2;
668*efcc2a30SJung-uk Kim 
669*efcc2a30SJung-uk Kim /* Control area structure (not part of table, pointed to by ControlAddress) */
670*efcc2a30SJung-uk Kim 
671*efcc2a30SJung-uk Kim typedef struct acpi_tpm2_control
672*efcc2a30SJung-uk Kim {
673*efcc2a30SJung-uk Kim     UINT32                  Reserved;
674*efcc2a30SJung-uk Kim     UINT32                  Error;
675*efcc2a30SJung-uk Kim     UINT32                  Cancel;
676*efcc2a30SJung-uk Kim     UINT32                  Start;
677*efcc2a30SJung-uk Kim     UINT64                  InterruptControl;
678*efcc2a30SJung-uk Kim     UINT32                  CommandSize;
679*efcc2a30SJung-uk Kim     UINT64                  CommandAddress;
680*efcc2a30SJung-uk Kim     UINT32                  ResponseSize;
681*efcc2a30SJung-uk Kim     UINT64                  ResponseAddress;
682*efcc2a30SJung-uk Kim 
683*efcc2a30SJung-uk Kim } ACPI_TPM2_CONTROL;
684*efcc2a30SJung-uk Kim 
685*efcc2a30SJung-uk Kim 
6863f0275a0SJung-uk Kim /* Reset to default packing */
6873f0275a0SJung-uk Kim 
6883f0275a0SJung-uk Kim #pragma pack()
6893f0275a0SJung-uk Kim 
6903f0275a0SJung-uk Kim #endif /* __ACTBL3_H__ */
691