1d6dd1baeSJung-uk Kim /****************************************************************************** 2d6dd1baeSJung-uk Kim * 3dcbce41eSJung-uk Kim * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) 4d6dd1baeSJung-uk Kim * 5d6dd1baeSJung-uk Kim *****************************************************************************/ 6d6dd1baeSJung-uk Kim 70d84335fSJung-uk Kim /****************************************************************************** 80d84335fSJung-uk Kim * 90d84335fSJung-uk Kim * 1. Copyright Notice 100d84335fSJung-uk Kim * 11722b1667SJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2023, Intel Corp. 12d6dd1baeSJung-uk Kim * All rights reserved. 13d6dd1baeSJung-uk Kim * 140d84335fSJung-uk Kim * 2. License 150d84335fSJung-uk Kim * 160d84335fSJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property 170d84335fSJung-uk Kim * rights. You may have additional license terms from the party that provided 180d84335fSJung-uk Kim * you this software, covering your right to use that party's intellectual 190d84335fSJung-uk Kim * property rights. 200d84335fSJung-uk Kim * 210d84335fSJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 220d84335fSJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an 230d84335fSJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 240d84335fSJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy, 250d84335fSJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered 260d84335fSJung-uk Kim * Code in any form, with the right to sublicense such rights; and 270d84335fSJung-uk Kim * 280d84335fSJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 290d84335fSJung-uk Kim * license (with the right to sublicense), under only those claims of Intel 300d84335fSJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell, 310d84335fSJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof 320d84335fSJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright 330d84335fSJung-uk Kim * license, and in no event shall the patent license extend to any additions 340d84335fSJung-uk Kim * to or modifications of the Original Intel Code. No other license or right 350d84335fSJung-uk Kim * is granted directly or by implication, estoppel or otherwise; 360d84335fSJung-uk Kim * 370d84335fSJung-uk Kim * The above copyright and patent license is granted only if the following 380d84335fSJung-uk Kim * conditions are met: 390d84335fSJung-uk Kim * 400d84335fSJung-uk Kim * 3. Conditions 410d84335fSJung-uk Kim * 420d84335fSJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 430d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 440d84335fSJung-uk Kim * Code or modification with rights to further distribute source must include 450d84335fSJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions, 460d84335fSJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition, 470d84335fSJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to 480d84335fSJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered 490d84335fSJung-uk Kim * Code and the date of any change. Licensee must include in that file the 500d84335fSJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee 510d84335fSJung-uk Kim * must include a prominent statement that the modification is derived, 520d84335fSJung-uk Kim * directly or indirectly, from Original Intel Code. 530d84335fSJung-uk Kim * 540d84335fSJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 550d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 560d84335fSJung-uk Kim * Code or modification without rights to further distribute source must 570d84335fSJung-uk Kim * include the following Disclaimer and Export Compliance provision in the 580d84335fSJung-uk Kim * documentation and/or other materials provided with distribution. In 590d84335fSJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any 600d84335fSJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the 610d84335fSJung-uk Kim * license from Licensee to its licensee is limited to the intellectual 620d84335fSJung-uk Kim * property embodied in the software Licensee provides to its licensee, and 630d84335fSJung-uk Kim * not to intellectual property embodied in modifications its licensee may 640d84335fSJung-uk Kim * make. 650d84335fSJung-uk Kim * 660d84335fSJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any 670d84335fSJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the 680d84335fSJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance 690d84335fSJung-uk Kim * provision in the documentation and/or other materials provided with the 700d84335fSJung-uk Kim * distribution. 710d84335fSJung-uk Kim * 720d84335fSJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original 730d84335fSJung-uk Kim * Intel Code. 740d84335fSJung-uk Kim * 750d84335fSJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 760d84335fSJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or 770d84335fSJung-uk Kim * other dealings in products derived from or relating to the Covered Code 780d84335fSJung-uk Kim * without prior written authorization from Intel. 790d84335fSJung-uk Kim * 800d84335fSJung-uk Kim * 4. Disclaimer and Export Compliance 810d84335fSJung-uk Kim * 820d84335fSJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 830d84335fSJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 840d84335fSJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 850d84335fSJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 860d84335fSJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 870d84335fSJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 880d84335fSJung-uk Kim * PARTICULAR PURPOSE. 890d84335fSJung-uk Kim * 900d84335fSJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 910d84335fSJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 920d84335fSJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 930d84335fSJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 940d84335fSJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 950d84335fSJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 960d84335fSJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 970d84335fSJung-uk Kim * LIMITED REMEDY. 980d84335fSJung-uk Kim * 990d84335fSJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this 1000d84335fSJung-uk Kim * software or system incorporating such software without first obtaining any 1010d84335fSJung-uk Kim * required license or other approval from the U. S. Department of Commerce or 1020d84335fSJung-uk Kim * any other agency or department of the United States Government. In the 1030d84335fSJung-uk Kim * event Licensee exports any such software from the United States or 1040d84335fSJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall 1050d84335fSJung-uk Kim * ensure that the distribution and export/re-export of the software is in 1060d84335fSJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the 1070d84335fSJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 1080d84335fSJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process, 1090d84335fSJung-uk Kim * software, or service, directly or indirectly, to any country for which the 1100d84335fSJung-uk Kim * United States government or any agency thereof requires an export license, 1110d84335fSJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining 1120d84335fSJung-uk Kim * such license, approval or letter. 1130d84335fSJung-uk Kim * 1140d84335fSJung-uk Kim ***************************************************************************** 1150d84335fSJung-uk Kim * 1160d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 1170d84335fSJung-uk Kim * following license: 1180d84335fSJung-uk Kim * 119d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 120d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 121d244b227SJung-uk Kim * are met: 122d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 123d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 124d244b227SJung-uk Kim * without modification. 125d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 126d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 127d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 128d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 129d244b227SJung-uk Kim * binary redistribution. 130d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 131d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 132d244b227SJung-uk Kim * from this software without specific prior written permission. 133d6dd1baeSJung-uk Kim * 1340d84335fSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1350d84335fSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1360d84335fSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1370d84335fSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1380d84335fSJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1390d84335fSJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1400d84335fSJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1410d84335fSJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1420d84335fSJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1430d84335fSJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1440d84335fSJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1450d84335fSJung-uk Kim * 1460d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 147d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 148d244b227SJung-uk Kim * Software Foundation. 149d6dd1baeSJung-uk Kim * 1500d84335fSJung-uk Kim *****************************************************************************/ 151d6dd1baeSJung-uk Kim 152d6dd1baeSJung-uk Kim #ifndef __ACTBL2_H__ 153d6dd1baeSJung-uk Kim #define __ACTBL2_H__ 154d6dd1baeSJung-uk Kim 155d6dd1baeSJung-uk Kim 156d6dd1baeSJung-uk Kim /******************************************************************************* 157d6dd1baeSJung-uk Kim * 158d6dd1baeSJung-uk Kim * Additional ACPI Tables (2) 159d6dd1baeSJung-uk Kim * 160d6dd1baeSJung-uk Kim * These tables are not consumed directly by the ACPICA subsystem, but are 161d6dd1baeSJung-uk Kim * included here to support device drivers and the AML disassembler. 162d6dd1baeSJung-uk Kim * 163d6dd1baeSJung-uk Kim ******************************************************************************/ 164d6dd1baeSJung-uk Kim 165d6dd1baeSJung-uk Kim 166d6dd1baeSJung-uk Kim /* 167d6dd1baeSJung-uk Kim * Values for description table header signatures for tables defined in this 168d6dd1baeSJung-uk Kim * file. Useful because they make it more difficult to inadvertently type in 169d6dd1baeSJung-uk Kim * the wrong signature. 170d6dd1baeSJung-uk Kim */ 171ab71bbb7SJung-uk Kim #define ACPI_SIG_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */ 172ab71bbb7SJung-uk Kim #define ACPI_SIG_APMT "APMT" /* Arm Performance Monitoring Unit table */ 1731970d693SJung-uk Kim #define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */ 1749a4bc520SJung-uk Kim #define ACPI_SIG_CCEL "CCEL" /* CC Event Log Table */ 1759a4bc520SJung-uk Kim #define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */ 176a371a5fdSJung-uk Kim #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 177d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 178313a0c13SJung-uk Kim #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 179ff879b07SJung-uk Kim #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 180d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 181ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 182722b1667SJung-uk Kim #define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */ 183ff879b07SJung-uk Kim #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 1847cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 185ff879b07SJung-uk Kim #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 1861b7a2680SJung-uk Kim #define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ 187ff879b07SJung-uk Kim #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 188ff879b07SJung-uk Kim #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ 189cfd1ed46SJung-uk Kim #define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ 190ff879b07SJung-uk Kim #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 191ff879b07SJung-uk Kim #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 1921970d693SJung-uk Kim #define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */ 193ff879b07SJung-uk Kim #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 1941970d693SJung-uk Kim #define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */ 195722b1667SJung-uk Kim #define ACPI_SIG_RHCT "RHCT" /* RISC-V Hart Capabilities Table */ 196ff879b07SJung-uk Kim #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 1975f9b24faSJung-uk Kim #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ 198ff879b07SJung-uk Kim #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 1991970d693SJung-uk Kim #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ 200ab71bbb7SJung-uk Kim #define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */ 201d6dd1baeSJung-uk Kim 202d6dd1baeSJung-uk Kim 203d6dd1baeSJung-uk Kim /* 204d6dd1baeSJung-uk Kim * All tables must be byte-packed to match the ACPI specification, since 205d6dd1baeSJung-uk Kim * the tables are provided by the system BIOS. 206d6dd1baeSJung-uk Kim */ 207d6dd1baeSJung-uk Kim #pragma pack(1) 208d6dd1baeSJung-uk Kim 209d6dd1baeSJung-uk Kim /* 2101df130f1SJung-uk Kim * Note: C bitfields are not used for this reason: 2111df130f1SJung-uk Kim * 2121df130f1SJung-uk Kim * "Bitfields are great and easy to read, but unfortunately the C language 2131df130f1SJung-uk Kim * does not specify the layout of bitfields in memory, which means they are 2141df130f1SJung-uk Kim * essentially useless for dealing with packed data in on-disk formats or 2151df130f1SJung-uk Kim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 2161df130f1SJung-uk Kim * this decision was a design error in C. Ritchie could have picked an order 2171df130f1SJung-uk Kim * and stuck with it." Norman Ramsey. 2181df130f1SJung-uk Kim * See http://stackoverflow.com/a/1053662/41661 219d6dd1baeSJung-uk Kim */ 220d6dd1baeSJung-uk Kim 221d6dd1baeSJung-uk Kim 222d6dd1baeSJung-uk Kim /******************************************************************************* 223d6dd1baeSJung-uk Kim * 22497c0b5abSJung-uk Kim * AEST - Arm Error Source Table 22597c0b5abSJung-uk Kim * 22697c0b5abSJung-uk Kim * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document 22797c0b5abSJung-uk Kim * September 2020. 22897c0b5abSJung-uk Kim * 22997c0b5abSJung-uk Kim ******************************************************************************/ 23097c0b5abSJung-uk Kim 23197c0b5abSJung-uk Kim typedef struct acpi_table_aest 23297c0b5abSJung-uk Kim { 23397c0b5abSJung-uk Kim ACPI_TABLE_HEADER Header; 23497c0b5abSJung-uk Kim 23597c0b5abSJung-uk Kim } ACPI_TABLE_AEST; 23697c0b5abSJung-uk Kim 23797c0b5abSJung-uk Kim /* Common Subtable header - one per Node Structure (Subtable) */ 23897c0b5abSJung-uk Kim 23997c0b5abSJung-uk Kim typedef struct acpi_aest_hdr 24097c0b5abSJung-uk Kim { 24197c0b5abSJung-uk Kim UINT8 Type; 24297c0b5abSJung-uk Kim UINT16 Length; 24397c0b5abSJung-uk Kim UINT8 Reserved; 24497c0b5abSJung-uk Kim UINT32 NodeSpecificOffset; 24597c0b5abSJung-uk Kim UINT32 NodeInterfaceOffset; 24697c0b5abSJung-uk Kim UINT32 NodeInterruptOffset; 24797c0b5abSJung-uk Kim UINT32 NodeInterruptCount; 24897c0b5abSJung-uk Kim UINT64 TimestampRate; 24997c0b5abSJung-uk Kim UINT64 Reserved1; 25097c0b5abSJung-uk Kim UINT64 ErrorInjectionRate; 25197c0b5abSJung-uk Kim 25297c0b5abSJung-uk Kim } ACPI_AEST_HEADER; 25397c0b5abSJung-uk Kim 25497c0b5abSJung-uk Kim /* Values for Type above */ 25597c0b5abSJung-uk Kim 25697c0b5abSJung-uk Kim #define ACPI_AEST_PROCESSOR_ERROR_NODE 0 25797c0b5abSJung-uk Kim #define ACPI_AEST_MEMORY_ERROR_NODE 1 25897c0b5abSJung-uk Kim #define ACPI_AEST_SMMU_ERROR_NODE 2 25997c0b5abSJung-uk Kim #define ACPI_AEST_VENDOR_ERROR_NODE 3 26097c0b5abSJung-uk Kim #define ACPI_AEST_GIC_ERROR_NODE 4 26197c0b5abSJung-uk Kim #define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ 26297c0b5abSJung-uk Kim 26397c0b5abSJung-uk Kim 26497c0b5abSJung-uk Kim /* 26597c0b5abSJung-uk Kim * AEST subtables (Error nodes) 26697c0b5abSJung-uk Kim */ 26797c0b5abSJung-uk Kim 26897c0b5abSJung-uk Kim /* 0: Processor Error */ 26997c0b5abSJung-uk Kim 27097c0b5abSJung-uk Kim typedef struct acpi_aest_processor 27197c0b5abSJung-uk Kim { 27297c0b5abSJung-uk Kim UINT32 ProcessorId; 27397c0b5abSJung-uk Kim UINT8 ResourceType; 27497c0b5abSJung-uk Kim UINT8 Reserved; 27597c0b5abSJung-uk Kim UINT8 Flags; 27697c0b5abSJung-uk Kim UINT8 Revision; 27797c0b5abSJung-uk Kim UINT64 ProcessorAffinity; 27897c0b5abSJung-uk Kim 27997c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR; 28097c0b5abSJung-uk Kim 28197c0b5abSJung-uk Kim /* Values for ResourceType above, related structs below */ 28297c0b5abSJung-uk Kim 28397c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_RESOURCE 0 28497c0b5abSJung-uk Kim #define ACPI_AEST_TLB_RESOURCE 1 28597c0b5abSJung-uk Kim #define ACPI_AEST_GENERIC_RESOURCE 2 28697c0b5abSJung-uk Kim #define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ 28797c0b5abSJung-uk Kim 28897c0b5abSJung-uk Kim /* 0R: Processor Cache Resource Substructure */ 28997c0b5abSJung-uk Kim 29097c0b5abSJung-uk Kim typedef struct acpi_aest_processor_cache 29197c0b5abSJung-uk Kim { 29297c0b5abSJung-uk Kim UINT32 CacheReference; 29397c0b5abSJung-uk Kim UINT32 Reserved; 29497c0b5abSJung-uk Kim 29597c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_CACHE; 29697c0b5abSJung-uk Kim 29797c0b5abSJung-uk Kim /* Values for CacheType above */ 29897c0b5abSJung-uk Kim 29997c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_DATA 0 30097c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_INSTRUCTION 1 30197c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_UNIFIED 2 30297c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ 30397c0b5abSJung-uk Kim 30497c0b5abSJung-uk Kim /* 1R: Processor TLB Resource Substructure */ 30597c0b5abSJung-uk Kim 30697c0b5abSJung-uk Kim typedef struct acpi_aest_processor_tlb 30797c0b5abSJung-uk Kim { 30897c0b5abSJung-uk Kim UINT32 TlbLevel; 30997c0b5abSJung-uk Kim UINT32 Reserved; 31097c0b5abSJung-uk Kim 31197c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_TLB; 31297c0b5abSJung-uk Kim 31397c0b5abSJung-uk Kim /* 2R: Processor Generic Resource Substructure */ 31497c0b5abSJung-uk Kim 31597c0b5abSJung-uk Kim typedef struct acpi_aest_processor_generic 31697c0b5abSJung-uk Kim { 317ab71bbb7SJung-uk Kim UINT32 Resource; 31897c0b5abSJung-uk Kim 31997c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_GENERIC; 32097c0b5abSJung-uk Kim 32197c0b5abSJung-uk Kim /* 1: Memory Error */ 32297c0b5abSJung-uk Kim 32397c0b5abSJung-uk Kim typedef struct acpi_aest_memory 32497c0b5abSJung-uk Kim { 32597c0b5abSJung-uk Kim UINT32 SratProximityDomain; 32697c0b5abSJung-uk Kim 32797c0b5abSJung-uk Kim } ACPI_AEST_MEMORY; 32897c0b5abSJung-uk Kim 32997c0b5abSJung-uk Kim /* 2: Smmu Error */ 33097c0b5abSJung-uk Kim 33197c0b5abSJung-uk Kim typedef struct acpi_aest_smmu 33297c0b5abSJung-uk Kim { 33397c0b5abSJung-uk Kim UINT32 IortNodeReference; 33497c0b5abSJung-uk Kim UINT32 SubcomponentReference; 33597c0b5abSJung-uk Kim 33697c0b5abSJung-uk Kim } ACPI_AEST_SMMU; 33797c0b5abSJung-uk Kim 33897c0b5abSJung-uk Kim /* 3: Vendor Defined */ 33997c0b5abSJung-uk Kim 34097c0b5abSJung-uk Kim typedef struct acpi_aest_vendor 34197c0b5abSJung-uk Kim { 34297c0b5abSJung-uk Kim UINT32 AcpiHid; 34397c0b5abSJung-uk Kim UINT32 AcpiUid; 34497c0b5abSJung-uk Kim UINT8 VendorSpecificData[16]; 34597c0b5abSJung-uk Kim 34697c0b5abSJung-uk Kim } ACPI_AEST_VENDOR; 34797c0b5abSJung-uk Kim 34897c0b5abSJung-uk Kim /* 4: Gic Error */ 34997c0b5abSJung-uk Kim 35097c0b5abSJung-uk Kim typedef struct acpi_aest_gic 35197c0b5abSJung-uk Kim { 35297c0b5abSJung-uk Kim UINT32 InterfaceType; 35397c0b5abSJung-uk Kim UINT32 InstanceId; 35497c0b5abSJung-uk Kim 35597c0b5abSJung-uk Kim } ACPI_AEST_GIC; 35697c0b5abSJung-uk Kim 35797c0b5abSJung-uk Kim /* Values for InterfaceType above */ 35897c0b5abSJung-uk Kim 35997c0b5abSJung-uk Kim #define ACPI_AEST_GIC_CPU 0 36097c0b5abSJung-uk Kim #define ACPI_AEST_GIC_DISTRIBUTOR 1 36197c0b5abSJung-uk Kim #define ACPI_AEST_GIC_REDISTRIBUTOR 2 36297c0b5abSJung-uk Kim #define ACPI_AEST_GIC_ITS 3 36397c0b5abSJung-uk Kim #define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ 36497c0b5abSJung-uk Kim 36597c0b5abSJung-uk Kim 36697c0b5abSJung-uk Kim /* Node Interface Structure */ 36797c0b5abSJung-uk Kim 36897c0b5abSJung-uk Kim typedef struct acpi_aest_node_interface 36997c0b5abSJung-uk Kim { 37097c0b5abSJung-uk Kim UINT8 Type; 37197c0b5abSJung-uk Kim UINT8 Reserved[3]; 37297c0b5abSJung-uk Kim UINT32 Flags; 37397c0b5abSJung-uk Kim UINT64 Address; 37497c0b5abSJung-uk Kim UINT32 ErrorRecordIndex; 37597c0b5abSJung-uk Kim UINT32 ErrorRecordCount; 37697c0b5abSJung-uk Kim UINT64 ErrorRecordImplemented; 37797c0b5abSJung-uk Kim UINT64 ErrorStatusReporting; 37897c0b5abSJung-uk Kim UINT64 AddressingMode; 37997c0b5abSJung-uk Kim 38097c0b5abSJung-uk Kim } ACPI_AEST_NODE_INTERFACE; 38197c0b5abSJung-uk Kim 38297c0b5abSJung-uk Kim /* Values for Type field above */ 38397c0b5abSJung-uk Kim 38497c0b5abSJung-uk Kim #define ACPI_AEST_NODE_SYSTEM_REGISTER 0 38597c0b5abSJung-uk Kim #define ACPI_AEST_NODE_MEMORY_MAPPED 1 38697c0b5abSJung-uk Kim #define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ 38797c0b5abSJung-uk Kim 38897c0b5abSJung-uk Kim /* Node Interrupt Structure */ 38997c0b5abSJung-uk Kim 39097c0b5abSJung-uk Kim typedef struct acpi_aest_node_interrupt 39197c0b5abSJung-uk Kim { 39297c0b5abSJung-uk Kim UINT8 Type; 39397c0b5abSJung-uk Kim UINT8 Reserved[2]; 39497c0b5abSJung-uk Kim UINT8 Flags; 39597c0b5abSJung-uk Kim UINT32 Gsiv; 39697c0b5abSJung-uk Kim UINT8 IortId; 39797c0b5abSJung-uk Kim UINT8 Reserved1[3]; 39897c0b5abSJung-uk Kim 39997c0b5abSJung-uk Kim } ACPI_AEST_NODE_INTERRUPT; 40097c0b5abSJung-uk Kim 40197c0b5abSJung-uk Kim /* Values for Type field above */ 40297c0b5abSJung-uk Kim 40397c0b5abSJung-uk Kim #define ACPI_AEST_NODE_FAULT_HANDLING 0 40497c0b5abSJung-uk Kim #define ACPI_AEST_NODE_ERROR_RECOVERY 1 40597c0b5abSJung-uk Kim #define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ 40697c0b5abSJung-uk Kim 40797c0b5abSJung-uk Kim 40897c0b5abSJung-uk Kim /******************************************************************************* 409ab71bbb7SJung-uk Kim * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface 410ab71bbb7SJung-uk Kim * 411ab71bbb7SJung-uk Kim * Conforms to "ACPI for Arm Components 1.1, Platform Design Document" 412ab71bbb7SJung-uk Kim * ARM DEN0093 v1.1 413ab71bbb7SJung-uk Kim * 414ab71bbb7SJung-uk Kim ******************************************************************************/ 415ab71bbb7SJung-uk Kim typedef struct acpi_table_agdi 416ab71bbb7SJung-uk Kim { 417ab71bbb7SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 418ab71bbb7SJung-uk Kim UINT8 Flags; 419ab71bbb7SJung-uk Kim UINT8 Reserved[3]; 420ab71bbb7SJung-uk Kim UINT32 SdeiEvent; 421ab71bbb7SJung-uk Kim UINT32 Gsiv; 422ab71bbb7SJung-uk Kim 423ab71bbb7SJung-uk Kim } ACPI_TABLE_AGDI; 424ab71bbb7SJung-uk Kim 425ab71bbb7SJung-uk Kim /* Mask for Flags field above */ 426ab71bbb7SJung-uk Kim 427ab71bbb7SJung-uk Kim #define ACPI_AGDI_SIGNALING_MODE (1) 428ab71bbb7SJung-uk Kim 429ab71bbb7SJung-uk Kim 430ab71bbb7SJung-uk Kim /******************************************************************************* 431ab71bbb7SJung-uk Kim * 432ab71bbb7SJung-uk Kim * APMT - ARM Performance Monitoring Unit Table 433ab71bbb7SJung-uk Kim * 434ab71bbb7SJung-uk Kim * Conforms to: 435ab71bbb7SJung-uk Kim * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document 436ab71bbb7SJung-uk Kim * ARM DEN0117 v1.0 November 25, 2021 437ab71bbb7SJung-uk Kim * 438ab71bbb7SJung-uk Kim ******************************************************************************/ 439ab71bbb7SJung-uk Kim 440ab71bbb7SJung-uk Kim typedef struct acpi_table_apmt { 441ab71bbb7SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 442ab71bbb7SJung-uk Kim } ACPI_TABLE_APMT; 443ab71bbb7SJung-uk Kim 444ab71bbb7SJung-uk Kim #define ACPI_APMT_NODE_ID_LENGTH 4 445ab71bbb7SJung-uk Kim 446ab71bbb7SJung-uk Kim /* 447ab71bbb7SJung-uk Kim * APMT subtables 448ab71bbb7SJung-uk Kim */ 449ab71bbb7SJung-uk Kim typedef struct acpi_apmt_node { 450ab71bbb7SJung-uk Kim UINT16 Length; 451ab71bbb7SJung-uk Kim UINT8 Flags; 452ab71bbb7SJung-uk Kim UINT8 Type; 453ab71bbb7SJung-uk Kim UINT32 Id; 454ab71bbb7SJung-uk Kim UINT64 InstPrimary; 455ab71bbb7SJung-uk Kim UINT32 InstSecondary; 456ab71bbb7SJung-uk Kim UINT64 BaseAddress0; 457ab71bbb7SJung-uk Kim UINT64 BaseAddress1; 458ab71bbb7SJung-uk Kim UINT32 OvflwIrq; 459ab71bbb7SJung-uk Kim UINT32 Reserved; 460ab71bbb7SJung-uk Kim UINT32 OvflwIrqFlags; 461ab71bbb7SJung-uk Kim UINT32 ProcAffinity; 462ab71bbb7SJung-uk Kim UINT32 ImplId; 463ab71bbb7SJung-uk Kim } ACPI_APMT_NODE; 464ab71bbb7SJung-uk Kim 465ab71bbb7SJung-uk Kim /* Masks for Flags field above */ 466ab71bbb7SJung-uk Kim 467ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0) 468ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY (1<<1) 469ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC (1<<2) 470ab71bbb7SJung-uk Kim 471ab71bbb7SJung-uk Kim /* Values for Flags dual page field above */ 472ab71bbb7SJung-uk Kim 473ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0) 474ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0) 475ab71bbb7SJung-uk Kim 476ab71bbb7SJung-uk Kim /* Values for Flags processor affinity field above */ 477ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1) 478ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1) 479ab71bbb7SJung-uk Kim 480ab71bbb7SJung-uk Kim /* Values for Flags 64-bit atomic field above */ 481ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2) 482ab71bbb7SJung-uk Kim #define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2) 483ab71bbb7SJung-uk Kim 484ab71bbb7SJung-uk Kim /* Values for Type field above */ 485ab71bbb7SJung-uk Kim 486ab71bbb7SJung-uk Kim enum acpi_apmt_node_type { 487ab71bbb7SJung-uk Kim ACPI_APMT_NODE_TYPE_MC = 0x00, 488ab71bbb7SJung-uk Kim ACPI_APMT_NODE_TYPE_SMMU = 0x01, 489ab71bbb7SJung-uk Kim ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02, 490ab71bbb7SJung-uk Kim ACPI_APMT_NODE_TYPE_ACPI = 0x03, 491ab71bbb7SJung-uk Kim ACPI_APMT_NODE_TYPE_CACHE = 0x04, 492ab71bbb7SJung-uk Kim ACPI_APMT_NODE_TYPE_COUNT 493ab71bbb7SJung-uk Kim }; 494ab71bbb7SJung-uk Kim 495ab71bbb7SJung-uk Kim /* Masks for ovflw_irq_flags field above */ 496ab71bbb7SJung-uk Kim 497ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0) 498ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1) 499ab71bbb7SJung-uk Kim 500ab71bbb7SJung-uk Kim /* Values for ovflw_irq_flags mode field above */ 501ab71bbb7SJung-uk Kim 502ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0) 503ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0) 504ab71bbb7SJung-uk Kim 505ab71bbb7SJung-uk Kim /* Values for ovflw_irq_flags type field above */ 506ab71bbb7SJung-uk Kim 507ab71bbb7SJung-uk Kim #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1) 508ab71bbb7SJung-uk Kim 509ab71bbb7SJung-uk Kim 510ab71bbb7SJung-uk Kim /******************************************************************************* 51197c0b5abSJung-uk Kim * 5121970d693SJung-uk Kim * BDAT - BIOS Data ACPI Table 5131970d693SJung-uk Kim * 5141970d693SJung-uk Kim * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5 5151970d693SJung-uk Kim * Nov 2020 5161970d693SJung-uk Kim * 5171970d693SJung-uk Kim ******************************************************************************/ 5181970d693SJung-uk Kim 5191970d693SJung-uk Kim typedef struct acpi_table_bdat 5201970d693SJung-uk Kim { 5211970d693SJung-uk Kim ACPI_TABLE_HEADER Header; 5221970d693SJung-uk Kim ACPI_GENERIC_ADDRESS Gas; 5231970d693SJung-uk Kim 5241970d693SJung-uk Kim } ACPI_TABLE_BDAT; 5251970d693SJung-uk Kim 5269a4bc520SJung-uk Kim /******************************************************************************* 5279a4bc520SJung-uk Kim * 5289a4bc520SJung-uk Kim * CCEL - CC-Event Log 5299a4bc520SJung-uk Kim * From: "Guest-Host-Communication Interface (GHCI) for Intel 5309a4bc520SJung-uk Kim * Trust Domain Extensions (Intel TDX)". Feb 2022 5319a4bc520SJung-uk Kim * 5329a4bc520SJung-uk Kim ******************************************************************************/ 5339a4bc520SJung-uk Kim 5349a4bc520SJung-uk Kim typedef struct acpi_table_ccel 5359a4bc520SJung-uk Kim { 5369a4bc520SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 5379a4bc520SJung-uk Kim UINT8 CCType; 5389a4bc520SJung-uk Kim UINT8 CCSubType; 5399a4bc520SJung-uk Kim UINT16 Reserved; 5409a4bc520SJung-uk Kim UINT64 LogAreaMinimumLength; 5419a4bc520SJung-uk Kim UINT64 LogAreaStartAddress; 5429a4bc520SJung-uk Kim 5439a4bc520SJung-uk Kim } ACPI_TABLE_CCEL; 5441970d693SJung-uk Kim 5451970d693SJung-uk Kim /******************************************************************************* 5461970d693SJung-uk Kim * 547a371a5fdSJung-uk Kim * IORT - IO Remapping Table 548a371a5fdSJung-uk Kim * 549a371a5fdSJung-uk Kim * Conforms to "IO Remapping Table System Software on ARM Platforms", 5509a4bc520SJung-uk Kim * Document number: ARM DEN 0049E.e, Sep 2022 551a371a5fdSJung-uk Kim * 552a371a5fdSJung-uk Kim ******************************************************************************/ 553a371a5fdSJung-uk Kim 554a371a5fdSJung-uk Kim typedef struct acpi_table_iort 555a371a5fdSJung-uk Kim { 556a371a5fdSJung-uk Kim ACPI_TABLE_HEADER Header; 557a371a5fdSJung-uk Kim UINT32 NodeCount; 558a371a5fdSJung-uk Kim UINT32 NodeOffset; 559a371a5fdSJung-uk Kim UINT32 Reserved; 560a371a5fdSJung-uk Kim 561a371a5fdSJung-uk Kim } ACPI_TABLE_IORT; 562a371a5fdSJung-uk Kim 563a371a5fdSJung-uk Kim 564a371a5fdSJung-uk Kim /* 565a371a5fdSJung-uk Kim * IORT subtables 566a371a5fdSJung-uk Kim */ 567a371a5fdSJung-uk Kim typedef struct acpi_iort_node 568a371a5fdSJung-uk Kim { 569a371a5fdSJung-uk Kim UINT8 Type; 570a371a5fdSJung-uk Kim UINT16 Length; 571a371a5fdSJung-uk Kim UINT8 Revision; 572cfd1ed46SJung-uk Kim UINT32 Identifier; 573a371a5fdSJung-uk Kim UINT32 MappingCount; 574a371a5fdSJung-uk Kim UINT32 MappingOffset; 575722b1667SJung-uk Kim char NodeData[]; 576a371a5fdSJung-uk Kim 577a371a5fdSJung-uk Kim } ACPI_IORT_NODE; 578a371a5fdSJung-uk Kim 579a371a5fdSJung-uk Kim /* Values for subtable Type above */ 580a371a5fdSJung-uk Kim 581a371a5fdSJung-uk Kim enum AcpiIortNodeType 582a371a5fdSJung-uk Kim { 583a371a5fdSJung-uk Kim ACPI_IORT_NODE_ITS_GROUP = 0x00, 584a371a5fdSJung-uk Kim ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 585a371a5fdSJung-uk Kim ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 586f8146b88SJung-uk Kim ACPI_IORT_NODE_SMMU = 0x03, 5873d90091dSJung-uk Kim ACPI_IORT_NODE_SMMU_V3 = 0x04, 588cfd1ed46SJung-uk Kim ACPI_IORT_NODE_PMCG = 0x05, 589cfd1ed46SJung-uk Kim ACPI_IORT_NODE_RMR = 0x06, 590a371a5fdSJung-uk Kim }; 591a371a5fdSJung-uk Kim 592a371a5fdSJung-uk Kim 593a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping 594a371a5fdSJung-uk Kim { 595a371a5fdSJung-uk Kim UINT32 InputBase; /* Lowest value in input range */ 596a371a5fdSJung-uk Kim UINT32 IdCount; /* Number of IDs */ 597a371a5fdSJung-uk Kim UINT32 OutputBase; /* Lowest value in output range */ 598a371a5fdSJung-uk Kim UINT32 OutputReference; /* A reference to the output node */ 599a371a5fdSJung-uk Kim UINT32 Flags; 600a371a5fdSJung-uk Kim 601a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING; 602a371a5fdSJung-uk Kim 603a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */ 604a371a5fdSJung-uk Kim 605a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1) 606a371a5fdSJung-uk Kim 607a371a5fdSJung-uk Kim 608a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access 609a371a5fdSJung-uk Kim { 610a371a5fdSJung-uk Kim UINT32 CacheCoherency; 611a371a5fdSJung-uk Kim UINT8 Hints; 612a371a5fdSJung-uk Kim UINT16 Reserved; 613a371a5fdSJung-uk Kim UINT8 MemoryFlags; 614a371a5fdSJung-uk Kim 615a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS; 616a371a5fdSJung-uk Kim 617a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */ 618a371a5fdSJung-uk Kim 619a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 620a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 621a371a5fdSJung-uk Kim 622a371a5fdSJung-uk Kim /* Masks for Hints field above */ 623a371a5fdSJung-uk Kim 624a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT (1) 625a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE (1<<1) 626a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ (1<<2) 627a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE (1<<3) 628a371a5fdSJung-uk Kim 629a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */ 630a371a5fdSJung-uk Kim 631a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY (1) 632a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES (1<<1) 633a371a5fdSJung-uk Kim 634a371a5fdSJung-uk Kim 635a371a5fdSJung-uk Kim /* 636a371a5fdSJung-uk Kim * IORT node specific subtables 637a371a5fdSJung-uk Kim */ 638a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group 639a371a5fdSJung-uk Kim { 640a371a5fdSJung-uk Kim UINT32 ItsCount; 641722b1667SJung-uk Kim UINT32 Identifiers[]; /* GIC ITS identifier array */ 642a371a5fdSJung-uk Kim 643a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP; 644a371a5fdSJung-uk Kim 645a371a5fdSJung-uk Kim 646a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component 647a371a5fdSJung-uk Kim { 648a371a5fdSJung-uk Kim UINT32 NodeFlags; 649a371a5fdSJung-uk Kim UINT64 MemoryProperties; /* Memory access properties */ 650a371a5fdSJung-uk Kim UINT8 MemoryAddressLimit; /* Memory address size limit */ 651722b1667SJung-uk Kim char DeviceName[]; /* Path of namespace object */ 652a371a5fdSJung-uk Kim 653a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT; 654a371a5fdSJung-uk Kim 6553d90091dSJung-uk Kim /* Masks for Flags field above */ 6563d90091dSJung-uk Kim 6573d90091dSJung-uk Kim #define ACPI_IORT_NC_STALL_SUPPORTED (1) 6583d90091dSJung-uk Kim #define ACPI_IORT_NC_PASID_BITS (31<<1) 659a371a5fdSJung-uk Kim 660a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex 661a371a5fdSJung-uk Kim { 662a371a5fdSJung-uk Kim UINT64 MemoryProperties; /* Memory access properties */ 663a371a5fdSJung-uk Kim UINT32 AtsAttribute; 664a371a5fdSJung-uk Kim UINT32 PciSegmentNumber; 6653d90091dSJung-uk Kim UINT8 MemoryAddressLimit; /* Memory address size limit */ 666ab71bbb7SJung-uk Kim UINT16 PasidCapabilities; /* PASID Capabilities */ 667722b1667SJung-uk Kim UINT8 Reserved[]; /* Reserved, must be zero */ 668a371a5fdSJung-uk Kim 669a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX; 670a371a5fdSJung-uk Kim 671cfd1ed46SJung-uk Kim /* Masks for AtsAttribute field above */ 672a371a5fdSJung-uk Kim 673cfd1ed46SJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */ 674cfd1ed46SJung-uk Kim #define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */ 675cfd1ed46SJung-uk Kim #define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */ 676a371a5fdSJung-uk Kim 677ab71bbb7SJung-uk Kim /* Masks for PasidCapabilities field above */ 678ab71bbb7SJung-uk Kim #define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */ 679a371a5fdSJung-uk Kim 680a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu 681a371a5fdSJung-uk Kim { 682a371a5fdSJung-uk Kim UINT64 BaseAddress; /* SMMU base address */ 683a371a5fdSJung-uk Kim UINT64 Span; /* Length of memory range */ 684a371a5fdSJung-uk Kim UINT32 Model; 685a371a5fdSJung-uk Kim UINT32 Flags; 686a371a5fdSJung-uk Kim UINT32 GlobalInterruptOffset; 687a371a5fdSJung-uk Kim UINT32 ContextInterruptCount; 688a371a5fdSJung-uk Kim UINT32 ContextInterruptOffset; 689a371a5fdSJung-uk Kim UINT32 PmuInterruptCount; 690a371a5fdSJung-uk Kim UINT32 PmuInterruptOffset; 691722b1667SJung-uk Kim UINT64 Interrupts[]; /* Interrupt array */ 692a371a5fdSJung-uk Kim 693a371a5fdSJung-uk Kim } ACPI_IORT_SMMU; 694a371a5fdSJung-uk Kim 695a371a5fdSJung-uk Kim /* Values for Model field above */ 696a371a5fdSJung-uk Kim 697a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 698a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 699a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 700a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 7015f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ 7025f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ 703a371a5fdSJung-uk Kim 704a371a5fdSJung-uk Kim /* Masks for Flags field above */ 705a371a5fdSJung-uk Kim 706a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 707a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 708a371a5fdSJung-uk Kim 7090d84335fSJung-uk Kim /* Global interrupt format */ 7100d84335fSJung-uk Kim 7110d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi 7120d84335fSJung-uk Kim { 7130d84335fSJung-uk Kim UINT32 NSgIrpt; 7140d84335fSJung-uk Kim UINT32 NSgIrptFlags; 7150d84335fSJung-uk Kim UINT32 NSgCfgIrpt; 7160d84335fSJung-uk Kim UINT32 NSgCfgIrptFlags; 7172f6a1a81SJung-uk Kim 7180d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI; 7190d84335fSJung-uk Kim 720a371a5fdSJung-uk Kim 721f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3 722f8146b88SJung-uk Kim { 723f8146b88SJung-uk Kim UINT64 BaseAddress; /* SMMUv3 base address */ 724f8146b88SJung-uk Kim UINT32 Flags; 725f8146b88SJung-uk Kim UINT32 Reserved; 726f8146b88SJung-uk Kim UINT64 VatosAddress; 7275f9b24faSJung-uk Kim UINT32 Model; 728f8146b88SJung-uk Kim UINT32 EventGsiv; 729f8146b88SJung-uk Kim UINT32 PriGsiv; 730f8146b88SJung-uk Kim UINT32 GerrGsiv; 731f8146b88SJung-uk Kim UINT32 SyncGsiv; 7323d90091dSJung-uk Kim UINT32 Pxm; 733b7b7e711SJung-uk Kim UINT32 IdMappingIndex; 734f8146b88SJung-uk Kim 735f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3; 736f8146b88SJung-uk Kim 7375f9b24faSJung-uk Kim /* Values for Model field above */ 7385f9b24faSJung-uk Kim 7395f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ 7405f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ 7415f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ 7425f9b24faSJung-uk Kim 743f8146b88SJung-uk Kim /* Masks for Flags field above */ 744f8146b88SJung-uk Kim 745f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 7463d90091dSJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1) 7475f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) 7489a4bc520SJung-uk Kim #define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4) 749f8146b88SJung-uk Kim 7503d90091dSJung-uk Kim typedef struct acpi_iort_pmcg 7513d90091dSJung-uk Kim { 7523d90091dSJung-uk Kim UINT64 Page0BaseAddress; 7533d90091dSJung-uk Kim UINT32 OverflowGsiv; 7543d90091dSJung-uk Kim UINT32 NodeReference; 7553d90091dSJung-uk Kim UINT64 Page1BaseAddress; 7563d90091dSJung-uk Kim 7573d90091dSJung-uk Kim } ACPI_IORT_PMCG; 7583d90091dSJung-uk Kim 759cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr { 760cfd1ed46SJung-uk Kim UINT32 Flags; 761cfd1ed46SJung-uk Kim UINT32 RmrCount; 762cfd1ed46SJung-uk Kim UINT32 RmrOffset; 763cfd1ed46SJung-uk Kim 764cfd1ed46SJung-uk Kim } ACPI_IORT_RMR; 765cfd1ed46SJung-uk Kim 766ab71bbb7SJung-uk Kim /* Masks for Flags field above */ 767ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_REMAP_PERMITTED (1) 768ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1) 769ab71bbb7SJung-uk Kim 770ab71bbb7SJung-uk Kim /* 771ab71bbb7SJung-uk Kim * Macro to access the Access Attributes in flags field above: 772ab71bbb7SJung-uk Kim * Access Attributes is encoded in bits 9:2 773ab71bbb7SJung-uk Kim */ 774ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF) 775ab71bbb7SJung-uk Kim 776ab71bbb7SJung-uk Kim /* Values for above Access Attributes */ 777ab71bbb7SJung-uk Kim 778ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00 779ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01 780ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02 781ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03 782ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04 783ab71bbb7SJung-uk Kim #define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05 784ab71bbb7SJung-uk Kim 785cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr_desc { 786cfd1ed46SJung-uk Kim UINT64 BaseAddress; 787cfd1ed46SJung-uk Kim UINT64 Length; 788cfd1ed46SJung-uk Kim UINT32 Reserved; 789cfd1ed46SJung-uk Kim 790cfd1ed46SJung-uk Kim } ACPI_IORT_RMR_DESC; 791f8146b88SJung-uk Kim 792a371a5fdSJung-uk Kim /******************************************************************************* 793a371a5fdSJung-uk Kim * 794d6dd1baeSJung-uk Kim * IVRS - I/O Virtualization Reporting Structure 795d6dd1baeSJung-uk Kim * Version 1 796d6dd1baeSJung-uk Kim * 797d6dd1baeSJung-uk Kim * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 798d6dd1baeSJung-uk Kim * Revision 1.26, February 2009. 799d6dd1baeSJung-uk Kim * 800d6dd1baeSJung-uk Kim ******************************************************************************/ 801d6dd1baeSJung-uk Kim 802d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs 803d6dd1baeSJung-uk Kim { 804d6dd1baeSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 805d6dd1baeSJung-uk Kim UINT32 Info; /* Common virtualization info */ 806d6dd1baeSJung-uk Kim UINT64 Reserved; 807d6dd1baeSJung-uk Kim 808d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS; 809d6dd1baeSJung-uk Kim 810d6dd1baeSJung-uk Kim /* Values for Info field above */ 811d6dd1baeSJung-uk Kim 812d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 813d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 814d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 815d6dd1baeSJung-uk Kim 816d6dd1baeSJung-uk Kim 817d6dd1baeSJung-uk Kim /* IVRS subtable header */ 818d6dd1baeSJung-uk Kim 819d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header 820d6dd1baeSJung-uk Kim { 821d6dd1baeSJung-uk Kim UINT8 Type; /* Subtable type */ 822d6dd1baeSJung-uk Kim UINT8 Flags; 823d6dd1baeSJung-uk Kim UINT16 Length; /* Subtable length */ 824d6dd1baeSJung-uk Kim UINT16 DeviceId; /* ID of IOMMU */ 825d6dd1baeSJung-uk Kim 826d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER; 827d6dd1baeSJung-uk Kim 828d6dd1baeSJung-uk Kim /* Values for subtable Type above */ 829d6dd1baeSJung-uk Kim 830d6dd1baeSJung-uk Kim enum AcpiIvrsType 831d6dd1baeSJung-uk Kim { 8323ee58df5SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE1 = 0x10, 8333ee58df5SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE2 = 0x11, 834cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE3 = 0x40, 835d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY1 = 0x20, 836d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY2 = 0x21, 837d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY3 = 0x22 838d6dd1baeSJung-uk Kim }; 839d6dd1baeSJung-uk Kim 840d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */ 841d6dd1baeSJung-uk Kim 842d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE (1) 843d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW (1<<1) 844d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW (1<<2) 845d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC (1<<3) 846d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB (1<<4) 847d6dd1baeSJung-uk Kim 848d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */ 849d6dd1baeSJung-uk Kim 850d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY (1) 851d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ (1<<1) 852d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE (1<<2) 853d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 854d6dd1baeSJung-uk Kim 855d6dd1baeSJung-uk Kim 856d6dd1baeSJung-uk Kim /* 857d6dd1baeSJung-uk Kim * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER 858d6dd1baeSJung-uk Kim */ 859d6dd1baeSJung-uk Kim 860d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 861d6dd1baeSJung-uk Kim 8623ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_10 863d6dd1baeSJung-uk Kim { 864d6dd1baeSJung-uk Kim ACPI_IVRS_HEADER Header; 865d6dd1baeSJung-uk Kim UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 866d6dd1baeSJung-uk Kim UINT64 BaseAddress; /* IOMMU control registers */ 867d6dd1baeSJung-uk Kim UINT16 PciSegmentGroup; 868d6dd1baeSJung-uk Kim UINT16 Info; /* MSI number and unit ID */ 8693ee58df5SJung-uk Kim UINT32 FeatureReporting; 870d6dd1baeSJung-uk Kim 8713ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE1; 8723ee58df5SJung-uk Kim 8733ee58df5SJung-uk Kim /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ 8743ee58df5SJung-uk Kim 8753ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_11 8763ee58df5SJung-uk Kim { 8773ee58df5SJung-uk Kim ACPI_IVRS_HEADER Header; 8783ee58df5SJung-uk Kim UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 8793ee58df5SJung-uk Kim UINT64 BaseAddress; /* IOMMU control registers */ 8803ee58df5SJung-uk Kim UINT16 PciSegmentGroup; 8813ee58df5SJung-uk Kim UINT16 Info; /* MSI number and unit ID */ 8823ee58df5SJung-uk Kim UINT32 Attributes; 8833ee58df5SJung-uk Kim UINT64 EfrRegisterImage; 8843ee58df5SJung-uk Kim UINT64 Reserved; 8853ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE2; 886d6dd1baeSJung-uk Kim 887d6dd1baeSJung-uk Kim /* Masks for Info field above */ 888d6dd1baeSJung-uk Kim 889d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 890d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ 891d6dd1baeSJung-uk Kim 892d6dd1baeSJung-uk Kim 893d6dd1baeSJung-uk Kim /* 894d6dd1baeSJung-uk Kim * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. 895d6dd1baeSJung-uk Kim * Upper two bits of the Type field are the (encoded) length of the structure. 896d6dd1baeSJung-uk Kim * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 897d6dd1baeSJung-uk Kim * are reserved for future use but not defined. 898d6dd1baeSJung-uk Kim */ 899d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header 900d6dd1baeSJung-uk Kim { 901d6dd1baeSJung-uk Kim UINT8 Type; 902d6dd1baeSJung-uk Kim UINT16 Id; 903d6dd1baeSJung-uk Kim UINT8 DataSetting; 904d6dd1baeSJung-uk Kim 905d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER; 906d6dd1baeSJung-uk Kim 907d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */ 908d6dd1baeSJung-uk Kim 909d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH 0xC0 910d6dd1baeSJung-uk Kim 911d6dd1baeSJung-uk Kim /* Values for device entry Type field above */ 912d6dd1baeSJung-uk Kim 913d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType 914d6dd1baeSJung-uk Kim { 915d6dd1baeSJung-uk Kim /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ 916d6dd1baeSJung-uk Kim 917d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_PAD4 = 0, 918d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALL = 1, 919d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_SELECT = 2, 920d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_START = 3, 921d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_END = 4, 922d6dd1baeSJung-uk Kim 923d6dd1baeSJung-uk Kim /* 8-byte device entries */ 924d6dd1baeSJung-uk Kim 925d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_PAD8 = 64, 926d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_NOT_USED = 65, 927d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ 928d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ 929d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ 930d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ 931cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses ACPI_IVRS_DEVICE8C */ 932cfd1ed46SJung-uk Kim 933cfd1ed46SJung-uk Kim /* Variable-length device entries */ 934cfd1ed46SJung-uk Kim 935cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */ 936d6dd1baeSJung-uk Kim }; 937d6dd1baeSJung-uk Kim 938d6dd1baeSJung-uk Kim /* Values for Data field above */ 939d6dd1baeSJung-uk Kim 940d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS (1) 941d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS (1<<1) 942d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS (1<<2) 943d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT (3<<4) 944d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS (1<<6) 945d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS (1<<7) 946d6dd1baeSJung-uk Kim 947d6dd1baeSJung-uk Kim 948d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */ 949d6dd1baeSJung-uk Kim 950d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4 951d6dd1baeSJung-uk Kim { 952d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 953d6dd1baeSJung-uk Kim 954d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4; 955d6dd1baeSJung-uk Kim 956d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */ 957d6dd1baeSJung-uk Kim 958d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a 959d6dd1baeSJung-uk Kim { 960d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 961d6dd1baeSJung-uk Kim UINT8 Reserved1; 962d6dd1baeSJung-uk Kim UINT16 UsedId; 963d6dd1baeSJung-uk Kim UINT8 Reserved2; 964d6dd1baeSJung-uk Kim 965d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A; 966d6dd1baeSJung-uk Kim 967d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */ 968d6dd1baeSJung-uk Kim 969d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b 970d6dd1baeSJung-uk Kim { 971d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 972d6dd1baeSJung-uk Kim UINT32 ExtendedData; 973d6dd1baeSJung-uk Kim 974d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B; 975d6dd1baeSJung-uk Kim 976d6dd1baeSJung-uk Kim /* Values for ExtendedData above */ 977d6dd1baeSJung-uk Kim 978d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED (1<<31) 979d6dd1baeSJung-uk Kim 980d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */ 981d6dd1baeSJung-uk Kim 982d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c 983d6dd1baeSJung-uk Kim { 984d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 985d6dd1baeSJung-uk Kim UINT8 Handle; 986d6dd1baeSJung-uk Kim UINT16 UsedId; 987d6dd1baeSJung-uk Kim UINT8 Variety; 988d6dd1baeSJung-uk Kim 989d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C; 990d6dd1baeSJung-uk Kim 991d6dd1baeSJung-uk Kim /* Values for Variety field above */ 992d6dd1baeSJung-uk Kim 993d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC 1 994d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET 2 995d6dd1baeSJung-uk Kim 996cfd1ed46SJung-uk Kim /* Type 240: variable-length device entry */ 997cfd1ed46SJung-uk Kim 998cfd1ed46SJung-uk Kim typedef struct acpi_ivrs_device_hid 999cfd1ed46SJung-uk Kim { 1000cfd1ed46SJung-uk Kim ACPI_IVRS_DE_HEADER Header; 1001cfd1ed46SJung-uk Kim UINT64 AcpiHid; 1002cfd1ed46SJung-uk Kim UINT64 AcpiCid; 1003cfd1ed46SJung-uk Kim UINT8 UidType; 1004cfd1ed46SJung-uk Kim UINT8 UidLength; 1005cfd1ed46SJung-uk Kim 1006cfd1ed46SJung-uk Kim } ACPI_IVRS_DEVICE_HID; 1007cfd1ed46SJung-uk Kim 10081970d693SJung-uk Kim /* Values for UidType above */ 10091970d693SJung-uk Kim 10101970d693SJung-uk Kim #define ACPI_IVRS_UID_NOT_PRESENT 0 10111970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_INTEGER 1 10121970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_STRING 2 1013d6dd1baeSJung-uk Kim 1014d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 1015d6dd1baeSJung-uk Kim 1016d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory 1017d6dd1baeSJung-uk Kim { 1018d6dd1baeSJung-uk Kim ACPI_IVRS_HEADER Header; 1019d6dd1baeSJung-uk Kim UINT16 AuxData; 1020d6dd1baeSJung-uk Kim UINT64 Reserved; 1021d6dd1baeSJung-uk Kim UINT64 StartAddress; 1022d6dd1baeSJung-uk Kim UINT64 MemoryLength; 1023d6dd1baeSJung-uk Kim 1024d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY; 1025d6dd1baeSJung-uk Kim 1026d6dd1baeSJung-uk Kim 1027d6dd1baeSJung-uk Kim /******************************************************************************* 1028d6dd1baeSJung-uk Kim * 1029313a0c13SJung-uk Kim * LPIT - Low Power Idle Table 1030313a0c13SJung-uk Kim * 1031a371a5fdSJung-uk Kim * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 1032313a0c13SJung-uk Kim * 1033313a0c13SJung-uk Kim ******************************************************************************/ 1034313a0c13SJung-uk Kim 1035313a0c13SJung-uk Kim typedef struct acpi_table_lpit 1036313a0c13SJung-uk Kim { 1037313a0c13SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1038313a0c13SJung-uk Kim 1039313a0c13SJung-uk Kim } ACPI_TABLE_LPIT; 1040313a0c13SJung-uk Kim 1041313a0c13SJung-uk Kim 1042313a0c13SJung-uk Kim /* LPIT subtable header */ 1043313a0c13SJung-uk Kim 1044313a0c13SJung-uk Kim typedef struct acpi_lpit_header 1045313a0c13SJung-uk Kim { 1046313a0c13SJung-uk Kim UINT32 Type; /* Subtable type */ 1047313a0c13SJung-uk Kim UINT32 Length; /* Subtable length */ 1048313a0c13SJung-uk Kim UINT16 UniqueId; 1049313a0c13SJung-uk Kim UINT16 Reserved; 1050313a0c13SJung-uk Kim UINT32 Flags; 1051313a0c13SJung-uk Kim 1052313a0c13SJung-uk Kim } ACPI_LPIT_HEADER; 1053313a0c13SJung-uk Kim 1054313a0c13SJung-uk Kim /* Values for subtable Type above */ 1055313a0c13SJung-uk Kim 1056313a0c13SJung-uk Kim enum AcpiLpitType 1057313a0c13SJung-uk Kim { 1058313a0c13SJung-uk Kim ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 1059a371a5fdSJung-uk Kim ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 1060313a0c13SJung-uk Kim }; 1061313a0c13SJung-uk Kim 1062313a0c13SJung-uk Kim /* Masks for Flags field above */ 1063313a0c13SJung-uk Kim 1064313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED (1) 1065313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER (1<<1) 1066313a0c13SJung-uk Kim 1067313a0c13SJung-uk Kim /* 1068313a0c13SJung-uk Kim * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER 1069313a0c13SJung-uk Kim */ 1070313a0c13SJung-uk Kim 1071313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */ 1072313a0c13SJung-uk Kim 1073313a0c13SJung-uk Kim typedef struct acpi_lpit_native 1074313a0c13SJung-uk Kim { 1075313a0c13SJung-uk Kim ACPI_LPIT_HEADER Header; 1076313a0c13SJung-uk Kim ACPI_GENERIC_ADDRESS EntryTrigger; 1077313a0c13SJung-uk Kim UINT32 Residency; 1078313a0c13SJung-uk Kim UINT32 Latency; 1079313a0c13SJung-uk Kim ACPI_GENERIC_ADDRESS ResidencyCounter; 1080313a0c13SJung-uk Kim UINT64 CounterFrequency; 1081313a0c13SJung-uk Kim 1082313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE; 1083313a0c13SJung-uk Kim 1084313a0c13SJung-uk Kim 1085313a0c13SJung-uk Kim /******************************************************************************* 1086313a0c13SJung-uk Kim * 1087ff879b07SJung-uk Kim * MADT - Multiple APIC Description Table 1088ff879b07SJung-uk Kim * Version 3 1089ff879b07SJung-uk Kim * 1090ff879b07SJung-uk Kim ******************************************************************************/ 1091ff879b07SJung-uk Kim 1092ff879b07SJung-uk Kim typedef struct acpi_table_madt 1093ff879b07SJung-uk Kim { 1094ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1095ff879b07SJung-uk Kim UINT32 Address; /* Physical address of local APIC */ 1096ff879b07SJung-uk Kim UINT32 Flags; 1097ff879b07SJung-uk Kim 1098ff879b07SJung-uk Kim } ACPI_TABLE_MADT; 1099ff879b07SJung-uk Kim 1100ff879b07SJung-uk Kim /* Masks for Flags field above */ 1101ff879b07SJung-uk Kim 1102ff879b07SJung-uk Kim #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 1103ff879b07SJung-uk Kim 1104ff879b07SJung-uk Kim /* Values for PCATCompat flag */ 1105ff879b07SJung-uk Kim 1106ff879b07SJung-uk Kim #define ACPI_MADT_DUAL_PIC 1 1107ff879b07SJung-uk Kim #define ACPI_MADT_MULTIPLE_APIC 0 1108ff879b07SJung-uk Kim 1109ff879b07SJung-uk Kim 1110ff879b07SJung-uk Kim /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 1111ff879b07SJung-uk Kim 1112ff879b07SJung-uk Kim enum AcpiMadtType 1113ff879b07SJung-uk Kim { 1114ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC = 0, 1115ff879b07SJung-uk Kim ACPI_MADT_TYPE_IO_APIC = 1, 1116ff879b07SJung-uk Kim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 1117ff879b07SJung-uk Kim ACPI_MADT_TYPE_NMI_SOURCE = 3, 1118ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 1119ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 1120ff879b07SJung-uk Kim ACPI_MADT_TYPE_IO_SAPIC = 6, 1121ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 1122ff879b07SJung-uk Kim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 1123ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 1124ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 1125ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 1126ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 1127ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 1128ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 1129ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 1130cfd1ed46SJung-uk Kim ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, 11319a4bc520SJung-uk Kim ACPI_MADT_TYPE_CORE_PIC = 17, 11329a4bc520SJung-uk Kim ACPI_MADT_TYPE_LIO_PIC = 18, 11339a4bc520SJung-uk Kim ACPI_MADT_TYPE_HT_PIC = 19, 11349a4bc520SJung-uk Kim ACPI_MADT_TYPE_EIO_PIC = 20, 11359a4bc520SJung-uk Kim ACPI_MADT_TYPE_MSI_PIC = 21, 11369a4bc520SJung-uk Kim ACPI_MADT_TYPE_BIO_PIC = 22, 11379a4bc520SJung-uk Kim ACPI_MADT_TYPE_LPC_PIC = 23, 1138722b1667SJung-uk Kim ACPI_MADT_TYPE_RINTC = 24, 1139*07c64d74SJung-uk Kim ACPI_MADT_TYPE_IMSIC = 25, 1140*07c64d74SJung-uk Kim ACPI_MADT_TYPE_APLIC = 26, 1141*07c64d74SJung-uk Kim ACPI_MADT_TYPE_PLIC = 27, 1142*07c64d74SJung-uk Kim ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */ 1143ab71bbb7SJung-uk Kim ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */ 1144ff879b07SJung-uk Kim }; 1145ff879b07SJung-uk Kim 1146ff879b07SJung-uk Kim 1147ff879b07SJung-uk Kim /* 1148ff879b07SJung-uk Kim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1149ff879b07SJung-uk Kim */ 1150ff879b07SJung-uk Kim 1151ff879b07SJung-uk Kim /* 0: Processor Local APIC */ 1152ff879b07SJung-uk Kim 1153ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic 1154ff879b07SJung-uk Kim { 1155ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1156ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 1157ff879b07SJung-uk Kim UINT8 Id; /* Processor's local APIC id */ 1158ff879b07SJung-uk Kim UINT32 LapicFlags; 1159ff879b07SJung-uk Kim 1160ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC; 1161ff879b07SJung-uk Kim 1162ff879b07SJung-uk Kim 1163ff879b07SJung-uk Kim /* 1: IO APIC */ 1164ff879b07SJung-uk Kim 1165ff879b07SJung-uk Kim typedef struct acpi_madt_io_apic 1166ff879b07SJung-uk Kim { 1167ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1168ff879b07SJung-uk Kim UINT8 Id; /* I/O APIC ID */ 1169ff879b07SJung-uk Kim UINT8 Reserved; /* Reserved - must be zero */ 1170ff879b07SJung-uk Kim UINT32 Address; /* APIC physical address */ 1171ff879b07SJung-uk Kim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 1172ff879b07SJung-uk Kim 1173ff879b07SJung-uk Kim } ACPI_MADT_IO_APIC; 1174ff879b07SJung-uk Kim 1175ff879b07SJung-uk Kim 1176ff879b07SJung-uk Kim /* 2: Interrupt Override */ 1177ff879b07SJung-uk Kim 1178ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_override 1179ff879b07SJung-uk Kim { 1180ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1181ff879b07SJung-uk Kim UINT8 Bus; /* 0 - ISA */ 1182ff879b07SJung-uk Kim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 1183ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 1184ff879b07SJung-uk Kim UINT16 IntiFlags; 1185ff879b07SJung-uk Kim 1186ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_OVERRIDE; 1187ff879b07SJung-uk Kim 1188ff879b07SJung-uk Kim 1189ff879b07SJung-uk Kim /* 3: NMI Source */ 1190ff879b07SJung-uk Kim 1191ff879b07SJung-uk Kim typedef struct acpi_madt_nmi_source 1192ff879b07SJung-uk Kim { 1193ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1194ff879b07SJung-uk Kim UINT16 IntiFlags; 1195ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 1196ff879b07SJung-uk Kim 1197ff879b07SJung-uk Kim } ACPI_MADT_NMI_SOURCE; 1198ff879b07SJung-uk Kim 1199ff879b07SJung-uk Kim 1200ff879b07SJung-uk Kim /* 4: Local APIC NMI */ 1201ff879b07SJung-uk Kim 1202ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_nmi 1203ff879b07SJung-uk Kim { 1204ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1205ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 1206ff879b07SJung-uk Kim UINT16 IntiFlags; 1207ff879b07SJung-uk Kim UINT8 Lint; /* LINTn to which NMI is connected */ 1208ff879b07SJung-uk Kim 1209ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_NMI; 1210ff879b07SJung-uk Kim 1211ff879b07SJung-uk Kim 1212ff879b07SJung-uk Kim /* 5: Address Override */ 1213ff879b07SJung-uk Kim 1214ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_override 1215ff879b07SJung-uk Kim { 1216ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1217ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 1218ff879b07SJung-uk Kim UINT64 Address; /* APIC physical address */ 1219ff879b07SJung-uk Kim 1220ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_OVERRIDE; 1221ff879b07SJung-uk Kim 1222ff879b07SJung-uk Kim 1223ff879b07SJung-uk Kim /* 6: I/O Sapic */ 1224ff879b07SJung-uk Kim 1225ff879b07SJung-uk Kim typedef struct acpi_madt_io_sapic 1226ff879b07SJung-uk Kim { 1227ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1228ff879b07SJung-uk Kim UINT8 Id; /* I/O SAPIC ID */ 1229ff879b07SJung-uk Kim UINT8 Reserved; /* Reserved, must be zero */ 1230ff879b07SJung-uk Kim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 1231ff879b07SJung-uk Kim UINT64 Address; /* SAPIC physical address */ 1232ff879b07SJung-uk Kim 1233ff879b07SJung-uk Kim } ACPI_MADT_IO_SAPIC; 1234ff879b07SJung-uk Kim 1235ff879b07SJung-uk Kim 1236ff879b07SJung-uk Kim /* 7: Local Sapic */ 1237ff879b07SJung-uk Kim 1238ff879b07SJung-uk Kim typedef struct acpi_madt_local_sapic 1239ff879b07SJung-uk Kim { 1240ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1241ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 1242ff879b07SJung-uk Kim UINT8 Id; /* SAPIC ID */ 1243ff879b07SJung-uk Kim UINT8 Eid; /* SAPIC EID */ 1244ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 1245ff879b07SJung-uk Kim UINT32 LapicFlags; 1246ff879b07SJung-uk Kim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 1247722b1667SJung-uk Kim char UidString[]; /* String UID - ACPI 3.0 */ 1248ff879b07SJung-uk Kim 1249ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_SAPIC; 1250ff879b07SJung-uk Kim 1251ff879b07SJung-uk Kim 1252ff879b07SJung-uk Kim /* 8: Platform Interrupt Source */ 1253ff879b07SJung-uk Kim 1254ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_source 1255ff879b07SJung-uk Kim { 1256ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1257ff879b07SJung-uk Kim UINT16 IntiFlags; 1258ff879b07SJung-uk Kim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 1259ff879b07SJung-uk Kim UINT8 Id; /* Processor ID */ 1260ff879b07SJung-uk Kim UINT8 Eid; /* Processor EID */ 1261ff879b07SJung-uk Kim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 1262ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 1263ff879b07SJung-uk Kim UINT32 Flags; /* Interrupt Source Flags */ 1264ff879b07SJung-uk Kim 1265ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_SOURCE; 1266ff879b07SJung-uk Kim 1267ff879b07SJung-uk Kim /* Masks for Flags field above */ 1268ff879b07SJung-uk Kim 1269ff879b07SJung-uk Kim #define ACPI_MADT_CPEI_OVERRIDE (1) 1270ff879b07SJung-uk Kim 1271ff879b07SJung-uk Kim 1272ff879b07SJung-uk Kim /* 9: Processor Local X2APIC (ACPI 4.0) */ 1273ff879b07SJung-uk Kim 1274ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic 1275ff879b07SJung-uk Kim { 1276ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1277ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1278ff879b07SJung-uk Kim UINT32 LocalApicId; /* Processor x2APIC ID */ 1279ff879b07SJung-uk Kim UINT32 LapicFlags; 1280ff879b07SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 1281ff879b07SJung-uk Kim 1282ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC; 1283ff879b07SJung-uk Kim 1284ff879b07SJung-uk Kim 1285ff879b07SJung-uk Kim /* 10: Local X2APIC NMI (ACPI 4.0) */ 1286ff879b07SJung-uk Kim 1287ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic_nmi 1288ff879b07SJung-uk Kim { 1289ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1290ff879b07SJung-uk Kim UINT16 IntiFlags; 1291ff879b07SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 1292ff879b07SJung-uk Kim UINT8 Lint; /* LINTn to which NMI is connected */ 1293ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved - must be zero */ 1294ff879b07SJung-uk Kim 1295ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC_NMI; 1296ff879b07SJung-uk Kim 1297ff879b07SJung-uk Kim 1298722b1667SJung-uk Kim /* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */ 1299ff879b07SJung-uk Kim 1300ff879b07SJung-uk Kim typedef struct acpi_madt_generic_interrupt 1301ff879b07SJung-uk Kim { 1302ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1303ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1304ff879b07SJung-uk Kim UINT32 CpuInterfaceNumber; 1305ff879b07SJung-uk Kim UINT32 Uid; 1306ff879b07SJung-uk Kim UINT32 Flags; 1307ff879b07SJung-uk Kim UINT32 ParkingVersion; 1308ff879b07SJung-uk Kim UINT32 PerformanceInterrupt; 1309ff879b07SJung-uk Kim UINT64 ParkedAddress; 1310ff879b07SJung-uk Kim UINT64 BaseAddress; 1311ff879b07SJung-uk Kim UINT64 GicvBaseAddress; 1312ff879b07SJung-uk Kim UINT64 GichBaseAddress; 1313ff879b07SJung-uk Kim UINT32 VgicInterrupt; 1314ff879b07SJung-uk Kim UINT64 GicrBaseAddress; 1315ff879b07SJung-uk Kim UINT64 ArmMpidr; 1316ff879b07SJung-uk Kim UINT8 EfficiencyClass; 1317cd6518c7SJung-uk Kim UINT8 Reserved2[1]; 1318cd6518c7SJung-uk Kim UINT16 SpeInterrupt; /* ACPI 6.3 */ 1319722b1667SJung-uk Kim UINT16 TrbeInterrupt; /* ACPI 6.5 */ 1320ff879b07SJung-uk Kim 1321ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_INTERRUPT; 1322ff879b07SJung-uk Kim 1323ff879b07SJung-uk Kim /* Masks for Flags field above */ 1324ff879b07SJung-uk Kim 1325ff879b07SJung-uk Kim /* ACPI_MADT_ENABLED (1) Processor is usable if set */ 1326ff879b07SJung-uk Kim #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 1327ff879b07SJung-uk Kim #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 1328ff879b07SJung-uk Kim 1329ff879b07SJung-uk Kim 1330ff879b07SJung-uk Kim /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 1331ff879b07SJung-uk Kim 1332ff879b07SJung-uk Kim typedef struct acpi_madt_generic_distributor 1333ff879b07SJung-uk Kim { 1334ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1335ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1336ff879b07SJung-uk Kim UINT32 GicId; 1337ff879b07SJung-uk Kim UINT64 BaseAddress; 1338ff879b07SJung-uk Kim UINT32 GlobalIrqBase; 1339ff879b07SJung-uk Kim UINT8 Version; 1340ff879b07SJung-uk Kim UINT8 Reserved2[3]; /* Reserved - must be zero */ 1341ff879b07SJung-uk Kim 1342ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_DISTRIBUTOR; 1343ff879b07SJung-uk Kim 1344ff879b07SJung-uk Kim /* Values for Version field above */ 1345ff879b07SJung-uk Kim 1346ff879b07SJung-uk Kim enum AcpiMadtGicVersion 1347ff879b07SJung-uk Kim { 1348ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_NONE = 0, 1349ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V1 = 1, 1350ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V2 = 2, 1351ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V3 = 3, 1352ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V4 = 4, 1353ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1354ff879b07SJung-uk Kim }; 1355ff879b07SJung-uk Kim 1356ff879b07SJung-uk Kim 1357ff879b07SJung-uk Kim /* 13: Generic MSI Frame (ACPI 5.1) */ 1358ff879b07SJung-uk Kim 1359ff879b07SJung-uk Kim typedef struct acpi_madt_generic_msi_frame 1360ff879b07SJung-uk Kim { 1361ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1362ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1363ff879b07SJung-uk Kim UINT32 MsiFrameId; 1364ff879b07SJung-uk Kim UINT64 BaseAddress; 1365ff879b07SJung-uk Kim UINT32 Flags; 1366ff879b07SJung-uk Kim UINT16 SpiCount; 1367ff879b07SJung-uk Kim UINT16 SpiBase; 1368ff879b07SJung-uk Kim 1369ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_MSI_FRAME; 1370ff879b07SJung-uk Kim 1371ff879b07SJung-uk Kim /* Masks for Flags field above */ 1372ff879b07SJung-uk Kim 1373ff879b07SJung-uk Kim #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1374ff879b07SJung-uk Kim 1375ff879b07SJung-uk Kim 1376ff879b07SJung-uk Kim /* 14: Generic Redistributor (ACPI 5.1) */ 1377ff879b07SJung-uk Kim 1378ff879b07SJung-uk Kim typedef struct acpi_madt_generic_redistributor 1379ff879b07SJung-uk Kim { 1380ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1381ff879b07SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 1382ff879b07SJung-uk Kim UINT64 BaseAddress; 1383ff879b07SJung-uk Kim UINT32 Length; 1384ff879b07SJung-uk Kim 1385ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_REDISTRIBUTOR; 1386ff879b07SJung-uk Kim 1387ff879b07SJung-uk Kim 1388ff879b07SJung-uk Kim /* 15: Generic Translator (ACPI 6.0) */ 1389ff879b07SJung-uk Kim 1390ff879b07SJung-uk Kim typedef struct acpi_madt_generic_translator 1391ff879b07SJung-uk Kim { 1392ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1393ff879b07SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 1394ff879b07SJung-uk Kim UINT32 TranslationId; 1395ff879b07SJung-uk Kim UINT64 BaseAddress; 1396ff879b07SJung-uk Kim UINT32 Reserved2; 1397ff879b07SJung-uk Kim 1398ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_TRANSLATOR; 1399ff879b07SJung-uk Kim 1400cfd1ed46SJung-uk Kim /* 16: Multiprocessor wakeup (ACPI 6.4) */ 1401cfd1ed46SJung-uk Kim 1402cfd1ed46SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup 1403cfd1ed46SJung-uk Kim { 1404cfd1ed46SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1405cfd1ed46SJung-uk Kim UINT16 MailboxVersion; 1406cfd1ed46SJung-uk Kim UINT32 Reserved; /* reserved - must be zero */ 1407cfd1ed46SJung-uk Kim UINT64 BaseAddress; 1408cfd1ed46SJung-uk Kim 1409cfd1ed46SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP; 1410cfd1ed46SJung-uk Kim 14111970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032 14121970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048 14131970d693SJung-uk Kim 14141970d693SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup_mailbox 14151970d693SJung-uk Kim { 14161970d693SJung-uk Kim UINT16 Command; 14171970d693SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 14181970d693SJung-uk Kim UINT32 ApicId; 14191970d693SJung-uk Kim UINT64 WakeupVector; 14201970d693SJung-uk Kim UINT8 ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */ 14211970d693SJung-uk Kim UINT8 ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */ 14221970d693SJung-uk Kim 14231970d693SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX; 14241970d693SJung-uk Kim 14251970d693SJung-uk Kim #define ACPI_MP_WAKE_COMMAND_WAKEUP 1 14261970d693SJung-uk Kim 14279a4bc520SJung-uk Kim /* 17: CPU Core Interrupt Controller (ACPI 6.5) */ 14289a4bc520SJung-uk Kim 14299a4bc520SJung-uk Kim typedef struct acpi_madt_core_pic { 14309a4bc520SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 14319a4bc520SJung-uk Kim UINT8 Version; 14329a4bc520SJung-uk Kim UINT32 ProcessorId; 14339a4bc520SJung-uk Kim UINT32 CoreId; 14349a4bc520SJung-uk Kim UINT32 Flags; 14359a4bc520SJung-uk Kim } ACPI_MADT_CORE_PIC; 14369a4bc520SJung-uk Kim 14379a4bc520SJung-uk Kim /* Values for Version field above */ 14389a4bc520SJung-uk Kim 14399a4bc520SJung-uk Kim enum AcpiMadtCorePicVersion { 14409a4bc520SJung-uk Kim ACPI_MADT_CORE_PIC_VERSION_NONE = 0, 14419a4bc520SJung-uk Kim ACPI_MADT_CORE_PIC_VERSION_V1 = 1, 14429a4bc520SJung-uk Kim ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 14439a4bc520SJung-uk Kim }; 14449a4bc520SJung-uk Kim 14459a4bc520SJung-uk Kim /* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */ 14469a4bc520SJung-uk Kim 14479a4bc520SJung-uk Kim typedef struct acpi_madt_lio_pic { 14489a4bc520SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 14499a4bc520SJung-uk Kim UINT8 Version; 14509a4bc520SJung-uk Kim UINT64 Address; 14519a4bc520SJung-uk Kim UINT16 Size; 14529a4bc520SJung-uk Kim UINT8 Cascade[2]; 14539a4bc520SJung-uk Kim UINT32 CascadeMap[2]; 14549a4bc520SJung-uk Kim } ACPI_MADT_LIO_PIC; 14559a4bc520SJung-uk Kim 14569a4bc520SJung-uk Kim /* Values for Version field above */ 14579a4bc520SJung-uk Kim 14589a4bc520SJung-uk Kim enum AcpiMadtLioPicVersion { 14599a4bc520SJung-uk Kim ACPI_MADT_LIO_PIC_VERSION_NONE = 0, 14609a4bc520SJung-uk Kim ACPI_MADT_LIO_PIC_VERSION_V1 = 1, 14619a4bc520SJung-uk Kim ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 14629a4bc520SJung-uk Kim }; 14639a4bc520SJung-uk Kim 14649a4bc520SJung-uk Kim /* 19: HT Interrupt Controller (ACPI 6.5) */ 14659a4bc520SJung-uk Kim 14669a4bc520SJung-uk Kim typedef struct acpi_madt_ht_pic { 14679a4bc520SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 14689a4bc520SJung-uk Kim UINT8 Version; 14699a4bc520SJung-uk Kim UINT64 Address; 14709a4bc520SJung-uk Kim UINT16 Size; 14719a4bc520SJung-uk Kim UINT8 Cascade[8]; 14729a4bc520SJung-uk Kim } ACPI_MADT_HT_PIC; 14739a4bc520SJung-uk Kim 14749a4bc520SJung-uk Kim /* Values for Version field above */ 14759a4bc520SJung-uk Kim 14769a4bc520SJung-uk Kim enum AcpiMadtHtPicVersion { 14779a4bc520SJung-uk Kim ACPI_MADT_HT_PIC_VERSION_NONE = 0, 14789a4bc520SJung-uk Kim ACPI_MADT_HT_PIC_VERSION_V1 = 1, 14799a4bc520SJung-uk Kim ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 14809a4bc520SJung-uk Kim }; 14819a4bc520SJung-uk Kim 14829a4bc520SJung-uk Kim /* 20: Extend I/O Interrupt Controller (ACPI 6.5) */ 14839a4bc520SJung-uk Kim 14849a4bc520SJung-uk Kim typedef struct acpi_madt_eio_pic { 14859a4bc520SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 14869a4bc520SJung-uk Kim UINT8 Version; 14879a4bc520SJung-uk Kim UINT8 Cascade; 14889a4bc520SJung-uk Kim UINT8 Node; 14899a4bc520SJung-uk Kim UINT64 NodeMap; 14909a4bc520SJung-uk Kim } ACPI_MADT_EIO_PIC; 14919a4bc520SJung-uk Kim 14929a4bc520SJung-uk Kim /* Values for Version field above */ 14939a4bc520SJung-uk Kim 14949a4bc520SJung-uk Kim enum AcpiMadtEioPicVersion { 14959a4bc520SJung-uk Kim ACPI_MADT_EIO_PIC_VERSION_NONE = 0, 14969a4bc520SJung-uk Kim ACPI_MADT_EIO_PIC_VERSION_V1 = 1, 14979a4bc520SJung-uk Kim ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 14989a4bc520SJung-uk Kim }; 14999a4bc520SJung-uk Kim 15009a4bc520SJung-uk Kim /* 21: MSI Interrupt Controller (ACPI 6.5) */ 15019a4bc520SJung-uk Kim 15029a4bc520SJung-uk Kim typedef struct acpi_madt_msi_pic { 15039a4bc520SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 15049a4bc520SJung-uk Kim UINT8 Version; 15059a4bc520SJung-uk Kim UINT64 MsgAddress; 15069a4bc520SJung-uk Kim UINT32 Start; 15079a4bc520SJung-uk Kim UINT32 Count; 15089a4bc520SJung-uk Kim } ACPI_MADT_MSI_PIC; 15099a4bc520SJung-uk Kim 15109a4bc520SJung-uk Kim /* Values for Version field above */ 15119a4bc520SJung-uk Kim 15129a4bc520SJung-uk Kim enum AcpiMadtMsiPicVersion { 15139a4bc520SJung-uk Kim ACPI_MADT_MSI_PIC_VERSION_NONE = 0, 15149a4bc520SJung-uk Kim ACPI_MADT_MSI_PIC_VERSION_V1 = 1, 15159a4bc520SJung-uk Kim ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 15169a4bc520SJung-uk Kim }; 15179a4bc520SJung-uk Kim 15189a4bc520SJung-uk Kim /* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */ 15199a4bc520SJung-uk Kim 15209a4bc520SJung-uk Kim typedef struct acpi_madt_bio_pic { 15219a4bc520SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 15229a4bc520SJung-uk Kim UINT8 Version; 15239a4bc520SJung-uk Kim UINT64 Address; 15249a4bc520SJung-uk Kim UINT16 Size; 15259a4bc520SJung-uk Kim UINT16 Id; 15269a4bc520SJung-uk Kim UINT16 GsiBase; 15279a4bc520SJung-uk Kim } ACPI_MADT_BIO_PIC; 15289a4bc520SJung-uk Kim 15299a4bc520SJung-uk Kim /* Values for Version field above */ 15309a4bc520SJung-uk Kim 15319a4bc520SJung-uk Kim enum AcpiMadtBioPicVersion { 15329a4bc520SJung-uk Kim ACPI_MADT_BIO_PIC_VERSION_NONE = 0, 15339a4bc520SJung-uk Kim ACPI_MADT_BIO_PIC_VERSION_V1 = 1, 15349a4bc520SJung-uk Kim ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 15359a4bc520SJung-uk Kim }; 15369a4bc520SJung-uk Kim 15379a4bc520SJung-uk Kim /* 23: LPC Interrupt Controller (ACPI 6.5) */ 15389a4bc520SJung-uk Kim 15399a4bc520SJung-uk Kim typedef struct acpi_madt_lpc_pic { 15409a4bc520SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 15419a4bc520SJung-uk Kim UINT8 Version; 15429a4bc520SJung-uk Kim UINT64 Address; 15439a4bc520SJung-uk Kim UINT16 Size; 15449a4bc520SJung-uk Kim UINT8 Cascade; 15459a4bc520SJung-uk Kim } ACPI_MADT_LPC_PIC; 15469a4bc520SJung-uk Kim 15479a4bc520SJung-uk Kim /* Values for Version field above */ 15489a4bc520SJung-uk Kim 15499a4bc520SJung-uk Kim enum AcpiMadtLpcPicVersion { 15509a4bc520SJung-uk Kim ACPI_MADT_LPC_PIC_VERSION_NONE = 0, 15519a4bc520SJung-uk Kim ACPI_MADT_LPC_PIC_VERSION_V1 = 1, 15529a4bc520SJung-uk Kim ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 15539a4bc520SJung-uk Kim }; 15549a4bc520SJung-uk Kim 1555722b1667SJung-uk Kim /* 24: RISC-V INTC */ 1556*07c64d74SJung-uk Kim typedef struct acpi_madt_rintc { 1557722b1667SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1558722b1667SJung-uk Kim UINT8 Version; 1559722b1667SJung-uk Kim UINT8 Reserved; 1560722b1667SJung-uk Kim UINT32 Flags; 1561722b1667SJung-uk Kim UINT64 HartId; 1562722b1667SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 1563*07c64d74SJung-uk Kim UINT32 ExtIntcId; /* External INTC Id */ 1564*07c64d74SJung-uk Kim UINT64 ImsicAddr; /* IMSIC base address */ 1565*07c64d74SJung-uk Kim UINT32 ImsicSize; /* IMSIC size */ 1566*07c64d74SJung-uk Kim } ACPI_MADT_RINTC; 1567722b1667SJung-uk Kim 1568722b1667SJung-uk Kim /* Values for RISC-V INTC Version field above */ 1569722b1667SJung-uk Kim 1570722b1667SJung-uk Kim enum AcpiMadtRintcVersion { 1571722b1667SJung-uk Kim ACPI_MADT_RINTC_VERSION_NONE = 0, 1572722b1667SJung-uk Kim ACPI_MADT_RINTC_VERSION_V1 = 1, 1573722b1667SJung-uk Kim ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1574722b1667SJung-uk Kim }; 1575722b1667SJung-uk Kim 1576*07c64d74SJung-uk Kim /* 25: RISC-V IMSIC */ 1577*07c64d74SJung-uk Kim typedef struct acpi_madt_imsic { 1578*07c64d74SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1579*07c64d74SJung-uk Kim UINT8 Version; 1580*07c64d74SJung-uk Kim UINT8 Reserved; 1581*07c64d74SJung-uk Kim UINT32 Flags; 1582*07c64d74SJung-uk Kim UINT16 NumIds; 1583*07c64d74SJung-uk Kim UINT16 NumGuestIds; 1584*07c64d74SJung-uk Kim UINT8 GuestIndexBits; 1585*07c64d74SJung-uk Kim UINT8 HartIndexBits; 1586*07c64d74SJung-uk Kim UINT8 GroupIndexBits; 1587*07c64d74SJung-uk Kim UINT8 GroupIndexShift; 1588*07c64d74SJung-uk Kim } ACPI_MADT_IMSIC; 1589*07c64d74SJung-uk Kim 1590*07c64d74SJung-uk Kim /* 26: RISC-V APLIC */ 1591*07c64d74SJung-uk Kim typedef struct acpi_madt_aplic { 1592*07c64d74SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1593*07c64d74SJung-uk Kim UINT8 Version; 1594*07c64d74SJung-uk Kim UINT8 Id; 1595*07c64d74SJung-uk Kim UINT32 Flags; 1596*07c64d74SJung-uk Kim UINT8 HwId[8]; 1597*07c64d74SJung-uk Kim UINT16 NumIdcs; 1598*07c64d74SJung-uk Kim UINT16 NumSources; 1599*07c64d74SJung-uk Kim UINT32 GsiBase; 1600*07c64d74SJung-uk Kim UINT64 BaseAddr; 1601*07c64d74SJung-uk Kim UINT32 Size; 1602*07c64d74SJung-uk Kim } ACPI_MADT_APLIC; 1603*07c64d74SJung-uk Kim 1604*07c64d74SJung-uk Kim /* 27: RISC-V PLIC */ 1605*07c64d74SJung-uk Kim typedef struct acpi_madt_plic { 1606*07c64d74SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1607*07c64d74SJung-uk Kim UINT8 Version; 1608*07c64d74SJung-uk Kim UINT8 Id; 1609*07c64d74SJung-uk Kim UINT8 HwId[8]; 1610*07c64d74SJung-uk Kim UINT16 NumIrqs; 1611*07c64d74SJung-uk Kim UINT16 MaxPrio; 1612*07c64d74SJung-uk Kim UINT32 Flags; 1613*07c64d74SJung-uk Kim UINT32 Size; 1614*07c64d74SJung-uk Kim UINT64 BaseAddr; 1615*07c64d74SJung-uk Kim UINT32 GsiBase; 1616*07c64d74SJung-uk Kim } ACPI_MADT_PLIC; 1617*07c64d74SJung-uk Kim 1618*07c64d74SJung-uk Kim 16199a4bc520SJung-uk Kim /* 80: OEM data */ 1620ab71bbb7SJung-uk Kim 1621ab71bbb7SJung-uk Kim typedef struct acpi_madt_oem_data 1622ab71bbb7SJung-uk Kim { 1623722b1667SJung-uk Kim ACPI_FLEX_ARRAY(UINT8, OemData); 1624ab71bbb7SJung-uk Kim } ACPI_MADT_OEM_DATA; 1625ab71bbb7SJung-uk Kim 1626ff879b07SJung-uk Kim 1627ff879b07SJung-uk Kim /* 1628ff879b07SJung-uk Kim * Common flags fields for MADT subtables 1629ff879b07SJung-uk Kim */ 1630ff879b07SJung-uk Kim 1631ff879b07SJung-uk Kim /* MADT Local APIC flags */ 1632ff879b07SJung-uk Kim 1633ff879b07SJung-uk Kim #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 16341b7a2680SJung-uk Kim #define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */ 1635ff879b07SJung-uk Kim 1636ff879b07SJung-uk Kim /* MADT MPS INTI flags (IntiFlags) */ 1637ff879b07SJung-uk Kim 1638ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1639ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1640ff879b07SJung-uk Kim 1641ff879b07SJung-uk Kim /* Values for MPS INTI flags */ 1642ff879b07SJung-uk Kim 1643ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_CONFORMS 0 1644ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1645ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_RESERVED 2 1646ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1647ff879b07SJung-uk Kim 1648ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_CONFORMS (0) 1649ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_EDGE (1<<2) 1650ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1651ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1652ff879b07SJung-uk Kim 1653ff879b07SJung-uk Kim 1654ff879b07SJung-uk Kim /******************************************************************************* 1655ff879b07SJung-uk Kim * 1656313a0c13SJung-uk Kim * MCFG - PCI Memory Mapped Configuration table and subtable 1657d6dd1baeSJung-uk Kim * Version 1 1658d6dd1baeSJung-uk Kim * 1659d6dd1baeSJung-uk Kim * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 1660d6dd1baeSJung-uk Kim * 1661d6dd1baeSJung-uk Kim ******************************************************************************/ 1662d6dd1baeSJung-uk Kim 1663d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg 1664d6dd1baeSJung-uk Kim { 1665d6dd1baeSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1666d6dd1baeSJung-uk Kim UINT8 Reserved[8]; 1667d6dd1baeSJung-uk Kim 1668d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG; 1669d6dd1baeSJung-uk Kim 1670d6dd1baeSJung-uk Kim 1671d6dd1baeSJung-uk Kim /* Subtable */ 1672d6dd1baeSJung-uk Kim 1673d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation 1674d6dd1baeSJung-uk Kim { 1675d6dd1baeSJung-uk Kim UINT64 Address; /* Base address, processor-relative */ 1676d6dd1baeSJung-uk Kim UINT16 PciSegment; /* PCI segment group number */ 1677d6dd1baeSJung-uk Kim UINT8 StartBusNumber; /* Starting PCI Bus number */ 1678d6dd1baeSJung-uk Kim UINT8 EndBusNumber; /* Final PCI Bus number */ 1679d6dd1baeSJung-uk Kim UINT32 Reserved; 1680d6dd1baeSJung-uk Kim 1681d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION; 1682d6dd1baeSJung-uk Kim 1683d6dd1baeSJung-uk Kim 1684d6dd1baeSJung-uk Kim /******************************************************************************* 1685d6dd1baeSJung-uk Kim * 1686ca3cf4faSJung-uk Kim * MCHI - Management Controller Host Interface Table 1687ca3cf4faSJung-uk Kim * Version 1 1688ca3cf4faSJung-uk Kim * 1689ca3cf4faSJung-uk Kim * Conforms to "Management Component Transport Protocol (MCTP) Host 1690ca3cf4faSJung-uk Kim * Interface Specification", Revision 1.0.0a, October 13, 2009 1691ca3cf4faSJung-uk Kim * 1692ca3cf4faSJung-uk Kim ******************************************************************************/ 1693ca3cf4faSJung-uk Kim 1694ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi 1695ca3cf4faSJung-uk Kim { 1696ca3cf4faSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1697ca3cf4faSJung-uk Kim UINT8 InterfaceType; 1698ca3cf4faSJung-uk Kim UINT8 Protocol; 1699ca3cf4faSJung-uk Kim UINT64 ProtocolData; 1700ca3cf4faSJung-uk Kim UINT8 InterruptType; 1701ca3cf4faSJung-uk Kim UINT8 Gpe; 1702ca3cf4faSJung-uk Kim UINT8 PciDeviceFlag; 1703ca3cf4faSJung-uk Kim UINT32 GlobalInterrupt; 1704ca3cf4faSJung-uk Kim ACPI_GENERIC_ADDRESS ControlRegister; 1705ca3cf4faSJung-uk Kim UINT8 PciSegment; 1706ca3cf4faSJung-uk Kim UINT8 PciBus; 1707ca3cf4faSJung-uk Kim UINT8 PciDevice; 1708ca3cf4faSJung-uk Kim UINT8 PciFunction; 1709ca3cf4faSJung-uk Kim 1710ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI; 1711ca3cf4faSJung-uk Kim 1712722b1667SJung-uk Kim /******************************************************************************* 1713722b1667SJung-uk Kim * 1714722b1667SJung-uk Kim * MPAM - Memory System Resource Partitioning and Monitoring 1715722b1667SJung-uk Kim * 1716722b1667SJung-uk Kim * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0" 1717722b1667SJung-uk Kim * Document number: ARM DEN 0065, December, 2022. 1718722b1667SJung-uk Kim * 1719722b1667SJung-uk Kim ******************************************************************************/ 1720722b1667SJung-uk Kim 1721722b1667SJung-uk Kim /* MPAM RIS locator types. Table 11, Location types */ 1722722b1667SJung-uk Kim enum AcpiMpamLocatorType { 1723722b1667SJung-uk Kim ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0, 1724722b1667SJung-uk Kim ACPI_MPAM_LOCATION_TYPE_MEMORY = 1, 1725722b1667SJung-uk Kim ACPI_MPAM_LOCATION_TYPE_SMMU = 2, 1726722b1667SJung-uk Kim ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3, 1727722b1667SJung-uk Kim ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4, 1728722b1667SJung-uk Kim ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5, 1729722b1667SJung-uk Kim ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF 1730722b1667SJung-uk Kim }; 1731722b1667SJung-uk Kim 1732722b1667SJung-uk Kim /* MPAM Functional dependency descriptor. Table 10 */ 1733722b1667SJung-uk Kim typedef struct acpi_mpam_func_deps 1734722b1667SJung-uk Kim { 1735722b1667SJung-uk Kim UINT32 Producer; 1736722b1667SJung-uk Kim UINT32 Reserved; 1737722b1667SJung-uk Kim } ACPI_MPAM_FUNC_DEPS; 1738722b1667SJung-uk Kim 1739722b1667SJung-uk Kim /* MPAM Processor cache locator descriptor. Table 13 */ 1740722b1667SJung-uk Kim typedef struct acpi_mpam_resource_cache_locator 1741722b1667SJung-uk Kim { 1742722b1667SJung-uk Kim UINT64 CacheReference; 1743722b1667SJung-uk Kim UINT32 Reserved; 1744722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_CACHE_LOCATOR; 1745722b1667SJung-uk Kim 1746722b1667SJung-uk Kim /* MPAM Memory locator descriptor. Table 14 */ 1747722b1667SJung-uk Kim typedef struct acpi_mpam_resource_memory_locator 1748722b1667SJung-uk Kim { 1749722b1667SJung-uk Kim UINT64 ProximityDomain; 1750722b1667SJung-uk Kim UINT32 Reserved; 1751722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_MEMORY_LOCATOR; 1752722b1667SJung-uk Kim 1753722b1667SJung-uk Kim /* MPAM SMMU locator descriptor. Table 15 */ 1754722b1667SJung-uk Kim typedef struct acpi_mpam_resource_smmu_locator 1755722b1667SJung-uk Kim { 1756722b1667SJung-uk Kim UINT64 SmmuInterface; 1757722b1667SJung-uk Kim UINT32 Reserved; 1758722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_SMMU_INTERFACE; 1759722b1667SJung-uk Kim 1760722b1667SJung-uk Kim /* MPAM Memory-side cache locator descriptor. Table 16 */ 1761722b1667SJung-uk Kim typedef struct acpi_mpam_resource_memcache_locator 1762722b1667SJung-uk Kim { 1763722b1667SJung-uk Kim UINT8 Reserved[7]; 1764722b1667SJung-uk Kim UINT8 Level; 1765722b1667SJung-uk Kim UINT32 Reference; 1766722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE; 1767722b1667SJung-uk Kim 1768722b1667SJung-uk Kim /* MPAM ACPI device locator descriptor. Table 17 */ 1769722b1667SJung-uk Kim typedef struct acpi_mpam_resource_acpi_locator 1770722b1667SJung-uk Kim { 1771722b1667SJung-uk Kim UINT64 AcpiHwId; 1772722b1667SJung-uk Kim UINT32 AcpiUniqueId; 1773722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_ACPI_INTERFACE; 1774722b1667SJung-uk Kim 1775722b1667SJung-uk Kim /* MPAM Interconnect locator descriptor. Table 18 */ 1776722b1667SJung-uk Kim typedef struct acpi_mpam_resource_interconnect_locator 1777722b1667SJung-uk Kim { 1778722b1667SJung-uk Kim UINT64 InterConnectDescTblOff; 1779722b1667SJung-uk Kim UINT32 Reserved; 1780722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE; 1781722b1667SJung-uk Kim 1782722b1667SJung-uk Kim /* MPAM Locator structure. Table 12 */ 1783722b1667SJung-uk Kim typedef struct acpi_mpam_resource_generic_locator 1784722b1667SJung-uk Kim { 1785722b1667SJung-uk Kim UINT64 Descriptor1; 1786722b1667SJung-uk Kim UINT32 Descriptor2; 1787722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_GENERIC_LOCATOR; 1788722b1667SJung-uk Kim 1789722b1667SJung-uk Kim typedef union acpi_mpam_resource_locator 1790722b1667SJung-uk Kim { 1791722b1667SJung-uk Kim ACPI_MPAM_RESOURCE_CACHE_LOCATOR CacheLocator; 1792722b1667SJung-uk Kim ACPI_MPAM_RESOURCE_MEMORY_LOCATOR MemoryLocator; 1793722b1667SJung-uk Kim ACPI_MPAM_RESOURCE_SMMU_INTERFACE SmmuLocator; 1794722b1667SJung-uk Kim ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE MemCacheLocator; 1795722b1667SJung-uk Kim ACPI_MPAM_RESOURCE_ACPI_INTERFACE AcpiLocator; 1796722b1667SJung-uk Kim ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE InterconnectIfcLocator; 1797722b1667SJung-uk Kim ACPI_MPAM_RESOURCE_GENERIC_LOCATOR GenericLocator; 1798722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_LOCATOR; 1799722b1667SJung-uk Kim 1800722b1667SJung-uk Kim /* Memory System Component Resource Node Structure Table 9 */ 1801722b1667SJung-uk Kim typedef struct acpi_mpam_resource_node 1802722b1667SJung-uk Kim { 1803722b1667SJung-uk Kim UINT32 Identifier; 1804722b1667SJung-uk Kim UINT8 RISIndex; 1805722b1667SJung-uk Kim UINT16 Reserved1; 1806722b1667SJung-uk Kim UINT8 LocatorType; 1807722b1667SJung-uk Kim ACPI_MPAM_RESOURCE_LOCATOR Locator; 1808722b1667SJung-uk Kim UINT32 NumFunctionalDeps; 1809722b1667SJung-uk Kim } ACPI_MPAM_RESOURCE_NODE; 1810722b1667SJung-uk Kim 1811722b1667SJung-uk Kim /* Memory System Component (MSC) Node Structure. Table 4 */ 1812722b1667SJung-uk Kim typedef struct acpi_mpam_msc_node 1813722b1667SJung-uk Kim { 1814722b1667SJung-uk Kim UINT16 Length; 1815722b1667SJung-uk Kim UINT8 InterfaceType; 1816722b1667SJung-uk Kim UINT8 Reserved; 1817722b1667SJung-uk Kim UINT32 Identifier; 1818722b1667SJung-uk Kim UINT64 BaseAddress; 1819722b1667SJung-uk Kim UINT32 MMIOSize; 1820722b1667SJung-uk Kim UINT32 OverflowInterrupt; 1821722b1667SJung-uk Kim UINT32 OverflowInterruptFlags; 1822722b1667SJung-uk Kim UINT32 Reserved1; 1823722b1667SJung-uk Kim UINT32 OverflowInterruptAffinity; 1824722b1667SJung-uk Kim UINT32 ErrorInterrupt; 1825722b1667SJung-uk Kim UINT32 ErrorInterruptFlags; 1826722b1667SJung-uk Kim UINT32 Reserved2; 1827722b1667SJung-uk Kim UINT32 ErrorInterruptAffinity; 1828722b1667SJung-uk Kim UINT32 MaxNrdyUsec; 1829722b1667SJung-uk Kim UINT64 HardwareIdLinkedDevice; 1830722b1667SJung-uk Kim UINT32 InstanceIdLinkedDevice; 1831722b1667SJung-uk Kim UINT32 NumResouceNodes; 1832722b1667SJung-uk Kim } ACPI_MPAM_MSC_NODE; 1833722b1667SJung-uk Kim 1834722b1667SJung-uk Kim typedef struct acpi_table_mpam 1835722b1667SJung-uk Kim { 1836722b1667SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1837722b1667SJung-uk Kim } ACPI_TABLE_MPAM; 1838ca3cf4faSJung-uk Kim 1839ca3cf4faSJung-uk Kim /******************************************************************************* 1840ca3cf4faSJung-uk Kim * 1841ff879b07SJung-uk Kim * MPST - Memory Power State Table (ACPI 5.0) 1842ff879b07SJung-uk Kim * Version 1 1843ff879b07SJung-uk Kim * 1844ff879b07SJung-uk Kim ******************************************************************************/ 1845ff879b07SJung-uk Kim 1846ff879b07SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \ 1847ff879b07SJung-uk Kim UINT8 ChannelId; \ 1848ff879b07SJung-uk Kim UINT8 Reserved1[3]; \ 1849ff879b07SJung-uk Kim UINT16 PowerNodeCount; \ 1850ff879b07SJung-uk Kim UINT16 Reserved2; 1851ff879b07SJung-uk Kim 1852ff879b07SJung-uk Kim /* Main table */ 1853ff879b07SJung-uk Kim 1854ff879b07SJung-uk Kim typedef struct acpi_table_mpst 1855ff879b07SJung-uk Kim { 1856ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1857ff879b07SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1858ff879b07SJung-uk Kim 1859ff879b07SJung-uk Kim } ACPI_TABLE_MPST; 1860ff879b07SJung-uk Kim 1861ff879b07SJung-uk Kim 1862ff879b07SJung-uk Kim /* Memory Platform Communication Channel Info */ 1863ff879b07SJung-uk Kim 1864ff879b07SJung-uk Kim typedef struct acpi_mpst_channel 1865ff879b07SJung-uk Kim { 1866ff879b07SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1867ff879b07SJung-uk Kim 1868ff879b07SJung-uk Kim } ACPI_MPST_CHANNEL; 1869ff879b07SJung-uk Kim 1870ff879b07SJung-uk Kim 1871ff879b07SJung-uk Kim /* Memory Power Node Structure */ 1872ff879b07SJung-uk Kim 1873ff879b07SJung-uk Kim typedef struct acpi_mpst_power_node 1874ff879b07SJung-uk Kim { 1875ff879b07SJung-uk Kim UINT8 Flags; 1876ff879b07SJung-uk Kim UINT8 Reserved1; 1877ff879b07SJung-uk Kim UINT16 NodeId; 1878ff879b07SJung-uk Kim UINT32 Length; 1879ff879b07SJung-uk Kim UINT64 RangeAddress; 1880ff879b07SJung-uk Kim UINT64 RangeLength; 1881ff879b07SJung-uk Kim UINT32 NumPowerStates; 1882ff879b07SJung-uk Kim UINT32 NumPhysicalComponents; 1883ff879b07SJung-uk Kim 1884ff879b07SJung-uk Kim } ACPI_MPST_POWER_NODE; 1885ff879b07SJung-uk Kim 1886ff879b07SJung-uk Kim /* Values for Flags field above */ 1887ff879b07SJung-uk Kim 1888ff879b07SJung-uk Kim #define ACPI_MPST_ENABLED 1 1889ff879b07SJung-uk Kim #define ACPI_MPST_POWER_MANAGED 2 1890ff879b07SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE 4 1891ff879b07SJung-uk Kim 1892ff879b07SJung-uk Kim 1893ff879b07SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */ 1894ff879b07SJung-uk Kim 1895ff879b07SJung-uk Kim typedef struct acpi_mpst_power_state 1896ff879b07SJung-uk Kim { 1897ff879b07SJung-uk Kim UINT8 PowerState; 1898ff879b07SJung-uk Kim UINT8 InfoIndex; 1899ff879b07SJung-uk Kim 1900ff879b07SJung-uk Kim } ACPI_MPST_POWER_STATE; 1901ff879b07SJung-uk Kim 1902ff879b07SJung-uk Kim 1903ff879b07SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */ 1904ff879b07SJung-uk Kim 1905ff879b07SJung-uk Kim typedef struct acpi_mpst_component 1906ff879b07SJung-uk Kim { 1907ff879b07SJung-uk Kim UINT16 ComponentId; 1908ff879b07SJung-uk Kim 1909ff879b07SJung-uk Kim } ACPI_MPST_COMPONENT; 1910ff879b07SJung-uk Kim 1911ff879b07SJung-uk Kim 1912ff879b07SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 1913ff879b07SJung-uk Kim 1914ff879b07SJung-uk Kim typedef struct acpi_mpst_data_hdr 1915ff879b07SJung-uk Kim { 1916ff879b07SJung-uk Kim UINT16 CharacteristicsCount; 1917ff879b07SJung-uk Kim UINT16 Reserved; 1918ff879b07SJung-uk Kim 1919ff879b07SJung-uk Kim } ACPI_MPST_DATA_HDR; 1920ff879b07SJung-uk Kim 1921ff879b07SJung-uk Kim typedef struct acpi_mpst_power_data 1922ff879b07SJung-uk Kim { 1923ff879b07SJung-uk Kim UINT8 StructureId; 1924ff879b07SJung-uk Kim UINT8 Flags; 1925ff879b07SJung-uk Kim UINT16 Reserved1; 1926ff879b07SJung-uk Kim UINT32 AveragePower; 1927ff879b07SJung-uk Kim UINT32 PowerSaving; 1928ff879b07SJung-uk Kim UINT64 ExitLatency; 1929ff879b07SJung-uk Kim UINT64 Reserved2; 1930ff879b07SJung-uk Kim 1931ff879b07SJung-uk Kim } ACPI_MPST_POWER_DATA; 1932ff879b07SJung-uk Kim 1933ff879b07SJung-uk Kim /* Values for Flags field above */ 1934ff879b07SJung-uk Kim 1935ff879b07SJung-uk Kim #define ACPI_MPST_PRESERVE 1 1936ff879b07SJung-uk Kim #define ACPI_MPST_AUTOENTRY 2 1937ff879b07SJung-uk Kim #define ACPI_MPST_AUTOEXIT 4 1938ff879b07SJung-uk Kim 1939ff879b07SJung-uk Kim 1940ff879b07SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */ 1941ff879b07SJung-uk Kim 1942ff879b07SJung-uk Kim typedef struct acpi_mpst_shared 1943ff879b07SJung-uk Kim { 1944ff879b07SJung-uk Kim UINT32 Signature; 1945ff879b07SJung-uk Kim UINT16 PccCommand; 1946ff879b07SJung-uk Kim UINT16 PccStatus; 1947ff879b07SJung-uk Kim UINT32 CommandRegister; 1948ff879b07SJung-uk Kim UINT32 StatusRegister; 1949ff879b07SJung-uk Kim UINT32 PowerStateId; 1950ff879b07SJung-uk Kim UINT32 PowerNodeId; 1951ff879b07SJung-uk Kim UINT64 EnergyConsumed; 1952ff879b07SJung-uk Kim UINT64 AveragePower; 1953ff879b07SJung-uk Kim 1954ff879b07SJung-uk Kim } ACPI_MPST_SHARED; 1955ff879b07SJung-uk Kim 1956ff879b07SJung-uk Kim 1957ff879b07SJung-uk Kim /******************************************************************************* 1958ff879b07SJung-uk Kim * 1959ff879b07SJung-uk Kim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1960ff879b07SJung-uk Kim * Version 1 1961ff879b07SJung-uk Kim * 1962ff879b07SJung-uk Kim ******************************************************************************/ 1963ff879b07SJung-uk Kim 1964ff879b07SJung-uk Kim typedef struct acpi_table_msct 1965ff879b07SJung-uk Kim { 1966ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1967ff879b07SJung-uk Kim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1968ff879b07SJung-uk Kim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1969ff879b07SJung-uk Kim UINT32 MaxClockDomains; /* Max number of clock domains */ 1970ff879b07SJung-uk Kim UINT64 MaxAddress; /* Max physical address in system */ 1971ff879b07SJung-uk Kim 1972ff879b07SJung-uk Kim } ACPI_TABLE_MSCT; 1973ff879b07SJung-uk Kim 1974ff879b07SJung-uk Kim 1975ff879b07SJung-uk Kim /* Subtable - Maximum Proximity Domain Information. Version 1 */ 1976ff879b07SJung-uk Kim 1977ff879b07SJung-uk Kim typedef struct acpi_msct_proximity 1978ff879b07SJung-uk Kim { 1979ff879b07SJung-uk Kim UINT8 Revision; 1980ff879b07SJung-uk Kim UINT8 Length; 1981ff879b07SJung-uk Kim UINT32 RangeStart; /* Start of domain range */ 1982ff879b07SJung-uk Kim UINT32 RangeEnd; /* End of domain range */ 1983ff879b07SJung-uk Kim UINT32 ProcessorCapacity; 1984ff879b07SJung-uk Kim UINT64 MemoryCapacity; /* In bytes */ 1985ff879b07SJung-uk Kim 1986ff879b07SJung-uk Kim } ACPI_MSCT_PROXIMITY; 1987ff879b07SJung-uk Kim 1988ff879b07SJung-uk Kim 1989ff879b07SJung-uk Kim /******************************************************************************* 1990ff879b07SJung-uk Kim * 19917cf3e94aSJung-uk Kim * MSDM - Microsoft Data Management table 19927cf3e94aSJung-uk Kim * 19937cf3e94aSJung-uk Kim * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 19947cf3e94aSJung-uk Kim * November 29, 2011. Copyright 2011 Microsoft 19957cf3e94aSJung-uk Kim * 19967cf3e94aSJung-uk Kim ******************************************************************************/ 19977cf3e94aSJung-uk Kim 19987cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */ 19997cf3e94aSJung-uk Kim 20007cf3e94aSJung-uk Kim typedef struct acpi_table_msdm 20017cf3e94aSJung-uk Kim { 20027cf3e94aSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 20037cf3e94aSJung-uk Kim 20047cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM; 20057cf3e94aSJung-uk Kim 20067cf3e94aSJung-uk Kim 20077cf3e94aSJung-uk Kim /******************************************************************************* 20087cf3e94aSJung-uk Kim * 2009ff879b07SJung-uk Kim * NFIT - NVDIMM Interface Table (ACPI 6.0+) 2010ff879b07SJung-uk Kim * Version 1 2011ff879b07SJung-uk Kim * 2012ff879b07SJung-uk Kim ******************************************************************************/ 2013ff879b07SJung-uk Kim 2014ff879b07SJung-uk Kim typedef struct acpi_table_nfit 2015ff879b07SJung-uk Kim { 2016ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2017ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 2018ff879b07SJung-uk Kim 2019ff879b07SJung-uk Kim } ACPI_TABLE_NFIT; 2020ff879b07SJung-uk Kim 2021ff879b07SJung-uk Kim /* Subtable header for NFIT */ 2022ff879b07SJung-uk Kim 2023ff879b07SJung-uk Kim typedef struct acpi_nfit_header 2024ff879b07SJung-uk Kim { 2025ff879b07SJung-uk Kim UINT16 Type; 2026ff879b07SJung-uk Kim UINT16 Length; 2027ff879b07SJung-uk Kim 2028ff879b07SJung-uk Kim } ACPI_NFIT_HEADER; 2029ff879b07SJung-uk Kim 2030ff879b07SJung-uk Kim 2031ff879b07SJung-uk Kim /* Values for subtable type in ACPI_NFIT_HEADER */ 2032ff879b07SJung-uk Kim 2033ff879b07SJung-uk Kim enum AcpiNfitType 2034ff879b07SJung-uk Kim { 2035ff879b07SJung-uk Kim ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 2036ff879b07SJung-uk Kim ACPI_NFIT_TYPE_MEMORY_MAP = 1, 2037ff879b07SJung-uk Kim ACPI_NFIT_TYPE_INTERLEAVE = 2, 2038ff879b07SJung-uk Kim ACPI_NFIT_TYPE_SMBIOS = 3, 2039ff879b07SJung-uk Kim ACPI_NFIT_TYPE_CONTROL_REGION = 4, 2040ff879b07SJung-uk Kim ACPI_NFIT_TYPE_DATA_REGION = 5, 2041ff879b07SJung-uk Kim ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 2042ff879b07SJung-uk Kim ACPI_NFIT_TYPE_CAPABILITIES = 7, 2043ff879b07SJung-uk Kim ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ 2044ff879b07SJung-uk Kim }; 2045ff879b07SJung-uk Kim 2046ff879b07SJung-uk Kim /* 2047ff879b07SJung-uk Kim * NFIT Subtables 2048ff879b07SJung-uk Kim */ 2049ff879b07SJung-uk Kim 2050ff879b07SJung-uk Kim /* 0: System Physical Address Range Structure */ 2051ff879b07SJung-uk Kim 2052ff879b07SJung-uk Kim typedef struct acpi_nfit_system_address 2053ff879b07SJung-uk Kim { 2054ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 2055ff879b07SJung-uk Kim UINT16 RangeIndex; 2056ff879b07SJung-uk Kim UINT16 Flags; 2057ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 2058ff879b07SJung-uk Kim UINT32 ProximityDomain; 2059ff879b07SJung-uk Kim UINT8 RangeGuid[16]; 2060ff879b07SJung-uk Kim UINT64 Address; 2061ff879b07SJung-uk Kim UINT64 Length; 2062ff879b07SJung-uk Kim UINT64 MemoryMapping; 2063cfd1ed46SJung-uk Kim UINT64 LocationCookie; /* ACPI 6.4 */ 2064ff879b07SJung-uk Kim 2065ff879b07SJung-uk Kim } ACPI_NFIT_SYSTEM_ADDRESS; 2066ff879b07SJung-uk Kim 2067ff879b07SJung-uk Kim /* Flags */ 2068ff879b07SJung-uk Kim 2069ff879b07SJung-uk Kim #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 2070ff879b07SJung-uk Kim #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 2071cfd1ed46SJung-uk Kim #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */ 2072ff879b07SJung-uk Kim 2073ff879b07SJung-uk Kim /* Range Type GUIDs appear in the include/acuuid.h file */ 2074ff879b07SJung-uk Kim 2075ff879b07SJung-uk Kim 2076ff879b07SJung-uk Kim /* 1: Memory Device to System Address Range Map Structure */ 2077ff879b07SJung-uk Kim 2078ff879b07SJung-uk Kim typedef struct acpi_nfit_memory_map 2079ff879b07SJung-uk Kim { 2080ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 2081ff879b07SJung-uk Kim UINT32 DeviceHandle; 2082ff879b07SJung-uk Kim UINT16 PhysicalId; 2083ff879b07SJung-uk Kim UINT16 RegionId; 2084ff879b07SJung-uk Kim UINT16 RangeIndex; 2085ff879b07SJung-uk Kim UINT16 RegionIndex; 2086ff879b07SJung-uk Kim UINT64 RegionSize; 2087ff879b07SJung-uk Kim UINT64 RegionOffset; 2088ff879b07SJung-uk Kim UINT64 Address; 2089ff879b07SJung-uk Kim UINT16 InterleaveIndex; 2090ff879b07SJung-uk Kim UINT16 InterleaveWays; 2091ff879b07SJung-uk Kim UINT16 Flags; 2092ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 2093ff879b07SJung-uk Kim 2094ff879b07SJung-uk Kim } ACPI_NFIT_MEMORY_MAP; 2095ff879b07SJung-uk Kim 2096ff879b07SJung-uk Kim /* Flags */ 2097ff879b07SJung-uk Kim 2098ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 2099ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 2100ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 2101ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 2102ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 2103ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 2104ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 2105ff879b07SJung-uk Kim 2106ff879b07SJung-uk Kim 2107ff879b07SJung-uk Kim /* 2: Interleave Structure */ 2108ff879b07SJung-uk Kim 2109ff879b07SJung-uk Kim typedef struct acpi_nfit_interleave 2110ff879b07SJung-uk Kim { 2111ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 2112ff879b07SJung-uk Kim UINT16 InterleaveIndex; 2113ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 2114ff879b07SJung-uk Kim UINT32 LineCount; 2115ff879b07SJung-uk Kim UINT32 LineSize; 2116722b1667SJung-uk Kim UINT32 LineOffset[]; /* Variable length */ 2117ff879b07SJung-uk Kim 2118ff879b07SJung-uk Kim } ACPI_NFIT_INTERLEAVE; 2119ff879b07SJung-uk Kim 2120ff879b07SJung-uk Kim 2121ff879b07SJung-uk Kim /* 3: SMBIOS Management Information Structure */ 2122ff879b07SJung-uk Kim 2123ff879b07SJung-uk Kim typedef struct acpi_nfit_smbios 2124ff879b07SJung-uk Kim { 2125ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 2126ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 2127722b1667SJung-uk Kim UINT8 Data[]; /* Variable length */ 2128ff879b07SJung-uk Kim 2129ff879b07SJung-uk Kim } ACPI_NFIT_SMBIOS; 2130ff879b07SJung-uk Kim 2131ff879b07SJung-uk Kim 2132ff879b07SJung-uk Kim /* 4: NVDIMM Control Region Structure */ 2133ff879b07SJung-uk Kim 2134ff879b07SJung-uk Kim typedef struct acpi_nfit_control_region 2135ff879b07SJung-uk Kim { 2136ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 2137ff879b07SJung-uk Kim UINT16 RegionIndex; 2138ff879b07SJung-uk Kim UINT16 VendorId; 2139ff879b07SJung-uk Kim UINT16 DeviceId; 2140ff879b07SJung-uk Kim UINT16 RevisionId; 2141ff879b07SJung-uk Kim UINT16 SubsystemVendorId; 2142ff879b07SJung-uk Kim UINT16 SubsystemDeviceId; 2143ff879b07SJung-uk Kim UINT16 SubsystemRevisionId; 2144ff879b07SJung-uk Kim UINT8 ValidFields; 2145ff879b07SJung-uk Kim UINT8 ManufacturingLocation; 2146ff879b07SJung-uk Kim UINT16 ManufacturingDate; 2147ff879b07SJung-uk Kim UINT8 Reserved[2]; /* Reserved, must be zero */ 2148ff879b07SJung-uk Kim UINT32 SerialNumber; 2149ff879b07SJung-uk Kim UINT16 Code; 2150ff879b07SJung-uk Kim UINT16 Windows; 2151ff879b07SJung-uk Kim UINT64 WindowSize; 2152ff879b07SJung-uk Kim UINT64 CommandOffset; 2153ff879b07SJung-uk Kim UINT64 CommandSize; 2154ff879b07SJung-uk Kim UINT64 StatusOffset; 2155ff879b07SJung-uk Kim UINT64 StatusSize; 2156ff879b07SJung-uk Kim UINT16 Flags; 2157ff879b07SJung-uk Kim UINT8 Reserved1[6]; /* Reserved, must be zero */ 2158ff879b07SJung-uk Kim 2159ff879b07SJung-uk Kim } ACPI_NFIT_CONTROL_REGION; 2160ff879b07SJung-uk Kim 2161ff879b07SJung-uk Kim /* Flags */ 2162ff879b07SJung-uk Kim 2163ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 2164ff879b07SJung-uk Kim 2165ff879b07SJung-uk Kim /* ValidFields bits */ 2166ff879b07SJung-uk Kim 2167ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 2168ff879b07SJung-uk Kim 2169ff879b07SJung-uk Kim 2170ff879b07SJung-uk Kim /* 5: NVDIMM Block Data Window Region Structure */ 2171ff879b07SJung-uk Kim 2172ff879b07SJung-uk Kim typedef struct acpi_nfit_data_region 2173ff879b07SJung-uk Kim { 2174ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 2175ff879b07SJung-uk Kim UINT16 RegionIndex; 2176ff879b07SJung-uk Kim UINT16 Windows; 2177ff879b07SJung-uk Kim UINT64 Offset; 2178ff879b07SJung-uk Kim UINT64 Size; 2179ff879b07SJung-uk Kim UINT64 Capacity; 2180ff879b07SJung-uk Kim UINT64 StartAddress; 2181ff879b07SJung-uk Kim 2182ff879b07SJung-uk Kim } ACPI_NFIT_DATA_REGION; 2183ff879b07SJung-uk Kim 2184ff879b07SJung-uk Kim 2185ff879b07SJung-uk Kim /* 6: Flush Hint Address Structure */ 2186ff879b07SJung-uk Kim 2187ff879b07SJung-uk Kim typedef struct acpi_nfit_flush_address 2188ff879b07SJung-uk Kim { 2189ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 2190ff879b07SJung-uk Kim UINT32 DeviceHandle; 2191ff879b07SJung-uk Kim UINT16 HintCount; 2192ff879b07SJung-uk Kim UINT8 Reserved[6]; /* Reserved, must be zero */ 2193722b1667SJung-uk Kim UINT64 HintAddress[]; /* Variable length */ 2194ff879b07SJung-uk Kim 2195ff879b07SJung-uk Kim } ACPI_NFIT_FLUSH_ADDRESS; 2196ff879b07SJung-uk Kim 2197ff879b07SJung-uk Kim 2198ff879b07SJung-uk Kim /* 7: Platform Capabilities Structure */ 2199ff879b07SJung-uk Kim 2200ff879b07SJung-uk Kim typedef struct acpi_nfit_capabilities 2201ff879b07SJung-uk Kim { 2202ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 2203ff879b07SJung-uk Kim UINT8 HighestCapability; 2204ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 2205ff879b07SJung-uk Kim UINT32 Capabilities; 2206ff879b07SJung-uk Kim UINT32 Reserved2; 2207ff879b07SJung-uk Kim 2208ff879b07SJung-uk Kim } ACPI_NFIT_CAPABILITIES; 2209ff879b07SJung-uk Kim 2210ff879b07SJung-uk Kim /* Capabilities Flags */ 2211ff879b07SJung-uk Kim 2212ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ 2213ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ 2214ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ 2215ff879b07SJung-uk Kim 2216ff879b07SJung-uk Kim 2217ff879b07SJung-uk Kim /* 2218ff879b07SJung-uk Kim * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM 2219ff879b07SJung-uk Kim */ 2220ff879b07SJung-uk Kim typedef struct nfit_device_handle 2221ff879b07SJung-uk Kim { 2222ff879b07SJung-uk Kim UINT32 Handle; 2223ff879b07SJung-uk Kim 2224ff879b07SJung-uk Kim } NFIT_DEVICE_HANDLE; 2225ff879b07SJung-uk Kim 2226ff879b07SJung-uk Kim /* Device handle construction and extraction macros */ 2227ff879b07SJung-uk Kim 2228ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F 2229ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 2230ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 2231ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 2232ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 2233ff879b07SJung-uk Kim 2234ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 2235ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 2236ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_OFFSET 8 2237ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_OFFSET 12 2238ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_OFFSET 16 2239ff879b07SJung-uk Kim 2240ff879b07SJung-uk Kim /* Macro to construct a NFIT/NVDIMM device handle */ 2241ff879b07SJung-uk Kim 2242ff879b07SJung-uk Kim #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ 2243ff879b07SJung-uk Kim ((dimm) | \ 2244ff879b07SJung-uk Kim ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ 2245ff879b07SJung-uk Kim ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ 2246ff879b07SJung-uk Kim ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ 2247ff879b07SJung-uk Kim ((node) << ACPI_NFIT_NODE_ID_OFFSET)) 2248ff879b07SJung-uk Kim 2249ff879b07SJung-uk Kim /* Macros to extract individual fields from a NFIT/NVDIMM device handle */ 2250ff879b07SJung-uk Kim 2251ff879b07SJung-uk Kim #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ 2252ff879b07SJung-uk Kim ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) 2253ff879b07SJung-uk Kim 2254ff879b07SJung-uk Kim #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ 2255ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) 2256ff879b07SJung-uk Kim 2257ff879b07SJung-uk Kim #define ACPI_NFIT_GET_MEMORY_ID(handle) \ 2258ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) 2259ff879b07SJung-uk Kim 2260ff879b07SJung-uk Kim #define ACPI_NFIT_GET_SOCKET_ID(handle) \ 2261ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) 2262ff879b07SJung-uk Kim 2263ff879b07SJung-uk Kim #define ACPI_NFIT_GET_NODE_ID(handle) \ 2264ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) 2265ff879b07SJung-uk Kim 2266ff879b07SJung-uk Kim 2267ff879b07SJung-uk Kim /******************************************************************************* 2268ff879b07SJung-uk Kim * 22691b7a2680SJung-uk Kim * NHLT - Non HD Audio Link Table 22701b7a2680SJung-uk Kim * 22711b7a2680SJung-uk Kim * Conforms to: Intel Smart Sound Technology NHLT Specification 22721b7a2680SJung-uk Kim * Version 0.8.1, January 2020. 22731b7a2680SJung-uk Kim * 22741b7a2680SJung-uk Kim ******************************************************************************/ 22751b7a2680SJung-uk Kim 22761b7a2680SJung-uk Kim /* Main table */ 22771b7a2680SJung-uk Kim 22781b7a2680SJung-uk Kim typedef struct acpi_table_nhlt 22791b7a2680SJung-uk Kim { 22801b7a2680SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 22811b7a2680SJung-uk Kim UINT8 EndpointCount; 22821b7a2680SJung-uk Kim 22831b7a2680SJung-uk Kim } ACPI_TABLE_NHLT; 22841b7a2680SJung-uk Kim 2285ab71bbb7SJung-uk Kim typedef struct acpi_table_nhlt_endpoint_count 2286ab71bbb7SJung-uk Kim { 2287ab71bbb7SJung-uk Kim UINT8 EndpointCount; 2288ab71bbb7SJung-uk Kim 2289ab71bbb7SJung-uk Kim } ACPI_TABLE_NHLT_ENDPOINT_COUNT; 2290ab71bbb7SJung-uk Kim 22911b7a2680SJung-uk Kim typedef struct acpi_nhlt_endpoint 22921b7a2680SJung-uk Kim { 22931b7a2680SJung-uk Kim UINT32 DescriptorLength; 22941b7a2680SJung-uk Kim UINT8 LinkType; 22951b7a2680SJung-uk Kim UINT8 InstanceId; 22961b7a2680SJung-uk Kim UINT16 VendorId; 22971b7a2680SJung-uk Kim UINT16 DeviceId; 22981b7a2680SJung-uk Kim UINT16 RevisionId; 22991b7a2680SJung-uk Kim UINT32 SubsystemId; 23001b7a2680SJung-uk Kim UINT8 DeviceType; 23011b7a2680SJung-uk Kim UINT8 Direction; 23021b7a2680SJung-uk Kim UINT8 VirtualBusId; 23031b7a2680SJung-uk Kim 23041b7a2680SJung-uk Kim } ACPI_NHLT_ENDPOINT; 23051b7a2680SJung-uk Kim 23061b7a2680SJung-uk Kim /* Types for LinkType field above */ 23071b7a2680SJung-uk Kim 23081b7a2680SJung-uk Kim #define ACPI_NHLT_RESERVED_HD_AUDIO 0 23091b7a2680SJung-uk Kim #define ACPI_NHLT_RESERVED_DSP 1 23101b7a2680SJung-uk Kim #define ACPI_NHLT_PDM 2 23111b7a2680SJung-uk Kim #define ACPI_NHLT_SSP 3 23121b7a2680SJung-uk Kim #define ACPI_NHLT_RESERVED_SLIMBUS 4 23131b7a2680SJung-uk Kim #define ACPI_NHLT_RESERVED_SOUNDWIRE 5 23141b7a2680SJung-uk Kim #define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */ 23151b7a2680SJung-uk Kim 23161b7a2680SJung-uk Kim /* All other values above are reserved */ 23171b7a2680SJung-uk Kim 23181b7a2680SJung-uk Kim /* Values for DeviceId field above */ 23191b7a2680SJung-uk Kim 23201b7a2680SJung-uk Kim #define ACPI_NHLT_PDM_DMIC 0xAE20 23211b7a2680SJung-uk Kim #define ACPI_NHLT_BT_SIDEBAND 0xAE30 23221b7a2680SJung-uk Kim #define ACPI_NHLT_I2S_TDM_CODECS 0xAE23 23231b7a2680SJung-uk Kim 23241b7a2680SJung-uk Kim /* Values for DeviceType field above */ 23251b7a2680SJung-uk Kim 23261b7a2680SJung-uk Kim /* SSP Link */ 23271b7a2680SJung-uk Kim 23281b7a2680SJung-uk Kim #define ACPI_NHLT_LINK_BT_SIDEBAND 0 23291b7a2680SJung-uk Kim #define ACPI_NHLT_LINK_FM 1 23301b7a2680SJung-uk Kim #define ACPI_NHLT_LINK_MODEM 2 23311b7a2680SJung-uk Kim /* 3 is reserved */ 23321b7a2680SJung-uk Kim #define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4 23331b7a2680SJung-uk Kim 23341b7a2680SJung-uk Kim /* PDM Link */ 23351b7a2680SJung-uk Kim 23361b7a2680SJung-uk Kim #define ACPI_NHLT_PDM_ON_CAVS_1P8 0 23371b7a2680SJung-uk Kim #define ACPI_NHLT_PDM_ON_CAVS_1P5 1 23381b7a2680SJung-uk Kim 23391b7a2680SJung-uk Kim /* Values for Direction field above */ 23401b7a2680SJung-uk Kim 23411b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_RENDER 0 23421b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_CAPTURE 1 23431b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_RENDER_LOOPBACK 2 23441b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_RENDER_FEEDBACK 3 23451b7a2680SJung-uk Kim #define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */ 23461b7a2680SJung-uk Kim 2347ab71bbb7SJung-uk Kim /* Capabilities = 2 */ 2348ab71bbb7SJung-uk Kim 23491b7a2680SJung-uk Kim typedef struct acpi_nhlt_device_specific_config 23501b7a2680SJung-uk Kim { 23511b7a2680SJung-uk Kim UINT32 CapabilitiesSize; 23521b7a2680SJung-uk Kim UINT8 VirtualSlot; 23531b7a2680SJung-uk Kim UINT8 ConfigType; 23541b7a2680SJung-uk Kim 23551b7a2680SJung-uk Kim } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG; 23561b7a2680SJung-uk Kim 2357ab71bbb7SJung-uk Kim /* Capabilities = 3 */ 2358ab71bbb7SJung-uk Kim 23591b7a2680SJung-uk Kim typedef struct acpi_nhlt_device_specific_config_a 23601b7a2680SJung-uk Kim { 23611b7a2680SJung-uk Kim UINT32 CapabilitiesSize; 23621b7a2680SJung-uk Kim UINT8 VirtualSlot; 23631b7a2680SJung-uk Kim UINT8 ConfigType; 23641b7a2680SJung-uk Kim UINT8 ArrayType; 23651b7a2680SJung-uk Kim 23661b7a2680SJung-uk Kim } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A; 23671b7a2680SJung-uk Kim 2368ab71bbb7SJung-uk Kim /* Capabilities = 3 */ 2369ab71bbb7SJung-uk Kim 2370ab71bbb7SJung-uk Kim typedef struct acpi_nhlt_device_specific_config_d 2371ab71bbb7SJung-uk Kim { 2372ab71bbb7SJung-uk Kim UINT8 VirtualSlot; 2373ab71bbb7SJung-uk Kim UINT8 ConfigType; 2374ab71bbb7SJung-uk Kim UINT8 ArrayType; 2375ab71bbb7SJung-uk Kim 2376ab71bbb7SJung-uk Kim } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_D; 2377ab71bbb7SJung-uk Kim 23781b7a2680SJung-uk Kim /* Values for Config Type above */ 23791b7a2680SJung-uk Kim 2380ab71bbb7SJung-uk Kim #define ACPI_NHLT_CONFIG_TYPE_GENERIC 0x00 2381ab71bbb7SJung-uk Kim #define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY 0x01 2382ab71bbb7SJung-uk Kim #define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK 0x03 2383ab71bbb7SJung-uk Kim #define ACPI_NHLT_CONFIG_TYPE_RESERVED 0x04 /* 4 and above are reserved */ 23841b7a2680SJung-uk Kim 2385ab71bbb7SJung-uk Kim /* Capabilities = 0 */ 23861b7a2680SJung-uk Kim 23871b7a2680SJung-uk Kim typedef struct acpi_nhlt_device_specific_config_b 23881b7a2680SJung-uk Kim { 23891b7a2680SJung-uk Kim UINT32 CapabilitiesSize; 23901b7a2680SJung-uk Kim 23911b7a2680SJung-uk Kim } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B; 23921b7a2680SJung-uk Kim 2393ab71bbb7SJung-uk Kim /* Capabilities = 1 */ 2394ab71bbb7SJung-uk Kim 23951b7a2680SJung-uk Kim typedef struct acpi_nhlt_device_specific_config_c 23961b7a2680SJung-uk Kim { 23971b7a2680SJung-uk Kim UINT32 CapabilitiesSize; 23981b7a2680SJung-uk Kim UINT8 VirtualSlot; 23991b7a2680SJung-uk Kim 24001b7a2680SJung-uk Kim } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C; 24011b7a2680SJung-uk Kim 2402ab71bbb7SJung-uk Kim typedef struct acpi_nhlt_render_device_specific_config 2403ab71bbb7SJung-uk Kim { 2404ab71bbb7SJung-uk Kim UINT32 CapabilitiesSize; 2405ab71bbb7SJung-uk Kim UINT8 VirtualSlot; 2406ab71bbb7SJung-uk Kim 2407ab71bbb7SJung-uk Kim } ACPI_NHLT_RENDER_DEVICE_SPECIFIC_CONFIG; 2408ab71bbb7SJung-uk Kim 24091b7a2680SJung-uk Kim typedef struct acpi_nhlt_wave_extensible 24101b7a2680SJung-uk Kim { 24111b7a2680SJung-uk Kim UINT16 FormatTag; 24121b7a2680SJung-uk Kim UINT16 ChannelCount; 24131b7a2680SJung-uk Kim UINT32 SamplesPerSec; 24141b7a2680SJung-uk Kim UINT32 AvgBytesPerSec; 24151b7a2680SJung-uk Kim UINT16 BlockAlign; 24161b7a2680SJung-uk Kim UINT16 BitsPerSample; 24171b7a2680SJung-uk Kim UINT16 ExtraFormatSize; 24181b7a2680SJung-uk Kim UINT16 ValidBitsPerSample; 24191b7a2680SJung-uk Kim UINT32 ChannelMask; 24201b7a2680SJung-uk Kim UINT8 SubFormatGuid[16]; 24211b7a2680SJung-uk Kim 24221b7a2680SJung-uk Kim } ACPI_NHLT_WAVE_EXTENSIBLE; 24231b7a2680SJung-uk Kim 24241b7a2680SJung-uk Kim /* Values for ChannelMask above */ 24251b7a2680SJung-uk Kim 24261b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_FRONT_LEFT 0x1 24271b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2 24281b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_FRONT_CENTER 0x4 24291b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_LOW_FREQ 0x8 24301b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_BACK_LEFT 0x10 24311b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_BACK_RIGHT 0x20 24321b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40 24331b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80 24341b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_BACK_CENTER 0x100 24351b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_SIDE_LEFT 0x200 24361b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400 24371b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_TOP_CENTER 0x800 24381b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000 24391b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000 24401b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000 24411b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000 24421b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000 24431b7a2680SJung-uk Kim #define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000 24441b7a2680SJung-uk Kim 24451b7a2680SJung-uk Kim typedef struct acpi_nhlt_format_config 24461b7a2680SJung-uk Kim { 24471b7a2680SJung-uk Kim ACPI_NHLT_WAVE_EXTENSIBLE Format; 24481b7a2680SJung-uk Kim UINT32 CapabilitySize; 24491b7a2680SJung-uk Kim UINT8 Capabilities[]; 24501b7a2680SJung-uk Kim 24511b7a2680SJung-uk Kim } ACPI_NHLT_FORMAT_CONFIG; 24521b7a2680SJung-uk Kim 24531b7a2680SJung-uk Kim typedef struct acpi_nhlt_formats_config 24541b7a2680SJung-uk Kim { 24551b7a2680SJung-uk Kim UINT8 FormatsCount; 24561b7a2680SJung-uk Kim 24571b7a2680SJung-uk Kim } ACPI_NHLT_FORMATS_CONFIG; 24581b7a2680SJung-uk Kim 24591b7a2680SJung-uk Kim typedef struct acpi_nhlt_device_specific_hdr 24601b7a2680SJung-uk Kim { 24611b7a2680SJung-uk Kim UINT8 VirtualSlot; 24621b7a2680SJung-uk Kim UINT8 ConfigType; 24631b7a2680SJung-uk Kim 24641b7a2680SJung-uk Kim } ACPI_NHLT_DEVICE_SPECIFIC_HDR; 24651b7a2680SJung-uk Kim 24661b7a2680SJung-uk Kim /* Types for ConfigType above */ 24671b7a2680SJung-uk Kim 24681b7a2680SJung-uk Kim #define ACPI_NHLT_GENERIC 0 24691b7a2680SJung-uk Kim #define ACPI_NHLT_MIC 1 24701b7a2680SJung-uk Kim #define ACPI_NHLT_RENDER 3 24711b7a2680SJung-uk Kim 24721b7a2680SJung-uk Kim typedef struct acpi_nhlt_mic_device_specific_config 24731b7a2680SJung-uk Kim { 24741b7a2680SJung-uk Kim ACPI_NHLT_DEVICE_SPECIFIC_HDR DeviceConfig; 24751b7a2680SJung-uk Kim UINT8 ArrayTypeExt; 24761b7a2680SJung-uk Kim 24771b7a2680SJung-uk Kim } ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG; 24781b7a2680SJung-uk Kim 24791b7a2680SJung-uk Kim /* Values for ArrayTypeExt above */ 24801b7a2680SJung-uk Kim 2481ab71bbb7SJung-uk Kim #define ACPI_NHLT_ARRAY_TYPE_RESERVED 0x09 /* 9 and below are reserved */ 2482ab71bbb7SJung-uk Kim #define ACPI_NHLT_SMALL_LINEAR_2ELEMENT 0x0A 2483ab71bbb7SJung-uk Kim #define ACPI_NHLT_BIG_LINEAR_2ELEMENT 0x0B 2484ab71bbb7SJung-uk Kim #define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C 2485ab71bbb7SJung-uk Kim #define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT 0x0D 2486ab71bbb7SJung-uk Kim #define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E 2487ab71bbb7SJung-uk Kim #define ACPI_NHLT_VENDOR_DEFINED 0x0F 2488ab71bbb7SJung-uk Kim #define ACPI_NHLT_ARRAY_TYPE_MASK 0x0F 2489ab71bbb7SJung-uk Kim #define ACPI_NHLT_ARRAY_TYPE_EXT_MASK 0x10 24901b7a2680SJung-uk Kim 2491ab71bbb7SJung-uk Kim #define ACPI_NHLT_NO_EXTENSION 0x0 2492ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT (1<<4) 24931b7a2680SJung-uk Kim 2494ab71bbb7SJung-uk Kim typedef struct acpi_nhlt_vendor_mic_count 2495ab71bbb7SJung-uk Kim { 2496ab71bbb7SJung-uk Kim UINT8 MicrophoneCount; 2497ab71bbb7SJung-uk Kim 2498ab71bbb7SJung-uk Kim } ACPI_NHLT_VENDOR_MIC_COUNT; 24991b7a2680SJung-uk Kim 25001b7a2680SJung-uk Kim typedef struct acpi_nhlt_vendor_mic_config 25011b7a2680SJung-uk Kim { 25021b7a2680SJung-uk Kim UINT8 Type; 25031b7a2680SJung-uk Kim UINT8 Panel; 2504ab71bbb7SJung-uk Kim UINT16 SpeakerPositionDistance; /* mm */ 2505ab71bbb7SJung-uk Kim UINT16 HorizontalOffset; /* mm */ 2506ab71bbb7SJung-uk Kim UINT16 VerticalOffset; /* mm */ 2507ab71bbb7SJung-uk Kim UINT8 FrequencyLowBand; /* 5*Hz */ 2508ab71bbb7SJung-uk Kim UINT8 FrequencyHighBand; /* 500*Hz */ 2509ab71bbb7SJung-uk Kim UINT16 DirectionAngle; /* -180 - + 180 */ 2510ab71bbb7SJung-uk Kim UINT16 ElevationAngle; /* -180 - + 180 */ 2511ab71bbb7SJung-uk Kim UINT16 WorkVerticalAngleBegin; /* -180 - + 180 with 2 deg step */ 2512ab71bbb7SJung-uk Kim UINT16 WorkVerticalAngleEnd; /* -180 - + 180 with 2 deg step */ 2513ab71bbb7SJung-uk Kim UINT16 WorkHorizontalAngleBegin; /* -180 - + 180 with 2 deg step */ 2514ab71bbb7SJung-uk Kim UINT16 WorkHorizontalAngleEnd; /* -180 - + 180 with 2 deg step */ 25151b7a2680SJung-uk Kim 25161b7a2680SJung-uk Kim } ACPI_NHLT_VENDOR_MIC_CONFIG; 25171b7a2680SJung-uk Kim 25181b7a2680SJung-uk Kim /* Values for Type field above */ 25191b7a2680SJung-uk Kim 2520ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_OMNIDIRECTIONAL 0 2521ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_SUBCARDIOID 1 2522ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_CARDIOID 2 2523ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_SUPER_CARDIOID 3 2524ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_HYPER_CARDIOID 4 2525ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_8_SHAPED 5 2526ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_RESERVED6 6 /* 6 is reserved */ 2527ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_VENDOR_DEFINED 7 2528ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_RESERVED 8 /* 8 and above are reserved */ 25291b7a2680SJung-uk Kim 25301b7a2680SJung-uk Kim /* Values for Panel field above */ 25311b7a2680SJung-uk Kim 2532ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_POSITION_TOP 0 2533ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_POSITION_BOTTOM 1 2534ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_POSITION_LEFT 2 2535ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_POSITION_RIGHT 3 2536ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_POSITION_FRONT 4 2537ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_POSITION_BACK 5 2538ab71bbb7SJung-uk Kim #define ACPI_NHLT_MIC_POSITION_RESERVED 6 /* 6 and above are reserved */ 25391b7a2680SJung-uk Kim 25401b7a2680SJung-uk Kim typedef struct acpi_nhlt_vendor_mic_device_specific_config 25411b7a2680SJung-uk Kim { 25421b7a2680SJung-uk Kim ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG MicArrayDeviceConfig; 25431b7a2680SJung-uk Kim UINT8 NumberOfMicrophones; 2544ab71bbb7SJung-uk Kim ACPI_NHLT_VENDOR_MIC_CONFIG MicConfig[]; /* Indexed by NumberOfMicrophones */ 25451b7a2680SJung-uk Kim 25461b7a2680SJung-uk Kim } ACPI_NHLT_VENDOR_MIC_DEVICE_SPECIFIC_CONFIG; 25471b7a2680SJung-uk Kim 25481b7a2680SJung-uk Kim /* Microphone SNR and Sensitivity extension */ 25491b7a2680SJung-uk Kim 25501b7a2680SJung-uk Kim typedef struct acpi_nhlt_mic_snr_sensitivity_extension 25511b7a2680SJung-uk Kim { 25521b7a2680SJung-uk Kim UINT32 SNR; 25531b7a2680SJung-uk Kim UINT32 Sensitivity; 25541b7a2680SJung-uk Kim 25551b7a2680SJung-uk Kim } ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION; 25561b7a2680SJung-uk Kim 2557ab71bbb7SJung-uk Kim /* Render device with feedback */ 2558ab71bbb7SJung-uk Kim 25591b7a2680SJung-uk Kim typedef struct acpi_nhlt_render_feedback_device_specific_config 25601b7a2680SJung-uk Kim { 2561ab71bbb7SJung-uk Kim UINT8 FeedbackVirtualSlot; /* Render slot in case of capture */ 2562ab71bbb7SJung-uk Kim UINT16 FeedbackChannels; /* Informative only */ 25631b7a2680SJung-uk Kim UINT16 FeedbackValidBitsPerSample; 25641b7a2680SJung-uk Kim 25651b7a2680SJung-uk Kim } ACPI_NHLT_RENDER_FEEDBACK_DEVICE_SPECIFIC_CONFIG; 25661b7a2680SJung-uk Kim 2567ab71bbb7SJung-uk Kim /* Non documented structures */ 25681b7a2680SJung-uk Kim 2569ab71bbb7SJung-uk Kim typedef struct acpi_nhlt_device_info_count 25701b7a2680SJung-uk Kim { 25711b7a2680SJung-uk Kim UINT8 StructureCount; 25721b7a2680SJung-uk Kim 2573ab71bbb7SJung-uk Kim } ACPI_NHLT_DEVICE_INFO_COUNT; 25741b7a2680SJung-uk Kim 2575ab71bbb7SJung-uk Kim typedef struct acpi_nhlt_device_info 25761b7a2680SJung-uk Kim { 25771b7a2680SJung-uk Kim UINT8 DeviceId[16]; 25781b7a2680SJung-uk Kim UINT8 DeviceInstanceId; 25791b7a2680SJung-uk Kim UINT8 DevicePortId; 25801b7a2680SJung-uk Kim 2581ab71bbb7SJung-uk Kim } ACPI_NHLT_DEVICE_INFO; 25821b7a2680SJung-uk Kim 25831b7a2680SJung-uk Kim 25841b7a2680SJung-uk Kim /******************************************************************************* 25851b7a2680SJung-uk Kim * 2586ff879b07SJung-uk Kim * PCCT - Platform Communications Channel Table (ACPI 5.0) 2587ff879b07SJung-uk Kim * Version 2 (ACPI 6.2) 2588ff879b07SJung-uk Kim * 2589ff879b07SJung-uk Kim ******************************************************************************/ 2590ff879b07SJung-uk Kim 2591ff879b07SJung-uk Kim typedef struct acpi_table_pcct 2592ff879b07SJung-uk Kim { 2593ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2594ff879b07SJung-uk Kim UINT32 Flags; 2595ff879b07SJung-uk Kim UINT64 Reserved; 2596ff879b07SJung-uk Kim 2597ff879b07SJung-uk Kim } ACPI_TABLE_PCCT; 2598ff879b07SJung-uk Kim 2599ff879b07SJung-uk Kim /* Values for Flags field above */ 2600ff879b07SJung-uk Kim 2601ff879b07SJung-uk Kim #define ACPI_PCCT_DOORBELL 1 2602ff879b07SJung-uk Kim 2603ff879b07SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 2604ff879b07SJung-uk Kim 2605ff879b07SJung-uk Kim enum AcpiPcctType 2606ff879b07SJung-uk Kim { 2607ff879b07SJung-uk Kim ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 2608ff879b07SJung-uk Kim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 2609ff879b07SJung-uk Kim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 2610ff879b07SJung-uk Kim ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ 2611ff879b07SJung-uk Kim ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ 2612cfd1ed46SJung-uk Kim ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */ 2613cfd1ed46SJung-uk Kim ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 2614ff879b07SJung-uk Kim }; 2615ff879b07SJung-uk Kim 2616ff879b07SJung-uk Kim /* 2617ff879b07SJung-uk Kim * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 2618ff879b07SJung-uk Kim */ 2619ff879b07SJung-uk Kim 2620ff879b07SJung-uk Kim /* 0: Generic Communications Subspace */ 2621ff879b07SJung-uk Kim 2622ff879b07SJung-uk Kim typedef struct acpi_pcct_subspace 2623ff879b07SJung-uk Kim { 2624ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2625ff879b07SJung-uk Kim UINT8 Reserved[6]; 2626ff879b07SJung-uk Kim UINT64 BaseAddress; 2627ff879b07SJung-uk Kim UINT64 Length; 2628ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 2629ff879b07SJung-uk Kim UINT64 PreserveMask; 2630ff879b07SJung-uk Kim UINT64 WriteMask; 2631ff879b07SJung-uk Kim UINT32 Latency; 2632ff879b07SJung-uk Kim UINT32 MaxAccessRate; 2633ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 2634ff879b07SJung-uk Kim 2635ff879b07SJung-uk Kim } ACPI_PCCT_SUBSPACE; 2636ff879b07SJung-uk Kim 2637ff879b07SJung-uk Kim 2638ff879b07SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 2639ff879b07SJung-uk Kim 2640ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced 2641ff879b07SJung-uk Kim { 2642ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2643ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 2644ff879b07SJung-uk Kim UINT8 Flags; 2645ff879b07SJung-uk Kim UINT8 Reserved; 2646ff879b07SJung-uk Kim UINT64 BaseAddress; 2647ff879b07SJung-uk Kim UINT64 Length; 2648ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 2649ff879b07SJung-uk Kim UINT64 PreserveMask; 2650ff879b07SJung-uk Kim UINT64 WriteMask; 2651ff879b07SJung-uk Kim UINT32 Latency; 2652ff879b07SJung-uk Kim UINT32 MaxAccessRate; 2653ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 2654ff879b07SJung-uk Kim 2655ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED; 2656ff879b07SJung-uk Kim 2657ff879b07SJung-uk Kim 2658ff879b07SJung-uk Kim /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 2659ff879b07SJung-uk Kim 2660ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced_type2 2661ff879b07SJung-uk Kim { 2662ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2663ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 2664ff879b07SJung-uk Kim UINT8 Flags; 2665ff879b07SJung-uk Kim UINT8 Reserved; 2666ff879b07SJung-uk Kim UINT64 BaseAddress; 2667ff879b07SJung-uk Kim UINT64 Length; 2668ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 2669ff879b07SJung-uk Kim UINT64 PreserveMask; 2670ff879b07SJung-uk Kim UINT64 WriteMask; 2671ff879b07SJung-uk Kim UINT32 Latency; 2672ff879b07SJung-uk Kim UINT32 MaxAccessRate; 2673ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 2674ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 2675ff879b07SJung-uk Kim UINT64 AckPreserveMask; 2676ff879b07SJung-uk Kim UINT64 AckWriteMask; 2677ff879b07SJung-uk Kim 2678ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED_TYPE2; 2679ff879b07SJung-uk Kim 2680ff879b07SJung-uk Kim 2681ff879b07SJung-uk Kim /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ 2682ff879b07SJung-uk Kim 2683ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_master 2684ff879b07SJung-uk Kim { 2685ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2686ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 2687ff879b07SJung-uk Kim UINT8 Flags; 2688ff879b07SJung-uk Kim UINT8 Reserved1; 2689ff879b07SJung-uk Kim UINT64 BaseAddress; 2690ff879b07SJung-uk Kim UINT32 Length; 2691ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 2692ff879b07SJung-uk Kim UINT64 PreserveMask; 2693ff879b07SJung-uk Kim UINT64 WriteMask; 2694ff879b07SJung-uk Kim UINT32 Latency; 2695ff879b07SJung-uk Kim UINT32 MaxAccessRate; 2696ff879b07SJung-uk Kim UINT32 MinTurnaroundTime; 2697ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 2698ff879b07SJung-uk Kim UINT64 AckPreserveMask; 2699ff879b07SJung-uk Kim UINT64 AckSetMask; 2700ff879b07SJung-uk Kim UINT64 Reserved2; 2701ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 2702ff879b07SJung-uk Kim UINT64 CmdCompleteMask; 2703ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdUpdateRegister; 2704ff879b07SJung-uk Kim UINT64 CmdUpdatePreserveMask; 2705ff879b07SJung-uk Kim UINT64 CmdUpdateSetMask; 2706ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 2707ff879b07SJung-uk Kim UINT64 ErrorStatusMask; 2708ff879b07SJung-uk Kim 2709ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_MASTER; 2710ff879b07SJung-uk Kim 2711ff879b07SJung-uk Kim 2712ff879b07SJung-uk Kim /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ 2713ff879b07SJung-uk Kim 2714ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_slave 2715ff879b07SJung-uk Kim { 2716ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2717ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 2718ff879b07SJung-uk Kim UINT8 Flags; 2719ff879b07SJung-uk Kim UINT8 Reserved1; 2720ff879b07SJung-uk Kim UINT64 BaseAddress; 2721ff879b07SJung-uk Kim UINT32 Length; 2722ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 2723ff879b07SJung-uk Kim UINT64 PreserveMask; 2724ff879b07SJung-uk Kim UINT64 WriteMask; 2725ff879b07SJung-uk Kim UINT32 Latency; 2726ff879b07SJung-uk Kim UINT32 MaxAccessRate; 2727ff879b07SJung-uk Kim UINT32 MinTurnaroundTime; 2728ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 2729ff879b07SJung-uk Kim UINT64 AckPreserveMask; 2730ff879b07SJung-uk Kim UINT64 AckSetMask; 2731ff879b07SJung-uk Kim UINT64 Reserved2; 2732ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 2733ff879b07SJung-uk Kim UINT64 CmdCompleteMask; 2734ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdUpdateRegister; 2735ff879b07SJung-uk Kim UINT64 CmdUpdatePreserveMask; 2736ff879b07SJung-uk Kim UINT64 CmdUpdateSetMask; 2737ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 2738ff879b07SJung-uk Kim UINT64 ErrorStatusMask; 2739ff879b07SJung-uk Kim 2740ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SLAVE; 2741ff879b07SJung-uk Kim 2742cfd1ed46SJung-uk Kim /* 5: HW Registers based Communications Subspace */ 2743cfd1ed46SJung-uk Kim 2744cfd1ed46SJung-uk Kim typedef struct acpi_pcct_hw_reg 2745cfd1ed46SJung-uk Kim { 2746cfd1ed46SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2747cfd1ed46SJung-uk Kim UINT16 Version; 2748cfd1ed46SJung-uk Kim UINT64 BaseAddress; 2749cfd1ed46SJung-uk Kim UINT64 Length; 2750cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 2751cfd1ed46SJung-uk Kim UINT64 DoorbellPreserve; 2752cfd1ed46SJung-uk Kim UINT64 DoorbellWrite; 2753cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 2754cfd1ed46SJung-uk Kim UINT64 CmdCompleteMask; 2755cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 2756cfd1ed46SJung-uk Kim UINT64 ErrorStatusMask; 2757cfd1ed46SJung-uk Kim UINT32 NominalLatency; 2758cfd1ed46SJung-uk Kim UINT32 MinTurnaroundTime; 2759cfd1ed46SJung-uk Kim 2760cfd1ed46SJung-uk Kim } ACPI_PCCT_HW_REG; 2761cfd1ed46SJung-uk Kim 2762ff879b07SJung-uk Kim 2763ff879b07SJung-uk Kim /* Values for doorbell flags above */ 2764ff879b07SJung-uk Kim 2765ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY (1) 2766ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE (1<<1) 2767ff879b07SJung-uk Kim 2768ff879b07SJung-uk Kim 2769ff879b07SJung-uk Kim /* 2770ff879b07SJung-uk Kim * PCC memory structures (not part of the ACPI table) 2771ff879b07SJung-uk Kim */ 2772ff879b07SJung-uk Kim 2773ff879b07SJung-uk Kim /* Shared Memory Region */ 2774ff879b07SJung-uk Kim 2775ff879b07SJung-uk Kim typedef struct acpi_pcct_shared_memory 2776ff879b07SJung-uk Kim { 2777ff879b07SJung-uk Kim UINT32 Signature; 2778ff879b07SJung-uk Kim UINT16 Command; 2779ff879b07SJung-uk Kim UINT16 Status; 2780ff879b07SJung-uk Kim 2781ff879b07SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY; 2782ff879b07SJung-uk Kim 2783ff879b07SJung-uk Kim 2784ff879b07SJung-uk Kim /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ 2785ff879b07SJung-uk Kim 2786ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_shared_memory 2787ff879b07SJung-uk Kim { 2788ff879b07SJung-uk Kim UINT32 Signature; 2789ff879b07SJung-uk Kim UINT32 Flags; 2790ff879b07SJung-uk Kim UINT32 Length; 2791ff879b07SJung-uk Kim UINT32 Command; 2792ff879b07SJung-uk Kim 2793ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SHARED_MEMORY; 2794ff879b07SJung-uk Kim 2795ff879b07SJung-uk Kim 2796ff879b07SJung-uk Kim /******************************************************************************* 2797ff879b07SJung-uk Kim * 2798ff879b07SJung-uk Kim * PDTT - Platform Debug Trigger Table (ACPI 6.2) 2799ff879b07SJung-uk Kim * Version 0 2800ff879b07SJung-uk Kim * 2801ff879b07SJung-uk Kim ******************************************************************************/ 2802ff879b07SJung-uk Kim 2803ff879b07SJung-uk Kim typedef struct acpi_table_pdtt 2804ff879b07SJung-uk Kim { 2805ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2806ff879b07SJung-uk Kim UINT8 TriggerCount; 2807ff879b07SJung-uk Kim UINT8 Reserved[3]; 2808ff879b07SJung-uk Kim UINT32 ArrayOffset; 2809ff879b07SJung-uk Kim 2810ff879b07SJung-uk Kim } ACPI_TABLE_PDTT; 2811ff879b07SJung-uk Kim 2812ff879b07SJung-uk Kim 2813ff879b07SJung-uk Kim /* 2814ff879b07SJung-uk Kim * PDTT Communication Channel Identifier Structure. 2815ff879b07SJung-uk Kim * The number of these structures is defined by TriggerCount above, 2816ff879b07SJung-uk Kim * starting at ArrayOffset. 2817ff879b07SJung-uk Kim */ 2818ff879b07SJung-uk Kim typedef struct acpi_pdtt_channel 2819ff879b07SJung-uk Kim { 2820ff879b07SJung-uk Kim UINT8 SubchannelId; 2821ff879b07SJung-uk Kim UINT8 Flags; 2822ff879b07SJung-uk Kim 2823ff879b07SJung-uk Kim } ACPI_PDTT_CHANNEL; 2824ff879b07SJung-uk Kim 2825ff879b07SJung-uk Kim /* Flags for above */ 2826ff879b07SJung-uk Kim 2827ff879b07SJung-uk Kim #define ACPI_PDTT_RUNTIME_TRIGGER (1) 2828ff879b07SJung-uk Kim #define ACPI_PDTT_WAIT_COMPLETION (1<<1) 2829cd6518c7SJung-uk Kim #define ACPI_PDTT_TRIGGER_ORDER (1<<2) 2830ff879b07SJung-uk Kim 2831ff879b07SJung-uk Kim 2832ff879b07SJung-uk Kim /******************************************************************************* 2833ff879b07SJung-uk Kim * 2834cfd1ed46SJung-uk Kim * PHAT - Platform Health Assessment Table (ACPI 6.4) 2835cfd1ed46SJung-uk Kim * Version 1 2836cfd1ed46SJung-uk Kim * 2837cfd1ed46SJung-uk Kim ******************************************************************************/ 2838cfd1ed46SJung-uk Kim 2839cfd1ed46SJung-uk Kim typedef struct acpi_table_phat 2840cfd1ed46SJung-uk Kim { 2841cfd1ed46SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2842cfd1ed46SJung-uk Kim 2843cfd1ed46SJung-uk Kim } ACPI_TABLE_PHAT; 2844cfd1ed46SJung-uk Kim 2845cfd1ed46SJung-uk Kim /* Common header for PHAT subtables that follow main table */ 2846cfd1ed46SJung-uk Kim 2847cfd1ed46SJung-uk Kim typedef struct acpi_phat_header 2848cfd1ed46SJung-uk Kim { 2849cfd1ed46SJung-uk Kim UINT16 Type; 2850cfd1ed46SJung-uk Kim UINT16 Length; 2851cfd1ed46SJung-uk Kim UINT8 Revision; 2852cfd1ed46SJung-uk Kim 2853cfd1ed46SJung-uk Kim } ACPI_PHAT_HEADER; 2854cfd1ed46SJung-uk Kim 2855cfd1ed46SJung-uk Kim 2856cfd1ed46SJung-uk Kim /* Values for Type field above */ 2857cfd1ed46SJung-uk Kim 2858cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_VERSION_DATA 0 2859cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1 2860cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */ 2861cfd1ed46SJung-uk Kim 2862cfd1ed46SJung-uk Kim /* 2863cfd1ed46SJung-uk Kim * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER 2864cfd1ed46SJung-uk Kim */ 2865cfd1ed46SJung-uk Kim 2866cfd1ed46SJung-uk Kim /* 0: Firmware Version Data Record */ 2867cfd1ed46SJung-uk Kim 2868cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_data 2869cfd1ed46SJung-uk Kim { 2870cfd1ed46SJung-uk Kim ACPI_PHAT_HEADER Header; 2871cfd1ed46SJung-uk Kim UINT8 Reserved[3]; 2872cfd1ed46SJung-uk Kim UINT32 ElementCount; 2873cfd1ed46SJung-uk Kim 2874cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_DATA; 2875cfd1ed46SJung-uk Kim 2876cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_element 2877cfd1ed46SJung-uk Kim { 2878cfd1ed46SJung-uk Kim UINT8 Guid[16]; 2879cfd1ed46SJung-uk Kim UINT64 VersionValue; 2880cfd1ed46SJung-uk Kim UINT32 ProducerId; 2881cfd1ed46SJung-uk Kim 2882cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_ELEMENT; 2883cfd1ed46SJung-uk Kim 2884cfd1ed46SJung-uk Kim 2885cfd1ed46SJung-uk Kim /* 1: Firmware Health Data Record */ 2886cfd1ed46SJung-uk Kim 2887cfd1ed46SJung-uk Kim typedef struct acpi_phat_health_data 2888cfd1ed46SJung-uk Kim { 2889cfd1ed46SJung-uk Kim ACPI_PHAT_HEADER Header; 2890cfd1ed46SJung-uk Kim UINT8 Reserved[2]; 2891cfd1ed46SJung-uk Kim UINT8 Health; 2892cfd1ed46SJung-uk Kim UINT8 DeviceGuid[16]; 2893cfd1ed46SJung-uk Kim UINT32 DeviceSpecificOffset; /* Zero if no Device-specific data */ 2894cfd1ed46SJung-uk Kim 2895cfd1ed46SJung-uk Kim } ACPI_PHAT_HEALTH_DATA; 2896cfd1ed46SJung-uk Kim 2897cfd1ed46SJung-uk Kim /* Values for Health field above */ 2898cfd1ed46SJung-uk Kim 2899cfd1ed46SJung-uk Kim #define ACPI_PHAT_ERRORS_FOUND 0 2900cfd1ed46SJung-uk Kim #define ACPI_PHAT_NO_ERRORS 1 2901cfd1ed46SJung-uk Kim #define ACPI_PHAT_UNKNOWN_ERRORS 2 2902cfd1ed46SJung-uk Kim #define ACPI_PHAT_ADVISORY 3 2903cfd1ed46SJung-uk Kim 2904cfd1ed46SJung-uk Kim 2905cfd1ed46SJung-uk Kim /******************************************************************************* 2906cfd1ed46SJung-uk Kim * 2907ff879b07SJung-uk Kim * PMTT - Platform Memory Topology Table (ACPI 5.0) 2908ff879b07SJung-uk Kim * Version 1 2909ff879b07SJung-uk Kim * 2910ff879b07SJung-uk Kim ******************************************************************************/ 2911ff879b07SJung-uk Kim 2912ff879b07SJung-uk Kim typedef struct acpi_table_pmtt 2913ff879b07SJung-uk Kim { 2914ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2915cfd1ed46SJung-uk Kim UINT32 MemoryDeviceCount; 2916cfd1ed46SJung-uk Kim /* 2917cfd1ed46SJung-uk Kim * Immediately followed by: 2918cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2919cfd1ed46SJung-uk Kim */ 2920ff879b07SJung-uk Kim 2921ff879b07SJung-uk Kim } ACPI_TABLE_PMTT; 2922ff879b07SJung-uk Kim 2923ff879b07SJung-uk Kim 2924ff879b07SJung-uk Kim /* Common header for PMTT subtables that follow main table */ 2925ff879b07SJung-uk Kim 2926ff879b07SJung-uk Kim typedef struct acpi_pmtt_header 2927ff879b07SJung-uk Kim { 2928ff879b07SJung-uk Kim UINT8 Type; 2929ff879b07SJung-uk Kim UINT8 Reserved1; 2930ff879b07SJung-uk Kim UINT16 Length; 2931ff879b07SJung-uk Kim UINT16 Flags; 2932ff879b07SJung-uk Kim UINT16 Reserved2; 2933cfd1ed46SJung-uk Kim UINT32 MemoryDeviceCount; /* Zero means no memory device structs follow */ 2934cfd1ed46SJung-uk Kim /* 2935cfd1ed46SJung-uk Kim * Immediately followed by: 2936cfd1ed46SJung-uk Kim * UINT8 TypeSpecificData[] 2937cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2938cfd1ed46SJung-uk Kim */ 2939ff879b07SJung-uk Kim 2940ff879b07SJung-uk Kim } ACPI_PMTT_HEADER; 2941ff879b07SJung-uk Kim 2942ff879b07SJung-uk Kim /* Values for Type field above */ 2943ff879b07SJung-uk Kim 2944ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET 0 2945ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER 1 2946ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM 2 2947cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */ 2948cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_VENDOR 0xFF 2949ff879b07SJung-uk Kim 2950ff879b07SJung-uk Kim /* Values for Flags field above */ 2951ff879b07SJung-uk Kim 2952ff879b07SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL 0x0001 2953ff879b07SJung-uk Kim #define ACPI_PMTT_PHYSICAL 0x0002 2954ff879b07SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE 0x000C 2955ff879b07SJung-uk Kim 2956ff879b07SJung-uk Kim 2957ff879b07SJung-uk Kim /* 2958ff879b07SJung-uk Kim * PMTT subtables, correspond to Type in acpi_pmtt_header 2959ff879b07SJung-uk Kim */ 2960ff879b07SJung-uk Kim 2961ff879b07SJung-uk Kim 2962ff879b07SJung-uk Kim /* 0: Socket Structure */ 2963ff879b07SJung-uk Kim 2964ff879b07SJung-uk Kim typedef struct acpi_pmtt_socket 2965ff879b07SJung-uk Kim { 2966ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 2967ff879b07SJung-uk Kim UINT16 SocketId; 2968ff879b07SJung-uk Kim UINT16 Reserved; 2969ff879b07SJung-uk Kim 2970ff879b07SJung-uk Kim } ACPI_PMTT_SOCKET; 2971cfd1ed46SJung-uk Kim /* 2972cfd1ed46SJung-uk Kim * Immediately followed by: 2973cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2974cfd1ed46SJung-uk Kim */ 2975ff879b07SJung-uk Kim 2976ff879b07SJung-uk Kim 2977ff879b07SJung-uk Kim /* 1: Memory Controller subtable */ 2978ff879b07SJung-uk Kim 2979ff879b07SJung-uk Kim typedef struct acpi_pmtt_controller 2980ff879b07SJung-uk Kim { 2981ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 2982cfd1ed46SJung-uk Kim UINT16 ControllerId; 2983ff879b07SJung-uk Kim UINT16 Reserved; 2984ff879b07SJung-uk Kim 2985ff879b07SJung-uk Kim } ACPI_PMTT_CONTROLLER; 2986cfd1ed46SJung-uk Kim /* 2987cfd1ed46SJung-uk Kim * Immediately followed by: 2988cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2989cfd1ed46SJung-uk Kim */ 2990ff879b07SJung-uk Kim 2991ff879b07SJung-uk Kim 2992ff879b07SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */ 2993ff879b07SJung-uk Kim 2994ff879b07SJung-uk Kim typedef struct acpi_pmtt_physical_component 2995ff879b07SJung-uk Kim { 2996ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 2997ff879b07SJung-uk Kim UINT32 BiosHandle; 2998ff879b07SJung-uk Kim 2999ff879b07SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT; 3000ff879b07SJung-uk Kim 3001ff879b07SJung-uk Kim 3002cfd1ed46SJung-uk Kim /* 0xFF: Vendor Specific Data */ 3003cfd1ed46SJung-uk Kim 3004cfd1ed46SJung-uk Kim typedef struct acpi_pmtt_vendor_specific 3005cfd1ed46SJung-uk Kim { 3006cfd1ed46SJung-uk Kim ACPI_PMTT_HEADER Header; 3007cfd1ed46SJung-uk Kim UINT8 TypeUuid[16]; 3008cfd1ed46SJung-uk Kim UINT8 Specific[]; 3009cfd1ed46SJung-uk Kim /* 3010cfd1ed46SJung-uk Kim * Immediately followed by: 3011cfd1ed46SJung-uk Kim * UINT8 VendorSpecificData[]; 3012cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 3013cfd1ed46SJung-uk Kim */ 3014cfd1ed46SJung-uk Kim 3015cfd1ed46SJung-uk Kim } ACPI_PMTT_VENDOR_SPECIFIC; 3016cfd1ed46SJung-uk Kim 3017cfd1ed46SJung-uk Kim 3018ff879b07SJung-uk Kim /******************************************************************************* 3019ff879b07SJung-uk Kim * 3020ff879b07SJung-uk Kim * PPTT - Processor Properties Topology Table (ACPI 6.2) 3021ff879b07SJung-uk Kim * Version 1 3022ff879b07SJung-uk Kim * 3023ff879b07SJung-uk Kim ******************************************************************************/ 3024ff879b07SJung-uk Kim 3025ff879b07SJung-uk Kim typedef struct acpi_table_pptt 3026ff879b07SJung-uk Kim { 3027ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3028ff879b07SJung-uk Kim 3029ff879b07SJung-uk Kim } ACPI_TABLE_PPTT; 3030ff879b07SJung-uk Kim 3031ff879b07SJung-uk Kim /* Values for Type field above */ 3032ff879b07SJung-uk Kim 3033ff879b07SJung-uk Kim enum AcpiPpttType 3034ff879b07SJung-uk Kim { 3035ff879b07SJung-uk Kim ACPI_PPTT_TYPE_PROCESSOR = 0, 3036ff879b07SJung-uk Kim ACPI_PPTT_TYPE_CACHE = 1, 3037ff879b07SJung-uk Kim ACPI_PPTT_TYPE_ID = 2, 3038ff879b07SJung-uk Kim ACPI_PPTT_TYPE_RESERVED = 3 3039ff879b07SJung-uk Kim }; 3040ff879b07SJung-uk Kim 3041ff879b07SJung-uk Kim 3042ff879b07SJung-uk Kim /* 0: Processor Hierarchy Node Structure */ 3043ff879b07SJung-uk Kim 3044ff879b07SJung-uk Kim typedef struct acpi_pptt_processor 3045ff879b07SJung-uk Kim { 3046ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 3047ff879b07SJung-uk Kim UINT16 Reserved; 3048ff879b07SJung-uk Kim UINT32 Flags; 3049ff879b07SJung-uk Kim UINT32 Parent; 3050ff879b07SJung-uk Kim UINT32 AcpiProcessorId; 3051ff879b07SJung-uk Kim UINT32 NumberOfPrivResources; 3052ff879b07SJung-uk Kim 3053ff879b07SJung-uk Kim } ACPI_PPTT_PROCESSOR; 3054ff879b07SJung-uk Kim 3055ff879b07SJung-uk Kim /* Flags */ 3056ff879b07SJung-uk Kim 3057cd6518c7SJung-uk Kim #define ACPI_PPTT_PHYSICAL_PACKAGE (1) 3058cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1) 3059cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */ 3060cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */ 3061cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */ 3062ff879b07SJung-uk Kim 3063ff879b07SJung-uk Kim 3064ff879b07SJung-uk Kim /* 1: Cache Type Structure */ 3065ff879b07SJung-uk Kim 3066ff879b07SJung-uk Kim typedef struct acpi_pptt_cache 3067ff879b07SJung-uk Kim { 3068ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 3069ff879b07SJung-uk Kim UINT16 Reserved; 3070ff879b07SJung-uk Kim UINT32 Flags; 3071ff879b07SJung-uk Kim UINT32 NextLevelOfCache; 3072ff879b07SJung-uk Kim UINT32 Size; 3073ff879b07SJung-uk Kim UINT32 NumberOfSets; 3074ff879b07SJung-uk Kim UINT8 Associativity; 3075ff879b07SJung-uk Kim UINT8 Attributes; 3076ff879b07SJung-uk Kim UINT16 LineSize; 3077ff879b07SJung-uk Kim 3078ff879b07SJung-uk Kim } ACPI_PPTT_CACHE; 3079ff879b07SJung-uk Kim 3080cfd1ed46SJung-uk Kim /* 1: Cache Type Structure for PPTT version 3 */ 3081cfd1ed46SJung-uk Kim 3082cfd1ed46SJung-uk Kim typedef struct acpi_pptt_cache_v1 3083cfd1ed46SJung-uk Kim { 3084cfd1ed46SJung-uk Kim UINT32 CacheId; 3085cfd1ed46SJung-uk Kim 3086cfd1ed46SJung-uk Kim } ACPI_PPTT_CACHE_V1; 3087cfd1ed46SJung-uk Kim 3088cfd1ed46SJung-uk Kim 3089ff879b07SJung-uk Kim /* Flags */ 3090ff879b07SJung-uk Kim 3091ff879b07SJung-uk Kim #define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 3092ff879b07SJung-uk Kim #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 3093ff879b07SJung-uk Kim #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 3094ff879b07SJung-uk Kim #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 3095ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 3096ff879b07SJung-uk Kim #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 3097ff879b07SJung-uk Kim #define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 3098cfd1ed46SJung-uk Kim #define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */ 3099ff879b07SJung-uk Kim 3100ff879b07SJung-uk Kim /* Masks for Attributes */ 3101ff879b07SJung-uk Kim 3102ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 3103ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 3104ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 3105ff879b07SJung-uk Kim 3106ff879b07SJung-uk Kim /* Attributes describing cache */ 3107ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ 3108ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ 3109ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ 3110ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ 3111ff879b07SJung-uk Kim 3112ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ 3113ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ 3114ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ 3115ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ 3116ff879b07SJung-uk Kim 3117ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ 3118ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ 3119ff879b07SJung-uk Kim 3120ff879b07SJung-uk Kim /* 2: ID Structure */ 3121ff879b07SJung-uk Kim 3122ff879b07SJung-uk Kim typedef struct acpi_pptt_id 3123ff879b07SJung-uk Kim { 3124ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 3125ff879b07SJung-uk Kim UINT16 Reserved; 3126ff879b07SJung-uk Kim UINT32 VendorId; 3127ff879b07SJung-uk Kim UINT64 Level1Id; 3128ff879b07SJung-uk Kim UINT64 Level2Id; 3129ff879b07SJung-uk Kim UINT16 MajorRev; 3130ff879b07SJung-uk Kim UINT16 MinorRev; 3131ff879b07SJung-uk Kim UINT16 SpinRev; 3132ff879b07SJung-uk Kim 3133ff879b07SJung-uk Kim } ACPI_PPTT_ID; 3134ff879b07SJung-uk Kim 3135ff879b07SJung-uk Kim 3136ff879b07SJung-uk Kim /******************************************************************************* 3137ff879b07SJung-uk Kim * 31381970d693SJung-uk Kim * PRMT - Platform Runtime Mechanism Table 31391970d693SJung-uk Kim * Version 1 31401970d693SJung-uk Kim * 31411970d693SJung-uk Kim ******************************************************************************/ 31421970d693SJung-uk Kim 31431970d693SJung-uk Kim typedef struct acpi_table_prmt 31441970d693SJung-uk Kim { 31451970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 31461970d693SJung-uk Kim 31471970d693SJung-uk Kim } ACPI_TABLE_PRMT; 31481970d693SJung-uk Kim 31491970d693SJung-uk Kim typedef struct acpi_table_prmt_header 31501970d693SJung-uk Kim { 31511970d693SJung-uk Kim UINT8 PlatformGuid[16]; 31521970d693SJung-uk Kim UINT32 ModuleInfoOffset; 31531970d693SJung-uk Kim UINT32 ModuleInfoCount; 31541970d693SJung-uk Kim 31551970d693SJung-uk Kim } ACPI_TABLE_PRMT_HEADER; 31561970d693SJung-uk Kim 315797c0b5abSJung-uk Kim typedef struct acpi_prmt_module_header 315897c0b5abSJung-uk Kim { 315997c0b5abSJung-uk Kim UINT16 Revision; 316097c0b5abSJung-uk Kim UINT16 Length; 316197c0b5abSJung-uk Kim 316297c0b5abSJung-uk Kim } ACPI_PRMT_MODULE_HEADER; 316397c0b5abSJung-uk Kim 31641970d693SJung-uk Kim typedef struct acpi_prmt_module_info 31651970d693SJung-uk Kim { 31661970d693SJung-uk Kim UINT16 Revision; 31671970d693SJung-uk Kim UINT16 Length; 31681970d693SJung-uk Kim UINT8 ModuleGuid[16]; 31691970d693SJung-uk Kim UINT16 MajorRev; 31701970d693SJung-uk Kim UINT16 MinorRev; 31711970d693SJung-uk Kim UINT16 HandlerInfoCount; 31721970d693SJung-uk Kim UINT32 HandlerInfoOffset; 31731970d693SJung-uk Kim UINT64 MmioListPointer; 31741970d693SJung-uk Kim 31751970d693SJung-uk Kim } ACPI_PRMT_MODULE_INFO; 31761970d693SJung-uk Kim 31771970d693SJung-uk Kim typedef struct acpi_prmt_handler_info 31781970d693SJung-uk Kim { 31791970d693SJung-uk Kim UINT16 Revision; 31801970d693SJung-uk Kim UINT16 Length; 31811970d693SJung-uk Kim UINT8 HandlerGuid[16]; 31821970d693SJung-uk Kim UINT64 HandlerAddress; 31831970d693SJung-uk Kim UINT64 StaticDataBufferAddress; 31841970d693SJung-uk Kim UINT64 AcpiParamBufferAddress; 31851970d693SJung-uk Kim 31861970d693SJung-uk Kim } ACPI_PRMT_HANDLER_INFO; 31871970d693SJung-uk Kim 31881970d693SJung-uk Kim 31891970d693SJung-uk Kim /******************************************************************************* 31901970d693SJung-uk Kim * 3191ff879b07SJung-uk Kim * RASF - RAS Feature Table (ACPI 5.0) 3192ff879b07SJung-uk Kim * Version 1 3193ff879b07SJung-uk Kim * 3194ff879b07SJung-uk Kim ******************************************************************************/ 3195ff879b07SJung-uk Kim 3196ff879b07SJung-uk Kim typedef struct acpi_table_rasf 3197ff879b07SJung-uk Kim { 3198ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3199ff879b07SJung-uk Kim UINT8 ChannelId[12]; 3200ff879b07SJung-uk Kim 3201ff879b07SJung-uk Kim } ACPI_TABLE_RASF; 3202ff879b07SJung-uk Kim 3203ff879b07SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */ 3204ff879b07SJung-uk Kim 3205ff879b07SJung-uk Kim typedef struct acpi_rasf_shared_memory 3206ff879b07SJung-uk Kim { 3207ff879b07SJung-uk Kim UINT32 Signature; 3208ff879b07SJung-uk Kim UINT16 Command; 3209ff879b07SJung-uk Kim UINT16 Status; 3210ff879b07SJung-uk Kim UINT16 Version; 3211ff879b07SJung-uk Kim UINT8 Capabilities[16]; 3212ff879b07SJung-uk Kim UINT8 SetCapabilities[16]; 3213ff879b07SJung-uk Kim UINT16 NumParameterBlocks; 3214ff879b07SJung-uk Kim UINT32 SetCapabilitiesStatus; 3215ff879b07SJung-uk Kim 3216ff879b07SJung-uk Kim } ACPI_RASF_SHARED_MEMORY; 3217ff879b07SJung-uk Kim 3218ff879b07SJung-uk Kim /* RASF Parameter Block Structure Header */ 3219ff879b07SJung-uk Kim 3220ff879b07SJung-uk Kim typedef struct acpi_rasf_parameter_block 3221ff879b07SJung-uk Kim { 3222ff879b07SJung-uk Kim UINT16 Type; 3223ff879b07SJung-uk Kim UINT16 Version; 3224ff879b07SJung-uk Kim UINT16 Length; 3225ff879b07SJung-uk Kim 3226ff879b07SJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK; 3227ff879b07SJung-uk Kim 3228ff879b07SJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */ 3229ff879b07SJung-uk Kim 3230ff879b07SJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter 3231ff879b07SJung-uk Kim { 3232ff879b07SJung-uk Kim ACPI_RASF_PARAMETER_BLOCK Header; 3233ff879b07SJung-uk Kim UINT16 PatrolScrubCommand; 3234ff879b07SJung-uk Kim UINT64 RequestedAddressRange[2]; 3235ff879b07SJung-uk Kim UINT64 ActualAddressRange[2]; 3236ff879b07SJung-uk Kim UINT16 Flags; 3237ff879b07SJung-uk Kim UINT8 RequestedSpeed; 3238ff879b07SJung-uk Kim 3239ff879b07SJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER; 3240ff879b07SJung-uk Kim 3241ff879b07SJung-uk Kim /* Masks for Flags and Speed fields above */ 3242ff879b07SJung-uk Kim 3243ff879b07SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING 1 3244ff879b07SJung-uk Kim #define ACPI_RASF_SPEED (7<<1) 3245ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_SLOW (0<<1) 3246ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM (4<<1) 3247ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_FAST (7<<1) 3248ff879b07SJung-uk Kim 3249ff879b07SJung-uk Kim /* Channel Commands */ 3250ff879b07SJung-uk Kim 3251ff879b07SJung-uk Kim enum AcpiRasfCommands 3252ff879b07SJung-uk Kim { 3253ff879b07SJung-uk Kim ACPI_RASF_EXECUTE_RASF_COMMAND = 1 3254ff879b07SJung-uk Kim }; 3255ff879b07SJung-uk Kim 3256ff879b07SJung-uk Kim /* Platform RAS Capabilities */ 3257ff879b07SJung-uk Kim 3258ff879b07SJung-uk Kim enum AcpiRasfCapabiliities 3259ff879b07SJung-uk Kim { 3260ff879b07SJung-uk Kim ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 3261ff879b07SJung-uk Kim ACPI_SW_PATROL_SCRUB_EXPOSED = 1 3262ff879b07SJung-uk Kim }; 3263ff879b07SJung-uk Kim 3264ff879b07SJung-uk Kim /* Patrol Scrub Commands */ 3265ff879b07SJung-uk Kim 3266ff879b07SJung-uk Kim enum AcpiRasfPatrolScrubCommands 3267ff879b07SJung-uk Kim { 3268ff879b07SJung-uk Kim ACPI_RASF_GET_PATROL_PARAMETERS = 1, 3269ff879b07SJung-uk Kim ACPI_RASF_START_PATROL_SCRUBBER = 2, 3270ff879b07SJung-uk Kim ACPI_RASF_STOP_PATROL_SCRUBBER = 3 3271ff879b07SJung-uk Kim }; 3272ff879b07SJung-uk Kim 3273ff879b07SJung-uk Kim /* Channel Command flags */ 3274ff879b07SJung-uk Kim 3275ff879b07SJung-uk Kim #define ACPI_RASF_GENERATE_SCI (1<<15) 3276ff879b07SJung-uk Kim 3277ff879b07SJung-uk Kim /* Status values */ 3278ff879b07SJung-uk Kim 3279ff879b07SJung-uk Kim enum AcpiRasfStatus 3280ff879b07SJung-uk Kim { 3281ff879b07SJung-uk Kim ACPI_RASF_SUCCESS = 0, 3282ff879b07SJung-uk Kim ACPI_RASF_NOT_VALID = 1, 3283ff879b07SJung-uk Kim ACPI_RASF_NOT_SUPPORTED = 2, 3284ff879b07SJung-uk Kim ACPI_RASF_BUSY = 3, 3285ff879b07SJung-uk Kim ACPI_RASF_FAILED = 4, 3286ff879b07SJung-uk Kim ACPI_RASF_ABORTED = 5, 3287ff879b07SJung-uk Kim ACPI_RASF_INVALID_DATA = 6 3288ff879b07SJung-uk Kim }; 3289ff879b07SJung-uk Kim 3290ff879b07SJung-uk Kim /* Status flags */ 3291ff879b07SJung-uk Kim 3292ff879b07SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE (1) 3293ff879b07SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL (1<<1) 3294ff879b07SJung-uk Kim #define ACPI_RASF_ERROR (1<<2) 3295ff879b07SJung-uk Kim #define ACPI_RASF_STATUS (0x1F<<3) 3296ff879b07SJung-uk Kim 3297ff879b07SJung-uk Kim 3298ff879b07SJung-uk Kim /******************************************************************************* 3299ff879b07SJung-uk Kim * 33001970d693SJung-uk Kim * RGRT - Regulatory Graphics Resource Table 33011970d693SJung-uk Kim * Version 1 33021970d693SJung-uk Kim * 33031970d693SJung-uk Kim * Conforms to "ACPI RGRT" available at: 33041970d693SJung-uk Kim * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/ 33051970d693SJung-uk Kim * 33061970d693SJung-uk Kim ******************************************************************************/ 33071970d693SJung-uk Kim 33081970d693SJung-uk Kim typedef struct acpi_table_rgrt 33091970d693SJung-uk Kim { 33101970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 33111970d693SJung-uk Kim UINT16 Version; 33121970d693SJung-uk Kim UINT8 ImageType; 33131970d693SJung-uk Kim UINT8 Reserved; 3314ab71bbb7SJung-uk Kim UINT8 Image[]; 33151970d693SJung-uk Kim 33161970d693SJung-uk Kim } ACPI_TABLE_RGRT; 33171970d693SJung-uk Kim 33181970d693SJung-uk Kim /* ImageType values */ 33191970d693SJung-uk Kim 33201970d693SJung-uk Kim enum AcpiRgrtImageType 33211970d693SJung-uk Kim { 33221970d693SJung-uk Kim ACPI_RGRT_TYPE_RESERVED0 = 0, 33231970d693SJung-uk Kim ACPI_RGRT_IMAGE_TYPE_PNG = 1, 33241970d693SJung-uk Kim ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 33251970d693SJung-uk Kim }; 33261970d693SJung-uk Kim 33271970d693SJung-uk Kim 33281970d693SJung-uk Kim /******************************************************************************* 33291970d693SJung-uk Kim * 3330722b1667SJung-uk Kim * RHCT - RISC-V Hart Capabilities Table 3331722b1667SJung-uk Kim * Version 1 3332722b1667SJung-uk Kim * 3333722b1667SJung-uk Kim ******************************************************************************/ 3334722b1667SJung-uk Kim 3335722b1667SJung-uk Kim typedef struct acpi_table_rhct { 3336722b1667SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3337*07c64d74SJung-uk Kim UINT32 Flags; /* RHCT flags */ 3338722b1667SJung-uk Kim UINT64 TimeBaseFreq; 3339722b1667SJung-uk Kim UINT32 NodeCount; 3340722b1667SJung-uk Kim UINT32 NodeOffset; 3341722b1667SJung-uk Kim } ACPI_TABLE_RHCT; 3342722b1667SJung-uk Kim 3343*07c64d74SJung-uk Kim /* RHCT Flags */ 3344*07c64d74SJung-uk Kim 3345*07c64d74SJung-uk Kim #define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1) 3346722b1667SJung-uk Kim /* 3347722b1667SJung-uk Kim * RHCT subtables 3348722b1667SJung-uk Kim */ 3349722b1667SJung-uk Kim typedef struct acpi_rhct_node_header { 3350722b1667SJung-uk Kim UINT16 Type; 3351722b1667SJung-uk Kim UINT16 Length; 3352722b1667SJung-uk Kim UINT16 Revision; 3353722b1667SJung-uk Kim } ACPI_RHCT_NODE_HEADER; 3354722b1667SJung-uk Kim 3355722b1667SJung-uk Kim /* Values for RHCT subtable Type above */ 3356722b1667SJung-uk Kim 3357722b1667SJung-uk Kim enum acpi_rhct_node_type { 3358722b1667SJung-uk Kim ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000, 3359*07c64d74SJung-uk Kim ACPI_RHCT_NODE_TYPE_CMO = 0x0001, 3360*07c64d74SJung-uk Kim ACPI_RHCT_NODE_TYPE_MMU = 0x0002, 3361*07c64d74SJung-uk Kim ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003, 3362722b1667SJung-uk Kim ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF, 3363722b1667SJung-uk Kim }; 3364722b1667SJung-uk Kim 3365722b1667SJung-uk Kim /* 3366722b1667SJung-uk Kim * RHCT node specific subtables 3367722b1667SJung-uk Kim */ 3368722b1667SJung-uk Kim 3369722b1667SJung-uk Kim /* ISA string node structure */ 3370722b1667SJung-uk Kim typedef struct acpi_rhct_isa_string { 3371722b1667SJung-uk Kim UINT16 IsaLength; 3372722b1667SJung-uk Kim char Isa[]; 3373722b1667SJung-uk Kim } ACPI_RHCT_ISA_STRING; 3374722b1667SJung-uk Kim 3375*07c64d74SJung-uk Kim typedef struct acpi_rhct_cmo_node { 3376*07c64d74SJung-uk Kim UINT8 Reserved; /* Must be zero */ 3377*07c64d74SJung-uk Kim UINT8 CbomSize; /* CBOM size in powerof 2 */ 3378*07c64d74SJung-uk Kim UINT8 CbopSize; /* CBOP size in powerof 2 */ 3379*07c64d74SJung-uk Kim UINT8 CbozSize; /* CBOZ size in powerof 2 */ 3380*07c64d74SJung-uk Kim } ACPI_RHCT_CMO_NODE; 3381*07c64d74SJung-uk Kim 3382*07c64d74SJung-uk Kim typedef struct acpi_rhct_mmu_node { 3383*07c64d74SJung-uk Kim UINT8 Reserved; /* Must be zero */ 3384*07c64d74SJung-uk Kim UINT8 MmuType; /* Virtual Address Scheme */ 3385*07c64d74SJung-uk Kim } ACPI_RHCT_MMU_NODE; 3386*07c64d74SJung-uk Kim 3387*07c64d74SJung-uk Kim enum acpi_rhct_mmu_type { 3388*07c64d74SJung-uk Kim ACPI_RHCT_MMU_TYPE_SV39 = 0, 3389*07c64d74SJung-uk Kim ACPI_RHCT_MMU_TYPE_SV48 = 1, 3390*07c64d74SJung-uk Kim ACPI_RHCT_MMU_TYPE_SV57 = 2 3391*07c64d74SJung-uk Kim }; 3392*07c64d74SJung-uk Kim 3393722b1667SJung-uk Kim /* Hart Info node structure */ 3394722b1667SJung-uk Kim typedef struct acpi_rhct_hart_info { 3395722b1667SJung-uk Kim UINT16 NumOffsets; 3396722b1667SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 3397722b1667SJung-uk Kim } ACPI_RHCT_HART_INFO; 3398722b1667SJung-uk Kim 3399722b1667SJung-uk Kim /******************************************************************************* 3400722b1667SJung-uk Kim * 3401ff879b07SJung-uk Kim * SBST - Smart Battery Specification Table 3402ff879b07SJung-uk Kim * Version 1 3403ff879b07SJung-uk Kim * 3404ff879b07SJung-uk Kim ******************************************************************************/ 3405ff879b07SJung-uk Kim 3406ff879b07SJung-uk Kim typedef struct acpi_table_sbst 3407ff879b07SJung-uk Kim { 3408ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3409ff879b07SJung-uk Kim UINT32 WarningLevel; 3410ff879b07SJung-uk Kim UINT32 LowLevel; 3411ff879b07SJung-uk Kim UINT32 CriticalLevel; 3412ff879b07SJung-uk Kim 3413ff879b07SJung-uk Kim } ACPI_TABLE_SBST; 3414ff879b07SJung-uk Kim 3415ff879b07SJung-uk Kim 34165f9b24faSJung-uk Kim /******************************************************************************* 34175f9b24faSJung-uk Kim * 34185f9b24faSJung-uk Kim * SDEI - Software Delegated Exception Interface Descriptor Table 34195f9b24faSJung-uk Kim * 34205f9b24faSJung-uk Kim * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, 34215f9b24faSJung-uk Kim * May 8th, 2017. Copyright 2017 ARM Ltd. 34225f9b24faSJung-uk Kim * 34235f9b24faSJung-uk Kim ******************************************************************************/ 34245f9b24faSJung-uk Kim 34255f9b24faSJung-uk Kim typedef struct acpi_table_sdei 34265f9b24faSJung-uk Kim { 34275f9b24faSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 34285f9b24faSJung-uk Kim 34295f9b24faSJung-uk Kim } ACPI_TABLE_SDEI; 34305f9b24faSJung-uk Kim 34319c48c75eSJung-uk Kim 34329c48c75eSJung-uk Kim /******************************************************************************* 34339c48c75eSJung-uk Kim * 3434ff879b07SJung-uk Kim * SDEV - Secure Devices Table (ACPI 6.2) 3435ff879b07SJung-uk Kim * Version 1 3436dcbce41eSJung-uk Kim * 3437dcbce41eSJung-uk Kim ******************************************************************************/ 3438dcbce41eSJung-uk Kim 3439ff879b07SJung-uk Kim typedef struct acpi_table_sdev 3440dcbce41eSJung-uk Kim { 3441dcbce41eSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3442dcbce41eSJung-uk Kim 3443ff879b07SJung-uk Kim } ACPI_TABLE_SDEV; 3444dcbce41eSJung-uk Kim 3445dcbce41eSJung-uk Kim 3446ff879b07SJung-uk Kim typedef struct acpi_sdev_header 3447d6dd1baeSJung-uk Kim { 3448ff879b07SJung-uk Kim UINT8 Type; 3449ff879b07SJung-uk Kim UINT8 Flags; 3450ff879b07SJung-uk Kim UINT16 Length; 3451d6dd1baeSJung-uk Kim 3452ff879b07SJung-uk Kim } ACPI_SDEV_HEADER; 3453f8146b88SJung-uk Kim 3454d6dd1baeSJung-uk Kim 3455ff879b07SJung-uk Kim /* Values for subtable type above */ 3456d6dd1baeSJung-uk Kim 3457ff879b07SJung-uk Kim enum AcpiSdevType 3458d6dd1baeSJung-uk Kim { 3459ff879b07SJung-uk Kim ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, 3460ff879b07SJung-uk Kim ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, 3461ff879b07SJung-uk Kim ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 3462d6dd1baeSJung-uk Kim }; 3463d6dd1baeSJung-uk Kim 3464ff879b07SJung-uk Kim /* Values for flags above */ 3465d6dd1baeSJung-uk Kim 3466ff879b07SJung-uk Kim #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) 3467cfd1ed46SJung-uk Kim #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1) 3468fe0f0bbbSJung-uk Kim 3469fe0f0bbbSJung-uk Kim /* 3470ff879b07SJung-uk Kim * SDEV subtables 3471fe0f0bbbSJung-uk Kim */ 3472fe0f0bbbSJung-uk Kim 3473ff879b07SJung-uk Kim /* 0: Namespace Device Based Secure Device Structure */ 3474fe0f0bbbSJung-uk Kim 3475ff879b07SJung-uk Kim typedef struct acpi_sdev_namespace 3476fe0f0bbbSJung-uk Kim { 3477ff879b07SJung-uk Kim ACPI_SDEV_HEADER Header; 3478ff879b07SJung-uk Kim UINT16 DeviceIdOffset; 3479ff879b07SJung-uk Kim UINT16 DeviceIdLength; 3480ff879b07SJung-uk Kim UINT16 VendorDataOffset; 3481ff879b07SJung-uk Kim UINT16 VendorDataLength; 3482d6dd1baeSJung-uk Kim 3483ff879b07SJung-uk Kim } ACPI_SDEV_NAMESPACE; 34845ef50723SJung-uk Kim 3485cfd1ed46SJung-uk Kim typedef struct acpi_sdev_secure_component 3486cfd1ed46SJung-uk Kim { 3487cfd1ed46SJung-uk Kim UINT16 SecureComponentOffset; 3488cfd1ed46SJung-uk Kim UINT16 SecureComponentLength; 3489cfd1ed46SJung-uk Kim 3490cfd1ed46SJung-uk Kim } ACPI_SDEV_SECURE_COMPONENT; 3491cfd1ed46SJung-uk Kim 3492cfd1ed46SJung-uk Kim 3493cfd1ed46SJung-uk Kim /* 3494cfd1ed46SJung-uk Kim * SDEV sub-subtables ("Components") for above 3495cfd1ed46SJung-uk Kim */ 3496cfd1ed46SJung-uk Kim typedef struct acpi_sdev_component 3497cfd1ed46SJung-uk Kim { 3498cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 3499cfd1ed46SJung-uk Kim 3500cfd1ed46SJung-uk Kim } ACPI_SDEV_COMPONENT; 3501cfd1ed46SJung-uk Kim 3502cfd1ed46SJung-uk Kim 3503cfd1ed46SJung-uk Kim /* Values for sub-subtable type above */ 3504cfd1ed46SJung-uk Kim 3505cfd1ed46SJung-uk Kim enum AcpiSacType 3506cfd1ed46SJung-uk Kim { 3507cfd1ed46SJung-uk Kim ACPI_SDEV_TYPE_ID_COMPONENT = 0, 3508cfd1ed46SJung-uk Kim ACPI_SDEV_TYPE_MEM_COMPONENT = 1 3509cfd1ed46SJung-uk Kim }; 3510cfd1ed46SJung-uk Kim 3511cfd1ed46SJung-uk Kim typedef struct acpi_sdev_id_component 3512cfd1ed46SJung-uk Kim { 3513cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 3514cfd1ed46SJung-uk Kim UINT16 HardwareIdOffset; 3515cfd1ed46SJung-uk Kim UINT16 HardwareIdLength; 3516cfd1ed46SJung-uk Kim UINT16 SubsystemIdOffset; 3517cfd1ed46SJung-uk Kim UINT16 SubsystemIdLength; 3518cfd1ed46SJung-uk Kim UINT16 HardwareRevision; 3519cfd1ed46SJung-uk Kim UINT8 HardwareRevPresent; 3520cfd1ed46SJung-uk Kim UINT8 ClassCodePresent; 3521cfd1ed46SJung-uk Kim UINT8 PciBaseClass; 3522cfd1ed46SJung-uk Kim UINT8 PciSubClass; 3523cfd1ed46SJung-uk Kim UINT8 PciProgrammingXface; 3524cfd1ed46SJung-uk Kim 3525cfd1ed46SJung-uk Kim } ACPI_SDEV_ID_COMPONENT; 3526cfd1ed46SJung-uk Kim 3527cfd1ed46SJung-uk Kim typedef struct acpi_sdev_mem_component 3528cfd1ed46SJung-uk Kim { 3529cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 3530cfd1ed46SJung-uk Kim UINT32 Reserved; 3531cfd1ed46SJung-uk Kim UINT64 MemoryBaseAddress; 3532cfd1ed46SJung-uk Kim UINT64 MemoryLength; 3533cfd1ed46SJung-uk Kim 3534cfd1ed46SJung-uk Kim } ACPI_SDEV_MEM_COMPONENT; 3535cfd1ed46SJung-uk Kim 3536cfd1ed46SJung-uk Kim 3537ff879b07SJung-uk Kim /* 1: PCIe Endpoint Device Based Device Structure */ 3538ff879b07SJung-uk Kim 3539ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie 35405ef50723SJung-uk Kim { 3541ff879b07SJung-uk Kim ACPI_SDEV_HEADER Header; 3542ff879b07SJung-uk Kim UINT16 Segment; 3543ff879b07SJung-uk Kim UINT16 StartBus; 3544ff879b07SJung-uk Kim UINT16 PathOffset; 3545ff879b07SJung-uk Kim UINT16 PathLength; 3546ff879b07SJung-uk Kim UINT16 VendorDataOffset; 3547ff879b07SJung-uk Kim UINT16 VendorDataLength; 3548ff879b07SJung-uk Kim 3549ff879b07SJung-uk Kim } ACPI_SDEV_PCIE; 3550ff879b07SJung-uk Kim 3551ff879b07SJung-uk Kim /* 1a: PCIe Endpoint path entry */ 3552ff879b07SJung-uk Kim 3553ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie_path 3554ff879b07SJung-uk Kim { 35555ef50723SJung-uk Kim UINT8 Device; 35565ef50723SJung-uk Kim UINT8 Function; 35575ef50723SJung-uk Kim 3558ff879b07SJung-uk Kim } ACPI_SDEV_PCIE_PATH; 3559af051161SJung-uk Kim 3560af051161SJung-uk Kim 35611970d693SJung-uk Kim /******************************************************************************* 35621970d693SJung-uk Kim * 35631970d693SJung-uk Kim * SVKL - Storage Volume Key Location Table (ACPI 6.4) 35641970d693SJung-uk Kim * From: "Guest-Host-Communication Interface (GHCI) for Intel 35651970d693SJung-uk Kim * Trust Domain Extensions (Intel TDX)". 35661970d693SJung-uk Kim * Version 1 35671970d693SJung-uk Kim * 35681970d693SJung-uk Kim ******************************************************************************/ 35691970d693SJung-uk Kim 35701970d693SJung-uk Kim typedef struct acpi_table_svkl 35711970d693SJung-uk Kim { 35721970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 35731970d693SJung-uk Kim UINT32 Count; 35741970d693SJung-uk Kim 35751970d693SJung-uk Kim } ACPI_TABLE_SVKL; 35761970d693SJung-uk Kim 35771970d693SJung-uk Kim typedef struct acpi_svkl_key 35781970d693SJung-uk Kim { 35791970d693SJung-uk Kim UINT16 Type; 35801970d693SJung-uk Kim UINT16 Format; 35811970d693SJung-uk Kim UINT32 Size; 35821970d693SJung-uk Kim UINT64 Address; 35831970d693SJung-uk Kim 35841970d693SJung-uk Kim } ACPI_SVKL_KEY; 35851970d693SJung-uk Kim 35861970d693SJung-uk Kim enum acpi_svkl_type 35871970d693SJung-uk Kim { 35881970d693SJung-uk Kim ACPI_SVKL_TYPE_MAIN_STORAGE = 0, 35891970d693SJung-uk Kim ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */ 35901970d693SJung-uk Kim }; 35911970d693SJung-uk Kim 35921970d693SJung-uk Kim enum acpi_svkl_format 35931970d693SJung-uk Kim { 35941970d693SJung-uk Kim ACPI_SVKL_FORMAT_RAW_BINARY = 0, 35951970d693SJung-uk Kim ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */ 35961970d693SJung-uk Kim }; 35971970d693SJung-uk Kim 35981970d693SJung-uk Kim 3599ab71bbb7SJung-uk Kim /******************************************************************************* 3600ab71bbb7SJung-uk Kim * 3601ab71bbb7SJung-uk Kim * TDEL - TD-Event Log 3602ab71bbb7SJung-uk Kim * From: "Guest-Host-Communication Interface (GHCI) for Intel 3603ab71bbb7SJung-uk Kim * Trust Domain Extensions (Intel TDX)". 3604ab71bbb7SJung-uk Kim * September 2020 3605ab71bbb7SJung-uk Kim * 3606ab71bbb7SJung-uk Kim ******************************************************************************/ 3607ab71bbb7SJung-uk Kim 3608ab71bbb7SJung-uk Kim typedef struct acpi_table_tdel 3609ab71bbb7SJung-uk Kim { 3610ab71bbb7SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3611ab71bbb7SJung-uk Kim UINT32 Reserved; 3612ab71bbb7SJung-uk Kim UINT64 LogAreaMinimumLength; 3613ab71bbb7SJung-uk Kim UINT64 LogAreaStartAddress; 3614ab71bbb7SJung-uk Kim 3615ab71bbb7SJung-uk Kim } ACPI_TABLE_TDEL; 3616ab71bbb7SJung-uk Kim 3617d6dd1baeSJung-uk Kim /* Reset to default packing */ 3618d6dd1baeSJung-uk Kim 3619d6dd1baeSJung-uk Kim #pragma pack() 3620d6dd1baeSJung-uk Kim 3621d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */ 3622