xref: /OK3568_Linux_fs/kernel/include/acpi/actbl3.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2*4882a593Smuzhiyun /******************************************************************************
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Name: actbl3.h - ACPI Table Definitions
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (C) 2000 - 2020, Intel Corp.
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *****************************************************************************/
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __ACTBL3_H__
11*4882a593Smuzhiyun #define __ACTBL3_H__
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /*******************************************************************************
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  * Additional ACPI Tables
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * These tables are not consumed directly by the ACPICA subsystem, but are
18*4882a593Smuzhiyun  * included here to support device drivers and the AML disassembler.
19*4882a593Smuzhiyun  *
20*4882a593Smuzhiyun  ******************************************************************************/
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /*
23*4882a593Smuzhiyun  * Values for description table header signatures for tables defined in this
24*4882a593Smuzhiyun  * file. Useful because they make it more difficult to inadvertently type in
25*4882a593Smuzhiyun  * the wrong signature.
26*4882a593Smuzhiyun  */
27*4882a593Smuzhiyun #define ACPI_SIG_SLIC           "SLIC"	/* Software Licensing Description Table */
28*4882a593Smuzhiyun #define ACPI_SIG_SLIT           "SLIT"	/* System Locality Distance Information Table */
29*4882a593Smuzhiyun #define ACPI_SIG_SPCR           "SPCR"	/* Serial Port Console Redirection table */
30*4882a593Smuzhiyun #define ACPI_SIG_SPMI           "SPMI"	/* Server Platform Management Interface table */
31*4882a593Smuzhiyun #define ACPI_SIG_SRAT           "SRAT"	/* System Resource Affinity Table */
32*4882a593Smuzhiyun #define ACPI_SIG_STAO           "STAO"	/* Status Override table */
33*4882a593Smuzhiyun #define ACPI_SIG_TCPA           "TCPA"	/* Trusted Computing Platform Alliance table */
34*4882a593Smuzhiyun #define ACPI_SIG_TPM2           "TPM2"	/* Trusted Platform Module 2.0 H/W interface table */
35*4882a593Smuzhiyun #define ACPI_SIG_UEFI           "UEFI"	/* Uefi Boot Optimization Table */
36*4882a593Smuzhiyun #define ACPI_SIG_VRTC           "VRTC"	/* Virtual Real Time Clock Table */
37*4882a593Smuzhiyun #define ACPI_SIG_WAET           "WAET"	/* Windows ACPI Emulated devices Table */
38*4882a593Smuzhiyun #define ACPI_SIG_WDAT           "WDAT"	/* Watchdog Action Table */
39*4882a593Smuzhiyun #define ACPI_SIG_WDDT           "WDDT"	/* Watchdog Timer Description Table */
40*4882a593Smuzhiyun #define ACPI_SIG_WDRT           "WDRT"	/* Watchdog Resource Table */
41*4882a593Smuzhiyun #define ACPI_SIG_WPBT           "WPBT"	/* Windows Platform Binary Table */
42*4882a593Smuzhiyun #define ACPI_SIG_WSMT           "WSMT"	/* Windows SMM Security Mitigations Table */
43*4882a593Smuzhiyun #define ACPI_SIG_XENV           "XENV"	/* Xen Environment table */
44*4882a593Smuzhiyun #define ACPI_SIG_XXXX           "XXXX"	/* Intermediate AML header for ASL/ASL+ converter */
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /*
47*4882a593Smuzhiyun  * All tables must be byte-packed to match the ACPI specification, since
48*4882a593Smuzhiyun  * the tables are provided by the system BIOS.
49*4882a593Smuzhiyun  */
50*4882a593Smuzhiyun #pragma pack(1)
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun /*
53*4882a593Smuzhiyun  * Note: C bitfields are not used for this reason:
54*4882a593Smuzhiyun  *
55*4882a593Smuzhiyun  * "Bitfields are great and easy to read, but unfortunately the C language
56*4882a593Smuzhiyun  * does not specify the layout of bitfields in memory, which means they are
57*4882a593Smuzhiyun  * essentially useless for dealing with packed data in on-disk formats or
58*4882a593Smuzhiyun  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
59*4882a593Smuzhiyun  * this decision was a design error in C. Ritchie could have picked an order
60*4882a593Smuzhiyun  * and stuck with it." Norman Ramsey.
61*4882a593Smuzhiyun  * See http://stackoverflow.com/a/1053662/41661
62*4882a593Smuzhiyun  */
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun /*******************************************************************************
65*4882a593Smuzhiyun  *
66*4882a593Smuzhiyun  * SLIC - Software Licensing Description Table
67*4882a593Smuzhiyun  *
68*4882a593Smuzhiyun  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
69*4882a593Smuzhiyun  * November 29, 2011. Copyright 2011 Microsoft
70*4882a593Smuzhiyun  *
71*4882a593Smuzhiyun  ******************************************************************************/
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /* Basic SLIC table is only the common ACPI header */
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun struct acpi_table_slic {
76*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
77*4882a593Smuzhiyun };
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /*******************************************************************************
80*4882a593Smuzhiyun  *
81*4882a593Smuzhiyun  * SLIT - System Locality Distance Information Table
82*4882a593Smuzhiyun  *        Version 1
83*4882a593Smuzhiyun  *
84*4882a593Smuzhiyun  ******************************************************************************/
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun struct acpi_table_slit {
87*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
88*4882a593Smuzhiyun 	u64 locality_count;
89*4882a593Smuzhiyun 	u8 entry[1];		/* Real size = localities^2 */
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /*******************************************************************************
93*4882a593Smuzhiyun  *
94*4882a593Smuzhiyun  * SPCR - Serial Port Console Redirection table
95*4882a593Smuzhiyun  *        Version 2
96*4882a593Smuzhiyun  *
97*4882a593Smuzhiyun  * Conforms to "Serial Port Console Redirection Table",
98*4882a593Smuzhiyun  * Version 1.03, August 10, 2015
99*4882a593Smuzhiyun  *
100*4882a593Smuzhiyun  ******************************************************************************/
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun struct acpi_table_spcr {
103*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
104*4882a593Smuzhiyun 	u8 interface_type;	/* 0=full 16550, 1=subset of 16550 */
105*4882a593Smuzhiyun 	u8 reserved[3];
106*4882a593Smuzhiyun 	struct acpi_generic_address serial_port;
107*4882a593Smuzhiyun 	u8 interrupt_type;
108*4882a593Smuzhiyun 	u8 pc_interrupt;
109*4882a593Smuzhiyun 	u32 interrupt;
110*4882a593Smuzhiyun 	u8 baud_rate;
111*4882a593Smuzhiyun 	u8 parity;
112*4882a593Smuzhiyun 	u8 stop_bits;
113*4882a593Smuzhiyun 	u8 flow_control;
114*4882a593Smuzhiyun 	u8 terminal_type;
115*4882a593Smuzhiyun 	u8 reserved1;
116*4882a593Smuzhiyun 	u16 pci_device_id;
117*4882a593Smuzhiyun 	u16 pci_vendor_id;
118*4882a593Smuzhiyun 	u8 pci_bus;
119*4882a593Smuzhiyun 	u8 pci_device;
120*4882a593Smuzhiyun 	u8 pci_function;
121*4882a593Smuzhiyun 	u32 pci_flags;
122*4882a593Smuzhiyun 	u8 pci_segment;
123*4882a593Smuzhiyun 	u32 reserved2;
124*4882a593Smuzhiyun };
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun /* Masks for pci_flags field above */
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define ACPI_SPCR_DO_NOT_DISABLE    (1)
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* Values for Interface Type: See the definition of the DBG2 table */
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun /*******************************************************************************
133*4882a593Smuzhiyun  *
134*4882a593Smuzhiyun  * SPMI - Server Platform Management Interface table
135*4882a593Smuzhiyun  *        Version 5
136*4882a593Smuzhiyun  *
137*4882a593Smuzhiyun  * Conforms to "Intelligent Platform Management Interface Specification
138*4882a593Smuzhiyun  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
139*4882a593Smuzhiyun  * June 12, 2009 markup.
140*4882a593Smuzhiyun  *
141*4882a593Smuzhiyun  ******************************************************************************/
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun struct acpi_table_spmi {
144*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
145*4882a593Smuzhiyun 	u8 interface_type;
146*4882a593Smuzhiyun 	u8 reserved;		/* Must be 1 */
147*4882a593Smuzhiyun 	u16 spec_revision;	/* Version of IPMI */
148*4882a593Smuzhiyun 	u8 interrupt_type;
149*4882a593Smuzhiyun 	u8 gpe_number;		/* GPE assigned */
150*4882a593Smuzhiyun 	u8 reserved1;
151*4882a593Smuzhiyun 	u8 pci_device_flag;
152*4882a593Smuzhiyun 	u32 interrupt;
153*4882a593Smuzhiyun 	struct acpi_generic_address ipmi_register;
154*4882a593Smuzhiyun 	u8 pci_segment;
155*4882a593Smuzhiyun 	u8 pci_bus;
156*4882a593Smuzhiyun 	u8 pci_device;
157*4882a593Smuzhiyun 	u8 pci_function;
158*4882a593Smuzhiyun 	u8 reserved2;
159*4882a593Smuzhiyun };
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun /* Values for interface_type above */
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun enum acpi_spmi_interface_types {
164*4882a593Smuzhiyun 	ACPI_SPMI_NOT_USED = 0,
165*4882a593Smuzhiyun 	ACPI_SPMI_KEYBOARD = 1,
166*4882a593Smuzhiyun 	ACPI_SPMI_SMI = 2,
167*4882a593Smuzhiyun 	ACPI_SPMI_BLOCK_TRANSFER = 3,
168*4882a593Smuzhiyun 	ACPI_SPMI_SMBUS = 4,
169*4882a593Smuzhiyun 	ACPI_SPMI_RESERVED = 5	/* 5 and above are reserved */
170*4882a593Smuzhiyun };
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /*******************************************************************************
173*4882a593Smuzhiyun  *
174*4882a593Smuzhiyun  * SRAT - System Resource Affinity Table
175*4882a593Smuzhiyun  *        Version 3
176*4882a593Smuzhiyun  *
177*4882a593Smuzhiyun  ******************************************************************************/
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun struct acpi_table_srat {
180*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
181*4882a593Smuzhiyun 	u32 table_revision;	/* Must be value '1' */
182*4882a593Smuzhiyun 	u64 reserved;		/* Reserved, must be zero */
183*4882a593Smuzhiyun };
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun /* Values for subtable type in struct acpi_subtable_header */
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun enum acpi_srat_type {
188*4882a593Smuzhiyun 	ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
189*4882a593Smuzhiyun 	ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
190*4882a593Smuzhiyun 	ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
191*4882a593Smuzhiyun 	ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
192*4882a593Smuzhiyun 	ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,	/* ACPI 6.2 */
193*4882a593Smuzhiyun 	ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,	/* ACPI 6.3 */
194*4882a593Smuzhiyun 	ACPI_SRAT_TYPE_RESERVED = 6	/* 5 and greater are reserved */
195*4882a593Smuzhiyun };
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /*
198*4882a593Smuzhiyun  * SRAT Subtables, correspond to Type in struct acpi_subtable_header
199*4882a593Smuzhiyun  */
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun /* 0: Processor Local APIC/SAPIC Affinity */
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun struct acpi_srat_cpu_affinity {
204*4882a593Smuzhiyun 	struct acpi_subtable_header header;
205*4882a593Smuzhiyun 	u8 proximity_domain_lo;
206*4882a593Smuzhiyun 	u8 apic_id;
207*4882a593Smuzhiyun 	u32 flags;
208*4882a593Smuzhiyun 	u8 local_sapic_eid;
209*4882a593Smuzhiyun 	u8 proximity_domain_hi[3];
210*4882a593Smuzhiyun 	u32 clock_domain;
211*4882a593Smuzhiyun };
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun /* Flags */
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun #define ACPI_SRAT_CPU_USE_AFFINITY  (1)	/* 00: Use affinity structure */
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun /* 1: Memory Affinity */
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun struct acpi_srat_mem_affinity {
220*4882a593Smuzhiyun 	struct acpi_subtable_header header;
221*4882a593Smuzhiyun 	u32 proximity_domain;
222*4882a593Smuzhiyun 	u16 reserved;		/* Reserved, must be zero */
223*4882a593Smuzhiyun 	u64 base_address;
224*4882a593Smuzhiyun 	u64 length;
225*4882a593Smuzhiyun 	u32 reserved1;
226*4882a593Smuzhiyun 	u32 flags;
227*4882a593Smuzhiyun 	u64 reserved2;		/* Reserved, must be zero */
228*4882a593Smuzhiyun };
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun /* Flags */
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun #define ACPI_SRAT_MEM_ENABLED       (1)	/* 00: Use affinity structure */
233*4882a593Smuzhiyun #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)	/* 01: Memory region is hot pluggable */
234*4882a593Smuzhiyun #define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)	/* 02: Memory region is non-volatile */
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun struct acpi_srat_x2apic_cpu_affinity {
239*4882a593Smuzhiyun 	struct acpi_subtable_header header;
240*4882a593Smuzhiyun 	u16 reserved;		/* Reserved, must be zero */
241*4882a593Smuzhiyun 	u32 proximity_domain;
242*4882a593Smuzhiyun 	u32 apic_id;
243*4882a593Smuzhiyun 	u32 flags;
244*4882a593Smuzhiyun 	u32 clock_domain;
245*4882a593Smuzhiyun 	u32 reserved2;
246*4882a593Smuzhiyun };
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun /* Flags for struct acpi_srat_cpu_affinity and struct acpi_srat_x2apic_cpu_affinity */
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun #define ACPI_SRAT_CPU_ENABLED       (1)	/* 00: Use affinity structure */
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun /* 3: GICC Affinity (ACPI 5.1) */
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun struct acpi_srat_gicc_affinity {
255*4882a593Smuzhiyun 	struct acpi_subtable_header header;
256*4882a593Smuzhiyun 	u32 proximity_domain;
257*4882a593Smuzhiyun 	u32 acpi_processor_uid;
258*4882a593Smuzhiyun 	u32 flags;
259*4882a593Smuzhiyun 	u32 clock_domain;
260*4882a593Smuzhiyun };
261*4882a593Smuzhiyun 
262*4882a593Smuzhiyun /* Flags for struct acpi_srat_gicc_affinity */
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun #define ACPI_SRAT_GICC_ENABLED     (1)	/* 00: Use affinity structure */
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun /* 4: GCC ITS Affinity (ACPI 6.2) */
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun struct acpi_srat_gic_its_affinity {
269*4882a593Smuzhiyun 	struct acpi_subtable_header header;
270*4882a593Smuzhiyun 	u32 proximity_domain;
271*4882a593Smuzhiyun 	u16 reserved;
272*4882a593Smuzhiyun 	u32 its_id;
273*4882a593Smuzhiyun };
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun /* 5: Generic Initiator Affinity Structure (ACPI 6.3) */
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun struct acpi_srat_generic_affinity {
278*4882a593Smuzhiyun 	struct acpi_subtable_header header;
279*4882a593Smuzhiyun 	u8 reserved;
280*4882a593Smuzhiyun 	u8 device_handle_type;
281*4882a593Smuzhiyun 	u32 proximity_domain;
282*4882a593Smuzhiyun 	u8 device_handle[16];
283*4882a593Smuzhiyun 	u32 flags;
284*4882a593Smuzhiyun 	u32 reserved1;
285*4882a593Smuzhiyun };
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun /* Flags for struct acpi_srat_generic_affinity */
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun #define ACPI_SRAT_GENERIC_AFFINITY_ENABLED (1)	/* 00: Use affinity structure */
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun /*******************************************************************************
292*4882a593Smuzhiyun  *
293*4882a593Smuzhiyun  * STAO - Status Override Table (_STA override) - ACPI 6.0
294*4882a593Smuzhiyun  *        Version 1
295*4882a593Smuzhiyun  *
296*4882a593Smuzhiyun  * Conforms to "ACPI Specification for Status Override Table"
297*4882a593Smuzhiyun  * 6 January 2015
298*4882a593Smuzhiyun  *
299*4882a593Smuzhiyun  ******************************************************************************/
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun struct acpi_table_stao {
302*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
303*4882a593Smuzhiyun 	u8 ignore_uart;
304*4882a593Smuzhiyun };
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun /*******************************************************************************
307*4882a593Smuzhiyun  *
308*4882a593Smuzhiyun  * TCPA - Trusted Computing Platform Alliance table
309*4882a593Smuzhiyun  *        Version 2
310*4882a593Smuzhiyun  *
311*4882a593Smuzhiyun  * TCG Hardware Interface Table for TPM 1.2 Clients and Servers
312*4882a593Smuzhiyun  *
313*4882a593Smuzhiyun  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
314*4882a593Smuzhiyun  * Version 1.2, Revision 8
315*4882a593Smuzhiyun  * February 27, 2017
316*4882a593Smuzhiyun  *
317*4882a593Smuzhiyun  * NOTE: There are two versions of the table with the same signature --
318*4882a593Smuzhiyun  * the client version and the server version. The common platform_class
319*4882a593Smuzhiyun  * field is used to differentiate the two types of tables.
320*4882a593Smuzhiyun  *
321*4882a593Smuzhiyun  ******************************************************************************/
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun struct acpi_table_tcpa_hdr {
324*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
325*4882a593Smuzhiyun 	u16 platform_class;
326*4882a593Smuzhiyun };
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun /*
329*4882a593Smuzhiyun  * Values for platform_class above.
330*4882a593Smuzhiyun  * This is how the client and server subtables are differentiated
331*4882a593Smuzhiyun  */
332*4882a593Smuzhiyun #define ACPI_TCPA_CLIENT_TABLE          0
333*4882a593Smuzhiyun #define ACPI_TCPA_SERVER_TABLE          1
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun struct acpi_table_tcpa_client {
336*4882a593Smuzhiyun 	u32 minimum_log_length;	/* Minimum length for the event log area */
337*4882a593Smuzhiyun 	u64 log_address;	/* Address of the event log area */
338*4882a593Smuzhiyun };
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun struct acpi_table_tcpa_server {
341*4882a593Smuzhiyun 	u16 reserved;
342*4882a593Smuzhiyun 	u64 minimum_log_length;	/* Minimum length for the event log area */
343*4882a593Smuzhiyun 	u64 log_address;	/* Address of the event log area */
344*4882a593Smuzhiyun 	u16 spec_revision;
345*4882a593Smuzhiyun 	u8 device_flags;
346*4882a593Smuzhiyun 	u8 interrupt_flags;
347*4882a593Smuzhiyun 	u8 gpe_number;
348*4882a593Smuzhiyun 	u8 reserved2[3];
349*4882a593Smuzhiyun 	u32 global_interrupt;
350*4882a593Smuzhiyun 	struct acpi_generic_address address;
351*4882a593Smuzhiyun 	u32 reserved3;
352*4882a593Smuzhiyun 	struct acpi_generic_address config_address;
353*4882a593Smuzhiyun 	u8 group;
354*4882a593Smuzhiyun 	u8 bus;			/* PCI Bus/Segment/Function numbers */
355*4882a593Smuzhiyun 	u8 device;
356*4882a593Smuzhiyun 	u8 function;
357*4882a593Smuzhiyun };
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun /* Values for device_flags above */
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun #define ACPI_TCPA_PCI_DEVICE            (1)
362*4882a593Smuzhiyun #define ACPI_TCPA_BUS_PNP               (1<<1)
363*4882a593Smuzhiyun #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun /* Values for interrupt_flags above */
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun #define ACPI_TCPA_INTERRUPT_MODE        (1)
368*4882a593Smuzhiyun #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
369*4882a593Smuzhiyun #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
370*4882a593Smuzhiyun #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
371*4882a593Smuzhiyun 
372*4882a593Smuzhiyun /*******************************************************************************
373*4882a593Smuzhiyun  *
374*4882a593Smuzhiyun  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
375*4882a593Smuzhiyun  *        Version 4
376*4882a593Smuzhiyun  *
377*4882a593Smuzhiyun  * TCG Hardware Interface Table for TPM 2.0 Clients and Servers
378*4882a593Smuzhiyun  *
379*4882a593Smuzhiyun  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
380*4882a593Smuzhiyun  * Version 1.2, Revision 8
381*4882a593Smuzhiyun  * February 27, 2017
382*4882a593Smuzhiyun  *
383*4882a593Smuzhiyun  ******************************************************************************/
384*4882a593Smuzhiyun 
385*4882a593Smuzhiyun /* Revision 3 */
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun struct acpi_table_tpm23 {
388*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
389*4882a593Smuzhiyun 	u32 reserved;
390*4882a593Smuzhiyun 	u64 control_address;
391*4882a593Smuzhiyun 	u32 start_method;
392*4882a593Smuzhiyun };
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun /* Value for start_method above */
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun #define ACPI_TPM23_ACPI_START_METHOD                 2
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun /*
399*4882a593Smuzhiyun  * Optional trailer for revision 3. If start method is 2, there is a 4 byte
400*4882a593Smuzhiyun  * reserved area of all zeros.
401*4882a593Smuzhiyun  */
402*4882a593Smuzhiyun struct acpi_tmp23_trailer {
403*4882a593Smuzhiyun 	u32 reserved;
404*4882a593Smuzhiyun };
405*4882a593Smuzhiyun 
406*4882a593Smuzhiyun /* Revision 4 */
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun struct acpi_table_tpm2 {
409*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
410*4882a593Smuzhiyun 	u16 platform_class;
411*4882a593Smuzhiyun 	u16 reserved;
412*4882a593Smuzhiyun 	u64 control_address;
413*4882a593Smuzhiyun 	u32 start_method;
414*4882a593Smuzhiyun 
415*4882a593Smuzhiyun 	/* Platform-specific data follows */
416*4882a593Smuzhiyun };
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun /* Optional trailer for revision 4 holding platform-specific data */
419*4882a593Smuzhiyun struct acpi_tpm2_phy {
420*4882a593Smuzhiyun 	u8  start_method_specific[12];
421*4882a593Smuzhiyun 	u32 log_area_minimum_length;
422*4882a593Smuzhiyun 	u64 log_area_start_address;
423*4882a593Smuzhiyun };
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun /* Values for start_method above */
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun #define ACPI_TPM2_NOT_ALLOWED                       0
428*4882a593Smuzhiyun #define ACPI_TPM2_RESERVED1                         1
429*4882a593Smuzhiyun #define ACPI_TPM2_START_METHOD                      2
430*4882a593Smuzhiyun #define ACPI_TPM2_RESERVED3                         3
431*4882a593Smuzhiyun #define ACPI_TPM2_RESERVED4                         4
432*4882a593Smuzhiyun #define ACPI_TPM2_RESERVED5                         5
433*4882a593Smuzhiyun #define ACPI_TPM2_MEMORY_MAPPED                     6
434*4882a593Smuzhiyun #define ACPI_TPM2_COMMAND_BUFFER                    7
435*4882a593Smuzhiyun #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
436*4882a593Smuzhiyun #define ACPI_TPM2_RESERVED9                         9
437*4882a593Smuzhiyun #define ACPI_TPM2_RESERVED10                        10
438*4882a593Smuzhiyun #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11	/* V1.2 Rev 8 */
439*4882a593Smuzhiyun #define ACPI_TPM2_RESERVED                          12
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun /* Optional trailer appears after any start_method subtables */
442*4882a593Smuzhiyun 
443*4882a593Smuzhiyun struct acpi_tpm2_trailer {
444*4882a593Smuzhiyun 	u8 method_parameters[12];
445*4882a593Smuzhiyun 	u32 minimum_log_length;	/* Minimum length for the event log area */
446*4882a593Smuzhiyun 	u64 log_address;	/* Address of the event log area */
447*4882a593Smuzhiyun };
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun /*
450*4882a593Smuzhiyun  * Subtables (start_method-specific)
451*4882a593Smuzhiyun  */
452*4882a593Smuzhiyun 
453*4882a593Smuzhiyun /* 11: Start Method for ARM SMC (V1.2 Rev 8) */
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun struct acpi_tpm2_arm_smc {
456*4882a593Smuzhiyun 	u32 global_interrupt;
457*4882a593Smuzhiyun 	u8 interrupt_flags;
458*4882a593Smuzhiyun 	u8 operation_flags;
459*4882a593Smuzhiyun 	u16 reserved;
460*4882a593Smuzhiyun 	u32 function_id;
461*4882a593Smuzhiyun };
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun /* Values for interrupt_flags above */
464*4882a593Smuzhiyun 
465*4882a593Smuzhiyun #define ACPI_TPM2_INTERRUPT_SUPPORT     (1)
466*4882a593Smuzhiyun 
467*4882a593Smuzhiyun /* Values for operation_flags above */
468*4882a593Smuzhiyun 
469*4882a593Smuzhiyun #define ACPI_TPM2_IDLE_SUPPORT          (1)
470*4882a593Smuzhiyun 
471*4882a593Smuzhiyun /*******************************************************************************
472*4882a593Smuzhiyun  *
473*4882a593Smuzhiyun  * UEFI - UEFI Boot optimization Table
474*4882a593Smuzhiyun  *        Version 1
475*4882a593Smuzhiyun  *
476*4882a593Smuzhiyun  * Conforms to "Unified Extensible Firmware Interface Specification",
477*4882a593Smuzhiyun  * Version 2.3, May 8, 2009
478*4882a593Smuzhiyun  *
479*4882a593Smuzhiyun  ******************************************************************************/
480*4882a593Smuzhiyun 
481*4882a593Smuzhiyun struct acpi_table_uefi {
482*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
483*4882a593Smuzhiyun 	u8 identifier[16];	/* UUID identifier */
484*4882a593Smuzhiyun 	u16 data_offset;	/* Offset of remaining data in table */
485*4882a593Smuzhiyun };
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun /*******************************************************************************
488*4882a593Smuzhiyun  *
489*4882a593Smuzhiyun  * VRTC - Virtual Real Time Clock Table
490*4882a593Smuzhiyun  *        Version 1
491*4882a593Smuzhiyun  *
492*4882a593Smuzhiyun  * Conforms to "Simple Firmware Interface Specification",
493*4882a593Smuzhiyun  * Draft 0.8.2, Oct 19, 2010
494*4882a593Smuzhiyun  * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
495*4882a593Smuzhiyun  *
496*4882a593Smuzhiyun  ******************************************************************************/
497*4882a593Smuzhiyun 
498*4882a593Smuzhiyun struct acpi_table_vrtc {
499*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
500*4882a593Smuzhiyun };
501*4882a593Smuzhiyun 
502*4882a593Smuzhiyun /* VRTC entry */
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun struct acpi_vrtc_entry {
505*4882a593Smuzhiyun 	struct acpi_generic_address physical_address;
506*4882a593Smuzhiyun 	u32 irq;
507*4882a593Smuzhiyun };
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun /*******************************************************************************
510*4882a593Smuzhiyun  *
511*4882a593Smuzhiyun  * WAET - Windows ACPI Emulated devices Table
512*4882a593Smuzhiyun  *        Version 1
513*4882a593Smuzhiyun  *
514*4882a593Smuzhiyun  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
515*4882a593Smuzhiyun  *
516*4882a593Smuzhiyun  ******************************************************************************/
517*4882a593Smuzhiyun 
518*4882a593Smuzhiyun struct acpi_table_waet {
519*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
520*4882a593Smuzhiyun 	u32 flags;
521*4882a593Smuzhiyun };
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun /* Masks for Flags field above */
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun #define ACPI_WAET_RTC_NO_ACK        (1)	/* RTC requires no int acknowledge */
526*4882a593Smuzhiyun #define ACPI_WAET_TIMER_ONE_READ    (1<<1)	/* PM timer requires only one read */
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun /*******************************************************************************
529*4882a593Smuzhiyun  *
530*4882a593Smuzhiyun  * WDAT - Watchdog Action Table
531*4882a593Smuzhiyun  *        Version 1
532*4882a593Smuzhiyun  *
533*4882a593Smuzhiyun  * Conforms to "Hardware Watchdog Timers Design Specification",
534*4882a593Smuzhiyun  * Copyright 2006 Microsoft Corporation.
535*4882a593Smuzhiyun  *
536*4882a593Smuzhiyun  ******************************************************************************/
537*4882a593Smuzhiyun 
538*4882a593Smuzhiyun struct acpi_table_wdat {
539*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
540*4882a593Smuzhiyun 	u32 header_length;	/* Watchdog Header Length */
541*4882a593Smuzhiyun 	u16 pci_segment;	/* PCI Segment number */
542*4882a593Smuzhiyun 	u8 pci_bus;		/* PCI Bus number */
543*4882a593Smuzhiyun 	u8 pci_device;		/* PCI Device number */
544*4882a593Smuzhiyun 	u8 pci_function;	/* PCI Function number */
545*4882a593Smuzhiyun 	u8 reserved[3];
546*4882a593Smuzhiyun 	u32 timer_period;	/* Period of one timer count (msec) */
547*4882a593Smuzhiyun 	u32 max_count;		/* Maximum counter value supported */
548*4882a593Smuzhiyun 	u32 min_count;		/* Minimum counter value */
549*4882a593Smuzhiyun 	u8 flags;
550*4882a593Smuzhiyun 	u8 reserved2[3];
551*4882a593Smuzhiyun 	u32 entries;		/* Number of watchdog entries that follow */
552*4882a593Smuzhiyun };
553*4882a593Smuzhiyun 
554*4882a593Smuzhiyun /* Masks for Flags field above */
555*4882a593Smuzhiyun 
556*4882a593Smuzhiyun #define ACPI_WDAT_ENABLED           (1)
557*4882a593Smuzhiyun #define ACPI_WDAT_STOPPED           0x80
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun /* WDAT Instruction Entries (actions) */
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun struct acpi_wdat_entry {
562*4882a593Smuzhiyun 	u8 action;
563*4882a593Smuzhiyun 	u8 instruction;
564*4882a593Smuzhiyun 	u16 reserved;
565*4882a593Smuzhiyun 	struct acpi_generic_address register_region;
566*4882a593Smuzhiyun 	u32 value;		/* Value used with Read/Write register */
567*4882a593Smuzhiyun 	u32 mask;		/* Bitmask required for this register instruction */
568*4882a593Smuzhiyun };
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun /* Values for Action field above */
571*4882a593Smuzhiyun 
572*4882a593Smuzhiyun enum acpi_wdat_actions {
573*4882a593Smuzhiyun 	ACPI_WDAT_RESET = 1,
574*4882a593Smuzhiyun 	ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
575*4882a593Smuzhiyun 	ACPI_WDAT_GET_COUNTDOWN = 5,
576*4882a593Smuzhiyun 	ACPI_WDAT_SET_COUNTDOWN = 6,
577*4882a593Smuzhiyun 	ACPI_WDAT_GET_RUNNING_STATE = 8,
578*4882a593Smuzhiyun 	ACPI_WDAT_SET_RUNNING_STATE = 9,
579*4882a593Smuzhiyun 	ACPI_WDAT_GET_STOPPED_STATE = 10,
580*4882a593Smuzhiyun 	ACPI_WDAT_SET_STOPPED_STATE = 11,
581*4882a593Smuzhiyun 	ACPI_WDAT_GET_REBOOT = 16,
582*4882a593Smuzhiyun 	ACPI_WDAT_SET_REBOOT = 17,
583*4882a593Smuzhiyun 	ACPI_WDAT_GET_SHUTDOWN = 18,
584*4882a593Smuzhiyun 	ACPI_WDAT_SET_SHUTDOWN = 19,
585*4882a593Smuzhiyun 	ACPI_WDAT_GET_STATUS = 32,
586*4882a593Smuzhiyun 	ACPI_WDAT_SET_STATUS = 33,
587*4882a593Smuzhiyun 	ACPI_WDAT_ACTION_RESERVED = 34	/* 34 and greater are reserved */
588*4882a593Smuzhiyun };
589*4882a593Smuzhiyun 
590*4882a593Smuzhiyun /* Values for Instruction field above */
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun enum acpi_wdat_instructions {
593*4882a593Smuzhiyun 	ACPI_WDAT_READ_VALUE = 0,
594*4882a593Smuzhiyun 	ACPI_WDAT_READ_COUNTDOWN = 1,
595*4882a593Smuzhiyun 	ACPI_WDAT_WRITE_VALUE = 2,
596*4882a593Smuzhiyun 	ACPI_WDAT_WRITE_COUNTDOWN = 3,
597*4882a593Smuzhiyun 	ACPI_WDAT_INSTRUCTION_RESERVED = 4,	/* 4 and greater are reserved */
598*4882a593Smuzhiyun 	ACPI_WDAT_PRESERVE_REGISTER = 0x80	/* Except for this value */
599*4882a593Smuzhiyun };
600*4882a593Smuzhiyun 
601*4882a593Smuzhiyun /*******************************************************************************
602*4882a593Smuzhiyun  *
603*4882a593Smuzhiyun  * WDDT - Watchdog Descriptor Table
604*4882a593Smuzhiyun  *        Version 1
605*4882a593Smuzhiyun  *
606*4882a593Smuzhiyun  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
607*4882a593Smuzhiyun  * Version 001, September 2002
608*4882a593Smuzhiyun  *
609*4882a593Smuzhiyun  ******************************************************************************/
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun struct acpi_table_wddt {
612*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
613*4882a593Smuzhiyun 	u16 spec_version;
614*4882a593Smuzhiyun 	u16 table_version;
615*4882a593Smuzhiyun 	u16 pci_vendor_id;
616*4882a593Smuzhiyun 	struct acpi_generic_address address;
617*4882a593Smuzhiyun 	u16 max_count;		/* Maximum counter value supported */
618*4882a593Smuzhiyun 	u16 min_count;		/* Minimum counter value supported */
619*4882a593Smuzhiyun 	u16 period;
620*4882a593Smuzhiyun 	u16 status;
621*4882a593Smuzhiyun 	u16 capability;
622*4882a593Smuzhiyun };
623*4882a593Smuzhiyun 
624*4882a593Smuzhiyun /* Flags for Status field above */
625*4882a593Smuzhiyun 
626*4882a593Smuzhiyun #define ACPI_WDDT_AVAILABLE     (1)
627*4882a593Smuzhiyun #define ACPI_WDDT_ACTIVE        (1<<1)
628*4882a593Smuzhiyun #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
629*4882a593Smuzhiyun #define ACPI_WDDT_USER_RESET    (1<<11)
630*4882a593Smuzhiyun #define ACPI_WDDT_WDT_RESET     (1<<12)
631*4882a593Smuzhiyun #define ACPI_WDDT_POWER_FAIL    (1<<13)
632*4882a593Smuzhiyun #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun /* Flags for Capability field above */
635*4882a593Smuzhiyun 
636*4882a593Smuzhiyun #define ACPI_WDDT_AUTO_RESET    (1)
637*4882a593Smuzhiyun #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
638*4882a593Smuzhiyun 
639*4882a593Smuzhiyun /*******************************************************************************
640*4882a593Smuzhiyun  *
641*4882a593Smuzhiyun  * WDRT - Watchdog Resource Table
642*4882a593Smuzhiyun  *        Version 1
643*4882a593Smuzhiyun  *
644*4882a593Smuzhiyun  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
645*4882a593Smuzhiyun  * Version 1.01, August 28, 2006
646*4882a593Smuzhiyun  *
647*4882a593Smuzhiyun  ******************************************************************************/
648*4882a593Smuzhiyun 
649*4882a593Smuzhiyun struct acpi_table_wdrt {
650*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
651*4882a593Smuzhiyun 	struct acpi_generic_address control_register;
652*4882a593Smuzhiyun 	struct acpi_generic_address count_register;
653*4882a593Smuzhiyun 	u16 pci_device_id;
654*4882a593Smuzhiyun 	u16 pci_vendor_id;
655*4882a593Smuzhiyun 	u8 pci_bus;		/* PCI Bus number */
656*4882a593Smuzhiyun 	u8 pci_device;		/* PCI Device number */
657*4882a593Smuzhiyun 	u8 pci_function;	/* PCI Function number */
658*4882a593Smuzhiyun 	u8 pci_segment;		/* PCI Segment number */
659*4882a593Smuzhiyun 	u16 max_count;		/* Maximum counter value supported */
660*4882a593Smuzhiyun 	u8 units;
661*4882a593Smuzhiyun };
662*4882a593Smuzhiyun 
663*4882a593Smuzhiyun /*******************************************************************************
664*4882a593Smuzhiyun  *
665*4882a593Smuzhiyun  * WPBT - Windows Platform Environment Table (ACPI 6.0)
666*4882a593Smuzhiyun  *        Version 1
667*4882a593Smuzhiyun  *
668*4882a593Smuzhiyun  * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
669*4882a593Smuzhiyun  *
670*4882a593Smuzhiyun  ******************************************************************************/
671*4882a593Smuzhiyun 
672*4882a593Smuzhiyun struct acpi_table_wpbt {
673*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
674*4882a593Smuzhiyun 	u32 handoff_size;
675*4882a593Smuzhiyun 	u64 handoff_address;
676*4882a593Smuzhiyun 	u8 layout;
677*4882a593Smuzhiyun 	u8 type;
678*4882a593Smuzhiyun 	u16 arguments_length;
679*4882a593Smuzhiyun };
680*4882a593Smuzhiyun 
681*4882a593Smuzhiyun /*******************************************************************************
682*4882a593Smuzhiyun  *
683*4882a593Smuzhiyun  * WSMT - Windows SMM Security Mitigations Table
684*4882a593Smuzhiyun  *        Version 1
685*4882a593Smuzhiyun  *
686*4882a593Smuzhiyun  * Conforms to "Windows SMM Security Mitigations Table",
687*4882a593Smuzhiyun  * Version 1.0, April 18, 2016
688*4882a593Smuzhiyun  *
689*4882a593Smuzhiyun  ******************************************************************************/
690*4882a593Smuzhiyun 
691*4882a593Smuzhiyun struct acpi_table_wsmt {
692*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
693*4882a593Smuzhiyun 	u32 protection_flags;
694*4882a593Smuzhiyun };
695*4882a593Smuzhiyun 
696*4882a593Smuzhiyun /* Flags for protection_flags field above */
697*4882a593Smuzhiyun 
698*4882a593Smuzhiyun #define ACPI_WSMT_FIXED_COMM_BUFFERS                (1)
699*4882a593Smuzhiyun #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
700*4882a593Smuzhiyun #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION        (4)
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun /*******************************************************************************
703*4882a593Smuzhiyun  *
704*4882a593Smuzhiyun  * XENV - Xen Environment Table (ACPI 6.0)
705*4882a593Smuzhiyun  *        Version 1
706*4882a593Smuzhiyun  *
707*4882a593Smuzhiyun  * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
708*4882a593Smuzhiyun  *
709*4882a593Smuzhiyun  ******************************************************************************/
710*4882a593Smuzhiyun 
711*4882a593Smuzhiyun struct acpi_table_xenv {
712*4882a593Smuzhiyun 	struct acpi_table_header header;	/* Common ACPI table header */
713*4882a593Smuzhiyun 	u64 grant_table_address;
714*4882a593Smuzhiyun 	u64 grant_table_size;
715*4882a593Smuzhiyun 	u32 event_interrupt;
716*4882a593Smuzhiyun 	u8 event_flags;
717*4882a593Smuzhiyun };
718*4882a593Smuzhiyun 
719*4882a593Smuzhiyun /* Reset to default packing */
720*4882a593Smuzhiyun 
721*4882a593Smuzhiyun #pragma pack()
722*4882a593Smuzhiyun 
723*4882a593Smuzhiyun #endif				/* __ACTBL3_H__ */
724