xref: /openbmc/linux/include/acpi/actbl2.h (revision 4c106aa4)
1a8357b0cSBob Moore /******************************************************************************
2a8357b0cSBob Moore  *
35cf4d733SBob Moore  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4a8357b0cSBob Moore  *
5a8357b0cSBob Moore  *****************************************************************************/
6a8357b0cSBob Moore 
7a8357b0cSBob Moore /*
87735ca0eSBob Moore  * Copyright (C) 2000 - 2017, Intel Corp.
9a8357b0cSBob Moore  * All rights reserved.
10a8357b0cSBob Moore  *
11a8357b0cSBob Moore  * Redistribution and use in source and binary forms, with or without
12a8357b0cSBob Moore  * modification, are permitted provided that the following conditions
13a8357b0cSBob Moore  * are met:
14a8357b0cSBob Moore  * 1. Redistributions of source code must retain the above copyright
15a8357b0cSBob Moore  *    notice, this list of conditions, and the following disclaimer,
16a8357b0cSBob Moore  *    without modification.
17a8357b0cSBob Moore  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18a8357b0cSBob Moore  *    substantially similar to the "NO WARRANTY" disclaimer below
19a8357b0cSBob Moore  *    ("Disclaimer") and any redistribution must be conditioned upon
20a8357b0cSBob Moore  *    including a substantially similar Disclaimer requirement for further
21a8357b0cSBob Moore  *    binary redistribution.
22a8357b0cSBob Moore  * 3. Neither the names of the above-listed copyright holders nor the names
23a8357b0cSBob Moore  *    of any contributors may be used to endorse or promote products derived
24a8357b0cSBob Moore  *    from this software without specific prior written permission.
25a8357b0cSBob Moore  *
26a8357b0cSBob Moore  * Alternatively, this software may be distributed under the terms of the
27a8357b0cSBob Moore  * GNU General Public License ("GPL") version 2 as published by the Free
28a8357b0cSBob Moore  * Software Foundation.
29a8357b0cSBob Moore  *
30a8357b0cSBob Moore  * NO WARRANTY
31a8357b0cSBob Moore  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32a8357b0cSBob Moore  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33a8357b0cSBob Moore  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34a8357b0cSBob Moore  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35a8357b0cSBob Moore  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36a8357b0cSBob Moore  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37a8357b0cSBob Moore  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38a8357b0cSBob Moore  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39a8357b0cSBob Moore  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40a8357b0cSBob Moore  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41a8357b0cSBob Moore  * POSSIBILITY OF SUCH DAMAGES.
42a8357b0cSBob Moore  */
43a8357b0cSBob Moore 
44b24aad44SBob Moore #ifndef __ACTBL2_H__
45b24aad44SBob Moore #define __ACTBL2_H__
46b24aad44SBob Moore 
47b24aad44SBob Moore /*******************************************************************************
48b24aad44SBob Moore  *
49b24aad44SBob Moore  * Additional ACPI Tables (2)
50b24aad44SBob Moore  *
51b24aad44SBob Moore  * These tables are not consumed directly by the ACPICA subsystem, but are
52b24aad44SBob Moore  * included here to support device drivers and the AML disassembler.
53b24aad44SBob Moore  *
549005694eSBob Moore  * Generally, the tables in this file are defined by third-party specifications,
559005694eSBob Moore  * and are not defined directly by the ACPI specification itself.
56b24aad44SBob Moore  *
57b24aad44SBob Moore  ******************************************************************************/
58b24aad44SBob Moore 
59b24aad44SBob Moore /*
606e2d5ebdSBob Moore  * Values for description table header signatures for tables defined in this
616e2d5ebdSBob Moore  * file. Useful because they make it more difficult to inadvertently type in
626e2d5ebdSBob Moore  * the wrong signature.
63b24aad44SBob Moore  */
64b24aad44SBob Moore #define ACPI_SIG_ASF            "ASF!"	/* Alert Standard Format table */
65b24aad44SBob Moore #define ACPI_SIG_BOOT           "BOOT"	/* Simple Boot Flag Table */
664e2f9c27SBob Moore #define ACPI_SIG_CSRT           "CSRT"	/* Core System Resource Table */
674e2f9c27SBob Moore #define ACPI_SIG_DBG2           "DBG2"	/* Debug Port table type 2 */
68b24aad44SBob Moore #define ACPI_SIG_DBGP           "DBGP"	/* Debug Port table */
69b24aad44SBob Moore #define ACPI_SIG_DMAR           "DMAR"	/* DMA Remapping table */
70b24aad44SBob Moore #define ACPI_SIG_HPET           "HPET"	/* High Precision Event Timer table */
71ba494beeSBob Moore #define ACPI_SIG_IBFT           "IBFT"	/* iSCSI Boot Firmware Table */
72874f6a72SLv Zheng #define ACPI_SIG_IORT           "IORT"	/* IO Remapping Table */
736e2d5ebdSBob Moore #define ACPI_SIG_IVRS           "IVRS"	/* I/O Virtualization Reporting Structure */
74d36d4e30SBob Moore #define ACPI_SIG_LPIT           "LPIT"	/* Low Power Idle Table */
75b24aad44SBob Moore #define ACPI_SIG_MCFG           "MCFG"	/* PCI Memory Mapped Configuration table */
760e264f0bSBob Moore #define ACPI_SIG_MCHI           "MCHI"	/* Management Controller Host Interface table */
775132f2faSBob Moore #define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
7898b5c993SLv Zheng #define ACPI_SIG_MTMR           "MTMR"	/* MID Timer table */
793bd38469SJames Morse #define ACPI_SIG_SDEI           "SDEI"	/* Software Delegated Exception Interface Table */
80b24aad44SBob Moore #define ACPI_SIG_SLIC           "SLIC"	/* Software Licensing Description Table */
81b24aad44SBob Moore #define ACPI_SIG_SPCR           "SPCR"	/* Serial Port Console Redirection table */
82b24aad44SBob Moore #define ACPI_SIG_SPMI           "SPMI"	/* Server Platform Management Interface table */
83b24aad44SBob Moore #define ACPI_SIG_TCPA           "TCPA"	/* Trusted Computing Platform Alliance table */
849005694eSBob Moore #define ACPI_SIG_TPM2           "TPM2"	/* Trusted Platform Module 2.0 H/W interface table */
85b24aad44SBob Moore #define ACPI_SIG_UEFI           "UEFI"	/* Uefi Boot Optimization Table */
8625c0330aSLv Zheng #define ACPI_SIG_VRTC           "VRTC"	/* Virtual Real Time Clock Table */
876e2d5ebdSBob Moore #define ACPI_SIG_WAET           "WAET"	/* Windows ACPI Emulated devices Table */
88b24aad44SBob Moore #define ACPI_SIG_WDAT           "WDAT"	/* Watchdog Action Table */
899d8b5e7bSBob Moore #define ACPI_SIG_WDDT           "WDDT"	/* Watchdog Timer Description Table */
90b24aad44SBob Moore #define ACPI_SIG_WDRT           "WDRT"	/* Watchdog Resource Table */
91e6ab3b77SLv Zheng #define ACPI_SIG_WSMT           "WSMT"	/* Windows SMM Security Migrations Table */
929cf7adecSBob Moore #define ACPI_SIG_XXXX           "XXXX"	/* Intermediate AML header for ASL/ASL+ converter */
93b24aad44SBob Moore 
944461cf54SBob Moore #ifdef ACPI_UNDEFINED_TABLES
954461cf54SBob Moore /*
964461cf54SBob Moore  * These tables have been seen in the field, but no definition has been found
974461cf54SBob Moore  */
984461cf54SBob Moore #define ACPI_SIG_ATKG           "ATKG"
994461cf54SBob Moore #define ACPI_SIG_GSCI           "GSCI"	/* GMCH SCI table */
1004461cf54SBob Moore #define ACPI_SIG_IEIT           "IEIT"
1014461cf54SBob Moore #endif
1024461cf54SBob Moore 
103b24aad44SBob Moore /*
104b24aad44SBob Moore  * All tables must be byte-packed to match the ACPI specification, since
105b24aad44SBob Moore  * the tables are provided by the system BIOS.
106b24aad44SBob Moore  */
107b24aad44SBob Moore #pragma pack(1)
108b24aad44SBob Moore 
109b24aad44SBob Moore /*
110be030a57SBob Moore  * Note: C bitfields are not used for this reason:
111be030a57SBob Moore  *
112be030a57SBob Moore  * "Bitfields are great and easy to read, but unfortunately the C language
113be030a57SBob Moore  * does not specify the layout of bitfields in memory, which means they are
114be030a57SBob Moore  * essentially useless for dealing with packed data in on-disk formats or
115be030a57SBob Moore  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
116be030a57SBob Moore  * this decision was a design error in C. Ritchie could have picked an order
117be030a57SBob Moore  * and stuck with it." Norman Ramsey.
118be030a57SBob Moore  * See http://stackoverflow.com/a/1053662/41661
119b24aad44SBob Moore  */
120b24aad44SBob Moore 
121b24aad44SBob Moore /*******************************************************************************
122b24aad44SBob Moore  *
123b24aad44SBob Moore  * ASF - Alert Standard Format table (Signature "ASF!")
1246e2d5ebdSBob Moore  *       Revision 0x10
125b24aad44SBob Moore  *
126b24aad44SBob Moore  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
127b24aad44SBob Moore  *
128b24aad44SBob Moore  ******************************************************************************/
129b24aad44SBob Moore 
130b24aad44SBob Moore struct acpi_table_asf {
131b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
132b24aad44SBob Moore };
133b24aad44SBob Moore 
134b24aad44SBob Moore /* ASF subtable header */
135b24aad44SBob Moore 
136b24aad44SBob Moore struct acpi_asf_header {
137b24aad44SBob Moore 	u8 type;
138b24aad44SBob Moore 	u8 reserved;
139b24aad44SBob Moore 	u16 length;
140b24aad44SBob Moore };
141b24aad44SBob Moore 
142b24aad44SBob Moore /* Values for Type field above */
143b24aad44SBob Moore 
144b24aad44SBob Moore enum acpi_asf_type {
145b24aad44SBob Moore 	ACPI_ASF_TYPE_INFO = 0,
146b24aad44SBob Moore 	ACPI_ASF_TYPE_ALERT = 1,
147b24aad44SBob Moore 	ACPI_ASF_TYPE_CONTROL = 2,
148b24aad44SBob Moore 	ACPI_ASF_TYPE_BOOT = 3,
149b24aad44SBob Moore 	ACPI_ASF_TYPE_ADDRESS = 4,
150b24aad44SBob Moore 	ACPI_ASF_TYPE_RESERVED = 5
151b24aad44SBob Moore };
152b24aad44SBob Moore 
153b24aad44SBob Moore /*
154b24aad44SBob Moore  * ASF subtables
155b24aad44SBob Moore  */
156b24aad44SBob Moore 
157b24aad44SBob Moore /* 0: ASF Information */
158b24aad44SBob Moore 
159b24aad44SBob Moore struct acpi_asf_info {
160b24aad44SBob Moore 	struct acpi_asf_header header;
161b24aad44SBob Moore 	u8 min_reset_value;
162b24aad44SBob Moore 	u8 min_poll_interval;
163b24aad44SBob Moore 	u16 system_id;
164b24aad44SBob Moore 	u32 mfg_id;
165b24aad44SBob Moore 	u8 flags;
166b24aad44SBob Moore 	u8 reserved2[3];
167b24aad44SBob Moore };
168b24aad44SBob Moore 
1696e2d5ebdSBob Moore /* Masks for Flags field above */
1706e2d5ebdSBob Moore 
1716e2d5ebdSBob Moore #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
1726e2d5ebdSBob Moore 
173b24aad44SBob Moore /* 1: ASF Alerts */
174b24aad44SBob Moore 
175b24aad44SBob Moore struct acpi_asf_alert {
176b24aad44SBob Moore 	struct acpi_asf_header header;
177b24aad44SBob Moore 	u8 assert_mask;
178b24aad44SBob Moore 	u8 deassert_mask;
179b24aad44SBob Moore 	u8 alerts;
180b24aad44SBob Moore 	u8 data_length;
181b24aad44SBob Moore };
182b24aad44SBob Moore 
183b24aad44SBob Moore struct acpi_asf_alert_data {
184b24aad44SBob Moore 	u8 address;
185b24aad44SBob Moore 	u8 command;
186b24aad44SBob Moore 	u8 mask;
187b24aad44SBob Moore 	u8 value;
188b24aad44SBob Moore 	u8 sensor_type;
189b24aad44SBob Moore 	u8 type;
190b24aad44SBob Moore 	u8 offset;
191b24aad44SBob Moore 	u8 source_type;
192b24aad44SBob Moore 	u8 severity;
193b24aad44SBob Moore 	u8 sensor_number;
194b24aad44SBob Moore 	u8 entity;
195b24aad44SBob Moore 	u8 instance;
196b24aad44SBob Moore };
197b24aad44SBob Moore 
198b24aad44SBob Moore /* 2: ASF Remote Control */
199b24aad44SBob Moore 
200b24aad44SBob Moore struct acpi_asf_remote {
201b24aad44SBob Moore 	struct acpi_asf_header header;
202b24aad44SBob Moore 	u8 controls;
203b24aad44SBob Moore 	u8 data_length;
204b24aad44SBob Moore 	u16 reserved2;
205b24aad44SBob Moore };
206b24aad44SBob Moore 
207b24aad44SBob Moore struct acpi_asf_control_data {
208b24aad44SBob Moore 	u8 function;
209b24aad44SBob Moore 	u8 address;
210b24aad44SBob Moore 	u8 command;
211b24aad44SBob Moore 	u8 value;
212b24aad44SBob Moore };
213b24aad44SBob Moore 
214b24aad44SBob Moore /* 3: ASF RMCP Boot Options */
215b24aad44SBob Moore 
216b24aad44SBob Moore struct acpi_asf_rmcp {
217b24aad44SBob Moore 	struct acpi_asf_header header;
218b24aad44SBob Moore 	u8 capabilities[7];
219b24aad44SBob Moore 	u8 completion_code;
220b24aad44SBob Moore 	u32 enterprise_id;
221b24aad44SBob Moore 	u8 command;
222b24aad44SBob Moore 	u16 parameter;
223b24aad44SBob Moore 	u16 boot_options;
224b24aad44SBob Moore 	u16 oem_parameters;
225b24aad44SBob Moore };
226b24aad44SBob Moore 
227b24aad44SBob Moore /* 4: ASF Address */
228b24aad44SBob Moore 
229b24aad44SBob Moore struct acpi_asf_address {
230b24aad44SBob Moore 	struct acpi_asf_header header;
231b24aad44SBob Moore 	u8 eprom_address;
232b24aad44SBob Moore 	u8 devices;
233b24aad44SBob Moore };
234b24aad44SBob Moore 
235b24aad44SBob Moore /*******************************************************************************
236b24aad44SBob Moore  *
237b24aad44SBob Moore  * BOOT - Simple Boot Flag Table
2386e2d5ebdSBob Moore  *        Version 1
2396e2d5ebdSBob Moore  *
2406e2d5ebdSBob Moore  * Conforms to the "Simple Boot Flag Specification", Version 2.1
241b24aad44SBob Moore  *
242b24aad44SBob Moore  ******************************************************************************/
243b24aad44SBob Moore 
244b24aad44SBob Moore struct acpi_table_boot {
245b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
246b24aad44SBob Moore 	u8 cmos_index;		/* Index in CMOS RAM for the boot register */
247b24aad44SBob Moore 	u8 reserved[3];
248b24aad44SBob Moore };
249b24aad44SBob Moore 
250b24aad44SBob Moore /*******************************************************************************
251b24aad44SBob Moore  *
2524e2f9c27SBob Moore  * CSRT - Core System Resource Table
2534e2f9c27SBob Moore  *        Version 0
2544e2f9c27SBob Moore  *
2554e2f9c27SBob Moore  * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
2564e2f9c27SBob Moore  *
2574e2f9c27SBob Moore  ******************************************************************************/
2584e2f9c27SBob Moore 
2594e2f9c27SBob Moore struct acpi_table_csrt {
2604e2f9c27SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
2614e2f9c27SBob Moore };
2624e2f9c27SBob Moore 
2634e2f9c27SBob Moore /* Resource Group subtable */
2644e2f9c27SBob Moore 
2654e2f9c27SBob Moore struct acpi_csrt_group {
2664e2f9c27SBob Moore 	u32 length;
2674e2f9c27SBob Moore 	u32 vendor_id;
2684e2f9c27SBob Moore 	u32 subvendor_id;
2694e2f9c27SBob Moore 	u16 device_id;
2704e2f9c27SBob Moore 	u16 subdevice_id;
2714e2f9c27SBob Moore 	u16 revision;
2724e2f9c27SBob Moore 	u16 reserved;
273e6750be9SBob Moore 	u32 shared_info_length;
2744e2f9c27SBob Moore 
275e6750be9SBob Moore 	/* Shared data immediately follows (Length = shared_info_length) */
276e6750be9SBob Moore };
277e6750be9SBob Moore 
278e6750be9SBob Moore /* Shared Info subtable */
279e6750be9SBob Moore 
280e6750be9SBob Moore struct acpi_csrt_shared_info {
281e6750be9SBob Moore 	u16 major_version;
282e6750be9SBob Moore 	u16 minor_version;
283e6750be9SBob Moore 	u32 mmio_base_low;
284e6750be9SBob Moore 	u32 mmio_base_high;
285e6750be9SBob Moore 	u32 gsi_interrupt;
286e6750be9SBob Moore 	u8 interrupt_polarity;
287e6750be9SBob Moore 	u8 interrupt_mode;
288e6750be9SBob Moore 	u8 num_channels;
289e6750be9SBob Moore 	u8 dma_address_width;
290e6750be9SBob Moore 	u16 base_request_line;
291e6750be9SBob Moore 	u16 num_handshake_signals;
292e6750be9SBob Moore 	u32 max_block_size;
293e6750be9SBob Moore 
294e6750be9SBob Moore 	/* Resource descriptors immediately follow (Length = Group length - shared_info_length) */
2954e2f9c27SBob Moore };
2964e2f9c27SBob Moore 
2974e2f9c27SBob Moore /* Resource Descriptor subtable */
2984e2f9c27SBob Moore 
2994e2f9c27SBob Moore struct acpi_csrt_descriptor {
3004e2f9c27SBob Moore 	u32 length;
3014e2f9c27SBob Moore 	u16 type;
3024e2f9c27SBob Moore 	u16 subtype;
3034e2f9c27SBob Moore 	u32 uid;
3044e2f9c27SBob Moore 
3054e2f9c27SBob Moore 	/* Resource-specific information immediately follows */
3064e2f9c27SBob Moore };
3074e2f9c27SBob Moore 
3084e2f9c27SBob Moore /* Resource Types */
3094e2f9c27SBob Moore 
3104e2f9c27SBob Moore #define ACPI_CSRT_TYPE_INTERRUPT    0x0001
3114e2f9c27SBob Moore #define ACPI_CSRT_TYPE_TIMER        0x0002
3124e2f9c27SBob Moore #define ACPI_CSRT_TYPE_DMA          0x0003
3134e2f9c27SBob Moore 
3144e2f9c27SBob Moore /* Resource Subtypes */
3154e2f9c27SBob Moore 
3164e2f9c27SBob Moore #define ACPI_CSRT_XRUPT_LINE        0x0000
3174e2f9c27SBob Moore #define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
3184e2f9c27SBob Moore #define ACPI_CSRT_TIMER             0x0000
3194e2f9c27SBob Moore #define ACPI_CSRT_DMA_CHANNEL       0x0000
3204e2f9c27SBob Moore #define ACPI_CSRT_DMA_CONTROLLER    0x0001
3214e2f9c27SBob Moore 
3224e2f9c27SBob Moore /*******************************************************************************
3234e2f9c27SBob Moore  *
3244e2f9c27SBob Moore  * DBG2 - Debug Port Table 2
3254e2f9c27SBob Moore  *        Version 0 (Both main table and subtables)
3264e2f9c27SBob Moore  *
327c7200ffeSAleksey Makarov  * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015
3284e2f9c27SBob Moore  *
3294e2f9c27SBob Moore  ******************************************************************************/
3304e2f9c27SBob Moore 
3314e2f9c27SBob Moore struct acpi_table_dbg2 {
3324e2f9c27SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
3334e2f9c27SBob Moore 	u32 info_offset;
3344e2f9c27SBob Moore 	u32 info_count;
3354e2f9c27SBob Moore };
3364e2f9c27SBob Moore 
33777455222SBob Moore struct acpi_dbg2_header {
33877455222SBob Moore 	u32 info_offset;
33977455222SBob Moore 	u32 info_count;
34077455222SBob Moore };
34177455222SBob Moore 
3424e2f9c27SBob Moore /* Debug Device Information Subtable */
3434e2f9c27SBob Moore 
3444e2f9c27SBob Moore struct acpi_dbg2_device {
3454e2f9c27SBob Moore 	u8 revision;
3464e2f9c27SBob Moore 	u16 length;
3474e2f9c27SBob Moore 	u8 register_count;	/* Number of base_address registers */
3484e2f9c27SBob Moore 	u16 namepath_length;
3494e2f9c27SBob Moore 	u16 namepath_offset;
3504e2f9c27SBob Moore 	u16 oem_data_length;
3514e2f9c27SBob Moore 	u16 oem_data_offset;
3524e2f9c27SBob Moore 	u16 port_type;
3534e2f9c27SBob Moore 	u16 port_subtype;
3544e2f9c27SBob Moore 	u16 reserved;
3554e2f9c27SBob Moore 	u16 base_address_offset;
3564e2f9c27SBob Moore 	u16 address_size_offset;
3574e2f9c27SBob Moore 	/*
3584e2f9c27SBob Moore 	 * Data that follows:
3594e2f9c27SBob Moore 	 *    base_address (required) - Each in 12-byte Generic Address Structure format.
3604e2f9c27SBob Moore 	 *    address_size (required) - Array of u32 sizes corresponding to each base_address register.
3614e2f9c27SBob Moore 	 *    Namepath    (required) - Null terminated string. Single dot if not supported.
3624e2f9c27SBob Moore 	 *    oem_data    (optional) - Length is oem_data_length.
3634e2f9c27SBob Moore 	 */
3644e2f9c27SBob Moore };
3654e2f9c27SBob Moore 
3664e2f9c27SBob Moore /* Types for port_type field above */
3674e2f9c27SBob Moore 
3684e2f9c27SBob Moore #define ACPI_DBG2_SERIAL_PORT       0x8000
3694e2f9c27SBob Moore #define ACPI_DBG2_1394_PORT         0x8001
3704e2f9c27SBob Moore #define ACPI_DBG2_USB_PORT          0x8002
3714e2f9c27SBob Moore #define ACPI_DBG2_NET_PORT          0x8003
3724e2f9c27SBob Moore 
3734e2f9c27SBob Moore /* Subtypes for port_subtype field above */
3744e2f9c27SBob Moore 
3754e2f9c27SBob Moore #define ACPI_DBG2_16550_COMPATIBLE  0x0000
3764e2f9c27SBob Moore #define ACPI_DBG2_16550_SUBSET      0x0001
377c7200ffeSAleksey Makarov #define ACPI_DBG2_ARM_PL011         0x0003
378c7200ffeSAleksey Makarov #define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
379c7200ffeSAleksey Makarov #define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
380c7200ffeSAleksey Makarov #define ACPI_DBG2_ARM_DCC           0x000F
381c7200ffeSAleksey Makarov #define ACPI_DBG2_BCM2835           0x0010
3824e2f9c27SBob Moore 
3834e2f9c27SBob Moore #define ACPI_DBG2_1394_STANDARD     0x0000
3844e2f9c27SBob Moore 
3854e2f9c27SBob Moore #define ACPI_DBG2_USB_XHCI          0x0000
3864e2f9c27SBob Moore #define ACPI_DBG2_USB_EHCI          0x0001
3874e2f9c27SBob Moore 
3884e2f9c27SBob Moore /*******************************************************************************
3894e2f9c27SBob Moore  *
390b24aad44SBob Moore  * DBGP - Debug Port table
3916e2d5ebdSBob Moore  *        Version 1
3926e2d5ebdSBob Moore  *
3936e2d5ebdSBob Moore  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
394b24aad44SBob Moore  *
395b24aad44SBob Moore  ******************************************************************************/
396b24aad44SBob Moore 
397b24aad44SBob Moore struct acpi_table_dbgp {
398b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
399b24aad44SBob Moore 	u8 type;		/* 0=full 16550, 1=subset of 16550 */
400b24aad44SBob Moore 	u8 reserved[3];
401b24aad44SBob Moore 	struct acpi_generic_address debug_port;
402b24aad44SBob Moore };
403b24aad44SBob Moore 
404b24aad44SBob Moore /*******************************************************************************
405b24aad44SBob Moore  *
406b24aad44SBob Moore  * DMAR - DMA Remapping table
4076e2d5ebdSBob Moore  *        Version 1
4086e2d5ebdSBob Moore  *
4096e2d5ebdSBob Moore  * Conforms to "Intel Virtualization Technology for Directed I/O",
4103a9ca4d5SBob Moore  * Version 2.3, October 2014
411b24aad44SBob Moore  *
412b24aad44SBob Moore  ******************************************************************************/
413b24aad44SBob Moore 
414b24aad44SBob Moore struct acpi_table_dmar {
415b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
416b24aad44SBob Moore 	u8 width;		/* Host Address Width */
417b24aad44SBob Moore 	u8 flags;
418b24aad44SBob Moore 	u8 reserved[10];
419b24aad44SBob Moore };
420b24aad44SBob Moore 
4216e2d5ebdSBob Moore /* Masks for Flags field above */
422b24aad44SBob Moore 
423b24aad44SBob Moore #define ACPI_DMAR_INTR_REMAP        (1)
4243a9ca4d5SBob Moore #define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
4253a9ca4d5SBob Moore #define ACPI_DMAR_X2APIC_MODE       (1<<2)
426b24aad44SBob Moore 
427b24aad44SBob Moore /* DMAR subtable header */
428b24aad44SBob Moore 
429b24aad44SBob Moore struct acpi_dmar_header {
430b24aad44SBob Moore 	u16 type;
431b24aad44SBob Moore 	u16 length;
432b24aad44SBob Moore };
433b24aad44SBob Moore 
434b24aad44SBob Moore /* Values for subtable type in struct acpi_dmar_header */
435b24aad44SBob Moore 
436b24aad44SBob Moore enum acpi_dmar_type {
437b24aad44SBob Moore 	ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
438b24aad44SBob Moore 	ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
43983118b0dSBob Moore 	ACPI_DMAR_TYPE_ROOT_ATS = 2,
44083118b0dSBob Moore 	ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3,
44183118b0dSBob Moore 	ACPI_DMAR_TYPE_NAMESPACE = 4,
44286a54dccSDavid Woodhouse 	ACPI_DMAR_TYPE_RESERVED = 5	/* 5 and greater are reserved */
443b24aad44SBob Moore };
444b24aad44SBob Moore 
4456e2d5ebdSBob Moore /* DMAR Device Scope structure */
4466e2d5ebdSBob Moore 
447b24aad44SBob Moore struct acpi_dmar_device_scope {
448b24aad44SBob Moore 	u8 entry_type;
449b24aad44SBob Moore 	u8 length;
450b24aad44SBob Moore 	u16 reserved;
451b24aad44SBob Moore 	u8 enumeration_id;
452b24aad44SBob Moore 	u8 bus;
453b24aad44SBob Moore };
454b24aad44SBob Moore 
45583118b0dSBob Moore /* Values for entry_type in struct acpi_dmar_device_scope - device types */
456b24aad44SBob Moore 
457b24aad44SBob Moore enum acpi_dmar_scope_type {
458b24aad44SBob Moore 	ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
459b24aad44SBob Moore 	ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
460b24aad44SBob Moore 	ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
461b24aad44SBob Moore 	ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
462b24aad44SBob Moore 	ACPI_DMAR_SCOPE_TYPE_HPET = 4,
46383118b0dSBob Moore 	ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5,
46486a54dccSDavid Woodhouse 	ACPI_DMAR_SCOPE_TYPE_RESERVED = 6	/* 6 and greater are reserved */
465b24aad44SBob Moore };
466b24aad44SBob Moore 
467b24aad44SBob Moore struct acpi_dmar_pci_path {
468fa5f508fSLv Zheng 	u8 device;
469fa5f508fSLv Zheng 	u8 function;
470b24aad44SBob Moore };
471b24aad44SBob Moore 
472b24aad44SBob Moore /*
4731a49b72cSBob Moore  * DMAR Subtables, correspond to Type in struct acpi_dmar_header
474b24aad44SBob Moore  */
475b24aad44SBob Moore 
476b24aad44SBob Moore /* 0: Hardware Unit Definition */
477b24aad44SBob Moore 
478b24aad44SBob Moore struct acpi_dmar_hardware_unit {
479b24aad44SBob Moore 	struct acpi_dmar_header header;
480b24aad44SBob Moore 	u8 flags;
481b24aad44SBob Moore 	u8 reserved;
482b24aad44SBob Moore 	u16 segment;
483b24aad44SBob Moore 	u64 address;		/* Register Base Address */
484b24aad44SBob Moore };
485b24aad44SBob Moore 
4866e2d5ebdSBob Moore /* Masks for Flags field above */
487b24aad44SBob Moore 
488b24aad44SBob Moore #define ACPI_DMAR_INCLUDE_ALL       (1)
489b24aad44SBob Moore 
490b24aad44SBob Moore /* 1: Reserved Memory Defininition */
491b24aad44SBob Moore 
492b24aad44SBob Moore struct acpi_dmar_reserved_memory {
493b24aad44SBob Moore 	struct acpi_dmar_header header;
494b24aad44SBob Moore 	u16 reserved;
495b24aad44SBob Moore 	u16 segment;
496ba494beeSBob Moore 	u64 base_address;	/* 4K aligned base address */
497ba494beeSBob Moore 	u64 end_address;	/* 4K aligned limit address */
498b24aad44SBob Moore };
499b24aad44SBob Moore 
5006e2d5ebdSBob Moore /* Masks for Flags field above */
501b24aad44SBob Moore 
502b24aad44SBob Moore #define ACPI_DMAR_ALLOW_ALL         (1)
503b24aad44SBob Moore 
504b24aad44SBob Moore /* 2: Root Port ATS Capability Reporting Structure */
505b24aad44SBob Moore 
506b24aad44SBob Moore struct acpi_dmar_atsr {
507b24aad44SBob Moore 	struct acpi_dmar_header header;
508b24aad44SBob Moore 	u8 flags;
509b24aad44SBob Moore 	u8 reserved;
510b24aad44SBob Moore 	u16 segment;
511b24aad44SBob Moore };
512b24aad44SBob Moore 
5136e2d5ebdSBob Moore /* Masks for Flags field above */
514b24aad44SBob Moore 
515b24aad44SBob Moore #define ACPI_DMAR_ALL_PORTS         (1)
516b24aad44SBob Moore 
5176e2d5ebdSBob Moore /* 3: Remapping Hardware Static Affinity Structure */
5186e2d5ebdSBob Moore 
5196e2d5ebdSBob Moore struct acpi_dmar_rhsa {
5206e2d5ebdSBob Moore 	struct acpi_dmar_header header;
5216e2d5ebdSBob Moore 	u32 reserved;
5226e2d5ebdSBob Moore 	u64 base_address;
5236e2d5ebdSBob Moore 	u32 proximity_domain;
5246e2d5ebdSBob Moore };
5256e2d5ebdSBob Moore 
52686a54dccSDavid Woodhouse /* 4: ACPI Namespace Device Declaration Structure */
52786a54dccSDavid Woodhouse 
52886a54dccSDavid Woodhouse struct acpi_dmar_andd {
52986a54dccSDavid Woodhouse 	struct acpi_dmar_header header;
53086a54dccSDavid Woodhouse 	u8 reserved[3];
53186a54dccSDavid Woodhouse 	u8 device_number;
53283118b0dSBob Moore 	char device_name[1];
53386a54dccSDavid Woodhouse };
53486a54dccSDavid Woodhouse 
535b24aad44SBob Moore /*******************************************************************************
536b24aad44SBob Moore  *
537b24aad44SBob Moore  * HPET - High Precision Event Timer table
5386e2d5ebdSBob Moore  *        Version 1
5396e2d5ebdSBob Moore  *
5406e2d5ebdSBob Moore  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
5416e2d5ebdSBob Moore  * Version 1.0a, October 2004
542b24aad44SBob Moore  *
543b24aad44SBob Moore  ******************************************************************************/
544b24aad44SBob Moore 
545b24aad44SBob Moore struct acpi_table_hpet {
546b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
547b24aad44SBob Moore 	u32 id;			/* Hardware ID of event timer block */
548b24aad44SBob Moore 	struct acpi_generic_address address;	/* Address of event timer block */
549b24aad44SBob Moore 	u8 sequence;		/* HPET sequence number */
550b24aad44SBob Moore 	u16 minimum_tick;	/* Main counter min tick, periodic mode */
551b24aad44SBob Moore 	u8 flags;
552b24aad44SBob Moore };
553b24aad44SBob Moore 
5546e2d5ebdSBob Moore /* Masks for Flags field above */
555b24aad44SBob Moore 
5566e2d5ebdSBob Moore #define ACPI_HPET_PAGE_PROTECT_MASK (3)
557b24aad44SBob Moore 
5586e2d5ebdSBob Moore /* Values for Page Protect flags */
5596e2d5ebdSBob Moore 
5606e2d5ebdSBob Moore enum acpi_hpet_page_protect {
5616e2d5ebdSBob Moore 	ACPI_HPET_NO_PAGE_PROTECT = 0,
5626e2d5ebdSBob Moore 	ACPI_HPET_PAGE_PROTECT4 = 1,
5636e2d5ebdSBob Moore 	ACPI_HPET_PAGE_PROTECT64 = 2
5646e2d5ebdSBob Moore };
565b24aad44SBob Moore 
566b24aad44SBob Moore /*******************************************************************************
567b24aad44SBob Moore  *
568b24aad44SBob Moore  * IBFT - Boot Firmware Table
5696e2d5ebdSBob Moore  *        Version 1
5706e2d5ebdSBob Moore  *
5716e2d5ebdSBob Moore  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
5726e2d5ebdSBob Moore  * Specification", Version 1.01, March 1, 2007
5736e2d5ebdSBob Moore  *
5746e2d5ebdSBob Moore  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
5756e2d5ebdSBob Moore  * Therefore, it is not currently supported by the disassembler.
576b24aad44SBob Moore  *
577b24aad44SBob Moore  ******************************************************************************/
578b24aad44SBob Moore 
579b24aad44SBob Moore struct acpi_table_ibft {
580b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
581b24aad44SBob Moore 	u8 reserved[12];
582b24aad44SBob Moore };
583b24aad44SBob Moore 
584b24aad44SBob Moore /* IBFT common subtable header */
585b24aad44SBob Moore 
586b24aad44SBob Moore struct acpi_ibft_header {
587b24aad44SBob Moore 	u8 type;
588b24aad44SBob Moore 	u8 version;
589b24aad44SBob Moore 	u16 length;
590b24aad44SBob Moore 	u8 index;
591b24aad44SBob Moore 	u8 flags;
592b24aad44SBob Moore };
593b24aad44SBob Moore 
594b24aad44SBob Moore /* Values for Type field above */
595b24aad44SBob Moore 
596b24aad44SBob Moore enum acpi_ibft_type {
597b24aad44SBob Moore 	ACPI_IBFT_TYPE_NOT_USED = 0,
598b24aad44SBob Moore 	ACPI_IBFT_TYPE_CONTROL = 1,
599b24aad44SBob Moore 	ACPI_IBFT_TYPE_INITIATOR = 2,
600b24aad44SBob Moore 	ACPI_IBFT_TYPE_NIC = 3,
601b24aad44SBob Moore 	ACPI_IBFT_TYPE_TARGET = 4,
602b24aad44SBob Moore 	ACPI_IBFT_TYPE_EXTENSIONS = 5,
603b24aad44SBob Moore 	ACPI_IBFT_TYPE_RESERVED = 6	/* 6 and greater are reserved */
604b24aad44SBob Moore };
605b24aad44SBob Moore 
606b24aad44SBob Moore /* IBFT subtables */
607b24aad44SBob Moore 
608b24aad44SBob Moore struct acpi_ibft_control {
609b24aad44SBob Moore 	struct acpi_ibft_header header;
610b24aad44SBob Moore 	u16 extensions;
611b24aad44SBob Moore 	u16 initiator_offset;
612b24aad44SBob Moore 	u16 nic0_offset;
613b24aad44SBob Moore 	u16 target0_offset;
614b24aad44SBob Moore 	u16 nic1_offset;
615b24aad44SBob Moore 	u16 target1_offset;
616b24aad44SBob Moore };
617b24aad44SBob Moore 
618b24aad44SBob Moore struct acpi_ibft_initiator {
619b24aad44SBob Moore 	struct acpi_ibft_header header;
620b24aad44SBob Moore 	u8 sns_server[16];
621b24aad44SBob Moore 	u8 slp_server[16];
622b24aad44SBob Moore 	u8 primary_server[16];
623b24aad44SBob Moore 	u8 secondary_server[16];
624b24aad44SBob Moore 	u16 name_length;
625b24aad44SBob Moore 	u16 name_offset;
626b24aad44SBob Moore };
627b24aad44SBob Moore 
628b24aad44SBob Moore struct acpi_ibft_nic {
629b24aad44SBob Moore 	struct acpi_ibft_header header;
630b24aad44SBob Moore 	u8 ip_address[16];
631b24aad44SBob Moore 	u8 subnet_mask_prefix;
632b24aad44SBob Moore 	u8 origin;
633b24aad44SBob Moore 	u8 gateway[16];
634b24aad44SBob Moore 	u8 primary_dns[16];
635b24aad44SBob Moore 	u8 secondary_dns[16];
636b24aad44SBob Moore 	u8 dhcp[16];
637b24aad44SBob Moore 	u16 vlan;
638b24aad44SBob Moore 	u8 mac_address[6];
639b24aad44SBob Moore 	u16 pci_address;
640b24aad44SBob Moore 	u16 name_length;
641b24aad44SBob Moore 	u16 name_offset;
642b24aad44SBob Moore };
643b24aad44SBob Moore 
644b24aad44SBob Moore struct acpi_ibft_target {
645b24aad44SBob Moore 	struct acpi_ibft_header header;
646b24aad44SBob Moore 	u8 target_ip_address[16];
647b24aad44SBob Moore 	u16 target_ip_socket;
648b24aad44SBob Moore 	u8 target_boot_lun[8];
649b24aad44SBob Moore 	u8 chap_type;
650b24aad44SBob Moore 	u8 nic_association;
651b24aad44SBob Moore 	u16 target_name_length;
652b24aad44SBob Moore 	u16 target_name_offset;
653b24aad44SBob Moore 	u16 chap_name_length;
654b24aad44SBob Moore 	u16 chap_name_offset;
655b24aad44SBob Moore 	u16 chap_secret_length;
656b24aad44SBob Moore 	u16 chap_secret_offset;
657b24aad44SBob Moore 	u16 reverse_chap_name_length;
658b24aad44SBob Moore 	u16 reverse_chap_name_offset;
659b24aad44SBob Moore 	u16 reverse_chap_secret_length;
660b24aad44SBob Moore 	u16 reverse_chap_secret_offset;
661b24aad44SBob Moore };
662b24aad44SBob Moore 
663b24aad44SBob Moore /*******************************************************************************
664b24aad44SBob Moore  *
665874f6a72SLv Zheng  * IORT - IO Remapping Table
666874f6a72SLv Zheng  *
667874f6a72SLv Zheng  * Conforms to "IO Remapping Table System Software on ARM Platforms",
6680c2021c0SRobin Murphy  * Document number: ARM DEN 0049C, May 2017
669874f6a72SLv Zheng  *
670874f6a72SLv Zheng  ******************************************************************************/
671874f6a72SLv Zheng 
672874f6a72SLv Zheng struct acpi_table_iort {
673874f6a72SLv Zheng 	struct acpi_table_header header;
674874f6a72SLv Zheng 	u32 node_count;
675874f6a72SLv Zheng 	u32 node_offset;
676874f6a72SLv Zheng 	u32 reserved;
677874f6a72SLv Zheng };
678874f6a72SLv Zheng 
679874f6a72SLv Zheng /*
680874f6a72SLv Zheng  * IORT subtables
681874f6a72SLv Zheng  */
682874f6a72SLv Zheng struct acpi_iort_node {
683874f6a72SLv Zheng 	u8 type;
684874f6a72SLv Zheng 	u16 length;
685874f6a72SLv Zheng 	u8 revision;
686874f6a72SLv Zheng 	u32 reserved;
687874f6a72SLv Zheng 	u32 mapping_count;
688874f6a72SLv Zheng 	u32 mapping_offset;
689874f6a72SLv Zheng 	char node_data[1];
690874f6a72SLv Zheng };
691874f6a72SLv Zheng 
692874f6a72SLv Zheng /* Values for subtable Type above */
693874f6a72SLv Zheng 
694874f6a72SLv Zheng enum acpi_iort_node_type {
695874f6a72SLv Zheng 	ACPI_IORT_NODE_ITS_GROUP = 0x00,
696874f6a72SLv Zheng 	ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
697874f6a72SLv Zheng 	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
6984ac78bafSAl Stone 	ACPI_IORT_NODE_SMMU = 0x03,
6994ac78bafSAl Stone 	ACPI_IORT_NODE_SMMU_V3 = 0x04
700874f6a72SLv Zheng };
701874f6a72SLv Zheng 
702874f6a72SLv Zheng struct acpi_iort_id_mapping {
703874f6a72SLv Zheng 	u32 input_base;		/* Lowest value in input range */
704874f6a72SLv Zheng 	u32 id_count;		/* Number of IDs */
705874f6a72SLv Zheng 	u32 output_base;	/* Lowest value in output range */
706874f6a72SLv Zheng 	u32 output_reference;	/* A reference to the output node */
707874f6a72SLv Zheng 	u32 flags;
708874f6a72SLv Zheng };
709874f6a72SLv Zheng 
710874f6a72SLv Zheng /* Masks for Flags field above for IORT subtable */
711874f6a72SLv Zheng 
712874f6a72SLv Zheng #define ACPI_IORT_ID_SINGLE_MAPPING (1)
713874f6a72SLv Zheng 
714874f6a72SLv Zheng struct acpi_iort_memory_access {
715874f6a72SLv Zheng 	u32 cache_coherency;
716874f6a72SLv Zheng 	u8 hints;
717874f6a72SLv Zheng 	u16 reserved;
718874f6a72SLv Zheng 	u8 memory_flags;
719874f6a72SLv Zheng };
720874f6a72SLv Zheng 
721874f6a72SLv Zheng /* Values for cache_coherency field above */
722874f6a72SLv Zheng 
723874f6a72SLv Zheng #define ACPI_IORT_NODE_COHERENT         0x00000001	/* The device node is fully coherent */
724874f6a72SLv Zheng #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000	/* The device node is not coherent */
725874f6a72SLv Zheng 
726874f6a72SLv Zheng /* Masks for Hints field above */
727874f6a72SLv Zheng 
728874f6a72SLv Zheng #define ACPI_IORT_HT_TRANSIENT          (1)
729874f6a72SLv Zheng #define ACPI_IORT_HT_WRITE              (1<<1)
730874f6a72SLv Zheng #define ACPI_IORT_HT_READ               (1<<2)
731874f6a72SLv Zheng #define ACPI_IORT_HT_OVERRIDE           (1<<3)
732874f6a72SLv Zheng 
733874f6a72SLv Zheng /* Masks for memory_flags field above */
734874f6a72SLv Zheng 
735874f6a72SLv Zheng #define ACPI_IORT_MF_COHERENCY          (1)
736874f6a72SLv Zheng #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
737874f6a72SLv Zheng 
738874f6a72SLv Zheng /*
739874f6a72SLv Zheng  * IORT node specific subtables
740874f6a72SLv Zheng  */
741874f6a72SLv Zheng struct acpi_iort_its_group {
742874f6a72SLv Zheng 	u32 its_count;
743874f6a72SLv Zheng 	u32 identifiers[1];	/* GIC ITS identifier arrary */
744874f6a72SLv Zheng };
745874f6a72SLv Zheng 
746874f6a72SLv Zheng struct acpi_iort_named_component {
747874f6a72SLv Zheng 	u32 node_flags;
748874f6a72SLv Zheng 	u64 memory_properties;	/* Memory access properties */
749874f6a72SLv Zheng 	u8 memory_address_limit;	/* Memory address size limit */
750874f6a72SLv Zheng 	char device_name[1];	/* Path of namespace object */
751874f6a72SLv Zheng };
752874f6a72SLv Zheng 
753874f6a72SLv Zheng struct acpi_iort_root_complex {
754874f6a72SLv Zheng 	u64 memory_properties;	/* Memory access properties */
755874f6a72SLv Zheng 	u32 ats_attribute;
756874f6a72SLv Zheng 	u32 pci_segment_number;
757874f6a72SLv Zheng };
758874f6a72SLv Zheng 
759874f6a72SLv Zheng /* Values for ats_attribute field above */
760874f6a72SLv Zheng 
761874f6a72SLv Zheng #define ACPI_IORT_ATS_SUPPORTED         0x00000001	/* The root complex supports ATS */
762874f6a72SLv Zheng #define ACPI_IORT_ATS_UNSUPPORTED       0x00000000	/* The root complex doesn't support ATS */
763874f6a72SLv Zheng 
764874f6a72SLv Zheng struct acpi_iort_smmu {
765874f6a72SLv Zheng 	u64 base_address;	/* SMMU base address */
766874f6a72SLv Zheng 	u64 span;		/* Length of memory range */
767874f6a72SLv Zheng 	u32 model;
768874f6a72SLv Zheng 	u32 flags;
769874f6a72SLv Zheng 	u32 global_interrupt_offset;
770874f6a72SLv Zheng 	u32 context_interrupt_count;
771874f6a72SLv Zheng 	u32 context_interrupt_offset;
772874f6a72SLv Zheng 	u32 pmu_interrupt_count;
773874f6a72SLv Zheng 	u32 pmu_interrupt_offset;
774874f6a72SLv Zheng 	u64 interrupts[1];	/* Interrupt array */
775874f6a72SLv Zheng };
776874f6a72SLv Zheng 
777874f6a72SLv Zheng /* Values for Model field above */
778874f6a72SLv Zheng 
779874f6a72SLv Zheng #define ACPI_IORT_SMMU_V1               0x00000000	/* Generic SMMUv1 */
780874f6a72SLv Zheng #define ACPI_IORT_SMMU_V2               0x00000001	/* Generic SMMUv2 */
781874f6a72SLv Zheng #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002	/* ARM Corelink MMU-400 */
782874f6a72SLv Zheng #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003	/* ARM Corelink MMU-500 */
7830c2021c0SRobin Murphy #define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004	/* ARM Corelink MMU-401 */
7840c2021c0SRobin Murphy #define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005	/* Cavium thunder_x SMMUv2 */
785874f6a72SLv Zheng 
786874f6a72SLv Zheng /* Masks for Flags field above */
787874f6a72SLv Zheng 
788874f6a72SLv Zheng #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
789874f6a72SLv Zheng #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
790874f6a72SLv Zheng 
791bb1e23e6SLv Zheng /* Global interrupt format */
792bb1e23e6SLv Zheng 
793bb1e23e6SLv Zheng struct acpi_iort_smmu_gsi {
794bb1e23e6SLv Zheng 	u32 nsg_irpt;
795bb1e23e6SLv Zheng 	u32 nsg_irpt_flags;
796bb1e23e6SLv Zheng 	u32 nsg_cfg_irpt;
797bb1e23e6SLv Zheng 	u32 nsg_cfg_irpt_flags;
798bb1e23e6SLv Zheng };
799bb1e23e6SLv Zheng 
8004ac78bafSAl Stone struct acpi_iort_smmu_v3 {
8014ac78bafSAl Stone 	u64 base_address;	/* SMMUv3 base address */
8024ac78bafSAl Stone 	u32 flags;
8034ac78bafSAl Stone 	u32 reserved;
8044ac78bafSAl Stone 	u64 vatos_address;
8050c2021c0SRobin Murphy 	u32 model;
8064ac78bafSAl Stone 	u32 event_gsiv;
8074ac78bafSAl Stone 	u32 pri_gsiv;
8084ac78bafSAl Stone 	u32 gerr_gsiv;
8094ac78bafSAl Stone 	u32 sync_gsiv;
810c9442300SGanapatrao Kulkarni 	u8 pxm;
811c9442300SGanapatrao Kulkarni 	u8 reserved1;
812c9442300SGanapatrao Kulkarni 	u16 reserved2;
8134c106aa4SHanjun Guo 	u32 id_mapping_index;
8144ac78bafSAl Stone };
8154ac78bafSAl Stone 
8160c2021c0SRobin Murphy /* Values for Model field above */
8170c2021c0SRobin Murphy 
8180c2021c0SRobin Murphy #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000	/* Generic SMMUv3 */
8190c2021c0SRobin Murphy #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001	/* hi_silicon Hi161x SMMUv3 */
8200c2021c0SRobin Murphy #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002	/* Cavium CN99xx SMMUv3 */
8210c2021c0SRobin Murphy 
8224ac78bafSAl Stone /* Masks for Flags field above */
8234ac78bafSAl Stone 
8244ac78bafSAl Stone #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
8254ac78bafSAl Stone #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
826c9442300SGanapatrao Kulkarni #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
8274ac78bafSAl Stone 
828874f6a72SLv Zheng /*******************************************************************************
829874f6a72SLv Zheng  *
8306e2d5ebdSBob Moore  * IVRS - I/O Virtualization Reporting Structure
8316e2d5ebdSBob Moore  *        Version 1
8326e2d5ebdSBob Moore  *
8336e2d5ebdSBob Moore  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
8346e2d5ebdSBob Moore  * Revision 1.26, February 2009.
8356e2d5ebdSBob Moore  *
8366e2d5ebdSBob Moore  ******************************************************************************/
8376e2d5ebdSBob Moore 
8386e2d5ebdSBob Moore struct acpi_table_ivrs {
8396e2d5ebdSBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
8406e2d5ebdSBob Moore 	u32 info;		/* Common virtualization info */
8416e2d5ebdSBob Moore 	u64 reserved;
8426e2d5ebdSBob Moore };
8436e2d5ebdSBob Moore 
8446e2d5ebdSBob Moore /* Values for Info field above */
8456e2d5ebdSBob Moore 
8466e2d5ebdSBob Moore #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00	/* 7 bits, physical address size */
8476e2d5ebdSBob Moore #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000	/* 7 bits, virtual address size */
8486e2d5ebdSBob Moore #define ACPI_IVRS_ATS_RESERVED      0x00400000	/* ATS address translation range reserved */
8496e2d5ebdSBob Moore 
8506e2d5ebdSBob Moore /* IVRS subtable header */
8516e2d5ebdSBob Moore 
8526e2d5ebdSBob Moore struct acpi_ivrs_header {
8536e2d5ebdSBob Moore 	u8 type;		/* Subtable type */
8546e2d5ebdSBob Moore 	u8 flags;
8556e2d5ebdSBob Moore 	u16 length;		/* Subtable length */
8566e2d5ebdSBob Moore 	u16 device_id;		/* ID of IOMMU */
8576e2d5ebdSBob Moore };
8586e2d5ebdSBob Moore 
8596e2d5ebdSBob Moore /* Values for subtable Type above */
8606e2d5ebdSBob Moore 
8616e2d5ebdSBob Moore enum acpi_ivrs_type {
8626e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_HARDWARE = 0x10,
8636e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_MEMORY1 = 0x20,
8646e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_MEMORY2 = 0x21,
8656e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_MEMORY3 = 0x22
8666e2d5ebdSBob Moore };
8676e2d5ebdSBob Moore 
8686e2d5ebdSBob Moore /* Masks for Flags field above for IVHD subtable */
8696e2d5ebdSBob Moore 
8706e2d5ebdSBob Moore #define ACPI_IVHD_TT_ENABLE         (1)
8716e2d5ebdSBob Moore #define ACPI_IVHD_PASS_PW           (1<<1)
8726e2d5ebdSBob Moore #define ACPI_IVHD_RES_PASS_PW       (1<<2)
8736e2d5ebdSBob Moore #define ACPI_IVHD_ISOC              (1<<3)
8746e2d5ebdSBob Moore #define ACPI_IVHD_IOTLB             (1<<4)
8756e2d5ebdSBob Moore 
8766e2d5ebdSBob Moore /* Masks for Flags field above for IVMD subtable */
8776e2d5ebdSBob Moore 
8786e2d5ebdSBob Moore #define ACPI_IVMD_UNITY             (1)
8796e2d5ebdSBob Moore #define ACPI_IVMD_READ              (1<<1)
8806e2d5ebdSBob Moore #define ACPI_IVMD_WRITE             (1<<2)
8816e2d5ebdSBob Moore #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
8826e2d5ebdSBob Moore 
8836e2d5ebdSBob Moore /*
8846e2d5ebdSBob Moore  * IVRS subtables, correspond to Type in struct acpi_ivrs_header
8856e2d5ebdSBob Moore  */
8866e2d5ebdSBob Moore 
8876e2d5ebdSBob Moore /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
8886e2d5ebdSBob Moore 
8896e2d5ebdSBob Moore struct acpi_ivrs_hardware {
8906e2d5ebdSBob Moore 	struct acpi_ivrs_header header;
8916e2d5ebdSBob Moore 	u16 capability_offset;	/* Offset for IOMMU control fields */
8926e2d5ebdSBob Moore 	u64 base_address;	/* IOMMU control registers */
8936e2d5ebdSBob Moore 	u16 pci_segment_group;
8946e2d5ebdSBob Moore 	u16 info;		/* MSI number and unit ID */
8956e2d5ebdSBob Moore 	u32 reserved;
8966e2d5ebdSBob Moore };
8976e2d5ebdSBob Moore 
8986e2d5ebdSBob Moore /* Masks for Info field above */
8996e2d5ebdSBob Moore 
9006e2d5ebdSBob Moore #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F	/* 5 bits, MSI message number */
901ba494beeSBob Moore #define ACPI_IVHD_UNIT_ID_MASK      0x1F00	/* 5 bits, unit_ID */
9026e2d5ebdSBob Moore 
9036e2d5ebdSBob Moore /*
9046e2d5ebdSBob Moore  * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
9056e2d5ebdSBob Moore  * Upper two bits of the Type field are the (encoded) length of the structure.
9066e2d5ebdSBob Moore  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
9076e2d5ebdSBob Moore  * are reserved for future use but not defined.
9086e2d5ebdSBob Moore  */
9096e2d5ebdSBob Moore struct acpi_ivrs_de_header {
9106e2d5ebdSBob Moore 	u8 type;
9116e2d5ebdSBob Moore 	u16 id;
9126e2d5ebdSBob Moore 	u8 data_setting;
9136e2d5ebdSBob Moore };
9146e2d5ebdSBob Moore 
9156e2d5ebdSBob Moore /* Length of device entry is in the top two bits of Type field above */
9166e2d5ebdSBob Moore 
9176e2d5ebdSBob Moore #define ACPI_IVHD_ENTRY_LENGTH      0xC0
9186e2d5ebdSBob Moore 
9196e2d5ebdSBob Moore /* Values for device entry Type field above */
9206e2d5ebdSBob Moore 
9216e2d5ebdSBob Moore enum acpi_ivrs_device_entry_type {
9226e2d5ebdSBob Moore 	/* 4-byte device entries, all use struct acpi_ivrs_device4 */
9236e2d5ebdSBob Moore 
9246e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_PAD4 = 0,
9256e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_ALL = 1,
9266e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_SELECT = 2,
9276e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_START = 3,
9286e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_END = 4,
9296e2d5ebdSBob Moore 
9306e2d5ebdSBob Moore 	/* 8-byte device entries */
9316e2d5ebdSBob Moore 
9326e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_PAD8 = 64,
9336e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_NOT_USED = 65,
9346e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_ALIAS_SELECT = 66,	/* Uses struct acpi_ivrs_device8a */
9356e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_ALIAS_START = 67,	/* Uses struct acpi_ivrs_device8a */
9366e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_EXT_SELECT = 70,	/* Uses struct acpi_ivrs_device8b */
9376e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_EXT_START = 71,	/* Uses struct acpi_ivrs_device8b */
9386e2d5ebdSBob Moore 	ACPI_IVRS_TYPE_SPECIAL = 72	/* Uses struct acpi_ivrs_device8c */
9396e2d5ebdSBob Moore };
9406e2d5ebdSBob Moore 
9416e2d5ebdSBob Moore /* Values for Data field above */
9426e2d5ebdSBob Moore 
9436e2d5ebdSBob Moore #define ACPI_IVHD_INIT_PASS         (1)
9446e2d5ebdSBob Moore #define ACPI_IVHD_EINT_PASS         (1<<1)
9456e2d5ebdSBob Moore #define ACPI_IVHD_NMI_PASS          (1<<2)
9466e2d5ebdSBob Moore #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
9476e2d5ebdSBob Moore #define ACPI_IVHD_LINT0_PASS        (1<<6)
9486e2d5ebdSBob Moore #define ACPI_IVHD_LINT1_PASS        (1<<7)
9496e2d5ebdSBob Moore 
9506e2d5ebdSBob Moore /* Types 0-4: 4-byte device entry */
9516e2d5ebdSBob Moore 
9526e2d5ebdSBob Moore struct acpi_ivrs_device4 {
9536e2d5ebdSBob Moore 	struct acpi_ivrs_de_header header;
9546e2d5ebdSBob Moore };
9556e2d5ebdSBob Moore 
9566e2d5ebdSBob Moore /* Types 66-67: 8-byte device entry */
9576e2d5ebdSBob Moore 
9586e2d5ebdSBob Moore struct acpi_ivrs_device8a {
9596e2d5ebdSBob Moore 	struct acpi_ivrs_de_header header;
9606e2d5ebdSBob Moore 	u8 reserved1;
9616e2d5ebdSBob Moore 	u16 used_id;
9626e2d5ebdSBob Moore 	u8 reserved2;
9636e2d5ebdSBob Moore };
9646e2d5ebdSBob Moore 
9656e2d5ebdSBob Moore /* Types 70-71: 8-byte device entry */
9666e2d5ebdSBob Moore 
9676e2d5ebdSBob Moore struct acpi_ivrs_device8b {
9686e2d5ebdSBob Moore 	struct acpi_ivrs_de_header header;
9696e2d5ebdSBob Moore 	u32 extended_data;
9706e2d5ebdSBob Moore };
9716e2d5ebdSBob Moore 
9726e2d5ebdSBob Moore /* Values for extended_data above */
9736e2d5ebdSBob Moore 
9746e2d5ebdSBob Moore #define ACPI_IVHD_ATS_DISABLED      (1<<31)
9756e2d5ebdSBob Moore 
9766e2d5ebdSBob Moore /* Type 72: 8-byte device entry */
9776e2d5ebdSBob Moore 
9786e2d5ebdSBob Moore struct acpi_ivrs_device8c {
9796e2d5ebdSBob Moore 	struct acpi_ivrs_de_header header;
9806e2d5ebdSBob Moore 	u8 handle;
9816e2d5ebdSBob Moore 	u16 used_id;
9826e2d5ebdSBob Moore 	u8 variety;
9836e2d5ebdSBob Moore };
9846e2d5ebdSBob Moore 
9856e2d5ebdSBob Moore /* Values for Variety field above */
9866e2d5ebdSBob Moore 
9876e2d5ebdSBob Moore #define ACPI_IVHD_IOAPIC            1
9886e2d5ebdSBob Moore #define ACPI_IVHD_HPET              2
9896e2d5ebdSBob Moore 
9906e2d5ebdSBob Moore /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
9916e2d5ebdSBob Moore 
9926e2d5ebdSBob Moore struct acpi_ivrs_memory {
9936e2d5ebdSBob Moore 	struct acpi_ivrs_header header;
9946e2d5ebdSBob Moore 	u16 aux_data;
9956e2d5ebdSBob Moore 	u64 reserved;
9966e2d5ebdSBob Moore 	u64 start_address;
9976e2d5ebdSBob Moore 	u64 memory_length;
9986e2d5ebdSBob Moore };
9996e2d5ebdSBob Moore 
10006e2d5ebdSBob Moore /*******************************************************************************
10016e2d5ebdSBob Moore  *
1002d36d4e30SBob Moore  * LPIT - Low Power Idle Table
1003d36d4e30SBob Moore  *
10049ab8cf1bSBob Moore  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1005d36d4e30SBob Moore  *
1006d36d4e30SBob Moore  ******************************************************************************/
1007d36d4e30SBob Moore 
1008d36d4e30SBob Moore struct acpi_table_lpit {
1009d36d4e30SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
1010d36d4e30SBob Moore };
1011d36d4e30SBob Moore 
1012d36d4e30SBob Moore /* LPIT subtable header */
1013d36d4e30SBob Moore 
1014d36d4e30SBob Moore struct acpi_lpit_header {
1015d36d4e30SBob Moore 	u32 type;		/* Subtable type */
1016d36d4e30SBob Moore 	u32 length;		/* Subtable length */
1017d36d4e30SBob Moore 	u16 unique_id;
1018d36d4e30SBob Moore 	u16 reserved;
1019d36d4e30SBob Moore 	u32 flags;
1020d36d4e30SBob Moore };
1021d36d4e30SBob Moore 
1022d36d4e30SBob Moore /* Values for subtable Type above */
1023d36d4e30SBob Moore 
1024d36d4e30SBob Moore enum acpi_lpit_type {
1025d36d4e30SBob Moore 	ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,
10269ab8cf1bSBob Moore 	ACPI_LPIT_TYPE_RESERVED = 0x01	/* 1 and above are reserved */
1027d36d4e30SBob Moore };
1028d36d4e30SBob Moore 
1029d36d4e30SBob Moore /* Masks for Flags field above  */
1030d36d4e30SBob Moore 
1031d36d4e30SBob Moore #define ACPI_LPIT_STATE_DISABLED    (1)
1032d36d4e30SBob Moore #define ACPI_LPIT_NO_COUNTER        (1<<1)
1033d36d4e30SBob Moore 
1034d36d4e30SBob Moore /*
1035d36d4e30SBob Moore  * LPIT subtables, correspond to Type in struct acpi_lpit_header
1036d36d4e30SBob Moore  */
1037d36d4e30SBob Moore 
1038d36d4e30SBob Moore /* 0x00: Native C-state instruction based LPI structure */
1039d36d4e30SBob Moore 
1040d36d4e30SBob Moore struct acpi_lpit_native {
1041d36d4e30SBob Moore 	struct acpi_lpit_header header;
1042d36d4e30SBob Moore 	struct acpi_generic_address entry_trigger;
1043d36d4e30SBob Moore 	u32 residency;
1044d36d4e30SBob Moore 	u32 latency;
1045d36d4e30SBob Moore 	struct acpi_generic_address residency_counter;
1046d36d4e30SBob Moore 	u64 counter_frequency;
1047d36d4e30SBob Moore };
1048d36d4e30SBob Moore 
1049d36d4e30SBob Moore /*******************************************************************************
1050d36d4e30SBob Moore  *
10511a49b72cSBob Moore  * MCFG - PCI Memory Mapped Configuration table and subtable
10526e2d5ebdSBob Moore  *        Version 1
10536e2d5ebdSBob Moore  *
10546e2d5ebdSBob Moore  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1055b24aad44SBob Moore  *
1056b24aad44SBob Moore  ******************************************************************************/
1057b24aad44SBob Moore 
1058b24aad44SBob Moore struct acpi_table_mcfg {
1059b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
1060b24aad44SBob Moore 	u8 reserved[8];
1061b24aad44SBob Moore };
1062b24aad44SBob Moore 
1063b24aad44SBob Moore /* Subtable */
1064b24aad44SBob Moore 
1065b24aad44SBob Moore struct acpi_mcfg_allocation {
1066b24aad44SBob Moore 	u64 address;		/* Base address, processor-relative */
1067b24aad44SBob Moore 	u16 pci_segment;	/* PCI segment group number */
1068b24aad44SBob Moore 	u8 start_bus_number;	/* Starting PCI Bus number */
1069b24aad44SBob Moore 	u8 end_bus_number;	/* Final PCI Bus number */
1070b24aad44SBob Moore 	u32 reserved;
1071b24aad44SBob Moore };
1072b24aad44SBob Moore 
1073b24aad44SBob Moore /*******************************************************************************
1074b24aad44SBob Moore  *
10750e264f0bSBob Moore  * MCHI - Management Controller Host Interface Table
10760e264f0bSBob Moore  *        Version 1
10770e264f0bSBob Moore  *
10780e264f0bSBob Moore  * Conforms to "Management Component Transport Protocol (MCTP) Host
10790e264f0bSBob Moore  * Interface Specification", Revision 1.0.0a, October 13, 2009
10800e264f0bSBob Moore  *
10810e264f0bSBob Moore  ******************************************************************************/
10820e264f0bSBob Moore 
10830e264f0bSBob Moore struct acpi_table_mchi {
10840e264f0bSBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
10850e264f0bSBob Moore 	u8 interface_type;
10860e264f0bSBob Moore 	u8 protocol;
10870e264f0bSBob Moore 	u64 protocol_data;
10880e264f0bSBob Moore 	u8 interrupt_type;
10890e264f0bSBob Moore 	u8 gpe;
10900e264f0bSBob Moore 	u8 pci_device_flag;
10910e264f0bSBob Moore 	u32 global_interrupt;
10920e264f0bSBob Moore 	struct acpi_generic_address control_register;
10930e264f0bSBob Moore 	u8 pci_segment;
10940e264f0bSBob Moore 	u8 pci_bus;
10950e264f0bSBob Moore 	u8 pci_device;
10960e264f0bSBob Moore 	u8 pci_function;
10970e264f0bSBob Moore };
10980e264f0bSBob Moore 
10990e264f0bSBob Moore /*******************************************************************************
11000e264f0bSBob Moore  *
11015132f2faSBob Moore  * MSDM - Microsoft Data Management table
11025132f2faSBob Moore  *
11035132f2faSBob Moore  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
11045132f2faSBob Moore  * November 29, 2011. Copyright 2011 Microsoft
11055132f2faSBob Moore  *
11065132f2faSBob Moore  ******************************************************************************/
11075132f2faSBob Moore 
11085132f2faSBob Moore /* Basic MSDM table is only the common ACPI header */
11095132f2faSBob Moore 
11105132f2faSBob Moore struct acpi_table_msdm {
11115132f2faSBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
11125132f2faSBob Moore };
11135132f2faSBob Moore 
11145132f2faSBob Moore /*******************************************************************************
11155132f2faSBob Moore  *
111698b5c993SLv Zheng  * MTMR - MID Timer Table
111798b5c993SLv Zheng  *        Version 1
111898b5c993SLv Zheng  *
111998b5c993SLv Zheng  * Conforms to "Simple Firmware Interface Specification",
112098b5c993SLv Zheng  * Draft 0.8.2, Oct 19, 2010
112198b5c993SLv Zheng  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
112298b5c993SLv Zheng  *
112398b5c993SLv Zheng  ******************************************************************************/
112498b5c993SLv Zheng 
112598b5c993SLv Zheng struct acpi_table_mtmr {
112698b5c993SLv Zheng 	struct acpi_table_header header;	/* Common ACPI table header */
112798b5c993SLv Zheng };
112898b5c993SLv Zheng 
112998b5c993SLv Zheng /* MTMR entry */
113098b5c993SLv Zheng 
113198b5c993SLv Zheng struct acpi_mtmr_entry {
113298b5c993SLv Zheng 	struct acpi_generic_address physical_address;
113398b5c993SLv Zheng 	u32 frequency;
113498b5c993SLv Zheng 	u32 irq;
113598b5c993SLv Zheng };
113698b5c993SLv Zheng 
113798b5c993SLv Zheng /*******************************************************************************
113898b5c993SLv Zheng  *
11393bd38469SJames Morse  * SDEI - Software Delegated Exception Interface Descriptor Table
11403bd38469SJames Morse  *
11413bd38469SJames Morse  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
11423bd38469SJames Morse  * May 8th, 2017. Copyright 2017 ARM Ltd.
11433bd38469SJames Morse  *
11443bd38469SJames Morse  ******************************************************************************/
11453bd38469SJames Morse 
11463bd38469SJames Morse struct acpi_table_sdei {
11473bd38469SJames Morse 	struct acpi_table_header header;	/* Common ACPI table header */
11483bd38469SJames Morse };
11493bd38469SJames Morse 
11503bd38469SJames Morse /*******************************************************************************
11513bd38469SJames Morse  *
11525cf4d733SBob Moore  * SLIC - Software Licensing Description Table
11535cf4d733SBob Moore  *
115464645c3fSBob Moore  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
11555132f2faSBob Moore  * November 29, 2011. Copyright 2011 Microsoft
11565cf4d733SBob Moore  *
11575cf4d733SBob Moore  ******************************************************************************/
11585cf4d733SBob Moore 
11595cf4d733SBob Moore /* Basic SLIC table is only the common ACPI header */
11605cf4d733SBob Moore 
11615cf4d733SBob Moore struct acpi_table_slic {
11625cf4d733SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
11635cf4d733SBob Moore };
11645cf4d733SBob Moore 
11655cf4d733SBob Moore /*******************************************************************************
11665cf4d733SBob Moore  *
1167b24aad44SBob Moore  * SPCR - Serial Port Console Redirection table
116829a3f38eSBob Moore  *        Version 2
11696e2d5ebdSBob Moore  *
11706e2d5ebdSBob Moore  * Conforms to "Serial Port Console Redirection Table",
117129a3f38eSBob Moore  * Version 1.03, August 10, 2015
1172b24aad44SBob Moore  *
1173b24aad44SBob Moore  ******************************************************************************/
1174b24aad44SBob Moore 
1175b24aad44SBob Moore struct acpi_table_spcr {
1176b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
1177b24aad44SBob Moore 	u8 interface_type;	/* 0=full 16550, 1=subset of 16550 */
1178b24aad44SBob Moore 	u8 reserved[3];
1179b24aad44SBob Moore 	struct acpi_generic_address serial_port;
1180b24aad44SBob Moore 	u8 interrupt_type;
1181b24aad44SBob Moore 	u8 pc_interrupt;
1182b24aad44SBob Moore 	u32 interrupt;
1183b24aad44SBob Moore 	u8 baud_rate;
1184b24aad44SBob Moore 	u8 parity;
1185b24aad44SBob Moore 	u8 stop_bits;
1186b24aad44SBob Moore 	u8 flow_control;
1187b24aad44SBob Moore 	u8 terminal_type;
1188b24aad44SBob Moore 	u8 reserved1;
1189b24aad44SBob Moore 	u16 pci_device_id;
1190b24aad44SBob Moore 	u16 pci_vendor_id;
1191b24aad44SBob Moore 	u8 pci_bus;
1192b24aad44SBob Moore 	u8 pci_device;
1193b24aad44SBob Moore 	u8 pci_function;
1194b24aad44SBob Moore 	u32 pci_flags;
1195b24aad44SBob Moore 	u8 pci_segment;
1196b24aad44SBob Moore 	u32 reserved2;
1197b24aad44SBob Moore };
1198b24aad44SBob Moore 
11996e2d5ebdSBob Moore /* Masks for pci_flags field above */
12006e2d5ebdSBob Moore 
12016e2d5ebdSBob Moore #define ACPI_SPCR_DO_NOT_DISABLE    (1)
12026e2d5ebdSBob Moore 
120329a3f38eSBob Moore /* Values for Interface Type: See the definition of the DBG2 table */
120429a3f38eSBob Moore 
1205b24aad44SBob Moore /*******************************************************************************
1206b24aad44SBob Moore  *
1207b24aad44SBob Moore  * SPMI - Server Platform Management Interface table
12086e2d5ebdSBob Moore  *        Version 5
12096e2d5ebdSBob Moore  *
12106e2d5ebdSBob Moore  * Conforms to "Intelligent Platform Management Interface Specification
12116e2d5ebdSBob Moore  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
12126e2d5ebdSBob Moore  * June 12, 2009 markup.
1213b24aad44SBob Moore  *
1214b24aad44SBob Moore  ******************************************************************************/
1215b24aad44SBob Moore 
1216b24aad44SBob Moore struct acpi_table_spmi {
1217b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
1218b24aad44SBob Moore 	u8 interface_type;
12196e2d5ebdSBob Moore 	u8 reserved;		/* Must be 1 */
1220b24aad44SBob Moore 	u16 spec_revision;	/* Version of IPMI */
1221b24aad44SBob Moore 	u8 interrupt_type;
1222b24aad44SBob Moore 	u8 gpe_number;		/* GPE assigned */
1223b24aad44SBob Moore 	u8 reserved1;
1224b24aad44SBob Moore 	u8 pci_device_flag;
1225b24aad44SBob Moore 	u32 interrupt;
1226b24aad44SBob Moore 	struct acpi_generic_address ipmi_register;
1227b24aad44SBob Moore 	u8 pci_segment;
1228b24aad44SBob Moore 	u8 pci_bus;
1229b24aad44SBob Moore 	u8 pci_device;
1230b24aad44SBob Moore 	u8 pci_function;
12316e2d5ebdSBob Moore 	u8 reserved2;
12326e2d5ebdSBob Moore };
12336e2d5ebdSBob Moore 
12346e2d5ebdSBob Moore /* Values for interface_type above */
12356e2d5ebdSBob Moore 
12366e2d5ebdSBob Moore enum acpi_spmi_interface_types {
12376e2d5ebdSBob Moore 	ACPI_SPMI_NOT_USED = 0,
12386e2d5ebdSBob Moore 	ACPI_SPMI_KEYBOARD = 1,
12396e2d5ebdSBob Moore 	ACPI_SPMI_SMI = 2,
12406e2d5ebdSBob Moore 	ACPI_SPMI_BLOCK_TRANSFER = 3,
12416e2d5ebdSBob Moore 	ACPI_SPMI_SMBUS = 4,
12426e2d5ebdSBob Moore 	ACPI_SPMI_RESERVED = 5	/* 5 and above are reserved */
1243b24aad44SBob Moore };
1244b24aad44SBob Moore 
1245b24aad44SBob Moore /*******************************************************************************
1246b24aad44SBob Moore  *
1247b24aad44SBob Moore  * TCPA - Trusted Computing Platform Alliance table
12489005694eSBob Moore  *        Version 2
12496e2d5ebdSBob Moore  *
12504c189c9dSBob Moore  * TCG Hardware Interface Table for TPM 1.2 Clients and Servers
12514c189c9dSBob Moore  *
12529005694eSBob Moore  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1253bff7f90bSBob Moore  * Version 1.2, Revision 8
1254bff7f90bSBob Moore  * February 27, 2017
12559005694eSBob Moore  *
12569005694eSBob Moore  * NOTE: There are two versions of the table with the same signature --
125715a61aa1SBob Moore  * the client version and the server version. The common platform_class
125815a61aa1SBob Moore  * field is used to differentiate the two types of tables.
1259b24aad44SBob Moore  *
1260b24aad44SBob Moore  ******************************************************************************/
1261b24aad44SBob Moore 
126215a61aa1SBob Moore struct acpi_table_tcpa_hdr {
1263b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
12649005694eSBob Moore 	u16 platform_class;
126515a61aa1SBob Moore };
126615a61aa1SBob Moore 
126715a61aa1SBob Moore /*
126815a61aa1SBob Moore  * Values for platform_class above.
126915a61aa1SBob Moore  * This is how the client and server subtables are differentiated
127015a61aa1SBob Moore  */
127115a61aa1SBob Moore #define ACPI_TCPA_CLIENT_TABLE          0
127215a61aa1SBob Moore #define ACPI_TCPA_SERVER_TABLE          1
127315a61aa1SBob Moore 
127415a61aa1SBob Moore struct acpi_table_tcpa_client {
12759005694eSBob Moore 	u32 minimum_log_length;	/* Minimum length for the event log area */
1276b24aad44SBob Moore 	u64 log_address;	/* Address of the event log area */
1277b24aad44SBob Moore };
1278b24aad44SBob Moore 
12799005694eSBob Moore struct acpi_table_tcpa_server {
12809005694eSBob Moore 	u16 reserved;
12819005694eSBob Moore 	u64 minimum_log_length;	/* Minimum length for the event log area */
12829005694eSBob Moore 	u64 log_address;	/* Address of the event log area */
12839005694eSBob Moore 	u16 spec_revision;
12849005694eSBob Moore 	u8 device_flags;
12859005694eSBob Moore 	u8 interrupt_flags;
12869005694eSBob Moore 	u8 gpe_number;
12879005694eSBob Moore 	u8 reserved2[3];
12889005694eSBob Moore 	u32 global_interrupt;
12899005694eSBob Moore 	struct acpi_generic_address address;
12909005694eSBob Moore 	u32 reserved3;
12919005694eSBob Moore 	struct acpi_generic_address config_address;
12929005694eSBob Moore 	u8 group;
12939005694eSBob Moore 	u8 bus;			/* PCI Bus/Segment/Function numbers */
12949005694eSBob Moore 	u8 device;
12959005694eSBob Moore 	u8 function;
12969005694eSBob Moore };
12979005694eSBob Moore 
12989005694eSBob Moore /* Values for device_flags above */
12999005694eSBob Moore 
13009005694eSBob Moore #define ACPI_TCPA_PCI_DEVICE            (1)
13019005694eSBob Moore #define ACPI_TCPA_BUS_PNP               (1<<1)
13029005694eSBob Moore #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
13039005694eSBob Moore 
13049005694eSBob Moore /* Values for interrupt_flags above */
13059005694eSBob Moore 
13069005694eSBob Moore #define ACPI_TCPA_INTERRUPT_MODE        (1)
13079005694eSBob Moore #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
13089005694eSBob Moore #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
13099005694eSBob Moore #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
13109005694eSBob Moore 
13119005694eSBob Moore /*******************************************************************************
13129005694eSBob Moore  *
13139005694eSBob Moore  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
13149005694eSBob Moore  *        Version 4
13159005694eSBob Moore  *
13164c189c9dSBob Moore  * TCG Hardware Interface Table for TPM 2.0 Clients and Servers
13174c189c9dSBob Moore  *
13189005694eSBob Moore  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1319bff7f90bSBob Moore  * Version 1.2, Revision 8
1320bff7f90bSBob Moore  * February 27, 2017
13219005694eSBob Moore  *
13229005694eSBob Moore  ******************************************************************************/
13239005694eSBob Moore 
13249005694eSBob Moore struct acpi_table_tpm2 {
13259005694eSBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
13269005694eSBob Moore 	u16 platform_class;
13279005694eSBob Moore 	u16 reserved;
13289005694eSBob Moore 	u64 control_address;
13299005694eSBob Moore 	u32 start_method;
13309005694eSBob Moore 
13319005694eSBob Moore 	/* Platform-specific data follows */
13329005694eSBob Moore };
13339005694eSBob Moore 
1334413d4a6dSBob Moore /* Values for start_method above */
13359005694eSBob Moore 
1336413d4a6dSBob Moore #define ACPI_TPM2_NOT_ALLOWED                       0
13374c189c9dSBob Moore #define ACPI_TPM2_RESERVED1                         1
1338413d4a6dSBob Moore #define ACPI_TPM2_START_METHOD                      2
13394c189c9dSBob Moore #define ACPI_TPM2_RESERVED3                         3
13404c189c9dSBob Moore #define ACPI_TPM2_RESERVED4                         4
13414c189c9dSBob Moore #define ACPI_TPM2_RESERVED5                         5
1342413d4a6dSBob Moore #define ACPI_TPM2_MEMORY_MAPPED                     6
1343413d4a6dSBob Moore #define ACPI_TPM2_COMMAND_BUFFER                    7
1344413d4a6dSBob Moore #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
13454c189c9dSBob Moore #define ACPI_TPM2_RESERVED9                         9
13464c189c9dSBob Moore #define ACPI_TPM2_RESERVED10                        10
1347bff7f90bSBob Moore #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11	/* V1.2 Rev 8 */
13484c189c9dSBob Moore #define ACPI_TPM2_RESERVED                          12
1349bff7f90bSBob Moore 
13504c189c9dSBob Moore /* Optional trailer appears after any start_method subtables */
1351bff7f90bSBob Moore 
1352bff7f90bSBob Moore struct acpi_tpm2_trailer {
13534c189c9dSBob Moore 	u8 method_parameters[12];
1354bff7f90bSBob Moore 	u32 minimum_log_length;	/* Minimum length for the event log area */
1355bff7f90bSBob Moore 	u64 log_address;	/* Address of the event log area */
1356bff7f90bSBob Moore };
1357bff7f90bSBob Moore 
1358bff7f90bSBob Moore /*
1359bff7f90bSBob Moore  * Subtables (start_method-specific)
1360bff7f90bSBob Moore  */
1361bff7f90bSBob Moore 
1362bff7f90bSBob Moore /* 11: Start Method for ARM SMC (V1.2 Rev 8) */
1363bff7f90bSBob Moore 
1364bff7f90bSBob Moore struct acpi_tpm2_arm_smc {
1365bff7f90bSBob Moore 	u32 global_interrupt;
1366bff7f90bSBob Moore 	u8 interrupt_flags;
1367bff7f90bSBob Moore 	u8 operation_flags;
1368bff7f90bSBob Moore 	u16 reserved;
1369bff7f90bSBob Moore 	u32 function_id;
1370bff7f90bSBob Moore };
1371bff7f90bSBob Moore 
1372bff7f90bSBob Moore /* Values for interrupt_flags above */
1373bff7f90bSBob Moore 
1374bff7f90bSBob Moore #define ACPI_TPM2_INTERRUPT_SUPPORT     (1)
1375bff7f90bSBob Moore 
1376bff7f90bSBob Moore /* Values for operation_flags above */
1377bff7f90bSBob Moore 
1378bff7f90bSBob Moore #define ACPI_TPM2_IDLE_SUPPORT          (1)
1379cf8252caSJiandi An 
1380b24aad44SBob Moore /*******************************************************************************
1381b24aad44SBob Moore  *
1382b24aad44SBob Moore  * UEFI - UEFI Boot optimization Table
13836e2d5ebdSBob Moore  *        Version 1
13846e2d5ebdSBob Moore  *
13856e2d5ebdSBob Moore  * Conforms to "Unified Extensible Firmware Interface Specification",
13866e2d5ebdSBob Moore  * Version 2.3, May 8, 2009
1387b24aad44SBob Moore  *
1388b24aad44SBob Moore  ******************************************************************************/
1389b24aad44SBob Moore 
1390b24aad44SBob Moore struct acpi_table_uefi {
1391b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
1392b24aad44SBob Moore 	u8 identifier[16];	/* UUID identifier */
1393b24aad44SBob Moore 	u16 data_offset;	/* Offset of remaining data in table */
1394b24aad44SBob Moore };
1395b24aad44SBob Moore 
1396b24aad44SBob Moore /*******************************************************************************
1397b24aad44SBob Moore  *
139825c0330aSLv Zheng  * VRTC - Virtual Real Time Clock Table
139925c0330aSLv Zheng  *        Version 1
140025c0330aSLv Zheng  *
140125c0330aSLv Zheng  * Conforms to "Simple Firmware Interface Specification",
140225c0330aSLv Zheng  * Draft 0.8.2, Oct 19, 2010
140325c0330aSLv Zheng  * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
140425c0330aSLv Zheng  *
140525c0330aSLv Zheng  ******************************************************************************/
140625c0330aSLv Zheng 
140725c0330aSLv Zheng struct acpi_table_vrtc {
140825c0330aSLv Zheng 	struct acpi_table_header header;	/* Common ACPI table header */
140925c0330aSLv Zheng };
141025c0330aSLv Zheng 
141125c0330aSLv Zheng /* VRTC entry */
141225c0330aSLv Zheng 
141325c0330aSLv Zheng struct acpi_vrtc_entry {
141425c0330aSLv Zheng 	struct acpi_generic_address physical_address;
141525c0330aSLv Zheng 	u32 irq;
141625c0330aSLv Zheng };
141725c0330aSLv Zheng 
141825c0330aSLv Zheng /*******************************************************************************
141925c0330aSLv Zheng  *
14206e2d5ebdSBob Moore  * WAET - Windows ACPI Emulated devices Table
14216e2d5ebdSBob Moore  *        Version 1
14226e2d5ebdSBob Moore  *
14236e2d5ebdSBob Moore  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
14246e2d5ebdSBob Moore  *
14256e2d5ebdSBob Moore  ******************************************************************************/
14266e2d5ebdSBob Moore 
14276e2d5ebdSBob Moore struct acpi_table_waet {
14286e2d5ebdSBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
14296e2d5ebdSBob Moore 	u32 flags;
14306e2d5ebdSBob Moore };
14316e2d5ebdSBob Moore 
14326e2d5ebdSBob Moore /* Masks for Flags field above */
14336e2d5ebdSBob Moore 
14346e2d5ebdSBob Moore #define ACPI_WAET_RTC_NO_ACK        (1)	/* RTC requires no int acknowledge */
14356e2d5ebdSBob Moore #define ACPI_WAET_TIMER_ONE_READ    (1<<1)	/* PM timer requires only one read */
14366e2d5ebdSBob Moore 
14376e2d5ebdSBob Moore /*******************************************************************************
14386e2d5ebdSBob Moore  *
1439b24aad44SBob Moore  * WDAT - Watchdog Action Table
14406e2d5ebdSBob Moore  *        Version 1
14416e2d5ebdSBob Moore  *
14426e2d5ebdSBob Moore  * Conforms to "Hardware Watchdog Timers Design Specification",
14436e2d5ebdSBob Moore  * Copyright 2006 Microsoft Corporation.
1444b24aad44SBob Moore  *
1445b24aad44SBob Moore  ******************************************************************************/
1446b24aad44SBob Moore 
1447b24aad44SBob Moore struct acpi_table_wdat {
1448b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
1449b24aad44SBob Moore 	u32 header_length;	/* Watchdog Header Length */
1450b24aad44SBob Moore 	u16 pci_segment;	/* PCI Segment number */
1451b24aad44SBob Moore 	u8 pci_bus;		/* PCI Bus number */
1452b24aad44SBob Moore 	u8 pci_device;		/* PCI Device number */
1453b24aad44SBob Moore 	u8 pci_function;	/* PCI Function number */
1454b24aad44SBob Moore 	u8 reserved[3];
1455b24aad44SBob Moore 	u32 timer_period;	/* Period of one timer count (msec) */
1456b24aad44SBob Moore 	u32 max_count;		/* Maximum counter value supported */
1457b24aad44SBob Moore 	u32 min_count;		/* Minimum counter value */
1458b24aad44SBob Moore 	u8 flags;
1459b24aad44SBob Moore 	u8 reserved2[3];
1460b24aad44SBob Moore 	u32 entries;		/* Number of watchdog entries that follow */
1461b24aad44SBob Moore };
1462b24aad44SBob Moore 
14636e2d5ebdSBob Moore /* Masks for Flags field above */
14646e2d5ebdSBob Moore 
14656e2d5ebdSBob Moore #define ACPI_WDAT_ENABLED           (1)
14666e2d5ebdSBob Moore #define ACPI_WDAT_STOPPED           0x80
14676e2d5ebdSBob Moore 
1468b24aad44SBob Moore /* WDAT Instruction Entries (actions) */
1469b24aad44SBob Moore 
1470b24aad44SBob Moore struct acpi_wdat_entry {
14716e2d5ebdSBob Moore 	u8 action;
14726e2d5ebdSBob Moore 	u8 instruction;
14736e2d5ebdSBob Moore 	u16 reserved;
14746e2d5ebdSBob Moore 	struct acpi_generic_address register_region;
14756e2d5ebdSBob Moore 	u32 value;		/* Value used with Read/Write register */
14766e2d5ebdSBob Moore 	u32 mask;		/* Bitmask required for this register instruction */
1477b24aad44SBob Moore };
1478b24aad44SBob Moore 
1479b24aad44SBob Moore /* Values for Action field above */
1480b24aad44SBob Moore 
1481b24aad44SBob Moore enum acpi_wdat_actions {
1482b24aad44SBob Moore 	ACPI_WDAT_RESET = 1,
1483b24aad44SBob Moore 	ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1484b24aad44SBob Moore 	ACPI_WDAT_GET_COUNTDOWN = 5,
1485b24aad44SBob Moore 	ACPI_WDAT_SET_COUNTDOWN = 6,
1486b24aad44SBob Moore 	ACPI_WDAT_GET_RUNNING_STATE = 8,
1487b24aad44SBob Moore 	ACPI_WDAT_SET_RUNNING_STATE = 9,
1488b24aad44SBob Moore 	ACPI_WDAT_GET_STOPPED_STATE = 10,
1489b24aad44SBob Moore 	ACPI_WDAT_SET_STOPPED_STATE = 11,
1490b24aad44SBob Moore 	ACPI_WDAT_GET_REBOOT = 16,
1491b24aad44SBob Moore 	ACPI_WDAT_SET_REBOOT = 17,
1492b24aad44SBob Moore 	ACPI_WDAT_GET_SHUTDOWN = 18,
1493b24aad44SBob Moore 	ACPI_WDAT_SET_SHUTDOWN = 19,
1494b24aad44SBob Moore 	ACPI_WDAT_GET_STATUS = 32,
1495b24aad44SBob Moore 	ACPI_WDAT_SET_STATUS = 33,
1496b24aad44SBob Moore 	ACPI_WDAT_ACTION_RESERVED = 34	/* 34 and greater are reserved */
1497b24aad44SBob Moore };
1498b24aad44SBob Moore 
1499b24aad44SBob Moore /* Values for Instruction field above */
1500b24aad44SBob Moore 
1501b24aad44SBob Moore enum acpi_wdat_instructions {
1502b24aad44SBob Moore 	ACPI_WDAT_READ_VALUE = 0,
1503b24aad44SBob Moore 	ACPI_WDAT_READ_COUNTDOWN = 1,
1504b24aad44SBob Moore 	ACPI_WDAT_WRITE_VALUE = 2,
1505b24aad44SBob Moore 	ACPI_WDAT_WRITE_COUNTDOWN = 3,
1506b24aad44SBob Moore 	ACPI_WDAT_INSTRUCTION_RESERVED = 4,	/* 4 and greater are reserved */
1507b24aad44SBob Moore 	ACPI_WDAT_PRESERVE_REGISTER = 0x80	/* Except for this value */
1508b24aad44SBob Moore };
1509b24aad44SBob Moore 
1510b24aad44SBob Moore /*******************************************************************************
1511b24aad44SBob Moore  *
15129d8b5e7bSBob Moore  * WDDT - Watchdog Descriptor Table
15139d8b5e7bSBob Moore  *        Version 1
15149d8b5e7bSBob Moore  *
15159d8b5e7bSBob Moore  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
15169d8b5e7bSBob Moore  * Version 001, September 2002
15179d8b5e7bSBob Moore  *
15189d8b5e7bSBob Moore  ******************************************************************************/
15199d8b5e7bSBob Moore 
15209d8b5e7bSBob Moore struct acpi_table_wddt {
15219d8b5e7bSBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
15229d8b5e7bSBob Moore 	u16 spec_version;
15239d8b5e7bSBob Moore 	u16 table_version;
15249d8b5e7bSBob Moore 	u16 pci_vendor_id;
15259d8b5e7bSBob Moore 	struct acpi_generic_address address;
15269d8b5e7bSBob Moore 	u16 max_count;		/* Maximum counter value supported */
15279d8b5e7bSBob Moore 	u16 min_count;		/* Minimum counter value supported */
15289d8b5e7bSBob Moore 	u16 period;
15299d8b5e7bSBob Moore 	u16 status;
15309d8b5e7bSBob Moore 	u16 capability;
15319d8b5e7bSBob Moore };
15329d8b5e7bSBob Moore 
15339d8b5e7bSBob Moore /* Flags for Status field above */
15349d8b5e7bSBob Moore 
15359d8b5e7bSBob Moore #define ACPI_WDDT_AVAILABLE     (1)
15369d8b5e7bSBob Moore #define ACPI_WDDT_ACTIVE        (1<<1)
15379d8b5e7bSBob Moore #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
15389d8b5e7bSBob Moore #define ACPI_WDDT_USER_RESET    (1<<11)
15399d8b5e7bSBob Moore #define ACPI_WDDT_WDT_RESET     (1<<12)
15409d8b5e7bSBob Moore #define ACPI_WDDT_POWER_FAIL    (1<<13)
15419d8b5e7bSBob Moore #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
15429d8b5e7bSBob Moore 
15439d8b5e7bSBob Moore /* Flags for Capability field above */
15449d8b5e7bSBob Moore 
15459d8b5e7bSBob Moore #define ACPI_WDDT_AUTO_RESET    (1)
15469d8b5e7bSBob Moore #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
15479d8b5e7bSBob Moore 
15489d8b5e7bSBob Moore /*******************************************************************************
15499d8b5e7bSBob Moore  *
1550b24aad44SBob Moore  * WDRT - Watchdog Resource Table
15516e2d5ebdSBob Moore  *        Version 1
15526e2d5ebdSBob Moore  *
15536e2d5ebdSBob Moore  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
15546e2d5ebdSBob Moore  * Version 1.01, August 28, 2006
1555b24aad44SBob Moore  *
1556b24aad44SBob Moore  ******************************************************************************/
1557b24aad44SBob Moore 
1558b24aad44SBob Moore struct acpi_table_wdrt {
1559b24aad44SBob Moore 	struct acpi_table_header header;	/* Common ACPI table header */
15606e2d5ebdSBob Moore 	struct acpi_generic_address control_register;
15616e2d5ebdSBob Moore 	struct acpi_generic_address count_register;
15626e2d5ebdSBob Moore 	u16 pci_device_id;
15636e2d5ebdSBob Moore 	u16 pci_vendor_id;
1564b24aad44SBob Moore 	u8 pci_bus;		/* PCI Bus number */
1565b24aad44SBob Moore 	u8 pci_device;		/* PCI Device number */
1566b24aad44SBob Moore 	u8 pci_function;	/* PCI Function number */
15676e2d5ebdSBob Moore 	u8 pci_segment;		/* PCI Segment number */
15686e2d5ebdSBob Moore 	u16 max_count;		/* Maximum counter value supported */
15696e2d5ebdSBob Moore 	u8 units;
1570b24aad44SBob Moore };
1571b24aad44SBob Moore 
1572e6ab3b77SLv Zheng /*******************************************************************************
1573e6ab3b77SLv Zheng  *
1574e6ab3b77SLv Zheng  * WSMT - Windows SMM Security Migrations Table
1575e6ab3b77SLv Zheng  *        Version 1
1576e6ab3b77SLv Zheng  *
1577e6ab3b77SLv Zheng  * Conforms to "Windows SMM Security Migrations Table",
1578e6ab3b77SLv Zheng  * Version 1.0, April 18, 2016
1579e6ab3b77SLv Zheng  *
1580e6ab3b77SLv Zheng  ******************************************************************************/
1581e6ab3b77SLv Zheng 
1582e6ab3b77SLv Zheng struct acpi_table_wsmt {
1583e6ab3b77SLv Zheng 	struct acpi_table_header header;	/* Common ACPI table header */
1584e6ab3b77SLv Zheng 	u32 protection_flags;
1585e6ab3b77SLv Zheng };
1586e6ab3b77SLv Zheng 
1587e6ab3b77SLv Zheng /* Flags for protection_flags field above */
1588e6ab3b77SLv Zheng 
1589e6ab3b77SLv Zheng #define ACPI_WSMT_FIXED_COMM_BUFFERS                (1)
1590e6ab3b77SLv Zheng #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
1591e6ab3b77SLv Zheng #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION        (4)
1592e6ab3b77SLv Zheng 
15936e596084SRobert Moore /* Reset to default packing */
15946e596084SRobert Moore 
15956e596084SRobert Moore #pragma pack()
1596b24aad44SBob Moore 
1597b24aad44SBob Moore #endif				/* __ACTBL2_H__ */
1598