xref: /freebsd/sys/contrib/dev/acpica/include/actbl3.h (revision a371a5fd85363e96ff9aaebf7848cbdd06a33d26)
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 /*
81c0e1b6dSJung-uk Kim  * Copyright (C) 2000 - 2015, 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*a371a5fdSJung-uk Kim #define ACPI_SIG_STAO           "STAO"      /* Status Override table */
74efcc2a30SJung-uk Kim #define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
75*a371a5fdSJung-uk Kim #define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
76*a371a5fdSJung-uk Kim #define ACPI_SIG_XENV           "XENV"      /* Xen Environment table */
773f0275a0SJung-uk Kim 
783f0275a0SJung-uk Kim #define ACPI_SIG_S3PT           "S3PT"      /* S3 Performance (sub)Table */
793f0275a0SJung-uk Kim #define ACPI_SIG_PCCS           "PCC"       /* PCC Shared Memory Region */
803f0275a0SJung-uk Kim 
813f0275a0SJung-uk Kim /* Reserved table signatures */
823f0275a0SJung-uk Kim 
833f0275a0SJung-uk Kim #define ACPI_SIG_MATR           "MATR"      /* Memory Address Translation Table */
843f0275a0SJung-uk Kim #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
853f0275a0SJung-uk Kim 
863f0275a0SJung-uk Kim /*
873f0275a0SJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
883f0275a0SJung-uk Kim  * the tables are provided by the system BIOS.
893f0275a0SJung-uk Kim  */
903f0275a0SJung-uk Kim #pragma pack(1)
913f0275a0SJung-uk Kim 
923f0275a0SJung-uk Kim /*
931df130f1SJung-uk Kim  * Note: C bitfields are not used for this reason:
941df130f1SJung-uk Kim  *
951df130f1SJung-uk Kim  * "Bitfields are great and easy to read, but unfortunately the C language
961df130f1SJung-uk Kim  * does not specify the layout of bitfields in memory, which means they are
971df130f1SJung-uk Kim  * essentially useless for dealing with packed data in on-disk formats or
981df130f1SJung-uk Kim  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
991df130f1SJung-uk Kim  * this decision was a design error in C. Ritchie could have picked an order
1001df130f1SJung-uk Kim  * and stuck with it." Norman Ramsey.
1011df130f1SJung-uk Kim  * See http://stackoverflow.com/a/1053662/41661
1023f0275a0SJung-uk Kim  */
1033f0275a0SJung-uk Kim 
1043f0275a0SJung-uk Kim 
1053f0275a0SJung-uk Kim /*******************************************************************************
1063f0275a0SJung-uk Kim  *
1073f0275a0SJung-uk Kim  * BGRT - Boot Graphics Resource Table (ACPI 5.0)
1083f0275a0SJung-uk Kim  *        Version 1
1093f0275a0SJung-uk Kim  *
1103f0275a0SJung-uk Kim  ******************************************************************************/
1113f0275a0SJung-uk Kim 
1123f0275a0SJung-uk Kim typedef struct acpi_table_bgrt
1133f0275a0SJung-uk Kim {
1143f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1153f0275a0SJung-uk Kim     UINT16                  Version;
1163f0275a0SJung-uk Kim     UINT8                   Status;
1173f0275a0SJung-uk Kim     UINT8                   ImageType;
1183f0275a0SJung-uk Kim     UINT64                  ImageAddress;
1193f0275a0SJung-uk Kim     UINT32                  ImageOffsetX;
1203f0275a0SJung-uk Kim     UINT32                  ImageOffsetY;
1213f0275a0SJung-uk Kim 
1223f0275a0SJung-uk Kim } ACPI_TABLE_BGRT;
1233f0275a0SJung-uk Kim 
1243f0275a0SJung-uk Kim 
1253f0275a0SJung-uk Kim /*******************************************************************************
1263f0275a0SJung-uk Kim  *
1273f0275a0SJung-uk Kim  * DRTM - Dynamic Root of Trust for Measurement table
128*a371a5fdSJung-uk Kim  * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0
129*a371a5fdSJung-uk Kim  * Table version 1
1303f0275a0SJung-uk Kim  *
1313f0275a0SJung-uk Kim  ******************************************************************************/
1323f0275a0SJung-uk Kim 
1333f0275a0SJung-uk Kim typedef struct acpi_table_drtm
1343f0275a0SJung-uk Kim {
1353f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1363f0275a0SJung-uk Kim     UINT64                  EntryBaseAddress;
1373f0275a0SJung-uk Kim     UINT64                  EntryLength;
1383f0275a0SJung-uk Kim     UINT32                  EntryAddress32;
1393f0275a0SJung-uk Kim     UINT64                  EntryAddress64;
1403f0275a0SJung-uk Kim     UINT64                  ExitAddress;
1413f0275a0SJung-uk Kim     UINT64                  LogAreaAddress;
1423f0275a0SJung-uk Kim     UINT32                  LogAreaLength;
1433f0275a0SJung-uk Kim     UINT64                  ArchDependentAddress;
1443f0275a0SJung-uk Kim     UINT32                  Flags;
1453f0275a0SJung-uk Kim 
1463f0275a0SJung-uk Kim } ACPI_TABLE_DRTM;
1473f0275a0SJung-uk Kim 
148*a371a5fdSJung-uk Kim /* Flag Definitions for above */
1493f0275a0SJung-uk Kim 
150*a371a5fdSJung-uk Kim #define ACPI_DRTM_ACCESS_ALLOWED            (1)
151*a371a5fdSJung-uk Kim #define ACPI_DRTM_ENABLE_GAP_CODE           (1<<1)
152*a371a5fdSJung-uk Kim #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS   (1<<2)
153*a371a5fdSJung-uk Kim #define ACPI_DRTM_AUTHORITY_ORDER           (1<<3)
154*a371a5fdSJung-uk Kim 
155*a371a5fdSJung-uk Kim 
156*a371a5fdSJung-uk Kim /* 1) Validated Tables List (64-bit addresses) */
157*a371a5fdSJung-uk Kim 
158*a371a5fdSJung-uk Kim typedef struct acpi_drtm_vtable_list
1593f0275a0SJung-uk Kim {
160*a371a5fdSJung-uk Kim     UINT32                  ValidatedTableCount;
161*a371a5fdSJung-uk Kim     UINT64                  ValidatedTables[1];
1623f0275a0SJung-uk Kim 
163*a371a5fdSJung-uk Kim } ACPI_DRTM_VTABLE_LIST;
1643f0275a0SJung-uk Kim 
165*a371a5fdSJung-uk Kim /* 2) Resources List (of Resource Descriptors) */
166*a371a5fdSJung-uk Kim 
167*a371a5fdSJung-uk Kim /* Resource Descriptor */
168*a371a5fdSJung-uk Kim 
169*a371a5fdSJung-uk Kim typedef struct acpi_drtm_resource
170*a371a5fdSJung-uk Kim {
171*a371a5fdSJung-uk Kim     UINT8                   Size[7];
172*a371a5fdSJung-uk Kim     UINT8                   Type;
173*a371a5fdSJung-uk Kim     UINT64                  Address;
174*a371a5fdSJung-uk Kim 
175*a371a5fdSJung-uk Kim } ACPI_DRTM_RESOURCE;
1763f0275a0SJung-uk Kim 
1773f0275a0SJung-uk Kim typedef struct acpi_drtm_resource_list
1783f0275a0SJung-uk Kim {
179*a371a5fdSJung-uk Kim     UINT32                  ResourceCount;
180*a371a5fdSJung-uk Kim     ACPI_DRTM_RESOURCE      Resources[1];
1813f0275a0SJung-uk Kim 
1823f0275a0SJung-uk Kim } ACPI_DRTM_RESOURCE_LIST;
1833f0275a0SJung-uk Kim 
1843f0275a0SJung-uk Kim /* 3) Platform-specific Identifiers List */
1853f0275a0SJung-uk Kim 
186*a371a5fdSJung-uk Kim typedef struct acpi_drtm_dps_id
1873f0275a0SJung-uk Kim {
188*a371a5fdSJung-uk Kim     UINT32                  DpsIdLength;
189*a371a5fdSJung-uk Kim     UINT8                   DpsId[16];
1903f0275a0SJung-uk Kim 
191*a371a5fdSJung-uk Kim } ACPI_DRTM_DPS_ID;
1923f0275a0SJung-uk Kim 
1933f0275a0SJung-uk Kim 
1943f0275a0SJung-uk Kim /*******************************************************************************
1953f0275a0SJung-uk Kim  *
1963f0275a0SJung-uk Kim  * FPDT - Firmware Performance Data Table (ACPI 5.0)
1973f0275a0SJung-uk Kim  *        Version 1
1983f0275a0SJung-uk Kim  *
1993f0275a0SJung-uk Kim  ******************************************************************************/
2003f0275a0SJung-uk Kim 
2013f0275a0SJung-uk Kim typedef struct acpi_table_fpdt
2023f0275a0SJung-uk Kim {
2033f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2043f0275a0SJung-uk Kim 
2053f0275a0SJung-uk Kim } ACPI_TABLE_FPDT;
2063f0275a0SJung-uk Kim 
2073f0275a0SJung-uk Kim 
2083f0275a0SJung-uk Kim /* FPDT subtable header */
2093f0275a0SJung-uk Kim 
2103f0275a0SJung-uk Kim typedef struct acpi_fpdt_header
2113f0275a0SJung-uk Kim {
2123f0275a0SJung-uk Kim     UINT16                  Type;
2133f0275a0SJung-uk Kim     UINT8                   Length;
2143f0275a0SJung-uk Kim     UINT8                   Revision;
2153f0275a0SJung-uk Kim 
2163f0275a0SJung-uk Kim } ACPI_FPDT_HEADER;
2173f0275a0SJung-uk Kim 
2183f0275a0SJung-uk Kim /* Values for Type field above */
2193f0275a0SJung-uk Kim 
2203f0275a0SJung-uk Kim enum AcpiFpdtType
2213f0275a0SJung-uk Kim {
2223f0275a0SJung-uk Kim     ACPI_FPDT_TYPE_BOOT                 = 0,
2239c48c75eSJung-uk Kim     ACPI_FPDT_TYPE_S3PERF               = 1
2243f0275a0SJung-uk Kim };
2253f0275a0SJung-uk Kim 
2263f0275a0SJung-uk Kim 
2273f0275a0SJung-uk Kim /*
2283f0275a0SJung-uk Kim  * FPDT subtables
2293f0275a0SJung-uk Kim  */
2303f0275a0SJung-uk Kim 
2313f0275a0SJung-uk Kim /* 0: Firmware Basic Boot Performance Record */
2323f0275a0SJung-uk Kim 
2333f0275a0SJung-uk Kim typedef struct acpi_fpdt_boot
2343f0275a0SJung-uk Kim {
2353f0275a0SJung-uk Kim     ACPI_FPDT_HEADER        Header;
2363f0275a0SJung-uk Kim     UINT8                   Reserved[4];
2373f0275a0SJung-uk Kim     UINT64                  ResetEnd;
2383f0275a0SJung-uk Kim     UINT64                  LoadStart;
2393f0275a0SJung-uk Kim     UINT64                  StartupStart;
2403f0275a0SJung-uk Kim     UINT64                  ExitServicesEntry;
2413f0275a0SJung-uk Kim     UINT64                  ExitServicesExit;
2423f0275a0SJung-uk Kim 
2433f0275a0SJung-uk Kim } ACPI_FPDT_BOOT;
2443f0275a0SJung-uk Kim 
2453f0275a0SJung-uk Kim 
2463f0275a0SJung-uk Kim /* 1: S3 Performance Table Pointer Record */
2473f0275a0SJung-uk Kim 
2483f0275a0SJung-uk Kim typedef struct acpi_fpdt_s3pt_ptr
2493f0275a0SJung-uk Kim {
2503f0275a0SJung-uk Kim     ACPI_FPDT_HEADER        Header;
2513f0275a0SJung-uk Kim     UINT8                   Reserved[4];
2523f0275a0SJung-uk Kim     UINT64                  Address;
2533f0275a0SJung-uk Kim 
2543f0275a0SJung-uk Kim } ACPI_FPDT_S3PT_PTR;
2553f0275a0SJung-uk Kim 
2563f0275a0SJung-uk Kim 
2573f0275a0SJung-uk Kim /*
2583f0275a0SJung-uk Kim  * S3PT - S3 Performance Table. This table is pointed to by the
2593f0275a0SJung-uk Kim  * FPDT S3 Pointer Record above.
2603f0275a0SJung-uk Kim  */
2613f0275a0SJung-uk Kim typedef struct acpi_table_s3pt
2623f0275a0SJung-uk Kim {
2633f0275a0SJung-uk Kim     UINT8                   Signature[4]; /* "S3PT" */
2643f0275a0SJung-uk Kim     UINT32                  Length;
2653f0275a0SJung-uk Kim 
2663f0275a0SJung-uk Kim } ACPI_TABLE_S3PT;
2673f0275a0SJung-uk Kim 
2683f0275a0SJung-uk Kim 
2693f0275a0SJung-uk Kim /*
2703f0275a0SJung-uk Kim  * S3PT Subtables
2713f0275a0SJung-uk Kim  */
2723f0275a0SJung-uk Kim typedef struct acpi_s3pt_header
2733f0275a0SJung-uk Kim {
2743f0275a0SJung-uk Kim     UINT16                  Type;
2753f0275a0SJung-uk Kim     UINT8                   Length;
2763f0275a0SJung-uk Kim     UINT8                   Revision;
2773f0275a0SJung-uk Kim 
2783f0275a0SJung-uk Kim } ACPI_S3PT_HEADER;
2793f0275a0SJung-uk Kim 
2803f0275a0SJung-uk Kim /* Values for Type field above */
2813f0275a0SJung-uk Kim 
2823f0275a0SJung-uk Kim enum AcpiS3ptType
2833f0275a0SJung-uk Kim {
2843f0275a0SJung-uk Kim     ACPI_S3PT_TYPE_RESUME               = 0,
2859c48c75eSJung-uk Kim     ACPI_S3PT_TYPE_SUSPEND              = 1
2863f0275a0SJung-uk Kim };
2873f0275a0SJung-uk Kim 
2883f0275a0SJung-uk Kim typedef struct acpi_s3pt_resume
2893f0275a0SJung-uk Kim {
2903f0275a0SJung-uk Kim     ACPI_S3PT_HEADER        Header;
2913f0275a0SJung-uk Kim     UINT32                  ResumeCount;
2923f0275a0SJung-uk Kim     UINT64                  FullResume;
2933f0275a0SJung-uk Kim     UINT64                  AverageResume;
2943f0275a0SJung-uk Kim 
2953f0275a0SJung-uk Kim } ACPI_S3PT_RESUME;
2963f0275a0SJung-uk Kim 
2973f0275a0SJung-uk Kim typedef struct acpi_s3pt_suspend
2983f0275a0SJung-uk Kim {
2993f0275a0SJung-uk Kim     ACPI_S3PT_HEADER        Header;
3003f0275a0SJung-uk Kim     UINT64                  SuspendStart;
3013f0275a0SJung-uk Kim     UINT64                  SuspendEnd;
3023f0275a0SJung-uk Kim 
3033f0275a0SJung-uk Kim } ACPI_S3PT_SUSPEND;
3043f0275a0SJung-uk Kim 
3053f0275a0SJung-uk Kim 
3063f0275a0SJung-uk Kim /*******************************************************************************
3073f0275a0SJung-uk Kim  *
308313a0c13SJung-uk Kim  * GTDT - Generic Timer Description Table (ACPI 5.1)
309313a0c13SJung-uk Kim  *        Version 2
3103f0275a0SJung-uk Kim  *
3113f0275a0SJung-uk Kim  ******************************************************************************/
3123f0275a0SJung-uk Kim 
3133f0275a0SJung-uk Kim typedef struct acpi_table_gtdt
3143f0275a0SJung-uk Kim {
3153f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
316313a0c13SJung-uk Kim     UINT64                  CounterBlockAddresss;
317313a0c13SJung-uk Kim     UINT32                  Reserved;
318313a0c13SJung-uk Kim     UINT32                  SecureEl1Interrupt;
319313a0c13SJung-uk Kim     UINT32                  SecureEl1Flags;
320313a0c13SJung-uk Kim     UINT32                  NonSecureEl1Interrupt;
321313a0c13SJung-uk Kim     UINT32                  NonSecureEl1Flags;
3223f0275a0SJung-uk Kim     UINT32                  VirtualTimerInterrupt;
3233f0275a0SJung-uk Kim     UINT32                  VirtualTimerFlags;
324313a0c13SJung-uk Kim     UINT32                  NonSecureEl2Interrupt;
325313a0c13SJung-uk Kim     UINT32                  NonSecureEl2Flags;
326313a0c13SJung-uk Kim     UINT64                  CounterReadBlockAddress;
327313a0c13SJung-uk Kim     UINT32                  PlatformTimerCount;
328313a0c13SJung-uk Kim     UINT32                  PlatformTimerOffset;
3293f0275a0SJung-uk Kim 
3303f0275a0SJung-uk Kim } ACPI_TABLE_GTDT;
3313f0275a0SJung-uk Kim 
332313a0c13SJung-uk Kim /* Flag Definitions: Timer Block Physical Timers and Virtual timers */
3333f0275a0SJung-uk Kim 
334313a0c13SJung-uk Kim #define ACPI_GTDT_INTERRUPT_MODE        (1)
335313a0c13SJung-uk Kim #define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
336313a0c13SJung-uk Kim #define ACPI_GTDT_ALWAYS_ON             (1<<2)
3373f0275a0SJung-uk Kim 
3383f0275a0SJung-uk Kim 
339313a0c13SJung-uk Kim /* Common GTDT subtable header */
340313a0c13SJung-uk Kim 
341313a0c13SJung-uk Kim typedef struct acpi_gtdt_header
342313a0c13SJung-uk Kim {
343313a0c13SJung-uk Kim     UINT8                   Type;
344313a0c13SJung-uk Kim     UINT16                  Length;
345313a0c13SJung-uk Kim 
346313a0c13SJung-uk Kim } ACPI_GTDT_HEADER;
347313a0c13SJung-uk Kim 
348313a0c13SJung-uk Kim /* Values for GTDT subtable type above */
349313a0c13SJung-uk Kim 
350313a0c13SJung-uk Kim enum AcpiGtdtType
351313a0c13SJung-uk Kim {
352313a0c13SJung-uk Kim     ACPI_GTDT_TYPE_TIMER_BLOCK      = 0,
353313a0c13SJung-uk Kim     ACPI_GTDT_TYPE_WATCHDOG         = 1,
354313a0c13SJung-uk Kim     ACPI_GTDT_TYPE_RESERVED         = 2    /* 2 and greater are reserved */
355313a0c13SJung-uk Kim };
356313a0c13SJung-uk Kim 
357313a0c13SJung-uk Kim 
358313a0c13SJung-uk Kim /* GTDT Subtables, correspond to Type in acpi_gtdt_header */
359313a0c13SJung-uk Kim 
360313a0c13SJung-uk Kim /* 0: Generic Timer Block */
361313a0c13SJung-uk Kim 
362313a0c13SJung-uk Kim typedef struct acpi_gtdt_timer_block
363313a0c13SJung-uk Kim {
364313a0c13SJung-uk Kim     ACPI_GTDT_HEADER        Header;
365313a0c13SJung-uk Kim     UINT8                   Reserved;
366313a0c13SJung-uk Kim     UINT64                  BlockAddress;
367313a0c13SJung-uk Kim     UINT32                  TimerCount;
368313a0c13SJung-uk Kim     UINT32                  TimerOffset;
369313a0c13SJung-uk Kim 
370313a0c13SJung-uk Kim } ACPI_GTDT_TIMER_BLOCK;
371313a0c13SJung-uk Kim 
372313a0c13SJung-uk Kim /* Timer Sub-Structure, one per timer */
373313a0c13SJung-uk Kim 
374313a0c13SJung-uk Kim typedef struct acpi_gtdt_timer_entry
375313a0c13SJung-uk Kim {
376313a0c13SJung-uk Kim     UINT8                   FrameNumber;
377313a0c13SJung-uk Kim     UINT8                   Reserved[3];
378313a0c13SJung-uk Kim     UINT64                  BaseAddress;
379313a0c13SJung-uk Kim     UINT64                  El0BaseAddress;
380313a0c13SJung-uk Kim     UINT32                  TimerInterrupt;
381313a0c13SJung-uk Kim     UINT32                  TimerFlags;
382313a0c13SJung-uk Kim     UINT32                  VirtualTimerInterrupt;
383313a0c13SJung-uk Kim     UINT32                  VirtualTimerFlags;
384313a0c13SJung-uk Kim     UINT32                  CommonFlags;
385313a0c13SJung-uk Kim 
386313a0c13SJung-uk Kim } ACPI_GTDT_TIMER_ENTRY;
387313a0c13SJung-uk Kim 
388313a0c13SJung-uk Kim /* Flag Definitions: TimerFlags and VirtualTimerFlags above */
389313a0c13SJung-uk Kim 
390313a0c13SJung-uk Kim #define ACPI_GTDT_GT_IRQ_MODE               (1)
391313a0c13SJung-uk Kim #define ACPI_GTDT_GT_IRQ_POLARITY           (1<<1)
392313a0c13SJung-uk Kim 
393313a0c13SJung-uk Kim /* Flag Definitions: CommonFlags above */
394313a0c13SJung-uk Kim 
395313a0c13SJung-uk Kim #define ACPI_GTDT_GT_IS_SECURE_TIMER        (1)
396313a0c13SJung-uk Kim #define ACPI_GTDT_GT_ALWAYS_ON              (1<<1)
397313a0c13SJung-uk Kim 
398313a0c13SJung-uk Kim 
399313a0c13SJung-uk Kim /* 1: SBSA Generic Watchdog Structure */
400313a0c13SJung-uk Kim 
401313a0c13SJung-uk Kim typedef struct acpi_gtdt_watchdog
402313a0c13SJung-uk Kim {
403313a0c13SJung-uk Kim     ACPI_GTDT_HEADER        Header;
404313a0c13SJung-uk Kim     UINT8                   Reserved;
405313a0c13SJung-uk Kim     UINT64                  RefreshFrameAddress;
406313a0c13SJung-uk Kim     UINT64                  ControlFrameAddress;
407313a0c13SJung-uk Kim     UINT32                  TimerInterrupt;
408313a0c13SJung-uk Kim     UINT32                  TimerFlags;
409313a0c13SJung-uk Kim 
410313a0c13SJung-uk Kim } ACPI_GTDT_WATCHDOG;
411313a0c13SJung-uk Kim 
412313a0c13SJung-uk Kim /* Flag Definitions: TimerFlags above */
413313a0c13SJung-uk Kim 
414313a0c13SJung-uk Kim #define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
415313a0c13SJung-uk Kim #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
416313a0c13SJung-uk Kim #define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
4173f0275a0SJung-uk Kim 
4183f0275a0SJung-uk Kim 
4193f0275a0SJung-uk Kim /*******************************************************************************
4203f0275a0SJung-uk Kim  *
4213f0275a0SJung-uk Kim  * MPST - Memory Power State Table (ACPI 5.0)
4223f0275a0SJung-uk Kim  *        Version 1
4233f0275a0SJung-uk Kim  *
4243f0275a0SJung-uk Kim  ******************************************************************************/
4253f0275a0SJung-uk Kim 
4263f0275a0SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \
4273f0275a0SJung-uk Kim     UINT8                   ChannelId; \
4288ef1a331SJung-uk Kim     UINT8                   Reserved1[3]; \
4298ef1a331SJung-uk Kim     UINT16                  PowerNodeCount; \
4308ef1a331SJung-uk Kim     UINT16                  Reserved2;
4313f0275a0SJung-uk Kim 
4323f0275a0SJung-uk Kim /* Main table */
4333f0275a0SJung-uk Kim 
4343f0275a0SJung-uk Kim typedef struct acpi_table_mpst
4353f0275a0SJung-uk Kim {
4363f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
4373f0275a0SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
4383f0275a0SJung-uk Kim 
4393f0275a0SJung-uk Kim } ACPI_TABLE_MPST;
4403f0275a0SJung-uk Kim 
4413f0275a0SJung-uk Kim 
4423f0275a0SJung-uk Kim /* Memory Platform Communication Channel Info */
4433f0275a0SJung-uk Kim 
4443f0275a0SJung-uk Kim typedef struct acpi_mpst_channel
4453f0275a0SJung-uk Kim {
4463f0275a0SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
4473f0275a0SJung-uk Kim 
4483f0275a0SJung-uk Kim } ACPI_MPST_CHANNEL;
4493f0275a0SJung-uk Kim 
4503f0275a0SJung-uk Kim 
4513f0275a0SJung-uk Kim /* Memory Power Node Structure */
4523f0275a0SJung-uk Kim 
4533f0275a0SJung-uk Kim typedef struct acpi_mpst_power_node
4543f0275a0SJung-uk Kim {
4553f0275a0SJung-uk Kim     UINT8                   Flags;
4563f0275a0SJung-uk Kim     UINT8                   Reserved1;
4573f0275a0SJung-uk Kim     UINT16                  NodeId;
4583f0275a0SJung-uk Kim     UINT32                  Length;
4593f0275a0SJung-uk Kim     UINT64                  RangeAddress;
4603f0275a0SJung-uk Kim     UINT64                  RangeLength;
4618ef1a331SJung-uk Kim     UINT32                  NumPowerStates;
4628ef1a331SJung-uk Kim     UINT32                  NumPhysicalComponents;
4633f0275a0SJung-uk Kim 
4643f0275a0SJung-uk Kim } ACPI_MPST_POWER_NODE;
4653f0275a0SJung-uk Kim 
4663f0275a0SJung-uk Kim /* Values for Flags field above */
4673f0275a0SJung-uk Kim 
4683f0275a0SJung-uk Kim #define ACPI_MPST_ENABLED               1
4693f0275a0SJung-uk Kim #define ACPI_MPST_POWER_MANAGED         2
4703f0275a0SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE      4
4713f0275a0SJung-uk Kim 
4723f0275a0SJung-uk Kim 
4733f0275a0SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */
4743f0275a0SJung-uk Kim 
4753f0275a0SJung-uk Kim typedef struct acpi_mpst_power_state
4763f0275a0SJung-uk Kim {
4773f0275a0SJung-uk Kim     UINT8                   PowerState;
4783f0275a0SJung-uk Kim     UINT8                   InfoIndex;
4793f0275a0SJung-uk Kim 
4803f0275a0SJung-uk Kim } ACPI_MPST_POWER_STATE;
4813f0275a0SJung-uk Kim 
4823f0275a0SJung-uk Kim 
4833f0275a0SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */
4843f0275a0SJung-uk Kim 
4853f0275a0SJung-uk Kim typedef struct acpi_mpst_component
4863f0275a0SJung-uk Kim {
4873f0275a0SJung-uk Kim     UINT16                  ComponentId;
4883f0275a0SJung-uk Kim 
4893f0275a0SJung-uk Kim } ACPI_MPST_COMPONENT;
4903f0275a0SJung-uk Kim 
4913f0275a0SJung-uk Kim 
4923f0275a0SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
4933f0275a0SJung-uk Kim 
4943f0275a0SJung-uk Kim typedef struct acpi_mpst_data_hdr
4953f0275a0SJung-uk Kim {
4963f0275a0SJung-uk Kim     UINT16                  CharacteristicsCount;
4978ef1a331SJung-uk Kim     UINT16                  Reserved;
4983f0275a0SJung-uk Kim 
4993f0275a0SJung-uk Kim } ACPI_MPST_DATA_HDR;
5003f0275a0SJung-uk Kim 
5013f0275a0SJung-uk Kim typedef struct acpi_mpst_power_data
5023f0275a0SJung-uk Kim {
5038ef1a331SJung-uk Kim     UINT8                   StructureId;
5043f0275a0SJung-uk Kim     UINT8                   Flags;
5053f0275a0SJung-uk Kim     UINT16                  Reserved1;
5063f0275a0SJung-uk Kim     UINT32                  AveragePower;
5073f0275a0SJung-uk Kim     UINT32                  PowerSaving;
5083f0275a0SJung-uk Kim     UINT64                  ExitLatency;
5093f0275a0SJung-uk Kim     UINT64                  Reserved2;
5103f0275a0SJung-uk Kim 
5113f0275a0SJung-uk Kim } ACPI_MPST_POWER_DATA;
5123f0275a0SJung-uk Kim 
5133f0275a0SJung-uk Kim /* Values for Flags field above */
5143f0275a0SJung-uk Kim 
5153f0275a0SJung-uk Kim #define ACPI_MPST_PRESERVE              1
5163f0275a0SJung-uk Kim #define ACPI_MPST_AUTOENTRY             2
5173f0275a0SJung-uk Kim #define ACPI_MPST_AUTOEXIT              4
5183f0275a0SJung-uk Kim 
5193f0275a0SJung-uk Kim 
5203f0275a0SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */
5213f0275a0SJung-uk Kim 
5223f0275a0SJung-uk Kim typedef struct acpi_mpst_shared
5233f0275a0SJung-uk Kim {
5243f0275a0SJung-uk Kim     UINT32                  Signature;
5253f0275a0SJung-uk Kim     UINT16                  PccCommand;
5263f0275a0SJung-uk Kim     UINT16                  PccStatus;
5278ef1a331SJung-uk Kim     UINT32                  CommandRegister;
5288ef1a331SJung-uk Kim     UINT32                  StatusRegister;
5298ef1a331SJung-uk Kim     UINT32                  PowerStateId;
5308ef1a331SJung-uk Kim     UINT32                  PowerNodeId;
5313f0275a0SJung-uk Kim     UINT64                  EnergyConsumed;
5323f0275a0SJung-uk Kim     UINT64                  AveragePower;
5333f0275a0SJung-uk Kim 
5343f0275a0SJung-uk Kim } ACPI_MPST_SHARED;
5353f0275a0SJung-uk Kim 
5363f0275a0SJung-uk Kim 
5373f0275a0SJung-uk Kim /*******************************************************************************
5383f0275a0SJung-uk Kim  *
5393f0275a0SJung-uk Kim  * PCCT - Platform Communications Channel Table (ACPI 5.0)
5403f0275a0SJung-uk Kim  *        Version 1
5413f0275a0SJung-uk Kim  *
5423f0275a0SJung-uk Kim  ******************************************************************************/
5433f0275a0SJung-uk Kim 
5443f0275a0SJung-uk Kim typedef struct acpi_table_pcct
5453f0275a0SJung-uk Kim {
5463f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
5473f0275a0SJung-uk Kim     UINT32                  Flags;
548313a0c13SJung-uk Kim     UINT64                  Reserved;
5493f0275a0SJung-uk Kim 
5503f0275a0SJung-uk Kim } ACPI_TABLE_PCCT;
5513f0275a0SJung-uk Kim 
5523f0275a0SJung-uk Kim /* Values for Flags field above */
5533f0275a0SJung-uk Kim 
5543f0275a0SJung-uk Kim #define ACPI_PCCT_DOORBELL              1
5553f0275a0SJung-uk Kim 
556313a0c13SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */
557313a0c13SJung-uk Kim 
558313a0c13SJung-uk Kim enum AcpiPcctType
559313a0c13SJung-uk Kim {
560313a0c13SJung-uk Kim     ACPI_PCCT_TYPE_GENERIC_SUBSPACE     = 0,
561313a0c13SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE  = 1,
562313a0c13SJung-uk Kim     ACPI_PCCT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
563313a0c13SJung-uk Kim };
564313a0c13SJung-uk Kim 
5653f0275a0SJung-uk Kim /*
566313a0c13SJung-uk Kim  * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
5673f0275a0SJung-uk Kim  */
5683f0275a0SJung-uk Kim 
5693f0275a0SJung-uk Kim /* 0: Generic Communications Subspace */
5703f0275a0SJung-uk Kim 
5713f0275a0SJung-uk Kim typedef struct acpi_pcct_subspace
5723f0275a0SJung-uk Kim {
5733f0275a0SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
5743f0275a0SJung-uk Kim     UINT8                   Reserved[6];
5753f0275a0SJung-uk Kim     UINT64                  BaseAddress;
5763f0275a0SJung-uk Kim     UINT64                  Length;
5773f0275a0SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
5783f0275a0SJung-uk Kim     UINT64                  PreserveMask;
5793f0275a0SJung-uk Kim     UINT64                  WriteMask;
580313a0c13SJung-uk Kim     UINT32                  Latency;
581313a0c13SJung-uk Kim     UINT32                  MaxAccessRate;
582313a0c13SJung-uk Kim     UINT16                  MinTurnaroundTime;
5833f0275a0SJung-uk Kim 
5843f0275a0SJung-uk Kim } ACPI_PCCT_SUBSPACE;
5853f0275a0SJung-uk Kim 
5863f0275a0SJung-uk Kim 
587313a0c13SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */
588313a0c13SJung-uk Kim 
589313a0c13SJung-uk Kim typedef struct acpi_pcct_hw_reduced
590313a0c13SJung-uk Kim {
591313a0c13SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
592313a0c13SJung-uk Kim     UINT32                  DoorbellInterrupt;
593313a0c13SJung-uk Kim     UINT8                   Flags;
594313a0c13SJung-uk Kim     UINT8                   Reserved;
595313a0c13SJung-uk Kim     UINT64                  BaseAddress;
596313a0c13SJung-uk Kim     UINT64                  Length;
597313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
598313a0c13SJung-uk Kim     UINT64                  PreserveMask;
599313a0c13SJung-uk Kim     UINT64                  WriteMask;
600313a0c13SJung-uk Kim     UINT32                  Latency;
601313a0c13SJung-uk Kim     UINT32                  MaxAccessRate;
602313a0c13SJung-uk Kim     UINT16                  MinTurnaroundTime;
603313a0c13SJung-uk Kim 
604313a0c13SJung-uk Kim } ACPI_PCCT_HW_REDUCED;
605313a0c13SJung-uk Kim 
606313a0c13SJung-uk Kim /* Values for doorbell flags above */
607313a0c13SJung-uk Kim 
608313a0c13SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY    (1)
609313a0c13SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
610313a0c13SJung-uk Kim 
611313a0c13SJung-uk Kim 
6123f0275a0SJung-uk Kim /*
6133f0275a0SJung-uk Kim  * PCC memory structures (not part of the ACPI table)
6143f0275a0SJung-uk Kim  */
6153f0275a0SJung-uk Kim 
6163f0275a0SJung-uk Kim /* Shared Memory Region */
6173f0275a0SJung-uk Kim 
6183f0275a0SJung-uk Kim typedef struct acpi_pcct_shared_memory
6193f0275a0SJung-uk Kim {
6203f0275a0SJung-uk Kim     UINT32                  Signature;
6213f0275a0SJung-uk Kim     UINT16                  Command;
6223f0275a0SJung-uk Kim     UINT16                  Status;
6233f0275a0SJung-uk Kim 
6243f0275a0SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY;
6253f0275a0SJung-uk Kim 
6263f0275a0SJung-uk Kim 
6273f0275a0SJung-uk Kim /*******************************************************************************
6283f0275a0SJung-uk Kim  *
6293f0275a0SJung-uk Kim  * PMTT - Platform Memory Topology Table (ACPI 5.0)
6303f0275a0SJung-uk Kim  *        Version 1
6313f0275a0SJung-uk Kim  *
6323f0275a0SJung-uk Kim  ******************************************************************************/
6333f0275a0SJung-uk Kim 
6343f0275a0SJung-uk Kim typedef struct acpi_table_pmtt
6353f0275a0SJung-uk Kim {
6363f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
6373f0275a0SJung-uk Kim     UINT32                  Reserved;
6383f0275a0SJung-uk Kim 
6393f0275a0SJung-uk Kim } ACPI_TABLE_PMTT;
6403f0275a0SJung-uk Kim 
6413f0275a0SJung-uk Kim 
6423f0275a0SJung-uk Kim /* Common header for PMTT subtables that follow main table */
6433f0275a0SJung-uk Kim 
6443f0275a0SJung-uk Kim typedef struct acpi_pmtt_header
6453f0275a0SJung-uk Kim {
6463f0275a0SJung-uk Kim     UINT8                   Type;
6473f0275a0SJung-uk Kim     UINT8                   Reserved1;
6483f0275a0SJung-uk Kim     UINT16                  Length;
6493f0275a0SJung-uk Kim     UINT16                  Flags;
6503f0275a0SJung-uk Kim     UINT16                  Reserved2;
6513f0275a0SJung-uk Kim 
6523f0275a0SJung-uk Kim } ACPI_PMTT_HEADER;
6533f0275a0SJung-uk Kim 
6543f0275a0SJung-uk Kim /* Values for Type field above */
6553f0275a0SJung-uk Kim 
6563f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET           0
6573f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER       1
6583f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM             2
6593f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFF are reserved */
6603f0275a0SJung-uk Kim 
6613f0275a0SJung-uk Kim /* Values for Flags field above */
6623f0275a0SJung-uk Kim 
6633f0275a0SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL             0x0001
6643f0275a0SJung-uk Kim #define ACPI_PMTT_PHYSICAL              0x0002
6653f0275a0SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE           0x000C
6663f0275a0SJung-uk Kim 
6673f0275a0SJung-uk Kim 
6683f0275a0SJung-uk Kim /*
6693f0275a0SJung-uk Kim  * PMTT subtables, correspond to Type in acpi_pmtt_header
6703f0275a0SJung-uk Kim  */
6713f0275a0SJung-uk Kim 
6723f0275a0SJung-uk Kim 
6733f0275a0SJung-uk Kim /* 0: Socket Structure */
6743f0275a0SJung-uk Kim 
6753f0275a0SJung-uk Kim typedef struct acpi_pmtt_socket
6763f0275a0SJung-uk Kim {
6773f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
6783f0275a0SJung-uk Kim     UINT16                  SocketId;
6793f0275a0SJung-uk Kim     UINT16                  Reserved;
6803f0275a0SJung-uk Kim 
6813f0275a0SJung-uk Kim } ACPI_PMTT_SOCKET;
6823f0275a0SJung-uk Kim 
6833f0275a0SJung-uk Kim 
6843f0275a0SJung-uk Kim /* 1: Memory Controller subtable */
6853f0275a0SJung-uk Kim 
6863f0275a0SJung-uk Kim typedef struct acpi_pmtt_controller
6873f0275a0SJung-uk Kim {
6883f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
6893f0275a0SJung-uk Kim     UINT32                  ReadLatency;
6903f0275a0SJung-uk Kim     UINT32                  WriteLatency;
6913f0275a0SJung-uk Kim     UINT32                  ReadBandwidth;
6923f0275a0SJung-uk Kim     UINT32                  WriteBandwidth;
6933f0275a0SJung-uk Kim     UINT16                  AccessWidth;
6943f0275a0SJung-uk Kim     UINT16                  Alignment;
6953f0275a0SJung-uk Kim     UINT16                  Reserved;
6963f0275a0SJung-uk Kim     UINT16                  DomainCount;
6973f0275a0SJung-uk Kim 
6983f0275a0SJung-uk Kim } ACPI_PMTT_CONTROLLER;
6993f0275a0SJung-uk Kim 
7003f0275a0SJung-uk Kim /* 1a: Proximity Domain substructure */
7013f0275a0SJung-uk Kim 
7023f0275a0SJung-uk Kim typedef struct acpi_pmtt_domain
7033f0275a0SJung-uk Kim {
7043f0275a0SJung-uk Kim     UINT32                  ProximityDomain;
7053f0275a0SJung-uk Kim 
7063f0275a0SJung-uk Kim } ACPI_PMTT_DOMAIN;
7073f0275a0SJung-uk Kim 
7083f0275a0SJung-uk Kim 
7093f0275a0SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */
7103f0275a0SJung-uk Kim 
7113f0275a0SJung-uk Kim typedef struct acpi_pmtt_physical_component
7123f0275a0SJung-uk Kim {
7133f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
7143f0275a0SJung-uk Kim     UINT16                  ComponentId;
7153f0275a0SJung-uk Kim     UINT16                  Reserved;
7163f0275a0SJung-uk Kim     UINT32                  MemorySize;
7173f0275a0SJung-uk Kim     UINT32                  BiosHandle;
7183f0275a0SJung-uk Kim 
7193f0275a0SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT;
7203f0275a0SJung-uk Kim 
7213f0275a0SJung-uk Kim 
7223f0275a0SJung-uk Kim /*******************************************************************************
7233f0275a0SJung-uk Kim  *
7243f0275a0SJung-uk Kim  * RASF - RAS Feature Table (ACPI 5.0)
7253f0275a0SJung-uk Kim  *        Version 1
7263f0275a0SJung-uk Kim  *
7273f0275a0SJung-uk Kim  ******************************************************************************/
7283f0275a0SJung-uk Kim 
7293f0275a0SJung-uk Kim typedef struct acpi_table_rasf
7303f0275a0SJung-uk Kim {
7313f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
7323f0275a0SJung-uk Kim     UINT8                   ChannelId[12];
7333f0275a0SJung-uk Kim 
7343f0275a0SJung-uk Kim } ACPI_TABLE_RASF;
7353f0275a0SJung-uk Kim 
7363f0275a0SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */
7373f0275a0SJung-uk Kim 
7383f0275a0SJung-uk Kim typedef struct acpi_rasf_shared_memory
7393f0275a0SJung-uk Kim {
7403f0275a0SJung-uk Kim     UINT32                  Signature;
7413f0275a0SJung-uk Kim     UINT16                  Command;
7423f0275a0SJung-uk Kim     UINT16                  Status;
7439c48c75eSJung-uk Kim     UINT16                  Version;
7449c48c75eSJung-uk Kim     UINT8                   Capabilities[16];
7459c48c75eSJung-uk Kim     UINT8                   SetCapabilities[16];
7469c48c75eSJung-uk Kim     UINT16                  NumParameterBlocks;
7479c48c75eSJung-uk Kim     UINT32                  SetCapabilitiesStatus;
7483f0275a0SJung-uk Kim 
7493f0275a0SJung-uk Kim } ACPI_RASF_SHARED_MEMORY;
7503f0275a0SJung-uk Kim 
7519c48c75eSJung-uk Kim /* RASF Parameter Block Structure Header */
7529c48c75eSJung-uk Kim 
7539c48c75eSJung-uk Kim typedef struct acpi_rasf_parameter_block
7549c48c75eSJung-uk Kim {
7559c48c75eSJung-uk Kim     UINT16                  Type;
7569c48c75eSJung-uk Kim     UINT16                  Version;
7579c48c75eSJung-uk Kim     UINT16                  Length;
7589c48c75eSJung-uk Kim 
7599c48c75eSJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK;
7609c48c75eSJung-uk Kim 
7619c48c75eSJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */
7629c48c75eSJung-uk Kim 
7639c48c75eSJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter
7649c48c75eSJung-uk Kim {
7659c48c75eSJung-uk Kim     ACPI_RASF_PARAMETER_BLOCK   Header;
7669c48c75eSJung-uk Kim     UINT16                      PatrolScrubCommand;
7679c48c75eSJung-uk Kim     UINT64                      RequestedAddressRange[2];
7689c48c75eSJung-uk Kim     UINT64                      ActualAddressRange[2];
7699c48c75eSJung-uk Kim     UINT16                      Flags;
7709c48c75eSJung-uk Kim     UINT8                       RequestedSpeed;
7719c48c75eSJung-uk Kim 
7729c48c75eSJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER;
7739c48c75eSJung-uk Kim 
7743f0275a0SJung-uk Kim /* Masks for Flags and Speed fields above */
7753f0275a0SJung-uk Kim 
7763f0275a0SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING      1
7773f0275a0SJung-uk Kim #define ACPI_RASF_SPEED                 (7<<1)
7789c48c75eSJung-uk Kim #define ACPI_RASF_SPEED_SLOW            (0<<1)
7799c48c75eSJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM          (4<<1)
7809c48c75eSJung-uk Kim #define ACPI_RASF_SPEED_FAST            (7<<1)
7813f0275a0SJung-uk Kim 
7823f0275a0SJung-uk Kim /* Channel Commands */
7833f0275a0SJung-uk Kim 
7843f0275a0SJung-uk Kim enum AcpiRasfCommands
7853f0275a0SJung-uk Kim {
7869c48c75eSJung-uk Kim     ACPI_RASF_EXECUTE_RASF_COMMAND      = 1
7879c48c75eSJung-uk Kim };
7889c48c75eSJung-uk Kim 
7899c48c75eSJung-uk Kim /* Platform RAS Capabilities */
7909c48c75eSJung-uk Kim 
7919c48c75eSJung-uk Kim enum AcpiRasfCapabiliities
7929c48c75eSJung-uk Kim {
7939c48c75eSJung-uk Kim     ACPI_HW_PATROL_SCRUB_SUPPORTED      = 0,
7949c48c75eSJung-uk Kim     ACPI_SW_PATROL_SCRUB_EXPOSED        = 1
7959c48c75eSJung-uk Kim };
7969c48c75eSJung-uk Kim 
7979c48c75eSJung-uk Kim /* Patrol Scrub Commands */
7989c48c75eSJung-uk Kim 
7999c48c75eSJung-uk Kim enum AcpiRasfPatrolScrubCommands
8009c48c75eSJung-uk Kim {
8019c48c75eSJung-uk Kim     ACPI_RASF_GET_PATROL_PARAMETERS     = 1,
8029c48c75eSJung-uk Kim     ACPI_RASF_START_PATROL_SCRUBBER     = 2,
8039c48c75eSJung-uk Kim     ACPI_RASF_STOP_PATROL_SCRUBBER      = 3
8043f0275a0SJung-uk Kim };
8053f0275a0SJung-uk Kim 
8063f0275a0SJung-uk Kim /* Channel Command flags */
8073f0275a0SJung-uk Kim 
8083f0275a0SJung-uk Kim #define ACPI_RASF_GENERATE_SCI          (1<<15)
8093f0275a0SJung-uk Kim 
8103f0275a0SJung-uk Kim /* Status values */
8113f0275a0SJung-uk Kim 
8123f0275a0SJung-uk Kim enum AcpiRasfStatus
8133f0275a0SJung-uk Kim {
8143f0275a0SJung-uk Kim     ACPI_RASF_SUCCESS                   = 0,
8153f0275a0SJung-uk Kim     ACPI_RASF_NOT_VALID                 = 1,
8163f0275a0SJung-uk Kim     ACPI_RASF_NOT_SUPPORTED             = 2,
8173f0275a0SJung-uk Kim     ACPI_RASF_BUSY                      = 3,
8183f0275a0SJung-uk Kim     ACPI_RASF_FAILED                    = 4,
8193f0275a0SJung-uk Kim     ACPI_RASF_ABORTED                   = 5,
8203f0275a0SJung-uk Kim     ACPI_RASF_INVALID_DATA              = 6
8213f0275a0SJung-uk Kim };
8223f0275a0SJung-uk Kim 
8233f0275a0SJung-uk Kim /* Status flags */
8243f0275a0SJung-uk Kim 
8253f0275a0SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE      (1)
8263f0275a0SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL          (1<<1)
8273f0275a0SJung-uk Kim #define ACPI_RASF_ERROR                 (1<<2)
8283f0275a0SJung-uk Kim #define ACPI_RASF_STATUS                (0x1F<<3)
8293f0275a0SJung-uk Kim 
8303f0275a0SJung-uk Kim 
831efcc2a30SJung-uk Kim /*******************************************************************************
832efcc2a30SJung-uk Kim  *
833*a371a5fdSJung-uk Kim  * STAO - Status Override Table (_STA override) - ACPI 6.0
834*a371a5fdSJung-uk Kim  *        Version 1
835*a371a5fdSJung-uk Kim  *
836*a371a5fdSJung-uk Kim  * Conforms to "ACPI Specification for Status Override Table"
837*a371a5fdSJung-uk Kim  * 6 January 2015
838*a371a5fdSJung-uk Kim  *
839*a371a5fdSJung-uk Kim  ******************************************************************************/
840*a371a5fdSJung-uk Kim 
841*a371a5fdSJung-uk Kim typedef struct acpi_table_stao
842*a371a5fdSJung-uk Kim {
843*a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
844*a371a5fdSJung-uk Kim     UINT8                   IgnoreUart;
845*a371a5fdSJung-uk Kim 
846*a371a5fdSJung-uk Kim } ACPI_TABLE_STAO;
847*a371a5fdSJung-uk Kim 
848*a371a5fdSJung-uk Kim 
849*a371a5fdSJung-uk Kim /*******************************************************************************
850*a371a5fdSJung-uk Kim  *
851efcc2a30SJung-uk Kim  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
852efcc2a30SJung-uk Kim  *        Version 3
853efcc2a30SJung-uk Kim  *
854efcc2a30SJung-uk Kim  * Conforms to "TPM 2.0 Hardware Interface Table (TPM2)" 29 November 2011
855efcc2a30SJung-uk Kim  *
856efcc2a30SJung-uk Kim  ******************************************************************************/
857efcc2a30SJung-uk Kim 
858efcc2a30SJung-uk Kim typedef struct acpi_table_tpm2
859efcc2a30SJung-uk Kim {
860efcc2a30SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
861efcc2a30SJung-uk Kim     UINT32                  Flags;
862efcc2a30SJung-uk Kim     UINT64                  ControlAddress;
863efcc2a30SJung-uk Kim     UINT32                  StartMethod;
864efcc2a30SJung-uk Kim 
865efcc2a30SJung-uk Kim } ACPI_TABLE_TPM2;
866efcc2a30SJung-uk Kim 
867efcc2a30SJung-uk Kim /* Control area structure (not part of table, pointed to by ControlAddress) */
868efcc2a30SJung-uk Kim 
869efcc2a30SJung-uk Kim typedef struct acpi_tpm2_control
870efcc2a30SJung-uk Kim {
871efcc2a30SJung-uk Kim     UINT32                  Reserved;
872efcc2a30SJung-uk Kim     UINT32                  Error;
873efcc2a30SJung-uk Kim     UINT32                  Cancel;
874efcc2a30SJung-uk Kim     UINT32                  Start;
875efcc2a30SJung-uk Kim     UINT64                  InterruptControl;
876efcc2a30SJung-uk Kim     UINT32                  CommandSize;
877efcc2a30SJung-uk Kim     UINT64                  CommandAddress;
878efcc2a30SJung-uk Kim     UINT32                  ResponseSize;
879efcc2a30SJung-uk Kim     UINT64                  ResponseAddress;
880efcc2a30SJung-uk Kim 
881efcc2a30SJung-uk Kim } ACPI_TPM2_CONTROL;
882efcc2a30SJung-uk Kim 
883efcc2a30SJung-uk Kim 
884*a371a5fdSJung-uk Kim /*******************************************************************************
885*a371a5fdSJung-uk Kim  *
886*a371a5fdSJung-uk Kim  * WPBT - Windows Platform Environment Table (ACPI 6.0)
887*a371a5fdSJung-uk Kim  *        Version 1
888*a371a5fdSJung-uk Kim  *
889*a371a5fdSJung-uk Kim  * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
890*a371a5fdSJung-uk Kim  *
891*a371a5fdSJung-uk Kim  ******************************************************************************/
892*a371a5fdSJung-uk Kim 
893*a371a5fdSJung-uk Kim typedef struct acpi_table_wpbt
894*a371a5fdSJung-uk Kim {
895*a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
896*a371a5fdSJung-uk Kim     UINT32                  HandoffSize;
897*a371a5fdSJung-uk Kim     UINT64                  HandoffAddress;
898*a371a5fdSJung-uk Kim     UINT8                   Layout;
899*a371a5fdSJung-uk Kim     UINT8                   Type;
900*a371a5fdSJung-uk Kim     UINT16                  ArgumentsLength;
901*a371a5fdSJung-uk Kim 
902*a371a5fdSJung-uk Kim } ACPI_TABLE_WPBT;
903*a371a5fdSJung-uk Kim 
904*a371a5fdSJung-uk Kim 
905*a371a5fdSJung-uk Kim /*******************************************************************************
906*a371a5fdSJung-uk Kim  *
907*a371a5fdSJung-uk Kim  * XENV - Xen Environment Table (ACPI 6.0)
908*a371a5fdSJung-uk Kim  *        Version 1
909*a371a5fdSJung-uk Kim  *
910*a371a5fdSJung-uk Kim  * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
911*a371a5fdSJung-uk Kim  *
912*a371a5fdSJung-uk Kim  ******************************************************************************/
913*a371a5fdSJung-uk Kim 
914*a371a5fdSJung-uk Kim typedef struct acpi_table_xenv
915*a371a5fdSJung-uk Kim {
916*a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
917*a371a5fdSJung-uk Kim     UINT64                  GrantTableAddress;
918*a371a5fdSJung-uk Kim     UINT64                  GrantTableSize;
919*a371a5fdSJung-uk Kim     UINT32                  EventInterrupt;
920*a371a5fdSJung-uk Kim     UINT8                   EventFlags;
921*a371a5fdSJung-uk Kim 
922*a371a5fdSJung-uk Kim } ACPI_TABLE_XENV;
923*a371a5fdSJung-uk Kim 
924*a371a5fdSJung-uk Kim 
9253f0275a0SJung-uk Kim /* Reset to default packing */
9263f0275a0SJung-uk Kim 
9273f0275a0SJung-uk Kim #pragma pack()
9283f0275a0SJung-uk Kim 
9293f0275a0SJung-uk Kim #endif /* __ACTBL3_H__ */
930