xref: /freebsd/sys/contrib/dev/acpica/include/actbl2.h (revision 92f570c32e9b9b9b4db9b6921c4ab79be686a498)
1d6dd1baeSJung-uk Kim /******************************************************************************
2d6dd1baeSJung-uk Kim  *
3dcbce41eSJung-uk Kim  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4d6dd1baeSJung-uk Kim  *
5d6dd1baeSJung-uk Kim  *****************************************************************************/
6d6dd1baeSJung-uk Kim 
70d84335fSJung-uk Kim /******************************************************************************
80d84335fSJung-uk Kim  *
90d84335fSJung-uk Kim  * 1. Copyright Notice
100d84335fSJung-uk Kim  *
11804fe266SJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp.
12d6dd1baeSJung-uk Kim  * All rights reserved.
13d6dd1baeSJung-uk Kim  *
140d84335fSJung-uk Kim  * 2. License
150d84335fSJung-uk Kim  *
160d84335fSJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
170d84335fSJung-uk Kim  * rights. You may have additional license terms from the party that provided
180d84335fSJung-uk Kim  * you this software, covering your right to use that party's intellectual
190d84335fSJung-uk Kim  * property rights.
200d84335fSJung-uk Kim  *
210d84335fSJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
220d84335fSJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
230d84335fSJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
240d84335fSJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
250d84335fSJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
260d84335fSJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
270d84335fSJung-uk Kim  *
280d84335fSJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
290d84335fSJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
300d84335fSJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
310d84335fSJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
320d84335fSJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
330d84335fSJung-uk Kim  * license, and in no event shall the patent license extend to any additions
340d84335fSJung-uk Kim  * to or modifications of the Original Intel Code. No other license or right
350d84335fSJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
360d84335fSJung-uk Kim  *
370d84335fSJung-uk Kim  * The above copyright and patent license is granted only if the following
380d84335fSJung-uk Kim  * conditions are met:
390d84335fSJung-uk Kim  *
400d84335fSJung-uk Kim  * 3. Conditions
410d84335fSJung-uk Kim  *
420d84335fSJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
430d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
440d84335fSJung-uk Kim  * Code or modification with rights to further distribute source must include
450d84335fSJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
460d84335fSJung-uk Kim  * and the following Disclaimer and Export Compliance provision. In addition,
470d84335fSJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
480d84335fSJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
490d84335fSJung-uk Kim  * Code and the date of any change. Licensee must include in that file the
500d84335fSJung-uk Kim  * documentation of any changes made by any predecessor Licensee. Licensee
510d84335fSJung-uk Kim  * must include a prominent statement that the modification is derived,
520d84335fSJung-uk Kim  * directly or indirectly, from Original Intel Code.
530d84335fSJung-uk Kim  *
540d84335fSJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
550d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
560d84335fSJung-uk Kim  * Code or modification without rights to further distribute source must
570d84335fSJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
580d84335fSJung-uk Kim  * documentation and/or other materials provided with distribution. In
590d84335fSJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
600d84335fSJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
610d84335fSJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
620d84335fSJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
630d84335fSJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
640d84335fSJung-uk Kim  * make.
650d84335fSJung-uk Kim  *
660d84335fSJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
670d84335fSJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
680d84335fSJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
690d84335fSJung-uk Kim  * provision in the documentation and/or other materials provided with the
700d84335fSJung-uk Kim  * distribution.
710d84335fSJung-uk Kim  *
720d84335fSJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
730d84335fSJung-uk Kim  * Intel Code.
740d84335fSJung-uk Kim  *
750d84335fSJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
760d84335fSJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
770d84335fSJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
780d84335fSJung-uk Kim  * without prior written authorization from Intel.
790d84335fSJung-uk Kim  *
800d84335fSJung-uk Kim  * 4. Disclaimer and Export Compliance
810d84335fSJung-uk Kim  *
820d84335fSJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
830d84335fSJung-uk Kim  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
840d84335fSJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
850d84335fSJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
860d84335fSJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
870d84335fSJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
880d84335fSJung-uk Kim  * PARTICULAR PURPOSE.
890d84335fSJung-uk Kim  *
900d84335fSJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
910d84335fSJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
920d84335fSJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
930d84335fSJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
940d84335fSJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
950d84335fSJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
960d84335fSJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
970d84335fSJung-uk Kim  * LIMITED REMEDY.
980d84335fSJung-uk Kim  *
990d84335fSJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1000d84335fSJung-uk Kim  * software or system incorporating such software without first obtaining any
1010d84335fSJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
1020d84335fSJung-uk Kim  * any other agency or department of the United States Government. In the
1030d84335fSJung-uk Kim  * event Licensee exports any such software from the United States or
1040d84335fSJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
1050d84335fSJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
1060d84335fSJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
1070d84335fSJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1080d84335fSJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
1090d84335fSJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
1100d84335fSJung-uk Kim  * United States government or any agency thereof requires an export license,
1110d84335fSJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
1120d84335fSJung-uk Kim  * such license, approval or letter.
1130d84335fSJung-uk Kim  *
1140d84335fSJung-uk Kim  *****************************************************************************
1150d84335fSJung-uk Kim  *
1160d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
1170d84335fSJung-uk Kim  * following license:
1180d84335fSJung-uk Kim  *
119d244b227SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
120d244b227SJung-uk Kim  * modification, are permitted provided that the following conditions
121d244b227SJung-uk Kim  * are met:
122d244b227SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
123d244b227SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
124d244b227SJung-uk Kim  *    without modification.
125d244b227SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126d244b227SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
127d244b227SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
128d244b227SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
129d244b227SJung-uk Kim  *    binary redistribution.
130d244b227SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
131d244b227SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
132d244b227SJung-uk Kim  *    from this software without specific prior written permission.
133d6dd1baeSJung-uk Kim  *
1340d84335fSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1350d84335fSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1360d84335fSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1370d84335fSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1380d84335fSJung-uk Kim  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1390d84335fSJung-uk Kim  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1400d84335fSJung-uk Kim  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1410d84335fSJung-uk Kim  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1420d84335fSJung-uk Kim  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1430d84335fSJung-uk Kim  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1440d84335fSJung-uk Kim  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1450d84335fSJung-uk Kim  *
1460d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
147d244b227SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
148d244b227SJung-uk Kim  * Software Foundation.
149d6dd1baeSJung-uk Kim  *
1500d84335fSJung-uk Kim  *****************************************************************************/
151d6dd1baeSJung-uk Kim 
152d6dd1baeSJung-uk Kim #ifndef __ACTBL2_H__
153d6dd1baeSJung-uk Kim #define __ACTBL2_H__
154d6dd1baeSJung-uk Kim 
155d6dd1baeSJung-uk Kim 
156d6dd1baeSJung-uk Kim /*******************************************************************************
157d6dd1baeSJung-uk Kim  *
158d6dd1baeSJung-uk Kim  * Additional ACPI Tables (2)
159d6dd1baeSJung-uk Kim  *
160d6dd1baeSJung-uk Kim  * These tables are not consumed directly by the ACPICA subsystem, but are
161d6dd1baeSJung-uk Kim  * included here to support device drivers and the AML disassembler.
162d6dd1baeSJung-uk Kim  *
163d6dd1baeSJung-uk Kim  ******************************************************************************/
164d6dd1baeSJung-uk Kim 
165d6dd1baeSJung-uk Kim 
166d6dd1baeSJung-uk Kim /*
167d6dd1baeSJung-uk Kim  * Values for description table header signatures for tables defined in this
168d6dd1baeSJung-uk Kim  * file. Useful because they make it more difficult to inadvertently type in
169d6dd1baeSJung-uk Kim  * the wrong signature.
170d6dd1baeSJung-uk Kim  */
171ab71bbb7SJung-uk Kim #define ACPI_SIG_AGDI           "AGDI"      /* Arm Generic Diagnostic Dump and Reset Device Interface */
172ab71bbb7SJung-uk Kim #define ACPI_SIG_APMT           "APMT"      /* Arm Performance Monitoring Unit table */
1731970d693SJung-uk Kim #define ACPI_SIG_BDAT           "BDAT"      /* BIOS Data ACPI Table */
1749a4bc520SJung-uk Kim #define ACPI_SIG_CCEL           "CCEL"      /* CC Event Log Table */
1759a4bc520SJung-uk Kim #define ACPI_SIG_CDAT           "CDAT"      /* Coherent Device Attribute Table */
176a371a5fdSJung-uk Kim #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
177d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
178313a0c13SJung-uk Kim #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
179ff879b07SJung-uk Kim #define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
180d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
181ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
182722b1667SJung-uk Kim #define ACPI_SIG_MPAM           "MPAM"      /* Memory System Resource Partitioning and Monitoring Table */
183ff879b07SJung-uk Kim #define ACPI_SIG_MPST           "MPST"      /* Memory Power State Table */
1847cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
185ff879b07SJung-uk Kim #define ACPI_SIG_NFIT           "NFIT"      /* NVDIMM Firmware Interface Table */
1861b7a2680SJung-uk Kim #define ACPI_SIG_NHLT           "NHLT"      /* Non HD Audio Link Table */
187ff879b07SJung-uk Kim #define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
188ff879b07SJung-uk Kim #define ACPI_SIG_PDTT           "PDTT"      /* Platform Debug Trigger Table */
189cfd1ed46SJung-uk Kim #define ACPI_SIG_PHAT           "PHAT"      /* Platform Health Assessment Table */
190ff879b07SJung-uk Kim #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
191ff879b07SJung-uk Kim #define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
1921970d693SJung-uk Kim #define ACPI_SIG_PRMT           "PRMT"      /* Platform Runtime Mechanism Table */
193ff879b07SJung-uk Kim #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
194804fe266SJung-uk Kim #define ACPI_SIG_RAS2           "RAS2"      /* RAS2 Feature table */
1951970d693SJung-uk Kim #define ACPI_SIG_RGRT           "RGRT"      /* Regulatory Graphics Resource Table */
196722b1667SJung-uk Kim #define ACPI_SIG_RHCT           "RHCT"      /* RISC-V Hart Capabilities Table */
197ff879b07SJung-uk Kim #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
1985f9b24faSJung-uk Kim #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated Exception Interface Table */
199ff879b07SJung-uk Kim #define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
2001970d693SJung-uk Kim #define ACPI_SIG_SVKL           "SVKL"      /* Storage Volume Key Location Table */
201ab71bbb7SJung-uk Kim #define ACPI_SIG_TDEL           "TDEL"      /* TD Event Log Table */
202d6dd1baeSJung-uk Kim 
203d6dd1baeSJung-uk Kim 
204d6dd1baeSJung-uk Kim /*
205d6dd1baeSJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
206d6dd1baeSJung-uk Kim  * the tables are provided by the system BIOS.
207d6dd1baeSJung-uk Kim  */
208d6dd1baeSJung-uk Kim #pragma pack(1)
209d6dd1baeSJung-uk Kim 
210d6dd1baeSJung-uk Kim /*
2111df130f1SJung-uk Kim  * Note: C bitfields are not used for this reason:
2121df130f1SJung-uk Kim  *
2131df130f1SJung-uk Kim  * "Bitfields are great and easy to read, but unfortunately the C language
2141df130f1SJung-uk Kim  * does not specify the layout of bitfields in memory, which means they are
2151df130f1SJung-uk Kim  * essentially useless for dealing with packed data in on-disk formats or
2161df130f1SJung-uk Kim  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
2171df130f1SJung-uk Kim  * this decision was a design error in C. Ritchie could have picked an order
2181df130f1SJung-uk Kim  * and stuck with it." Norman Ramsey.
2191df130f1SJung-uk Kim  * See http://stackoverflow.com/a/1053662/41661
220d6dd1baeSJung-uk Kim  */
221d6dd1baeSJung-uk Kim 
222d6dd1baeSJung-uk Kim 
223d6dd1baeSJung-uk Kim /*******************************************************************************
224d6dd1baeSJung-uk Kim  *
22597c0b5abSJung-uk Kim  * AEST - Arm Error Source Table
22697c0b5abSJung-uk Kim  *
22797c0b5abSJung-uk Kim  * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document
22897c0b5abSJung-uk Kim  * September 2020.
22997c0b5abSJung-uk Kim  *
23097c0b5abSJung-uk Kim  ******************************************************************************/
23197c0b5abSJung-uk Kim 
23297c0b5abSJung-uk Kim typedef struct acpi_table_aest
23397c0b5abSJung-uk Kim {
23497c0b5abSJung-uk Kim     ACPI_TABLE_HEADER       Header;
23597c0b5abSJung-uk Kim 
23697c0b5abSJung-uk Kim } ACPI_TABLE_AEST;
23797c0b5abSJung-uk Kim 
23897c0b5abSJung-uk Kim /* Common Subtable header - one per Node Structure (Subtable) */
23997c0b5abSJung-uk Kim 
24097c0b5abSJung-uk Kim typedef struct acpi_aest_hdr
24197c0b5abSJung-uk Kim {
24297c0b5abSJung-uk Kim     UINT8                   Type;
24397c0b5abSJung-uk Kim     UINT16                  Length;
24497c0b5abSJung-uk Kim     UINT8                   Reserved;
24597c0b5abSJung-uk Kim     UINT32                  NodeSpecificOffset;
24697c0b5abSJung-uk Kim     UINT32                  NodeInterfaceOffset;
24797c0b5abSJung-uk Kim     UINT32                  NodeInterruptOffset;
24897c0b5abSJung-uk Kim     UINT32                  NodeInterruptCount;
24997c0b5abSJung-uk Kim     UINT64                  TimestampRate;
25097c0b5abSJung-uk Kim     UINT64                  Reserved1;
25197c0b5abSJung-uk Kim     UINT64                  ErrorInjectionRate;
25297c0b5abSJung-uk Kim 
25397c0b5abSJung-uk Kim } ACPI_AEST_HEADER;
25497c0b5abSJung-uk Kim 
25597c0b5abSJung-uk Kim /* Values for Type above */
25697c0b5abSJung-uk Kim 
25797c0b5abSJung-uk Kim #define ACPI_AEST_PROCESSOR_ERROR_NODE      0
25897c0b5abSJung-uk Kim #define ACPI_AEST_MEMORY_ERROR_NODE         1
25997c0b5abSJung-uk Kim #define ACPI_AEST_SMMU_ERROR_NODE           2
26097c0b5abSJung-uk Kim #define ACPI_AEST_VENDOR_ERROR_NODE         3
26197c0b5abSJung-uk Kim #define ACPI_AEST_GIC_ERROR_NODE            4
262*92f570c3SJung-uk Kim #define ACPI_AEST_PCIE_ERROR_NODE           5
263*92f570c3SJung-uk Kim #define ACPI_AEST_PROXY_ERROR_NODE          6
264*92f570c3SJung-uk Kim #define ACPI_AEST_NODE_TYPE_RESERVED        7 /* 7 and above are reserved */
26597c0b5abSJung-uk Kim 
26697c0b5abSJung-uk Kim 
26797c0b5abSJung-uk Kim /*
26897c0b5abSJung-uk Kim  * AEST subtables (Error nodes)
26997c0b5abSJung-uk Kim  */
27097c0b5abSJung-uk Kim 
27197c0b5abSJung-uk Kim /* 0: Processor Error */
27297c0b5abSJung-uk Kim 
27397c0b5abSJung-uk Kim typedef struct acpi_aest_processor
27497c0b5abSJung-uk Kim {
27597c0b5abSJung-uk Kim     UINT32                  ProcessorId;
27697c0b5abSJung-uk Kim     UINT8                   ResourceType;
27797c0b5abSJung-uk Kim     UINT8                   Reserved;
27897c0b5abSJung-uk Kim     UINT8                   Flags;
27997c0b5abSJung-uk Kim     UINT8                   Revision;
28097c0b5abSJung-uk Kim     UINT64                  ProcessorAffinity;
28197c0b5abSJung-uk Kim 
28297c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR;
28397c0b5abSJung-uk Kim 
28497c0b5abSJung-uk Kim /* Values for ResourceType above, related structs below */
28597c0b5abSJung-uk Kim 
28697c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_RESOURCE            0
28797c0b5abSJung-uk Kim #define ACPI_AEST_TLB_RESOURCE              1
28897c0b5abSJung-uk Kim #define ACPI_AEST_GENERIC_RESOURCE          2
28997c0b5abSJung-uk Kim #define ACPI_AEST_RESOURCE_RESERVED         3   /* 3 and above are reserved */
29097c0b5abSJung-uk Kim 
29197c0b5abSJung-uk Kim /* 0R: Processor Cache Resource Substructure */
29297c0b5abSJung-uk Kim 
29397c0b5abSJung-uk Kim typedef struct acpi_aest_processor_cache
29497c0b5abSJung-uk Kim {
29597c0b5abSJung-uk Kim     UINT32                  CacheReference;
29697c0b5abSJung-uk Kim     UINT32                  Reserved;
29797c0b5abSJung-uk Kim 
29897c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_CACHE;
29997c0b5abSJung-uk Kim 
30097c0b5abSJung-uk Kim /* Values for CacheType above */
30197c0b5abSJung-uk Kim 
30297c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_DATA                0
30397c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_INSTRUCTION         1
30497c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_UNIFIED             2
30597c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_RESERVED            3   /* 3 and above are reserved */
30697c0b5abSJung-uk Kim 
30797c0b5abSJung-uk Kim /* 1R: Processor TLB Resource Substructure */
30897c0b5abSJung-uk Kim 
30997c0b5abSJung-uk Kim typedef struct acpi_aest_processor_tlb
31097c0b5abSJung-uk Kim {
31197c0b5abSJung-uk Kim     UINT32                  TlbLevel;
31297c0b5abSJung-uk Kim     UINT32                  Reserved;
31397c0b5abSJung-uk Kim 
31497c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_TLB;
31597c0b5abSJung-uk Kim 
31697c0b5abSJung-uk Kim /* 2R: Processor Generic Resource Substructure */
31797c0b5abSJung-uk Kim 
31897c0b5abSJung-uk Kim typedef struct acpi_aest_processor_generic
31997c0b5abSJung-uk Kim {
320ab71bbb7SJung-uk Kim     UINT32                   Resource;
32197c0b5abSJung-uk Kim 
32297c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_GENERIC;
32397c0b5abSJung-uk Kim 
32497c0b5abSJung-uk Kim /* 1: Memory Error */
32597c0b5abSJung-uk Kim 
32697c0b5abSJung-uk Kim typedef struct acpi_aest_memory
32797c0b5abSJung-uk Kim {
32897c0b5abSJung-uk Kim     UINT32                  SratProximityDomain;
32997c0b5abSJung-uk Kim 
33097c0b5abSJung-uk Kim } ACPI_AEST_MEMORY;
33197c0b5abSJung-uk Kim 
33297c0b5abSJung-uk Kim /* 2: Smmu Error */
33397c0b5abSJung-uk Kim 
33497c0b5abSJung-uk Kim typedef struct acpi_aest_smmu
33597c0b5abSJung-uk Kim {
33697c0b5abSJung-uk Kim     UINT32                  IortNodeReference;
33797c0b5abSJung-uk Kim     UINT32                  SubcomponentReference;
33897c0b5abSJung-uk Kim 
33997c0b5abSJung-uk Kim } ACPI_AEST_SMMU;
34097c0b5abSJung-uk Kim 
34197c0b5abSJung-uk Kim /* 3: Vendor Defined */
34297c0b5abSJung-uk Kim 
34397c0b5abSJung-uk Kim typedef struct acpi_aest_vendor
34497c0b5abSJung-uk Kim {
34597c0b5abSJung-uk Kim     UINT32                  AcpiHid;
34697c0b5abSJung-uk Kim     UINT32                  AcpiUid;
34797c0b5abSJung-uk Kim     UINT8                   VendorSpecificData[16];
34897c0b5abSJung-uk Kim 
34997c0b5abSJung-uk Kim } ACPI_AEST_VENDOR;
35097c0b5abSJung-uk Kim 
351*92f570c3SJung-uk Kim /* 3: Vendor Defined V2 */
352*92f570c3SJung-uk Kim 
353*92f570c3SJung-uk Kim typedef struct acpi_aest_vendor_v2
354*92f570c3SJung-uk Kim {
355*92f570c3SJung-uk Kim     UINT64                  AcpiHid;
356*92f570c3SJung-uk Kim     UINT32                  AcpiUid;
357*92f570c3SJung-uk Kim     UINT8                   VendorSpecificData[16];
358*92f570c3SJung-uk Kim 
359*92f570c3SJung-uk Kim } ACPI_AEST_VENDOR_V2;
360*92f570c3SJung-uk Kim 
36197c0b5abSJung-uk Kim /* 4: Gic Error */
36297c0b5abSJung-uk Kim 
36397c0b5abSJung-uk Kim typedef struct acpi_aest_gic
36497c0b5abSJung-uk Kim {
36597c0b5abSJung-uk Kim     UINT32                  InterfaceType;
36697c0b5abSJung-uk Kim     UINT32                  InstanceId;
36797c0b5abSJung-uk Kim 
36897c0b5abSJung-uk Kim } ACPI_AEST_GIC;
36997c0b5abSJung-uk Kim 
37097c0b5abSJung-uk Kim /* Values for InterfaceType above */
37197c0b5abSJung-uk Kim 
37297c0b5abSJung-uk Kim #define ACPI_AEST_GIC_CPU                   0
37397c0b5abSJung-uk Kim #define ACPI_AEST_GIC_DISTRIBUTOR           1
37497c0b5abSJung-uk Kim #define ACPI_AEST_GIC_REDISTRIBUTOR         2
37597c0b5abSJung-uk Kim #define ACPI_AEST_GIC_ITS                   3
37697c0b5abSJung-uk Kim #define ACPI_AEST_GIC_RESERVED              4   /* 4 and above are reserved */
37797c0b5abSJung-uk Kim 
378*92f570c3SJung-uk Kim /* 5: PCIe Error */
379*92f570c3SJung-uk Kim 
380*92f570c3SJung-uk Kim typedef struct acpi_aest_pcie
381*92f570c3SJung-uk Kim {
382*92f570c3SJung-uk Kim     UINT32                  IortNodeReference;
383*92f570c3SJung-uk Kim 
384*92f570c3SJung-uk Kim } ACPI_AEST_PCIE;
385*92f570c3SJung-uk Kim 
386*92f570c3SJung-uk Kim 
387*92f570c3SJung-uk Kim /* 6: Proxy Error */
388*92f570c3SJung-uk Kim 
389*92f570c3SJung-uk Kim typedef struct acpi_aest_proxy
390*92f570c3SJung-uk Kim {
391*92f570c3SJung-uk Kim     UINT64                  NodeAddress;
392*92f570c3SJung-uk Kim 
393*92f570c3SJung-uk Kim } ACPI_AEST_PROXY;
39497c0b5abSJung-uk Kim 
39597c0b5abSJung-uk Kim /* Node Interface Structure */
39697c0b5abSJung-uk Kim 
39797c0b5abSJung-uk Kim typedef struct acpi_aest_node_interface
39897c0b5abSJung-uk Kim {
39997c0b5abSJung-uk Kim     UINT8                   Type;
40097c0b5abSJung-uk Kim     UINT8                   Reserved[3];
40197c0b5abSJung-uk Kim     UINT32                  Flags;
40297c0b5abSJung-uk Kim     UINT64                  Address;
40397c0b5abSJung-uk Kim     UINT32                  ErrorRecordIndex;
40497c0b5abSJung-uk Kim     UINT32                  ErrorRecordCount;
40597c0b5abSJung-uk Kim     UINT64                  ErrorRecordImplemented;
40697c0b5abSJung-uk Kim     UINT64                  ErrorStatusReporting;
40797c0b5abSJung-uk Kim     UINT64                  AddressingMode;
40897c0b5abSJung-uk Kim 
40997c0b5abSJung-uk Kim } ACPI_AEST_NODE_INTERFACE;
41097c0b5abSJung-uk Kim 
411*92f570c3SJung-uk Kim /* Node Interface Structure V2*/
412*92f570c3SJung-uk Kim 
413*92f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_header
414*92f570c3SJung-uk Kim {
415*92f570c3SJung-uk Kim     UINT8                   Type;
416*92f570c3SJung-uk Kim     UINT8                   GroupFormat;
417*92f570c3SJung-uk Kim     UINT8                   Reserved[2];
418*92f570c3SJung-uk Kim     UINT32                  Flags;
419*92f570c3SJung-uk Kim     UINT64                  Address;
420*92f570c3SJung-uk Kim     UINT32                  ErrorRecordIndex;
421*92f570c3SJung-uk Kim     UINT32                  ErrorRecordCount;
422*92f570c3SJung-uk Kim 
423*92f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_HEADER;
424*92f570c3SJung-uk Kim 
425*92f570c3SJung-uk Kim #define ACPI_AEST_NODE_GROUP_FORMAT_4K             0
426*92f570c3SJung-uk Kim #define ACPI_AEST_NODE_GROUP_FORMAT_16K            1
427*92f570c3SJung-uk Kim #define ACPI_AEST_NODE_GROUP_FORMAT_64K            2
428*92f570c3SJung-uk Kim 
429*92f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_common
430*92f570c3SJung-uk Kim {
431*92f570c3SJung-uk Kim     UINT32                             ErrorNodeDevice;
432*92f570c3SJung-uk Kim     UINT32                             ProcessorAffinity;
433*92f570c3SJung-uk Kim     UINT64                             ErrorGroupRegisterBase;
434*92f570c3SJung-uk Kim     UINT64                             FaultInjectRegisterBase;
435*92f570c3SJung-uk Kim     UINT64                             InterruptConfigRegisterBase;
436*92f570c3SJung-uk Kim 
437*92f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_COMMON;
438*92f570c3SJung-uk Kim 
439*92f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_4k
440*92f570c3SJung-uk Kim {
441*92f570c3SJung-uk Kim     UINT64                             ErrorRecordImplemented;
442*92f570c3SJung-uk Kim     UINT64                             ErrorStatusReporting;
443*92f570c3SJung-uk Kim     UINT64                             AddressingMode;
444*92f570c3SJung-uk Kim     ACPI_AEST_NODE_INTERFACE_COMMON    Common;
445*92f570c3SJung-uk Kim 
446*92f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_4K;
447*92f570c3SJung-uk Kim 
448*92f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_16k
449*92f570c3SJung-uk Kim {
450*92f570c3SJung-uk Kim     UINT64                             ErrorRecordImplemented[4];
451*92f570c3SJung-uk Kim     UINT64                             ErrorStatusReporting[4];
452*92f570c3SJung-uk Kim     UINT64                             AddressingMode[4];
453*92f570c3SJung-uk Kim     ACPI_AEST_NODE_INTERFACE_COMMON    Common;
454*92f570c3SJung-uk Kim 
455*92f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_16K;
456*92f570c3SJung-uk Kim 
457*92f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_64k
458*92f570c3SJung-uk Kim {
459*92f570c3SJung-uk Kim     INT64                              ErrorRecordImplemented[14];
460*92f570c3SJung-uk Kim     UINT64                             ErrorStatusReporting[14];
461*92f570c3SJung-uk Kim     UINT64                             AddressingMode[14];
462*92f570c3SJung-uk Kim     ACPI_AEST_NODE_INTERFACE_COMMON    Common;
463*92f570c3SJung-uk Kim 
464*92f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_64K;
465*92f570c3SJung-uk Kim 
46697c0b5abSJung-uk Kim /* Values for Type field above */
46797c0b5abSJung-uk Kim 
46897c0b5abSJung-uk Kim #define ACPI_AEST_NODE_SYSTEM_REGISTER                    0
46997c0b5abSJung-uk Kim #define ACPI_AEST_NODE_MEMORY_MAPPED                      1
470*92f570c3SJung-uk Kim #define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED        2
471*92f570c3SJung-uk Kim #define ACPI_AEST_XFACE_RESERVED                          3   /* 2 and above are reserved */
47297c0b5abSJung-uk Kim 
47397c0b5abSJung-uk Kim /* Node Interrupt Structure */
47497c0b5abSJung-uk Kim 
47597c0b5abSJung-uk Kim typedef struct acpi_aest_node_interrupt
47697c0b5abSJung-uk Kim {
47797c0b5abSJung-uk Kim     UINT8                   Type;
47897c0b5abSJung-uk Kim     UINT8                   Reserved[2];
47997c0b5abSJung-uk Kim     UINT8                   Flags;
48097c0b5abSJung-uk Kim     UINT32                  Gsiv;
48197c0b5abSJung-uk Kim     UINT8                   IortId;
48297c0b5abSJung-uk Kim     UINT8                   Reserved1[3];
48397c0b5abSJung-uk Kim 
48497c0b5abSJung-uk Kim } ACPI_AEST_NODE_INTERRUPT;
48597c0b5abSJung-uk Kim 
486*92f570c3SJung-uk Kim /* Node Interrupt Structure V2 */
487*92f570c3SJung-uk Kim 
488*92f570c3SJung-uk Kim typedef struct acpi_aest_node_interrupt_v2
489*92f570c3SJung-uk Kim {
490*92f570c3SJung-uk Kim     UINT8                   Type;
491*92f570c3SJung-uk Kim     UINT8                   Reserved[2];
492*92f570c3SJung-uk Kim     UINT8                   Flags;
493*92f570c3SJung-uk Kim     UINT32                  Gsiv;
494*92f570c3SJung-uk Kim     UINT8                   Reserved1[4];
495*92f570c3SJung-uk Kim 
496*92f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERRUPT_V2;
497*92f570c3SJung-uk Kim 
49897c0b5abSJung-uk Kim /* Values for Type field above */
49997c0b5abSJung-uk Kim 
50097c0b5abSJung-uk Kim #define ACPI_AEST_NODE_FAULT_HANDLING       0
50197c0b5abSJung-uk Kim #define ACPI_AEST_NODE_ERROR_RECOVERY       1
50297c0b5abSJung-uk Kim #define ACPI_AEST_XRUPT_RESERVED            2   /* 2 and above are reserved */
50397c0b5abSJung-uk Kim 
50497c0b5abSJung-uk Kim 
50597c0b5abSJung-uk Kim /*******************************************************************************
506ab71bbb7SJung-uk Kim  * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface
507ab71bbb7SJung-uk Kim  *
508ab71bbb7SJung-uk Kim  * Conforms to "ACPI for Arm Components 1.1, Platform Design Document"
509ab71bbb7SJung-uk Kim  * ARM DEN0093 v1.1
510ab71bbb7SJung-uk Kim  *
511ab71bbb7SJung-uk Kim  ******************************************************************************/
512ab71bbb7SJung-uk Kim typedef struct acpi_table_agdi
513ab71bbb7SJung-uk Kim {
514ab71bbb7SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
515ab71bbb7SJung-uk Kim     UINT8                   Flags;
516ab71bbb7SJung-uk Kim     UINT8                   Reserved[3];
517ab71bbb7SJung-uk Kim     UINT32                  SdeiEvent;
518ab71bbb7SJung-uk Kim     UINT32                  Gsiv;
519ab71bbb7SJung-uk Kim 
520ab71bbb7SJung-uk Kim } ACPI_TABLE_AGDI;
521ab71bbb7SJung-uk Kim 
522ab71bbb7SJung-uk Kim /* Mask for Flags field above */
523ab71bbb7SJung-uk Kim 
524ab71bbb7SJung-uk Kim #define ACPI_AGDI_SIGNALING_MODE (1)
525ab71bbb7SJung-uk Kim 
526ab71bbb7SJung-uk Kim 
527ab71bbb7SJung-uk Kim /*******************************************************************************
528ab71bbb7SJung-uk Kim  *
529ab71bbb7SJung-uk Kim  * APMT - ARM Performance Monitoring Unit Table
530ab71bbb7SJung-uk Kim  *
531ab71bbb7SJung-uk Kim  * Conforms to:
532ab71bbb7SJung-uk Kim  * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document
533ab71bbb7SJung-uk Kim  * ARM DEN0117 v1.0 November 25, 2021
534ab71bbb7SJung-uk Kim  *
535ab71bbb7SJung-uk Kim  ******************************************************************************/
536ab71bbb7SJung-uk Kim 
537ab71bbb7SJung-uk Kim typedef struct acpi_table_apmt {
538ab71bbb7SJung-uk Kim     ACPI_TABLE_HEADER Header;    /* Common ACPI table header */
539ab71bbb7SJung-uk Kim } ACPI_TABLE_APMT;
540ab71bbb7SJung-uk Kim 
541ab71bbb7SJung-uk Kim #define ACPI_APMT_NODE_ID_LENGTH                4
542ab71bbb7SJung-uk Kim 
543ab71bbb7SJung-uk Kim /*
544ab71bbb7SJung-uk Kim  * APMT subtables
545ab71bbb7SJung-uk Kim  */
546ab71bbb7SJung-uk Kim typedef struct acpi_apmt_node {
547ab71bbb7SJung-uk Kim     UINT16                       Length;
548ab71bbb7SJung-uk Kim     UINT8                        Flags;
549ab71bbb7SJung-uk Kim     UINT8                        Type;
550ab71bbb7SJung-uk Kim     UINT32                       Id;
551ab71bbb7SJung-uk Kim     UINT64                       InstPrimary;
552ab71bbb7SJung-uk Kim     UINT32                       InstSecondary;
553ab71bbb7SJung-uk Kim     UINT64                       BaseAddress0;
554ab71bbb7SJung-uk Kim     UINT64                       BaseAddress1;
555ab71bbb7SJung-uk Kim     UINT32                       OvflwIrq;
556ab71bbb7SJung-uk Kim     UINT32                       Reserved;
557ab71bbb7SJung-uk Kim     UINT32                       OvflwIrqFlags;
558ab71bbb7SJung-uk Kim     UINT32                       ProcAffinity;
559ab71bbb7SJung-uk Kim     UINT32                       ImplId;
560ab71bbb7SJung-uk Kim } ACPI_APMT_NODE;
561ab71bbb7SJung-uk Kim 
562ab71bbb7SJung-uk Kim /* Masks for Flags field above */
563ab71bbb7SJung-uk Kim 
564ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE               (1<<0)
565ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY                (1<<1)
566ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC                  (1<<2)
567ab71bbb7SJung-uk Kim 
568ab71bbb7SJung-uk Kim /* Values for Flags dual page field above */
569ab71bbb7SJung-uk Kim 
570ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP         (0<<0)
571ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP          (1<<0)
572ab71bbb7SJung-uk Kim 
573ab71bbb7SJung-uk Kim /* Values for Flags processor affinity field above */
574ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY_PROC           (0<<1)
575ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)
576ab71bbb7SJung-uk Kim 
577ab71bbb7SJung-uk Kim /* Values for Flags 64-bit atomic field above */
578ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC_NSUPP            (0<<2)
579ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC_SUPP             (1<<2)
580ab71bbb7SJung-uk Kim 
581ab71bbb7SJung-uk Kim /* Values for Type field above */
582ab71bbb7SJung-uk Kim 
583ab71bbb7SJung-uk Kim enum acpi_apmt_node_type {
584ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_MC                      = 0x00,
585ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_SMMU                    = 0x01,
586ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_PCIE_ROOT               = 0x02,
587ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_ACPI                    = 0x03,
588ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_CACHE                   = 0x04,
589ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_COUNT
590ab71bbb7SJung-uk Kim };
591ab71bbb7SJung-uk Kim 
592ab71bbb7SJung-uk Kim /* Masks for ovflw_irq_flags field above */
593ab71bbb7SJung-uk Kim 
594ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE          (1<<0)
595ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE          (1<<1)
596ab71bbb7SJung-uk Kim 
597ab71bbb7SJung-uk Kim /* Values for ovflw_irq_flags mode field above */
598ab71bbb7SJung-uk Kim 
599ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL    (0<<0)
600ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE     (1<<0)
601ab71bbb7SJung-uk Kim 
602ab71bbb7SJung-uk Kim /* Values for ovflw_irq_flags type field above */
603ab71bbb7SJung-uk Kim 
604ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED    (0<<1)
605ab71bbb7SJung-uk Kim 
606ab71bbb7SJung-uk Kim 
607ab71bbb7SJung-uk Kim /*******************************************************************************
60897c0b5abSJung-uk Kim  *
6091970d693SJung-uk Kim  * BDAT - BIOS Data ACPI Table
6101970d693SJung-uk Kim  *
6111970d693SJung-uk Kim  * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
6121970d693SJung-uk Kim  * Nov 2020
6131970d693SJung-uk Kim  *
6141970d693SJung-uk Kim  ******************************************************************************/
6151970d693SJung-uk Kim 
6161970d693SJung-uk Kim typedef struct acpi_table_bdat
6171970d693SJung-uk Kim {
6181970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;
6191970d693SJung-uk Kim     ACPI_GENERIC_ADDRESS    Gas;
6201970d693SJung-uk Kim 
6211970d693SJung-uk Kim } ACPI_TABLE_BDAT;
6221970d693SJung-uk Kim 
6239a4bc520SJung-uk Kim /*******************************************************************************
6249a4bc520SJung-uk Kim  *
6259a4bc520SJung-uk Kim  * CCEL - CC-Event Log
6269a4bc520SJung-uk Kim  *        From: "Guest-Host-Communication Interface (GHCI) for Intel
6279a4bc520SJung-uk Kim  *        Trust Domain Extensions (Intel TDX)". Feb 2022
6289a4bc520SJung-uk Kim  *
6299a4bc520SJung-uk Kim  ******************************************************************************/
6309a4bc520SJung-uk Kim 
6319a4bc520SJung-uk Kim typedef struct acpi_table_ccel
6329a4bc520SJung-uk Kim {
6339a4bc520SJung-uk Kim     ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
6349a4bc520SJung-uk Kim     UINT8                   CCType;
6359a4bc520SJung-uk Kim     UINT8                   CCSubType;
6369a4bc520SJung-uk Kim     UINT16                  Reserved;
6379a4bc520SJung-uk Kim     UINT64                  LogAreaMinimumLength;
6389a4bc520SJung-uk Kim     UINT64                  LogAreaStartAddress;
6399a4bc520SJung-uk Kim 
6409a4bc520SJung-uk Kim } ACPI_TABLE_CCEL;
6411970d693SJung-uk Kim 
6421970d693SJung-uk Kim /*******************************************************************************
6431970d693SJung-uk Kim  *
644a371a5fdSJung-uk Kim  * IORT - IO Remapping Table
645a371a5fdSJung-uk Kim  *
646a371a5fdSJung-uk Kim  * Conforms to "IO Remapping Table System Software on ARM Platforms",
647*92f570c3SJung-uk Kim  * Document number: ARM DEN 0049E.f, Apr 2024
648a371a5fdSJung-uk Kim  *
649a371a5fdSJung-uk Kim  ******************************************************************************/
650a371a5fdSJung-uk Kim 
651a371a5fdSJung-uk Kim typedef struct acpi_table_iort
652a371a5fdSJung-uk Kim {
653a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;
654a371a5fdSJung-uk Kim     UINT32                  NodeCount;
655a371a5fdSJung-uk Kim     UINT32                  NodeOffset;
656a371a5fdSJung-uk Kim     UINT32                  Reserved;
657a371a5fdSJung-uk Kim 
658a371a5fdSJung-uk Kim } ACPI_TABLE_IORT;
659a371a5fdSJung-uk Kim 
660a371a5fdSJung-uk Kim 
661a371a5fdSJung-uk Kim /*
662a371a5fdSJung-uk Kim  * IORT subtables
663a371a5fdSJung-uk Kim  */
664a371a5fdSJung-uk Kim typedef struct acpi_iort_node
665a371a5fdSJung-uk Kim {
666a371a5fdSJung-uk Kim     UINT8                   Type;
667a371a5fdSJung-uk Kim     UINT16                  Length;
668a371a5fdSJung-uk Kim     UINT8                   Revision;
669cfd1ed46SJung-uk Kim     UINT32                  Identifier;
670a371a5fdSJung-uk Kim     UINT32                  MappingCount;
671a371a5fdSJung-uk Kim     UINT32                  MappingOffset;
672722b1667SJung-uk Kim     char                    NodeData[];
673a371a5fdSJung-uk Kim 
674a371a5fdSJung-uk Kim } ACPI_IORT_NODE;
675a371a5fdSJung-uk Kim 
676a371a5fdSJung-uk Kim /* Values for subtable Type above */
677a371a5fdSJung-uk Kim 
678a371a5fdSJung-uk Kim enum AcpiIortNodeType
679a371a5fdSJung-uk Kim {
680a371a5fdSJung-uk Kim     ACPI_IORT_NODE_ITS_GROUP            = 0x00,
681a371a5fdSJung-uk Kim     ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
682a371a5fdSJung-uk Kim     ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
683f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU                 = 0x03,
6843d90091dSJung-uk Kim     ACPI_IORT_NODE_SMMU_V3              = 0x04,
685cfd1ed46SJung-uk Kim     ACPI_IORT_NODE_PMCG                 = 0x05,
686cfd1ed46SJung-uk Kim     ACPI_IORT_NODE_RMR                  = 0x06,
687a371a5fdSJung-uk Kim };
688a371a5fdSJung-uk Kim 
689a371a5fdSJung-uk Kim 
690a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping
691a371a5fdSJung-uk Kim {
692a371a5fdSJung-uk Kim     UINT32                  InputBase;          /* Lowest value in input range */
693a371a5fdSJung-uk Kim     UINT32                  IdCount;            /* Number of IDs */
694a371a5fdSJung-uk Kim     UINT32                  OutputBase;         /* Lowest value in output range */
695a371a5fdSJung-uk Kim     UINT32                  OutputReference;    /* A reference to the output node */
696a371a5fdSJung-uk Kim     UINT32                  Flags;
697a371a5fdSJung-uk Kim 
698a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING;
699a371a5fdSJung-uk Kim 
700a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */
701a371a5fdSJung-uk Kim 
702a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1)
703a371a5fdSJung-uk Kim 
704a371a5fdSJung-uk Kim 
705a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access
706a371a5fdSJung-uk Kim {
707a371a5fdSJung-uk Kim     UINT32                  CacheCoherency;
708a371a5fdSJung-uk Kim     UINT8                   Hints;
709a371a5fdSJung-uk Kim     UINT16                  Reserved;
710a371a5fdSJung-uk Kim     UINT8                   MemoryFlags;
711a371a5fdSJung-uk Kim 
712a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS;
713a371a5fdSJung-uk Kim 
714a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */
715a371a5fdSJung-uk Kim 
716a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
717a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
718a371a5fdSJung-uk Kim 
719a371a5fdSJung-uk Kim /* Masks for Hints field above */
720a371a5fdSJung-uk Kim 
721a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT          (1)
722a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE              (1<<1)
723a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ               (1<<2)
724a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE           (1<<3)
725a371a5fdSJung-uk Kim 
726a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */
727a371a5fdSJung-uk Kim 
728a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY          (1)
729a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
730*92f570c3SJung-uk Kim #define ACPI_IORT_MF_CANWBS             (1<<2)
731a371a5fdSJung-uk Kim 
732a371a5fdSJung-uk Kim 
733a371a5fdSJung-uk Kim /*
734a371a5fdSJung-uk Kim  * IORT node specific subtables
735a371a5fdSJung-uk Kim  */
736a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group
737a371a5fdSJung-uk Kim {
738a371a5fdSJung-uk Kim     UINT32                  ItsCount;
739722b1667SJung-uk Kim     UINT32                  Identifiers[];          /* GIC ITS identifier array */
740a371a5fdSJung-uk Kim 
741a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP;
742a371a5fdSJung-uk Kim 
743a371a5fdSJung-uk Kim 
744a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component
745a371a5fdSJung-uk Kim {
746a371a5fdSJung-uk Kim     UINT32                  NodeFlags;
747a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
748a371a5fdSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
749722b1667SJung-uk Kim     char                    DeviceName[];           /* Path of namespace object */
750a371a5fdSJung-uk Kim 
751a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT;
752a371a5fdSJung-uk Kim 
7533d90091dSJung-uk Kim /* Masks for Flags field above */
7543d90091dSJung-uk Kim 
7553d90091dSJung-uk Kim #define ACPI_IORT_NC_STALL_SUPPORTED    (1)
7563d90091dSJung-uk Kim #define ACPI_IORT_NC_PASID_BITS         (31<<1)
757a371a5fdSJung-uk Kim 
758a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex
759a371a5fdSJung-uk Kim {
760a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
761a371a5fdSJung-uk Kim     UINT32                  AtsAttribute;
762a371a5fdSJung-uk Kim     UINT32                  PciSegmentNumber;
7633d90091dSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
764ab71bbb7SJung-uk Kim     UINT16                  PasidCapabilities;      /* PASID Capabilities */
765722b1667SJung-uk Kim     UINT8                   Reserved[];             /* Reserved, must be zero */
766a371a5fdSJung-uk Kim 
767a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX;
768a371a5fdSJung-uk Kim 
769cfd1ed46SJung-uk Kim /* Masks for AtsAttribute field above */
770a371a5fdSJung-uk Kim 
771cfd1ed46SJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED         (1)     /* The root complex ATS support */
772cfd1ed46SJung-uk Kim #define ACPI_IORT_PRI_SUPPORTED         (1<<1)  /* The root complex PRI support */
773cfd1ed46SJung-uk Kim #define ACPI_IORT_PASID_FWD_SUPPORTED   (1<<2)  /* The root complex PASID forward support */
774a371a5fdSJung-uk Kim 
775ab71bbb7SJung-uk Kim /* Masks for PasidCapabilities field above */
776ab71bbb7SJung-uk Kim #define ACPI_IORT_PASID_MAX_WIDTH       (0x1F)  /* Bits 0-4 */
777a371a5fdSJung-uk Kim 
778a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu
779a371a5fdSJung-uk Kim {
780a371a5fdSJung-uk Kim     UINT64                  BaseAddress;            /* SMMU base address */
781a371a5fdSJung-uk Kim     UINT64                  Span;                   /* Length of memory range */
782a371a5fdSJung-uk Kim     UINT32                  Model;
783a371a5fdSJung-uk Kim     UINT32                  Flags;
784a371a5fdSJung-uk Kim     UINT32                  GlobalInterruptOffset;
785a371a5fdSJung-uk Kim     UINT32                  ContextInterruptCount;
786a371a5fdSJung-uk Kim     UINT32                  ContextInterruptOffset;
787a371a5fdSJung-uk Kim     UINT32                  PmuInterruptCount;
788a371a5fdSJung-uk Kim     UINT32                  PmuInterruptOffset;
789722b1667SJung-uk Kim     UINT64                  Interrupts[];           /* Interrupt array */
790a371a5fdSJung-uk Kim 
791a371a5fdSJung-uk Kim } ACPI_IORT_SMMU;
792a371a5fdSJung-uk Kim 
793a371a5fdSJung-uk Kim /* Values for Model field above */
794a371a5fdSJung-uk Kim 
795a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
796a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
797a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
798a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
7995f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004  /* ARM Corelink MMU-401 */
8005f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005  /* Cavium ThunderX SMMUv2 */
801a371a5fdSJung-uk Kim 
802a371a5fdSJung-uk Kim /* Masks for Flags field above */
803a371a5fdSJung-uk Kim 
804a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
805a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
806a371a5fdSJung-uk Kim 
8070d84335fSJung-uk Kim /* Global interrupt format */
8080d84335fSJung-uk Kim 
8090d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi
8100d84335fSJung-uk Kim {
8110d84335fSJung-uk Kim     UINT32                  NSgIrpt;
8120d84335fSJung-uk Kim     UINT32                  NSgIrptFlags;
8130d84335fSJung-uk Kim     UINT32                  NSgCfgIrpt;
8140d84335fSJung-uk Kim     UINT32                  NSgCfgIrptFlags;
8152f6a1a81SJung-uk Kim 
8160d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI;
8170d84335fSJung-uk Kim 
818a371a5fdSJung-uk Kim 
819f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3
820f8146b88SJung-uk Kim {
821f8146b88SJung-uk Kim     UINT64                  BaseAddress;            /* SMMUv3 base address */
822f8146b88SJung-uk Kim     UINT32                  Flags;
823f8146b88SJung-uk Kim     UINT32                  Reserved;
824f8146b88SJung-uk Kim     UINT64                  VatosAddress;
8255f9b24faSJung-uk Kim     UINT32                  Model;
826f8146b88SJung-uk Kim     UINT32                  EventGsiv;
827f8146b88SJung-uk Kim     UINT32                  PriGsiv;
828f8146b88SJung-uk Kim     UINT32                  GerrGsiv;
829f8146b88SJung-uk Kim     UINT32                  SyncGsiv;
8303d90091dSJung-uk Kim     UINT32                  Pxm;
831b7b7e711SJung-uk Kim     UINT32                  IdMappingIndex;
832f8146b88SJung-uk Kim 
833f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3;
834f8146b88SJung-uk Kim 
8355f9b24faSJung-uk Kim /* Values for Model field above */
8365f9b24faSJung-uk Kim 
8375f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000  /* Generic SMMUv3 */
8385f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001  /* HiSilicon Hi161x SMMUv3 */
8395f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002  /* Cavium CN99xx SMMUv3 */
8405f9b24faSJung-uk Kim 
841f8146b88SJung-uk Kim /* Masks for Flags field above */
842f8146b88SJung-uk Kim 
843f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
8443d90091dSJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (3<<1)
8455f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
8469a4bc520SJung-uk Kim #define ACPI_IORT_SMMU_V3_DEVICEID_VALID    (1<<4)
847f8146b88SJung-uk Kim 
8483d90091dSJung-uk Kim typedef struct acpi_iort_pmcg
8493d90091dSJung-uk Kim {
8503d90091dSJung-uk Kim     UINT64                  Page0BaseAddress;
8513d90091dSJung-uk Kim     UINT32                  OverflowGsiv;
8523d90091dSJung-uk Kim     UINT32                  NodeReference;
8533d90091dSJung-uk Kim     UINT64                  Page1BaseAddress;
8543d90091dSJung-uk Kim 
8553d90091dSJung-uk Kim } ACPI_IORT_PMCG;
8563d90091dSJung-uk Kim 
857cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr {
858cfd1ed46SJung-uk Kim     UINT32 Flags;
859cfd1ed46SJung-uk Kim     UINT32 RmrCount;
860cfd1ed46SJung-uk Kim     UINT32 RmrOffset;
861cfd1ed46SJung-uk Kim 
862cfd1ed46SJung-uk Kim } ACPI_IORT_RMR;
863cfd1ed46SJung-uk Kim 
864ab71bbb7SJung-uk Kim /* Masks for Flags field above */
865ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_REMAP_PERMITTED      (1)
866ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ACCESS_PRIVILEGE     (1<<1)
867ab71bbb7SJung-uk Kim 
868ab71bbb7SJung-uk Kim /*
869ab71bbb7SJung-uk Kim  * Macro to access the Access Attributes in flags field above:
870ab71bbb7SJung-uk Kim  *  Access Attributes is encoded in bits 9:2
871ab71bbb7SJung-uk Kim  */
872ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags)          (((flags) >> 2) & 0xFF)
873ab71bbb7SJung-uk Kim 
874ab71bbb7SJung-uk Kim /* Values for above Access Attributes */
875ab71bbb7SJung-uk Kim 
876ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE   0x00
877ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE    0x01
878ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGRE     0x02
879ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_GRE      0x03
880ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_NORMAL_NC       0x04
881ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB  0x05
882ab71bbb7SJung-uk Kim 
883cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr_desc {
884cfd1ed46SJung-uk Kim     UINT64 BaseAddress;
885cfd1ed46SJung-uk Kim     UINT64 Length;
886cfd1ed46SJung-uk Kim     UINT32 Reserved;
887cfd1ed46SJung-uk Kim 
888cfd1ed46SJung-uk Kim } ACPI_IORT_RMR_DESC;
889f8146b88SJung-uk Kim 
890a371a5fdSJung-uk Kim /*******************************************************************************
891a371a5fdSJung-uk Kim  *
892d6dd1baeSJung-uk Kim  * IVRS - I/O Virtualization Reporting Structure
893d6dd1baeSJung-uk Kim  *        Version 1
894d6dd1baeSJung-uk Kim  *
895d6dd1baeSJung-uk Kim  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
896d6dd1baeSJung-uk Kim  * Revision 1.26, February 2009.
897d6dd1baeSJung-uk Kim  *
898d6dd1baeSJung-uk Kim  ******************************************************************************/
899d6dd1baeSJung-uk Kim 
900d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs
901d6dd1baeSJung-uk Kim {
902d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
903d6dd1baeSJung-uk Kim     UINT32                  Info;               /* Common virtualization info */
904d6dd1baeSJung-uk Kim     UINT64                  Reserved;
905d6dd1baeSJung-uk Kim 
906d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS;
907d6dd1baeSJung-uk Kim 
908d6dd1baeSJung-uk Kim /* Values for Info field above */
909d6dd1baeSJung-uk Kim 
910d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
911d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
912d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
913d6dd1baeSJung-uk Kim 
914d6dd1baeSJung-uk Kim 
915d6dd1baeSJung-uk Kim /* IVRS subtable header */
916d6dd1baeSJung-uk Kim 
917d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header
918d6dd1baeSJung-uk Kim {
919d6dd1baeSJung-uk Kim     UINT8                   Type;               /* Subtable type */
920d6dd1baeSJung-uk Kim     UINT8                   Flags;
921d6dd1baeSJung-uk Kim     UINT16                  Length;             /* Subtable length */
922d6dd1baeSJung-uk Kim     UINT16                  DeviceId;           /* ID of IOMMU */
923d6dd1baeSJung-uk Kim 
924d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER;
925d6dd1baeSJung-uk Kim 
926d6dd1baeSJung-uk Kim /* Values for subtable Type above */
927d6dd1baeSJung-uk Kim 
928d6dd1baeSJung-uk Kim enum AcpiIvrsType
929d6dd1baeSJung-uk Kim {
9303ee58df5SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE1        = 0x10,
9313ee58df5SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE2        = 0x11,
932cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE3        = 0x40,
933d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
934d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
935d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY3          = 0x22
936d6dd1baeSJung-uk Kim };
937d6dd1baeSJung-uk Kim 
938d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */
939d6dd1baeSJung-uk Kim 
940d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE         (1)
941d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW           (1<<1)
942d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW       (1<<2)
943d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC              (1<<3)
944d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB             (1<<4)
945d6dd1baeSJung-uk Kim 
946d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */
947d6dd1baeSJung-uk Kim 
948d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY             (1)
949d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ              (1<<1)
950d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE             (1<<2)
951d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
952d6dd1baeSJung-uk Kim 
953d6dd1baeSJung-uk Kim 
954d6dd1baeSJung-uk Kim /*
955d6dd1baeSJung-uk Kim  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
956d6dd1baeSJung-uk Kim  */
957d6dd1baeSJung-uk Kim 
958d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
959d6dd1baeSJung-uk Kim 
9603ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_10
961d6dd1baeSJung-uk Kim {
962d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
963d6dd1baeSJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
964d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
965d6dd1baeSJung-uk Kim     UINT16                  PciSegmentGroup;
966d6dd1baeSJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
9673ee58df5SJung-uk Kim     UINT32                  FeatureReporting;
968d6dd1baeSJung-uk Kim 
9693ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE1;
9703ee58df5SJung-uk Kim 
9713ee58df5SJung-uk Kim /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
9723ee58df5SJung-uk Kim 
9733ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_11
9743ee58df5SJung-uk Kim {
9753ee58df5SJung-uk Kim     ACPI_IVRS_HEADER        Header;
9763ee58df5SJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
9773ee58df5SJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
9783ee58df5SJung-uk Kim     UINT16                  PciSegmentGroup;
9793ee58df5SJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
9803ee58df5SJung-uk Kim     UINT32                  Attributes;
9813ee58df5SJung-uk Kim     UINT64                  EfrRegisterImage;
9823ee58df5SJung-uk Kim     UINT64                  Reserved;
9833ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE2;
984d6dd1baeSJung-uk Kim 
985d6dd1baeSJung-uk Kim /* Masks for Info field above */
986d6dd1baeSJung-uk Kim 
987d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
988d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
989d6dd1baeSJung-uk Kim 
990d6dd1baeSJung-uk Kim 
991d6dd1baeSJung-uk Kim /*
992d6dd1baeSJung-uk Kim  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
993d6dd1baeSJung-uk Kim  * Upper two bits of the Type field are the (encoded) length of the structure.
994d6dd1baeSJung-uk Kim  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
995d6dd1baeSJung-uk Kim  * are reserved for future use but not defined.
996d6dd1baeSJung-uk Kim  */
997d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header
998d6dd1baeSJung-uk Kim {
999d6dd1baeSJung-uk Kim     UINT8                   Type;
1000d6dd1baeSJung-uk Kim     UINT16                  Id;
1001d6dd1baeSJung-uk Kim     UINT8                   DataSetting;
1002d6dd1baeSJung-uk Kim 
1003d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER;
1004d6dd1baeSJung-uk Kim 
1005d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */
1006d6dd1baeSJung-uk Kim 
1007d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH      0xC0
1008d6dd1baeSJung-uk Kim 
1009d6dd1baeSJung-uk Kim /* Values for device entry Type field above */
1010d6dd1baeSJung-uk Kim 
1011d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType
1012d6dd1baeSJung-uk Kim {
1013d6dd1baeSJung-uk Kim     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
1014d6dd1baeSJung-uk Kim 
1015d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD4             = 0,
1016d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALL              = 1,
1017d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SELECT           = 2,
1018d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_START            = 3,
1019d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_END              = 4,
1020d6dd1baeSJung-uk Kim 
1021d6dd1baeSJung-uk Kim     /* 8-byte device entries */
1022d6dd1baeSJung-uk Kim 
1023d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD8             = 64,
1024d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_NOT_USED         = 65,
1025d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
1026d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
1027d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
1028d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
1029cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_SPECIAL          = 72, /* Uses ACPI_IVRS_DEVICE8C */
1030cfd1ed46SJung-uk Kim 
1031cfd1ed46SJung-uk Kim     /* Variable-length device entries */
1032cfd1ed46SJung-uk Kim 
1033cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_HID              = 240 /* Uses ACPI_IVRS_DEVICE_HID */
1034d6dd1baeSJung-uk Kim };
1035d6dd1baeSJung-uk Kim 
1036d6dd1baeSJung-uk Kim /* Values for Data field above */
1037d6dd1baeSJung-uk Kim 
1038d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS         (1)
1039d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS         (1<<1)
1040d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS          (1<<2)
1041d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
1042d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS        (1<<6)
1043d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS        (1<<7)
1044d6dd1baeSJung-uk Kim 
1045d6dd1baeSJung-uk Kim 
1046d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */
1047d6dd1baeSJung-uk Kim 
1048d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4
1049d6dd1baeSJung-uk Kim {
1050d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1051d6dd1baeSJung-uk Kim 
1052d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4;
1053d6dd1baeSJung-uk Kim 
1054d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */
1055d6dd1baeSJung-uk Kim 
1056d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a
1057d6dd1baeSJung-uk Kim {
1058d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1059d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
1060d6dd1baeSJung-uk Kim     UINT16                  UsedId;
1061d6dd1baeSJung-uk Kim     UINT8                   Reserved2;
1062d6dd1baeSJung-uk Kim 
1063d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A;
1064d6dd1baeSJung-uk Kim 
1065d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */
1066d6dd1baeSJung-uk Kim 
1067d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b
1068d6dd1baeSJung-uk Kim {
1069d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1070d6dd1baeSJung-uk Kim     UINT32                  ExtendedData;
1071d6dd1baeSJung-uk Kim 
1072d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B;
1073d6dd1baeSJung-uk Kim 
1074d6dd1baeSJung-uk Kim /* Values for ExtendedData above */
1075d6dd1baeSJung-uk Kim 
1076d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED      (1<<31)
1077d6dd1baeSJung-uk Kim 
1078d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */
1079d6dd1baeSJung-uk Kim 
1080d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c
1081d6dd1baeSJung-uk Kim {
1082d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1083d6dd1baeSJung-uk Kim     UINT8                   Handle;
1084d6dd1baeSJung-uk Kim     UINT16                  UsedId;
1085d6dd1baeSJung-uk Kim     UINT8                   Variety;
1086d6dd1baeSJung-uk Kim 
1087d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C;
1088d6dd1baeSJung-uk Kim 
1089d6dd1baeSJung-uk Kim /* Values for Variety field above */
1090d6dd1baeSJung-uk Kim 
1091d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC            1
1092d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET              2
1093d6dd1baeSJung-uk Kim 
1094cfd1ed46SJung-uk Kim /* Type 240: variable-length device entry */
1095cfd1ed46SJung-uk Kim 
1096cfd1ed46SJung-uk Kim typedef struct acpi_ivrs_device_hid
1097cfd1ed46SJung-uk Kim {
1098cfd1ed46SJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1099cfd1ed46SJung-uk Kim     UINT64                  AcpiHid;
1100cfd1ed46SJung-uk Kim     UINT64                  AcpiCid;
1101cfd1ed46SJung-uk Kim     UINT8                   UidType;
1102cfd1ed46SJung-uk Kim     UINT8                   UidLength;
1103cfd1ed46SJung-uk Kim 
1104cfd1ed46SJung-uk Kim } ACPI_IVRS_DEVICE_HID;
1105cfd1ed46SJung-uk Kim 
11061970d693SJung-uk Kim /* Values for UidType above */
11071970d693SJung-uk Kim 
11081970d693SJung-uk Kim #define ACPI_IVRS_UID_NOT_PRESENT   0
11091970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_INTEGER    1
11101970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_STRING     2
1111d6dd1baeSJung-uk Kim 
1112d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
1113d6dd1baeSJung-uk Kim 
1114d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory
1115d6dd1baeSJung-uk Kim {
1116d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
1117d6dd1baeSJung-uk Kim     UINT16                  AuxData;
1118d6dd1baeSJung-uk Kim     UINT64                  Reserved;
1119d6dd1baeSJung-uk Kim     UINT64                  StartAddress;
1120d6dd1baeSJung-uk Kim     UINT64                  MemoryLength;
1121d6dd1baeSJung-uk Kim 
1122d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY;
1123d6dd1baeSJung-uk Kim 
1124d6dd1baeSJung-uk Kim 
1125d6dd1baeSJung-uk Kim /*******************************************************************************
1126d6dd1baeSJung-uk Kim  *
1127313a0c13SJung-uk Kim  * LPIT - Low Power Idle Table
1128313a0c13SJung-uk Kim  *
1129a371a5fdSJung-uk Kim  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1130313a0c13SJung-uk Kim  *
1131313a0c13SJung-uk Kim  ******************************************************************************/
1132313a0c13SJung-uk Kim 
1133313a0c13SJung-uk Kim typedef struct acpi_table_lpit
1134313a0c13SJung-uk Kim {
1135313a0c13SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1136313a0c13SJung-uk Kim 
1137313a0c13SJung-uk Kim } ACPI_TABLE_LPIT;
1138313a0c13SJung-uk Kim 
1139313a0c13SJung-uk Kim 
1140313a0c13SJung-uk Kim /* LPIT subtable header */
1141313a0c13SJung-uk Kim 
1142313a0c13SJung-uk Kim typedef struct acpi_lpit_header
1143313a0c13SJung-uk Kim {
1144313a0c13SJung-uk Kim     UINT32                  Type;               /* Subtable type */
1145313a0c13SJung-uk Kim     UINT32                  Length;             /* Subtable length */
1146313a0c13SJung-uk Kim     UINT16                  UniqueId;
1147313a0c13SJung-uk Kim     UINT16                  Reserved;
1148313a0c13SJung-uk Kim     UINT32                  Flags;
1149313a0c13SJung-uk Kim 
1150313a0c13SJung-uk Kim } ACPI_LPIT_HEADER;
1151313a0c13SJung-uk Kim 
1152313a0c13SJung-uk Kim /* Values for subtable Type above */
1153313a0c13SJung-uk Kim 
1154313a0c13SJung-uk Kim enum AcpiLpitType
1155313a0c13SJung-uk Kim {
1156313a0c13SJung-uk Kim     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
1157a371a5fdSJung-uk Kim     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
1158313a0c13SJung-uk Kim };
1159313a0c13SJung-uk Kim 
1160313a0c13SJung-uk Kim /* Masks for Flags field above  */
1161313a0c13SJung-uk Kim 
1162313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED    (1)
1163313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER        (1<<1)
1164313a0c13SJung-uk Kim 
1165313a0c13SJung-uk Kim /*
1166313a0c13SJung-uk Kim  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
1167313a0c13SJung-uk Kim  */
1168313a0c13SJung-uk Kim 
1169313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */
1170313a0c13SJung-uk Kim 
1171313a0c13SJung-uk Kim typedef struct acpi_lpit_native
1172313a0c13SJung-uk Kim {
1173313a0c13SJung-uk Kim     ACPI_LPIT_HEADER        Header;
1174313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    EntryTrigger;
1175313a0c13SJung-uk Kim     UINT32                  Residency;
1176313a0c13SJung-uk Kim     UINT32                  Latency;
1177313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    ResidencyCounter;
1178313a0c13SJung-uk Kim     UINT64                  CounterFrequency;
1179313a0c13SJung-uk Kim 
1180313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE;
1181313a0c13SJung-uk Kim 
1182313a0c13SJung-uk Kim 
1183313a0c13SJung-uk Kim /*******************************************************************************
1184313a0c13SJung-uk Kim  *
1185ff879b07SJung-uk Kim  * MADT - Multiple APIC Description Table
1186ff879b07SJung-uk Kim  *        Version 3
1187ff879b07SJung-uk Kim  *
1188ff879b07SJung-uk Kim  ******************************************************************************/
1189ff879b07SJung-uk Kim 
1190ff879b07SJung-uk Kim typedef struct acpi_table_madt
1191ff879b07SJung-uk Kim {
1192ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1193ff879b07SJung-uk Kim     UINT32                  Address;            /* Physical address of local APIC */
1194ff879b07SJung-uk Kim     UINT32                  Flags;
1195ff879b07SJung-uk Kim 
1196ff879b07SJung-uk Kim } ACPI_TABLE_MADT;
1197ff879b07SJung-uk Kim 
1198ff879b07SJung-uk Kim /* Masks for Flags field above */
1199ff879b07SJung-uk Kim 
1200ff879b07SJung-uk Kim #define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
1201ff879b07SJung-uk Kim 
1202ff879b07SJung-uk Kim /* Values for PCATCompat flag */
1203ff879b07SJung-uk Kim 
1204ff879b07SJung-uk Kim #define ACPI_MADT_DUAL_PIC          1
1205ff879b07SJung-uk Kim #define ACPI_MADT_MULTIPLE_APIC     0
1206ff879b07SJung-uk Kim 
1207ff879b07SJung-uk Kim 
1208ff879b07SJung-uk Kim /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
1209ff879b07SJung-uk Kim 
1210ff879b07SJung-uk Kim enum AcpiMadtType
1211ff879b07SJung-uk Kim {
1212ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC               = 0,
1213ff879b07SJung-uk Kim     ACPI_MADT_TYPE_IO_APIC                  = 1,
1214ff879b07SJung-uk Kim     ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
1215ff879b07SJung-uk Kim     ACPI_MADT_TYPE_NMI_SOURCE               = 3,
1216ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
1217ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
1218ff879b07SJung-uk Kim     ACPI_MADT_TYPE_IO_SAPIC                 = 6,
1219ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
1220ff879b07SJung-uk Kim     ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
1221ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
1222ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
1223ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
1224ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR      = 12,
1225ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_MSI_FRAME        = 13,
1226ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR    = 14,
1227ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_TRANSLATOR       = 15,
1228cfd1ed46SJung-uk Kim     ACPI_MADT_TYPE_MULTIPROC_WAKEUP         = 16,
12299a4bc520SJung-uk Kim     ACPI_MADT_TYPE_CORE_PIC                 = 17,
12309a4bc520SJung-uk Kim     ACPI_MADT_TYPE_LIO_PIC                  = 18,
12319a4bc520SJung-uk Kim     ACPI_MADT_TYPE_HT_PIC                   = 19,
12329a4bc520SJung-uk Kim     ACPI_MADT_TYPE_EIO_PIC                  = 20,
12339a4bc520SJung-uk Kim     ACPI_MADT_TYPE_MSI_PIC                  = 21,
12349a4bc520SJung-uk Kim     ACPI_MADT_TYPE_BIO_PIC                  = 22,
12359a4bc520SJung-uk Kim     ACPI_MADT_TYPE_LPC_PIC                  = 23,
1236722b1667SJung-uk Kim     ACPI_MADT_TYPE_RINTC                    = 24,
123707c64d74SJung-uk Kim     ACPI_MADT_TYPE_IMSIC                    = 25,
123807c64d74SJung-uk Kim     ACPI_MADT_TYPE_APLIC                    = 26,
123907c64d74SJung-uk Kim     ACPI_MADT_TYPE_PLIC                     = 27,
124007c64d74SJung-uk Kim     ACPI_MADT_TYPE_RESERVED                 = 28,   /* 28 to 0x7F are reserved */
1241ab71bbb7SJung-uk Kim     ACPI_MADT_TYPE_OEM_RESERVED             = 0x80  /* 0x80 to 0xFF are reserved for OEM use */
1242ff879b07SJung-uk Kim };
1243ff879b07SJung-uk Kim 
1244ff879b07SJung-uk Kim 
1245ff879b07SJung-uk Kim /*
1246ff879b07SJung-uk Kim  * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
1247ff879b07SJung-uk Kim  */
1248ff879b07SJung-uk Kim 
1249ff879b07SJung-uk Kim /* 0: Processor Local APIC */
1250ff879b07SJung-uk Kim 
1251ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic
1252ff879b07SJung-uk Kim {
1253ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1254ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
1255ff879b07SJung-uk Kim     UINT8                   Id;                 /* Processor's local APIC id */
1256ff879b07SJung-uk Kim     UINT32                  LapicFlags;
1257ff879b07SJung-uk Kim 
1258ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC;
1259ff879b07SJung-uk Kim 
1260ff879b07SJung-uk Kim 
1261ff879b07SJung-uk Kim /* 1: IO APIC */
1262ff879b07SJung-uk Kim 
1263ff879b07SJung-uk Kim typedef struct acpi_madt_io_apic
1264ff879b07SJung-uk Kim {
1265ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1266ff879b07SJung-uk Kim     UINT8                   Id;                 /* I/O APIC ID */
1267ff879b07SJung-uk Kim     UINT8                   Reserved;           /* Reserved - must be zero */
1268ff879b07SJung-uk Kim     UINT32                  Address;            /* APIC physical address */
1269ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
1270ff879b07SJung-uk Kim 
1271ff879b07SJung-uk Kim } ACPI_MADT_IO_APIC;
1272ff879b07SJung-uk Kim 
1273ff879b07SJung-uk Kim 
1274ff879b07SJung-uk Kim /* 2: Interrupt Override */
1275ff879b07SJung-uk Kim 
1276ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_override
1277ff879b07SJung-uk Kim {
1278ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1279ff879b07SJung-uk Kim     UINT8                   Bus;                /* 0 - ISA */
1280ff879b07SJung-uk Kim     UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
1281ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
1282ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1283ff879b07SJung-uk Kim 
1284ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_OVERRIDE;
1285ff879b07SJung-uk Kim 
1286ff879b07SJung-uk Kim 
1287ff879b07SJung-uk Kim /* 3: NMI Source */
1288ff879b07SJung-uk Kim 
1289ff879b07SJung-uk Kim typedef struct acpi_madt_nmi_source
1290ff879b07SJung-uk Kim {
1291ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1292ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1293ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
1294ff879b07SJung-uk Kim 
1295ff879b07SJung-uk Kim } ACPI_MADT_NMI_SOURCE;
1296ff879b07SJung-uk Kim 
1297ff879b07SJung-uk Kim 
1298ff879b07SJung-uk Kim /* 4: Local APIC NMI */
1299ff879b07SJung-uk Kim 
1300ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_nmi
1301ff879b07SJung-uk Kim {
1302ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1303ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
1304ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1305ff879b07SJung-uk Kim     UINT8                   Lint;               /* LINTn to which NMI is connected */
1306ff879b07SJung-uk Kim 
1307ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_NMI;
1308ff879b07SJung-uk Kim 
1309ff879b07SJung-uk Kim 
1310ff879b07SJung-uk Kim /* 5: Address Override */
1311ff879b07SJung-uk Kim 
1312ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_override
1313ff879b07SJung-uk Kim {
1314ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1315ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
1316ff879b07SJung-uk Kim     UINT64                  Address;            /* APIC physical address */
1317ff879b07SJung-uk Kim 
1318ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_OVERRIDE;
1319ff879b07SJung-uk Kim 
1320ff879b07SJung-uk Kim 
1321ff879b07SJung-uk Kim /* 6: I/O Sapic */
1322ff879b07SJung-uk Kim 
1323ff879b07SJung-uk Kim typedef struct acpi_madt_io_sapic
1324ff879b07SJung-uk Kim {
1325ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1326ff879b07SJung-uk Kim     UINT8                   Id;                 /* I/O SAPIC ID */
1327ff879b07SJung-uk Kim     UINT8                   Reserved;           /* Reserved, must be zero */
1328ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
1329ff879b07SJung-uk Kim     UINT64                  Address;            /* SAPIC physical address */
1330ff879b07SJung-uk Kim 
1331ff879b07SJung-uk Kim } ACPI_MADT_IO_SAPIC;
1332ff879b07SJung-uk Kim 
1333ff879b07SJung-uk Kim 
1334ff879b07SJung-uk Kim /* 7: Local Sapic */
1335ff879b07SJung-uk Kim 
1336ff879b07SJung-uk Kim typedef struct acpi_madt_local_sapic
1337ff879b07SJung-uk Kim {
1338ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1339ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
1340ff879b07SJung-uk Kim     UINT8                   Id;                 /* SAPIC ID */
1341ff879b07SJung-uk Kim     UINT8                   Eid;                /* SAPIC EID */
1342ff879b07SJung-uk Kim     UINT8                   Reserved[3];        /* Reserved, must be zero */
1343ff879b07SJung-uk Kim     UINT32                  LapicFlags;
1344ff879b07SJung-uk Kim     UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
1345722b1667SJung-uk Kim     char                    UidString[];        /* String UID  - ACPI 3.0 */
1346ff879b07SJung-uk Kim 
1347ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_SAPIC;
1348ff879b07SJung-uk Kim 
1349ff879b07SJung-uk Kim 
1350ff879b07SJung-uk Kim /* 8: Platform Interrupt Source */
1351ff879b07SJung-uk Kim 
1352ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_source
1353ff879b07SJung-uk Kim {
1354ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1355ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1356ff879b07SJung-uk Kim     UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
1357ff879b07SJung-uk Kim     UINT8                   Id;                 /* Processor ID */
1358ff879b07SJung-uk Kim     UINT8                   Eid;                /* Processor EID */
1359ff879b07SJung-uk Kim     UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
1360ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
1361ff879b07SJung-uk Kim     UINT32                  Flags;              /* Interrupt Source Flags */
1362ff879b07SJung-uk Kim 
1363ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_SOURCE;
1364ff879b07SJung-uk Kim 
1365ff879b07SJung-uk Kim /* Masks for Flags field above */
1366ff879b07SJung-uk Kim 
1367ff879b07SJung-uk Kim #define ACPI_MADT_CPEI_OVERRIDE     (1)
1368ff879b07SJung-uk Kim 
1369ff879b07SJung-uk Kim 
1370ff879b07SJung-uk Kim /* 9: Processor Local X2APIC (ACPI 4.0) */
1371ff879b07SJung-uk Kim 
1372ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic
1373ff879b07SJung-uk Kim {
1374ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1375ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1376ff879b07SJung-uk Kim     UINT32                  LocalApicId;        /* Processor x2APIC ID  */
1377ff879b07SJung-uk Kim     UINT32                  LapicFlags;
1378ff879b07SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
1379ff879b07SJung-uk Kim 
1380ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC;
1381ff879b07SJung-uk Kim 
1382ff879b07SJung-uk Kim 
1383ff879b07SJung-uk Kim /* 10: Local X2APIC NMI (ACPI 4.0) */
1384ff879b07SJung-uk Kim 
1385ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic_nmi
1386ff879b07SJung-uk Kim {
1387ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1388ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1389ff879b07SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
1390ff879b07SJung-uk Kim     UINT8                   Lint;               /* LINTn to which NMI is connected */
1391ff879b07SJung-uk Kim     UINT8                   Reserved[3];        /* Reserved - must be zero */
1392ff879b07SJung-uk Kim 
1393ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC_NMI;
1394ff879b07SJung-uk Kim 
1395ff879b07SJung-uk Kim 
1396722b1667SJung-uk Kim /* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */
1397ff879b07SJung-uk Kim 
1398ff879b07SJung-uk Kim typedef struct acpi_madt_generic_interrupt
1399ff879b07SJung-uk Kim {
1400ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1401ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1402ff879b07SJung-uk Kim     UINT32                  CpuInterfaceNumber;
1403ff879b07SJung-uk Kim     UINT32                  Uid;
1404ff879b07SJung-uk Kim     UINT32                  Flags;
1405ff879b07SJung-uk Kim     UINT32                  ParkingVersion;
1406ff879b07SJung-uk Kim     UINT32                  PerformanceInterrupt;
1407ff879b07SJung-uk Kim     UINT64                  ParkedAddress;
1408ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1409ff879b07SJung-uk Kim     UINT64                  GicvBaseAddress;
1410ff879b07SJung-uk Kim     UINT64                  GichBaseAddress;
1411ff879b07SJung-uk Kim     UINT32                  VgicInterrupt;
1412ff879b07SJung-uk Kim     UINT64                  GicrBaseAddress;
1413ff879b07SJung-uk Kim     UINT64                  ArmMpidr;
1414ff879b07SJung-uk Kim     UINT8                   EfficiencyClass;
1415cd6518c7SJung-uk Kim     UINT8                   Reserved2[1];
1416cd6518c7SJung-uk Kim     UINT16                  SpeInterrupt;       /* ACPI 6.3 */
1417722b1667SJung-uk Kim     UINT16                  TrbeInterrupt;      /* ACPI 6.5 */
1418ff879b07SJung-uk Kim 
1419ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_INTERRUPT;
1420ff879b07SJung-uk Kim 
1421ff879b07SJung-uk Kim /* Masks for Flags field above */
1422ff879b07SJung-uk Kim 
1423ff879b07SJung-uk Kim /* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
1424ff879b07SJung-uk Kim #define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
1425ff879b07SJung-uk Kim #define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
1426804fe266SJung-uk Kim #define ACPI_MADT_GICC_ONLINE_CAPABLE   (1<<3)  /* 03: Processor is online capable  */
1427804fe266SJung-uk Kim #define ACPI_MADT_GICC_NON_COHERENT     (1<<4)  /* 04: GIC redistributor is not coherent */
1428ff879b07SJung-uk Kim 
1429ff879b07SJung-uk Kim /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
1430ff879b07SJung-uk Kim 
1431ff879b07SJung-uk Kim typedef struct acpi_madt_generic_distributor
1432ff879b07SJung-uk Kim {
1433ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1434ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1435ff879b07SJung-uk Kim     UINT32                  GicId;
1436ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1437ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;
1438ff879b07SJung-uk Kim     UINT8                   Version;
1439ff879b07SJung-uk Kim     UINT8                   Reserved2[3];       /* Reserved - must be zero */
1440ff879b07SJung-uk Kim 
1441ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_DISTRIBUTOR;
1442ff879b07SJung-uk Kim 
1443ff879b07SJung-uk Kim /* Values for Version field above */
1444ff879b07SJung-uk Kim 
1445ff879b07SJung-uk Kim enum AcpiMadtGicVersion
1446ff879b07SJung-uk Kim {
1447ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_NONE          = 0,
1448ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V1            = 1,
1449ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V2            = 2,
1450ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V3            = 3,
1451ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V4            = 4,
1452ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_RESERVED      = 5     /* 5 and greater are reserved */
1453ff879b07SJung-uk Kim };
1454ff879b07SJung-uk Kim 
1455ff879b07SJung-uk Kim 
1456ff879b07SJung-uk Kim /* 13: Generic MSI Frame (ACPI 5.1) */
1457ff879b07SJung-uk Kim 
1458ff879b07SJung-uk Kim typedef struct acpi_madt_generic_msi_frame
1459ff879b07SJung-uk Kim {
1460ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1461ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1462ff879b07SJung-uk Kim     UINT32                  MsiFrameId;
1463ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1464ff879b07SJung-uk Kim     UINT32                  Flags;
1465ff879b07SJung-uk Kim     UINT16                  SpiCount;
1466ff879b07SJung-uk Kim     UINT16                  SpiBase;
1467ff879b07SJung-uk Kim 
1468ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_MSI_FRAME;
1469ff879b07SJung-uk Kim 
1470ff879b07SJung-uk Kim /* Masks for Flags field above */
1471ff879b07SJung-uk Kim 
1472ff879b07SJung-uk Kim #define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
1473ff879b07SJung-uk Kim 
1474ff879b07SJung-uk Kim 
1475ff879b07SJung-uk Kim /* 14: Generic Redistributor (ACPI 5.1) */
1476ff879b07SJung-uk Kim 
1477ff879b07SJung-uk Kim typedef struct acpi_madt_generic_redistributor
1478ff879b07SJung-uk Kim {
1479ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1480804fe266SJung-uk Kim     UINT8                   Flags;
1481804fe266SJung-uk Kim     UINT8                   Reserved;           /* reserved - must be zero */
1482ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1483ff879b07SJung-uk Kim     UINT32                  Length;
1484ff879b07SJung-uk Kim 
1485ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_REDISTRIBUTOR;
1486ff879b07SJung-uk Kim 
1487804fe266SJung-uk Kim #define ACPI_MADT_GICR_NON_COHERENT     (1)
1488ff879b07SJung-uk Kim 
1489ff879b07SJung-uk Kim /* 15: Generic Translator (ACPI 6.0) */
1490ff879b07SJung-uk Kim 
1491ff879b07SJung-uk Kim typedef struct acpi_madt_generic_translator
1492ff879b07SJung-uk Kim {
1493ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1494804fe266SJung-uk Kim     UINT8                   Flags;
1495804fe266SJung-uk Kim     UINT8                   Reserved;           /* reserved - must be zero */
1496ff879b07SJung-uk Kim     UINT32                  TranslationId;
1497ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1498ff879b07SJung-uk Kim     UINT32                  Reserved2;
1499ff879b07SJung-uk Kim 
1500ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_TRANSLATOR;
1501ff879b07SJung-uk Kim 
1502804fe266SJung-uk Kim #define ACPI_MADT_ITS_NON_COHERENT      (1)
1503804fe266SJung-uk Kim 
1504cfd1ed46SJung-uk Kim /* 16: Multiprocessor wakeup (ACPI 6.4) */
1505cfd1ed46SJung-uk Kim 
1506cfd1ed46SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup
1507cfd1ed46SJung-uk Kim {
1508cfd1ed46SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1509cfd1ed46SJung-uk Kim     UINT16                  MailboxVersion;
1510cfd1ed46SJung-uk Kim     UINT32                  Reserved;           /* reserved - must be zero */
1511cfd1ed46SJung-uk Kim     UINT64                  BaseAddress;
1512cfd1ed46SJung-uk Kim 
1513cfd1ed46SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP;
1514cfd1ed46SJung-uk Kim 
15151970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE        2032
15161970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE  2048
15171970d693SJung-uk Kim 
15181970d693SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup_mailbox
15191970d693SJung-uk Kim {
15201970d693SJung-uk Kim     UINT16                  Command;
15211970d693SJung-uk Kim     UINT16                  Reserved; /* reserved - must be zero */
15221970d693SJung-uk Kim     UINT32                  ApicId;
15231970d693SJung-uk Kim     UINT64                  WakeupVector;
15241970d693SJung-uk Kim     UINT8                   ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */
15251970d693SJung-uk Kim     UINT8                   ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */
15261970d693SJung-uk Kim 
15271970d693SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;
15281970d693SJung-uk Kim 
15291970d693SJung-uk Kim #define ACPI_MP_WAKE_COMMAND_WAKEUP    1
15301970d693SJung-uk Kim 
15319a4bc520SJung-uk Kim /* 17: CPU Core Interrupt Controller (ACPI 6.5) */
15329a4bc520SJung-uk Kim 
15339a4bc520SJung-uk Kim typedef struct acpi_madt_core_pic {
15349a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
15359a4bc520SJung-uk Kim     UINT8                   Version;
15369a4bc520SJung-uk Kim     UINT32                  ProcessorId;
15379a4bc520SJung-uk Kim     UINT32                  CoreId;
15389a4bc520SJung-uk Kim     UINT32                  Flags;
15399a4bc520SJung-uk Kim } ACPI_MADT_CORE_PIC;
15409a4bc520SJung-uk Kim 
15419a4bc520SJung-uk Kim /* Values for Version field above */
15429a4bc520SJung-uk Kim 
15439a4bc520SJung-uk Kim enum AcpiMadtCorePicVersion {
15449a4bc520SJung-uk Kim     ACPI_MADT_CORE_PIC_VERSION_NONE     = 0,
15459a4bc520SJung-uk Kim     ACPI_MADT_CORE_PIC_VERSION_V1       = 1,
15469a4bc520SJung-uk Kim     ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
15479a4bc520SJung-uk Kim };
15489a4bc520SJung-uk Kim 
15499a4bc520SJung-uk Kim /* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */
15509a4bc520SJung-uk Kim 
15519a4bc520SJung-uk Kim typedef struct acpi_madt_lio_pic {
15529a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
15539a4bc520SJung-uk Kim     UINT8                   Version;
15549a4bc520SJung-uk Kim     UINT64                  Address;
15559a4bc520SJung-uk Kim     UINT16                  Size;
15569a4bc520SJung-uk Kim     UINT8                   Cascade[2];
15579a4bc520SJung-uk Kim     UINT32                  CascadeMap[2];
15589a4bc520SJung-uk Kim } ACPI_MADT_LIO_PIC;
15599a4bc520SJung-uk Kim 
15609a4bc520SJung-uk Kim /* Values for Version field above */
15619a4bc520SJung-uk Kim 
15629a4bc520SJung-uk Kim enum AcpiMadtLioPicVersion {
15639a4bc520SJung-uk Kim     ACPI_MADT_LIO_PIC_VERSION_NONE      = 0,
15649a4bc520SJung-uk Kim     ACPI_MADT_LIO_PIC_VERSION_V1        = 1,
15659a4bc520SJung-uk Kim     ACPI_MADT_LIO_PIC_VERSION_RESERVED  = 2	/* 2 and greater are reserved */
15669a4bc520SJung-uk Kim };
15679a4bc520SJung-uk Kim 
15689a4bc520SJung-uk Kim /* 19: HT Interrupt Controller (ACPI 6.5) */
15699a4bc520SJung-uk Kim 
15709a4bc520SJung-uk Kim typedef struct acpi_madt_ht_pic {
15719a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
15729a4bc520SJung-uk Kim     UINT8                   Version;
15739a4bc520SJung-uk Kim     UINT64                  Address;
15749a4bc520SJung-uk Kim     UINT16                  Size;
15759a4bc520SJung-uk Kim     UINT8                   Cascade[8];
15769a4bc520SJung-uk Kim } ACPI_MADT_HT_PIC;
15779a4bc520SJung-uk Kim 
15789a4bc520SJung-uk Kim /* Values for Version field above */
15799a4bc520SJung-uk Kim 
15809a4bc520SJung-uk Kim enum AcpiMadtHtPicVersion {
15819a4bc520SJung-uk Kim     ACPI_MADT_HT_PIC_VERSION_NONE       = 0,
15829a4bc520SJung-uk Kim     ACPI_MADT_HT_PIC_VERSION_V1         = 1,
15839a4bc520SJung-uk Kim     ACPI_MADT_HT_PIC_VERSION_RESERVED   = 2	/* 2 and greater are reserved */
15849a4bc520SJung-uk Kim };
15859a4bc520SJung-uk Kim 
15869a4bc520SJung-uk Kim /* 20: Extend I/O Interrupt Controller (ACPI 6.5) */
15879a4bc520SJung-uk Kim 
15889a4bc520SJung-uk Kim typedef struct acpi_madt_eio_pic {
15899a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
15909a4bc520SJung-uk Kim     UINT8                   Version;
15919a4bc520SJung-uk Kim     UINT8                   Cascade;
15929a4bc520SJung-uk Kim     UINT8                   Node;
15939a4bc520SJung-uk Kim     UINT64                  NodeMap;
15949a4bc520SJung-uk Kim } ACPI_MADT_EIO_PIC;
15959a4bc520SJung-uk Kim 
15969a4bc520SJung-uk Kim /* Values for Version field above */
15979a4bc520SJung-uk Kim 
15989a4bc520SJung-uk Kim enum AcpiMadtEioPicVersion {
15999a4bc520SJung-uk Kim     ACPI_MADT_EIO_PIC_VERSION_NONE      = 0,
16009a4bc520SJung-uk Kim     ACPI_MADT_EIO_PIC_VERSION_V1        = 1,
16019a4bc520SJung-uk Kim     ACPI_MADT_EIO_PIC_VERSION_RESERVED  = 2	/* 2 and greater are reserved */
16029a4bc520SJung-uk Kim };
16039a4bc520SJung-uk Kim 
16049a4bc520SJung-uk Kim /* 21: MSI Interrupt Controller (ACPI 6.5) */
16059a4bc520SJung-uk Kim 
16069a4bc520SJung-uk Kim typedef struct acpi_madt_msi_pic {
16079a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
16089a4bc520SJung-uk Kim     UINT8                   Version;
16099a4bc520SJung-uk Kim     UINT64                  MsgAddress;
16109a4bc520SJung-uk Kim     UINT32                  Start;
16119a4bc520SJung-uk Kim     UINT32                  Count;
16129a4bc520SJung-uk Kim } ACPI_MADT_MSI_PIC;
16139a4bc520SJung-uk Kim 
16149a4bc520SJung-uk Kim /* Values for Version field above */
16159a4bc520SJung-uk Kim 
16169a4bc520SJung-uk Kim enum AcpiMadtMsiPicVersion {
16179a4bc520SJung-uk Kim     ACPI_MADT_MSI_PIC_VERSION_NONE      = 0,
16189a4bc520SJung-uk Kim     ACPI_MADT_MSI_PIC_VERSION_V1        = 1,
16199a4bc520SJung-uk Kim     ACPI_MADT_MSI_PIC_VERSION_RESERVED  = 2	/* 2 and greater are reserved */
16209a4bc520SJung-uk Kim };
16219a4bc520SJung-uk Kim 
16229a4bc520SJung-uk Kim /* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */
16239a4bc520SJung-uk Kim 
16249a4bc520SJung-uk Kim typedef struct acpi_madt_bio_pic {
16259a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
16269a4bc520SJung-uk Kim     UINT8                   Version;
16279a4bc520SJung-uk Kim     UINT64                  Address;
16289a4bc520SJung-uk Kim     UINT16                  Size;
16299a4bc520SJung-uk Kim     UINT16                  Id;
16309a4bc520SJung-uk Kim     UINT16                  GsiBase;
16319a4bc520SJung-uk Kim } ACPI_MADT_BIO_PIC;
16329a4bc520SJung-uk Kim 
16339a4bc520SJung-uk Kim /* Values for Version field above */
16349a4bc520SJung-uk Kim 
16359a4bc520SJung-uk Kim enum AcpiMadtBioPicVersion {
16369a4bc520SJung-uk Kim     ACPI_MADT_BIO_PIC_VERSION_NONE        = 0,
16379a4bc520SJung-uk Kim     ACPI_MADT_BIO_PIC_VERSION_V1          = 1,
16389a4bc520SJung-uk Kim     ACPI_MADT_BIO_PIC_VERSION_RESERVED    = 2	/* 2 and greater are reserved */
16399a4bc520SJung-uk Kim };
16409a4bc520SJung-uk Kim 
16419a4bc520SJung-uk Kim /* 23: LPC Interrupt Controller (ACPI 6.5) */
16429a4bc520SJung-uk Kim 
16439a4bc520SJung-uk Kim typedef struct acpi_madt_lpc_pic {
16449a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
16459a4bc520SJung-uk Kim     UINT8                   Version;
16469a4bc520SJung-uk Kim     UINT64                  Address;
16479a4bc520SJung-uk Kim     UINT16                  Size;
16489a4bc520SJung-uk Kim     UINT8                   Cascade;
16499a4bc520SJung-uk Kim } ACPI_MADT_LPC_PIC;
16509a4bc520SJung-uk Kim 
16519a4bc520SJung-uk Kim /* Values for Version field above */
16529a4bc520SJung-uk Kim 
16539a4bc520SJung-uk Kim enum AcpiMadtLpcPicVersion {
16549a4bc520SJung-uk Kim     ACPI_MADT_LPC_PIC_VERSION_NONE       = 0,
16559a4bc520SJung-uk Kim     ACPI_MADT_LPC_PIC_VERSION_V1         = 1,
16569a4bc520SJung-uk Kim     ACPI_MADT_LPC_PIC_VERSION_RESERVED   = 2	/* 2 and greater are reserved */
16579a4bc520SJung-uk Kim };
16589a4bc520SJung-uk Kim 
1659722b1667SJung-uk Kim /* 24: RISC-V INTC */
166007c64d74SJung-uk Kim typedef struct acpi_madt_rintc {
1661722b1667SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1662722b1667SJung-uk Kim     UINT8                   Version;
1663722b1667SJung-uk Kim     UINT8                   Reserved;
1664722b1667SJung-uk Kim     UINT32                  Flags;
1665722b1667SJung-uk Kim     UINT64                  HartId;
1666722b1667SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
166707c64d74SJung-uk Kim     UINT32                  ExtIntcId;          /* External INTC Id */
166807c64d74SJung-uk Kim     UINT64                  ImsicAddr;          /* IMSIC base address */
166907c64d74SJung-uk Kim     UINT32                  ImsicSize;          /* IMSIC size */
167007c64d74SJung-uk Kim } ACPI_MADT_RINTC;
1671722b1667SJung-uk Kim 
1672722b1667SJung-uk Kim /* Values for RISC-V INTC Version field above */
1673722b1667SJung-uk Kim 
1674722b1667SJung-uk Kim enum AcpiMadtRintcVersion {
1675722b1667SJung-uk Kim     ACPI_MADT_RINTC_VERSION_NONE       = 0,
1676722b1667SJung-uk Kim     ACPI_MADT_RINTC_VERSION_V1         = 1,
1677722b1667SJung-uk Kim     ACPI_MADT_RINTC_VERSION_RESERVED   = 2	/* 2 and greater are reserved */
1678722b1667SJung-uk Kim };
1679722b1667SJung-uk Kim 
168007c64d74SJung-uk Kim /* 25: RISC-V IMSIC */
168107c64d74SJung-uk Kim typedef struct acpi_madt_imsic {
168207c64d74SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
168307c64d74SJung-uk Kim     UINT8                   Version;
168407c64d74SJung-uk Kim     UINT8                   Reserved;
168507c64d74SJung-uk Kim     UINT32                  Flags;
168607c64d74SJung-uk Kim     UINT16                  NumIds;
168707c64d74SJung-uk Kim     UINT16                  NumGuestIds;
168807c64d74SJung-uk Kim     UINT8                   GuestIndexBits;
168907c64d74SJung-uk Kim     UINT8                   HartIndexBits;
169007c64d74SJung-uk Kim     UINT8                   GroupIndexBits;
169107c64d74SJung-uk Kim     UINT8                   GroupIndexShift;
169207c64d74SJung-uk Kim } ACPI_MADT_IMSIC;
169307c64d74SJung-uk Kim 
169407c64d74SJung-uk Kim /* 26: RISC-V APLIC */
169507c64d74SJung-uk Kim typedef struct acpi_madt_aplic {
169607c64d74SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
169707c64d74SJung-uk Kim     UINT8                   Version;
169807c64d74SJung-uk Kim     UINT8                   Id;
169907c64d74SJung-uk Kim     UINT32                  Flags;
170007c64d74SJung-uk Kim     UINT8                   HwId[8];
170107c64d74SJung-uk Kim     UINT16                  NumIdcs;
170207c64d74SJung-uk Kim     UINT16                  NumSources;
170307c64d74SJung-uk Kim     UINT32                  GsiBase;
170407c64d74SJung-uk Kim     UINT64                  BaseAddr;
170507c64d74SJung-uk Kim     UINT32                  Size;
170607c64d74SJung-uk Kim } ACPI_MADT_APLIC;
170707c64d74SJung-uk Kim 
170807c64d74SJung-uk Kim /* 27: RISC-V PLIC */
170907c64d74SJung-uk Kim typedef struct acpi_madt_plic {
171007c64d74SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
171107c64d74SJung-uk Kim     UINT8                   Version;
171207c64d74SJung-uk Kim     UINT8                   Id;
171307c64d74SJung-uk Kim     UINT8                   HwId[8];
171407c64d74SJung-uk Kim     UINT16                  NumIrqs;
171507c64d74SJung-uk Kim     UINT16                  MaxPrio;
171607c64d74SJung-uk Kim     UINT32                  Flags;
171707c64d74SJung-uk Kim     UINT32                  Size;
171807c64d74SJung-uk Kim     UINT64                  BaseAddr;
171907c64d74SJung-uk Kim     UINT32                  GsiBase;
172007c64d74SJung-uk Kim } ACPI_MADT_PLIC;
172107c64d74SJung-uk Kim 
172207c64d74SJung-uk Kim 
17239a4bc520SJung-uk Kim /* 80: OEM data */
1724ab71bbb7SJung-uk Kim 
1725ab71bbb7SJung-uk Kim typedef struct acpi_madt_oem_data
1726ab71bbb7SJung-uk Kim {
1727722b1667SJung-uk Kim     ACPI_FLEX_ARRAY(UINT8,  OemData);
1728ab71bbb7SJung-uk Kim } ACPI_MADT_OEM_DATA;
1729ab71bbb7SJung-uk Kim 
1730ff879b07SJung-uk Kim 
1731ff879b07SJung-uk Kim /*
1732ff879b07SJung-uk Kim  * Common flags fields for MADT subtables
1733ff879b07SJung-uk Kim  */
1734ff879b07SJung-uk Kim 
1735ff879b07SJung-uk Kim /* MADT Local APIC flags */
1736ff879b07SJung-uk Kim 
1737ff879b07SJung-uk Kim #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
17381b7a2680SJung-uk Kim #define ACPI_MADT_ONLINE_CAPABLE    (2)         /* 01: System HW supports enabling processor at runtime */
1739ff879b07SJung-uk Kim 
1740ff879b07SJung-uk Kim /* MADT MPS INTI flags (IntiFlags) */
1741ff879b07SJung-uk Kim 
1742ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
1743ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
1744ff879b07SJung-uk Kim 
1745ff879b07SJung-uk Kim /* Values for MPS INTI flags */
1746ff879b07SJung-uk Kim 
1747ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_CONFORMS       0
1748ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
1749ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_RESERVED       2
1750ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_LOW     3
1751ff879b07SJung-uk Kim 
1752ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_CONFORMS        (0)
1753ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_EDGE            (1<<2)
1754ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
1755ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
1756ff879b07SJung-uk Kim 
1757ff879b07SJung-uk Kim 
1758ff879b07SJung-uk Kim /*******************************************************************************
1759ff879b07SJung-uk Kim  *
1760313a0c13SJung-uk Kim  * MCFG - PCI Memory Mapped Configuration table and subtable
1761d6dd1baeSJung-uk Kim  *        Version 1
1762d6dd1baeSJung-uk Kim  *
1763d6dd1baeSJung-uk Kim  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1764d6dd1baeSJung-uk Kim  *
1765d6dd1baeSJung-uk Kim  ******************************************************************************/
1766d6dd1baeSJung-uk Kim 
1767d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg
1768d6dd1baeSJung-uk Kim {
1769d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1770d6dd1baeSJung-uk Kim     UINT8                   Reserved[8];
1771d6dd1baeSJung-uk Kim 
1772d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG;
1773d6dd1baeSJung-uk Kim 
1774d6dd1baeSJung-uk Kim 
1775d6dd1baeSJung-uk Kim /* Subtable */
1776d6dd1baeSJung-uk Kim 
1777d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation
1778d6dd1baeSJung-uk Kim {
1779d6dd1baeSJung-uk Kim     UINT64                  Address;            /* Base address, processor-relative */
1780d6dd1baeSJung-uk Kim     UINT16                  PciSegment;         /* PCI segment group number */
1781d6dd1baeSJung-uk Kim     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1782d6dd1baeSJung-uk Kim     UINT8                   EndBusNumber;       /* Final PCI Bus number */
1783d6dd1baeSJung-uk Kim     UINT32                  Reserved;
1784d6dd1baeSJung-uk Kim 
1785d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION;
1786d6dd1baeSJung-uk Kim 
1787d6dd1baeSJung-uk Kim 
1788d6dd1baeSJung-uk Kim /*******************************************************************************
1789d6dd1baeSJung-uk Kim  *
1790ca3cf4faSJung-uk Kim  * MCHI - Management Controller Host Interface Table
1791ca3cf4faSJung-uk Kim  *        Version 1
1792ca3cf4faSJung-uk Kim  *
1793ca3cf4faSJung-uk Kim  * Conforms to "Management Component Transport Protocol (MCTP) Host
1794ca3cf4faSJung-uk Kim  * Interface Specification", Revision 1.0.0a, October 13, 2009
1795ca3cf4faSJung-uk Kim  *
1796ca3cf4faSJung-uk Kim  ******************************************************************************/
1797ca3cf4faSJung-uk Kim 
1798ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi
1799ca3cf4faSJung-uk Kim {
1800ca3cf4faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1801ca3cf4faSJung-uk Kim     UINT8                   InterfaceType;
1802ca3cf4faSJung-uk Kim     UINT8                   Protocol;
1803ca3cf4faSJung-uk Kim     UINT64                  ProtocolData;
1804ca3cf4faSJung-uk Kim     UINT8                   InterruptType;
1805ca3cf4faSJung-uk Kim     UINT8                   Gpe;
1806ca3cf4faSJung-uk Kim     UINT8                   PciDeviceFlag;
1807ca3cf4faSJung-uk Kim     UINT32                  GlobalInterrupt;
1808ca3cf4faSJung-uk Kim     ACPI_GENERIC_ADDRESS    ControlRegister;
1809ca3cf4faSJung-uk Kim     UINT8                   PciSegment;
1810ca3cf4faSJung-uk Kim     UINT8                   PciBus;
1811ca3cf4faSJung-uk Kim     UINT8                   PciDevice;
1812ca3cf4faSJung-uk Kim     UINT8                   PciFunction;
1813ca3cf4faSJung-uk Kim 
1814ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI;
1815ca3cf4faSJung-uk Kim 
1816722b1667SJung-uk Kim /*******************************************************************************
1817722b1667SJung-uk Kim  *
1818722b1667SJung-uk Kim  * MPAM - Memory System Resource Partitioning and Monitoring
1819722b1667SJung-uk Kim  *
1820722b1667SJung-uk Kim  * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"
1821722b1667SJung-uk Kim  * Document number: ARM DEN 0065, December, 2022.
1822722b1667SJung-uk Kim  *
1823722b1667SJung-uk Kim  ******************************************************************************/
1824722b1667SJung-uk Kim 
1825722b1667SJung-uk Kim /* MPAM RIS locator types. Table 11, Location types */
1826722b1667SJung-uk Kim enum AcpiMpamLocatorType {
1827722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE    = 0,
1828722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_MEMORY             = 1,
1829722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_SMMU               = 2,
1830722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE       = 3,
1831722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE        = 4,
1832722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_INTERCONNECT       = 5,
1833722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_UNKNOWN            = 0xFF
1834722b1667SJung-uk Kim };
1835722b1667SJung-uk Kim 
1836722b1667SJung-uk Kim /* MPAM Functional dependency descriptor. Table 10 */
1837722b1667SJung-uk Kim typedef struct acpi_mpam_func_deps
1838722b1667SJung-uk Kim {
1839722b1667SJung-uk Kim     UINT32                        Producer;
1840722b1667SJung-uk Kim     UINT32                        Reserved;
1841722b1667SJung-uk Kim } ACPI_MPAM_FUNC_DEPS;
1842722b1667SJung-uk Kim 
1843722b1667SJung-uk Kim /* MPAM Processor cache locator descriptor. Table 13 */
1844722b1667SJung-uk Kim typedef struct acpi_mpam_resource_cache_locator
1845722b1667SJung-uk Kim {
1846722b1667SJung-uk Kim     UINT64                        CacheReference;
1847722b1667SJung-uk Kim     UINT32                        Reserved;
1848722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_CACHE_LOCATOR;
1849722b1667SJung-uk Kim 
1850722b1667SJung-uk Kim /* MPAM Memory locator descriptor. Table 14 */
1851722b1667SJung-uk Kim typedef struct acpi_mpam_resource_memory_locator
1852722b1667SJung-uk Kim {
1853722b1667SJung-uk Kim     UINT64                        ProximityDomain;
1854722b1667SJung-uk Kim     UINT32                        Reserved;
1855722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_MEMORY_LOCATOR;
1856722b1667SJung-uk Kim 
1857722b1667SJung-uk Kim /* MPAM SMMU locator descriptor. Table 15 */
1858722b1667SJung-uk Kim typedef struct acpi_mpam_resource_smmu_locator
1859722b1667SJung-uk Kim {
1860722b1667SJung-uk Kim     UINT64                        SmmuInterface;
1861722b1667SJung-uk Kim     UINT32                        Reserved;
1862722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_SMMU_INTERFACE;
1863722b1667SJung-uk Kim 
1864722b1667SJung-uk Kim /* MPAM Memory-side cache locator descriptor. Table 16 */
1865722b1667SJung-uk Kim typedef struct acpi_mpam_resource_memcache_locator
1866722b1667SJung-uk Kim {
1867722b1667SJung-uk Kim     UINT8                         Reserved[7];
1868722b1667SJung-uk Kim     UINT8                         Level;
1869722b1667SJung-uk Kim     UINT32                        Reference;
1870722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE;
1871722b1667SJung-uk Kim 
1872722b1667SJung-uk Kim /* MPAM ACPI device locator descriptor. Table 17 */
1873722b1667SJung-uk Kim typedef struct acpi_mpam_resource_acpi_locator
1874722b1667SJung-uk Kim {
1875722b1667SJung-uk Kim     UINT64                        AcpiHwId;
1876722b1667SJung-uk Kim     UINT32                        AcpiUniqueId;
1877722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_ACPI_INTERFACE;
1878722b1667SJung-uk Kim 
1879722b1667SJung-uk Kim /* MPAM Interconnect locator descriptor. Table 18 */
1880722b1667SJung-uk Kim typedef struct acpi_mpam_resource_interconnect_locator
1881722b1667SJung-uk Kim {
1882722b1667SJung-uk Kim     UINT64                        InterConnectDescTblOff;
1883722b1667SJung-uk Kim     UINT32                        Reserved;
1884722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE;
1885722b1667SJung-uk Kim 
1886722b1667SJung-uk Kim /* MPAM Locator structure. Table 12 */
1887722b1667SJung-uk Kim typedef struct acpi_mpam_resource_generic_locator
1888722b1667SJung-uk Kim {
1889722b1667SJung-uk Kim     UINT64                        Descriptor1;
1890722b1667SJung-uk Kim     UINT32                        Descriptor2;
1891722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_GENERIC_LOCATOR;
1892722b1667SJung-uk Kim 
1893722b1667SJung-uk Kim typedef union acpi_mpam_resource_locator
1894722b1667SJung-uk Kim {
1895722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_CACHE_LOCATOR             CacheLocator;
1896722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_MEMORY_LOCATOR            MemoryLocator;
1897722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_SMMU_INTERFACE            SmmuLocator;
1898722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE        MemCacheLocator;
1899722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_ACPI_INTERFACE            AcpiLocator;
1900722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE    InterconnectIfcLocator;
1901722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_GENERIC_LOCATOR           GenericLocator;
1902722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_LOCATOR;
1903722b1667SJung-uk Kim 
1904722b1667SJung-uk Kim /* Memory System Component Resource Node Structure Table 9 */
1905722b1667SJung-uk Kim typedef struct acpi_mpam_resource_node
1906722b1667SJung-uk Kim {
1907722b1667SJung-uk Kim     UINT32                        Identifier;
1908722b1667SJung-uk Kim     UINT8                         RISIndex;
1909722b1667SJung-uk Kim     UINT16                        Reserved1;
1910722b1667SJung-uk Kim     UINT8                         LocatorType;
1911722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_LOCATOR    Locator;
1912722b1667SJung-uk Kim     UINT32                        NumFunctionalDeps;
1913722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_NODE;
1914722b1667SJung-uk Kim 
1915722b1667SJung-uk Kim /* Memory System Component (MSC) Node Structure. Table 4 */
1916722b1667SJung-uk Kim typedef struct acpi_mpam_msc_node
1917722b1667SJung-uk Kim {
1918722b1667SJung-uk Kim     UINT16                     Length;
1919722b1667SJung-uk Kim     UINT8                      InterfaceType;
1920722b1667SJung-uk Kim     UINT8                      Reserved;
1921722b1667SJung-uk Kim     UINT32                     Identifier;
1922722b1667SJung-uk Kim     UINT64                     BaseAddress;
1923722b1667SJung-uk Kim     UINT32                     MMIOSize;
1924722b1667SJung-uk Kim     UINT32                     OverflowInterrupt;
1925722b1667SJung-uk Kim     UINT32                     OverflowInterruptFlags;
1926722b1667SJung-uk Kim     UINT32                     Reserved1;
1927722b1667SJung-uk Kim     UINT32                     OverflowInterruptAffinity;
1928722b1667SJung-uk Kim     UINT32                     ErrorInterrupt;
1929722b1667SJung-uk Kim     UINT32                     ErrorInterruptFlags;
1930722b1667SJung-uk Kim     UINT32                     Reserved2;
1931722b1667SJung-uk Kim     UINT32                     ErrorInterruptAffinity;
1932722b1667SJung-uk Kim     UINT32                     MaxNrdyUsec;
1933722b1667SJung-uk Kim     UINT64                     HardwareIdLinkedDevice;
1934722b1667SJung-uk Kim     UINT32                     InstanceIdLinkedDevice;
1935*92f570c3SJung-uk Kim     UINT32                     NumResourceNodes;
1936722b1667SJung-uk Kim } ACPI_MPAM_MSC_NODE;
1937722b1667SJung-uk Kim 
1938722b1667SJung-uk Kim typedef struct acpi_table_mpam
1939722b1667SJung-uk Kim {
1940722b1667SJung-uk Kim     ACPI_TABLE_HEADER         Header;          /* Common ACPI table header */
1941722b1667SJung-uk Kim } ACPI_TABLE_MPAM;
1942ca3cf4faSJung-uk Kim 
1943ca3cf4faSJung-uk Kim /*******************************************************************************
1944ca3cf4faSJung-uk Kim  *
1945ff879b07SJung-uk Kim  * MPST - Memory Power State Table (ACPI 5.0)
1946ff879b07SJung-uk Kim  *        Version 1
1947ff879b07SJung-uk Kim  *
1948ff879b07SJung-uk Kim  ******************************************************************************/
1949ff879b07SJung-uk Kim 
1950ff879b07SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \
1951ff879b07SJung-uk Kim     UINT8                   ChannelId; \
1952ff879b07SJung-uk Kim     UINT8                   Reserved1[3]; \
1953ff879b07SJung-uk Kim     UINT16                  PowerNodeCount; \
1954ff879b07SJung-uk Kim     UINT16                  Reserved2;
1955ff879b07SJung-uk Kim 
1956ff879b07SJung-uk Kim /* Main table */
1957ff879b07SJung-uk Kim 
1958ff879b07SJung-uk Kim typedef struct acpi_table_mpst
1959ff879b07SJung-uk Kim {
1960ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1961ff879b07SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
1962ff879b07SJung-uk Kim 
1963ff879b07SJung-uk Kim } ACPI_TABLE_MPST;
1964ff879b07SJung-uk Kim 
1965ff879b07SJung-uk Kim 
1966ff879b07SJung-uk Kim /* Memory Platform Communication Channel Info */
1967ff879b07SJung-uk Kim 
1968ff879b07SJung-uk Kim typedef struct acpi_mpst_channel
1969ff879b07SJung-uk Kim {
1970ff879b07SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
1971ff879b07SJung-uk Kim 
1972ff879b07SJung-uk Kim } ACPI_MPST_CHANNEL;
1973ff879b07SJung-uk Kim 
1974ff879b07SJung-uk Kim 
1975ff879b07SJung-uk Kim /* Memory Power Node Structure */
1976ff879b07SJung-uk Kim 
1977ff879b07SJung-uk Kim typedef struct acpi_mpst_power_node
1978ff879b07SJung-uk Kim {
1979ff879b07SJung-uk Kim     UINT8                   Flags;
1980ff879b07SJung-uk Kim     UINT8                   Reserved1;
1981ff879b07SJung-uk Kim     UINT16                  NodeId;
1982ff879b07SJung-uk Kim     UINT32                  Length;
1983ff879b07SJung-uk Kim     UINT64                  RangeAddress;
1984ff879b07SJung-uk Kim     UINT64                  RangeLength;
1985ff879b07SJung-uk Kim     UINT32                  NumPowerStates;
1986ff879b07SJung-uk Kim     UINT32                  NumPhysicalComponents;
1987ff879b07SJung-uk Kim 
1988ff879b07SJung-uk Kim } ACPI_MPST_POWER_NODE;
1989ff879b07SJung-uk Kim 
1990ff879b07SJung-uk Kim /* Values for Flags field above */
1991ff879b07SJung-uk Kim 
1992ff879b07SJung-uk Kim #define ACPI_MPST_ENABLED               1
1993ff879b07SJung-uk Kim #define ACPI_MPST_POWER_MANAGED         2
1994ff879b07SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE      4
1995ff879b07SJung-uk Kim 
1996ff879b07SJung-uk Kim 
1997ff879b07SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */
1998ff879b07SJung-uk Kim 
1999ff879b07SJung-uk Kim typedef struct acpi_mpst_power_state
2000ff879b07SJung-uk Kim {
2001ff879b07SJung-uk Kim     UINT8                   PowerState;
2002ff879b07SJung-uk Kim     UINT8                   InfoIndex;
2003ff879b07SJung-uk Kim 
2004ff879b07SJung-uk Kim } ACPI_MPST_POWER_STATE;
2005ff879b07SJung-uk Kim 
2006ff879b07SJung-uk Kim 
2007ff879b07SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */
2008ff879b07SJung-uk Kim 
2009ff879b07SJung-uk Kim typedef struct acpi_mpst_component
2010ff879b07SJung-uk Kim {
2011ff879b07SJung-uk Kim     UINT16                  ComponentId;
2012ff879b07SJung-uk Kim 
2013ff879b07SJung-uk Kim } ACPI_MPST_COMPONENT;
2014ff879b07SJung-uk Kim 
2015ff879b07SJung-uk Kim 
2016ff879b07SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
2017ff879b07SJung-uk Kim 
2018ff879b07SJung-uk Kim typedef struct acpi_mpst_data_hdr
2019ff879b07SJung-uk Kim {
2020ff879b07SJung-uk Kim     UINT16                  CharacteristicsCount;
2021ff879b07SJung-uk Kim     UINT16                  Reserved;
2022ff879b07SJung-uk Kim 
2023ff879b07SJung-uk Kim } ACPI_MPST_DATA_HDR;
2024ff879b07SJung-uk Kim 
2025ff879b07SJung-uk Kim typedef struct acpi_mpst_power_data
2026ff879b07SJung-uk Kim {
2027ff879b07SJung-uk Kim     UINT8                   StructureId;
2028ff879b07SJung-uk Kim     UINT8                   Flags;
2029ff879b07SJung-uk Kim     UINT16                  Reserved1;
2030ff879b07SJung-uk Kim     UINT32                  AveragePower;
2031ff879b07SJung-uk Kim     UINT32                  PowerSaving;
2032ff879b07SJung-uk Kim     UINT64                  ExitLatency;
2033ff879b07SJung-uk Kim     UINT64                  Reserved2;
2034ff879b07SJung-uk Kim 
2035ff879b07SJung-uk Kim } ACPI_MPST_POWER_DATA;
2036ff879b07SJung-uk Kim 
2037ff879b07SJung-uk Kim /* Values for Flags field above */
2038ff879b07SJung-uk Kim 
2039ff879b07SJung-uk Kim #define ACPI_MPST_PRESERVE              1
2040ff879b07SJung-uk Kim #define ACPI_MPST_AUTOENTRY             2
2041ff879b07SJung-uk Kim #define ACPI_MPST_AUTOEXIT              4
2042ff879b07SJung-uk Kim 
2043ff879b07SJung-uk Kim 
2044ff879b07SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */
2045ff879b07SJung-uk Kim 
2046ff879b07SJung-uk Kim typedef struct acpi_mpst_shared
2047ff879b07SJung-uk Kim {
2048ff879b07SJung-uk Kim     UINT32                  Signature;
2049ff879b07SJung-uk Kim     UINT16                  PccCommand;
2050ff879b07SJung-uk Kim     UINT16                  PccStatus;
2051ff879b07SJung-uk Kim     UINT32                  CommandRegister;
2052ff879b07SJung-uk Kim     UINT32                  StatusRegister;
2053ff879b07SJung-uk Kim     UINT32                  PowerStateId;
2054ff879b07SJung-uk Kim     UINT32                  PowerNodeId;
2055ff879b07SJung-uk Kim     UINT64                  EnergyConsumed;
2056ff879b07SJung-uk Kim     UINT64                  AveragePower;
2057ff879b07SJung-uk Kim 
2058ff879b07SJung-uk Kim } ACPI_MPST_SHARED;
2059ff879b07SJung-uk Kim 
2060ff879b07SJung-uk Kim 
2061ff879b07SJung-uk Kim /*******************************************************************************
2062ff879b07SJung-uk Kim  *
2063ff879b07SJung-uk Kim  * MSCT - Maximum System Characteristics Table (ACPI 4.0)
2064ff879b07SJung-uk Kim  *        Version 1
2065ff879b07SJung-uk Kim  *
2066ff879b07SJung-uk Kim  ******************************************************************************/
2067ff879b07SJung-uk Kim 
2068ff879b07SJung-uk Kim typedef struct acpi_table_msct
2069ff879b07SJung-uk Kim {
2070ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2071ff879b07SJung-uk Kim     UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
2072ff879b07SJung-uk Kim     UINT32                  MaxProximityDomains;/* Max number of proximity domains */
2073ff879b07SJung-uk Kim     UINT32                  MaxClockDomains;    /* Max number of clock domains */
2074ff879b07SJung-uk Kim     UINT64                  MaxAddress;         /* Max physical address in system */
2075ff879b07SJung-uk Kim 
2076ff879b07SJung-uk Kim } ACPI_TABLE_MSCT;
2077ff879b07SJung-uk Kim 
2078ff879b07SJung-uk Kim 
2079ff879b07SJung-uk Kim /* Subtable - Maximum Proximity Domain Information. Version 1 */
2080ff879b07SJung-uk Kim 
2081ff879b07SJung-uk Kim typedef struct acpi_msct_proximity
2082ff879b07SJung-uk Kim {
2083ff879b07SJung-uk Kim     UINT8                   Revision;
2084ff879b07SJung-uk Kim     UINT8                   Length;
2085ff879b07SJung-uk Kim     UINT32                  RangeStart;         /* Start of domain range */
2086ff879b07SJung-uk Kim     UINT32                  RangeEnd;           /* End of domain range */
2087ff879b07SJung-uk Kim     UINT32                  ProcessorCapacity;
2088ff879b07SJung-uk Kim     UINT64                  MemoryCapacity;     /* In bytes */
2089ff879b07SJung-uk Kim 
2090ff879b07SJung-uk Kim } ACPI_MSCT_PROXIMITY;
2091ff879b07SJung-uk Kim 
2092ff879b07SJung-uk Kim 
2093ff879b07SJung-uk Kim /*******************************************************************************
2094ff879b07SJung-uk Kim  *
20957cf3e94aSJung-uk Kim  * MSDM - Microsoft Data Management table
20967cf3e94aSJung-uk Kim  *
20977cf3e94aSJung-uk Kim  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
20987cf3e94aSJung-uk Kim  * November 29, 2011. Copyright 2011 Microsoft
20997cf3e94aSJung-uk Kim  *
21007cf3e94aSJung-uk Kim  ******************************************************************************/
21017cf3e94aSJung-uk Kim 
21027cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */
21037cf3e94aSJung-uk Kim 
21047cf3e94aSJung-uk Kim typedef struct acpi_table_msdm
21057cf3e94aSJung-uk Kim {
21067cf3e94aSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
21077cf3e94aSJung-uk Kim 
21087cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM;
21097cf3e94aSJung-uk Kim 
21107cf3e94aSJung-uk Kim 
21117cf3e94aSJung-uk Kim /*******************************************************************************
21127cf3e94aSJung-uk Kim  *
2113ff879b07SJung-uk Kim  * NFIT - NVDIMM Interface Table (ACPI 6.0+)
2114ff879b07SJung-uk Kim  *        Version 1
2115ff879b07SJung-uk Kim  *
2116ff879b07SJung-uk Kim  ******************************************************************************/
2117ff879b07SJung-uk Kim 
2118ff879b07SJung-uk Kim typedef struct acpi_table_nfit
2119ff879b07SJung-uk Kim {
2120ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2121ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
2122ff879b07SJung-uk Kim 
2123ff879b07SJung-uk Kim } ACPI_TABLE_NFIT;
2124ff879b07SJung-uk Kim 
2125ff879b07SJung-uk Kim /* Subtable header for NFIT */
2126ff879b07SJung-uk Kim 
2127ff879b07SJung-uk Kim typedef struct acpi_nfit_header
2128ff879b07SJung-uk Kim {
2129ff879b07SJung-uk Kim     UINT16                   Type;
2130ff879b07SJung-uk Kim     UINT16                   Length;
2131ff879b07SJung-uk Kim 
2132ff879b07SJung-uk Kim } ACPI_NFIT_HEADER;
2133ff879b07SJung-uk Kim 
2134ff879b07SJung-uk Kim 
2135ff879b07SJung-uk Kim /* Values for subtable type in ACPI_NFIT_HEADER */
2136ff879b07SJung-uk Kim 
2137ff879b07SJung-uk Kim enum AcpiNfitType
2138ff879b07SJung-uk Kim {
2139ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_SYSTEM_ADDRESS       = 0,
2140ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_MEMORY_MAP           = 1,
2141ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_INTERLEAVE           = 2,
2142ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_SMBIOS               = 3,
2143ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_CONTROL_REGION       = 4,
2144ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_DATA_REGION          = 5,
2145ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_FLUSH_ADDRESS        = 6,
2146ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_CAPABILITIES         = 7,
2147ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_RESERVED             = 8     /* 8 and greater are reserved */
2148ff879b07SJung-uk Kim };
2149ff879b07SJung-uk Kim 
2150ff879b07SJung-uk Kim /*
2151ff879b07SJung-uk Kim  * NFIT Subtables
2152ff879b07SJung-uk Kim  */
2153ff879b07SJung-uk Kim 
2154ff879b07SJung-uk Kim /* 0: System Physical Address Range Structure */
2155ff879b07SJung-uk Kim 
2156ff879b07SJung-uk Kim typedef struct acpi_nfit_system_address
2157ff879b07SJung-uk Kim {
2158ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2159ff879b07SJung-uk Kim     UINT16                  RangeIndex;
2160ff879b07SJung-uk Kim     UINT16                  Flags;
2161ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
2162ff879b07SJung-uk Kim     UINT32                  ProximityDomain;
2163ff879b07SJung-uk Kim     UINT8                   RangeGuid[16];
2164ff879b07SJung-uk Kim     UINT64                  Address;
2165ff879b07SJung-uk Kim     UINT64                  Length;
2166ff879b07SJung-uk Kim     UINT64                  MemoryMapping;
2167cfd1ed46SJung-uk Kim     UINT64                  LocationCookie;     /* ACPI 6.4 */
2168ff879b07SJung-uk Kim 
2169ff879b07SJung-uk Kim } ACPI_NFIT_SYSTEM_ADDRESS;
2170ff879b07SJung-uk Kim 
2171ff879b07SJung-uk Kim /* Flags */
2172ff879b07SJung-uk Kim 
2173ff879b07SJung-uk Kim #define ACPI_NFIT_ADD_ONLINE_ONLY       (1)     /* 00: Add/Online Operation Only */
2174ff879b07SJung-uk Kim #define ACPI_NFIT_PROXIMITY_VALID       (1<<1)  /* 01: Proximity Domain Valid */
2175cfd1ed46SJung-uk Kim #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2)  /* 02: SPA location cookie valid (ACPI 6.4) */
2176ff879b07SJung-uk Kim 
2177ff879b07SJung-uk Kim /* Range Type GUIDs appear in the include/acuuid.h file */
2178ff879b07SJung-uk Kim 
2179ff879b07SJung-uk Kim 
2180ff879b07SJung-uk Kim /* 1: Memory Device to System Address Range Map Structure */
2181ff879b07SJung-uk Kim 
2182ff879b07SJung-uk Kim typedef struct acpi_nfit_memory_map
2183ff879b07SJung-uk Kim {
2184ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2185ff879b07SJung-uk Kim     UINT32                  DeviceHandle;
2186ff879b07SJung-uk Kim     UINT16                  PhysicalId;
2187ff879b07SJung-uk Kim     UINT16                  RegionId;
2188ff879b07SJung-uk Kim     UINT16                  RangeIndex;
2189ff879b07SJung-uk Kim     UINT16                  RegionIndex;
2190ff879b07SJung-uk Kim     UINT64                  RegionSize;
2191ff879b07SJung-uk Kim     UINT64                  RegionOffset;
2192ff879b07SJung-uk Kim     UINT64                  Address;
2193ff879b07SJung-uk Kim     UINT16                  InterleaveIndex;
2194ff879b07SJung-uk Kim     UINT16                  InterleaveWays;
2195ff879b07SJung-uk Kim     UINT16                  Flags;
2196ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
2197ff879b07SJung-uk Kim 
2198ff879b07SJung-uk Kim } ACPI_NFIT_MEMORY_MAP;
2199ff879b07SJung-uk Kim 
2200ff879b07SJung-uk Kim /* Flags */
2201ff879b07SJung-uk Kim 
2202ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_SAVE_FAILED       (1)     /* 00: Last SAVE to Memory Device failed */
2203ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)  /* 01: Last RESTORE from Memory Device failed */
2204ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)  /* 02: Platform flush failed */
2205ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)  /* 03: Memory Device is not armed */
2206ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)  /* 04: Memory Device observed SMART/health events */
2207ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)  /* 05: SMART/health events enabled */
2208ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)  /* 06: Mapping to SPA failed */
2209ff879b07SJung-uk Kim 
2210ff879b07SJung-uk Kim 
2211ff879b07SJung-uk Kim /* 2: Interleave Structure */
2212ff879b07SJung-uk Kim 
2213ff879b07SJung-uk Kim typedef struct acpi_nfit_interleave
2214ff879b07SJung-uk Kim {
2215ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2216ff879b07SJung-uk Kim     UINT16                  InterleaveIndex;
2217ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
2218ff879b07SJung-uk Kim     UINT32                  LineCount;
2219ff879b07SJung-uk Kim     UINT32                  LineSize;
2220722b1667SJung-uk Kim     UINT32                  LineOffset[];       /* Variable length */
2221ff879b07SJung-uk Kim 
2222ff879b07SJung-uk Kim } ACPI_NFIT_INTERLEAVE;
2223ff879b07SJung-uk Kim 
2224ff879b07SJung-uk Kim 
2225ff879b07SJung-uk Kim /* 3: SMBIOS Management Information Structure */
2226ff879b07SJung-uk Kim 
2227ff879b07SJung-uk Kim typedef struct acpi_nfit_smbios
2228ff879b07SJung-uk Kim {
2229ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2230ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
2231722b1667SJung-uk Kim     UINT8                   Data[];             /* Variable length */
2232ff879b07SJung-uk Kim 
2233ff879b07SJung-uk Kim } ACPI_NFIT_SMBIOS;
2234ff879b07SJung-uk Kim 
2235ff879b07SJung-uk Kim 
2236ff879b07SJung-uk Kim /* 4: NVDIMM Control Region Structure */
2237ff879b07SJung-uk Kim 
2238ff879b07SJung-uk Kim typedef struct acpi_nfit_control_region
2239ff879b07SJung-uk Kim {
2240ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2241ff879b07SJung-uk Kim     UINT16                  RegionIndex;
2242ff879b07SJung-uk Kim     UINT16                  VendorId;
2243ff879b07SJung-uk Kim     UINT16                  DeviceId;
2244ff879b07SJung-uk Kim     UINT16                  RevisionId;
2245ff879b07SJung-uk Kim     UINT16                  SubsystemVendorId;
2246ff879b07SJung-uk Kim     UINT16                  SubsystemDeviceId;
2247ff879b07SJung-uk Kim     UINT16                  SubsystemRevisionId;
2248ff879b07SJung-uk Kim     UINT8                   ValidFields;
2249ff879b07SJung-uk Kim     UINT8                   ManufacturingLocation;
2250ff879b07SJung-uk Kim     UINT16                  ManufacturingDate;
2251ff879b07SJung-uk Kim     UINT8                   Reserved[2];        /* Reserved, must be zero */
2252ff879b07SJung-uk Kim     UINT32                  SerialNumber;
2253ff879b07SJung-uk Kim     UINT16                  Code;
2254ff879b07SJung-uk Kim     UINT16                  Windows;
2255ff879b07SJung-uk Kim     UINT64                  WindowSize;
2256ff879b07SJung-uk Kim     UINT64                  CommandOffset;
2257ff879b07SJung-uk Kim     UINT64                  CommandSize;
2258ff879b07SJung-uk Kim     UINT64                  StatusOffset;
2259ff879b07SJung-uk Kim     UINT64                  StatusSize;
2260ff879b07SJung-uk Kim     UINT16                  Flags;
2261ff879b07SJung-uk Kim     UINT8                   Reserved1[6];       /* Reserved, must be zero */
2262ff879b07SJung-uk Kim 
2263ff879b07SJung-uk Kim } ACPI_NFIT_CONTROL_REGION;
2264ff879b07SJung-uk Kim 
2265ff879b07SJung-uk Kim /* Flags */
2266ff879b07SJung-uk Kim 
2267ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_BUFFERED          (1)     /* Block Data Windows implementation is buffered */
2268ff879b07SJung-uk Kim 
2269ff879b07SJung-uk Kim /* ValidFields bits */
2270ff879b07SJung-uk Kim 
2271ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)     /* Manufacturing fields are valid */
2272ff879b07SJung-uk Kim 
2273ff879b07SJung-uk Kim 
2274ff879b07SJung-uk Kim /* 5: NVDIMM Block Data Window Region Structure */
2275ff879b07SJung-uk Kim 
2276ff879b07SJung-uk Kim typedef struct acpi_nfit_data_region
2277ff879b07SJung-uk Kim {
2278ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2279ff879b07SJung-uk Kim     UINT16                  RegionIndex;
2280ff879b07SJung-uk Kim     UINT16                  Windows;
2281ff879b07SJung-uk Kim     UINT64                  Offset;
2282ff879b07SJung-uk Kim     UINT64                  Size;
2283ff879b07SJung-uk Kim     UINT64                  Capacity;
2284ff879b07SJung-uk Kim     UINT64                  StartAddress;
2285ff879b07SJung-uk Kim 
2286ff879b07SJung-uk Kim } ACPI_NFIT_DATA_REGION;
2287ff879b07SJung-uk Kim 
2288ff879b07SJung-uk Kim 
2289ff879b07SJung-uk Kim /* 6: Flush Hint Address Structure */
2290ff879b07SJung-uk Kim 
2291ff879b07SJung-uk Kim typedef struct acpi_nfit_flush_address
2292ff879b07SJung-uk Kim {
2293ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2294ff879b07SJung-uk Kim     UINT32                  DeviceHandle;
2295ff879b07SJung-uk Kim     UINT16                  HintCount;
2296ff879b07SJung-uk Kim     UINT8                   Reserved[6];        /* Reserved, must be zero */
2297722b1667SJung-uk Kim     UINT64                  HintAddress[];      /* Variable length */
2298ff879b07SJung-uk Kim 
2299ff879b07SJung-uk Kim } ACPI_NFIT_FLUSH_ADDRESS;
2300ff879b07SJung-uk Kim 
2301ff879b07SJung-uk Kim 
2302ff879b07SJung-uk Kim /* 7: Platform Capabilities Structure */
2303ff879b07SJung-uk Kim 
2304ff879b07SJung-uk Kim typedef struct acpi_nfit_capabilities
2305ff879b07SJung-uk Kim {
2306ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2307ff879b07SJung-uk Kim     UINT8                   HighestCapability;
2308ff879b07SJung-uk Kim     UINT8                   Reserved[3];       /* Reserved, must be zero */
2309ff879b07SJung-uk Kim     UINT32                  Capabilities;
2310ff879b07SJung-uk Kim     UINT32                  Reserved2;
2311ff879b07SJung-uk Kim 
2312ff879b07SJung-uk Kim } ACPI_NFIT_CAPABILITIES;
2313ff879b07SJung-uk Kim 
2314ff879b07SJung-uk Kim /* Capabilities Flags */
2315ff879b07SJung-uk Kim 
2316ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)     /* 00: Cache Flush to NVDIMM capable */
2317ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)  /* 01: Memory Flush to NVDIMM capable */
2318ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)  /* 02: Memory Mirroring capable */
2319ff879b07SJung-uk Kim 
2320ff879b07SJung-uk Kim 
2321ff879b07SJung-uk Kim /*
2322ff879b07SJung-uk Kim  * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
2323ff879b07SJung-uk Kim  */
2324ff879b07SJung-uk Kim typedef struct nfit_device_handle
2325ff879b07SJung-uk Kim {
2326ff879b07SJung-uk Kim     UINT32                  Handle;
2327ff879b07SJung-uk Kim 
2328ff879b07SJung-uk Kim } NFIT_DEVICE_HANDLE;
2329ff879b07SJung-uk Kim 
2330ff879b07SJung-uk Kim /* Device handle construction and extraction macros */
2331ff879b07SJung-uk Kim 
2332ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
2333ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
2334ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
2335ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
2336ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
2337ff879b07SJung-uk Kim 
2338ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
2339ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
2340ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_OFFSET              8
2341ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_OFFSET              12
2342ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_OFFSET                16
2343ff879b07SJung-uk Kim 
2344ff879b07SJung-uk Kim /* Macro to construct a NFIT/NVDIMM device handle */
2345ff879b07SJung-uk Kim 
2346ff879b07SJung-uk Kim #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
2347ff879b07SJung-uk Kim     ((dimm)                                         | \
2348ff879b07SJung-uk Kim     ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
2349ff879b07SJung-uk Kim     ((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
2350ff879b07SJung-uk Kim     ((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
2351ff879b07SJung-uk Kim     ((node)    << ACPI_NFIT_NODE_ID_OFFSET))
2352ff879b07SJung-uk Kim 
2353ff879b07SJung-uk Kim /* Macros to extract individual fields from a NFIT/NVDIMM device handle */
2354ff879b07SJung-uk Kim 
2355ff879b07SJung-uk Kim #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
2356ff879b07SJung-uk Kim     ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
2357ff879b07SJung-uk Kim 
2358ff879b07SJung-uk Kim #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
2359ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
2360ff879b07SJung-uk Kim 
2361ff879b07SJung-uk Kim #define ACPI_NFIT_GET_MEMORY_ID(handle) \
2362ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
2363ff879b07SJung-uk Kim 
2364ff879b07SJung-uk Kim #define ACPI_NFIT_GET_SOCKET_ID(handle) \
2365ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
2366ff879b07SJung-uk Kim 
2367ff879b07SJung-uk Kim #define ACPI_NFIT_GET_NODE_ID(handle) \
2368ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
2369ff879b07SJung-uk Kim 
2370ff879b07SJung-uk Kim 
2371ff879b07SJung-uk Kim /*******************************************************************************
2372ff879b07SJung-uk Kim  *
23731b7a2680SJung-uk Kim  * NHLT - Non HDAudio Link Table
2374804fe266SJung-uk Kim  *        Version 1
23751b7a2680SJung-uk Kim  *
23761b7a2680SJung-uk Kim  ******************************************************************************/
23771b7a2680SJung-uk Kim 
23781b7a2680SJung-uk Kim typedef struct acpi_table_nhlt
23791b7a2680SJung-uk Kim {
23801b7a2680SJung-uk Kim     ACPI_TABLE_HEADER              Header;          /* Common ACPI table header */
2381804fe266SJung-uk Kim     UINT8                          EndpointsCount;
2382804fe266SJung-uk Kim     /*
2383804fe266SJung-uk Kim      * ACPI_NHLT_ENDPOINT          Endpoints[];
2384804fe266SJung-uk Kim      * ACPI_NHLT_CONFIG            OEDConfig;
2385804fe266SJung-uk Kim      */
23861b7a2680SJung-uk Kim 
23871b7a2680SJung-uk Kim } ACPI_TABLE_NHLT;
23881b7a2680SJung-uk Kim 
23891b7a2680SJung-uk Kim typedef struct acpi_nhlt_endpoint
23901b7a2680SJung-uk Kim {
2391804fe266SJung-uk Kim     UINT32                         Length;
23921b7a2680SJung-uk Kim     UINT8                          LinkType;
23931b7a2680SJung-uk Kim     UINT8                          InstanceId;
23941b7a2680SJung-uk Kim     UINT16                         VendorId;
23951b7a2680SJung-uk Kim     UINT16                         DeviceId;
23961b7a2680SJung-uk Kim     UINT16                         RevisionId;
23971b7a2680SJung-uk Kim     UINT32                         SubsystemId;
23981b7a2680SJung-uk Kim     UINT8                          DeviceType;
23991b7a2680SJung-uk Kim     UINT8                          Direction;
24001b7a2680SJung-uk Kim     UINT8                          VirtualBusId;
2401804fe266SJung-uk Kim     /*
2402804fe266SJung-uk Kim      * ACPI_NHLT_CONFIG            DeviceConfig;
2403804fe266SJung-uk Kim      * ACPI_NHLT_FORMATS_CONFIG    FormatsConfig;
2404804fe266SJung-uk Kim      * ACPI_NHLT_DEVICES_INFO      DevicesInfo;
2405804fe266SJung-uk Kim      */
24061b7a2680SJung-uk Kim 
24071b7a2680SJung-uk Kim } ACPI_NHLT_ENDPOINT;
24081b7a2680SJung-uk Kim 
2409804fe266SJung-uk Kim /* Values for LinkType field above */
24101b7a2680SJung-uk Kim 
2411804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_HDA               0
2412804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_DSP               1
2413804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_PDM               2
2414804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_SSP               3
2415804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_SLIMBUS           4
2416804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_SDW               5
2417804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_UAOL              6
24181b7a2680SJung-uk Kim 
24191b7a2680SJung-uk Kim /* Values for DeviceId field above */
24201b7a2680SJung-uk Kim 
2421804fe266SJung-uk Kim #define ACPI_NHLT_DEVICEID_DMIC              0xAE20
2422804fe266SJung-uk Kim #define ACPI_NHLT_DEVICEID_BT                0xAE30
2423804fe266SJung-uk Kim #define ACPI_NHLT_DEVICEID_I2S               0xAE34
24241b7a2680SJung-uk Kim 
24251b7a2680SJung-uk Kim /* Values for DeviceType field above */
24261b7a2680SJung-uk Kim 
2427804fe266SJung-uk Kim /* Device types unique to endpoint of LinkType=PDM */
2428804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_PDM             0
2429804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_PDM_SKL         1
2430804fe266SJung-uk Kim /* Device types unique to endpoint of LinkType=SSP */
2431804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_BT              0
2432804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_FM              1
2433804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_MODEM           2
2434804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_CODEC           4
24351b7a2680SJung-uk Kim 
24361b7a2680SJung-uk Kim /* Values for Direction field above */
24371b7a2680SJung-uk Kim 
24381b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_RENDER                 0
24391b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_CAPTURE                1
24401b7a2680SJung-uk Kim 
2441804fe266SJung-uk Kim typedef struct acpi_nhlt_config
24421b7a2680SJung-uk Kim {
24431b7a2680SJung-uk Kim     UINT32                         CapabilitiesSize;
2444804fe266SJung-uk Kim     UINT8                          Capabilities[1];
2445804fe266SJung-uk Kim 
2446804fe266SJung-uk Kim } ACPI_NHLT_CONFIG;
2447804fe266SJung-uk Kim 
2448804fe266SJung-uk Kim typedef struct acpi_nhlt_gendevice_config
2449804fe266SJung-uk Kim {
24501b7a2680SJung-uk Kim     UINT8                          VirtualSlot;
24511b7a2680SJung-uk Kim     UINT8                          ConfigType;
24521b7a2680SJung-uk Kim 
2453804fe266SJung-uk Kim } ACPI_NHLT_GENDEVICE_CONFIG;
24541b7a2680SJung-uk Kim 
2455804fe266SJung-uk Kim /* Values for ConfigType field above */
2456ab71bbb7SJung-uk Kim 
2457804fe266SJung-uk Kim #define ACPI_NHLT_CONFIGTYPE_GENERIC         0
2458804fe266SJung-uk Kim #define ACPI_NHLT_CONFIGTYPE_MICARRAY        1
24591b7a2680SJung-uk Kim 
2460804fe266SJung-uk Kim typedef struct acpi_nhlt_micdevice_config
2461ab71bbb7SJung-uk Kim {
2462ab71bbb7SJung-uk Kim     UINT8                          VirtualSlot;
2463ab71bbb7SJung-uk Kim     UINT8                          ConfigType;
2464ab71bbb7SJung-uk Kim     UINT8                          ArrayType;
2465ab71bbb7SJung-uk Kim 
2466804fe266SJung-uk Kim } ACPI_NHLT_MICDEVICE_CONFIG;
2467ab71bbb7SJung-uk Kim 
2468804fe266SJung-uk Kim /* Values for ArrayType field above */
24691b7a2680SJung-uk Kim 
2470804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL    0xA
2471804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG      0xB
2472804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1     0xC
2473804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED  0xD
2474804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2     0xE
2475804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_VENDOR           0xF
24761b7a2680SJung-uk Kim 
24771b7a2680SJung-uk Kim typedef struct acpi_nhlt_vendor_mic_config
24781b7a2680SJung-uk Kim {
24791b7a2680SJung-uk Kim     UINT8                          Type;
24801b7a2680SJung-uk Kim     UINT8                          Panel;
2481ab71bbb7SJung-uk Kim     UINT16                         SpeakerPositionDistance;   /* mm */
2482ab71bbb7SJung-uk Kim     UINT16                         HorizontalOffset;          /* mm */
2483ab71bbb7SJung-uk Kim     UINT16                         VerticalOffset;            /* mm */
2484ab71bbb7SJung-uk Kim     UINT8                          FrequencyLowBand;          /* 5*Hz */
2485ab71bbb7SJung-uk Kim     UINT8                          FrequencyHighBand;         /* 500*Hz */
2486ab71bbb7SJung-uk Kim     UINT16                         DirectionAngle;            /* -180 - +180 */
2487ab71bbb7SJung-uk Kim     UINT16                         ElevationAngle;            /* -180 - +180 */
2488ab71bbb7SJung-uk Kim     UINT16                         WorkVerticalAngleBegin;    /* -180 - +180 with 2 deg step */
2489ab71bbb7SJung-uk Kim     UINT16                         WorkVerticalAngleEnd;      /* -180 - +180 with 2 deg step */
2490ab71bbb7SJung-uk Kim     UINT16                         WorkHorizontalAngleBegin;  /* -180 - +180 with 2 deg step */
2491ab71bbb7SJung-uk Kim     UINT16                         WorkHorizontalAngleEnd;    /* -180 - +180 with 2 deg step */
24921b7a2680SJung-uk Kim 
24931b7a2680SJung-uk Kim } ACPI_NHLT_VENDOR_MIC_CONFIG;
24941b7a2680SJung-uk Kim 
24951b7a2680SJung-uk Kim /* Values for Type field above */
24961b7a2680SJung-uk Kim 
2497804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL    0
2498804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_SUBCARDIOID        1
2499804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_CARDIOID           2
2500804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_SUPERCARDIOID      3
2501804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_HYPERCARDIOID      4
2502804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_8SHAPED            5
2503804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_RESERVED           6
2504804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_VENDORDEFINED      7
25051b7a2680SJung-uk Kim 
25061b7a2680SJung-uk Kim /* Values for Panel field above */
25071b7a2680SJung-uk Kim 
2508804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_TOP             0
2509804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_BOTTOM          1
2510804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_LEFT            2
2511804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_RIGHT           3
2512804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_FRONT           4
2513804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_REAR            5
25141b7a2680SJung-uk Kim 
2515804fe266SJung-uk Kim typedef struct acpi_nhlt_vendor_micdevice_config
25161b7a2680SJung-uk Kim {
2517804fe266SJung-uk Kim     UINT8                          VirtualSlot;
2518804fe266SJung-uk Kim     UINT8                          ConfigType;
2519804fe266SJung-uk Kim     UINT8                          ArrayType;
2520804fe266SJung-uk Kim     UINT8                          MicsCount;
2521804fe266SJung-uk Kim     ACPI_NHLT_VENDOR_MIC_CONFIG    Mics[];
25221b7a2680SJung-uk Kim 
2523804fe266SJung-uk Kim } ACPI_NHLT_VENDOR_MICDEVICE_CONFIG;
25241b7a2680SJung-uk Kim 
2525804fe266SJung-uk Kim typedef union acpi_nhlt_device_config
25261b7a2680SJung-uk Kim {
2527804fe266SJung-uk Kim     UINT8                                VirtualSlot;
2528804fe266SJung-uk Kim     ACPI_NHLT_GENDEVICE_CONFIG           Gen;
2529804fe266SJung-uk Kim     ACPI_NHLT_MICDEVICE_CONFIG           Mic;
2530804fe266SJung-uk Kim     ACPI_NHLT_VENDOR_MICDEVICE_CONFIG    VendorMic;
25311b7a2680SJung-uk Kim 
2532804fe266SJung-uk Kim } ACPI_NHLT_DEVICE_CONFIG;
25331b7a2680SJung-uk Kim 
2534804fe266SJung-uk Kim /* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */
2535804fe266SJung-uk Kim typedef struct acpi_nhlt_wave_formatext
25361b7a2680SJung-uk Kim {
2537804fe266SJung-uk Kim     UINT16                         FormatTag;
2538804fe266SJung-uk Kim     UINT16                         ChannelCount;
2539804fe266SJung-uk Kim     UINT32                         SamplesPerSec;
2540804fe266SJung-uk Kim     UINT32                         AvgBytesPerSec;
2541804fe266SJung-uk Kim     UINT16                         BlockAlign;
2542804fe266SJung-uk Kim     UINT16                         BitsPerSample;
2543804fe266SJung-uk Kim     UINT16                         ExtraFormatSize;
2544804fe266SJung-uk Kim     UINT16                         ValidBitsPerSample;
2545804fe266SJung-uk Kim     UINT32                         ChannelMask;
2546804fe266SJung-uk Kim     UINT8                          Subformat[16];
25471b7a2680SJung-uk Kim 
2548804fe266SJung-uk Kim } ACPI_NHLT_WAVE_FORMATEXT;
25491b7a2680SJung-uk Kim 
2550804fe266SJung-uk Kim typedef struct acpi_nhlt_format_config
25511b7a2680SJung-uk Kim {
2552804fe266SJung-uk Kim     ACPI_NHLT_WAVE_FORMATEXT       Format;
2553804fe266SJung-uk Kim     ACPI_NHLT_CONFIG               Config;
25541b7a2680SJung-uk Kim 
2555804fe266SJung-uk Kim } ACPI_NHLT_FORMAT_CONFIG;
2556804fe266SJung-uk Kim 
2557804fe266SJung-uk Kim typedef struct acpi_nhlt_formats_config
2558804fe266SJung-uk Kim {
2559804fe266SJung-uk Kim     UINT8                          FormatsCount;
2560804fe266SJung-uk Kim     ACPI_NHLT_FORMAT_CONFIG        Formats[];
2561804fe266SJung-uk Kim 
2562804fe266SJung-uk Kim } ACPI_NHLT_FORMATS_CONFIG;
25631b7a2680SJung-uk Kim 
2564ab71bbb7SJung-uk Kim typedef struct acpi_nhlt_device_info
25651b7a2680SJung-uk Kim {
2566804fe266SJung-uk Kim     UINT8                          Id[16];
2567804fe266SJung-uk Kim     UINT8                          InstanceId;
2568804fe266SJung-uk Kim     UINT8                          PortId;
25691b7a2680SJung-uk Kim 
2570ab71bbb7SJung-uk Kim } ACPI_NHLT_DEVICE_INFO;
25711b7a2680SJung-uk Kim 
2572804fe266SJung-uk Kim typedef struct acpi_nhlt_devices_info
2573804fe266SJung-uk Kim {
2574804fe266SJung-uk Kim     UINT8                          DevicesCount;
2575804fe266SJung-uk Kim     ACPI_NHLT_DEVICE_INFO          Devices[];
2576804fe266SJung-uk Kim 
2577804fe266SJung-uk Kim } ACPI_NHLT_DEVICES_INFO;
2578804fe266SJung-uk Kim 
25791b7a2680SJung-uk Kim 
25801b7a2680SJung-uk Kim /*******************************************************************************
25811b7a2680SJung-uk Kim  *
2582ff879b07SJung-uk Kim  * PCCT - Platform Communications Channel Table (ACPI 5.0)
2583ff879b07SJung-uk Kim  *        Version 2 (ACPI 6.2)
2584ff879b07SJung-uk Kim  *
2585ff879b07SJung-uk Kim  ******************************************************************************/
2586ff879b07SJung-uk Kim 
2587ff879b07SJung-uk Kim typedef struct acpi_table_pcct
2588ff879b07SJung-uk Kim {
2589ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2590ff879b07SJung-uk Kim     UINT32                  Flags;
2591ff879b07SJung-uk Kim     UINT64                  Reserved;
2592ff879b07SJung-uk Kim 
2593ff879b07SJung-uk Kim } ACPI_TABLE_PCCT;
2594ff879b07SJung-uk Kim 
2595ff879b07SJung-uk Kim /* Values for Flags field above */
2596ff879b07SJung-uk Kim 
2597ff879b07SJung-uk Kim #define ACPI_PCCT_DOORBELL              1
2598ff879b07SJung-uk Kim 
2599ff879b07SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */
2600ff879b07SJung-uk Kim 
2601ff879b07SJung-uk Kim enum AcpiPcctType
2602ff879b07SJung-uk Kim {
2603ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_GENERIC_SUBSPACE             = 0,
2604ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE          = 1,
2605ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2    = 2,    /* ACPI 6.1 */
2606ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE      = 3,    /* ACPI 6.2 */
2607ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE       = 4,    /* ACPI 6.2 */
2608cfd1ed46SJung-uk Kim     ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE         = 5,    /* ACPI 6.4 */
2609cfd1ed46SJung-uk Kim     ACPI_PCCT_TYPE_RESERVED                     = 6     /* 6 and greater are reserved */
2610ff879b07SJung-uk Kim };
2611ff879b07SJung-uk Kim 
2612ff879b07SJung-uk Kim /*
2613ff879b07SJung-uk Kim  * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
2614ff879b07SJung-uk Kim  */
2615ff879b07SJung-uk Kim 
2616ff879b07SJung-uk Kim /* 0: Generic Communications Subspace */
2617ff879b07SJung-uk Kim 
2618ff879b07SJung-uk Kim typedef struct acpi_pcct_subspace
2619ff879b07SJung-uk Kim {
2620ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2621ff879b07SJung-uk Kim     UINT8                   Reserved[6];
2622ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2623ff879b07SJung-uk Kim     UINT64                  Length;
2624ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2625ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2626ff879b07SJung-uk Kim     UINT64                  WriteMask;
2627ff879b07SJung-uk Kim     UINT32                  Latency;
2628ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2629ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
2630ff879b07SJung-uk Kim 
2631ff879b07SJung-uk Kim } ACPI_PCCT_SUBSPACE;
2632ff879b07SJung-uk Kim 
2633ff879b07SJung-uk Kim 
2634ff879b07SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */
2635ff879b07SJung-uk Kim 
2636ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced
2637ff879b07SJung-uk Kim {
2638ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2639ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
2640ff879b07SJung-uk Kim     UINT8                   Flags;
2641ff879b07SJung-uk Kim     UINT8                   Reserved;
2642ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2643ff879b07SJung-uk Kim     UINT64                  Length;
2644ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2645ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2646ff879b07SJung-uk Kim     UINT64                  WriteMask;
2647ff879b07SJung-uk Kim     UINT32                  Latency;
2648ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2649ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
2650ff879b07SJung-uk Kim 
2651ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED;
2652ff879b07SJung-uk Kim 
2653ff879b07SJung-uk Kim 
2654ff879b07SJung-uk Kim /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
2655ff879b07SJung-uk Kim 
2656ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced_type2
2657ff879b07SJung-uk Kim {
2658ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2659ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
2660ff879b07SJung-uk Kim     UINT8                   Flags;
2661ff879b07SJung-uk Kim     UINT8                   Reserved;
2662ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2663ff879b07SJung-uk Kim     UINT64                  Length;
2664ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2665ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2666ff879b07SJung-uk Kim     UINT64                  WriteMask;
2667ff879b07SJung-uk Kim     UINT32                  Latency;
2668ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2669ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
2670ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
2671ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
2672ff879b07SJung-uk Kim     UINT64                  AckWriteMask;
2673ff879b07SJung-uk Kim 
2674ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED_TYPE2;
2675ff879b07SJung-uk Kim 
2676ff879b07SJung-uk Kim 
2677ff879b07SJung-uk Kim /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
2678ff879b07SJung-uk Kim 
2679ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_master
2680ff879b07SJung-uk Kim {
2681ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2682ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
2683ff879b07SJung-uk Kim     UINT8                   Flags;
2684ff879b07SJung-uk Kim     UINT8                   Reserved1;
2685ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2686ff879b07SJung-uk Kim     UINT32                  Length;
2687ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2688ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2689ff879b07SJung-uk Kim     UINT64                  WriteMask;
2690ff879b07SJung-uk Kim     UINT32                  Latency;
2691ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2692ff879b07SJung-uk Kim     UINT32                  MinTurnaroundTime;
2693ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
2694ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
2695ff879b07SJung-uk Kim     UINT64                  AckSetMask;
2696ff879b07SJung-uk Kim     UINT64                  Reserved2;
2697ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
2698ff879b07SJung-uk Kim     UINT64                  CmdCompleteMask;
2699ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
2700ff879b07SJung-uk Kim     UINT64                  CmdUpdatePreserveMask;
2701ff879b07SJung-uk Kim     UINT64                  CmdUpdateSetMask;
2702ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
2703ff879b07SJung-uk Kim     UINT64                  ErrorStatusMask;
2704ff879b07SJung-uk Kim 
2705ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_MASTER;
2706ff879b07SJung-uk Kim 
2707ff879b07SJung-uk Kim 
2708ff879b07SJung-uk Kim /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
2709ff879b07SJung-uk Kim 
2710ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_slave
2711ff879b07SJung-uk Kim {
2712ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2713ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
2714ff879b07SJung-uk Kim     UINT8                   Flags;
2715ff879b07SJung-uk Kim     UINT8                   Reserved1;
2716ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2717ff879b07SJung-uk Kim     UINT32                  Length;
2718ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2719ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2720ff879b07SJung-uk Kim     UINT64                  WriteMask;
2721ff879b07SJung-uk Kim     UINT32                  Latency;
2722ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2723ff879b07SJung-uk Kim     UINT32                  MinTurnaroundTime;
2724ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
2725ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
2726ff879b07SJung-uk Kim     UINT64                  AckSetMask;
2727ff879b07SJung-uk Kim     UINT64                  Reserved2;
2728ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
2729ff879b07SJung-uk Kim     UINT64                  CmdCompleteMask;
2730ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
2731ff879b07SJung-uk Kim     UINT64                  CmdUpdatePreserveMask;
2732ff879b07SJung-uk Kim     UINT64                  CmdUpdateSetMask;
2733ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
2734ff879b07SJung-uk Kim     UINT64                  ErrorStatusMask;
2735ff879b07SJung-uk Kim 
2736ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SLAVE;
2737ff879b07SJung-uk Kim 
2738cfd1ed46SJung-uk Kim /* 5: HW Registers based Communications Subspace */
2739cfd1ed46SJung-uk Kim 
2740cfd1ed46SJung-uk Kim typedef struct acpi_pcct_hw_reg
2741cfd1ed46SJung-uk Kim {
2742cfd1ed46SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2743cfd1ed46SJung-uk Kim     UINT16                  Version;
2744cfd1ed46SJung-uk Kim     UINT64                  BaseAddress;
2745cfd1ed46SJung-uk Kim     UINT64                  Length;
2746cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2747cfd1ed46SJung-uk Kim     UINT64                  DoorbellPreserve;
2748cfd1ed46SJung-uk Kim     UINT64                  DoorbellWrite;
2749cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
2750cfd1ed46SJung-uk Kim     UINT64                  CmdCompleteMask;
2751cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
2752cfd1ed46SJung-uk Kim     UINT64                  ErrorStatusMask;
2753cfd1ed46SJung-uk Kim     UINT32                  NominalLatency;
2754cfd1ed46SJung-uk Kim     UINT32                  MinTurnaroundTime;
2755cfd1ed46SJung-uk Kim 
2756cfd1ed46SJung-uk Kim } ACPI_PCCT_HW_REG;
2757cfd1ed46SJung-uk Kim 
2758ff879b07SJung-uk Kim 
2759ff879b07SJung-uk Kim /* Values for doorbell flags above */
2760ff879b07SJung-uk Kim 
2761ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY    (1)
2762ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
2763ff879b07SJung-uk Kim 
2764ff879b07SJung-uk Kim 
2765ff879b07SJung-uk Kim /*
2766ff879b07SJung-uk Kim  * PCC memory structures (not part of the ACPI table)
2767ff879b07SJung-uk Kim  */
2768ff879b07SJung-uk Kim 
2769ff879b07SJung-uk Kim /* Shared Memory Region */
2770ff879b07SJung-uk Kim 
2771ff879b07SJung-uk Kim typedef struct acpi_pcct_shared_memory
2772ff879b07SJung-uk Kim {
2773ff879b07SJung-uk Kim     UINT32                  Signature;
2774ff879b07SJung-uk Kim     UINT16                  Command;
2775ff879b07SJung-uk Kim     UINT16                  Status;
2776ff879b07SJung-uk Kim 
2777ff879b07SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY;
2778ff879b07SJung-uk Kim 
2779ff879b07SJung-uk Kim 
2780ff879b07SJung-uk Kim /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
2781ff879b07SJung-uk Kim 
2782ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_shared_memory
2783ff879b07SJung-uk Kim {
2784ff879b07SJung-uk Kim     UINT32                  Signature;
2785ff879b07SJung-uk Kim     UINT32                  Flags;
2786ff879b07SJung-uk Kim     UINT32                  Length;
2787ff879b07SJung-uk Kim     UINT32                  Command;
2788ff879b07SJung-uk Kim 
2789ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SHARED_MEMORY;
2790ff879b07SJung-uk Kim 
2791ff879b07SJung-uk Kim 
2792ff879b07SJung-uk Kim /*******************************************************************************
2793ff879b07SJung-uk Kim  *
2794ff879b07SJung-uk Kim  * PDTT - Platform Debug Trigger Table (ACPI 6.2)
2795ff879b07SJung-uk Kim  *        Version 0
2796ff879b07SJung-uk Kim  *
2797ff879b07SJung-uk Kim  ******************************************************************************/
2798ff879b07SJung-uk Kim 
2799ff879b07SJung-uk Kim typedef struct acpi_table_pdtt
2800ff879b07SJung-uk Kim {
2801ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2802ff879b07SJung-uk Kim     UINT8                   TriggerCount;
2803ff879b07SJung-uk Kim     UINT8                   Reserved[3];
2804ff879b07SJung-uk Kim     UINT32                  ArrayOffset;
2805ff879b07SJung-uk Kim 
2806ff879b07SJung-uk Kim } ACPI_TABLE_PDTT;
2807ff879b07SJung-uk Kim 
2808ff879b07SJung-uk Kim 
2809ff879b07SJung-uk Kim /*
2810ff879b07SJung-uk Kim  * PDTT Communication Channel Identifier Structure.
2811ff879b07SJung-uk Kim  * The number of these structures is defined by TriggerCount above,
2812ff879b07SJung-uk Kim  * starting at ArrayOffset.
2813ff879b07SJung-uk Kim  */
2814ff879b07SJung-uk Kim typedef struct acpi_pdtt_channel
2815ff879b07SJung-uk Kim {
2816ff879b07SJung-uk Kim     UINT8                   SubchannelId;
2817ff879b07SJung-uk Kim     UINT8                   Flags;
2818ff879b07SJung-uk Kim 
2819ff879b07SJung-uk Kim } ACPI_PDTT_CHANNEL;
2820ff879b07SJung-uk Kim 
2821ff879b07SJung-uk Kim /* Flags for above */
2822ff879b07SJung-uk Kim 
2823ff879b07SJung-uk Kim #define ACPI_PDTT_RUNTIME_TRIGGER           (1)
2824ff879b07SJung-uk Kim #define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
2825cd6518c7SJung-uk Kim #define ACPI_PDTT_TRIGGER_ORDER             (1<<2)
2826ff879b07SJung-uk Kim 
2827ff879b07SJung-uk Kim 
2828ff879b07SJung-uk Kim /*******************************************************************************
2829ff879b07SJung-uk Kim  *
2830cfd1ed46SJung-uk Kim  * PHAT - Platform Health Assessment Table (ACPI 6.4)
2831cfd1ed46SJung-uk Kim  *        Version 1
2832cfd1ed46SJung-uk Kim  *
2833cfd1ed46SJung-uk Kim  ******************************************************************************/
2834cfd1ed46SJung-uk Kim 
2835cfd1ed46SJung-uk Kim typedef struct acpi_table_phat
2836cfd1ed46SJung-uk Kim {
2837cfd1ed46SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2838cfd1ed46SJung-uk Kim 
2839cfd1ed46SJung-uk Kim } ACPI_TABLE_PHAT;
2840cfd1ed46SJung-uk Kim 
2841cfd1ed46SJung-uk Kim /* Common header for PHAT subtables that follow main table */
2842cfd1ed46SJung-uk Kim 
2843cfd1ed46SJung-uk Kim typedef struct acpi_phat_header
2844cfd1ed46SJung-uk Kim {
2845cfd1ed46SJung-uk Kim     UINT16                  Type;
2846cfd1ed46SJung-uk Kim     UINT16                  Length;
2847cfd1ed46SJung-uk Kim     UINT8                   Revision;
2848cfd1ed46SJung-uk Kim 
2849cfd1ed46SJung-uk Kim } ACPI_PHAT_HEADER;
2850cfd1ed46SJung-uk Kim 
2851cfd1ed46SJung-uk Kim 
2852cfd1ed46SJung-uk Kim /* Values for Type field above */
2853cfd1ed46SJung-uk Kim 
2854cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_VERSION_DATA  0
2855cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_HEALTH_DATA   1
2856cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_RESERVED         2 /* 0x02-0xFFFF are reserved */
2857cfd1ed46SJung-uk Kim 
2858cfd1ed46SJung-uk Kim /*
2859cfd1ed46SJung-uk Kim  * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER
2860cfd1ed46SJung-uk Kim  */
2861cfd1ed46SJung-uk Kim 
2862cfd1ed46SJung-uk Kim /* 0: Firmware Version Data Record */
2863cfd1ed46SJung-uk Kim 
2864cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_data
2865cfd1ed46SJung-uk Kim {
2866cfd1ed46SJung-uk Kim     ACPI_PHAT_HEADER        Header;
2867cfd1ed46SJung-uk Kim     UINT8                   Reserved[3];
2868cfd1ed46SJung-uk Kim     UINT32                  ElementCount;
2869cfd1ed46SJung-uk Kim 
2870cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_DATA;
2871cfd1ed46SJung-uk Kim 
2872cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_element
2873cfd1ed46SJung-uk Kim {
2874cfd1ed46SJung-uk Kim     UINT8                   Guid[16];
2875cfd1ed46SJung-uk Kim     UINT64                  VersionValue;
2876cfd1ed46SJung-uk Kim     UINT32                  ProducerId;
2877cfd1ed46SJung-uk Kim 
2878cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_ELEMENT;
2879cfd1ed46SJung-uk Kim 
2880cfd1ed46SJung-uk Kim 
2881cfd1ed46SJung-uk Kim /* 1: Firmware Health Data Record */
2882cfd1ed46SJung-uk Kim 
2883cfd1ed46SJung-uk Kim typedef struct acpi_phat_health_data
2884cfd1ed46SJung-uk Kim {
2885cfd1ed46SJung-uk Kim     ACPI_PHAT_HEADER        Header;
2886cfd1ed46SJung-uk Kim     UINT8                   Reserved[2];
2887cfd1ed46SJung-uk Kim     UINT8                   Health;
2888cfd1ed46SJung-uk Kim     UINT8                   DeviceGuid[16];
2889cfd1ed46SJung-uk Kim     UINT32                  DeviceSpecificOffset; /* Zero if no Device-specific data */
2890cfd1ed46SJung-uk Kim 
2891cfd1ed46SJung-uk Kim } ACPI_PHAT_HEALTH_DATA;
2892cfd1ed46SJung-uk Kim 
2893cfd1ed46SJung-uk Kim /* Values for Health field above */
2894cfd1ed46SJung-uk Kim 
2895cfd1ed46SJung-uk Kim #define ACPI_PHAT_ERRORS_FOUND          0
2896cfd1ed46SJung-uk Kim #define ACPI_PHAT_NO_ERRORS             1
2897cfd1ed46SJung-uk Kim #define ACPI_PHAT_UNKNOWN_ERRORS        2
2898cfd1ed46SJung-uk Kim #define ACPI_PHAT_ADVISORY              3
2899cfd1ed46SJung-uk Kim 
2900cfd1ed46SJung-uk Kim 
2901cfd1ed46SJung-uk Kim /*******************************************************************************
2902cfd1ed46SJung-uk Kim  *
2903ff879b07SJung-uk Kim  * PMTT - Platform Memory Topology Table (ACPI 5.0)
2904ff879b07SJung-uk Kim  *        Version 1
2905ff879b07SJung-uk Kim  *
2906ff879b07SJung-uk Kim  ******************************************************************************/
2907ff879b07SJung-uk Kim 
2908ff879b07SJung-uk Kim typedef struct acpi_table_pmtt
2909ff879b07SJung-uk Kim {
2910ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2911cfd1ed46SJung-uk Kim     UINT32                  MemoryDeviceCount;
2912cfd1ed46SJung-uk Kim     /*
2913cfd1ed46SJung-uk Kim      * Immediately followed by:
2914cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
2915cfd1ed46SJung-uk Kim      */
2916ff879b07SJung-uk Kim 
2917ff879b07SJung-uk Kim } ACPI_TABLE_PMTT;
2918ff879b07SJung-uk Kim 
2919ff879b07SJung-uk Kim 
2920ff879b07SJung-uk Kim /* Common header for PMTT subtables that follow main table */
2921ff879b07SJung-uk Kim 
2922ff879b07SJung-uk Kim typedef struct acpi_pmtt_header
2923ff879b07SJung-uk Kim {
2924ff879b07SJung-uk Kim     UINT8                   Type;
2925ff879b07SJung-uk Kim     UINT8                   Reserved1;
2926ff879b07SJung-uk Kim     UINT16                  Length;
2927ff879b07SJung-uk Kim     UINT16                  Flags;
2928ff879b07SJung-uk Kim     UINT16                  Reserved2;
2929cfd1ed46SJung-uk Kim     UINT32                  MemoryDeviceCount;  /* Zero means no memory device structs follow */
2930cfd1ed46SJung-uk Kim     /*
2931cfd1ed46SJung-uk Kim      * Immediately followed by:
2932cfd1ed46SJung-uk Kim      * UINT8 TypeSpecificData[]
2933cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
2934cfd1ed46SJung-uk Kim      */
2935ff879b07SJung-uk Kim 
2936ff879b07SJung-uk Kim } ACPI_PMTT_HEADER;
2937ff879b07SJung-uk Kim 
2938ff879b07SJung-uk Kim /* Values for Type field above */
2939ff879b07SJung-uk Kim 
2940ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET           0
2941ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER       1
2942ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM             2
2943cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFE are reserved */
2944cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_VENDOR           0xFF
2945ff879b07SJung-uk Kim 
2946ff879b07SJung-uk Kim /* Values for Flags field above */
2947ff879b07SJung-uk Kim 
2948ff879b07SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL             0x0001
2949ff879b07SJung-uk Kim #define ACPI_PMTT_PHYSICAL              0x0002
2950ff879b07SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE           0x000C
2951ff879b07SJung-uk Kim 
2952ff879b07SJung-uk Kim 
2953ff879b07SJung-uk Kim /*
2954ff879b07SJung-uk Kim  * PMTT subtables, correspond to Type in acpi_pmtt_header
2955ff879b07SJung-uk Kim  */
2956ff879b07SJung-uk Kim 
2957ff879b07SJung-uk Kim 
2958ff879b07SJung-uk Kim /* 0: Socket Structure */
2959ff879b07SJung-uk Kim 
2960ff879b07SJung-uk Kim typedef struct acpi_pmtt_socket
2961ff879b07SJung-uk Kim {
2962ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
2963ff879b07SJung-uk Kim     UINT16                  SocketId;
2964ff879b07SJung-uk Kim     UINT16                  Reserved;
2965ff879b07SJung-uk Kim 
2966ff879b07SJung-uk Kim } ACPI_PMTT_SOCKET;
2967cfd1ed46SJung-uk Kim     /*
2968cfd1ed46SJung-uk Kim      * Immediately followed by:
2969cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
2970cfd1ed46SJung-uk Kim      */
2971ff879b07SJung-uk Kim 
2972ff879b07SJung-uk Kim 
2973ff879b07SJung-uk Kim /* 1: Memory Controller subtable */
2974ff879b07SJung-uk Kim 
2975ff879b07SJung-uk Kim typedef struct acpi_pmtt_controller
2976ff879b07SJung-uk Kim {
2977ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
2978cfd1ed46SJung-uk Kim     UINT16                  ControllerId;
2979ff879b07SJung-uk Kim     UINT16                  Reserved;
2980ff879b07SJung-uk Kim 
2981ff879b07SJung-uk Kim } ACPI_PMTT_CONTROLLER;
2982cfd1ed46SJung-uk Kim     /*
2983cfd1ed46SJung-uk Kim      * Immediately followed by:
2984cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
2985cfd1ed46SJung-uk Kim      */
2986ff879b07SJung-uk Kim 
2987ff879b07SJung-uk Kim 
2988ff879b07SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */
2989ff879b07SJung-uk Kim 
2990ff879b07SJung-uk Kim typedef struct acpi_pmtt_physical_component
2991ff879b07SJung-uk Kim {
2992ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
2993ff879b07SJung-uk Kim     UINT32                  BiosHandle;
2994ff879b07SJung-uk Kim 
2995ff879b07SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT;
2996ff879b07SJung-uk Kim 
2997ff879b07SJung-uk Kim 
2998cfd1ed46SJung-uk Kim /* 0xFF: Vendor Specific Data */
2999cfd1ed46SJung-uk Kim 
3000cfd1ed46SJung-uk Kim typedef struct acpi_pmtt_vendor_specific
3001cfd1ed46SJung-uk Kim {
3002cfd1ed46SJung-uk Kim     ACPI_PMTT_HEADER        Header;
3003cfd1ed46SJung-uk Kim     UINT8                   TypeUuid[16];
3004cfd1ed46SJung-uk Kim     UINT8                   Specific[];
3005cfd1ed46SJung-uk Kim     /*
3006cfd1ed46SJung-uk Kim      * Immediately followed by:
3007cfd1ed46SJung-uk Kim      * UINT8 VendorSpecificData[];
3008cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
3009cfd1ed46SJung-uk Kim      */
3010cfd1ed46SJung-uk Kim 
3011cfd1ed46SJung-uk Kim } ACPI_PMTT_VENDOR_SPECIFIC;
3012cfd1ed46SJung-uk Kim 
3013cfd1ed46SJung-uk Kim 
3014ff879b07SJung-uk Kim /*******************************************************************************
3015ff879b07SJung-uk Kim  *
3016ff879b07SJung-uk Kim  * PPTT - Processor Properties Topology Table (ACPI 6.2)
3017ff879b07SJung-uk Kim  *        Version 1
3018ff879b07SJung-uk Kim  *
3019ff879b07SJung-uk Kim  ******************************************************************************/
3020ff879b07SJung-uk Kim 
3021ff879b07SJung-uk Kim typedef struct acpi_table_pptt
3022ff879b07SJung-uk Kim {
3023ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3024ff879b07SJung-uk Kim 
3025ff879b07SJung-uk Kim } ACPI_TABLE_PPTT;
3026ff879b07SJung-uk Kim 
3027ff879b07SJung-uk Kim /* Values for Type field above */
3028ff879b07SJung-uk Kim 
3029ff879b07SJung-uk Kim enum AcpiPpttType
3030ff879b07SJung-uk Kim {
3031ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_PROCESSOR            = 0,
3032ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_CACHE                = 1,
3033ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_ID                   = 2,
3034ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_RESERVED             = 3
3035ff879b07SJung-uk Kim };
3036ff879b07SJung-uk Kim 
3037ff879b07SJung-uk Kim 
3038ff879b07SJung-uk Kim /* 0: Processor Hierarchy Node Structure */
3039ff879b07SJung-uk Kim 
3040ff879b07SJung-uk Kim typedef struct acpi_pptt_processor
3041ff879b07SJung-uk Kim {
3042ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
3043ff879b07SJung-uk Kim     UINT16                  Reserved;
3044ff879b07SJung-uk Kim     UINT32                  Flags;
3045ff879b07SJung-uk Kim     UINT32                  Parent;
3046ff879b07SJung-uk Kim     UINT32                  AcpiProcessorId;
3047ff879b07SJung-uk Kim     UINT32                  NumberOfPrivResources;
3048ff879b07SJung-uk Kim 
3049ff879b07SJung-uk Kim } ACPI_PPTT_PROCESSOR;
3050ff879b07SJung-uk Kim 
3051ff879b07SJung-uk Kim /* Flags */
3052ff879b07SJung-uk Kim 
3053cd6518c7SJung-uk Kim #define ACPI_PPTT_PHYSICAL_PACKAGE          (1)
3054cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (1<<1)
3055cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD  (1<<2)  /* ACPI 6.3 */
3056cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_LEAF_NODE            (1<<3)  /* ACPI 6.3 */
3057cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_IDENTICAL            (1<<4)  /* ACPI 6.3 */
3058ff879b07SJung-uk Kim 
3059ff879b07SJung-uk Kim 
3060ff879b07SJung-uk Kim /* 1: Cache Type Structure */
3061ff879b07SJung-uk Kim 
3062ff879b07SJung-uk Kim typedef struct acpi_pptt_cache
3063ff879b07SJung-uk Kim {
3064ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
3065ff879b07SJung-uk Kim     UINT16                  Reserved;
3066ff879b07SJung-uk Kim     UINT32                  Flags;
3067ff879b07SJung-uk Kim     UINT32                  NextLevelOfCache;
3068ff879b07SJung-uk Kim     UINT32                  Size;
3069ff879b07SJung-uk Kim     UINT32                  NumberOfSets;
3070ff879b07SJung-uk Kim     UINT8                   Associativity;
3071ff879b07SJung-uk Kim     UINT8                   Attributes;
3072ff879b07SJung-uk Kim     UINT16                  LineSize;
3073ff879b07SJung-uk Kim 
3074ff879b07SJung-uk Kim } ACPI_PPTT_CACHE;
3075ff879b07SJung-uk Kim 
3076cfd1ed46SJung-uk Kim /* 1: Cache Type Structure for PPTT version 3 */
3077cfd1ed46SJung-uk Kim 
3078cfd1ed46SJung-uk Kim typedef struct acpi_pptt_cache_v1
3079cfd1ed46SJung-uk Kim {
3080cfd1ed46SJung-uk Kim     UINT32                  CacheId;
3081cfd1ed46SJung-uk Kim 
3082cfd1ed46SJung-uk Kim } ACPI_PPTT_CACHE_V1;
3083cfd1ed46SJung-uk Kim 
3084cfd1ed46SJung-uk Kim 
3085ff879b07SJung-uk Kim /* Flags */
3086ff879b07SJung-uk Kim 
3087ff879b07SJung-uk Kim #define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)     /* Physical property valid */
3088ff879b07SJung-uk Kim #define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)  /* Number of sets valid */
3089ff879b07SJung-uk Kim #define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)  /* Associativity valid */
3090ff879b07SJung-uk Kim #define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)  /* Allocation type valid */
3091ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)  /* Cache type valid */
3092ff879b07SJung-uk Kim #define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)  /* Write policy valid */
3093ff879b07SJung-uk Kim #define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)  /* Line size valid */
3094cfd1ed46SJung-uk Kim #define ACPI_PPTT_CACHE_ID_VALID            (1<<7)  /* Cache ID valid */
3095ff879b07SJung-uk Kim 
3096ff879b07SJung-uk Kim /* Masks for Attributes */
3097ff879b07SJung-uk Kim 
3098ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)  /* Allocation type */
3099ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)  /* Cache type */
3100ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)  /* Write policy */
3101ff879b07SJung-uk Kim 
3102ff879b07SJung-uk Kim /* Attributes describing cache */
3103ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)   /* Cache line is allocated on read */
3104ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)  /* Cache line is allocated on write */
3105ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)  /* Cache line is allocated on read and write */
3106ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)  /* Alternate representation of above */
3107ff879b07SJung-uk Kim 
3108ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)   /* Data cache */
3109ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)  /* Instruction cache */
3110ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)  /* Unified I & D cache */
3111ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)  /* Alternate representation of above */
3112ff879b07SJung-uk Kim 
3113ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WB           (0x0)   /* Cache is write back */
3114ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)  /* Cache is write through */
3115ff879b07SJung-uk Kim 
3116ff879b07SJung-uk Kim /* 2: ID Structure */
3117ff879b07SJung-uk Kim 
3118ff879b07SJung-uk Kim typedef struct acpi_pptt_id
3119ff879b07SJung-uk Kim {
3120ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
3121ff879b07SJung-uk Kim     UINT16                  Reserved;
3122ff879b07SJung-uk Kim     UINT32                  VendorId;
3123ff879b07SJung-uk Kim     UINT64                  Level1Id;
3124ff879b07SJung-uk Kim     UINT64                  Level2Id;
3125ff879b07SJung-uk Kim     UINT16                  MajorRev;
3126ff879b07SJung-uk Kim     UINT16                  MinorRev;
3127ff879b07SJung-uk Kim     UINT16                  SpinRev;
3128ff879b07SJung-uk Kim 
3129ff879b07SJung-uk Kim } ACPI_PPTT_ID;
3130ff879b07SJung-uk Kim 
3131ff879b07SJung-uk Kim 
3132ff879b07SJung-uk Kim /*******************************************************************************
3133ff879b07SJung-uk Kim  *
31341970d693SJung-uk Kim  * PRMT - Platform Runtime Mechanism Table
31351970d693SJung-uk Kim  *        Version 1
31361970d693SJung-uk Kim  *
31371970d693SJung-uk Kim  ******************************************************************************/
31381970d693SJung-uk Kim 
31391970d693SJung-uk Kim typedef struct acpi_table_prmt
31401970d693SJung-uk Kim {
31411970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
31421970d693SJung-uk Kim 
31431970d693SJung-uk Kim } ACPI_TABLE_PRMT;
31441970d693SJung-uk Kim 
31451970d693SJung-uk Kim typedef struct acpi_table_prmt_header
31461970d693SJung-uk Kim {
31471970d693SJung-uk Kim     UINT8                   PlatformGuid[16];
31481970d693SJung-uk Kim     UINT32                  ModuleInfoOffset;
31491970d693SJung-uk Kim     UINT32                  ModuleInfoCount;
31501970d693SJung-uk Kim 
31511970d693SJung-uk Kim } ACPI_TABLE_PRMT_HEADER;
31521970d693SJung-uk Kim 
315397c0b5abSJung-uk Kim typedef struct acpi_prmt_module_header
315497c0b5abSJung-uk Kim {
315597c0b5abSJung-uk Kim     UINT16                  Revision;
315697c0b5abSJung-uk Kim     UINT16                  Length;
315797c0b5abSJung-uk Kim 
315897c0b5abSJung-uk Kim } ACPI_PRMT_MODULE_HEADER;
315997c0b5abSJung-uk Kim 
31601970d693SJung-uk Kim typedef struct acpi_prmt_module_info
31611970d693SJung-uk Kim {
31621970d693SJung-uk Kim     UINT16                  Revision;
31631970d693SJung-uk Kim     UINT16                  Length;
31641970d693SJung-uk Kim     UINT8                   ModuleGuid[16];
31651970d693SJung-uk Kim     UINT16                  MajorRev;
31661970d693SJung-uk Kim     UINT16                  MinorRev;
31671970d693SJung-uk Kim     UINT16                  HandlerInfoCount;
31681970d693SJung-uk Kim     UINT32                  HandlerInfoOffset;
31691970d693SJung-uk Kim     UINT64                  MmioListPointer;
31701970d693SJung-uk Kim 
31711970d693SJung-uk Kim } ACPI_PRMT_MODULE_INFO;
31721970d693SJung-uk Kim 
31731970d693SJung-uk Kim typedef struct acpi_prmt_handler_info
31741970d693SJung-uk Kim {
31751970d693SJung-uk Kim     UINT16                  Revision;
31761970d693SJung-uk Kim     UINT16                  Length;
31771970d693SJung-uk Kim     UINT8                   HandlerGuid[16];
31781970d693SJung-uk Kim     UINT64                  HandlerAddress;
31791970d693SJung-uk Kim     UINT64                  StaticDataBufferAddress;
31801970d693SJung-uk Kim     UINT64                  AcpiParamBufferAddress;
31811970d693SJung-uk Kim 
31821970d693SJung-uk Kim } ACPI_PRMT_HANDLER_INFO;
31831970d693SJung-uk Kim 
31841970d693SJung-uk Kim 
31851970d693SJung-uk Kim /*******************************************************************************
31861970d693SJung-uk Kim  *
3187ff879b07SJung-uk Kim  * RASF - RAS Feature Table (ACPI 5.0)
3188ff879b07SJung-uk Kim  *        Version 1
3189ff879b07SJung-uk Kim  *
3190ff879b07SJung-uk Kim  ******************************************************************************/
3191ff879b07SJung-uk Kim 
3192ff879b07SJung-uk Kim typedef struct acpi_table_rasf
3193ff879b07SJung-uk Kim {
3194ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3195ff879b07SJung-uk Kim     UINT8                   ChannelId[12];
3196ff879b07SJung-uk Kim 
3197ff879b07SJung-uk Kim } ACPI_TABLE_RASF;
3198ff879b07SJung-uk Kim 
3199ff879b07SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */
3200ff879b07SJung-uk Kim 
3201ff879b07SJung-uk Kim typedef struct acpi_rasf_shared_memory
3202ff879b07SJung-uk Kim {
3203ff879b07SJung-uk Kim     UINT32                  Signature;
3204ff879b07SJung-uk Kim     UINT16                  Command;
3205ff879b07SJung-uk Kim     UINT16                  Status;
3206ff879b07SJung-uk Kim     UINT16                  Version;
3207ff879b07SJung-uk Kim     UINT8                   Capabilities[16];
3208ff879b07SJung-uk Kim     UINT8                   SetCapabilities[16];
3209ff879b07SJung-uk Kim     UINT16                  NumParameterBlocks;
3210ff879b07SJung-uk Kim     UINT32                  SetCapabilitiesStatus;
3211ff879b07SJung-uk Kim 
3212ff879b07SJung-uk Kim } ACPI_RASF_SHARED_MEMORY;
3213ff879b07SJung-uk Kim 
3214ff879b07SJung-uk Kim /* RASF Parameter Block Structure Header */
3215ff879b07SJung-uk Kim 
3216ff879b07SJung-uk Kim typedef struct acpi_rasf_parameter_block
3217ff879b07SJung-uk Kim {
3218ff879b07SJung-uk Kim     UINT16                  Type;
3219ff879b07SJung-uk Kim     UINT16                  Version;
3220ff879b07SJung-uk Kim     UINT16                  Length;
3221ff879b07SJung-uk Kim 
3222ff879b07SJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK;
3223ff879b07SJung-uk Kim 
3224ff879b07SJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */
3225ff879b07SJung-uk Kim 
3226ff879b07SJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter
3227ff879b07SJung-uk Kim {
3228ff879b07SJung-uk Kim     ACPI_RASF_PARAMETER_BLOCK   Header;
3229ff879b07SJung-uk Kim     UINT16                      PatrolScrubCommand;
3230ff879b07SJung-uk Kim     UINT64                      RequestedAddressRange[2];
3231ff879b07SJung-uk Kim     UINT64                      ActualAddressRange[2];
3232ff879b07SJung-uk Kim     UINT16                      Flags;
3233ff879b07SJung-uk Kim     UINT8                       RequestedSpeed;
3234ff879b07SJung-uk Kim 
3235ff879b07SJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER;
3236ff879b07SJung-uk Kim 
3237ff879b07SJung-uk Kim /* Masks for Flags and Speed fields above */
3238ff879b07SJung-uk Kim 
3239ff879b07SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING      1
3240ff879b07SJung-uk Kim #define ACPI_RASF_SPEED                 (7<<1)
3241ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_SLOW            (0<<1)
3242ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM          (4<<1)
3243ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_FAST            (7<<1)
3244ff879b07SJung-uk Kim 
3245ff879b07SJung-uk Kim /* Channel Commands */
3246ff879b07SJung-uk Kim 
3247ff879b07SJung-uk Kim enum AcpiRasfCommands
3248ff879b07SJung-uk Kim {
3249ff879b07SJung-uk Kim     ACPI_RASF_EXECUTE_RASF_COMMAND      = 1
3250ff879b07SJung-uk Kim };
3251ff879b07SJung-uk Kim 
3252ff879b07SJung-uk Kim /* Platform RAS Capabilities */
3253ff879b07SJung-uk Kim 
3254ff879b07SJung-uk Kim enum AcpiRasfCapabiliities
3255ff879b07SJung-uk Kim {
3256ff879b07SJung-uk Kim     ACPI_HW_PATROL_SCRUB_SUPPORTED      = 0,
3257ff879b07SJung-uk Kim     ACPI_SW_PATROL_SCRUB_EXPOSED        = 1
3258ff879b07SJung-uk Kim };
3259ff879b07SJung-uk Kim 
3260ff879b07SJung-uk Kim /* Patrol Scrub Commands */
3261ff879b07SJung-uk Kim 
3262ff879b07SJung-uk Kim enum AcpiRasfPatrolScrubCommands
3263ff879b07SJung-uk Kim {
3264ff879b07SJung-uk Kim     ACPI_RASF_GET_PATROL_PARAMETERS     = 1,
3265ff879b07SJung-uk Kim     ACPI_RASF_START_PATROL_SCRUBBER     = 2,
3266ff879b07SJung-uk Kim     ACPI_RASF_STOP_PATROL_SCRUBBER      = 3
3267ff879b07SJung-uk Kim };
3268ff879b07SJung-uk Kim 
3269ff879b07SJung-uk Kim /* Channel Command flags */
3270ff879b07SJung-uk Kim 
3271ff879b07SJung-uk Kim #define ACPI_RASF_GENERATE_SCI          (1<<15)
3272ff879b07SJung-uk Kim 
3273ff879b07SJung-uk Kim /* Status values */
3274ff879b07SJung-uk Kim 
3275ff879b07SJung-uk Kim enum AcpiRasfStatus
3276ff879b07SJung-uk Kim {
3277ff879b07SJung-uk Kim     ACPI_RASF_SUCCESS                   = 0,
3278ff879b07SJung-uk Kim     ACPI_RASF_NOT_VALID                 = 1,
3279ff879b07SJung-uk Kim     ACPI_RASF_NOT_SUPPORTED             = 2,
3280ff879b07SJung-uk Kim     ACPI_RASF_BUSY                      = 3,
3281ff879b07SJung-uk Kim     ACPI_RASF_FAILED                    = 4,
3282ff879b07SJung-uk Kim     ACPI_RASF_ABORTED                   = 5,
3283ff879b07SJung-uk Kim     ACPI_RASF_INVALID_DATA              = 6
3284ff879b07SJung-uk Kim };
3285ff879b07SJung-uk Kim 
3286ff879b07SJung-uk Kim /* Status flags */
3287ff879b07SJung-uk Kim 
3288ff879b07SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE      (1)
3289ff879b07SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL          (1<<1)
3290ff879b07SJung-uk Kim #define ACPI_RASF_ERROR                 (1<<2)
3291ff879b07SJung-uk Kim #define ACPI_RASF_STATUS                (0x1F<<3)
3292ff879b07SJung-uk Kim 
3293ff879b07SJung-uk Kim 
3294ff879b07SJung-uk Kim /*******************************************************************************
3295ff879b07SJung-uk Kim  *
3296804fe266SJung-uk Kim  * RAS2 - RAS2 Feature Table (ACPI 6.5)
3297804fe266SJung-uk Kim  *        Version 1
3298804fe266SJung-uk Kim  *
3299804fe266SJung-uk Kim  *
3300804fe266SJung-uk Kim  ******************************************************************************/
3301804fe266SJung-uk Kim 
3302804fe266SJung-uk Kim typedef struct acpi_table_ras2 {
3303804fe266SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3304804fe266SJung-uk Kim     UINT16                  Reserved;
3305804fe266SJung-uk Kim     UINT16                  NumPccDescs;
3306804fe266SJung-uk Kim 
3307804fe266SJung-uk Kim } ACPI_TABLE_RAS2;
3308804fe266SJung-uk Kim 
3309804fe266SJung-uk Kim /* RAS2 Platform Communication Channel Descriptor */
3310804fe266SJung-uk Kim 
3311804fe266SJung-uk Kim typedef struct acpi_ras2_pcc_desc {
3312804fe266SJung-uk Kim     UINT8                   ChannelId;
3313804fe266SJung-uk Kim     UINT16                  Reserved;
3314804fe266SJung-uk Kim     UINT8                   FeatureType;
3315804fe266SJung-uk Kim     UINT32                  Instance;
3316804fe266SJung-uk Kim 
3317804fe266SJung-uk Kim } ACPI_RAS2_PCC_DESC;
3318804fe266SJung-uk Kim 
3319804fe266SJung-uk Kim /* RAS2 Platform Communication Channel Shared Memory Region */
3320804fe266SJung-uk Kim 
3321804fe266SJung-uk Kim typedef struct acpi_ras2_shared_memory {
3322804fe266SJung-uk Kim     UINT32                  Signature;
3323804fe266SJung-uk Kim     UINT16                  Command;
3324804fe266SJung-uk Kim     UINT16                  Status;
3325804fe266SJung-uk Kim     UINT16                  Version;
3326804fe266SJung-uk Kim     UINT8                   Features[16];
3327804fe266SJung-uk Kim     UINT8                   SetCapabilities[16];
3328804fe266SJung-uk Kim     UINT16                  NumParameterBlocks;
3329804fe266SJung-uk Kim     UINT32                  SetCapabilitiesStatus;
3330804fe266SJung-uk Kim 
3331804fe266SJung-uk Kim } ACPI_RAS2_SHARED_MEMORY;
3332804fe266SJung-uk Kim 
3333804fe266SJung-uk Kim /* RAS2 Parameter Block Structure for PATROL_SCRUB */
3334804fe266SJung-uk Kim 
3335804fe266SJung-uk Kim typedef struct acpi_ras2_parameter_block
3336804fe266SJung-uk Kim {
3337804fe266SJung-uk Kim     UINT16                  Type;
3338804fe266SJung-uk Kim     UINT16                  Version;
3339804fe266SJung-uk Kim     UINT16                  Length;
3340804fe266SJung-uk Kim 
3341804fe266SJung-uk Kim } ACPI_RAS2_PARAMETER_BLOCK;
3342804fe266SJung-uk Kim 
3343804fe266SJung-uk Kim /* RAS2 Parameter Block Structure for PATROL_SCRUB */
3344804fe266SJung-uk Kim 
3345804fe266SJung-uk Kim typedef struct acpi_ras2_patrol_scrub_parameter {
3346804fe266SJung-uk Kim     ACPI_RAS2_PARAMETER_BLOCK   Header;
3347804fe266SJung-uk Kim     UINT16                      PatrolScrubCommand;
3348804fe266SJung-uk Kim     UINT64                      RequestedAddressRange[2];
3349804fe266SJung-uk Kim     UINT64                      ActualAddressRange[2];
3350804fe266SJung-uk Kim     UINT32                      Flags;
3351804fe266SJung-uk Kim     UINT32                      ScrubParamsOut;
3352804fe266SJung-uk Kim     UINT32                      ScrubParamsIn;
3353804fe266SJung-uk Kim 
3354804fe266SJung-uk Kim } ACPI_RAS2_PATROL_SCRUB_PARAMETER;
3355804fe266SJung-uk Kim 
3356804fe266SJung-uk Kim /* Masks for Flags field above */
3357804fe266SJung-uk Kim 
3358804fe266SJung-uk Kim #define ACPI_RAS2_SCRUBBER_RUNNING      1
3359804fe266SJung-uk Kim 
3360804fe266SJung-uk Kim /* RAS2 Parameter Block Structure for LA2PA_TRANSLATION */
3361804fe266SJung-uk Kim 
3362804fe266SJung-uk Kim typedef struct acpi_ras2_la2pa_translation_parameter {
3363804fe266SJung-uk Kim     ACPI_RAS2_PARAMETER_BLOCK   Header;
3364804fe266SJung-uk Kim     UINT16                      AddrTranslationCommand;
3365804fe266SJung-uk Kim     UINT64                      SubInstId;
3366804fe266SJung-uk Kim     UINT64                      LogicalAddress;
3367804fe266SJung-uk Kim     UINT64                      PhysicalAddress;
3368804fe266SJung-uk Kim     UINT32                      Status;
3369804fe266SJung-uk Kim 
3370804fe266SJung-uk Kim } ACPI_RAS2_LA2PA_TRANSLATION_PARAM;
3371804fe266SJung-uk Kim 
3372804fe266SJung-uk Kim /* Channel Commands */
3373804fe266SJung-uk Kim 
3374804fe266SJung-uk Kim enum AcpiRas2Commands
3375804fe266SJung-uk Kim {
3376804fe266SJung-uk Kim     ACPI_RAS2_EXECUTE_RAS2_COMMAND      = 1
3377804fe266SJung-uk Kim };
3378804fe266SJung-uk Kim 
3379804fe266SJung-uk Kim /* Platform RAS2 Features */
3380804fe266SJung-uk Kim 
3381804fe266SJung-uk Kim enum AcpiRas2Features
3382804fe266SJung-uk Kim {
3383804fe266SJung-uk Kim     ACPI_RAS2_PATROL_SCRUB_SUPPORTED    = 0,
3384804fe266SJung-uk Kim     ACPI_RAS2_LA2PA_TRANSLATION         = 1
3385804fe266SJung-uk Kim };
3386804fe266SJung-uk Kim 
3387804fe266SJung-uk Kim /* RAS2 Patrol Scrub Commands */
3388804fe266SJung-uk Kim 
3389804fe266SJung-uk Kim enum AcpiRas2PatrolScrubCommands
3390804fe266SJung-uk Kim {
3391804fe266SJung-uk Kim     ACPI_RAS2_GET_PATROL_PARAMETERS     = 1,
3392804fe266SJung-uk Kim     ACPI_RAS2_START_PATROL_SCRUBBER     = 2,
3393804fe266SJung-uk Kim     ACPI_RAS2_STOP_PATROL_SCRUBBER      = 3
3394804fe266SJung-uk Kim };
3395804fe266SJung-uk Kim 
3396804fe266SJung-uk Kim /* RAS2 LA2PA Translation Commands */
3397804fe266SJung-uk Kim 
3398804fe266SJung-uk Kim enum AcpiRas2La2PaTranslationCommands
3399804fe266SJung-uk Kim {
3400804fe266SJung-uk Kim     ACPI_RAS2_GET_LA2PA_TRANSLATION     = 1,
3401804fe266SJung-uk Kim };
3402804fe266SJung-uk Kim 
3403804fe266SJung-uk Kim /* RAS2 LA2PA Translation Status values */
3404804fe266SJung-uk Kim 
3405804fe266SJung-uk Kim enum AcpiRas2La2PaTranslationStatus
3406804fe266SJung-uk Kim {
3407804fe266SJung-uk Kim     ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,
3408804fe266SJung-uk Kim     ACPI_RAS2_LA2PA_TRANSLATION_FAIL    = 1,
3409804fe266SJung-uk Kim };
3410804fe266SJung-uk Kim 
3411804fe266SJung-uk Kim /* Channel Command flags */
3412804fe266SJung-uk Kim 
3413804fe266SJung-uk Kim #define ACPI_RAS2_GENERATE_SCI          (1<<15)
3414804fe266SJung-uk Kim 
3415804fe266SJung-uk Kim /* Status values */
3416804fe266SJung-uk Kim 
3417804fe266SJung-uk Kim enum AcpiRas2Status
3418804fe266SJung-uk Kim {
3419804fe266SJung-uk Kim     ACPI_RAS2_SUCCESS                   = 0,
3420804fe266SJung-uk Kim     ACPI_RAS2_NOT_VALID                 = 1,
3421804fe266SJung-uk Kim     ACPI_RAS2_NOT_SUPPORTED             = 2,
3422804fe266SJung-uk Kim     ACPI_RAS2_BUSY                      = 3,
3423804fe266SJung-uk Kim     ACPI_RAS2_FAILED                    = 4,
3424804fe266SJung-uk Kim     ACPI_RAS2_ABORTED                   = 5,
3425804fe266SJung-uk Kim     ACPI_RAS2_INVALID_DATA              = 6
3426804fe266SJung-uk Kim };
3427804fe266SJung-uk Kim 
3428804fe266SJung-uk Kim /* Status flags */
3429804fe266SJung-uk Kim 
3430804fe266SJung-uk Kim #define ACPI_RAS2_COMMAND_COMPLETE      (1)
3431804fe266SJung-uk Kim #define ACPI_RAS2_SCI_DOORBELL          (1<<1)
3432804fe266SJung-uk Kim #define ACPI_RAS2_ERROR                 (1<<2)
3433804fe266SJung-uk Kim #define ACPI_RAS2_STATUS                (0x1F<<3)
3434804fe266SJung-uk Kim 
3435804fe266SJung-uk Kim 
3436804fe266SJung-uk Kim /*******************************************************************************
3437804fe266SJung-uk Kim  *
34381970d693SJung-uk Kim  * RGRT - Regulatory Graphics Resource Table
34391970d693SJung-uk Kim  *        Version 1
34401970d693SJung-uk Kim  *
34411970d693SJung-uk Kim  * Conforms to "ACPI RGRT" available at:
34421970d693SJung-uk Kim  * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/
34431970d693SJung-uk Kim  *
34441970d693SJung-uk Kim  ******************************************************************************/
34451970d693SJung-uk Kim 
34461970d693SJung-uk Kim typedef struct acpi_table_rgrt
34471970d693SJung-uk Kim {
34481970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
34491970d693SJung-uk Kim     UINT16                  Version;
34501970d693SJung-uk Kim     UINT8                   ImageType;
34511970d693SJung-uk Kim     UINT8                   Reserved;
3452ab71bbb7SJung-uk Kim     UINT8                   Image[];
34531970d693SJung-uk Kim 
34541970d693SJung-uk Kim } ACPI_TABLE_RGRT;
34551970d693SJung-uk Kim 
34561970d693SJung-uk Kim /* ImageType values */
34571970d693SJung-uk Kim 
34581970d693SJung-uk Kim enum AcpiRgrtImageType
34591970d693SJung-uk Kim {
34601970d693SJung-uk Kim     ACPI_RGRT_TYPE_RESERVED0            = 0,
34611970d693SJung-uk Kim     ACPI_RGRT_IMAGE_TYPE_PNG            = 1,
34621970d693SJung-uk Kim     ACPI_RGRT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
34631970d693SJung-uk Kim };
34641970d693SJung-uk Kim 
34651970d693SJung-uk Kim 
34661970d693SJung-uk Kim /*******************************************************************************
34671970d693SJung-uk Kim  *
3468722b1667SJung-uk Kim  * RHCT - RISC-V Hart Capabilities Table
3469722b1667SJung-uk Kim  *        Version 1
3470722b1667SJung-uk Kim  *
3471722b1667SJung-uk Kim  ******************************************************************************/
3472722b1667SJung-uk Kim 
3473722b1667SJung-uk Kim typedef struct acpi_table_rhct {
3474722b1667SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
347507c64d74SJung-uk Kim     UINT32                  Flags;              /* RHCT flags */
3476722b1667SJung-uk Kim     UINT64                  TimeBaseFreq;
3477722b1667SJung-uk Kim     UINT32                  NodeCount;
3478722b1667SJung-uk Kim     UINT32                  NodeOffset;
3479722b1667SJung-uk Kim } ACPI_TABLE_RHCT;
3480722b1667SJung-uk Kim 
348107c64d74SJung-uk Kim /* RHCT Flags */
348207c64d74SJung-uk Kim 
348307c64d74SJung-uk Kim #define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU       (1)
3484722b1667SJung-uk Kim /*
3485722b1667SJung-uk Kim  * RHCT subtables
3486722b1667SJung-uk Kim  */
3487722b1667SJung-uk Kim typedef struct acpi_rhct_node_header {
3488722b1667SJung-uk Kim     UINT16                  Type;
3489722b1667SJung-uk Kim     UINT16                  Length;
3490722b1667SJung-uk Kim     UINT16                  Revision;
3491722b1667SJung-uk Kim } ACPI_RHCT_NODE_HEADER;
3492722b1667SJung-uk Kim 
3493722b1667SJung-uk Kim /* Values for RHCT subtable Type above */
3494722b1667SJung-uk Kim 
3495722b1667SJung-uk Kim enum acpi_rhct_node_type {
3496722b1667SJung-uk Kim     ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,
349707c64d74SJung-uk Kim     ACPI_RHCT_NODE_TYPE_CMO        = 0x0001,
349807c64d74SJung-uk Kim     ACPI_RHCT_NODE_TYPE_MMU        = 0x0002,
349907c64d74SJung-uk Kim     ACPI_RHCT_NODE_TYPE_RESERVED   = 0x0003,
3500722b1667SJung-uk Kim     ACPI_RHCT_NODE_TYPE_HART_INFO  = 0xFFFF,
3501722b1667SJung-uk Kim };
3502722b1667SJung-uk Kim 
3503722b1667SJung-uk Kim /*
3504722b1667SJung-uk Kim  * RHCT node specific subtables
3505722b1667SJung-uk Kim  */
3506722b1667SJung-uk Kim 
3507722b1667SJung-uk Kim /* ISA string node structure */
3508722b1667SJung-uk Kim typedef struct acpi_rhct_isa_string {
3509722b1667SJung-uk Kim     UINT16                  IsaLength;
3510722b1667SJung-uk Kim     char                    Isa[];
3511722b1667SJung-uk Kim } ACPI_RHCT_ISA_STRING;
3512722b1667SJung-uk Kim 
351307c64d74SJung-uk Kim typedef struct acpi_rhct_cmo_node {
351407c64d74SJung-uk Kim     UINT8                  Reserved;           /* Must be zero */
351507c64d74SJung-uk Kim     UINT8                  CbomSize;           /* CBOM size in powerof 2 */
351607c64d74SJung-uk Kim     UINT8                  CbopSize;           /* CBOP size in powerof 2 */
351707c64d74SJung-uk Kim     UINT8                  CbozSize;           /* CBOZ size in powerof 2 */
351807c64d74SJung-uk Kim } ACPI_RHCT_CMO_NODE;
351907c64d74SJung-uk Kim 
352007c64d74SJung-uk Kim typedef struct acpi_rhct_mmu_node {
352107c64d74SJung-uk Kim     UINT8                   Reserved;          /* Must be zero */
352207c64d74SJung-uk Kim     UINT8                   MmuType;           /* Virtual Address Scheme */
352307c64d74SJung-uk Kim } ACPI_RHCT_MMU_NODE;
352407c64d74SJung-uk Kim 
352507c64d74SJung-uk Kim enum acpi_rhct_mmu_type {
352607c64d74SJung-uk Kim     ACPI_RHCT_MMU_TYPE_SV39 = 0,
352707c64d74SJung-uk Kim     ACPI_RHCT_MMU_TYPE_SV48 = 1,
352807c64d74SJung-uk Kim     ACPI_RHCT_MMU_TYPE_SV57 = 2
352907c64d74SJung-uk Kim };
353007c64d74SJung-uk Kim 
3531722b1667SJung-uk Kim /* Hart Info node structure */
3532722b1667SJung-uk Kim typedef struct acpi_rhct_hart_info {
3533722b1667SJung-uk Kim     UINT16                  NumOffsets;
3534722b1667SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
3535722b1667SJung-uk Kim } ACPI_RHCT_HART_INFO;
3536722b1667SJung-uk Kim 
3537722b1667SJung-uk Kim /*******************************************************************************
3538722b1667SJung-uk Kim  *
3539ff879b07SJung-uk Kim  * SBST - Smart Battery Specification Table
3540ff879b07SJung-uk Kim  *        Version 1
3541ff879b07SJung-uk Kim  *
3542ff879b07SJung-uk Kim  ******************************************************************************/
3543ff879b07SJung-uk Kim 
3544ff879b07SJung-uk Kim typedef struct acpi_table_sbst
3545ff879b07SJung-uk Kim {
3546ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3547ff879b07SJung-uk Kim     UINT32                  WarningLevel;
3548ff879b07SJung-uk Kim     UINT32                  LowLevel;
3549ff879b07SJung-uk Kim     UINT32                  CriticalLevel;
3550ff879b07SJung-uk Kim 
3551ff879b07SJung-uk Kim } ACPI_TABLE_SBST;
3552ff879b07SJung-uk Kim 
3553ff879b07SJung-uk Kim 
35545f9b24faSJung-uk Kim /*******************************************************************************
35555f9b24faSJung-uk Kim  *
35565f9b24faSJung-uk Kim  * SDEI - Software Delegated Exception Interface Descriptor Table
35575f9b24faSJung-uk Kim  *
35585f9b24faSJung-uk Kim  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
35595f9b24faSJung-uk Kim  * May 8th, 2017. Copyright 2017 ARM Ltd.
35605f9b24faSJung-uk Kim  *
35615f9b24faSJung-uk Kim  ******************************************************************************/
35625f9b24faSJung-uk Kim 
35635f9b24faSJung-uk Kim typedef struct acpi_table_sdei
35645f9b24faSJung-uk Kim {
35655f9b24faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
35665f9b24faSJung-uk Kim 
35675f9b24faSJung-uk Kim } ACPI_TABLE_SDEI;
35685f9b24faSJung-uk Kim 
35699c48c75eSJung-uk Kim 
35709c48c75eSJung-uk Kim /*******************************************************************************
35719c48c75eSJung-uk Kim  *
3572ff879b07SJung-uk Kim  * SDEV - Secure Devices Table (ACPI 6.2)
3573ff879b07SJung-uk Kim  *        Version 1
3574dcbce41eSJung-uk Kim  *
3575dcbce41eSJung-uk Kim  ******************************************************************************/
3576dcbce41eSJung-uk Kim 
3577ff879b07SJung-uk Kim typedef struct acpi_table_sdev
3578dcbce41eSJung-uk Kim {
3579dcbce41eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3580dcbce41eSJung-uk Kim 
3581ff879b07SJung-uk Kim } ACPI_TABLE_SDEV;
3582dcbce41eSJung-uk Kim 
3583dcbce41eSJung-uk Kim 
3584ff879b07SJung-uk Kim typedef struct acpi_sdev_header
3585d6dd1baeSJung-uk Kim {
3586ff879b07SJung-uk Kim     UINT8                   Type;
3587ff879b07SJung-uk Kim     UINT8                   Flags;
3588ff879b07SJung-uk Kim     UINT16                  Length;
3589d6dd1baeSJung-uk Kim 
3590ff879b07SJung-uk Kim } ACPI_SDEV_HEADER;
3591f8146b88SJung-uk Kim 
3592d6dd1baeSJung-uk Kim 
3593ff879b07SJung-uk Kim /* Values for subtable type above */
3594d6dd1baeSJung-uk Kim 
3595ff879b07SJung-uk Kim enum AcpiSdevType
3596d6dd1baeSJung-uk Kim {
3597ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_NAMESPACE_DEVICE     = 0,
3598ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
3599ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
3600d6dd1baeSJung-uk Kim };
3601d6dd1baeSJung-uk Kim 
3602ff879b07SJung-uk Kim /* Values for flags above */
3603d6dd1baeSJung-uk Kim 
3604ff879b07SJung-uk Kim #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
3605cfd1ed46SJung-uk Kim #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)
3606fe0f0bbbSJung-uk Kim 
3607fe0f0bbbSJung-uk Kim /*
3608ff879b07SJung-uk Kim  * SDEV subtables
3609fe0f0bbbSJung-uk Kim  */
3610fe0f0bbbSJung-uk Kim 
3611ff879b07SJung-uk Kim /* 0: Namespace Device Based Secure Device Structure */
3612fe0f0bbbSJung-uk Kim 
3613ff879b07SJung-uk Kim typedef struct acpi_sdev_namespace
3614fe0f0bbbSJung-uk Kim {
3615ff879b07SJung-uk Kim     ACPI_SDEV_HEADER        Header;
3616ff879b07SJung-uk Kim     UINT16                  DeviceIdOffset;
3617ff879b07SJung-uk Kim     UINT16                  DeviceIdLength;
3618ff879b07SJung-uk Kim     UINT16                  VendorDataOffset;
3619ff879b07SJung-uk Kim     UINT16                  VendorDataLength;
3620d6dd1baeSJung-uk Kim 
3621ff879b07SJung-uk Kim } ACPI_SDEV_NAMESPACE;
36225ef50723SJung-uk Kim 
3623cfd1ed46SJung-uk Kim typedef struct acpi_sdev_secure_component
3624cfd1ed46SJung-uk Kim {
3625cfd1ed46SJung-uk Kim     UINT16                  SecureComponentOffset;
3626cfd1ed46SJung-uk Kim     UINT16                  SecureComponentLength;
3627cfd1ed46SJung-uk Kim 
3628cfd1ed46SJung-uk Kim } ACPI_SDEV_SECURE_COMPONENT;
3629cfd1ed46SJung-uk Kim 
3630cfd1ed46SJung-uk Kim 
3631cfd1ed46SJung-uk Kim /*
3632cfd1ed46SJung-uk Kim  * SDEV sub-subtables ("Components") for above
3633cfd1ed46SJung-uk Kim  */
3634cfd1ed46SJung-uk Kim typedef struct acpi_sdev_component
3635cfd1ed46SJung-uk Kim {
3636cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
3637cfd1ed46SJung-uk Kim 
3638cfd1ed46SJung-uk Kim } ACPI_SDEV_COMPONENT;
3639cfd1ed46SJung-uk Kim 
3640cfd1ed46SJung-uk Kim 
3641cfd1ed46SJung-uk Kim /* Values for sub-subtable type above */
3642cfd1ed46SJung-uk Kim 
3643cfd1ed46SJung-uk Kim enum AcpiSacType
3644cfd1ed46SJung-uk Kim {
3645cfd1ed46SJung-uk Kim     ACPI_SDEV_TYPE_ID_COMPONENT     = 0,
3646cfd1ed46SJung-uk Kim     ACPI_SDEV_TYPE_MEM_COMPONENT    = 1
3647cfd1ed46SJung-uk Kim };
3648cfd1ed46SJung-uk Kim 
3649cfd1ed46SJung-uk Kim typedef struct acpi_sdev_id_component
3650cfd1ed46SJung-uk Kim {
3651cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
3652cfd1ed46SJung-uk Kim     UINT16                  HardwareIdOffset;
3653cfd1ed46SJung-uk Kim     UINT16                  HardwareIdLength;
3654cfd1ed46SJung-uk Kim     UINT16                  SubsystemIdOffset;
3655cfd1ed46SJung-uk Kim     UINT16                  SubsystemIdLength;
3656cfd1ed46SJung-uk Kim     UINT16                  HardwareRevision;
3657cfd1ed46SJung-uk Kim     UINT8                   HardwareRevPresent;
3658cfd1ed46SJung-uk Kim     UINT8                   ClassCodePresent;
3659cfd1ed46SJung-uk Kim     UINT8                   PciBaseClass;
3660cfd1ed46SJung-uk Kim     UINT8                   PciSubClass;
3661cfd1ed46SJung-uk Kim     UINT8                   PciProgrammingXface;
3662cfd1ed46SJung-uk Kim 
3663cfd1ed46SJung-uk Kim } ACPI_SDEV_ID_COMPONENT;
3664cfd1ed46SJung-uk Kim 
3665cfd1ed46SJung-uk Kim typedef struct acpi_sdev_mem_component
3666cfd1ed46SJung-uk Kim {
3667cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
3668cfd1ed46SJung-uk Kim     UINT32                  Reserved;
3669cfd1ed46SJung-uk Kim     UINT64                  MemoryBaseAddress;
3670cfd1ed46SJung-uk Kim     UINT64                  MemoryLength;
3671cfd1ed46SJung-uk Kim 
3672cfd1ed46SJung-uk Kim } ACPI_SDEV_MEM_COMPONENT;
3673cfd1ed46SJung-uk Kim 
3674cfd1ed46SJung-uk Kim 
3675ff879b07SJung-uk Kim /* 1: PCIe Endpoint Device Based Device Structure */
3676ff879b07SJung-uk Kim 
3677ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie
36785ef50723SJung-uk Kim {
3679ff879b07SJung-uk Kim     ACPI_SDEV_HEADER        Header;
3680ff879b07SJung-uk Kim     UINT16                  Segment;
3681ff879b07SJung-uk Kim     UINT16                  StartBus;
3682ff879b07SJung-uk Kim     UINT16                  PathOffset;
3683ff879b07SJung-uk Kim     UINT16                  PathLength;
3684ff879b07SJung-uk Kim     UINT16                  VendorDataOffset;
3685ff879b07SJung-uk Kim     UINT16                  VendorDataLength;
3686ff879b07SJung-uk Kim 
3687ff879b07SJung-uk Kim } ACPI_SDEV_PCIE;
3688ff879b07SJung-uk Kim 
3689ff879b07SJung-uk Kim /* 1a: PCIe Endpoint path entry */
3690ff879b07SJung-uk Kim 
3691ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie_path
3692ff879b07SJung-uk Kim {
36935ef50723SJung-uk Kim     UINT8                   Device;
36945ef50723SJung-uk Kim     UINT8                   Function;
36955ef50723SJung-uk Kim 
3696ff879b07SJung-uk Kim } ACPI_SDEV_PCIE_PATH;
3697af051161SJung-uk Kim 
3698af051161SJung-uk Kim 
36991970d693SJung-uk Kim /*******************************************************************************
37001970d693SJung-uk Kim  *
37011970d693SJung-uk Kim  * SVKL - Storage Volume Key Location Table (ACPI 6.4)
37021970d693SJung-uk Kim  *        From: "Guest-Host-Communication Interface (GHCI) for Intel
37031970d693SJung-uk Kim  *        Trust Domain Extensions (Intel TDX)".
37041970d693SJung-uk Kim  *        Version 1
37051970d693SJung-uk Kim  *
37061970d693SJung-uk Kim  ******************************************************************************/
37071970d693SJung-uk Kim 
37081970d693SJung-uk Kim typedef struct acpi_table_svkl
37091970d693SJung-uk Kim {
37101970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
37111970d693SJung-uk Kim     UINT32                  Count;
37121970d693SJung-uk Kim 
37131970d693SJung-uk Kim } ACPI_TABLE_SVKL;
37141970d693SJung-uk Kim 
37151970d693SJung-uk Kim typedef struct acpi_svkl_key
37161970d693SJung-uk Kim {
37171970d693SJung-uk Kim     UINT16                  Type;
37181970d693SJung-uk Kim     UINT16                  Format;
37191970d693SJung-uk Kim     UINT32                  Size;
37201970d693SJung-uk Kim     UINT64                  Address;
37211970d693SJung-uk Kim 
37221970d693SJung-uk Kim } ACPI_SVKL_KEY;
37231970d693SJung-uk Kim 
37241970d693SJung-uk Kim enum acpi_svkl_type
37251970d693SJung-uk Kim {
37261970d693SJung-uk Kim     ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
37271970d693SJung-uk Kim     ACPI_SVKL_TYPE_RESERVED     = 1 /* 1 and greater are reserved */
37281970d693SJung-uk Kim };
37291970d693SJung-uk Kim 
37301970d693SJung-uk Kim enum acpi_svkl_format
37311970d693SJung-uk Kim {
37321970d693SJung-uk Kim     ACPI_SVKL_FORMAT_RAW_BINARY = 0,
37331970d693SJung-uk Kim     ACPI_SVKL_FORMAT_RESERVED   = 1 /* 1 and greater are reserved */
37341970d693SJung-uk Kim };
37351970d693SJung-uk Kim 
37361970d693SJung-uk Kim 
3737ab71bbb7SJung-uk Kim /*******************************************************************************
3738ab71bbb7SJung-uk Kim  *
3739ab71bbb7SJung-uk Kim  * TDEL - TD-Event Log
3740ab71bbb7SJung-uk Kim  *        From: "Guest-Host-Communication Interface (GHCI) for Intel
3741ab71bbb7SJung-uk Kim  *        Trust Domain Extensions (Intel TDX)".
3742ab71bbb7SJung-uk Kim  *        September 2020
3743ab71bbb7SJung-uk Kim  *
3744ab71bbb7SJung-uk Kim  ******************************************************************************/
3745ab71bbb7SJung-uk Kim 
3746ab71bbb7SJung-uk Kim typedef struct acpi_table_tdel
3747ab71bbb7SJung-uk Kim {
3748ab71bbb7SJung-uk Kim     ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
3749ab71bbb7SJung-uk Kim     UINT32                  Reserved;
3750ab71bbb7SJung-uk Kim     UINT64                  LogAreaMinimumLength;
3751ab71bbb7SJung-uk Kim     UINT64                  LogAreaStartAddress;
3752ab71bbb7SJung-uk Kim 
3753ab71bbb7SJung-uk Kim } ACPI_TABLE_TDEL;
3754ab71bbb7SJung-uk Kim 
3755d6dd1baeSJung-uk Kim /* Reset to default packing */
3756d6dd1baeSJung-uk Kim 
3757d6dd1baeSJung-uk Kim #pragma pack()
3758d6dd1baeSJung-uk Kim 
3759d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */
3760