xref: /freebsd/sys/contrib/dev/acpica/include/actbl2.h (revision 2f6a1a81bb01192c179cf8400174c4173faa6511)
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 
70d84335fSJung-uk Kim /******************************************************************************
80d84335fSJung-uk Kim  *
90d84335fSJung-uk Kim  * 1. Copyright Notice
100d84335fSJung-uk Kim  *
110d84335fSJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
12d6dd1baeSJung-uk Kim  * All rights reserved.
13d6dd1baeSJung-uk Kim  *
140d84335fSJung-uk Kim  * 2. License
150d84335fSJung-uk Kim  *
160d84335fSJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
170d84335fSJung-uk Kim  * rights. You may have additional license terms from the party that provided
180d84335fSJung-uk Kim  * you this software, covering your right to use that party's intellectual
190d84335fSJung-uk Kim  * property rights.
200d84335fSJung-uk Kim  *
210d84335fSJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
220d84335fSJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
230d84335fSJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
240d84335fSJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
250d84335fSJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
260d84335fSJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
270d84335fSJung-uk Kim  *
280d84335fSJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
290d84335fSJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
300d84335fSJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
310d84335fSJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
320d84335fSJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
330d84335fSJung-uk Kim  * license, and in no event shall the patent license extend to any additions
340d84335fSJung-uk Kim  * to or modifications of the Original Intel Code. No other license or right
350d84335fSJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
360d84335fSJung-uk Kim  *
370d84335fSJung-uk Kim  * The above copyright and patent license is granted only if the following
380d84335fSJung-uk Kim  * conditions are met:
390d84335fSJung-uk Kim  *
400d84335fSJung-uk Kim  * 3. Conditions
410d84335fSJung-uk Kim  *
420d84335fSJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
430d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
440d84335fSJung-uk Kim  * Code or modification with rights to further distribute source must include
450d84335fSJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
460d84335fSJung-uk Kim  * and the following Disclaimer and Export Compliance provision. In addition,
470d84335fSJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
480d84335fSJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
490d84335fSJung-uk Kim  * Code and the date of any change. Licensee must include in that file the
500d84335fSJung-uk Kim  * documentation of any changes made by any predecessor Licensee. Licensee
510d84335fSJung-uk Kim  * must include a prominent statement that the modification is derived,
520d84335fSJung-uk Kim  * directly or indirectly, from Original Intel Code.
530d84335fSJung-uk Kim  *
540d84335fSJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
550d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
560d84335fSJung-uk Kim  * Code or modification without rights to further distribute source must
570d84335fSJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
580d84335fSJung-uk Kim  * documentation and/or other materials provided with distribution. In
590d84335fSJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
600d84335fSJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
610d84335fSJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
620d84335fSJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
630d84335fSJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
640d84335fSJung-uk Kim  * make.
650d84335fSJung-uk Kim  *
660d84335fSJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
670d84335fSJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
680d84335fSJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
690d84335fSJung-uk Kim  * provision in the documentation and/or other materials provided with the
700d84335fSJung-uk Kim  * distribution.
710d84335fSJung-uk Kim  *
720d84335fSJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
730d84335fSJung-uk Kim  * Intel Code.
740d84335fSJung-uk Kim  *
750d84335fSJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
760d84335fSJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
770d84335fSJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
780d84335fSJung-uk Kim  * without prior written authorization from Intel.
790d84335fSJung-uk Kim  *
800d84335fSJung-uk Kim  * 4. Disclaimer and Export Compliance
810d84335fSJung-uk Kim  *
820d84335fSJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
830d84335fSJung-uk Kim  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
840d84335fSJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
850d84335fSJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
860d84335fSJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
870d84335fSJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
880d84335fSJung-uk Kim  * PARTICULAR PURPOSE.
890d84335fSJung-uk Kim  *
900d84335fSJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
910d84335fSJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
920d84335fSJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
930d84335fSJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
940d84335fSJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
950d84335fSJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
960d84335fSJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
970d84335fSJung-uk Kim  * LIMITED REMEDY.
980d84335fSJung-uk Kim  *
990d84335fSJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1000d84335fSJung-uk Kim  * software or system incorporating such software without first obtaining any
1010d84335fSJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
1020d84335fSJung-uk Kim  * any other agency or department of the United States Government. In the
1030d84335fSJung-uk Kim  * event Licensee exports any such software from the United States or
1040d84335fSJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
1050d84335fSJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
1060d84335fSJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
1070d84335fSJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1080d84335fSJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
1090d84335fSJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
1100d84335fSJung-uk Kim  * United States government or any agency thereof requires an export license,
1110d84335fSJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
1120d84335fSJung-uk Kim  * such license, approval or letter.
1130d84335fSJung-uk Kim  *
1140d84335fSJung-uk Kim  *****************************************************************************
1150d84335fSJung-uk Kim  *
1160d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
1170d84335fSJung-uk Kim  * following license:
1180d84335fSJung-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  *
1340d84335fSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1350d84335fSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1360d84335fSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1370d84335fSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1380d84335fSJung-uk Kim  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1390d84335fSJung-uk Kim  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1400d84335fSJung-uk Kim  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1410d84335fSJung-uk Kim  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1420d84335fSJung-uk Kim  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1430d84335fSJung-uk Kim  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1440d84335fSJung-uk Kim  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1450d84335fSJung-uk Kim  *
1460d84335fSJung-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  *
1500d84335fSJung-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 */
1895f9b24faSJung-uk Kim #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated Exception Interface Table */
190d6dd1baeSJung-uk Kim #define ACPI_SIG_SLIC           "SLIC"      /* Software Licensing Description Table */
191d6dd1baeSJung-uk Kim #define ACPI_SIG_SPCR           "SPCR"      /* Serial Port Console Redirection table */
192d6dd1baeSJung-uk Kim #define ACPI_SIG_SPMI           "SPMI"      /* Server Platform Management Interface table */
193d6dd1baeSJung-uk Kim #define ACPI_SIG_TCPA           "TCPA"      /* Trusted Computing Platform Alliance table */
1945ef50723SJung-uk Kim #define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
195d6dd1baeSJung-uk Kim #define ACPI_SIG_UEFI           "UEFI"      /* Uefi Boot Optimization Table */
1969c48c75eSJung-uk Kim #define ACPI_SIG_VRTC           "VRTC"      /* Virtual Real Time Clock Table */
197d6dd1baeSJung-uk Kim #define ACPI_SIG_WAET           "WAET"      /* Windows ACPI Emulated devices Table */
198d6dd1baeSJung-uk Kim #define ACPI_SIG_WDAT           "WDAT"      /* Watchdog Action Table */
199a88e22b7SJung-uk Kim #define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
200d6dd1baeSJung-uk Kim #define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
201af051161SJung-uk Kim #define ACPI_SIG_WSMT           "WSMT"      /* Windows SMM Security Migrations Table */
2020d84335fSJung-uk Kim #define ACPI_SIG_XXXX           "XXXX"      /* Intermediate AML header for ASL/ASL+ converter */
203d6dd1baeSJung-uk Kim 
204a88e22b7SJung-uk Kim #ifdef ACPI_UNDEFINED_TABLES
205a88e22b7SJung-uk Kim /*
206a88e22b7SJung-uk Kim  * These tables have been seen in the field, but no definition has been found
207a88e22b7SJung-uk Kim  */
208a88e22b7SJung-uk Kim #define ACPI_SIG_ATKG           "ATKG"
209a88e22b7SJung-uk Kim #define ACPI_SIG_GSCI           "GSCI"      /* GMCH SCI table */
210a88e22b7SJung-uk Kim #define ACPI_SIG_IEIT           "IEIT"
211a88e22b7SJung-uk Kim #endif
212d6dd1baeSJung-uk Kim 
213d6dd1baeSJung-uk Kim /*
214d6dd1baeSJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
215d6dd1baeSJung-uk Kim  * the tables are provided by the system BIOS.
216d6dd1baeSJung-uk Kim  */
217d6dd1baeSJung-uk Kim #pragma pack(1)
218d6dd1baeSJung-uk Kim 
219d6dd1baeSJung-uk Kim /*
2201df130f1SJung-uk Kim  * Note: C bitfields are not used for this reason:
2211df130f1SJung-uk Kim  *
2221df130f1SJung-uk Kim  * "Bitfields are great and easy to read, but unfortunately the C language
2231df130f1SJung-uk Kim  * does not specify the layout of bitfields in memory, which means they are
2241df130f1SJung-uk Kim  * essentially useless for dealing with packed data in on-disk formats or
2251df130f1SJung-uk Kim  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
2261df130f1SJung-uk Kim  * this decision was a design error in C. Ritchie could have picked an order
2271df130f1SJung-uk Kim  * and stuck with it." Norman Ramsey.
2281df130f1SJung-uk Kim  * See http://stackoverflow.com/a/1053662/41661
229d6dd1baeSJung-uk Kim  */
230d6dd1baeSJung-uk Kim 
231d6dd1baeSJung-uk Kim 
232d6dd1baeSJung-uk Kim /*******************************************************************************
233d6dd1baeSJung-uk Kim  *
234d6dd1baeSJung-uk Kim  * ASF - Alert Standard Format table (Signature "ASF!")
235d6dd1baeSJung-uk Kim  *       Revision 0x10
236d6dd1baeSJung-uk Kim  *
237d6dd1baeSJung-uk Kim  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
238d6dd1baeSJung-uk Kim  *
239d6dd1baeSJung-uk Kim  ******************************************************************************/
240d6dd1baeSJung-uk Kim 
241d6dd1baeSJung-uk Kim typedef struct acpi_table_asf
242d6dd1baeSJung-uk Kim {
243d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
244d6dd1baeSJung-uk Kim 
245d6dd1baeSJung-uk Kim } ACPI_TABLE_ASF;
246d6dd1baeSJung-uk Kim 
247d6dd1baeSJung-uk Kim 
248d6dd1baeSJung-uk Kim /* ASF subtable header */
249d6dd1baeSJung-uk Kim 
250d6dd1baeSJung-uk Kim typedef struct acpi_asf_header
251d6dd1baeSJung-uk Kim {
252d6dd1baeSJung-uk Kim     UINT8                   Type;
253d6dd1baeSJung-uk Kim     UINT8                   Reserved;
254d6dd1baeSJung-uk Kim     UINT16                  Length;
255d6dd1baeSJung-uk Kim 
256d6dd1baeSJung-uk Kim } ACPI_ASF_HEADER;
257d6dd1baeSJung-uk Kim 
258d6dd1baeSJung-uk Kim 
259d6dd1baeSJung-uk Kim /* Values for Type field above */
260d6dd1baeSJung-uk Kim 
261d6dd1baeSJung-uk Kim enum AcpiAsfType
262d6dd1baeSJung-uk Kim {
263d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_INFO          = 0,
264d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_ALERT         = 1,
265d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_CONTROL       = 2,
266d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_BOOT          = 3,
267d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_ADDRESS       = 4,
268d6dd1baeSJung-uk Kim     ACPI_ASF_TYPE_RESERVED      = 5
269d6dd1baeSJung-uk Kim };
270d6dd1baeSJung-uk Kim 
271d6dd1baeSJung-uk Kim /*
272d6dd1baeSJung-uk Kim  * ASF subtables
273d6dd1baeSJung-uk Kim  */
274d6dd1baeSJung-uk Kim 
275d6dd1baeSJung-uk Kim /* 0: ASF Information */
276d6dd1baeSJung-uk Kim 
277d6dd1baeSJung-uk Kim typedef struct acpi_asf_info
278d6dd1baeSJung-uk Kim {
279d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
280d6dd1baeSJung-uk Kim     UINT8                   MinResetValue;
281d6dd1baeSJung-uk Kim     UINT8                   MinPollInterval;
282d6dd1baeSJung-uk Kim     UINT16                  SystemId;
283d6dd1baeSJung-uk Kim     UINT32                  MfgId;
284d6dd1baeSJung-uk Kim     UINT8                   Flags;
285d6dd1baeSJung-uk Kim     UINT8                   Reserved2[3];
286d6dd1baeSJung-uk Kim 
287d6dd1baeSJung-uk Kim } ACPI_ASF_INFO;
288d6dd1baeSJung-uk Kim 
289d6dd1baeSJung-uk Kim /* Masks for Flags field above */
290d6dd1baeSJung-uk Kim 
291d6dd1baeSJung-uk Kim #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
292d6dd1baeSJung-uk Kim 
293d6dd1baeSJung-uk Kim 
294d6dd1baeSJung-uk Kim /* 1: ASF Alerts */
295d6dd1baeSJung-uk Kim 
296d6dd1baeSJung-uk Kim typedef struct acpi_asf_alert
297d6dd1baeSJung-uk Kim {
298d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
299d6dd1baeSJung-uk Kim     UINT8                   AssertMask;
300d6dd1baeSJung-uk Kim     UINT8                   DeassertMask;
301d6dd1baeSJung-uk Kim     UINT8                   Alerts;
302d6dd1baeSJung-uk Kim     UINT8                   DataLength;
303d6dd1baeSJung-uk Kim 
304d6dd1baeSJung-uk Kim } ACPI_ASF_ALERT;
305d6dd1baeSJung-uk Kim 
306d6dd1baeSJung-uk Kim typedef struct acpi_asf_alert_data
307d6dd1baeSJung-uk Kim {
308d6dd1baeSJung-uk Kim     UINT8                   Address;
309d6dd1baeSJung-uk Kim     UINT8                   Command;
310d6dd1baeSJung-uk Kim     UINT8                   Mask;
311d6dd1baeSJung-uk Kim     UINT8                   Value;
312d6dd1baeSJung-uk Kim     UINT8                   SensorType;
313d6dd1baeSJung-uk Kim     UINT8                   Type;
314d6dd1baeSJung-uk Kim     UINT8                   Offset;
315d6dd1baeSJung-uk Kim     UINT8                   SourceType;
316d6dd1baeSJung-uk Kim     UINT8                   Severity;
317d6dd1baeSJung-uk Kim     UINT8                   SensorNumber;
318d6dd1baeSJung-uk Kim     UINT8                   Entity;
319d6dd1baeSJung-uk Kim     UINT8                   Instance;
320d6dd1baeSJung-uk Kim 
321d6dd1baeSJung-uk Kim } ACPI_ASF_ALERT_DATA;
322d6dd1baeSJung-uk Kim 
323d6dd1baeSJung-uk Kim 
324d6dd1baeSJung-uk Kim /* 2: ASF Remote Control */
325d6dd1baeSJung-uk Kim 
326d6dd1baeSJung-uk Kim typedef struct acpi_asf_remote
327d6dd1baeSJung-uk Kim {
328d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
329d6dd1baeSJung-uk Kim     UINT8                   Controls;
330d6dd1baeSJung-uk Kim     UINT8                   DataLength;
331d6dd1baeSJung-uk Kim     UINT16                  Reserved2;
332d6dd1baeSJung-uk Kim 
333d6dd1baeSJung-uk Kim } ACPI_ASF_REMOTE;
334d6dd1baeSJung-uk Kim 
335d6dd1baeSJung-uk Kim typedef struct acpi_asf_control_data
336d6dd1baeSJung-uk Kim {
337d6dd1baeSJung-uk Kim     UINT8                   Function;
338d6dd1baeSJung-uk Kim     UINT8                   Address;
339d6dd1baeSJung-uk Kim     UINT8                   Command;
340d6dd1baeSJung-uk Kim     UINT8                   Value;
341d6dd1baeSJung-uk Kim 
342d6dd1baeSJung-uk Kim } ACPI_ASF_CONTROL_DATA;
343d6dd1baeSJung-uk Kim 
344d6dd1baeSJung-uk Kim 
345d6dd1baeSJung-uk Kim /* 3: ASF RMCP Boot Options */
346d6dd1baeSJung-uk Kim 
347d6dd1baeSJung-uk Kim typedef struct acpi_asf_rmcp
348d6dd1baeSJung-uk Kim {
349d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
350d6dd1baeSJung-uk Kim     UINT8                   Capabilities[7];
351d6dd1baeSJung-uk Kim     UINT8                   CompletionCode;
352d6dd1baeSJung-uk Kim     UINT32                  EnterpriseId;
353d6dd1baeSJung-uk Kim     UINT8                   Command;
354d6dd1baeSJung-uk Kim     UINT16                  Parameter;
355d6dd1baeSJung-uk Kim     UINT16                  BootOptions;
356d6dd1baeSJung-uk Kim     UINT16                  OemParameters;
357d6dd1baeSJung-uk Kim 
358d6dd1baeSJung-uk Kim } ACPI_ASF_RMCP;
359d6dd1baeSJung-uk Kim 
360d6dd1baeSJung-uk Kim 
361d6dd1baeSJung-uk Kim /* 4: ASF Address */
362d6dd1baeSJung-uk Kim 
363d6dd1baeSJung-uk Kim typedef struct acpi_asf_address
364d6dd1baeSJung-uk Kim {
365d6dd1baeSJung-uk Kim     ACPI_ASF_HEADER         Header;
366d6dd1baeSJung-uk Kim     UINT8                   EpromAddress;
367d6dd1baeSJung-uk Kim     UINT8                   Devices;
368d6dd1baeSJung-uk Kim 
369d6dd1baeSJung-uk Kim } ACPI_ASF_ADDRESS;
370d6dd1baeSJung-uk Kim 
371d6dd1baeSJung-uk Kim 
372d6dd1baeSJung-uk Kim /*******************************************************************************
373d6dd1baeSJung-uk Kim  *
374d6dd1baeSJung-uk Kim  * BOOT - Simple Boot Flag Table
375d6dd1baeSJung-uk Kim  *        Version 1
376d6dd1baeSJung-uk Kim  *
377d6dd1baeSJung-uk Kim  * Conforms to the "Simple Boot Flag Specification", Version 2.1
378d6dd1baeSJung-uk Kim  *
379d6dd1baeSJung-uk Kim  ******************************************************************************/
380d6dd1baeSJung-uk Kim 
381d6dd1baeSJung-uk Kim typedef struct acpi_table_boot
382d6dd1baeSJung-uk Kim {
383d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
384d6dd1baeSJung-uk Kim     UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
385d6dd1baeSJung-uk Kim     UINT8                   Reserved[3];
386d6dd1baeSJung-uk Kim 
387d6dd1baeSJung-uk Kim } ACPI_TABLE_BOOT;
388d6dd1baeSJung-uk Kim 
389d6dd1baeSJung-uk Kim 
390d6dd1baeSJung-uk Kim /*******************************************************************************
391d6dd1baeSJung-uk Kim  *
3921df130f1SJung-uk Kim  * CSRT - Core System Resource Table
3931df130f1SJung-uk Kim  *        Version 0
3941df130f1SJung-uk Kim  *
3951df130f1SJung-uk Kim  * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
3961df130f1SJung-uk Kim  *
3971df130f1SJung-uk Kim  ******************************************************************************/
3981df130f1SJung-uk Kim 
3991df130f1SJung-uk Kim typedef struct acpi_table_csrt
4001df130f1SJung-uk Kim {
4011df130f1SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
4021df130f1SJung-uk Kim 
4031df130f1SJung-uk Kim } ACPI_TABLE_CSRT;
4041df130f1SJung-uk Kim 
405efcc2a30SJung-uk Kim 
4061df130f1SJung-uk Kim /* Resource Group subtable */
4071df130f1SJung-uk Kim 
4081df130f1SJung-uk Kim typedef struct acpi_csrt_group
4091df130f1SJung-uk Kim {
4101df130f1SJung-uk Kim     UINT32                  Length;
4111df130f1SJung-uk Kim     UINT32                  VendorId;
4121df130f1SJung-uk Kim     UINT32                  SubvendorId;
4131df130f1SJung-uk Kim     UINT16                  DeviceId;
4141df130f1SJung-uk Kim     UINT16                  SubdeviceId;
4151df130f1SJung-uk Kim     UINT16                  Revision;
4161df130f1SJung-uk Kim     UINT16                  Reserved;
417efcc2a30SJung-uk Kim     UINT32                  SharedInfoLength;
4181df130f1SJung-uk Kim 
419efcc2a30SJung-uk Kim     /* Shared data immediately follows (Length = SharedInfoLength) */
4201df130f1SJung-uk Kim 
4211df130f1SJung-uk Kim } ACPI_CSRT_GROUP;
4221df130f1SJung-uk Kim 
423efcc2a30SJung-uk Kim /* Shared Info subtable */
424efcc2a30SJung-uk Kim 
425efcc2a30SJung-uk Kim typedef struct acpi_csrt_shared_info
426efcc2a30SJung-uk Kim {
427efcc2a30SJung-uk Kim     UINT16                  MajorVersion;
428efcc2a30SJung-uk Kim     UINT16                  MinorVersion;
429efcc2a30SJung-uk Kim     UINT32                  MmioBaseLow;
430efcc2a30SJung-uk Kim     UINT32                  MmioBaseHigh;
431efcc2a30SJung-uk Kim     UINT32                  GsiInterrupt;
432efcc2a30SJung-uk Kim     UINT8                   InterruptPolarity;
433efcc2a30SJung-uk Kim     UINT8                   InterruptMode;
434efcc2a30SJung-uk Kim     UINT8                   NumChannels;
435efcc2a30SJung-uk Kim     UINT8                   DmaAddressWidth;
436efcc2a30SJung-uk Kim     UINT16                  BaseRequestLine;
437efcc2a30SJung-uk Kim     UINT16                  NumHandshakeSignals;
438efcc2a30SJung-uk Kim     UINT32                  MaxBlockSize;
439efcc2a30SJung-uk Kim 
440efcc2a30SJung-uk Kim     /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */
441efcc2a30SJung-uk Kim 
442efcc2a30SJung-uk Kim } ACPI_CSRT_SHARED_INFO;
443efcc2a30SJung-uk Kim 
4441df130f1SJung-uk Kim /* Resource Descriptor subtable */
4451df130f1SJung-uk Kim 
4461df130f1SJung-uk Kim typedef struct acpi_csrt_descriptor
4471df130f1SJung-uk Kim {
4481df130f1SJung-uk Kim     UINT32                  Length;
4491df130f1SJung-uk Kim     UINT16                  Type;
4501df130f1SJung-uk Kim     UINT16                  Subtype;
4511df130f1SJung-uk Kim     UINT32                  Uid;
4521df130f1SJung-uk Kim 
4531df130f1SJung-uk Kim     /* Resource-specific information immediately follows */
4541df130f1SJung-uk Kim 
4551df130f1SJung-uk Kim } ACPI_CSRT_DESCRIPTOR;
4561df130f1SJung-uk Kim 
4571df130f1SJung-uk Kim 
4581df130f1SJung-uk Kim /* Resource Types */
4591df130f1SJung-uk Kim 
4601df130f1SJung-uk Kim #define ACPI_CSRT_TYPE_INTERRUPT    0x0001
4611df130f1SJung-uk Kim #define ACPI_CSRT_TYPE_TIMER        0x0002
4621df130f1SJung-uk Kim #define ACPI_CSRT_TYPE_DMA          0x0003
4631df130f1SJung-uk Kim 
4641df130f1SJung-uk Kim /* Resource Subtypes */
4651df130f1SJung-uk Kim 
4661df130f1SJung-uk Kim #define ACPI_CSRT_XRUPT_LINE        0x0000
4671df130f1SJung-uk Kim #define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
4681df130f1SJung-uk Kim #define ACPI_CSRT_TIMER             0x0000
4691df130f1SJung-uk Kim #define ACPI_CSRT_DMA_CHANNEL       0x0000
4701df130f1SJung-uk Kim #define ACPI_CSRT_DMA_CONTROLLER    0x0001
4711df130f1SJung-uk Kim 
4721df130f1SJung-uk Kim 
4731df130f1SJung-uk Kim /*******************************************************************************
4741df130f1SJung-uk Kim  *
4751df130f1SJung-uk Kim  * DBG2 - Debug Port Table 2
4761df130f1SJung-uk Kim  *        Version 0 (Both main table and subtables)
4771df130f1SJung-uk Kim  *
478f8146b88SJung-uk Kim  * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015
4791df130f1SJung-uk Kim  *
4801df130f1SJung-uk Kim  ******************************************************************************/
4811df130f1SJung-uk Kim 
4821df130f1SJung-uk Kim typedef struct acpi_table_dbg2
4831df130f1SJung-uk Kim {
4841df130f1SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
4851df130f1SJung-uk Kim     UINT32                  InfoOffset;
4861df130f1SJung-uk Kim     UINT32                  InfoCount;
4871df130f1SJung-uk Kim 
4881df130f1SJung-uk Kim } ACPI_TABLE_DBG2;
4891df130f1SJung-uk Kim 
4901df130f1SJung-uk Kim 
491313a0c13SJung-uk Kim typedef struct acpi_dbg2_header
492313a0c13SJung-uk Kim {
493313a0c13SJung-uk Kim     UINT32                  InfoOffset;
494313a0c13SJung-uk Kim     UINT32                  InfoCount;
495313a0c13SJung-uk Kim 
496313a0c13SJung-uk Kim } ACPI_DBG2_HEADER;
497313a0c13SJung-uk Kim 
498313a0c13SJung-uk Kim 
4991df130f1SJung-uk Kim /* Debug Device Information Subtable */
5001df130f1SJung-uk Kim 
5011df130f1SJung-uk Kim typedef struct acpi_dbg2_device
5021df130f1SJung-uk Kim {
5031df130f1SJung-uk Kim     UINT8                   Revision;
5041df130f1SJung-uk Kim     UINT16                  Length;
5051df130f1SJung-uk Kim     UINT8                   RegisterCount;      /* Number of BaseAddress registers */
5061df130f1SJung-uk Kim     UINT16                  NamepathLength;
5071df130f1SJung-uk Kim     UINT16                  NamepathOffset;
5081df130f1SJung-uk Kim     UINT16                  OemDataLength;
5091df130f1SJung-uk Kim     UINT16                  OemDataOffset;
5101df130f1SJung-uk Kim     UINT16                  PortType;
5111df130f1SJung-uk Kim     UINT16                  PortSubtype;
5121df130f1SJung-uk Kim     UINT16                  Reserved;
5131df130f1SJung-uk Kim     UINT16                  BaseAddressOffset;
5141df130f1SJung-uk Kim     UINT16                  AddressSizeOffset;
5151df130f1SJung-uk Kim     /*
5161df130f1SJung-uk Kim      * Data that follows:
5171df130f1SJung-uk Kim      *    BaseAddress (required) - Each in 12-byte Generic Address Structure format.
5181df130f1SJung-uk Kim      *    AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register.
5191df130f1SJung-uk Kim      *    Namepath    (required) - Null terminated string. Single dot if not supported.
5201df130f1SJung-uk Kim      *    OemData     (optional) - Length is OemDataLength.
5211df130f1SJung-uk Kim      */
5221df130f1SJung-uk Kim } ACPI_DBG2_DEVICE;
5231df130f1SJung-uk Kim 
5241df130f1SJung-uk Kim /* Types for PortType field above */
5251df130f1SJung-uk Kim 
5261df130f1SJung-uk Kim #define ACPI_DBG2_SERIAL_PORT       0x8000
5271df130f1SJung-uk Kim #define ACPI_DBG2_1394_PORT         0x8001
5281df130f1SJung-uk Kim #define ACPI_DBG2_USB_PORT          0x8002
5291df130f1SJung-uk Kim #define ACPI_DBG2_NET_PORT          0x8003
5301df130f1SJung-uk Kim 
5311df130f1SJung-uk Kim /* Subtypes for PortSubtype field above */
5321df130f1SJung-uk Kim 
5331df130f1SJung-uk Kim #define ACPI_DBG2_16550_COMPATIBLE  0x0000
5341df130f1SJung-uk Kim #define ACPI_DBG2_16550_SUBSET      0x0001
535f8146b88SJung-uk Kim #define ACPI_DBG2_ARM_PL011         0x0003
536f8146b88SJung-uk Kim #define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
537f8146b88SJung-uk Kim #define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
538f8146b88SJung-uk Kim #define ACPI_DBG2_ARM_DCC           0x000F
539f8146b88SJung-uk Kim #define ACPI_DBG2_BCM2835           0x0010
5401df130f1SJung-uk Kim 
5411df130f1SJung-uk Kim #define ACPI_DBG2_1394_STANDARD     0x0000
5421df130f1SJung-uk Kim 
5431df130f1SJung-uk Kim #define ACPI_DBG2_USB_XHCI          0x0000
5441df130f1SJung-uk Kim #define ACPI_DBG2_USB_EHCI          0x0001
5451df130f1SJung-uk Kim 
5461df130f1SJung-uk Kim 
5471df130f1SJung-uk Kim /*******************************************************************************
5481df130f1SJung-uk Kim  *
549d6dd1baeSJung-uk Kim  * DBGP - Debug Port table
550d6dd1baeSJung-uk Kim  *        Version 1
551d6dd1baeSJung-uk Kim  *
552d6dd1baeSJung-uk Kim  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
553d6dd1baeSJung-uk Kim  *
554d6dd1baeSJung-uk Kim  ******************************************************************************/
555d6dd1baeSJung-uk Kim 
556d6dd1baeSJung-uk Kim typedef struct acpi_table_dbgp
557d6dd1baeSJung-uk Kim {
558d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
559d6dd1baeSJung-uk Kim     UINT8                   Type;               /* 0=full 16550, 1=subset of 16550 */
560d6dd1baeSJung-uk Kim     UINT8                   Reserved[3];
561d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    DebugPort;
562d6dd1baeSJung-uk Kim 
563d6dd1baeSJung-uk Kim } ACPI_TABLE_DBGP;
564d6dd1baeSJung-uk Kim 
565d6dd1baeSJung-uk Kim 
566d6dd1baeSJung-uk Kim /*******************************************************************************
567d6dd1baeSJung-uk Kim  *
568d6dd1baeSJung-uk Kim  * DMAR - DMA Remapping table
569d6dd1baeSJung-uk Kim  *        Version 1
570d6dd1baeSJung-uk Kim  *
571d6dd1baeSJung-uk Kim  * Conforms to "Intel Virtualization Technology for Directed I/O",
572f8146b88SJung-uk Kim  * Version 2.3, October 2014
573d6dd1baeSJung-uk Kim  *
574d6dd1baeSJung-uk Kim  ******************************************************************************/
575d6dd1baeSJung-uk Kim 
576d6dd1baeSJung-uk Kim typedef struct acpi_table_dmar
577d6dd1baeSJung-uk Kim {
578d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
579d6dd1baeSJung-uk Kim     UINT8                   Width;              /* Host Address Width */
580d6dd1baeSJung-uk Kim     UINT8                   Flags;
581d6dd1baeSJung-uk Kim     UINT8                   Reserved[10];
582d6dd1baeSJung-uk Kim 
583d6dd1baeSJung-uk Kim } ACPI_TABLE_DMAR;
584d6dd1baeSJung-uk Kim 
585d6dd1baeSJung-uk Kim /* Masks for Flags field above */
586d6dd1baeSJung-uk Kim 
587d6dd1baeSJung-uk Kim #define ACPI_DMAR_INTR_REMAP        (1)
588f8146b88SJung-uk Kim #define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
589f8146b88SJung-uk Kim #define ACPI_DMAR_X2APIC_MODE       (1<<2)
590d6dd1baeSJung-uk Kim 
591d6dd1baeSJung-uk Kim 
592d6dd1baeSJung-uk Kim /* DMAR subtable header */
593d6dd1baeSJung-uk Kim 
594d6dd1baeSJung-uk Kim typedef struct acpi_dmar_header
595d6dd1baeSJung-uk Kim {
596d6dd1baeSJung-uk Kim     UINT16                  Type;
597d6dd1baeSJung-uk Kim     UINT16                  Length;
598d6dd1baeSJung-uk Kim 
599d6dd1baeSJung-uk Kim } ACPI_DMAR_HEADER;
600d6dd1baeSJung-uk Kim 
601d6dd1baeSJung-uk Kim /* Values for subtable type in ACPI_DMAR_HEADER */
602d6dd1baeSJung-uk Kim 
603d6dd1baeSJung-uk Kim enum AcpiDmarType
604d6dd1baeSJung-uk Kim {
605d6dd1baeSJung-uk Kim     ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
606d6dd1baeSJung-uk Kim     ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
607313a0c13SJung-uk Kim     ACPI_DMAR_TYPE_ROOT_ATS             = 2,
608313a0c13SJung-uk Kim     ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
609313a0c13SJung-uk Kim     ACPI_DMAR_TYPE_NAMESPACE            = 4,
610313a0c13SJung-uk Kim     ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
611d6dd1baeSJung-uk Kim };
612d6dd1baeSJung-uk Kim 
613d6dd1baeSJung-uk Kim 
614d6dd1baeSJung-uk Kim /* DMAR Device Scope structure */
615d6dd1baeSJung-uk Kim 
616d6dd1baeSJung-uk Kim typedef struct acpi_dmar_device_scope
617d6dd1baeSJung-uk Kim {
618d6dd1baeSJung-uk Kim     UINT8                   EntryType;
619d6dd1baeSJung-uk Kim     UINT8                   Length;
620d6dd1baeSJung-uk Kim     UINT16                  Reserved;
621d6dd1baeSJung-uk Kim     UINT8                   EnumerationId;
622d6dd1baeSJung-uk Kim     UINT8                   Bus;
623d6dd1baeSJung-uk Kim 
624d6dd1baeSJung-uk Kim } ACPI_DMAR_DEVICE_SCOPE;
625d6dd1baeSJung-uk Kim 
626313a0c13SJung-uk Kim /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
627d6dd1baeSJung-uk Kim 
628d6dd1baeSJung-uk Kim enum AcpiDmarScopeType
629d6dd1baeSJung-uk Kim {
630d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_NOT_USED       = 0,
631d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_ENDPOINT       = 1,
632d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
633d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
634d6dd1baeSJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
635313a0c13SJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
636313a0c13SJung-uk Kim     ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
637d6dd1baeSJung-uk Kim };
638d6dd1baeSJung-uk Kim 
639d6dd1baeSJung-uk Kim typedef struct acpi_dmar_pci_path
640d6dd1baeSJung-uk Kim {
641d6dd1baeSJung-uk Kim     UINT8                   Device;
642d6dd1baeSJung-uk Kim     UINT8                   Function;
643d6dd1baeSJung-uk Kim 
644d6dd1baeSJung-uk Kim } ACPI_DMAR_PCI_PATH;
645d6dd1baeSJung-uk Kim 
646d6dd1baeSJung-uk Kim 
647d6dd1baeSJung-uk Kim /*
648313a0c13SJung-uk Kim  * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER
649d6dd1baeSJung-uk Kim  */
650d6dd1baeSJung-uk Kim 
651d6dd1baeSJung-uk Kim /* 0: Hardware Unit Definition */
652d6dd1baeSJung-uk Kim 
653d6dd1baeSJung-uk Kim typedef struct acpi_dmar_hardware_unit
654d6dd1baeSJung-uk Kim {
655d6dd1baeSJung-uk Kim     ACPI_DMAR_HEADER        Header;
656d6dd1baeSJung-uk Kim     UINT8                   Flags;
657d6dd1baeSJung-uk Kim     UINT8                   Reserved;
658d6dd1baeSJung-uk Kim     UINT16                  Segment;
659d6dd1baeSJung-uk Kim     UINT64                  Address;            /* Register Base Address */
660d6dd1baeSJung-uk Kim 
661d6dd1baeSJung-uk Kim } ACPI_DMAR_HARDWARE_UNIT;
662d6dd1baeSJung-uk Kim 
663d6dd1baeSJung-uk Kim /* Masks for Flags field above */
664d6dd1baeSJung-uk Kim 
665d6dd1baeSJung-uk Kim #define ACPI_DMAR_INCLUDE_ALL       (1)
666d6dd1baeSJung-uk Kim 
667d6dd1baeSJung-uk Kim 
668d6dd1baeSJung-uk Kim /* 1: Reserved Memory Defininition */
669d6dd1baeSJung-uk Kim 
670d6dd1baeSJung-uk Kim typedef struct acpi_dmar_reserved_memory
671d6dd1baeSJung-uk Kim {
672d6dd1baeSJung-uk Kim     ACPI_DMAR_HEADER        Header;
673d6dd1baeSJung-uk Kim     UINT16                  Reserved;
674d6dd1baeSJung-uk Kim     UINT16                  Segment;
675d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;        /* 4K aligned base address */
676d6dd1baeSJung-uk Kim     UINT64                  EndAddress;         /* 4K aligned limit address */
677d6dd1baeSJung-uk Kim 
678d6dd1baeSJung-uk Kim } ACPI_DMAR_RESERVED_MEMORY;
679d6dd1baeSJung-uk Kim 
680d6dd1baeSJung-uk Kim /* Masks for Flags field above */
681d6dd1baeSJung-uk Kim 
682d6dd1baeSJung-uk Kim #define ACPI_DMAR_ALLOW_ALL         (1)
683d6dd1baeSJung-uk Kim 
684d6dd1baeSJung-uk Kim 
685d6dd1baeSJung-uk Kim /* 2: Root Port ATS Capability Reporting Structure */
686d6dd1baeSJung-uk Kim 
687d6dd1baeSJung-uk Kim typedef struct acpi_dmar_atsr
688d6dd1baeSJung-uk Kim {
689d6dd1baeSJung-uk Kim     ACPI_DMAR_HEADER        Header;
690d6dd1baeSJung-uk Kim     UINT8                   Flags;
691d6dd1baeSJung-uk Kim     UINT8                   Reserved;
692d6dd1baeSJung-uk Kim     UINT16                  Segment;
693d6dd1baeSJung-uk Kim 
694d6dd1baeSJung-uk Kim } ACPI_DMAR_ATSR;
695d6dd1baeSJung-uk Kim 
696d6dd1baeSJung-uk Kim /* Masks for Flags field above */
697d6dd1baeSJung-uk Kim 
698d6dd1baeSJung-uk Kim #define ACPI_DMAR_ALL_PORTS         (1)
699d6dd1baeSJung-uk Kim 
700d6dd1baeSJung-uk Kim 
701d6dd1baeSJung-uk Kim /* 3: Remapping Hardware Static Affinity Structure */
702d6dd1baeSJung-uk Kim 
703d6dd1baeSJung-uk Kim typedef struct acpi_dmar_rhsa
704d6dd1baeSJung-uk Kim {
705d6dd1baeSJung-uk Kim     ACPI_DMAR_HEADER        Header;
706d6dd1baeSJung-uk Kim     UINT32                  Reserved;
707d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;
708d6dd1baeSJung-uk Kim     UINT32                  ProximityDomain;
709d6dd1baeSJung-uk Kim 
710d6dd1baeSJung-uk Kim } ACPI_DMAR_RHSA;
711d6dd1baeSJung-uk Kim 
712d6dd1baeSJung-uk Kim 
713313a0c13SJung-uk Kim /* 4: ACPI Namespace Device Declaration Structure */
714313a0c13SJung-uk Kim 
715313a0c13SJung-uk Kim typedef struct acpi_dmar_andd
716313a0c13SJung-uk Kim {
717313a0c13SJung-uk Kim     ACPI_DMAR_HEADER        Header;
718313a0c13SJung-uk Kim     UINT8                   Reserved[3];
719313a0c13SJung-uk Kim     UINT8                   DeviceNumber;
720313a0c13SJung-uk Kim     char                    DeviceName[1];
721313a0c13SJung-uk Kim 
722313a0c13SJung-uk Kim } ACPI_DMAR_ANDD;
723313a0c13SJung-uk Kim 
724313a0c13SJung-uk Kim 
725d6dd1baeSJung-uk Kim /*******************************************************************************
726d6dd1baeSJung-uk Kim  *
727d6dd1baeSJung-uk Kim  * HPET - High Precision Event Timer table
728d6dd1baeSJung-uk Kim  *        Version 1
729d6dd1baeSJung-uk Kim  *
730d6dd1baeSJung-uk Kim  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
731d6dd1baeSJung-uk Kim  * Version 1.0a, October 2004
732d6dd1baeSJung-uk Kim  *
733d6dd1baeSJung-uk Kim  ******************************************************************************/
734d6dd1baeSJung-uk Kim 
735d6dd1baeSJung-uk Kim typedef struct acpi_table_hpet
736d6dd1baeSJung-uk Kim {
737d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
738d6dd1baeSJung-uk Kim     UINT32                  Id;                 /* Hardware ID of event timer block */
739d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    Address;            /* Address of event timer block */
740d6dd1baeSJung-uk Kim     UINT8                   Sequence;           /* HPET sequence number */
741d6dd1baeSJung-uk Kim     UINT16                  MinimumTick;        /* Main counter min tick, periodic mode */
742d6dd1baeSJung-uk Kim     UINT8                   Flags;
743d6dd1baeSJung-uk Kim 
744d6dd1baeSJung-uk Kim } ACPI_TABLE_HPET;
745d6dd1baeSJung-uk Kim 
746d6dd1baeSJung-uk Kim /* Masks for Flags field above */
747d6dd1baeSJung-uk Kim 
748d6dd1baeSJung-uk Kim #define ACPI_HPET_PAGE_PROTECT_MASK (3)
749d6dd1baeSJung-uk Kim 
750d6dd1baeSJung-uk Kim /* Values for Page Protect flags */
751d6dd1baeSJung-uk Kim 
752d6dd1baeSJung-uk Kim enum AcpiHpetPageProtect
753d6dd1baeSJung-uk Kim {
754d6dd1baeSJung-uk Kim     ACPI_HPET_NO_PAGE_PROTECT       = 0,
755d6dd1baeSJung-uk Kim     ACPI_HPET_PAGE_PROTECT4         = 1,
756d6dd1baeSJung-uk Kim     ACPI_HPET_PAGE_PROTECT64        = 2
757d6dd1baeSJung-uk Kim };
758d6dd1baeSJung-uk Kim 
759d6dd1baeSJung-uk Kim 
760d6dd1baeSJung-uk Kim /*******************************************************************************
761d6dd1baeSJung-uk Kim  *
762d6dd1baeSJung-uk Kim  * IBFT - Boot Firmware Table
763d6dd1baeSJung-uk Kim  *        Version 1
764d6dd1baeSJung-uk Kim  *
765d6dd1baeSJung-uk Kim  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
766d6dd1baeSJung-uk Kim  * Specification", Version 1.01, March 1, 2007
767d6dd1baeSJung-uk Kim  *
768d6dd1baeSJung-uk Kim  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
769d6dd1baeSJung-uk Kim  * Therefore, it is not currently supported by the disassembler.
770d6dd1baeSJung-uk Kim  *
771d6dd1baeSJung-uk Kim  ******************************************************************************/
772d6dd1baeSJung-uk Kim 
773d6dd1baeSJung-uk Kim typedef struct acpi_table_ibft
774d6dd1baeSJung-uk Kim {
775d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
776d6dd1baeSJung-uk Kim     UINT8                   Reserved[12];
777d6dd1baeSJung-uk Kim 
778d6dd1baeSJung-uk Kim } ACPI_TABLE_IBFT;
779d6dd1baeSJung-uk Kim 
780d6dd1baeSJung-uk Kim 
781d6dd1baeSJung-uk Kim /* IBFT common subtable header */
782d6dd1baeSJung-uk Kim 
783d6dd1baeSJung-uk Kim typedef struct acpi_ibft_header
784d6dd1baeSJung-uk Kim {
785d6dd1baeSJung-uk Kim     UINT8                   Type;
786d6dd1baeSJung-uk Kim     UINT8                   Version;
787d6dd1baeSJung-uk Kim     UINT16                  Length;
788d6dd1baeSJung-uk Kim     UINT8                   Index;
789d6dd1baeSJung-uk Kim     UINT8                   Flags;
790d6dd1baeSJung-uk Kim 
791d6dd1baeSJung-uk Kim } ACPI_IBFT_HEADER;
792d6dd1baeSJung-uk Kim 
793d6dd1baeSJung-uk Kim /* Values for Type field above */
794d6dd1baeSJung-uk Kim 
795d6dd1baeSJung-uk Kim enum AcpiIbftType
796d6dd1baeSJung-uk Kim {
797d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_NOT_USED         = 0,
798d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_CONTROL          = 1,
799d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_INITIATOR        = 2,
800d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_NIC              = 3,
801d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_TARGET           = 4,
802d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_EXTENSIONS       = 5,
803d6dd1baeSJung-uk Kim     ACPI_IBFT_TYPE_RESERVED         = 6     /* 6 and greater are reserved */
804d6dd1baeSJung-uk Kim };
805d6dd1baeSJung-uk Kim 
806d6dd1baeSJung-uk Kim 
807d6dd1baeSJung-uk Kim /* IBFT subtables */
808d6dd1baeSJung-uk Kim 
809d6dd1baeSJung-uk Kim typedef struct acpi_ibft_control
810d6dd1baeSJung-uk Kim {
811d6dd1baeSJung-uk Kim     ACPI_IBFT_HEADER        Header;
812d6dd1baeSJung-uk Kim     UINT16                  Extensions;
813d6dd1baeSJung-uk Kim     UINT16                  InitiatorOffset;
814d6dd1baeSJung-uk Kim     UINT16                  Nic0Offset;
815d6dd1baeSJung-uk Kim     UINT16                  Target0Offset;
816d6dd1baeSJung-uk Kim     UINT16                  Nic1Offset;
817d6dd1baeSJung-uk Kim     UINT16                  Target1Offset;
818d6dd1baeSJung-uk Kim 
819d6dd1baeSJung-uk Kim } ACPI_IBFT_CONTROL;
820d6dd1baeSJung-uk Kim 
821d6dd1baeSJung-uk Kim typedef struct acpi_ibft_initiator
822d6dd1baeSJung-uk Kim {
823d6dd1baeSJung-uk Kim     ACPI_IBFT_HEADER        Header;
824d6dd1baeSJung-uk Kim     UINT8                   SnsServer[16];
825d6dd1baeSJung-uk Kim     UINT8                   SlpServer[16];
826d6dd1baeSJung-uk Kim     UINT8                   PrimaryServer[16];
827d6dd1baeSJung-uk Kim     UINT8                   SecondaryServer[16];
828d6dd1baeSJung-uk Kim     UINT16                  NameLength;
829d6dd1baeSJung-uk Kim     UINT16                  NameOffset;
830d6dd1baeSJung-uk Kim 
831d6dd1baeSJung-uk Kim } ACPI_IBFT_INITIATOR;
832d6dd1baeSJung-uk Kim 
833d6dd1baeSJung-uk Kim typedef struct acpi_ibft_nic
834d6dd1baeSJung-uk Kim {
835d6dd1baeSJung-uk Kim     ACPI_IBFT_HEADER        Header;
836d6dd1baeSJung-uk Kim     UINT8                   IpAddress[16];
837d6dd1baeSJung-uk Kim     UINT8                   SubnetMaskPrefix;
838d6dd1baeSJung-uk Kim     UINT8                   Origin;
839d6dd1baeSJung-uk Kim     UINT8                   Gateway[16];
840d6dd1baeSJung-uk Kim     UINT8                   PrimaryDns[16];
841d6dd1baeSJung-uk Kim     UINT8                   SecondaryDns[16];
842d6dd1baeSJung-uk Kim     UINT8                   Dhcp[16];
843d6dd1baeSJung-uk Kim     UINT16                  Vlan;
844d6dd1baeSJung-uk Kim     UINT8                   MacAddress[6];
845d6dd1baeSJung-uk Kim     UINT16                  PciAddress;
846d6dd1baeSJung-uk Kim     UINT16                  NameLength;
847d6dd1baeSJung-uk Kim     UINT16                  NameOffset;
848d6dd1baeSJung-uk Kim 
849d6dd1baeSJung-uk Kim } ACPI_IBFT_NIC;
850d6dd1baeSJung-uk Kim 
851d6dd1baeSJung-uk Kim typedef struct acpi_ibft_target
852d6dd1baeSJung-uk Kim {
853d6dd1baeSJung-uk Kim     ACPI_IBFT_HEADER        Header;
854d6dd1baeSJung-uk Kim     UINT8                   TargetIpAddress[16];
855d6dd1baeSJung-uk Kim     UINT16                  TargetIpSocket;
856d6dd1baeSJung-uk Kim     UINT8                   TargetBootLun[8];
857d6dd1baeSJung-uk Kim     UINT8                   ChapType;
858d6dd1baeSJung-uk Kim     UINT8                   NicAssociation;
859d6dd1baeSJung-uk Kim     UINT16                  TargetNameLength;
860d6dd1baeSJung-uk Kim     UINT16                  TargetNameOffset;
861d6dd1baeSJung-uk Kim     UINT16                  ChapNameLength;
862d6dd1baeSJung-uk Kim     UINT16                  ChapNameOffset;
863d6dd1baeSJung-uk Kim     UINT16                  ChapSecretLength;
864d6dd1baeSJung-uk Kim     UINT16                  ChapSecretOffset;
865d6dd1baeSJung-uk Kim     UINT16                  ReverseChapNameLength;
866d6dd1baeSJung-uk Kim     UINT16                  ReverseChapNameOffset;
867d6dd1baeSJung-uk Kim     UINT16                  ReverseChapSecretLength;
868d6dd1baeSJung-uk Kim     UINT16                  ReverseChapSecretOffset;
869d6dd1baeSJung-uk Kim 
870d6dd1baeSJung-uk Kim } ACPI_IBFT_TARGET;
871d6dd1baeSJung-uk Kim 
872d6dd1baeSJung-uk Kim 
873d6dd1baeSJung-uk Kim /*******************************************************************************
874d6dd1baeSJung-uk Kim  *
875a371a5fdSJung-uk Kim  * IORT - IO Remapping Table
876a371a5fdSJung-uk Kim  *
877a371a5fdSJung-uk Kim  * Conforms to "IO Remapping Table System Software on ARM Platforms",
8785f9b24faSJung-uk Kim  * Document number: ARM DEN 0049C, May 2017
879a371a5fdSJung-uk Kim  *
880a371a5fdSJung-uk Kim  ******************************************************************************/
881a371a5fdSJung-uk Kim 
882a371a5fdSJung-uk Kim typedef struct acpi_table_iort
883a371a5fdSJung-uk Kim {
884a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;
885a371a5fdSJung-uk Kim     UINT32                  NodeCount;
886a371a5fdSJung-uk Kim     UINT32                  NodeOffset;
887a371a5fdSJung-uk Kim     UINT32                  Reserved;
888a371a5fdSJung-uk Kim 
889a371a5fdSJung-uk Kim } ACPI_TABLE_IORT;
890a371a5fdSJung-uk Kim 
891a371a5fdSJung-uk Kim 
892a371a5fdSJung-uk Kim /*
893a371a5fdSJung-uk Kim  * IORT subtables
894a371a5fdSJung-uk Kim  */
895a371a5fdSJung-uk Kim typedef struct acpi_iort_node
896a371a5fdSJung-uk Kim {
897a371a5fdSJung-uk Kim     UINT8                   Type;
898a371a5fdSJung-uk Kim     UINT16                  Length;
899a371a5fdSJung-uk Kim     UINT8                   Revision;
900a371a5fdSJung-uk Kim     UINT32                  Reserved;
901a371a5fdSJung-uk Kim     UINT32                  MappingCount;
902a371a5fdSJung-uk Kim     UINT32                  MappingOffset;
903a371a5fdSJung-uk Kim     char                    NodeData[1];
904a371a5fdSJung-uk Kim 
905a371a5fdSJung-uk Kim } ACPI_IORT_NODE;
906a371a5fdSJung-uk Kim 
907a371a5fdSJung-uk Kim /* Values for subtable Type above */
908a371a5fdSJung-uk Kim 
909a371a5fdSJung-uk Kim enum AcpiIortNodeType
910a371a5fdSJung-uk Kim {
911a371a5fdSJung-uk Kim     ACPI_IORT_NODE_ITS_GROUP            = 0x00,
912a371a5fdSJung-uk Kim     ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
913a371a5fdSJung-uk Kim     ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
914f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU                 = 0x03,
915f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU_V3              = 0x04
916a371a5fdSJung-uk Kim };
917a371a5fdSJung-uk Kim 
918a371a5fdSJung-uk Kim 
919a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping
920a371a5fdSJung-uk Kim {
921a371a5fdSJung-uk Kim     UINT32                  InputBase;          /* Lowest value in input range */
922a371a5fdSJung-uk Kim     UINT32                  IdCount;            /* Number of IDs */
923a371a5fdSJung-uk Kim     UINT32                  OutputBase;         /* Lowest value in output range */
924a371a5fdSJung-uk Kim     UINT32                  OutputReference;    /* A reference to the output node */
925a371a5fdSJung-uk Kim     UINT32                  Flags;
926a371a5fdSJung-uk Kim 
927a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING;
928a371a5fdSJung-uk Kim 
929a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */
930a371a5fdSJung-uk Kim 
931a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1)
932a371a5fdSJung-uk Kim 
933a371a5fdSJung-uk Kim 
934a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access
935a371a5fdSJung-uk Kim {
936a371a5fdSJung-uk Kim     UINT32                  CacheCoherency;
937a371a5fdSJung-uk Kim     UINT8                   Hints;
938a371a5fdSJung-uk Kim     UINT16                  Reserved;
939a371a5fdSJung-uk Kim     UINT8                   MemoryFlags;
940a371a5fdSJung-uk Kim 
941a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS;
942a371a5fdSJung-uk Kim 
943a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */
944a371a5fdSJung-uk Kim 
945a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
946a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
947a371a5fdSJung-uk Kim 
948a371a5fdSJung-uk Kim /* Masks for Hints field above */
949a371a5fdSJung-uk Kim 
950a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT          (1)
951a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE              (1<<1)
952a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ               (1<<2)
953a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE           (1<<3)
954a371a5fdSJung-uk Kim 
955a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */
956a371a5fdSJung-uk Kim 
957a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY          (1)
958a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
959a371a5fdSJung-uk Kim 
960a371a5fdSJung-uk Kim 
961a371a5fdSJung-uk Kim /*
962a371a5fdSJung-uk Kim  * IORT node specific subtables
963a371a5fdSJung-uk Kim  */
964a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group
965a371a5fdSJung-uk Kim {
966a371a5fdSJung-uk Kim     UINT32                  ItsCount;
967a371a5fdSJung-uk Kim     UINT32                  Identifiers[1];         /* GIC ITS identifier arrary */
968a371a5fdSJung-uk Kim 
969a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP;
970a371a5fdSJung-uk Kim 
971a371a5fdSJung-uk Kim 
972a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component
973a371a5fdSJung-uk Kim {
974a371a5fdSJung-uk Kim     UINT32                  NodeFlags;
975a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
976a371a5fdSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
977a371a5fdSJung-uk Kim     char                    DeviceName[1];          /* Path of namespace object */
978a371a5fdSJung-uk Kim 
979a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT;
980a371a5fdSJung-uk Kim 
981a371a5fdSJung-uk Kim 
982a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex
983a371a5fdSJung-uk Kim {
984a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
985a371a5fdSJung-uk Kim     UINT32                  AtsAttribute;
986a371a5fdSJung-uk Kim     UINT32                  PciSegmentNumber;
987a371a5fdSJung-uk Kim 
988a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX;
989a371a5fdSJung-uk Kim 
990a371a5fdSJung-uk Kim /* Values for AtsAttribute field above */
991a371a5fdSJung-uk Kim 
992a371a5fdSJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED         0x00000001  /* The root complex supports ATS */
993a371a5fdSJung-uk Kim #define ACPI_IORT_ATS_UNSUPPORTED       0x00000000  /* The root complex doesn't support ATS */
994a371a5fdSJung-uk Kim 
995a371a5fdSJung-uk Kim 
996a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu
997a371a5fdSJung-uk Kim {
998a371a5fdSJung-uk Kim     UINT64                  BaseAddress;            /* SMMU base address */
999a371a5fdSJung-uk Kim     UINT64                  Span;                   /* Length of memory range */
1000a371a5fdSJung-uk Kim     UINT32                  Model;
1001a371a5fdSJung-uk Kim     UINT32                  Flags;
1002a371a5fdSJung-uk Kim     UINT32                  GlobalInterruptOffset;
1003a371a5fdSJung-uk Kim     UINT32                  ContextInterruptCount;
1004a371a5fdSJung-uk Kim     UINT32                  ContextInterruptOffset;
1005a371a5fdSJung-uk Kim     UINT32                  PmuInterruptCount;
1006a371a5fdSJung-uk Kim     UINT32                  PmuInterruptOffset;
1007a371a5fdSJung-uk Kim     UINT64                  Interrupts[1];          /* Interrupt array */
1008a371a5fdSJung-uk Kim 
1009a371a5fdSJung-uk Kim } ACPI_IORT_SMMU;
1010a371a5fdSJung-uk Kim 
1011a371a5fdSJung-uk Kim /* Values for Model field above */
1012a371a5fdSJung-uk Kim 
1013a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
1014a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
1015a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
1016a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
10175f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004  /* ARM Corelink MMU-401 */
10185f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005  /* Cavium ThunderX SMMUv2 */
1019a371a5fdSJung-uk Kim 
1020a371a5fdSJung-uk Kim /* Masks for Flags field above */
1021a371a5fdSJung-uk Kim 
1022a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
1023a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
1024a371a5fdSJung-uk Kim 
10250d84335fSJung-uk Kim /* Global interrupt format */
10260d84335fSJung-uk Kim 
10270d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi
10280d84335fSJung-uk Kim {
10290d84335fSJung-uk Kim     UINT32                  NSgIrpt;
10300d84335fSJung-uk Kim     UINT32                  NSgIrptFlags;
10310d84335fSJung-uk Kim     UINT32                  NSgCfgIrpt;
10320d84335fSJung-uk Kim     UINT32                  NSgCfgIrptFlags;
1033*2f6a1a81SJung-uk Kim 
10340d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI;
10350d84335fSJung-uk Kim 
1036a371a5fdSJung-uk Kim 
1037f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3
1038f8146b88SJung-uk Kim {
1039f8146b88SJung-uk Kim     UINT64                  BaseAddress;            /* SMMUv3 base address */
1040f8146b88SJung-uk Kim     UINT32                  Flags;
1041f8146b88SJung-uk Kim     UINT32                  Reserved;
1042f8146b88SJung-uk Kim     UINT64                  VatosAddress;
10435f9b24faSJung-uk Kim     UINT32                  Model;
1044f8146b88SJung-uk Kim     UINT32                  EventGsiv;
1045f8146b88SJung-uk Kim     UINT32                  PriGsiv;
1046f8146b88SJung-uk Kim     UINT32                  GerrGsiv;
1047f8146b88SJung-uk Kim     UINT32                  SyncGsiv;
10485f9b24faSJung-uk Kim     UINT8                   Pxm;
10495f9b24faSJung-uk Kim     UINT8                   Reserved1;
10505f9b24faSJung-uk Kim     UINT16                  Reserved2;
1051f8146b88SJung-uk Kim 
1052f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3;
1053f8146b88SJung-uk Kim 
10545f9b24faSJung-uk Kim /* Values for Model field above */
10555f9b24faSJung-uk Kim 
10565f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000  /* Generic SMMUv3 */
10575f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001  /* HiSilicon Hi161x SMMUv3 */
10585f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002  /* Cavium CN99xx SMMUv3 */
10595f9b24faSJung-uk Kim 
1060f8146b88SJung-uk Kim /* Masks for Flags field above */
1061f8146b88SJung-uk Kim 
1062f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
1063f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
10645f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
1065f8146b88SJung-uk Kim 
1066f8146b88SJung-uk Kim 
1067a371a5fdSJung-uk Kim /*******************************************************************************
1068a371a5fdSJung-uk Kim  *
1069d6dd1baeSJung-uk Kim  * IVRS - I/O Virtualization Reporting Structure
1070d6dd1baeSJung-uk Kim  *        Version 1
1071d6dd1baeSJung-uk Kim  *
1072d6dd1baeSJung-uk Kim  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
1073d6dd1baeSJung-uk Kim  * Revision 1.26, February 2009.
1074d6dd1baeSJung-uk Kim  *
1075d6dd1baeSJung-uk Kim  ******************************************************************************/
1076d6dd1baeSJung-uk Kim 
1077d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs
1078d6dd1baeSJung-uk Kim {
1079d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1080d6dd1baeSJung-uk Kim     UINT32                  Info;               /* Common virtualization info */
1081d6dd1baeSJung-uk Kim     UINT64                  Reserved;
1082d6dd1baeSJung-uk Kim 
1083d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS;
1084d6dd1baeSJung-uk Kim 
1085d6dd1baeSJung-uk Kim /* Values for Info field above */
1086d6dd1baeSJung-uk Kim 
1087d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
1088d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
1089d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
1090d6dd1baeSJung-uk Kim 
1091d6dd1baeSJung-uk Kim 
1092d6dd1baeSJung-uk Kim /* IVRS subtable header */
1093d6dd1baeSJung-uk Kim 
1094d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header
1095d6dd1baeSJung-uk Kim {
1096d6dd1baeSJung-uk Kim     UINT8                   Type;               /* Subtable type */
1097d6dd1baeSJung-uk Kim     UINT8                   Flags;
1098d6dd1baeSJung-uk Kim     UINT16                  Length;             /* Subtable length */
1099d6dd1baeSJung-uk Kim     UINT16                  DeviceId;           /* ID of IOMMU */
1100d6dd1baeSJung-uk Kim 
1101d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER;
1102d6dd1baeSJung-uk Kim 
1103d6dd1baeSJung-uk Kim /* Values for subtable Type above */
1104d6dd1baeSJung-uk Kim 
1105d6dd1baeSJung-uk Kim enum AcpiIvrsType
1106d6dd1baeSJung-uk Kim {
1107d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE         = 0x10,
1108d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
1109d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
1110d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY3          = 0x22
1111d6dd1baeSJung-uk Kim };
1112d6dd1baeSJung-uk Kim 
1113d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */
1114d6dd1baeSJung-uk Kim 
1115d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE         (1)
1116d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW           (1<<1)
1117d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW       (1<<2)
1118d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC              (1<<3)
1119d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB             (1<<4)
1120d6dd1baeSJung-uk Kim 
1121d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */
1122d6dd1baeSJung-uk Kim 
1123d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY             (1)
1124d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ              (1<<1)
1125d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE             (1<<2)
1126d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
1127d6dd1baeSJung-uk Kim 
1128d6dd1baeSJung-uk Kim 
1129d6dd1baeSJung-uk Kim /*
1130d6dd1baeSJung-uk Kim  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
1131d6dd1baeSJung-uk Kim  */
1132d6dd1baeSJung-uk Kim 
1133d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
1134d6dd1baeSJung-uk Kim 
1135d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_hardware
1136d6dd1baeSJung-uk Kim {
1137d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
1138d6dd1baeSJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
1139d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
1140d6dd1baeSJung-uk Kim     UINT16                  PciSegmentGroup;
1141d6dd1baeSJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
1142d6dd1baeSJung-uk Kim     UINT32                  Reserved;
1143d6dd1baeSJung-uk Kim 
1144d6dd1baeSJung-uk Kim } ACPI_IVRS_HARDWARE;
1145d6dd1baeSJung-uk Kim 
1146d6dd1baeSJung-uk Kim /* Masks for Info field above */
1147d6dd1baeSJung-uk Kim 
1148d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
1149d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
1150d6dd1baeSJung-uk Kim 
1151d6dd1baeSJung-uk Kim 
1152d6dd1baeSJung-uk Kim /*
1153d6dd1baeSJung-uk Kim  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
1154d6dd1baeSJung-uk Kim  * Upper two bits of the Type field are the (encoded) length of the structure.
1155d6dd1baeSJung-uk Kim  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
1156d6dd1baeSJung-uk Kim  * are reserved for future use but not defined.
1157d6dd1baeSJung-uk Kim  */
1158d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header
1159d6dd1baeSJung-uk Kim {
1160d6dd1baeSJung-uk Kim     UINT8                   Type;
1161d6dd1baeSJung-uk Kim     UINT16                  Id;
1162d6dd1baeSJung-uk Kim     UINT8                   DataSetting;
1163d6dd1baeSJung-uk Kim 
1164d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER;
1165d6dd1baeSJung-uk Kim 
1166d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */
1167d6dd1baeSJung-uk Kim 
1168d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH      0xC0
1169d6dd1baeSJung-uk Kim 
1170d6dd1baeSJung-uk Kim /* Values for device entry Type field above */
1171d6dd1baeSJung-uk Kim 
1172d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType
1173d6dd1baeSJung-uk Kim {
1174d6dd1baeSJung-uk Kim     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
1175d6dd1baeSJung-uk Kim 
1176d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD4             = 0,
1177d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALL              = 1,
1178d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SELECT           = 2,
1179d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_START            = 3,
1180d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_END              = 4,
1181d6dd1baeSJung-uk Kim 
1182d6dd1baeSJung-uk Kim     /* 8-byte device entries */
1183d6dd1baeSJung-uk Kim 
1184d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD8             = 64,
1185d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_NOT_USED         = 65,
1186d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
1187d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
1188d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
1189d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
1190d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
1191d6dd1baeSJung-uk Kim };
1192d6dd1baeSJung-uk Kim 
1193d6dd1baeSJung-uk Kim /* Values for Data field above */
1194d6dd1baeSJung-uk Kim 
1195d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS         (1)
1196d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS         (1<<1)
1197d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS          (1<<2)
1198d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
1199d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS        (1<<6)
1200d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS        (1<<7)
1201d6dd1baeSJung-uk Kim 
1202d6dd1baeSJung-uk Kim 
1203d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */
1204d6dd1baeSJung-uk Kim 
1205d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4
1206d6dd1baeSJung-uk Kim {
1207d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1208d6dd1baeSJung-uk Kim 
1209d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4;
1210d6dd1baeSJung-uk Kim 
1211d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */
1212d6dd1baeSJung-uk Kim 
1213d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a
1214d6dd1baeSJung-uk Kim {
1215d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1216d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
1217d6dd1baeSJung-uk Kim     UINT16                  UsedId;
1218d6dd1baeSJung-uk Kim     UINT8                   Reserved2;
1219d6dd1baeSJung-uk Kim 
1220d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A;
1221d6dd1baeSJung-uk Kim 
1222d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */
1223d6dd1baeSJung-uk Kim 
1224d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b
1225d6dd1baeSJung-uk Kim {
1226d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1227d6dd1baeSJung-uk Kim     UINT32                  ExtendedData;
1228d6dd1baeSJung-uk Kim 
1229d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B;
1230d6dd1baeSJung-uk Kim 
1231d6dd1baeSJung-uk Kim /* Values for ExtendedData above */
1232d6dd1baeSJung-uk Kim 
1233d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED      (1<<31)
1234d6dd1baeSJung-uk Kim 
1235d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */
1236d6dd1baeSJung-uk Kim 
1237d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c
1238d6dd1baeSJung-uk Kim {
1239d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1240d6dd1baeSJung-uk Kim     UINT8                   Handle;
1241d6dd1baeSJung-uk Kim     UINT16                  UsedId;
1242d6dd1baeSJung-uk Kim     UINT8                   Variety;
1243d6dd1baeSJung-uk Kim 
1244d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C;
1245d6dd1baeSJung-uk Kim 
1246d6dd1baeSJung-uk Kim /* Values for Variety field above */
1247d6dd1baeSJung-uk Kim 
1248d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC            1
1249d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET              2
1250d6dd1baeSJung-uk Kim 
1251d6dd1baeSJung-uk Kim 
1252d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
1253d6dd1baeSJung-uk Kim 
1254d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory
1255d6dd1baeSJung-uk Kim {
1256d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
1257d6dd1baeSJung-uk Kim     UINT16                  AuxData;
1258d6dd1baeSJung-uk Kim     UINT64                  Reserved;
1259d6dd1baeSJung-uk Kim     UINT64                  StartAddress;
1260d6dd1baeSJung-uk Kim     UINT64                  MemoryLength;
1261d6dd1baeSJung-uk Kim 
1262d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY;
1263d6dd1baeSJung-uk Kim 
1264d6dd1baeSJung-uk Kim 
1265d6dd1baeSJung-uk Kim /*******************************************************************************
1266d6dd1baeSJung-uk Kim  *
1267313a0c13SJung-uk Kim  * LPIT - Low Power Idle Table
1268313a0c13SJung-uk Kim  *
1269a371a5fdSJung-uk Kim  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1270313a0c13SJung-uk Kim  *
1271313a0c13SJung-uk Kim  ******************************************************************************/
1272313a0c13SJung-uk Kim 
1273313a0c13SJung-uk Kim typedef struct acpi_table_lpit
1274313a0c13SJung-uk Kim {
1275313a0c13SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1276313a0c13SJung-uk Kim 
1277313a0c13SJung-uk Kim } ACPI_TABLE_LPIT;
1278313a0c13SJung-uk Kim 
1279313a0c13SJung-uk Kim 
1280313a0c13SJung-uk Kim /* LPIT subtable header */
1281313a0c13SJung-uk Kim 
1282313a0c13SJung-uk Kim typedef struct acpi_lpit_header
1283313a0c13SJung-uk Kim {
1284313a0c13SJung-uk Kim     UINT32                  Type;               /* Subtable type */
1285313a0c13SJung-uk Kim     UINT32                  Length;             /* Subtable length */
1286313a0c13SJung-uk Kim     UINT16                  UniqueId;
1287313a0c13SJung-uk Kim     UINT16                  Reserved;
1288313a0c13SJung-uk Kim     UINT32                  Flags;
1289313a0c13SJung-uk Kim 
1290313a0c13SJung-uk Kim } ACPI_LPIT_HEADER;
1291313a0c13SJung-uk Kim 
1292313a0c13SJung-uk Kim /* Values for subtable Type above */
1293313a0c13SJung-uk Kim 
1294313a0c13SJung-uk Kim enum AcpiLpitType
1295313a0c13SJung-uk Kim {
1296313a0c13SJung-uk Kim     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
1297a371a5fdSJung-uk Kim     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
1298313a0c13SJung-uk Kim };
1299313a0c13SJung-uk Kim 
1300313a0c13SJung-uk Kim /* Masks for Flags field above  */
1301313a0c13SJung-uk Kim 
1302313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED    (1)
1303313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER        (1<<1)
1304313a0c13SJung-uk Kim 
1305313a0c13SJung-uk Kim /*
1306313a0c13SJung-uk Kim  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
1307313a0c13SJung-uk Kim  */
1308313a0c13SJung-uk Kim 
1309313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */
1310313a0c13SJung-uk Kim 
1311313a0c13SJung-uk Kim typedef struct acpi_lpit_native
1312313a0c13SJung-uk Kim {
1313313a0c13SJung-uk Kim     ACPI_LPIT_HEADER        Header;
1314313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    EntryTrigger;
1315313a0c13SJung-uk Kim     UINT32                  Residency;
1316313a0c13SJung-uk Kim     UINT32                  Latency;
1317313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    ResidencyCounter;
1318313a0c13SJung-uk Kim     UINT64                  CounterFrequency;
1319313a0c13SJung-uk Kim 
1320313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE;
1321313a0c13SJung-uk Kim 
1322313a0c13SJung-uk Kim 
1323313a0c13SJung-uk Kim /*******************************************************************************
1324313a0c13SJung-uk Kim  *
1325313a0c13SJung-uk Kim  * MCFG - PCI Memory Mapped Configuration table and subtable
1326d6dd1baeSJung-uk Kim  *        Version 1
1327d6dd1baeSJung-uk Kim  *
1328d6dd1baeSJung-uk Kim  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1329d6dd1baeSJung-uk Kim  *
1330d6dd1baeSJung-uk Kim  ******************************************************************************/
1331d6dd1baeSJung-uk Kim 
1332d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg
1333d6dd1baeSJung-uk Kim {
1334d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1335d6dd1baeSJung-uk Kim     UINT8                   Reserved[8];
1336d6dd1baeSJung-uk Kim 
1337d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG;
1338d6dd1baeSJung-uk Kim 
1339d6dd1baeSJung-uk Kim 
1340d6dd1baeSJung-uk Kim /* Subtable */
1341d6dd1baeSJung-uk Kim 
1342d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation
1343d6dd1baeSJung-uk Kim {
1344d6dd1baeSJung-uk Kim     UINT64                  Address;            /* Base address, processor-relative */
1345d6dd1baeSJung-uk Kim     UINT16                  PciSegment;         /* PCI segment group number */
1346d6dd1baeSJung-uk Kim     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1347d6dd1baeSJung-uk Kim     UINT8                   EndBusNumber;       /* Final PCI Bus number */
1348d6dd1baeSJung-uk Kim     UINT32                  Reserved;
1349d6dd1baeSJung-uk Kim 
1350d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION;
1351d6dd1baeSJung-uk Kim 
1352d6dd1baeSJung-uk Kim 
1353d6dd1baeSJung-uk Kim /*******************************************************************************
1354d6dd1baeSJung-uk Kim  *
1355ca3cf4faSJung-uk Kim  * MCHI - Management Controller Host Interface Table
1356ca3cf4faSJung-uk Kim  *        Version 1
1357ca3cf4faSJung-uk Kim  *
1358ca3cf4faSJung-uk Kim  * Conforms to "Management Component Transport Protocol (MCTP) Host
1359ca3cf4faSJung-uk Kim  * Interface Specification", Revision 1.0.0a, October 13, 2009
1360ca3cf4faSJung-uk Kim  *
1361ca3cf4faSJung-uk Kim  ******************************************************************************/
1362ca3cf4faSJung-uk Kim 
1363ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi
1364ca3cf4faSJung-uk Kim {
1365ca3cf4faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1366ca3cf4faSJung-uk Kim     UINT8                   InterfaceType;
1367ca3cf4faSJung-uk Kim     UINT8                   Protocol;
1368ca3cf4faSJung-uk Kim     UINT64                  ProtocolData;
1369ca3cf4faSJung-uk Kim     UINT8                   InterruptType;
1370ca3cf4faSJung-uk Kim     UINT8                   Gpe;
1371ca3cf4faSJung-uk Kim     UINT8                   PciDeviceFlag;
1372ca3cf4faSJung-uk Kim     UINT32                  GlobalInterrupt;
1373ca3cf4faSJung-uk Kim     ACPI_GENERIC_ADDRESS    ControlRegister;
1374ca3cf4faSJung-uk Kim     UINT8                   PciSegment;
1375ca3cf4faSJung-uk Kim     UINT8                   PciBus;
1376ca3cf4faSJung-uk Kim     UINT8                   PciDevice;
1377ca3cf4faSJung-uk Kim     UINT8                   PciFunction;
1378ca3cf4faSJung-uk Kim 
1379ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI;
1380ca3cf4faSJung-uk Kim 
1381ca3cf4faSJung-uk Kim 
1382ca3cf4faSJung-uk Kim /*******************************************************************************
1383ca3cf4faSJung-uk Kim  *
13847cf3e94aSJung-uk Kim  * MSDM - Microsoft Data Management table
13857cf3e94aSJung-uk Kim  *
13867cf3e94aSJung-uk Kim  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
13877cf3e94aSJung-uk Kim  * November 29, 2011. Copyright 2011 Microsoft
13887cf3e94aSJung-uk Kim  *
13897cf3e94aSJung-uk Kim  ******************************************************************************/
13907cf3e94aSJung-uk Kim 
13917cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */
13927cf3e94aSJung-uk Kim 
13937cf3e94aSJung-uk Kim typedef struct acpi_table_msdm
13947cf3e94aSJung-uk Kim {
13957cf3e94aSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
13967cf3e94aSJung-uk Kim 
13977cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM;
13987cf3e94aSJung-uk Kim 
13997cf3e94aSJung-uk Kim 
14007cf3e94aSJung-uk Kim /*******************************************************************************
14017cf3e94aSJung-uk Kim  *
14029c48c75eSJung-uk Kim  * MTMR - MID Timer Table
14039c48c75eSJung-uk Kim  *        Version 1
14049c48c75eSJung-uk Kim  *
14059c48c75eSJung-uk Kim  * Conforms to "Simple Firmware Interface Specification",
14069c48c75eSJung-uk Kim  * Draft 0.8.2, Oct 19, 2010
14079c48c75eSJung-uk Kim  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
14089c48c75eSJung-uk Kim  *
14099c48c75eSJung-uk Kim  ******************************************************************************/
14109c48c75eSJung-uk Kim 
14119c48c75eSJung-uk Kim typedef struct acpi_table_mtmr
14129c48c75eSJung-uk Kim {
14139c48c75eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
14149c48c75eSJung-uk Kim 
14159c48c75eSJung-uk Kim } ACPI_TABLE_MTMR;
14169c48c75eSJung-uk Kim 
14179c48c75eSJung-uk Kim /* MTMR entry */
14189c48c75eSJung-uk Kim 
14199c48c75eSJung-uk Kim typedef struct acpi_mtmr_entry
14209c48c75eSJung-uk Kim {
14219c48c75eSJung-uk Kim     ACPI_GENERIC_ADDRESS    PhysicalAddress;
14229c48c75eSJung-uk Kim     UINT32                  Frequency;
14239c48c75eSJung-uk Kim     UINT32                  Irq;
14249c48c75eSJung-uk Kim 
14259c48c75eSJung-uk Kim } ACPI_MTMR_ENTRY;
14269c48c75eSJung-uk Kim 
14275f9b24faSJung-uk Kim /*******************************************************************************
14285f9b24faSJung-uk Kim  *
14295f9b24faSJung-uk Kim  * SDEI - Software Delegated Exception Interface Descriptor Table
14305f9b24faSJung-uk Kim  *
14315f9b24faSJung-uk Kim  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
14325f9b24faSJung-uk Kim  * May 8th, 2017. Copyright 2017 ARM Ltd.
14335f9b24faSJung-uk Kim  *
14345f9b24faSJung-uk Kim  ******************************************************************************/
14355f9b24faSJung-uk Kim 
14365f9b24faSJung-uk Kim typedef struct acpi_table_sdei
14375f9b24faSJung-uk Kim {
14385f9b24faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
14395f9b24faSJung-uk Kim 
14405f9b24faSJung-uk Kim } ACPI_TABLE_SDEI;
14415f9b24faSJung-uk Kim 
14429c48c75eSJung-uk Kim 
14439c48c75eSJung-uk Kim /*******************************************************************************
14449c48c75eSJung-uk Kim  *
1445dcbce41eSJung-uk Kim  * SLIC - Software Licensing Description Table
1446dcbce41eSJung-uk Kim  *
14477cf3e94aSJung-uk Kim  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
14487cf3e94aSJung-uk Kim  * November 29, 2011. Copyright 2011 Microsoft
1449dcbce41eSJung-uk Kim  *
1450dcbce41eSJung-uk Kim  ******************************************************************************/
1451dcbce41eSJung-uk Kim 
1452dcbce41eSJung-uk Kim /* Basic SLIC table is only the common ACPI header */
1453dcbce41eSJung-uk Kim 
1454dcbce41eSJung-uk Kim typedef struct acpi_table_slic
1455dcbce41eSJung-uk Kim {
1456dcbce41eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1457dcbce41eSJung-uk Kim 
1458dcbce41eSJung-uk Kim } ACPI_TABLE_SLIC;
1459dcbce41eSJung-uk Kim 
1460dcbce41eSJung-uk Kim 
1461dcbce41eSJung-uk Kim /*******************************************************************************
1462dcbce41eSJung-uk Kim  *
1463d6dd1baeSJung-uk Kim  * SPCR - Serial Port Console Redirection table
1464f8146b88SJung-uk Kim  *        Version 2
1465d6dd1baeSJung-uk Kim  *
1466d6dd1baeSJung-uk Kim  * Conforms to "Serial Port Console Redirection Table",
1467f8146b88SJung-uk Kim  * Version 1.03, August 10, 2015
1468d6dd1baeSJung-uk Kim  *
1469d6dd1baeSJung-uk Kim  ******************************************************************************/
1470d6dd1baeSJung-uk Kim 
1471d6dd1baeSJung-uk Kim typedef struct acpi_table_spcr
1472d6dd1baeSJung-uk Kim {
1473d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1474d6dd1baeSJung-uk Kim     UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
1475d6dd1baeSJung-uk Kim     UINT8                   Reserved[3];
1476d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    SerialPort;
1477d6dd1baeSJung-uk Kim     UINT8                   InterruptType;
1478d6dd1baeSJung-uk Kim     UINT8                   PcInterrupt;
1479d6dd1baeSJung-uk Kim     UINT32                  Interrupt;
1480d6dd1baeSJung-uk Kim     UINT8                   BaudRate;
1481d6dd1baeSJung-uk Kim     UINT8                   Parity;
1482d6dd1baeSJung-uk Kim     UINT8                   StopBits;
1483d6dd1baeSJung-uk Kim     UINT8                   FlowControl;
1484d6dd1baeSJung-uk Kim     UINT8                   TerminalType;
1485d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
1486d6dd1baeSJung-uk Kim     UINT16                  PciDeviceId;
1487d6dd1baeSJung-uk Kim     UINT16                  PciVendorId;
1488d6dd1baeSJung-uk Kim     UINT8                   PciBus;
1489d6dd1baeSJung-uk Kim     UINT8                   PciDevice;
1490d6dd1baeSJung-uk Kim     UINT8                   PciFunction;
1491d6dd1baeSJung-uk Kim     UINT32                  PciFlags;
1492d6dd1baeSJung-uk Kim     UINT8                   PciSegment;
1493d6dd1baeSJung-uk Kim     UINT32                  Reserved2;
1494d6dd1baeSJung-uk Kim 
1495d6dd1baeSJung-uk Kim } ACPI_TABLE_SPCR;
1496d6dd1baeSJung-uk Kim 
1497d6dd1baeSJung-uk Kim /* Masks for PciFlags field above */
1498d6dd1baeSJung-uk Kim 
1499d6dd1baeSJung-uk Kim #define ACPI_SPCR_DO_NOT_DISABLE    (1)
1500d6dd1baeSJung-uk Kim 
1501f8146b88SJung-uk Kim /* Values for Interface Type: See the definition of the DBG2 table */
1502f8146b88SJung-uk Kim 
1503d6dd1baeSJung-uk Kim 
1504d6dd1baeSJung-uk Kim /*******************************************************************************
1505d6dd1baeSJung-uk Kim  *
1506d6dd1baeSJung-uk Kim  * SPMI - Server Platform Management Interface table
1507d6dd1baeSJung-uk Kim  *        Version 5
1508d6dd1baeSJung-uk Kim  *
1509d6dd1baeSJung-uk Kim  * Conforms to "Intelligent Platform Management Interface Specification
1510d6dd1baeSJung-uk Kim  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
1511d6dd1baeSJung-uk Kim  * June 12, 2009 markup.
1512d6dd1baeSJung-uk Kim  *
1513d6dd1baeSJung-uk Kim  ******************************************************************************/
1514d6dd1baeSJung-uk Kim 
1515d6dd1baeSJung-uk Kim typedef struct acpi_table_spmi
1516d6dd1baeSJung-uk Kim {
1517d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1518d6dd1baeSJung-uk Kim     UINT8                   InterfaceType;
1519d6dd1baeSJung-uk Kim     UINT8                   Reserved;           /* Must be 1 */
1520d6dd1baeSJung-uk Kim     UINT16                  SpecRevision;       /* Version of IPMI */
1521d6dd1baeSJung-uk Kim     UINT8                   InterruptType;
1522d6dd1baeSJung-uk Kim     UINT8                   GpeNumber;          /* GPE assigned */
1523d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
1524d6dd1baeSJung-uk Kim     UINT8                   PciDeviceFlag;
1525d6dd1baeSJung-uk Kim     UINT32                  Interrupt;
1526d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    IpmiRegister;
1527d6dd1baeSJung-uk Kim     UINT8                   PciSegment;
1528d6dd1baeSJung-uk Kim     UINT8                   PciBus;
1529d6dd1baeSJung-uk Kim     UINT8                   PciDevice;
1530d6dd1baeSJung-uk Kim     UINT8                   PciFunction;
1531d6dd1baeSJung-uk Kim     UINT8                   Reserved2;
1532d6dd1baeSJung-uk Kim 
1533d6dd1baeSJung-uk Kim } ACPI_TABLE_SPMI;
1534d6dd1baeSJung-uk Kim 
1535d6dd1baeSJung-uk Kim /* Values for InterfaceType above */
1536d6dd1baeSJung-uk Kim 
1537d6dd1baeSJung-uk Kim enum AcpiSpmiInterfaceTypes
1538d6dd1baeSJung-uk Kim {
1539d6dd1baeSJung-uk Kim     ACPI_SPMI_NOT_USED              = 0,
1540d6dd1baeSJung-uk Kim     ACPI_SPMI_KEYBOARD              = 1,
1541d6dd1baeSJung-uk Kim     ACPI_SPMI_SMI                   = 2,
1542d6dd1baeSJung-uk Kim     ACPI_SPMI_BLOCK_TRANSFER        = 3,
1543d6dd1baeSJung-uk Kim     ACPI_SPMI_SMBUS                 = 4,
1544d6dd1baeSJung-uk Kim     ACPI_SPMI_RESERVED              = 5         /* 5 and above are reserved */
1545d6dd1baeSJung-uk Kim };
1546d6dd1baeSJung-uk Kim 
1547d6dd1baeSJung-uk Kim 
1548d6dd1baeSJung-uk Kim /*******************************************************************************
1549d6dd1baeSJung-uk Kim  *
1550d6dd1baeSJung-uk Kim  * TCPA - Trusted Computing Platform Alliance table
15515ef50723SJung-uk Kim  *        Version 2
1552d6dd1baeSJung-uk Kim  *
15535ef50723SJung-uk Kim  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1554af051161SJung-uk Kim  * Version 1.2, Revision 8
1555af051161SJung-uk Kim  * February 27, 2017
15565ef50723SJung-uk Kim  *
15575ef50723SJung-uk Kim  * NOTE: There are two versions of the table with the same signature --
1558fe0f0bbbSJung-uk Kim  * the client version and the server version. The common PlatformClass
1559fe0f0bbbSJung-uk Kim  * field is used to differentiate the two types of tables.
1560d6dd1baeSJung-uk Kim  *
1561d6dd1baeSJung-uk Kim  ******************************************************************************/
1562d6dd1baeSJung-uk Kim 
1563fe0f0bbbSJung-uk Kim typedef struct acpi_table_tcpa_hdr
1564d6dd1baeSJung-uk Kim {
1565d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
15665ef50723SJung-uk Kim     UINT16                  PlatformClass;
1567fe0f0bbbSJung-uk Kim 
1568fe0f0bbbSJung-uk Kim } ACPI_TABLE_TCPA_HDR;
1569fe0f0bbbSJung-uk Kim 
1570fe0f0bbbSJung-uk Kim /*
1571fe0f0bbbSJung-uk Kim  * Values for PlatformClass above.
1572fe0f0bbbSJung-uk Kim  * This is how the client and server subtables are differentiated
1573fe0f0bbbSJung-uk Kim  */
1574fe0f0bbbSJung-uk Kim #define ACPI_TCPA_CLIENT_TABLE          0
1575fe0f0bbbSJung-uk Kim #define ACPI_TCPA_SERVER_TABLE          1
1576fe0f0bbbSJung-uk Kim 
1577fe0f0bbbSJung-uk Kim 
1578fe0f0bbbSJung-uk Kim typedef struct acpi_table_tcpa_client
1579fe0f0bbbSJung-uk Kim {
15805ef50723SJung-uk Kim     UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
1581d6dd1baeSJung-uk Kim     UINT64                  LogAddress;         /* Address of the event log area */
1582d6dd1baeSJung-uk Kim 
15835ef50723SJung-uk Kim } ACPI_TABLE_TCPA_CLIENT;
15845ef50723SJung-uk Kim 
15855ef50723SJung-uk Kim typedef struct acpi_table_tcpa_server
15865ef50723SJung-uk Kim {
15875ef50723SJung-uk Kim     UINT16                  Reserved;
15885ef50723SJung-uk Kim     UINT64                  MinimumLogLength;   /* Minimum length for the event log area */
15895ef50723SJung-uk Kim     UINT64                  LogAddress;         /* Address of the event log area */
15905ef50723SJung-uk Kim     UINT16                  SpecRevision;
15915ef50723SJung-uk Kim     UINT8                   DeviceFlags;
15925ef50723SJung-uk Kim     UINT8                   InterruptFlags;
15935ef50723SJung-uk Kim     UINT8                   GpeNumber;
15945ef50723SJung-uk Kim     UINT8                   Reserved2[3];
15955ef50723SJung-uk Kim     UINT32                  GlobalInterrupt;
15965ef50723SJung-uk Kim     ACPI_GENERIC_ADDRESS    Address;
15975ef50723SJung-uk Kim     UINT32                  Reserved3;
15985ef50723SJung-uk Kim     ACPI_GENERIC_ADDRESS    ConfigAddress;
15995ef50723SJung-uk Kim     UINT8                   Group;
16005ef50723SJung-uk Kim     UINT8                   Bus;                /* PCI Bus/Segment/Function numbers */
16015ef50723SJung-uk Kim     UINT8                   Device;
16025ef50723SJung-uk Kim     UINT8                   Function;
16035ef50723SJung-uk Kim 
16045ef50723SJung-uk Kim } ACPI_TABLE_TCPA_SERVER;
16055ef50723SJung-uk Kim 
16065ef50723SJung-uk Kim /* Values for DeviceFlags above */
16075ef50723SJung-uk Kim 
16085ef50723SJung-uk Kim #define ACPI_TCPA_PCI_DEVICE            (1)
16095ef50723SJung-uk Kim #define ACPI_TCPA_BUS_PNP               (1<<1)
16105ef50723SJung-uk Kim #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
16115ef50723SJung-uk Kim 
16125ef50723SJung-uk Kim /* Values for InterruptFlags above */
16135ef50723SJung-uk Kim 
16145ef50723SJung-uk Kim #define ACPI_TCPA_INTERRUPT_MODE        (1)
16155ef50723SJung-uk Kim #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
16165ef50723SJung-uk Kim #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
16175ef50723SJung-uk Kim #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
16185ef50723SJung-uk Kim 
16195ef50723SJung-uk Kim 
16205ef50723SJung-uk Kim /*******************************************************************************
16215ef50723SJung-uk Kim  *
16225ef50723SJung-uk Kim  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
16235ef50723SJung-uk Kim  *        Version 4
16245ef50723SJung-uk Kim  *
16255ef50723SJung-uk Kim  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1626af051161SJung-uk Kim  * Version 1.2, Revision 8
1627af051161SJung-uk Kim  * February 27, 2017
16285ef50723SJung-uk Kim  *
16295ef50723SJung-uk Kim  ******************************************************************************/
16305ef50723SJung-uk Kim 
16315ef50723SJung-uk Kim typedef struct acpi_table_tpm2
16325ef50723SJung-uk Kim {
16335ef50723SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
16345ef50723SJung-uk Kim     UINT16                  PlatformClass;
16355ef50723SJung-uk Kim     UINT16                  Reserved;
16365ef50723SJung-uk Kim     UINT64                  ControlAddress;
16375ef50723SJung-uk Kim     UINT32                  StartMethod;
16385ef50723SJung-uk Kim 
16395ef50723SJung-uk Kim     /* Platform-specific data follows */
16405ef50723SJung-uk Kim 
16415ef50723SJung-uk Kim } ACPI_TABLE_TPM2;
16425ef50723SJung-uk Kim 
16435ef50723SJung-uk Kim /* Values for StartMethod above */
16445ef50723SJung-uk Kim 
16455ef50723SJung-uk Kim #define ACPI_TPM2_NOT_ALLOWED                       0
16465ef50723SJung-uk Kim #define ACPI_TPM2_START_METHOD                      2
16475ef50723SJung-uk Kim #define ACPI_TPM2_MEMORY_MAPPED                     6
16485ef50723SJung-uk Kim #define ACPI_TPM2_COMMAND_BUFFER                    7
16495ef50723SJung-uk Kim #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
1650af051161SJung-uk Kim #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11  /* V1.2 Rev 8 */
1651af051161SJung-uk Kim 
1652af051161SJung-uk Kim 
1653af051161SJung-uk Kim /* Trailer appears after any StartMethod subtables */
1654af051161SJung-uk Kim 
1655af051161SJung-uk Kim typedef struct acpi_tpm2_trailer
1656af051161SJung-uk Kim {
1657af051161SJung-uk Kim     UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
1658af051161SJung-uk Kim     UINT64                  LogAddress;         /* Address of the event log area */
1659af051161SJung-uk Kim 
1660af051161SJung-uk Kim } ACPI_TPM2_TRAILER;
1661af051161SJung-uk Kim 
1662af051161SJung-uk Kim 
1663af051161SJung-uk Kim /*
1664af051161SJung-uk Kim  * Subtables (StartMethod-specific)
1665af051161SJung-uk Kim  */
1666af051161SJung-uk Kim 
1667af051161SJung-uk Kim /* 11: Start Method for ARM SMC (V1.2 Rev 8) */
1668af051161SJung-uk Kim 
1669af051161SJung-uk Kim typedef struct acpi_tpm2_arm_smc
1670af051161SJung-uk Kim {
1671af051161SJung-uk Kim     UINT32                  GlobalInterrupt;
1672af051161SJung-uk Kim     UINT8                   InterruptFlags;
1673af051161SJung-uk Kim     UINT8                   OperationFlags;
1674af051161SJung-uk Kim     UINT16                  Reserved;
1675af051161SJung-uk Kim     UINT32                  FunctionId;
1676af051161SJung-uk Kim 
1677af051161SJung-uk Kim } ACPI_TPM2_ARM_SMC;
1678af051161SJung-uk Kim 
1679af051161SJung-uk Kim /* Values for InterruptFlags above */
1680af051161SJung-uk Kim 
1681af051161SJung-uk Kim #define ACPI_TPM2_INTERRUPT_SUPPORT     (1)
1682af051161SJung-uk Kim 
1683af051161SJung-uk Kim /* Values for OperationFlags above */
1684af051161SJung-uk Kim 
1685af051161SJung-uk Kim #define ACPI_TPM2_IDLE_SUPPORT          (1)
1686d6dd1baeSJung-uk Kim 
1687d6dd1baeSJung-uk Kim 
1688d6dd1baeSJung-uk Kim /*******************************************************************************
1689d6dd1baeSJung-uk Kim  *
1690d6dd1baeSJung-uk Kim  * UEFI - UEFI Boot optimization Table
1691d6dd1baeSJung-uk Kim  *        Version 1
1692d6dd1baeSJung-uk Kim  *
1693d6dd1baeSJung-uk Kim  * Conforms to "Unified Extensible Firmware Interface Specification",
1694d6dd1baeSJung-uk Kim  * Version 2.3, May 8, 2009
1695d6dd1baeSJung-uk Kim  *
1696d6dd1baeSJung-uk Kim  ******************************************************************************/
1697d6dd1baeSJung-uk Kim 
1698d6dd1baeSJung-uk Kim typedef struct acpi_table_uefi
1699d6dd1baeSJung-uk Kim {
1700d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1701d6dd1baeSJung-uk Kim     UINT8                   Identifier[16];     /* UUID identifier */
1702d6dd1baeSJung-uk Kim     UINT16                  DataOffset;         /* Offset of remaining data in table */
1703d6dd1baeSJung-uk Kim 
1704d6dd1baeSJung-uk Kim } ACPI_TABLE_UEFI;
1705d6dd1baeSJung-uk Kim 
1706d6dd1baeSJung-uk Kim 
1707d6dd1baeSJung-uk Kim /*******************************************************************************
1708d6dd1baeSJung-uk Kim  *
17099c48c75eSJung-uk Kim  * VRTC - Virtual Real Time Clock Table
17109c48c75eSJung-uk Kim  *        Version 1
17119c48c75eSJung-uk Kim  *
17129c48c75eSJung-uk Kim  * Conforms to "Simple Firmware Interface Specification",
17139c48c75eSJung-uk Kim  * Draft 0.8.2, Oct 19, 2010
17149c48c75eSJung-uk Kim  * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
17159c48c75eSJung-uk Kim  *
17169c48c75eSJung-uk Kim  ******************************************************************************/
17179c48c75eSJung-uk Kim 
17189c48c75eSJung-uk Kim typedef struct acpi_table_vrtc
17199c48c75eSJung-uk Kim {
17209c48c75eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
17219c48c75eSJung-uk Kim 
17229c48c75eSJung-uk Kim } ACPI_TABLE_VRTC;
17239c48c75eSJung-uk Kim 
17249c48c75eSJung-uk Kim /* VRTC entry */
17259c48c75eSJung-uk Kim 
17269c48c75eSJung-uk Kim typedef struct acpi_vrtc_entry
17279c48c75eSJung-uk Kim {
17289c48c75eSJung-uk Kim     ACPI_GENERIC_ADDRESS    PhysicalAddress;
17299c48c75eSJung-uk Kim     UINT32                  Irq;
17309c48c75eSJung-uk Kim 
17319c48c75eSJung-uk Kim } ACPI_VRTC_ENTRY;
17329c48c75eSJung-uk Kim 
17339c48c75eSJung-uk Kim 
17349c48c75eSJung-uk Kim /*******************************************************************************
17359c48c75eSJung-uk Kim  *
1736d6dd1baeSJung-uk Kim  * WAET - Windows ACPI Emulated devices Table
1737d6dd1baeSJung-uk Kim  *        Version 1
1738d6dd1baeSJung-uk Kim  *
1739d6dd1baeSJung-uk Kim  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
1740d6dd1baeSJung-uk Kim  *
1741d6dd1baeSJung-uk Kim  ******************************************************************************/
1742d6dd1baeSJung-uk Kim 
1743d6dd1baeSJung-uk Kim typedef struct acpi_table_waet
1744d6dd1baeSJung-uk Kim {
1745d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1746d6dd1baeSJung-uk Kim     UINT32                  Flags;
1747d6dd1baeSJung-uk Kim 
1748d6dd1baeSJung-uk Kim } ACPI_TABLE_WAET;
1749d6dd1baeSJung-uk Kim 
1750d6dd1baeSJung-uk Kim /* Masks for Flags field above */
1751d6dd1baeSJung-uk Kim 
1752d6dd1baeSJung-uk Kim #define ACPI_WAET_RTC_NO_ACK        (1)         /* RTC requires no int acknowledge */
1753d6dd1baeSJung-uk Kim #define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
1754d6dd1baeSJung-uk Kim 
1755d6dd1baeSJung-uk Kim 
1756d6dd1baeSJung-uk Kim /*******************************************************************************
1757d6dd1baeSJung-uk Kim  *
1758d6dd1baeSJung-uk Kim  * WDAT - Watchdog Action Table
1759d6dd1baeSJung-uk Kim  *        Version 1
1760d6dd1baeSJung-uk Kim  *
1761d6dd1baeSJung-uk Kim  * Conforms to "Hardware Watchdog Timers Design Specification",
1762d6dd1baeSJung-uk Kim  * Copyright 2006 Microsoft Corporation.
1763d6dd1baeSJung-uk Kim  *
1764d6dd1baeSJung-uk Kim  ******************************************************************************/
1765d6dd1baeSJung-uk Kim 
1766d6dd1baeSJung-uk Kim typedef struct acpi_table_wdat
1767d6dd1baeSJung-uk Kim {
1768d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1769d6dd1baeSJung-uk Kim     UINT32                  HeaderLength;       /* Watchdog Header Length */
1770d6dd1baeSJung-uk Kim     UINT16                  PciSegment;         /* PCI Segment number */
1771d6dd1baeSJung-uk Kim     UINT8                   PciBus;             /* PCI Bus number */
1772d6dd1baeSJung-uk Kim     UINT8                   PciDevice;          /* PCI Device number */
1773d6dd1baeSJung-uk Kim     UINT8                   PciFunction;        /* PCI Function number */
1774d6dd1baeSJung-uk Kim     UINT8                   Reserved[3];
1775d6dd1baeSJung-uk Kim     UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
1776d6dd1baeSJung-uk Kim     UINT32                  MaxCount;           /* Maximum counter value supported */
1777d6dd1baeSJung-uk Kim     UINT32                  MinCount;           /* Minimum counter value */
1778d6dd1baeSJung-uk Kim     UINT8                   Flags;
1779d6dd1baeSJung-uk Kim     UINT8                   Reserved2[3];
1780d6dd1baeSJung-uk Kim     UINT32                  Entries;            /* Number of watchdog entries that follow */
1781d6dd1baeSJung-uk Kim 
1782d6dd1baeSJung-uk Kim } ACPI_TABLE_WDAT;
1783d6dd1baeSJung-uk Kim 
1784d6dd1baeSJung-uk Kim /* Masks for Flags field above */
1785d6dd1baeSJung-uk Kim 
1786d6dd1baeSJung-uk Kim #define ACPI_WDAT_ENABLED           (1)
1787d6dd1baeSJung-uk Kim #define ACPI_WDAT_STOPPED           0x80
1788d6dd1baeSJung-uk Kim 
1789d6dd1baeSJung-uk Kim 
1790d6dd1baeSJung-uk Kim /* WDAT Instruction Entries (actions) */
1791d6dd1baeSJung-uk Kim 
1792d6dd1baeSJung-uk Kim typedef struct acpi_wdat_entry
1793d6dd1baeSJung-uk Kim {
1794d6dd1baeSJung-uk Kim     UINT8                   Action;
1795d6dd1baeSJung-uk Kim     UINT8                   Instruction;
1796d6dd1baeSJung-uk Kim     UINT16                  Reserved;
1797d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    RegisterRegion;
1798d6dd1baeSJung-uk Kim     UINT32                  Value;              /* Value used with Read/Write register */
1799d6dd1baeSJung-uk Kim     UINT32                  Mask;               /* Bitmask required for this register instruction */
1800d6dd1baeSJung-uk Kim 
1801d6dd1baeSJung-uk Kim } ACPI_WDAT_ENTRY;
1802d6dd1baeSJung-uk Kim 
1803d6dd1baeSJung-uk Kim /* Values for Action field above */
1804d6dd1baeSJung-uk Kim 
1805d6dd1baeSJung-uk Kim enum AcpiWdatActions
1806d6dd1baeSJung-uk Kim {
1807d6dd1baeSJung-uk Kim     ACPI_WDAT_RESET                 = 1,
1808d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1809d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_COUNTDOWN         = 5,
1810d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_COUNTDOWN         = 6,
1811d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_RUNNING_STATE     = 8,
1812d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_RUNNING_STATE     = 9,
1813d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_STOPPED_STATE     = 10,
1814d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_STOPPED_STATE     = 11,
1815d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_REBOOT            = 16,
1816d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_REBOOT            = 17,
1817d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_SHUTDOWN          = 18,
1818d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_SHUTDOWN          = 19,
1819d6dd1baeSJung-uk Kim     ACPI_WDAT_GET_STATUS            = 32,
1820d6dd1baeSJung-uk Kim     ACPI_WDAT_SET_STATUS            = 33,
1821d6dd1baeSJung-uk Kim     ACPI_WDAT_ACTION_RESERVED       = 34    /* 34 and greater are reserved */
1822d6dd1baeSJung-uk Kim };
1823d6dd1baeSJung-uk Kim 
1824d6dd1baeSJung-uk Kim /* Values for Instruction field above */
1825d6dd1baeSJung-uk Kim 
1826d6dd1baeSJung-uk Kim enum AcpiWdatInstructions
1827d6dd1baeSJung-uk Kim {
1828d6dd1baeSJung-uk Kim     ACPI_WDAT_READ_VALUE            = 0,
1829d6dd1baeSJung-uk Kim     ACPI_WDAT_READ_COUNTDOWN        = 1,
1830d6dd1baeSJung-uk Kim     ACPI_WDAT_WRITE_VALUE           = 2,
1831d6dd1baeSJung-uk Kim     ACPI_WDAT_WRITE_COUNTDOWN       = 3,
1832d6dd1baeSJung-uk Kim     ACPI_WDAT_INSTRUCTION_RESERVED  = 4,    /* 4 and greater are reserved */
1833d6dd1baeSJung-uk Kim     ACPI_WDAT_PRESERVE_REGISTER     = 0x80  /* Except for this value */
1834d6dd1baeSJung-uk Kim };
1835d6dd1baeSJung-uk Kim 
1836d6dd1baeSJung-uk Kim 
1837d6dd1baeSJung-uk Kim /*******************************************************************************
1838d6dd1baeSJung-uk Kim  *
1839a88e22b7SJung-uk Kim  * WDDT - Watchdog Descriptor Table
1840a88e22b7SJung-uk Kim  *        Version 1
1841a88e22b7SJung-uk Kim  *
1842a88e22b7SJung-uk Kim  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
1843a88e22b7SJung-uk Kim  * Version 001, September 2002
1844a88e22b7SJung-uk Kim  *
1845a88e22b7SJung-uk Kim  ******************************************************************************/
1846a88e22b7SJung-uk Kim 
1847a88e22b7SJung-uk Kim typedef struct acpi_table_wddt
1848a88e22b7SJung-uk Kim {
1849a88e22b7SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1850a88e22b7SJung-uk Kim     UINT16                  SpecVersion;
1851a88e22b7SJung-uk Kim     UINT16                  TableVersion;
1852a88e22b7SJung-uk Kim     UINT16                  PciVendorId;
1853a88e22b7SJung-uk Kim     ACPI_GENERIC_ADDRESS    Address;
1854a88e22b7SJung-uk Kim     UINT16                  MaxCount;           /* Maximum counter value supported */
1855a88e22b7SJung-uk Kim     UINT16                  MinCount;           /* Minimum counter value supported */
1856a88e22b7SJung-uk Kim     UINT16                  Period;
1857a88e22b7SJung-uk Kim     UINT16                  Status;
1858a88e22b7SJung-uk Kim     UINT16                  Capability;
1859a88e22b7SJung-uk Kim 
1860a88e22b7SJung-uk Kim } ACPI_TABLE_WDDT;
1861a88e22b7SJung-uk Kim 
1862a88e22b7SJung-uk Kim /* Flags for Status field above */
1863a88e22b7SJung-uk Kim 
1864a88e22b7SJung-uk Kim #define ACPI_WDDT_AVAILABLE     (1)
1865a88e22b7SJung-uk Kim #define ACPI_WDDT_ACTIVE        (1<<1)
1866a88e22b7SJung-uk Kim #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
1867a88e22b7SJung-uk Kim #define ACPI_WDDT_USER_RESET    (1<<11)
1868a88e22b7SJung-uk Kim #define ACPI_WDDT_WDT_RESET     (1<<12)
1869a88e22b7SJung-uk Kim #define ACPI_WDDT_POWER_FAIL    (1<<13)
1870a88e22b7SJung-uk Kim #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
1871a88e22b7SJung-uk Kim 
1872a88e22b7SJung-uk Kim /* Flags for Capability field above */
1873a88e22b7SJung-uk Kim 
1874a88e22b7SJung-uk Kim #define ACPI_WDDT_AUTO_RESET    (1)
1875a88e22b7SJung-uk Kim #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
1876a88e22b7SJung-uk Kim 
1877a88e22b7SJung-uk Kim 
1878a88e22b7SJung-uk Kim /*******************************************************************************
1879a88e22b7SJung-uk Kim  *
1880d6dd1baeSJung-uk Kim  * WDRT - Watchdog Resource Table
1881d6dd1baeSJung-uk Kim  *        Version 1
1882d6dd1baeSJung-uk Kim  *
1883d6dd1baeSJung-uk Kim  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
1884d6dd1baeSJung-uk Kim  * Version 1.01, August 28, 2006
1885d6dd1baeSJung-uk Kim  *
1886d6dd1baeSJung-uk Kim  ******************************************************************************/
1887d6dd1baeSJung-uk Kim 
1888d6dd1baeSJung-uk Kim typedef struct acpi_table_wdrt
1889d6dd1baeSJung-uk Kim {
1890d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1891d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    ControlRegister;
1892d6dd1baeSJung-uk Kim     ACPI_GENERIC_ADDRESS    CountRegister;
1893d6dd1baeSJung-uk Kim     UINT16                  PciDeviceId;
1894d6dd1baeSJung-uk Kim     UINT16                  PciVendorId;
1895d6dd1baeSJung-uk Kim     UINT8                   PciBus;             /* PCI Bus number */
1896d6dd1baeSJung-uk Kim     UINT8                   PciDevice;          /* PCI Device number */
1897d6dd1baeSJung-uk Kim     UINT8                   PciFunction;        /* PCI Function number */
1898d6dd1baeSJung-uk Kim     UINT8                   PciSegment;         /* PCI Segment number */
1899d6dd1baeSJung-uk Kim     UINT16                  MaxCount;           /* Maximum counter value supported */
1900d6dd1baeSJung-uk Kim     UINT8                   Units;
1901d6dd1baeSJung-uk Kim 
1902d6dd1baeSJung-uk Kim } ACPI_TABLE_WDRT;
1903d6dd1baeSJung-uk Kim 
1904d6dd1baeSJung-uk Kim 
1905af051161SJung-uk Kim /*******************************************************************************
1906af051161SJung-uk Kim  *
1907af051161SJung-uk Kim  * WSMT - Windows SMM Security Migrations Table
1908af051161SJung-uk Kim  *        Version 1
1909af051161SJung-uk Kim  *
1910af051161SJung-uk Kim  * Conforms to "Windows SMM Security Migrations Table",
1911af051161SJung-uk Kim  * Version 1.0, April 18, 2016
1912af051161SJung-uk Kim  *
1913af051161SJung-uk Kim  ******************************************************************************/
1914af051161SJung-uk Kim 
1915af051161SJung-uk Kim typedef struct acpi_table_wsmt
1916af051161SJung-uk Kim {
1917af051161SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1918af051161SJung-uk Kim     UINT32                  ProtectionFlags;
1919af051161SJung-uk Kim 
1920af051161SJung-uk Kim } ACPI_TABLE_WSMT;
1921af051161SJung-uk Kim 
1922af051161SJung-uk Kim /* Flags for ProtectionFlags field above */
1923af051161SJung-uk Kim 
1924af051161SJung-uk Kim #define ACPI_WSMT_FIXED_COMM_BUFFERS                (1)
1925af051161SJung-uk Kim #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
1926af051161SJung-uk Kim #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION        (4)
1927af051161SJung-uk Kim 
1928af051161SJung-uk Kim 
1929d6dd1baeSJung-uk Kim /* Reset to default packing */
1930d6dd1baeSJung-uk Kim 
1931d6dd1baeSJung-uk Kim #pragma pack()
1932d6dd1baeSJung-uk Kim 
1933d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */
1934