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