xref: /freebsd/sys/contrib/dev/acpica/include/actbl3.h (revision 3f0275a0331d5d477f9d8dc5accbba3533ac4cbf)
1*3f0275a0SJung-uk Kim /******************************************************************************
2*3f0275a0SJung-uk Kim  *
3*3f0275a0SJung-uk Kim  * Name: actbl3.h - ACPI Table Definitions
4*3f0275a0SJung-uk Kim  *
5*3f0275a0SJung-uk Kim  *****************************************************************************/
6*3f0275a0SJung-uk Kim 
7*3f0275a0SJung-uk Kim /*
8*3f0275a0SJung-uk Kim  * Copyright (C) 2000 - 2011, Intel Corp.
9*3f0275a0SJung-uk Kim  * All rights reserved.
10*3f0275a0SJung-uk Kim  *
11*3f0275a0SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12*3f0275a0SJung-uk Kim  * modification, are permitted provided that the following conditions
13*3f0275a0SJung-uk Kim  * are met:
14*3f0275a0SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15*3f0275a0SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16*3f0275a0SJung-uk Kim  *    without modification.
17*3f0275a0SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*3f0275a0SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19*3f0275a0SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20*3f0275a0SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21*3f0275a0SJung-uk Kim  *    binary redistribution.
22*3f0275a0SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23*3f0275a0SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24*3f0275a0SJung-uk Kim  *    from this software without specific prior written permission.
25*3f0275a0SJung-uk Kim  *
26*3f0275a0SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27*3f0275a0SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28*3f0275a0SJung-uk Kim  * Software Foundation.
29*3f0275a0SJung-uk Kim  *
30*3f0275a0SJung-uk Kim  * NO WARRANTY
31*3f0275a0SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*3f0275a0SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*3f0275a0SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*3f0275a0SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*3f0275a0SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*3f0275a0SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*3f0275a0SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*3f0275a0SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*3f0275a0SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*3f0275a0SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*3f0275a0SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42*3f0275a0SJung-uk Kim  */
43*3f0275a0SJung-uk Kim 
44*3f0275a0SJung-uk Kim #ifndef __ACTBL3_H__
45*3f0275a0SJung-uk Kim #define __ACTBL3_H__
46*3f0275a0SJung-uk Kim 
47*3f0275a0SJung-uk Kim 
48*3f0275a0SJung-uk Kim /*******************************************************************************
49*3f0275a0SJung-uk Kim  *
50*3f0275a0SJung-uk Kim  * Additional ACPI Tables (3)
51*3f0275a0SJung-uk Kim  *
52*3f0275a0SJung-uk Kim  * These tables are not consumed directly by the ACPICA subsystem, but are
53*3f0275a0SJung-uk Kim  * included here to support device drivers and the AML disassembler.
54*3f0275a0SJung-uk Kim  *
55*3f0275a0SJung-uk Kim  * The tables in this file are fully defined within the ACPI specification.
56*3f0275a0SJung-uk Kim  *
57*3f0275a0SJung-uk Kim  ******************************************************************************/
58*3f0275a0SJung-uk Kim 
59*3f0275a0SJung-uk Kim 
60*3f0275a0SJung-uk Kim /*
61*3f0275a0SJung-uk Kim  * Values for description table header signatures for tables defined in this
62*3f0275a0SJung-uk Kim  * file. Useful because they make it more difficult to inadvertently type in
63*3f0275a0SJung-uk Kim  * the wrong signature.
64*3f0275a0SJung-uk Kim  */
65*3f0275a0SJung-uk Kim #define ACPI_SIG_BGRT           "BGRT"      /* Boot Graphics Resource Table */
66*3f0275a0SJung-uk Kim #define ACPI_SIG_DRTM           "DRTM"      /* Dynamic Root of Trust for Measurement table */
67*3f0275a0SJung-uk Kim #define ACPI_SIG_FPDT           "FPDT"      /* Firmware Performance Data Table */
68*3f0275a0SJung-uk Kim #define ACPI_SIG_GTDT           "GTDT"      /* Generic Timer Description Table */
69*3f0275a0SJung-uk Kim #define ACPI_SIG_MPST           "MPST"      /* Memory Power State Table */
70*3f0275a0SJung-uk Kim #define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
71*3f0275a0SJung-uk Kim #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
72*3f0275a0SJung-uk Kim #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
73*3f0275a0SJung-uk Kim 
74*3f0275a0SJung-uk Kim #define ACPI_SIG_S3PT           "S3PT"      /* S3 Performance (sub)Table */
75*3f0275a0SJung-uk Kim #define ACPI_SIG_PCCS           "PCC"       /* PCC Shared Memory Region */
76*3f0275a0SJung-uk Kim 
77*3f0275a0SJung-uk Kim /* Reserved table signatures */
78*3f0275a0SJung-uk Kim 
79*3f0275a0SJung-uk Kim #define ACPI_SIG_CSRT           "CSRT"      /* Core System Resources Table */
80*3f0275a0SJung-uk Kim #define ACPI_SIG_DBG2           "DBG2"      /* Debug Port table 2 */
81*3f0275a0SJung-uk Kim #define ACPI_SIG_MATR           "MATR"      /* Memory Address Translation Table */
82*3f0275a0SJung-uk Kim #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
83*3f0275a0SJung-uk Kim #define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
84*3f0275a0SJung-uk Kim 
85*3f0275a0SJung-uk Kim /*
86*3f0275a0SJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
87*3f0275a0SJung-uk Kim  * the tables are provided by the system BIOS.
88*3f0275a0SJung-uk Kim  */
89*3f0275a0SJung-uk Kim #pragma pack(1)
90*3f0275a0SJung-uk Kim 
91*3f0275a0SJung-uk Kim /*
92*3f0275a0SJung-uk Kim  * Note about bitfields: The UINT8 type is used for bitfields in ACPI tables.
93*3f0275a0SJung-uk Kim  * This is the only type that is even remotely portable. Anything else is not
94*3f0275a0SJung-uk Kim  * portable, so do not use any other bitfield types.
95*3f0275a0SJung-uk Kim  */
96*3f0275a0SJung-uk Kim 
97*3f0275a0SJung-uk Kim 
98*3f0275a0SJung-uk Kim /*******************************************************************************
99*3f0275a0SJung-uk Kim  *
100*3f0275a0SJung-uk Kim  * BGRT - Boot Graphics Resource Table (ACPI 5.0)
101*3f0275a0SJung-uk Kim  *        Version 1
102*3f0275a0SJung-uk Kim  *
103*3f0275a0SJung-uk Kim  ******************************************************************************/
104*3f0275a0SJung-uk Kim 
105*3f0275a0SJung-uk Kim typedef struct acpi_table_bgrt
106*3f0275a0SJung-uk Kim {
107*3f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
108*3f0275a0SJung-uk Kim     UINT16                  Version;
109*3f0275a0SJung-uk Kim     UINT8                   Status;
110*3f0275a0SJung-uk Kim     UINT8                   ImageType;
111*3f0275a0SJung-uk Kim     UINT64                  ImageAddress;
112*3f0275a0SJung-uk Kim     UINT32                  ImageOffsetX;
113*3f0275a0SJung-uk Kim     UINT32                  ImageOffsetY;
114*3f0275a0SJung-uk Kim 
115*3f0275a0SJung-uk Kim } ACPI_TABLE_BGRT;
116*3f0275a0SJung-uk Kim 
117*3f0275a0SJung-uk Kim 
118*3f0275a0SJung-uk Kim /*******************************************************************************
119*3f0275a0SJung-uk Kim  *
120*3f0275a0SJung-uk Kim  * DRTM - Dynamic Root of Trust for Measurement table
121*3f0275a0SJung-uk Kim  *
122*3f0275a0SJung-uk Kim  ******************************************************************************/
123*3f0275a0SJung-uk Kim 
124*3f0275a0SJung-uk Kim typedef struct acpi_table_drtm
125*3f0275a0SJung-uk Kim {
126*3f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
127*3f0275a0SJung-uk Kim     UINT64                  EntryBaseAddress;
128*3f0275a0SJung-uk Kim     UINT64                  EntryLength;
129*3f0275a0SJung-uk Kim     UINT32                  EntryAddress32;
130*3f0275a0SJung-uk Kim     UINT64                  EntryAddress64;
131*3f0275a0SJung-uk Kim     UINT64                  ExitAddress;
132*3f0275a0SJung-uk Kim     UINT64                  LogAreaAddress;
133*3f0275a0SJung-uk Kim     UINT32                  LogAreaLength;
134*3f0275a0SJung-uk Kim     UINT64                  ArchDependentAddress;
135*3f0275a0SJung-uk Kim     UINT32                  Flags;
136*3f0275a0SJung-uk Kim 
137*3f0275a0SJung-uk Kim } ACPI_TABLE_DRTM;
138*3f0275a0SJung-uk Kim 
139*3f0275a0SJung-uk Kim /* 1) Validated Tables List */
140*3f0275a0SJung-uk Kim 
141*3f0275a0SJung-uk Kim typedef struct acpi_drtm_vtl_list
142*3f0275a0SJung-uk Kim {
143*3f0275a0SJung-uk Kim     UINT32                  ValidatedTableListCount;
144*3f0275a0SJung-uk Kim 
145*3f0275a0SJung-uk Kim } ACPI_DRTM_VTL_LIST;
146*3f0275a0SJung-uk Kim 
147*3f0275a0SJung-uk Kim /* 2) Resources List */
148*3f0275a0SJung-uk Kim 
149*3f0275a0SJung-uk Kim typedef struct acpi_drtm_resource_list
150*3f0275a0SJung-uk Kim {
151*3f0275a0SJung-uk Kim     UINT32                  ResourceListCount;
152*3f0275a0SJung-uk Kim 
153*3f0275a0SJung-uk Kim } ACPI_DRTM_RESOURCE_LIST;
154*3f0275a0SJung-uk Kim 
155*3f0275a0SJung-uk Kim /* 3) Platform-specific Identifiers List */
156*3f0275a0SJung-uk Kim 
157*3f0275a0SJung-uk Kim typedef struct acpi_drtm_id_list
158*3f0275a0SJung-uk Kim {
159*3f0275a0SJung-uk Kim     UINT32                  IdListCount;
160*3f0275a0SJung-uk Kim 
161*3f0275a0SJung-uk Kim } ACPI_DRTM_ID_LIST;
162*3f0275a0SJung-uk Kim 
163*3f0275a0SJung-uk Kim 
164*3f0275a0SJung-uk Kim /*******************************************************************************
165*3f0275a0SJung-uk Kim  *
166*3f0275a0SJung-uk Kim  * FPDT - Firmware Performance Data Table (ACPI 5.0)
167*3f0275a0SJung-uk Kim  *        Version 1
168*3f0275a0SJung-uk Kim  *
169*3f0275a0SJung-uk Kim  ******************************************************************************/
170*3f0275a0SJung-uk Kim 
171*3f0275a0SJung-uk Kim typedef struct acpi_table_fpdt
172*3f0275a0SJung-uk Kim {
173*3f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
174*3f0275a0SJung-uk Kim 
175*3f0275a0SJung-uk Kim } ACPI_TABLE_FPDT;
176*3f0275a0SJung-uk Kim 
177*3f0275a0SJung-uk Kim 
178*3f0275a0SJung-uk Kim /* FPDT subtable header */
179*3f0275a0SJung-uk Kim 
180*3f0275a0SJung-uk Kim typedef struct acpi_fpdt_header
181*3f0275a0SJung-uk Kim {
182*3f0275a0SJung-uk Kim     UINT16                  Type;
183*3f0275a0SJung-uk Kim     UINT8                   Length;
184*3f0275a0SJung-uk Kim     UINT8                   Revision;
185*3f0275a0SJung-uk Kim 
186*3f0275a0SJung-uk Kim } ACPI_FPDT_HEADER;
187*3f0275a0SJung-uk Kim 
188*3f0275a0SJung-uk Kim /* Values for Type field above */
189*3f0275a0SJung-uk Kim 
190*3f0275a0SJung-uk Kim enum AcpiFpdtType
191*3f0275a0SJung-uk Kim {
192*3f0275a0SJung-uk Kim     ACPI_FPDT_TYPE_BOOT                 = 0,
193*3f0275a0SJung-uk Kim     ACPI_FPDT_TYPE_S3PERF               = 1,
194*3f0275a0SJung-uk Kim };
195*3f0275a0SJung-uk Kim 
196*3f0275a0SJung-uk Kim 
197*3f0275a0SJung-uk Kim /*
198*3f0275a0SJung-uk Kim  * FPDT subtables
199*3f0275a0SJung-uk Kim  */
200*3f0275a0SJung-uk Kim 
201*3f0275a0SJung-uk Kim /* 0: Firmware Basic Boot Performance Record */
202*3f0275a0SJung-uk Kim 
203*3f0275a0SJung-uk Kim typedef struct acpi_fpdt_boot
204*3f0275a0SJung-uk Kim {
205*3f0275a0SJung-uk Kim     ACPI_FPDT_HEADER        Header;
206*3f0275a0SJung-uk Kim     UINT8                   Reserved[4];
207*3f0275a0SJung-uk Kim     UINT64                  ResetEnd;
208*3f0275a0SJung-uk Kim     UINT64                  LoadStart;
209*3f0275a0SJung-uk Kim     UINT64                  StartupStart;
210*3f0275a0SJung-uk Kim     UINT64                  ExitServicesEntry;
211*3f0275a0SJung-uk Kim     UINT64                  ExitServicesExit;
212*3f0275a0SJung-uk Kim 
213*3f0275a0SJung-uk Kim } ACPI_FPDT_BOOT;
214*3f0275a0SJung-uk Kim 
215*3f0275a0SJung-uk Kim 
216*3f0275a0SJung-uk Kim /* 1: S3 Performance Table Pointer Record */
217*3f0275a0SJung-uk Kim 
218*3f0275a0SJung-uk Kim typedef struct acpi_fpdt_s3pt_ptr
219*3f0275a0SJung-uk Kim {
220*3f0275a0SJung-uk Kim     ACPI_FPDT_HEADER        Header;
221*3f0275a0SJung-uk Kim     UINT8                   Reserved[4];
222*3f0275a0SJung-uk Kim     UINT64                  Address;
223*3f0275a0SJung-uk Kim 
224*3f0275a0SJung-uk Kim } ACPI_FPDT_S3PT_PTR;
225*3f0275a0SJung-uk Kim 
226*3f0275a0SJung-uk Kim 
227*3f0275a0SJung-uk Kim /*
228*3f0275a0SJung-uk Kim  * S3PT - S3 Performance Table. This table is pointed to by the
229*3f0275a0SJung-uk Kim  * FPDT S3 Pointer Record above.
230*3f0275a0SJung-uk Kim  */
231*3f0275a0SJung-uk Kim typedef struct acpi_table_s3pt
232*3f0275a0SJung-uk Kim {
233*3f0275a0SJung-uk Kim     UINT8                   Signature[4]; /* "S3PT" */
234*3f0275a0SJung-uk Kim     UINT32                  Length;
235*3f0275a0SJung-uk Kim 
236*3f0275a0SJung-uk Kim } ACPI_TABLE_S3PT;
237*3f0275a0SJung-uk Kim 
238*3f0275a0SJung-uk Kim 
239*3f0275a0SJung-uk Kim /*
240*3f0275a0SJung-uk Kim  * S3PT Subtables
241*3f0275a0SJung-uk Kim  */
242*3f0275a0SJung-uk Kim typedef struct acpi_s3pt_header
243*3f0275a0SJung-uk Kim {
244*3f0275a0SJung-uk Kim     UINT16                  Type;
245*3f0275a0SJung-uk Kim     UINT8                   Length;
246*3f0275a0SJung-uk Kim     UINT8                   Revision;
247*3f0275a0SJung-uk Kim 
248*3f0275a0SJung-uk Kim } ACPI_S3PT_HEADER;
249*3f0275a0SJung-uk Kim 
250*3f0275a0SJung-uk Kim /* Values for Type field above */
251*3f0275a0SJung-uk Kim 
252*3f0275a0SJung-uk Kim enum AcpiS3ptType
253*3f0275a0SJung-uk Kim {
254*3f0275a0SJung-uk Kim     ACPI_S3PT_TYPE_RESUME               = 0,
255*3f0275a0SJung-uk Kim     ACPI_S3PT_TYPE_SUSPEND              = 1,
256*3f0275a0SJung-uk Kim };
257*3f0275a0SJung-uk Kim 
258*3f0275a0SJung-uk Kim typedef struct acpi_s3pt_resume
259*3f0275a0SJung-uk Kim {
260*3f0275a0SJung-uk Kim     ACPI_S3PT_HEADER        Header;
261*3f0275a0SJung-uk Kim     UINT32                  ResumeCount;
262*3f0275a0SJung-uk Kim     UINT64                  FullResume;
263*3f0275a0SJung-uk Kim     UINT64                  AverageResume;
264*3f0275a0SJung-uk Kim 
265*3f0275a0SJung-uk Kim } ACPI_S3PT_RESUME;
266*3f0275a0SJung-uk Kim 
267*3f0275a0SJung-uk Kim typedef struct acpi_s3pt_suspend
268*3f0275a0SJung-uk Kim {
269*3f0275a0SJung-uk Kim     ACPI_S3PT_HEADER        Header;
270*3f0275a0SJung-uk Kim     UINT64                  SuspendStart;
271*3f0275a0SJung-uk Kim     UINT64                  SuspendEnd;
272*3f0275a0SJung-uk Kim 
273*3f0275a0SJung-uk Kim } ACPI_S3PT_SUSPEND;
274*3f0275a0SJung-uk Kim 
275*3f0275a0SJung-uk Kim 
276*3f0275a0SJung-uk Kim /*******************************************************************************
277*3f0275a0SJung-uk Kim  *
278*3f0275a0SJung-uk Kim  * GTDT - Generic Timer Description Table (ACPI 5.0)
279*3f0275a0SJung-uk Kim  *        Version 1
280*3f0275a0SJung-uk Kim  *
281*3f0275a0SJung-uk Kim  ******************************************************************************/
282*3f0275a0SJung-uk Kim 
283*3f0275a0SJung-uk Kim typedef struct acpi_table_gtdt
284*3f0275a0SJung-uk Kim {
285*3f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
286*3f0275a0SJung-uk Kim     UINT64                  Address;
287*3f0275a0SJung-uk Kim     UINT32                  Flags;
288*3f0275a0SJung-uk Kim     UINT32                  SecurePl1Interrupt;
289*3f0275a0SJung-uk Kim     UINT32                  SecurePl1Flags;
290*3f0275a0SJung-uk Kim     UINT32                  NonSecurePl1Interrupt;
291*3f0275a0SJung-uk Kim     UINT32                  NonSecurePl1Flags;
292*3f0275a0SJung-uk Kim     UINT32                  VirtualTimerInterrupt;
293*3f0275a0SJung-uk Kim     UINT32                  VirtualTimerFlags;
294*3f0275a0SJung-uk Kim     UINT32                  NonSecurePl2Interrupt;
295*3f0275a0SJung-uk Kim     UINT32                  NonSecurePl2Flags;
296*3f0275a0SJung-uk Kim 
297*3f0275a0SJung-uk Kim } ACPI_TABLE_GTDT;
298*3f0275a0SJung-uk Kim 
299*3f0275a0SJung-uk Kim /* Values for Flags field above */
300*3f0275a0SJung-uk Kim 
301*3f0275a0SJung-uk Kim #define ACPI_GTDT_MAPPED_BLOCK_PRESENT      1
302*3f0275a0SJung-uk Kim 
303*3f0275a0SJung-uk Kim /* Values for all "TimerFlags" fields above */
304*3f0275a0SJung-uk Kim 
305*3f0275a0SJung-uk Kim #define ACPI_GTDT_INTERRUPT_MODE            1
306*3f0275a0SJung-uk Kim #define ACPI_GTDT_INTERRUPT_POLARITY        2
307*3f0275a0SJung-uk Kim 
308*3f0275a0SJung-uk Kim 
309*3f0275a0SJung-uk Kim /*******************************************************************************
310*3f0275a0SJung-uk Kim  *
311*3f0275a0SJung-uk Kim  * MPST - Memory Power State Table (ACPI 5.0)
312*3f0275a0SJung-uk Kim  *        Version 1
313*3f0275a0SJung-uk Kim  *
314*3f0275a0SJung-uk Kim  ******************************************************************************/
315*3f0275a0SJung-uk Kim 
316*3f0275a0SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \
317*3f0275a0SJung-uk Kim     UINT16                  Reserved1; \
318*3f0275a0SJung-uk Kim     UINT8                   ChannelId; \
319*3f0275a0SJung-uk Kim     UINT8                   Reserved2; \
320*3f0275a0SJung-uk Kim     UINT16                  PowerNodeCount;
321*3f0275a0SJung-uk Kim 
322*3f0275a0SJung-uk Kim /* Main table */
323*3f0275a0SJung-uk Kim 
324*3f0275a0SJung-uk Kim typedef struct acpi_table_mpst
325*3f0275a0SJung-uk Kim {
326*3f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
327*3f0275a0SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
328*3f0275a0SJung-uk Kim 
329*3f0275a0SJung-uk Kim } ACPI_TABLE_MPST;
330*3f0275a0SJung-uk Kim 
331*3f0275a0SJung-uk Kim 
332*3f0275a0SJung-uk Kim /* Memory Platform Communication Channel Info */
333*3f0275a0SJung-uk Kim 
334*3f0275a0SJung-uk Kim typedef struct acpi_mpst_channel
335*3f0275a0SJung-uk Kim {
336*3f0275a0SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
337*3f0275a0SJung-uk Kim 
338*3f0275a0SJung-uk Kim } ACPI_MPST_CHANNEL;
339*3f0275a0SJung-uk Kim 
340*3f0275a0SJung-uk Kim 
341*3f0275a0SJung-uk Kim /* Memory Power Node Structure */
342*3f0275a0SJung-uk Kim 
343*3f0275a0SJung-uk Kim typedef struct acpi_mpst_power_node
344*3f0275a0SJung-uk Kim {
345*3f0275a0SJung-uk Kim     UINT8                   Flags;
346*3f0275a0SJung-uk Kim     UINT8                   Reserved1;
347*3f0275a0SJung-uk Kim     UINT16                  NodeId;
348*3f0275a0SJung-uk Kim     UINT32                  Length;
349*3f0275a0SJung-uk Kim     UINT64                  RangeAddress;
350*3f0275a0SJung-uk Kim     UINT64                  RangeLength;
351*3f0275a0SJung-uk Kim     UINT8                   NumPowerStates;
352*3f0275a0SJung-uk Kim     UINT8                   NumPhysicalComponents;
353*3f0275a0SJung-uk Kim     UINT16                  Reserved2;
354*3f0275a0SJung-uk Kim 
355*3f0275a0SJung-uk Kim } ACPI_MPST_POWER_NODE;
356*3f0275a0SJung-uk Kim 
357*3f0275a0SJung-uk Kim /* Values for Flags field above */
358*3f0275a0SJung-uk Kim 
359*3f0275a0SJung-uk Kim #define ACPI_MPST_ENABLED               1
360*3f0275a0SJung-uk Kim #define ACPI_MPST_POWER_MANAGED         2
361*3f0275a0SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE      4
362*3f0275a0SJung-uk Kim 
363*3f0275a0SJung-uk Kim 
364*3f0275a0SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */
365*3f0275a0SJung-uk Kim 
366*3f0275a0SJung-uk Kim typedef struct acpi_mpst_power_state
367*3f0275a0SJung-uk Kim {
368*3f0275a0SJung-uk Kim     UINT8                   PowerState;
369*3f0275a0SJung-uk Kim     UINT8                   InfoIndex;
370*3f0275a0SJung-uk Kim 
371*3f0275a0SJung-uk Kim } ACPI_MPST_POWER_STATE;
372*3f0275a0SJung-uk Kim 
373*3f0275a0SJung-uk Kim 
374*3f0275a0SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */
375*3f0275a0SJung-uk Kim 
376*3f0275a0SJung-uk Kim typedef struct acpi_mpst_component
377*3f0275a0SJung-uk Kim {
378*3f0275a0SJung-uk Kim     UINT16                  ComponentId;
379*3f0275a0SJung-uk Kim 
380*3f0275a0SJung-uk Kim } ACPI_MPST_COMPONENT;
381*3f0275a0SJung-uk Kim 
382*3f0275a0SJung-uk Kim 
383*3f0275a0SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
384*3f0275a0SJung-uk Kim 
385*3f0275a0SJung-uk Kim typedef struct acpi_mpst_data_hdr
386*3f0275a0SJung-uk Kim {
387*3f0275a0SJung-uk Kim     UINT16                  CharacteristicsCount;
388*3f0275a0SJung-uk Kim 
389*3f0275a0SJung-uk Kim } ACPI_MPST_DATA_HDR;
390*3f0275a0SJung-uk Kim 
391*3f0275a0SJung-uk Kim typedef struct acpi_mpst_power_data
392*3f0275a0SJung-uk Kim {
393*3f0275a0SJung-uk Kim     UINT8                   Revision;
394*3f0275a0SJung-uk Kim     UINT8                   Flags;
395*3f0275a0SJung-uk Kim     UINT16                  Reserved1;
396*3f0275a0SJung-uk Kim     UINT32                  AveragePower;
397*3f0275a0SJung-uk Kim     UINT32                  PowerSaving;
398*3f0275a0SJung-uk Kim     UINT64                  ExitLatency;
399*3f0275a0SJung-uk Kim     UINT64                  Reserved2;
400*3f0275a0SJung-uk Kim 
401*3f0275a0SJung-uk Kim } ACPI_MPST_POWER_DATA;
402*3f0275a0SJung-uk Kim 
403*3f0275a0SJung-uk Kim /* Values for Flags field above */
404*3f0275a0SJung-uk Kim 
405*3f0275a0SJung-uk Kim #define ACPI_MPST_PRESERVE              1
406*3f0275a0SJung-uk Kim #define ACPI_MPST_AUTOENTRY             2
407*3f0275a0SJung-uk Kim #define ACPI_MPST_AUTOEXIT              4
408*3f0275a0SJung-uk Kim 
409*3f0275a0SJung-uk Kim 
410*3f0275a0SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */
411*3f0275a0SJung-uk Kim 
412*3f0275a0SJung-uk Kim typedef struct acpi_mpst_shared
413*3f0275a0SJung-uk Kim {
414*3f0275a0SJung-uk Kim     UINT32                  Signature;
415*3f0275a0SJung-uk Kim     UINT16                  PccCommand;
416*3f0275a0SJung-uk Kim     UINT16                  PccStatus;
417*3f0275a0SJung-uk Kim     UINT16                  CommandRegister;
418*3f0275a0SJung-uk Kim     UINT16                  StatusRegister;
419*3f0275a0SJung-uk Kim     UINT16                  PowerStateId;
420*3f0275a0SJung-uk Kim     UINT16                  PowerNodeId;
421*3f0275a0SJung-uk Kim     UINT64                  EnergyConsumed;
422*3f0275a0SJung-uk Kim     UINT64                  AveragePower;
423*3f0275a0SJung-uk Kim 
424*3f0275a0SJung-uk Kim } ACPI_MPST_SHARED;
425*3f0275a0SJung-uk Kim 
426*3f0275a0SJung-uk Kim 
427*3f0275a0SJung-uk Kim /*******************************************************************************
428*3f0275a0SJung-uk Kim  *
429*3f0275a0SJung-uk Kim  * PCCT - Platform Communications Channel Table (ACPI 5.0)
430*3f0275a0SJung-uk Kim  *        Version 1
431*3f0275a0SJung-uk Kim  *
432*3f0275a0SJung-uk Kim  ******************************************************************************/
433*3f0275a0SJung-uk Kim 
434*3f0275a0SJung-uk Kim typedef struct acpi_table_pcct
435*3f0275a0SJung-uk Kim {
436*3f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
437*3f0275a0SJung-uk Kim     UINT32                  Flags;
438*3f0275a0SJung-uk Kim     UINT32                  Latency;
439*3f0275a0SJung-uk Kim     UINT32                  Reserved;
440*3f0275a0SJung-uk Kim 
441*3f0275a0SJung-uk Kim } ACPI_TABLE_PCCT;
442*3f0275a0SJung-uk Kim 
443*3f0275a0SJung-uk Kim /* Values for Flags field above */
444*3f0275a0SJung-uk Kim 
445*3f0275a0SJung-uk Kim #define ACPI_PCCT_DOORBELL              1
446*3f0275a0SJung-uk Kim 
447*3f0275a0SJung-uk Kim /*
448*3f0275a0SJung-uk Kim  * PCCT subtables
449*3f0275a0SJung-uk Kim  */
450*3f0275a0SJung-uk Kim 
451*3f0275a0SJung-uk Kim /* 0: Generic Communications Subspace */
452*3f0275a0SJung-uk Kim 
453*3f0275a0SJung-uk Kim typedef struct acpi_pcct_subspace
454*3f0275a0SJung-uk Kim {
455*3f0275a0SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
456*3f0275a0SJung-uk Kim     UINT8                   Reserved[6];
457*3f0275a0SJung-uk Kim     UINT64                  BaseAddress;
458*3f0275a0SJung-uk Kim     UINT64                  Length;
459*3f0275a0SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
460*3f0275a0SJung-uk Kim     UINT64                  PreserveMask;
461*3f0275a0SJung-uk Kim     UINT64                  WriteMask;
462*3f0275a0SJung-uk Kim 
463*3f0275a0SJung-uk Kim } ACPI_PCCT_SUBSPACE;
464*3f0275a0SJung-uk Kim 
465*3f0275a0SJung-uk Kim 
466*3f0275a0SJung-uk Kim /*
467*3f0275a0SJung-uk Kim  * PCC memory structures (not part of the ACPI table)
468*3f0275a0SJung-uk Kim  */
469*3f0275a0SJung-uk Kim 
470*3f0275a0SJung-uk Kim /* Shared Memory Region */
471*3f0275a0SJung-uk Kim 
472*3f0275a0SJung-uk Kim typedef struct acpi_pcct_shared_memory
473*3f0275a0SJung-uk Kim {
474*3f0275a0SJung-uk Kim     UINT32                  Signature;
475*3f0275a0SJung-uk Kim     UINT16                  Command;
476*3f0275a0SJung-uk Kim     UINT16                  Status;
477*3f0275a0SJung-uk Kim 
478*3f0275a0SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY;
479*3f0275a0SJung-uk Kim 
480*3f0275a0SJung-uk Kim 
481*3f0275a0SJung-uk Kim /*******************************************************************************
482*3f0275a0SJung-uk Kim  *
483*3f0275a0SJung-uk Kim  * PMTT - Platform Memory Topology Table (ACPI 5.0)
484*3f0275a0SJung-uk Kim  *        Version 1
485*3f0275a0SJung-uk Kim  *
486*3f0275a0SJung-uk Kim  ******************************************************************************/
487*3f0275a0SJung-uk Kim 
488*3f0275a0SJung-uk Kim typedef struct acpi_table_pmtt
489*3f0275a0SJung-uk Kim {
490*3f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
491*3f0275a0SJung-uk Kim     UINT32                  Reserved;
492*3f0275a0SJung-uk Kim 
493*3f0275a0SJung-uk Kim } ACPI_TABLE_PMTT;
494*3f0275a0SJung-uk Kim 
495*3f0275a0SJung-uk Kim 
496*3f0275a0SJung-uk Kim /* Common header for PMTT subtables that follow main table */
497*3f0275a0SJung-uk Kim 
498*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_header
499*3f0275a0SJung-uk Kim {
500*3f0275a0SJung-uk Kim     UINT8                   Type;
501*3f0275a0SJung-uk Kim     UINT8                   Reserved1;
502*3f0275a0SJung-uk Kim     UINT16                  Length;
503*3f0275a0SJung-uk Kim     UINT16                  Flags;
504*3f0275a0SJung-uk Kim     UINT16                  Reserved2;
505*3f0275a0SJung-uk Kim 
506*3f0275a0SJung-uk Kim } ACPI_PMTT_HEADER;
507*3f0275a0SJung-uk Kim 
508*3f0275a0SJung-uk Kim /* Values for Type field above */
509*3f0275a0SJung-uk Kim 
510*3f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET           0
511*3f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER       1
512*3f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM             2
513*3f0275a0SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFF are reserved */
514*3f0275a0SJung-uk Kim 
515*3f0275a0SJung-uk Kim /* Values for Flags field above */
516*3f0275a0SJung-uk Kim 
517*3f0275a0SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL             0x0001
518*3f0275a0SJung-uk Kim #define ACPI_PMTT_PHYSICAL              0x0002
519*3f0275a0SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE           0x000C
520*3f0275a0SJung-uk Kim 
521*3f0275a0SJung-uk Kim 
522*3f0275a0SJung-uk Kim /*
523*3f0275a0SJung-uk Kim  * PMTT subtables, correspond to Type in acpi_pmtt_header
524*3f0275a0SJung-uk Kim  */
525*3f0275a0SJung-uk Kim 
526*3f0275a0SJung-uk Kim 
527*3f0275a0SJung-uk Kim /* 0: Socket Structure */
528*3f0275a0SJung-uk Kim 
529*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_socket
530*3f0275a0SJung-uk Kim {
531*3f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
532*3f0275a0SJung-uk Kim     UINT16                  SocketId;
533*3f0275a0SJung-uk Kim     UINT16                  Reserved;
534*3f0275a0SJung-uk Kim 
535*3f0275a0SJung-uk Kim } ACPI_PMTT_SOCKET;
536*3f0275a0SJung-uk Kim 
537*3f0275a0SJung-uk Kim 
538*3f0275a0SJung-uk Kim /* 1: Memory Controller subtable */
539*3f0275a0SJung-uk Kim 
540*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_controller
541*3f0275a0SJung-uk Kim {
542*3f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
543*3f0275a0SJung-uk Kim     UINT32                  ReadLatency;
544*3f0275a0SJung-uk Kim     UINT32                  WriteLatency;
545*3f0275a0SJung-uk Kim     UINT32                  ReadBandwidth;
546*3f0275a0SJung-uk Kim     UINT32                  WriteBandwidth;
547*3f0275a0SJung-uk Kim     UINT16                  AccessWidth;
548*3f0275a0SJung-uk Kim     UINT16                  Alignment;
549*3f0275a0SJung-uk Kim     UINT16                  Reserved;
550*3f0275a0SJung-uk Kim     UINT16                  DomainCount;
551*3f0275a0SJung-uk Kim 
552*3f0275a0SJung-uk Kim } ACPI_PMTT_CONTROLLER;
553*3f0275a0SJung-uk Kim 
554*3f0275a0SJung-uk Kim /* 1a: Proximity Domain substructure */
555*3f0275a0SJung-uk Kim 
556*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_domain
557*3f0275a0SJung-uk Kim {
558*3f0275a0SJung-uk Kim     UINT32                  ProximityDomain;
559*3f0275a0SJung-uk Kim 
560*3f0275a0SJung-uk Kim } ACPI_PMTT_DOMAIN;
561*3f0275a0SJung-uk Kim 
562*3f0275a0SJung-uk Kim 
563*3f0275a0SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */
564*3f0275a0SJung-uk Kim 
565*3f0275a0SJung-uk Kim typedef struct acpi_pmtt_physical_component
566*3f0275a0SJung-uk Kim {
567*3f0275a0SJung-uk Kim     ACPI_PMTT_HEADER        Header;
568*3f0275a0SJung-uk Kim     UINT16                  ComponentId;
569*3f0275a0SJung-uk Kim     UINT16                  Reserved;
570*3f0275a0SJung-uk Kim     UINT32                  MemorySize;
571*3f0275a0SJung-uk Kim     UINT32                  BiosHandle;
572*3f0275a0SJung-uk Kim 
573*3f0275a0SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT;
574*3f0275a0SJung-uk Kim 
575*3f0275a0SJung-uk Kim 
576*3f0275a0SJung-uk Kim /*******************************************************************************
577*3f0275a0SJung-uk Kim  *
578*3f0275a0SJung-uk Kim  * RASF - RAS Feature Table (ACPI 5.0)
579*3f0275a0SJung-uk Kim  *        Version 1
580*3f0275a0SJung-uk Kim  *
581*3f0275a0SJung-uk Kim  ******************************************************************************/
582*3f0275a0SJung-uk Kim 
583*3f0275a0SJung-uk Kim typedef struct acpi_table_rasf
584*3f0275a0SJung-uk Kim {
585*3f0275a0SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
586*3f0275a0SJung-uk Kim     UINT8                   ChannelId[12];
587*3f0275a0SJung-uk Kim 
588*3f0275a0SJung-uk Kim } ACPI_TABLE_RASF;
589*3f0275a0SJung-uk Kim 
590*3f0275a0SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */
591*3f0275a0SJung-uk Kim 
592*3f0275a0SJung-uk Kim typedef struct acpi_rasf_shared_memory
593*3f0275a0SJung-uk Kim {
594*3f0275a0SJung-uk Kim     UINT32                  Signature;
595*3f0275a0SJung-uk Kim     UINT16                  Command;
596*3f0275a0SJung-uk Kim     UINT16                  Status;
597*3f0275a0SJung-uk Kim     UINT64                  RequestedAddress;
598*3f0275a0SJung-uk Kim     UINT64                  RequestedLength;
599*3f0275a0SJung-uk Kim     UINT64                  ActualAddress;
600*3f0275a0SJung-uk Kim     UINT64                  ActualLength;
601*3f0275a0SJung-uk Kim     UINT16                  Flags;
602*3f0275a0SJung-uk Kim     UINT8                   Speed;
603*3f0275a0SJung-uk Kim 
604*3f0275a0SJung-uk Kim } ACPI_RASF_SHARED_MEMORY;
605*3f0275a0SJung-uk Kim 
606*3f0275a0SJung-uk Kim /* Masks for Flags and Speed fields above */
607*3f0275a0SJung-uk Kim 
608*3f0275a0SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING      1
609*3f0275a0SJung-uk Kim #define ACPI_RASF_SPEED                 (7<<1)
610*3f0275a0SJung-uk Kim 
611*3f0275a0SJung-uk Kim /* Channel Commands */
612*3f0275a0SJung-uk Kim 
613*3f0275a0SJung-uk Kim enum AcpiRasfCommands
614*3f0275a0SJung-uk Kim {
615*3f0275a0SJung-uk Kim     ACPI_RASF_GET_RAS_CAPABILITIES      = 1,
616*3f0275a0SJung-uk Kim     ACPI_RASF_GET_PATROL_PARAMETERS     = 2,
617*3f0275a0SJung-uk Kim     ACPI_RASF_START_PATROL_SCRUBBER     = 3,
618*3f0275a0SJung-uk Kim     ACPI_RASF_STOP_PATROL_SCRUBBER      = 4
619*3f0275a0SJung-uk Kim };
620*3f0275a0SJung-uk Kim 
621*3f0275a0SJung-uk Kim /* Channel Command flags */
622*3f0275a0SJung-uk Kim 
623*3f0275a0SJung-uk Kim #define ACPI_RASF_GENERATE_SCI          (1<<15)
624*3f0275a0SJung-uk Kim 
625*3f0275a0SJung-uk Kim /* Status values */
626*3f0275a0SJung-uk Kim 
627*3f0275a0SJung-uk Kim enum AcpiRasfStatus
628*3f0275a0SJung-uk Kim {
629*3f0275a0SJung-uk Kim     ACPI_RASF_SUCCESS                   = 0,
630*3f0275a0SJung-uk Kim     ACPI_RASF_NOT_VALID                 = 1,
631*3f0275a0SJung-uk Kim     ACPI_RASF_NOT_SUPPORTED             = 2,
632*3f0275a0SJung-uk Kim     ACPI_RASF_BUSY                      = 3,
633*3f0275a0SJung-uk Kim     ACPI_RASF_FAILED                    = 4,
634*3f0275a0SJung-uk Kim     ACPI_RASF_ABORTED                   = 5,
635*3f0275a0SJung-uk Kim     ACPI_RASF_INVALID_DATA              = 6
636*3f0275a0SJung-uk Kim };
637*3f0275a0SJung-uk Kim 
638*3f0275a0SJung-uk Kim /* Status flags */
639*3f0275a0SJung-uk Kim 
640*3f0275a0SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE      (1)
641*3f0275a0SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL          (1<<1)
642*3f0275a0SJung-uk Kim #define ACPI_RASF_ERROR                 (1<<2)
643*3f0275a0SJung-uk Kim #define ACPI_RASF_STATUS                (0x1F<<3)
644*3f0275a0SJung-uk Kim 
645*3f0275a0SJung-uk Kim 
646*3f0275a0SJung-uk Kim /* Reset to default packing */
647*3f0275a0SJung-uk Kim 
648*3f0275a0SJung-uk Kim #pragma pack()
649*3f0275a0SJung-uk Kim 
650*3f0275a0SJung-uk Kim #endif /* __ACTBL3_H__ */
651