xref: /freebsd/sys/contrib/dev/acpica/include/actbl2.h (revision 0d84335f991f528c6f038e79dd5cc0a7770532da)
1d6dd1baeSJung-uk Kim /******************************************************************************
2d6dd1baeSJung-uk Kim  *
3dcbce41eSJung-uk Kim  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4d6dd1baeSJung-uk Kim  *
5d6dd1baeSJung-uk Kim  *****************************************************************************/
6d6dd1baeSJung-uk Kim 
7*0d84335fSJung-uk Kim /******************************************************************************
8*0d84335fSJung-uk Kim  *
9*0d84335fSJung-uk Kim  * 1. Copyright Notice
10*0d84335fSJung-uk Kim  *
11*0d84335fSJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
12d6dd1baeSJung-uk Kim  * All rights reserved.
13d6dd1baeSJung-uk Kim  *
14*0d84335fSJung-uk Kim  * 2. License
15*0d84335fSJung-uk Kim  *
16*0d84335fSJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
17*0d84335fSJung-uk Kim  * rights. You may have additional license terms from the party that provided
18*0d84335fSJung-uk Kim  * you this software, covering your right to use that party's intellectual
19*0d84335fSJung-uk Kim  * property rights.
20*0d84335fSJung-uk Kim  *
21*0d84335fSJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22*0d84335fSJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
23*0d84335fSJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24*0d84335fSJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
25*0d84335fSJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
26*0d84335fSJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
27*0d84335fSJung-uk Kim  *
28*0d84335fSJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29*0d84335fSJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
30*0d84335fSJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
31*0d84335fSJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
32*0d84335fSJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
33*0d84335fSJung-uk Kim  * license, and in no event shall the patent license extend to any additions
34*0d84335fSJung-uk Kim  * to or modifications of the Original Intel Code. No other license or right
35*0d84335fSJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
36*0d84335fSJung-uk Kim  *
37*0d84335fSJung-uk Kim  * The above copyright and patent license is granted only if the following
38*0d84335fSJung-uk Kim  * conditions are met:
39*0d84335fSJung-uk Kim  *
40*0d84335fSJung-uk Kim  * 3. Conditions
41*0d84335fSJung-uk Kim  *
42*0d84335fSJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43*0d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
44*0d84335fSJung-uk Kim  * Code or modification with rights to further distribute source must include
45*0d84335fSJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
46*0d84335fSJung-uk Kim  * and the following Disclaimer and Export Compliance provision. In addition,
47*0d84335fSJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
48*0d84335fSJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
49*0d84335fSJung-uk Kim  * Code and the date of any change. Licensee must include in that file the
50*0d84335fSJung-uk Kim  * documentation of any changes made by any predecessor Licensee. Licensee
51*0d84335fSJung-uk Kim  * must include a prominent statement that the modification is derived,
52*0d84335fSJung-uk Kim  * directly or indirectly, from Original Intel Code.
53*0d84335fSJung-uk Kim  *
54*0d84335fSJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55*0d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
56*0d84335fSJung-uk Kim  * Code or modification without rights to further distribute source must
57*0d84335fSJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
58*0d84335fSJung-uk Kim  * documentation and/or other materials provided with distribution. In
59*0d84335fSJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
60*0d84335fSJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
61*0d84335fSJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
62*0d84335fSJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
63*0d84335fSJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
64*0d84335fSJung-uk Kim  * make.
65*0d84335fSJung-uk Kim  *
66*0d84335fSJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
67*0d84335fSJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
68*0d84335fSJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
69*0d84335fSJung-uk Kim  * provision in the documentation and/or other materials provided with the
70*0d84335fSJung-uk Kim  * distribution.
71*0d84335fSJung-uk Kim  *
72*0d84335fSJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
73*0d84335fSJung-uk Kim  * Intel Code.
74*0d84335fSJung-uk Kim  *
75*0d84335fSJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76*0d84335fSJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
77*0d84335fSJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
78*0d84335fSJung-uk Kim  * without prior written authorization from Intel.
79*0d84335fSJung-uk Kim  *
80*0d84335fSJung-uk Kim  * 4. Disclaimer and Export Compliance
81*0d84335fSJung-uk Kim  *
82*0d84335fSJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83*0d84335fSJung-uk Kim  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84*0d84335fSJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85*0d84335fSJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86*0d84335fSJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87*0d84335fSJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88*0d84335fSJung-uk Kim  * PARTICULAR PURPOSE.
89*0d84335fSJung-uk Kim  *
90*0d84335fSJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91*0d84335fSJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92*0d84335fSJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93*0d84335fSJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94*0d84335fSJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95*0d84335fSJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96*0d84335fSJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97*0d84335fSJung-uk Kim  * LIMITED REMEDY.
98*0d84335fSJung-uk Kim  *
99*0d84335fSJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
100*0d84335fSJung-uk Kim  * software or system incorporating such software without first obtaining any
101*0d84335fSJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
102*0d84335fSJung-uk Kim  * any other agency or department of the United States Government. In the
103*0d84335fSJung-uk Kim  * event Licensee exports any such software from the United States or
104*0d84335fSJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
105*0d84335fSJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
106*0d84335fSJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
107*0d84335fSJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108*0d84335fSJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
109*0d84335fSJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
110*0d84335fSJung-uk Kim  * United States government or any agency thereof requires an export license,
111*0d84335fSJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
112*0d84335fSJung-uk Kim  * such license, approval or letter.
113*0d84335fSJung-uk Kim  *
114*0d84335fSJung-uk Kim  *****************************************************************************
115*0d84335fSJung-uk Kim  *
116*0d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
117*0d84335fSJung-uk Kim  * following license:
118*0d84335fSJung-uk Kim  *
119d244b227SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
120d244b227SJung-uk Kim  * modification, are permitted provided that the following conditions
121d244b227SJung-uk Kim  * are met:
122d244b227SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
123d244b227SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
124d244b227SJung-uk Kim  *    without modification.
125d244b227SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126d244b227SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
127d244b227SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
128d244b227SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
129d244b227SJung-uk Kim  *    binary redistribution.
130d244b227SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
131d244b227SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
132d244b227SJung-uk Kim  *    from this software without specific prior written permission.
133d6dd1baeSJung-uk Kim  *
134*0d84335fSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135*0d84335fSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136*0d84335fSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137*0d84335fSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138*0d84335fSJung-uk Kim  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139*0d84335fSJung-uk Kim  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140*0d84335fSJung-uk Kim  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141*0d84335fSJung-uk Kim  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142*0d84335fSJung-uk Kim  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143*0d84335fSJung-uk Kim  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144*0d84335fSJung-uk Kim  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145*0d84335fSJung-uk Kim  *
146*0d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
147d244b227SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
148d244b227SJung-uk Kim  * Software Foundation.
149d6dd1baeSJung-uk Kim  *
150*0d84335fSJung-uk Kim  *****************************************************************************/
151d6dd1baeSJung-uk Kim 
152d6dd1baeSJung-uk Kim #ifndef __ACTBL2_H__
153d6dd1baeSJung-uk Kim #define __ACTBL2_H__
154d6dd1baeSJung-uk Kim 
155d6dd1baeSJung-uk Kim 
156d6dd1baeSJung-uk Kim /*******************************************************************************
157d6dd1baeSJung-uk Kim  *
158d6dd1baeSJung-uk Kim  * Additional ACPI Tables (2)
159d6dd1baeSJung-uk Kim  *
160d6dd1baeSJung-uk Kim  * These tables are not consumed directly by the ACPICA subsystem, but are
161d6dd1baeSJung-uk Kim  * included here to support device drivers and the AML disassembler.
162d6dd1baeSJung-uk Kim  *
1635ef50723SJung-uk Kim  * Generally, the tables in this file are defined by third-party specifications,
1645ef50723SJung-uk Kim  * and are not defined directly by the ACPI specification itself.
165d6dd1baeSJung-uk Kim  *
166d6dd1baeSJung-uk Kim  ******************************************************************************/
167d6dd1baeSJung-uk Kim 
168d6dd1baeSJung-uk Kim 
169d6dd1baeSJung-uk Kim /*
170d6dd1baeSJung-uk Kim  * Values for description table header signatures for tables defined in this
171d6dd1baeSJung-uk Kim  * file. Useful because they make it more difficult to inadvertently type in
172d6dd1baeSJung-uk Kim  * the wrong signature.
173d6dd1baeSJung-uk Kim  */
174d6dd1baeSJung-uk Kim #define ACPI_SIG_ASF            "ASF!"      /* Alert Standard Format table */
175d6dd1baeSJung-uk Kim #define ACPI_SIG_BOOT           "BOOT"      /* Simple Boot Flag Table */
1761df130f1SJung-uk Kim #define ACPI_SIG_CSRT           "CSRT"      /* Core System Resource Table */
1771df130f1SJung-uk Kim #define ACPI_SIG_DBG2           "DBG2"      /* Debug Port table type 2 */
178d6dd1baeSJung-uk Kim #define ACPI_SIG_DBGP           "DBGP"      /* Debug Port table */
179d6dd1baeSJung-uk Kim #define ACPI_SIG_DMAR           "DMAR"      /* DMA Remapping table */
180d6dd1baeSJung-uk Kim #define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
181d6dd1baeSJung-uk Kim #define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
182a371a5fdSJung-uk Kim #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
183d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
184313a0c13SJung-uk Kim #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
185d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
186ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
1877cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
1889c48c75eSJung-uk Kim #define ACPI_SIG_MTMR           "MTMR"      /* MID Timer table */
189d6dd1baeSJung-uk Kim #define ACPI_SIG_SLIC           "SLIC"      /* Software Licensing Description Table */
190d6dd1baeSJung-uk Kim #define ACPI_SIG_SPCR           "SPCR"      /* Serial Port Console Redirection table */
191d6dd1baeSJung-uk Kim #define ACPI_SIG_SPMI           "SPMI"      /* Server Platform Management Interface table */
192d6dd1baeSJung-uk Kim #define ACPI_SIG_TCPA           "TCPA"      /* Trusted Computing Platform Alliance table */
1935ef50723SJung-uk Kim #define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
194d6dd1baeSJung-uk Kim #define ACPI_SIG_UEFI           "UEFI"      /* Uefi Boot Optimization Table */
1959c48c75eSJung-uk Kim #define ACPI_SIG_VRTC           "VRTC"      /* Virtual Real Time Clock Table */
196d6dd1baeSJung-uk Kim #define ACPI_SIG_WAET           "WAET"      /* Windows ACPI Emulated devices Table */
197d6dd1baeSJung-uk Kim #define ACPI_SIG_WDAT           "WDAT"      /* Watchdog Action Table */
198a88e22b7SJung-uk Kim #define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
199d6dd1baeSJung-uk Kim #define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
200*0d84335fSJung-uk Kim #define ACPI_SIG_XXXX           "XXXX"      /* Intermediate AML header for ASL/ASL+ converter */
201d6dd1baeSJung-uk Kim 
202a88e22b7SJung-uk Kim #ifdef ACPI_UNDEFINED_TABLES
203a88e22b7SJung-uk Kim /*
204a88e22b7SJung-uk Kim  * These tables have been seen in the field, but no definition has been found
205a88e22b7SJung-uk Kim  */
206a88e22b7SJung-uk Kim #define ACPI_SIG_ATKG           "ATKG"
207a88e22b7SJung-uk Kim #define ACPI_SIG_GSCI           "GSCI"      /* GMCH SCI table */
208a88e22b7SJung-uk Kim #define ACPI_SIG_IEIT           "IEIT"
209a88e22b7SJung-uk Kim #endif
210d6dd1baeSJung-uk Kim 
211d6dd1baeSJung-uk Kim /*
212d6dd1baeSJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
213d6dd1baeSJung-uk Kim  * the tables are provided by the system BIOS.
214d6dd1baeSJung-uk Kim  */
215d6dd1baeSJung-uk Kim #pragma pack(1)
216d6dd1baeSJung-uk Kim 
217d6dd1baeSJung-uk Kim /*
2181df130f1SJung-uk Kim  * Note: C bitfields are not used for this reason:
2191df130f1SJung-uk Kim  *
2201df130f1SJung-uk Kim  * "Bitfields are great and easy to read, but unfortunately the C language
2211df130f1SJung-uk Kim  * does not specify the layout of bitfields in memory, which means they are
2221df130f1SJung-uk Kim  * essentially useless for dealing with packed data in on-disk formats or
2231df130f1SJung-uk Kim  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
2241df130f1SJung-uk Kim  * this decision was a design error in C. Ritchie could have picked an order
2251df130f1SJung-uk Kim  * and stuck with it." Norman Ramsey.
2261df130f1SJung-uk Kim  * See http://stackoverflow.com/a/1053662/41661
227d6dd1baeSJung-uk Kim  */
228d6dd1baeSJung-uk Kim 
229d6dd1baeSJung-uk Kim 
230d6dd1baeSJung-uk Kim /*******************************************************************************
231d6dd1baeSJung-uk Kim  *
232d6dd1baeSJung-uk Kim  * ASF - Alert Standard Format table (Signature "ASF!")
233d6dd1baeSJung-uk Kim  *       Revision 0x10
234d6dd1baeSJung-uk Kim  *
235d6dd1baeSJung-uk Kim  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
236d6dd1baeSJung-uk Kim  *
237d6dd1baeSJung-uk Kim  ******************************************************************************/
238d6dd1baeSJung-uk Kim 
239d6dd1baeSJung-uk Kim typedef struct acpi_table_asf
240d6dd1baeSJung-uk Kim {
241d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
242d6dd1baeSJung-uk Kim 
243d6dd1baeSJung-uk Kim } ACPI_TABLE_ASF;
244d6dd1baeSJung-uk Kim 
245d6dd1baeSJung-uk Kim 
246d6dd1baeSJung-uk Kim /* ASF subtable header */
247d6dd1baeSJung-uk Kim 
248d6dd1baeSJung-uk Kim typedef struct acpi_asf_header
249d6dd1baeSJung-uk Kim {
250d6dd1baeSJung-uk Kim     UINT8                   Type;
251d6dd1baeSJung-uk Kim     UINT8                   Reserved;
252d6dd1baeSJung-uk Kim     UINT16                  Length;
253d6dd1baeSJung-uk Kim 
254d6dd1baeSJung-uk Kim } ACPI_ASF_HEADER;
255d6dd1baeSJung-uk Kim 
256d6dd1baeSJung-uk Kim 
257d6dd1baeSJung-uk Kim /* Values for Type field above */
258d6dd1baeSJung-uk Kim 
259d6dd1baeSJung-uk Kim enum AcpiAsfType
260d6dd1baeSJung-uk Kim {
261d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_INFO          = 0,
262d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_ALERT         = 1,
263d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_CONTROL       = 2,
264d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_BOOT          = 3,
265d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_ADDRESS       = 4,
266d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_RESERVED      = 5
267d6dd1baeSJung-uk Kim };
268d6dd1baeSJung-uk Kim 
269d6dd1baeSJung-uk Kim /*
270d6dd1baeSJung-uk Kim  * ASF subtables
271d6dd1baeSJung-uk Kim  */
272d6dd1baeSJung-uk Kim 
273d6dd1baeSJung-uk Kim /* 0: ASF Information */
274d6dd1baeSJung-uk Kim 
275d6dd1baeSJung-uk Kim typedef struct acpi_asf_info
276d6dd1baeSJung-uk Kim {
277d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
278d6dd1baeSJung-uk Kim     UINT8                   MinResetValue;
279d6dd1baeSJung-uk Kim     UINT8                   MinPollInterval;
280d6dd1baeSJung-uk Kim     UINT16                  SystemId;
281d6dd1baeSJung-uk Kim     UINT32                  MfgId;
282d6dd1baeSJung-uk Kim     UINT8                   Flags;
283d6dd1baeSJung-uk Kim     UINT8                   Reserved2[3];
284d6dd1baeSJung-uk Kim 
285d6dd1baeSJung-uk Kim } ACPI_ASF_INFO;
286d6dd1baeSJung-uk Kim 
287d6dd1baeSJung-uk Kim /* Masks for Flags field above */
288d6dd1baeSJung-uk Kim 
289d6dd1baeSJung-uk Kim #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
290d6dd1baeSJung-uk Kim 
291d6dd1baeSJung-uk Kim 
292d6dd1baeSJung-uk Kim /* 1: ASF Alerts */
293d6dd1baeSJung-uk Kim 
294d6dd1baeSJung-uk Kim typedef struct acpi_asf_alert
295d6dd1baeSJung-uk Kim {
296d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
297d6dd1baeSJung-uk Kim     UINT8                   AssertMask;
298d6dd1baeSJung-uk Kim     UINT8                   DeassertMask;
299d6dd1baeSJung-uk Kim     UINT8                   Alerts;
300d6dd1baeSJung-uk Kim     UINT8                   DataLength;
301d6dd1baeSJung-uk Kim 
302d6dd1baeSJung-uk Kim } ACPI_ASF_ALERT;
303d6dd1baeSJung-uk Kim 
304d6dd1baeSJung-uk Kim typedef struct acpi_asf_alert_data
305d6dd1baeSJung-uk Kim {
306d6dd1baeSJung-uk Kim     UINT8                   Address;
307d6dd1baeSJung-uk Kim     UINT8                   Command;
308d6dd1baeSJung-uk Kim     UINT8                   Mask;
309d6dd1baeSJung-uk Kim     UINT8                   Value;
310d6dd1baeSJung-uk Kim     UINT8                   SensorType;
311d6dd1baeSJung-uk Kim     UINT8                   Type;
312d6dd1baeSJung-uk Kim     UINT8                   Offset;
313d6dd1baeSJung-uk Kim     UINT8                   SourceType;
314d6dd1baeSJung-uk Kim     UINT8                   Severity;
315d6dd1baeSJung-uk Kim     UINT8                   SensorNumber;
316d6dd1baeSJung-uk Kim     UINT8                   Entity;
317d6dd1baeSJung-uk Kim     UINT8                   Instance;
318d6dd1baeSJung-uk Kim 
319d6dd1baeSJung-uk Kim } ACPI_ASF_ALERT_DATA;
320d6dd1baeSJung-uk Kim 
321d6dd1baeSJung-uk Kim 
322d6dd1baeSJung-uk Kim /* 2: ASF Remote Control */
323d6dd1baeSJung-uk Kim 
324d6dd1baeSJung-uk Kim typedef struct acpi_asf_remote
325d6dd1baeSJung-uk Kim {
326d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
327d6dd1baeSJung-uk Kim     UINT8                   Controls;
328d6dd1baeSJung-uk Kim     UINT8                   DataLength;
329d6dd1baeSJung-uk Kim     UINT16                  Reserved2;
330d6dd1baeSJung-uk Kim 
331d6dd1baeSJung-uk Kim } ACPI_ASF_REMOTE;
332d6dd1baeSJung-uk Kim 
333d6dd1baeSJung-uk Kim typedef struct acpi_asf_control_data
334d6dd1baeSJung-uk Kim {
335d6dd1baeSJung-uk Kim     UINT8                   Function;
336d6dd1baeSJung-uk Kim     UINT8                   Address;
337d6dd1baeSJung-uk Kim     UINT8                   Command;
338d6dd1baeSJung-uk Kim     UINT8                   Value;
339d6dd1baeSJung-uk Kim 
340d6dd1baeSJung-uk Kim } ACPI_ASF_CONTROL_DATA;
341d6dd1baeSJung-uk Kim 
342d6dd1baeSJung-uk Kim 
343d6dd1baeSJung-uk Kim /* 3: ASF RMCP Boot Options */
344d6dd1baeSJung-uk Kim 
345d6dd1baeSJung-uk Kim typedef struct acpi_asf_rmcp
346d6dd1baeSJung-uk Kim {
347d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
348d6dd1baeSJung-uk Kim     UINT8                   Capabilities[7];
349d6dd1baeSJung-uk Kim     UINT8                   CompletionCode;
350d6dd1baeSJung-uk Kim     UINT32                  EnterpriseId;
351d6dd1baeSJung-uk Kim     UINT8                   Command;
352d6dd1baeSJung-uk Kim     UINT16                  Parameter;
353d6dd1baeSJung-uk Kim     UINT16                  BootOptions;
354d6dd1baeSJung-uk Kim     UINT16                  OemParameters;
355d6dd1baeSJung-uk Kim 
356d6dd1baeSJung-uk Kim } ACPI_ASF_RMCP;
357d6dd1baeSJung-uk Kim 
358d6dd1baeSJung-uk Kim 
359d6dd1baeSJung-uk Kim /* 4: ASF Address */
360d6dd1baeSJung-uk Kim 
361d6dd1baeSJung-uk Kim typedef struct acpi_asf_address
362d6dd1baeSJung-uk Kim {
363d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
364d6dd1baeSJung-uk Kim     UINT8                   EpromAddress;
365d6dd1baeSJung-uk Kim     UINT8                   Devices;
366d6dd1baeSJung-uk Kim 
367d6dd1baeSJung-uk Kim } ACPI_ASF_ADDRESS;
368d6dd1baeSJung-uk Kim 
369d6dd1baeSJung-uk Kim 
370d6dd1baeSJung-uk Kim /*******************************************************************************
371d6dd1baeSJung-uk Kim  *
372d6dd1baeSJung-uk Kim  * BOOT - Simple Boot Flag Table
373d6dd1baeSJung-uk Kim  *        Version 1
374d6dd1baeSJung-uk Kim  *
375d6dd1baeSJung-uk Kim  * Conforms to the "Simple Boot Flag Specification", Version 2.1
376d6dd1baeSJung-uk Kim  *
377d6dd1baeSJung-uk Kim  ******************************************************************************/
378d6dd1baeSJung-uk Kim 
379d6dd1baeSJung-uk Kim typedef struct acpi_table_boot
380d6dd1baeSJung-uk Kim {
381d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
382d6dd1baeSJung-uk Kim     UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
383d6dd1baeSJung-uk Kim     UINT8                   Reserved[3];
384d6dd1baeSJung-uk Kim 
385d6dd1baeSJung-uk Kim } ACPI_TABLE_BOOT;
386d6dd1baeSJung-uk Kim 
387d6dd1baeSJung-uk Kim 
388d6dd1baeSJung-uk Kim /*******************************************************************************
389d6dd1baeSJung-uk Kim  *
3901df130f1SJung-uk Kim  * CSRT - Core System Resource Table
3911df130f1SJung-uk Kim  *        Version 0
3921df130f1SJung-uk Kim  *
3931df130f1SJung-uk Kim  * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
3941df130f1SJung-uk Kim  *
3951df130f1SJung-uk Kim  ******************************************************************************/
3961df130f1SJung-uk Kim 
3971df130f1SJung-uk Kim typedef struct acpi_table_csrt
3981df130f1SJung-uk Kim {
3991df130f1SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
4001df130f1SJung-uk Kim 
4011df130f1SJung-uk Kim } ACPI_TABLE_CSRT;
4021df130f1SJung-uk Kim 
403efcc2a30SJung-uk Kim 
4041df130f1SJung-uk Kim /* Resource Group subtable */
4051df130f1SJung-uk Kim 
4061df130f1SJung-uk Kim typedef struct acpi_csrt_group
4071df130f1SJung-uk Kim {
4081df130f1SJung-uk Kim     UINT32                  Length;
4091df130f1SJung-uk Kim     UINT32                  VendorId;
4101df130f1SJung-uk Kim     UINT32                  SubvendorId;
4111df130f1SJung-uk Kim     UINT16                  DeviceId;
4121df130f1SJung-uk Kim     UINT16                  SubdeviceId;
4131df130f1SJung-uk Kim     UINT16                  Revision;
4141df130f1SJung-uk Kim     UINT16                  Reserved;
415efcc2a30SJung-uk Kim     UINT32                  SharedInfoLength;
4161df130f1SJung-uk Kim 
417efcc2a30SJung-uk Kim     /* Shared data immediately follows (Length = SharedInfoLength) */
4181df130f1SJung-uk Kim 
4191df130f1SJung-uk Kim } ACPI_CSRT_GROUP;
4201df130f1SJung-uk Kim 
421efcc2a30SJung-uk Kim /* Shared Info subtable */
422efcc2a30SJung-uk Kim 
423efcc2a30SJung-uk Kim typedef struct acpi_csrt_shared_info
424efcc2a30SJung-uk Kim {
425efcc2a30SJung-uk Kim     UINT16                  MajorVersion;
426efcc2a30SJung-uk Kim     UINT16                  MinorVersion;
427efcc2a30SJung-uk Kim     UINT32                  MmioBaseLow;
428efcc2a30SJung-uk Kim     UINT32                  MmioBaseHigh;
429efcc2a30SJung-uk Kim     UINT32                  GsiInterrupt;
430efcc2a30SJung-uk Kim     UINT8                   InterruptPolarity;
431efcc2a30SJung-uk Kim     UINT8                   InterruptMode;
432efcc2a30SJung-uk Kim     UINT8                   NumChannels;
433efcc2a30SJung-uk Kim     UINT8                   DmaAddressWidth;
434efcc2a30SJung-uk Kim     UINT16                  BaseRequestLine;
435efcc2a30SJung-uk Kim     UINT16                  NumHandshakeSignals;
436efcc2a30SJung-uk Kim     UINT32                  MaxBlockSize;
437efcc2a30SJung-uk Kim 
438efcc2a30SJung-uk Kim     /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */
439efcc2a30SJung-uk Kim 
440efcc2a30SJung-uk Kim } ACPI_CSRT_SHARED_INFO;
441efcc2a30SJung-uk Kim 
4421df130f1SJung-uk Kim /* Resource Descriptor subtable */
4431df130f1SJung-uk Kim 
4441df130f1SJung-uk Kim typedef struct acpi_csrt_descriptor
4451df130f1SJung-uk Kim {
4461df130f1SJung-uk Kim     UINT32                  Length;
4471df130f1SJung-uk Kim     UINT16                  Type;
4481df130f1SJung-uk Kim     UINT16                  Subtype;
4491df130f1SJung-uk Kim     UINT32                  Uid;
4501df130f1SJung-uk Kim 
4511df130f1SJung-uk Kim     /* Resource-specific information immediately follows */
4521df130f1SJung-uk Kim 
4531df130f1SJung-uk Kim } ACPI_CSRT_DESCRIPTOR;
4541df130f1SJung-uk Kim 
4551df130f1SJung-uk Kim 
4561df130f1SJung-uk Kim /* Resource Types */
4571df130f1SJung-uk Kim 
4581df130f1SJung-uk Kim #define ACPI_CSRT_TYPE_INTERRUPT    0x0001
4591df130f1SJung-uk Kim #define ACPI_CSRT_TYPE_TIMER        0x0002
4601df130f1SJung-uk Kim #define ACPI_CSRT_TYPE_DMA          0x0003
4611df130f1SJung-uk Kim 
4621df130f1SJung-uk Kim /* Resource Subtypes */
4631df130f1SJung-uk Kim 
4641df130f1SJung-uk Kim #define ACPI_CSRT_XRUPT_LINE        0x0000
4651df130f1SJung-uk Kim #define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
4661df130f1SJung-uk Kim #define ACPI_CSRT_TIMER             0x0000
4671df130f1SJung-uk Kim #define ACPI_CSRT_DMA_CHANNEL       0x0000
4681df130f1SJung-uk Kim #define ACPI_CSRT_DMA_CONTROLLER    0x0001
4691df130f1SJung-uk Kim 
4701df130f1SJung-uk Kim 
4711df130f1SJung-uk Kim /*******************************************************************************
4721df130f1SJung-uk Kim  *
4731df130f1SJung-uk Kim  * DBG2 - Debug Port Table 2
4741df130f1SJung-uk Kim  *        Version 0 (Both main table and subtables)
4751df130f1SJung-uk Kim  *
476f8146b88SJung-uk Kim  * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015
4771df130f1SJung-uk Kim  *
4781df130f1SJung-uk Kim  ******************************************************************************/
4791df130f1SJung-uk Kim 
4801df130f1SJung-uk Kim typedef struct acpi_table_dbg2
4811df130f1SJung-uk Kim {
4821df130f1SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
4831df130f1SJung-uk Kim     UINT32                  InfoOffset;
4841df130f1SJung-uk Kim     UINT32                  InfoCount;
4851df130f1SJung-uk Kim 
4861df130f1SJung-uk Kim } ACPI_TABLE_DBG2;
4871df130f1SJung-uk Kim 
4881df130f1SJung-uk Kim 
489313a0c13SJung-uk Kim typedef struct acpi_dbg2_header
490313a0c13SJung-uk Kim {
491313a0c13SJung-uk Kim     UINT32                  InfoOffset;
492313a0c13SJung-uk Kim     UINT32                  InfoCount;
493313a0c13SJung-uk Kim 
494313a0c13SJung-uk Kim } ACPI_DBG2_HEADER;
495313a0c13SJung-uk Kim 
496313a0c13SJung-uk Kim 
4971df130f1SJung-uk Kim /* Debug Device Information Subtable */
4981df130f1SJung-uk Kim 
4991df130f1SJung-uk Kim typedef struct acpi_dbg2_device
5001df130f1SJung-uk Kim {
5011df130f1SJung-uk Kim     UINT8                   Revision;
5021df130f1SJung-uk Kim     UINT16                  Length;
5031df130f1SJung-uk Kim     UINT8                   RegisterCount;      /* Number of BaseAddress registers */
5041df130f1SJung-uk Kim     UINT16                  NamepathLength;
5051df130f1SJung-uk Kim     UINT16                  NamepathOffset;
5061df130f1SJung-uk Kim     UINT16                  OemDataLength;
5071df130f1SJung-uk Kim     UINT16                  OemDataOffset;
5081df130f1SJung-uk Kim     UINT16                  PortType;
5091df130f1SJung-uk Kim     UINT16                  PortSubtype;
5101df130f1SJung-uk Kim     UINT16                  Reserved;
5111df130f1SJung-uk Kim     UINT16                  BaseAddressOffset;
5121df130f1SJung-uk Kim     UINT16                  AddressSizeOffset;
5131df130f1SJung-uk Kim     /*
5141df130f1SJung-uk Kim      * Data that follows:
5151df130f1SJung-uk Kim      *    BaseAddress (required) - Each in 12-byte Generic Address Structure format.
5161df130f1SJung-uk Kim      *    AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register.
5171df130f1SJung-uk Kim      *    Namepath    (required) - Null terminated string. Single dot if not supported.
5181df130f1SJung-uk Kim      *    OemData     (optional) - Length is OemDataLength.
5191df130f1SJung-uk Kim      */
5201df130f1SJung-uk Kim } ACPI_DBG2_DEVICE;
5211df130f1SJung-uk Kim 
5221df130f1SJung-uk Kim /* Types for PortType field above */
5231df130f1SJung-uk Kim 
5241df130f1SJung-uk Kim #define ACPI_DBG2_SERIAL_PORT       0x8000
5251df130f1SJung-uk Kim #define ACPI_DBG2_1394_PORT         0x8001
5261df130f1SJung-uk Kim #define ACPI_DBG2_USB_PORT          0x8002
5271df130f1SJung-uk Kim #define ACPI_DBG2_NET_PORT          0x8003
5281df130f1SJung-uk Kim 
5291df130f1SJung-uk Kim /* Subtypes for PortSubtype field above */
5301df130f1SJung-uk Kim 
5311df130f1SJung-uk Kim #define ACPI_DBG2_16550_COMPATIBLE  0x0000
5321df130f1SJung-uk Kim #define ACPI_DBG2_16550_SUBSET      0x0001
533f8146b88SJung-uk Kim #define ACPI_DBG2_ARM_PL011         0x0003
534f8146b88SJung-uk Kim #define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
535f8146b88SJung-uk Kim #define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
536f8146b88SJung-uk Kim #define ACPI_DBG2_ARM_DCC           0x000F
537f8146b88SJung-uk Kim #define ACPI_DBG2_BCM2835           0x0010
5381df130f1SJung-uk Kim 
5391df130f1SJung-uk Kim #define ACPI_DBG2_1394_STANDARD     0x0000
5401df130f1SJung-uk Kim 
5411df130f1SJung-uk Kim #define ACPI_DBG2_USB_XHCI          0x0000
5421df130f1SJung-uk Kim #define ACPI_DBG2_USB_EHCI          0x0001
5431df130f1SJung-uk Kim 
5441df130f1SJung-uk Kim 
5451df130f1SJung-uk Kim /*******************************************************************************
5461df130f1SJung-uk Kim  *
547d6dd1baeSJung-uk Kim  * DBGP - Debug Port table
548d6dd1baeSJung-uk Kim  *        Version 1
549d6dd1baeSJung-uk Kim  *
550d6dd1baeSJung-uk Kim  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
551d6dd1baeSJung-uk Kim  *
552d6dd1baeSJung-uk Kim  ******************************************************************************/
553d6dd1baeSJung-uk Kim 
554d6dd1baeSJung-uk Kim typedef struct acpi_table_dbgp
555d6dd1baeSJung-uk Kim {
556d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
557d6dd1baeSJung-uk Kim     UINT8                   Type;               /* 0=full 16550, 1=subset of 16550 */
558d6dd1baeSJung-uk Kim     UINT8                   Reserved[3];
559d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    DebugPort;
560d6dd1baeSJung-uk Kim 
561d6dd1baeSJung-uk Kim } ACPI_TABLE_DBGP;
562d6dd1baeSJung-uk Kim 
563d6dd1baeSJung-uk Kim 
564d6dd1baeSJung-uk Kim /*******************************************************************************
565d6dd1baeSJung-uk Kim  *
566d6dd1baeSJung-uk Kim  * DMAR - DMA Remapping table
567d6dd1baeSJung-uk Kim  *        Version 1
568d6dd1baeSJung-uk Kim  *
569d6dd1baeSJung-uk Kim  * Conforms to "Intel Virtualization Technology for Directed I/O",
570f8146b88SJung-uk Kim  * Version 2.3, October 2014
571d6dd1baeSJung-uk Kim  *
572d6dd1baeSJung-uk Kim  ******************************************************************************/
573d6dd1baeSJung-uk Kim 
574d6dd1baeSJung-uk Kim typedef struct acpi_table_dmar
575d6dd1baeSJung-uk Kim {
576d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
577d6dd1baeSJung-uk Kim     UINT8                   Width;              /* Host Address Width */
578d6dd1baeSJung-uk Kim     UINT8                   Flags;
579d6dd1baeSJung-uk Kim     UINT8                   Reserved[10];
580d6dd1baeSJung-uk Kim 
581d6dd1baeSJung-uk Kim } ACPI_TABLE_DMAR;
582d6dd1baeSJung-uk Kim 
583d6dd1baeSJung-uk Kim /* Masks for Flags field above */
584d6dd1baeSJung-uk Kim 
585d6dd1baeSJung-uk Kim #define ACPI_DMAR_INTR_REMAP        (1)
586f8146b88SJung-uk Kim #define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
587f8146b88SJung-uk Kim #define ACPI_DMAR_X2APIC_MODE       (1<<2)
588d6dd1baeSJung-uk Kim 
589d6dd1baeSJung-uk Kim 
590d6dd1baeSJung-uk Kim /* DMAR subtable header */
591d6dd1baeSJung-uk Kim 
592d6dd1baeSJung-uk Kim typedef struct acpi_dmar_header
593d6dd1baeSJung-uk Kim {
594d6dd1baeSJung-uk Kim     UINT16                  Type;
595d6dd1baeSJung-uk Kim     UINT16                  Length;
596d6dd1baeSJung-uk Kim 
597d6dd1baeSJung-uk Kim } ACPI_DMAR_HEADER;
598d6dd1baeSJung-uk Kim 
599d6dd1baeSJung-uk Kim /* Values for subtable type in ACPI_DMAR_HEADER */
600d6dd1baeSJung-uk Kim 
601d6dd1baeSJung-uk Kim enum AcpiDmarType
602d6dd1baeSJung-uk Kim {
603d6dd1baeSJung-uk Kim     ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
604d6dd1baeSJung-uk Kim     ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
605313a0c13SJung-uk Kim     ACPI_DMAR_TYPE_ROOT_ATS             = 2,
606313a0c13SJung-uk Kim     ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
607313a0c13SJung-uk Kim     ACPI_DMAR_TYPE_NAMESPACE            = 4,
608313a0c13SJung-uk Kim     ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
609d6dd1baeSJung-uk Kim };
610d6dd1baeSJung-uk Kim 
611d6dd1baeSJung-uk Kim 
612d6dd1baeSJung-uk Kim /* DMAR Device Scope structure */
613d6dd1baeSJung-uk Kim 
614d6dd1baeSJung-uk Kim typedef struct acpi_dmar_device_scope
615d6dd1baeSJung-uk Kim {
616d6dd1baeSJung-uk Kim     UINT8                   EntryType;
617d6dd1baeSJung-uk Kim     UINT8                   Length;
618d6dd1baeSJung-uk Kim     UINT16                  Reserved;
619d6dd1baeSJung-uk Kim     UINT8                   EnumerationId;
620d6dd1baeSJung-uk Kim     UINT8                   Bus;
621d6dd1baeSJung-uk Kim 
622d6dd1baeSJung-uk Kim } ACPI_DMAR_DEVICE_SCOPE;
623d6dd1baeSJung-uk Kim 
624313a0c13SJung-uk Kim /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
625d6dd1baeSJung-uk Kim 
626d6dd1baeSJung-uk Kim enum AcpiDmarScopeType
627d6dd1baeSJung-uk Kim {
628d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_NOT_USED       = 0,
629d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_ENDPOINT       = 1,
630d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
631d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
632d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
633313a0c13SJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
634313a0c13SJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
635d6dd1baeSJung-uk Kim };
636d6dd1baeSJung-uk Kim 
637d6dd1baeSJung-uk Kim typedef struct acpi_dmar_pci_path
638d6dd1baeSJung-uk Kim {
639d6dd1baeSJung-uk Kim     UINT8                   Device;
640d6dd1baeSJung-uk Kim     UINT8                   Function;
641d6dd1baeSJung-uk Kim 
642d6dd1baeSJung-uk Kim } ACPI_DMAR_PCI_PATH;
643d6dd1baeSJung-uk Kim 
644d6dd1baeSJung-uk Kim 
645d6dd1baeSJung-uk Kim /*
646313a0c13SJung-uk Kim  * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER
647d6dd1baeSJung-uk Kim  */
648d6dd1baeSJung-uk Kim 
649d6dd1baeSJung-uk Kim /* 0: Hardware Unit Definition */
650d6dd1baeSJung-uk Kim 
651d6dd1baeSJung-uk Kim typedef struct acpi_dmar_hardware_unit
652d6dd1baeSJung-uk Kim {
653d6dd1baeSJung-uk Kim     ACPI_DMAR_HEADER        Header;
654d6dd1baeSJung-uk Kim     UINT8                   Flags;
655d6dd1baeSJung-uk Kim     UINT8                   Reserved;
656d6dd1baeSJung-uk Kim     UINT16                  Segment;
657d6dd1baeSJung-uk Kim     UINT64                  Address;            /* Register Base Address */
658d6dd1baeSJung-uk Kim 
659d6dd1baeSJung-uk Kim } ACPI_DMAR_HARDWARE_UNIT;
660d6dd1baeSJung-uk Kim 
661d6dd1baeSJung-uk Kim /* Masks for Flags field above */
662d6dd1baeSJung-uk Kim 
663d6dd1baeSJung-uk Kim #define ACPI_DMAR_INCLUDE_ALL       (1)
664d6dd1baeSJung-uk Kim 
665d6dd1baeSJung-uk Kim 
666d6dd1baeSJung-uk Kim /* 1: Reserved Memory Defininition */
667d6dd1baeSJung-uk Kim 
668d6dd1baeSJung-uk Kim typedef struct acpi_dmar_reserved_memory
669d6dd1baeSJung-uk Kim {
670d6dd1baeSJung-uk Kim     ACPI_DMAR_HEADER        Header;
671d6dd1baeSJung-uk Kim     UINT16                  Reserved;
672d6dd1baeSJung-uk Kim     UINT16                  Segment;
673d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;        /* 4K aligned base address */
674d6dd1baeSJung-uk Kim     UINT64                  EndAddress;         /* 4K aligned limit address */
675d6dd1baeSJung-uk Kim 
676d6dd1baeSJung-uk Kim } ACPI_DMAR_RESERVED_MEMORY;
677d6dd1baeSJung-uk Kim 
678d6dd1baeSJung-uk Kim /* Masks for Flags field above */
679d6dd1baeSJung-uk Kim 
680d6dd1baeSJung-uk Kim #define ACPI_DMAR_ALLOW_ALL         (1)
681d6dd1baeSJung-uk Kim 
682d6dd1baeSJung-uk Kim 
683d6dd1baeSJung-uk Kim /* 2: Root Port ATS Capability Reporting Structure */
684d6dd1baeSJung-uk Kim 
685d6dd1baeSJung-uk Kim typedef struct acpi_dmar_atsr
686d6dd1baeSJung-uk Kim {
687d6dd1baeSJung-uk Kim     ACPI_DMAR_HEADER        Header;
688d6dd1baeSJung-uk Kim     UINT8                   Flags;
689d6dd1baeSJung-uk Kim     UINT8                   Reserved;
690d6dd1baeSJung-uk Kim     UINT16                  Segment;
691d6dd1baeSJung-uk Kim 
692d6dd1baeSJung-uk Kim } ACPI_DMAR_ATSR;
693d6dd1baeSJung-uk Kim 
694d6dd1baeSJung-uk Kim /* Masks for Flags field above */
695d6dd1baeSJung-uk Kim 
696d6dd1baeSJung-uk Kim #define ACPI_DMAR_ALL_PORTS         (1)
697d6dd1baeSJung-uk Kim 
698d6dd1baeSJung-uk Kim 
699d6dd1baeSJung-uk Kim /* 3: Remapping Hardware Static Affinity Structure */
700d6dd1baeSJung-uk Kim 
701d6dd1baeSJung-uk Kim typedef struct acpi_dmar_rhsa
702d6dd1baeSJung-uk Kim {
703d6dd1baeSJung-uk Kim     ACPI_DMAR_HEADER        Header;
704d6dd1baeSJung-uk Kim     UINT32                  Reserved;
705d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;
706d6dd1baeSJung-uk Kim     UINT32                  ProximityDomain;
707d6dd1baeSJung-uk Kim 
708d6dd1baeSJung-uk Kim } ACPI_DMAR_RHSA;
709d6dd1baeSJung-uk Kim 
710d6dd1baeSJung-uk Kim 
711313a0c13SJung-uk Kim /* 4: ACPI Namespace Device Declaration Structure */
712313a0c13SJung-uk Kim 
713313a0c13SJung-uk Kim typedef struct acpi_dmar_andd
714313a0c13SJung-uk Kim {
715313a0c13SJung-uk Kim     ACPI_DMAR_HEADER        Header;
716313a0c13SJung-uk Kim     UINT8                   Reserved[3];
717313a0c13SJung-uk Kim     UINT8                   DeviceNumber;
718313a0c13SJung-uk Kim     char                    DeviceName[1];
719313a0c13SJung-uk Kim 
720313a0c13SJung-uk Kim } ACPI_DMAR_ANDD;
721313a0c13SJung-uk Kim 
722313a0c13SJung-uk Kim 
723d6dd1baeSJung-uk Kim /*******************************************************************************
724d6dd1baeSJung-uk Kim  *
725d6dd1baeSJung-uk Kim  * HPET - High Precision Event Timer table
726d6dd1baeSJung-uk Kim  *        Version 1
727d6dd1baeSJung-uk Kim  *
728d6dd1baeSJung-uk Kim  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
729d6dd1baeSJung-uk Kim  * Version 1.0a, October 2004
730d6dd1baeSJung-uk Kim  *
731d6dd1baeSJung-uk Kim  ******************************************************************************/
732d6dd1baeSJung-uk Kim 
733d6dd1baeSJung-uk Kim typedef struct acpi_table_hpet
734d6dd1baeSJung-uk Kim {
735d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
736d6dd1baeSJung-uk Kim     UINT32                  Id;                 /* Hardware ID of event timer block */
737d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    Address;            /* Address of event timer block */
738d6dd1baeSJung-uk Kim     UINT8                   Sequence;           /* HPET sequence number */
739d6dd1baeSJung-uk Kim     UINT16                  MinimumTick;        /* Main counter min tick, periodic mode */
740d6dd1baeSJung-uk Kim     UINT8                   Flags;
741d6dd1baeSJung-uk Kim 
742d6dd1baeSJung-uk Kim } ACPI_TABLE_HPET;
743d6dd1baeSJung-uk Kim 
744d6dd1baeSJung-uk Kim /* Masks for Flags field above */
745d6dd1baeSJung-uk Kim 
746d6dd1baeSJung-uk Kim #define ACPI_HPET_PAGE_PROTECT_MASK (3)
747d6dd1baeSJung-uk Kim 
748d6dd1baeSJung-uk Kim /* Values for Page Protect flags */
749d6dd1baeSJung-uk Kim 
750d6dd1baeSJung-uk Kim enum AcpiHpetPageProtect
751d6dd1baeSJung-uk Kim {
752d6dd1baeSJung-uk Kim     ACPI_HPET_NO_PAGE_PROTECT       = 0,
753d6dd1baeSJung-uk Kim     ACPI_HPET_PAGE_PROTECT4         = 1,
754d6dd1baeSJung-uk Kim     ACPI_HPET_PAGE_PROTECT64        = 2
755d6dd1baeSJung-uk Kim };
756d6dd1baeSJung-uk Kim 
757d6dd1baeSJung-uk Kim 
758d6dd1baeSJung-uk Kim /*******************************************************************************
759d6dd1baeSJung-uk Kim  *
760d6dd1baeSJung-uk Kim  * IBFT - Boot Firmware Table
761d6dd1baeSJung-uk Kim  *        Version 1
762d6dd1baeSJung-uk Kim  *
763d6dd1baeSJung-uk Kim  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
764d6dd1baeSJung-uk Kim  * Specification", Version 1.01, March 1, 2007
765d6dd1baeSJung-uk Kim  *
766d6dd1baeSJung-uk Kim  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
767d6dd1baeSJung-uk Kim  * Therefore, it is not currently supported by the disassembler.
768d6dd1baeSJung-uk Kim  *
769d6dd1baeSJung-uk Kim  ******************************************************************************/
770d6dd1baeSJung-uk Kim 
771d6dd1baeSJung-uk Kim typedef struct acpi_table_ibft
772d6dd1baeSJung-uk Kim {
773d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
774d6dd1baeSJung-uk Kim     UINT8                   Reserved[12];
775d6dd1baeSJung-uk Kim 
776d6dd1baeSJung-uk Kim } ACPI_TABLE_IBFT;
777d6dd1baeSJung-uk Kim 
778d6dd1baeSJung-uk Kim 
779d6dd1baeSJung-uk Kim /* IBFT common subtable header */
780d6dd1baeSJung-uk Kim 
781d6dd1baeSJung-uk Kim typedef struct acpi_ibft_header
782d6dd1baeSJung-uk Kim {
783d6dd1baeSJung-uk Kim     UINT8                   Type;
784d6dd1baeSJung-uk Kim     UINT8                   Version;
785d6dd1baeSJung-uk Kim     UINT16                  Length;
786d6dd1baeSJung-uk Kim     UINT8                   Index;
787d6dd1baeSJung-uk Kim     UINT8                   Flags;
788d6dd1baeSJung-uk Kim 
789d6dd1baeSJung-uk Kim } ACPI_IBFT_HEADER;
790d6dd1baeSJung-uk Kim 
791d6dd1baeSJung-uk Kim /* Values for Type field above */
792d6dd1baeSJung-uk Kim 
793d6dd1baeSJung-uk Kim enum AcpiIbftType
794d6dd1baeSJung-uk Kim {
795d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_NOT_USED         = 0,
796d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_CONTROL          = 1,
797d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_INITIATOR        = 2,
798d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_NIC              = 3,
799d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_TARGET           = 4,
800d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_EXTENSIONS       = 5,
801d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_RESERVED         = 6     /* 6 and greater are reserved */
802d6dd1baeSJung-uk Kim };
803d6dd1baeSJung-uk Kim 
804d6dd1baeSJung-uk Kim 
805d6dd1baeSJung-uk Kim /* IBFT subtables */
806d6dd1baeSJung-uk Kim 
807d6dd1baeSJung-uk Kim typedef struct acpi_ibft_control
808d6dd1baeSJung-uk Kim {
809d6dd1baeSJung-uk Kim     ACPI_IBFT_HEADER        Header;
810d6dd1baeSJung-uk Kim     UINT16                  Extensions;
811d6dd1baeSJung-uk Kim     UINT16                  InitiatorOffset;
812d6dd1baeSJung-uk Kim     UINT16                  Nic0Offset;
813d6dd1baeSJung-uk Kim     UINT16                  Target0Offset;
814d6dd1baeSJung-uk Kim     UINT16                  Nic1Offset;
815d6dd1baeSJung-uk Kim     UINT16                  Target1Offset;
816d6dd1baeSJung-uk Kim 
817d6dd1baeSJung-uk Kim } ACPI_IBFT_CONTROL;
818d6dd1baeSJung-uk Kim 
819d6dd1baeSJung-uk Kim typedef struct acpi_ibft_initiator
820d6dd1baeSJung-uk Kim {
821d6dd1baeSJung-uk Kim     ACPI_IBFT_HEADER        Header;
822d6dd1baeSJung-uk Kim     UINT8                   SnsServer[16];
823d6dd1baeSJung-uk Kim     UINT8                   SlpServer[16];
824d6dd1baeSJung-uk Kim     UINT8                   PrimaryServer[16];
825d6dd1baeSJung-uk Kim     UINT8                   SecondaryServer[16];
826d6dd1baeSJung-uk Kim     UINT16                  NameLength;
827d6dd1baeSJung-uk Kim     UINT16                  NameOffset;
828d6dd1baeSJung-uk Kim 
829d6dd1baeSJung-uk Kim } ACPI_IBFT_INITIATOR;
830d6dd1baeSJung-uk Kim 
831d6dd1baeSJung-uk Kim typedef struct acpi_ibft_nic
832d6dd1baeSJung-uk Kim {
833d6dd1baeSJung-uk Kim     ACPI_IBFT_HEADER        Header;
834d6dd1baeSJung-uk Kim     UINT8                   IpAddress[16];
835d6dd1baeSJung-uk Kim     UINT8                   SubnetMaskPrefix;
836d6dd1baeSJung-uk Kim     UINT8                   Origin;
837d6dd1baeSJung-uk Kim     UINT8                   Gateway[16];
838d6dd1baeSJung-uk Kim     UINT8                   PrimaryDns[16];
839d6dd1baeSJung-uk Kim     UINT8                   SecondaryDns[16];
840d6dd1baeSJung-uk Kim     UINT8                   Dhcp[16];
841d6dd1baeSJung-uk Kim     UINT16                  Vlan;
842d6dd1baeSJung-uk Kim     UINT8                   MacAddress[6];
843d6dd1baeSJung-uk Kim     UINT16                  PciAddress;
844d6dd1baeSJung-uk Kim     UINT16                  NameLength;
845d6dd1baeSJung-uk Kim     UINT16                  NameOffset;
846d6dd1baeSJung-uk Kim 
847d6dd1baeSJung-uk Kim } ACPI_IBFT_NIC;
848d6dd1baeSJung-uk Kim 
849d6dd1baeSJung-uk Kim typedef struct acpi_ibft_target
850d6dd1baeSJung-uk Kim {
851d6dd1baeSJung-uk Kim     ACPI_IBFT_HEADER        Header;
852d6dd1baeSJung-uk Kim     UINT8                   TargetIpAddress[16];
853d6dd1baeSJung-uk Kim     UINT16                  TargetIpSocket;
854d6dd1baeSJung-uk Kim     UINT8                   TargetBootLun[8];
855d6dd1baeSJung-uk Kim     UINT8                   ChapType;
856d6dd1baeSJung-uk Kim     UINT8                   NicAssociation;
857d6dd1baeSJung-uk Kim     UINT16                  TargetNameLength;
858d6dd1baeSJung-uk Kim     UINT16                  TargetNameOffset;
859d6dd1baeSJung-uk Kim     UINT16                  ChapNameLength;
860d6dd1baeSJung-uk Kim     UINT16                  ChapNameOffset;
861d6dd1baeSJung-uk Kim     UINT16                  ChapSecretLength;
862d6dd1baeSJung-uk Kim     UINT16                  ChapSecretOffset;
863d6dd1baeSJung-uk Kim     UINT16                  ReverseChapNameLength;
864d6dd1baeSJung-uk Kim     UINT16                  ReverseChapNameOffset;
865d6dd1baeSJung-uk Kim     UINT16                  ReverseChapSecretLength;
866d6dd1baeSJung-uk Kim     UINT16                  ReverseChapSecretOffset;
867d6dd1baeSJung-uk Kim 
868d6dd1baeSJung-uk Kim } ACPI_IBFT_TARGET;
869d6dd1baeSJung-uk Kim 
870d6dd1baeSJung-uk Kim 
871d6dd1baeSJung-uk Kim /*******************************************************************************
872d6dd1baeSJung-uk Kim  *
873a371a5fdSJung-uk Kim  * IORT - IO Remapping Table
874a371a5fdSJung-uk Kim  *
875a371a5fdSJung-uk Kim  * Conforms to "IO Remapping Table System Software on ARM Platforms",
876f8146b88SJung-uk Kim  * Document number: ARM DEN 0049B, October 2015
877a371a5fdSJung-uk Kim  *
878a371a5fdSJung-uk Kim  ******************************************************************************/
879a371a5fdSJung-uk Kim 
880a371a5fdSJung-uk Kim typedef struct acpi_table_iort
881a371a5fdSJung-uk Kim {
882a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;
883a371a5fdSJung-uk Kim     UINT32                  NodeCount;
884a371a5fdSJung-uk Kim     UINT32                  NodeOffset;
885a371a5fdSJung-uk Kim     UINT32                  Reserved;
886a371a5fdSJung-uk Kim 
887a371a5fdSJung-uk Kim } ACPI_TABLE_IORT;
888a371a5fdSJung-uk Kim 
889a371a5fdSJung-uk Kim 
890a371a5fdSJung-uk Kim /*
891a371a5fdSJung-uk Kim  * IORT subtables
892a371a5fdSJung-uk Kim  */
893a371a5fdSJung-uk Kim typedef struct acpi_iort_node
894a371a5fdSJung-uk Kim {
895a371a5fdSJung-uk Kim     UINT8                   Type;
896a371a5fdSJung-uk Kim     UINT16                  Length;
897a371a5fdSJung-uk Kim     UINT8                   Revision;
898a371a5fdSJung-uk Kim     UINT32                  Reserved;
899a371a5fdSJung-uk Kim     UINT32                  MappingCount;
900a371a5fdSJung-uk Kim     UINT32                  MappingOffset;
901a371a5fdSJung-uk Kim     char                    NodeData[1];
902a371a5fdSJung-uk Kim 
903a371a5fdSJung-uk Kim } ACPI_IORT_NODE;
904a371a5fdSJung-uk Kim 
905a371a5fdSJung-uk Kim /* Values for subtable Type above */
906a371a5fdSJung-uk Kim 
907a371a5fdSJung-uk Kim enum AcpiIortNodeType
908a371a5fdSJung-uk Kim {
909a371a5fdSJung-uk Kim     ACPI_IORT_NODE_ITS_GROUP            = 0x00,
910a371a5fdSJung-uk Kim     ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
911a371a5fdSJung-uk Kim     ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
912f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU                 = 0x03,
913f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU_V3              = 0x04
914a371a5fdSJung-uk Kim };
915a371a5fdSJung-uk Kim 
916a371a5fdSJung-uk Kim 
917a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping
918a371a5fdSJung-uk Kim {
919a371a5fdSJung-uk Kim     UINT32                  InputBase;          /* Lowest value in input range */
920a371a5fdSJung-uk Kim     UINT32                  IdCount;            /* Number of IDs */
921a371a5fdSJung-uk Kim     UINT32                  OutputBase;         /* Lowest value in output range */
922a371a5fdSJung-uk Kim     UINT32                  OutputReference;    /* A reference to the output node */
923a371a5fdSJung-uk Kim     UINT32                  Flags;
924a371a5fdSJung-uk Kim 
925a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING;
926a371a5fdSJung-uk Kim 
927a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */
928a371a5fdSJung-uk Kim 
929a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1)
930a371a5fdSJung-uk Kim 
931a371a5fdSJung-uk Kim 
932a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access
933a371a5fdSJung-uk Kim {
934a371a5fdSJung-uk Kim     UINT32                  CacheCoherency;
935a371a5fdSJung-uk Kim     UINT8                   Hints;
936a371a5fdSJung-uk Kim     UINT16                  Reserved;
937a371a5fdSJung-uk Kim     UINT8                   MemoryFlags;
938a371a5fdSJung-uk Kim 
939a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS;
940a371a5fdSJung-uk Kim 
941a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */
942a371a5fdSJung-uk Kim 
943a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
944a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
945a371a5fdSJung-uk Kim 
946a371a5fdSJung-uk Kim /* Masks for Hints field above */
947a371a5fdSJung-uk Kim 
948a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT          (1)
949a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE              (1<<1)
950a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ               (1<<2)
951a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE           (1<<3)
952a371a5fdSJung-uk Kim 
953a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */
954a371a5fdSJung-uk Kim 
955a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY          (1)
956a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
957a371a5fdSJung-uk Kim 
958a371a5fdSJung-uk Kim 
959a371a5fdSJung-uk Kim /*
960a371a5fdSJung-uk Kim  * IORT node specific subtables
961a371a5fdSJung-uk Kim  */
962a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group
963a371a5fdSJung-uk Kim {
964a371a5fdSJung-uk Kim     UINT32                  ItsCount;
965a371a5fdSJung-uk Kim     UINT32                  Identifiers[1];         /* GIC ITS identifier arrary */
966a371a5fdSJung-uk Kim 
967a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP;
968a371a5fdSJung-uk Kim 
969a371a5fdSJung-uk Kim 
970a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component
971a371a5fdSJung-uk Kim {
972a371a5fdSJung-uk Kim     UINT32                  NodeFlags;
973a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
974a371a5fdSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
975a371a5fdSJung-uk Kim     char                    DeviceName[1];          /* Path of namespace object */
976a371a5fdSJung-uk Kim 
977a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT;
978a371a5fdSJung-uk Kim 
979a371a5fdSJung-uk Kim 
980a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex
981a371a5fdSJung-uk Kim {
982a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
983a371a5fdSJung-uk Kim     UINT32                  AtsAttribute;
984a371a5fdSJung-uk Kim     UINT32                  PciSegmentNumber;
985a371a5fdSJung-uk Kim 
986a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX;
987a371a5fdSJung-uk Kim 
988a371a5fdSJung-uk Kim /* Values for AtsAttribute field above */
989a371a5fdSJung-uk Kim 
990a371a5fdSJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED         0x00000001  /* The root complex supports ATS */
991a371a5fdSJung-uk Kim #define ACPI_IORT_ATS_UNSUPPORTED       0x00000000  /* The root complex doesn't support ATS */
992a371a5fdSJung-uk Kim 
993a371a5fdSJung-uk Kim 
994a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu
995a371a5fdSJung-uk Kim {
996a371a5fdSJung-uk Kim     UINT64                  BaseAddress;            /* SMMU base address */
997a371a5fdSJung-uk Kim     UINT64                  Span;                   /* Length of memory range */
998a371a5fdSJung-uk Kim     UINT32                  Model;
999a371a5fdSJung-uk Kim     UINT32                  Flags;
1000a371a5fdSJung-uk Kim     UINT32                  GlobalInterruptOffset;
1001a371a5fdSJung-uk Kim     UINT32                  ContextInterruptCount;
1002a371a5fdSJung-uk Kim     UINT32                  ContextInterruptOffset;
1003a371a5fdSJung-uk Kim     UINT32                  PmuInterruptCount;
1004a371a5fdSJung-uk Kim     UINT32                  PmuInterruptOffset;
1005a371a5fdSJung-uk Kim     UINT64                  Interrupts[1];          /* Interrupt array */
1006a371a5fdSJung-uk Kim 
1007a371a5fdSJung-uk Kim } ACPI_IORT_SMMU;
1008a371a5fdSJung-uk Kim 
1009a371a5fdSJung-uk Kim /* Values for Model field above */
1010a371a5fdSJung-uk Kim 
1011a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
1012a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
1013a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
1014a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
1015a371a5fdSJung-uk Kim 
1016a371a5fdSJung-uk Kim /* Masks for Flags field above */
1017a371a5fdSJung-uk Kim 
1018a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
1019a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
1020a371a5fdSJung-uk Kim 
1021*0d84335fSJung-uk Kim /* Global interrupt format */
1022*0d84335fSJung-uk Kim 
1023*0d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi
1024*0d84335fSJung-uk Kim {
1025*0d84335fSJung-uk Kim     UINT32                  NSgIrpt;
1026*0d84335fSJung-uk Kim     UINT32                  NSgIrptFlags;
1027*0d84335fSJung-uk Kim     UINT32                  NSgCfgIrpt;
1028*0d84335fSJung-uk Kim     UINT32                  NSgCfgIrptFlags;
1029*0d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI;
1030*0d84335fSJung-uk Kim 
1031a371a5fdSJung-uk Kim 
1032f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3
1033f8146b88SJung-uk Kim {
1034f8146b88SJung-uk Kim     UINT64                  BaseAddress;            /* SMMUv3 base address */
1035f8146b88SJung-uk Kim     UINT32                  Flags;
1036f8146b88SJung-uk Kim     UINT32                  Reserved;
1037f8146b88SJung-uk Kim     UINT64                  VatosAddress;
1038f8146b88SJung-uk Kim     UINT32                  Model;                 /* O: generic SMMUv3 */
1039f8146b88SJung-uk Kim     UINT32                  EventGsiv;
1040f8146b88SJung-uk Kim     UINT32                  PriGsiv;
1041f8146b88SJung-uk Kim     UINT32                  GerrGsiv;
1042f8146b88SJung-uk Kim     UINT32                  SyncGsiv;
1043f8146b88SJung-uk Kim 
1044f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3;
1045f8146b88SJung-uk Kim 
1046f8146b88SJung-uk Kim /* Masks for Flags field above */
1047f8146b88SJung-uk Kim 
1048f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
1049f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
1050f8146b88SJung-uk Kim 
1051f8146b88SJung-uk Kim 
1052a371a5fdSJung-uk Kim /*******************************************************************************
1053a371a5fdSJung-uk Kim  *
1054d6dd1baeSJung-uk Kim  * IVRS - I/O Virtualization Reporting Structure
1055d6dd1baeSJung-uk Kim  *        Version 1
1056d6dd1baeSJung-uk Kim  *
1057d6dd1baeSJung-uk Kim  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
1058d6dd1baeSJung-uk Kim  * Revision 1.26, February 2009.
1059d6dd1baeSJung-uk Kim  *
1060d6dd1baeSJung-uk Kim  ******************************************************************************/
1061d6dd1baeSJung-uk Kim 
1062d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs
1063d6dd1baeSJung-uk Kim {
1064d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1065d6dd1baeSJung-uk Kim     UINT32                  Info;               /* Common virtualization info */
1066d6dd1baeSJung-uk Kim     UINT64                  Reserved;
1067d6dd1baeSJung-uk Kim 
1068d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS;
1069d6dd1baeSJung-uk Kim 
1070d6dd1baeSJung-uk Kim /* Values for Info field above */
1071d6dd1baeSJung-uk Kim 
1072d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
1073d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
1074d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
1075d6dd1baeSJung-uk Kim 
1076d6dd1baeSJung-uk Kim 
1077d6dd1baeSJung-uk Kim /* IVRS subtable header */
1078d6dd1baeSJung-uk Kim 
1079d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header
1080d6dd1baeSJung-uk Kim {
1081d6dd1baeSJung-uk Kim     UINT8                   Type;               /* Subtable type */
1082d6dd1baeSJung-uk Kim     UINT8                   Flags;
1083d6dd1baeSJung-uk Kim     UINT16                  Length;             /* Subtable length */
1084d6dd1baeSJung-uk Kim     UINT16                  DeviceId;           /* ID of IOMMU */
1085d6dd1baeSJung-uk Kim 
1086d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER;
1087d6dd1baeSJung-uk Kim 
1088d6dd1baeSJung-uk Kim /* Values for subtable Type above */
1089d6dd1baeSJung-uk Kim 
1090d6dd1baeSJung-uk Kim enum AcpiIvrsType
1091d6dd1baeSJung-uk Kim {
1092d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE         = 0x10,
1093d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
1094d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
1095d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY3          = 0x22
1096d6dd1baeSJung-uk Kim };
1097d6dd1baeSJung-uk Kim 
1098d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */
1099d6dd1baeSJung-uk Kim 
1100d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE         (1)
1101d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW           (1<<1)
1102d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW       (1<<2)
1103d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC              (1<<3)
1104d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB             (1<<4)
1105d6dd1baeSJung-uk Kim 
1106d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */
1107d6dd1baeSJung-uk Kim 
1108d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY             (1)
1109d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ              (1<<1)
1110d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE             (1<<2)
1111d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
1112d6dd1baeSJung-uk Kim 
1113d6dd1baeSJung-uk Kim 
1114d6dd1baeSJung-uk Kim /*
1115d6dd1baeSJung-uk Kim  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
1116d6dd1baeSJung-uk Kim  */
1117d6dd1baeSJung-uk Kim 
1118d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
1119d6dd1baeSJung-uk Kim 
1120d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_hardware
1121d6dd1baeSJung-uk Kim {
1122d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
1123d6dd1baeSJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
1124d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
1125d6dd1baeSJung-uk Kim     UINT16                  PciSegmentGroup;
1126d6dd1baeSJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
1127d6dd1baeSJung-uk Kim     UINT32                  Reserved;
1128d6dd1baeSJung-uk Kim 
1129d6dd1baeSJung-uk Kim } ACPI_IVRS_HARDWARE;
1130d6dd1baeSJung-uk Kim 
1131d6dd1baeSJung-uk Kim /* Masks for Info field above */
1132d6dd1baeSJung-uk Kim 
1133d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
1134d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
1135d6dd1baeSJung-uk Kim 
1136d6dd1baeSJung-uk Kim 
1137d6dd1baeSJung-uk Kim /*
1138d6dd1baeSJung-uk Kim  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
1139d6dd1baeSJung-uk Kim  * Upper two bits of the Type field are the (encoded) length of the structure.
1140d6dd1baeSJung-uk Kim  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
1141d6dd1baeSJung-uk Kim  * are reserved for future use but not defined.
1142d6dd1baeSJung-uk Kim  */
1143d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header
1144d6dd1baeSJung-uk Kim {
1145d6dd1baeSJung-uk Kim     UINT8                   Type;
1146d6dd1baeSJung-uk Kim     UINT16                  Id;
1147d6dd1baeSJung-uk Kim     UINT8                   DataSetting;
1148d6dd1baeSJung-uk Kim 
1149d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER;
1150d6dd1baeSJung-uk Kim 
1151d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */
1152d6dd1baeSJung-uk Kim 
1153d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH      0xC0
1154d6dd1baeSJung-uk Kim 
1155d6dd1baeSJung-uk Kim /* Values for device entry Type field above */
1156d6dd1baeSJung-uk Kim 
1157d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType
1158d6dd1baeSJung-uk Kim {
1159d6dd1baeSJung-uk Kim     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
1160d6dd1baeSJung-uk Kim 
1161d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD4             = 0,
1162d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALL              = 1,
1163d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SELECT           = 2,
1164d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_START            = 3,
1165d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_END              = 4,
1166d6dd1baeSJung-uk Kim 
1167d6dd1baeSJung-uk Kim     /* 8-byte device entries */
1168d6dd1baeSJung-uk Kim 
1169d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD8             = 64,
1170d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_NOT_USED         = 65,
1171d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
1172d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
1173d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
1174d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
1175d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
1176d6dd1baeSJung-uk Kim };
1177d6dd1baeSJung-uk Kim 
1178d6dd1baeSJung-uk Kim /* Values for Data field above */
1179d6dd1baeSJung-uk Kim 
1180d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS         (1)
1181d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS         (1<<1)
1182d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS          (1<<2)
1183d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
1184d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS        (1<<6)
1185d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS        (1<<7)
1186d6dd1baeSJung-uk Kim 
1187d6dd1baeSJung-uk Kim 
1188d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */
1189d6dd1baeSJung-uk Kim 
1190d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4
1191d6dd1baeSJung-uk Kim {
1192d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1193d6dd1baeSJung-uk Kim 
1194d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4;
1195d6dd1baeSJung-uk Kim 
1196d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */
1197d6dd1baeSJung-uk Kim 
1198d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a
1199d6dd1baeSJung-uk Kim {
1200d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1201d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
1202d6dd1baeSJung-uk Kim     UINT16                  UsedId;
1203d6dd1baeSJung-uk Kim     UINT8                   Reserved2;
1204d6dd1baeSJung-uk Kim 
1205d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A;
1206d6dd1baeSJung-uk Kim 
1207d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */
1208d6dd1baeSJung-uk Kim 
1209d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b
1210d6dd1baeSJung-uk Kim {
1211d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1212d6dd1baeSJung-uk Kim     UINT32                  ExtendedData;
1213d6dd1baeSJung-uk Kim 
1214d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B;
1215d6dd1baeSJung-uk Kim 
1216d6dd1baeSJung-uk Kim /* Values for ExtendedData above */
1217d6dd1baeSJung-uk Kim 
1218d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED      (1<<31)
1219d6dd1baeSJung-uk Kim 
1220d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */
1221d6dd1baeSJung-uk Kim 
1222d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c
1223d6dd1baeSJung-uk Kim {
1224d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1225d6dd1baeSJung-uk Kim     UINT8                   Handle;
1226d6dd1baeSJung-uk Kim     UINT16                  UsedId;
1227d6dd1baeSJung-uk Kim     UINT8                   Variety;
1228d6dd1baeSJung-uk Kim 
1229d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C;
1230d6dd1baeSJung-uk Kim 
1231d6dd1baeSJung-uk Kim /* Values for Variety field above */
1232d6dd1baeSJung-uk Kim 
1233d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC            1
1234d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET              2
1235d6dd1baeSJung-uk Kim 
1236d6dd1baeSJung-uk Kim 
1237d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
1238d6dd1baeSJung-uk Kim 
1239d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory
1240d6dd1baeSJung-uk Kim {
1241d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
1242d6dd1baeSJung-uk Kim     UINT16                  AuxData;
1243d6dd1baeSJung-uk Kim     UINT64                  Reserved;
1244d6dd1baeSJung-uk Kim     UINT64                  StartAddress;
1245d6dd1baeSJung-uk Kim     UINT64                  MemoryLength;
1246d6dd1baeSJung-uk Kim 
1247d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY;
1248d6dd1baeSJung-uk Kim 
1249d6dd1baeSJung-uk Kim 
1250d6dd1baeSJung-uk Kim /*******************************************************************************
1251d6dd1baeSJung-uk Kim  *
1252313a0c13SJung-uk Kim  * LPIT - Low Power Idle Table
1253313a0c13SJung-uk Kim  *
1254a371a5fdSJung-uk Kim  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1255313a0c13SJung-uk Kim  *
1256313a0c13SJung-uk Kim  ******************************************************************************/
1257313a0c13SJung-uk Kim 
1258313a0c13SJung-uk Kim typedef struct acpi_table_lpit
1259313a0c13SJung-uk Kim {
1260313a0c13SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1261313a0c13SJung-uk Kim 
1262313a0c13SJung-uk Kim } ACPI_TABLE_LPIT;
1263313a0c13SJung-uk Kim 
1264313a0c13SJung-uk Kim 
1265313a0c13SJung-uk Kim /* LPIT subtable header */
1266313a0c13SJung-uk Kim 
1267313a0c13SJung-uk Kim typedef struct acpi_lpit_header
1268313a0c13SJung-uk Kim {
1269313a0c13SJung-uk Kim     UINT32                  Type;               /* Subtable type */
1270313a0c13SJung-uk Kim     UINT32                  Length;             /* Subtable length */
1271313a0c13SJung-uk Kim     UINT16                  UniqueId;
1272313a0c13SJung-uk Kim     UINT16                  Reserved;
1273313a0c13SJung-uk Kim     UINT32                  Flags;
1274313a0c13SJung-uk Kim 
1275313a0c13SJung-uk Kim } ACPI_LPIT_HEADER;
1276313a0c13SJung-uk Kim 
1277313a0c13SJung-uk Kim /* Values for subtable Type above */
1278313a0c13SJung-uk Kim 
1279313a0c13SJung-uk Kim enum AcpiLpitType
1280313a0c13SJung-uk Kim {
1281313a0c13SJung-uk Kim     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
1282a371a5fdSJung-uk Kim     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
1283313a0c13SJung-uk Kim };
1284313a0c13SJung-uk Kim 
1285313a0c13SJung-uk Kim /* Masks for Flags field above  */
1286313a0c13SJung-uk Kim 
1287313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED    (1)
1288313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER        (1<<1)
1289313a0c13SJung-uk Kim 
1290313a0c13SJung-uk Kim /*
1291313a0c13SJung-uk Kim  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
1292313a0c13SJung-uk Kim  */
1293313a0c13SJung-uk Kim 
1294313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */
1295313a0c13SJung-uk Kim 
1296313a0c13SJung-uk Kim typedef struct acpi_lpit_native
1297313a0c13SJung-uk Kim {
1298313a0c13SJung-uk Kim     ACPI_LPIT_HEADER        Header;
1299313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    EntryTrigger;
1300313a0c13SJung-uk Kim     UINT32                  Residency;
1301313a0c13SJung-uk Kim     UINT32                  Latency;
1302313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    ResidencyCounter;
1303313a0c13SJung-uk Kim     UINT64                  CounterFrequency;
1304313a0c13SJung-uk Kim 
1305313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE;
1306313a0c13SJung-uk Kim 
1307313a0c13SJung-uk Kim 
1308313a0c13SJung-uk Kim /*******************************************************************************
1309313a0c13SJung-uk Kim  *
1310313a0c13SJung-uk Kim  * MCFG - PCI Memory Mapped Configuration table and subtable
1311d6dd1baeSJung-uk Kim  *        Version 1
1312d6dd1baeSJung-uk Kim  *
1313d6dd1baeSJung-uk Kim  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1314d6dd1baeSJung-uk Kim  *
1315d6dd1baeSJung-uk Kim  ******************************************************************************/
1316d6dd1baeSJung-uk Kim 
1317d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg
1318d6dd1baeSJung-uk Kim {
1319d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1320d6dd1baeSJung-uk Kim     UINT8                   Reserved[8];
1321d6dd1baeSJung-uk Kim 
1322d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG;
1323d6dd1baeSJung-uk Kim 
1324d6dd1baeSJung-uk Kim 
1325d6dd1baeSJung-uk Kim /* Subtable */
1326d6dd1baeSJung-uk Kim 
1327d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation
1328d6dd1baeSJung-uk Kim {
1329d6dd1baeSJung-uk Kim     UINT64                  Address;            /* Base address, processor-relative */
1330d6dd1baeSJung-uk Kim     UINT16                  PciSegment;         /* PCI segment group number */
1331d6dd1baeSJung-uk Kim     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1332d6dd1baeSJung-uk Kim     UINT8                   EndBusNumber;       /* Final PCI Bus number */
1333d6dd1baeSJung-uk Kim     UINT32                  Reserved;
1334d6dd1baeSJung-uk Kim 
1335d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION;
1336d6dd1baeSJung-uk Kim 
1337d6dd1baeSJung-uk Kim 
1338d6dd1baeSJung-uk Kim /*******************************************************************************
1339d6dd1baeSJung-uk Kim  *
1340ca3cf4faSJung-uk Kim  * MCHI - Management Controller Host Interface Table
1341ca3cf4faSJung-uk Kim  *        Version 1
1342ca3cf4faSJung-uk Kim  *
1343ca3cf4faSJung-uk Kim  * Conforms to "Management Component Transport Protocol (MCTP) Host
1344ca3cf4faSJung-uk Kim  * Interface Specification", Revision 1.0.0a, October 13, 2009
1345ca3cf4faSJung-uk Kim  *
1346ca3cf4faSJung-uk Kim  ******************************************************************************/
1347ca3cf4faSJung-uk Kim 
1348ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi
1349ca3cf4faSJung-uk Kim {
1350ca3cf4faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1351ca3cf4faSJung-uk Kim     UINT8                   InterfaceType;
1352ca3cf4faSJung-uk Kim     UINT8                   Protocol;
1353ca3cf4faSJung-uk Kim     UINT64                  ProtocolData;
1354ca3cf4faSJung-uk Kim     UINT8                   InterruptType;
1355ca3cf4faSJung-uk Kim     UINT8                   Gpe;
1356ca3cf4faSJung-uk Kim     UINT8                   PciDeviceFlag;
1357ca3cf4faSJung-uk Kim     UINT32                  GlobalInterrupt;
1358ca3cf4faSJung-uk Kim     ACPI_GENERIC_ADDRESS    ControlRegister;
1359ca3cf4faSJung-uk Kim     UINT8                   PciSegment;
1360ca3cf4faSJung-uk Kim     UINT8                   PciBus;
1361ca3cf4faSJung-uk Kim     UINT8                   PciDevice;
1362ca3cf4faSJung-uk Kim     UINT8                   PciFunction;
1363ca3cf4faSJung-uk Kim 
1364ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI;
1365ca3cf4faSJung-uk Kim 
1366ca3cf4faSJung-uk Kim 
1367ca3cf4faSJung-uk Kim /*******************************************************************************
1368ca3cf4faSJung-uk Kim  *
13697cf3e94aSJung-uk Kim  * MSDM - Microsoft Data Management table
13707cf3e94aSJung-uk Kim  *
13717cf3e94aSJung-uk Kim  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
13727cf3e94aSJung-uk Kim  * November 29, 2011. Copyright 2011 Microsoft
13737cf3e94aSJung-uk Kim  *
13747cf3e94aSJung-uk Kim  ******************************************************************************/
13757cf3e94aSJung-uk Kim 
13767cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */
13777cf3e94aSJung-uk Kim 
13787cf3e94aSJung-uk Kim typedef struct acpi_table_msdm
13797cf3e94aSJung-uk Kim {
13807cf3e94aSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
13817cf3e94aSJung-uk Kim 
13827cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM;
13837cf3e94aSJung-uk Kim 
13847cf3e94aSJung-uk Kim 
13857cf3e94aSJung-uk Kim /*******************************************************************************
13867cf3e94aSJung-uk Kim  *
13879c48c75eSJung-uk Kim  * MTMR - MID Timer Table
13889c48c75eSJung-uk Kim  *        Version 1
13899c48c75eSJung-uk Kim  *
13909c48c75eSJung-uk Kim  * Conforms to "Simple Firmware Interface Specification",
13919c48c75eSJung-uk Kim  * Draft 0.8.2, Oct 19, 2010
13929c48c75eSJung-uk Kim  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
13939c48c75eSJung-uk Kim  *
13949c48c75eSJung-uk Kim  ******************************************************************************/
13959c48c75eSJung-uk Kim 
13969c48c75eSJung-uk Kim typedef struct acpi_table_mtmr
13979c48c75eSJung-uk Kim {
13989c48c75eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
13999c48c75eSJung-uk Kim 
14009c48c75eSJung-uk Kim } ACPI_TABLE_MTMR;
14019c48c75eSJung-uk Kim 
14029c48c75eSJung-uk Kim /* MTMR entry */
14039c48c75eSJung-uk Kim 
14049c48c75eSJung-uk Kim typedef struct acpi_mtmr_entry
14059c48c75eSJung-uk Kim {
14069c48c75eSJung-uk Kim     ACPI_GENERIC_ADDRESS    PhysicalAddress;
14079c48c75eSJung-uk Kim     UINT32                  Frequency;
14089c48c75eSJung-uk Kim     UINT32                  Irq;
14099c48c75eSJung-uk Kim 
14109c48c75eSJung-uk Kim } ACPI_MTMR_ENTRY;
14119c48c75eSJung-uk Kim 
14129c48c75eSJung-uk Kim 
14139c48c75eSJung-uk Kim /*******************************************************************************
14149c48c75eSJung-uk Kim  *
1415dcbce41eSJung-uk Kim  * SLIC - Software Licensing Description Table
1416dcbce41eSJung-uk Kim  *
14177cf3e94aSJung-uk Kim  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
14187cf3e94aSJung-uk Kim  * November 29, 2011. Copyright 2011 Microsoft
1419dcbce41eSJung-uk Kim  *
1420dcbce41eSJung-uk Kim  ******************************************************************************/
1421dcbce41eSJung-uk Kim 
1422dcbce41eSJung-uk Kim /* Basic SLIC table is only the common ACPI header */
1423dcbce41eSJung-uk Kim 
1424dcbce41eSJung-uk Kim typedef struct acpi_table_slic
1425dcbce41eSJung-uk Kim {
1426dcbce41eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1427dcbce41eSJung-uk Kim 
1428dcbce41eSJung-uk Kim } ACPI_TABLE_SLIC;
1429dcbce41eSJung-uk Kim 
1430dcbce41eSJung-uk Kim 
1431dcbce41eSJung-uk Kim /*******************************************************************************
1432dcbce41eSJung-uk Kim  *
1433d6dd1baeSJung-uk Kim  * SPCR - Serial Port Console Redirection table
1434f8146b88SJung-uk Kim  *        Version 2
1435d6dd1baeSJung-uk Kim  *
1436d6dd1baeSJung-uk Kim  * Conforms to "Serial Port Console Redirection Table",
1437f8146b88SJung-uk Kim  * Version 1.03, August 10, 2015
1438d6dd1baeSJung-uk Kim  *
1439d6dd1baeSJung-uk Kim  ******************************************************************************/
1440d6dd1baeSJung-uk Kim 
1441d6dd1baeSJung-uk Kim typedef struct acpi_table_spcr
1442d6dd1baeSJung-uk Kim {
1443d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1444d6dd1baeSJung-uk Kim     UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
1445d6dd1baeSJung-uk Kim     UINT8                   Reserved[3];
1446d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    SerialPort;
1447d6dd1baeSJung-uk Kim     UINT8                   InterruptType;
1448d6dd1baeSJung-uk Kim     UINT8                   PcInterrupt;
1449d6dd1baeSJung-uk Kim     UINT32                  Interrupt;
1450d6dd1baeSJung-uk Kim     UINT8                   BaudRate;
1451d6dd1baeSJung-uk Kim     UINT8                   Parity;
1452d6dd1baeSJung-uk Kim     UINT8                   StopBits;
1453d6dd1baeSJung-uk Kim     UINT8                   FlowControl;
1454d6dd1baeSJung-uk Kim     UINT8                   TerminalType;
1455d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
1456d6dd1baeSJung-uk Kim     UINT16                  PciDeviceId;
1457d6dd1baeSJung-uk Kim     UINT16                  PciVendorId;
1458d6dd1baeSJung-uk Kim     UINT8                   PciBus;
1459d6dd1baeSJung-uk Kim     UINT8                   PciDevice;
1460d6dd1baeSJung-uk Kim     UINT8                   PciFunction;
1461d6dd1baeSJung-uk Kim     UINT32                  PciFlags;
1462d6dd1baeSJung-uk Kim     UINT8                   PciSegment;
1463d6dd1baeSJung-uk Kim     UINT32                  Reserved2;
1464d6dd1baeSJung-uk Kim 
1465d6dd1baeSJung-uk Kim } ACPI_TABLE_SPCR;
1466d6dd1baeSJung-uk Kim 
1467d6dd1baeSJung-uk Kim /* Masks for PciFlags field above */
1468d6dd1baeSJung-uk Kim 
1469d6dd1baeSJung-uk Kim #define ACPI_SPCR_DO_NOT_DISABLE    (1)
1470d6dd1baeSJung-uk Kim 
1471f8146b88SJung-uk Kim /* Values for Interface Type: See the definition of the DBG2 table */
1472f8146b88SJung-uk Kim 
1473d6dd1baeSJung-uk Kim 
1474d6dd1baeSJung-uk Kim /*******************************************************************************
1475d6dd1baeSJung-uk Kim  *
1476d6dd1baeSJung-uk Kim  * SPMI - Server Platform Management Interface table
1477d6dd1baeSJung-uk Kim  *        Version 5
1478d6dd1baeSJung-uk Kim  *
1479d6dd1baeSJung-uk Kim  * Conforms to "Intelligent Platform Management Interface Specification
1480d6dd1baeSJung-uk Kim  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
1481d6dd1baeSJung-uk Kim  * June 12, 2009 markup.
1482d6dd1baeSJung-uk Kim  *
1483d6dd1baeSJung-uk Kim  ******************************************************************************/
1484d6dd1baeSJung-uk Kim 
1485d6dd1baeSJung-uk Kim typedef struct acpi_table_spmi
1486d6dd1baeSJung-uk Kim {
1487d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1488d6dd1baeSJung-uk Kim     UINT8                   InterfaceType;
1489d6dd1baeSJung-uk Kim     UINT8                   Reserved;           /* Must be 1 */
1490d6dd1baeSJung-uk Kim     UINT16                  SpecRevision;       /* Version of IPMI */
1491d6dd1baeSJung-uk Kim     UINT8                   InterruptType;
1492d6dd1baeSJung-uk Kim     UINT8                   GpeNumber;          /* GPE assigned */
1493d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
1494d6dd1baeSJung-uk Kim     UINT8                   PciDeviceFlag;
1495d6dd1baeSJung-uk Kim     UINT32                  Interrupt;
1496d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    IpmiRegister;
1497d6dd1baeSJung-uk Kim     UINT8                   PciSegment;
1498d6dd1baeSJung-uk Kim     UINT8                   PciBus;
1499d6dd1baeSJung-uk Kim     UINT8                   PciDevice;
1500d6dd1baeSJung-uk Kim     UINT8                   PciFunction;
1501d6dd1baeSJung-uk Kim     UINT8                   Reserved2;
1502d6dd1baeSJung-uk Kim 
1503d6dd1baeSJung-uk Kim } ACPI_TABLE_SPMI;
1504d6dd1baeSJung-uk Kim 
1505d6dd1baeSJung-uk Kim /* Values for InterfaceType above */
1506d6dd1baeSJung-uk Kim 
1507d6dd1baeSJung-uk Kim enum AcpiSpmiInterfaceTypes
1508d6dd1baeSJung-uk Kim {
1509d6dd1baeSJung-uk Kim     ACPI_SPMI_NOT_USED              = 0,
1510d6dd1baeSJung-uk Kim     ACPI_SPMI_KEYBOARD              = 1,
1511d6dd1baeSJung-uk Kim     ACPI_SPMI_SMI                   = 2,
1512d6dd1baeSJung-uk Kim     ACPI_SPMI_BLOCK_TRANSFER        = 3,
1513d6dd1baeSJung-uk Kim     ACPI_SPMI_SMBUS                 = 4,
1514d6dd1baeSJung-uk Kim     ACPI_SPMI_RESERVED              = 5         /* 5 and above are reserved */
1515d6dd1baeSJung-uk Kim };
1516d6dd1baeSJung-uk Kim 
1517d6dd1baeSJung-uk Kim 
1518d6dd1baeSJung-uk Kim /*******************************************************************************
1519d6dd1baeSJung-uk Kim  *
1520d6dd1baeSJung-uk Kim  * TCPA - Trusted Computing Platform Alliance table
15215ef50723SJung-uk Kim  *        Version 2
1522d6dd1baeSJung-uk Kim  *
15235ef50723SJung-uk Kim  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
15245ef50723SJung-uk Kim  * December 19, 2014
15255ef50723SJung-uk Kim  *
15265ef50723SJung-uk Kim  * NOTE: There are two versions of the table with the same signature --
1527fe0f0bbbSJung-uk Kim  * the client version and the server version. The common PlatformClass
1528fe0f0bbbSJung-uk Kim  * field is used to differentiate the two types of tables.
1529d6dd1baeSJung-uk Kim  *
1530d6dd1baeSJung-uk Kim  ******************************************************************************/
1531d6dd1baeSJung-uk Kim 
1532fe0f0bbbSJung-uk Kim typedef struct acpi_table_tcpa_hdr
1533d6dd1baeSJung-uk Kim {
1534d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
15355ef50723SJung-uk Kim     UINT16                  PlatformClass;
1536fe0f0bbbSJung-uk Kim 
1537fe0f0bbbSJung-uk Kim } ACPI_TABLE_TCPA_HDR;
1538fe0f0bbbSJung-uk Kim 
1539fe0f0bbbSJung-uk Kim /*
1540fe0f0bbbSJung-uk Kim  * Values for PlatformClass above.
1541fe0f0bbbSJung-uk Kim  * This is how the client and server subtables are differentiated
1542fe0f0bbbSJung-uk Kim  */
1543fe0f0bbbSJung-uk Kim #define ACPI_TCPA_CLIENT_TABLE          0
1544fe0f0bbbSJung-uk Kim #define ACPI_TCPA_SERVER_TABLE          1
1545fe0f0bbbSJung-uk Kim 
1546fe0f0bbbSJung-uk Kim 
1547fe0f0bbbSJung-uk Kim typedef struct acpi_table_tcpa_client
1548fe0f0bbbSJung-uk Kim {
15495ef50723SJung-uk Kim     UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
1550d6dd1baeSJung-uk Kim     UINT64                  LogAddress;         /* Address of the event log area */
1551d6dd1baeSJung-uk Kim 
15525ef50723SJung-uk Kim } ACPI_TABLE_TCPA_CLIENT;
15535ef50723SJung-uk Kim 
15545ef50723SJung-uk Kim typedef struct acpi_table_tcpa_server
15555ef50723SJung-uk Kim {
15565ef50723SJung-uk Kim     UINT16                  Reserved;
15575ef50723SJung-uk Kim     UINT64                  MinimumLogLength;   /* Minimum length for the event log area */
15585ef50723SJung-uk Kim     UINT64                  LogAddress;         /* Address of the event log area */
15595ef50723SJung-uk Kim     UINT16                  SpecRevision;
15605ef50723SJung-uk Kim     UINT8                   DeviceFlags;
15615ef50723SJung-uk Kim     UINT8                   InterruptFlags;
15625ef50723SJung-uk Kim     UINT8                   GpeNumber;
15635ef50723SJung-uk Kim     UINT8                   Reserved2[3];
15645ef50723SJung-uk Kim     UINT32                  GlobalInterrupt;
15655ef50723SJung-uk Kim     ACPI_GENERIC_ADDRESS    Address;
15665ef50723SJung-uk Kim     UINT32                  Reserved3;
15675ef50723SJung-uk Kim     ACPI_GENERIC_ADDRESS    ConfigAddress;
15685ef50723SJung-uk Kim     UINT8                   Group;
15695ef50723SJung-uk Kim     UINT8                   Bus;                /* PCI Bus/Segment/Function numbers */
15705ef50723SJung-uk Kim     UINT8                   Device;
15715ef50723SJung-uk Kim     UINT8                   Function;
15725ef50723SJung-uk Kim 
15735ef50723SJung-uk Kim } ACPI_TABLE_TCPA_SERVER;
15745ef50723SJung-uk Kim 
15755ef50723SJung-uk Kim /* Values for DeviceFlags above */
15765ef50723SJung-uk Kim 
15775ef50723SJung-uk Kim #define ACPI_TCPA_PCI_DEVICE            (1)
15785ef50723SJung-uk Kim #define ACPI_TCPA_BUS_PNP               (1<<1)
15795ef50723SJung-uk Kim #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
15805ef50723SJung-uk Kim 
15815ef50723SJung-uk Kim /* Values for InterruptFlags above */
15825ef50723SJung-uk Kim 
15835ef50723SJung-uk Kim #define ACPI_TCPA_INTERRUPT_MODE        (1)
15845ef50723SJung-uk Kim #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
15855ef50723SJung-uk Kim #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
15865ef50723SJung-uk Kim #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
15875ef50723SJung-uk Kim 
15885ef50723SJung-uk Kim 
15895ef50723SJung-uk Kim /*******************************************************************************
15905ef50723SJung-uk Kim  *
15915ef50723SJung-uk Kim  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
15925ef50723SJung-uk Kim  *        Version 4
15935ef50723SJung-uk Kim  *
15945ef50723SJung-uk Kim  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
15955ef50723SJung-uk Kim  * December 19, 2014
15965ef50723SJung-uk Kim  *
15975ef50723SJung-uk Kim  ******************************************************************************/
15985ef50723SJung-uk Kim 
15995ef50723SJung-uk Kim typedef struct acpi_table_tpm2
16005ef50723SJung-uk Kim {
16015ef50723SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
16025ef50723SJung-uk Kim     UINT16                  PlatformClass;
16035ef50723SJung-uk Kim     UINT16                  Reserved;
16045ef50723SJung-uk Kim     UINT64                  ControlAddress;
16055ef50723SJung-uk Kim     UINT32                  StartMethod;
16065ef50723SJung-uk Kim 
16075ef50723SJung-uk Kim     /* Platform-specific data follows */
16085ef50723SJung-uk Kim 
16095ef50723SJung-uk Kim } ACPI_TABLE_TPM2;
16105ef50723SJung-uk Kim 
16115ef50723SJung-uk Kim /* Values for StartMethod above */
16125ef50723SJung-uk Kim 
16135ef50723SJung-uk Kim #define ACPI_TPM2_NOT_ALLOWED                       0
16145ef50723SJung-uk Kim #define ACPI_TPM2_START_METHOD                      2
16155ef50723SJung-uk Kim #define ACPI_TPM2_MEMORY_MAPPED                     6
16165ef50723SJung-uk Kim #define ACPI_TPM2_COMMAND_BUFFER                    7
16175ef50723SJung-uk Kim #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
1618d6dd1baeSJung-uk Kim 
1619d6dd1baeSJung-uk Kim 
1620d6dd1baeSJung-uk Kim /*******************************************************************************
1621d6dd1baeSJung-uk Kim  *
1622d6dd1baeSJung-uk Kim  * UEFI - UEFI Boot optimization Table
1623d6dd1baeSJung-uk Kim  *        Version 1
1624d6dd1baeSJung-uk Kim  *
1625d6dd1baeSJung-uk Kim  * Conforms to "Unified Extensible Firmware Interface Specification",
1626d6dd1baeSJung-uk Kim  * Version 2.3, May 8, 2009
1627d6dd1baeSJung-uk Kim  *
1628d6dd1baeSJung-uk Kim  ******************************************************************************/
1629d6dd1baeSJung-uk Kim 
1630d6dd1baeSJung-uk Kim typedef struct acpi_table_uefi
1631d6dd1baeSJung-uk Kim {
1632d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1633d6dd1baeSJung-uk Kim     UINT8                   Identifier[16];     /* UUID identifier */
1634d6dd1baeSJung-uk Kim     UINT16                  DataOffset;         /* Offset of remaining data in table */
1635d6dd1baeSJung-uk Kim 
1636d6dd1baeSJung-uk Kim } ACPI_TABLE_UEFI;
1637d6dd1baeSJung-uk Kim 
1638d6dd1baeSJung-uk Kim 
1639d6dd1baeSJung-uk Kim /*******************************************************************************
1640d6dd1baeSJung-uk Kim  *
16419c48c75eSJung-uk Kim  * VRTC - Virtual Real Time Clock Table
16429c48c75eSJung-uk Kim  *        Version 1
16439c48c75eSJung-uk Kim  *
16449c48c75eSJung-uk Kim  * Conforms to "Simple Firmware Interface Specification",
16459c48c75eSJung-uk Kim  * Draft 0.8.2, Oct 19, 2010
16469c48c75eSJung-uk Kim  * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
16479c48c75eSJung-uk Kim  *
16489c48c75eSJung-uk Kim  ******************************************************************************/
16499c48c75eSJung-uk Kim 
16509c48c75eSJung-uk Kim typedef struct acpi_table_vrtc
16519c48c75eSJung-uk Kim {
16529c48c75eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
16539c48c75eSJung-uk Kim 
16549c48c75eSJung-uk Kim } ACPI_TABLE_VRTC;
16559c48c75eSJung-uk Kim 
16569c48c75eSJung-uk Kim /* VRTC entry */
16579c48c75eSJung-uk Kim 
16589c48c75eSJung-uk Kim typedef struct acpi_vrtc_entry
16599c48c75eSJung-uk Kim {
16609c48c75eSJung-uk Kim     ACPI_GENERIC_ADDRESS    PhysicalAddress;
16619c48c75eSJung-uk Kim     UINT32                  Irq;
16629c48c75eSJung-uk Kim 
16639c48c75eSJung-uk Kim } ACPI_VRTC_ENTRY;
16649c48c75eSJung-uk Kim 
16659c48c75eSJung-uk Kim 
16669c48c75eSJung-uk Kim /*******************************************************************************
16679c48c75eSJung-uk Kim  *
1668d6dd1baeSJung-uk Kim  * WAET - Windows ACPI Emulated devices Table
1669d6dd1baeSJung-uk Kim  *        Version 1
1670d6dd1baeSJung-uk Kim  *
1671d6dd1baeSJung-uk Kim  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
1672d6dd1baeSJung-uk Kim  *
1673d6dd1baeSJung-uk Kim  ******************************************************************************/
1674d6dd1baeSJung-uk Kim 
1675d6dd1baeSJung-uk Kim typedef struct acpi_table_waet
1676d6dd1baeSJung-uk Kim {
1677d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1678d6dd1baeSJung-uk Kim     UINT32                  Flags;
1679d6dd1baeSJung-uk Kim 
1680d6dd1baeSJung-uk Kim } ACPI_TABLE_WAET;
1681d6dd1baeSJung-uk Kim 
1682d6dd1baeSJung-uk Kim /* Masks for Flags field above */
1683d6dd1baeSJung-uk Kim 
1684d6dd1baeSJung-uk Kim #define ACPI_WAET_RTC_NO_ACK        (1)         /* RTC requires no int acknowledge */
1685d6dd1baeSJung-uk Kim #define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
1686d6dd1baeSJung-uk Kim 
1687d6dd1baeSJung-uk Kim 
1688d6dd1baeSJung-uk Kim /*******************************************************************************
1689d6dd1baeSJung-uk Kim  *
1690d6dd1baeSJung-uk Kim  * WDAT - Watchdog Action Table
1691d6dd1baeSJung-uk Kim  *        Version 1
1692d6dd1baeSJung-uk Kim  *
1693d6dd1baeSJung-uk Kim  * Conforms to "Hardware Watchdog Timers Design Specification",
1694d6dd1baeSJung-uk Kim  * Copyright 2006 Microsoft Corporation.
1695d6dd1baeSJung-uk Kim  *
1696d6dd1baeSJung-uk Kim  ******************************************************************************/
1697d6dd1baeSJung-uk Kim 
1698d6dd1baeSJung-uk Kim typedef struct acpi_table_wdat
1699d6dd1baeSJung-uk Kim {
1700d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1701d6dd1baeSJung-uk Kim     UINT32                  HeaderLength;       /* Watchdog Header Length */
1702d6dd1baeSJung-uk Kim     UINT16                  PciSegment;         /* PCI Segment number */
1703d6dd1baeSJung-uk Kim     UINT8                   PciBus;             /* PCI Bus number */
1704d6dd1baeSJung-uk Kim     UINT8                   PciDevice;          /* PCI Device number */
1705d6dd1baeSJung-uk Kim     UINT8                   PciFunction;        /* PCI Function number */
1706d6dd1baeSJung-uk Kim     UINT8                   Reserved[3];
1707d6dd1baeSJung-uk Kim     UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
1708d6dd1baeSJung-uk Kim     UINT32                  MaxCount;           /* Maximum counter value supported */
1709d6dd1baeSJung-uk Kim     UINT32                  MinCount;           /* Minimum counter value */
1710d6dd1baeSJung-uk Kim     UINT8                   Flags;
1711d6dd1baeSJung-uk Kim     UINT8                   Reserved2[3];
1712d6dd1baeSJung-uk Kim     UINT32                  Entries;            /* Number of watchdog entries that follow */
1713d6dd1baeSJung-uk Kim 
1714d6dd1baeSJung-uk Kim } ACPI_TABLE_WDAT;
1715d6dd1baeSJung-uk Kim 
1716d6dd1baeSJung-uk Kim /* Masks for Flags field above */
1717d6dd1baeSJung-uk Kim 
1718d6dd1baeSJung-uk Kim #define ACPI_WDAT_ENABLED           (1)
1719d6dd1baeSJung-uk Kim #define ACPI_WDAT_STOPPED           0x80
1720d6dd1baeSJung-uk Kim 
1721d6dd1baeSJung-uk Kim 
1722d6dd1baeSJung-uk Kim /* WDAT Instruction Entries (actions) */
1723d6dd1baeSJung-uk Kim 
1724d6dd1baeSJung-uk Kim typedef struct acpi_wdat_entry
1725d6dd1baeSJung-uk Kim {
1726d6dd1baeSJung-uk Kim     UINT8                   Action;
1727d6dd1baeSJung-uk Kim     UINT8                   Instruction;
1728d6dd1baeSJung-uk Kim     UINT16                  Reserved;
1729d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    RegisterRegion;
1730d6dd1baeSJung-uk Kim     UINT32                  Value;              /* Value used with Read/Write register */
1731d6dd1baeSJung-uk Kim     UINT32                  Mask;               /* Bitmask required for this register instruction */
1732d6dd1baeSJung-uk Kim 
1733d6dd1baeSJung-uk Kim } ACPI_WDAT_ENTRY;
1734d6dd1baeSJung-uk Kim 
1735d6dd1baeSJung-uk Kim /* Values for Action field above */
1736d6dd1baeSJung-uk Kim 
1737d6dd1baeSJung-uk Kim enum AcpiWdatActions
1738d6dd1baeSJung-uk Kim {
1739d6dd1baeSJung-uk Kim     ACPI_WDAT_RESET                 = 1,
1740d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1741d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_COUNTDOWN         = 5,
1742d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_COUNTDOWN         = 6,
1743d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_RUNNING_STATE     = 8,
1744d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_RUNNING_STATE     = 9,
1745d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_STOPPED_STATE     = 10,
1746d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_STOPPED_STATE     = 11,
1747d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_REBOOT            = 16,
1748d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_REBOOT            = 17,
1749d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_SHUTDOWN          = 18,
1750d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_SHUTDOWN          = 19,
1751d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_STATUS            = 32,
1752d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_STATUS            = 33,
1753d6dd1baeSJung-uk Kim     ACPI_WDAT_ACTION_RESERVED       = 34    /* 34 and greater are reserved */
1754d6dd1baeSJung-uk Kim };
1755d6dd1baeSJung-uk Kim 
1756d6dd1baeSJung-uk Kim /* Values for Instruction field above */
1757d6dd1baeSJung-uk Kim 
1758d6dd1baeSJung-uk Kim enum AcpiWdatInstructions
1759d6dd1baeSJung-uk Kim {
1760d6dd1baeSJung-uk Kim     ACPI_WDAT_READ_VALUE            = 0,
1761d6dd1baeSJung-uk Kim     ACPI_WDAT_READ_COUNTDOWN        = 1,
1762d6dd1baeSJung-uk Kim     ACPI_WDAT_WRITE_VALUE           = 2,
1763d6dd1baeSJung-uk Kim     ACPI_WDAT_WRITE_COUNTDOWN       = 3,
1764d6dd1baeSJung-uk Kim     ACPI_WDAT_INSTRUCTION_RESERVED  = 4,    /* 4 and greater are reserved */
1765d6dd1baeSJung-uk Kim     ACPI_WDAT_PRESERVE_REGISTER     = 0x80  /* Except for this value */
1766d6dd1baeSJung-uk Kim };
1767d6dd1baeSJung-uk Kim 
1768d6dd1baeSJung-uk Kim 
1769d6dd1baeSJung-uk Kim /*******************************************************************************
1770d6dd1baeSJung-uk Kim  *
1771a88e22b7SJung-uk Kim  * WDDT - Watchdog Descriptor Table
1772a88e22b7SJung-uk Kim  *        Version 1
1773a88e22b7SJung-uk Kim  *
1774a88e22b7SJung-uk Kim  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
1775a88e22b7SJung-uk Kim  * Version 001, September 2002
1776a88e22b7SJung-uk Kim  *
1777a88e22b7SJung-uk Kim  ******************************************************************************/
1778a88e22b7SJung-uk Kim 
1779a88e22b7SJung-uk Kim typedef struct acpi_table_wddt
1780a88e22b7SJung-uk Kim {
1781a88e22b7SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1782a88e22b7SJung-uk Kim     UINT16                  SpecVersion;
1783a88e22b7SJung-uk Kim     UINT16                  TableVersion;
1784a88e22b7SJung-uk Kim     UINT16                  PciVendorId;
1785a88e22b7SJung-uk Kim     ACPI_GENERIC_ADDRESS    Address;
1786a88e22b7SJung-uk Kim     UINT16                  MaxCount;           /* Maximum counter value supported */
1787a88e22b7SJung-uk Kim     UINT16                  MinCount;           /* Minimum counter value supported */
1788a88e22b7SJung-uk Kim     UINT16                  Period;
1789a88e22b7SJung-uk Kim     UINT16                  Status;
1790a88e22b7SJung-uk Kim     UINT16                  Capability;
1791a88e22b7SJung-uk Kim 
1792a88e22b7SJung-uk Kim } ACPI_TABLE_WDDT;
1793a88e22b7SJung-uk Kim 
1794a88e22b7SJung-uk Kim /* Flags for Status field above */
1795a88e22b7SJung-uk Kim 
1796a88e22b7SJung-uk Kim #define ACPI_WDDT_AVAILABLE     (1)
1797a88e22b7SJung-uk Kim #define ACPI_WDDT_ACTIVE        (1<<1)
1798a88e22b7SJung-uk Kim #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
1799a88e22b7SJung-uk Kim #define ACPI_WDDT_USER_RESET    (1<<11)
1800a88e22b7SJung-uk Kim #define ACPI_WDDT_WDT_RESET     (1<<12)
1801a88e22b7SJung-uk Kim #define ACPI_WDDT_POWER_FAIL    (1<<13)
1802a88e22b7SJung-uk Kim #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
1803a88e22b7SJung-uk Kim 
1804a88e22b7SJung-uk Kim /* Flags for Capability field above */
1805a88e22b7SJung-uk Kim 
1806a88e22b7SJung-uk Kim #define ACPI_WDDT_AUTO_RESET    (1)
1807a88e22b7SJung-uk Kim #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
1808a88e22b7SJung-uk Kim 
1809a88e22b7SJung-uk Kim 
1810a88e22b7SJung-uk Kim /*******************************************************************************
1811a88e22b7SJung-uk Kim  *
1812d6dd1baeSJung-uk Kim  * WDRT - Watchdog Resource Table
1813d6dd1baeSJung-uk Kim  *        Version 1
1814d6dd1baeSJung-uk Kim  *
1815d6dd1baeSJung-uk Kim  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
1816d6dd1baeSJung-uk Kim  * Version 1.01, August 28, 2006
1817d6dd1baeSJung-uk Kim  *
1818d6dd1baeSJung-uk Kim  ******************************************************************************/
1819d6dd1baeSJung-uk Kim 
1820d6dd1baeSJung-uk Kim typedef struct acpi_table_wdrt
1821d6dd1baeSJung-uk Kim {
1822d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1823d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    ControlRegister;
1824d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    CountRegister;
1825d6dd1baeSJung-uk Kim     UINT16                  PciDeviceId;
1826d6dd1baeSJung-uk Kim     UINT16                  PciVendorId;
1827d6dd1baeSJung-uk Kim     UINT8                   PciBus;             /* PCI Bus number */
1828d6dd1baeSJung-uk Kim     UINT8                   PciDevice;          /* PCI Device number */
1829d6dd1baeSJung-uk Kim     UINT8                   PciFunction;        /* PCI Function number */
1830d6dd1baeSJung-uk Kim     UINT8                   PciSegment;         /* PCI Segment number */
1831d6dd1baeSJung-uk Kim     UINT16                  MaxCount;           /* Maximum counter value supported */
1832d6dd1baeSJung-uk Kim     UINT8                   Units;
1833d6dd1baeSJung-uk Kim 
1834d6dd1baeSJung-uk Kim } ACPI_TABLE_WDRT;
1835d6dd1baeSJung-uk Kim 
1836d6dd1baeSJung-uk Kim 
1837d6dd1baeSJung-uk Kim /* Reset to default packing */
1838d6dd1baeSJung-uk Kim 
1839d6dd1baeSJung-uk Kim #pragma pack()
1840d6dd1baeSJung-uk Kim 
1841d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */
1842