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 * 1129f37e9bSJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2021, 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 */ 171*1970d693SJung-uk Kim #define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */ 172a371a5fdSJung-uk Kim #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 173d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 174313a0c13SJung-uk Kim #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 175ff879b07SJung-uk Kim #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 176d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 177ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 178ff879b07SJung-uk Kim #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 179ff879b07SJung-uk Kim #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 1807cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 181ff879b07SJung-uk Kim #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 182ff879b07SJung-uk Kim #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 183ff879b07SJung-uk Kim #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ 184cfd1ed46SJung-uk Kim #define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ 185ff879b07SJung-uk Kim #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 186ff879b07SJung-uk Kim #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 187*1970d693SJung-uk Kim #define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */ 188ff879b07SJung-uk Kim #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 189*1970d693SJung-uk Kim #define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */ 190ff879b07SJung-uk Kim #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 1915f9b24faSJung-uk Kim #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ 192ff879b07SJung-uk Kim #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 1933ee58df5SJung-uk Kim #define ACPI_SIG_NHLT "NHLT" /* Non-HDAudio Link Table */ 194*1970d693SJung-uk Kim #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ 195d6dd1baeSJung-uk Kim 196d6dd1baeSJung-uk Kim 197d6dd1baeSJung-uk Kim /* 198d6dd1baeSJung-uk Kim * All tables must be byte-packed to match the ACPI specification, since 199d6dd1baeSJung-uk Kim * the tables are provided by the system BIOS. 200d6dd1baeSJung-uk Kim */ 201d6dd1baeSJung-uk Kim #pragma pack(1) 202d6dd1baeSJung-uk Kim 203d6dd1baeSJung-uk Kim /* 2041df130f1SJung-uk Kim * Note: C bitfields are not used for this reason: 2051df130f1SJung-uk Kim * 2061df130f1SJung-uk Kim * "Bitfields are great and easy to read, but unfortunately the C language 2071df130f1SJung-uk Kim * does not specify the layout of bitfields in memory, which means they are 2081df130f1SJung-uk Kim * essentially useless for dealing with packed data in on-disk formats or 2091df130f1SJung-uk Kim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 2101df130f1SJung-uk Kim * this decision was a design error in C. Ritchie could have picked an order 2111df130f1SJung-uk Kim * and stuck with it." Norman Ramsey. 2121df130f1SJung-uk Kim * See http://stackoverflow.com/a/1053662/41661 213d6dd1baeSJung-uk Kim */ 214d6dd1baeSJung-uk Kim 215d6dd1baeSJung-uk Kim 216d6dd1baeSJung-uk Kim /******************************************************************************* 217d6dd1baeSJung-uk Kim * 218*1970d693SJung-uk Kim * BDAT - BIOS Data ACPI Table 219*1970d693SJung-uk Kim * 220*1970d693SJung-uk Kim * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5 221*1970d693SJung-uk Kim * Nov 2020 222*1970d693SJung-uk Kim * 223*1970d693SJung-uk Kim ******************************************************************************/ 224*1970d693SJung-uk Kim 225*1970d693SJung-uk Kim typedef struct acpi_table_bdat 226*1970d693SJung-uk Kim { 227*1970d693SJung-uk Kim ACPI_TABLE_HEADER Header; 228*1970d693SJung-uk Kim ACPI_GENERIC_ADDRESS Gas; 229*1970d693SJung-uk Kim 230*1970d693SJung-uk Kim } ACPI_TABLE_BDAT; 231*1970d693SJung-uk Kim 232*1970d693SJung-uk Kim 233*1970d693SJung-uk Kim /******************************************************************************* 234*1970d693SJung-uk Kim * 235a371a5fdSJung-uk Kim * IORT - IO Remapping Table 236a371a5fdSJung-uk Kim * 237a371a5fdSJung-uk Kim * Conforms to "IO Remapping Table System Software on ARM Platforms", 238cfd1ed46SJung-uk Kim * Document number: ARM DEN 0049E.b, Feb 2021 239a371a5fdSJung-uk Kim * 240a371a5fdSJung-uk Kim ******************************************************************************/ 241a371a5fdSJung-uk Kim 242a371a5fdSJung-uk Kim typedef struct acpi_table_iort 243a371a5fdSJung-uk Kim { 244a371a5fdSJung-uk Kim ACPI_TABLE_HEADER Header; 245a371a5fdSJung-uk Kim UINT32 NodeCount; 246a371a5fdSJung-uk Kim UINT32 NodeOffset; 247a371a5fdSJung-uk Kim UINT32 Reserved; 248a371a5fdSJung-uk Kim 249a371a5fdSJung-uk Kim } ACPI_TABLE_IORT; 250a371a5fdSJung-uk Kim 251a371a5fdSJung-uk Kim 252a371a5fdSJung-uk Kim /* 253a371a5fdSJung-uk Kim * IORT subtables 254a371a5fdSJung-uk Kim */ 255a371a5fdSJung-uk Kim typedef struct acpi_iort_node 256a371a5fdSJung-uk Kim { 257a371a5fdSJung-uk Kim UINT8 Type; 258a371a5fdSJung-uk Kim UINT16 Length; 259a371a5fdSJung-uk Kim UINT8 Revision; 260cfd1ed46SJung-uk Kim UINT32 Identifier; 261a371a5fdSJung-uk Kim UINT32 MappingCount; 262a371a5fdSJung-uk Kim UINT32 MappingOffset; 263a371a5fdSJung-uk Kim char NodeData[1]; 264a371a5fdSJung-uk Kim 265a371a5fdSJung-uk Kim } ACPI_IORT_NODE; 266a371a5fdSJung-uk Kim 267a371a5fdSJung-uk Kim /* Values for subtable Type above */ 268a371a5fdSJung-uk Kim 269a371a5fdSJung-uk Kim enum AcpiIortNodeType 270a371a5fdSJung-uk Kim { 271a371a5fdSJung-uk Kim ACPI_IORT_NODE_ITS_GROUP = 0x00, 272a371a5fdSJung-uk Kim ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 273a371a5fdSJung-uk Kim ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 274f8146b88SJung-uk Kim ACPI_IORT_NODE_SMMU = 0x03, 2753d90091dSJung-uk Kim ACPI_IORT_NODE_SMMU_V3 = 0x04, 276cfd1ed46SJung-uk Kim ACPI_IORT_NODE_PMCG = 0x05, 277cfd1ed46SJung-uk Kim ACPI_IORT_NODE_RMR = 0x06, 278a371a5fdSJung-uk Kim }; 279a371a5fdSJung-uk Kim 280a371a5fdSJung-uk Kim 281a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping 282a371a5fdSJung-uk Kim { 283a371a5fdSJung-uk Kim UINT32 InputBase; /* Lowest value in input range */ 284a371a5fdSJung-uk Kim UINT32 IdCount; /* Number of IDs */ 285a371a5fdSJung-uk Kim UINT32 OutputBase; /* Lowest value in output range */ 286a371a5fdSJung-uk Kim UINT32 OutputReference; /* A reference to the output node */ 287a371a5fdSJung-uk Kim UINT32 Flags; 288a371a5fdSJung-uk Kim 289a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING; 290a371a5fdSJung-uk Kim 291a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */ 292a371a5fdSJung-uk Kim 293a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1) 294a371a5fdSJung-uk Kim 295a371a5fdSJung-uk Kim 296a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access 297a371a5fdSJung-uk Kim { 298a371a5fdSJung-uk Kim UINT32 CacheCoherency; 299a371a5fdSJung-uk Kim UINT8 Hints; 300a371a5fdSJung-uk Kim UINT16 Reserved; 301a371a5fdSJung-uk Kim UINT8 MemoryFlags; 302a371a5fdSJung-uk Kim 303a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS; 304a371a5fdSJung-uk Kim 305a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */ 306a371a5fdSJung-uk Kim 307a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 308a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 309a371a5fdSJung-uk Kim 310a371a5fdSJung-uk Kim /* Masks for Hints field above */ 311a371a5fdSJung-uk Kim 312a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT (1) 313a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE (1<<1) 314a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ (1<<2) 315a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE (1<<3) 316a371a5fdSJung-uk Kim 317a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */ 318a371a5fdSJung-uk Kim 319a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY (1) 320a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES (1<<1) 321a371a5fdSJung-uk Kim 322a371a5fdSJung-uk Kim 323a371a5fdSJung-uk Kim /* 324a371a5fdSJung-uk Kim * IORT node specific subtables 325a371a5fdSJung-uk Kim */ 326a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group 327a371a5fdSJung-uk Kim { 328a371a5fdSJung-uk Kim UINT32 ItsCount; 329cd6518c7SJung-uk Kim UINT32 Identifiers[1]; /* GIC ITS identifier array */ 330a371a5fdSJung-uk Kim 331a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP; 332a371a5fdSJung-uk Kim 333a371a5fdSJung-uk Kim 334a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component 335a371a5fdSJung-uk Kim { 336a371a5fdSJung-uk Kim UINT32 NodeFlags; 337a371a5fdSJung-uk Kim UINT64 MemoryProperties; /* Memory access properties */ 338a371a5fdSJung-uk Kim UINT8 MemoryAddressLimit; /* Memory address size limit */ 339a371a5fdSJung-uk Kim char DeviceName[1]; /* Path of namespace object */ 340a371a5fdSJung-uk Kim 341a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT; 342a371a5fdSJung-uk Kim 3433d90091dSJung-uk Kim /* Masks for Flags field above */ 3443d90091dSJung-uk Kim 3453d90091dSJung-uk Kim #define ACPI_IORT_NC_STALL_SUPPORTED (1) 3463d90091dSJung-uk Kim #define ACPI_IORT_NC_PASID_BITS (31<<1) 347a371a5fdSJung-uk Kim 348a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex 349a371a5fdSJung-uk Kim { 350a371a5fdSJung-uk Kim UINT64 MemoryProperties; /* Memory access properties */ 351a371a5fdSJung-uk Kim UINT32 AtsAttribute; 352a371a5fdSJung-uk Kim UINT32 PciSegmentNumber; 3533d90091dSJung-uk Kim UINT8 MemoryAddressLimit; /* Memory address size limit */ 3543d90091dSJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 355a371a5fdSJung-uk Kim 356a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX; 357a371a5fdSJung-uk Kim 358cfd1ed46SJung-uk Kim /* Masks for AtsAttribute field above */ 359a371a5fdSJung-uk Kim 360cfd1ed46SJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */ 361cfd1ed46SJung-uk Kim #define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */ 362cfd1ed46SJung-uk Kim #define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */ 363a371a5fdSJung-uk Kim 364a371a5fdSJung-uk Kim 365a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu 366a371a5fdSJung-uk Kim { 367a371a5fdSJung-uk Kim UINT64 BaseAddress; /* SMMU base address */ 368a371a5fdSJung-uk Kim UINT64 Span; /* Length of memory range */ 369a371a5fdSJung-uk Kim UINT32 Model; 370a371a5fdSJung-uk Kim UINT32 Flags; 371a371a5fdSJung-uk Kim UINT32 GlobalInterruptOffset; 372a371a5fdSJung-uk Kim UINT32 ContextInterruptCount; 373a371a5fdSJung-uk Kim UINT32 ContextInterruptOffset; 374a371a5fdSJung-uk Kim UINT32 PmuInterruptCount; 375a371a5fdSJung-uk Kim UINT32 PmuInterruptOffset; 376a371a5fdSJung-uk Kim UINT64 Interrupts[1]; /* Interrupt array */ 377a371a5fdSJung-uk Kim 378a371a5fdSJung-uk Kim } ACPI_IORT_SMMU; 379a371a5fdSJung-uk Kim 380a371a5fdSJung-uk Kim /* Values for Model field above */ 381a371a5fdSJung-uk Kim 382a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 383a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 384a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 385a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 3865f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ 3875f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ 388a371a5fdSJung-uk Kim 389a371a5fdSJung-uk Kim /* Masks for Flags field above */ 390a371a5fdSJung-uk Kim 391a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 392a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 393a371a5fdSJung-uk Kim 3940d84335fSJung-uk Kim /* Global interrupt format */ 3950d84335fSJung-uk Kim 3960d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi 3970d84335fSJung-uk Kim { 3980d84335fSJung-uk Kim UINT32 NSgIrpt; 3990d84335fSJung-uk Kim UINT32 NSgIrptFlags; 4000d84335fSJung-uk Kim UINT32 NSgCfgIrpt; 4010d84335fSJung-uk Kim UINT32 NSgCfgIrptFlags; 4022f6a1a81SJung-uk Kim 4030d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI; 4040d84335fSJung-uk Kim 405a371a5fdSJung-uk Kim 406f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3 407f8146b88SJung-uk Kim { 408f8146b88SJung-uk Kim UINT64 BaseAddress; /* SMMUv3 base address */ 409f8146b88SJung-uk Kim UINT32 Flags; 410f8146b88SJung-uk Kim UINT32 Reserved; 411f8146b88SJung-uk Kim UINT64 VatosAddress; 4125f9b24faSJung-uk Kim UINT32 Model; 413f8146b88SJung-uk Kim UINT32 EventGsiv; 414f8146b88SJung-uk Kim UINT32 PriGsiv; 415f8146b88SJung-uk Kim UINT32 GerrGsiv; 416f8146b88SJung-uk Kim UINT32 SyncGsiv; 4173d90091dSJung-uk Kim UINT32 Pxm; 418b7b7e711SJung-uk Kim UINT32 IdMappingIndex; 419f8146b88SJung-uk Kim 420f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3; 421f8146b88SJung-uk Kim 4225f9b24faSJung-uk Kim /* Values for Model field above */ 4235f9b24faSJung-uk Kim 4245f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ 4255f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ 4265f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ 4275f9b24faSJung-uk Kim 428f8146b88SJung-uk Kim /* Masks for Flags field above */ 429f8146b88SJung-uk Kim 430f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 4313d90091dSJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1) 4325f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) 433f8146b88SJung-uk Kim 4343d90091dSJung-uk Kim typedef struct acpi_iort_pmcg 4353d90091dSJung-uk Kim { 4363d90091dSJung-uk Kim UINT64 Page0BaseAddress; 4373d90091dSJung-uk Kim UINT32 OverflowGsiv; 4383d90091dSJung-uk Kim UINT32 NodeReference; 4393d90091dSJung-uk Kim UINT64 Page1BaseAddress; 4403d90091dSJung-uk Kim 4413d90091dSJung-uk Kim } ACPI_IORT_PMCG; 4423d90091dSJung-uk Kim 443cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr { 444cfd1ed46SJung-uk Kim UINT32 Flags; 445cfd1ed46SJung-uk Kim UINT32 RmrCount; 446cfd1ed46SJung-uk Kim UINT32 RmrOffset; 447cfd1ed46SJung-uk Kim 448cfd1ed46SJung-uk Kim } ACPI_IORT_RMR; 449cfd1ed46SJung-uk Kim 450cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr_desc { 451cfd1ed46SJung-uk Kim UINT64 BaseAddress; 452cfd1ed46SJung-uk Kim UINT64 Length; 453cfd1ed46SJung-uk Kim UINT32 Reserved; 454cfd1ed46SJung-uk Kim 455cfd1ed46SJung-uk Kim } ACPI_IORT_RMR_DESC; 456f8146b88SJung-uk Kim 457a371a5fdSJung-uk Kim /******************************************************************************* 458a371a5fdSJung-uk Kim * 459d6dd1baeSJung-uk Kim * IVRS - I/O Virtualization Reporting Structure 460d6dd1baeSJung-uk Kim * Version 1 461d6dd1baeSJung-uk Kim * 462d6dd1baeSJung-uk Kim * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 463d6dd1baeSJung-uk Kim * Revision 1.26, February 2009. 464d6dd1baeSJung-uk Kim * 465d6dd1baeSJung-uk Kim ******************************************************************************/ 466d6dd1baeSJung-uk Kim 467d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs 468d6dd1baeSJung-uk Kim { 469d6dd1baeSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 470d6dd1baeSJung-uk Kim UINT32 Info; /* Common virtualization info */ 471d6dd1baeSJung-uk Kim UINT64 Reserved; 472d6dd1baeSJung-uk Kim 473d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS; 474d6dd1baeSJung-uk Kim 475d6dd1baeSJung-uk Kim /* Values for Info field above */ 476d6dd1baeSJung-uk Kim 477d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 478d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 479d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 480d6dd1baeSJung-uk Kim 481d6dd1baeSJung-uk Kim 482d6dd1baeSJung-uk Kim /* IVRS subtable header */ 483d6dd1baeSJung-uk Kim 484d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header 485d6dd1baeSJung-uk Kim { 486d6dd1baeSJung-uk Kim UINT8 Type; /* Subtable type */ 487d6dd1baeSJung-uk Kim UINT8 Flags; 488d6dd1baeSJung-uk Kim UINT16 Length; /* Subtable length */ 489d6dd1baeSJung-uk Kim UINT16 DeviceId; /* ID of IOMMU */ 490d6dd1baeSJung-uk Kim 491d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER; 492d6dd1baeSJung-uk Kim 493d6dd1baeSJung-uk Kim /* Values for subtable Type above */ 494d6dd1baeSJung-uk Kim 495d6dd1baeSJung-uk Kim enum AcpiIvrsType 496d6dd1baeSJung-uk Kim { 4973ee58df5SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE1 = 0x10, 4983ee58df5SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE2 = 0x11, 499cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE3 = 0x40, 500d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY1 = 0x20, 501d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY2 = 0x21, 502d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY3 = 0x22 503d6dd1baeSJung-uk Kim }; 504d6dd1baeSJung-uk Kim 505d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */ 506d6dd1baeSJung-uk Kim 507d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE (1) 508d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW (1<<1) 509d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW (1<<2) 510d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC (1<<3) 511d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB (1<<4) 512d6dd1baeSJung-uk Kim 513d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */ 514d6dd1baeSJung-uk Kim 515d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY (1) 516d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ (1<<1) 517d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE (1<<2) 518d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 519d6dd1baeSJung-uk Kim 520d6dd1baeSJung-uk Kim 521d6dd1baeSJung-uk Kim /* 522d6dd1baeSJung-uk Kim * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER 523d6dd1baeSJung-uk Kim */ 524d6dd1baeSJung-uk Kim 525d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 526d6dd1baeSJung-uk Kim 5273ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_10 528d6dd1baeSJung-uk Kim { 529d6dd1baeSJung-uk Kim ACPI_IVRS_HEADER Header; 530d6dd1baeSJung-uk Kim UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 531d6dd1baeSJung-uk Kim UINT64 BaseAddress; /* IOMMU control registers */ 532d6dd1baeSJung-uk Kim UINT16 PciSegmentGroup; 533d6dd1baeSJung-uk Kim UINT16 Info; /* MSI number and unit ID */ 5343ee58df5SJung-uk Kim UINT32 FeatureReporting; 535d6dd1baeSJung-uk Kim 5363ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE1; 5373ee58df5SJung-uk Kim 5383ee58df5SJung-uk Kim /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ 5393ee58df5SJung-uk Kim 5403ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_11 5413ee58df5SJung-uk Kim { 5423ee58df5SJung-uk Kim ACPI_IVRS_HEADER Header; 5433ee58df5SJung-uk Kim UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 5443ee58df5SJung-uk Kim UINT64 BaseAddress; /* IOMMU control registers */ 5453ee58df5SJung-uk Kim UINT16 PciSegmentGroup; 5463ee58df5SJung-uk Kim UINT16 Info; /* MSI number and unit ID */ 5473ee58df5SJung-uk Kim UINT32 Attributes; 5483ee58df5SJung-uk Kim UINT64 EfrRegisterImage; 5493ee58df5SJung-uk Kim UINT64 Reserved; 5503ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE2; 551d6dd1baeSJung-uk Kim 552d6dd1baeSJung-uk Kim /* Masks for Info field above */ 553d6dd1baeSJung-uk Kim 554d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 555d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ 556d6dd1baeSJung-uk Kim 557d6dd1baeSJung-uk Kim 558d6dd1baeSJung-uk Kim /* 559d6dd1baeSJung-uk Kim * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. 560d6dd1baeSJung-uk Kim * Upper two bits of the Type field are the (encoded) length of the structure. 561d6dd1baeSJung-uk Kim * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 562d6dd1baeSJung-uk Kim * are reserved for future use but not defined. 563d6dd1baeSJung-uk Kim */ 564d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header 565d6dd1baeSJung-uk Kim { 566d6dd1baeSJung-uk Kim UINT8 Type; 567d6dd1baeSJung-uk Kim UINT16 Id; 568d6dd1baeSJung-uk Kim UINT8 DataSetting; 569d6dd1baeSJung-uk Kim 570d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER; 571d6dd1baeSJung-uk Kim 572d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */ 573d6dd1baeSJung-uk Kim 574d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH 0xC0 575d6dd1baeSJung-uk Kim 576d6dd1baeSJung-uk Kim /* Values for device entry Type field above */ 577d6dd1baeSJung-uk Kim 578d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType 579d6dd1baeSJung-uk Kim { 580d6dd1baeSJung-uk Kim /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ 581d6dd1baeSJung-uk Kim 582d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_PAD4 = 0, 583d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALL = 1, 584d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_SELECT = 2, 585d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_START = 3, 586d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_END = 4, 587d6dd1baeSJung-uk Kim 588d6dd1baeSJung-uk Kim /* 8-byte device entries */ 589d6dd1baeSJung-uk Kim 590d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_PAD8 = 64, 591d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_NOT_USED = 65, 592d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ 593d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ 594d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ 595d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ 596cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses ACPI_IVRS_DEVICE8C */ 597cfd1ed46SJung-uk Kim 598cfd1ed46SJung-uk Kim /* Variable-length device entries */ 599cfd1ed46SJung-uk Kim 600cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */ 601d6dd1baeSJung-uk Kim }; 602d6dd1baeSJung-uk Kim 603d6dd1baeSJung-uk Kim /* Values for Data field above */ 604d6dd1baeSJung-uk Kim 605d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS (1) 606d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS (1<<1) 607d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS (1<<2) 608d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT (3<<4) 609d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS (1<<6) 610d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS (1<<7) 611d6dd1baeSJung-uk Kim 612d6dd1baeSJung-uk Kim 613d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */ 614d6dd1baeSJung-uk Kim 615d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4 616d6dd1baeSJung-uk Kim { 617d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 618d6dd1baeSJung-uk Kim 619d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4; 620d6dd1baeSJung-uk Kim 621d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */ 622d6dd1baeSJung-uk Kim 623d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a 624d6dd1baeSJung-uk Kim { 625d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 626d6dd1baeSJung-uk Kim UINT8 Reserved1; 627d6dd1baeSJung-uk Kim UINT16 UsedId; 628d6dd1baeSJung-uk Kim UINT8 Reserved2; 629d6dd1baeSJung-uk Kim 630d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A; 631d6dd1baeSJung-uk Kim 632d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */ 633d6dd1baeSJung-uk Kim 634d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b 635d6dd1baeSJung-uk Kim { 636d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 637d6dd1baeSJung-uk Kim UINT32 ExtendedData; 638d6dd1baeSJung-uk Kim 639d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B; 640d6dd1baeSJung-uk Kim 641d6dd1baeSJung-uk Kim /* Values for ExtendedData above */ 642d6dd1baeSJung-uk Kim 643d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED (1<<31) 644d6dd1baeSJung-uk Kim 645d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */ 646d6dd1baeSJung-uk Kim 647d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c 648d6dd1baeSJung-uk Kim { 649d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 650d6dd1baeSJung-uk Kim UINT8 Handle; 651d6dd1baeSJung-uk Kim UINT16 UsedId; 652d6dd1baeSJung-uk Kim UINT8 Variety; 653d6dd1baeSJung-uk Kim 654d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C; 655d6dd1baeSJung-uk Kim 656d6dd1baeSJung-uk Kim /* Values for Variety field above */ 657d6dd1baeSJung-uk Kim 658d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC 1 659d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET 2 660d6dd1baeSJung-uk Kim 661cfd1ed46SJung-uk Kim /* Type 240: variable-length device entry */ 662cfd1ed46SJung-uk Kim 663cfd1ed46SJung-uk Kim typedef struct acpi_ivrs_device_hid 664cfd1ed46SJung-uk Kim { 665cfd1ed46SJung-uk Kim ACPI_IVRS_DE_HEADER Header; 666cfd1ed46SJung-uk Kim UINT64 AcpiHid; 667cfd1ed46SJung-uk Kim UINT64 AcpiCid; 668cfd1ed46SJung-uk Kim UINT8 UidType; 669cfd1ed46SJung-uk Kim UINT8 UidLength; 670cfd1ed46SJung-uk Kim 671cfd1ed46SJung-uk Kim } ACPI_IVRS_DEVICE_HID; 672cfd1ed46SJung-uk Kim 673*1970d693SJung-uk Kim /* Values for UidType above */ 674*1970d693SJung-uk Kim 675*1970d693SJung-uk Kim #define ACPI_IVRS_UID_NOT_PRESENT 0 676*1970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_INTEGER 1 677*1970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_STRING 2 678d6dd1baeSJung-uk Kim 679d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 680d6dd1baeSJung-uk Kim 681d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory 682d6dd1baeSJung-uk Kim { 683d6dd1baeSJung-uk Kim ACPI_IVRS_HEADER Header; 684d6dd1baeSJung-uk Kim UINT16 AuxData; 685d6dd1baeSJung-uk Kim UINT64 Reserved; 686d6dd1baeSJung-uk Kim UINT64 StartAddress; 687d6dd1baeSJung-uk Kim UINT64 MemoryLength; 688d6dd1baeSJung-uk Kim 689d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY; 690d6dd1baeSJung-uk Kim 691d6dd1baeSJung-uk Kim 692d6dd1baeSJung-uk Kim /******************************************************************************* 693d6dd1baeSJung-uk Kim * 694313a0c13SJung-uk Kim * LPIT - Low Power Idle Table 695313a0c13SJung-uk Kim * 696a371a5fdSJung-uk Kim * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 697313a0c13SJung-uk Kim * 698313a0c13SJung-uk Kim ******************************************************************************/ 699313a0c13SJung-uk Kim 700313a0c13SJung-uk Kim typedef struct acpi_table_lpit 701313a0c13SJung-uk Kim { 702313a0c13SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 703313a0c13SJung-uk Kim 704313a0c13SJung-uk Kim } ACPI_TABLE_LPIT; 705313a0c13SJung-uk Kim 706313a0c13SJung-uk Kim 707313a0c13SJung-uk Kim /* LPIT subtable header */ 708313a0c13SJung-uk Kim 709313a0c13SJung-uk Kim typedef struct acpi_lpit_header 710313a0c13SJung-uk Kim { 711313a0c13SJung-uk Kim UINT32 Type; /* Subtable type */ 712313a0c13SJung-uk Kim UINT32 Length; /* Subtable length */ 713313a0c13SJung-uk Kim UINT16 UniqueId; 714313a0c13SJung-uk Kim UINT16 Reserved; 715313a0c13SJung-uk Kim UINT32 Flags; 716313a0c13SJung-uk Kim 717313a0c13SJung-uk Kim } ACPI_LPIT_HEADER; 718313a0c13SJung-uk Kim 719313a0c13SJung-uk Kim /* Values for subtable Type above */ 720313a0c13SJung-uk Kim 721313a0c13SJung-uk Kim enum AcpiLpitType 722313a0c13SJung-uk Kim { 723313a0c13SJung-uk Kim ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 724a371a5fdSJung-uk Kim ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 725313a0c13SJung-uk Kim }; 726313a0c13SJung-uk Kim 727313a0c13SJung-uk Kim /* Masks for Flags field above */ 728313a0c13SJung-uk Kim 729313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED (1) 730313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER (1<<1) 731313a0c13SJung-uk Kim 732313a0c13SJung-uk Kim /* 733313a0c13SJung-uk Kim * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER 734313a0c13SJung-uk Kim */ 735313a0c13SJung-uk Kim 736313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */ 737313a0c13SJung-uk Kim 738313a0c13SJung-uk Kim typedef struct acpi_lpit_native 739313a0c13SJung-uk Kim { 740313a0c13SJung-uk Kim ACPI_LPIT_HEADER Header; 741313a0c13SJung-uk Kim ACPI_GENERIC_ADDRESS EntryTrigger; 742313a0c13SJung-uk Kim UINT32 Residency; 743313a0c13SJung-uk Kim UINT32 Latency; 744313a0c13SJung-uk Kim ACPI_GENERIC_ADDRESS ResidencyCounter; 745313a0c13SJung-uk Kim UINT64 CounterFrequency; 746313a0c13SJung-uk Kim 747313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE; 748313a0c13SJung-uk Kim 749313a0c13SJung-uk Kim 750313a0c13SJung-uk Kim /******************************************************************************* 751313a0c13SJung-uk Kim * 752ff879b07SJung-uk Kim * MADT - Multiple APIC Description Table 753ff879b07SJung-uk Kim * Version 3 754ff879b07SJung-uk Kim * 755ff879b07SJung-uk Kim ******************************************************************************/ 756ff879b07SJung-uk Kim 757ff879b07SJung-uk Kim typedef struct acpi_table_madt 758ff879b07SJung-uk Kim { 759ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 760ff879b07SJung-uk Kim UINT32 Address; /* Physical address of local APIC */ 761ff879b07SJung-uk Kim UINT32 Flags; 762ff879b07SJung-uk Kim 763ff879b07SJung-uk Kim } ACPI_TABLE_MADT; 764ff879b07SJung-uk Kim 765ff879b07SJung-uk Kim /* Masks for Flags field above */ 766ff879b07SJung-uk Kim 767ff879b07SJung-uk Kim #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 768ff879b07SJung-uk Kim 769ff879b07SJung-uk Kim /* Values for PCATCompat flag */ 770ff879b07SJung-uk Kim 771ff879b07SJung-uk Kim #define ACPI_MADT_DUAL_PIC 1 772ff879b07SJung-uk Kim #define ACPI_MADT_MULTIPLE_APIC 0 773ff879b07SJung-uk Kim 774ff879b07SJung-uk Kim 775ff879b07SJung-uk Kim /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 776ff879b07SJung-uk Kim 777ff879b07SJung-uk Kim enum AcpiMadtType 778ff879b07SJung-uk Kim { 779ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC = 0, 780ff879b07SJung-uk Kim ACPI_MADT_TYPE_IO_APIC = 1, 781ff879b07SJung-uk Kim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 782ff879b07SJung-uk Kim ACPI_MADT_TYPE_NMI_SOURCE = 3, 783ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 784ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 785ff879b07SJung-uk Kim ACPI_MADT_TYPE_IO_SAPIC = 6, 786ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 787ff879b07SJung-uk Kim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 788ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 789ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 790ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 791ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 792ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 793ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 794ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 795cfd1ed46SJung-uk Kim ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, 796cfd1ed46SJung-uk Kim ACPI_MADT_TYPE_RESERVED = 17 /* 17 and greater are reserved */ 797ff879b07SJung-uk Kim }; 798ff879b07SJung-uk Kim 799ff879b07SJung-uk Kim 800ff879b07SJung-uk Kim /* 801ff879b07SJung-uk Kim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 802ff879b07SJung-uk Kim */ 803ff879b07SJung-uk Kim 804ff879b07SJung-uk Kim /* 0: Processor Local APIC */ 805ff879b07SJung-uk Kim 806ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic 807ff879b07SJung-uk Kim { 808ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 809ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 810ff879b07SJung-uk Kim UINT8 Id; /* Processor's local APIC id */ 811ff879b07SJung-uk Kim UINT32 LapicFlags; 812ff879b07SJung-uk Kim 813ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC; 814ff879b07SJung-uk Kim 815ff879b07SJung-uk Kim 816ff879b07SJung-uk Kim /* 1: IO APIC */ 817ff879b07SJung-uk Kim 818ff879b07SJung-uk Kim typedef struct acpi_madt_io_apic 819ff879b07SJung-uk Kim { 820ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 821ff879b07SJung-uk Kim UINT8 Id; /* I/O APIC ID */ 822ff879b07SJung-uk Kim UINT8 Reserved; /* Reserved - must be zero */ 823ff879b07SJung-uk Kim UINT32 Address; /* APIC physical address */ 824ff879b07SJung-uk Kim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 825ff879b07SJung-uk Kim 826ff879b07SJung-uk Kim } ACPI_MADT_IO_APIC; 827ff879b07SJung-uk Kim 828ff879b07SJung-uk Kim 829ff879b07SJung-uk Kim /* 2: Interrupt Override */ 830ff879b07SJung-uk Kim 831ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_override 832ff879b07SJung-uk Kim { 833ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 834ff879b07SJung-uk Kim UINT8 Bus; /* 0 - ISA */ 835ff879b07SJung-uk Kim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 836ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 837ff879b07SJung-uk Kim UINT16 IntiFlags; 838ff879b07SJung-uk Kim 839ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_OVERRIDE; 840ff879b07SJung-uk Kim 841ff879b07SJung-uk Kim 842ff879b07SJung-uk Kim /* 3: NMI Source */ 843ff879b07SJung-uk Kim 844ff879b07SJung-uk Kim typedef struct acpi_madt_nmi_source 845ff879b07SJung-uk Kim { 846ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 847ff879b07SJung-uk Kim UINT16 IntiFlags; 848ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 849ff879b07SJung-uk Kim 850ff879b07SJung-uk Kim } ACPI_MADT_NMI_SOURCE; 851ff879b07SJung-uk Kim 852ff879b07SJung-uk Kim 853ff879b07SJung-uk Kim /* 4: Local APIC NMI */ 854ff879b07SJung-uk Kim 855ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_nmi 856ff879b07SJung-uk Kim { 857ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 858ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 859ff879b07SJung-uk Kim UINT16 IntiFlags; 860ff879b07SJung-uk Kim UINT8 Lint; /* LINTn to which NMI is connected */ 861ff879b07SJung-uk Kim 862ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_NMI; 863ff879b07SJung-uk Kim 864ff879b07SJung-uk Kim 865ff879b07SJung-uk Kim /* 5: Address Override */ 866ff879b07SJung-uk Kim 867ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_override 868ff879b07SJung-uk Kim { 869ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 870ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 871ff879b07SJung-uk Kim UINT64 Address; /* APIC physical address */ 872ff879b07SJung-uk Kim 873ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_OVERRIDE; 874ff879b07SJung-uk Kim 875ff879b07SJung-uk Kim 876ff879b07SJung-uk Kim /* 6: I/O Sapic */ 877ff879b07SJung-uk Kim 878ff879b07SJung-uk Kim typedef struct acpi_madt_io_sapic 879ff879b07SJung-uk Kim { 880ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 881ff879b07SJung-uk Kim UINT8 Id; /* I/O SAPIC ID */ 882ff879b07SJung-uk Kim UINT8 Reserved; /* Reserved, must be zero */ 883ff879b07SJung-uk Kim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 884ff879b07SJung-uk Kim UINT64 Address; /* SAPIC physical address */ 885ff879b07SJung-uk Kim 886ff879b07SJung-uk Kim } ACPI_MADT_IO_SAPIC; 887ff879b07SJung-uk Kim 888ff879b07SJung-uk Kim 889ff879b07SJung-uk Kim /* 7: Local Sapic */ 890ff879b07SJung-uk Kim 891ff879b07SJung-uk Kim typedef struct acpi_madt_local_sapic 892ff879b07SJung-uk Kim { 893ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 894ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 895ff879b07SJung-uk Kim UINT8 Id; /* SAPIC ID */ 896ff879b07SJung-uk Kim UINT8 Eid; /* SAPIC EID */ 897ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 898ff879b07SJung-uk Kim UINT32 LapicFlags; 899ff879b07SJung-uk Kim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 900ff879b07SJung-uk Kim char UidString[1]; /* String UID - ACPI 3.0 */ 901ff879b07SJung-uk Kim 902ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_SAPIC; 903ff879b07SJung-uk Kim 904ff879b07SJung-uk Kim 905ff879b07SJung-uk Kim /* 8: Platform Interrupt Source */ 906ff879b07SJung-uk Kim 907ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_source 908ff879b07SJung-uk Kim { 909ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 910ff879b07SJung-uk Kim UINT16 IntiFlags; 911ff879b07SJung-uk Kim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 912ff879b07SJung-uk Kim UINT8 Id; /* Processor ID */ 913ff879b07SJung-uk Kim UINT8 Eid; /* Processor EID */ 914ff879b07SJung-uk Kim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 915ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 916ff879b07SJung-uk Kim UINT32 Flags; /* Interrupt Source Flags */ 917ff879b07SJung-uk Kim 918ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_SOURCE; 919ff879b07SJung-uk Kim 920ff879b07SJung-uk Kim /* Masks for Flags field above */ 921ff879b07SJung-uk Kim 922ff879b07SJung-uk Kim #define ACPI_MADT_CPEI_OVERRIDE (1) 923ff879b07SJung-uk Kim 924ff879b07SJung-uk Kim 925ff879b07SJung-uk Kim /* 9: Processor Local X2APIC (ACPI 4.0) */ 926ff879b07SJung-uk Kim 927ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic 928ff879b07SJung-uk Kim { 929ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 930ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 931ff879b07SJung-uk Kim UINT32 LocalApicId; /* Processor x2APIC ID */ 932ff879b07SJung-uk Kim UINT32 LapicFlags; 933ff879b07SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 934ff879b07SJung-uk Kim 935ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC; 936ff879b07SJung-uk Kim 937ff879b07SJung-uk Kim 938ff879b07SJung-uk Kim /* 10: Local X2APIC NMI (ACPI 4.0) */ 939ff879b07SJung-uk Kim 940ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic_nmi 941ff879b07SJung-uk Kim { 942ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 943ff879b07SJung-uk Kim UINT16 IntiFlags; 944ff879b07SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 945ff879b07SJung-uk Kim UINT8 Lint; /* LINTn to which NMI is connected */ 946ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved - must be zero */ 947ff879b07SJung-uk Kim 948ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC_NMI; 949ff879b07SJung-uk Kim 950ff879b07SJung-uk Kim 951cd6518c7SJung-uk Kim /* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 changes) */ 952ff879b07SJung-uk Kim 953ff879b07SJung-uk Kim typedef struct acpi_madt_generic_interrupt 954ff879b07SJung-uk Kim { 955ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 956ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 957ff879b07SJung-uk Kim UINT32 CpuInterfaceNumber; 958ff879b07SJung-uk Kim UINT32 Uid; 959ff879b07SJung-uk Kim UINT32 Flags; 960ff879b07SJung-uk Kim UINT32 ParkingVersion; 961ff879b07SJung-uk Kim UINT32 PerformanceInterrupt; 962ff879b07SJung-uk Kim UINT64 ParkedAddress; 963ff879b07SJung-uk Kim UINT64 BaseAddress; 964ff879b07SJung-uk Kim UINT64 GicvBaseAddress; 965ff879b07SJung-uk Kim UINT64 GichBaseAddress; 966ff879b07SJung-uk Kim UINT32 VgicInterrupt; 967ff879b07SJung-uk Kim UINT64 GicrBaseAddress; 968ff879b07SJung-uk Kim UINT64 ArmMpidr; 969ff879b07SJung-uk Kim UINT8 EfficiencyClass; 970cd6518c7SJung-uk Kim UINT8 Reserved2[1]; 971cd6518c7SJung-uk Kim UINT16 SpeInterrupt; /* ACPI 6.3 */ 972ff879b07SJung-uk Kim 973ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_INTERRUPT; 974ff879b07SJung-uk Kim 975ff879b07SJung-uk Kim /* Masks for Flags field above */ 976ff879b07SJung-uk Kim 977ff879b07SJung-uk Kim /* ACPI_MADT_ENABLED (1) Processor is usable if set */ 978ff879b07SJung-uk Kim #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 979ff879b07SJung-uk Kim #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 980ff879b07SJung-uk Kim 981ff879b07SJung-uk Kim 982ff879b07SJung-uk Kim /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 983ff879b07SJung-uk Kim 984ff879b07SJung-uk Kim typedef struct acpi_madt_generic_distributor 985ff879b07SJung-uk Kim { 986ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 987ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 988ff879b07SJung-uk Kim UINT32 GicId; 989ff879b07SJung-uk Kim UINT64 BaseAddress; 990ff879b07SJung-uk Kim UINT32 GlobalIrqBase; 991ff879b07SJung-uk Kim UINT8 Version; 992ff879b07SJung-uk Kim UINT8 Reserved2[3]; /* Reserved - must be zero */ 993ff879b07SJung-uk Kim 994ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_DISTRIBUTOR; 995ff879b07SJung-uk Kim 996ff879b07SJung-uk Kim /* Values for Version field above */ 997ff879b07SJung-uk Kim 998ff879b07SJung-uk Kim enum AcpiMadtGicVersion 999ff879b07SJung-uk Kim { 1000ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_NONE = 0, 1001ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V1 = 1, 1002ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V2 = 2, 1003ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V3 = 3, 1004ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V4 = 4, 1005ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1006ff879b07SJung-uk Kim }; 1007ff879b07SJung-uk Kim 1008ff879b07SJung-uk Kim 1009ff879b07SJung-uk Kim /* 13: Generic MSI Frame (ACPI 5.1) */ 1010ff879b07SJung-uk Kim 1011ff879b07SJung-uk Kim typedef struct acpi_madt_generic_msi_frame 1012ff879b07SJung-uk Kim { 1013ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1014ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1015ff879b07SJung-uk Kim UINT32 MsiFrameId; 1016ff879b07SJung-uk Kim UINT64 BaseAddress; 1017ff879b07SJung-uk Kim UINT32 Flags; 1018ff879b07SJung-uk Kim UINT16 SpiCount; 1019ff879b07SJung-uk Kim UINT16 SpiBase; 1020ff879b07SJung-uk Kim 1021ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_MSI_FRAME; 1022ff879b07SJung-uk Kim 1023ff879b07SJung-uk Kim /* Masks for Flags field above */ 1024ff879b07SJung-uk Kim 1025ff879b07SJung-uk Kim #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1026ff879b07SJung-uk Kim 1027ff879b07SJung-uk Kim 1028ff879b07SJung-uk Kim /* 14: Generic Redistributor (ACPI 5.1) */ 1029ff879b07SJung-uk Kim 1030ff879b07SJung-uk Kim typedef struct acpi_madt_generic_redistributor 1031ff879b07SJung-uk Kim { 1032ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1033ff879b07SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 1034ff879b07SJung-uk Kim UINT64 BaseAddress; 1035ff879b07SJung-uk Kim UINT32 Length; 1036ff879b07SJung-uk Kim 1037ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_REDISTRIBUTOR; 1038ff879b07SJung-uk Kim 1039ff879b07SJung-uk Kim 1040ff879b07SJung-uk Kim /* 15: Generic Translator (ACPI 6.0) */ 1041ff879b07SJung-uk Kim 1042ff879b07SJung-uk Kim typedef struct acpi_madt_generic_translator 1043ff879b07SJung-uk Kim { 1044ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1045ff879b07SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 1046ff879b07SJung-uk Kim UINT32 TranslationId; 1047ff879b07SJung-uk Kim UINT64 BaseAddress; 1048ff879b07SJung-uk Kim UINT32 Reserved2; 1049ff879b07SJung-uk Kim 1050ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_TRANSLATOR; 1051ff879b07SJung-uk Kim 1052cfd1ed46SJung-uk Kim /* 16: Multiprocessor wakeup (ACPI 6.4) */ 1053cfd1ed46SJung-uk Kim 1054cfd1ed46SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup 1055cfd1ed46SJung-uk Kim { 1056cfd1ed46SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1057cfd1ed46SJung-uk Kim UINT16 MailboxVersion; 1058cfd1ed46SJung-uk Kim UINT32 Reserved; /* reserved - must be zero */ 1059cfd1ed46SJung-uk Kim UINT64 BaseAddress; 1060cfd1ed46SJung-uk Kim 1061cfd1ed46SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP; 1062cfd1ed46SJung-uk Kim 1063*1970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032 1064*1970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048 1065*1970d693SJung-uk Kim 1066*1970d693SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup_mailbox 1067*1970d693SJung-uk Kim { 1068*1970d693SJung-uk Kim UINT16 Command; 1069*1970d693SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 1070*1970d693SJung-uk Kim UINT32 ApicId; 1071*1970d693SJung-uk Kim UINT64 WakeupVector; 1072*1970d693SJung-uk Kim UINT8 ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */ 1073*1970d693SJung-uk Kim UINT8 ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */ 1074*1970d693SJung-uk Kim 1075*1970d693SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX; 1076*1970d693SJung-uk Kim 1077*1970d693SJung-uk Kim #define ACPI_MP_WAKE_COMMAND_WAKEUP 1 1078*1970d693SJung-uk Kim 1079ff879b07SJung-uk Kim 1080ff879b07SJung-uk Kim /* 1081ff879b07SJung-uk Kim * Common flags fields for MADT subtables 1082ff879b07SJung-uk Kim */ 1083ff879b07SJung-uk Kim 1084ff879b07SJung-uk Kim /* MADT Local APIC flags */ 1085ff879b07SJung-uk Kim 1086ff879b07SJung-uk Kim #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1087ff879b07SJung-uk Kim 1088ff879b07SJung-uk Kim /* MADT MPS INTI flags (IntiFlags) */ 1089ff879b07SJung-uk Kim 1090ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1091ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1092ff879b07SJung-uk Kim 1093ff879b07SJung-uk Kim /* Values for MPS INTI flags */ 1094ff879b07SJung-uk Kim 1095ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_CONFORMS 0 1096ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1097ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_RESERVED 2 1098ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1099ff879b07SJung-uk Kim 1100ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_CONFORMS (0) 1101ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_EDGE (1<<2) 1102ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1103ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1104ff879b07SJung-uk Kim 1105ff879b07SJung-uk Kim 1106ff879b07SJung-uk Kim /******************************************************************************* 1107ff879b07SJung-uk Kim * 1108313a0c13SJung-uk Kim * MCFG - PCI Memory Mapped Configuration table and subtable 1109d6dd1baeSJung-uk Kim * Version 1 1110d6dd1baeSJung-uk Kim * 1111d6dd1baeSJung-uk Kim * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 1112d6dd1baeSJung-uk Kim * 1113d6dd1baeSJung-uk Kim ******************************************************************************/ 1114d6dd1baeSJung-uk Kim 1115d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg 1116d6dd1baeSJung-uk Kim { 1117d6dd1baeSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1118d6dd1baeSJung-uk Kim UINT8 Reserved[8]; 1119d6dd1baeSJung-uk Kim 1120d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG; 1121d6dd1baeSJung-uk Kim 1122d6dd1baeSJung-uk Kim 1123d6dd1baeSJung-uk Kim /* Subtable */ 1124d6dd1baeSJung-uk Kim 1125d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation 1126d6dd1baeSJung-uk Kim { 1127d6dd1baeSJung-uk Kim UINT64 Address; /* Base address, processor-relative */ 1128d6dd1baeSJung-uk Kim UINT16 PciSegment; /* PCI segment group number */ 1129d6dd1baeSJung-uk Kim UINT8 StartBusNumber; /* Starting PCI Bus number */ 1130d6dd1baeSJung-uk Kim UINT8 EndBusNumber; /* Final PCI Bus number */ 1131d6dd1baeSJung-uk Kim UINT32 Reserved; 1132d6dd1baeSJung-uk Kim 1133d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION; 1134d6dd1baeSJung-uk Kim 1135d6dd1baeSJung-uk Kim 1136d6dd1baeSJung-uk Kim /******************************************************************************* 1137d6dd1baeSJung-uk Kim * 1138ca3cf4faSJung-uk Kim * MCHI - Management Controller Host Interface Table 1139ca3cf4faSJung-uk Kim * Version 1 1140ca3cf4faSJung-uk Kim * 1141ca3cf4faSJung-uk Kim * Conforms to "Management Component Transport Protocol (MCTP) Host 1142ca3cf4faSJung-uk Kim * Interface Specification", Revision 1.0.0a, October 13, 2009 1143ca3cf4faSJung-uk Kim * 1144ca3cf4faSJung-uk Kim ******************************************************************************/ 1145ca3cf4faSJung-uk Kim 1146ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi 1147ca3cf4faSJung-uk Kim { 1148ca3cf4faSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1149ca3cf4faSJung-uk Kim UINT8 InterfaceType; 1150ca3cf4faSJung-uk Kim UINT8 Protocol; 1151ca3cf4faSJung-uk Kim UINT64 ProtocolData; 1152ca3cf4faSJung-uk Kim UINT8 InterruptType; 1153ca3cf4faSJung-uk Kim UINT8 Gpe; 1154ca3cf4faSJung-uk Kim UINT8 PciDeviceFlag; 1155ca3cf4faSJung-uk Kim UINT32 GlobalInterrupt; 1156ca3cf4faSJung-uk Kim ACPI_GENERIC_ADDRESS ControlRegister; 1157ca3cf4faSJung-uk Kim UINT8 PciSegment; 1158ca3cf4faSJung-uk Kim UINT8 PciBus; 1159ca3cf4faSJung-uk Kim UINT8 PciDevice; 1160ca3cf4faSJung-uk Kim UINT8 PciFunction; 1161ca3cf4faSJung-uk Kim 1162ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI; 1163ca3cf4faSJung-uk Kim 1164ca3cf4faSJung-uk Kim 1165ca3cf4faSJung-uk Kim /******************************************************************************* 1166ca3cf4faSJung-uk Kim * 1167ff879b07SJung-uk Kim * MPST - Memory Power State Table (ACPI 5.0) 1168ff879b07SJung-uk Kim * Version 1 1169ff879b07SJung-uk Kim * 1170ff879b07SJung-uk Kim ******************************************************************************/ 1171ff879b07SJung-uk Kim 1172ff879b07SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \ 1173ff879b07SJung-uk Kim UINT8 ChannelId; \ 1174ff879b07SJung-uk Kim UINT8 Reserved1[3]; \ 1175ff879b07SJung-uk Kim UINT16 PowerNodeCount; \ 1176ff879b07SJung-uk Kim UINT16 Reserved2; 1177ff879b07SJung-uk Kim 1178ff879b07SJung-uk Kim /* Main table */ 1179ff879b07SJung-uk Kim 1180ff879b07SJung-uk Kim typedef struct acpi_table_mpst 1181ff879b07SJung-uk Kim { 1182ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1183ff879b07SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1184ff879b07SJung-uk Kim 1185ff879b07SJung-uk Kim } ACPI_TABLE_MPST; 1186ff879b07SJung-uk Kim 1187ff879b07SJung-uk Kim 1188ff879b07SJung-uk Kim /* Memory Platform Communication Channel Info */ 1189ff879b07SJung-uk Kim 1190ff879b07SJung-uk Kim typedef struct acpi_mpst_channel 1191ff879b07SJung-uk Kim { 1192ff879b07SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1193ff879b07SJung-uk Kim 1194ff879b07SJung-uk Kim } ACPI_MPST_CHANNEL; 1195ff879b07SJung-uk Kim 1196ff879b07SJung-uk Kim 1197ff879b07SJung-uk Kim /* Memory Power Node Structure */ 1198ff879b07SJung-uk Kim 1199ff879b07SJung-uk Kim typedef struct acpi_mpst_power_node 1200ff879b07SJung-uk Kim { 1201ff879b07SJung-uk Kim UINT8 Flags; 1202ff879b07SJung-uk Kim UINT8 Reserved1; 1203ff879b07SJung-uk Kim UINT16 NodeId; 1204ff879b07SJung-uk Kim UINT32 Length; 1205ff879b07SJung-uk Kim UINT64 RangeAddress; 1206ff879b07SJung-uk Kim UINT64 RangeLength; 1207ff879b07SJung-uk Kim UINT32 NumPowerStates; 1208ff879b07SJung-uk Kim UINT32 NumPhysicalComponents; 1209ff879b07SJung-uk Kim 1210ff879b07SJung-uk Kim } ACPI_MPST_POWER_NODE; 1211ff879b07SJung-uk Kim 1212ff879b07SJung-uk Kim /* Values for Flags field above */ 1213ff879b07SJung-uk Kim 1214ff879b07SJung-uk Kim #define ACPI_MPST_ENABLED 1 1215ff879b07SJung-uk Kim #define ACPI_MPST_POWER_MANAGED 2 1216ff879b07SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE 4 1217ff879b07SJung-uk Kim 1218ff879b07SJung-uk Kim 1219ff879b07SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */ 1220ff879b07SJung-uk Kim 1221ff879b07SJung-uk Kim typedef struct acpi_mpst_power_state 1222ff879b07SJung-uk Kim { 1223ff879b07SJung-uk Kim UINT8 PowerState; 1224ff879b07SJung-uk Kim UINT8 InfoIndex; 1225ff879b07SJung-uk Kim 1226ff879b07SJung-uk Kim } ACPI_MPST_POWER_STATE; 1227ff879b07SJung-uk Kim 1228ff879b07SJung-uk Kim 1229ff879b07SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */ 1230ff879b07SJung-uk Kim 1231ff879b07SJung-uk Kim typedef struct acpi_mpst_component 1232ff879b07SJung-uk Kim { 1233ff879b07SJung-uk Kim UINT16 ComponentId; 1234ff879b07SJung-uk Kim 1235ff879b07SJung-uk Kim } ACPI_MPST_COMPONENT; 1236ff879b07SJung-uk Kim 1237ff879b07SJung-uk Kim 1238ff879b07SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 1239ff879b07SJung-uk Kim 1240ff879b07SJung-uk Kim typedef struct acpi_mpst_data_hdr 1241ff879b07SJung-uk Kim { 1242ff879b07SJung-uk Kim UINT16 CharacteristicsCount; 1243ff879b07SJung-uk Kim UINT16 Reserved; 1244ff879b07SJung-uk Kim 1245ff879b07SJung-uk Kim } ACPI_MPST_DATA_HDR; 1246ff879b07SJung-uk Kim 1247ff879b07SJung-uk Kim typedef struct acpi_mpst_power_data 1248ff879b07SJung-uk Kim { 1249ff879b07SJung-uk Kim UINT8 StructureId; 1250ff879b07SJung-uk Kim UINT8 Flags; 1251ff879b07SJung-uk Kim UINT16 Reserved1; 1252ff879b07SJung-uk Kim UINT32 AveragePower; 1253ff879b07SJung-uk Kim UINT32 PowerSaving; 1254ff879b07SJung-uk Kim UINT64 ExitLatency; 1255ff879b07SJung-uk Kim UINT64 Reserved2; 1256ff879b07SJung-uk Kim 1257ff879b07SJung-uk Kim } ACPI_MPST_POWER_DATA; 1258ff879b07SJung-uk Kim 1259ff879b07SJung-uk Kim /* Values for Flags field above */ 1260ff879b07SJung-uk Kim 1261ff879b07SJung-uk Kim #define ACPI_MPST_PRESERVE 1 1262ff879b07SJung-uk Kim #define ACPI_MPST_AUTOENTRY 2 1263ff879b07SJung-uk Kim #define ACPI_MPST_AUTOEXIT 4 1264ff879b07SJung-uk Kim 1265ff879b07SJung-uk Kim 1266ff879b07SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */ 1267ff879b07SJung-uk Kim 1268ff879b07SJung-uk Kim typedef struct acpi_mpst_shared 1269ff879b07SJung-uk Kim { 1270ff879b07SJung-uk Kim UINT32 Signature; 1271ff879b07SJung-uk Kim UINT16 PccCommand; 1272ff879b07SJung-uk Kim UINT16 PccStatus; 1273ff879b07SJung-uk Kim UINT32 CommandRegister; 1274ff879b07SJung-uk Kim UINT32 StatusRegister; 1275ff879b07SJung-uk Kim UINT32 PowerStateId; 1276ff879b07SJung-uk Kim UINT32 PowerNodeId; 1277ff879b07SJung-uk Kim UINT64 EnergyConsumed; 1278ff879b07SJung-uk Kim UINT64 AveragePower; 1279ff879b07SJung-uk Kim 1280ff879b07SJung-uk Kim } ACPI_MPST_SHARED; 1281ff879b07SJung-uk Kim 1282ff879b07SJung-uk Kim 1283ff879b07SJung-uk Kim /******************************************************************************* 1284ff879b07SJung-uk Kim * 1285ff879b07SJung-uk Kim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1286ff879b07SJung-uk Kim * Version 1 1287ff879b07SJung-uk Kim * 1288ff879b07SJung-uk Kim ******************************************************************************/ 1289ff879b07SJung-uk Kim 1290ff879b07SJung-uk Kim typedef struct acpi_table_msct 1291ff879b07SJung-uk Kim { 1292ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1293ff879b07SJung-uk Kim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1294ff879b07SJung-uk Kim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1295ff879b07SJung-uk Kim UINT32 MaxClockDomains; /* Max number of clock domains */ 1296ff879b07SJung-uk Kim UINT64 MaxAddress; /* Max physical address in system */ 1297ff879b07SJung-uk Kim 1298ff879b07SJung-uk Kim } ACPI_TABLE_MSCT; 1299ff879b07SJung-uk Kim 1300ff879b07SJung-uk Kim 1301ff879b07SJung-uk Kim /* Subtable - Maximum Proximity Domain Information. Version 1 */ 1302ff879b07SJung-uk Kim 1303ff879b07SJung-uk Kim typedef struct acpi_msct_proximity 1304ff879b07SJung-uk Kim { 1305ff879b07SJung-uk Kim UINT8 Revision; 1306ff879b07SJung-uk Kim UINT8 Length; 1307ff879b07SJung-uk Kim UINT32 RangeStart; /* Start of domain range */ 1308ff879b07SJung-uk Kim UINT32 RangeEnd; /* End of domain range */ 1309ff879b07SJung-uk Kim UINT32 ProcessorCapacity; 1310ff879b07SJung-uk Kim UINT64 MemoryCapacity; /* In bytes */ 1311ff879b07SJung-uk Kim 1312ff879b07SJung-uk Kim } ACPI_MSCT_PROXIMITY; 1313ff879b07SJung-uk Kim 1314ff879b07SJung-uk Kim 1315ff879b07SJung-uk Kim /******************************************************************************* 1316ff879b07SJung-uk Kim * 13177cf3e94aSJung-uk Kim * MSDM - Microsoft Data Management table 13187cf3e94aSJung-uk Kim * 13197cf3e94aSJung-uk Kim * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 13207cf3e94aSJung-uk Kim * November 29, 2011. Copyright 2011 Microsoft 13217cf3e94aSJung-uk Kim * 13227cf3e94aSJung-uk Kim ******************************************************************************/ 13237cf3e94aSJung-uk Kim 13247cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */ 13257cf3e94aSJung-uk Kim 13267cf3e94aSJung-uk Kim typedef struct acpi_table_msdm 13277cf3e94aSJung-uk Kim { 13287cf3e94aSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 13297cf3e94aSJung-uk Kim 13307cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM; 13317cf3e94aSJung-uk Kim 13327cf3e94aSJung-uk Kim 13337cf3e94aSJung-uk Kim /******************************************************************************* 13347cf3e94aSJung-uk Kim * 1335ff879b07SJung-uk Kim * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1336ff879b07SJung-uk Kim * Version 1 1337ff879b07SJung-uk Kim * 1338ff879b07SJung-uk Kim ******************************************************************************/ 1339ff879b07SJung-uk Kim 1340ff879b07SJung-uk Kim typedef struct acpi_table_nfit 1341ff879b07SJung-uk Kim { 1342ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1343ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1344ff879b07SJung-uk Kim 1345ff879b07SJung-uk Kim } ACPI_TABLE_NFIT; 1346ff879b07SJung-uk Kim 1347ff879b07SJung-uk Kim /* Subtable header for NFIT */ 1348ff879b07SJung-uk Kim 1349ff879b07SJung-uk Kim typedef struct acpi_nfit_header 1350ff879b07SJung-uk Kim { 1351ff879b07SJung-uk Kim UINT16 Type; 1352ff879b07SJung-uk Kim UINT16 Length; 1353ff879b07SJung-uk Kim 1354ff879b07SJung-uk Kim } ACPI_NFIT_HEADER; 1355ff879b07SJung-uk Kim 1356ff879b07SJung-uk Kim 1357ff879b07SJung-uk Kim /* Values for subtable type in ACPI_NFIT_HEADER */ 1358ff879b07SJung-uk Kim 1359ff879b07SJung-uk Kim enum AcpiNfitType 1360ff879b07SJung-uk Kim { 1361ff879b07SJung-uk Kim ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1362ff879b07SJung-uk Kim ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1363ff879b07SJung-uk Kim ACPI_NFIT_TYPE_INTERLEAVE = 2, 1364ff879b07SJung-uk Kim ACPI_NFIT_TYPE_SMBIOS = 3, 1365ff879b07SJung-uk Kim ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1366ff879b07SJung-uk Kim ACPI_NFIT_TYPE_DATA_REGION = 5, 1367ff879b07SJung-uk Kim ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1368ff879b07SJung-uk Kim ACPI_NFIT_TYPE_CAPABILITIES = 7, 1369ff879b07SJung-uk Kim ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ 1370ff879b07SJung-uk Kim }; 1371ff879b07SJung-uk Kim 1372ff879b07SJung-uk Kim /* 1373ff879b07SJung-uk Kim * NFIT Subtables 1374ff879b07SJung-uk Kim */ 1375ff879b07SJung-uk Kim 1376ff879b07SJung-uk Kim /* 0: System Physical Address Range Structure */ 1377ff879b07SJung-uk Kim 1378ff879b07SJung-uk Kim typedef struct acpi_nfit_system_address 1379ff879b07SJung-uk Kim { 1380ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1381ff879b07SJung-uk Kim UINT16 RangeIndex; 1382ff879b07SJung-uk Kim UINT16 Flags; 1383ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1384ff879b07SJung-uk Kim UINT32 ProximityDomain; 1385ff879b07SJung-uk Kim UINT8 RangeGuid[16]; 1386ff879b07SJung-uk Kim UINT64 Address; 1387ff879b07SJung-uk Kim UINT64 Length; 1388ff879b07SJung-uk Kim UINT64 MemoryMapping; 1389cfd1ed46SJung-uk Kim UINT64 LocationCookie; /* ACPI 6.4 */ 1390ff879b07SJung-uk Kim 1391ff879b07SJung-uk Kim } ACPI_NFIT_SYSTEM_ADDRESS; 1392ff879b07SJung-uk Kim 1393ff879b07SJung-uk Kim /* Flags */ 1394ff879b07SJung-uk Kim 1395ff879b07SJung-uk Kim #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1396ff879b07SJung-uk Kim #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1397cfd1ed46SJung-uk Kim #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */ 1398ff879b07SJung-uk Kim 1399ff879b07SJung-uk Kim /* Range Type GUIDs appear in the include/acuuid.h file */ 1400ff879b07SJung-uk Kim 1401ff879b07SJung-uk Kim 1402ff879b07SJung-uk Kim /* 1: Memory Device to System Address Range Map Structure */ 1403ff879b07SJung-uk Kim 1404ff879b07SJung-uk Kim typedef struct acpi_nfit_memory_map 1405ff879b07SJung-uk Kim { 1406ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1407ff879b07SJung-uk Kim UINT32 DeviceHandle; 1408ff879b07SJung-uk Kim UINT16 PhysicalId; 1409ff879b07SJung-uk Kim UINT16 RegionId; 1410ff879b07SJung-uk Kim UINT16 RangeIndex; 1411ff879b07SJung-uk Kim UINT16 RegionIndex; 1412ff879b07SJung-uk Kim UINT64 RegionSize; 1413ff879b07SJung-uk Kim UINT64 RegionOffset; 1414ff879b07SJung-uk Kim UINT64 Address; 1415ff879b07SJung-uk Kim UINT16 InterleaveIndex; 1416ff879b07SJung-uk Kim UINT16 InterleaveWays; 1417ff879b07SJung-uk Kim UINT16 Flags; 1418ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 1419ff879b07SJung-uk Kim 1420ff879b07SJung-uk Kim } ACPI_NFIT_MEMORY_MAP; 1421ff879b07SJung-uk Kim 1422ff879b07SJung-uk Kim /* Flags */ 1423ff879b07SJung-uk Kim 1424ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1425ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1426ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1427ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1428ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1429ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1430ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1431ff879b07SJung-uk Kim 1432ff879b07SJung-uk Kim 1433ff879b07SJung-uk Kim /* 2: Interleave Structure */ 1434ff879b07SJung-uk Kim 1435ff879b07SJung-uk Kim typedef struct acpi_nfit_interleave 1436ff879b07SJung-uk Kim { 1437ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1438ff879b07SJung-uk Kim UINT16 InterleaveIndex; 1439ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 1440ff879b07SJung-uk Kim UINT32 LineCount; 1441ff879b07SJung-uk Kim UINT32 LineSize; 1442ff879b07SJung-uk Kim UINT32 LineOffset[1]; /* Variable length */ 1443ff879b07SJung-uk Kim 1444ff879b07SJung-uk Kim } ACPI_NFIT_INTERLEAVE; 1445ff879b07SJung-uk Kim 1446ff879b07SJung-uk Kim 1447ff879b07SJung-uk Kim /* 3: SMBIOS Management Information Structure */ 1448ff879b07SJung-uk Kim 1449ff879b07SJung-uk Kim typedef struct acpi_nfit_smbios 1450ff879b07SJung-uk Kim { 1451ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1452ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1453ff879b07SJung-uk Kim UINT8 Data[1]; /* Variable length */ 1454ff879b07SJung-uk Kim 1455ff879b07SJung-uk Kim } ACPI_NFIT_SMBIOS; 1456ff879b07SJung-uk Kim 1457ff879b07SJung-uk Kim 1458ff879b07SJung-uk Kim /* 4: NVDIMM Control Region Structure */ 1459ff879b07SJung-uk Kim 1460ff879b07SJung-uk Kim typedef struct acpi_nfit_control_region 1461ff879b07SJung-uk Kim { 1462ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1463ff879b07SJung-uk Kim UINT16 RegionIndex; 1464ff879b07SJung-uk Kim UINT16 VendorId; 1465ff879b07SJung-uk Kim UINT16 DeviceId; 1466ff879b07SJung-uk Kim UINT16 RevisionId; 1467ff879b07SJung-uk Kim UINT16 SubsystemVendorId; 1468ff879b07SJung-uk Kim UINT16 SubsystemDeviceId; 1469ff879b07SJung-uk Kim UINT16 SubsystemRevisionId; 1470ff879b07SJung-uk Kim UINT8 ValidFields; 1471ff879b07SJung-uk Kim UINT8 ManufacturingLocation; 1472ff879b07SJung-uk Kim UINT16 ManufacturingDate; 1473ff879b07SJung-uk Kim UINT8 Reserved[2]; /* Reserved, must be zero */ 1474ff879b07SJung-uk Kim UINT32 SerialNumber; 1475ff879b07SJung-uk Kim UINT16 Code; 1476ff879b07SJung-uk Kim UINT16 Windows; 1477ff879b07SJung-uk Kim UINT64 WindowSize; 1478ff879b07SJung-uk Kim UINT64 CommandOffset; 1479ff879b07SJung-uk Kim UINT64 CommandSize; 1480ff879b07SJung-uk Kim UINT64 StatusOffset; 1481ff879b07SJung-uk Kim UINT64 StatusSize; 1482ff879b07SJung-uk Kim UINT16 Flags; 1483ff879b07SJung-uk Kim UINT8 Reserved1[6]; /* Reserved, must be zero */ 1484ff879b07SJung-uk Kim 1485ff879b07SJung-uk Kim } ACPI_NFIT_CONTROL_REGION; 1486ff879b07SJung-uk Kim 1487ff879b07SJung-uk Kim /* Flags */ 1488ff879b07SJung-uk Kim 1489ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1490ff879b07SJung-uk Kim 1491ff879b07SJung-uk Kim /* ValidFields bits */ 1492ff879b07SJung-uk Kim 1493ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 1494ff879b07SJung-uk Kim 1495ff879b07SJung-uk Kim 1496ff879b07SJung-uk Kim /* 5: NVDIMM Block Data Window Region Structure */ 1497ff879b07SJung-uk Kim 1498ff879b07SJung-uk Kim typedef struct acpi_nfit_data_region 1499ff879b07SJung-uk Kim { 1500ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1501ff879b07SJung-uk Kim UINT16 RegionIndex; 1502ff879b07SJung-uk Kim UINT16 Windows; 1503ff879b07SJung-uk Kim UINT64 Offset; 1504ff879b07SJung-uk Kim UINT64 Size; 1505ff879b07SJung-uk Kim UINT64 Capacity; 1506ff879b07SJung-uk Kim UINT64 StartAddress; 1507ff879b07SJung-uk Kim 1508ff879b07SJung-uk Kim } ACPI_NFIT_DATA_REGION; 1509ff879b07SJung-uk Kim 1510ff879b07SJung-uk Kim 1511ff879b07SJung-uk Kim /* 6: Flush Hint Address Structure */ 1512ff879b07SJung-uk Kim 1513ff879b07SJung-uk Kim typedef struct acpi_nfit_flush_address 1514ff879b07SJung-uk Kim { 1515ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1516ff879b07SJung-uk Kim UINT32 DeviceHandle; 1517ff879b07SJung-uk Kim UINT16 HintCount; 1518ff879b07SJung-uk Kim UINT8 Reserved[6]; /* Reserved, must be zero */ 1519ff879b07SJung-uk Kim UINT64 HintAddress[1]; /* Variable length */ 1520ff879b07SJung-uk Kim 1521ff879b07SJung-uk Kim } ACPI_NFIT_FLUSH_ADDRESS; 1522ff879b07SJung-uk Kim 1523ff879b07SJung-uk Kim 1524ff879b07SJung-uk Kim /* 7: Platform Capabilities Structure */ 1525ff879b07SJung-uk Kim 1526ff879b07SJung-uk Kim typedef struct acpi_nfit_capabilities 1527ff879b07SJung-uk Kim { 1528ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1529ff879b07SJung-uk Kim UINT8 HighestCapability; 1530ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 1531ff879b07SJung-uk Kim UINT32 Capabilities; 1532ff879b07SJung-uk Kim UINT32 Reserved2; 1533ff879b07SJung-uk Kim 1534ff879b07SJung-uk Kim } ACPI_NFIT_CAPABILITIES; 1535ff879b07SJung-uk Kim 1536ff879b07SJung-uk Kim /* Capabilities Flags */ 1537ff879b07SJung-uk Kim 1538ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ 1539ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ 1540ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ 1541ff879b07SJung-uk Kim 1542ff879b07SJung-uk Kim 1543ff879b07SJung-uk Kim /* 1544ff879b07SJung-uk Kim * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM 1545ff879b07SJung-uk Kim */ 1546ff879b07SJung-uk Kim typedef struct nfit_device_handle 1547ff879b07SJung-uk Kim { 1548ff879b07SJung-uk Kim UINT32 Handle; 1549ff879b07SJung-uk Kim 1550ff879b07SJung-uk Kim } NFIT_DEVICE_HANDLE; 1551ff879b07SJung-uk Kim 1552ff879b07SJung-uk Kim /* Device handle construction and extraction macros */ 1553ff879b07SJung-uk Kim 1554ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F 1555ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 1556ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 1557ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 1558ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 1559ff879b07SJung-uk Kim 1560ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 1561ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 1562ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_OFFSET 8 1563ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_OFFSET 12 1564ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_OFFSET 16 1565ff879b07SJung-uk Kim 1566ff879b07SJung-uk Kim /* Macro to construct a NFIT/NVDIMM device handle */ 1567ff879b07SJung-uk Kim 1568ff879b07SJung-uk Kim #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ 1569ff879b07SJung-uk Kim ((dimm) | \ 1570ff879b07SJung-uk Kim ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ 1571ff879b07SJung-uk Kim ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ 1572ff879b07SJung-uk Kim ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ 1573ff879b07SJung-uk Kim ((node) << ACPI_NFIT_NODE_ID_OFFSET)) 1574ff879b07SJung-uk Kim 1575ff879b07SJung-uk Kim /* Macros to extract individual fields from a NFIT/NVDIMM device handle */ 1576ff879b07SJung-uk Kim 1577ff879b07SJung-uk Kim #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ 1578ff879b07SJung-uk Kim ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) 1579ff879b07SJung-uk Kim 1580ff879b07SJung-uk Kim #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ 1581ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) 1582ff879b07SJung-uk Kim 1583ff879b07SJung-uk Kim #define ACPI_NFIT_GET_MEMORY_ID(handle) \ 1584ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) 1585ff879b07SJung-uk Kim 1586ff879b07SJung-uk Kim #define ACPI_NFIT_GET_SOCKET_ID(handle) \ 1587ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) 1588ff879b07SJung-uk Kim 1589ff879b07SJung-uk Kim #define ACPI_NFIT_GET_NODE_ID(handle) \ 1590ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) 1591ff879b07SJung-uk Kim 1592ff879b07SJung-uk Kim 1593ff879b07SJung-uk Kim /******************************************************************************* 1594ff879b07SJung-uk Kim * 1595ff879b07SJung-uk Kim * PCCT - Platform Communications Channel Table (ACPI 5.0) 1596ff879b07SJung-uk Kim * Version 2 (ACPI 6.2) 1597ff879b07SJung-uk Kim * 1598ff879b07SJung-uk Kim ******************************************************************************/ 1599ff879b07SJung-uk Kim 1600ff879b07SJung-uk Kim typedef struct acpi_table_pcct 1601ff879b07SJung-uk Kim { 1602ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1603ff879b07SJung-uk Kim UINT32 Flags; 1604ff879b07SJung-uk Kim UINT64 Reserved; 1605ff879b07SJung-uk Kim 1606ff879b07SJung-uk Kim } ACPI_TABLE_PCCT; 1607ff879b07SJung-uk Kim 1608ff879b07SJung-uk Kim /* Values for Flags field above */ 1609ff879b07SJung-uk Kim 1610ff879b07SJung-uk Kim #define ACPI_PCCT_DOORBELL 1 1611ff879b07SJung-uk Kim 1612ff879b07SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 1613ff879b07SJung-uk Kim 1614ff879b07SJung-uk Kim enum AcpiPcctType 1615ff879b07SJung-uk Kim { 1616ff879b07SJung-uk Kim ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 1617ff879b07SJung-uk Kim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 1618ff879b07SJung-uk Kim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 1619ff879b07SJung-uk Kim ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ 1620ff879b07SJung-uk Kim ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ 1621cfd1ed46SJung-uk Kim ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */ 1622cfd1ed46SJung-uk Kim ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 1623ff879b07SJung-uk Kim }; 1624ff879b07SJung-uk Kim 1625ff879b07SJung-uk Kim /* 1626ff879b07SJung-uk Kim * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1627ff879b07SJung-uk Kim */ 1628ff879b07SJung-uk Kim 1629ff879b07SJung-uk Kim /* 0: Generic Communications Subspace */ 1630ff879b07SJung-uk Kim 1631ff879b07SJung-uk Kim typedef struct acpi_pcct_subspace 1632ff879b07SJung-uk Kim { 1633ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1634ff879b07SJung-uk Kim UINT8 Reserved[6]; 1635ff879b07SJung-uk Kim UINT64 BaseAddress; 1636ff879b07SJung-uk Kim UINT64 Length; 1637ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1638ff879b07SJung-uk Kim UINT64 PreserveMask; 1639ff879b07SJung-uk Kim UINT64 WriteMask; 1640ff879b07SJung-uk Kim UINT32 Latency; 1641ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1642ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1643ff879b07SJung-uk Kim 1644ff879b07SJung-uk Kim } ACPI_PCCT_SUBSPACE; 1645ff879b07SJung-uk Kim 1646ff879b07SJung-uk Kim 1647ff879b07SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 1648ff879b07SJung-uk Kim 1649ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced 1650ff879b07SJung-uk Kim { 1651ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1652ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1653ff879b07SJung-uk Kim UINT8 Flags; 1654ff879b07SJung-uk Kim UINT8 Reserved; 1655ff879b07SJung-uk Kim UINT64 BaseAddress; 1656ff879b07SJung-uk Kim UINT64 Length; 1657ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1658ff879b07SJung-uk Kim UINT64 PreserveMask; 1659ff879b07SJung-uk Kim UINT64 WriteMask; 1660ff879b07SJung-uk Kim UINT32 Latency; 1661ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1662ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1663ff879b07SJung-uk Kim 1664ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED; 1665ff879b07SJung-uk Kim 1666ff879b07SJung-uk Kim 1667ff879b07SJung-uk Kim /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 1668ff879b07SJung-uk Kim 1669ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced_type2 1670ff879b07SJung-uk Kim { 1671ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1672ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1673ff879b07SJung-uk Kim UINT8 Flags; 1674ff879b07SJung-uk Kim UINT8 Reserved; 1675ff879b07SJung-uk Kim UINT64 BaseAddress; 1676ff879b07SJung-uk Kim UINT64 Length; 1677ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1678ff879b07SJung-uk Kim UINT64 PreserveMask; 1679ff879b07SJung-uk Kim UINT64 WriteMask; 1680ff879b07SJung-uk Kim UINT32 Latency; 1681ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1682ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1683ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1684ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1685ff879b07SJung-uk Kim UINT64 AckWriteMask; 1686ff879b07SJung-uk Kim 1687ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED_TYPE2; 1688ff879b07SJung-uk Kim 1689ff879b07SJung-uk Kim 1690ff879b07SJung-uk Kim /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ 1691ff879b07SJung-uk Kim 1692ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_master 1693ff879b07SJung-uk Kim { 1694ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1695ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1696ff879b07SJung-uk Kim UINT8 Flags; 1697ff879b07SJung-uk Kim UINT8 Reserved1; 1698ff879b07SJung-uk Kim UINT64 BaseAddress; 1699ff879b07SJung-uk Kim UINT32 Length; 1700ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1701ff879b07SJung-uk Kim UINT64 PreserveMask; 1702ff879b07SJung-uk Kim UINT64 WriteMask; 1703ff879b07SJung-uk Kim UINT32 Latency; 1704ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1705ff879b07SJung-uk Kim UINT32 MinTurnaroundTime; 1706ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1707ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1708ff879b07SJung-uk Kim UINT64 AckSetMask; 1709ff879b07SJung-uk Kim UINT64 Reserved2; 1710ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 1711ff879b07SJung-uk Kim UINT64 CmdCompleteMask; 1712ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdUpdateRegister; 1713ff879b07SJung-uk Kim UINT64 CmdUpdatePreserveMask; 1714ff879b07SJung-uk Kim UINT64 CmdUpdateSetMask; 1715ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 1716ff879b07SJung-uk Kim UINT64 ErrorStatusMask; 1717ff879b07SJung-uk Kim 1718ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_MASTER; 1719ff879b07SJung-uk Kim 1720ff879b07SJung-uk Kim 1721ff879b07SJung-uk Kim /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ 1722ff879b07SJung-uk Kim 1723ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_slave 1724ff879b07SJung-uk Kim { 1725ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1726ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1727ff879b07SJung-uk Kim UINT8 Flags; 1728ff879b07SJung-uk Kim UINT8 Reserved1; 1729ff879b07SJung-uk Kim UINT64 BaseAddress; 1730ff879b07SJung-uk Kim UINT32 Length; 1731ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1732ff879b07SJung-uk Kim UINT64 PreserveMask; 1733ff879b07SJung-uk Kim UINT64 WriteMask; 1734ff879b07SJung-uk Kim UINT32 Latency; 1735ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1736ff879b07SJung-uk Kim UINT32 MinTurnaroundTime; 1737ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1738ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1739ff879b07SJung-uk Kim UINT64 AckSetMask; 1740ff879b07SJung-uk Kim UINT64 Reserved2; 1741ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 1742ff879b07SJung-uk Kim UINT64 CmdCompleteMask; 1743ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdUpdateRegister; 1744ff879b07SJung-uk Kim UINT64 CmdUpdatePreserveMask; 1745ff879b07SJung-uk Kim UINT64 CmdUpdateSetMask; 1746ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 1747ff879b07SJung-uk Kim UINT64 ErrorStatusMask; 1748ff879b07SJung-uk Kim 1749ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SLAVE; 1750ff879b07SJung-uk Kim 1751cfd1ed46SJung-uk Kim /* 5: HW Registers based Communications Subspace */ 1752cfd1ed46SJung-uk Kim 1753cfd1ed46SJung-uk Kim typedef struct acpi_pcct_hw_reg 1754cfd1ed46SJung-uk Kim { 1755cfd1ed46SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1756cfd1ed46SJung-uk Kim UINT16 Version; 1757cfd1ed46SJung-uk Kim UINT64 BaseAddress; 1758cfd1ed46SJung-uk Kim UINT64 Length; 1759cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1760cfd1ed46SJung-uk Kim UINT64 DoorbellPreserve; 1761cfd1ed46SJung-uk Kim UINT64 DoorbellWrite; 1762cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 1763cfd1ed46SJung-uk Kim UINT64 CmdCompleteMask; 1764cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 1765cfd1ed46SJung-uk Kim UINT64 ErrorStatusMask; 1766cfd1ed46SJung-uk Kim UINT32 NominalLatency; 1767cfd1ed46SJung-uk Kim UINT32 MinTurnaroundTime; 1768cfd1ed46SJung-uk Kim 1769cfd1ed46SJung-uk Kim } ACPI_PCCT_HW_REG; 1770cfd1ed46SJung-uk Kim 1771ff879b07SJung-uk Kim 1772ff879b07SJung-uk Kim /* Values for doorbell flags above */ 1773ff879b07SJung-uk Kim 1774ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY (1) 1775ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE (1<<1) 1776ff879b07SJung-uk Kim 1777ff879b07SJung-uk Kim 1778ff879b07SJung-uk Kim /* 1779ff879b07SJung-uk Kim * PCC memory structures (not part of the ACPI table) 1780ff879b07SJung-uk Kim */ 1781ff879b07SJung-uk Kim 1782ff879b07SJung-uk Kim /* Shared Memory Region */ 1783ff879b07SJung-uk Kim 1784ff879b07SJung-uk Kim typedef struct acpi_pcct_shared_memory 1785ff879b07SJung-uk Kim { 1786ff879b07SJung-uk Kim UINT32 Signature; 1787ff879b07SJung-uk Kim UINT16 Command; 1788ff879b07SJung-uk Kim UINT16 Status; 1789ff879b07SJung-uk Kim 1790ff879b07SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY; 1791ff879b07SJung-uk Kim 1792ff879b07SJung-uk Kim 1793ff879b07SJung-uk Kim /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ 1794ff879b07SJung-uk Kim 1795ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_shared_memory 1796ff879b07SJung-uk Kim { 1797ff879b07SJung-uk Kim UINT32 Signature; 1798ff879b07SJung-uk Kim UINT32 Flags; 1799ff879b07SJung-uk Kim UINT32 Length; 1800ff879b07SJung-uk Kim UINT32 Command; 1801ff879b07SJung-uk Kim 1802ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SHARED_MEMORY; 1803ff879b07SJung-uk Kim 1804ff879b07SJung-uk Kim 1805ff879b07SJung-uk Kim /******************************************************************************* 1806ff879b07SJung-uk Kim * 1807ff879b07SJung-uk Kim * PDTT - Platform Debug Trigger Table (ACPI 6.2) 1808ff879b07SJung-uk Kim * Version 0 1809ff879b07SJung-uk Kim * 1810ff879b07SJung-uk Kim ******************************************************************************/ 1811ff879b07SJung-uk Kim 1812ff879b07SJung-uk Kim typedef struct acpi_table_pdtt 1813ff879b07SJung-uk Kim { 1814ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1815ff879b07SJung-uk Kim UINT8 TriggerCount; 1816ff879b07SJung-uk Kim UINT8 Reserved[3]; 1817ff879b07SJung-uk Kim UINT32 ArrayOffset; 1818ff879b07SJung-uk Kim 1819ff879b07SJung-uk Kim } ACPI_TABLE_PDTT; 1820ff879b07SJung-uk Kim 1821ff879b07SJung-uk Kim 1822ff879b07SJung-uk Kim /* 1823ff879b07SJung-uk Kim * PDTT Communication Channel Identifier Structure. 1824ff879b07SJung-uk Kim * The number of these structures is defined by TriggerCount above, 1825ff879b07SJung-uk Kim * starting at ArrayOffset. 1826ff879b07SJung-uk Kim */ 1827ff879b07SJung-uk Kim typedef struct acpi_pdtt_channel 1828ff879b07SJung-uk Kim { 1829ff879b07SJung-uk Kim UINT8 SubchannelId; 1830ff879b07SJung-uk Kim UINT8 Flags; 1831ff879b07SJung-uk Kim 1832ff879b07SJung-uk Kim } ACPI_PDTT_CHANNEL; 1833ff879b07SJung-uk Kim 1834ff879b07SJung-uk Kim /* Flags for above */ 1835ff879b07SJung-uk Kim 1836ff879b07SJung-uk Kim #define ACPI_PDTT_RUNTIME_TRIGGER (1) 1837ff879b07SJung-uk Kim #define ACPI_PDTT_WAIT_COMPLETION (1<<1) 1838cd6518c7SJung-uk Kim #define ACPI_PDTT_TRIGGER_ORDER (1<<2) 1839ff879b07SJung-uk Kim 1840ff879b07SJung-uk Kim 1841ff879b07SJung-uk Kim /******************************************************************************* 1842ff879b07SJung-uk Kim * 1843cfd1ed46SJung-uk Kim * PHAT - Platform Health Assessment Table (ACPI 6.4) 1844cfd1ed46SJung-uk Kim * Version 1 1845cfd1ed46SJung-uk Kim * 1846cfd1ed46SJung-uk Kim ******************************************************************************/ 1847cfd1ed46SJung-uk Kim 1848cfd1ed46SJung-uk Kim typedef struct acpi_table_phat 1849cfd1ed46SJung-uk Kim { 1850cfd1ed46SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1851cfd1ed46SJung-uk Kim 1852cfd1ed46SJung-uk Kim } ACPI_TABLE_PHAT; 1853cfd1ed46SJung-uk Kim 1854cfd1ed46SJung-uk Kim /* Common header for PHAT subtables that follow main table */ 1855cfd1ed46SJung-uk Kim 1856cfd1ed46SJung-uk Kim typedef struct acpi_phat_header 1857cfd1ed46SJung-uk Kim { 1858cfd1ed46SJung-uk Kim UINT16 Type; 1859cfd1ed46SJung-uk Kim UINT16 Length; 1860cfd1ed46SJung-uk Kim UINT8 Revision; 1861cfd1ed46SJung-uk Kim 1862cfd1ed46SJung-uk Kim } ACPI_PHAT_HEADER; 1863cfd1ed46SJung-uk Kim 1864cfd1ed46SJung-uk Kim 1865cfd1ed46SJung-uk Kim /* Values for Type field above */ 1866cfd1ed46SJung-uk Kim 1867cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_VERSION_DATA 0 1868cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1 1869cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */ 1870cfd1ed46SJung-uk Kim 1871cfd1ed46SJung-uk Kim /* 1872cfd1ed46SJung-uk Kim * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER 1873cfd1ed46SJung-uk Kim */ 1874cfd1ed46SJung-uk Kim 1875cfd1ed46SJung-uk Kim /* 0: Firmware Version Data Record */ 1876cfd1ed46SJung-uk Kim 1877cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_data 1878cfd1ed46SJung-uk Kim { 1879cfd1ed46SJung-uk Kim ACPI_PHAT_HEADER Header; 1880cfd1ed46SJung-uk Kim UINT8 Reserved[3]; 1881cfd1ed46SJung-uk Kim UINT32 ElementCount; 1882cfd1ed46SJung-uk Kim 1883cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_DATA; 1884cfd1ed46SJung-uk Kim 1885cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_element 1886cfd1ed46SJung-uk Kim { 1887cfd1ed46SJung-uk Kim UINT8 Guid[16]; 1888cfd1ed46SJung-uk Kim UINT64 VersionValue; 1889cfd1ed46SJung-uk Kim UINT32 ProducerId; 1890cfd1ed46SJung-uk Kim 1891cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_ELEMENT; 1892cfd1ed46SJung-uk Kim 1893cfd1ed46SJung-uk Kim 1894cfd1ed46SJung-uk Kim /* 1: Firmware Health Data Record */ 1895cfd1ed46SJung-uk Kim 1896cfd1ed46SJung-uk Kim typedef struct acpi_phat_health_data 1897cfd1ed46SJung-uk Kim { 1898cfd1ed46SJung-uk Kim ACPI_PHAT_HEADER Header; 1899cfd1ed46SJung-uk Kim UINT8 Reserved[2]; 1900cfd1ed46SJung-uk Kim UINT8 Health; 1901cfd1ed46SJung-uk Kim UINT8 DeviceGuid[16]; 1902cfd1ed46SJung-uk Kim UINT32 DeviceSpecificOffset; /* Zero if no Device-specific data */ 1903cfd1ed46SJung-uk Kim 1904cfd1ed46SJung-uk Kim } ACPI_PHAT_HEALTH_DATA; 1905cfd1ed46SJung-uk Kim 1906cfd1ed46SJung-uk Kim /* Values for Health field above */ 1907cfd1ed46SJung-uk Kim 1908cfd1ed46SJung-uk Kim #define ACPI_PHAT_ERRORS_FOUND 0 1909cfd1ed46SJung-uk Kim #define ACPI_PHAT_NO_ERRORS 1 1910cfd1ed46SJung-uk Kim #define ACPI_PHAT_UNKNOWN_ERRORS 2 1911cfd1ed46SJung-uk Kim #define ACPI_PHAT_ADVISORY 3 1912cfd1ed46SJung-uk Kim 1913cfd1ed46SJung-uk Kim 1914cfd1ed46SJung-uk Kim /******************************************************************************* 1915cfd1ed46SJung-uk Kim * 1916ff879b07SJung-uk Kim * PMTT - Platform Memory Topology Table (ACPI 5.0) 1917ff879b07SJung-uk Kim * Version 1 1918ff879b07SJung-uk Kim * 1919ff879b07SJung-uk Kim ******************************************************************************/ 1920ff879b07SJung-uk Kim 1921ff879b07SJung-uk Kim typedef struct acpi_table_pmtt 1922ff879b07SJung-uk Kim { 1923ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1924cfd1ed46SJung-uk Kim UINT32 MemoryDeviceCount; 1925cfd1ed46SJung-uk Kim /* 1926cfd1ed46SJung-uk Kim * Immediately followed by: 1927cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 1928cfd1ed46SJung-uk Kim */ 1929ff879b07SJung-uk Kim 1930ff879b07SJung-uk Kim } ACPI_TABLE_PMTT; 1931ff879b07SJung-uk Kim 1932ff879b07SJung-uk Kim 1933ff879b07SJung-uk Kim /* Common header for PMTT subtables that follow main table */ 1934ff879b07SJung-uk Kim 1935ff879b07SJung-uk Kim typedef struct acpi_pmtt_header 1936ff879b07SJung-uk Kim { 1937ff879b07SJung-uk Kim UINT8 Type; 1938ff879b07SJung-uk Kim UINT8 Reserved1; 1939ff879b07SJung-uk Kim UINT16 Length; 1940ff879b07SJung-uk Kim UINT16 Flags; 1941ff879b07SJung-uk Kim UINT16 Reserved2; 1942cfd1ed46SJung-uk Kim UINT32 MemoryDeviceCount; /* Zero means no memory device structs follow */ 1943cfd1ed46SJung-uk Kim /* 1944cfd1ed46SJung-uk Kim * Immediately followed by: 1945cfd1ed46SJung-uk Kim * UINT8 TypeSpecificData[] 1946cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 1947cfd1ed46SJung-uk Kim */ 1948ff879b07SJung-uk Kim 1949ff879b07SJung-uk Kim } ACPI_PMTT_HEADER; 1950ff879b07SJung-uk Kim 1951ff879b07SJung-uk Kim /* Values for Type field above */ 1952ff879b07SJung-uk Kim 1953ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET 0 1954ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER 1 1955ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM 2 1956cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */ 1957cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_VENDOR 0xFF 1958ff879b07SJung-uk Kim 1959ff879b07SJung-uk Kim /* Values for Flags field above */ 1960ff879b07SJung-uk Kim 1961ff879b07SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL 0x0001 1962ff879b07SJung-uk Kim #define ACPI_PMTT_PHYSICAL 0x0002 1963ff879b07SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE 0x000C 1964ff879b07SJung-uk Kim 1965ff879b07SJung-uk Kim 1966ff879b07SJung-uk Kim /* 1967ff879b07SJung-uk Kim * PMTT subtables, correspond to Type in acpi_pmtt_header 1968ff879b07SJung-uk Kim */ 1969ff879b07SJung-uk Kim 1970ff879b07SJung-uk Kim 1971ff879b07SJung-uk Kim /* 0: Socket Structure */ 1972ff879b07SJung-uk Kim 1973ff879b07SJung-uk Kim typedef struct acpi_pmtt_socket 1974ff879b07SJung-uk Kim { 1975ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 1976ff879b07SJung-uk Kim UINT16 SocketId; 1977ff879b07SJung-uk Kim UINT16 Reserved; 1978ff879b07SJung-uk Kim 1979ff879b07SJung-uk Kim } ACPI_PMTT_SOCKET; 1980cfd1ed46SJung-uk Kim /* 1981cfd1ed46SJung-uk Kim * Immediately followed by: 1982cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 1983cfd1ed46SJung-uk Kim */ 1984ff879b07SJung-uk Kim 1985ff879b07SJung-uk Kim 1986ff879b07SJung-uk Kim /* 1: Memory Controller subtable */ 1987ff879b07SJung-uk Kim 1988ff879b07SJung-uk Kim typedef struct acpi_pmtt_controller 1989ff879b07SJung-uk Kim { 1990ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 1991cfd1ed46SJung-uk Kim UINT16 ControllerId; 1992ff879b07SJung-uk Kim UINT16 Reserved; 1993ff879b07SJung-uk Kim 1994ff879b07SJung-uk Kim } ACPI_PMTT_CONTROLLER; 1995cfd1ed46SJung-uk Kim /* 1996cfd1ed46SJung-uk Kim * Immediately followed by: 1997cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 1998cfd1ed46SJung-uk Kim */ 1999ff879b07SJung-uk Kim 2000ff879b07SJung-uk Kim 2001ff879b07SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */ 2002ff879b07SJung-uk Kim 2003ff879b07SJung-uk Kim typedef struct acpi_pmtt_physical_component 2004ff879b07SJung-uk Kim { 2005ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 2006ff879b07SJung-uk Kim UINT32 BiosHandle; 2007ff879b07SJung-uk Kim 2008ff879b07SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT; 2009ff879b07SJung-uk Kim 2010ff879b07SJung-uk Kim 2011cfd1ed46SJung-uk Kim /* 0xFF: Vendor Specific Data */ 2012cfd1ed46SJung-uk Kim 2013cfd1ed46SJung-uk Kim typedef struct acpi_pmtt_vendor_specific 2014cfd1ed46SJung-uk Kim { 2015cfd1ed46SJung-uk Kim ACPI_PMTT_HEADER Header; 2016cfd1ed46SJung-uk Kim UINT8 TypeUuid[16]; 2017cfd1ed46SJung-uk Kim UINT8 Specific[]; 2018cfd1ed46SJung-uk Kim /* 2019cfd1ed46SJung-uk Kim * Immediately followed by: 2020cfd1ed46SJung-uk Kim * UINT8 VendorSpecificData[]; 2021cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2022cfd1ed46SJung-uk Kim */ 2023cfd1ed46SJung-uk Kim 2024cfd1ed46SJung-uk Kim } ACPI_PMTT_VENDOR_SPECIFIC; 2025cfd1ed46SJung-uk Kim 2026cfd1ed46SJung-uk Kim 2027ff879b07SJung-uk Kim /******************************************************************************* 2028ff879b07SJung-uk Kim * 2029ff879b07SJung-uk Kim * PPTT - Processor Properties Topology Table (ACPI 6.2) 2030ff879b07SJung-uk Kim * Version 1 2031ff879b07SJung-uk Kim * 2032ff879b07SJung-uk Kim ******************************************************************************/ 2033ff879b07SJung-uk Kim 2034ff879b07SJung-uk Kim typedef struct acpi_table_pptt 2035ff879b07SJung-uk Kim { 2036ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2037ff879b07SJung-uk Kim 2038ff879b07SJung-uk Kim } ACPI_TABLE_PPTT; 2039ff879b07SJung-uk Kim 2040ff879b07SJung-uk Kim /* Values for Type field above */ 2041ff879b07SJung-uk Kim 2042ff879b07SJung-uk Kim enum AcpiPpttType 2043ff879b07SJung-uk Kim { 2044ff879b07SJung-uk Kim ACPI_PPTT_TYPE_PROCESSOR = 0, 2045ff879b07SJung-uk Kim ACPI_PPTT_TYPE_CACHE = 1, 2046ff879b07SJung-uk Kim ACPI_PPTT_TYPE_ID = 2, 2047ff879b07SJung-uk Kim ACPI_PPTT_TYPE_RESERVED = 3 2048ff879b07SJung-uk Kim }; 2049ff879b07SJung-uk Kim 2050ff879b07SJung-uk Kim 2051ff879b07SJung-uk Kim /* 0: Processor Hierarchy Node Structure */ 2052ff879b07SJung-uk Kim 2053ff879b07SJung-uk Kim typedef struct acpi_pptt_processor 2054ff879b07SJung-uk Kim { 2055ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2056ff879b07SJung-uk Kim UINT16 Reserved; 2057ff879b07SJung-uk Kim UINT32 Flags; 2058ff879b07SJung-uk Kim UINT32 Parent; 2059ff879b07SJung-uk Kim UINT32 AcpiProcessorId; 2060ff879b07SJung-uk Kim UINT32 NumberOfPrivResources; 2061ff879b07SJung-uk Kim 2062ff879b07SJung-uk Kim } ACPI_PPTT_PROCESSOR; 2063ff879b07SJung-uk Kim 2064ff879b07SJung-uk Kim /* Flags */ 2065ff879b07SJung-uk Kim 2066cd6518c7SJung-uk Kim #define ACPI_PPTT_PHYSICAL_PACKAGE (1) 2067cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1) 2068cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */ 2069cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */ 2070cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */ 2071ff879b07SJung-uk Kim 2072ff879b07SJung-uk Kim 2073ff879b07SJung-uk Kim /* 1: Cache Type Structure */ 2074ff879b07SJung-uk Kim 2075ff879b07SJung-uk Kim typedef struct acpi_pptt_cache 2076ff879b07SJung-uk Kim { 2077ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2078ff879b07SJung-uk Kim UINT16 Reserved; 2079ff879b07SJung-uk Kim UINT32 Flags; 2080ff879b07SJung-uk Kim UINT32 NextLevelOfCache; 2081ff879b07SJung-uk Kim UINT32 Size; 2082ff879b07SJung-uk Kim UINT32 NumberOfSets; 2083ff879b07SJung-uk Kim UINT8 Associativity; 2084ff879b07SJung-uk Kim UINT8 Attributes; 2085ff879b07SJung-uk Kim UINT16 LineSize; 2086ff879b07SJung-uk Kim 2087ff879b07SJung-uk Kim } ACPI_PPTT_CACHE; 2088ff879b07SJung-uk Kim 2089cfd1ed46SJung-uk Kim /* 1: Cache Type Structure for PPTT version 3 */ 2090cfd1ed46SJung-uk Kim 2091cfd1ed46SJung-uk Kim typedef struct acpi_pptt_cache_v1 2092cfd1ed46SJung-uk Kim { 2093cfd1ed46SJung-uk Kim UINT32 CacheId; 2094cfd1ed46SJung-uk Kim 2095cfd1ed46SJung-uk Kim } ACPI_PPTT_CACHE_V1; 2096cfd1ed46SJung-uk Kim 2097cfd1ed46SJung-uk Kim 2098ff879b07SJung-uk Kim /* Flags */ 2099ff879b07SJung-uk Kim 2100ff879b07SJung-uk Kim #define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 2101ff879b07SJung-uk Kim #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 2102ff879b07SJung-uk Kim #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 2103ff879b07SJung-uk Kim #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 2104ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 2105ff879b07SJung-uk Kim #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 2106ff879b07SJung-uk Kim #define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 2107cfd1ed46SJung-uk Kim #define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */ 2108ff879b07SJung-uk Kim 2109ff879b07SJung-uk Kim /* Masks for Attributes */ 2110ff879b07SJung-uk Kim 2111ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 2112ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 2113ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 2114ff879b07SJung-uk Kim 2115ff879b07SJung-uk Kim /* Attributes describing cache */ 2116ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ 2117ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ 2118ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ 2119ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ 2120ff879b07SJung-uk Kim 2121ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ 2122ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ 2123ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ 2124ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ 2125ff879b07SJung-uk Kim 2126ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ 2127ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ 2128ff879b07SJung-uk Kim 2129ff879b07SJung-uk Kim /* 2: ID Structure */ 2130ff879b07SJung-uk Kim 2131ff879b07SJung-uk Kim typedef struct acpi_pptt_id 2132ff879b07SJung-uk Kim { 2133ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2134ff879b07SJung-uk Kim UINT16 Reserved; 2135ff879b07SJung-uk Kim UINT32 VendorId; 2136ff879b07SJung-uk Kim UINT64 Level1Id; 2137ff879b07SJung-uk Kim UINT64 Level2Id; 2138ff879b07SJung-uk Kim UINT16 MajorRev; 2139ff879b07SJung-uk Kim UINT16 MinorRev; 2140ff879b07SJung-uk Kim UINT16 SpinRev; 2141ff879b07SJung-uk Kim 2142ff879b07SJung-uk Kim } ACPI_PPTT_ID; 2143ff879b07SJung-uk Kim 2144ff879b07SJung-uk Kim 2145ff879b07SJung-uk Kim /******************************************************************************* 2146ff879b07SJung-uk Kim * 2147*1970d693SJung-uk Kim * PRMT - Platform Runtime Mechanism Table 2148*1970d693SJung-uk Kim * Version 1 2149*1970d693SJung-uk Kim * 2150*1970d693SJung-uk Kim ******************************************************************************/ 2151*1970d693SJung-uk Kim 2152*1970d693SJung-uk Kim typedef struct acpi_table_prmt 2153*1970d693SJung-uk Kim { 2154*1970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2155*1970d693SJung-uk Kim 2156*1970d693SJung-uk Kim } ACPI_TABLE_PRMT; 2157*1970d693SJung-uk Kim 2158*1970d693SJung-uk Kim typedef struct acpi_table_prmt_header 2159*1970d693SJung-uk Kim { 2160*1970d693SJung-uk Kim UINT8 PlatformGuid[16]; 2161*1970d693SJung-uk Kim UINT32 ModuleInfoOffset; 2162*1970d693SJung-uk Kim UINT32 ModuleInfoCount; 2163*1970d693SJung-uk Kim 2164*1970d693SJung-uk Kim } ACPI_TABLE_PRMT_HEADER; 2165*1970d693SJung-uk Kim 2166*1970d693SJung-uk Kim typedef struct acpi_prmt_module_info 2167*1970d693SJung-uk Kim { 2168*1970d693SJung-uk Kim UINT16 Revision; 2169*1970d693SJung-uk Kim UINT16 Length; 2170*1970d693SJung-uk Kim UINT8 ModuleGuid[16]; 2171*1970d693SJung-uk Kim UINT16 MajorRev; 2172*1970d693SJung-uk Kim UINT16 MinorRev; 2173*1970d693SJung-uk Kim UINT16 HandlerInfoCount; 2174*1970d693SJung-uk Kim UINT32 HandlerInfoOffset; 2175*1970d693SJung-uk Kim UINT64 MmioListPointer; 2176*1970d693SJung-uk Kim 2177*1970d693SJung-uk Kim } ACPI_PRMT_MODULE_INFO; 2178*1970d693SJung-uk Kim 2179*1970d693SJung-uk Kim typedef struct acpi_prmt_handler_info 2180*1970d693SJung-uk Kim { 2181*1970d693SJung-uk Kim UINT16 Revision; 2182*1970d693SJung-uk Kim UINT16 Length; 2183*1970d693SJung-uk Kim UINT8 HandlerGuid[16]; 2184*1970d693SJung-uk Kim UINT64 HandlerAddress; 2185*1970d693SJung-uk Kim UINT64 StaticDataBufferAddress; 2186*1970d693SJung-uk Kim UINT64 AcpiParamBufferAddress; 2187*1970d693SJung-uk Kim 2188*1970d693SJung-uk Kim } ACPI_PRMT_HANDLER_INFO; 2189*1970d693SJung-uk Kim 2190*1970d693SJung-uk Kim 2191*1970d693SJung-uk Kim /******************************************************************************* 2192*1970d693SJung-uk Kim * 2193ff879b07SJung-uk Kim * RASF - RAS Feature Table (ACPI 5.0) 2194ff879b07SJung-uk Kim * Version 1 2195ff879b07SJung-uk Kim * 2196ff879b07SJung-uk Kim ******************************************************************************/ 2197ff879b07SJung-uk Kim 2198ff879b07SJung-uk Kim typedef struct acpi_table_rasf 2199ff879b07SJung-uk Kim { 2200ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2201ff879b07SJung-uk Kim UINT8 ChannelId[12]; 2202ff879b07SJung-uk Kim 2203ff879b07SJung-uk Kim } ACPI_TABLE_RASF; 2204ff879b07SJung-uk Kim 2205ff879b07SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */ 2206ff879b07SJung-uk Kim 2207ff879b07SJung-uk Kim typedef struct acpi_rasf_shared_memory 2208ff879b07SJung-uk Kim { 2209ff879b07SJung-uk Kim UINT32 Signature; 2210ff879b07SJung-uk Kim UINT16 Command; 2211ff879b07SJung-uk Kim UINT16 Status; 2212ff879b07SJung-uk Kim UINT16 Version; 2213ff879b07SJung-uk Kim UINT8 Capabilities[16]; 2214ff879b07SJung-uk Kim UINT8 SetCapabilities[16]; 2215ff879b07SJung-uk Kim UINT16 NumParameterBlocks; 2216ff879b07SJung-uk Kim UINT32 SetCapabilitiesStatus; 2217ff879b07SJung-uk Kim 2218ff879b07SJung-uk Kim } ACPI_RASF_SHARED_MEMORY; 2219ff879b07SJung-uk Kim 2220ff879b07SJung-uk Kim /* RASF Parameter Block Structure Header */ 2221ff879b07SJung-uk Kim 2222ff879b07SJung-uk Kim typedef struct acpi_rasf_parameter_block 2223ff879b07SJung-uk Kim { 2224ff879b07SJung-uk Kim UINT16 Type; 2225ff879b07SJung-uk Kim UINT16 Version; 2226ff879b07SJung-uk Kim UINT16 Length; 2227ff879b07SJung-uk Kim 2228ff879b07SJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK; 2229ff879b07SJung-uk Kim 2230ff879b07SJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */ 2231ff879b07SJung-uk Kim 2232ff879b07SJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter 2233ff879b07SJung-uk Kim { 2234ff879b07SJung-uk Kim ACPI_RASF_PARAMETER_BLOCK Header; 2235ff879b07SJung-uk Kim UINT16 PatrolScrubCommand; 2236ff879b07SJung-uk Kim UINT64 RequestedAddressRange[2]; 2237ff879b07SJung-uk Kim UINT64 ActualAddressRange[2]; 2238ff879b07SJung-uk Kim UINT16 Flags; 2239ff879b07SJung-uk Kim UINT8 RequestedSpeed; 2240ff879b07SJung-uk Kim 2241ff879b07SJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER; 2242ff879b07SJung-uk Kim 2243ff879b07SJung-uk Kim /* Masks for Flags and Speed fields above */ 2244ff879b07SJung-uk Kim 2245ff879b07SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING 1 2246ff879b07SJung-uk Kim #define ACPI_RASF_SPEED (7<<1) 2247ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_SLOW (0<<1) 2248ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM (4<<1) 2249ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_FAST (7<<1) 2250ff879b07SJung-uk Kim 2251ff879b07SJung-uk Kim /* Channel Commands */ 2252ff879b07SJung-uk Kim 2253ff879b07SJung-uk Kim enum AcpiRasfCommands 2254ff879b07SJung-uk Kim { 2255ff879b07SJung-uk Kim ACPI_RASF_EXECUTE_RASF_COMMAND = 1 2256ff879b07SJung-uk Kim }; 2257ff879b07SJung-uk Kim 2258ff879b07SJung-uk Kim /* Platform RAS Capabilities */ 2259ff879b07SJung-uk Kim 2260ff879b07SJung-uk Kim enum AcpiRasfCapabiliities 2261ff879b07SJung-uk Kim { 2262ff879b07SJung-uk Kim ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 2263ff879b07SJung-uk Kim ACPI_SW_PATROL_SCRUB_EXPOSED = 1 2264ff879b07SJung-uk Kim }; 2265ff879b07SJung-uk Kim 2266ff879b07SJung-uk Kim /* Patrol Scrub Commands */ 2267ff879b07SJung-uk Kim 2268ff879b07SJung-uk Kim enum AcpiRasfPatrolScrubCommands 2269ff879b07SJung-uk Kim { 2270ff879b07SJung-uk Kim ACPI_RASF_GET_PATROL_PARAMETERS = 1, 2271ff879b07SJung-uk Kim ACPI_RASF_START_PATROL_SCRUBBER = 2, 2272ff879b07SJung-uk Kim ACPI_RASF_STOP_PATROL_SCRUBBER = 3 2273ff879b07SJung-uk Kim }; 2274ff879b07SJung-uk Kim 2275ff879b07SJung-uk Kim /* Channel Command flags */ 2276ff879b07SJung-uk Kim 2277ff879b07SJung-uk Kim #define ACPI_RASF_GENERATE_SCI (1<<15) 2278ff879b07SJung-uk Kim 2279ff879b07SJung-uk Kim /* Status values */ 2280ff879b07SJung-uk Kim 2281ff879b07SJung-uk Kim enum AcpiRasfStatus 2282ff879b07SJung-uk Kim { 2283ff879b07SJung-uk Kim ACPI_RASF_SUCCESS = 0, 2284ff879b07SJung-uk Kim ACPI_RASF_NOT_VALID = 1, 2285ff879b07SJung-uk Kim ACPI_RASF_NOT_SUPPORTED = 2, 2286ff879b07SJung-uk Kim ACPI_RASF_BUSY = 3, 2287ff879b07SJung-uk Kim ACPI_RASF_FAILED = 4, 2288ff879b07SJung-uk Kim ACPI_RASF_ABORTED = 5, 2289ff879b07SJung-uk Kim ACPI_RASF_INVALID_DATA = 6 2290ff879b07SJung-uk Kim }; 2291ff879b07SJung-uk Kim 2292ff879b07SJung-uk Kim /* Status flags */ 2293ff879b07SJung-uk Kim 2294ff879b07SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE (1) 2295ff879b07SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL (1<<1) 2296ff879b07SJung-uk Kim #define ACPI_RASF_ERROR (1<<2) 2297ff879b07SJung-uk Kim #define ACPI_RASF_STATUS (0x1F<<3) 2298ff879b07SJung-uk Kim 2299ff879b07SJung-uk Kim 2300ff879b07SJung-uk Kim /******************************************************************************* 2301ff879b07SJung-uk Kim * 2302*1970d693SJung-uk Kim * RGRT - Regulatory Graphics Resource Table 2303*1970d693SJung-uk Kim * Version 1 2304*1970d693SJung-uk Kim * 2305*1970d693SJung-uk Kim * Conforms to "ACPI RGRT" available at: 2306*1970d693SJung-uk Kim * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/ 2307*1970d693SJung-uk Kim * 2308*1970d693SJung-uk Kim ******************************************************************************/ 2309*1970d693SJung-uk Kim 2310*1970d693SJung-uk Kim typedef struct acpi_table_rgrt 2311*1970d693SJung-uk Kim { 2312*1970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2313*1970d693SJung-uk Kim UINT16 Version; 2314*1970d693SJung-uk Kim UINT8 ImageType; 2315*1970d693SJung-uk Kim UINT8 Reserved; 2316*1970d693SJung-uk Kim UINT8 Image[0]; 2317*1970d693SJung-uk Kim 2318*1970d693SJung-uk Kim } ACPI_TABLE_RGRT; 2319*1970d693SJung-uk Kim 2320*1970d693SJung-uk Kim /* ImageType values */ 2321*1970d693SJung-uk Kim 2322*1970d693SJung-uk Kim enum AcpiRgrtImageType 2323*1970d693SJung-uk Kim { 2324*1970d693SJung-uk Kim ACPI_RGRT_TYPE_RESERVED0 = 0, 2325*1970d693SJung-uk Kim ACPI_RGRT_IMAGE_TYPE_PNG = 1, 2326*1970d693SJung-uk Kim ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 2327*1970d693SJung-uk Kim }; 2328*1970d693SJung-uk Kim 2329*1970d693SJung-uk Kim 2330*1970d693SJung-uk Kim /******************************************************************************* 2331*1970d693SJung-uk Kim * 2332ff879b07SJung-uk Kim * SBST - Smart Battery Specification Table 2333ff879b07SJung-uk Kim * Version 1 2334ff879b07SJung-uk Kim * 2335ff879b07SJung-uk Kim ******************************************************************************/ 2336ff879b07SJung-uk Kim 2337ff879b07SJung-uk Kim typedef struct acpi_table_sbst 2338ff879b07SJung-uk Kim { 2339ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2340ff879b07SJung-uk Kim UINT32 WarningLevel; 2341ff879b07SJung-uk Kim UINT32 LowLevel; 2342ff879b07SJung-uk Kim UINT32 CriticalLevel; 2343ff879b07SJung-uk Kim 2344ff879b07SJung-uk Kim } ACPI_TABLE_SBST; 2345ff879b07SJung-uk Kim 2346ff879b07SJung-uk Kim 23475f9b24faSJung-uk Kim /******************************************************************************* 23485f9b24faSJung-uk Kim * 23495f9b24faSJung-uk Kim * SDEI - Software Delegated Exception Interface Descriptor Table 23505f9b24faSJung-uk Kim * 23515f9b24faSJung-uk Kim * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, 23525f9b24faSJung-uk Kim * May 8th, 2017. Copyright 2017 ARM Ltd. 23535f9b24faSJung-uk Kim * 23545f9b24faSJung-uk Kim ******************************************************************************/ 23555f9b24faSJung-uk Kim 23565f9b24faSJung-uk Kim typedef struct acpi_table_sdei 23575f9b24faSJung-uk Kim { 23585f9b24faSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 23595f9b24faSJung-uk Kim 23605f9b24faSJung-uk Kim } ACPI_TABLE_SDEI; 23615f9b24faSJung-uk Kim 23629c48c75eSJung-uk Kim 23639c48c75eSJung-uk Kim /******************************************************************************* 23649c48c75eSJung-uk Kim * 2365ff879b07SJung-uk Kim * SDEV - Secure Devices Table (ACPI 6.2) 2366ff879b07SJung-uk Kim * Version 1 2367dcbce41eSJung-uk Kim * 2368dcbce41eSJung-uk Kim ******************************************************************************/ 2369dcbce41eSJung-uk Kim 2370ff879b07SJung-uk Kim typedef struct acpi_table_sdev 2371dcbce41eSJung-uk Kim { 2372dcbce41eSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2373dcbce41eSJung-uk Kim 2374ff879b07SJung-uk Kim } ACPI_TABLE_SDEV; 2375dcbce41eSJung-uk Kim 2376dcbce41eSJung-uk Kim 2377ff879b07SJung-uk Kim typedef struct acpi_sdev_header 2378d6dd1baeSJung-uk Kim { 2379ff879b07SJung-uk Kim UINT8 Type; 2380ff879b07SJung-uk Kim UINT8 Flags; 2381ff879b07SJung-uk Kim UINT16 Length; 2382d6dd1baeSJung-uk Kim 2383ff879b07SJung-uk Kim } ACPI_SDEV_HEADER; 2384f8146b88SJung-uk Kim 2385d6dd1baeSJung-uk Kim 2386ff879b07SJung-uk Kim /* Values for subtable type above */ 2387d6dd1baeSJung-uk Kim 2388ff879b07SJung-uk Kim enum AcpiSdevType 2389d6dd1baeSJung-uk Kim { 2390ff879b07SJung-uk Kim ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, 2391ff879b07SJung-uk Kim ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, 2392ff879b07SJung-uk Kim ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 2393d6dd1baeSJung-uk Kim }; 2394d6dd1baeSJung-uk Kim 2395ff879b07SJung-uk Kim /* Values for flags above */ 2396d6dd1baeSJung-uk Kim 2397ff879b07SJung-uk Kim #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) 2398cfd1ed46SJung-uk Kim #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1) 2399fe0f0bbbSJung-uk Kim 2400fe0f0bbbSJung-uk Kim /* 2401ff879b07SJung-uk Kim * SDEV subtables 2402fe0f0bbbSJung-uk Kim */ 2403fe0f0bbbSJung-uk Kim 2404ff879b07SJung-uk Kim /* 0: Namespace Device Based Secure Device Structure */ 2405fe0f0bbbSJung-uk Kim 2406ff879b07SJung-uk Kim typedef struct acpi_sdev_namespace 2407fe0f0bbbSJung-uk Kim { 2408ff879b07SJung-uk Kim ACPI_SDEV_HEADER Header; 2409ff879b07SJung-uk Kim UINT16 DeviceIdOffset; 2410ff879b07SJung-uk Kim UINT16 DeviceIdLength; 2411ff879b07SJung-uk Kim UINT16 VendorDataOffset; 2412ff879b07SJung-uk Kim UINT16 VendorDataLength; 2413d6dd1baeSJung-uk Kim 2414ff879b07SJung-uk Kim } ACPI_SDEV_NAMESPACE; 24155ef50723SJung-uk Kim 2416cfd1ed46SJung-uk Kim typedef struct acpi_sdev_secure_component 2417cfd1ed46SJung-uk Kim { 2418cfd1ed46SJung-uk Kim UINT16 SecureComponentOffset; 2419cfd1ed46SJung-uk Kim UINT16 SecureComponentLength; 2420cfd1ed46SJung-uk Kim 2421cfd1ed46SJung-uk Kim } ACPI_SDEV_SECURE_COMPONENT; 2422cfd1ed46SJung-uk Kim 2423cfd1ed46SJung-uk Kim 2424cfd1ed46SJung-uk Kim /* 2425cfd1ed46SJung-uk Kim * SDEV sub-subtables ("Components") for above 2426cfd1ed46SJung-uk Kim */ 2427cfd1ed46SJung-uk Kim typedef struct acpi_sdev_component 2428cfd1ed46SJung-uk Kim { 2429cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 2430cfd1ed46SJung-uk Kim 2431cfd1ed46SJung-uk Kim } ACPI_SDEV_COMPONENT; 2432cfd1ed46SJung-uk Kim 2433cfd1ed46SJung-uk Kim 2434cfd1ed46SJung-uk Kim /* Values for sub-subtable type above */ 2435cfd1ed46SJung-uk Kim 2436cfd1ed46SJung-uk Kim enum AcpiSacType 2437cfd1ed46SJung-uk Kim { 2438cfd1ed46SJung-uk Kim ACPI_SDEV_TYPE_ID_COMPONENT = 0, 2439cfd1ed46SJung-uk Kim ACPI_SDEV_TYPE_MEM_COMPONENT = 1 2440cfd1ed46SJung-uk Kim }; 2441cfd1ed46SJung-uk Kim 2442cfd1ed46SJung-uk Kim typedef struct acpi_sdev_id_component 2443cfd1ed46SJung-uk Kim { 2444cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 2445cfd1ed46SJung-uk Kim UINT16 HardwareIdOffset; 2446cfd1ed46SJung-uk Kim UINT16 HardwareIdLength; 2447cfd1ed46SJung-uk Kim UINT16 SubsystemIdOffset; 2448cfd1ed46SJung-uk Kim UINT16 SubsystemIdLength; 2449cfd1ed46SJung-uk Kim UINT16 HardwareRevision; 2450cfd1ed46SJung-uk Kim UINT8 HardwareRevPresent; 2451cfd1ed46SJung-uk Kim UINT8 ClassCodePresent; 2452cfd1ed46SJung-uk Kim UINT8 PciBaseClass; 2453cfd1ed46SJung-uk Kim UINT8 PciSubClass; 2454cfd1ed46SJung-uk Kim UINT8 PciProgrammingXface; 2455cfd1ed46SJung-uk Kim 2456cfd1ed46SJung-uk Kim } ACPI_SDEV_ID_COMPONENT; 2457cfd1ed46SJung-uk Kim 2458cfd1ed46SJung-uk Kim typedef struct acpi_sdev_mem_component 2459cfd1ed46SJung-uk Kim { 2460cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 2461cfd1ed46SJung-uk Kim UINT32 Reserved; 2462cfd1ed46SJung-uk Kim UINT64 MemoryBaseAddress; 2463cfd1ed46SJung-uk Kim UINT64 MemoryLength; 2464cfd1ed46SJung-uk Kim 2465cfd1ed46SJung-uk Kim } ACPI_SDEV_MEM_COMPONENT; 2466cfd1ed46SJung-uk Kim 2467cfd1ed46SJung-uk Kim 2468ff879b07SJung-uk Kim /* 1: PCIe Endpoint Device Based Device Structure */ 2469ff879b07SJung-uk Kim 2470ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie 24715ef50723SJung-uk Kim { 2472ff879b07SJung-uk Kim ACPI_SDEV_HEADER Header; 2473ff879b07SJung-uk Kim UINT16 Segment; 2474ff879b07SJung-uk Kim UINT16 StartBus; 2475ff879b07SJung-uk Kim UINT16 PathOffset; 2476ff879b07SJung-uk Kim UINT16 PathLength; 2477ff879b07SJung-uk Kim UINT16 VendorDataOffset; 2478ff879b07SJung-uk Kim UINT16 VendorDataLength; 2479ff879b07SJung-uk Kim 2480ff879b07SJung-uk Kim } ACPI_SDEV_PCIE; 2481ff879b07SJung-uk Kim 2482ff879b07SJung-uk Kim /* 1a: PCIe Endpoint path entry */ 2483ff879b07SJung-uk Kim 2484ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie_path 2485ff879b07SJung-uk Kim { 24865ef50723SJung-uk Kim UINT8 Device; 24875ef50723SJung-uk Kim UINT8 Function; 24885ef50723SJung-uk Kim 2489ff879b07SJung-uk Kim } ACPI_SDEV_PCIE_PATH; 2490af051161SJung-uk Kim 2491af051161SJung-uk Kim 2492*1970d693SJung-uk Kim /******************************************************************************* 2493*1970d693SJung-uk Kim * 2494*1970d693SJung-uk Kim * SVKL - Storage Volume Key Location Table (ACPI 6.4) 2495*1970d693SJung-uk Kim * From: "Guest-Host-Communication Interface (GHCI) for Intel 2496*1970d693SJung-uk Kim * Trust Domain Extensions (Intel TDX)". 2497*1970d693SJung-uk Kim * Version 1 2498*1970d693SJung-uk Kim * 2499*1970d693SJung-uk Kim ******************************************************************************/ 2500*1970d693SJung-uk Kim 2501*1970d693SJung-uk Kim typedef struct acpi_table_svkl 2502*1970d693SJung-uk Kim { 2503*1970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2504*1970d693SJung-uk Kim UINT32 Count; 2505*1970d693SJung-uk Kim 2506*1970d693SJung-uk Kim } ACPI_TABLE_SVKL; 2507*1970d693SJung-uk Kim 2508*1970d693SJung-uk Kim typedef struct acpi_svkl_key 2509*1970d693SJung-uk Kim { 2510*1970d693SJung-uk Kim UINT16 Type; 2511*1970d693SJung-uk Kim UINT16 Format; 2512*1970d693SJung-uk Kim UINT32 Size; 2513*1970d693SJung-uk Kim UINT64 Address; 2514*1970d693SJung-uk Kim 2515*1970d693SJung-uk Kim } ACPI_SVKL_KEY; 2516*1970d693SJung-uk Kim 2517*1970d693SJung-uk Kim enum acpi_svkl_type 2518*1970d693SJung-uk Kim { 2519*1970d693SJung-uk Kim ACPI_SVKL_TYPE_MAIN_STORAGE = 0, 2520*1970d693SJung-uk Kim ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */ 2521*1970d693SJung-uk Kim }; 2522*1970d693SJung-uk Kim 2523*1970d693SJung-uk Kim enum acpi_svkl_format 2524*1970d693SJung-uk Kim { 2525*1970d693SJung-uk Kim ACPI_SVKL_FORMAT_RAW_BINARY = 0, 2526*1970d693SJung-uk Kim ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */ 2527*1970d693SJung-uk Kim }; 2528*1970d693SJung-uk Kim 2529*1970d693SJung-uk Kim 2530d6dd1baeSJung-uk Kim /* Reset to default packing */ 2531d6dd1baeSJung-uk Kim 2532d6dd1baeSJung-uk Kim #pragma pack() 2533d6dd1baeSJung-uk Kim 2534d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */ 2535