xref: /haiku/src/add-ons/kernel/bus_managers/acpi/acpica/include/actbl1.h (revision 9d6c8e7f567af94f4e1a124e920a271cc86af052)
10174267aSFredrik Holmqvist /******************************************************************************
20174267aSFredrik Holmqvist  *
30174267aSFredrik Holmqvist  * Name: actbl1.h - Additional ACPI table definitions
40174267aSFredrik Holmqvist  *
50174267aSFredrik Holmqvist  *****************************************************************************/
60174267aSFredrik Holmqvist 
70174267aSFredrik Holmqvist /******************************************************************************
80174267aSFredrik Holmqvist  *
90174267aSFredrik Holmqvist  * 1. Copyright Notice
100174267aSFredrik Holmqvist  *
11*6dde014fSPulkoMandy  * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp.
120174267aSFredrik Holmqvist  * All rights reserved.
130174267aSFredrik Holmqvist  *
140174267aSFredrik Holmqvist  * 2. License
150174267aSFredrik Holmqvist  *
160174267aSFredrik Holmqvist  * 2.1. This is your license from Intel Corp. under its intellectual property
170174267aSFredrik Holmqvist  * rights. You may have additional license terms from the party that provided
180174267aSFredrik Holmqvist  * you this software, covering your right to use that party's intellectual
190174267aSFredrik Holmqvist  * property rights.
200174267aSFredrik Holmqvist  *
210174267aSFredrik Holmqvist  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
220174267aSFredrik Holmqvist  * copy of the source code appearing in this file ("Covered Code") an
230174267aSFredrik Holmqvist  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
240174267aSFredrik Holmqvist  * base code distributed originally by Intel ("Original Intel Code") to copy,
250174267aSFredrik Holmqvist  * make derivatives, distribute, use and display any portion of the Covered
260174267aSFredrik Holmqvist  * Code in any form, with the right to sublicense such rights; and
270174267aSFredrik Holmqvist  *
280174267aSFredrik Holmqvist  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
290174267aSFredrik Holmqvist  * license (with the right to sublicense), under only those claims of Intel
300174267aSFredrik Holmqvist  * patents that are infringed by the Original Intel Code, to make, use, sell,
310174267aSFredrik Holmqvist  * offer to sell, and import the Covered Code and derivative works thereof
320174267aSFredrik Holmqvist  * solely to the minimum extent necessary to exercise the above copyright
330174267aSFredrik Holmqvist  * license, and in no event shall the patent license extend to any additions
340174267aSFredrik Holmqvist  * to or modifications of the Original Intel Code. No other license or right
350174267aSFredrik Holmqvist  * is granted directly or by implication, estoppel or otherwise;
360174267aSFredrik Holmqvist  *
370174267aSFredrik Holmqvist  * The above copyright and patent license is granted only if the following
380174267aSFredrik Holmqvist  * conditions are met:
390174267aSFredrik Holmqvist  *
400174267aSFredrik Holmqvist  * 3. Conditions
410174267aSFredrik Holmqvist  *
420174267aSFredrik Holmqvist  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
430174267aSFredrik Holmqvist  * Redistribution of source code of any substantial portion of the Covered
440174267aSFredrik Holmqvist  * Code or modification with rights to further distribute source must include
450174267aSFredrik Holmqvist  * the above Copyright Notice, the above License, this list of Conditions,
460174267aSFredrik Holmqvist  * and the following Disclaimer and Export Compliance provision. In addition,
470174267aSFredrik Holmqvist  * Licensee must cause all Covered Code to which Licensee contributes to
480174267aSFredrik Holmqvist  * contain a file documenting the changes Licensee made to create that Covered
490174267aSFredrik Holmqvist  * Code and the date of any change. Licensee must include in that file the
500174267aSFredrik Holmqvist  * documentation of any changes made by any predecessor Licensee. Licensee
510174267aSFredrik Holmqvist  * must include a prominent statement that the modification is derived,
520174267aSFredrik Holmqvist  * directly or indirectly, from Original Intel Code.
530174267aSFredrik Holmqvist  *
540174267aSFredrik Holmqvist  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
550174267aSFredrik Holmqvist  * Redistribution of source code of any substantial portion of the Covered
560174267aSFredrik Holmqvist  * Code or modification without rights to further distribute source must
570174267aSFredrik Holmqvist  * include the following Disclaimer and Export Compliance provision in the
580174267aSFredrik Holmqvist  * documentation and/or other materials provided with distribution. In
590174267aSFredrik Holmqvist  * addition, Licensee may not authorize further sublicense of source of any
600174267aSFredrik Holmqvist  * portion of the Covered Code, and must include terms to the effect that the
610174267aSFredrik Holmqvist  * license from Licensee to its licensee is limited to the intellectual
620174267aSFredrik Holmqvist  * property embodied in the software Licensee provides to its licensee, and
630174267aSFredrik Holmqvist  * not to intellectual property embodied in modifications its licensee may
640174267aSFredrik Holmqvist  * make.
650174267aSFredrik Holmqvist  *
660174267aSFredrik Holmqvist  * 3.3. Redistribution of Executable. Redistribution in executable form of any
670174267aSFredrik Holmqvist  * substantial portion of the Covered Code or modification must reproduce the
680174267aSFredrik Holmqvist  * above Copyright Notice, and the following Disclaimer and Export Compliance
690174267aSFredrik Holmqvist  * provision in the documentation and/or other materials provided with the
700174267aSFredrik Holmqvist  * distribution.
710174267aSFredrik Holmqvist  *
720174267aSFredrik Holmqvist  * 3.4. Intel retains all right, title, and interest in and to the Original
730174267aSFredrik Holmqvist  * Intel Code.
740174267aSFredrik Holmqvist  *
750174267aSFredrik Holmqvist  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
760174267aSFredrik Holmqvist  * Intel shall be used in advertising or otherwise to promote the sale, use or
770174267aSFredrik Holmqvist  * other dealings in products derived from or relating to the Covered Code
780174267aSFredrik Holmqvist  * without prior written authorization from Intel.
790174267aSFredrik Holmqvist  *
800174267aSFredrik Holmqvist  * 4. Disclaimer and Export Compliance
810174267aSFredrik Holmqvist  *
820174267aSFredrik Holmqvist  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
830174267aSFredrik Holmqvist  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
840174267aSFredrik Holmqvist  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
850174267aSFredrik Holmqvist  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
860174267aSFredrik Holmqvist  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
870174267aSFredrik Holmqvist  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
880174267aSFredrik Holmqvist  * PARTICULAR PURPOSE.
890174267aSFredrik Holmqvist  *
900174267aSFredrik Holmqvist  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
910174267aSFredrik Holmqvist  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
920174267aSFredrik Holmqvist  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
930174267aSFredrik Holmqvist  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
940174267aSFredrik Holmqvist  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
950174267aSFredrik Holmqvist  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
960174267aSFredrik Holmqvist  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
970174267aSFredrik Holmqvist  * LIMITED REMEDY.
980174267aSFredrik Holmqvist  *
990174267aSFredrik Holmqvist  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1000174267aSFredrik Holmqvist  * software or system incorporating such software without first obtaining any
1010174267aSFredrik Holmqvist  * required license or other approval from the U. S. Department of Commerce or
1020174267aSFredrik Holmqvist  * any other agency or department of the United States Government. In the
1030174267aSFredrik Holmqvist  * event Licensee exports any such software from the United States or
1040174267aSFredrik Holmqvist  * re-exports any such software from a foreign destination, Licensee shall
1050174267aSFredrik Holmqvist  * ensure that the distribution and export/re-export of the software is in
1060174267aSFredrik Holmqvist  * compliance with all laws, regulations, orders, or other restrictions of the
1070174267aSFredrik Holmqvist  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1080174267aSFredrik Holmqvist  * any of its subsidiaries will export/re-export any technical data, process,
1090174267aSFredrik Holmqvist  * software, or service, directly or indirectly, to any country for which the
1100174267aSFredrik Holmqvist  * United States government or any agency thereof requires an export license,
1110174267aSFredrik Holmqvist  * other governmental approval, or letter of assurance, without first obtaining
1120174267aSFredrik Holmqvist  * such license, approval or letter.
1130174267aSFredrik Holmqvist  *
114ff2e2f81SFredrik Holmqvist  *****************************************************************************
115ff2e2f81SFredrik Holmqvist  *
116ff2e2f81SFredrik Holmqvist  * Alternatively, you may choose to be licensed under the terms of the
117ff2e2f81SFredrik Holmqvist  * following license:
118ff2e2f81SFredrik Holmqvist  *
119ff2e2f81SFredrik Holmqvist  * Redistribution and use in source and binary forms, with or without
120ff2e2f81SFredrik Holmqvist  * modification, are permitted provided that the following conditions
121ff2e2f81SFredrik Holmqvist  * are met:
122ff2e2f81SFredrik Holmqvist  * 1. Redistributions of source code must retain the above copyright
123ff2e2f81SFredrik Holmqvist  *    notice, this list of conditions, and the following disclaimer,
124ff2e2f81SFredrik Holmqvist  *    without modification.
125ff2e2f81SFredrik Holmqvist  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126ff2e2f81SFredrik Holmqvist  *    substantially similar to the "NO WARRANTY" disclaimer below
127ff2e2f81SFredrik Holmqvist  *    ("Disclaimer") and any redistribution must be conditioned upon
128ff2e2f81SFredrik Holmqvist  *    including a substantially similar Disclaimer requirement for further
129ff2e2f81SFredrik Holmqvist  *    binary redistribution.
130ff2e2f81SFredrik Holmqvist  * 3. Neither the names of the above-listed copyright holders nor the names
131ff2e2f81SFredrik Holmqvist  *    of any contributors may be used to endorse or promote products derived
132ff2e2f81SFredrik Holmqvist  *    from this software without specific prior written permission.
133ff2e2f81SFredrik Holmqvist  *
134ff2e2f81SFredrik Holmqvist  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135ff2e2f81SFredrik Holmqvist  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136ff2e2f81SFredrik Holmqvist  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137ff2e2f81SFredrik Holmqvist  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138ff2e2f81SFredrik Holmqvist  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139ff2e2f81SFredrik Holmqvist  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140ff2e2f81SFredrik Holmqvist  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141ff2e2f81SFredrik Holmqvist  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142ff2e2f81SFredrik Holmqvist  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143ff2e2f81SFredrik Holmqvist  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144ff2e2f81SFredrik Holmqvist  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145ff2e2f81SFredrik Holmqvist  *
146ff2e2f81SFredrik Holmqvist  * Alternatively, you may choose to be licensed under the terms of the
147ff2e2f81SFredrik Holmqvist  * GNU General Public License ("GPL") version 2 as published by the Free
148ff2e2f81SFredrik Holmqvist  * Software Foundation.
149ff2e2f81SFredrik Holmqvist  *
1500174267aSFredrik Holmqvist  *****************************************************************************/
1510174267aSFredrik Holmqvist 
1520174267aSFredrik Holmqvist #ifndef __ACTBL1_H__
1530174267aSFredrik Holmqvist #define __ACTBL1_H__
1540174267aSFredrik Holmqvist 
1550174267aSFredrik Holmqvist 
1560174267aSFredrik Holmqvist /*******************************************************************************
1570174267aSFredrik Holmqvist  *
15808c9948cSFredrik Holmqvist  * Additional ACPI Tables
1590174267aSFredrik Holmqvist  *
1600174267aSFredrik Holmqvist  * These tables are not consumed directly by the ACPICA subsystem, but are
1610174267aSFredrik Holmqvist  * included here to support device drivers and the AML disassembler.
1620174267aSFredrik Holmqvist  *
1630174267aSFredrik Holmqvist  ******************************************************************************/
1640174267aSFredrik Holmqvist 
1650174267aSFredrik Holmqvist 
1660174267aSFredrik Holmqvist /*
1670174267aSFredrik Holmqvist  * Values for description table header signatures for tables defined in this
1680174267aSFredrik Holmqvist  * file. Useful because they make it more difficult to inadvertently type in
1690174267aSFredrik Holmqvist  * the wrong signature.
1700174267aSFredrik Holmqvist  */
17115338de9SPulkoMandy #define ACPI_SIG_AEST           "AEST"      /* Arm Error Source Table */
17208c9948cSFredrik Holmqvist #define ACPI_SIG_ASF            "ASF!"      /* Alert Standard Format table */
17315338de9SPulkoMandy #define ACPI_SIG_ASPT           "ASPT"      /* AMD Secure Processor Table */
1740174267aSFredrik Holmqvist #define ACPI_SIG_BERT           "BERT"      /* Boot Error Record Table */
17508c9948cSFredrik Holmqvist #define ACPI_SIG_BGRT           "BGRT"      /* Boot Graphics Resource Table */
17608c9948cSFredrik Holmqvist #define ACPI_SIG_BOOT           "BOOT"      /* Simple Boot Flag Table */
17715338de9SPulkoMandy #define ACPI_SIG_CEDT           "CEDT"      /* CXL Early Discovery Table */
1780174267aSFredrik Holmqvist #define ACPI_SIG_CPEP           "CPEP"      /* Corrected Platform Error Polling table */
17908c9948cSFredrik Holmqvist #define ACPI_SIG_CSRT           "CSRT"      /* Core System Resource Table */
18008c9948cSFredrik Holmqvist #define ACPI_SIG_DBG2           "DBG2"      /* Debug Port table type 2 */
18108c9948cSFredrik Holmqvist #define ACPI_SIG_DBGP           "DBGP"      /* Debug Port table */
18208c9948cSFredrik Holmqvist #define ACPI_SIG_DMAR           "DMAR"      /* DMA Remapping table */
18308c9948cSFredrik Holmqvist #define ACPI_SIG_DRTM           "DRTM"      /* Dynamic Root of Trust for Measurement table */
1840174267aSFredrik Holmqvist #define ACPI_SIG_ECDT           "ECDT"      /* Embedded Controller Boot Resources Table */
1850174267aSFredrik Holmqvist #define ACPI_SIG_EINJ           "EINJ"      /* Error Injection table */
1860174267aSFredrik Holmqvist #define ACPI_SIG_ERST           "ERST"      /* Error Record Serialization Table */
18708c9948cSFredrik Holmqvist #define ACPI_SIG_FPDT           "FPDT"      /* Firmware Performance Data Table */
18808c9948cSFredrik Holmqvist #define ACPI_SIG_GTDT           "GTDT"      /* Generic Timer Description Table */
1890174267aSFredrik Holmqvist #define ACPI_SIG_HEST           "HEST"      /* Hardware Error Source Table */
19008c9948cSFredrik Holmqvist #define ACPI_SIG_HMAT           "HMAT"      /* Heterogeneous Memory Attributes Table */
19108c9948cSFredrik Holmqvist #define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
19208c9948cSFredrik Holmqvist #define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
19315338de9SPulkoMandy #define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table*/
1940174267aSFredrik Holmqvist 
19508c9948cSFredrik Holmqvist #define ACPI_SIG_S3PT           "S3PT"      /* S3 Performance (sub)Table */
19608c9948cSFredrik Holmqvist #define ACPI_SIG_PCCS           "PCC"       /* PCC Shared Memory Region */
19708c9948cSFredrik Holmqvist 
19808c9948cSFredrik Holmqvist 
19908c9948cSFredrik Holmqvist /* Reserved table signatures */
20008c9948cSFredrik Holmqvist 
20108c9948cSFredrik Holmqvist #define ACPI_SIG_MATR           "MATR"      /* Memory Address Translation Table */
20208c9948cSFredrik Holmqvist #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
20308c9948cSFredrik Holmqvist 
20408c9948cSFredrik Holmqvist /*
20508c9948cSFredrik Holmqvist  * These tables have been seen in the field, but no definition has been found
20608c9948cSFredrik Holmqvist  */
20708c9948cSFredrik Holmqvist #ifdef ACPI_UNDEFINED_TABLES
20808c9948cSFredrik Holmqvist #define ACPI_SIG_ATKG           "ATKG"
20908c9948cSFredrik Holmqvist #define ACPI_SIG_GSCI           "GSCI"      /* GMCH SCI table */
21008c9948cSFredrik Holmqvist #define ACPI_SIG_IEIT           "IEIT"
21108c9948cSFredrik Holmqvist #endif
2120174267aSFredrik Holmqvist 
2130174267aSFredrik Holmqvist /*
2140174267aSFredrik Holmqvist  * All tables must be byte-packed to match the ACPI specification, since
2150174267aSFredrik Holmqvist  * the tables are provided by the system BIOS.
2160174267aSFredrik Holmqvist  */
2170174267aSFredrik Holmqvist #pragma pack(1)
2180174267aSFredrik Holmqvist 
2190174267aSFredrik Holmqvist /*
2209b0d045cSFredrik Holmqvist  * Note: C bitfields are not used for this reason:
2219b0d045cSFredrik Holmqvist  *
2229b0d045cSFredrik Holmqvist  * "Bitfields are great and easy to read, but unfortunately the C language
2239b0d045cSFredrik Holmqvist  * does not specify the layout of bitfields in memory, which means they are
2249b0d045cSFredrik Holmqvist  * essentially useless for dealing with packed data in on-disk formats or
2259b0d045cSFredrik Holmqvist  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
2269b0d045cSFredrik Holmqvist  * this decision was a design error in C. Ritchie could have picked an order
2279b0d045cSFredrik Holmqvist  * and stuck with it." Norman Ramsey.
2289b0d045cSFredrik Holmqvist  * See http://stackoverflow.com/a/1053662/41661
2290174267aSFredrik Holmqvist  */
2300174267aSFredrik Holmqvist 
2310174267aSFredrik Holmqvist 
2320174267aSFredrik Holmqvist /*******************************************************************************
2330174267aSFredrik Holmqvist  *
2340174267aSFredrik Holmqvist  * Common subtable headers
2350174267aSFredrik Holmqvist  *
2360174267aSFredrik Holmqvist  ******************************************************************************/
2370174267aSFredrik Holmqvist 
2380174267aSFredrik Holmqvist /* Generic subtable header (used in MADT, SRAT, etc.) */
2390174267aSFredrik Holmqvist 
2400174267aSFredrik Holmqvist typedef struct acpi_subtable_header
2410174267aSFredrik Holmqvist {
2420174267aSFredrik Holmqvist     UINT8                   Type;
2430174267aSFredrik Holmqvist     UINT8                   Length;
2440174267aSFredrik Holmqvist 
2450174267aSFredrik Holmqvist } ACPI_SUBTABLE_HEADER;
2460174267aSFredrik Holmqvist 
2470174267aSFredrik Holmqvist 
2480174267aSFredrik Holmqvist /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
2490174267aSFredrik Holmqvist 
2500174267aSFredrik Holmqvist typedef struct acpi_whea_header
2510174267aSFredrik Holmqvist {
2520174267aSFredrik Holmqvist     UINT8                   Action;
2530174267aSFredrik Holmqvist     UINT8                   Instruction;
2540174267aSFredrik Holmqvist     UINT8                   Flags;
2550174267aSFredrik Holmqvist     UINT8                   Reserved;
2560174267aSFredrik Holmqvist     ACPI_GENERIC_ADDRESS    RegisterRegion;
2570174267aSFredrik Holmqvist     UINT64                  Value;              /* Value used with Read/Write register */
2580174267aSFredrik Holmqvist     UINT64                  Mask;               /* Bitmask required for this register instruction */
2590174267aSFredrik Holmqvist 
2600174267aSFredrik Holmqvist } ACPI_WHEA_HEADER;
2610174267aSFredrik Holmqvist 
2620174267aSFredrik Holmqvist 
2630174267aSFredrik Holmqvist /*******************************************************************************
2640174267aSFredrik Holmqvist  *
26508c9948cSFredrik Holmqvist  * ASF - Alert Standard Format table (Signature "ASF!")
26608c9948cSFredrik Holmqvist  *       Revision 0x10
26708c9948cSFredrik Holmqvist  *
26808c9948cSFredrik Holmqvist  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
26908c9948cSFredrik Holmqvist  *
27008c9948cSFredrik Holmqvist  ******************************************************************************/
27108c9948cSFredrik Holmqvist 
27208c9948cSFredrik Holmqvist typedef struct acpi_table_asf
27308c9948cSFredrik Holmqvist {
27408c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
27508c9948cSFredrik Holmqvist 
27608c9948cSFredrik Holmqvist } ACPI_TABLE_ASF;
27708c9948cSFredrik Holmqvist 
27808c9948cSFredrik Holmqvist 
27908c9948cSFredrik Holmqvist /* ASF subtable header */
28008c9948cSFredrik Holmqvist 
28108c9948cSFredrik Holmqvist typedef struct acpi_asf_header
28208c9948cSFredrik Holmqvist {
28308c9948cSFredrik Holmqvist     UINT8                   Type;
28408c9948cSFredrik Holmqvist     UINT8                   Reserved;
28508c9948cSFredrik Holmqvist     UINT16                  Length;
28608c9948cSFredrik Holmqvist 
28708c9948cSFredrik Holmqvist } ACPI_ASF_HEADER;
28808c9948cSFredrik Holmqvist 
28908c9948cSFredrik Holmqvist 
29008c9948cSFredrik Holmqvist /* Values for Type field above */
29108c9948cSFredrik Holmqvist 
29208c9948cSFredrik Holmqvist enum AcpiAsfType
29308c9948cSFredrik Holmqvist {
29408c9948cSFredrik Holmqvist     ACPI_ASF_TYPE_INFO          = 0,
29508c9948cSFredrik Holmqvist     ACPI_ASF_TYPE_ALERT         = 1,
29608c9948cSFredrik Holmqvist     ACPI_ASF_TYPE_CONTROL       = 2,
29708c9948cSFredrik Holmqvist     ACPI_ASF_TYPE_BOOT          = 3,
29808c9948cSFredrik Holmqvist     ACPI_ASF_TYPE_ADDRESS       = 4,
29908c9948cSFredrik Holmqvist     ACPI_ASF_TYPE_RESERVED      = 5
30008c9948cSFredrik Holmqvist };
30108c9948cSFredrik Holmqvist 
30208c9948cSFredrik Holmqvist /*
30308c9948cSFredrik Holmqvist  * ASF subtables
30408c9948cSFredrik Holmqvist  */
30508c9948cSFredrik Holmqvist 
30608c9948cSFredrik Holmqvist /* 0: ASF Information */
30708c9948cSFredrik Holmqvist 
30808c9948cSFredrik Holmqvist typedef struct acpi_asf_info
30908c9948cSFredrik Holmqvist {
31008c9948cSFredrik Holmqvist     ACPI_ASF_HEADER         Header;
31108c9948cSFredrik Holmqvist     UINT8                   MinResetValue;
31208c9948cSFredrik Holmqvist     UINT8                   MinPollInterval;
31308c9948cSFredrik Holmqvist     UINT16                  SystemId;
31408c9948cSFredrik Holmqvist     UINT32                  MfgId;
31508c9948cSFredrik Holmqvist     UINT8                   Flags;
31608c9948cSFredrik Holmqvist     UINT8                   Reserved2[3];
31708c9948cSFredrik Holmqvist 
31808c9948cSFredrik Holmqvist } ACPI_ASF_INFO;
31908c9948cSFredrik Holmqvist 
32008c9948cSFredrik Holmqvist /* Masks for Flags field above */
32108c9948cSFredrik Holmqvist 
32208c9948cSFredrik Holmqvist #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
32308c9948cSFredrik Holmqvist 
32408c9948cSFredrik Holmqvist 
32508c9948cSFredrik Holmqvist /* 1: ASF Alerts */
32608c9948cSFredrik Holmqvist 
32708c9948cSFredrik Holmqvist typedef struct acpi_asf_alert
32808c9948cSFredrik Holmqvist {
32908c9948cSFredrik Holmqvist     ACPI_ASF_HEADER         Header;
33008c9948cSFredrik Holmqvist     UINT8                   AssertMask;
33108c9948cSFredrik Holmqvist     UINT8                   DeassertMask;
33208c9948cSFredrik Holmqvist     UINT8                   Alerts;
33308c9948cSFredrik Holmqvist     UINT8                   DataLength;
33408c9948cSFredrik Holmqvist 
33508c9948cSFredrik Holmqvist } ACPI_ASF_ALERT;
33608c9948cSFredrik Holmqvist 
33708c9948cSFredrik Holmqvist typedef struct acpi_asf_alert_data
33808c9948cSFredrik Holmqvist {
33908c9948cSFredrik Holmqvist     UINT8                   Address;
34008c9948cSFredrik Holmqvist     UINT8                   Command;
34108c9948cSFredrik Holmqvist     UINT8                   Mask;
34208c9948cSFredrik Holmqvist     UINT8                   Value;
34308c9948cSFredrik Holmqvist     UINT8                   SensorType;
34408c9948cSFredrik Holmqvist     UINT8                   Type;
34508c9948cSFredrik Holmqvist     UINT8                   Offset;
34608c9948cSFredrik Holmqvist     UINT8                   SourceType;
34708c9948cSFredrik Holmqvist     UINT8                   Severity;
34808c9948cSFredrik Holmqvist     UINT8                   SensorNumber;
34908c9948cSFredrik Holmqvist     UINT8                   Entity;
35008c9948cSFredrik Holmqvist     UINT8                   Instance;
35108c9948cSFredrik Holmqvist 
35208c9948cSFredrik Holmqvist } ACPI_ASF_ALERT_DATA;
35308c9948cSFredrik Holmqvist 
35408c9948cSFredrik Holmqvist 
35508c9948cSFredrik Holmqvist /* 2: ASF Remote Control */
35608c9948cSFredrik Holmqvist 
35708c9948cSFredrik Holmqvist typedef struct acpi_asf_remote
35808c9948cSFredrik Holmqvist {
35908c9948cSFredrik Holmqvist     ACPI_ASF_HEADER         Header;
36008c9948cSFredrik Holmqvist     UINT8                   Controls;
36108c9948cSFredrik Holmqvist     UINT8                   DataLength;
36208c9948cSFredrik Holmqvist     UINT16                  Reserved2;
36308c9948cSFredrik Holmqvist 
36408c9948cSFredrik Holmqvist } ACPI_ASF_REMOTE;
36508c9948cSFredrik Holmqvist 
36608c9948cSFredrik Holmqvist typedef struct acpi_asf_control_data
36708c9948cSFredrik Holmqvist {
36808c9948cSFredrik Holmqvist     UINT8                   Function;
36908c9948cSFredrik Holmqvist     UINT8                   Address;
37008c9948cSFredrik Holmqvist     UINT8                   Command;
37108c9948cSFredrik Holmqvist     UINT8                   Value;
37208c9948cSFredrik Holmqvist 
37308c9948cSFredrik Holmqvist } ACPI_ASF_CONTROL_DATA;
37408c9948cSFredrik Holmqvist 
37508c9948cSFredrik Holmqvist 
37608c9948cSFredrik Holmqvist /* 3: ASF RMCP Boot Options */
37708c9948cSFredrik Holmqvist 
37808c9948cSFredrik Holmqvist typedef struct acpi_asf_rmcp
37908c9948cSFredrik Holmqvist {
38008c9948cSFredrik Holmqvist     ACPI_ASF_HEADER         Header;
38108c9948cSFredrik Holmqvist     UINT8                   Capabilities[7];
38208c9948cSFredrik Holmqvist     UINT8                   CompletionCode;
38308c9948cSFredrik Holmqvist     UINT32                  EnterpriseId;
38408c9948cSFredrik Holmqvist     UINT8                   Command;
38508c9948cSFredrik Holmqvist     UINT16                  Parameter;
38608c9948cSFredrik Holmqvist     UINT16                  BootOptions;
38708c9948cSFredrik Holmqvist     UINT16                  OemParameters;
38808c9948cSFredrik Holmqvist 
38908c9948cSFredrik Holmqvist } ACPI_ASF_RMCP;
39008c9948cSFredrik Holmqvist 
39108c9948cSFredrik Holmqvist 
39208c9948cSFredrik Holmqvist /* 4: ASF Address */
39308c9948cSFredrik Holmqvist 
39408c9948cSFredrik Holmqvist typedef struct acpi_asf_address
39508c9948cSFredrik Holmqvist {
39608c9948cSFredrik Holmqvist     ACPI_ASF_HEADER         Header;
39708c9948cSFredrik Holmqvist     UINT8                   EpromAddress;
39808c9948cSFredrik Holmqvist     UINT8                   Devices;
39908c9948cSFredrik Holmqvist 
40008c9948cSFredrik Holmqvist } ACPI_ASF_ADDRESS;
40108c9948cSFredrik Holmqvist 
40215338de9SPulkoMandy /*******************************************************************************
40315338de9SPulkoMandy  *
40415338de9SPulkoMandy  * ASPT - AMD Secure Processor Table (Signature "ASPT")
40515338de9SPulkoMandy  *        Revision 0x1
40615338de9SPulkoMandy  *
40715338de9SPulkoMandy  * Conforms to AMD Socket SP5/SP6 Platform ASPT Rev1 Specification,
40815338de9SPulkoMandy  * 12 September 2022
40915338de9SPulkoMandy  *
41015338de9SPulkoMandy  ******************************************************************************/
41115338de9SPulkoMandy 
41215338de9SPulkoMandy typedef struct acpi_table_aspt
41315338de9SPulkoMandy {
41415338de9SPulkoMandy     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
41515338de9SPulkoMandy     UINT32                  NumEntries;
41615338de9SPulkoMandy 
41715338de9SPulkoMandy } ACPI_TABLE_ASPT;
41815338de9SPulkoMandy 
41915338de9SPulkoMandy 
42015338de9SPulkoMandy /* ASPT subtable header */
42115338de9SPulkoMandy 
42215338de9SPulkoMandy typedef struct acpi_aspt_header
42315338de9SPulkoMandy {
42415338de9SPulkoMandy     UINT16                  Type;
42515338de9SPulkoMandy     UINT16                  Length;
42615338de9SPulkoMandy 
42715338de9SPulkoMandy } ACPI_ASPT_HEADER;
42815338de9SPulkoMandy 
42915338de9SPulkoMandy 
43015338de9SPulkoMandy /* Values for Type field above */
43115338de9SPulkoMandy 
43215338de9SPulkoMandy enum AcpiAsptType
43315338de9SPulkoMandy {
43415338de9SPulkoMandy     ACPI_ASPT_TYPE_GLOBAL_REGS      = 0,
43515338de9SPulkoMandy     ACPI_ASPT_TYPE_SEV_MBOX_REGS    = 1,
43615338de9SPulkoMandy     ACPI_ASPT_TYPE_ACPI_MBOX_REGS   = 2,
43715338de9SPulkoMandy     ACPI_ASPT_TYPE_UNKNOWN          = 3,
43815338de9SPulkoMandy };
43915338de9SPulkoMandy 
44015338de9SPulkoMandy /*
44115338de9SPulkoMandy  * ASPT subtables
44215338de9SPulkoMandy  */
44315338de9SPulkoMandy 
44415338de9SPulkoMandy /* 0: ASPT Global Registers */
44515338de9SPulkoMandy 
44615338de9SPulkoMandy typedef struct acpi_aspt_global_regs
44715338de9SPulkoMandy {
44815338de9SPulkoMandy     ACPI_ASPT_HEADER        Header;
44915338de9SPulkoMandy     UINT32                  Reserved;
45015338de9SPulkoMandy     UINT64                  FeatureRegAddr;
45115338de9SPulkoMandy     UINT64                  IrqEnRegAddr;
45215338de9SPulkoMandy     UINT64                  IrqStRegAddr;
45315338de9SPulkoMandy 
45415338de9SPulkoMandy } ACPI_ASPT_GLOBAL_REGS;
45515338de9SPulkoMandy 
45615338de9SPulkoMandy 
45715338de9SPulkoMandy /* 1: ASPT SEV Mailbox Registers */
45815338de9SPulkoMandy 
45915338de9SPulkoMandy typedef struct acpi_aspt_sev_mbox_regs
46015338de9SPulkoMandy {
46115338de9SPulkoMandy     ACPI_ASPT_HEADER        Header;
46215338de9SPulkoMandy     UINT8                   MboxIrqId;
46315338de9SPulkoMandy     UINT8                   Reserved[3];
46415338de9SPulkoMandy     UINT64                  CmdRespRegAddr;
46515338de9SPulkoMandy     UINT64                  CmdBufLoRegAddr;
46615338de9SPulkoMandy     UINT64                  CmdBufHiRegAddr;
46715338de9SPulkoMandy 
46815338de9SPulkoMandy } ACPI_ASPT_SEV_MBOX_REGS;
46915338de9SPulkoMandy 
47015338de9SPulkoMandy 
47115338de9SPulkoMandy /* 2: ASPT ACPI Mailbox Registers */
47215338de9SPulkoMandy 
47315338de9SPulkoMandy typedef struct acpi_aspt_acpi_mbox_regs
47415338de9SPulkoMandy {
47515338de9SPulkoMandy     ACPI_ASPT_HEADER        Header;
47615338de9SPulkoMandy     UINT32                  Reserved1;
47715338de9SPulkoMandy     UINT64                  CmdRespRegAddr;
47815338de9SPulkoMandy     UINT64                  Reserved2[2];
47915338de9SPulkoMandy 
48015338de9SPulkoMandy } ACPI_ASPT_ACPI_MBOX_REGS;
48115338de9SPulkoMandy 
48208c9948cSFredrik Holmqvist 
48308c9948cSFredrik Holmqvist /*******************************************************************************
48408c9948cSFredrik Holmqvist  *
4850174267aSFredrik Holmqvist  * BERT - Boot Error Record Table (ACPI 4.0)
4860174267aSFredrik Holmqvist  *        Version 1
4870174267aSFredrik Holmqvist  *
4880174267aSFredrik Holmqvist  ******************************************************************************/
4890174267aSFredrik Holmqvist 
4900174267aSFredrik Holmqvist typedef struct acpi_table_bert
4910174267aSFredrik Holmqvist {
4920174267aSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
4930174267aSFredrik Holmqvist     UINT32                  RegionLength;       /* Length of the boot error region */
4946822cda0SFredrik Holmqvist     UINT64                  Address;            /* Physical address of the error region */
4950174267aSFredrik Holmqvist 
4960174267aSFredrik Holmqvist } ACPI_TABLE_BERT;
4970174267aSFredrik Holmqvist 
4980174267aSFredrik Holmqvist 
4990174267aSFredrik Holmqvist /* Boot Error Region (not a subtable, pointed to by Address field above) */
5000174267aSFredrik Holmqvist 
5010174267aSFredrik Holmqvist typedef struct acpi_bert_region
5020174267aSFredrik Holmqvist {
5030174267aSFredrik Holmqvist     UINT32                  BlockStatus;        /* Type of error information */
5040174267aSFredrik Holmqvist     UINT32                  RawDataOffset;      /* Offset to raw error data */
5050174267aSFredrik Holmqvist     UINT32                  RawDataLength;      /* Length of raw error data */
5060174267aSFredrik Holmqvist     UINT32                  DataLength;         /* Length of generic error data */
5070174267aSFredrik Holmqvist     UINT32                  ErrorSeverity;      /* Severity code */
5080174267aSFredrik Holmqvist 
5090174267aSFredrik Holmqvist } ACPI_BERT_REGION;
5100174267aSFredrik Holmqvist 
5110174267aSFredrik Holmqvist /* Values for BlockStatus flags above */
5120174267aSFredrik Holmqvist 
5130174267aSFredrik Holmqvist #define ACPI_BERT_UNCORRECTABLE             (1)
5140174267aSFredrik Holmqvist #define ACPI_BERT_CORRECTABLE               (1<<1)
5150174267aSFredrik Holmqvist #define ACPI_BERT_MULTIPLE_UNCORRECTABLE    (1<<2)
5160174267aSFredrik Holmqvist #define ACPI_BERT_MULTIPLE_CORRECTABLE      (1<<3)
5170174267aSFredrik Holmqvist #define ACPI_BERT_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
5180174267aSFredrik Holmqvist 
5190174267aSFredrik Holmqvist /* Values for ErrorSeverity above */
5200174267aSFredrik Holmqvist 
5210174267aSFredrik Holmqvist enum AcpiBertErrorSeverity
5220174267aSFredrik Holmqvist {
5230174267aSFredrik Holmqvist     ACPI_BERT_ERROR_CORRECTABLE     = 0,
5240174267aSFredrik Holmqvist     ACPI_BERT_ERROR_FATAL           = 1,
5250174267aSFredrik Holmqvist     ACPI_BERT_ERROR_CORRECTED       = 2,
5260174267aSFredrik Holmqvist     ACPI_BERT_ERROR_NONE            = 3,
5270174267aSFredrik Holmqvist     ACPI_BERT_ERROR_RESERVED        = 4     /* 4 and greater are reserved */
5280174267aSFredrik Holmqvist };
5290174267aSFredrik Holmqvist 
5300174267aSFredrik Holmqvist /*
5310174267aSFredrik Holmqvist  * Note: The generic error data that follows the ErrorSeverity field above
5320174267aSFredrik Holmqvist  * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below
5330174267aSFredrik Holmqvist  */
5340174267aSFredrik Holmqvist 
5350174267aSFredrik Holmqvist 
5360174267aSFredrik Holmqvist /*******************************************************************************
5370174267aSFredrik Holmqvist  *
53808c9948cSFredrik Holmqvist  * BGRT - Boot Graphics Resource Table (ACPI 5.0)
53908c9948cSFredrik Holmqvist  *        Version 1
54008c9948cSFredrik Holmqvist  *
54108c9948cSFredrik Holmqvist  ******************************************************************************/
54208c9948cSFredrik Holmqvist 
54308c9948cSFredrik Holmqvist typedef struct acpi_table_bgrt
54408c9948cSFredrik Holmqvist {
54508c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
54608c9948cSFredrik Holmqvist     UINT16                  Version;
54708c9948cSFredrik Holmqvist     UINT8                   Status;
54808c9948cSFredrik Holmqvist     UINT8                   ImageType;
54908c9948cSFredrik Holmqvist     UINT64                  ImageAddress;
55008c9948cSFredrik Holmqvist     UINT32                  ImageOffsetX;
55108c9948cSFredrik Holmqvist     UINT32                  ImageOffsetY;
55208c9948cSFredrik Holmqvist 
55308c9948cSFredrik Holmqvist } ACPI_TABLE_BGRT;
55408c9948cSFredrik Holmqvist 
55508c9948cSFredrik Holmqvist /* Flags for Status field above */
55608c9948cSFredrik Holmqvist 
55708c9948cSFredrik Holmqvist #define ACPI_BGRT_DISPLAYED                 (1)
55808c9948cSFredrik Holmqvist #define ACPI_BGRT_ORIENTATION_OFFSET        (3 << 1)
55908c9948cSFredrik Holmqvist 
56008c9948cSFredrik Holmqvist 
56108c9948cSFredrik Holmqvist /*******************************************************************************
56208c9948cSFredrik Holmqvist  *
56308c9948cSFredrik Holmqvist  * BOOT - Simple Boot Flag Table
56408c9948cSFredrik Holmqvist  *        Version 1
56508c9948cSFredrik Holmqvist  *
56608c9948cSFredrik Holmqvist  * Conforms to the "Simple Boot Flag Specification", Version 2.1
56708c9948cSFredrik Holmqvist  *
56808c9948cSFredrik Holmqvist  ******************************************************************************/
56908c9948cSFredrik Holmqvist 
57008c9948cSFredrik Holmqvist typedef struct acpi_table_boot
57108c9948cSFredrik Holmqvist {
57208c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
57308c9948cSFredrik Holmqvist     UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
57408c9948cSFredrik Holmqvist     UINT8                   Reserved[3];
57508c9948cSFredrik Holmqvist 
57608c9948cSFredrik Holmqvist } ACPI_TABLE_BOOT;
57708c9948cSFredrik Holmqvist 
57808c9948cSFredrik Holmqvist 
57908c9948cSFredrik Holmqvist /*******************************************************************************
58008c9948cSFredrik Holmqvist  *
58115338de9SPulkoMandy  * CDAT - Coherent Device Attribute Table
58215338de9SPulkoMandy  *        Version 1
58315338de9SPulkoMandy  *
58415338de9SPulkoMandy  * Conforms to the "Coherent Device Attribute Table (CDAT) Specification
58515338de9SPulkoMandy  " (Revision 1.01, October 2020.)
58615338de9SPulkoMandy  *
58715338de9SPulkoMandy  ******************************************************************************/
58815338de9SPulkoMandy 
58915338de9SPulkoMandy typedef struct acpi_table_cdat
59015338de9SPulkoMandy {
59115338de9SPulkoMandy     UINT32                  Length;                             /* Length of table in bytes, including this header */
59215338de9SPulkoMandy     UINT8                   Revision;                           /* ACPI Specification minor version number */
59315338de9SPulkoMandy     UINT8                   Checksum;                           /* To make sum of entire table == 0 */
59415338de9SPulkoMandy     UINT8                   Reserved[6];
59515338de9SPulkoMandy     UINT32                  Sequence;                           /* Used to detect runtime CDAT table changes */
59615338de9SPulkoMandy 
59715338de9SPulkoMandy } ACPI_TABLE_CDAT;
59815338de9SPulkoMandy 
59915338de9SPulkoMandy 
60015338de9SPulkoMandy /* CDAT common subtable header */
60115338de9SPulkoMandy 
60215338de9SPulkoMandy typedef struct acpi_cdat_header
60315338de9SPulkoMandy {
60415338de9SPulkoMandy     UINT8                   Type;
60515338de9SPulkoMandy     UINT8                   Reserved;
60615338de9SPulkoMandy     UINT16                  Length;
60715338de9SPulkoMandy 
60815338de9SPulkoMandy } ACPI_CDAT_HEADER;
60915338de9SPulkoMandy 
61015338de9SPulkoMandy /* Values for Type field above */
61115338de9SPulkoMandy 
61215338de9SPulkoMandy enum AcpiCdatType
61315338de9SPulkoMandy {
61415338de9SPulkoMandy     ACPI_CDAT_TYPE_DSMAS                = 0,
61515338de9SPulkoMandy     ACPI_CDAT_TYPE_DSLBIS               = 1,
61615338de9SPulkoMandy     ACPI_CDAT_TYPE_DSMSCIS              = 2,
61715338de9SPulkoMandy     ACPI_CDAT_TYPE_DSIS                 = 3,
61815338de9SPulkoMandy     ACPI_CDAT_TYPE_DSEMTS               = 4,
61915338de9SPulkoMandy     ACPI_CDAT_TYPE_SSLBIS               = 5,
62015338de9SPulkoMandy     ACPI_CDAT_TYPE_RESERVED             = 6   /* 6 through 0xFF are reserved */
62115338de9SPulkoMandy };
62215338de9SPulkoMandy 
62315338de9SPulkoMandy 
62415338de9SPulkoMandy /* Subtable 0: Device Scoped Memory Affinity Structure (DSMAS) */
62515338de9SPulkoMandy 
62615338de9SPulkoMandy typedef struct acpi_cdat_dsmas
62715338de9SPulkoMandy {
62815338de9SPulkoMandy     UINT8                   DsmadHandle;
62915338de9SPulkoMandy     UINT8                   Flags;
63015338de9SPulkoMandy     UINT16                  Reserved;
63115338de9SPulkoMandy     UINT64                  DpaBaseAddress;
63215338de9SPulkoMandy     UINT64                  DpaLength;
63315338de9SPulkoMandy 
63415338de9SPulkoMandy } ACPI_CDAT_DSMAS;
63515338de9SPulkoMandy 
63615338de9SPulkoMandy /* Flags for subtable above */
63715338de9SPulkoMandy 
63815338de9SPulkoMandy #define ACPI_CDAT_DSMAS_NON_VOLATILE        (1 << 2)
63915338de9SPulkoMandy 
64015338de9SPulkoMandy 
64115338de9SPulkoMandy /* Subtable 1: Device scoped Latency and Bandwidth Information Structure (DSLBIS) */
64215338de9SPulkoMandy 
64315338de9SPulkoMandy typedef struct acpi_cdat_dslbis
64415338de9SPulkoMandy {
64515338de9SPulkoMandy     UINT8                   Handle;
64615338de9SPulkoMandy     UINT8                   Flags; /* If Handle matches a DSMAS handle, the definition of this field matches
64715338de9SPulkoMandy                                     * Flags field in HMAT System Locality Latency */
64815338de9SPulkoMandy     UINT8                   DataType;
64915338de9SPulkoMandy     UINT8                   Reserved;
65015338de9SPulkoMandy     UINT64                  EntryBaseUnit;
65115338de9SPulkoMandy     UINT16                  Entry[3];
65215338de9SPulkoMandy     UINT16                  Reserved2;
65315338de9SPulkoMandy 
65415338de9SPulkoMandy } ACPI_CDAT_DSLBIS;
65515338de9SPulkoMandy 
65615338de9SPulkoMandy 
65715338de9SPulkoMandy /* Subtable 2: Device Scoped Memory Side Cache Information Structure (DSMSCIS) */
65815338de9SPulkoMandy 
65915338de9SPulkoMandy typedef struct acpi_cdat_dsmscis
66015338de9SPulkoMandy {
66115338de9SPulkoMandy     UINT8                   DsmasHandle;
66215338de9SPulkoMandy     UINT8                   Reserved[3];
66315338de9SPulkoMandy     UINT64                  SideCacheSize;
66415338de9SPulkoMandy     UINT32                  CacheAttributes;
66515338de9SPulkoMandy 
66615338de9SPulkoMandy } ACPI_CDAT_DSMSCIS;
66715338de9SPulkoMandy 
66815338de9SPulkoMandy 
66915338de9SPulkoMandy /* Subtable 3: Device Scoped Initiator Structure (DSIS) */
67015338de9SPulkoMandy 
67115338de9SPulkoMandy typedef struct acpi_cdat_dsis
67215338de9SPulkoMandy {
67315338de9SPulkoMandy     UINT8                   Flags;
67415338de9SPulkoMandy     UINT8                   Handle;
67515338de9SPulkoMandy     UINT16                  Reserved;
67615338de9SPulkoMandy 
67715338de9SPulkoMandy } ACPI_CDAT_DSIS;
67815338de9SPulkoMandy 
67915338de9SPulkoMandy /* Flags for above subtable */
68015338de9SPulkoMandy 
68115338de9SPulkoMandy #define ACPI_CDAT_DSIS_MEM_ATTACHED         (1 << 0)
68215338de9SPulkoMandy 
68315338de9SPulkoMandy 
68415338de9SPulkoMandy /* Subtable 4: Device Scoped EFI Memory Type Structure (DSEMTS) */
68515338de9SPulkoMandy 
68615338de9SPulkoMandy typedef struct acpi_cdat_dsemts
68715338de9SPulkoMandy {
68815338de9SPulkoMandy     UINT8                   DsmasHandle;
68915338de9SPulkoMandy     UINT8                   MemoryType;
69015338de9SPulkoMandy     UINT16                  Reserved;
69115338de9SPulkoMandy     UINT64                  DpaOffset;
69215338de9SPulkoMandy     UINT64                  RangeLength;
69315338de9SPulkoMandy 
69415338de9SPulkoMandy } ACPI_CDAT_DSEMTS;
69515338de9SPulkoMandy 
69615338de9SPulkoMandy 
69715338de9SPulkoMandy /* Subtable 5: Switch Scoped Latency and Bandwidth Information Structure (SSLBIS) */
69815338de9SPulkoMandy 
69915338de9SPulkoMandy typedef struct acpi_cdat_sslbis
70015338de9SPulkoMandy {
70115338de9SPulkoMandy     UINT8                   DataType;
70215338de9SPulkoMandy     UINT8                   Reserved[3];
70315338de9SPulkoMandy     UINT64                  EntryBaseUnit;
70415338de9SPulkoMandy 
70515338de9SPulkoMandy } ACPI_CDAT_SSLBIS;
70615338de9SPulkoMandy 
70715338de9SPulkoMandy 
70815338de9SPulkoMandy /* Sub-subtable for above, SslbeEntries field */
70915338de9SPulkoMandy 
71015338de9SPulkoMandy typedef struct acpi_cdat_sslbe
71115338de9SPulkoMandy {
71215338de9SPulkoMandy     UINT16                  PortxId;
71315338de9SPulkoMandy     UINT16                  PortyId;
71415338de9SPulkoMandy     UINT16                  LatencyOrBandwidth;
71515338de9SPulkoMandy     UINT16                  Reserved;
71615338de9SPulkoMandy 
71715338de9SPulkoMandy } ACPI_CDAT_SSLBE;
71815338de9SPulkoMandy 
719*6dde014fSPulkoMandy #define ACPI_CDAT_SSLBIS_US_PORT	0x0100
720*6dde014fSPulkoMandy #define ACPI_CDAT_SSLBIS_ANY_PORT	0xffff
72115338de9SPulkoMandy 
72215338de9SPulkoMandy /*******************************************************************************
72315338de9SPulkoMandy  *
72415338de9SPulkoMandy  * CEDT - CXL Early Discovery Table
72515338de9SPulkoMandy  *        Version 1
72615338de9SPulkoMandy  *
72715338de9SPulkoMandy  * Conforms to the "CXL Early Discovery Table" (CXL 2.0, October 2020)
72815338de9SPulkoMandy  *
72915338de9SPulkoMandy  ******************************************************************************/
73015338de9SPulkoMandy 
73115338de9SPulkoMandy typedef struct acpi_table_cedt
73215338de9SPulkoMandy {
73315338de9SPulkoMandy     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
73415338de9SPulkoMandy 
73515338de9SPulkoMandy } ACPI_TABLE_CEDT;
73615338de9SPulkoMandy 
73715338de9SPulkoMandy /* CEDT subtable header (Performance Record Structure) */
73815338de9SPulkoMandy 
73915338de9SPulkoMandy typedef struct acpi_cedt_header
74015338de9SPulkoMandy {
74115338de9SPulkoMandy     UINT8                   Type;
74215338de9SPulkoMandy     UINT8                   Reserved;
74315338de9SPulkoMandy     UINT16                  Length;
74415338de9SPulkoMandy 
74515338de9SPulkoMandy } ACPI_CEDT_HEADER;
74615338de9SPulkoMandy 
74715338de9SPulkoMandy /* Values for Type field above */
74815338de9SPulkoMandy 
74915338de9SPulkoMandy enum AcpiCedtType
75015338de9SPulkoMandy {
75115338de9SPulkoMandy     ACPI_CEDT_TYPE_CHBS                 = 0,
75215338de9SPulkoMandy     ACPI_CEDT_TYPE_CFMWS                = 1,
75315338de9SPulkoMandy     ACPI_CEDT_TYPE_CXIMS                = 2,
75415338de9SPulkoMandy     ACPI_CEDT_TYPE_RDPAS                = 3,
75515338de9SPulkoMandy     ACPI_CEDT_TYPE_RESERVED             = 4,
75615338de9SPulkoMandy };
75715338de9SPulkoMandy 
75815338de9SPulkoMandy /* Values for version field above */
75915338de9SPulkoMandy 
76015338de9SPulkoMandy #define ACPI_CEDT_CHBS_VERSION_CXL11    (0)
76115338de9SPulkoMandy #define ACPI_CEDT_CHBS_VERSION_CXL20    (1)
76215338de9SPulkoMandy 
76315338de9SPulkoMandy /* Values for length field above */
76415338de9SPulkoMandy 
76515338de9SPulkoMandy #define ACPI_CEDT_CHBS_LENGTH_CXL11     (0x2000)
76615338de9SPulkoMandy #define ACPI_CEDT_CHBS_LENGTH_CXL20     (0x10000)
76715338de9SPulkoMandy 
76815338de9SPulkoMandy /*
76915338de9SPulkoMandy  * CEDT subtables
77015338de9SPulkoMandy  */
77115338de9SPulkoMandy 
77215338de9SPulkoMandy /* 0: CXL Host Bridge Structure */
77315338de9SPulkoMandy 
77415338de9SPulkoMandy typedef struct acpi_cedt_chbs
77515338de9SPulkoMandy {
77615338de9SPulkoMandy     ACPI_CEDT_HEADER        Header;
77715338de9SPulkoMandy     UINT32                  Uid;
77815338de9SPulkoMandy     UINT32                  CxlVersion;
77915338de9SPulkoMandy     UINT32                  Reserved;
78015338de9SPulkoMandy     UINT64                  Base;
78115338de9SPulkoMandy     UINT64                  Length;
78215338de9SPulkoMandy 
78315338de9SPulkoMandy } ACPI_CEDT_CHBS;
78415338de9SPulkoMandy 
78515338de9SPulkoMandy 
78615338de9SPulkoMandy /* 1: CXL Fixed Memory Window Structure */
78715338de9SPulkoMandy 
78815338de9SPulkoMandy typedef struct acpi_cedt_cfmws
78915338de9SPulkoMandy {
79015338de9SPulkoMandy     ACPI_CEDT_HEADER        Header;
79115338de9SPulkoMandy     UINT32                  Reserved1;
79215338de9SPulkoMandy     UINT64                  BaseHpa;
79315338de9SPulkoMandy     UINT64                  WindowSize;
79415338de9SPulkoMandy     UINT8                   InterleaveWays;
79515338de9SPulkoMandy     UINT8                   InterleaveArithmetic;
79615338de9SPulkoMandy     UINT16                  Reserved2;
79715338de9SPulkoMandy     UINT32                  Granularity;
79815338de9SPulkoMandy     UINT16                  Restrictions;
79915338de9SPulkoMandy     UINT16                  QtgId;
80015338de9SPulkoMandy     UINT32                  InterleaveTargets[];
80115338de9SPulkoMandy 
80215338de9SPulkoMandy } ACPI_CEDT_CFMWS;
80315338de9SPulkoMandy 
80415338de9SPulkoMandy typedef struct acpi_cedt_cfmws_target_element
80515338de9SPulkoMandy {
80615338de9SPulkoMandy     UINT32                  InterleaveTarget;
80715338de9SPulkoMandy 
80815338de9SPulkoMandy } ACPI_CEDT_CFMWS_TARGET_ELEMENT;
80915338de9SPulkoMandy 
81015338de9SPulkoMandy /* Values for Interleave Arithmetic field above */
81115338de9SPulkoMandy 
81215338de9SPulkoMandy #define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO   (0)
81315338de9SPulkoMandy #define ACPI_CEDT_CFMWS_ARITHMETIC_XOR      (1)
81415338de9SPulkoMandy 
81515338de9SPulkoMandy /* Values for Restrictions field above */
81615338de9SPulkoMandy 
81715338de9SPulkoMandy #define ACPI_CEDT_CFMWS_RESTRICT_TYPE2      (1)
81815338de9SPulkoMandy #define ACPI_CEDT_CFMWS_RESTRICT_TYPE3      (1<<1)
81915338de9SPulkoMandy #define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE   (1<<2)
82015338de9SPulkoMandy #define ACPI_CEDT_CFMWS_RESTRICT_PMEM       (1<<3)
82115338de9SPulkoMandy #define ACPI_CEDT_CFMWS_RESTRICT_FIXED      (1<<4)
82215338de9SPulkoMandy 
82315338de9SPulkoMandy /* 2: CXL XOR Interleave Math Structure */
82415338de9SPulkoMandy 
82515338de9SPulkoMandy struct acpi_cedt_cxims {
82615338de9SPulkoMandy     ACPI_CEDT_HEADER        Header;
82715338de9SPulkoMandy     UINT16                  Reserved1;
82815338de9SPulkoMandy     UINT8                   Hbig;
82915338de9SPulkoMandy     UINT8                   NrXormaps;
83015338de9SPulkoMandy     UINT64                  XormapList[];
83115338de9SPulkoMandy };
83215338de9SPulkoMandy 
83315338de9SPulkoMandy /* 3: CXL RCEC Downstream Port Association Structure */
83415338de9SPulkoMandy 
83515338de9SPulkoMandy struct acpi_cedt_rdpas {
83615338de9SPulkoMandy     ACPI_CEDT_HEADER        Header;
83715338de9SPulkoMandy     UINT16                  Segment;
83815338de9SPulkoMandy     UINT16                  Bdf;
83915338de9SPulkoMandy     UINT8                   Protocol;
84015338de9SPulkoMandy     UINT64                  Address;
84115338de9SPulkoMandy };
84215338de9SPulkoMandy 
84315338de9SPulkoMandy /* Masks for bdf field above */
84415338de9SPulkoMandy #define ACPI_CEDT_RDPAS_BUS_MASK            0xff00
84515338de9SPulkoMandy #define ACPI_CEDT_RDPAS_DEVICE_MASK         0x00f8
84615338de9SPulkoMandy #define ACPI_CEDT_RDPAS_FUNCTION_MASK       0x0007
84715338de9SPulkoMandy 
84815338de9SPulkoMandy #define ACPI_CEDT_RDPAS_PROTOCOL_IO        (0)
84915338de9SPulkoMandy #define ACPI_CEDT_RDPAS_PROTOCOL_CACHEMEM  (1)
85015338de9SPulkoMandy 
85115338de9SPulkoMandy /*******************************************************************************
85215338de9SPulkoMandy  *
8530174267aSFredrik Holmqvist  * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
8540174267aSFredrik Holmqvist  *        Version 1
8550174267aSFredrik Holmqvist  *
8560174267aSFredrik Holmqvist  ******************************************************************************/
8570174267aSFredrik Holmqvist 
8580174267aSFredrik Holmqvist typedef struct acpi_table_cpep
8590174267aSFredrik Holmqvist {
8600174267aSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
8610174267aSFredrik Holmqvist     UINT64                  Reserved;
8620174267aSFredrik Holmqvist 
8630174267aSFredrik Holmqvist } ACPI_TABLE_CPEP;
8640174267aSFredrik Holmqvist 
8650174267aSFredrik Holmqvist 
8660174267aSFredrik Holmqvist /* Subtable */
8670174267aSFredrik Holmqvist 
8680174267aSFredrik Holmqvist typedef struct acpi_cpep_polling
8690174267aSFredrik Holmqvist {
8700174267aSFredrik Holmqvist     ACPI_SUBTABLE_HEADER    Header;
8710174267aSFredrik Holmqvist     UINT8                   Id;                 /* Processor ID */
8720174267aSFredrik Holmqvist     UINT8                   Eid;                /* Processor EID */
8730174267aSFredrik Holmqvist     UINT32                  Interval;           /* Polling interval (msec) */
8740174267aSFredrik Holmqvist 
8750174267aSFredrik Holmqvist } ACPI_CPEP_POLLING;
8760174267aSFredrik Holmqvist 
8770174267aSFredrik Holmqvist 
8780174267aSFredrik Holmqvist /*******************************************************************************
8790174267aSFredrik Holmqvist  *
88008c9948cSFredrik Holmqvist  * CSRT - Core System Resource Table
88108c9948cSFredrik Holmqvist  *        Version 0
88208c9948cSFredrik Holmqvist  *
88308c9948cSFredrik Holmqvist  * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
88408c9948cSFredrik Holmqvist  *
88508c9948cSFredrik Holmqvist  ******************************************************************************/
88608c9948cSFredrik Holmqvist 
88708c9948cSFredrik Holmqvist typedef struct acpi_table_csrt
88808c9948cSFredrik Holmqvist {
88908c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
89008c9948cSFredrik Holmqvist 
89108c9948cSFredrik Holmqvist } ACPI_TABLE_CSRT;
89208c9948cSFredrik Holmqvist 
89308c9948cSFredrik Holmqvist 
89408c9948cSFredrik Holmqvist /* Resource Group subtable */
89508c9948cSFredrik Holmqvist 
89608c9948cSFredrik Holmqvist typedef struct acpi_csrt_group
89708c9948cSFredrik Holmqvist {
89808c9948cSFredrik Holmqvist     UINT32                  Length;
89908c9948cSFredrik Holmqvist     UINT32                  VendorId;
90008c9948cSFredrik Holmqvist     UINT32                  SubvendorId;
90108c9948cSFredrik Holmqvist     UINT16                  DeviceId;
90208c9948cSFredrik Holmqvist     UINT16                  SubdeviceId;
90308c9948cSFredrik Holmqvist     UINT16                  Revision;
90408c9948cSFredrik Holmqvist     UINT16                  Reserved;
90508c9948cSFredrik Holmqvist     UINT32                  SharedInfoLength;
90608c9948cSFredrik Holmqvist 
90708c9948cSFredrik Holmqvist     /* Shared data immediately follows (Length = SharedInfoLength) */
90808c9948cSFredrik Holmqvist 
90908c9948cSFredrik Holmqvist } ACPI_CSRT_GROUP;
91008c9948cSFredrik Holmqvist 
91108c9948cSFredrik Holmqvist /* Shared Info subtable */
91208c9948cSFredrik Holmqvist 
91308c9948cSFredrik Holmqvist typedef struct acpi_csrt_shared_info
91408c9948cSFredrik Holmqvist {
91508c9948cSFredrik Holmqvist     UINT16                  MajorVersion;
91608c9948cSFredrik Holmqvist     UINT16                  MinorVersion;
91708c9948cSFredrik Holmqvist     UINT32                  MmioBaseLow;
91808c9948cSFredrik Holmqvist     UINT32                  MmioBaseHigh;
91908c9948cSFredrik Holmqvist     UINT32                  GsiInterrupt;
92008c9948cSFredrik Holmqvist     UINT8                   InterruptPolarity;
92108c9948cSFredrik Holmqvist     UINT8                   InterruptMode;
92208c9948cSFredrik Holmqvist     UINT8                   NumChannels;
92308c9948cSFredrik Holmqvist     UINT8                   DmaAddressWidth;
92408c9948cSFredrik Holmqvist     UINT16                  BaseRequestLine;
92508c9948cSFredrik Holmqvist     UINT16                  NumHandshakeSignals;
92608c9948cSFredrik Holmqvist     UINT32                  MaxBlockSize;
92708c9948cSFredrik Holmqvist 
92808c9948cSFredrik Holmqvist     /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */
92908c9948cSFredrik Holmqvist 
93008c9948cSFredrik Holmqvist } ACPI_CSRT_SHARED_INFO;
93108c9948cSFredrik Holmqvist 
93208c9948cSFredrik Holmqvist /* Resource Descriptor subtable */
93308c9948cSFredrik Holmqvist 
93408c9948cSFredrik Holmqvist typedef struct acpi_csrt_descriptor
93508c9948cSFredrik Holmqvist {
93608c9948cSFredrik Holmqvist     UINT32                  Length;
93708c9948cSFredrik Holmqvist     UINT16                  Type;
93808c9948cSFredrik Holmqvist     UINT16                  Subtype;
93908c9948cSFredrik Holmqvist     UINT32                  Uid;
94008c9948cSFredrik Holmqvist 
94108c9948cSFredrik Holmqvist     /* Resource-specific information immediately follows */
94208c9948cSFredrik Holmqvist 
94308c9948cSFredrik Holmqvist } ACPI_CSRT_DESCRIPTOR;
94408c9948cSFredrik Holmqvist 
94508c9948cSFredrik Holmqvist 
94608c9948cSFredrik Holmqvist /* Resource Types */
94708c9948cSFredrik Holmqvist 
94808c9948cSFredrik Holmqvist #define ACPI_CSRT_TYPE_INTERRUPT    0x0001
94908c9948cSFredrik Holmqvist #define ACPI_CSRT_TYPE_TIMER        0x0002
95008c9948cSFredrik Holmqvist #define ACPI_CSRT_TYPE_DMA          0x0003
95108c9948cSFredrik Holmqvist 
95208c9948cSFredrik Holmqvist /* Resource Subtypes */
95308c9948cSFredrik Holmqvist 
95408c9948cSFredrik Holmqvist #define ACPI_CSRT_XRUPT_LINE        0x0000
95508c9948cSFredrik Holmqvist #define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
95608c9948cSFredrik Holmqvist #define ACPI_CSRT_TIMER             0x0000
95708c9948cSFredrik Holmqvist #define ACPI_CSRT_DMA_CHANNEL       0x0000
95808c9948cSFredrik Holmqvist #define ACPI_CSRT_DMA_CONTROLLER    0x0001
95908c9948cSFredrik Holmqvist 
96008c9948cSFredrik Holmqvist 
96108c9948cSFredrik Holmqvist /*******************************************************************************
96208c9948cSFredrik Holmqvist  *
96308c9948cSFredrik Holmqvist  * DBG2 - Debug Port Table 2
96408c9948cSFredrik Holmqvist  *        Version 0 (Both main table and subtables)
96508c9948cSFredrik Holmqvist  *
96615338de9SPulkoMandy  * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020
96708c9948cSFredrik Holmqvist  *
96808c9948cSFredrik Holmqvist  ******************************************************************************/
96908c9948cSFredrik Holmqvist 
97008c9948cSFredrik Holmqvist typedef struct acpi_table_dbg2
97108c9948cSFredrik Holmqvist {
97208c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
97308c9948cSFredrik Holmqvist     UINT32                  InfoOffset;
97408c9948cSFredrik Holmqvist     UINT32                  InfoCount;
97508c9948cSFredrik Holmqvist 
97608c9948cSFredrik Holmqvist } ACPI_TABLE_DBG2;
97708c9948cSFredrik Holmqvist 
97808c9948cSFredrik Holmqvist 
97908c9948cSFredrik Holmqvist typedef struct acpi_dbg2_header
98008c9948cSFredrik Holmqvist {
98108c9948cSFredrik Holmqvist     UINT32                  InfoOffset;
98208c9948cSFredrik Holmqvist     UINT32                  InfoCount;
98308c9948cSFredrik Holmqvist 
98408c9948cSFredrik Holmqvist } ACPI_DBG2_HEADER;
98508c9948cSFredrik Holmqvist 
98608c9948cSFredrik Holmqvist 
98708c9948cSFredrik Holmqvist /* Debug Device Information Subtable */
98808c9948cSFredrik Holmqvist 
98908c9948cSFredrik Holmqvist typedef struct acpi_dbg2_device
99008c9948cSFredrik Holmqvist {
99108c9948cSFredrik Holmqvist     UINT8                   Revision;
99208c9948cSFredrik Holmqvist     UINT16                  Length;
99308c9948cSFredrik Holmqvist     UINT8                   RegisterCount;      /* Number of BaseAddress registers */
99408c9948cSFredrik Holmqvist     UINT16                  NamepathLength;
99508c9948cSFredrik Holmqvist     UINT16                  NamepathOffset;
99608c9948cSFredrik Holmqvist     UINT16                  OemDataLength;
99708c9948cSFredrik Holmqvist     UINT16                  OemDataOffset;
99808c9948cSFredrik Holmqvist     UINT16                  PortType;
99908c9948cSFredrik Holmqvist     UINT16                  PortSubtype;
100008c9948cSFredrik Holmqvist     UINT16                  Reserved;
100108c9948cSFredrik Holmqvist     UINT16                  BaseAddressOffset;
100208c9948cSFredrik Holmqvist     UINT16                  AddressSizeOffset;
100308c9948cSFredrik Holmqvist     /*
100408c9948cSFredrik Holmqvist      * Data that follows:
100508c9948cSFredrik Holmqvist      *    BaseAddress (required) - Each in 12-byte Generic Address Structure format.
100608c9948cSFredrik Holmqvist      *    AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register.
100708c9948cSFredrik Holmqvist      *    Namepath    (required) - Null terminated string. Single dot if not supported.
100808c9948cSFredrik Holmqvist      *    OemData     (optional) - Length is OemDataLength.
100908c9948cSFredrik Holmqvist      */
101008c9948cSFredrik Holmqvist } ACPI_DBG2_DEVICE;
101108c9948cSFredrik Holmqvist 
101208c9948cSFredrik Holmqvist /* Types for PortType field above */
101308c9948cSFredrik Holmqvist 
101408c9948cSFredrik Holmqvist #define ACPI_DBG2_SERIAL_PORT       0x8000
101508c9948cSFredrik Holmqvist #define ACPI_DBG2_1394_PORT         0x8001
101608c9948cSFredrik Holmqvist #define ACPI_DBG2_USB_PORT          0x8002
101708c9948cSFredrik Holmqvist #define ACPI_DBG2_NET_PORT          0x8003
101808c9948cSFredrik Holmqvist 
101908c9948cSFredrik Holmqvist /* Subtypes for PortSubtype field above */
102008c9948cSFredrik Holmqvist 
102108c9948cSFredrik Holmqvist #define ACPI_DBG2_16550_COMPATIBLE  0x0000
102208c9948cSFredrik Holmqvist #define ACPI_DBG2_16550_SUBSET      0x0001
102315338de9SPulkoMandy #define ACPI_DBG2_MAX311XE_SPI      0x0002
102408c9948cSFredrik Holmqvist #define ACPI_DBG2_ARM_PL011         0x0003
102515338de9SPulkoMandy #define ACPI_DBG2_MSM8X60           0x0004
102615338de9SPulkoMandy #define ACPI_DBG2_16550_NVIDIA      0x0005
102715338de9SPulkoMandy #define ACPI_DBG2_TI_OMAP           0x0006
102815338de9SPulkoMandy #define ACPI_DBG2_APM88XXXX         0x0008
102915338de9SPulkoMandy #define ACPI_DBG2_MSM8974           0x0009
103015338de9SPulkoMandy #define ACPI_DBG2_SAM5250           0x000A
103115338de9SPulkoMandy #define ACPI_DBG2_INTEL_USIF        0x000B
103215338de9SPulkoMandy #define ACPI_DBG2_IMX6              0x000C
103308c9948cSFredrik Holmqvist #define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
103408c9948cSFredrik Holmqvist #define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
103508c9948cSFredrik Holmqvist #define ACPI_DBG2_ARM_DCC           0x000F
103608c9948cSFredrik Holmqvist #define ACPI_DBG2_BCM2835           0x0010
103715338de9SPulkoMandy #define ACPI_DBG2_SDM845_1_8432MHZ  0x0011
103815338de9SPulkoMandy #define ACPI_DBG2_16550_WITH_GAS    0x0012
103915338de9SPulkoMandy #define ACPI_DBG2_SDM845_7_372MHZ   0x0013
104015338de9SPulkoMandy #define ACPI_DBG2_INTEL_LPSS        0x0014
104108c9948cSFredrik Holmqvist 
104208c9948cSFredrik Holmqvist #define ACPI_DBG2_1394_STANDARD     0x0000
104308c9948cSFredrik Holmqvist 
104408c9948cSFredrik Holmqvist #define ACPI_DBG2_USB_XHCI          0x0000
104508c9948cSFredrik Holmqvist #define ACPI_DBG2_USB_EHCI          0x0001
104608c9948cSFredrik Holmqvist 
104708c9948cSFredrik Holmqvist 
104808c9948cSFredrik Holmqvist /*******************************************************************************
104908c9948cSFredrik Holmqvist  *
105008c9948cSFredrik Holmqvist  * DBGP - Debug Port table
105108c9948cSFredrik Holmqvist  *        Version 1
105208c9948cSFredrik Holmqvist  *
105308c9948cSFredrik Holmqvist  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
105408c9948cSFredrik Holmqvist  *
105508c9948cSFredrik Holmqvist  ******************************************************************************/
105608c9948cSFredrik Holmqvist 
105708c9948cSFredrik Holmqvist typedef struct acpi_table_dbgp
105808c9948cSFredrik Holmqvist {
105908c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
106008c9948cSFredrik Holmqvist     UINT8                   Type;               /* 0=full 16550, 1=subset of 16550 */
106108c9948cSFredrik Holmqvist     UINT8                   Reserved[3];
106208c9948cSFredrik Holmqvist     ACPI_GENERIC_ADDRESS    DebugPort;
106308c9948cSFredrik Holmqvist 
106408c9948cSFredrik Holmqvist } ACPI_TABLE_DBGP;
106508c9948cSFredrik Holmqvist 
106608c9948cSFredrik Holmqvist 
106708c9948cSFredrik Holmqvist /*******************************************************************************
106808c9948cSFredrik Holmqvist  *
106908c9948cSFredrik Holmqvist  * DMAR - DMA Remapping table
107008c9948cSFredrik Holmqvist  *        Version 1
107108c9948cSFredrik Holmqvist  *
107208c9948cSFredrik Holmqvist  * Conforms to "Intel Virtualization Technology for Directed I/O",
107308c9948cSFredrik Holmqvist  * Version 2.3, October 2014
107408c9948cSFredrik Holmqvist  *
107508c9948cSFredrik Holmqvist  ******************************************************************************/
107608c9948cSFredrik Holmqvist 
107708c9948cSFredrik Holmqvist typedef struct acpi_table_dmar
107808c9948cSFredrik Holmqvist {
107908c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
108008c9948cSFredrik Holmqvist     UINT8                   Width;              /* Host Address Width */
108108c9948cSFredrik Holmqvist     UINT8                   Flags;
108208c9948cSFredrik Holmqvist     UINT8                   Reserved[10];
108308c9948cSFredrik Holmqvist 
108408c9948cSFredrik Holmqvist } ACPI_TABLE_DMAR;
108508c9948cSFredrik Holmqvist 
108608c9948cSFredrik Holmqvist /* Masks for Flags field above */
108708c9948cSFredrik Holmqvist 
108808c9948cSFredrik Holmqvist #define ACPI_DMAR_INTR_REMAP        (1)
108908c9948cSFredrik Holmqvist #define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
109008c9948cSFredrik Holmqvist #define ACPI_DMAR_X2APIC_MODE       (1<<2)
109108c9948cSFredrik Holmqvist 
109208c9948cSFredrik Holmqvist 
109308c9948cSFredrik Holmqvist /* DMAR subtable header */
109408c9948cSFredrik Holmqvist 
109508c9948cSFredrik Holmqvist typedef struct acpi_dmar_header
109608c9948cSFredrik Holmqvist {
109708c9948cSFredrik Holmqvist     UINT16                  Type;
109808c9948cSFredrik Holmqvist     UINT16                  Length;
109908c9948cSFredrik Holmqvist 
110008c9948cSFredrik Holmqvist } ACPI_DMAR_HEADER;
110108c9948cSFredrik Holmqvist 
110208c9948cSFredrik Holmqvist /* Values for subtable type in ACPI_DMAR_HEADER */
110308c9948cSFredrik Holmqvist 
110408c9948cSFredrik Holmqvist enum AcpiDmarType
110508c9948cSFredrik Holmqvist {
110608c9948cSFredrik Holmqvist     ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
110708c9948cSFredrik Holmqvist     ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
110808c9948cSFredrik Holmqvist     ACPI_DMAR_TYPE_ROOT_ATS             = 2,
110908c9948cSFredrik Holmqvist     ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
111008c9948cSFredrik Holmqvist     ACPI_DMAR_TYPE_NAMESPACE            = 4,
111115338de9SPulkoMandy     ACPI_DMAR_TYPE_SATC                 = 5,
111215338de9SPulkoMandy     ACPI_DMAR_TYPE_RESERVED             = 6     /* 6 and greater are reserved */
111308c9948cSFredrik Holmqvist };
111408c9948cSFredrik Holmqvist 
111508c9948cSFredrik Holmqvist 
111608c9948cSFredrik Holmqvist /* DMAR Device Scope structure */
111708c9948cSFredrik Holmqvist 
111808c9948cSFredrik Holmqvist typedef struct acpi_dmar_device_scope
111908c9948cSFredrik Holmqvist {
112008c9948cSFredrik Holmqvist     UINT8                   EntryType;
112108c9948cSFredrik Holmqvist     UINT8                   Length;
112208c9948cSFredrik Holmqvist     UINT16                  Reserved;
112308c9948cSFredrik Holmqvist     UINT8                   EnumerationId;
112408c9948cSFredrik Holmqvist     UINT8                   Bus;
112508c9948cSFredrik Holmqvist 
112608c9948cSFredrik Holmqvist } ACPI_DMAR_DEVICE_SCOPE;
112708c9948cSFredrik Holmqvist 
112808c9948cSFredrik Holmqvist /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
112908c9948cSFredrik Holmqvist 
113008c9948cSFredrik Holmqvist enum AcpiDmarScopeType
113108c9948cSFredrik Holmqvist {
113208c9948cSFredrik Holmqvist     ACPI_DMAR_SCOPE_TYPE_NOT_USED       = 0,
113308c9948cSFredrik Holmqvist     ACPI_DMAR_SCOPE_TYPE_ENDPOINT       = 1,
113408c9948cSFredrik Holmqvist     ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
113508c9948cSFredrik Holmqvist     ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
113608c9948cSFredrik Holmqvist     ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
113708c9948cSFredrik Holmqvist     ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
113808c9948cSFredrik Holmqvist     ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
113908c9948cSFredrik Holmqvist };
114008c9948cSFredrik Holmqvist 
114108c9948cSFredrik Holmqvist typedef struct acpi_dmar_pci_path
114208c9948cSFredrik Holmqvist {
114308c9948cSFredrik Holmqvist     UINT8                   Device;
114408c9948cSFredrik Holmqvist     UINT8                   Function;
114508c9948cSFredrik Holmqvist 
114608c9948cSFredrik Holmqvist } ACPI_DMAR_PCI_PATH;
114708c9948cSFredrik Holmqvist 
114808c9948cSFredrik Holmqvist 
114908c9948cSFredrik Holmqvist /*
115008c9948cSFredrik Holmqvist  * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER
115108c9948cSFredrik Holmqvist  */
115208c9948cSFredrik Holmqvist 
115308c9948cSFredrik Holmqvist /* 0: Hardware Unit Definition */
115408c9948cSFredrik Holmqvist 
115508c9948cSFredrik Holmqvist typedef struct acpi_dmar_hardware_unit
115608c9948cSFredrik Holmqvist {
115708c9948cSFredrik Holmqvist     ACPI_DMAR_HEADER        Header;
115808c9948cSFredrik Holmqvist     UINT8                   Flags;
115908c9948cSFredrik Holmqvist     UINT8                   Reserved;
116008c9948cSFredrik Holmqvist     UINT16                  Segment;
116108c9948cSFredrik Holmqvist     UINT64                  Address;            /* Register Base Address */
116208c9948cSFredrik Holmqvist 
116308c9948cSFredrik Holmqvist } ACPI_DMAR_HARDWARE_UNIT;
116408c9948cSFredrik Holmqvist 
116508c9948cSFredrik Holmqvist /* Masks for Flags field above */
116608c9948cSFredrik Holmqvist 
116708c9948cSFredrik Holmqvist #define ACPI_DMAR_INCLUDE_ALL       (1)
116808c9948cSFredrik Holmqvist 
116908c9948cSFredrik Holmqvist 
11700ffed378SFredrik Holmqvist /* 1: Reserved Memory Definition */
117108c9948cSFredrik Holmqvist 
117208c9948cSFredrik Holmqvist typedef struct acpi_dmar_reserved_memory
117308c9948cSFredrik Holmqvist {
117408c9948cSFredrik Holmqvist     ACPI_DMAR_HEADER        Header;
117508c9948cSFredrik Holmqvist     UINT16                  Reserved;
117608c9948cSFredrik Holmqvist     UINT16                  Segment;
117708c9948cSFredrik Holmqvist     UINT64                  BaseAddress;        /* 4K aligned base address */
117808c9948cSFredrik Holmqvist     UINT64                  EndAddress;         /* 4K aligned limit address */
117908c9948cSFredrik Holmqvist 
118008c9948cSFredrik Holmqvist } ACPI_DMAR_RESERVED_MEMORY;
118108c9948cSFredrik Holmqvist 
118208c9948cSFredrik Holmqvist /* Masks for Flags field above */
118308c9948cSFredrik Holmqvist 
118408c9948cSFredrik Holmqvist #define ACPI_DMAR_ALLOW_ALL         (1)
118508c9948cSFredrik Holmqvist 
118608c9948cSFredrik Holmqvist 
118708c9948cSFredrik Holmqvist /* 2: Root Port ATS Capability Reporting Structure */
118808c9948cSFredrik Holmqvist 
118908c9948cSFredrik Holmqvist typedef struct acpi_dmar_atsr
119008c9948cSFredrik Holmqvist {
119108c9948cSFredrik Holmqvist     ACPI_DMAR_HEADER        Header;
119208c9948cSFredrik Holmqvist     UINT8                   Flags;
119308c9948cSFredrik Holmqvist     UINT8                   Reserved;
119408c9948cSFredrik Holmqvist     UINT16                  Segment;
119508c9948cSFredrik Holmqvist 
119608c9948cSFredrik Holmqvist } ACPI_DMAR_ATSR;
119708c9948cSFredrik Holmqvist 
119808c9948cSFredrik Holmqvist /* Masks for Flags field above */
119908c9948cSFredrik Holmqvist 
120008c9948cSFredrik Holmqvist #define ACPI_DMAR_ALL_PORTS         (1)
120108c9948cSFredrik Holmqvist 
120208c9948cSFredrik Holmqvist 
120308c9948cSFredrik Holmqvist /* 3: Remapping Hardware Static Affinity Structure */
120408c9948cSFredrik Holmqvist 
120508c9948cSFredrik Holmqvist typedef struct acpi_dmar_rhsa
120608c9948cSFredrik Holmqvist {
120708c9948cSFredrik Holmqvist     ACPI_DMAR_HEADER        Header;
120808c9948cSFredrik Holmqvist     UINT32                  Reserved;
120908c9948cSFredrik Holmqvist     UINT64                  BaseAddress;
121008c9948cSFredrik Holmqvist     UINT32                  ProximityDomain;
121108c9948cSFredrik Holmqvist 
121208c9948cSFredrik Holmqvist } ACPI_DMAR_RHSA;
121308c9948cSFredrik Holmqvist 
121408c9948cSFredrik Holmqvist 
121508c9948cSFredrik Holmqvist /* 4: ACPI Namespace Device Declaration Structure */
121608c9948cSFredrik Holmqvist 
121708c9948cSFredrik Holmqvist typedef struct acpi_dmar_andd
121808c9948cSFredrik Holmqvist {
121908c9948cSFredrik Holmqvist     ACPI_DMAR_HEADER        Header;
122008c9948cSFredrik Holmqvist     UINT8                   Reserved[3];
122108c9948cSFredrik Holmqvist     UINT8                   DeviceNumber;
122215338de9SPulkoMandy     union {
122315338de9SPulkoMandy         char                  __pad;
122415338de9SPulkoMandy         ACPI_FLEX_ARRAY(char, DeviceName);
122515338de9SPulkoMandy     };
122608c9948cSFredrik Holmqvist 
122708c9948cSFredrik Holmqvist } ACPI_DMAR_ANDD;
122808c9948cSFredrik Holmqvist 
122908c9948cSFredrik Holmqvist 
123015338de9SPulkoMandy /* 5: SoC Integrated Address Translation Cache (SATC)  */
123115338de9SPulkoMandy 
123215338de9SPulkoMandy typedef struct acpi_dmar_satc
123315338de9SPulkoMandy {
123415338de9SPulkoMandy     ACPI_DMAR_HEADER        Header;
123515338de9SPulkoMandy     UINT8                   Flags;
123615338de9SPulkoMandy     UINT8                   Reserved;
123715338de9SPulkoMandy     UINT16                  Segment;
123815338de9SPulkoMandy 
123915338de9SPulkoMandy } ACPI_DMAR_SATC
124015338de9SPulkoMandy 
124115338de9SPulkoMandy ;
124208c9948cSFredrik Holmqvist /*******************************************************************************
124308c9948cSFredrik Holmqvist  *
124408c9948cSFredrik Holmqvist  * DRTM - Dynamic Root of Trust for Measurement table
124508c9948cSFredrik Holmqvist  * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0
124608c9948cSFredrik Holmqvist  * Table version 1
124708c9948cSFredrik Holmqvist  *
124808c9948cSFredrik Holmqvist  ******************************************************************************/
124908c9948cSFredrik Holmqvist 
125008c9948cSFredrik Holmqvist typedef struct acpi_table_drtm
125108c9948cSFredrik Holmqvist {
125208c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
125308c9948cSFredrik Holmqvist     UINT64                  EntryBaseAddress;
125408c9948cSFredrik Holmqvist     UINT64                  EntryLength;
125508c9948cSFredrik Holmqvist     UINT32                  EntryAddress32;
125608c9948cSFredrik Holmqvist     UINT64                  EntryAddress64;
125708c9948cSFredrik Holmqvist     UINT64                  ExitAddress;
125808c9948cSFredrik Holmqvist     UINT64                  LogAreaAddress;
125908c9948cSFredrik Holmqvist     UINT32                  LogAreaLength;
126008c9948cSFredrik Holmqvist     UINT64                  ArchDependentAddress;
126108c9948cSFredrik Holmqvist     UINT32                  Flags;
126208c9948cSFredrik Holmqvist 
126308c9948cSFredrik Holmqvist } ACPI_TABLE_DRTM;
126408c9948cSFredrik Holmqvist 
126508c9948cSFredrik Holmqvist /* Flag Definitions for above */
126608c9948cSFredrik Holmqvist 
126708c9948cSFredrik Holmqvist #define ACPI_DRTM_ACCESS_ALLOWED            (1)
126808c9948cSFredrik Holmqvist #define ACPI_DRTM_ENABLE_GAP_CODE           (1<<1)
126908c9948cSFredrik Holmqvist #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS   (1<<2)
127008c9948cSFredrik Holmqvist #define ACPI_DRTM_AUTHORITY_ORDER           (1<<3)
127108c9948cSFredrik Holmqvist 
127208c9948cSFredrik Holmqvist 
127308c9948cSFredrik Holmqvist /* 1) Validated Tables List (64-bit addresses) */
127408c9948cSFredrik Holmqvist 
127508c9948cSFredrik Holmqvist typedef struct acpi_drtm_vtable_list
127608c9948cSFredrik Holmqvist {
127708c9948cSFredrik Holmqvist     UINT32                  ValidatedTableCount;
127815338de9SPulkoMandy     UINT64                  ValidatedTables[];
127908c9948cSFredrik Holmqvist 
128008c9948cSFredrik Holmqvist } ACPI_DRTM_VTABLE_LIST;
128108c9948cSFredrik Holmqvist 
128208c9948cSFredrik Holmqvist /* 2) Resources List (of Resource Descriptors) */
128308c9948cSFredrik Holmqvist 
128408c9948cSFredrik Holmqvist /* Resource Descriptor */
128508c9948cSFredrik Holmqvist 
128608c9948cSFredrik Holmqvist typedef struct acpi_drtm_resource
128708c9948cSFredrik Holmqvist {
128808c9948cSFredrik Holmqvist     UINT8                   Size[7];
128908c9948cSFredrik Holmqvist     UINT8                   Type;
129008c9948cSFredrik Holmqvist     UINT64                  Address;
129108c9948cSFredrik Holmqvist 
129208c9948cSFredrik Holmqvist } ACPI_DRTM_RESOURCE;
129308c9948cSFredrik Holmqvist 
129408c9948cSFredrik Holmqvist typedef struct acpi_drtm_resource_list
129508c9948cSFredrik Holmqvist {
129608c9948cSFredrik Holmqvist     UINT32                  ResourceCount;
129715338de9SPulkoMandy     ACPI_DRTM_RESOURCE      Resources[];
129808c9948cSFredrik Holmqvist 
129908c9948cSFredrik Holmqvist } ACPI_DRTM_RESOURCE_LIST;
130008c9948cSFredrik Holmqvist 
130108c9948cSFredrik Holmqvist /* 3) Platform-specific Identifiers List */
130208c9948cSFredrik Holmqvist 
130308c9948cSFredrik Holmqvist typedef struct acpi_drtm_dps_id
130408c9948cSFredrik Holmqvist {
130508c9948cSFredrik Holmqvist     UINT32                  DpsIdLength;
130608c9948cSFredrik Holmqvist     UINT8                   DpsId[16];
130708c9948cSFredrik Holmqvist 
130808c9948cSFredrik Holmqvist } ACPI_DRTM_DPS_ID;
130908c9948cSFredrik Holmqvist 
131008c9948cSFredrik Holmqvist 
131108c9948cSFredrik Holmqvist /*******************************************************************************
131208c9948cSFredrik Holmqvist  *
13130174267aSFredrik Holmqvist  * ECDT - Embedded Controller Boot Resources Table
13140174267aSFredrik Holmqvist  *        Version 1
13150174267aSFredrik Holmqvist  *
13160174267aSFredrik Holmqvist  ******************************************************************************/
13170174267aSFredrik Holmqvist 
13180174267aSFredrik Holmqvist typedef struct acpi_table_ecdt
13190174267aSFredrik Holmqvist {
13200174267aSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
13210174267aSFredrik Holmqvist     ACPI_GENERIC_ADDRESS    Control;            /* Address of EC command/status register */
13220174267aSFredrik Holmqvist     ACPI_GENERIC_ADDRESS    Data;               /* Address of EC data register */
13230174267aSFredrik Holmqvist     UINT32                  Uid;                /* Unique ID - must be same as the EC _UID method */
13240174267aSFredrik Holmqvist     UINT8                   Gpe;                /* The GPE for the EC */
132515338de9SPulkoMandy     UINT8                   Id[];               /* Full namepath of the EC in the ACPI namespace */
13260174267aSFredrik Holmqvist 
13270174267aSFredrik Holmqvist } ACPI_TABLE_ECDT;
13280174267aSFredrik Holmqvist 
13290174267aSFredrik Holmqvist 
13300174267aSFredrik Holmqvist /*******************************************************************************
13310174267aSFredrik Holmqvist  *
13320174267aSFredrik Holmqvist  * EINJ - Error Injection Table (ACPI 4.0)
13330174267aSFredrik Holmqvist  *        Version 1
13340174267aSFredrik Holmqvist  *
13350174267aSFredrik Holmqvist  ******************************************************************************/
13360174267aSFredrik Holmqvist 
13370174267aSFredrik Holmqvist typedef struct acpi_table_einj
13380174267aSFredrik Holmqvist {
13390174267aSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
13400174267aSFredrik Holmqvist     UINT32                  HeaderLength;
13410174267aSFredrik Holmqvist     UINT8                   Flags;
13420174267aSFredrik Holmqvist     UINT8                   Reserved[3];
13430174267aSFredrik Holmqvist     UINT32                  Entries;
13440174267aSFredrik Holmqvist 
13450174267aSFredrik Holmqvist } ACPI_TABLE_EINJ;
13460174267aSFredrik Holmqvist 
13470174267aSFredrik Holmqvist 
13480174267aSFredrik Holmqvist /* EINJ Injection Instruction Entries (actions) */
13490174267aSFredrik Holmqvist 
13500174267aSFredrik Holmqvist typedef struct acpi_einj_entry
13510174267aSFredrik Holmqvist {
13520174267aSFredrik Holmqvist     ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
13530174267aSFredrik Holmqvist 
13540174267aSFredrik Holmqvist } ACPI_EINJ_ENTRY;
13550174267aSFredrik Holmqvist 
13560174267aSFredrik Holmqvist /* Masks for Flags field above */
13570174267aSFredrik Holmqvist 
13580174267aSFredrik Holmqvist #define ACPI_EINJ_PRESERVE          (1)
13590174267aSFredrik Holmqvist 
13600174267aSFredrik Holmqvist /* Values for Action field above */
13610174267aSFredrik Holmqvist 
13620174267aSFredrik Holmqvist enum AcpiEinjActions
13630174267aSFredrik Holmqvist {
13640174267aSFredrik Holmqvist     ACPI_EINJ_BEGIN_OPERATION               = 0,
13650174267aSFredrik Holmqvist     ACPI_EINJ_GET_TRIGGER_TABLE             = 1,
13660174267aSFredrik Holmqvist     ACPI_EINJ_SET_ERROR_TYPE                = 2,
13670174267aSFredrik Holmqvist     ACPI_EINJ_GET_ERROR_TYPE                = 3,
13680174267aSFredrik Holmqvist     ACPI_EINJ_END_OPERATION                 = 4,
13690174267aSFredrik Holmqvist     ACPI_EINJ_EXECUTE_OPERATION             = 5,
13700174267aSFredrik Holmqvist     ACPI_EINJ_CHECK_BUSY_STATUS             = 6,
13710174267aSFredrik Holmqvist     ACPI_EINJ_GET_COMMAND_STATUS            = 7,
13726822cda0SFredrik Holmqvist     ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS   = 8,
137374ffd18dSFredrik Holmqvist     ACPI_EINJ_GET_EXECUTE_TIMINGS           = 9,
137474ffd18dSFredrik Holmqvist     ACPI_EINJ_ACTION_RESERVED               = 10,    /* 10 and greater are reserved */
13750174267aSFredrik Holmqvist     ACPI_EINJ_TRIGGER_ERROR                 = 0xFF   /* Except for this value */
13760174267aSFredrik Holmqvist };
13770174267aSFredrik Holmqvist 
13780174267aSFredrik Holmqvist /* Values for Instruction field above */
13790174267aSFredrik Holmqvist 
13800174267aSFredrik Holmqvist enum AcpiEinjInstructions
13810174267aSFredrik Holmqvist {
13820174267aSFredrik Holmqvist     ACPI_EINJ_READ_REGISTER         = 0,
13830174267aSFredrik Holmqvist     ACPI_EINJ_READ_REGISTER_VALUE   = 1,
13840174267aSFredrik Holmqvist     ACPI_EINJ_WRITE_REGISTER        = 2,
13850174267aSFredrik Holmqvist     ACPI_EINJ_WRITE_REGISTER_VALUE  = 3,
13860174267aSFredrik Holmqvist     ACPI_EINJ_NOOP                  = 4,
13876822cda0SFredrik Holmqvist     ACPI_EINJ_FLUSH_CACHELINE       = 5,
13886822cda0SFredrik Holmqvist     ACPI_EINJ_INSTRUCTION_RESERVED  = 6     /* 6 and greater are reserved */
13890174267aSFredrik Holmqvist };
13900174267aSFredrik Holmqvist 
13916822cda0SFredrik Holmqvist typedef struct acpi_einj_error_type_with_addr
13926822cda0SFredrik Holmqvist {
13936822cda0SFredrik Holmqvist     UINT32                  ErrorType;
13946822cda0SFredrik Holmqvist     UINT32                  VendorStructOffset;
13956822cda0SFredrik Holmqvist     UINT32                  Flags;
13966822cda0SFredrik Holmqvist     UINT32                  ApicId;
13976822cda0SFredrik Holmqvist     UINT64                  Address;
13986822cda0SFredrik Holmqvist     UINT64                  Range;
13996822cda0SFredrik Holmqvist     UINT32                  PcieId;
14006822cda0SFredrik Holmqvist 
14016822cda0SFredrik Holmqvist } ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
14026822cda0SFredrik Holmqvist 
14036822cda0SFredrik Holmqvist typedef struct acpi_einj_vendor
14046822cda0SFredrik Holmqvist {
14056822cda0SFredrik Holmqvist     UINT32                  Length;
14066822cda0SFredrik Holmqvist     UINT32                  PcieId;
14076822cda0SFredrik Holmqvist     UINT16                  VendorId;
14086822cda0SFredrik Holmqvist     UINT16                  DeviceId;
14096822cda0SFredrik Holmqvist     UINT8                   RevisionId;
14106822cda0SFredrik Holmqvist     UINT8                   Reserved[3];
14116822cda0SFredrik Holmqvist 
14126822cda0SFredrik Holmqvist } ACPI_EINJ_VENDOR;
14136822cda0SFredrik Holmqvist 
14140174267aSFredrik Holmqvist 
14150174267aSFredrik Holmqvist /* EINJ Trigger Error Action Table */
14160174267aSFredrik Holmqvist 
14170174267aSFredrik Holmqvist typedef struct acpi_einj_trigger
14180174267aSFredrik Holmqvist {
14190174267aSFredrik Holmqvist     UINT32                  HeaderSize;
14200174267aSFredrik Holmqvist     UINT32                  Revision;
14210174267aSFredrik Holmqvist     UINT32                  TableSize;
14220174267aSFredrik Holmqvist     UINT32                  EntryCount;
14230174267aSFredrik Holmqvist 
14240174267aSFredrik Holmqvist } ACPI_EINJ_TRIGGER;
14250174267aSFredrik Holmqvist 
14260174267aSFredrik Holmqvist /* Command status return values */
14270174267aSFredrik Holmqvist 
14280174267aSFredrik Holmqvist enum AcpiEinjCommandStatus
14290174267aSFredrik Holmqvist {
14300174267aSFredrik Holmqvist     ACPI_EINJ_SUCCESS               = 0,
14310174267aSFredrik Holmqvist     ACPI_EINJ_FAILURE               = 1,
14320174267aSFredrik Holmqvist     ACPI_EINJ_INVALID_ACCESS        = 2,
14330174267aSFredrik Holmqvist     ACPI_EINJ_STATUS_RESERVED       = 3     /* 3 and greater are reserved */
14340174267aSFredrik Holmqvist };
14350174267aSFredrik Holmqvist 
14360174267aSFredrik Holmqvist 
14370174267aSFredrik Holmqvist /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
14380174267aSFredrik Holmqvist 
14390174267aSFredrik Holmqvist #define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
14400174267aSFredrik Holmqvist #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
14410174267aSFredrik Holmqvist #define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
14420174267aSFredrik Holmqvist #define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
14430174267aSFredrik Holmqvist #define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
14440174267aSFredrik Holmqvist #define ACPI_EINJ_MEMORY_FATAL              (1<<5)
14450174267aSFredrik Holmqvist #define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
14460174267aSFredrik Holmqvist #define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
14470174267aSFredrik Holmqvist #define ACPI_EINJ_PCIX_FATAL                (1<<8)
14480174267aSFredrik Holmqvist #define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
14490174267aSFredrik Holmqvist #define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
14500174267aSFredrik Holmqvist #define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
1451*6dde014fSPulkoMandy #define ACPI_EINJ_CXL_CACHE_CORRECTABLE     (1<<12)
1452*6dde014fSPulkoMandy #define ACPI_EINJ_CXL_CACHE_UNCORRECTABLE   (1<<13)
1453*6dde014fSPulkoMandy #define ACPI_EINJ_CXL_CACHE_FATAL           (1<<14)
1454*6dde014fSPulkoMandy #define ACPI_EINJ_CXL_MEM_CORRECTABLE       (1<<15)
1455*6dde014fSPulkoMandy #define ACPI_EINJ_CXL_MEM_UNCORRECTABLE     (1<<16)
1456*6dde014fSPulkoMandy #define ACPI_EINJ_CXL_MEM_FATAL             (1<<17)
14576822cda0SFredrik Holmqvist #define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
14580174267aSFredrik Holmqvist 
14590174267aSFredrik Holmqvist 
14600174267aSFredrik Holmqvist /*******************************************************************************
14610174267aSFredrik Holmqvist  *
14620174267aSFredrik Holmqvist  * ERST - Error Record Serialization Table (ACPI 4.0)
14630174267aSFredrik Holmqvist  *        Version 1
14640174267aSFredrik Holmqvist  *
14650174267aSFredrik Holmqvist  ******************************************************************************/
14660174267aSFredrik Holmqvist 
14670174267aSFredrik Holmqvist typedef struct acpi_table_erst
14680174267aSFredrik Holmqvist {
14690174267aSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
14700174267aSFredrik Holmqvist     UINT32                  HeaderLength;
14710174267aSFredrik Holmqvist     UINT32                  Reserved;
14720174267aSFredrik Holmqvist     UINT32                  Entries;
14730174267aSFredrik Holmqvist 
14740174267aSFredrik Holmqvist } ACPI_TABLE_ERST;
14750174267aSFredrik Holmqvist 
14760174267aSFredrik Holmqvist 
14770174267aSFredrik Holmqvist /* ERST Serialization Entries (actions) */
14780174267aSFredrik Holmqvist 
14790174267aSFredrik Holmqvist typedef struct acpi_erst_entry
14800174267aSFredrik Holmqvist {
14810174267aSFredrik Holmqvist     ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
14820174267aSFredrik Holmqvist 
14830174267aSFredrik Holmqvist } ACPI_ERST_ENTRY;
14840174267aSFredrik Holmqvist 
14850174267aSFredrik Holmqvist /* Masks for Flags field above */
14860174267aSFredrik Holmqvist 
14870174267aSFredrik Holmqvist #define ACPI_ERST_PRESERVE          (1)
14880174267aSFredrik Holmqvist 
14890174267aSFredrik Holmqvist /* Values for Action field above */
14900174267aSFredrik Holmqvist 
14910174267aSFredrik Holmqvist enum AcpiErstActions
14920174267aSFredrik Holmqvist {
14930174267aSFredrik Holmqvist     ACPI_ERST_BEGIN_WRITE           = 0,
14940174267aSFredrik Holmqvist     ACPI_ERST_BEGIN_READ            = 1,
14950174267aSFredrik Holmqvist     ACPI_ERST_BEGIN_CLEAR           = 2,
14960174267aSFredrik Holmqvist     ACPI_ERST_END                   = 3,
14970174267aSFredrik Holmqvist     ACPI_ERST_SET_RECORD_OFFSET     = 4,
14980174267aSFredrik Holmqvist     ACPI_ERST_EXECUTE_OPERATION     = 5,
14990174267aSFredrik Holmqvist     ACPI_ERST_CHECK_BUSY_STATUS     = 6,
15000174267aSFredrik Holmqvist     ACPI_ERST_GET_COMMAND_STATUS    = 7,
15010174267aSFredrik Holmqvist     ACPI_ERST_GET_RECORD_ID         = 8,
15020174267aSFredrik Holmqvist     ACPI_ERST_SET_RECORD_ID         = 9,
15030174267aSFredrik Holmqvist     ACPI_ERST_GET_RECORD_COUNT      = 10,
15040174267aSFredrik Holmqvist     ACPI_ERST_BEGIN_DUMMY_WRIITE    = 11,
15050174267aSFredrik Holmqvist     ACPI_ERST_NOT_USED              = 12,
15060174267aSFredrik Holmqvist     ACPI_ERST_GET_ERROR_RANGE       = 13,
15070174267aSFredrik Holmqvist     ACPI_ERST_GET_ERROR_LENGTH      = 14,
15080174267aSFredrik Holmqvist     ACPI_ERST_GET_ERROR_ATTRIBUTES  = 15,
150974ffd18dSFredrik Holmqvist     ACPI_ERST_EXECUTE_TIMINGS       = 16,
151074ffd18dSFredrik Holmqvist     ACPI_ERST_ACTION_RESERVED       = 17    /* 17 and greater are reserved */
15110174267aSFredrik Holmqvist };
15120174267aSFredrik Holmqvist 
15130174267aSFredrik Holmqvist /* Values for Instruction field above */
15140174267aSFredrik Holmqvist 
15150174267aSFredrik Holmqvist enum AcpiErstInstructions
15160174267aSFredrik Holmqvist {
15170174267aSFredrik Holmqvist     ACPI_ERST_READ_REGISTER         = 0,
15180174267aSFredrik Holmqvist     ACPI_ERST_READ_REGISTER_VALUE   = 1,
15190174267aSFredrik Holmqvist     ACPI_ERST_WRITE_REGISTER        = 2,
15200174267aSFredrik Holmqvist     ACPI_ERST_WRITE_REGISTER_VALUE  = 3,
15210174267aSFredrik Holmqvist     ACPI_ERST_NOOP                  = 4,
15220174267aSFredrik Holmqvist     ACPI_ERST_LOAD_VAR1             = 5,
15230174267aSFredrik Holmqvist     ACPI_ERST_LOAD_VAR2             = 6,
15240174267aSFredrik Holmqvist     ACPI_ERST_STORE_VAR1            = 7,
15250174267aSFredrik Holmqvist     ACPI_ERST_ADD                   = 8,
15260174267aSFredrik Holmqvist     ACPI_ERST_SUBTRACT              = 9,
15270174267aSFredrik Holmqvist     ACPI_ERST_ADD_VALUE             = 10,
15280174267aSFredrik Holmqvist     ACPI_ERST_SUBTRACT_VALUE        = 11,
15290174267aSFredrik Holmqvist     ACPI_ERST_STALL                 = 12,
15300174267aSFredrik Holmqvist     ACPI_ERST_STALL_WHILE_TRUE      = 13,
15310174267aSFredrik Holmqvist     ACPI_ERST_SKIP_NEXT_IF_TRUE     = 14,
15320174267aSFredrik Holmqvist     ACPI_ERST_GOTO                  = 15,
15330174267aSFredrik Holmqvist     ACPI_ERST_SET_SRC_ADDRESS_BASE  = 16,
15340174267aSFredrik Holmqvist     ACPI_ERST_SET_DST_ADDRESS_BASE  = 17,
15350174267aSFredrik Holmqvist     ACPI_ERST_MOVE_DATA             = 18,
15360174267aSFredrik Holmqvist     ACPI_ERST_INSTRUCTION_RESERVED  = 19    /* 19 and greater are reserved */
15370174267aSFredrik Holmqvist };
15380174267aSFredrik Holmqvist 
15390174267aSFredrik Holmqvist /* Command status return values */
15400174267aSFredrik Holmqvist 
15410174267aSFredrik Holmqvist enum AcpiErstCommandStatus
15420174267aSFredrik Holmqvist {
15430ffed378SFredrik Holmqvist     ACPI_ERST_SUCCESS                = 0,
15440174267aSFredrik Holmqvist     ACPI_ERST_NO_SPACE              = 1,
15450174267aSFredrik Holmqvist     ACPI_ERST_NOT_AVAILABLE         = 2,
15460174267aSFredrik Holmqvist     ACPI_ERST_FAILURE               = 3,
15470174267aSFredrik Holmqvist     ACPI_ERST_RECORD_EMPTY          = 4,
15480174267aSFredrik Holmqvist     ACPI_ERST_NOT_FOUND             = 5,
15490174267aSFredrik Holmqvist     ACPI_ERST_STATUS_RESERVED       = 6     /* 6 and greater are reserved */
15500174267aSFredrik Holmqvist };
15510174267aSFredrik Holmqvist 
15520174267aSFredrik Holmqvist 
15530174267aSFredrik Holmqvist /* Error Record Serialization Information */
15540174267aSFredrik Holmqvist 
15550174267aSFredrik Holmqvist typedef struct acpi_erst_info
15560174267aSFredrik Holmqvist {
15570174267aSFredrik Holmqvist     UINT16                  Signature;          /* Should be "ER" */
15580174267aSFredrik Holmqvist     UINT8                   Data[48];
15590174267aSFredrik Holmqvist 
15600174267aSFredrik Holmqvist } ACPI_ERST_INFO;
15610174267aSFredrik Holmqvist 
15620174267aSFredrik Holmqvist 
15630174267aSFredrik Holmqvist /*******************************************************************************
15640174267aSFredrik Holmqvist  *
156508c9948cSFredrik Holmqvist  * FPDT - Firmware Performance Data Table (ACPI 5.0)
156608c9948cSFredrik Holmqvist  *        Version 1
156708c9948cSFredrik Holmqvist  *
156808c9948cSFredrik Holmqvist  ******************************************************************************/
156908c9948cSFredrik Holmqvist 
157008c9948cSFredrik Holmqvist typedef struct acpi_table_fpdt
157108c9948cSFredrik Holmqvist {
157208c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
157308c9948cSFredrik Holmqvist 
157408c9948cSFredrik Holmqvist } ACPI_TABLE_FPDT;
157508c9948cSFredrik Holmqvist 
157608c9948cSFredrik Holmqvist 
157708c9948cSFredrik Holmqvist /* FPDT subtable header (Performance Record Structure) */
157808c9948cSFredrik Holmqvist 
157908c9948cSFredrik Holmqvist typedef struct acpi_fpdt_header
158008c9948cSFredrik Holmqvist {
158108c9948cSFredrik Holmqvist     UINT16                  Type;
158208c9948cSFredrik Holmqvist     UINT8                   Length;
158308c9948cSFredrik Holmqvist     UINT8                   Revision;
158408c9948cSFredrik Holmqvist 
158508c9948cSFredrik Holmqvist } ACPI_FPDT_HEADER;
158608c9948cSFredrik Holmqvist 
158708c9948cSFredrik Holmqvist /* Values for Type field above */
158808c9948cSFredrik Holmqvist 
158908c9948cSFredrik Holmqvist enum AcpiFpdtType
159008c9948cSFredrik Holmqvist {
159108c9948cSFredrik Holmqvist     ACPI_FPDT_TYPE_BOOT                 = 0,
159208c9948cSFredrik Holmqvist     ACPI_FPDT_TYPE_S3PERF               = 1
159308c9948cSFredrik Holmqvist };
159408c9948cSFredrik Holmqvist 
159508c9948cSFredrik Holmqvist 
159608c9948cSFredrik Holmqvist /*
159708c9948cSFredrik Holmqvist  * FPDT subtables
159808c9948cSFredrik Holmqvist  */
159908c9948cSFredrik Holmqvist 
160008c9948cSFredrik Holmqvist /* 0: Firmware Basic Boot Performance Record */
160108c9948cSFredrik Holmqvist 
160208c9948cSFredrik Holmqvist typedef struct acpi_fpdt_boot_pointer
160308c9948cSFredrik Holmqvist {
160408c9948cSFredrik Holmqvist     ACPI_FPDT_HEADER        Header;
160508c9948cSFredrik Holmqvist     UINT8                   Reserved[4];
160608c9948cSFredrik Holmqvist     UINT64                  Address;
160708c9948cSFredrik Holmqvist 
160808c9948cSFredrik Holmqvist } ACPI_FPDT_BOOT_POINTER;
160908c9948cSFredrik Holmqvist 
161008c9948cSFredrik Holmqvist 
161108c9948cSFredrik Holmqvist /* 1: S3 Performance Table Pointer Record */
161208c9948cSFredrik Holmqvist 
161308c9948cSFredrik Holmqvist typedef struct acpi_fpdt_s3pt_pointer
161408c9948cSFredrik Holmqvist {
161508c9948cSFredrik Holmqvist     ACPI_FPDT_HEADER        Header;
161608c9948cSFredrik Holmqvist     UINT8                   Reserved[4];
161708c9948cSFredrik Holmqvist     UINT64                  Address;
161808c9948cSFredrik Holmqvist 
161908c9948cSFredrik Holmqvist } ACPI_FPDT_S3PT_POINTER;
162008c9948cSFredrik Holmqvist 
162108c9948cSFredrik Holmqvist 
162208c9948cSFredrik Holmqvist /*
162308c9948cSFredrik Holmqvist  * S3PT - S3 Performance Table. This table is pointed to by the
162408c9948cSFredrik Holmqvist  * S3 Pointer Record above.
162508c9948cSFredrik Holmqvist  */
162608c9948cSFredrik Holmqvist typedef struct acpi_table_s3pt
162708c9948cSFredrik Holmqvist {
162808c9948cSFredrik Holmqvist     UINT8                   Signature[4]; /* "S3PT" */
162908c9948cSFredrik Holmqvist     UINT32                  Length;
163008c9948cSFredrik Holmqvist 
163108c9948cSFredrik Holmqvist } ACPI_TABLE_S3PT;
163208c9948cSFredrik Holmqvist 
163308c9948cSFredrik Holmqvist 
163408c9948cSFredrik Holmqvist /*
163508c9948cSFredrik Holmqvist  * S3PT Subtables (Not part of the actual FPDT)
163608c9948cSFredrik Holmqvist  */
163708c9948cSFredrik Holmqvist 
163808c9948cSFredrik Holmqvist /* Values for Type field in S3PT header */
163908c9948cSFredrik Holmqvist 
164008c9948cSFredrik Holmqvist enum AcpiS3ptType
164108c9948cSFredrik Holmqvist {
164208c9948cSFredrik Holmqvist     ACPI_S3PT_TYPE_RESUME               = 0,
164308c9948cSFredrik Holmqvist     ACPI_S3PT_TYPE_SUSPEND              = 1,
164408c9948cSFredrik Holmqvist     ACPI_FPDT_BOOT_PERFORMANCE          = 2
164508c9948cSFredrik Holmqvist };
164608c9948cSFredrik Holmqvist 
164708c9948cSFredrik Holmqvist typedef struct acpi_s3pt_resume
164808c9948cSFredrik Holmqvist {
164908c9948cSFredrik Holmqvist     ACPI_FPDT_HEADER        Header;
165008c9948cSFredrik Holmqvist     UINT32                  ResumeCount;
165108c9948cSFredrik Holmqvist     UINT64                  FullResume;
165208c9948cSFredrik Holmqvist     UINT64                  AverageResume;
165308c9948cSFredrik Holmqvist 
165408c9948cSFredrik Holmqvist } ACPI_S3PT_RESUME;
165508c9948cSFredrik Holmqvist 
165608c9948cSFredrik Holmqvist typedef struct acpi_s3pt_suspend
165708c9948cSFredrik Holmqvist {
165808c9948cSFredrik Holmqvist     ACPI_FPDT_HEADER        Header;
165908c9948cSFredrik Holmqvist     UINT64                  SuspendStart;
166008c9948cSFredrik Holmqvist     UINT64                  SuspendEnd;
166108c9948cSFredrik Holmqvist 
166208c9948cSFredrik Holmqvist } ACPI_S3PT_SUSPEND;
166308c9948cSFredrik Holmqvist 
166408c9948cSFredrik Holmqvist 
166508c9948cSFredrik Holmqvist /*
166608c9948cSFredrik Holmqvist  * FPDT Boot Performance Record (Not part of the actual FPDT)
166708c9948cSFredrik Holmqvist  */
166808c9948cSFredrik Holmqvist typedef struct acpi_fpdt_boot
166908c9948cSFredrik Holmqvist {
167008c9948cSFredrik Holmqvist     ACPI_FPDT_HEADER        Header;
167108c9948cSFredrik Holmqvist     UINT8                   Reserved[4];
167208c9948cSFredrik Holmqvist     UINT64                  ResetEnd;
167308c9948cSFredrik Holmqvist     UINT64                  LoadStart;
167408c9948cSFredrik Holmqvist     UINT64                  StartupStart;
167508c9948cSFredrik Holmqvist     UINT64                  ExitServicesEntry;
167608c9948cSFredrik Holmqvist     UINT64                  ExitServicesExit;
167708c9948cSFredrik Holmqvist 
167808c9948cSFredrik Holmqvist } ACPI_FPDT_BOOT;
167908c9948cSFredrik Holmqvist 
168008c9948cSFredrik Holmqvist 
168108c9948cSFredrik Holmqvist /*******************************************************************************
168208c9948cSFredrik Holmqvist  *
168308c9948cSFredrik Holmqvist  * GTDT - Generic Timer Description Table (ACPI 5.1)
168408c9948cSFredrik Holmqvist  *        Version 2
168508c9948cSFredrik Holmqvist  *
168608c9948cSFredrik Holmqvist  ******************************************************************************/
168708c9948cSFredrik Holmqvist 
168808c9948cSFredrik Holmqvist typedef struct acpi_table_gtdt
168908c9948cSFredrik Holmqvist {
169008c9948cSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
169108c9948cSFredrik Holmqvist     UINT64                  CounterBlockAddresss;
169208c9948cSFredrik Holmqvist     UINT32                  Reserved;
169308c9948cSFredrik Holmqvist     UINT32                  SecureEl1Interrupt;
169408c9948cSFredrik Holmqvist     UINT32                  SecureEl1Flags;
169508c9948cSFredrik Holmqvist     UINT32                  NonSecureEl1Interrupt;
169608c9948cSFredrik Holmqvist     UINT32                  NonSecureEl1Flags;
169708c9948cSFredrik Holmqvist     UINT32                  VirtualTimerInterrupt;
169808c9948cSFredrik Holmqvist     UINT32                  VirtualTimerFlags;
169908c9948cSFredrik Holmqvist     UINT32                  NonSecureEl2Interrupt;
170008c9948cSFredrik Holmqvist     UINT32                  NonSecureEl2Flags;
170108c9948cSFredrik Holmqvist     UINT64                  CounterReadBlockAddress;
170208c9948cSFredrik Holmqvist     UINT32                  PlatformTimerCount;
170308c9948cSFredrik Holmqvist     UINT32                  PlatformTimerOffset;
170408c9948cSFredrik Holmqvist 
170508c9948cSFredrik Holmqvist } ACPI_TABLE_GTDT;
170608c9948cSFredrik Holmqvist 
170708c9948cSFredrik Holmqvist /* Flag Definitions: Timer Block Physical Timers and Virtual timers */
170808c9948cSFredrik Holmqvist 
170908c9948cSFredrik Holmqvist #define ACPI_GTDT_INTERRUPT_MODE        (1)
171008c9948cSFredrik Holmqvist #define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
171108c9948cSFredrik Holmqvist #define ACPI_GTDT_ALWAYS_ON             (1<<2)
171208c9948cSFredrik Holmqvist 
17130ffed378SFredrik Holmqvist typedef struct acpi_gtdt_el2
17140ffed378SFredrik Holmqvist {
17150ffed378SFredrik Holmqvist     UINT32                  VirtualEL2TimerGsiv;
17160ffed378SFredrik Holmqvist     UINT32                  VirtualEL2TimerFlags;
17170ffed378SFredrik Holmqvist } ACPI_GTDT_EL2;
17180ffed378SFredrik Holmqvist 
171908c9948cSFredrik Holmqvist 
172008c9948cSFredrik Holmqvist /* Common GTDT subtable header */
172108c9948cSFredrik Holmqvist 
172208c9948cSFredrik Holmqvist typedef struct acpi_gtdt_header
172308c9948cSFredrik Holmqvist {
172408c9948cSFredrik Holmqvist     UINT8                   Type;
172508c9948cSFredrik Holmqvist     UINT16                  Length;
172608c9948cSFredrik Holmqvist 
172708c9948cSFredrik Holmqvist } ACPI_GTDT_HEADER;
172808c9948cSFredrik Holmqvist 
172908c9948cSFredrik Holmqvist /* Values for GTDT subtable type above */
173008c9948cSFredrik Holmqvist 
173108c9948cSFredrik Holmqvist enum AcpiGtdtType
173208c9948cSFredrik Holmqvist {
173308c9948cSFredrik Holmqvist     ACPI_GTDT_TYPE_TIMER_BLOCK      = 0,
173408c9948cSFredrik Holmqvist     ACPI_GTDT_TYPE_WATCHDOG         = 1,
173508c9948cSFredrik Holmqvist     ACPI_GTDT_TYPE_RESERVED         = 2    /* 2 and greater are reserved */
173608c9948cSFredrik Holmqvist };
173708c9948cSFredrik Holmqvist 
173808c9948cSFredrik Holmqvist 
173908c9948cSFredrik Holmqvist /* GTDT Subtables, correspond to Type in acpi_gtdt_header */
174008c9948cSFredrik Holmqvist 
174108c9948cSFredrik Holmqvist /* 0: Generic Timer Block */
174208c9948cSFredrik Holmqvist 
174308c9948cSFredrik Holmqvist typedef struct acpi_gtdt_timer_block
174408c9948cSFredrik Holmqvist {
174508c9948cSFredrik Holmqvist     ACPI_GTDT_HEADER        Header;
174608c9948cSFredrik Holmqvist     UINT8                   Reserved;
174708c9948cSFredrik Holmqvist     UINT64                  BlockAddress;
174808c9948cSFredrik Holmqvist     UINT32                  TimerCount;
174908c9948cSFredrik Holmqvist     UINT32                  TimerOffset;
175008c9948cSFredrik Holmqvist 
175108c9948cSFredrik Holmqvist } ACPI_GTDT_TIMER_BLOCK;
175208c9948cSFredrik Holmqvist 
175308c9948cSFredrik Holmqvist /* Timer Sub-Structure, one per timer */
175408c9948cSFredrik Holmqvist 
175508c9948cSFredrik Holmqvist typedef struct acpi_gtdt_timer_entry
175608c9948cSFredrik Holmqvist {
175708c9948cSFredrik Holmqvist     UINT8                   FrameNumber;
175808c9948cSFredrik Holmqvist     UINT8                   Reserved[3];
175908c9948cSFredrik Holmqvist     UINT64                  BaseAddress;
176008c9948cSFredrik Holmqvist     UINT64                  El0BaseAddress;
176108c9948cSFredrik Holmqvist     UINT32                  TimerInterrupt;
176208c9948cSFredrik Holmqvist     UINT32                  TimerFlags;
176308c9948cSFredrik Holmqvist     UINT32                  VirtualTimerInterrupt;
176408c9948cSFredrik Holmqvist     UINT32                  VirtualTimerFlags;
176508c9948cSFredrik Holmqvist     UINT32                  CommonFlags;
176608c9948cSFredrik Holmqvist 
176708c9948cSFredrik Holmqvist } ACPI_GTDT_TIMER_ENTRY;
176808c9948cSFredrik Holmqvist 
176908c9948cSFredrik Holmqvist /* Flag Definitions: TimerFlags and VirtualTimerFlags above */
177008c9948cSFredrik Holmqvist 
177108c9948cSFredrik Holmqvist #define ACPI_GTDT_GT_IRQ_MODE               (1)
177208c9948cSFredrik Holmqvist #define ACPI_GTDT_GT_IRQ_POLARITY           (1<<1)
177308c9948cSFredrik Holmqvist 
177408c9948cSFredrik Holmqvist /* Flag Definitions: CommonFlags above */
177508c9948cSFredrik Holmqvist 
177608c9948cSFredrik Holmqvist #define ACPI_GTDT_GT_IS_SECURE_TIMER        (1)
177708c9948cSFredrik Holmqvist #define ACPI_GTDT_GT_ALWAYS_ON              (1<<1)
177808c9948cSFredrik Holmqvist 
177908c9948cSFredrik Holmqvist 
178008c9948cSFredrik Holmqvist /* 1: SBSA Generic Watchdog Structure */
178108c9948cSFredrik Holmqvist 
178208c9948cSFredrik Holmqvist typedef struct acpi_gtdt_watchdog
178308c9948cSFredrik Holmqvist {
178408c9948cSFredrik Holmqvist     ACPI_GTDT_HEADER        Header;
178508c9948cSFredrik Holmqvist     UINT8                   Reserved;
178608c9948cSFredrik Holmqvist     UINT64                  RefreshFrameAddress;
178708c9948cSFredrik Holmqvist     UINT64                  ControlFrameAddress;
178808c9948cSFredrik Holmqvist     UINT32                  TimerInterrupt;
178908c9948cSFredrik Holmqvist     UINT32                  TimerFlags;
179008c9948cSFredrik Holmqvist 
179108c9948cSFredrik Holmqvist } ACPI_GTDT_WATCHDOG;
179208c9948cSFredrik Holmqvist 
179308c9948cSFredrik Holmqvist /* Flag Definitions: TimerFlags above */
179408c9948cSFredrik Holmqvist 
179508c9948cSFredrik Holmqvist #define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
179608c9948cSFredrik Holmqvist #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
179708c9948cSFredrik Holmqvist #define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
179808c9948cSFredrik Holmqvist 
179908c9948cSFredrik Holmqvist 
180008c9948cSFredrik Holmqvist /*******************************************************************************
180108c9948cSFredrik Holmqvist  *
18020174267aSFredrik Holmqvist  * HEST - Hardware Error Source Table (ACPI 4.0)
18030174267aSFredrik Holmqvist  *        Version 1
18040174267aSFredrik Holmqvist  *
18050174267aSFredrik Holmqvist  ******************************************************************************/
18060174267aSFredrik Holmqvist 
18070174267aSFredrik Holmqvist typedef struct acpi_table_hest
18080174267aSFredrik Holmqvist {
18090174267aSFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
18100174267aSFredrik Holmqvist     UINT32                  ErrorSourceCount;
18110174267aSFredrik Holmqvist 
18120174267aSFredrik Holmqvist } ACPI_TABLE_HEST;
18130174267aSFredrik Holmqvist 
18140174267aSFredrik Holmqvist 
18150174267aSFredrik Holmqvist /* HEST subtable header */
18160174267aSFredrik Holmqvist 
18170174267aSFredrik Holmqvist typedef struct acpi_hest_header
18180174267aSFredrik Holmqvist {
18190174267aSFredrik Holmqvist     UINT16                  Type;
18200174267aSFredrik Holmqvist     UINT16                  SourceId;
18210174267aSFredrik Holmqvist 
18220174267aSFredrik Holmqvist } ACPI_HEST_HEADER;
18230174267aSFredrik Holmqvist 
18240174267aSFredrik Holmqvist 
18250174267aSFredrik Holmqvist /* Values for Type field above for subtables */
18260174267aSFredrik Holmqvist 
18270174267aSFredrik Holmqvist enum AcpiHestTypes
18280174267aSFredrik Holmqvist {
18290174267aSFredrik Holmqvist     ACPI_HEST_TYPE_IA32_CHECK           = 0,
18300174267aSFredrik Holmqvist     ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
18310174267aSFredrik Holmqvist     ACPI_HEST_TYPE_IA32_NMI             = 2,
18320174267aSFredrik Holmqvist     ACPI_HEST_TYPE_NOT_USED3            = 3,
18330174267aSFredrik Holmqvist     ACPI_HEST_TYPE_NOT_USED4            = 4,
18340174267aSFredrik Holmqvist     ACPI_HEST_TYPE_NOT_USED5            = 5,
18350174267aSFredrik Holmqvist     ACPI_HEST_TYPE_AER_ROOT_PORT        = 6,
18360174267aSFredrik Holmqvist     ACPI_HEST_TYPE_AER_ENDPOINT         = 7,
18370174267aSFredrik Holmqvist     ACPI_HEST_TYPE_AER_BRIDGE           = 8,
18380174267aSFredrik Holmqvist     ACPI_HEST_TYPE_GENERIC_ERROR        = 9,
183974ffd18dSFredrik Holmqvist     ACPI_HEST_TYPE_GENERIC_ERROR_V2     = 10,
1840ff2e2f81SFredrik Holmqvist     ACPI_HEST_TYPE_IA32_DEFERRED_CHECK  = 11,
1841ff2e2f81SFredrik Holmqvist     ACPI_HEST_TYPE_RESERVED             = 12    /* 12 and greater are reserved */
18420174267aSFredrik Holmqvist };
18430174267aSFredrik Holmqvist 
18440174267aSFredrik Holmqvist 
18450174267aSFredrik Holmqvist /*
18460174267aSFredrik Holmqvist  * HEST substructures contained in subtables
18470174267aSFredrik Holmqvist  */
18480174267aSFredrik Holmqvist 
18490174267aSFredrik Holmqvist /*
18500174267aSFredrik Holmqvist  * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
18510174267aSFredrik Holmqvist  * ACPI_HEST_IA_CORRECTED structures.
18520174267aSFredrik Holmqvist  */
18530174267aSFredrik Holmqvist typedef struct acpi_hest_ia_error_bank
18540174267aSFredrik Holmqvist {
18550174267aSFredrik Holmqvist     UINT8                   BankNumber;
18560174267aSFredrik Holmqvist     UINT8                   ClearStatusOnInit;
18570174267aSFredrik Holmqvist     UINT8                   StatusFormat;
18580174267aSFredrik Holmqvist     UINT8                   Reserved;
18590174267aSFredrik Holmqvist     UINT32                  ControlRegister;
18600174267aSFredrik Holmqvist     UINT64                  ControlData;
18610174267aSFredrik Holmqvist     UINT32                  StatusRegister;
18620174267aSFredrik Holmqvist     UINT32                  AddressRegister;
18630174267aSFredrik Holmqvist     UINT32                  MiscRegister;
18640174267aSFredrik Holmqvist 
18650174267aSFredrik Holmqvist } ACPI_HEST_IA_ERROR_BANK;
18660174267aSFredrik Holmqvist 
18670174267aSFredrik Holmqvist 
18680174267aSFredrik Holmqvist /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
18690174267aSFredrik Holmqvist 
18700174267aSFredrik Holmqvist typedef struct acpi_hest_aer_common
18710174267aSFredrik Holmqvist {
18720174267aSFredrik Holmqvist     UINT16                  Reserved1;
18730174267aSFredrik Holmqvist     UINT8                   Flags;
18740174267aSFredrik Holmqvist     UINT8                   Enabled;
18750174267aSFredrik Holmqvist     UINT32                  RecordsToPreallocate;
18760174267aSFredrik Holmqvist     UINT32                  MaxSectionsPerRecord;
1877ad5bbfb8SFredrik Holmqvist     UINT32                  Bus;                    /* Bus and Segment numbers */
18780174267aSFredrik Holmqvist     UINT16                  Device;
18790174267aSFredrik Holmqvist     UINT16                  Function;
18800174267aSFredrik Holmqvist     UINT16                  DeviceControl;
18810174267aSFredrik Holmqvist     UINT16                  Reserved2;
18820174267aSFredrik Holmqvist     UINT32                  UncorrectableMask;
18830174267aSFredrik Holmqvist     UINT32                  UncorrectableSeverity;
18840174267aSFredrik Holmqvist     UINT32                  CorrectableMask;
18850174267aSFredrik Holmqvist     UINT32                  AdvancedCapabilities;
18860174267aSFredrik Holmqvist 
18870174267aSFredrik Holmqvist } ACPI_HEST_AER_COMMON;
18880174267aSFredrik Holmqvist 
18890174267aSFredrik Holmqvist /* Masks for HEST Flags fields */
18900174267aSFredrik Holmqvist 
18910174267aSFredrik Holmqvist #define ACPI_HEST_FIRMWARE_FIRST        (1)
18920174267aSFredrik Holmqvist #define ACPI_HEST_GLOBAL                (1<<1)
1893ff2e2f81SFredrik Holmqvist #define ACPI_HEST_GHES_ASSIST           (1<<2)
18940174267aSFredrik Holmqvist 
1895ad5bbfb8SFredrik Holmqvist /*
1896ad5bbfb8SFredrik Holmqvist  * Macros to access the bus/segment numbers in Bus field above:
1897ad5bbfb8SFredrik Holmqvist  *  Bus number is encoded in bits 7:0
1898ad5bbfb8SFredrik Holmqvist  *  Segment number is encoded in bits 23:8
1899ad5bbfb8SFredrik Holmqvist  */
1900ad5bbfb8SFredrik Holmqvist #define ACPI_HEST_BUS(Bus)              ((Bus) & 0xFF)
1901ad5bbfb8SFredrik Holmqvist #define ACPI_HEST_SEGMENT(Bus)          (((Bus) >> 8) & 0xFFFF)
1902ad5bbfb8SFredrik Holmqvist 
19030174267aSFredrik Holmqvist 
19040174267aSFredrik Holmqvist /* Hardware Error Notification */
19050174267aSFredrik Holmqvist 
19060174267aSFredrik Holmqvist typedef struct acpi_hest_notify
19070174267aSFredrik Holmqvist {
19080174267aSFredrik Holmqvist     UINT8                   Type;
19090174267aSFredrik Holmqvist     UINT8                   Length;
19100174267aSFredrik Holmqvist     UINT16                  ConfigWriteEnable;
19110174267aSFredrik Holmqvist     UINT32                  PollInterval;
19120174267aSFredrik Holmqvist     UINT32                  Vector;
19130174267aSFredrik Holmqvist     UINT32                  PollingThresholdValue;
19140174267aSFredrik Holmqvist     UINT32                  PollingThresholdWindow;
19150174267aSFredrik Holmqvist     UINT32                  ErrorThresholdValue;
19160174267aSFredrik Holmqvist     UINT32                  ErrorThresholdWindow;
19170174267aSFredrik Holmqvist 
19180174267aSFredrik Holmqvist } ACPI_HEST_NOTIFY;
19190174267aSFredrik Holmqvist 
19200174267aSFredrik Holmqvist /* Values for Notify Type field above */
19210174267aSFredrik Holmqvist 
19220174267aSFredrik Holmqvist enum AcpiHestNotifyTypes
19230174267aSFredrik Holmqvist {
19240174267aSFredrik Holmqvist     ACPI_HEST_NOTIFY_POLLED             = 0,
19250174267aSFredrik Holmqvist     ACPI_HEST_NOTIFY_EXTERNAL           = 1,
19260174267aSFredrik Holmqvist     ACPI_HEST_NOTIFY_LOCAL              = 2,
19270174267aSFredrik Holmqvist     ACPI_HEST_NOTIFY_SCI                = 3,
19280174267aSFredrik Holmqvist     ACPI_HEST_NOTIFY_NMI                = 4,
19299b0d045cSFredrik Holmqvist     ACPI_HEST_NOTIFY_CMCI               = 5,    /* ACPI 5.0 */
19309b0d045cSFredrik Holmqvist     ACPI_HEST_NOTIFY_MCE                = 6,    /* ACPI 5.0 */
193174ffd18dSFredrik Holmqvist     ACPI_HEST_NOTIFY_GPIO               = 7,    /* ACPI 6.0 */
193274ffd18dSFredrik Holmqvist     ACPI_HEST_NOTIFY_SEA                = 8,    /* ACPI 6.1 */
193374ffd18dSFredrik Holmqvist     ACPI_HEST_NOTIFY_SEI                = 9,    /* ACPI 6.1 */
193474ffd18dSFredrik Holmqvist     ACPI_HEST_NOTIFY_GSIV               = 10,   /* ACPI 6.1 */
1935ff2e2f81SFredrik Holmqvist     ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11,   /* ACPI 6.2 */
1936ff2e2f81SFredrik Holmqvist     ACPI_HEST_NOTIFY_RESERVED           = 12    /* 12 and greater are reserved */
19370174267aSFredrik Holmqvist };
19380174267aSFredrik Holmqvist 
19390174267aSFredrik Holmqvist /* Values for ConfigWriteEnable bitfield above */
19400174267aSFredrik Holmqvist 
19410174267aSFredrik Holmqvist #define ACPI_HEST_TYPE                  (1)
19420174267aSFredrik Holmqvist #define ACPI_HEST_POLL_INTERVAL         (1<<1)
19430174267aSFredrik Holmqvist #define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
19440174267aSFredrik Holmqvist #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
19450174267aSFredrik Holmqvist #define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
19460174267aSFredrik Holmqvist #define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
19470174267aSFredrik Holmqvist 
19480174267aSFredrik Holmqvist 
19490174267aSFredrik Holmqvist /*
19500174267aSFredrik Holmqvist  * HEST subtables
19510174267aSFredrik Holmqvist  */
19520174267aSFredrik Holmqvist 
19530174267aSFredrik Holmqvist /* 0: IA32 Machine Check Exception */
19540174267aSFredrik Holmqvist 
19550174267aSFredrik Holmqvist typedef struct acpi_hest_ia_machine_check
19560174267aSFredrik Holmqvist {
19570174267aSFredrik Holmqvist     ACPI_HEST_HEADER        Header;
19580174267aSFredrik Holmqvist     UINT16                  Reserved1;
1959ff2e2f81SFredrik Holmqvist     UINT8                   Flags;              /* See flags ACPI_HEST_GLOBAL, etc. above */
19600174267aSFredrik Holmqvist     UINT8                   Enabled;
19610174267aSFredrik Holmqvist     UINT32                  RecordsToPreallocate;
19620174267aSFredrik Holmqvist     UINT32                  MaxSectionsPerRecord;
19630174267aSFredrik Holmqvist     UINT64                  GlobalCapabilityData;
19640174267aSFredrik Holmqvist     UINT64                  GlobalControlData;
19650174267aSFredrik Holmqvist     UINT8                   NumHardwareBanks;
19660174267aSFredrik Holmqvist     UINT8                   Reserved3[7];
19670174267aSFredrik Holmqvist 
19680174267aSFredrik Holmqvist } ACPI_HEST_IA_MACHINE_CHECK;
19690174267aSFredrik Holmqvist 
19700174267aSFredrik Holmqvist 
19710174267aSFredrik Holmqvist /* 1: IA32 Corrected Machine Check */
19720174267aSFredrik Holmqvist 
19730174267aSFredrik Holmqvist typedef struct acpi_hest_ia_corrected
19740174267aSFredrik Holmqvist {
19750174267aSFredrik Holmqvist     ACPI_HEST_HEADER        Header;
19760174267aSFredrik Holmqvist     UINT16                  Reserved1;
1977ff2e2f81SFredrik Holmqvist     UINT8                   Flags;              /* See flags ACPI_HEST_GLOBAL, etc. above */
19780174267aSFredrik Holmqvist     UINT8                   Enabled;
19790174267aSFredrik Holmqvist     UINT32                  RecordsToPreallocate;
19800174267aSFredrik Holmqvist     UINT32                  MaxSectionsPerRecord;
19810174267aSFredrik Holmqvist     ACPI_HEST_NOTIFY        Notify;
19820174267aSFredrik Holmqvist     UINT8                   NumHardwareBanks;
19830174267aSFredrik Holmqvist     UINT8                   Reserved2[3];
19840174267aSFredrik Holmqvist 
19850174267aSFredrik Holmqvist } ACPI_HEST_IA_CORRECTED;
19860174267aSFredrik Holmqvist 
19870174267aSFredrik Holmqvist 
19880174267aSFredrik Holmqvist /* 2: IA32 Non-Maskable Interrupt */
19890174267aSFredrik Holmqvist 
19900174267aSFredrik Holmqvist typedef struct acpi_hest_ia_nmi
19910174267aSFredrik Holmqvist {
19920174267aSFredrik Holmqvist     ACPI_HEST_HEADER        Header;
19930174267aSFredrik Holmqvist     UINT32                  Reserved;
19940174267aSFredrik Holmqvist     UINT32                  RecordsToPreallocate;
19950174267aSFredrik Holmqvist     UINT32                  MaxSectionsPerRecord;
19960174267aSFredrik Holmqvist     UINT32                  MaxRawDataLength;
19970174267aSFredrik Holmqvist 
19980174267aSFredrik Holmqvist } ACPI_HEST_IA_NMI;
19990174267aSFredrik Holmqvist 
20000174267aSFredrik Holmqvist 
20010174267aSFredrik Holmqvist /* 3,4,5: Not used */
20020174267aSFredrik Holmqvist 
20030174267aSFredrik Holmqvist /* 6: PCI Express Root Port AER */
20040174267aSFredrik Holmqvist 
20050174267aSFredrik Holmqvist typedef struct acpi_hest_aer_root
20060174267aSFredrik Holmqvist {
20070174267aSFredrik Holmqvist     ACPI_HEST_HEADER        Header;
20080174267aSFredrik Holmqvist     ACPI_HEST_AER_COMMON    Aer;
20090174267aSFredrik Holmqvist     UINT32                  RootErrorCommand;
20100174267aSFredrik Holmqvist 
20110174267aSFredrik Holmqvist } ACPI_HEST_AER_ROOT;
20120174267aSFredrik Holmqvist 
20130174267aSFredrik Holmqvist 
20140174267aSFredrik Holmqvist /* 7: PCI Express AER (AER Endpoint) */
20150174267aSFredrik Holmqvist 
20160174267aSFredrik Holmqvist typedef struct acpi_hest_aer
20170174267aSFredrik Holmqvist {
20180174267aSFredrik Holmqvist     ACPI_HEST_HEADER        Header;
20190174267aSFredrik Holmqvist     ACPI_HEST_AER_COMMON    Aer;
20200174267aSFredrik Holmqvist 
20210174267aSFredrik Holmqvist } ACPI_HEST_AER;
20220174267aSFredrik Holmqvist 
20230174267aSFredrik Holmqvist 
20240174267aSFredrik Holmqvist /* 8: PCI Express/PCI-X Bridge AER */
20250174267aSFredrik Holmqvist 
20260174267aSFredrik Holmqvist typedef struct acpi_hest_aer_bridge
20270174267aSFredrik Holmqvist {
20280174267aSFredrik Holmqvist     ACPI_HEST_HEADER        Header;
20290174267aSFredrik Holmqvist     ACPI_HEST_AER_COMMON    Aer;
20300174267aSFredrik Holmqvist     UINT32                  UncorrectableMask2;
20310174267aSFredrik Holmqvist     UINT32                  UncorrectableSeverity2;
20320174267aSFredrik Holmqvist     UINT32                  AdvancedCapabilities2;
20330174267aSFredrik Holmqvist 
20340174267aSFredrik Holmqvist } ACPI_HEST_AER_BRIDGE;
20350174267aSFredrik Holmqvist 
20360174267aSFredrik Holmqvist 
20370174267aSFredrik Holmqvist /* 9: Generic Hardware Error Source */
20380174267aSFredrik Holmqvist 
20390174267aSFredrik Holmqvist typedef struct acpi_hest_generic
20400174267aSFredrik Holmqvist {
20410174267aSFredrik Holmqvist     ACPI_HEST_HEADER        Header;
20420174267aSFredrik Holmqvist     UINT16                  RelatedSourceId;
20430174267aSFredrik Holmqvist     UINT8                   Reserved;
20440174267aSFredrik Holmqvist     UINT8                   Enabled;
20450174267aSFredrik Holmqvist     UINT32                  RecordsToPreallocate;
20460174267aSFredrik Holmqvist     UINT32                  MaxSectionsPerRecord;
20470174267aSFredrik Holmqvist     UINT32                  MaxRawDataLength;
20480174267aSFredrik Holmqvist     ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
20490174267aSFredrik Holmqvist     ACPI_HEST_NOTIFY        Notify;
20500174267aSFredrik Holmqvist     UINT32                  ErrorBlockLength;
20510174267aSFredrik Holmqvist 
20520174267aSFredrik Holmqvist } ACPI_HEST_GENERIC;
20530174267aSFredrik Holmqvist 
20540174267aSFredrik Holmqvist 
205574ffd18dSFredrik Holmqvist /* 10: Generic Hardware Error Source, version 2 */
205674ffd18dSFredrik Holmqvist 
205774ffd18dSFredrik Holmqvist typedef struct acpi_hest_generic_v2
205874ffd18dSFredrik Holmqvist {
205974ffd18dSFredrik Holmqvist     ACPI_HEST_HEADER        Header;
206074ffd18dSFredrik Holmqvist     UINT16                  RelatedSourceId;
206174ffd18dSFredrik Holmqvist     UINT8                   Reserved;
206274ffd18dSFredrik Holmqvist     UINT8                   Enabled;
206374ffd18dSFredrik Holmqvist     UINT32                  RecordsToPreallocate;
206474ffd18dSFredrik Holmqvist     UINT32                  MaxSectionsPerRecord;
206574ffd18dSFredrik Holmqvist     UINT32                  MaxRawDataLength;
206674ffd18dSFredrik Holmqvist     ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
206774ffd18dSFredrik Holmqvist     ACPI_HEST_NOTIFY        Notify;
206874ffd18dSFredrik Holmqvist     UINT32                  ErrorBlockLength;
206974ffd18dSFredrik Holmqvist     ACPI_GENERIC_ADDRESS    ReadAckRegister;
207074ffd18dSFredrik Holmqvist     UINT64                  ReadAckPreserve;
207174ffd18dSFredrik Holmqvist     UINT64                  ReadAckWrite;
207274ffd18dSFredrik Holmqvist 
207374ffd18dSFredrik Holmqvist } ACPI_HEST_GENERIC_V2;
207474ffd18dSFredrik Holmqvist 
207574ffd18dSFredrik Holmqvist 
20760174267aSFredrik Holmqvist /* Generic Error Status block */
20770174267aSFredrik Holmqvist 
20780174267aSFredrik Holmqvist typedef struct acpi_hest_generic_status
20790174267aSFredrik Holmqvist {
20800174267aSFredrik Holmqvist     UINT32                  BlockStatus;
20810174267aSFredrik Holmqvist     UINT32                  RawDataOffset;
20820174267aSFredrik Holmqvist     UINT32                  RawDataLength;
20830174267aSFredrik Holmqvist     UINT32                  DataLength;
20840174267aSFredrik Holmqvist     UINT32                  ErrorSeverity;
20850174267aSFredrik Holmqvist 
20860174267aSFredrik Holmqvist } ACPI_HEST_GENERIC_STATUS;
20870174267aSFredrik Holmqvist 
20880174267aSFredrik Holmqvist /* Values for BlockStatus flags above */
20890174267aSFredrik Holmqvist 
20900174267aSFredrik Holmqvist #define ACPI_HEST_UNCORRECTABLE             (1)
20910174267aSFredrik Holmqvist #define ACPI_HEST_CORRECTABLE               (1<<1)
20920174267aSFredrik Holmqvist #define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
20930174267aSFredrik Holmqvist #define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
20940174267aSFredrik Holmqvist #define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
20950174267aSFredrik Holmqvist 
20960174267aSFredrik Holmqvist 
20970174267aSFredrik Holmqvist /* Generic Error Data entry */
20980174267aSFredrik Holmqvist 
20990174267aSFredrik Holmqvist typedef struct acpi_hest_generic_data
21000174267aSFredrik Holmqvist {
21010174267aSFredrik Holmqvist     UINT8                   SectionType[16];
21020174267aSFredrik Holmqvist     UINT32                  ErrorSeverity;
21030174267aSFredrik Holmqvist     UINT16                  Revision;
21040174267aSFredrik Holmqvist     UINT8                   ValidationBits;
21050174267aSFredrik Holmqvist     UINT8                   Flags;
21060174267aSFredrik Holmqvist     UINT32                  ErrorDataLength;
21070174267aSFredrik Holmqvist     UINT8                   FruId[16];
21080174267aSFredrik Holmqvist     UINT8                   FruText[20];
21090174267aSFredrik Holmqvist 
21100174267aSFredrik Holmqvist } ACPI_HEST_GENERIC_DATA;
21110174267aSFredrik Holmqvist 
211274ffd18dSFredrik Holmqvist /* Extension for revision 0x0300 */
211374ffd18dSFredrik Holmqvist 
211474ffd18dSFredrik Holmqvist typedef struct acpi_hest_generic_data_v300
211574ffd18dSFredrik Holmqvist {
211674ffd18dSFredrik Holmqvist     UINT8                   SectionType[16];
211774ffd18dSFredrik Holmqvist     UINT32                  ErrorSeverity;
211874ffd18dSFredrik Holmqvist     UINT16                  Revision;
211974ffd18dSFredrik Holmqvist     UINT8                   ValidationBits;
212074ffd18dSFredrik Holmqvist     UINT8                   Flags;
212174ffd18dSFredrik Holmqvist     UINT32                  ErrorDataLength;
212274ffd18dSFredrik Holmqvist     UINT8                   FruId[16];
212374ffd18dSFredrik Holmqvist     UINT8                   FruText[20];
212474ffd18dSFredrik Holmqvist     UINT64                  TimeStamp;
212574ffd18dSFredrik Holmqvist 
212674ffd18dSFredrik Holmqvist } ACPI_HEST_GENERIC_DATA_V300;
212774ffd18dSFredrik Holmqvist 
212874ffd18dSFredrik Holmqvist /* Values for ErrorSeverity above */
212974ffd18dSFredrik Holmqvist 
213074ffd18dSFredrik Holmqvist #define ACPI_HEST_GEN_ERROR_RECOVERABLE     0
213174ffd18dSFredrik Holmqvist #define ACPI_HEST_GEN_ERROR_FATAL           1
213274ffd18dSFredrik Holmqvist #define ACPI_HEST_GEN_ERROR_CORRECTED       2
213374ffd18dSFredrik Holmqvist #define ACPI_HEST_GEN_ERROR_NONE            3
213474ffd18dSFredrik Holmqvist 
213574ffd18dSFredrik Holmqvist /* Flags for ValidationBits above */
213674ffd18dSFredrik Holmqvist 
213774ffd18dSFredrik Holmqvist #define ACPI_HEST_GEN_VALID_FRU_ID          (1)
213874ffd18dSFredrik Holmqvist #define ACPI_HEST_GEN_VALID_FRU_STRING      (1<<1)
213974ffd18dSFredrik Holmqvist #define ACPI_HEST_GEN_VALID_TIMESTAMP       (1<<2)
214074ffd18dSFredrik Holmqvist 
21410174267aSFredrik Holmqvist 
2142ff2e2f81SFredrik Holmqvist /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
2143ff2e2f81SFredrik Holmqvist 
2144ff2e2f81SFredrik Holmqvist typedef struct acpi_hest_ia_deferred_check
2145ff2e2f81SFredrik Holmqvist {
2146ff2e2f81SFredrik Holmqvist     ACPI_HEST_HEADER        Header;
2147ff2e2f81SFredrik Holmqvist     UINT16                  Reserved1;
2148ff2e2f81SFredrik Holmqvist     UINT8                   Flags;              /* See flags ACPI_HEST_GLOBAL, etc. above */
2149ff2e2f81SFredrik Holmqvist     UINT8                   Enabled;
2150ff2e2f81SFredrik Holmqvist     UINT32                  RecordsToPreallocate;
2151ff2e2f81SFredrik Holmqvist     UINT32                  MaxSectionsPerRecord;
2152ff2e2f81SFredrik Holmqvist     ACPI_HEST_NOTIFY        Notify;
2153ff2e2f81SFredrik Holmqvist     UINT8                   NumHardwareBanks;
2154ff2e2f81SFredrik Holmqvist     UINT8                   Reserved2[3];
2155ff2e2f81SFredrik Holmqvist 
2156ff2e2f81SFredrik Holmqvist } ACPI_HEST_IA_DEFERRED_CHECK;
2157ff2e2f81SFredrik Holmqvist 
2158ff2e2f81SFredrik Holmqvist 
2159ff2e2f81SFredrik Holmqvist /*******************************************************************************
2160ff2e2f81SFredrik Holmqvist  *
21610ffed378SFredrik Holmqvist  * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.3)
2162ff2e2f81SFredrik Holmqvist  *
2163ff2e2f81SFredrik Holmqvist  ******************************************************************************/
2164ff2e2f81SFredrik Holmqvist 
2165ff2e2f81SFredrik Holmqvist typedef struct acpi_table_hmat
2166ff2e2f81SFredrik Holmqvist {
2167ff2e2f81SFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2168ff2e2f81SFredrik Holmqvist     UINT32                  Reserved;
2169ff2e2f81SFredrik Holmqvist 
2170ff2e2f81SFredrik Holmqvist } ACPI_TABLE_HMAT;
2171ff2e2f81SFredrik Holmqvist 
2172ff2e2f81SFredrik Holmqvist 
2173ff2e2f81SFredrik Holmqvist /* Values for HMAT structure types */
2174ff2e2f81SFredrik Holmqvist 
2175ff2e2f81SFredrik Holmqvist enum AcpiHmatType
2176ff2e2f81SFredrik Holmqvist {
21770ffed378SFredrik Holmqvist     ACPI_HMAT_TYPE_ADDRESS_RANGE        = 0,   /* Memory subsystem address range */
2178ff2e2f81SFredrik Holmqvist     ACPI_HMAT_TYPE_LOCALITY             = 1,   /* System locality latency and bandwidth information */
2179ff2e2f81SFredrik Holmqvist     ACPI_HMAT_TYPE_CACHE                = 2,   /* Memory side cache information */
2180ff2e2f81SFredrik Holmqvist     ACPI_HMAT_TYPE_RESERVED             = 3    /* 3 and greater are reserved */
2181ff2e2f81SFredrik Holmqvist };
2182ff2e2f81SFredrik Holmqvist 
2183ff2e2f81SFredrik Holmqvist typedef struct acpi_hmat_structure
2184ff2e2f81SFredrik Holmqvist {
2185ff2e2f81SFredrik Holmqvist     UINT16                  Type;
2186ff2e2f81SFredrik Holmqvist     UINT16                  Reserved;
2187ff2e2f81SFredrik Holmqvist     UINT32                  Length;
2188ff2e2f81SFredrik Holmqvist 
2189ff2e2f81SFredrik Holmqvist } ACPI_HMAT_STRUCTURE;
2190ff2e2f81SFredrik Holmqvist 
2191ff2e2f81SFredrik Holmqvist 
2192ff2e2f81SFredrik Holmqvist /*
2193ff2e2f81SFredrik Holmqvist  * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE
2194ff2e2f81SFredrik Holmqvist  */
2195ff2e2f81SFredrik Holmqvist 
21960ffed378SFredrik Holmqvist /* 0: Memory proximity domain attributes */
2197ff2e2f81SFredrik Holmqvist 
21980ffed378SFredrik Holmqvist typedef struct acpi_hmat_proximity_domain
2199ff2e2f81SFredrik Holmqvist {
2200ff2e2f81SFredrik Holmqvist     ACPI_HMAT_STRUCTURE     Header;
2201ff2e2f81SFredrik Holmqvist     UINT16                  Flags;
2202ff2e2f81SFredrik Holmqvist     UINT16                  Reserved1;
22030ffed378SFredrik Holmqvist     UINT32                  InitiatorPD;            /* Attached Initiator proximity domain */
2204ff2e2f81SFredrik Holmqvist     UINT32                  MemoryPD;               /* Memory proximity domain */
2205ff2e2f81SFredrik Holmqvist     UINT32                  Reserved2;
22060ffed378SFredrik Holmqvist     UINT64                  Reserved3;
22070ffed378SFredrik Holmqvist     UINT64                  Reserved4;
2208ff2e2f81SFredrik Holmqvist 
22090ffed378SFredrik Holmqvist } ACPI_HMAT_PROXIMITY_DOMAIN;
2210ff2e2f81SFredrik Holmqvist 
2211ff2e2f81SFredrik Holmqvist /* Masks for Flags field above */
2212ff2e2f81SFredrik Holmqvist 
22130ffed378SFredrik Holmqvist #define ACPI_HMAT_INITIATOR_PD_VALID    (1)     /* 1: InitiatorPD field is valid */
2214ff2e2f81SFredrik Holmqvist 
2215ff2e2f81SFredrik Holmqvist 
2216ff2e2f81SFredrik Holmqvist /* 1: System locality latency and bandwidth information */
2217ff2e2f81SFredrik Holmqvist 
2218ff2e2f81SFredrik Holmqvist typedef struct acpi_hmat_locality
2219ff2e2f81SFredrik Holmqvist {
2220ff2e2f81SFredrik Holmqvist     ACPI_HMAT_STRUCTURE     Header;
2221ff2e2f81SFredrik Holmqvist     UINT8                   Flags;
2222ff2e2f81SFredrik Holmqvist     UINT8                   DataType;
222315338de9SPulkoMandy     UINT8                   MinTransferSize;
222415338de9SPulkoMandy     UINT8                   Reserved1;
2225ff2e2f81SFredrik Holmqvist     UINT32                  NumberOfInitiatorPDs;
2226ff2e2f81SFredrik Holmqvist     UINT32                  NumberOfTargetPDs;
2227ff2e2f81SFredrik Holmqvist     UINT32                  Reserved2;
2228ff2e2f81SFredrik Holmqvist     UINT64                  EntryBaseUnit;
2229ff2e2f81SFredrik Holmqvist 
2230ff2e2f81SFredrik Holmqvist } ACPI_HMAT_LOCALITY;
2231ff2e2f81SFredrik Holmqvist 
2232ff2e2f81SFredrik Holmqvist /* Masks for Flags field above */
2233ff2e2f81SFredrik Holmqvist 
223415338de9SPulkoMandy #define ACPI_HMAT_MEMORY_HIERARCHY  (0x0F)      /* Bits 0-3 */
2235ff2e2f81SFredrik Holmqvist 
223615338de9SPulkoMandy /* Values for Memory Hierarchy flags */
2237ff2e2f81SFredrik Holmqvist 
2238ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_MEMORY            0
22390ffed378SFredrik Holmqvist #define ACPI_HMAT_1ST_LEVEL_CACHE   1
22400ffed378SFredrik Holmqvist #define ACPI_HMAT_2ND_LEVEL_CACHE   2
22410ffed378SFredrik Holmqvist #define ACPI_HMAT_3RD_LEVEL_CACHE   3
224215338de9SPulkoMandy #define ACPI_HMAT_MINIMUM_XFER_SIZE 0x10        /* Bit 4: ACPI 6.4 */
224315338de9SPulkoMandy #define ACPI_HMAT_NON_SEQUENTIAL_XFERS 0x20     /* Bit 5: ACPI 6.4 */
224415338de9SPulkoMandy 
2245ff2e2f81SFredrik Holmqvist 
2246ff2e2f81SFredrik Holmqvist /* Values for DataType field above */
2247ff2e2f81SFredrik Holmqvist 
2248ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_ACCESS_LATENCY    0
2249ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_READ_LATENCY      1
2250ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_WRITE_LATENCY     2
2251ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_ACCESS_BANDWIDTH  3
2252ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_READ_BANDWIDTH    4
2253ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_WRITE_BANDWIDTH   5
2254ff2e2f81SFredrik Holmqvist 
2255ff2e2f81SFredrik Holmqvist 
2256ff2e2f81SFredrik Holmqvist /* 2: Memory side cache information */
2257ff2e2f81SFredrik Holmqvist 
2258ff2e2f81SFredrik Holmqvist typedef struct acpi_hmat_cache
2259ff2e2f81SFredrik Holmqvist {
2260ff2e2f81SFredrik Holmqvist     ACPI_HMAT_STRUCTURE     Header;
2261ff2e2f81SFredrik Holmqvist     UINT32                  MemoryPD;
2262ff2e2f81SFredrik Holmqvist     UINT32                  Reserved1;
2263ff2e2f81SFredrik Holmqvist     UINT64                  CacheSize;
2264ff2e2f81SFredrik Holmqvist     UINT32                  CacheAttributes;
2265ff2e2f81SFredrik Holmqvist     UINT16                  Reserved2;
2266ff2e2f81SFredrik Holmqvist     UINT16                  NumberOfSMBIOSHandles;
2267ff2e2f81SFredrik Holmqvist 
2268ff2e2f81SFredrik Holmqvist } ACPI_HMAT_CACHE;
2269ff2e2f81SFredrik Holmqvist 
2270ff2e2f81SFredrik Holmqvist /* Masks for CacheAttributes field above */
2271ff2e2f81SFredrik Holmqvist 
2272ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_TOTAL_CACHE_LEVEL     (0x0000000F)
2273ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CACHE_LEVEL           (0x000000F0)
2274ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CACHE_ASSOCIATIVITY   (0x00000F00)
2275ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_WRITE_POLICY          (0x0000F000)
2276ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CACHE_LINE_SIZE       (0xFFFF0000)
2277ff2e2f81SFredrik Holmqvist 
2278ff2e2f81SFredrik Holmqvist /* Values for cache associativity flag */
2279ff2e2f81SFredrik Holmqvist 
2280ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CA_NONE                     (0)
2281ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CA_DIRECT_MAPPED            (1)
2282ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING   (2)
2283ff2e2f81SFredrik Holmqvist 
2284ff2e2f81SFredrik Holmqvist /* Values for write policy flag */
2285ff2e2f81SFredrik Holmqvist 
2286ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CP_NONE   (0)
2287ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CP_WB     (1)
2288ff2e2f81SFredrik Holmqvist #define ACPI_HMAT_CP_WT     (2)
2289ff2e2f81SFredrik Holmqvist 
2290ff2e2f81SFredrik Holmqvist 
22910174267aSFredrik Holmqvist /*******************************************************************************
22920174267aSFredrik Holmqvist  *
229308c9948cSFredrik Holmqvist  * HPET - High Precision Event Timer table
22940174267aSFredrik Holmqvist  *        Version 1
22950174267aSFredrik Holmqvist  *
229608c9948cSFredrik Holmqvist  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
229708c9948cSFredrik Holmqvist  * Version 1.0a, October 2004
2298e226d1d0SFredrik Holmqvist  *
2299e226d1d0SFredrik Holmqvist  ******************************************************************************/
2300e226d1d0SFredrik Holmqvist 
230108c9948cSFredrik Holmqvist typedef struct acpi_table_hpet
2302e226d1d0SFredrik Holmqvist {
2303e226d1d0SFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
230408c9948cSFredrik Holmqvist     UINT32                  Id;                 /* Hardware ID of event timer block */
230508c9948cSFredrik Holmqvist     ACPI_GENERIC_ADDRESS    Address;            /* Address of event timer block */
230608c9948cSFredrik Holmqvist     UINT8                   Sequence;           /* HPET sequence number */
230708c9948cSFredrik Holmqvist     UINT16                  MinimumTick;        /* Main counter min tick, periodic mode */
2308ff2e2f81SFredrik Holmqvist     UINT8                   Flags;
2309ff2e2f81SFredrik Holmqvist 
231008c9948cSFredrik Holmqvist } ACPI_TABLE_HPET;
2311ff2e2f81SFredrik Holmqvist 
231208c9948cSFredrik Holmqvist /* Masks for Flags field above */
2313ff2e2f81SFredrik Holmqvist 
231408c9948cSFredrik Holmqvist #define ACPI_HPET_PAGE_PROTECT_MASK (3)
231508c9948cSFredrik Holmqvist 
231608c9948cSFredrik Holmqvist /* Values for Page Protect flags */
231708c9948cSFredrik Holmqvist 
231808c9948cSFredrik Holmqvist enum AcpiHpetPageProtect
231908c9948cSFredrik Holmqvist {
232008c9948cSFredrik Holmqvist     ACPI_HPET_NO_PAGE_PROTECT       = 0,
232108c9948cSFredrik Holmqvist     ACPI_HPET_PAGE_PROTECT4         = 1,
232208c9948cSFredrik Holmqvist     ACPI_HPET_PAGE_PROTECT64        = 2
232308c9948cSFredrik Holmqvist };
2324ff2e2f81SFredrik Holmqvist 
2325ff2e2f81SFredrik Holmqvist 
2326ff2e2f81SFredrik Holmqvist /*******************************************************************************
2327ff2e2f81SFredrik Holmqvist  *
232808c9948cSFredrik Holmqvist  * IBFT - Boot Firmware Table
2329ff2e2f81SFredrik Holmqvist  *        Version 1
2330ff2e2f81SFredrik Holmqvist  *
233108c9948cSFredrik Holmqvist  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
233208c9948cSFredrik Holmqvist  * Specification", Version 1.01, March 1, 2007
233308c9948cSFredrik Holmqvist  *
233408c9948cSFredrik Holmqvist  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
233508c9948cSFredrik Holmqvist  * Therefore, it is not currently supported by the disassembler.
233608c9948cSFredrik Holmqvist  *
2337ff2e2f81SFredrik Holmqvist  ******************************************************************************/
2338ff2e2f81SFredrik Holmqvist 
233908c9948cSFredrik Holmqvist typedef struct acpi_table_ibft
2340ff2e2f81SFredrik Holmqvist {
2341ff2e2f81SFredrik Holmqvist     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
234208c9948cSFredrik Holmqvist     UINT8                   Reserved[12];
2343ff2e2f81SFredrik Holmqvist 
234408c9948cSFredrik Holmqvist } ACPI_TABLE_IBFT;
234508c9948cSFredrik Holmqvist 
234608c9948cSFredrik Holmqvist 
234708c9948cSFredrik Holmqvist /* IBFT common subtable header */
234808c9948cSFredrik Holmqvist 
234908c9948cSFredrik Holmqvist typedef struct acpi_ibft_header
235008c9948cSFredrik Holmqvist {
235108c9948cSFredrik Holmqvist     UINT8                   Type;
235208c9948cSFredrik Holmqvist     UINT8                   Version;
235308c9948cSFredrik Holmqvist     UINT16                  Length;
235408c9948cSFredrik Holmqvist     UINT8                   Index;
235508c9948cSFredrik Holmqvist     UINT8                   Flags;
235608c9948cSFredrik Holmqvist 
235708c9948cSFredrik Holmqvist } ACPI_IBFT_HEADER;
2358ff2e2f81SFredrik Holmqvist 
2359ff2e2f81SFredrik Holmqvist /* Values for Type field above */
2360ff2e2f81SFredrik Holmqvist 
236108c9948cSFredrik Holmqvist enum AcpiIbftType
2362ff2e2f81SFredrik Holmqvist {
236308c9948cSFredrik Holmqvist     ACPI_IBFT_TYPE_NOT_USED         = 0,
236408c9948cSFredrik Holmqvist     ACPI_IBFT_TYPE_CONTROL          = 1,
236508c9948cSFredrik Holmqvist     ACPI_IBFT_TYPE_INITIATOR        = 2,
236608c9948cSFredrik Holmqvist     ACPI_IBFT_TYPE_NIC              = 3,
236708c9948cSFredrik Holmqvist     ACPI_IBFT_TYPE_TARGET           = 4,
236808c9948cSFredrik Holmqvist     ACPI_IBFT_TYPE_EXTENSIONS       = 5,
236908c9948cSFredrik Holmqvist     ACPI_IBFT_TYPE_RESERVED         = 6     /* 6 and greater are reserved */
2370ff2e2f81SFredrik Holmqvist };
2371ff2e2f81SFredrik Holmqvist 
2372ff2e2f81SFredrik Holmqvist 
237308c9948cSFredrik Holmqvist /* IBFT subtables */
2374ff2e2f81SFredrik Holmqvist 
237508c9948cSFredrik Holmqvist typedef struct acpi_ibft_control
2376ff2e2f81SFredrik Holmqvist {
237708c9948cSFredrik Holmqvist     ACPI_IBFT_HEADER        Header;
237808c9948cSFredrik Holmqvist     UINT16                  Extensions;
237908c9948cSFredrik Holmqvist     UINT16                  InitiatorOffset;
238008c9948cSFredrik Holmqvist     UINT16                  Nic0Offset;
238108c9948cSFredrik Holmqvist     UINT16                  Target0Offset;
238208c9948cSFredrik Holmqvist     UINT16                  Nic1Offset;
238308c9948cSFredrik Holmqvist     UINT16                  Target1Offset;
2384ff2e2f81SFredrik Holmqvist 
238508c9948cSFredrik Holmqvist } ACPI_IBFT_CONTROL;
2386ff2e2f81SFredrik Holmqvist 
238708c9948cSFredrik Holmqvist typedef struct acpi_ibft_initiator
2388ff2e2f81SFredrik Holmqvist {
238908c9948cSFredrik Holmqvist     ACPI_IBFT_HEADER        Header;
239008c9948cSFredrik Holmqvist     UINT8                   SnsServer[16];
239108c9948cSFredrik Holmqvist     UINT8                   SlpServer[16];
239208c9948cSFredrik Holmqvist     UINT8                   PrimaryServer[16];
239308c9948cSFredrik Holmqvist     UINT8                   SecondaryServer[16];
239408c9948cSFredrik Holmqvist     UINT16                  NameLength;
239508c9948cSFredrik Holmqvist     UINT16                  NameOffset;
2396ff2e2f81SFredrik Holmqvist 
239708c9948cSFredrik Holmqvist } ACPI_IBFT_INITIATOR;
2398ff2e2f81SFredrik Holmqvist 
239908c9948cSFredrik Holmqvist typedef struct acpi_ibft_nic
2400ff2e2f81SFredrik Holmqvist {
240108c9948cSFredrik Holmqvist     ACPI_IBFT_HEADER        Header;
240208c9948cSFredrik Holmqvist     UINT8                   IpAddress[16];
240308c9948cSFredrik Holmqvist     UINT8                   SubnetMaskPrefix;
240408c9948cSFredrik Holmqvist     UINT8                   Origin;
240508c9948cSFredrik Holmqvist     UINT8                   Gateway[16];
240608c9948cSFredrik Holmqvist     UINT8                   PrimaryDns[16];
240708c9948cSFredrik Holmqvist     UINT8                   SecondaryDns[16];
240808c9948cSFredrik Holmqvist     UINT8                   Dhcp[16];
240908c9948cSFredrik Holmqvist     UINT16                  Vlan;
241008c9948cSFredrik Holmqvist     UINT8                   MacAddress[6];
241108c9948cSFredrik Holmqvist     UINT16                  PciAddress;
241208c9948cSFredrik Holmqvist     UINT16                  NameLength;
241308c9948cSFredrik Holmqvist     UINT16                  NameOffset;
2414ff2e2f81SFredrik Holmqvist 
241508c9948cSFredrik Holmqvist } ACPI_IBFT_NIC;
2416ff2e2f81SFredrik Holmqvist 
241708c9948cSFredrik Holmqvist typedef struct acpi_ibft_target
24180174267aSFredrik Holmqvist {
241908c9948cSFredrik Holmqvist     ACPI_IBFT_HEADER        Header;
242008c9948cSFredrik Holmqvist     UINT8                   TargetIpAddress[16];
242108c9948cSFredrik Holmqvist     UINT16                  TargetIpSocket;
242208c9948cSFredrik Holmqvist     UINT8                   TargetBootLun[8];
242308c9948cSFredrik Holmqvist     UINT8                   ChapType;
242408c9948cSFredrik Holmqvist     UINT8                   NicAssociation;
242508c9948cSFredrik Holmqvist     UINT16                  TargetNameLength;
242608c9948cSFredrik Holmqvist     UINT16                  TargetNameOffset;
242708c9948cSFredrik Holmqvist     UINT16                  ChapNameLength;
242808c9948cSFredrik Holmqvist     UINT16                  ChapNameOffset;
242908c9948cSFredrik Holmqvist     UINT16                  ChapSecretLength;
243008c9948cSFredrik Holmqvist     UINT16                  ChapSecretOffset;
243108c9948cSFredrik Holmqvist     UINT16                  ReverseChapNameLength;
243208c9948cSFredrik Holmqvist     UINT16                  ReverseChapNameOffset;
243308c9948cSFredrik Holmqvist     UINT16                  ReverseChapSecretLength;
243408c9948cSFredrik Holmqvist     UINT16                  ReverseChapSecretOffset;
24350174267aSFredrik Holmqvist 
243608c9948cSFredrik Holmqvist } ACPI_IBFT_TARGET;
2437ff2e2f81SFredrik Holmqvist 
2438ff2e2f81SFredrik Holmqvist 
24390174267aSFredrik Holmqvist /* Reset to default packing */
24400174267aSFredrik Holmqvist 
24410174267aSFredrik Holmqvist #pragma pack()
24420174267aSFredrik Holmqvist 
24430174267aSFredrik Holmqvist #endif /* __ACTBL1_H__ */
2444