xref: /freebsd/sys/contrib/dev/acpica/include/actbl2.h (revision 58308fadece25ae4c12bd2f4dce3d73d9c23be43)
1d6dd1baeSJung-uk Kim /******************************************************************************
2d6dd1baeSJung-uk Kim  *
3*58308fadSJung-uk Kim  * Name: actbl2.h - ACPI Table Definitions
4d6dd1baeSJung-uk Kim  *
5d6dd1baeSJung-uk Kim  *****************************************************************************/
6d6dd1baeSJung-uk Kim 
70d84335fSJung-uk Kim /******************************************************************************
80d84335fSJung-uk Kim  *
90d84335fSJung-uk Kim  * 1. Copyright Notice
100d84335fSJung-uk Kim  *
11*58308fadSJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2025, 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 */
176*58308fadSJung-uk Kim #define ACPI_SIG_ERDT           "ERDT"      /* Enhanced Resource Director Technology */
177a371a5fdSJung-uk Kim #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
178d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
179313a0c13SJung-uk Kim #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
180ff879b07SJung-uk Kim #define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
181d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
182ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
183722b1667SJung-uk Kim #define ACPI_SIG_MPAM           "MPAM"      /* Memory System Resource Partitioning and Monitoring Table */
184ff879b07SJung-uk Kim #define ACPI_SIG_MPST           "MPST"      /* Memory Power State Table */
185*58308fadSJung-uk Kim #define ACPI_SIG_MRRM           "MRRM"      /* Memory Range and Region Mapping table */
1867cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
187ff879b07SJung-uk Kim #define ACPI_SIG_NFIT           "NFIT"      /* NVDIMM Firmware Interface Table */
1881b7a2680SJung-uk Kim #define ACPI_SIG_NHLT           "NHLT"      /* Non HD Audio Link Table */
189ff879b07SJung-uk Kim #define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
190ff879b07SJung-uk Kim #define ACPI_SIG_PDTT           "PDTT"      /* Platform Debug Trigger Table */
191cfd1ed46SJung-uk Kim #define ACPI_SIG_PHAT           "PHAT"      /* Platform Health Assessment Table */
192ff879b07SJung-uk Kim #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
193ff879b07SJung-uk Kim #define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
1941970d693SJung-uk Kim #define ACPI_SIG_PRMT           "PRMT"      /* Platform Runtime Mechanism Table */
195ff879b07SJung-uk Kim #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
196804fe266SJung-uk Kim #define ACPI_SIG_RAS2           "RAS2"      /* RAS2 Feature table */
1971970d693SJung-uk Kim #define ACPI_SIG_RGRT           "RGRT"      /* Regulatory Graphics Resource Table */
198722b1667SJung-uk Kim #define ACPI_SIG_RHCT           "RHCT"      /* RISC-V Hart Capabilities Table */
199*58308fadSJung-uk Kim #define ACPI_SIG_RIMT           "RIMT"      /* RISC-V IO Mapping Table */
200ff879b07SJung-uk Kim #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
2015f9b24faSJung-uk Kim #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated Exception Interface Table */
202ff879b07SJung-uk Kim #define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
2031970d693SJung-uk Kim #define ACPI_SIG_SVKL           "SVKL"      /* Storage Volume Key Location Table */
204ab71bbb7SJung-uk Kim #define ACPI_SIG_TDEL           "TDEL"      /* TD Event Log Table */
205d6dd1baeSJung-uk Kim 
206d6dd1baeSJung-uk Kim 
207d6dd1baeSJung-uk Kim /*
208d6dd1baeSJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
209d6dd1baeSJung-uk Kim  * the tables are provided by the system BIOS.
210d6dd1baeSJung-uk Kim  */
211d6dd1baeSJung-uk Kim #pragma pack(1)
212d6dd1baeSJung-uk Kim 
213d6dd1baeSJung-uk Kim /*
2141df130f1SJung-uk Kim  * Note: C bitfields are not used for this reason:
2151df130f1SJung-uk Kim  *
2161df130f1SJung-uk Kim  * "Bitfields are great and easy to read, but unfortunately the C language
2171df130f1SJung-uk Kim  * does not specify the layout of bitfields in memory, which means they are
2181df130f1SJung-uk Kim  * essentially useless for dealing with packed data in on-disk formats or
2191df130f1SJung-uk Kim  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
2201df130f1SJung-uk Kim  * this decision was a design error in C. Ritchie could have picked an order
2211df130f1SJung-uk Kim  * and stuck with it." Norman Ramsey.
2221df130f1SJung-uk Kim  * See http://stackoverflow.com/a/1053662/41661
223d6dd1baeSJung-uk Kim  */
224d6dd1baeSJung-uk Kim 
225d6dd1baeSJung-uk Kim 
226d6dd1baeSJung-uk Kim /*******************************************************************************
227d6dd1baeSJung-uk Kim  *
22897c0b5abSJung-uk Kim  * AEST - Arm Error Source Table
22997c0b5abSJung-uk Kim  *
23097c0b5abSJung-uk Kim  * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document
23197c0b5abSJung-uk Kim  * September 2020.
23297c0b5abSJung-uk Kim  *
23397c0b5abSJung-uk Kim  ******************************************************************************/
23497c0b5abSJung-uk Kim 
23597c0b5abSJung-uk Kim typedef struct acpi_table_aest
23697c0b5abSJung-uk Kim {
23797c0b5abSJung-uk Kim     ACPI_TABLE_HEADER       Header;
23897c0b5abSJung-uk Kim 
23997c0b5abSJung-uk Kim } ACPI_TABLE_AEST;
24097c0b5abSJung-uk Kim 
24197c0b5abSJung-uk Kim /* Common Subtable header - one per Node Structure (Subtable) */
24297c0b5abSJung-uk Kim 
24397c0b5abSJung-uk Kim typedef struct acpi_aest_hdr
24497c0b5abSJung-uk Kim {
24597c0b5abSJung-uk Kim     UINT8                   Type;
24697c0b5abSJung-uk Kim     UINT16                  Length;
24797c0b5abSJung-uk Kim     UINT8                   Reserved;
24897c0b5abSJung-uk Kim     UINT32                  NodeSpecificOffset;
24997c0b5abSJung-uk Kim     UINT32                  NodeInterfaceOffset;
25097c0b5abSJung-uk Kim     UINT32                  NodeInterruptOffset;
25197c0b5abSJung-uk Kim     UINT32                  NodeInterruptCount;
25297c0b5abSJung-uk Kim     UINT64                  TimestampRate;
25397c0b5abSJung-uk Kim     UINT64                  Reserved1;
25497c0b5abSJung-uk Kim     UINT64                  ErrorInjectionRate;
25597c0b5abSJung-uk Kim 
25697c0b5abSJung-uk Kim } ACPI_AEST_HEADER;
25797c0b5abSJung-uk Kim 
25897c0b5abSJung-uk Kim /* Values for Type above */
25997c0b5abSJung-uk Kim 
26097c0b5abSJung-uk Kim #define ACPI_AEST_PROCESSOR_ERROR_NODE      0
26197c0b5abSJung-uk Kim #define ACPI_AEST_MEMORY_ERROR_NODE         1
26297c0b5abSJung-uk Kim #define ACPI_AEST_SMMU_ERROR_NODE           2
26397c0b5abSJung-uk Kim #define ACPI_AEST_VENDOR_ERROR_NODE         3
26497c0b5abSJung-uk Kim #define ACPI_AEST_GIC_ERROR_NODE            4
26592f570c3SJung-uk Kim #define ACPI_AEST_PCIE_ERROR_NODE           5
26692f570c3SJung-uk Kim #define ACPI_AEST_PROXY_ERROR_NODE          6
26792f570c3SJung-uk Kim #define ACPI_AEST_NODE_TYPE_RESERVED        7 /* 7 and above are reserved */
26897c0b5abSJung-uk Kim 
26997c0b5abSJung-uk Kim 
27097c0b5abSJung-uk Kim /*
27197c0b5abSJung-uk Kim  * AEST subtables (Error nodes)
27297c0b5abSJung-uk Kim  */
27397c0b5abSJung-uk Kim 
27497c0b5abSJung-uk Kim /* 0: Processor Error */
27597c0b5abSJung-uk Kim 
27697c0b5abSJung-uk Kim typedef struct acpi_aest_processor
27797c0b5abSJung-uk Kim {
27897c0b5abSJung-uk Kim     UINT32                  ProcessorId;
27997c0b5abSJung-uk Kim     UINT8                   ResourceType;
28097c0b5abSJung-uk Kim     UINT8                   Reserved;
28197c0b5abSJung-uk Kim     UINT8                   Flags;
28297c0b5abSJung-uk Kim     UINT8                   Revision;
28397c0b5abSJung-uk Kim     UINT64                  ProcessorAffinity;
28497c0b5abSJung-uk Kim 
28597c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR;
28697c0b5abSJung-uk Kim 
28797c0b5abSJung-uk Kim /* Values for ResourceType above, related structs below */
28897c0b5abSJung-uk Kim 
28997c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_RESOURCE            0
29097c0b5abSJung-uk Kim #define ACPI_AEST_TLB_RESOURCE              1
29197c0b5abSJung-uk Kim #define ACPI_AEST_GENERIC_RESOURCE          2
29297c0b5abSJung-uk Kim #define ACPI_AEST_RESOURCE_RESERVED         3   /* 3 and above are reserved */
29397c0b5abSJung-uk Kim 
29497c0b5abSJung-uk Kim /* 0R: Processor Cache Resource Substructure */
29597c0b5abSJung-uk Kim 
29697c0b5abSJung-uk Kim typedef struct acpi_aest_processor_cache
29797c0b5abSJung-uk Kim {
29897c0b5abSJung-uk Kim     UINT32                  CacheReference;
29997c0b5abSJung-uk Kim     UINT32                  Reserved;
30097c0b5abSJung-uk Kim 
30197c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_CACHE;
30297c0b5abSJung-uk Kim 
30397c0b5abSJung-uk Kim /* Values for CacheType above */
30497c0b5abSJung-uk Kim 
30597c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_DATA                0
30697c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_INSTRUCTION         1
30797c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_UNIFIED             2
30897c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_RESERVED            3   /* 3 and above are reserved */
30997c0b5abSJung-uk Kim 
31097c0b5abSJung-uk Kim /* 1R: Processor TLB Resource Substructure */
31197c0b5abSJung-uk Kim 
31297c0b5abSJung-uk Kim typedef struct acpi_aest_processor_tlb
31397c0b5abSJung-uk Kim {
31497c0b5abSJung-uk Kim     UINT32                  TlbLevel;
31597c0b5abSJung-uk Kim     UINT32                  Reserved;
31697c0b5abSJung-uk Kim 
31797c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_TLB;
31897c0b5abSJung-uk Kim 
31997c0b5abSJung-uk Kim /* 2R: Processor Generic Resource Substructure */
32097c0b5abSJung-uk Kim 
32197c0b5abSJung-uk Kim typedef struct acpi_aest_processor_generic
32297c0b5abSJung-uk Kim {
323ab71bbb7SJung-uk Kim     UINT32                   Resource;
32497c0b5abSJung-uk Kim 
32597c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_GENERIC;
32697c0b5abSJung-uk Kim 
32797c0b5abSJung-uk Kim /* 1: Memory Error */
32897c0b5abSJung-uk Kim 
32997c0b5abSJung-uk Kim typedef struct acpi_aest_memory
33097c0b5abSJung-uk Kim {
33197c0b5abSJung-uk Kim     UINT32                  SratProximityDomain;
33297c0b5abSJung-uk Kim 
33397c0b5abSJung-uk Kim } ACPI_AEST_MEMORY;
33497c0b5abSJung-uk Kim 
33597c0b5abSJung-uk Kim /* 2: Smmu Error */
33697c0b5abSJung-uk Kim 
33797c0b5abSJung-uk Kim typedef struct acpi_aest_smmu
33897c0b5abSJung-uk Kim {
33997c0b5abSJung-uk Kim     UINT32                  IortNodeReference;
34097c0b5abSJung-uk Kim     UINT32                  SubcomponentReference;
34197c0b5abSJung-uk Kim 
34297c0b5abSJung-uk Kim } ACPI_AEST_SMMU;
34397c0b5abSJung-uk Kim 
34497c0b5abSJung-uk Kim /* 3: Vendor Defined */
34597c0b5abSJung-uk Kim 
34697c0b5abSJung-uk Kim typedef struct acpi_aest_vendor
34797c0b5abSJung-uk Kim {
34897c0b5abSJung-uk Kim     UINT32                  AcpiHid;
34997c0b5abSJung-uk Kim     UINT32                  AcpiUid;
35097c0b5abSJung-uk Kim     UINT8                   VendorSpecificData[16];
35197c0b5abSJung-uk Kim 
35297c0b5abSJung-uk Kim } ACPI_AEST_VENDOR;
35397c0b5abSJung-uk Kim 
35492f570c3SJung-uk Kim /* 3: Vendor Defined V2 */
35592f570c3SJung-uk Kim 
35692f570c3SJung-uk Kim typedef struct acpi_aest_vendor_v2
35792f570c3SJung-uk Kim {
35892f570c3SJung-uk Kim     UINT64                  AcpiHid;
35992f570c3SJung-uk Kim     UINT32                  AcpiUid;
36092f570c3SJung-uk Kim     UINT8                   VendorSpecificData[16];
36192f570c3SJung-uk Kim 
36292f570c3SJung-uk Kim } ACPI_AEST_VENDOR_V2;
36392f570c3SJung-uk Kim 
36497c0b5abSJung-uk Kim /* 4: Gic Error */
36597c0b5abSJung-uk Kim 
36697c0b5abSJung-uk Kim typedef struct acpi_aest_gic
36797c0b5abSJung-uk Kim {
36897c0b5abSJung-uk Kim     UINT32                  InterfaceType;
36997c0b5abSJung-uk Kim     UINT32                  InstanceId;
37097c0b5abSJung-uk Kim 
37197c0b5abSJung-uk Kim } ACPI_AEST_GIC;
37297c0b5abSJung-uk Kim 
37397c0b5abSJung-uk Kim /* Values for InterfaceType above */
37497c0b5abSJung-uk Kim 
37597c0b5abSJung-uk Kim #define ACPI_AEST_GIC_CPU                   0
37697c0b5abSJung-uk Kim #define ACPI_AEST_GIC_DISTRIBUTOR           1
37797c0b5abSJung-uk Kim #define ACPI_AEST_GIC_REDISTRIBUTOR         2
37897c0b5abSJung-uk Kim #define ACPI_AEST_GIC_ITS                   3
37997c0b5abSJung-uk Kim #define ACPI_AEST_GIC_RESERVED              4   /* 4 and above are reserved */
38097c0b5abSJung-uk Kim 
38192f570c3SJung-uk Kim /* 5: PCIe Error */
38292f570c3SJung-uk Kim 
38392f570c3SJung-uk Kim typedef struct acpi_aest_pcie
38492f570c3SJung-uk Kim {
38592f570c3SJung-uk Kim     UINT32                  IortNodeReference;
38692f570c3SJung-uk Kim 
38792f570c3SJung-uk Kim } ACPI_AEST_PCIE;
38892f570c3SJung-uk Kim 
38992f570c3SJung-uk Kim 
39092f570c3SJung-uk Kim /* 6: Proxy Error */
39192f570c3SJung-uk Kim 
39292f570c3SJung-uk Kim typedef struct acpi_aest_proxy
39392f570c3SJung-uk Kim {
39492f570c3SJung-uk Kim     UINT64                  NodeAddress;
39592f570c3SJung-uk Kim 
39692f570c3SJung-uk Kim } ACPI_AEST_PROXY;
39797c0b5abSJung-uk Kim 
39897c0b5abSJung-uk Kim /* Node Interface Structure */
39997c0b5abSJung-uk Kim 
40097c0b5abSJung-uk Kim typedef struct acpi_aest_node_interface
40197c0b5abSJung-uk Kim {
40297c0b5abSJung-uk Kim     UINT8                   Type;
40397c0b5abSJung-uk Kim     UINT8                   Reserved[3];
40497c0b5abSJung-uk Kim     UINT32                  Flags;
40597c0b5abSJung-uk Kim     UINT64                  Address;
40697c0b5abSJung-uk Kim     UINT32                  ErrorRecordIndex;
40797c0b5abSJung-uk Kim     UINT32                  ErrorRecordCount;
40897c0b5abSJung-uk Kim     UINT64                  ErrorRecordImplemented;
40997c0b5abSJung-uk Kim     UINT64                  ErrorStatusReporting;
41097c0b5abSJung-uk Kim     UINT64                  AddressingMode;
41197c0b5abSJung-uk Kim 
41297c0b5abSJung-uk Kim } ACPI_AEST_NODE_INTERFACE;
41397c0b5abSJung-uk Kim 
41492f570c3SJung-uk Kim /* Node Interface Structure V2*/
41592f570c3SJung-uk Kim 
41692f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_header
41792f570c3SJung-uk Kim {
41892f570c3SJung-uk Kim     UINT8                   Type;
41992f570c3SJung-uk Kim     UINT8                   GroupFormat;
42092f570c3SJung-uk Kim     UINT8                   Reserved[2];
42192f570c3SJung-uk Kim     UINT32                  Flags;
42292f570c3SJung-uk Kim     UINT64                  Address;
42392f570c3SJung-uk Kim     UINT32                  ErrorRecordIndex;
42492f570c3SJung-uk Kim     UINT32                  ErrorRecordCount;
42592f570c3SJung-uk Kim 
42692f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_HEADER;
42792f570c3SJung-uk Kim 
42892f570c3SJung-uk Kim #define ACPI_AEST_NODE_GROUP_FORMAT_4K             0
42992f570c3SJung-uk Kim #define ACPI_AEST_NODE_GROUP_FORMAT_16K            1
43092f570c3SJung-uk Kim #define ACPI_AEST_NODE_GROUP_FORMAT_64K            2
43192f570c3SJung-uk Kim 
43292f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_common
43392f570c3SJung-uk Kim {
43492f570c3SJung-uk Kim     UINT32                             ErrorNodeDevice;
43592f570c3SJung-uk Kim     UINT32                             ProcessorAffinity;
43692f570c3SJung-uk Kim     UINT64                             ErrorGroupRegisterBase;
43792f570c3SJung-uk Kim     UINT64                             FaultInjectRegisterBase;
43892f570c3SJung-uk Kim     UINT64                             InterruptConfigRegisterBase;
43992f570c3SJung-uk Kim 
44092f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_COMMON;
44192f570c3SJung-uk Kim 
44292f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_4k
44392f570c3SJung-uk Kim {
44492f570c3SJung-uk Kim     UINT64                             ErrorRecordImplemented;
44592f570c3SJung-uk Kim     UINT64                             ErrorStatusReporting;
44692f570c3SJung-uk Kim     UINT64                             AddressingMode;
44792f570c3SJung-uk Kim     ACPI_AEST_NODE_INTERFACE_COMMON    Common;
44892f570c3SJung-uk Kim 
44992f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_4K;
45092f570c3SJung-uk Kim 
45192f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_16k
45292f570c3SJung-uk Kim {
45392f570c3SJung-uk Kim     UINT64                             ErrorRecordImplemented[4];
45492f570c3SJung-uk Kim     UINT64                             ErrorStatusReporting[4];
45592f570c3SJung-uk Kim     UINT64                             AddressingMode[4];
45692f570c3SJung-uk Kim     ACPI_AEST_NODE_INTERFACE_COMMON    Common;
45792f570c3SJung-uk Kim 
45892f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_16K;
45992f570c3SJung-uk Kim 
46092f570c3SJung-uk Kim typedef struct acpi_aest_node_interface_64k
46192f570c3SJung-uk Kim {
46292f570c3SJung-uk Kim     INT64                              ErrorRecordImplemented[14];
46392f570c3SJung-uk Kim     UINT64                             ErrorStatusReporting[14];
46492f570c3SJung-uk Kim     UINT64                             AddressingMode[14];
46592f570c3SJung-uk Kim     ACPI_AEST_NODE_INTERFACE_COMMON    Common;
46692f570c3SJung-uk Kim 
46792f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERFACE_64K;
46892f570c3SJung-uk Kim 
46997c0b5abSJung-uk Kim /* Values for Type field above */
47097c0b5abSJung-uk Kim 
47197c0b5abSJung-uk Kim #define ACPI_AEST_NODE_SYSTEM_REGISTER                    0
47297c0b5abSJung-uk Kim #define ACPI_AEST_NODE_MEMORY_MAPPED                      1
47392f570c3SJung-uk Kim #define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED        2
47492f570c3SJung-uk Kim #define ACPI_AEST_XFACE_RESERVED                          3   /* 2 and above are reserved */
47597c0b5abSJung-uk Kim 
47697c0b5abSJung-uk Kim /* Node Interrupt Structure */
47797c0b5abSJung-uk Kim 
47897c0b5abSJung-uk Kim typedef struct acpi_aest_node_interrupt
47997c0b5abSJung-uk Kim {
48097c0b5abSJung-uk Kim     UINT8                   Type;
48197c0b5abSJung-uk Kim     UINT8                   Reserved[2];
48297c0b5abSJung-uk Kim     UINT8                   Flags;
48397c0b5abSJung-uk Kim     UINT32                  Gsiv;
48497c0b5abSJung-uk Kim     UINT8                   IortId;
48597c0b5abSJung-uk Kim     UINT8                   Reserved1[3];
48697c0b5abSJung-uk Kim 
48797c0b5abSJung-uk Kim } ACPI_AEST_NODE_INTERRUPT;
48897c0b5abSJung-uk Kim 
48992f570c3SJung-uk Kim /* Node Interrupt Structure V2 */
49092f570c3SJung-uk Kim 
49192f570c3SJung-uk Kim typedef struct acpi_aest_node_interrupt_v2
49292f570c3SJung-uk Kim {
49392f570c3SJung-uk Kim     UINT8                   Type;
49492f570c3SJung-uk Kim     UINT8                   Reserved[2];
49592f570c3SJung-uk Kim     UINT8                   Flags;
49692f570c3SJung-uk Kim     UINT32                  Gsiv;
49792f570c3SJung-uk Kim     UINT8                   Reserved1[4];
49892f570c3SJung-uk Kim 
49992f570c3SJung-uk Kim } ACPI_AEST_NODE_INTERRUPT_V2;
50092f570c3SJung-uk Kim 
50197c0b5abSJung-uk Kim /* Values for Type field above */
50297c0b5abSJung-uk Kim 
50397c0b5abSJung-uk Kim #define ACPI_AEST_NODE_FAULT_HANDLING       0
50497c0b5abSJung-uk Kim #define ACPI_AEST_NODE_ERROR_RECOVERY       1
50597c0b5abSJung-uk Kim #define ACPI_AEST_XRUPT_RESERVED            2   /* 2 and above are reserved */
50697c0b5abSJung-uk Kim 
50797c0b5abSJung-uk Kim 
50897c0b5abSJung-uk Kim /*******************************************************************************
509ab71bbb7SJung-uk Kim  * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface
510ab71bbb7SJung-uk Kim  *
511ab71bbb7SJung-uk Kim  * Conforms to "ACPI for Arm Components 1.1, Platform Design Document"
512ab71bbb7SJung-uk Kim  * ARM DEN0093 v1.1
513ab71bbb7SJung-uk Kim  *
514ab71bbb7SJung-uk Kim  ******************************************************************************/
515ab71bbb7SJung-uk Kim typedef struct acpi_table_agdi
516ab71bbb7SJung-uk Kim {
517ab71bbb7SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
518ab71bbb7SJung-uk Kim     UINT8                   Flags;
519ab71bbb7SJung-uk Kim     UINT8                   Reserved[3];
520ab71bbb7SJung-uk Kim     UINT32                  SdeiEvent;
521ab71bbb7SJung-uk Kim     UINT32                  Gsiv;
522ab71bbb7SJung-uk Kim 
523ab71bbb7SJung-uk Kim } ACPI_TABLE_AGDI;
524ab71bbb7SJung-uk Kim 
525ab71bbb7SJung-uk Kim /* Mask for Flags field above */
526ab71bbb7SJung-uk Kim 
527ab71bbb7SJung-uk Kim #define ACPI_AGDI_SIGNALING_MODE (1)
528ab71bbb7SJung-uk Kim 
529ab71bbb7SJung-uk Kim 
530ab71bbb7SJung-uk Kim /*******************************************************************************
531ab71bbb7SJung-uk Kim  *
532ab71bbb7SJung-uk Kim  * APMT - ARM Performance Monitoring Unit Table
533ab71bbb7SJung-uk Kim  *
534ab71bbb7SJung-uk Kim  * Conforms to:
535ab71bbb7SJung-uk Kim  * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document
536ab71bbb7SJung-uk Kim  * ARM DEN0117 v1.0 November 25, 2021
537ab71bbb7SJung-uk Kim  *
538ab71bbb7SJung-uk Kim  ******************************************************************************/
539ab71bbb7SJung-uk Kim 
540ab71bbb7SJung-uk Kim typedef struct acpi_table_apmt {
541ab71bbb7SJung-uk Kim     ACPI_TABLE_HEADER Header;    /* Common ACPI table header */
542ab71bbb7SJung-uk Kim } ACPI_TABLE_APMT;
543ab71bbb7SJung-uk Kim 
544ab71bbb7SJung-uk Kim #define ACPI_APMT_NODE_ID_LENGTH                4
545ab71bbb7SJung-uk Kim 
546ab71bbb7SJung-uk Kim /*
547ab71bbb7SJung-uk Kim  * APMT subtables
548ab71bbb7SJung-uk Kim  */
549ab71bbb7SJung-uk Kim typedef struct acpi_apmt_node {
550ab71bbb7SJung-uk Kim     UINT16                       Length;
551ab71bbb7SJung-uk Kim     UINT8                        Flags;
552ab71bbb7SJung-uk Kim     UINT8                        Type;
553ab71bbb7SJung-uk Kim     UINT32                       Id;
554ab71bbb7SJung-uk Kim     UINT64                       InstPrimary;
555ab71bbb7SJung-uk Kim     UINT32                       InstSecondary;
556ab71bbb7SJung-uk Kim     UINT64                       BaseAddress0;
557ab71bbb7SJung-uk Kim     UINT64                       BaseAddress1;
558ab71bbb7SJung-uk Kim     UINT32                       OvflwIrq;
559ab71bbb7SJung-uk Kim     UINT32                       Reserved;
560ab71bbb7SJung-uk Kim     UINT32                       OvflwIrqFlags;
561ab71bbb7SJung-uk Kim     UINT32                       ProcAffinity;
562ab71bbb7SJung-uk Kim     UINT32                       ImplId;
563ab71bbb7SJung-uk Kim } ACPI_APMT_NODE;
564ab71bbb7SJung-uk Kim 
565ab71bbb7SJung-uk Kim /* Masks for Flags field above */
566ab71bbb7SJung-uk Kim 
567ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE               (1<<0)
568ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY                (1<<1)
569ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC                  (1<<2)
570ab71bbb7SJung-uk Kim 
571ab71bbb7SJung-uk Kim /* Values for Flags dual page field above */
572ab71bbb7SJung-uk Kim 
573ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP         (0<<0)
574ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP          (1<<0)
575ab71bbb7SJung-uk Kim 
576ab71bbb7SJung-uk Kim /* Values for Flags processor affinity field above */
577ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY_PROC           (0<<1)
578ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)
579ab71bbb7SJung-uk Kim 
580ab71bbb7SJung-uk Kim /* Values for Flags 64-bit atomic field above */
581ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC_NSUPP            (0<<2)
582ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC_SUPP             (1<<2)
583ab71bbb7SJung-uk Kim 
584ab71bbb7SJung-uk Kim /* Values for Type field above */
585ab71bbb7SJung-uk Kim 
586ab71bbb7SJung-uk Kim enum acpi_apmt_node_type {
587ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_MC                      = 0x00,
588ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_SMMU                    = 0x01,
589ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_PCIE_ROOT               = 0x02,
590ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_ACPI                    = 0x03,
591ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_CACHE                   = 0x04,
592ab71bbb7SJung-uk Kim     ACPI_APMT_NODE_TYPE_COUNT
593ab71bbb7SJung-uk Kim };
594ab71bbb7SJung-uk Kim 
595ab71bbb7SJung-uk Kim /* Masks for ovflw_irq_flags field above */
596ab71bbb7SJung-uk Kim 
597ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE          (1<<0)
598ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE          (1<<1)
599ab71bbb7SJung-uk Kim 
600ab71bbb7SJung-uk Kim /* Values for ovflw_irq_flags mode field above */
601ab71bbb7SJung-uk Kim 
602ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL    (0<<0)
603ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE     (1<<0)
604ab71bbb7SJung-uk Kim 
605ab71bbb7SJung-uk Kim /* Values for ovflw_irq_flags type field above */
606ab71bbb7SJung-uk Kim 
607ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED    (0<<1)
608ab71bbb7SJung-uk Kim 
609ab71bbb7SJung-uk Kim 
610ab71bbb7SJung-uk Kim /*******************************************************************************
61197c0b5abSJung-uk Kim  *
6121970d693SJung-uk Kim  * BDAT - BIOS Data ACPI Table
6131970d693SJung-uk Kim  *
6141970d693SJung-uk Kim  * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
6151970d693SJung-uk Kim  * Nov 2020
6161970d693SJung-uk Kim  *
6171970d693SJung-uk Kim  ******************************************************************************/
6181970d693SJung-uk Kim 
6191970d693SJung-uk Kim typedef struct acpi_table_bdat
6201970d693SJung-uk Kim {
6211970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;
6221970d693SJung-uk Kim     ACPI_GENERIC_ADDRESS    Gas;
6231970d693SJung-uk Kim 
6241970d693SJung-uk Kim } ACPI_TABLE_BDAT;
6251970d693SJung-uk Kim 
6269a4bc520SJung-uk Kim /*******************************************************************************
6279a4bc520SJung-uk Kim  *
6289a4bc520SJung-uk Kim  * CCEL - CC-Event Log
6299a4bc520SJung-uk Kim  *        From: "Guest-Host-Communication Interface (GHCI) for Intel
6309a4bc520SJung-uk Kim  *        Trust Domain Extensions (Intel TDX)". Feb 2022
6319a4bc520SJung-uk Kim  *
6329a4bc520SJung-uk Kim  ******************************************************************************/
6339a4bc520SJung-uk Kim 
6349a4bc520SJung-uk Kim typedef struct acpi_table_ccel
6359a4bc520SJung-uk Kim {
6369a4bc520SJung-uk Kim     ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
6379a4bc520SJung-uk Kim     UINT8                   CCType;
6389a4bc520SJung-uk Kim     UINT8                   CCSubType;
6399a4bc520SJung-uk Kim     UINT16                  Reserved;
6409a4bc520SJung-uk Kim     UINT64                  LogAreaMinimumLength;
6419a4bc520SJung-uk Kim     UINT64                  LogAreaStartAddress;
6429a4bc520SJung-uk Kim 
6439a4bc520SJung-uk Kim } ACPI_TABLE_CCEL;
6441970d693SJung-uk Kim 
6451970d693SJung-uk Kim /*******************************************************************************
6461970d693SJung-uk Kim  *
647*58308fadSJung-uk Kim  * ERDT - Enhanced Resource Director Technology (ERDT) table
648*58308fadSJung-uk Kim  *
649*58308fadSJung-uk Kim  * Conforms to "Intel Resource Director Technology Architecture Specification"
650*58308fadSJung-uk Kim  * Version 1.1, January 2025
651*58308fadSJung-uk Kim  *
652*58308fadSJung-uk Kim  ******************************************************************************/
653*58308fadSJung-uk Kim 
654*58308fadSJung-uk Kim typedef struct acpi_table_erdt
655*58308fadSJung-uk Kim {
656*58308fadSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
657*58308fadSJung-uk Kim     UINT32                  MaxClos;            /* Maximum classes of service */
658*58308fadSJung-uk Kim     UINT8                   Reserved[24];
659*58308fadSJung-uk Kim     UINT8                   Erdt_Substructures[];
660*58308fadSJung-uk Kim 
661*58308fadSJung-uk Kim } ACPI_TABLE_ERDT;
662*58308fadSJung-uk Kim 
663*58308fadSJung-uk Kim 
664*58308fadSJung-uk Kim /* Values for subtable type in ACPI_SUBTBL_HDR_16 */
665*58308fadSJung-uk Kim 
666*58308fadSJung-uk Kim enum AcpiErdtType
667*58308fadSJung-uk Kim {
668*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_RMDD                 = 0,
669*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_CACD                 = 1,
670*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_DACD                 = 2,
671*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_CMRC                 = 3,
672*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_MMRC                 = 4,
673*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_MARC                 = 5,
674*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_CARC                 = 6,
675*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_CMRD                 = 7,
676*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_IBRD                 = 8,
677*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_IBAD                 = 9,
678*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_CARD                 = 10,
679*58308fadSJung-uk Kim     ACPI_ERDT_TYPE_RESERVED             = 11    /* 11 and above are reserved */
680*58308fadSJung-uk Kim 
681*58308fadSJung-uk Kim };
682*58308fadSJung-uk Kim 
683*58308fadSJung-uk Kim /*
684*58308fadSJung-uk Kim  * ERDT Subtables, correspond to Type in ACPI_SUBTBL_HDR_16
685*58308fadSJung-uk Kim  */
686*58308fadSJung-uk Kim 
687*58308fadSJung-uk Kim /* 0: RMDD - Resource Management Domain Description */
688*58308fadSJung-uk Kim 
689*58308fadSJung-uk Kim typedef struct acpi_erdt_rmdd
690*58308fadSJung-uk Kim {
691*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
692*58308fadSJung-uk Kim     UINT16                  Flags;
693*58308fadSJung-uk Kim     UINT16                  IO_l3_Slices;       /* Number of slices in IO cache */
694*58308fadSJung-uk Kim     UINT8                   IO_l3_Sets;         /* Number of sets in IO cache */
695*58308fadSJung-uk Kim     UINT8                   IO_l3_Ways;         /* Number of ways in IO cache */
696*58308fadSJung-uk Kim     UINT64                  Reserved;
697*58308fadSJung-uk Kim     UINT16                  DomainId;           /* Unique domain ID */
698*58308fadSJung-uk Kim     UINT32                  MaxRmid;            /* Maximun RMID supported */
699*58308fadSJung-uk Kim     UINT64                  CregBase;           /* Control Register Base Address */
700*58308fadSJung-uk Kim     UINT16                  CregSize;           /* Control Register Size (4K pages) */
701*58308fadSJung-uk Kim     UINT8                   RmddStructs[];
702*58308fadSJung-uk Kim 
703*58308fadSJung-uk Kim } ACPI_ERDT_RMDD;
704*58308fadSJung-uk Kim 
705*58308fadSJung-uk Kim 
706*58308fadSJung-uk Kim /* 1: CACD - CPU Agent Collection Description */
707*58308fadSJung-uk Kim 
708*58308fadSJung-uk Kim typedef struct acpi_erdt_cacd
709*58308fadSJung-uk Kim {
710*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
711*58308fadSJung-uk Kim     UINT16                  Reserved;
712*58308fadSJung-uk Kim     UINT16                  DomainId;           /* Unique domain ID */
713*58308fadSJung-uk Kim     UINT32                  X2APICIDS[];
714*58308fadSJung-uk Kim 
715*58308fadSJung-uk Kim } ACPI_ERDT_CACD;
716*58308fadSJung-uk Kim 
717*58308fadSJung-uk Kim 
718*58308fadSJung-uk Kim /* 2: DACD - Device Agent Collection Description */
719*58308fadSJung-uk Kim 
720*58308fadSJung-uk Kim typedef struct acpi_erdt_dacd
721*58308fadSJung-uk Kim {
722*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
723*58308fadSJung-uk Kim     UINT16                  Reserved;
724*58308fadSJung-uk Kim     UINT16                  DomainId;           /* Unique domain ID */
725*58308fadSJung-uk Kim     UINT8                   DevPaths[];
726*58308fadSJung-uk Kim 
727*58308fadSJung-uk Kim } ACPI_ERDT_DACD;
728*58308fadSJung-uk Kim 
729*58308fadSJung-uk Kim typedef struct acpi_erdt_dacd_dev_paths
730*58308fadSJung-uk Kim {
731*58308fadSJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
732*58308fadSJung-uk Kim     UINT16                  Segment;
733*58308fadSJung-uk Kim     UINT8                   Reserved;
734*58308fadSJung-uk Kim     UINT8                   StartBus;
735*58308fadSJung-uk Kim     UINT8                   Path[];
736*58308fadSJung-uk Kim 
737*58308fadSJung-uk Kim } ACPI_ERDT_DACD_PATHS;
738*58308fadSJung-uk Kim 
739*58308fadSJung-uk Kim 
740*58308fadSJung-uk Kim /* 3: CMRC - Cache Monitoring Registers for CPU Agents */
741*58308fadSJung-uk Kim 
742*58308fadSJung-uk Kim typedef struct acpi_erdt_cmrc
743*58308fadSJung-uk Kim {
744*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
745*58308fadSJung-uk Kim     UINT32                  Reserved1;
746*58308fadSJung-uk Kim     UINT32                  Flags;
747*58308fadSJung-uk Kim     UINT8                   IndexFn;
748*58308fadSJung-uk Kim     UINT8                   Reserved2[11];
749*58308fadSJung-uk Kim     UINT64                  CmtRegBase;
750*58308fadSJung-uk Kim     UINT32                  CmtRegSize;
751*58308fadSJung-uk Kim     UINT16                  ClumpSize;
752*58308fadSJung-uk Kim     UINT16                  ClumpStride;
753*58308fadSJung-uk Kim     UINT64                  UpScale;
754*58308fadSJung-uk Kim 
755*58308fadSJung-uk Kim } ACPI_ERDT_CMRC;
756*58308fadSJung-uk Kim 
757*58308fadSJung-uk Kim 
758*58308fadSJung-uk Kim /* 4: MMRC - Memory-bandwidth Monitoring Registers for CPU Agents */
759*58308fadSJung-uk Kim 
760*58308fadSJung-uk Kim typedef struct acpi_erdt_mmrc
761*58308fadSJung-uk Kim {
762*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
763*58308fadSJung-uk Kim     UINT32                  Reserved1;
764*58308fadSJung-uk Kim     UINT32                  Flags;
765*58308fadSJung-uk Kim     UINT8                   IndexFn;
766*58308fadSJung-uk Kim     UINT8                   Reserved2[11];
767*58308fadSJung-uk Kim     UINT64                  RegBase;
768*58308fadSJung-uk Kim     UINT32                  RegSize;
769*58308fadSJung-uk Kim     UINT8                   CounterWidth;
770*58308fadSJung-uk Kim     UINT64                  UpScale;
771*58308fadSJung-uk Kim     UINT8                   Reserved3[7];
772*58308fadSJung-uk Kim     UINT32                  CorrFactorListLen;
773*58308fadSJung-uk Kim     UINT32                  CorrFactorList[];
774*58308fadSJung-uk Kim 
775*58308fadSJung-uk Kim } ACPI_ERDT_MMRC;
776*58308fadSJung-uk Kim 
777*58308fadSJung-uk Kim 
778*58308fadSJung-uk Kim /* 5: MARC - Memory-bandwidth Allocation Registers for CPU Agents */
779*58308fadSJung-uk Kim 
780*58308fadSJung-uk Kim typedef struct acpi_erdt_marc
781*58308fadSJung-uk Kim {
782*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
783*58308fadSJung-uk Kim     UINT16                  Reserved1;
784*58308fadSJung-uk Kim     UINT16                  Flags;
785*58308fadSJung-uk Kim     UINT8                   IndexFn;
786*58308fadSJung-uk Kim     UINT8                   Reserved2[7];
787*58308fadSJung-uk Kim     UINT64                  RegBaseOpt;
788*58308fadSJung-uk Kim     UINT64                  RegBaseMin;
789*58308fadSJung-uk Kim     UINT64                  RegBaseMax;
790*58308fadSJung-uk Kim     UINT32                  MbaRegSize;
791*58308fadSJung-uk Kim     UINT32                  MbaCtrlRange;
792*58308fadSJung-uk Kim 
793*58308fadSJung-uk Kim } ACPI_ERDT_MARC;
794*58308fadSJung-uk Kim 
795*58308fadSJung-uk Kim 
796*58308fadSJung-uk Kim /* 6: CARC - Cache Allocation Registers for CPU Agents */
797*58308fadSJung-uk Kim 
798*58308fadSJung-uk Kim typedef struct acpi_erdt_carc
799*58308fadSJung-uk Kim {
800*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
801*58308fadSJung-uk Kim 
802*58308fadSJung-uk Kim } ACPI_ERDT_CARC;
803*58308fadSJung-uk Kim 
804*58308fadSJung-uk Kim 
805*58308fadSJung-uk Kim /* 7: CMRD - Cache Monitoring Registers for Device Agents */
806*58308fadSJung-uk Kim 
807*58308fadSJung-uk Kim typedef struct acpi_erdt_cmrd
808*58308fadSJung-uk Kim {
809*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
810*58308fadSJung-uk Kim     UINT32                  Reserved1;
811*58308fadSJung-uk Kim     UINT32                  Flags;
812*58308fadSJung-uk Kim     UINT8                   IndexFn;
813*58308fadSJung-uk Kim     UINT8                   Reserved2[11];
814*58308fadSJung-uk Kim     UINT64                  RegBase;
815*58308fadSJung-uk Kim     UINT32                  RegSize;
816*58308fadSJung-uk Kim     UINT16                  CmtRegOff;
817*58308fadSJung-uk Kim     UINT16                  CmtClumpSize;
818*58308fadSJung-uk Kim     UINT64                  UpScale;
819*58308fadSJung-uk Kim 
820*58308fadSJung-uk Kim } ACPI_ERDT_CMRD;
821*58308fadSJung-uk Kim 
822*58308fadSJung-uk Kim 
823*58308fadSJung-uk Kim /* 8: IBRD - Cache Monitoring Registers for Device Agents */
824*58308fadSJung-uk Kim 
825*58308fadSJung-uk Kim typedef struct acpi_erdt_ibrd
826*58308fadSJung-uk Kim {
827*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
828*58308fadSJung-uk Kim     UINT32                  Reserved1;
829*58308fadSJung-uk Kim     UINT32                  Flags;
830*58308fadSJung-uk Kim     UINT8                   IndexFn;
831*58308fadSJung-uk Kim     UINT8                   Reserved2[11];
832*58308fadSJung-uk Kim     UINT64                  RegBase;
833*58308fadSJung-uk Kim     UINT32                  RegSize;
834*58308fadSJung-uk Kim     UINT16                  TotalBwOffset;
835*58308fadSJung-uk Kim     UINT16                  IOMissBwOffset;
836*58308fadSJung-uk Kim     UINT16                  TotalBwClump;
837*58308fadSJung-uk Kim     UINT16                  IOMissBwClump;
838*58308fadSJung-uk Kim     UINT8                   Reserved3[7];
839*58308fadSJung-uk Kim     UINT8                   CounterWidth;
840*58308fadSJung-uk Kim     UINT64                  UpScale;
841*58308fadSJung-uk Kim     UINT32                  CorrFactorListLen;
842*58308fadSJung-uk Kim     UINT32                  CorrFactorList[];
843*58308fadSJung-uk Kim 
844*58308fadSJung-uk Kim } ACPI_ERDT_IBRD;
845*58308fadSJung-uk Kim 
846*58308fadSJung-uk Kim 
847*58308fadSJung-uk Kim /* 9: IBAD - IO bandwidth Allocation Registers for device agents */
848*58308fadSJung-uk Kim 
849*58308fadSJung-uk Kim typedef struct acpi_erdt_ibad
850*58308fadSJung-uk Kim {
851*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
852*58308fadSJung-uk Kim 
853*58308fadSJung-uk Kim } ACPI_ERDT_IBAD;
854*58308fadSJung-uk Kim 
855*58308fadSJung-uk Kim 
856*58308fadSJung-uk Kim /* 10: CARD - IO bandwidth Allocation Registers for Device Agents */
857*58308fadSJung-uk Kim 
858*58308fadSJung-uk Kim typedef struct acpi_erdt_card
859*58308fadSJung-uk Kim {
860*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
861*58308fadSJung-uk Kim     UINT32                  Reserved1;
862*58308fadSJung-uk Kim     UINT32                  Flags;
863*58308fadSJung-uk Kim     UINT32                  ContentionMask;
864*58308fadSJung-uk Kim     UINT8                   IndexFn;
865*58308fadSJung-uk Kim     UINT8                   Reserved2[7];
866*58308fadSJung-uk Kim     UINT64                  RegBase;
867*58308fadSJung-uk Kim     UINT32                  RegSize;
868*58308fadSJung-uk Kim     UINT16                  CatRegOffset;
869*58308fadSJung-uk Kim     UINT16                  CatRegBlockSize;
870*58308fadSJung-uk Kim 
871*58308fadSJung-uk Kim } ACPI_ERDT_CARD;
872*58308fadSJung-uk Kim 
873*58308fadSJung-uk Kim 
874*58308fadSJung-uk Kim /*******************************************************************************
875*58308fadSJung-uk Kim  *
876a371a5fdSJung-uk Kim  * IORT - IO Remapping Table
877a371a5fdSJung-uk Kim  *
878a371a5fdSJung-uk Kim  * Conforms to "IO Remapping Table System Software on ARM Platforms",
87992f570c3SJung-uk Kim  * Document number: ARM DEN 0049E.f, Apr 2024
880a371a5fdSJung-uk Kim  *
881a371a5fdSJung-uk Kim  ******************************************************************************/
882a371a5fdSJung-uk Kim 
883a371a5fdSJung-uk Kim typedef struct acpi_table_iort
884a371a5fdSJung-uk Kim {
885a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;
886a371a5fdSJung-uk Kim     UINT32                  NodeCount;
887a371a5fdSJung-uk Kim     UINT32                  NodeOffset;
888a371a5fdSJung-uk Kim     UINT32                  Reserved;
889a371a5fdSJung-uk Kim 
890a371a5fdSJung-uk Kim } ACPI_TABLE_IORT;
891a371a5fdSJung-uk Kim 
892a371a5fdSJung-uk Kim 
893a371a5fdSJung-uk Kim /*
894a371a5fdSJung-uk Kim  * IORT subtables
895a371a5fdSJung-uk Kim  */
896a371a5fdSJung-uk Kim typedef struct acpi_iort_node
897a371a5fdSJung-uk Kim {
898a371a5fdSJung-uk Kim     UINT8                   Type;
899a371a5fdSJung-uk Kim     UINT16                  Length;
900a371a5fdSJung-uk Kim     UINT8                   Revision;
901cfd1ed46SJung-uk Kim     UINT32                  Identifier;
902a371a5fdSJung-uk Kim     UINT32                  MappingCount;
903a371a5fdSJung-uk Kim     UINT32                  MappingOffset;
904722b1667SJung-uk Kim     char                    NodeData[];
905a371a5fdSJung-uk Kim 
906a371a5fdSJung-uk Kim } ACPI_IORT_NODE;
907a371a5fdSJung-uk Kim 
908a371a5fdSJung-uk Kim /* Values for subtable Type above */
909a371a5fdSJung-uk Kim 
910a371a5fdSJung-uk Kim enum AcpiIortNodeType
911a371a5fdSJung-uk Kim {
912a371a5fdSJung-uk Kim     ACPI_IORT_NODE_ITS_GROUP            = 0x00,
913a371a5fdSJung-uk Kim     ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
914a371a5fdSJung-uk Kim     ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
915f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU                 = 0x03,
9163d90091dSJung-uk Kim     ACPI_IORT_NODE_SMMU_V3              = 0x04,
917cfd1ed46SJung-uk Kim     ACPI_IORT_NODE_PMCG                 = 0x05,
918cfd1ed46SJung-uk Kim     ACPI_IORT_NODE_RMR                  = 0x06,
919a371a5fdSJung-uk Kim };
920a371a5fdSJung-uk Kim 
921a371a5fdSJung-uk Kim 
922a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping
923a371a5fdSJung-uk Kim {
924a371a5fdSJung-uk Kim     UINT32                  InputBase;          /* Lowest value in input range */
925a371a5fdSJung-uk Kim     UINT32                  IdCount;            /* Number of IDs */
926a371a5fdSJung-uk Kim     UINT32                  OutputBase;         /* Lowest value in output range */
927a371a5fdSJung-uk Kim     UINT32                  OutputReference;    /* A reference to the output node */
928a371a5fdSJung-uk Kim     UINT32                  Flags;
929a371a5fdSJung-uk Kim 
930a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING;
931a371a5fdSJung-uk Kim 
932a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */
933a371a5fdSJung-uk Kim 
934a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1)
935a371a5fdSJung-uk Kim 
936a371a5fdSJung-uk Kim 
937a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access
938a371a5fdSJung-uk Kim {
939a371a5fdSJung-uk Kim     UINT32                  CacheCoherency;
940a371a5fdSJung-uk Kim     UINT8                   Hints;
941a371a5fdSJung-uk Kim     UINT16                  Reserved;
942a371a5fdSJung-uk Kim     UINT8                   MemoryFlags;
943a371a5fdSJung-uk Kim 
944a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS;
945a371a5fdSJung-uk Kim 
946a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */
947a371a5fdSJung-uk Kim 
948a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
949a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
950a371a5fdSJung-uk Kim 
951a371a5fdSJung-uk Kim /* Masks for Hints field above */
952a371a5fdSJung-uk Kim 
953a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT          (1)
954a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE              (1<<1)
955a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ               (1<<2)
956a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE           (1<<3)
957a371a5fdSJung-uk Kim 
958a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */
959a371a5fdSJung-uk Kim 
960a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY          (1)
961a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
96292f570c3SJung-uk Kim #define ACPI_IORT_MF_CANWBS             (1<<2)
963a371a5fdSJung-uk Kim 
964a371a5fdSJung-uk Kim 
965a371a5fdSJung-uk Kim /*
966a371a5fdSJung-uk Kim  * IORT node specific subtables
967a371a5fdSJung-uk Kim  */
968a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group
969a371a5fdSJung-uk Kim {
970a371a5fdSJung-uk Kim     UINT32                  ItsCount;
971722b1667SJung-uk Kim     UINT32                  Identifiers[];          /* GIC ITS identifier array */
972a371a5fdSJung-uk Kim 
973a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP;
974a371a5fdSJung-uk Kim 
975a371a5fdSJung-uk Kim 
976a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component
977a371a5fdSJung-uk Kim {
978a371a5fdSJung-uk Kim     UINT32                  NodeFlags;
979a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
980a371a5fdSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
981722b1667SJung-uk Kim     char                    DeviceName[];           /* Path of namespace object */
982a371a5fdSJung-uk Kim 
983a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT;
984a371a5fdSJung-uk Kim 
9853d90091dSJung-uk Kim /* Masks for Flags field above */
9863d90091dSJung-uk Kim 
9873d90091dSJung-uk Kim #define ACPI_IORT_NC_STALL_SUPPORTED    (1)
9883d90091dSJung-uk Kim #define ACPI_IORT_NC_PASID_BITS         (31<<1)
989a371a5fdSJung-uk Kim 
990a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex
991a371a5fdSJung-uk Kim {
992a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
993a371a5fdSJung-uk Kim     UINT32                  AtsAttribute;
994a371a5fdSJung-uk Kim     UINT32                  PciSegmentNumber;
9953d90091dSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
996ab71bbb7SJung-uk Kim     UINT16                  PasidCapabilities;      /* PASID Capabilities */
997722b1667SJung-uk Kim     UINT8                   Reserved[];             /* Reserved, must be zero */
998a371a5fdSJung-uk Kim 
999a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX;
1000a371a5fdSJung-uk Kim 
1001cfd1ed46SJung-uk Kim /* Masks for AtsAttribute field above */
1002a371a5fdSJung-uk Kim 
1003cfd1ed46SJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED         (1)     /* The root complex ATS support */
1004cfd1ed46SJung-uk Kim #define ACPI_IORT_PRI_SUPPORTED         (1<<1)  /* The root complex PRI support */
1005cfd1ed46SJung-uk Kim #define ACPI_IORT_PASID_FWD_SUPPORTED   (1<<2)  /* The root complex PASID forward support */
1006a371a5fdSJung-uk Kim 
1007ab71bbb7SJung-uk Kim /* Masks for PasidCapabilities field above */
1008ab71bbb7SJung-uk Kim #define ACPI_IORT_PASID_MAX_WIDTH       (0x1F)  /* Bits 0-4 */
1009a371a5fdSJung-uk Kim 
1010a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu
1011a371a5fdSJung-uk Kim {
1012a371a5fdSJung-uk Kim     UINT64                  BaseAddress;            /* SMMU base address */
1013a371a5fdSJung-uk Kim     UINT64                  Span;                   /* Length of memory range */
1014a371a5fdSJung-uk Kim     UINT32                  Model;
1015a371a5fdSJung-uk Kim     UINT32                  Flags;
1016a371a5fdSJung-uk Kim     UINT32                  GlobalInterruptOffset;
1017a371a5fdSJung-uk Kim     UINT32                  ContextInterruptCount;
1018a371a5fdSJung-uk Kim     UINT32                  ContextInterruptOffset;
1019a371a5fdSJung-uk Kim     UINT32                  PmuInterruptCount;
1020a371a5fdSJung-uk Kim     UINT32                  PmuInterruptOffset;
1021722b1667SJung-uk Kim     UINT64                  Interrupts[];           /* Interrupt array */
1022a371a5fdSJung-uk Kim 
1023a371a5fdSJung-uk Kim } ACPI_IORT_SMMU;
1024a371a5fdSJung-uk Kim 
1025a371a5fdSJung-uk Kim /* Values for Model field above */
1026a371a5fdSJung-uk Kim 
1027a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
1028a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
1029a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
1030a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
10315f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004  /* ARM Corelink MMU-401 */
10325f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005  /* Cavium ThunderX SMMUv2 */
1033a371a5fdSJung-uk Kim 
1034a371a5fdSJung-uk Kim /* Masks for Flags field above */
1035a371a5fdSJung-uk Kim 
1036a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
1037a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
1038a371a5fdSJung-uk Kim 
10390d84335fSJung-uk Kim /* Global interrupt format */
10400d84335fSJung-uk Kim 
10410d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi
10420d84335fSJung-uk Kim {
10430d84335fSJung-uk Kim     UINT32                  NSgIrpt;
10440d84335fSJung-uk Kim     UINT32                  NSgIrptFlags;
10450d84335fSJung-uk Kim     UINT32                  NSgCfgIrpt;
10460d84335fSJung-uk Kim     UINT32                  NSgCfgIrptFlags;
10472f6a1a81SJung-uk Kim 
10480d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI;
10490d84335fSJung-uk Kim 
1050a371a5fdSJung-uk Kim 
1051f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3
1052f8146b88SJung-uk Kim {
1053f8146b88SJung-uk Kim     UINT64                  BaseAddress;            /* SMMUv3 base address */
1054f8146b88SJung-uk Kim     UINT32                  Flags;
1055f8146b88SJung-uk Kim     UINT32                  Reserved;
1056f8146b88SJung-uk Kim     UINT64                  VatosAddress;
10575f9b24faSJung-uk Kim     UINT32                  Model;
1058f8146b88SJung-uk Kim     UINT32                  EventGsiv;
1059f8146b88SJung-uk Kim     UINT32                  PriGsiv;
1060f8146b88SJung-uk Kim     UINT32                  GerrGsiv;
1061f8146b88SJung-uk Kim     UINT32                  SyncGsiv;
10623d90091dSJung-uk Kim     UINT32                  Pxm;
1063b7b7e711SJung-uk Kim     UINT32                  IdMappingIndex;
1064f8146b88SJung-uk Kim 
1065f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3;
1066f8146b88SJung-uk Kim 
10675f9b24faSJung-uk Kim /* Values for Model field above */
10685f9b24faSJung-uk Kim 
10695f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000  /* Generic SMMUv3 */
10705f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001  /* HiSilicon Hi161x SMMUv3 */
10715f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002  /* Cavium CN99xx SMMUv3 */
10725f9b24faSJung-uk Kim 
1073f8146b88SJung-uk Kim /* Masks for Flags field above */
1074f8146b88SJung-uk Kim 
1075f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
10763d90091dSJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (3<<1)
10775f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
10789a4bc520SJung-uk Kim #define ACPI_IORT_SMMU_V3_DEVICEID_VALID    (1<<4)
1079f8146b88SJung-uk Kim 
10803d90091dSJung-uk Kim typedef struct acpi_iort_pmcg
10813d90091dSJung-uk Kim {
10823d90091dSJung-uk Kim     UINT64                  Page0BaseAddress;
10833d90091dSJung-uk Kim     UINT32                  OverflowGsiv;
10843d90091dSJung-uk Kim     UINT32                  NodeReference;
10853d90091dSJung-uk Kim     UINT64                  Page1BaseAddress;
10863d90091dSJung-uk Kim 
10873d90091dSJung-uk Kim } ACPI_IORT_PMCG;
10883d90091dSJung-uk Kim 
1089cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr {
1090cfd1ed46SJung-uk Kim     UINT32 Flags;
1091cfd1ed46SJung-uk Kim     UINT32 RmrCount;
1092cfd1ed46SJung-uk Kim     UINT32 RmrOffset;
1093cfd1ed46SJung-uk Kim 
1094cfd1ed46SJung-uk Kim } ACPI_IORT_RMR;
1095cfd1ed46SJung-uk Kim 
1096ab71bbb7SJung-uk Kim /* Masks for Flags field above */
1097ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_REMAP_PERMITTED      (1)
1098ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ACCESS_PRIVILEGE     (1<<1)
1099ab71bbb7SJung-uk Kim 
1100ab71bbb7SJung-uk Kim /*
1101ab71bbb7SJung-uk Kim  * Macro to access the Access Attributes in flags field above:
1102ab71bbb7SJung-uk Kim  *  Access Attributes is encoded in bits 9:2
1103ab71bbb7SJung-uk Kim  */
1104ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags)          (((flags) >> 2) & 0xFF)
1105ab71bbb7SJung-uk Kim 
1106ab71bbb7SJung-uk Kim /* Values for above Access Attributes */
1107ab71bbb7SJung-uk Kim 
1108ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE   0x00
1109ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE    0x01
1110ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGRE     0x02
1111ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_GRE      0x03
1112ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_NORMAL_NC       0x04
1113ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB  0x05
1114ab71bbb7SJung-uk Kim 
1115cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr_desc {
1116cfd1ed46SJung-uk Kim     UINT64 BaseAddress;
1117cfd1ed46SJung-uk Kim     UINT64 Length;
1118cfd1ed46SJung-uk Kim     UINT32 Reserved;
1119cfd1ed46SJung-uk Kim 
1120cfd1ed46SJung-uk Kim } ACPI_IORT_RMR_DESC;
1121f8146b88SJung-uk Kim 
1122a371a5fdSJung-uk Kim /*******************************************************************************
1123a371a5fdSJung-uk Kim  *
1124d6dd1baeSJung-uk Kim  * IVRS - I/O Virtualization Reporting Structure
1125d6dd1baeSJung-uk Kim  *        Version 1
1126d6dd1baeSJung-uk Kim  *
1127d6dd1baeSJung-uk Kim  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
1128d6dd1baeSJung-uk Kim  * Revision 1.26, February 2009.
1129d6dd1baeSJung-uk Kim  *
1130d6dd1baeSJung-uk Kim  ******************************************************************************/
1131d6dd1baeSJung-uk Kim 
1132d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs
1133d6dd1baeSJung-uk Kim {
1134d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1135d6dd1baeSJung-uk Kim     UINT32                  Info;               /* Common virtualization info */
1136d6dd1baeSJung-uk Kim     UINT64                  Reserved;
1137d6dd1baeSJung-uk Kim 
1138d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS;
1139d6dd1baeSJung-uk Kim 
1140d6dd1baeSJung-uk Kim /* Values for Info field above */
1141d6dd1baeSJung-uk Kim 
1142d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
1143d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
1144d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
1145d6dd1baeSJung-uk Kim 
1146d6dd1baeSJung-uk Kim 
1147d6dd1baeSJung-uk Kim /* IVRS subtable header */
1148d6dd1baeSJung-uk Kim 
1149d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header
1150d6dd1baeSJung-uk Kim {
1151d6dd1baeSJung-uk Kim     UINT8                   Type;               /* Subtable type */
1152d6dd1baeSJung-uk Kim     UINT8                   Flags;
1153d6dd1baeSJung-uk Kim     UINT16                  Length;             /* Subtable length */
1154d6dd1baeSJung-uk Kim     UINT16                  DeviceId;           /* ID of IOMMU */
1155d6dd1baeSJung-uk Kim 
1156d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER;
1157d6dd1baeSJung-uk Kim 
1158d6dd1baeSJung-uk Kim /* Values for subtable Type above */
1159d6dd1baeSJung-uk Kim 
1160d6dd1baeSJung-uk Kim enum AcpiIvrsType
1161d6dd1baeSJung-uk Kim {
11623ee58df5SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE1        = 0x10,
11633ee58df5SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE2        = 0x11,
1164cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE3        = 0x40,
1165d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
1166d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
1167d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY3          = 0x22
1168d6dd1baeSJung-uk Kim };
1169d6dd1baeSJung-uk Kim 
1170d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */
1171d6dd1baeSJung-uk Kim 
1172d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE         (1)
1173d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW           (1<<1)
1174d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW       (1<<2)
1175d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC              (1<<3)
1176d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB             (1<<4)
1177d6dd1baeSJung-uk Kim 
1178d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */
1179d6dd1baeSJung-uk Kim 
1180d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY             (1)
1181d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ              (1<<1)
1182d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE             (1<<2)
1183d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
1184d6dd1baeSJung-uk Kim 
1185d6dd1baeSJung-uk Kim 
1186d6dd1baeSJung-uk Kim /*
1187d6dd1baeSJung-uk Kim  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
1188d6dd1baeSJung-uk Kim  */
1189d6dd1baeSJung-uk Kim 
1190d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
1191d6dd1baeSJung-uk Kim 
11923ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_10
1193d6dd1baeSJung-uk Kim {
1194d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
1195d6dd1baeSJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
1196d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
1197d6dd1baeSJung-uk Kim     UINT16                  PciSegmentGroup;
1198d6dd1baeSJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
11993ee58df5SJung-uk Kim     UINT32                  FeatureReporting;
1200d6dd1baeSJung-uk Kim 
12013ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE1;
12023ee58df5SJung-uk Kim 
12033ee58df5SJung-uk Kim /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
12043ee58df5SJung-uk Kim 
12053ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_11
12063ee58df5SJung-uk Kim {
12073ee58df5SJung-uk Kim     ACPI_IVRS_HEADER        Header;
12083ee58df5SJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
12093ee58df5SJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
12103ee58df5SJung-uk Kim     UINT16                  PciSegmentGroup;
12113ee58df5SJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
12123ee58df5SJung-uk Kim     UINT32                  Attributes;
12133ee58df5SJung-uk Kim     UINT64                  EfrRegisterImage;
12143ee58df5SJung-uk Kim     UINT64                  Reserved;
12153ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE2;
1216d6dd1baeSJung-uk Kim 
1217d6dd1baeSJung-uk Kim /* Masks for Info field above */
1218d6dd1baeSJung-uk Kim 
1219d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
1220d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
1221d6dd1baeSJung-uk Kim 
1222d6dd1baeSJung-uk Kim 
1223d6dd1baeSJung-uk Kim /*
1224d6dd1baeSJung-uk Kim  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
1225d6dd1baeSJung-uk Kim  * Upper two bits of the Type field are the (encoded) length of the structure.
1226d6dd1baeSJung-uk Kim  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
1227d6dd1baeSJung-uk Kim  * are reserved for future use but not defined.
1228d6dd1baeSJung-uk Kim  */
1229d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header
1230d6dd1baeSJung-uk Kim {
1231d6dd1baeSJung-uk Kim     UINT8                   Type;
1232d6dd1baeSJung-uk Kim     UINT16                  Id;
1233d6dd1baeSJung-uk Kim     UINT8                   DataSetting;
1234d6dd1baeSJung-uk Kim 
1235d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER;
1236d6dd1baeSJung-uk Kim 
1237d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */
1238d6dd1baeSJung-uk Kim 
1239d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH      0xC0
1240d6dd1baeSJung-uk Kim 
1241d6dd1baeSJung-uk Kim /* Values for device entry Type field above */
1242d6dd1baeSJung-uk Kim 
1243d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType
1244d6dd1baeSJung-uk Kim {
1245d6dd1baeSJung-uk Kim     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
1246d6dd1baeSJung-uk Kim 
1247d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD4             = 0,
1248d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALL              = 1,
1249d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SELECT           = 2,
1250d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_START            = 3,
1251d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_END              = 4,
1252d6dd1baeSJung-uk Kim 
1253d6dd1baeSJung-uk Kim     /* 8-byte device entries */
1254d6dd1baeSJung-uk Kim 
1255d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD8             = 64,
1256d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_NOT_USED         = 65,
1257d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
1258d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
1259d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
1260d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
1261cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_SPECIAL          = 72, /* Uses ACPI_IVRS_DEVICE8C */
1262cfd1ed46SJung-uk Kim 
1263cfd1ed46SJung-uk Kim     /* Variable-length device entries */
1264cfd1ed46SJung-uk Kim 
1265cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_HID              = 240 /* Uses ACPI_IVRS_DEVICE_HID */
1266d6dd1baeSJung-uk Kim };
1267d6dd1baeSJung-uk Kim 
1268d6dd1baeSJung-uk Kim /* Values for Data field above */
1269d6dd1baeSJung-uk Kim 
1270d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS         (1)
1271d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS         (1<<1)
1272d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS          (1<<2)
1273d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
1274d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS        (1<<6)
1275d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS        (1<<7)
1276d6dd1baeSJung-uk Kim 
1277d6dd1baeSJung-uk Kim 
1278d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */
1279d6dd1baeSJung-uk Kim 
1280d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4
1281d6dd1baeSJung-uk Kim {
1282d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1283d6dd1baeSJung-uk Kim 
1284d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4;
1285d6dd1baeSJung-uk Kim 
1286d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */
1287d6dd1baeSJung-uk Kim 
1288d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a
1289d6dd1baeSJung-uk Kim {
1290d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1291d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
1292d6dd1baeSJung-uk Kim     UINT16                  UsedId;
1293d6dd1baeSJung-uk Kim     UINT8                   Reserved2;
1294d6dd1baeSJung-uk Kim 
1295d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A;
1296d6dd1baeSJung-uk Kim 
1297d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */
1298d6dd1baeSJung-uk Kim 
1299d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b
1300d6dd1baeSJung-uk Kim {
1301d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1302d6dd1baeSJung-uk Kim     UINT32                  ExtendedData;
1303d6dd1baeSJung-uk Kim 
1304d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B;
1305d6dd1baeSJung-uk Kim 
1306d6dd1baeSJung-uk Kim /* Values for ExtendedData above */
1307d6dd1baeSJung-uk Kim 
1308d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED      (1<<31)
1309d6dd1baeSJung-uk Kim 
1310d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */
1311d6dd1baeSJung-uk Kim 
1312d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c
1313d6dd1baeSJung-uk Kim {
1314d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1315d6dd1baeSJung-uk Kim     UINT8                   Handle;
1316d6dd1baeSJung-uk Kim     UINT16                  UsedId;
1317d6dd1baeSJung-uk Kim     UINT8                   Variety;
1318d6dd1baeSJung-uk Kim 
1319d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C;
1320d6dd1baeSJung-uk Kim 
1321d6dd1baeSJung-uk Kim /* Values for Variety field above */
1322d6dd1baeSJung-uk Kim 
1323d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC            1
1324d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET              2
1325d6dd1baeSJung-uk Kim 
1326cfd1ed46SJung-uk Kim /* Type 240: variable-length device entry */
1327cfd1ed46SJung-uk Kim 
1328cfd1ed46SJung-uk Kim typedef struct acpi_ivrs_device_hid
1329cfd1ed46SJung-uk Kim {
1330cfd1ed46SJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
1331cfd1ed46SJung-uk Kim     UINT64                  AcpiHid;
1332cfd1ed46SJung-uk Kim     UINT64                  AcpiCid;
1333cfd1ed46SJung-uk Kim     UINT8                   UidType;
1334cfd1ed46SJung-uk Kim     UINT8                   UidLength;
1335cfd1ed46SJung-uk Kim 
1336cfd1ed46SJung-uk Kim } ACPI_IVRS_DEVICE_HID;
1337cfd1ed46SJung-uk Kim 
13381970d693SJung-uk Kim /* Values for UidType above */
13391970d693SJung-uk Kim 
13401970d693SJung-uk Kim #define ACPI_IVRS_UID_NOT_PRESENT   0
13411970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_INTEGER    1
13421970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_STRING     2
1343d6dd1baeSJung-uk Kim 
1344d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
1345d6dd1baeSJung-uk Kim 
1346d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory
1347d6dd1baeSJung-uk Kim {
1348d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
1349d6dd1baeSJung-uk Kim     UINT16                  AuxData;
1350d6dd1baeSJung-uk Kim     UINT64                  Reserved;
1351d6dd1baeSJung-uk Kim     UINT64                  StartAddress;
1352d6dd1baeSJung-uk Kim     UINT64                  MemoryLength;
1353d6dd1baeSJung-uk Kim 
1354d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY;
1355d6dd1baeSJung-uk Kim 
1356d6dd1baeSJung-uk Kim 
1357d6dd1baeSJung-uk Kim /*******************************************************************************
1358d6dd1baeSJung-uk Kim  *
1359313a0c13SJung-uk Kim  * LPIT - Low Power Idle Table
1360313a0c13SJung-uk Kim  *
1361a371a5fdSJung-uk Kim  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1362313a0c13SJung-uk Kim  *
1363313a0c13SJung-uk Kim  ******************************************************************************/
1364313a0c13SJung-uk Kim 
1365313a0c13SJung-uk Kim typedef struct acpi_table_lpit
1366313a0c13SJung-uk Kim {
1367313a0c13SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1368313a0c13SJung-uk Kim 
1369313a0c13SJung-uk Kim } ACPI_TABLE_LPIT;
1370313a0c13SJung-uk Kim 
1371313a0c13SJung-uk Kim 
1372313a0c13SJung-uk Kim /* LPIT subtable header */
1373313a0c13SJung-uk Kim 
1374313a0c13SJung-uk Kim typedef struct acpi_lpit_header
1375313a0c13SJung-uk Kim {
1376313a0c13SJung-uk Kim     UINT32                  Type;               /* Subtable type */
1377313a0c13SJung-uk Kim     UINT32                  Length;             /* Subtable length */
1378313a0c13SJung-uk Kim     UINT16                  UniqueId;
1379313a0c13SJung-uk Kim     UINT16                  Reserved;
1380313a0c13SJung-uk Kim     UINT32                  Flags;
1381313a0c13SJung-uk Kim 
1382313a0c13SJung-uk Kim } ACPI_LPIT_HEADER;
1383313a0c13SJung-uk Kim 
1384313a0c13SJung-uk Kim /* Values for subtable Type above */
1385313a0c13SJung-uk Kim 
1386313a0c13SJung-uk Kim enum AcpiLpitType
1387313a0c13SJung-uk Kim {
1388313a0c13SJung-uk Kim     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
1389a371a5fdSJung-uk Kim     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
1390313a0c13SJung-uk Kim };
1391313a0c13SJung-uk Kim 
1392313a0c13SJung-uk Kim /* Masks for Flags field above  */
1393313a0c13SJung-uk Kim 
1394313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED    (1)
1395313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER        (1<<1)
1396313a0c13SJung-uk Kim 
1397313a0c13SJung-uk Kim /*
1398313a0c13SJung-uk Kim  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
1399313a0c13SJung-uk Kim  */
1400313a0c13SJung-uk Kim 
1401313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */
1402313a0c13SJung-uk Kim 
1403313a0c13SJung-uk Kim typedef struct acpi_lpit_native
1404313a0c13SJung-uk Kim {
1405313a0c13SJung-uk Kim     ACPI_LPIT_HEADER        Header;
1406313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    EntryTrigger;
1407313a0c13SJung-uk Kim     UINT32                  Residency;
1408313a0c13SJung-uk Kim     UINT32                  Latency;
1409313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    ResidencyCounter;
1410313a0c13SJung-uk Kim     UINT64                  CounterFrequency;
1411313a0c13SJung-uk Kim 
1412313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE;
1413313a0c13SJung-uk Kim 
1414313a0c13SJung-uk Kim 
1415313a0c13SJung-uk Kim /*******************************************************************************
1416313a0c13SJung-uk Kim  *
1417ff879b07SJung-uk Kim  * MADT - Multiple APIC Description Table
1418ff879b07SJung-uk Kim  *        Version 3
1419ff879b07SJung-uk Kim  *
1420ff879b07SJung-uk Kim  ******************************************************************************/
1421ff879b07SJung-uk Kim 
1422ff879b07SJung-uk Kim typedef struct acpi_table_madt
1423ff879b07SJung-uk Kim {
1424ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1425ff879b07SJung-uk Kim     UINT32                  Address;            /* Physical address of local APIC */
1426ff879b07SJung-uk Kim     UINT32                  Flags;
1427ff879b07SJung-uk Kim 
1428ff879b07SJung-uk Kim } ACPI_TABLE_MADT;
1429ff879b07SJung-uk Kim 
1430ff879b07SJung-uk Kim /* Masks for Flags field above */
1431ff879b07SJung-uk Kim 
1432ff879b07SJung-uk Kim #define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
1433ff879b07SJung-uk Kim 
1434ff879b07SJung-uk Kim /* Values for PCATCompat flag */
1435ff879b07SJung-uk Kim 
1436ff879b07SJung-uk Kim #define ACPI_MADT_DUAL_PIC          1
1437ff879b07SJung-uk Kim #define ACPI_MADT_MULTIPLE_APIC     0
1438ff879b07SJung-uk Kim 
1439ff879b07SJung-uk Kim 
1440ff879b07SJung-uk Kim /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
1441ff879b07SJung-uk Kim 
1442ff879b07SJung-uk Kim enum AcpiMadtType
1443ff879b07SJung-uk Kim {
1444ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC               = 0,
1445ff879b07SJung-uk Kim     ACPI_MADT_TYPE_IO_APIC                  = 1,
1446ff879b07SJung-uk Kim     ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
1447ff879b07SJung-uk Kim     ACPI_MADT_TYPE_NMI_SOURCE               = 3,
1448ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
1449ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
1450ff879b07SJung-uk Kim     ACPI_MADT_TYPE_IO_SAPIC                 = 6,
1451ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
1452ff879b07SJung-uk Kim     ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
1453ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
1454ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
1455ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
1456ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR      = 12,
1457ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_MSI_FRAME        = 13,
1458ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR    = 14,
1459ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_TRANSLATOR       = 15,
1460cfd1ed46SJung-uk Kim     ACPI_MADT_TYPE_MULTIPROC_WAKEUP         = 16,
14619a4bc520SJung-uk Kim     ACPI_MADT_TYPE_CORE_PIC                 = 17,
14629a4bc520SJung-uk Kim     ACPI_MADT_TYPE_LIO_PIC                  = 18,
14639a4bc520SJung-uk Kim     ACPI_MADT_TYPE_HT_PIC                   = 19,
14649a4bc520SJung-uk Kim     ACPI_MADT_TYPE_EIO_PIC                  = 20,
14659a4bc520SJung-uk Kim     ACPI_MADT_TYPE_MSI_PIC                  = 21,
14669a4bc520SJung-uk Kim     ACPI_MADT_TYPE_BIO_PIC                  = 22,
14679a4bc520SJung-uk Kim     ACPI_MADT_TYPE_LPC_PIC                  = 23,
1468722b1667SJung-uk Kim     ACPI_MADT_TYPE_RINTC                    = 24,
146907c64d74SJung-uk Kim     ACPI_MADT_TYPE_IMSIC                    = 25,
147007c64d74SJung-uk Kim     ACPI_MADT_TYPE_APLIC                    = 26,
147107c64d74SJung-uk Kim     ACPI_MADT_TYPE_PLIC                     = 27,
147207c64d74SJung-uk Kim     ACPI_MADT_TYPE_RESERVED                 = 28,   /* 28 to 0x7F are reserved */
1473ab71bbb7SJung-uk Kim     ACPI_MADT_TYPE_OEM_RESERVED             = 0x80  /* 0x80 to 0xFF are reserved for OEM use */
1474ff879b07SJung-uk Kim };
1475ff879b07SJung-uk Kim 
1476ff879b07SJung-uk Kim 
1477ff879b07SJung-uk Kim /*
1478ff879b07SJung-uk Kim  * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
1479ff879b07SJung-uk Kim  */
1480ff879b07SJung-uk Kim 
1481ff879b07SJung-uk Kim /* 0: Processor Local APIC */
1482ff879b07SJung-uk Kim 
1483ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic
1484ff879b07SJung-uk Kim {
1485ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1486ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
1487ff879b07SJung-uk Kim     UINT8                   Id;                 /* Processor's local APIC id */
1488ff879b07SJung-uk Kim     UINT32                  LapicFlags;
1489ff879b07SJung-uk Kim 
1490ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC;
1491ff879b07SJung-uk Kim 
1492ff879b07SJung-uk Kim 
1493ff879b07SJung-uk Kim /* 1: IO APIC */
1494ff879b07SJung-uk Kim 
1495ff879b07SJung-uk Kim typedef struct acpi_madt_io_apic
1496ff879b07SJung-uk Kim {
1497ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1498ff879b07SJung-uk Kim     UINT8                   Id;                 /* I/O APIC ID */
1499ff879b07SJung-uk Kim     UINT8                   Reserved;           /* Reserved - must be zero */
1500ff879b07SJung-uk Kim     UINT32                  Address;            /* APIC physical address */
1501ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
1502ff879b07SJung-uk Kim 
1503ff879b07SJung-uk Kim } ACPI_MADT_IO_APIC;
1504ff879b07SJung-uk Kim 
1505ff879b07SJung-uk Kim 
1506ff879b07SJung-uk Kim /* 2: Interrupt Override */
1507ff879b07SJung-uk Kim 
1508ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_override
1509ff879b07SJung-uk Kim {
1510ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1511ff879b07SJung-uk Kim     UINT8                   Bus;                /* 0 - ISA */
1512ff879b07SJung-uk Kim     UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
1513ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
1514ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1515ff879b07SJung-uk Kim 
1516ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_OVERRIDE;
1517ff879b07SJung-uk Kim 
1518ff879b07SJung-uk Kim 
1519ff879b07SJung-uk Kim /* 3: NMI Source */
1520ff879b07SJung-uk Kim 
1521ff879b07SJung-uk Kim typedef struct acpi_madt_nmi_source
1522ff879b07SJung-uk Kim {
1523ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1524ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1525ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
1526ff879b07SJung-uk Kim 
1527ff879b07SJung-uk Kim } ACPI_MADT_NMI_SOURCE;
1528ff879b07SJung-uk Kim 
1529ff879b07SJung-uk Kim 
1530ff879b07SJung-uk Kim /* 4: Local APIC NMI */
1531ff879b07SJung-uk Kim 
1532ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_nmi
1533ff879b07SJung-uk Kim {
1534ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1535ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
1536ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1537ff879b07SJung-uk Kim     UINT8                   Lint;               /* LINTn to which NMI is connected */
1538ff879b07SJung-uk Kim 
1539ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_NMI;
1540ff879b07SJung-uk Kim 
1541ff879b07SJung-uk Kim 
1542ff879b07SJung-uk Kim /* 5: Address Override */
1543ff879b07SJung-uk Kim 
1544ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_override
1545ff879b07SJung-uk Kim {
1546ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1547ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
1548ff879b07SJung-uk Kim     UINT64                  Address;            /* APIC physical address */
1549ff879b07SJung-uk Kim 
1550ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_OVERRIDE;
1551ff879b07SJung-uk Kim 
1552ff879b07SJung-uk Kim 
1553ff879b07SJung-uk Kim /* 6: I/O Sapic */
1554ff879b07SJung-uk Kim 
1555ff879b07SJung-uk Kim typedef struct acpi_madt_io_sapic
1556ff879b07SJung-uk Kim {
1557ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1558ff879b07SJung-uk Kim     UINT8                   Id;                 /* I/O SAPIC ID */
1559ff879b07SJung-uk Kim     UINT8                   Reserved;           /* Reserved, must be zero */
1560ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
1561ff879b07SJung-uk Kim     UINT64                  Address;            /* SAPIC physical address */
1562ff879b07SJung-uk Kim 
1563ff879b07SJung-uk Kim } ACPI_MADT_IO_SAPIC;
1564ff879b07SJung-uk Kim 
1565ff879b07SJung-uk Kim 
1566ff879b07SJung-uk Kim /* 7: Local Sapic */
1567ff879b07SJung-uk Kim 
1568ff879b07SJung-uk Kim typedef struct acpi_madt_local_sapic
1569ff879b07SJung-uk Kim {
1570ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1571ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
1572ff879b07SJung-uk Kim     UINT8                   Id;                 /* SAPIC ID */
1573ff879b07SJung-uk Kim     UINT8                   Eid;                /* SAPIC EID */
1574ff879b07SJung-uk Kim     UINT8                   Reserved[3];        /* Reserved, must be zero */
1575ff879b07SJung-uk Kim     UINT32                  LapicFlags;
1576ff879b07SJung-uk Kim     UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
1577722b1667SJung-uk Kim     char                    UidString[];        /* String UID  - ACPI 3.0 */
1578ff879b07SJung-uk Kim 
1579ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_SAPIC;
1580ff879b07SJung-uk Kim 
1581ff879b07SJung-uk Kim 
1582ff879b07SJung-uk Kim /* 8: Platform Interrupt Source */
1583ff879b07SJung-uk Kim 
1584ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_source
1585ff879b07SJung-uk Kim {
1586ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1587ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1588ff879b07SJung-uk Kim     UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
1589ff879b07SJung-uk Kim     UINT8                   Id;                 /* Processor ID */
1590ff879b07SJung-uk Kim     UINT8                   Eid;                /* Processor EID */
1591ff879b07SJung-uk Kim     UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
1592ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
1593ff879b07SJung-uk Kim     UINT32                  Flags;              /* Interrupt Source Flags */
1594ff879b07SJung-uk Kim 
1595ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_SOURCE;
1596ff879b07SJung-uk Kim 
1597ff879b07SJung-uk Kim /* Masks for Flags field above */
1598ff879b07SJung-uk Kim 
1599ff879b07SJung-uk Kim #define ACPI_MADT_CPEI_OVERRIDE     (1)
1600ff879b07SJung-uk Kim 
1601ff879b07SJung-uk Kim 
1602ff879b07SJung-uk Kim /* 9: Processor Local X2APIC (ACPI 4.0) */
1603ff879b07SJung-uk Kim 
1604ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic
1605ff879b07SJung-uk Kim {
1606ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1607ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1608ff879b07SJung-uk Kim     UINT32                  LocalApicId;        /* Processor x2APIC ID  */
1609ff879b07SJung-uk Kim     UINT32                  LapicFlags;
1610ff879b07SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
1611ff879b07SJung-uk Kim 
1612ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC;
1613ff879b07SJung-uk Kim 
1614ff879b07SJung-uk Kim 
1615ff879b07SJung-uk Kim /* 10: Local X2APIC NMI (ACPI 4.0) */
1616ff879b07SJung-uk Kim 
1617ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic_nmi
1618ff879b07SJung-uk Kim {
1619ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1620ff879b07SJung-uk Kim     UINT16                  IntiFlags;
1621ff879b07SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
1622ff879b07SJung-uk Kim     UINT8                   Lint;               /* LINTn to which NMI is connected */
1623ff879b07SJung-uk Kim     UINT8                   Reserved[3];        /* Reserved - must be zero */
1624ff879b07SJung-uk Kim 
1625ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC_NMI;
1626ff879b07SJung-uk Kim 
1627ff879b07SJung-uk Kim 
1628722b1667SJung-uk Kim /* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */
1629ff879b07SJung-uk Kim 
1630ff879b07SJung-uk Kim typedef struct acpi_madt_generic_interrupt
1631ff879b07SJung-uk Kim {
1632ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1633ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1634ff879b07SJung-uk Kim     UINT32                  CpuInterfaceNumber;
1635ff879b07SJung-uk Kim     UINT32                  Uid;
1636ff879b07SJung-uk Kim     UINT32                  Flags;
1637ff879b07SJung-uk Kim     UINT32                  ParkingVersion;
1638ff879b07SJung-uk Kim     UINT32                  PerformanceInterrupt;
1639ff879b07SJung-uk Kim     UINT64                  ParkedAddress;
1640ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1641ff879b07SJung-uk Kim     UINT64                  GicvBaseAddress;
1642ff879b07SJung-uk Kim     UINT64                  GichBaseAddress;
1643ff879b07SJung-uk Kim     UINT32                  VgicInterrupt;
1644ff879b07SJung-uk Kim     UINT64                  GicrBaseAddress;
1645ff879b07SJung-uk Kim     UINT64                  ArmMpidr;
1646ff879b07SJung-uk Kim     UINT8                   EfficiencyClass;
1647cd6518c7SJung-uk Kim     UINT8                   Reserved2[1];
1648cd6518c7SJung-uk Kim     UINT16                  SpeInterrupt;       /* ACPI 6.3 */
1649722b1667SJung-uk Kim     UINT16                  TrbeInterrupt;      /* ACPI 6.5 */
1650ff879b07SJung-uk Kim 
1651ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_INTERRUPT;
1652ff879b07SJung-uk Kim 
1653ff879b07SJung-uk Kim /* Masks for Flags field above */
1654ff879b07SJung-uk Kim 
1655ff879b07SJung-uk Kim /* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
1656ff879b07SJung-uk Kim #define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
1657ff879b07SJung-uk Kim #define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
1658804fe266SJung-uk Kim #define ACPI_MADT_GICC_ONLINE_CAPABLE   (1<<3)  /* 03: Processor is online capable  */
1659804fe266SJung-uk Kim #define ACPI_MADT_GICC_NON_COHERENT     (1<<4)  /* 04: GIC redistributor is not coherent */
1660ff879b07SJung-uk Kim 
1661ff879b07SJung-uk Kim /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
1662ff879b07SJung-uk Kim 
1663ff879b07SJung-uk Kim typedef struct acpi_madt_generic_distributor
1664ff879b07SJung-uk Kim {
1665ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1666ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1667ff879b07SJung-uk Kim     UINT32                  GicId;
1668ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1669ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;
1670ff879b07SJung-uk Kim     UINT8                   Version;
1671ff879b07SJung-uk Kim     UINT8                   Reserved2[3];       /* Reserved - must be zero */
1672ff879b07SJung-uk Kim 
1673ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_DISTRIBUTOR;
1674ff879b07SJung-uk Kim 
1675ff879b07SJung-uk Kim /* Values for Version field above */
1676ff879b07SJung-uk Kim 
1677ff879b07SJung-uk Kim enum AcpiMadtGicVersion
1678ff879b07SJung-uk Kim {
1679ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_NONE          = 0,
1680ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V1            = 1,
1681ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V2            = 2,
1682ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V3            = 3,
1683ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V4            = 4,
1684ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_RESERVED      = 5     /* 5 and greater are reserved */
1685ff879b07SJung-uk Kim };
1686ff879b07SJung-uk Kim 
1687ff879b07SJung-uk Kim 
1688ff879b07SJung-uk Kim /* 13: Generic MSI Frame (ACPI 5.1) */
1689ff879b07SJung-uk Kim 
1690ff879b07SJung-uk Kim typedef struct acpi_madt_generic_msi_frame
1691ff879b07SJung-uk Kim {
1692ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1693ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1694ff879b07SJung-uk Kim     UINT32                  MsiFrameId;
1695ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1696ff879b07SJung-uk Kim     UINT32                  Flags;
1697ff879b07SJung-uk Kim     UINT16                  SpiCount;
1698ff879b07SJung-uk Kim     UINT16                  SpiBase;
1699ff879b07SJung-uk Kim 
1700ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_MSI_FRAME;
1701ff879b07SJung-uk Kim 
1702ff879b07SJung-uk Kim /* Masks for Flags field above */
1703ff879b07SJung-uk Kim 
1704ff879b07SJung-uk Kim #define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
1705ff879b07SJung-uk Kim 
1706ff879b07SJung-uk Kim 
1707ff879b07SJung-uk Kim /* 14: Generic Redistributor (ACPI 5.1) */
1708ff879b07SJung-uk Kim 
1709ff879b07SJung-uk Kim typedef struct acpi_madt_generic_redistributor
1710ff879b07SJung-uk Kim {
1711ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1712804fe266SJung-uk Kim     UINT8                   Flags;
1713804fe266SJung-uk Kim     UINT8                   Reserved;           /* reserved - must be zero */
1714ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1715ff879b07SJung-uk Kim     UINT32                  Length;
1716ff879b07SJung-uk Kim 
1717ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_REDISTRIBUTOR;
1718ff879b07SJung-uk Kim 
1719804fe266SJung-uk Kim #define ACPI_MADT_GICR_NON_COHERENT     (1)
1720ff879b07SJung-uk Kim 
1721ff879b07SJung-uk Kim /* 15: Generic Translator (ACPI 6.0) */
1722ff879b07SJung-uk Kim 
1723ff879b07SJung-uk Kim typedef struct acpi_madt_generic_translator
1724ff879b07SJung-uk Kim {
1725ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1726804fe266SJung-uk Kim     UINT8                   Flags;
1727804fe266SJung-uk Kim     UINT8                   Reserved;           /* reserved - must be zero */
1728ff879b07SJung-uk Kim     UINT32                  TranslationId;
1729ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1730ff879b07SJung-uk Kim     UINT32                  Reserved2;
1731ff879b07SJung-uk Kim 
1732ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_TRANSLATOR;
1733ff879b07SJung-uk Kim 
1734804fe266SJung-uk Kim #define ACPI_MADT_ITS_NON_COHERENT      (1)
1735804fe266SJung-uk Kim 
1736cfd1ed46SJung-uk Kim /* 16: Multiprocessor wakeup (ACPI 6.4) */
1737cfd1ed46SJung-uk Kim 
1738cfd1ed46SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup
1739cfd1ed46SJung-uk Kim {
1740cfd1ed46SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1741cfd1ed46SJung-uk Kim     UINT16                  MailboxVersion;
1742cfd1ed46SJung-uk Kim     UINT32                  Reserved;           /* reserved - must be zero */
1743cfd1ed46SJung-uk Kim     UINT64                  BaseAddress;
1744cfd1ed46SJung-uk Kim 
1745cfd1ed46SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP;
1746cfd1ed46SJung-uk Kim 
17471970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE        2032
17481970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE  2048
17491970d693SJung-uk Kim 
17501970d693SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup_mailbox
17511970d693SJung-uk Kim {
17521970d693SJung-uk Kim     UINT16                  Command;
17531970d693SJung-uk Kim     UINT16                  Reserved; /* reserved - must be zero */
17541970d693SJung-uk Kim     UINT32                  ApicId;
17551970d693SJung-uk Kim     UINT64                  WakeupVector;
17561970d693SJung-uk Kim     UINT8                   ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */
17571970d693SJung-uk Kim     UINT8                   ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */
17581970d693SJung-uk Kim 
17591970d693SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;
17601970d693SJung-uk Kim 
17611970d693SJung-uk Kim #define ACPI_MP_WAKE_COMMAND_WAKEUP    1
17621970d693SJung-uk Kim 
17639a4bc520SJung-uk Kim /* 17: CPU Core Interrupt Controller (ACPI 6.5) */
17649a4bc520SJung-uk Kim 
17659a4bc520SJung-uk Kim typedef struct acpi_madt_core_pic {
17669a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
17679a4bc520SJung-uk Kim     UINT8                   Version;
17689a4bc520SJung-uk Kim     UINT32                  ProcessorId;
17699a4bc520SJung-uk Kim     UINT32                  CoreId;
17709a4bc520SJung-uk Kim     UINT32                  Flags;
17719a4bc520SJung-uk Kim } ACPI_MADT_CORE_PIC;
17729a4bc520SJung-uk Kim 
17739a4bc520SJung-uk Kim /* Values for Version field above */
17749a4bc520SJung-uk Kim 
17759a4bc520SJung-uk Kim enum AcpiMadtCorePicVersion {
17769a4bc520SJung-uk Kim     ACPI_MADT_CORE_PIC_VERSION_NONE     = 0,
17779a4bc520SJung-uk Kim     ACPI_MADT_CORE_PIC_VERSION_V1       = 1,
17789a4bc520SJung-uk Kim     ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
17799a4bc520SJung-uk Kim };
17809a4bc520SJung-uk Kim 
17819a4bc520SJung-uk Kim /* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */
17829a4bc520SJung-uk Kim 
17839a4bc520SJung-uk Kim typedef struct acpi_madt_lio_pic {
17849a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
17859a4bc520SJung-uk Kim     UINT8                   Version;
17869a4bc520SJung-uk Kim     UINT64                  Address;
17879a4bc520SJung-uk Kim     UINT16                  Size;
17889a4bc520SJung-uk Kim     UINT8                   Cascade[2];
17899a4bc520SJung-uk Kim     UINT32                  CascadeMap[2];
17909a4bc520SJung-uk Kim } ACPI_MADT_LIO_PIC;
17919a4bc520SJung-uk Kim 
17929a4bc520SJung-uk Kim /* Values for Version field above */
17939a4bc520SJung-uk Kim 
17949a4bc520SJung-uk Kim enum AcpiMadtLioPicVersion {
17959a4bc520SJung-uk Kim     ACPI_MADT_LIO_PIC_VERSION_NONE      = 0,
17969a4bc520SJung-uk Kim     ACPI_MADT_LIO_PIC_VERSION_V1        = 1,
17979a4bc520SJung-uk Kim     ACPI_MADT_LIO_PIC_VERSION_RESERVED  = 2	/* 2 and greater are reserved */
17989a4bc520SJung-uk Kim };
17999a4bc520SJung-uk Kim 
18009a4bc520SJung-uk Kim /* 19: HT Interrupt Controller (ACPI 6.5) */
18019a4bc520SJung-uk Kim 
18029a4bc520SJung-uk Kim typedef struct acpi_madt_ht_pic {
18039a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
18049a4bc520SJung-uk Kim     UINT8                   Version;
18059a4bc520SJung-uk Kim     UINT64                  Address;
18069a4bc520SJung-uk Kim     UINT16                  Size;
18079a4bc520SJung-uk Kim     UINT8                   Cascade[8];
18089a4bc520SJung-uk Kim } ACPI_MADT_HT_PIC;
18099a4bc520SJung-uk Kim 
18109a4bc520SJung-uk Kim /* Values for Version field above */
18119a4bc520SJung-uk Kim 
18129a4bc520SJung-uk Kim enum AcpiMadtHtPicVersion {
18139a4bc520SJung-uk Kim     ACPI_MADT_HT_PIC_VERSION_NONE       = 0,
18149a4bc520SJung-uk Kim     ACPI_MADT_HT_PIC_VERSION_V1         = 1,
18159a4bc520SJung-uk Kim     ACPI_MADT_HT_PIC_VERSION_RESERVED   = 2	/* 2 and greater are reserved */
18169a4bc520SJung-uk Kim };
18179a4bc520SJung-uk Kim 
18189a4bc520SJung-uk Kim /* 20: Extend I/O Interrupt Controller (ACPI 6.5) */
18199a4bc520SJung-uk Kim 
18209a4bc520SJung-uk Kim typedef struct acpi_madt_eio_pic {
18219a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
18229a4bc520SJung-uk Kim     UINT8                   Version;
18239a4bc520SJung-uk Kim     UINT8                   Cascade;
18249a4bc520SJung-uk Kim     UINT8                   Node;
18259a4bc520SJung-uk Kim     UINT64                  NodeMap;
18269a4bc520SJung-uk Kim } ACPI_MADT_EIO_PIC;
18279a4bc520SJung-uk Kim 
18289a4bc520SJung-uk Kim /* Values for Version field above */
18299a4bc520SJung-uk Kim 
18309a4bc520SJung-uk Kim enum AcpiMadtEioPicVersion {
18319a4bc520SJung-uk Kim     ACPI_MADT_EIO_PIC_VERSION_NONE      = 0,
18329a4bc520SJung-uk Kim     ACPI_MADT_EIO_PIC_VERSION_V1        = 1,
18339a4bc520SJung-uk Kim     ACPI_MADT_EIO_PIC_VERSION_RESERVED  = 2	/* 2 and greater are reserved */
18349a4bc520SJung-uk Kim };
18359a4bc520SJung-uk Kim 
18369a4bc520SJung-uk Kim /* 21: MSI Interrupt Controller (ACPI 6.5) */
18379a4bc520SJung-uk Kim 
18389a4bc520SJung-uk Kim typedef struct acpi_madt_msi_pic {
18399a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
18409a4bc520SJung-uk Kim     UINT8                   Version;
18419a4bc520SJung-uk Kim     UINT64                  MsgAddress;
18429a4bc520SJung-uk Kim     UINT32                  Start;
18439a4bc520SJung-uk Kim     UINT32                  Count;
18449a4bc520SJung-uk Kim } ACPI_MADT_MSI_PIC;
18459a4bc520SJung-uk Kim 
18469a4bc520SJung-uk Kim /* Values for Version field above */
18479a4bc520SJung-uk Kim 
18489a4bc520SJung-uk Kim enum AcpiMadtMsiPicVersion {
18499a4bc520SJung-uk Kim     ACPI_MADT_MSI_PIC_VERSION_NONE      = 0,
18509a4bc520SJung-uk Kim     ACPI_MADT_MSI_PIC_VERSION_V1        = 1,
18519a4bc520SJung-uk Kim     ACPI_MADT_MSI_PIC_VERSION_RESERVED  = 2	/* 2 and greater are reserved */
18529a4bc520SJung-uk Kim };
18539a4bc520SJung-uk Kim 
18549a4bc520SJung-uk Kim /* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */
18559a4bc520SJung-uk Kim 
18569a4bc520SJung-uk Kim typedef struct acpi_madt_bio_pic {
18579a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
18589a4bc520SJung-uk Kim     UINT8                   Version;
18599a4bc520SJung-uk Kim     UINT64                  Address;
18609a4bc520SJung-uk Kim     UINT16                  Size;
18619a4bc520SJung-uk Kim     UINT16                  Id;
18629a4bc520SJung-uk Kim     UINT16                  GsiBase;
18639a4bc520SJung-uk Kim } ACPI_MADT_BIO_PIC;
18649a4bc520SJung-uk Kim 
18659a4bc520SJung-uk Kim /* Values for Version field above */
18669a4bc520SJung-uk Kim 
18679a4bc520SJung-uk Kim enum AcpiMadtBioPicVersion {
18689a4bc520SJung-uk Kim     ACPI_MADT_BIO_PIC_VERSION_NONE        = 0,
18699a4bc520SJung-uk Kim     ACPI_MADT_BIO_PIC_VERSION_V1          = 1,
18709a4bc520SJung-uk Kim     ACPI_MADT_BIO_PIC_VERSION_RESERVED    = 2	/* 2 and greater are reserved */
18719a4bc520SJung-uk Kim };
18729a4bc520SJung-uk Kim 
18739a4bc520SJung-uk Kim /* 23: LPC Interrupt Controller (ACPI 6.5) */
18749a4bc520SJung-uk Kim 
18759a4bc520SJung-uk Kim typedef struct acpi_madt_lpc_pic {
18769a4bc520SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
18779a4bc520SJung-uk Kim     UINT8                   Version;
18789a4bc520SJung-uk Kim     UINT64                  Address;
18799a4bc520SJung-uk Kim     UINT16                  Size;
18809a4bc520SJung-uk Kim     UINT8                   Cascade;
18819a4bc520SJung-uk Kim } ACPI_MADT_LPC_PIC;
18829a4bc520SJung-uk Kim 
18839a4bc520SJung-uk Kim /* Values for Version field above */
18849a4bc520SJung-uk Kim 
18859a4bc520SJung-uk Kim enum AcpiMadtLpcPicVersion {
18869a4bc520SJung-uk Kim     ACPI_MADT_LPC_PIC_VERSION_NONE       = 0,
18879a4bc520SJung-uk Kim     ACPI_MADT_LPC_PIC_VERSION_V1         = 1,
18889a4bc520SJung-uk Kim     ACPI_MADT_LPC_PIC_VERSION_RESERVED   = 2	/* 2 and greater are reserved */
18899a4bc520SJung-uk Kim };
18909a4bc520SJung-uk Kim 
1891722b1667SJung-uk Kim /* 24: RISC-V INTC */
189207c64d74SJung-uk Kim typedef struct acpi_madt_rintc {
1893722b1667SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1894722b1667SJung-uk Kim     UINT8                   Version;
1895722b1667SJung-uk Kim     UINT8                   Reserved;
1896722b1667SJung-uk Kim     UINT32                  Flags;
1897722b1667SJung-uk Kim     UINT64                  HartId;
1898722b1667SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
189907c64d74SJung-uk Kim     UINT32                  ExtIntcId;          /* External INTC Id */
190007c64d74SJung-uk Kim     UINT64                  ImsicAddr;          /* IMSIC base address */
190107c64d74SJung-uk Kim     UINT32                  ImsicSize;          /* IMSIC size */
190207c64d74SJung-uk Kim } ACPI_MADT_RINTC;
1903722b1667SJung-uk Kim 
1904722b1667SJung-uk Kim /* Values for RISC-V INTC Version field above */
1905722b1667SJung-uk Kim 
1906722b1667SJung-uk Kim enum AcpiMadtRintcVersion {
1907722b1667SJung-uk Kim     ACPI_MADT_RINTC_VERSION_NONE       = 0,
1908722b1667SJung-uk Kim     ACPI_MADT_RINTC_VERSION_V1         = 1,
1909722b1667SJung-uk Kim     ACPI_MADT_RINTC_VERSION_RESERVED   = 2	/* 2 and greater are reserved */
1910722b1667SJung-uk Kim };
1911722b1667SJung-uk Kim 
191207c64d74SJung-uk Kim /* 25: RISC-V IMSIC */
191307c64d74SJung-uk Kim typedef struct acpi_madt_imsic {
191407c64d74SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
191507c64d74SJung-uk Kim     UINT8                   Version;
191607c64d74SJung-uk Kim     UINT8                   Reserved;
191707c64d74SJung-uk Kim     UINT32                  Flags;
191807c64d74SJung-uk Kim     UINT16                  NumIds;
191907c64d74SJung-uk Kim     UINT16                  NumGuestIds;
192007c64d74SJung-uk Kim     UINT8                   GuestIndexBits;
192107c64d74SJung-uk Kim     UINT8                   HartIndexBits;
192207c64d74SJung-uk Kim     UINT8                   GroupIndexBits;
192307c64d74SJung-uk Kim     UINT8                   GroupIndexShift;
192407c64d74SJung-uk Kim } ACPI_MADT_IMSIC;
192507c64d74SJung-uk Kim 
192607c64d74SJung-uk Kim /* 26: RISC-V APLIC */
192707c64d74SJung-uk Kim typedef struct acpi_madt_aplic {
192807c64d74SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
192907c64d74SJung-uk Kim     UINT8                   Version;
193007c64d74SJung-uk Kim     UINT8                   Id;
193107c64d74SJung-uk Kim     UINT32                  Flags;
193207c64d74SJung-uk Kim     UINT8                   HwId[8];
193307c64d74SJung-uk Kim     UINT16                  NumIdcs;
193407c64d74SJung-uk Kim     UINT16                  NumSources;
193507c64d74SJung-uk Kim     UINT32                  GsiBase;
193607c64d74SJung-uk Kim     UINT64                  BaseAddr;
193707c64d74SJung-uk Kim     UINT32                  Size;
193807c64d74SJung-uk Kim } ACPI_MADT_APLIC;
193907c64d74SJung-uk Kim 
194007c64d74SJung-uk Kim /* 27: RISC-V PLIC */
194107c64d74SJung-uk Kim typedef struct acpi_madt_plic {
194207c64d74SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
194307c64d74SJung-uk Kim     UINT8                   Version;
194407c64d74SJung-uk Kim     UINT8                   Id;
194507c64d74SJung-uk Kim     UINT8                   HwId[8];
194607c64d74SJung-uk Kim     UINT16                  NumIrqs;
194707c64d74SJung-uk Kim     UINT16                  MaxPrio;
194807c64d74SJung-uk Kim     UINT32                  Flags;
194907c64d74SJung-uk Kim     UINT32                  Size;
195007c64d74SJung-uk Kim     UINT64                  BaseAddr;
195107c64d74SJung-uk Kim     UINT32                  GsiBase;
195207c64d74SJung-uk Kim } ACPI_MADT_PLIC;
195307c64d74SJung-uk Kim 
195407c64d74SJung-uk Kim 
19559a4bc520SJung-uk Kim /* 80: OEM data */
1956ab71bbb7SJung-uk Kim 
1957ab71bbb7SJung-uk Kim typedef struct acpi_madt_oem_data
1958ab71bbb7SJung-uk Kim {
1959722b1667SJung-uk Kim     ACPI_FLEX_ARRAY(UINT8,  OemData);
1960ab71bbb7SJung-uk Kim } ACPI_MADT_OEM_DATA;
1961ab71bbb7SJung-uk Kim 
1962ff879b07SJung-uk Kim 
1963ff879b07SJung-uk Kim /*
1964ff879b07SJung-uk Kim  * Common flags fields for MADT subtables
1965ff879b07SJung-uk Kim  */
1966ff879b07SJung-uk Kim 
1967ff879b07SJung-uk Kim /* MADT Local APIC flags */
1968ff879b07SJung-uk Kim 
1969ff879b07SJung-uk Kim #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
19701b7a2680SJung-uk Kim #define ACPI_MADT_ONLINE_CAPABLE    (2)         /* 01: System HW supports enabling processor at runtime */
1971ff879b07SJung-uk Kim 
1972ff879b07SJung-uk Kim /* MADT MPS INTI flags (IntiFlags) */
1973ff879b07SJung-uk Kim 
1974ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
1975ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
1976ff879b07SJung-uk Kim 
1977ff879b07SJung-uk Kim /* Values for MPS INTI flags */
1978ff879b07SJung-uk Kim 
1979ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_CONFORMS       0
1980ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
1981ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_RESERVED       2
1982ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_LOW     3
1983ff879b07SJung-uk Kim 
1984ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_CONFORMS        (0)
1985ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_EDGE            (1<<2)
1986ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
1987ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
1988ff879b07SJung-uk Kim 
1989ff879b07SJung-uk Kim 
1990ff879b07SJung-uk Kim /*******************************************************************************
1991ff879b07SJung-uk Kim  *
1992313a0c13SJung-uk Kim  * MCFG - PCI Memory Mapped Configuration table and subtable
1993d6dd1baeSJung-uk Kim  *        Version 1
1994d6dd1baeSJung-uk Kim  *
1995d6dd1baeSJung-uk Kim  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1996d6dd1baeSJung-uk Kim  *
1997d6dd1baeSJung-uk Kim  ******************************************************************************/
1998d6dd1baeSJung-uk Kim 
1999d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg
2000d6dd1baeSJung-uk Kim {
2001d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2002d6dd1baeSJung-uk Kim     UINT8                   Reserved[8];
2003d6dd1baeSJung-uk Kim 
2004d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG;
2005d6dd1baeSJung-uk Kim 
2006d6dd1baeSJung-uk Kim 
2007d6dd1baeSJung-uk Kim /* Subtable */
2008d6dd1baeSJung-uk Kim 
2009d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation
2010d6dd1baeSJung-uk Kim {
2011d6dd1baeSJung-uk Kim     UINT64                  Address;            /* Base address, processor-relative */
2012d6dd1baeSJung-uk Kim     UINT16                  PciSegment;         /* PCI segment group number */
2013d6dd1baeSJung-uk Kim     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
2014d6dd1baeSJung-uk Kim     UINT8                   EndBusNumber;       /* Final PCI Bus number */
2015d6dd1baeSJung-uk Kim     UINT32                  Reserved;
2016d6dd1baeSJung-uk Kim 
2017d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION;
2018d6dd1baeSJung-uk Kim 
2019d6dd1baeSJung-uk Kim 
2020d6dd1baeSJung-uk Kim /*******************************************************************************
2021d6dd1baeSJung-uk Kim  *
2022ca3cf4faSJung-uk Kim  * MCHI - Management Controller Host Interface Table
2023ca3cf4faSJung-uk Kim  *        Version 1
2024ca3cf4faSJung-uk Kim  *
2025ca3cf4faSJung-uk Kim  * Conforms to "Management Component Transport Protocol (MCTP) Host
2026ca3cf4faSJung-uk Kim  * Interface Specification", Revision 1.0.0a, October 13, 2009
2027ca3cf4faSJung-uk Kim  *
2028ca3cf4faSJung-uk Kim  ******************************************************************************/
2029ca3cf4faSJung-uk Kim 
2030ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi
2031ca3cf4faSJung-uk Kim {
2032ca3cf4faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2033ca3cf4faSJung-uk Kim     UINT8                   InterfaceType;
2034ca3cf4faSJung-uk Kim     UINT8                   Protocol;
2035ca3cf4faSJung-uk Kim     UINT64                  ProtocolData;
2036ca3cf4faSJung-uk Kim     UINT8                   InterruptType;
2037ca3cf4faSJung-uk Kim     UINT8                   Gpe;
2038ca3cf4faSJung-uk Kim     UINT8                   PciDeviceFlag;
2039ca3cf4faSJung-uk Kim     UINT32                  GlobalInterrupt;
2040ca3cf4faSJung-uk Kim     ACPI_GENERIC_ADDRESS    ControlRegister;
2041ca3cf4faSJung-uk Kim     UINT8                   PciSegment;
2042ca3cf4faSJung-uk Kim     UINT8                   PciBus;
2043ca3cf4faSJung-uk Kim     UINT8                   PciDevice;
2044ca3cf4faSJung-uk Kim     UINT8                   PciFunction;
2045ca3cf4faSJung-uk Kim 
2046ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI;
2047ca3cf4faSJung-uk Kim 
2048722b1667SJung-uk Kim /*******************************************************************************
2049722b1667SJung-uk Kim  *
2050722b1667SJung-uk Kim  * MPAM - Memory System Resource Partitioning and Monitoring
2051722b1667SJung-uk Kim  *
2052722b1667SJung-uk Kim  * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"
2053722b1667SJung-uk Kim  * Document number: ARM DEN 0065, December, 2022.
2054722b1667SJung-uk Kim  *
2055722b1667SJung-uk Kim  ******************************************************************************/
2056722b1667SJung-uk Kim 
2057722b1667SJung-uk Kim /* MPAM RIS locator types. Table 11, Location types */
2058722b1667SJung-uk Kim enum AcpiMpamLocatorType {
2059722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE    = 0,
2060722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_MEMORY             = 1,
2061722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_SMMU               = 2,
2062722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE       = 3,
2063722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE        = 4,
2064722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_INTERCONNECT       = 5,
2065722b1667SJung-uk Kim     ACPI_MPAM_LOCATION_TYPE_UNKNOWN            = 0xFF
2066722b1667SJung-uk Kim };
2067722b1667SJung-uk Kim 
2068722b1667SJung-uk Kim /* MPAM Functional dependency descriptor. Table 10 */
2069722b1667SJung-uk Kim typedef struct acpi_mpam_func_deps
2070722b1667SJung-uk Kim {
2071722b1667SJung-uk Kim     UINT32                        Producer;
2072722b1667SJung-uk Kim     UINT32                        Reserved;
2073722b1667SJung-uk Kim } ACPI_MPAM_FUNC_DEPS;
2074722b1667SJung-uk Kim 
2075722b1667SJung-uk Kim /* MPAM Processor cache locator descriptor. Table 13 */
2076722b1667SJung-uk Kim typedef struct acpi_mpam_resource_cache_locator
2077722b1667SJung-uk Kim {
2078722b1667SJung-uk Kim     UINT64                        CacheReference;
2079722b1667SJung-uk Kim     UINT32                        Reserved;
2080722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_CACHE_LOCATOR;
2081722b1667SJung-uk Kim 
2082722b1667SJung-uk Kim /* MPAM Memory locator descriptor. Table 14 */
2083722b1667SJung-uk Kim typedef struct acpi_mpam_resource_memory_locator
2084722b1667SJung-uk Kim {
2085722b1667SJung-uk Kim     UINT64                        ProximityDomain;
2086722b1667SJung-uk Kim     UINT32                        Reserved;
2087722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_MEMORY_LOCATOR;
2088722b1667SJung-uk Kim 
2089722b1667SJung-uk Kim /* MPAM SMMU locator descriptor. Table 15 */
2090722b1667SJung-uk Kim typedef struct acpi_mpam_resource_smmu_locator
2091722b1667SJung-uk Kim {
2092722b1667SJung-uk Kim     UINT64                        SmmuInterface;
2093722b1667SJung-uk Kim     UINT32                        Reserved;
2094722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_SMMU_INTERFACE;
2095722b1667SJung-uk Kim 
2096722b1667SJung-uk Kim /* MPAM Memory-side cache locator descriptor. Table 16 */
2097722b1667SJung-uk Kim typedef struct acpi_mpam_resource_memcache_locator
2098722b1667SJung-uk Kim {
2099722b1667SJung-uk Kim     UINT8                         Reserved[7];
2100722b1667SJung-uk Kim     UINT8                         Level;
2101722b1667SJung-uk Kim     UINT32                        Reference;
2102722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE;
2103722b1667SJung-uk Kim 
2104722b1667SJung-uk Kim /* MPAM ACPI device locator descriptor. Table 17 */
2105722b1667SJung-uk Kim typedef struct acpi_mpam_resource_acpi_locator
2106722b1667SJung-uk Kim {
2107722b1667SJung-uk Kim     UINT64                        AcpiHwId;
2108722b1667SJung-uk Kim     UINT32                        AcpiUniqueId;
2109722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_ACPI_INTERFACE;
2110722b1667SJung-uk Kim 
2111722b1667SJung-uk Kim /* MPAM Interconnect locator descriptor. Table 18 */
2112722b1667SJung-uk Kim typedef struct acpi_mpam_resource_interconnect_locator
2113722b1667SJung-uk Kim {
2114722b1667SJung-uk Kim     UINT64                        InterConnectDescTblOff;
2115722b1667SJung-uk Kim     UINT32                        Reserved;
2116722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE;
2117722b1667SJung-uk Kim 
2118722b1667SJung-uk Kim /* MPAM Locator structure. Table 12 */
2119722b1667SJung-uk Kim typedef struct acpi_mpam_resource_generic_locator
2120722b1667SJung-uk Kim {
2121722b1667SJung-uk Kim     UINT64                        Descriptor1;
2122722b1667SJung-uk Kim     UINT32                        Descriptor2;
2123722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_GENERIC_LOCATOR;
2124722b1667SJung-uk Kim 
2125722b1667SJung-uk Kim typedef union acpi_mpam_resource_locator
2126722b1667SJung-uk Kim {
2127722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_CACHE_LOCATOR             CacheLocator;
2128722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_MEMORY_LOCATOR            MemoryLocator;
2129722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_SMMU_INTERFACE            SmmuLocator;
2130722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE        MemCacheLocator;
2131722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_ACPI_INTERFACE            AcpiLocator;
2132722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE    InterconnectIfcLocator;
2133722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_GENERIC_LOCATOR           GenericLocator;
2134722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_LOCATOR;
2135722b1667SJung-uk Kim 
2136722b1667SJung-uk Kim /* Memory System Component Resource Node Structure Table 9 */
2137722b1667SJung-uk Kim typedef struct acpi_mpam_resource_node
2138722b1667SJung-uk Kim {
2139722b1667SJung-uk Kim     UINT32                        Identifier;
2140722b1667SJung-uk Kim     UINT8                         RISIndex;
2141722b1667SJung-uk Kim     UINT16                        Reserved1;
2142722b1667SJung-uk Kim     UINT8                         LocatorType;
2143722b1667SJung-uk Kim     ACPI_MPAM_RESOURCE_LOCATOR    Locator;
2144722b1667SJung-uk Kim     UINT32                        NumFunctionalDeps;
2145722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_NODE;
2146722b1667SJung-uk Kim 
2147722b1667SJung-uk Kim /* Memory System Component (MSC) Node Structure. Table 4 */
2148722b1667SJung-uk Kim typedef struct acpi_mpam_msc_node
2149722b1667SJung-uk Kim {
2150722b1667SJung-uk Kim     UINT16                     Length;
2151722b1667SJung-uk Kim     UINT8                      InterfaceType;
2152722b1667SJung-uk Kim     UINT8                      Reserved;
2153722b1667SJung-uk Kim     UINT32                     Identifier;
2154722b1667SJung-uk Kim     UINT64                     BaseAddress;
2155722b1667SJung-uk Kim     UINT32                     MMIOSize;
2156722b1667SJung-uk Kim     UINT32                     OverflowInterrupt;
2157722b1667SJung-uk Kim     UINT32                     OverflowInterruptFlags;
2158722b1667SJung-uk Kim     UINT32                     Reserved1;
2159722b1667SJung-uk Kim     UINT32                     OverflowInterruptAffinity;
2160722b1667SJung-uk Kim     UINT32                     ErrorInterrupt;
2161722b1667SJung-uk Kim     UINT32                     ErrorInterruptFlags;
2162722b1667SJung-uk Kim     UINT32                     Reserved2;
2163722b1667SJung-uk Kim     UINT32                     ErrorInterruptAffinity;
2164722b1667SJung-uk Kim     UINT32                     MaxNrdyUsec;
2165722b1667SJung-uk Kim     UINT64                     HardwareIdLinkedDevice;
2166722b1667SJung-uk Kim     UINT32                     InstanceIdLinkedDevice;
216792f570c3SJung-uk Kim     UINT32                     NumResourceNodes;
2168722b1667SJung-uk Kim } ACPI_MPAM_MSC_NODE;
2169722b1667SJung-uk Kim 
2170722b1667SJung-uk Kim typedef struct acpi_table_mpam
2171722b1667SJung-uk Kim {
2172722b1667SJung-uk Kim     ACPI_TABLE_HEADER         Header;          /* Common ACPI table header */
2173722b1667SJung-uk Kim } ACPI_TABLE_MPAM;
2174ca3cf4faSJung-uk Kim 
2175ca3cf4faSJung-uk Kim /*******************************************************************************
2176ca3cf4faSJung-uk Kim  *
2177ff879b07SJung-uk Kim  * MPST - Memory Power State Table (ACPI 5.0)
2178ff879b07SJung-uk Kim  *        Version 1
2179ff879b07SJung-uk Kim  *
2180ff879b07SJung-uk Kim  ******************************************************************************/
2181ff879b07SJung-uk Kim 
2182ff879b07SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \
2183ff879b07SJung-uk Kim     UINT8                   ChannelId; \
2184ff879b07SJung-uk Kim     UINT8                   Reserved1[3]; \
2185ff879b07SJung-uk Kim     UINT16                  PowerNodeCount; \
2186ff879b07SJung-uk Kim     UINT16                  Reserved2;
2187ff879b07SJung-uk Kim 
2188ff879b07SJung-uk Kim /* Main table */
2189ff879b07SJung-uk Kim 
2190ff879b07SJung-uk Kim typedef struct acpi_table_mpst
2191ff879b07SJung-uk Kim {
2192ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2193ff879b07SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
2194ff879b07SJung-uk Kim 
2195ff879b07SJung-uk Kim } ACPI_TABLE_MPST;
2196ff879b07SJung-uk Kim 
2197ff879b07SJung-uk Kim 
2198ff879b07SJung-uk Kim /* Memory Platform Communication Channel Info */
2199ff879b07SJung-uk Kim 
2200ff879b07SJung-uk Kim typedef struct acpi_mpst_channel
2201ff879b07SJung-uk Kim {
2202ff879b07SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
2203ff879b07SJung-uk Kim 
2204ff879b07SJung-uk Kim } ACPI_MPST_CHANNEL;
2205ff879b07SJung-uk Kim 
2206ff879b07SJung-uk Kim 
2207ff879b07SJung-uk Kim /* Memory Power Node Structure */
2208ff879b07SJung-uk Kim 
2209ff879b07SJung-uk Kim typedef struct acpi_mpst_power_node
2210ff879b07SJung-uk Kim {
2211ff879b07SJung-uk Kim     UINT8                   Flags;
2212ff879b07SJung-uk Kim     UINT8                   Reserved1;
2213ff879b07SJung-uk Kim     UINT16                  NodeId;
2214ff879b07SJung-uk Kim     UINT32                  Length;
2215ff879b07SJung-uk Kim     UINT64                  RangeAddress;
2216ff879b07SJung-uk Kim     UINT64                  RangeLength;
2217ff879b07SJung-uk Kim     UINT32                  NumPowerStates;
2218ff879b07SJung-uk Kim     UINT32                  NumPhysicalComponents;
2219ff879b07SJung-uk Kim 
2220ff879b07SJung-uk Kim } ACPI_MPST_POWER_NODE;
2221ff879b07SJung-uk Kim 
2222ff879b07SJung-uk Kim /* Values for Flags field above */
2223ff879b07SJung-uk Kim 
2224ff879b07SJung-uk Kim #define ACPI_MPST_ENABLED               1
2225ff879b07SJung-uk Kim #define ACPI_MPST_POWER_MANAGED         2
2226ff879b07SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE      4
2227ff879b07SJung-uk Kim 
2228ff879b07SJung-uk Kim 
2229ff879b07SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */
2230ff879b07SJung-uk Kim 
2231ff879b07SJung-uk Kim typedef struct acpi_mpst_power_state
2232ff879b07SJung-uk Kim {
2233ff879b07SJung-uk Kim     UINT8                   PowerState;
2234ff879b07SJung-uk Kim     UINT8                   InfoIndex;
2235ff879b07SJung-uk Kim 
2236ff879b07SJung-uk Kim } ACPI_MPST_POWER_STATE;
2237ff879b07SJung-uk Kim 
2238ff879b07SJung-uk Kim 
2239ff879b07SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */
2240ff879b07SJung-uk Kim 
2241ff879b07SJung-uk Kim typedef struct acpi_mpst_component
2242ff879b07SJung-uk Kim {
2243ff879b07SJung-uk Kim     UINT16                  ComponentId;
2244ff879b07SJung-uk Kim 
2245ff879b07SJung-uk Kim } ACPI_MPST_COMPONENT;
2246ff879b07SJung-uk Kim 
2247ff879b07SJung-uk Kim 
2248ff879b07SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
2249ff879b07SJung-uk Kim 
2250ff879b07SJung-uk Kim typedef struct acpi_mpst_data_hdr
2251ff879b07SJung-uk Kim {
2252ff879b07SJung-uk Kim     UINT16                  CharacteristicsCount;
2253ff879b07SJung-uk Kim     UINT16                  Reserved;
2254ff879b07SJung-uk Kim 
2255ff879b07SJung-uk Kim } ACPI_MPST_DATA_HDR;
2256ff879b07SJung-uk Kim 
2257ff879b07SJung-uk Kim typedef struct acpi_mpst_power_data
2258ff879b07SJung-uk Kim {
2259ff879b07SJung-uk Kim     UINT8                   StructureId;
2260ff879b07SJung-uk Kim     UINT8                   Flags;
2261ff879b07SJung-uk Kim     UINT16                  Reserved1;
2262ff879b07SJung-uk Kim     UINT32                  AveragePower;
2263ff879b07SJung-uk Kim     UINT32                  PowerSaving;
2264ff879b07SJung-uk Kim     UINT64                  ExitLatency;
2265ff879b07SJung-uk Kim     UINT64                  Reserved2;
2266ff879b07SJung-uk Kim 
2267ff879b07SJung-uk Kim } ACPI_MPST_POWER_DATA;
2268ff879b07SJung-uk Kim 
2269ff879b07SJung-uk Kim /* Values for Flags field above */
2270ff879b07SJung-uk Kim 
2271ff879b07SJung-uk Kim #define ACPI_MPST_PRESERVE              1
2272ff879b07SJung-uk Kim #define ACPI_MPST_AUTOENTRY             2
2273ff879b07SJung-uk Kim #define ACPI_MPST_AUTOEXIT              4
2274ff879b07SJung-uk Kim 
2275ff879b07SJung-uk Kim 
2276ff879b07SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */
2277ff879b07SJung-uk Kim 
2278ff879b07SJung-uk Kim typedef struct acpi_mpst_shared
2279ff879b07SJung-uk Kim {
2280ff879b07SJung-uk Kim     UINT32                  Signature;
2281ff879b07SJung-uk Kim     UINT16                  PccCommand;
2282ff879b07SJung-uk Kim     UINT16                  PccStatus;
2283ff879b07SJung-uk Kim     UINT32                  CommandRegister;
2284ff879b07SJung-uk Kim     UINT32                  StatusRegister;
2285ff879b07SJung-uk Kim     UINT32                  PowerStateId;
2286ff879b07SJung-uk Kim     UINT32                  PowerNodeId;
2287ff879b07SJung-uk Kim     UINT64                  EnergyConsumed;
2288ff879b07SJung-uk Kim     UINT64                  AveragePower;
2289ff879b07SJung-uk Kim 
2290ff879b07SJung-uk Kim } ACPI_MPST_SHARED;
2291ff879b07SJung-uk Kim 
2292ff879b07SJung-uk Kim 
2293ff879b07SJung-uk Kim /*******************************************************************************
2294ff879b07SJung-uk Kim  *
2295ff879b07SJung-uk Kim  * MSCT - Maximum System Characteristics Table (ACPI 4.0)
2296ff879b07SJung-uk Kim  *        Version 1
2297ff879b07SJung-uk Kim  *
2298ff879b07SJung-uk Kim  ******************************************************************************/
2299ff879b07SJung-uk Kim 
2300ff879b07SJung-uk Kim typedef struct acpi_table_msct
2301ff879b07SJung-uk Kim {
2302ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2303ff879b07SJung-uk Kim     UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
2304ff879b07SJung-uk Kim     UINT32                  MaxProximityDomains;/* Max number of proximity domains */
2305ff879b07SJung-uk Kim     UINT32                  MaxClockDomains;    /* Max number of clock domains */
2306ff879b07SJung-uk Kim     UINT64                  MaxAddress;         /* Max physical address in system */
2307ff879b07SJung-uk Kim 
2308ff879b07SJung-uk Kim } ACPI_TABLE_MSCT;
2309ff879b07SJung-uk Kim 
2310ff879b07SJung-uk Kim 
2311ff879b07SJung-uk Kim /* Subtable - Maximum Proximity Domain Information. Version 1 */
2312ff879b07SJung-uk Kim 
2313ff879b07SJung-uk Kim typedef struct acpi_msct_proximity
2314ff879b07SJung-uk Kim {
2315ff879b07SJung-uk Kim     UINT8                   Revision;
2316ff879b07SJung-uk Kim     UINT8                   Length;
2317ff879b07SJung-uk Kim     UINT32                  RangeStart;         /* Start of domain range */
2318ff879b07SJung-uk Kim     UINT32                  RangeEnd;           /* End of domain range */
2319ff879b07SJung-uk Kim     UINT32                  ProcessorCapacity;
2320ff879b07SJung-uk Kim     UINT64                  MemoryCapacity;     /* In bytes */
2321ff879b07SJung-uk Kim 
2322ff879b07SJung-uk Kim } ACPI_MSCT_PROXIMITY;
2323ff879b07SJung-uk Kim 
2324ff879b07SJung-uk Kim 
2325ff879b07SJung-uk Kim /*******************************************************************************
2326ff879b07SJung-uk Kim  *
2327*58308fadSJung-uk Kim  * MRRM - Memory Range and Region Mapping (MRRM) table
2328*58308fadSJung-uk Kim  * Conforms to "Intel Resource Director Technology Architecture Specification"
2329*58308fadSJung-uk Kim  * Version 1.1, January 2025
2330*58308fadSJung-uk Kim  *
2331*58308fadSJung-uk Kim  ******************************************************************************/
2332*58308fadSJung-uk Kim 
2333*58308fadSJung-uk Kim typedef struct acpi_table_mrrm
2334*58308fadSJung-uk Kim {
2335*58308fadSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2336*58308fadSJung-uk Kim     UINT8                   MaxMemRegion;       /* Max Memory Regions supported */
2337*58308fadSJung-uk Kim     UINT8                   Flags;              /* Region assignment type */
2338*58308fadSJung-uk Kim     UINT8                   Reserved[26];
2339*58308fadSJung-uk Kim     UINT8                   Memory_Range_Entry[];
2340*58308fadSJung-uk Kim 
2341*58308fadSJung-uk Kim } ACPI_TABLE_MRRM;
2342*58308fadSJung-uk Kim 
2343*58308fadSJung-uk Kim /* Flags */
2344*58308fadSJung-uk Kim #define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS    (1<<0)
2345*58308fadSJung-uk Kim 
2346*58308fadSJung-uk Kim /*******************************************************************************
2347*58308fadSJung-uk Kim     *
2348*58308fadSJung-uk Kim     * Memory Range entry - Memory Range entry in MRRM table
2349*58308fadSJung-uk Kim     *
2350*58308fadSJung-uk Kim     ******************************************************************************/
2351*58308fadSJung-uk Kim 
2352*58308fadSJung-uk Kim typedef struct acpi_mrrm_mem_range_entry
2353*58308fadSJung-uk Kim {
2354*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      Header;
2355*58308fadSJung-uk Kim     UINT32                  Reserved0;          /* Reserved */
2356*58308fadSJung-uk Kim     UINT64                  AddrBase;           /* Base addr of the mem range */
2357*58308fadSJung-uk Kim     UINT64                  AddrLen;            /* Length of the mem range */
2358*58308fadSJung-uk Kim     UINT16                  RegionIdFlags;      /* Valid local or remote Region-ID */
2359*58308fadSJung-uk Kim     UINT8                   LocalRegionId;      /* Platform-assigned static local Region-ID */
2360*58308fadSJung-uk Kim     UINT8                   RemoteRegionId;     /* Platform-assigned static remote Region-ID */
2361*58308fadSJung-uk Kim     UINT32                  Reserved1;          /* Reserved */
2362*58308fadSJung-uk Kim     /* Region-ID Programming Registers[] */
2363*58308fadSJung-uk Kim 
2364*58308fadSJung-uk Kim } ACPI_MRRM_MEM_RANGE_ENTRY;
2365*58308fadSJung-uk Kim 
2366*58308fadSJung-uk Kim /* Values for RegionIdFlags above */
2367*58308fadSJung-uk Kim #define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL   (1<<0)
2368*58308fadSJung-uk Kim #define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE  (1<<1)
2369*58308fadSJung-uk Kim 
2370*58308fadSJung-uk Kim 
2371*58308fadSJung-uk Kim /*******************************************************************************
2372*58308fadSJung-uk Kim  *
23737cf3e94aSJung-uk Kim  * MSDM - Microsoft Data Management table
23747cf3e94aSJung-uk Kim  *
23757cf3e94aSJung-uk Kim  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
23767cf3e94aSJung-uk Kim  * November 29, 2011. Copyright 2011 Microsoft
23777cf3e94aSJung-uk Kim  *
23787cf3e94aSJung-uk Kim  ******************************************************************************/
23797cf3e94aSJung-uk Kim 
23807cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */
23817cf3e94aSJung-uk Kim 
23827cf3e94aSJung-uk Kim typedef struct acpi_table_msdm
23837cf3e94aSJung-uk Kim {
23847cf3e94aSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
23857cf3e94aSJung-uk Kim 
23867cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM;
23877cf3e94aSJung-uk Kim 
23887cf3e94aSJung-uk Kim 
23897cf3e94aSJung-uk Kim /*******************************************************************************
23907cf3e94aSJung-uk Kim  *
2391ff879b07SJung-uk Kim  * NFIT - NVDIMM Interface Table (ACPI 6.0+)
2392ff879b07SJung-uk Kim  *        Version 1
2393ff879b07SJung-uk Kim  *
2394ff879b07SJung-uk Kim  ******************************************************************************/
2395ff879b07SJung-uk Kim 
2396ff879b07SJung-uk Kim typedef struct acpi_table_nfit
2397ff879b07SJung-uk Kim {
2398ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2399ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
2400ff879b07SJung-uk Kim 
2401ff879b07SJung-uk Kim } ACPI_TABLE_NFIT;
2402ff879b07SJung-uk Kim 
2403ff879b07SJung-uk Kim /* Subtable header for NFIT */
2404ff879b07SJung-uk Kim 
2405ff879b07SJung-uk Kim typedef struct acpi_nfit_header
2406ff879b07SJung-uk Kim {
2407ff879b07SJung-uk Kim     UINT16                   Type;
2408ff879b07SJung-uk Kim     UINT16                   Length;
2409ff879b07SJung-uk Kim 
2410ff879b07SJung-uk Kim } ACPI_NFIT_HEADER;
2411ff879b07SJung-uk Kim 
2412ff879b07SJung-uk Kim 
2413ff879b07SJung-uk Kim /* Values for subtable type in ACPI_NFIT_HEADER */
2414ff879b07SJung-uk Kim 
2415ff879b07SJung-uk Kim enum AcpiNfitType
2416ff879b07SJung-uk Kim {
2417ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_SYSTEM_ADDRESS       = 0,
2418ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_MEMORY_MAP           = 1,
2419ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_INTERLEAVE           = 2,
2420ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_SMBIOS               = 3,
2421ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_CONTROL_REGION       = 4,
2422ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_DATA_REGION          = 5,
2423ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_FLUSH_ADDRESS        = 6,
2424ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_CAPABILITIES         = 7,
2425ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_RESERVED             = 8     /* 8 and greater are reserved */
2426ff879b07SJung-uk Kim };
2427ff879b07SJung-uk Kim 
2428ff879b07SJung-uk Kim /*
2429ff879b07SJung-uk Kim  * NFIT Subtables
2430ff879b07SJung-uk Kim  */
2431ff879b07SJung-uk Kim 
2432ff879b07SJung-uk Kim /* 0: System Physical Address Range Structure */
2433ff879b07SJung-uk Kim 
2434ff879b07SJung-uk Kim typedef struct acpi_nfit_system_address
2435ff879b07SJung-uk Kim {
2436ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2437ff879b07SJung-uk Kim     UINT16                  RangeIndex;
2438ff879b07SJung-uk Kim     UINT16                  Flags;
2439ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
2440ff879b07SJung-uk Kim     UINT32                  ProximityDomain;
2441ff879b07SJung-uk Kim     UINT8                   RangeGuid[16];
2442ff879b07SJung-uk Kim     UINT64                  Address;
2443ff879b07SJung-uk Kim     UINT64                  Length;
2444ff879b07SJung-uk Kim     UINT64                  MemoryMapping;
2445cfd1ed46SJung-uk Kim     UINT64                  LocationCookie;     /* ACPI 6.4 */
2446ff879b07SJung-uk Kim 
2447ff879b07SJung-uk Kim } ACPI_NFIT_SYSTEM_ADDRESS;
2448ff879b07SJung-uk Kim 
2449ff879b07SJung-uk Kim /* Flags */
2450ff879b07SJung-uk Kim 
2451ff879b07SJung-uk Kim #define ACPI_NFIT_ADD_ONLINE_ONLY       (1)     /* 00: Add/Online Operation Only */
2452ff879b07SJung-uk Kim #define ACPI_NFIT_PROXIMITY_VALID       (1<<1)  /* 01: Proximity Domain Valid */
2453cfd1ed46SJung-uk Kim #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2)  /* 02: SPA location cookie valid (ACPI 6.4) */
2454ff879b07SJung-uk Kim 
2455ff879b07SJung-uk Kim /* Range Type GUIDs appear in the include/acuuid.h file */
2456ff879b07SJung-uk Kim 
2457ff879b07SJung-uk Kim 
2458ff879b07SJung-uk Kim /* 1: Memory Device to System Address Range Map Structure */
2459ff879b07SJung-uk Kim 
2460ff879b07SJung-uk Kim typedef struct acpi_nfit_memory_map
2461ff879b07SJung-uk Kim {
2462ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2463ff879b07SJung-uk Kim     UINT32                  DeviceHandle;
2464ff879b07SJung-uk Kim     UINT16                  PhysicalId;
2465ff879b07SJung-uk Kim     UINT16                  RegionId;
2466ff879b07SJung-uk Kim     UINT16                  RangeIndex;
2467ff879b07SJung-uk Kim     UINT16                  RegionIndex;
2468ff879b07SJung-uk Kim     UINT64                  RegionSize;
2469ff879b07SJung-uk Kim     UINT64                  RegionOffset;
2470ff879b07SJung-uk Kim     UINT64                  Address;
2471ff879b07SJung-uk Kim     UINT16                  InterleaveIndex;
2472ff879b07SJung-uk Kim     UINT16                  InterleaveWays;
2473ff879b07SJung-uk Kim     UINT16                  Flags;
2474ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
2475ff879b07SJung-uk Kim 
2476ff879b07SJung-uk Kim } ACPI_NFIT_MEMORY_MAP;
2477ff879b07SJung-uk Kim 
2478ff879b07SJung-uk Kim /* Flags */
2479ff879b07SJung-uk Kim 
2480ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_SAVE_FAILED       (1)     /* 00: Last SAVE to Memory Device failed */
2481ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)  /* 01: Last RESTORE from Memory Device failed */
2482ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)  /* 02: Platform flush failed */
2483ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)  /* 03: Memory Device is not armed */
2484ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)  /* 04: Memory Device observed SMART/health events */
2485ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)  /* 05: SMART/health events enabled */
2486ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)  /* 06: Mapping to SPA failed */
2487ff879b07SJung-uk Kim 
2488ff879b07SJung-uk Kim 
2489ff879b07SJung-uk Kim /* 2: Interleave Structure */
2490ff879b07SJung-uk Kim 
2491ff879b07SJung-uk Kim typedef struct acpi_nfit_interleave
2492ff879b07SJung-uk Kim {
2493ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2494ff879b07SJung-uk Kim     UINT16                  InterleaveIndex;
2495ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
2496ff879b07SJung-uk Kim     UINT32                  LineCount;
2497ff879b07SJung-uk Kim     UINT32                  LineSize;
2498722b1667SJung-uk Kim     UINT32                  LineOffset[];       /* Variable length */
2499ff879b07SJung-uk Kim 
2500ff879b07SJung-uk Kim } ACPI_NFIT_INTERLEAVE;
2501ff879b07SJung-uk Kim 
2502ff879b07SJung-uk Kim 
2503ff879b07SJung-uk Kim /* 3: SMBIOS Management Information Structure */
2504ff879b07SJung-uk Kim 
2505ff879b07SJung-uk Kim typedef struct acpi_nfit_smbios
2506ff879b07SJung-uk Kim {
2507ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2508ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
2509722b1667SJung-uk Kim     UINT8                   Data[];             /* Variable length */
2510ff879b07SJung-uk Kim 
2511ff879b07SJung-uk Kim } ACPI_NFIT_SMBIOS;
2512ff879b07SJung-uk Kim 
2513ff879b07SJung-uk Kim 
2514ff879b07SJung-uk Kim /* 4: NVDIMM Control Region Structure */
2515ff879b07SJung-uk Kim 
2516ff879b07SJung-uk Kim typedef struct acpi_nfit_control_region
2517ff879b07SJung-uk Kim {
2518ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2519ff879b07SJung-uk Kim     UINT16                  RegionIndex;
2520ff879b07SJung-uk Kim     UINT16                  VendorId;
2521ff879b07SJung-uk Kim     UINT16                  DeviceId;
2522ff879b07SJung-uk Kim     UINT16                  RevisionId;
2523ff879b07SJung-uk Kim     UINT16                  SubsystemVendorId;
2524ff879b07SJung-uk Kim     UINT16                  SubsystemDeviceId;
2525ff879b07SJung-uk Kim     UINT16                  SubsystemRevisionId;
2526ff879b07SJung-uk Kim     UINT8                   ValidFields;
2527ff879b07SJung-uk Kim     UINT8                   ManufacturingLocation;
2528ff879b07SJung-uk Kim     UINT16                  ManufacturingDate;
2529ff879b07SJung-uk Kim     UINT8                   Reserved[2];        /* Reserved, must be zero */
2530ff879b07SJung-uk Kim     UINT32                  SerialNumber;
2531ff879b07SJung-uk Kim     UINT16                  Code;
2532ff879b07SJung-uk Kim     UINT16                  Windows;
2533ff879b07SJung-uk Kim     UINT64                  WindowSize;
2534ff879b07SJung-uk Kim     UINT64                  CommandOffset;
2535ff879b07SJung-uk Kim     UINT64                  CommandSize;
2536ff879b07SJung-uk Kim     UINT64                  StatusOffset;
2537ff879b07SJung-uk Kim     UINT64                  StatusSize;
2538ff879b07SJung-uk Kim     UINT16                  Flags;
2539ff879b07SJung-uk Kim     UINT8                   Reserved1[6];       /* Reserved, must be zero */
2540ff879b07SJung-uk Kim 
2541ff879b07SJung-uk Kim } ACPI_NFIT_CONTROL_REGION;
2542ff879b07SJung-uk Kim 
2543ff879b07SJung-uk Kim /* Flags */
2544ff879b07SJung-uk Kim 
2545ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_BUFFERED          (1)     /* Block Data Windows implementation is buffered */
2546ff879b07SJung-uk Kim 
2547ff879b07SJung-uk Kim /* ValidFields bits */
2548ff879b07SJung-uk Kim 
2549ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)     /* Manufacturing fields are valid */
2550ff879b07SJung-uk Kim 
2551ff879b07SJung-uk Kim 
2552ff879b07SJung-uk Kim /* 5: NVDIMM Block Data Window Region Structure */
2553ff879b07SJung-uk Kim 
2554ff879b07SJung-uk Kim typedef struct acpi_nfit_data_region
2555ff879b07SJung-uk Kim {
2556ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2557ff879b07SJung-uk Kim     UINT16                  RegionIndex;
2558ff879b07SJung-uk Kim     UINT16                  Windows;
2559ff879b07SJung-uk Kim     UINT64                  Offset;
2560ff879b07SJung-uk Kim     UINT64                  Size;
2561ff879b07SJung-uk Kim     UINT64                  Capacity;
2562ff879b07SJung-uk Kim     UINT64                  StartAddress;
2563ff879b07SJung-uk Kim 
2564ff879b07SJung-uk Kim } ACPI_NFIT_DATA_REGION;
2565ff879b07SJung-uk Kim 
2566ff879b07SJung-uk Kim 
2567ff879b07SJung-uk Kim /* 6: Flush Hint Address Structure */
2568ff879b07SJung-uk Kim 
2569ff879b07SJung-uk Kim typedef struct acpi_nfit_flush_address
2570ff879b07SJung-uk Kim {
2571ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2572ff879b07SJung-uk Kim     UINT32                  DeviceHandle;
2573ff879b07SJung-uk Kim     UINT16                  HintCount;
2574ff879b07SJung-uk Kim     UINT8                   Reserved[6];        /* Reserved, must be zero */
2575722b1667SJung-uk Kim     UINT64                  HintAddress[];      /* Variable length */
2576ff879b07SJung-uk Kim 
2577ff879b07SJung-uk Kim } ACPI_NFIT_FLUSH_ADDRESS;
2578ff879b07SJung-uk Kim 
2579ff879b07SJung-uk Kim 
2580ff879b07SJung-uk Kim /* 7: Platform Capabilities Structure */
2581ff879b07SJung-uk Kim 
2582ff879b07SJung-uk Kim typedef struct acpi_nfit_capabilities
2583ff879b07SJung-uk Kim {
2584ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
2585ff879b07SJung-uk Kim     UINT8                   HighestCapability;
2586ff879b07SJung-uk Kim     UINT8                   Reserved[3];       /* Reserved, must be zero */
2587ff879b07SJung-uk Kim     UINT32                  Capabilities;
2588ff879b07SJung-uk Kim     UINT32                  Reserved2;
2589ff879b07SJung-uk Kim 
2590ff879b07SJung-uk Kim } ACPI_NFIT_CAPABILITIES;
2591ff879b07SJung-uk Kim 
2592ff879b07SJung-uk Kim /* Capabilities Flags */
2593ff879b07SJung-uk Kim 
2594ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)     /* 00: Cache Flush to NVDIMM capable */
2595ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)  /* 01: Memory Flush to NVDIMM capable */
2596ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)  /* 02: Memory Mirroring capable */
2597ff879b07SJung-uk Kim 
2598ff879b07SJung-uk Kim 
2599ff879b07SJung-uk Kim /*
2600ff879b07SJung-uk Kim  * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
2601ff879b07SJung-uk Kim  */
2602ff879b07SJung-uk Kim typedef struct nfit_device_handle
2603ff879b07SJung-uk Kim {
2604ff879b07SJung-uk Kim     UINT32                  Handle;
2605ff879b07SJung-uk Kim 
2606ff879b07SJung-uk Kim } NFIT_DEVICE_HANDLE;
2607ff879b07SJung-uk Kim 
2608ff879b07SJung-uk Kim /* Device handle construction and extraction macros */
2609ff879b07SJung-uk Kim 
2610ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
2611ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
2612ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
2613ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
2614ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
2615ff879b07SJung-uk Kim 
2616ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
2617ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
2618ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_OFFSET              8
2619ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_OFFSET              12
2620ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_OFFSET                16
2621ff879b07SJung-uk Kim 
2622ff879b07SJung-uk Kim /* Macro to construct a NFIT/NVDIMM device handle */
2623ff879b07SJung-uk Kim 
2624ff879b07SJung-uk Kim #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
2625ff879b07SJung-uk Kim     ((dimm)                                         | \
2626ff879b07SJung-uk Kim     ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
2627ff879b07SJung-uk Kim     ((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
2628ff879b07SJung-uk Kim     ((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
2629ff879b07SJung-uk Kim     ((node)    << ACPI_NFIT_NODE_ID_OFFSET))
2630ff879b07SJung-uk Kim 
2631ff879b07SJung-uk Kim /* Macros to extract individual fields from a NFIT/NVDIMM device handle */
2632ff879b07SJung-uk Kim 
2633ff879b07SJung-uk Kim #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
2634ff879b07SJung-uk Kim     ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
2635ff879b07SJung-uk Kim 
2636ff879b07SJung-uk Kim #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
2637ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
2638ff879b07SJung-uk Kim 
2639ff879b07SJung-uk Kim #define ACPI_NFIT_GET_MEMORY_ID(handle) \
2640ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
2641ff879b07SJung-uk Kim 
2642ff879b07SJung-uk Kim #define ACPI_NFIT_GET_SOCKET_ID(handle) \
2643ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
2644ff879b07SJung-uk Kim 
2645ff879b07SJung-uk Kim #define ACPI_NFIT_GET_NODE_ID(handle) \
2646ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
2647ff879b07SJung-uk Kim 
2648ff879b07SJung-uk Kim 
2649ff879b07SJung-uk Kim /*******************************************************************************
2650ff879b07SJung-uk Kim  *
26511b7a2680SJung-uk Kim  * NHLT - Non HDAudio Link Table
2652804fe266SJung-uk Kim  *        Version 1
26531b7a2680SJung-uk Kim  *
26541b7a2680SJung-uk Kim  ******************************************************************************/
26551b7a2680SJung-uk Kim 
26561b7a2680SJung-uk Kim typedef struct acpi_table_nhlt
26571b7a2680SJung-uk Kim {
26581b7a2680SJung-uk Kim     ACPI_TABLE_HEADER              Header;          /* Common ACPI table header */
2659804fe266SJung-uk Kim     UINT8                          EndpointsCount;
2660804fe266SJung-uk Kim     /*
2661804fe266SJung-uk Kim      * ACPI_NHLT_ENDPOINT          Endpoints[];
2662804fe266SJung-uk Kim      * ACPI_NHLT_CONFIG            OEDConfig;
2663804fe266SJung-uk Kim      */
26641b7a2680SJung-uk Kim 
26651b7a2680SJung-uk Kim } ACPI_TABLE_NHLT;
26661b7a2680SJung-uk Kim 
26671b7a2680SJung-uk Kim typedef struct acpi_nhlt_endpoint
26681b7a2680SJung-uk Kim {
2669804fe266SJung-uk Kim     UINT32                         Length;
26701b7a2680SJung-uk Kim     UINT8                          LinkType;
26711b7a2680SJung-uk Kim     UINT8                          InstanceId;
26721b7a2680SJung-uk Kim     UINT16                         VendorId;
26731b7a2680SJung-uk Kim     UINT16                         DeviceId;
26741b7a2680SJung-uk Kim     UINT16                         RevisionId;
26751b7a2680SJung-uk Kim     UINT32                         SubsystemId;
26761b7a2680SJung-uk Kim     UINT8                          DeviceType;
26771b7a2680SJung-uk Kim     UINT8                          Direction;
26781b7a2680SJung-uk Kim     UINT8                          VirtualBusId;
2679804fe266SJung-uk Kim     /*
2680804fe266SJung-uk Kim      * ACPI_NHLT_CONFIG            DeviceConfig;
2681804fe266SJung-uk Kim      * ACPI_NHLT_FORMATS_CONFIG    FormatsConfig;
2682804fe266SJung-uk Kim      * ACPI_NHLT_DEVICES_INFO      DevicesInfo;
2683804fe266SJung-uk Kim      */
26841b7a2680SJung-uk Kim 
26851b7a2680SJung-uk Kim } ACPI_NHLT_ENDPOINT;
26861b7a2680SJung-uk Kim 
2687804fe266SJung-uk Kim /* Values for LinkType field above */
26881b7a2680SJung-uk Kim 
2689804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_HDA               0
2690804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_DSP               1
2691804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_PDM               2
2692804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_SSP               3
2693804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_SLIMBUS           4
2694804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_SDW               5
2695804fe266SJung-uk Kim #define ACPI_NHLT_LINKTYPE_UAOL              6
26961b7a2680SJung-uk Kim 
26971b7a2680SJung-uk Kim /* Values for DeviceId field above */
26981b7a2680SJung-uk Kim 
2699804fe266SJung-uk Kim #define ACPI_NHLT_DEVICEID_DMIC              0xAE20
2700804fe266SJung-uk Kim #define ACPI_NHLT_DEVICEID_BT                0xAE30
2701804fe266SJung-uk Kim #define ACPI_NHLT_DEVICEID_I2S               0xAE34
27021b7a2680SJung-uk Kim 
27031b7a2680SJung-uk Kim /* Values for DeviceType field above */
27041b7a2680SJung-uk Kim 
2705804fe266SJung-uk Kim /* Device types unique to endpoint of LinkType=PDM */
2706804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_PDM             0
2707804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_PDM_SKL         1
2708804fe266SJung-uk Kim /* Device types unique to endpoint of LinkType=SSP */
2709804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_BT              0
2710804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_FM              1
2711804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_MODEM           2
2712804fe266SJung-uk Kim #define ACPI_NHLT_DEVICETYPE_CODEC           4
27131b7a2680SJung-uk Kim 
27141b7a2680SJung-uk Kim /* Values for Direction field above */
27151b7a2680SJung-uk Kim 
27161b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_RENDER                 0
27171b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_CAPTURE                1
27181b7a2680SJung-uk Kim 
2719804fe266SJung-uk Kim typedef struct acpi_nhlt_config
27201b7a2680SJung-uk Kim {
27211b7a2680SJung-uk Kim     UINT32                         CapabilitiesSize;
2722804fe266SJung-uk Kim     UINT8                          Capabilities[1];
2723804fe266SJung-uk Kim 
2724804fe266SJung-uk Kim } ACPI_NHLT_CONFIG;
2725804fe266SJung-uk Kim 
2726804fe266SJung-uk Kim typedef struct acpi_nhlt_gendevice_config
2727804fe266SJung-uk Kim {
27281b7a2680SJung-uk Kim     UINT8                          VirtualSlot;
27291b7a2680SJung-uk Kim     UINT8                          ConfigType;
27301b7a2680SJung-uk Kim 
2731804fe266SJung-uk Kim } ACPI_NHLT_GENDEVICE_CONFIG;
27321b7a2680SJung-uk Kim 
2733804fe266SJung-uk Kim /* Values for ConfigType field above */
2734ab71bbb7SJung-uk Kim 
2735804fe266SJung-uk Kim #define ACPI_NHLT_CONFIGTYPE_GENERIC         0
2736804fe266SJung-uk Kim #define ACPI_NHLT_CONFIGTYPE_MICARRAY        1
27371b7a2680SJung-uk Kim 
2738804fe266SJung-uk Kim typedef struct acpi_nhlt_micdevice_config
2739ab71bbb7SJung-uk Kim {
2740ab71bbb7SJung-uk Kim     UINT8                          VirtualSlot;
2741ab71bbb7SJung-uk Kim     UINT8                          ConfigType;
2742ab71bbb7SJung-uk Kim     UINT8                          ArrayType;
2743ab71bbb7SJung-uk Kim 
2744804fe266SJung-uk Kim } ACPI_NHLT_MICDEVICE_CONFIG;
2745ab71bbb7SJung-uk Kim 
2746804fe266SJung-uk Kim /* Values for ArrayType field above */
27471b7a2680SJung-uk Kim 
2748804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL    0xA
2749804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG      0xB
2750804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1     0xC
2751804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED  0xD
2752804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2     0xE
2753804fe266SJung-uk Kim #define ACPI_NHLT_ARRAYTYPE_VENDOR           0xF
27541b7a2680SJung-uk Kim 
27551b7a2680SJung-uk Kim typedef struct acpi_nhlt_vendor_mic_config
27561b7a2680SJung-uk Kim {
27571b7a2680SJung-uk Kim     UINT8                          Type;
27581b7a2680SJung-uk Kim     UINT8                          Panel;
2759ab71bbb7SJung-uk Kim     UINT16                         SpeakerPositionDistance;   /* mm */
2760ab71bbb7SJung-uk Kim     UINT16                         HorizontalOffset;          /* mm */
2761ab71bbb7SJung-uk Kim     UINT16                         VerticalOffset;            /* mm */
2762ab71bbb7SJung-uk Kim     UINT8                          FrequencyLowBand;          /* 5*Hz */
2763ab71bbb7SJung-uk Kim     UINT8                          FrequencyHighBand;         /* 500*Hz */
2764ab71bbb7SJung-uk Kim     UINT16                         DirectionAngle;            /* -180 - +180 */
2765ab71bbb7SJung-uk Kim     UINT16                         ElevationAngle;            /* -180 - +180 */
2766ab71bbb7SJung-uk Kim     UINT16                         WorkVerticalAngleBegin;    /* -180 - +180 with 2 deg step */
2767ab71bbb7SJung-uk Kim     UINT16                         WorkVerticalAngleEnd;      /* -180 - +180 with 2 deg step */
2768ab71bbb7SJung-uk Kim     UINT16                         WorkHorizontalAngleBegin;  /* -180 - +180 with 2 deg step */
2769ab71bbb7SJung-uk Kim     UINT16                         WorkHorizontalAngleEnd;    /* -180 - +180 with 2 deg step */
27701b7a2680SJung-uk Kim 
27711b7a2680SJung-uk Kim } ACPI_NHLT_VENDOR_MIC_CONFIG;
27721b7a2680SJung-uk Kim 
27731b7a2680SJung-uk Kim /* Values for Type field above */
27741b7a2680SJung-uk Kim 
2775804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL    0
2776804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_SUBCARDIOID        1
2777804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_CARDIOID           2
2778804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_SUPERCARDIOID      3
2779804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_HYPERCARDIOID      4
2780804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_8SHAPED            5
2781804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_RESERVED           6
2782804fe266SJung-uk Kim #define ACPI_NHLT_MICTYPE_VENDORDEFINED      7
27831b7a2680SJung-uk Kim 
27841b7a2680SJung-uk Kim /* Values for Panel field above */
27851b7a2680SJung-uk Kim 
2786804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_TOP             0
2787804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_BOTTOM          1
2788804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_LEFT            2
2789804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_RIGHT           3
2790804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_FRONT           4
2791804fe266SJung-uk Kim #define ACPI_NHLT_MICLOCATION_REAR            5
27921b7a2680SJung-uk Kim 
2793804fe266SJung-uk Kim typedef struct acpi_nhlt_vendor_micdevice_config
27941b7a2680SJung-uk Kim {
2795804fe266SJung-uk Kim     UINT8                          VirtualSlot;
2796804fe266SJung-uk Kim     UINT8                          ConfigType;
2797804fe266SJung-uk Kim     UINT8                          ArrayType;
2798804fe266SJung-uk Kim     UINT8                          MicsCount;
2799804fe266SJung-uk Kim     ACPI_NHLT_VENDOR_MIC_CONFIG    Mics[];
28001b7a2680SJung-uk Kim 
2801804fe266SJung-uk Kim } ACPI_NHLT_VENDOR_MICDEVICE_CONFIG;
28021b7a2680SJung-uk Kim 
2803804fe266SJung-uk Kim typedef union acpi_nhlt_device_config
28041b7a2680SJung-uk Kim {
2805804fe266SJung-uk Kim     UINT8                                VirtualSlot;
2806804fe266SJung-uk Kim     ACPI_NHLT_GENDEVICE_CONFIG           Gen;
2807804fe266SJung-uk Kim     ACPI_NHLT_MICDEVICE_CONFIG           Mic;
2808804fe266SJung-uk Kim     ACPI_NHLT_VENDOR_MICDEVICE_CONFIG    VendorMic;
28091b7a2680SJung-uk Kim 
2810804fe266SJung-uk Kim } ACPI_NHLT_DEVICE_CONFIG;
28111b7a2680SJung-uk Kim 
2812804fe266SJung-uk Kim /* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */
2813804fe266SJung-uk Kim typedef struct acpi_nhlt_wave_formatext
28141b7a2680SJung-uk Kim {
2815804fe266SJung-uk Kim     UINT16                         FormatTag;
2816804fe266SJung-uk Kim     UINT16                         ChannelCount;
2817804fe266SJung-uk Kim     UINT32                         SamplesPerSec;
2818804fe266SJung-uk Kim     UINT32                         AvgBytesPerSec;
2819804fe266SJung-uk Kim     UINT16                         BlockAlign;
2820804fe266SJung-uk Kim     UINT16                         BitsPerSample;
2821804fe266SJung-uk Kim     UINT16                         ExtraFormatSize;
2822804fe266SJung-uk Kim     UINT16                         ValidBitsPerSample;
2823804fe266SJung-uk Kim     UINT32                         ChannelMask;
2824804fe266SJung-uk Kim     UINT8                          Subformat[16];
28251b7a2680SJung-uk Kim 
2826804fe266SJung-uk Kim } ACPI_NHLT_WAVE_FORMATEXT;
28271b7a2680SJung-uk Kim 
2828804fe266SJung-uk Kim typedef struct acpi_nhlt_format_config
28291b7a2680SJung-uk Kim {
2830804fe266SJung-uk Kim     ACPI_NHLT_WAVE_FORMATEXT       Format;
2831804fe266SJung-uk Kim     ACPI_NHLT_CONFIG               Config;
28321b7a2680SJung-uk Kim 
2833804fe266SJung-uk Kim } ACPI_NHLT_FORMAT_CONFIG;
2834804fe266SJung-uk Kim 
2835804fe266SJung-uk Kim typedef struct acpi_nhlt_formats_config
2836804fe266SJung-uk Kim {
2837804fe266SJung-uk Kim     UINT8                          FormatsCount;
2838804fe266SJung-uk Kim     ACPI_NHLT_FORMAT_CONFIG        Formats[];
2839804fe266SJung-uk Kim 
2840804fe266SJung-uk Kim } ACPI_NHLT_FORMATS_CONFIG;
28411b7a2680SJung-uk Kim 
2842ab71bbb7SJung-uk Kim typedef struct acpi_nhlt_device_info
28431b7a2680SJung-uk Kim {
2844804fe266SJung-uk Kim     UINT8                          Id[16];
2845804fe266SJung-uk Kim     UINT8                          InstanceId;
2846804fe266SJung-uk Kim     UINT8                          PortId;
28471b7a2680SJung-uk Kim 
2848ab71bbb7SJung-uk Kim } ACPI_NHLT_DEVICE_INFO;
28491b7a2680SJung-uk Kim 
2850804fe266SJung-uk Kim typedef struct acpi_nhlt_devices_info
2851804fe266SJung-uk Kim {
2852804fe266SJung-uk Kim     UINT8                          DevicesCount;
2853804fe266SJung-uk Kim     ACPI_NHLT_DEVICE_INFO          Devices[];
2854804fe266SJung-uk Kim 
2855804fe266SJung-uk Kim } ACPI_NHLT_DEVICES_INFO;
2856804fe266SJung-uk Kim 
28571b7a2680SJung-uk Kim 
28581b7a2680SJung-uk Kim /*******************************************************************************
28591b7a2680SJung-uk Kim  *
2860ff879b07SJung-uk Kim  * PCCT - Platform Communications Channel Table (ACPI 5.0)
2861ff879b07SJung-uk Kim  *        Version 2 (ACPI 6.2)
2862ff879b07SJung-uk Kim  *
2863ff879b07SJung-uk Kim  ******************************************************************************/
2864ff879b07SJung-uk Kim 
2865ff879b07SJung-uk Kim typedef struct acpi_table_pcct
2866ff879b07SJung-uk Kim {
2867ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2868ff879b07SJung-uk Kim     UINT32                  Flags;
2869ff879b07SJung-uk Kim     UINT64                  Reserved;
2870ff879b07SJung-uk Kim 
2871ff879b07SJung-uk Kim } ACPI_TABLE_PCCT;
2872ff879b07SJung-uk Kim 
2873ff879b07SJung-uk Kim /* Values for Flags field above */
2874ff879b07SJung-uk Kim 
2875ff879b07SJung-uk Kim #define ACPI_PCCT_DOORBELL              1
2876ff879b07SJung-uk Kim 
2877ff879b07SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */
2878ff879b07SJung-uk Kim 
2879ff879b07SJung-uk Kim enum AcpiPcctType
2880ff879b07SJung-uk Kim {
2881ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_GENERIC_SUBSPACE             = 0,
2882ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE          = 1,
2883ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2    = 2,    /* ACPI 6.1 */
2884ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE      = 3,    /* ACPI 6.2 */
2885ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE       = 4,    /* ACPI 6.2 */
2886cfd1ed46SJung-uk Kim     ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE         = 5,    /* ACPI 6.4 */
2887cfd1ed46SJung-uk Kim     ACPI_PCCT_TYPE_RESERVED                     = 6     /* 6 and greater are reserved */
2888ff879b07SJung-uk Kim };
2889ff879b07SJung-uk Kim 
2890ff879b07SJung-uk Kim /*
2891ff879b07SJung-uk Kim  * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
2892ff879b07SJung-uk Kim  */
2893ff879b07SJung-uk Kim 
2894ff879b07SJung-uk Kim /* 0: Generic Communications Subspace */
2895ff879b07SJung-uk Kim 
2896ff879b07SJung-uk Kim typedef struct acpi_pcct_subspace
2897ff879b07SJung-uk Kim {
2898ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2899ff879b07SJung-uk Kim     UINT8                   Reserved[6];
2900ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2901ff879b07SJung-uk Kim     UINT64                  Length;
2902ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2903ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2904ff879b07SJung-uk Kim     UINT64                  WriteMask;
2905ff879b07SJung-uk Kim     UINT32                  Latency;
2906ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2907ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
2908ff879b07SJung-uk Kim 
2909ff879b07SJung-uk Kim } ACPI_PCCT_SUBSPACE;
2910ff879b07SJung-uk Kim 
2911ff879b07SJung-uk Kim 
2912ff879b07SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */
2913ff879b07SJung-uk Kim 
2914ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced
2915ff879b07SJung-uk Kim {
2916ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2917ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
2918ff879b07SJung-uk Kim     UINT8                   Flags;
2919ff879b07SJung-uk Kim     UINT8                   Reserved;
2920ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2921ff879b07SJung-uk Kim     UINT64                  Length;
2922ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2923ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2924ff879b07SJung-uk Kim     UINT64                  WriteMask;
2925ff879b07SJung-uk Kim     UINT32                  Latency;
2926ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2927ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
2928ff879b07SJung-uk Kim 
2929ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED;
2930ff879b07SJung-uk Kim 
2931ff879b07SJung-uk Kim 
2932ff879b07SJung-uk Kim /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
2933ff879b07SJung-uk Kim 
2934ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced_type2
2935ff879b07SJung-uk Kim {
2936ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2937ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
2938ff879b07SJung-uk Kim     UINT8                   Flags;
2939ff879b07SJung-uk Kim     UINT8                   Reserved;
2940ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2941ff879b07SJung-uk Kim     UINT64                  Length;
2942ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2943ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2944ff879b07SJung-uk Kim     UINT64                  WriteMask;
2945ff879b07SJung-uk Kim     UINT32                  Latency;
2946ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2947ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
2948ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
2949ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
2950ff879b07SJung-uk Kim     UINT64                  AckWriteMask;
2951ff879b07SJung-uk Kim 
2952ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED_TYPE2;
2953ff879b07SJung-uk Kim 
2954ff879b07SJung-uk Kim 
2955ff879b07SJung-uk Kim /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
2956ff879b07SJung-uk Kim 
2957ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_master
2958ff879b07SJung-uk Kim {
2959ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2960ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
2961ff879b07SJung-uk Kim     UINT8                   Flags;
2962ff879b07SJung-uk Kim     UINT8                   Reserved1;
2963ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2964ff879b07SJung-uk Kim     UINT32                  Length;
2965ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2966ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2967ff879b07SJung-uk Kim     UINT64                  WriteMask;
2968ff879b07SJung-uk Kim     UINT32                  Latency;
2969ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
2970ff879b07SJung-uk Kim     UINT32                  MinTurnaroundTime;
2971ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
2972ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
2973ff879b07SJung-uk Kim     UINT64                  AckSetMask;
2974ff879b07SJung-uk Kim     UINT64                  Reserved2;
2975ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
2976ff879b07SJung-uk Kim     UINT64                  CmdCompleteMask;
2977ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
2978ff879b07SJung-uk Kim     UINT64                  CmdUpdatePreserveMask;
2979ff879b07SJung-uk Kim     UINT64                  CmdUpdateSetMask;
2980ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
2981ff879b07SJung-uk Kim     UINT64                  ErrorStatusMask;
2982ff879b07SJung-uk Kim 
2983ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_MASTER;
2984ff879b07SJung-uk Kim 
2985ff879b07SJung-uk Kim 
2986ff879b07SJung-uk Kim /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
2987ff879b07SJung-uk Kim 
2988ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_slave
2989ff879b07SJung-uk Kim {
2990ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2991ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
2992ff879b07SJung-uk Kim     UINT8                   Flags;
2993ff879b07SJung-uk Kim     UINT8                   Reserved1;
2994ff879b07SJung-uk Kim     UINT64                  BaseAddress;
2995ff879b07SJung-uk Kim     UINT32                  Length;
2996ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
2997ff879b07SJung-uk Kim     UINT64                  PreserveMask;
2998ff879b07SJung-uk Kim     UINT64                  WriteMask;
2999ff879b07SJung-uk Kim     UINT32                  Latency;
3000ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
3001ff879b07SJung-uk Kim     UINT32                  MinTurnaroundTime;
3002ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
3003ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
3004ff879b07SJung-uk Kim     UINT64                  AckSetMask;
3005ff879b07SJung-uk Kim     UINT64                  Reserved2;
3006ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
3007ff879b07SJung-uk Kim     UINT64                  CmdCompleteMask;
3008ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
3009ff879b07SJung-uk Kim     UINT64                  CmdUpdatePreserveMask;
3010ff879b07SJung-uk Kim     UINT64                  CmdUpdateSetMask;
3011ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
3012ff879b07SJung-uk Kim     UINT64                  ErrorStatusMask;
3013ff879b07SJung-uk Kim 
3014ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SLAVE;
3015ff879b07SJung-uk Kim 
3016cfd1ed46SJung-uk Kim /* 5: HW Registers based Communications Subspace */
3017cfd1ed46SJung-uk Kim 
3018cfd1ed46SJung-uk Kim typedef struct acpi_pcct_hw_reg
3019cfd1ed46SJung-uk Kim {
3020cfd1ed46SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
3021cfd1ed46SJung-uk Kim     UINT16                  Version;
3022cfd1ed46SJung-uk Kim     UINT64                  BaseAddress;
3023cfd1ed46SJung-uk Kim     UINT64                  Length;
3024cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
3025cfd1ed46SJung-uk Kim     UINT64                  DoorbellPreserve;
3026cfd1ed46SJung-uk Kim     UINT64                  DoorbellWrite;
3027cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
3028cfd1ed46SJung-uk Kim     UINT64                  CmdCompleteMask;
3029cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
3030cfd1ed46SJung-uk Kim     UINT64                  ErrorStatusMask;
3031cfd1ed46SJung-uk Kim     UINT32                  NominalLatency;
3032cfd1ed46SJung-uk Kim     UINT32                  MinTurnaroundTime;
3033cfd1ed46SJung-uk Kim 
3034cfd1ed46SJung-uk Kim } ACPI_PCCT_HW_REG;
3035cfd1ed46SJung-uk Kim 
3036ff879b07SJung-uk Kim 
3037ff879b07SJung-uk Kim /* Values for doorbell flags above */
3038ff879b07SJung-uk Kim 
3039ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY    (1)
3040ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
3041ff879b07SJung-uk Kim 
3042ff879b07SJung-uk Kim 
3043ff879b07SJung-uk Kim /*
3044ff879b07SJung-uk Kim  * PCC memory structures (not part of the ACPI table)
3045ff879b07SJung-uk Kim  */
3046ff879b07SJung-uk Kim 
3047ff879b07SJung-uk Kim /* Shared Memory Region */
3048ff879b07SJung-uk Kim 
3049ff879b07SJung-uk Kim typedef struct acpi_pcct_shared_memory
3050ff879b07SJung-uk Kim {
3051ff879b07SJung-uk Kim     UINT32                  Signature;
3052ff879b07SJung-uk Kim     UINT16                  Command;
3053ff879b07SJung-uk Kim     UINT16                  Status;
3054ff879b07SJung-uk Kim 
3055ff879b07SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY;
3056ff879b07SJung-uk Kim 
3057ff879b07SJung-uk Kim 
3058ff879b07SJung-uk Kim /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
3059ff879b07SJung-uk Kim 
3060ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_shared_memory
3061ff879b07SJung-uk Kim {
3062ff879b07SJung-uk Kim     UINT32                  Signature;
3063ff879b07SJung-uk Kim     UINT32                  Flags;
3064ff879b07SJung-uk Kim     UINT32                  Length;
3065ff879b07SJung-uk Kim     UINT32                  Command;
3066ff879b07SJung-uk Kim 
3067ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SHARED_MEMORY;
3068ff879b07SJung-uk Kim 
3069ff879b07SJung-uk Kim 
3070ff879b07SJung-uk Kim /*******************************************************************************
3071ff879b07SJung-uk Kim  *
3072ff879b07SJung-uk Kim  * PDTT - Platform Debug Trigger Table (ACPI 6.2)
3073ff879b07SJung-uk Kim  *        Version 0
3074ff879b07SJung-uk Kim  *
3075ff879b07SJung-uk Kim  ******************************************************************************/
3076ff879b07SJung-uk Kim 
3077ff879b07SJung-uk Kim typedef struct acpi_table_pdtt
3078ff879b07SJung-uk Kim {
3079ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3080ff879b07SJung-uk Kim     UINT8                   TriggerCount;
3081ff879b07SJung-uk Kim     UINT8                   Reserved[3];
3082ff879b07SJung-uk Kim     UINT32                  ArrayOffset;
3083ff879b07SJung-uk Kim 
3084ff879b07SJung-uk Kim } ACPI_TABLE_PDTT;
3085ff879b07SJung-uk Kim 
3086ff879b07SJung-uk Kim 
3087ff879b07SJung-uk Kim /*
3088ff879b07SJung-uk Kim  * PDTT Communication Channel Identifier Structure.
3089ff879b07SJung-uk Kim  * The number of these structures is defined by TriggerCount above,
3090ff879b07SJung-uk Kim  * starting at ArrayOffset.
3091ff879b07SJung-uk Kim  */
3092ff879b07SJung-uk Kim typedef struct acpi_pdtt_channel
3093ff879b07SJung-uk Kim {
3094ff879b07SJung-uk Kim     UINT8                   SubchannelId;
3095ff879b07SJung-uk Kim     UINT8                   Flags;
3096ff879b07SJung-uk Kim 
3097ff879b07SJung-uk Kim } ACPI_PDTT_CHANNEL;
3098ff879b07SJung-uk Kim 
3099ff879b07SJung-uk Kim /* Flags for above */
3100ff879b07SJung-uk Kim 
3101ff879b07SJung-uk Kim #define ACPI_PDTT_RUNTIME_TRIGGER           (1)
3102ff879b07SJung-uk Kim #define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
3103cd6518c7SJung-uk Kim #define ACPI_PDTT_TRIGGER_ORDER             (1<<2)
3104ff879b07SJung-uk Kim 
3105ff879b07SJung-uk Kim 
3106ff879b07SJung-uk Kim /*******************************************************************************
3107ff879b07SJung-uk Kim  *
3108cfd1ed46SJung-uk Kim  * PHAT - Platform Health Assessment Table (ACPI 6.4)
3109cfd1ed46SJung-uk Kim  *        Version 1
3110cfd1ed46SJung-uk Kim  *
3111cfd1ed46SJung-uk Kim  ******************************************************************************/
3112cfd1ed46SJung-uk Kim 
3113cfd1ed46SJung-uk Kim typedef struct acpi_table_phat
3114cfd1ed46SJung-uk Kim {
3115cfd1ed46SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3116cfd1ed46SJung-uk Kim 
3117cfd1ed46SJung-uk Kim } ACPI_TABLE_PHAT;
3118cfd1ed46SJung-uk Kim 
3119cfd1ed46SJung-uk Kim /* Common header for PHAT subtables that follow main table */
3120cfd1ed46SJung-uk Kim 
3121cfd1ed46SJung-uk Kim typedef struct acpi_phat_header
3122cfd1ed46SJung-uk Kim {
3123cfd1ed46SJung-uk Kim     UINT16                  Type;
3124cfd1ed46SJung-uk Kim     UINT16                  Length;
3125cfd1ed46SJung-uk Kim     UINT8                   Revision;
3126cfd1ed46SJung-uk Kim 
3127cfd1ed46SJung-uk Kim } ACPI_PHAT_HEADER;
3128cfd1ed46SJung-uk Kim 
3129cfd1ed46SJung-uk Kim 
3130cfd1ed46SJung-uk Kim /* Values for Type field above */
3131cfd1ed46SJung-uk Kim 
3132cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_VERSION_DATA  0
3133cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_HEALTH_DATA   1
3134cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_RESERVED         2 /* 0x02-0xFFFF are reserved */
3135cfd1ed46SJung-uk Kim 
3136cfd1ed46SJung-uk Kim /*
3137cfd1ed46SJung-uk Kim  * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER
3138cfd1ed46SJung-uk Kim  */
3139cfd1ed46SJung-uk Kim 
3140cfd1ed46SJung-uk Kim /* 0: Firmware Version Data Record */
3141cfd1ed46SJung-uk Kim 
3142cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_data
3143cfd1ed46SJung-uk Kim {
3144cfd1ed46SJung-uk Kim     ACPI_PHAT_HEADER        Header;
3145cfd1ed46SJung-uk Kim     UINT8                   Reserved[3];
3146cfd1ed46SJung-uk Kim     UINT32                  ElementCount;
3147cfd1ed46SJung-uk Kim 
3148cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_DATA;
3149cfd1ed46SJung-uk Kim 
3150cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_element
3151cfd1ed46SJung-uk Kim {
3152cfd1ed46SJung-uk Kim     UINT8                   Guid[16];
3153cfd1ed46SJung-uk Kim     UINT64                  VersionValue;
3154cfd1ed46SJung-uk Kim     UINT32                  ProducerId;
3155cfd1ed46SJung-uk Kim 
3156cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_ELEMENT;
3157cfd1ed46SJung-uk Kim 
3158cfd1ed46SJung-uk Kim 
3159cfd1ed46SJung-uk Kim /* 1: Firmware Health Data Record */
3160cfd1ed46SJung-uk Kim 
3161cfd1ed46SJung-uk Kim typedef struct acpi_phat_health_data
3162cfd1ed46SJung-uk Kim {
3163cfd1ed46SJung-uk Kim     ACPI_PHAT_HEADER        Header;
3164cfd1ed46SJung-uk Kim     UINT8                   Reserved[2];
3165cfd1ed46SJung-uk Kim     UINT8                   Health;
3166cfd1ed46SJung-uk Kim     UINT8                   DeviceGuid[16];
3167cfd1ed46SJung-uk Kim     UINT32                  DeviceSpecificOffset; /* Zero if no Device-specific data */
3168cfd1ed46SJung-uk Kim 
3169cfd1ed46SJung-uk Kim } ACPI_PHAT_HEALTH_DATA;
3170cfd1ed46SJung-uk Kim 
3171cfd1ed46SJung-uk Kim /* Values for Health field above */
3172cfd1ed46SJung-uk Kim 
3173cfd1ed46SJung-uk Kim #define ACPI_PHAT_ERRORS_FOUND          0
3174cfd1ed46SJung-uk Kim #define ACPI_PHAT_NO_ERRORS             1
3175cfd1ed46SJung-uk Kim #define ACPI_PHAT_UNKNOWN_ERRORS        2
3176cfd1ed46SJung-uk Kim #define ACPI_PHAT_ADVISORY              3
3177cfd1ed46SJung-uk Kim 
3178cfd1ed46SJung-uk Kim 
3179cfd1ed46SJung-uk Kim /*******************************************************************************
3180cfd1ed46SJung-uk Kim  *
3181ff879b07SJung-uk Kim  * PMTT - Platform Memory Topology Table (ACPI 5.0)
3182ff879b07SJung-uk Kim  *        Version 1
3183ff879b07SJung-uk Kim  *
3184ff879b07SJung-uk Kim  ******************************************************************************/
3185ff879b07SJung-uk Kim 
3186ff879b07SJung-uk Kim typedef struct acpi_table_pmtt
3187ff879b07SJung-uk Kim {
3188ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3189cfd1ed46SJung-uk Kim     UINT32                  MemoryDeviceCount;
3190cfd1ed46SJung-uk Kim     /*
3191cfd1ed46SJung-uk Kim      * Immediately followed by:
3192cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
3193cfd1ed46SJung-uk Kim      */
3194ff879b07SJung-uk Kim 
3195ff879b07SJung-uk Kim } ACPI_TABLE_PMTT;
3196ff879b07SJung-uk Kim 
3197ff879b07SJung-uk Kim 
3198ff879b07SJung-uk Kim /* Common header for PMTT subtables that follow main table */
3199ff879b07SJung-uk Kim 
3200ff879b07SJung-uk Kim typedef struct acpi_pmtt_header
3201ff879b07SJung-uk Kim {
3202ff879b07SJung-uk Kim     UINT8                   Type;
3203ff879b07SJung-uk Kim     UINT8                   Reserved1;
3204ff879b07SJung-uk Kim     UINT16                  Length;
3205ff879b07SJung-uk Kim     UINT16                  Flags;
3206ff879b07SJung-uk Kim     UINT16                  Reserved2;
3207cfd1ed46SJung-uk Kim     UINT32                  MemoryDeviceCount;  /* Zero means no memory device structs follow */
3208cfd1ed46SJung-uk Kim     /*
3209cfd1ed46SJung-uk Kim      * Immediately followed by:
3210cfd1ed46SJung-uk Kim      * UINT8 TypeSpecificData[]
3211cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
3212cfd1ed46SJung-uk Kim      */
3213ff879b07SJung-uk Kim 
3214ff879b07SJung-uk Kim } ACPI_PMTT_HEADER;
3215ff879b07SJung-uk Kim 
3216ff879b07SJung-uk Kim /* Values for Type field above */
3217ff879b07SJung-uk Kim 
3218ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET           0
3219ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER       1
3220ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM             2
3221cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFE are reserved */
3222cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_VENDOR           0xFF
3223ff879b07SJung-uk Kim 
3224ff879b07SJung-uk Kim /* Values for Flags field above */
3225ff879b07SJung-uk Kim 
3226ff879b07SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL             0x0001
3227ff879b07SJung-uk Kim #define ACPI_PMTT_PHYSICAL              0x0002
3228ff879b07SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE           0x000C
3229ff879b07SJung-uk Kim 
3230ff879b07SJung-uk Kim 
3231ff879b07SJung-uk Kim /*
3232ff879b07SJung-uk Kim  * PMTT subtables, correspond to Type in acpi_pmtt_header
3233ff879b07SJung-uk Kim  */
3234ff879b07SJung-uk Kim 
3235ff879b07SJung-uk Kim 
3236ff879b07SJung-uk Kim /* 0: Socket Structure */
3237ff879b07SJung-uk Kim 
3238ff879b07SJung-uk Kim typedef struct acpi_pmtt_socket
3239ff879b07SJung-uk Kim {
3240ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
3241ff879b07SJung-uk Kim     UINT16                  SocketId;
3242ff879b07SJung-uk Kim     UINT16                  Reserved;
3243ff879b07SJung-uk Kim 
3244ff879b07SJung-uk Kim } ACPI_PMTT_SOCKET;
3245cfd1ed46SJung-uk Kim     /*
3246cfd1ed46SJung-uk Kim      * Immediately followed by:
3247cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
3248cfd1ed46SJung-uk Kim      */
3249ff879b07SJung-uk Kim 
3250ff879b07SJung-uk Kim 
3251ff879b07SJung-uk Kim /* 1: Memory Controller subtable */
3252ff879b07SJung-uk Kim 
3253ff879b07SJung-uk Kim typedef struct acpi_pmtt_controller
3254ff879b07SJung-uk Kim {
3255ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
3256cfd1ed46SJung-uk Kim     UINT16                  ControllerId;
3257ff879b07SJung-uk Kim     UINT16                  Reserved;
3258ff879b07SJung-uk Kim 
3259ff879b07SJung-uk Kim } ACPI_PMTT_CONTROLLER;
3260cfd1ed46SJung-uk Kim     /*
3261cfd1ed46SJung-uk Kim      * Immediately followed by:
3262cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
3263cfd1ed46SJung-uk Kim      */
3264ff879b07SJung-uk Kim 
3265ff879b07SJung-uk Kim 
3266ff879b07SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */
3267ff879b07SJung-uk Kim 
3268ff879b07SJung-uk Kim typedef struct acpi_pmtt_physical_component
3269ff879b07SJung-uk Kim {
3270ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
3271ff879b07SJung-uk Kim     UINT32                  BiosHandle;
3272ff879b07SJung-uk Kim 
3273ff879b07SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT;
3274ff879b07SJung-uk Kim 
3275ff879b07SJung-uk Kim 
3276cfd1ed46SJung-uk Kim /* 0xFF: Vendor Specific Data */
3277cfd1ed46SJung-uk Kim 
3278cfd1ed46SJung-uk Kim typedef struct acpi_pmtt_vendor_specific
3279cfd1ed46SJung-uk Kim {
3280cfd1ed46SJung-uk Kim     ACPI_PMTT_HEADER        Header;
3281cfd1ed46SJung-uk Kim     UINT8                   TypeUuid[16];
3282cfd1ed46SJung-uk Kim     UINT8                   Specific[];
3283cfd1ed46SJung-uk Kim     /*
3284cfd1ed46SJung-uk Kim      * Immediately followed by:
3285cfd1ed46SJung-uk Kim      * UINT8 VendorSpecificData[];
3286cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
3287cfd1ed46SJung-uk Kim      */
3288cfd1ed46SJung-uk Kim 
3289cfd1ed46SJung-uk Kim } ACPI_PMTT_VENDOR_SPECIFIC;
3290cfd1ed46SJung-uk Kim 
3291cfd1ed46SJung-uk Kim 
3292ff879b07SJung-uk Kim /*******************************************************************************
3293ff879b07SJung-uk Kim  *
3294ff879b07SJung-uk Kim  * PPTT - Processor Properties Topology Table (ACPI 6.2)
3295ff879b07SJung-uk Kim  *        Version 1
3296ff879b07SJung-uk Kim  *
3297ff879b07SJung-uk Kim  ******************************************************************************/
3298ff879b07SJung-uk Kim 
3299ff879b07SJung-uk Kim typedef struct acpi_table_pptt
3300ff879b07SJung-uk Kim {
3301ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3302ff879b07SJung-uk Kim 
3303ff879b07SJung-uk Kim } ACPI_TABLE_PPTT;
3304ff879b07SJung-uk Kim 
3305ff879b07SJung-uk Kim /* Values for Type field above */
3306ff879b07SJung-uk Kim 
3307ff879b07SJung-uk Kim enum AcpiPpttType
3308ff879b07SJung-uk Kim {
3309ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_PROCESSOR            = 0,
3310ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_CACHE                = 1,
3311ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_ID                   = 2,
3312ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_RESERVED             = 3
3313ff879b07SJung-uk Kim };
3314ff879b07SJung-uk Kim 
3315ff879b07SJung-uk Kim 
3316ff879b07SJung-uk Kim /* 0: Processor Hierarchy Node Structure */
3317ff879b07SJung-uk Kim 
3318ff879b07SJung-uk Kim typedef struct acpi_pptt_processor
3319ff879b07SJung-uk Kim {
3320ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
3321ff879b07SJung-uk Kim     UINT16                  Reserved;
3322ff879b07SJung-uk Kim     UINT32                  Flags;
3323ff879b07SJung-uk Kim     UINT32                  Parent;
3324ff879b07SJung-uk Kim     UINT32                  AcpiProcessorId;
3325ff879b07SJung-uk Kim     UINT32                  NumberOfPrivResources;
3326ff879b07SJung-uk Kim 
3327ff879b07SJung-uk Kim } ACPI_PPTT_PROCESSOR;
3328ff879b07SJung-uk Kim 
3329ff879b07SJung-uk Kim /* Flags */
3330ff879b07SJung-uk Kim 
3331cd6518c7SJung-uk Kim #define ACPI_PPTT_PHYSICAL_PACKAGE          (1)
3332cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (1<<1)
3333cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD  (1<<2)  /* ACPI 6.3 */
3334cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_LEAF_NODE            (1<<3)  /* ACPI 6.3 */
3335cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_IDENTICAL            (1<<4)  /* ACPI 6.3 */
3336ff879b07SJung-uk Kim 
3337ff879b07SJung-uk Kim 
3338ff879b07SJung-uk Kim /* 1: Cache Type Structure */
3339ff879b07SJung-uk Kim 
3340ff879b07SJung-uk Kim typedef struct acpi_pptt_cache
3341ff879b07SJung-uk Kim {
3342ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
3343ff879b07SJung-uk Kim     UINT16                  Reserved;
3344ff879b07SJung-uk Kim     UINT32                  Flags;
3345ff879b07SJung-uk Kim     UINT32                  NextLevelOfCache;
3346ff879b07SJung-uk Kim     UINT32                  Size;
3347ff879b07SJung-uk Kim     UINT32                  NumberOfSets;
3348ff879b07SJung-uk Kim     UINT8                   Associativity;
3349ff879b07SJung-uk Kim     UINT8                   Attributes;
3350ff879b07SJung-uk Kim     UINT16                  LineSize;
3351ff879b07SJung-uk Kim 
3352ff879b07SJung-uk Kim } ACPI_PPTT_CACHE;
3353ff879b07SJung-uk Kim 
3354cfd1ed46SJung-uk Kim /* 1: Cache Type Structure for PPTT version 3 */
3355cfd1ed46SJung-uk Kim 
3356cfd1ed46SJung-uk Kim typedef struct acpi_pptt_cache_v1
3357cfd1ed46SJung-uk Kim {
3358cfd1ed46SJung-uk Kim     UINT32                  CacheId;
3359cfd1ed46SJung-uk Kim 
3360cfd1ed46SJung-uk Kim } ACPI_PPTT_CACHE_V1;
3361cfd1ed46SJung-uk Kim 
3362cfd1ed46SJung-uk Kim 
3363ff879b07SJung-uk Kim /* Flags */
3364ff879b07SJung-uk Kim 
3365ff879b07SJung-uk Kim #define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)     /* Physical property valid */
3366ff879b07SJung-uk Kim #define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)  /* Number of sets valid */
3367ff879b07SJung-uk Kim #define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)  /* Associativity valid */
3368ff879b07SJung-uk Kim #define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)  /* Allocation type valid */
3369ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)  /* Cache type valid */
3370ff879b07SJung-uk Kim #define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)  /* Write policy valid */
3371ff879b07SJung-uk Kim #define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)  /* Line size valid */
3372cfd1ed46SJung-uk Kim #define ACPI_PPTT_CACHE_ID_VALID            (1<<7)  /* Cache ID valid */
3373ff879b07SJung-uk Kim 
3374ff879b07SJung-uk Kim /* Masks for Attributes */
3375ff879b07SJung-uk Kim 
3376ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)  /* Allocation type */
3377ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)  /* Cache type */
3378ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)  /* Write policy */
3379ff879b07SJung-uk Kim 
3380ff879b07SJung-uk Kim /* Attributes describing cache */
3381ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)   /* Cache line is allocated on read */
3382ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)  /* Cache line is allocated on write */
3383ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)  /* Cache line is allocated on read and write */
3384ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)  /* Alternate representation of above */
3385ff879b07SJung-uk Kim 
3386ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)   /* Data cache */
3387ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)  /* Instruction cache */
3388ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)  /* Unified I & D cache */
3389ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)  /* Alternate representation of above */
3390ff879b07SJung-uk Kim 
3391ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WB           (0x0)   /* Cache is write back */
3392ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)  /* Cache is write through */
3393ff879b07SJung-uk Kim 
3394ff879b07SJung-uk Kim /* 2: ID Structure */
3395ff879b07SJung-uk Kim 
3396ff879b07SJung-uk Kim typedef struct acpi_pptt_id
3397ff879b07SJung-uk Kim {
3398ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
3399ff879b07SJung-uk Kim     UINT16                  Reserved;
3400ff879b07SJung-uk Kim     UINT32                  VendorId;
3401ff879b07SJung-uk Kim     UINT64                  Level1Id;
3402ff879b07SJung-uk Kim     UINT64                  Level2Id;
3403ff879b07SJung-uk Kim     UINT16                  MajorRev;
3404ff879b07SJung-uk Kim     UINT16                  MinorRev;
3405ff879b07SJung-uk Kim     UINT16                  SpinRev;
3406ff879b07SJung-uk Kim 
3407ff879b07SJung-uk Kim } ACPI_PPTT_ID;
3408ff879b07SJung-uk Kim 
3409ff879b07SJung-uk Kim 
3410ff879b07SJung-uk Kim /*******************************************************************************
3411ff879b07SJung-uk Kim  *
34121970d693SJung-uk Kim  * PRMT - Platform Runtime Mechanism Table
34131970d693SJung-uk Kim  *        Version 1
34141970d693SJung-uk Kim  *
34151970d693SJung-uk Kim  ******************************************************************************/
34161970d693SJung-uk Kim 
34171970d693SJung-uk Kim typedef struct acpi_table_prmt
34181970d693SJung-uk Kim {
34191970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
34201970d693SJung-uk Kim 
34211970d693SJung-uk Kim } ACPI_TABLE_PRMT;
34221970d693SJung-uk Kim 
34231970d693SJung-uk Kim typedef struct acpi_table_prmt_header
34241970d693SJung-uk Kim {
34251970d693SJung-uk Kim     UINT8                   PlatformGuid[16];
34261970d693SJung-uk Kim     UINT32                  ModuleInfoOffset;
34271970d693SJung-uk Kim     UINT32                  ModuleInfoCount;
34281970d693SJung-uk Kim 
34291970d693SJung-uk Kim } ACPI_TABLE_PRMT_HEADER;
34301970d693SJung-uk Kim 
343197c0b5abSJung-uk Kim typedef struct acpi_prmt_module_header
343297c0b5abSJung-uk Kim {
343397c0b5abSJung-uk Kim     UINT16                  Revision;
343497c0b5abSJung-uk Kim     UINT16                  Length;
343597c0b5abSJung-uk Kim 
343697c0b5abSJung-uk Kim } ACPI_PRMT_MODULE_HEADER;
343797c0b5abSJung-uk Kim 
34381970d693SJung-uk Kim typedef struct acpi_prmt_module_info
34391970d693SJung-uk Kim {
34401970d693SJung-uk Kim     UINT16                  Revision;
34411970d693SJung-uk Kim     UINT16                  Length;
34421970d693SJung-uk Kim     UINT8                   ModuleGuid[16];
34431970d693SJung-uk Kim     UINT16                  MajorRev;
34441970d693SJung-uk Kim     UINT16                  MinorRev;
34451970d693SJung-uk Kim     UINT16                  HandlerInfoCount;
34461970d693SJung-uk Kim     UINT32                  HandlerInfoOffset;
34471970d693SJung-uk Kim     UINT64                  MmioListPointer;
34481970d693SJung-uk Kim 
34491970d693SJung-uk Kim } ACPI_PRMT_MODULE_INFO;
34501970d693SJung-uk Kim 
34511970d693SJung-uk Kim typedef struct acpi_prmt_handler_info
34521970d693SJung-uk Kim {
34531970d693SJung-uk Kim     UINT16                  Revision;
34541970d693SJung-uk Kim     UINT16                  Length;
34551970d693SJung-uk Kim     UINT8                   HandlerGuid[16];
34561970d693SJung-uk Kim     UINT64                  HandlerAddress;
34571970d693SJung-uk Kim     UINT64                  StaticDataBufferAddress;
34581970d693SJung-uk Kim     UINT64                  AcpiParamBufferAddress;
34591970d693SJung-uk Kim 
34601970d693SJung-uk Kim } ACPI_PRMT_HANDLER_INFO;
34611970d693SJung-uk Kim 
34621970d693SJung-uk Kim 
34631970d693SJung-uk Kim /*******************************************************************************
34641970d693SJung-uk Kim  *
3465ff879b07SJung-uk Kim  * RASF - RAS Feature Table (ACPI 5.0)
3466ff879b07SJung-uk Kim  *        Version 1
3467ff879b07SJung-uk Kim  *
3468ff879b07SJung-uk Kim  ******************************************************************************/
3469ff879b07SJung-uk Kim 
3470ff879b07SJung-uk Kim typedef struct acpi_table_rasf
3471ff879b07SJung-uk Kim {
3472ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3473ff879b07SJung-uk Kim     UINT8                   ChannelId[12];
3474ff879b07SJung-uk Kim 
3475ff879b07SJung-uk Kim } ACPI_TABLE_RASF;
3476ff879b07SJung-uk Kim 
3477ff879b07SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */
3478ff879b07SJung-uk Kim 
3479ff879b07SJung-uk Kim typedef struct acpi_rasf_shared_memory
3480ff879b07SJung-uk Kim {
3481ff879b07SJung-uk Kim     UINT32                  Signature;
3482ff879b07SJung-uk Kim     UINT16                  Command;
3483ff879b07SJung-uk Kim     UINT16                  Status;
3484ff879b07SJung-uk Kim     UINT16                  Version;
3485ff879b07SJung-uk Kim     UINT8                   Capabilities[16];
3486ff879b07SJung-uk Kim     UINT8                   SetCapabilities[16];
3487ff879b07SJung-uk Kim     UINT16                  NumParameterBlocks;
3488ff879b07SJung-uk Kim     UINT32                  SetCapabilitiesStatus;
3489ff879b07SJung-uk Kim 
3490ff879b07SJung-uk Kim } ACPI_RASF_SHARED_MEMORY;
3491ff879b07SJung-uk Kim 
3492ff879b07SJung-uk Kim /* RASF Parameter Block Structure Header */
3493ff879b07SJung-uk Kim 
3494ff879b07SJung-uk Kim typedef struct acpi_rasf_parameter_block
3495ff879b07SJung-uk Kim {
3496ff879b07SJung-uk Kim     UINT16                  Type;
3497ff879b07SJung-uk Kim     UINT16                  Version;
3498ff879b07SJung-uk Kim     UINT16                  Length;
3499ff879b07SJung-uk Kim 
3500ff879b07SJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK;
3501ff879b07SJung-uk Kim 
3502ff879b07SJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */
3503ff879b07SJung-uk Kim 
3504ff879b07SJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter
3505ff879b07SJung-uk Kim {
3506ff879b07SJung-uk Kim     ACPI_RASF_PARAMETER_BLOCK   Header;
3507ff879b07SJung-uk Kim     UINT16                      PatrolScrubCommand;
3508ff879b07SJung-uk Kim     UINT64                      RequestedAddressRange[2];
3509ff879b07SJung-uk Kim     UINT64                      ActualAddressRange[2];
3510ff879b07SJung-uk Kim     UINT16                      Flags;
3511ff879b07SJung-uk Kim     UINT8                       RequestedSpeed;
3512ff879b07SJung-uk Kim 
3513ff879b07SJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER;
3514ff879b07SJung-uk Kim 
3515ff879b07SJung-uk Kim /* Masks for Flags and Speed fields above */
3516ff879b07SJung-uk Kim 
3517ff879b07SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING      1
3518ff879b07SJung-uk Kim #define ACPI_RASF_SPEED                 (7<<1)
3519ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_SLOW            (0<<1)
3520ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM          (4<<1)
3521ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_FAST            (7<<1)
3522ff879b07SJung-uk Kim 
3523ff879b07SJung-uk Kim /* Channel Commands */
3524ff879b07SJung-uk Kim 
3525ff879b07SJung-uk Kim enum AcpiRasfCommands
3526ff879b07SJung-uk Kim {
3527ff879b07SJung-uk Kim     ACPI_RASF_EXECUTE_RASF_COMMAND      = 1
3528ff879b07SJung-uk Kim };
3529ff879b07SJung-uk Kim 
3530ff879b07SJung-uk Kim /* Platform RAS Capabilities */
3531ff879b07SJung-uk Kim 
3532ff879b07SJung-uk Kim enum AcpiRasfCapabiliities
3533ff879b07SJung-uk Kim {
3534ff879b07SJung-uk Kim     ACPI_HW_PATROL_SCRUB_SUPPORTED      = 0,
3535ff879b07SJung-uk Kim     ACPI_SW_PATROL_SCRUB_EXPOSED        = 1
3536ff879b07SJung-uk Kim };
3537ff879b07SJung-uk Kim 
3538ff879b07SJung-uk Kim /* Patrol Scrub Commands */
3539ff879b07SJung-uk Kim 
3540ff879b07SJung-uk Kim enum AcpiRasfPatrolScrubCommands
3541ff879b07SJung-uk Kim {
3542ff879b07SJung-uk Kim     ACPI_RASF_GET_PATROL_PARAMETERS     = 1,
3543ff879b07SJung-uk Kim     ACPI_RASF_START_PATROL_SCRUBBER     = 2,
3544ff879b07SJung-uk Kim     ACPI_RASF_STOP_PATROL_SCRUBBER      = 3
3545ff879b07SJung-uk Kim };
3546ff879b07SJung-uk Kim 
3547ff879b07SJung-uk Kim /* Channel Command flags */
3548ff879b07SJung-uk Kim 
3549ff879b07SJung-uk Kim #define ACPI_RASF_GENERATE_SCI          (1<<15)
3550ff879b07SJung-uk Kim 
3551ff879b07SJung-uk Kim /* Status values */
3552ff879b07SJung-uk Kim 
3553ff879b07SJung-uk Kim enum AcpiRasfStatus
3554ff879b07SJung-uk Kim {
3555ff879b07SJung-uk Kim     ACPI_RASF_SUCCESS                   = 0,
3556ff879b07SJung-uk Kim     ACPI_RASF_NOT_VALID                 = 1,
3557ff879b07SJung-uk Kim     ACPI_RASF_NOT_SUPPORTED             = 2,
3558ff879b07SJung-uk Kim     ACPI_RASF_BUSY                      = 3,
3559ff879b07SJung-uk Kim     ACPI_RASF_FAILED                    = 4,
3560ff879b07SJung-uk Kim     ACPI_RASF_ABORTED                   = 5,
3561ff879b07SJung-uk Kim     ACPI_RASF_INVALID_DATA              = 6
3562ff879b07SJung-uk Kim };
3563ff879b07SJung-uk Kim 
3564ff879b07SJung-uk Kim /* Status flags */
3565ff879b07SJung-uk Kim 
3566ff879b07SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE      (1)
3567ff879b07SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL          (1<<1)
3568ff879b07SJung-uk Kim #define ACPI_RASF_ERROR                 (1<<2)
3569ff879b07SJung-uk Kim #define ACPI_RASF_STATUS                (0x1F<<3)
3570ff879b07SJung-uk Kim 
3571ff879b07SJung-uk Kim 
3572ff879b07SJung-uk Kim /*******************************************************************************
3573ff879b07SJung-uk Kim  *
3574804fe266SJung-uk Kim  * RAS2 - RAS2 Feature Table (ACPI 6.5)
3575804fe266SJung-uk Kim  *        Version 1
3576804fe266SJung-uk Kim  *
3577804fe266SJung-uk Kim  *
3578804fe266SJung-uk Kim  ******************************************************************************/
3579804fe266SJung-uk Kim 
3580804fe266SJung-uk Kim typedef struct acpi_table_ras2 {
3581804fe266SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3582804fe266SJung-uk Kim     UINT16                  Reserved;
3583804fe266SJung-uk Kim     UINT16                  NumPccDescs;
3584804fe266SJung-uk Kim 
3585804fe266SJung-uk Kim } ACPI_TABLE_RAS2;
3586804fe266SJung-uk Kim 
3587804fe266SJung-uk Kim /* RAS2 Platform Communication Channel Descriptor */
3588804fe266SJung-uk Kim 
3589804fe266SJung-uk Kim typedef struct acpi_ras2_pcc_desc {
3590804fe266SJung-uk Kim     UINT8                   ChannelId;
3591804fe266SJung-uk Kim     UINT16                  Reserved;
3592804fe266SJung-uk Kim     UINT8                   FeatureType;
3593804fe266SJung-uk Kim     UINT32                  Instance;
3594804fe266SJung-uk Kim 
3595804fe266SJung-uk Kim } ACPI_RAS2_PCC_DESC;
3596804fe266SJung-uk Kim 
3597804fe266SJung-uk Kim /* RAS2 Platform Communication Channel Shared Memory Region */
3598804fe266SJung-uk Kim 
3599*58308fadSJung-uk Kim typedef struct acpi_ras2_shmem {
3600804fe266SJung-uk Kim     UINT32                  Signature;
3601804fe266SJung-uk Kim     UINT16                  Command;
3602804fe266SJung-uk Kim     UINT16                  Status;
3603804fe266SJung-uk Kim     UINT16                  Version;
3604804fe266SJung-uk Kim     UINT8                   Features[16];
3605*58308fadSJung-uk Kim     UINT8                   SetCaps[16];
3606*58308fadSJung-uk Kim     UINT16                  NumParamBlks;
3607*58308fadSJung-uk Kim     UINT32                  SetCapsStatus;
3608804fe266SJung-uk Kim 
3609*58308fadSJung-uk Kim } ACPI_RAS2_SHMEM;
3610804fe266SJung-uk Kim 
3611804fe266SJung-uk Kim /* RAS2 Parameter Block Structure for PATROL_SCRUB */
3612804fe266SJung-uk Kim 
3613804fe266SJung-uk Kim typedef struct acpi_ras2_parameter_block
3614804fe266SJung-uk Kim {
3615804fe266SJung-uk Kim     UINT16                  Type;
3616804fe266SJung-uk Kim     UINT16                  Version;
3617804fe266SJung-uk Kim     UINT16                  Length;
3618804fe266SJung-uk Kim 
3619804fe266SJung-uk Kim } ACPI_RAS2_PARAMETER_BLOCK;
3620804fe266SJung-uk Kim 
3621804fe266SJung-uk Kim /* RAS2 Parameter Block Structure for PATROL_SCRUB */
3622804fe266SJung-uk Kim 
3623*58308fadSJung-uk Kim typedef struct acpi_ras2_patrol_scrub_param {
3624804fe266SJung-uk Kim     ACPI_RAS2_PARAMETER_BLOCK   Header;
3625*58308fadSJung-uk Kim     UINT16                      Command;
3626*58308fadSJung-uk Kim     UINT64                      ReqAddrRange[2];
3627*58308fadSJung-uk Kim     UINT64                      ActlAddrRange[2];
3628804fe266SJung-uk Kim     UINT32                      Flags;
3629804fe266SJung-uk Kim     UINT32                      ScrubParamsOut;
3630804fe266SJung-uk Kim     UINT32                      ScrubParamsIn;
3631804fe266SJung-uk Kim 
3632*58308fadSJung-uk Kim } ACPI_RAS2_PATROL_SCRUB_PARAM;
3633804fe266SJung-uk Kim 
3634804fe266SJung-uk Kim /* Masks for Flags field above */
3635804fe266SJung-uk Kim 
3636804fe266SJung-uk Kim #define ACPI_RAS2_SCRUBBER_RUNNING      1
3637804fe266SJung-uk Kim 
3638804fe266SJung-uk Kim /* RAS2 Parameter Block Structure for LA2PA_TRANSLATION */
3639804fe266SJung-uk Kim 
3640804fe266SJung-uk Kim typedef struct acpi_ras2_la2pa_translation_parameter {
3641804fe266SJung-uk Kim     ACPI_RAS2_PARAMETER_BLOCK   Header;
3642804fe266SJung-uk Kim     UINT16                      AddrTranslationCommand;
3643804fe266SJung-uk Kim     UINT64                      SubInstId;
3644804fe266SJung-uk Kim     UINT64                      LogicalAddress;
3645804fe266SJung-uk Kim     UINT64                      PhysicalAddress;
3646804fe266SJung-uk Kim     UINT32                      Status;
3647804fe266SJung-uk Kim 
3648804fe266SJung-uk Kim } ACPI_RAS2_LA2PA_TRANSLATION_PARAM;
3649804fe266SJung-uk Kim 
3650804fe266SJung-uk Kim /* Channel Commands */
3651804fe266SJung-uk Kim 
3652804fe266SJung-uk Kim enum AcpiRas2Commands
3653804fe266SJung-uk Kim {
3654804fe266SJung-uk Kim     ACPI_RAS2_EXECUTE_RAS2_COMMAND      = 1
3655804fe266SJung-uk Kim };
3656804fe266SJung-uk Kim 
3657804fe266SJung-uk Kim /* Platform RAS2 Features */
3658804fe266SJung-uk Kim 
3659804fe266SJung-uk Kim enum AcpiRas2Features
3660804fe266SJung-uk Kim {
3661804fe266SJung-uk Kim     ACPI_RAS2_PATROL_SCRUB_SUPPORTED    = 0,
3662804fe266SJung-uk Kim     ACPI_RAS2_LA2PA_TRANSLATION         = 1
3663804fe266SJung-uk Kim };
3664804fe266SJung-uk Kim 
3665804fe266SJung-uk Kim /* RAS2 Patrol Scrub Commands */
3666804fe266SJung-uk Kim 
3667804fe266SJung-uk Kim enum AcpiRas2PatrolScrubCommands
3668804fe266SJung-uk Kim {
3669804fe266SJung-uk Kim     ACPI_RAS2_GET_PATROL_PARAMETERS     = 1,
3670804fe266SJung-uk Kim     ACPI_RAS2_START_PATROL_SCRUBBER     = 2,
3671804fe266SJung-uk Kim     ACPI_RAS2_STOP_PATROL_SCRUBBER      = 3
3672804fe266SJung-uk Kim };
3673804fe266SJung-uk Kim 
3674804fe266SJung-uk Kim /* RAS2 LA2PA Translation Commands */
3675804fe266SJung-uk Kim 
3676804fe266SJung-uk Kim enum AcpiRas2La2PaTranslationCommands
3677804fe266SJung-uk Kim {
3678804fe266SJung-uk Kim     ACPI_RAS2_GET_LA2PA_TRANSLATION     = 1,
3679804fe266SJung-uk Kim };
3680804fe266SJung-uk Kim 
3681804fe266SJung-uk Kim /* RAS2 LA2PA Translation Status values */
3682804fe266SJung-uk Kim 
3683804fe266SJung-uk Kim enum AcpiRas2La2PaTranslationStatus
3684804fe266SJung-uk Kim {
3685804fe266SJung-uk Kim     ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,
3686804fe266SJung-uk Kim     ACPI_RAS2_LA2PA_TRANSLATION_FAIL    = 1,
3687804fe266SJung-uk Kim };
3688804fe266SJung-uk Kim 
3689804fe266SJung-uk Kim /* Channel Command flags */
3690804fe266SJung-uk Kim 
3691804fe266SJung-uk Kim #define ACPI_RAS2_GENERATE_SCI          (1<<15)
3692804fe266SJung-uk Kim 
3693804fe266SJung-uk Kim /* Status values */
3694804fe266SJung-uk Kim 
3695804fe266SJung-uk Kim enum AcpiRas2Status
3696804fe266SJung-uk Kim {
3697804fe266SJung-uk Kim     ACPI_RAS2_SUCCESS                   = 0,
3698804fe266SJung-uk Kim     ACPI_RAS2_NOT_VALID                 = 1,
3699804fe266SJung-uk Kim     ACPI_RAS2_NOT_SUPPORTED             = 2,
3700804fe266SJung-uk Kim     ACPI_RAS2_BUSY                      = 3,
3701804fe266SJung-uk Kim     ACPI_RAS2_FAILED                    = 4,
3702804fe266SJung-uk Kim     ACPI_RAS2_ABORTED                   = 5,
3703804fe266SJung-uk Kim     ACPI_RAS2_INVALID_DATA              = 6
3704804fe266SJung-uk Kim };
3705804fe266SJung-uk Kim 
3706804fe266SJung-uk Kim /* Status flags */
3707804fe266SJung-uk Kim 
3708804fe266SJung-uk Kim #define ACPI_RAS2_COMMAND_COMPLETE      (1)
3709804fe266SJung-uk Kim #define ACPI_RAS2_SCI_DOORBELL          (1<<1)
3710804fe266SJung-uk Kim #define ACPI_RAS2_ERROR                 (1<<2)
3711804fe266SJung-uk Kim #define ACPI_RAS2_STATUS                (0x1F<<3)
3712804fe266SJung-uk Kim 
3713804fe266SJung-uk Kim 
3714804fe266SJung-uk Kim /*******************************************************************************
3715804fe266SJung-uk Kim  *
37161970d693SJung-uk Kim  * RGRT - Regulatory Graphics Resource Table
37171970d693SJung-uk Kim  *        Version 1
37181970d693SJung-uk Kim  *
37191970d693SJung-uk Kim  * Conforms to "ACPI RGRT" available at:
37201970d693SJung-uk Kim  * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/
37211970d693SJung-uk Kim  *
37221970d693SJung-uk Kim  ******************************************************************************/
37231970d693SJung-uk Kim 
37241970d693SJung-uk Kim typedef struct acpi_table_rgrt
37251970d693SJung-uk Kim {
37261970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
37271970d693SJung-uk Kim     UINT16                  Version;
37281970d693SJung-uk Kim     UINT8                   ImageType;
37291970d693SJung-uk Kim     UINT8                   Reserved;
3730ab71bbb7SJung-uk Kim     UINT8                   Image[];
37311970d693SJung-uk Kim 
37321970d693SJung-uk Kim } ACPI_TABLE_RGRT;
37331970d693SJung-uk Kim 
37341970d693SJung-uk Kim /* ImageType values */
37351970d693SJung-uk Kim 
37361970d693SJung-uk Kim enum AcpiRgrtImageType
37371970d693SJung-uk Kim {
37381970d693SJung-uk Kim     ACPI_RGRT_TYPE_RESERVED0            = 0,
37391970d693SJung-uk Kim     ACPI_RGRT_IMAGE_TYPE_PNG            = 1,
37401970d693SJung-uk Kim     ACPI_RGRT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
37411970d693SJung-uk Kim };
37421970d693SJung-uk Kim 
37431970d693SJung-uk Kim 
37441970d693SJung-uk Kim /*******************************************************************************
37451970d693SJung-uk Kim  *
3746722b1667SJung-uk Kim  * RHCT - RISC-V Hart Capabilities Table
3747722b1667SJung-uk Kim  *        Version 1
3748722b1667SJung-uk Kim  *
3749722b1667SJung-uk Kim  ******************************************************************************/
3750722b1667SJung-uk Kim 
3751722b1667SJung-uk Kim typedef struct acpi_table_rhct {
3752722b1667SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
375307c64d74SJung-uk Kim     UINT32                  Flags;              /* RHCT flags */
3754722b1667SJung-uk Kim     UINT64                  TimeBaseFreq;
3755722b1667SJung-uk Kim     UINT32                  NodeCount;
3756722b1667SJung-uk Kim     UINT32                  NodeOffset;
3757722b1667SJung-uk Kim } ACPI_TABLE_RHCT;
3758722b1667SJung-uk Kim 
375907c64d74SJung-uk Kim /* RHCT Flags */
376007c64d74SJung-uk Kim 
376107c64d74SJung-uk Kim #define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU       (1)
3762722b1667SJung-uk Kim /*
3763722b1667SJung-uk Kim  * RHCT subtables
3764722b1667SJung-uk Kim  */
3765722b1667SJung-uk Kim typedef struct acpi_rhct_node_header {
3766722b1667SJung-uk Kim     UINT16                  Type;
3767722b1667SJung-uk Kim     UINT16                  Length;
3768722b1667SJung-uk Kim     UINT16                  Revision;
3769722b1667SJung-uk Kim } ACPI_RHCT_NODE_HEADER;
3770722b1667SJung-uk Kim 
3771722b1667SJung-uk Kim /* Values for RHCT subtable Type above */
3772722b1667SJung-uk Kim 
3773722b1667SJung-uk Kim enum acpi_rhct_node_type {
3774722b1667SJung-uk Kim     ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,
377507c64d74SJung-uk Kim     ACPI_RHCT_NODE_TYPE_CMO        = 0x0001,
377607c64d74SJung-uk Kim     ACPI_RHCT_NODE_TYPE_MMU        = 0x0002,
377707c64d74SJung-uk Kim     ACPI_RHCT_NODE_TYPE_RESERVED   = 0x0003,
3778722b1667SJung-uk Kim     ACPI_RHCT_NODE_TYPE_HART_INFO  = 0xFFFF,
3779722b1667SJung-uk Kim };
3780722b1667SJung-uk Kim 
3781722b1667SJung-uk Kim /*
3782722b1667SJung-uk Kim  * RHCT node specific subtables
3783722b1667SJung-uk Kim  */
3784722b1667SJung-uk Kim 
3785722b1667SJung-uk Kim /* ISA string node structure */
3786722b1667SJung-uk Kim typedef struct acpi_rhct_isa_string {
3787722b1667SJung-uk Kim     UINT16                  IsaLength;
3788722b1667SJung-uk Kim     char                    Isa[];
3789722b1667SJung-uk Kim } ACPI_RHCT_ISA_STRING;
3790722b1667SJung-uk Kim 
379107c64d74SJung-uk Kim typedef struct acpi_rhct_cmo_node {
379207c64d74SJung-uk Kim     UINT8                  Reserved;           /* Must be zero */
379307c64d74SJung-uk Kim     UINT8                  CbomSize;           /* CBOM size in powerof 2 */
379407c64d74SJung-uk Kim     UINT8                  CbopSize;           /* CBOP size in powerof 2 */
379507c64d74SJung-uk Kim     UINT8                  CbozSize;           /* CBOZ size in powerof 2 */
379607c64d74SJung-uk Kim } ACPI_RHCT_CMO_NODE;
379707c64d74SJung-uk Kim 
379807c64d74SJung-uk Kim typedef struct acpi_rhct_mmu_node {
379907c64d74SJung-uk Kim     UINT8                   Reserved;          /* Must be zero */
380007c64d74SJung-uk Kim     UINT8                   MmuType;           /* Virtual Address Scheme */
380107c64d74SJung-uk Kim } ACPI_RHCT_MMU_NODE;
380207c64d74SJung-uk Kim 
380307c64d74SJung-uk Kim enum acpi_rhct_mmu_type {
380407c64d74SJung-uk Kim     ACPI_RHCT_MMU_TYPE_SV39 = 0,
380507c64d74SJung-uk Kim     ACPI_RHCT_MMU_TYPE_SV48 = 1,
380607c64d74SJung-uk Kim     ACPI_RHCT_MMU_TYPE_SV57 = 2
380707c64d74SJung-uk Kim };
380807c64d74SJung-uk Kim 
3809722b1667SJung-uk Kim /* Hart Info node structure */
3810722b1667SJung-uk Kim typedef struct acpi_rhct_hart_info {
3811722b1667SJung-uk Kim     UINT16                  NumOffsets;
3812722b1667SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
3813722b1667SJung-uk Kim } ACPI_RHCT_HART_INFO;
3814722b1667SJung-uk Kim 
3815722b1667SJung-uk Kim /*******************************************************************************
3816722b1667SJung-uk Kim  *
3817*58308fadSJung-uk Kim  * RIMT - RISC-V IO Remapping Table
3818*58308fadSJung-uk Kim  *
3819*58308fadSJung-uk Kim  * https://github.com/riscv-non-isa/riscv-acpi-rimt
3820*58308fadSJung-uk Kim  *
3821*58308fadSJung-uk Kim  ******************************************************************************/
3822*58308fadSJung-uk Kim 
3823*58308fadSJung-uk Kim typedef struct acpi_table_rimt {
3824*58308fadSJung-uk Kim     ACPI_TABLE_HEADER Header;              /* Common ACPI table header */
3825*58308fadSJung-uk Kim     UINT32            NumNodes;            /* Number of RIMT Nodes */
3826*58308fadSJung-uk Kim     UINT32            NodeOffset;          /* Offset to RIMT Node Array */
3827*58308fadSJung-uk Kim     UINT32            Reserved;
3828*58308fadSJung-uk Kim } ACPI_TABLE_RIMT;
3829*58308fadSJung-uk Kim 
3830*58308fadSJung-uk Kim typedef struct acpi_rimt_node {
3831*58308fadSJung-uk Kim     UINT8             Type;
3832*58308fadSJung-uk Kim     UINT8             Revision;
3833*58308fadSJung-uk Kim     UINT16            Length;
3834*58308fadSJung-uk Kim     UINT16            Reserved;
3835*58308fadSJung-uk Kim     UINT16            Id;
3836*58308fadSJung-uk Kim     char              NodeData[];
3837*58308fadSJung-uk Kim } ACPI_RIMT_NODE;
3838*58308fadSJung-uk Kim 
3839*58308fadSJung-uk Kim enum acpi_rimt_node_type {
3840*58308fadSJung-uk Kim     ACPI_RIMT_NODE_TYPE_IOMMU             = 0x0,
3841*58308fadSJung-uk Kim     ACPI_RIMT_NODE_TYPE_PCIE_ROOT_COMPLEX = 0x1,
3842*58308fadSJung-uk Kim     ACPI_RIMT_NODE_TYPE_PLAT_DEVICE       = 0x2,
3843*58308fadSJung-uk Kim };
3844*58308fadSJung-uk Kim 
3845*58308fadSJung-uk Kim typedef struct acpi_rimt_iommu {
3846*58308fadSJung-uk Kim     UINT8             HardwareId[8];       /* Hardware ID */
3847*58308fadSJung-uk Kim     UINT64            BaseAddress;         /* Base Address */
3848*58308fadSJung-uk Kim     UINT32            Flags;               /* Flags */
3849*58308fadSJung-uk Kim     UINT32            ProximityDomain;     /* Proximity Domain */
3850*58308fadSJung-uk Kim     UINT16            PcieSegmentNumber;   /* PCIe Segment number */
3851*58308fadSJung-uk Kim     UINT16            PcieBdf;             /* PCIe B/D/F */
3852*58308fadSJung-uk Kim     UINT16            NumInterruptWires;   /* Number of interrupt wires */
3853*58308fadSJung-uk Kim     UINT16            InterruptWireOffset; /* Interrupt wire array offset */
3854*58308fadSJung-uk Kim     UINT64            InterruptWire[];     /* Interrupt wire array */
3855*58308fadSJung-uk Kim } ACPI_RIMT_IOMMU;
3856*58308fadSJung-uk Kim 
3857*58308fadSJung-uk Kim /* IOMMU Node Flags */
3858*58308fadSJung-uk Kim #define ACPI_RIMT_IOMMU_FLAGS_PCIE      (1)
3859*58308fadSJung-uk Kim #define ACPI_RIMT_IOMMU_FLAGS_PXM_VALID (1 << 1)
3860*58308fadSJung-uk Kim 
3861*58308fadSJung-uk Kim /* Interrupt Wire Structure */
3862*58308fadSJung-uk Kim typedef struct acpi_rimt_iommu_wire_gsi {
3863*58308fadSJung-uk Kim     UINT32             IrqNum;             /* Interrupt Number */
3864*58308fadSJung-uk Kim     UINT32             Flags;              /* Flags */
3865*58308fadSJung-uk Kim } ACPI_RIMT_IOMMU_WIRE_GSI;
3866*58308fadSJung-uk Kim 
3867*58308fadSJung-uk Kim /* Interrupt Wire Flags */
3868*58308fadSJung-uk Kim #define ACPI_RIMT_GSI_LEVEL_TRIGGERRED  (1)
3869*58308fadSJung-uk Kim #define ACPI_RIMT_GSI_ACTIVE_HIGH       (1 << 1)
3870*58308fadSJung-uk Kim 
3871*58308fadSJung-uk Kim typedef struct acpi_rimt_id_mapping {
3872*58308fadSJung-uk Kim     UINT32              SourceIdBase;      /* Source ID Base */
3873*58308fadSJung-uk Kim     UINT32              NumIds;            /* Number of IDs */
3874*58308fadSJung-uk Kim     UINT32              DestIdBase;        /* Destination Device ID Base */
3875*58308fadSJung-uk Kim     UINT32              DestOffset;        /* Destination IOMMU Offset */
3876*58308fadSJung-uk Kim     UINT32              Flags;             /* Flags */
3877*58308fadSJung-uk Kim } ACPI_RIMT_ID_MAPPING;
3878*58308fadSJung-uk Kim 
3879*58308fadSJung-uk Kim typedef struct acpi_rimt_pcie_rc {
3880*58308fadSJung-uk Kim     UINT32              Flags;             /* Flags */
3881*58308fadSJung-uk Kim     UINT16              Reserved;          /* Reserved */
3882*58308fadSJung-uk Kim     UINT16              PcieSegmentNumber; /* PCIe Segment number */
3883*58308fadSJung-uk Kim     UINT16              IdMappingOffset;   /* ID mapping array offset */
3884*58308fadSJung-uk Kim     UINT16              NumIdMappings;     /* Number of ID mappings */
3885*58308fadSJung-uk Kim } ACPI_RIMT_PCIE_RC;
3886*58308fadSJung-uk Kim 
3887*58308fadSJung-uk Kim /* PCIe Root Complex Node Flags */
3888*58308fadSJung-uk Kim #define ACPI_RIMT_PCIE_ATS_SUPPORTED   (1)
3889*58308fadSJung-uk Kim #define ACPI_RIMT_PCIE_PRI_SUPPORTED   (1 << 1)
3890*58308fadSJung-uk Kim 
3891*58308fadSJung-uk Kim typedef struct acpi_rimt_platform_device {
3892*58308fadSJung-uk Kim     UINT16              IdMappingOffset;   /* ID Mapping array offset */
3893*58308fadSJung-uk Kim     UINT16              NumIdMappings;     /* Number of ID mappings */
3894*58308fadSJung-uk Kim     char                DeviceName[];      /* Device Object Name */
3895*58308fadSJung-uk Kim } ACPI_RIMT_PLATFORM_DEVICE;
3896*58308fadSJung-uk Kim 
3897*58308fadSJung-uk Kim 
3898*58308fadSJung-uk Kim /*******************************************************************************
3899*58308fadSJung-uk Kim  *
3900ff879b07SJung-uk Kim  * SBST - Smart Battery Specification Table
3901ff879b07SJung-uk Kim  *        Version 1
3902ff879b07SJung-uk Kim  *
3903ff879b07SJung-uk Kim  ******************************************************************************/
3904ff879b07SJung-uk Kim 
3905ff879b07SJung-uk Kim typedef struct acpi_table_sbst
3906ff879b07SJung-uk Kim {
3907ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3908ff879b07SJung-uk Kim     UINT32                  WarningLevel;
3909ff879b07SJung-uk Kim     UINT32                  LowLevel;
3910ff879b07SJung-uk Kim     UINT32                  CriticalLevel;
3911ff879b07SJung-uk Kim 
3912ff879b07SJung-uk Kim } ACPI_TABLE_SBST;
3913ff879b07SJung-uk Kim 
3914ff879b07SJung-uk Kim 
39155f9b24faSJung-uk Kim /*******************************************************************************
39165f9b24faSJung-uk Kim  *
39175f9b24faSJung-uk Kim  * SDEI - Software Delegated Exception Interface Descriptor Table
39185f9b24faSJung-uk Kim  *
39195f9b24faSJung-uk Kim  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
39205f9b24faSJung-uk Kim  * May 8th, 2017. Copyright 2017 ARM Ltd.
39215f9b24faSJung-uk Kim  *
39225f9b24faSJung-uk Kim  ******************************************************************************/
39235f9b24faSJung-uk Kim 
39245f9b24faSJung-uk Kim typedef struct acpi_table_sdei
39255f9b24faSJung-uk Kim {
39265f9b24faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
39275f9b24faSJung-uk Kim 
39285f9b24faSJung-uk Kim } ACPI_TABLE_SDEI;
39295f9b24faSJung-uk Kim 
39309c48c75eSJung-uk Kim 
39319c48c75eSJung-uk Kim /*******************************************************************************
39329c48c75eSJung-uk Kim  *
3933ff879b07SJung-uk Kim  * SDEV - Secure Devices Table (ACPI 6.2)
3934ff879b07SJung-uk Kim  *        Version 1
3935dcbce41eSJung-uk Kim  *
3936dcbce41eSJung-uk Kim  ******************************************************************************/
3937dcbce41eSJung-uk Kim 
3938ff879b07SJung-uk Kim typedef struct acpi_table_sdev
3939dcbce41eSJung-uk Kim {
3940dcbce41eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
3941dcbce41eSJung-uk Kim 
3942ff879b07SJung-uk Kim } ACPI_TABLE_SDEV;
3943dcbce41eSJung-uk Kim 
3944dcbce41eSJung-uk Kim 
3945ff879b07SJung-uk Kim typedef struct acpi_sdev_header
3946d6dd1baeSJung-uk Kim {
3947ff879b07SJung-uk Kim     UINT8                   Type;
3948ff879b07SJung-uk Kim     UINT8                   Flags;
3949ff879b07SJung-uk Kim     UINT16                  Length;
3950d6dd1baeSJung-uk Kim 
3951ff879b07SJung-uk Kim } ACPI_SDEV_HEADER;
3952f8146b88SJung-uk Kim 
3953d6dd1baeSJung-uk Kim 
3954ff879b07SJung-uk Kim /* Values for subtable type above */
3955d6dd1baeSJung-uk Kim 
3956ff879b07SJung-uk Kim enum AcpiSdevType
3957d6dd1baeSJung-uk Kim {
3958ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_NAMESPACE_DEVICE     = 0,
3959ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
3960ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
3961d6dd1baeSJung-uk Kim };
3962d6dd1baeSJung-uk Kim 
3963ff879b07SJung-uk Kim /* Values for flags above */
3964d6dd1baeSJung-uk Kim 
3965ff879b07SJung-uk Kim #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
3966cfd1ed46SJung-uk Kim #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)
3967fe0f0bbbSJung-uk Kim 
3968fe0f0bbbSJung-uk Kim /*
3969ff879b07SJung-uk Kim  * SDEV subtables
3970fe0f0bbbSJung-uk Kim  */
3971fe0f0bbbSJung-uk Kim 
3972ff879b07SJung-uk Kim /* 0: Namespace Device Based Secure Device Structure */
3973fe0f0bbbSJung-uk Kim 
3974ff879b07SJung-uk Kim typedef struct acpi_sdev_namespace
3975fe0f0bbbSJung-uk Kim {
3976ff879b07SJung-uk Kim     ACPI_SDEV_HEADER        Header;
3977ff879b07SJung-uk Kim     UINT16                  DeviceIdOffset;
3978ff879b07SJung-uk Kim     UINT16                  DeviceIdLength;
3979ff879b07SJung-uk Kim     UINT16                  VendorDataOffset;
3980ff879b07SJung-uk Kim     UINT16                  VendorDataLength;
3981d6dd1baeSJung-uk Kim 
3982ff879b07SJung-uk Kim } ACPI_SDEV_NAMESPACE;
39835ef50723SJung-uk Kim 
3984cfd1ed46SJung-uk Kim typedef struct acpi_sdev_secure_component
3985cfd1ed46SJung-uk Kim {
3986cfd1ed46SJung-uk Kim     UINT16                  SecureComponentOffset;
3987cfd1ed46SJung-uk Kim     UINT16                  SecureComponentLength;
3988cfd1ed46SJung-uk Kim 
3989cfd1ed46SJung-uk Kim } ACPI_SDEV_SECURE_COMPONENT;
3990cfd1ed46SJung-uk Kim 
3991cfd1ed46SJung-uk Kim 
3992cfd1ed46SJung-uk Kim /*
3993cfd1ed46SJung-uk Kim  * SDEV sub-subtables ("Components") for above
3994cfd1ed46SJung-uk Kim  */
3995cfd1ed46SJung-uk Kim typedef struct acpi_sdev_component
3996cfd1ed46SJung-uk Kim {
3997cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
3998cfd1ed46SJung-uk Kim 
3999cfd1ed46SJung-uk Kim } ACPI_SDEV_COMPONENT;
4000cfd1ed46SJung-uk Kim 
4001cfd1ed46SJung-uk Kim 
4002cfd1ed46SJung-uk Kim /* Values for sub-subtable type above */
4003cfd1ed46SJung-uk Kim 
4004cfd1ed46SJung-uk Kim enum AcpiSacType
4005cfd1ed46SJung-uk Kim {
4006cfd1ed46SJung-uk Kim     ACPI_SDEV_TYPE_ID_COMPONENT     = 0,
4007cfd1ed46SJung-uk Kim     ACPI_SDEV_TYPE_MEM_COMPONENT    = 1
4008cfd1ed46SJung-uk Kim };
4009cfd1ed46SJung-uk Kim 
4010cfd1ed46SJung-uk Kim typedef struct acpi_sdev_id_component
4011cfd1ed46SJung-uk Kim {
4012cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
4013cfd1ed46SJung-uk Kim     UINT16                  HardwareIdOffset;
4014cfd1ed46SJung-uk Kim     UINT16                  HardwareIdLength;
4015cfd1ed46SJung-uk Kim     UINT16                  SubsystemIdOffset;
4016cfd1ed46SJung-uk Kim     UINT16                  SubsystemIdLength;
4017cfd1ed46SJung-uk Kim     UINT16                  HardwareRevision;
4018cfd1ed46SJung-uk Kim     UINT8                   HardwareRevPresent;
4019cfd1ed46SJung-uk Kim     UINT8                   ClassCodePresent;
4020cfd1ed46SJung-uk Kim     UINT8                   PciBaseClass;
4021cfd1ed46SJung-uk Kim     UINT8                   PciSubClass;
4022cfd1ed46SJung-uk Kim     UINT8                   PciProgrammingXface;
4023cfd1ed46SJung-uk Kim 
4024cfd1ed46SJung-uk Kim } ACPI_SDEV_ID_COMPONENT;
4025cfd1ed46SJung-uk Kim 
4026cfd1ed46SJung-uk Kim typedef struct acpi_sdev_mem_component
4027cfd1ed46SJung-uk Kim {
4028cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
4029cfd1ed46SJung-uk Kim     UINT32                  Reserved;
4030cfd1ed46SJung-uk Kim     UINT64                  MemoryBaseAddress;
4031cfd1ed46SJung-uk Kim     UINT64                  MemoryLength;
4032cfd1ed46SJung-uk Kim 
4033cfd1ed46SJung-uk Kim } ACPI_SDEV_MEM_COMPONENT;
4034cfd1ed46SJung-uk Kim 
4035cfd1ed46SJung-uk Kim 
4036ff879b07SJung-uk Kim /* 1: PCIe Endpoint Device Based Device Structure */
4037ff879b07SJung-uk Kim 
4038ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie
40395ef50723SJung-uk Kim {
4040ff879b07SJung-uk Kim     ACPI_SDEV_HEADER        Header;
4041ff879b07SJung-uk Kim     UINT16                  Segment;
4042ff879b07SJung-uk Kim     UINT16                  StartBus;
4043ff879b07SJung-uk Kim     UINT16                  PathOffset;
4044ff879b07SJung-uk Kim     UINT16                  PathLength;
4045ff879b07SJung-uk Kim     UINT16                  VendorDataOffset;
4046ff879b07SJung-uk Kim     UINT16                  VendorDataLength;
4047ff879b07SJung-uk Kim 
4048ff879b07SJung-uk Kim } ACPI_SDEV_PCIE;
4049ff879b07SJung-uk Kim 
4050ff879b07SJung-uk Kim /* 1a: PCIe Endpoint path entry */
4051ff879b07SJung-uk Kim 
4052ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie_path
4053ff879b07SJung-uk Kim {
40545ef50723SJung-uk Kim     UINT8                   Device;
40555ef50723SJung-uk Kim     UINT8                   Function;
40565ef50723SJung-uk Kim 
4057ff879b07SJung-uk Kim } ACPI_SDEV_PCIE_PATH;
4058af051161SJung-uk Kim 
4059af051161SJung-uk Kim 
40601970d693SJung-uk Kim /*******************************************************************************
40611970d693SJung-uk Kim  *
40621970d693SJung-uk Kim  * SVKL - Storage Volume Key Location Table (ACPI 6.4)
40631970d693SJung-uk Kim  *        From: "Guest-Host-Communication Interface (GHCI) for Intel
40641970d693SJung-uk Kim  *        Trust Domain Extensions (Intel TDX)".
40651970d693SJung-uk Kim  *        Version 1
40661970d693SJung-uk Kim  *
40671970d693SJung-uk Kim  ******************************************************************************/
40681970d693SJung-uk Kim 
40691970d693SJung-uk Kim typedef struct acpi_table_svkl
40701970d693SJung-uk Kim {
40711970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
40721970d693SJung-uk Kim     UINT32                  Count;
40731970d693SJung-uk Kim 
40741970d693SJung-uk Kim } ACPI_TABLE_SVKL;
40751970d693SJung-uk Kim 
40761970d693SJung-uk Kim typedef struct acpi_svkl_key
40771970d693SJung-uk Kim {
40781970d693SJung-uk Kim     UINT16                  Type;
40791970d693SJung-uk Kim     UINT16                  Format;
40801970d693SJung-uk Kim     UINT32                  Size;
40811970d693SJung-uk Kim     UINT64                  Address;
40821970d693SJung-uk Kim 
40831970d693SJung-uk Kim } ACPI_SVKL_KEY;
40841970d693SJung-uk Kim 
40851970d693SJung-uk Kim enum acpi_svkl_type
40861970d693SJung-uk Kim {
40871970d693SJung-uk Kim     ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
40881970d693SJung-uk Kim     ACPI_SVKL_TYPE_RESERVED     = 1 /* 1 and greater are reserved */
40891970d693SJung-uk Kim };
40901970d693SJung-uk Kim 
40911970d693SJung-uk Kim enum acpi_svkl_format
40921970d693SJung-uk Kim {
40931970d693SJung-uk Kim     ACPI_SVKL_FORMAT_RAW_BINARY = 0,
40941970d693SJung-uk Kim     ACPI_SVKL_FORMAT_RESERVED   = 1 /* 1 and greater are reserved */
40951970d693SJung-uk Kim };
40961970d693SJung-uk Kim 
40971970d693SJung-uk Kim 
4098ab71bbb7SJung-uk Kim /*******************************************************************************
4099ab71bbb7SJung-uk Kim  *
4100ab71bbb7SJung-uk Kim  * TDEL - TD-Event Log
4101ab71bbb7SJung-uk Kim  *        From: "Guest-Host-Communication Interface (GHCI) for Intel
4102ab71bbb7SJung-uk Kim  *        Trust Domain Extensions (Intel TDX)".
4103ab71bbb7SJung-uk Kim  *        September 2020
4104ab71bbb7SJung-uk Kim  *
4105ab71bbb7SJung-uk Kim  ******************************************************************************/
4106ab71bbb7SJung-uk Kim 
4107ab71bbb7SJung-uk Kim typedef struct acpi_table_tdel
4108ab71bbb7SJung-uk Kim {
4109ab71bbb7SJung-uk Kim     ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
4110ab71bbb7SJung-uk Kim     UINT32                  Reserved;
4111ab71bbb7SJung-uk Kim     UINT64                  LogAreaMinimumLength;
4112ab71bbb7SJung-uk Kim     UINT64                  LogAreaStartAddress;
4113ab71bbb7SJung-uk Kim 
4114ab71bbb7SJung-uk Kim } ACPI_TABLE_TDEL;
4115ab71bbb7SJung-uk Kim 
4116d6dd1baeSJung-uk Kim /* Reset to default packing */
4117d6dd1baeSJung-uk Kim 
4118d6dd1baeSJung-uk Kim #pragma pack()
4119d6dd1baeSJung-uk Kim 
4120d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */
4121