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