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 * 1132ac4016SJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2018, 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 */ 171a371a5fdSJung-uk Kim #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 172d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 173313a0c13SJung-uk Kim #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 174*ff879b07SJung-uk Kim #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 175d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 176ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 177*ff879b07SJung-uk Kim #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 178*ff879b07SJung-uk Kim #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 1797cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 1809c48c75eSJung-uk Kim #define ACPI_SIG_MTMR "MTMR" /* MID Timer table */ 181*ff879b07SJung-uk Kim #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 182*ff879b07SJung-uk Kim #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 183*ff879b07SJung-uk Kim #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ 184*ff879b07SJung-uk Kim #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 185*ff879b07SJung-uk Kim #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 186*ff879b07SJung-uk Kim #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 187*ff879b07SJung-uk Kim #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 1885f9b24faSJung-uk Kim #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ 189*ff879b07SJung-uk Kim #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 190d6dd1baeSJung-uk Kim 191d6dd1baeSJung-uk Kim 192d6dd1baeSJung-uk Kim /* 193d6dd1baeSJung-uk Kim * All tables must be byte-packed to match the ACPI specification, since 194d6dd1baeSJung-uk Kim * the tables are provided by the system BIOS. 195d6dd1baeSJung-uk Kim */ 196d6dd1baeSJung-uk Kim #pragma pack(1) 197d6dd1baeSJung-uk Kim 198d6dd1baeSJung-uk Kim /* 1991df130f1SJung-uk Kim * Note: C bitfields are not used for this reason: 2001df130f1SJung-uk Kim * 2011df130f1SJung-uk Kim * "Bitfields are great and easy to read, but unfortunately the C language 2021df130f1SJung-uk Kim * does not specify the layout of bitfields in memory, which means they are 2031df130f1SJung-uk Kim * essentially useless for dealing with packed data in on-disk formats or 2041df130f1SJung-uk Kim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 2051df130f1SJung-uk Kim * this decision was a design error in C. Ritchie could have picked an order 2061df130f1SJung-uk Kim * and stuck with it." Norman Ramsey. 2071df130f1SJung-uk Kim * See http://stackoverflow.com/a/1053662/41661 208d6dd1baeSJung-uk Kim */ 209d6dd1baeSJung-uk Kim 210d6dd1baeSJung-uk Kim 211d6dd1baeSJung-uk Kim /******************************************************************************* 212d6dd1baeSJung-uk Kim * 213a371a5fdSJung-uk Kim * IORT - IO Remapping Table 214a371a5fdSJung-uk Kim * 215a371a5fdSJung-uk Kim * Conforms to "IO Remapping Table System Software on ARM Platforms", 2165f9b24faSJung-uk Kim * Document number: ARM DEN 0049C, May 2017 217a371a5fdSJung-uk Kim * 218a371a5fdSJung-uk Kim ******************************************************************************/ 219a371a5fdSJung-uk Kim 220a371a5fdSJung-uk Kim typedef struct acpi_table_iort 221a371a5fdSJung-uk Kim { 222a371a5fdSJung-uk Kim ACPI_TABLE_HEADER Header; 223a371a5fdSJung-uk Kim UINT32 NodeCount; 224a371a5fdSJung-uk Kim UINT32 NodeOffset; 225a371a5fdSJung-uk Kim UINT32 Reserved; 226a371a5fdSJung-uk Kim 227a371a5fdSJung-uk Kim } ACPI_TABLE_IORT; 228a371a5fdSJung-uk Kim 229a371a5fdSJung-uk Kim 230a371a5fdSJung-uk Kim /* 231a371a5fdSJung-uk Kim * IORT subtables 232a371a5fdSJung-uk Kim */ 233a371a5fdSJung-uk Kim typedef struct acpi_iort_node 234a371a5fdSJung-uk Kim { 235a371a5fdSJung-uk Kim UINT8 Type; 236a371a5fdSJung-uk Kim UINT16 Length; 237a371a5fdSJung-uk Kim UINT8 Revision; 238a371a5fdSJung-uk Kim UINT32 Reserved; 239a371a5fdSJung-uk Kim UINT32 MappingCount; 240a371a5fdSJung-uk Kim UINT32 MappingOffset; 241a371a5fdSJung-uk Kim char NodeData[1]; 242a371a5fdSJung-uk Kim 243a371a5fdSJung-uk Kim } ACPI_IORT_NODE; 244a371a5fdSJung-uk Kim 245a371a5fdSJung-uk Kim /* Values for subtable Type above */ 246a371a5fdSJung-uk Kim 247a371a5fdSJung-uk Kim enum AcpiIortNodeType 248a371a5fdSJung-uk Kim { 249a371a5fdSJung-uk Kim ACPI_IORT_NODE_ITS_GROUP = 0x00, 250a371a5fdSJung-uk Kim ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 251a371a5fdSJung-uk Kim ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 252f8146b88SJung-uk Kim ACPI_IORT_NODE_SMMU = 0x03, 253f8146b88SJung-uk Kim ACPI_IORT_NODE_SMMU_V3 = 0x04 254a371a5fdSJung-uk Kim }; 255a371a5fdSJung-uk Kim 256a371a5fdSJung-uk Kim 257a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping 258a371a5fdSJung-uk Kim { 259a371a5fdSJung-uk Kim UINT32 InputBase; /* Lowest value in input range */ 260a371a5fdSJung-uk Kim UINT32 IdCount; /* Number of IDs */ 261a371a5fdSJung-uk Kim UINT32 OutputBase; /* Lowest value in output range */ 262a371a5fdSJung-uk Kim UINT32 OutputReference; /* A reference to the output node */ 263a371a5fdSJung-uk Kim UINT32 Flags; 264a371a5fdSJung-uk Kim 265a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING; 266a371a5fdSJung-uk Kim 267a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */ 268a371a5fdSJung-uk Kim 269a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1) 270a371a5fdSJung-uk Kim 271a371a5fdSJung-uk Kim 272a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access 273a371a5fdSJung-uk Kim { 274a371a5fdSJung-uk Kim UINT32 CacheCoherency; 275a371a5fdSJung-uk Kim UINT8 Hints; 276a371a5fdSJung-uk Kim UINT16 Reserved; 277a371a5fdSJung-uk Kim UINT8 MemoryFlags; 278a371a5fdSJung-uk Kim 279a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS; 280a371a5fdSJung-uk Kim 281a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */ 282a371a5fdSJung-uk Kim 283a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 284a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 285a371a5fdSJung-uk Kim 286a371a5fdSJung-uk Kim /* Masks for Hints field above */ 287a371a5fdSJung-uk Kim 288a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT (1) 289a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE (1<<1) 290a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ (1<<2) 291a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE (1<<3) 292a371a5fdSJung-uk Kim 293a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */ 294a371a5fdSJung-uk Kim 295a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY (1) 296a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES (1<<1) 297a371a5fdSJung-uk Kim 298a371a5fdSJung-uk Kim 299a371a5fdSJung-uk Kim /* 300a371a5fdSJung-uk Kim * IORT node specific subtables 301a371a5fdSJung-uk Kim */ 302a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group 303a371a5fdSJung-uk Kim { 304a371a5fdSJung-uk Kim UINT32 ItsCount; 305a371a5fdSJung-uk Kim UINT32 Identifiers[1]; /* GIC ITS identifier arrary */ 306a371a5fdSJung-uk Kim 307a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP; 308a371a5fdSJung-uk Kim 309a371a5fdSJung-uk Kim 310a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component 311a371a5fdSJung-uk Kim { 312a371a5fdSJung-uk Kim UINT32 NodeFlags; 313a371a5fdSJung-uk Kim UINT64 MemoryProperties; /* Memory access properties */ 314a371a5fdSJung-uk Kim UINT8 MemoryAddressLimit; /* Memory address size limit */ 315a371a5fdSJung-uk Kim char DeviceName[1]; /* Path of namespace object */ 316a371a5fdSJung-uk Kim 317a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT; 318a371a5fdSJung-uk Kim 319a371a5fdSJung-uk Kim 320a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex 321a371a5fdSJung-uk Kim { 322a371a5fdSJung-uk Kim UINT64 MemoryProperties; /* Memory access properties */ 323a371a5fdSJung-uk Kim UINT32 AtsAttribute; 324a371a5fdSJung-uk Kim UINT32 PciSegmentNumber; 325a371a5fdSJung-uk Kim 326a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX; 327a371a5fdSJung-uk Kim 328a371a5fdSJung-uk Kim /* Values for AtsAttribute field above */ 329a371a5fdSJung-uk Kim 330a371a5fdSJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ 331a371a5fdSJung-uk Kim #define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ 332a371a5fdSJung-uk Kim 333a371a5fdSJung-uk Kim 334a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu 335a371a5fdSJung-uk Kim { 336a371a5fdSJung-uk Kim UINT64 BaseAddress; /* SMMU base address */ 337a371a5fdSJung-uk Kim UINT64 Span; /* Length of memory range */ 338a371a5fdSJung-uk Kim UINT32 Model; 339a371a5fdSJung-uk Kim UINT32 Flags; 340a371a5fdSJung-uk Kim UINT32 GlobalInterruptOffset; 341a371a5fdSJung-uk Kim UINT32 ContextInterruptCount; 342a371a5fdSJung-uk Kim UINT32 ContextInterruptOffset; 343a371a5fdSJung-uk Kim UINT32 PmuInterruptCount; 344a371a5fdSJung-uk Kim UINT32 PmuInterruptOffset; 345a371a5fdSJung-uk Kim UINT64 Interrupts[1]; /* Interrupt array */ 346a371a5fdSJung-uk Kim 347a371a5fdSJung-uk Kim } ACPI_IORT_SMMU; 348a371a5fdSJung-uk Kim 349a371a5fdSJung-uk Kim /* Values for Model field above */ 350a371a5fdSJung-uk Kim 351a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 352a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 353a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 354a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 3555f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ 3565f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ 357a371a5fdSJung-uk Kim 358a371a5fdSJung-uk Kim /* Masks for Flags field above */ 359a371a5fdSJung-uk Kim 360a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 361a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 362a371a5fdSJung-uk Kim 3630d84335fSJung-uk Kim /* Global interrupt format */ 3640d84335fSJung-uk Kim 3650d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi 3660d84335fSJung-uk Kim { 3670d84335fSJung-uk Kim UINT32 NSgIrpt; 3680d84335fSJung-uk Kim UINT32 NSgIrptFlags; 3690d84335fSJung-uk Kim UINT32 NSgCfgIrpt; 3700d84335fSJung-uk Kim UINT32 NSgCfgIrptFlags; 3712f6a1a81SJung-uk Kim 3720d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI; 3730d84335fSJung-uk Kim 374a371a5fdSJung-uk Kim 375f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3 376f8146b88SJung-uk Kim { 377f8146b88SJung-uk Kim UINT64 BaseAddress; /* SMMUv3 base address */ 378f8146b88SJung-uk Kim UINT32 Flags; 379f8146b88SJung-uk Kim UINT32 Reserved; 380f8146b88SJung-uk Kim UINT64 VatosAddress; 3815f9b24faSJung-uk Kim UINT32 Model; 382f8146b88SJung-uk Kim UINT32 EventGsiv; 383f8146b88SJung-uk Kim UINT32 PriGsiv; 384f8146b88SJung-uk Kim UINT32 GerrGsiv; 385f8146b88SJung-uk Kim UINT32 SyncGsiv; 3865f9b24faSJung-uk Kim UINT8 Pxm; 3875f9b24faSJung-uk Kim UINT8 Reserved1; 3885f9b24faSJung-uk Kim UINT16 Reserved2; 389b7b7e711SJung-uk Kim UINT32 IdMappingIndex; 390f8146b88SJung-uk Kim 391f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3; 392f8146b88SJung-uk Kim 3935f9b24faSJung-uk Kim /* Values for Model field above */ 3945f9b24faSJung-uk Kim 3955f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ 3965f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ 3975f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ 3985f9b24faSJung-uk Kim 399f8146b88SJung-uk Kim /* Masks for Flags field above */ 400f8146b88SJung-uk Kim 401f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 402f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1) 4035f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) 404f8146b88SJung-uk Kim 405f8146b88SJung-uk Kim 406a371a5fdSJung-uk Kim /******************************************************************************* 407a371a5fdSJung-uk Kim * 408d6dd1baeSJung-uk Kim * IVRS - I/O Virtualization Reporting Structure 409d6dd1baeSJung-uk Kim * Version 1 410d6dd1baeSJung-uk Kim * 411d6dd1baeSJung-uk Kim * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 412d6dd1baeSJung-uk Kim * Revision 1.26, February 2009. 413d6dd1baeSJung-uk Kim * 414d6dd1baeSJung-uk Kim ******************************************************************************/ 415d6dd1baeSJung-uk Kim 416d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs 417d6dd1baeSJung-uk Kim { 418d6dd1baeSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 419d6dd1baeSJung-uk Kim UINT32 Info; /* Common virtualization info */ 420d6dd1baeSJung-uk Kim UINT64 Reserved; 421d6dd1baeSJung-uk Kim 422d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS; 423d6dd1baeSJung-uk Kim 424d6dd1baeSJung-uk Kim /* Values for Info field above */ 425d6dd1baeSJung-uk Kim 426d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 427d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 428d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 429d6dd1baeSJung-uk Kim 430d6dd1baeSJung-uk Kim 431d6dd1baeSJung-uk Kim /* IVRS subtable header */ 432d6dd1baeSJung-uk Kim 433d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header 434d6dd1baeSJung-uk Kim { 435d6dd1baeSJung-uk Kim UINT8 Type; /* Subtable type */ 436d6dd1baeSJung-uk Kim UINT8 Flags; 437d6dd1baeSJung-uk Kim UINT16 Length; /* Subtable length */ 438d6dd1baeSJung-uk Kim UINT16 DeviceId; /* ID of IOMMU */ 439d6dd1baeSJung-uk Kim 440d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER; 441d6dd1baeSJung-uk Kim 442d6dd1baeSJung-uk Kim /* Values for subtable Type above */ 443d6dd1baeSJung-uk Kim 444d6dd1baeSJung-uk Kim enum AcpiIvrsType 445d6dd1baeSJung-uk Kim { 446d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_HARDWARE = 0x10, 447d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY1 = 0x20, 448d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY2 = 0x21, 449d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY3 = 0x22 450d6dd1baeSJung-uk Kim }; 451d6dd1baeSJung-uk Kim 452d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */ 453d6dd1baeSJung-uk Kim 454d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE (1) 455d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW (1<<1) 456d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW (1<<2) 457d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC (1<<3) 458d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB (1<<4) 459d6dd1baeSJung-uk Kim 460d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */ 461d6dd1baeSJung-uk Kim 462d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY (1) 463d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ (1<<1) 464d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE (1<<2) 465d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 466d6dd1baeSJung-uk Kim 467d6dd1baeSJung-uk Kim 468d6dd1baeSJung-uk Kim /* 469d6dd1baeSJung-uk Kim * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER 470d6dd1baeSJung-uk Kim */ 471d6dd1baeSJung-uk Kim 472d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 473d6dd1baeSJung-uk Kim 474d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_hardware 475d6dd1baeSJung-uk Kim { 476d6dd1baeSJung-uk Kim ACPI_IVRS_HEADER Header; 477d6dd1baeSJung-uk Kim UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 478d6dd1baeSJung-uk Kim UINT64 BaseAddress; /* IOMMU control registers */ 479d6dd1baeSJung-uk Kim UINT16 PciSegmentGroup; 480d6dd1baeSJung-uk Kim UINT16 Info; /* MSI number and unit ID */ 481d6dd1baeSJung-uk Kim UINT32 Reserved; 482d6dd1baeSJung-uk Kim 483d6dd1baeSJung-uk Kim } ACPI_IVRS_HARDWARE; 484d6dd1baeSJung-uk Kim 485d6dd1baeSJung-uk Kim /* Masks for Info field above */ 486d6dd1baeSJung-uk Kim 487d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 488d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ 489d6dd1baeSJung-uk Kim 490d6dd1baeSJung-uk Kim 491d6dd1baeSJung-uk Kim /* 492d6dd1baeSJung-uk Kim * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. 493d6dd1baeSJung-uk Kim * Upper two bits of the Type field are the (encoded) length of the structure. 494d6dd1baeSJung-uk Kim * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 495d6dd1baeSJung-uk Kim * are reserved for future use but not defined. 496d6dd1baeSJung-uk Kim */ 497d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header 498d6dd1baeSJung-uk Kim { 499d6dd1baeSJung-uk Kim UINT8 Type; 500d6dd1baeSJung-uk Kim UINT16 Id; 501d6dd1baeSJung-uk Kim UINT8 DataSetting; 502d6dd1baeSJung-uk Kim 503d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER; 504d6dd1baeSJung-uk Kim 505d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */ 506d6dd1baeSJung-uk Kim 507d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH 0xC0 508d6dd1baeSJung-uk Kim 509d6dd1baeSJung-uk Kim /* Values for device entry Type field above */ 510d6dd1baeSJung-uk Kim 511d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType 512d6dd1baeSJung-uk Kim { 513d6dd1baeSJung-uk Kim /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ 514d6dd1baeSJung-uk Kim 515d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_PAD4 = 0, 516d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALL = 1, 517d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_SELECT = 2, 518d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_START = 3, 519d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_END = 4, 520d6dd1baeSJung-uk Kim 521d6dd1baeSJung-uk Kim /* 8-byte device entries */ 522d6dd1baeSJung-uk Kim 523d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_PAD8 = 64, 524d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_NOT_USED = 65, 525d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ 526d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ 527d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ 528d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ 529d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses ACPI_IVRS_DEVICE8C */ 530d6dd1baeSJung-uk Kim }; 531d6dd1baeSJung-uk Kim 532d6dd1baeSJung-uk Kim /* Values for Data field above */ 533d6dd1baeSJung-uk Kim 534d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS (1) 535d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS (1<<1) 536d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS (1<<2) 537d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT (3<<4) 538d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS (1<<6) 539d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS (1<<7) 540d6dd1baeSJung-uk Kim 541d6dd1baeSJung-uk Kim 542d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */ 543d6dd1baeSJung-uk Kim 544d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4 545d6dd1baeSJung-uk Kim { 546d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 547d6dd1baeSJung-uk Kim 548d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4; 549d6dd1baeSJung-uk Kim 550d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */ 551d6dd1baeSJung-uk Kim 552d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a 553d6dd1baeSJung-uk Kim { 554d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 555d6dd1baeSJung-uk Kim UINT8 Reserved1; 556d6dd1baeSJung-uk Kim UINT16 UsedId; 557d6dd1baeSJung-uk Kim UINT8 Reserved2; 558d6dd1baeSJung-uk Kim 559d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A; 560d6dd1baeSJung-uk Kim 561d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */ 562d6dd1baeSJung-uk Kim 563d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b 564d6dd1baeSJung-uk Kim { 565d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 566d6dd1baeSJung-uk Kim UINT32 ExtendedData; 567d6dd1baeSJung-uk Kim 568d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B; 569d6dd1baeSJung-uk Kim 570d6dd1baeSJung-uk Kim /* Values for ExtendedData above */ 571d6dd1baeSJung-uk Kim 572d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED (1<<31) 573d6dd1baeSJung-uk Kim 574d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */ 575d6dd1baeSJung-uk Kim 576d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c 577d6dd1baeSJung-uk Kim { 578d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 579d6dd1baeSJung-uk Kim UINT8 Handle; 580d6dd1baeSJung-uk Kim UINT16 UsedId; 581d6dd1baeSJung-uk Kim UINT8 Variety; 582d6dd1baeSJung-uk Kim 583d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C; 584d6dd1baeSJung-uk Kim 585d6dd1baeSJung-uk Kim /* Values for Variety field above */ 586d6dd1baeSJung-uk Kim 587d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC 1 588d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET 2 589d6dd1baeSJung-uk Kim 590d6dd1baeSJung-uk Kim 591d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 592d6dd1baeSJung-uk Kim 593d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory 594d6dd1baeSJung-uk Kim { 595d6dd1baeSJung-uk Kim ACPI_IVRS_HEADER Header; 596d6dd1baeSJung-uk Kim UINT16 AuxData; 597d6dd1baeSJung-uk Kim UINT64 Reserved; 598d6dd1baeSJung-uk Kim UINT64 StartAddress; 599d6dd1baeSJung-uk Kim UINT64 MemoryLength; 600d6dd1baeSJung-uk Kim 601d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY; 602d6dd1baeSJung-uk Kim 603d6dd1baeSJung-uk Kim 604d6dd1baeSJung-uk Kim /******************************************************************************* 605d6dd1baeSJung-uk Kim * 606313a0c13SJung-uk Kim * LPIT - Low Power Idle Table 607313a0c13SJung-uk Kim * 608a371a5fdSJung-uk Kim * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 609313a0c13SJung-uk Kim * 610313a0c13SJung-uk Kim ******************************************************************************/ 611313a0c13SJung-uk Kim 612313a0c13SJung-uk Kim typedef struct acpi_table_lpit 613313a0c13SJung-uk Kim { 614313a0c13SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 615313a0c13SJung-uk Kim 616313a0c13SJung-uk Kim } ACPI_TABLE_LPIT; 617313a0c13SJung-uk Kim 618313a0c13SJung-uk Kim 619313a0c13SJung-uk Kim /* LPIT subtable header */ 620313a0c13SJung-uk Kim 621313a0c13SJung-uk Kim typedef struct acpi_lpit_header 622313a0c13SJung-uk Kim { 623313a0c13SJung-uk Kim UINT32 Type; /* Subtable type */ 624313a0c13SJung-uk Kim UINT32 Length; /* Subtable length */ 625313a0c13SJung-uk Kim UINT16 UniqueId; 626313a0c13SJung-uk Kim UINT16 Reserved; 627313a0c13SJung-uk Kim UINT32 Flags; 628313a0c13SJung-uk Kim 629313a0c13SJung-uk Kim } ACPI_LPIT_HEADER; 630313a0c13SJung-uk Kim 631313a0c13SJung-uk Kim /* Values for subtable Type above */ 632313a0c13SJung-uk Kim 633313a0c13SJung-uk Kim enum AcpiLpitType 634313a0c13SJung-uk Kim { 635313a0c13SJung-uk Kim ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 636a371a5fdSJung-uk Kim ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 637313a0c13SJung-uk Kim }; 638313a0c13SJung-uk Kim 639313a0c13SJung-uk Kim /* Masks for Flags field above */ 640313a0c13SJung-uk Kim 641313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED (1) 642313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER (1<<1) 643313a0c13SJung-uk Kim 644313a0c13SJung-uk Kim /* 645313a0c13SJung-uk Kim * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER 646313a0c13SJung-uk Kim */ 647313a0c13SJung-uk Kim 648313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */ 649313a0c13SJung-uk Kim 650313a0c13SJung-uk Kim typedef struct acpi_lpit_native 651313a0c13SJung-uk Kim { 652313a0c13SJung-uk Kim ACPI_LPIT_HEADER Header; 653313a0c13SJung-uk Kim ACPI_GENERIC_ADDRESS EntryTrigger; 654313a0c13SJung-uk Kim UINT32 Residency; 655313a0c13SJung-uk Kim UINT32 Latency; 656313a0c13SJung-uk Kim ACPI_GENERIC_ADDRESS ResidencyCounter; 657313a0c13SJung-uk Kim UINT64 CounterFrequency; 658313a0c13SJung-uk Kim 659313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE; 660313a0c13SJung-uk Kim 661313a0c13SJung-uk Kim 662313a0c13SJung-uk Kim /******************************************************************************* 663313a0c13SJung-uk Kim * 664*ff879b07SJung-uk Kim * MADT - Multiple APIC Description Table 665*ff879b07SJung-uk Kim * Version 3 666*ff879b07SJung-uk Kim * 667*ff879b07SJung-uk Kim ******************************************************************************/ 668*ff879b07SJung-uk Kim 669*ff879b07SJung-uk Kim typedef struct acpi_table_madt 670*ff879b07SJung-uk Kim { 671*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 672*ff879b07SJung-uk Kim UINT32 Address; /* Physical address of local APIC */ 673*ff879b07SJung-uk Kim UINT32 Flags; 674*ff879b07SJung-uk Kim 675*ff879b07SJung-uk Kim } ACPI_TABLE_MADT; 676*ff879b07SJung-uk Kim 677*ff879b07SJung-uk Kim /* Masks for Flags field above */ 678*ff879b07SJung-uk Kim 679*ff879b07SJung-uk Kim #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 680*ff879b07SJung-uk Kim 681*ff879b07SJung-uk Kim /* Values for PCATCompat flag */ 682*ff879b07SJung-uk Kim 683*ff879b07SJung-uk Kim #define ACPI_MADT_DUAL_PIC 1 684*ff879b07SJung-uk Kim #define ACPI_MADT_MULTIPLE_APIC 0 685*ff879b07SJung-uk Kim 686*ff879b07SJung-uk Kim 687*ff879b07SJung-uk Kim /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 688*ff879b07SJung-uk Kim 689*ff879b07SJung-uk Kim enum AcpiMadtType 690*ff879b07SJung-uk Kim { 691*ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC = 0, 692*ff879b07SJung-uk Kim ACPI_MADT_TYPE_IO_APIC = 1, 693*ff879b07SJung-uk Kim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 694*ff879b07SJung-uk Kim ACPI_MADT_TYPE_NMI_SOURCE = 3, 695*ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 696*ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 697*ff879b07SJung-uk Kim ACPI_MADT_TYPE_IO_SAPIC = 6, 698*ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 699*ff879b07SJung-uk Kim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 700*ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 701*ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 702*ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 703*ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 704*ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 705*ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 706*ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 707*ff879b07SJung-uk Kim ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ 708*ff879b07SJung-uk Kim }; 709*ff879b07SJung-uk Kim 710*ff879b07SJung-uk Kim 711*ff879b07SJung-uk Kim /* 712*ff879b07SJung-uk Kim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 713*ff879b07SJung-uk Kim */ 714*ff879b07SJung-uk Kim 715*ff879b07SJung-uk Kim /* 0: Processor Local APIC */ 716*ff879b07SJung-uk Kim 717*ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic 718*ff879b07SJung-uk Kim { 719*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 720*ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 721*ff879b07SJung-uk Kim UINT8 Id; /* Processor's local APIC id */ 722*ff879b07SJung-uk Kim UINT32 LapicFlags; 723*ff879b07SJung-uk Kim 724*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC; 725*ff879b07SJung-uk Kim 726*ff879b07SJung-uk Kim 727*ff879b07SJung-uk Kim /* 1: IO APIC */ 728*ff879b07SJung-uk Kim 729*ff879b07SJung-uk Kim typedef struct acpi_madt_io_apic 730*ff879b07SJung-uk Kim { 731*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 732*ff879b07SJung-uk Kim UINT8 Id; /* I/O APIC ID */ 733*ff879b07SJung-uk Kim UINT8 Reserved; /* Reserved - must be zero */ 734*ff879b07SJung-uk Kim UINT32 Address; /* APIC physical address */ 735*ff879b07SJung-uk Kim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 736*ff879b07SJung-uk Kim 737*ff879b07SJung-uk Kim } ACPI_MADT_IO_APIC; 738*ff879b07SJung-uk Kim 739*ff879b07SJung-uk Kim 740*ff879b07SJung-uk Kim /* 2: Interrupt Override */ 741*ff879b07SJung-uk Kim 742*ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_override 743*ff879b07SJung-uk Kim { 744*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 745*ff879b07SJung-uk Kim UINT8 Bus; /* 0 - ISA */ 746*ff879b07SJung-uk Kim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 747*ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 748*ff879b07SJung-uk Kim UINT16 IntiFlags; 749*ff879b07SJung-uk Kim 750*ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_OVERRIDE; 751*ff879b07SJung-uk Kim 752*ff879b07SJung-uk Kim 753*ff879b07SJung-uk Kim /* 3: NMI Source */ 754*ff879b07SJung-uk Kim 755*ff879b07SJung-uk Kim typedef struct acpi_madt_nmi_source 756*ff879b07SJung-uk Kim { 757*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 758*ff879b07SJung-uk Kim UINT16 IntiFlags; 759*ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 760*ff879b07SJung-uk Kim 761*ff879b07SJung-uk Kim } ACPI_MADT_NMI_SOURCE; 762*ff879b07SJung-uk Kim 763*ff879b07SJung-uk Kim 764*ff879b07SJung-uk Kim /* 4: Local APIC NMI */ 765*ff879b07SJung-uk Kim 766*ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_nmi 767*ff879b07SJung-uk Kim { 768*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 769*ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 770*ff879b07SJung-uk Kim UINT16 IntiFlags; 771*ff879b07SJung-uk Kim UINT8 Lint; /* LINTn to which NMI is connected */ 772*ff879b07SJung-uk Kim 773*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_NMI; 774*ff879b07SJung-uk Kim 775*ff879b07SJung-uk Kim 776*ff879b07SJung-uk Kim /* 5: Address Override */ 777*ff879b07SJung-uk Kim 778*ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_override 779*ff879b07SJung-uk Kim { 780*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 781*ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 782*ff879b07SJung-uk Kim UINT64 Address; /* APIC physical address */ 783*ff879b07SJung-uk Kim 784*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_OVERRIDE; 785*ff879b07SJung-uk Kim 786*ff879b07SJung-uk Kim 787*ff879b07SJung-uk Kim /* 6: I/O Sapic */ 788*ff879b07SJung-uk Kim 789*ff879b07SJung-uk Kim typedef struct acpi_madt_io_sapic 790*ff879b07SJung-uk Kim { 791*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 792*ff879b07SJung-uk Kim UINT8 Id; /* I/O SAPIC ID */ 793*ff879b07SJung-uk Kim UINT8 Reserved; /* Reserved, must be zero */ 794*ff879b07SJung-uk Kim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 795*ff879b07SJung-uk Kim UINT64 Address; /* SAPIC physical address */ 796*ff879b07SJung-uk Kim 797*ff879b07SJung-uk Kim } ACPI_MADT_IO_SAPIC; 798*ff879b07SJung-uk Kim 799*ff879b07SJung-uk Kim 800*ff879b07SJung-uk Kim /* 7: Local Sapic */ 801*ff879b07SJung-uk Kim 802*ff879b07SJung-uk Kim typedef struct acpi_madt_local_sapic 803*ff879b07SJung-uk Kim { 804*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 805*ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 806*ff879b07SJung-uk Kim UINT8 Id; /* SAPIC ID */ 807*ff879b07SJung-uk Kim UINT8 Eid; /* SAPIC EID */ 808*ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 809*ff879b07SJung-uk Kim UINT32 LapicFlags; 810*ff879b07SJung-uk Kim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 811*ff879b07SJung-uk Kim char UidString[1]; /* String UID - ACPI 3.0 */ 812*ff879b07SJung-uk Kim 813*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_SAPIC; 814*ff879b07SJung-uk Kim 815*ff879b07SJung-uk Kim 816*ff879b07SJung-uk Kim /* 8: Platform Interrupt Source */ 817*ff879b07SJung-uk Kim 818*ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_source 819*ff879b07SJung-uk Kim { 820*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 821*ff879b07SJung-uk Kim UINT16 IntiFlags; 822*ff879b07SJung-uk Kim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 823*ff879b07SJung-uk Kim UINT8 Id; /* Processor ID */ 824*ff879b07SJung-uk Kim UINT8 Eid; /* Processor EID */ 825*ff879b07SJung-uk Kim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 826*ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 827*ff879b07SJung-uk Kim UINT32 Flags; /* Interrupt Source Flags */ 828*ff879b07SJung-uk Kim 829*ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_SOURCE; 830*ff879b07SJung-uk Kim 831*ff879b07SJung-uk Kim /* Masks for Flags field above */ 832*ff879b07SJung-uk Kim 833*ff879b07SJung-uk Kim #define ACPI_MADT_CPEI_OVERRIDE (1) 834*ff879b07SJung-uk Kim 835*ff879b07SJung-uk Kim 836*ff879b07SJung-uk Kim /* 9: Processor Local X2APIC (ACPI 4.0) */ 837*ff879b07SJung-uk Kim 838*ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic 839*ff879b07SJung-uk Kim { 840*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 841*ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 842*ff879b07SJung-uk Kim UINT32 LocalApicId; /* Processor x2APIC ID */ 843*ff879b07SJung-uk Kim UINT32 LapicFlags; 844*ff879b07SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 845*ff879b07SJung-uk Kim 846*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC; 847*ff879b07SJung-uk Kim 848*ff879b07SJung-uk Kim 849*ff879b07SJung-uk Kim /* 10: Local X2APIC NMI (ACPI 4.0) */ 850*ff879b07SJung-uk Kim 851*ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic_nmi 852*ff879b07SJung-uk Kim { 853*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 854*ff879b07SJung-uk Kim UINT16 IntiFlags; 855*ff879b07SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 856*ff879b07SJung-uk Kim UINT8 Lint; /* LINTn to which NMI is connected */ 857*ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved - must be zero */ 858*ff879b07SJung-uk Kim 859*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC_NMI; 860*ff879b07SJung-uk Kim 861*ff879b07SJung-uk Kim 862*ff879b07SJung-uk Kim /* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ 863*ff879b07SJung-uk Kim 864*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_interrupt 865*ff879b07SJung-uk Kim { 866*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 867*ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 868*ff879b07SJung-uk Kim UINT32 CpuInterfaceNumber; 869*ff879b07SJung-uk Kim UINT32 Uid; 870*ff879b07SJung-uk Kim UINT32 Flags; 871*ff879b07SJung-uk Kim UINT32 ParkingVersion; 872*ff879b07SJung-uk Kim UINT32 PerformanceInterrupt; 873*ff879b07SJung-uk Kim UINT64 ParkedAddress; 874*ff879b07SJung-uk Kim UINT64 BaseAddress; 875*ff879b07SJung-uk Kim UINT64 GicvBaseAddress; 876*ff879b07SJung-uk Kim UINT64 GichBaseAddress; 877*ff879b07SJung-uk Kim UINT32 VgicInterrupt; 878*ff879b07SJung-uk Kim UINT64 GicrBaseAddress; 879*ff879b07SJung-uk Kim UINT64 ArmMpidr; 880*ff879b07SJung-uk Kim UINT8 EfficiencyClass; 881*ff879b07SJung-uk Kim UINT8 Reserved2[3]; 882*ff879b07SJung-uk Kim 883*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_INTERRUPT; 884*ff879b07SJung-uk Kim 885*ff879b07SJung-uk Kim /* Masks for Flags field above */ 886*ff879b07SJung-uk Kim 887*ff879b07SJung-uk Kim /* ACPI_MADT_ENABLED (1) Processor is usable if set */ 888*ff879b07SJung-uk Kim #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 889*ff879b07SJung-uk Kim #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 890*ff879b07SJung-uk Kim 891*ff879b07SJung-uk Kim 892*ff879b07SJung-uk Kim /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 893*ff879b07SJung-uk Kim 894*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_distributor 895*ff879b07SJung-uk Kim { 896*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 897*ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 898*ff879b07SJung-uk Kim UINT32 GicId; 899*ff879b07SJung-uk Kim UINT64 BaseAddress; 900*ff879b07SJung-uk Kim UINT32 GlobalIrqBase; 901*ff879b07SJung-uk Kim UINT8 Version; 902*ff879b07SJung-uk Kim UINT8 Reserved2[3]; /* Reserved - must be zero */ 903*ff879b07SJung-uk Kim 904*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_DISTRIBUTOR; 905*ff879b07SJung-uk Kim 906*ff879b07SJung-uk Kim /* Values for Version field above */ 907*ff879b07SJung-uk Kim 908*ff879b07SJung-uk Kim enum AcpiMadtGicVersion 909*ff879b07SJung-uk Kim { 910*ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_NONE = 0, 911*ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V1 = 1, 912*ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V2 = 2, 913*ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V3 = 3, 914*ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V4 = 4, 915*ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 916*ff879b07SJung-uk Kim }; 917*ff879b07SJung-uk Kim 918*ff879b07SJung-uk Kim 919*ff879b07SJung-uk Kim /* 13: Generic MSI Frame (ACPI 5.1) */ 920*ff879b07SJung-uk Kim 921*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_msi_frame 922*ff879b07SJung-uk Kim { 923*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 924*ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 925*ff879b07SJung-uk Kim UINT32 MsiFrameId; 926*ff879b07SJung-uk Kim UINT64 BaseAddress; 927*ff879b07SJung-uk Kim UINT32 Flags; 928*ff879b07SJung-uk Kim UINT16 SpiCount; 929*ff879b07SJung-uk Kim UINT16 SpiBase; 930*ff879b07SJung-uk Kim 931*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_MSI_FRAME; 932*ff879b07SJung-uk Kim 933*ff879b07SJung-uk Kim /* Masks for Flags field above */ 934*ff879b07SJung-uk Kim 935*ff879b07SJung-uk Kim #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 936*ff879b07SJung-uk Kim 937*ff879b07SJung-uk Kim 938*ff879b07SJung-uk Kim /* 14: Generic Redistributor (ACPI 5.1) */ 939*ff879b07SJung-uk Kim 940*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_redistributor 941*ff879b07SJung-uk Kim { 942*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 943*ff879b07SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 944*ff879b07SJung-uk Kim UINT64 BaseAddress; 945*ff879b07SJung-uk Kim UINT32 Length; 946*ff879b07SJung-uk Kim 947*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_REDISTRIBUTOR; 948*ff879b07SJung-uk Kim 949*ff879b07SJung-uk Kim 950*ff879b07SJung-uk Kim /* 15: Generic Translator (ACPI 6.0) */ 951*ff879b07SJung-uk Kim 952*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_translator 953*ff879b07SJung-uk Kim { 954*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 955*ff879b07SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 956*ff879b07SJung-uk Kim UINT32 TranslationId; 957*ff879b07SJung-uk Kim UINT64 BaseAddress; 958*ff879b07SJung-uk Kim UINT32 Reserved2; 959*ff879b07SJung-uk Kim 960*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_TRANSLATOR; 961*ff879b07SJung-uk Kim 962*ff879b07SJung-uk Kim 963*ff879b07SJung-uk Kim /* 964*ff879b07SJung-uk Kim * Common flags fields for MADT subtables 965*ff879b07SJung-uk Kim */ 966*ff879b07SJung-uk Kim 967*ff879b07SJung-uk Kim /* MADT Local APIC flags */ 968*ff879b07SJung-uk Kim 969*ff879b07SJung-uk Kim #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 970*ff879b07SJung-uk Kim 971*ff879b07SJung-uk Kim /* MADT MPS INTI flags (IntiFlags) */ 972*ff879b07SJung-uk Kim 973*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 974*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 975*ff879b07SJung-uk Kim 976*ff879b07SJung-uk Kim /* Values for MPS INTI flags */ 977*ff879b07SJung-uk Kim 978*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_CONFORMS 0 979*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 980*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_RESERVED 2 981*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 982*ff879b07SJung-uk Kim 983*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_CONFORMS (0) 984*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_EDGE (1<<2) 985*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 986*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 987*ff879b07SJung-uk Kim 988*ff879b07SJung-uk Kim 989*ff879b07SJung-uk Kim /******************************************************************************* 990*ff879b07SJung-uk Kim * 991313a0c13SJung-uk Kim * MCFG - PCI Memory Mapped Configuration table and subtable 992d6dd1baeSJung-uk Kim * Version 1 993d6dd1baeSJung-uk Kim * 994d6dd1baeSJung-uk Kim * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 995d6dd1baeSJung-uk Kim * 996d6dd1baeSJung-uk Kim ******************************************************************************/ 997d6dd1baeSJung-uk Kim 998d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg 999d6dd1baeSJung-uk Kim { 1000d6dd1baeSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1001d6dd1baeSJung-uk Kim UINT8 Reserved[8]; 1002d6dd1baeSJung-uk Kim 1003d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG; 1004d6dd1baeSJung-uk Kim 1005d6dd1baeSJung-uk Kim 1006d6dd1baeSJung-uk Kim /* Subtable */ 1007d6dd1baeSJung-uk Kim 1008d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation 1009d6dd1baeSJung-uk Kim { 1010d6dd1baeSJung-uk Kim UINT64 Address; /* Base address, processor-relative */ 1011d6dd1baeSJung-uk Kim UINT16 PciSegment; /* PCI segment group number */ 1012d6dd1baeSJung-uk Kim UINT8 StartBusNumber; /* Starting PCI Bus number */ 1013d6dd1baeSJung-uk Kim UINT8 EndBusNumber; /* Final PCI Bus number */ 1014d6dd1baeSJung-uk Kim UINT32 Reserved; 1015d6dd1baeSJung-uk Kim 1016d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION; 1017d6dd1baeSJung-uk Kim 1018d6dd1baeSJung-uk Kim 1019d6dd1baeSJung-uk Kim /******************************************************************************* 1020d6dd1baeSJung-uk Kim * 1021ca3cf4faSJung-uk Kim * MCHI - Management Controller Host Interface Table 1022ca3cf4faSJung-uk Kim * Version 1 1023ca3cf4faSJung-uk Kim * 1024ca3cf4faSJung-uk Kim * Conforms to "Management Component Transport Protocol (MCTP) Host 1025ca3cf4faSJung-uk Kim * Interface Specification", Revision 1.0.0a, October 13, 2009 1026ca3cf4faSJung-uk Kim * 1027ca3cf4faSJung-uk Kim ******************************************************************************/ 1028ca3cf4faSJung-uk Kim 1029ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi 1030ca3cf4faSJung-uk Kim { 1031ca3cf4faSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1032ca3cf4faSJung-uk Kim UINT8 InterfaceType; 1033ca3cf4faSJung-uk Kim UINT8 Protocol; 1034ca3cf4faSJung-uk Kim UINT64 ProtocolData; 1035ca3cf4faSJung-uk Kim UINT8 InterruptType; 1036ca3cf4faSJung-uk Kim UINT8 Gpe; 1037ca3cf4faSJung-uk Kim UINT8 PciDeviceFlag; 1038ca3cf4faSJung-uk Kim UINT32 GlobalInterrupt; 1039ca3cf4faSJung-uk Kim ACPI_GENERIC_ADDRESS ControlRegister; 1040ca3cf4faSJung-uk Kim UINT8 PciSegment; 1041ca3cf4faSJung-uk Kim UINT8 PciBus; 1042ca3cf4faSJung-uk Kim UINT8 PciDevice; 1043ca3cf4faSJung-uk Kim UINT8 PciFunction; 1044ca3cf4faSJung-uk Kim 1045ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI; 1046ca3cf4faSJung-uk Kim 1047ca3cf4faSJung-uk Kim 1048ca3cf4faSJung-uk Kim /******************************************************************************* 1049ca3cf4faSJung-uk Kim * 1050*ff879b07SJung-uk Kim * MPST - Memory Power State Table (ACPI 5.0) 1051*ff879b07SJung-uk Kim * Version 1 1052*ff879b07SJung-uk Kim * 1053*ff879b07SJung-uk Kim ******************************************************************************/ 1054*ff879b07SJung-uk Kim 1055*ff879b07SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \ 1056*ff879b07SJung-uk Kim UINT8 ChannelId; \ 1057*ff879b07SJung-uk Kim UINT8 Reserved1[3]; \ 1058*ff879b07SJung-uk Kim UINT16 PowerNodeCount; \ 1059*ff879b07SJung-uk Kim UINT16 Reserved2; 1060*ff879b07SJung-uk Kim 1061*ff879b07SJung-uk Kim /* Main table */ 1062*ff879b07SJung-uk Kim 1063*ff879b07SJung-uk Kim typedef struct acpi_table_mpst 1064*ff879b07SJung-uk Kim { 1065*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1066*ff879b07SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1067*ff879b07SJung-uk Kim 1068*ff879b07SJung-uk Kim } ACPI_TABLE_MPST; 1069*ff879b07SJung-uk Kim 1070*ff879b07SJung-uk Kim 1071*ff879b07SJung-uk Kim /* Memory Platform Communication Channel Info */ 1072*ff879b07SJung-uk Kim 1073*ff879b07SJung-uk Kim typedef struct acpi_mpst_channel 1074*ff879b07SJung-uk Kim { 1075*ff879b07SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1076*ff879b07SJung-uk Kim 1077*ff879b07SJung-uk Kim } ACPI_MPST_CHANNEL; 1078*ff879b07SJung-uk Kim 1079*ff879b07SJung-uk Kim 1080*ff879b07SJung-uk Kim /* Memory Power Node Structure */ 1081*ff879b07SJung-uk Kim 1082*ff879b07SJung-uk Kim typedef struct acpi_mpst_power_node 1083*ff879b07SJung-uk Kim { 1084*ff879b07SJung-uk Kim UINT8 Flags; 1085*ff879b07SJung-uk Kim UINT8 Reserved1; 1086*ff879b07SJung-uk Kim UINT16 NodeId; 1087*ff879b07SJung-uk Kim UINT32 Length; 1088*ff879b07SJung-uk Kim UINT64 RangeAddress; 1089*ff879b07SJung-uk Kim UINT64 RangeLength; 1090*ff879b07SJung-uk Kim UINT32 NumPowerStates; 1091*ff879b07SJung-uk Kim UINT32 NumPhysicalComponents; 1092*ff879b07SJung-uk Kim 1093*ff879b07SJung-uk Kim } ACPI_MPST_POWER_NODE; 1094*ff879b07SJung-uk Kim 1095*ff879b07SJung-uk Kim /* Values for Flags field above */ 1096*ff879b07SJung-uk Kim 1097*ff879b07SJung-uk Kim #define ACPI_MPST_ENABLED 1 1098*ff879b07SJung-uk Kim #define ACPI_MPST_POWER_MANAGED 2 1099*ff879b07SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE 4 1100*ff879b07SJung-uk Kim 1101*ff879b07SJung-uk Kim 1102*ff879b07SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */ 1103*ff879b07SJung-uk Kim 1104*ff879b07SJung-uk Kim typedef struct acpi_mpst_power_state 1105*ff879b07SJung-uk Kim { 1106*ff879b07SJung-uk Kim UINT8 PowerState; 1107*ff879b07SJung-uk Kim UINT8 InfoIndex; 1108*ff879b07SJung-uk Kim 1109*ff879b07SJung-uk Kim } ACPI_MPST_POWER_STATE; 1110*ff879b07SJung-uk Kim 1111*ff879b07SJung-uk Kim 1112*ff879b07SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */ 1113*ff879b07SJung-uk Kim 1114*ff879b07SJung-uk Kim typedef struct acpi_mpst_component 1115*ff879b07SJung-uk Kim { 1116*ff879b07SJung-uk Kim UINT16 ComponentId; 1117*ff879b07SJung-uk Kim 1118*ff879b07SJung-uk Kim } ACPI_MPST_COMPONENT; 1119*ff879b07SJung-uk Kim 1120*ff879b07SJung-uk Kim 1121*ff879b07SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 1122*ff879b07SJung-uk Kim 1123*ff879b07SJung-uk Kim typedef struct acpi_mpst_data_hdr 1124*ff879b07SJung-uk Kim { 1125*ff879b07SJung-uk Kim UINT16 CharacteristicsCount; 1126*ff879b07SJung-uk Kim UINT16 Reserved; 1127*ff879b07SJung-uk Kim 1128*ff879b07SJung-uk Kim } ACPI_MPST_DATA_HDR; 1129*ff879b07SJung-uk Kim 1130*ff879b07SJung-uk Kim typedef struct acpi_mpst_power_data 1131*ff879b07SJung-uk Kim { 1132*ff879b07SJung-uk Kim UINT8 StructureId; 1133*ff879b07SJung-uk Kim UINT8 Flags; 1134*ff879b07SJung-uk Kim UINT16 Reserved1; 1135*ff879b07SJung-uk Kim UINT32 AveragePower; 1136*ff879b07SJung-uk Kim UINT32 PowerSaving; 1137*ff879b07SJung-uk Kim UINT64 ExitLatency; 1138*ff879b07SJung-uk Kim UINT64 Reserved2; 1139*ff879b07SJung-uk Kim 1140*ff879b07SJung-uk Kim } ACPI_MPST_POWER_DATA; 1141*ff879b07SJung-uk Kim 1142*ff879b07SJung-uk Kim /* Values for Flags field above */ 1143*ff879b07SJung-uk Kim 1144*ff879b07SJung-uk Kim #define ACPI_MPST_PRESERVE 1 1145*ff879b07SJung-uk Kim #define ACPI_MPST_AUTOENTRY 2 1146*ff879b07SJung-uk Kim #define ACPI_MPST_AUTOEXIT 4 1147*ff879b07SJung-uk Kim 1148*ff879b07SJung-uk Kim 1149*ff879b07SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */ 1150*ff879b07SJung-uk Kim 1151*ff879b07SJung-uk Kim typedef struct acpi_mpst_shared 1152*ff879b07SJung-uk Kim { 1153*ff879b07SJung-uk Kim UINT32 Signature; 1154*ff879b07SJung-uk Kim UINT16 PccCommand; 1155*ff879b07SJung-uk Kim UINT16 PccStatus; 1156*ff879b07SJung-uk Kim UINT32 CommandRegister; 1157*ff879b07SJung-uk Kim UINT32 StatusRegister; 1158*ff879b07SJung-uk Kim UINT32 PowerStateId; 1159*ff879b07SJung-uk Kim UINT32 PowerNodeId; 1160*ff879b07SJung-uk Kim UINT64 EnergyConsumed; 1161*ff879b07SJung-uk Kim UINT64 AveragePower; 1162*ff879b07SJung-uk Kim 1163*ff879b07SJung-uk Kim } ACPI_MPST_SHARED; 1164*ff879b07SJung-uk Kim 1165*ff879b07SJung-uk Kim 1166*ff879b07SJung-uk Kim /******************************************************************************* 1167*ff879b07SJung-uk Kim * 1168*ff879b07SJung-uk Kim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1169*ff879b07SJung-uk Kim * Version 1 1170*ff879b07SJung-uk Kim * 1171*ff879b07SJung-uk Kim ******************************************************************************/ 1172*ff879b07SJung-uk Kim 1173*ff879b07SJung-uk Kim typedef struct acpi_table_msct 1174*ff879b07SJung-uk Kim { 1175*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1176*ff879b07SJung-uk Kim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1177*ff879b07SJung-uk Kim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1178*ff879b07SJung-uk Kim UINT32 MaxClockDomains; /* Max number of clock domains */ 1179*ff879b07SJung-uk Kim UINT64 MaxAddress; /* Max physical address in system */ 1180*ff879b07SJung-uk Kim 1181*ff879b07SJung-uk Kim } ACPI_TABLE_MSCT; 1182*ff879b07SJung-uk Kim 1183*ff879b07SJung-uk Kim 1184*ff879b07SJung-uk Kim /* Subtable - Maximum Proximity Domain Information. Version 1 */ 1185*ff879b07SJung-uk Kim 1186*ff879b07SJung-uk Kim typedef struct acpi_msct_proximity 1187*ff879b07SJung-uk Kim { 1188*ff879b07SJung-uk Kim UINT8 Revision; 1189*ff879b07SJung-uk Kim UINT8 Length; 1190*ff879b07SJung-uk Kim UINT32 RangeStart; /* Start of domain range */ 1191*ff879b07SJung-uk Kim UINT32 RangeEnd; /* End of domain range */ 1192*ff879b07SJung-uk Kim UINT32 ProcessorCapacity; 1193*ff879b07SJung-uk Kim UINT64 MemoryCapacity; /* In bytes */ 1194*ff879b07SJung-uk Kim 1195*ff879b07SJung-uk Kim } ACPI_MSCT_PROXIMITY; 1196*ff879b07SJung-uk Kim 1197*ff879b07SJung-uk Kim 1198*ff879b07SJung-uk Kim /******************************************************************************* 1199*ff879b07SJung-uk Kim * 12007cf3e94aSJung-uk Kim * MSDM - Microsoft Data Management table 12017cf3e94aSJung-uk Kim * 12027cf3e94aSJung-uk Kim * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 12037cf3e94aSJung-uk Kim * November 29, 2011. Copyright 2011 Microsoft 12047cf3e94aSJung-uk Kim * 12057cf3e94aSJung-uk Kim ******************************************************************************/ 12067cf3e94aSJung-uk Kim 12077cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */ 12087cf3e94aSJung-uk Kim 12097cf3e94aSJung-uk Kim typedef struct acpi_table_msdm 12107cf3e94aSJung-uk Kim { 12117cf3e94aSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 12127cf3e94aSJung-uk Kim 12137cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM; 12147cf3e94aSJung-uk Kim 12157cf3e94aSJung-uk Kim 12167cf3e94aSJung-uk Kim /******************************************************************************* 12177cf3e94aSJung-uk Kim * 12189c48c75eSJung-uk Kim * MTMR - MID Timer Table 12199c48c75eSJung-uk Kim * Version 1 12209c48c75eSJung-uk Kim * 12219c48c75eSJung-uk Kim * Conforms to "Simple Firmware Interface Specification", 12229c48c75eSJung-uk Kim * Draft 0.8.2, Oct 19, 2010 12239c48c75eSJung-uk Kim * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. 12249c48c75eSJung-uk Kim * 12259c48c75eSJung-uk Kim ******************************************************************************/ 12269c48c75eSJung-uk Kim 12279c48c75eSJung-uk Kim typedef struct acpi_table_mtmr 12289c48c75eSJung-uk Kim { 12299c48c75eSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 12309c48c75eSJung-uk Kim 12319c48c75eSJung-uk Kim } ACPI_TABLE_MTMR; 12329c48c75eSJung-uk Kim 12339c48c75eSJung-uk Kim /* MTMR entry */ 12349c48c75eSJung-uk Kim 12359c48c75eSJung-uk Kim typedef struct acpi_mtmr_entry 12369c48c75eSJung-uk Kim { 12379c48c75eSJung-uk Kim ACPI_GENERIC_ADDRESS PhysicalAddress; 12389c48c75eSJung-uk Kim UINT32 Frequency; 12399c48c75eSJung-uk Kim UINT32 Irq; 12409c48c75eSJung-uk Kim 12419c48c75eSJung-uk Kim } ACPI_MTMR_ENTRY; 12429c48c75eSJung-uk Kim 1243*ff879b07SJung-uk Kim 1244*ff879b07SJung-uk Kim /******************************************************************************* 1245*ff879b07SJung-uk Kim * 1246*ff879b07SJung-uk Kim * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1247*ff879b07SJung-uk Kim * Version 1 1248*ff879b07SJung-uk Kim * 1249*ff879b07SJung-uk Kim ******************************************************************************/ 1250*ff879b07SJung-uk Kim 1251*ff879b07SJung-uk Kim typedef struct acpi_table_nfit 1252*ff879b07SJung-uk Kim { 1253*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1254*ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1255*ff879b07SJung-uk Kim 1256*ff879b07SJung-uk Kim } ACPI_TABLE_NFIT; 1257*ff879b07SJung-uk Kim 1258*ff879b07SJung-uk Kim /* Subtable header for NFIT */ 1259*ff879b07SJung-uk Kim 1260*ff879b07SJung-uk Kim typedef struct acpi_nfit_header 1261*ff879b07SJung-uk Kim { 1262*ff879b07SJung-uk Kim UINT16 Type; 1263*ff879b07SJung-uk Kim UINT16 Length; 1264*ff879b07SJung-uk Kim 1265*ff879b07SJung-uk Kim } ACPI_NFIT_HEADER; 1266*ff879b07SJung-uk Kim 1267*ff879b07SJung-uk Kim 1268*ff879b07SJung-uk Kim /* Values for subtable type in ACPI_NFIT_HEADER */ 1269*ff879b07SJung-uk Kim 1270*ff879b07SJung-uk Kim enum AcpiNfitType 1271*ff879b07SJung-uk Kim { 1272*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1273*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1274*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_INTERLEAVE = 2, 1275*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_SMBIOS = 3, 1276*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1277*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_DATA_REGION = 5, 1278*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1279*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_CAPABILITIES = 7, 1280*ff879b07SJung-uk Kim ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ 1281*ff879b07SJung-uk Kim }; 1282*ff879b07SJung-uk Kim 1283*ff879b07SJung-uk Kim /* 1284*ff879b07SJung-uk Kim * NFIT Subtables 1285*ff879b07SJung-uk Kim */ 1286*ff879b07SJung-uk Kim 1287*ff879b07SJung-uk Kim /* 0: System Physical Address Range Structure */ 1288*ff879b07SJung-uk Kim 1289*ff879b07SJung-uk Kim typedef struct acpi_nfit_system_address 1290*ff879b07SJung-uk Kim { 1291*ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1292*ff879b07SJung-uk Kim UINT16 RangeIndex; 1293*ff879b07SJung-uk Kim UINT16 Flags; 1294*ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1295*ff879b07SJung-uk Kim UINT32 ProximityDomain; 1296*ff879b07SJung-uk Kim UINT8 RangeGuid[16]; 1297*ff879b07SJung-uk Kim UINT64 Address; 1298*ff879b07SJung-uk Kim UINT64 Length; 1299*ff879b07SJung-uk Kim UINT64 MemoryMapping; 1300*ff879b07SJung-uk Kim 1301*ff879b07SJung-uk Kim } ACPI_NFIT_SYSTEM_ADDRESS; 1302*ff879b07SJung-uk Kim 1303*ff879b07SJung-uk Kim /* Flags */ 1304*ff879b07SJung-uk Kim 1305*ff879b07SJung-uk Kim #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1306*ff879b07SJung-uk Kim #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1307*ff879b07SJung-uk Kim 1308*ff879b07SJung-uk Kim /* Range Type GUIDs appear in the include/acuuid.h file */ 1309*ff879b07SJung-uk Kim 1310*ff879b07SJung-uk Kim 1311*ff879b07SJung-uk Kim /* 1: Memory Device to System Address Range Map Structure */ 1312*ff879b07SJung-uk Kim 1313*ff879b07SJung-uk Kim typedef struct acpi_nfit_memory_map 1314*ff879b07SJung-uk Kim { 1315*ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1316*ff879b07SJung-uk Kim UINT32 DeviceHandle; 1317*ff879b07SJung-uk Kim UINT16 PhysicalId; 1318*ff879b07SJung-uk Kim UINT16 RegionId; 1319*ff879b07SJung-uk Kim UINT16 RangeIndex; 1320*ff879b07SJung-uk Kim UINT16 RegionIndex; 1321*ff879b07SJung-uk Kim UINT64 RegionSize; 1322*ff879b07SJung-uk Kim UINT64 RegionOffset; 1323*ff879b07SJung-uk Kim UINT64 Address; 1324*ff879b07SJung-uk Kim UINT16 InterleaveIndex; 1325*ff879b07SJung-uk Kim UINT16 InterleaveWays; 1326*ff879b07SJung-uk Kim UINT16 Flags; 1327*ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 1328*ff879b07SJung-uk Kim 1329*ff879b07SJung-uk Kim } ACPI_NFIT_MEMORY_MAP; 1330*ff879b07SJung-uk Kim 1331*ff879b07SJung-uk Kim /* Flags */ 1332*ff879b07SJung-uk Kim 1333*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1334*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1335*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1336*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1337*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1338*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1339*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1340*ff879b07SJung-uk Kim 1341*ff879b07SJung-uk Kim 1342*ff879b07SJung-uk Kim /* 2: Interleave Structure */ 1343*ff879b07SJung-uk Kim 1344*ff879b07SJung-uk Kim typedef struct acpi_nfit_interleave 1345*ff879b07SJung-uk Kim { 1346*ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1347*ff879b07SJung-uk Kim UINT16 InterleaveIndex; 1348*ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 1349*ff879b07SJung-uk Kim UINT32 LineCount; 1350*ff879b07SJung-uk Kim UINT32 LineSize; 1351*ff879b07SJung-uk Kim UINT32 LineOffset[1]; /* Variable length */ 1352*ff879b07SJung-uk Kim 1353*ff879b07SJung-uk Kim } ACPI_NFIT_INTERLEAVE; 1354*ff879b07SJung-uk Kim 1355*ff879b07SJung-uk Kim 1356*ff879b07SJung-uk Kim /* 3: SMBIOS Management Information Structure */ 1357*ff879b07SJung-uk Kim 1358*ff879b07SJung-uk Kim typedef struct acpi_nfit_smbios 1359*ff879b07SJung-uk Kim { 1360*ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1361*ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1362*ff879b07SJung-uk Kim UINT8 Data[1]; /* Variable length */ 1363*ff879b07SJung-uk Kim 1364*ff879b07SJung-uk Kim } ACPI_NFIT_SMBIOS; 1365*ff879b07SJung-uk Kim 1366*ff879b07SJung-uk Kim 1367*ff879b07SJung-uk Kim /* 4: NVDIMM Control Region Structure */ 1368*ff879b07SJung-uk Kim 1369*ff879b07SJung-uk Kim typedef struct acpi_nfit_control_region 1370*ff879b07SJung-uk Kim { 1371*ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1372*ff879b07SJung-uk Kim UINT16 RegionIndex; 1373*ff879b07SJung-uk Kim UINT16 VendorId; 1374*ff879b07SJung-uk Kim UINT16 DeviceId; 1375*ff879b07SJung-uk Kim UINT16 RevisionId; 1376*ff879b07SJung-uk Kim UINT16 SubsystemVendorId; 1377*ff879b07SJung-uk Kim UINT16 SubsystemDeviceId; 1378*ff879b07SJung-uk Kim UINT16 SubsystemRevisionId; 1379*ff879b07SJung-uk Kim UINT8 ValidFields; 1380*ff879b07SJung-uk Kim UINT8 ManufacturingLocation; 1381*ff879b07SJung-uk Kim UINT16 ManufacturingDate; 1382*ff879b07SJung-uk Kim UINT8 Reserved[2]; /* Reserved, must be zero */ 1383*ff879b07SJung-uk Kim UINT32 SerialNumber; 1384*ff879b07SJung-uk Kim UINT16 Code; 1385*ff879b07SJung-uk Kim UINT16 Windows; 1386*ff879b07SJung-uk Kim UINT64 WindowSize; 1387*ff879b07SJung-uk Kim UINT64 CommandOffset; 1388*ff879b07SJung-uk Kim UINT64 CommandSize; 1389*ff879b07SJung-uk Kim UINT64 StatusOffset; 1390*ff879b07SJung-uk Kim UINT64 StatusSize; 1391*ff879b07SJung-uk Kim UINT16 Flags; 1392*ff879b07SJung-uk Kim UINT8 Reserved1[6]; /* Reserved, must be zero */ 1393*ff879b07SJung-uk Kim 1394*ff879b07SJung-uk Kim } ACPI_NFIT_CONTROL_REGION; 1395*ff879b07SJung-uk Kim 1396*ff879b07SJung-uk Kim /* Flags */ 1397*ff879b07SJung-uk Kim 1398*ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1399*ff879b07SJung-uk Kim 1400*ff879b07SJung-uk Kim /* ValidFields bits */ 1401*ff879b07SJung-uk Kim 1402*ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 1403*ff879b07SJung-uk Kim 1404*ff879b07SJung-uk Kim 1405*ff879b07SJung-uk Kim /* 5: NVDIMM Block Data Window Region Structure */ 1406*ff879b07SJung-uk Kim 1407*ff879b07SJung-uk Kim typedef struct acpi_nfit_data_region 1408*ff879b07SJung-uk Kim { 1409*ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1410*ff879b07SJung-uk Kim UINT16 RegionIndex; 1411*ff879b07SJung-uk Kim UINT16 Windows; 1412*ff879b07SJung-uk Kim UINT64 Offset; 1413*ff879b07SJung-uk Kim UINT64 Size; 1414*ff879b07SJung-uk Kim UINT64 Capacity; 1415*ff879b07SJung-uk Kim UINT64 StartAddress; 1416*ff879b07SJung-uk Kim 1417*ff879b07SJung-uk Kim } ACPI_NFIT_DATA_REGION; 1418*ff879b07SJung-uk Kim 1419*ff879b07SJung-uk Kim 1420*ff879b07SJung-uk Kim /* 6: Flush Hint Address Structure */ 1421*ff879b07SJung-uk Kim 1422*ff879b07SJung-uk Kim typedef struct acpi_nfit_flush_address 1423*ff879b07SJung-uk Kim { 1424*ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1425*ff879b07SJung-uk Kim UINT32 DeviceHandle; 1426*ff879b07SJung-uk Kim UINT16 HintCount; 1427*ff879b07SJung-uk Kim UINT8 Reserved[6]; /* Reserved, must be zero */ 1428*ff879b07SJung-uk Kim UINT64 HintAddress[1]; /* Variable length */ 1429*ff879b07SJung-uk Kim 1430*ff879b07SJung-uk Kim } ACPI_NFIT_FLUSH_ADDRESS; 1431*ff879b07SJung-uk Kim 1432*ff879b07SJung-uk Kim 1433*ff879b07SJung-uk Kim /* 7: Platform Capabilities Structure */ 1434*ff879b07SJung-uk Kim 1435*ff879b07SJung-uk Kim typedef struct acpi_nfit_capabilities 1436*ff879b07SJung-uk Kim { 1437*ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1438*ff879b07SJung-uk Kim UINT8 HighestCapability; 1439*ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 1440*ff879b07SJung-uk Kim UINT32 Capabilities; 1441*ff879b07SJung-uk Kim UINT32 Reserved2; 1442*ff879b07SJung-uk Kim 1443*ff879b07SJung-uk Kim } ACPI_NFIT_CAPABILITIES; 1444*ff879b07SJung-uk Kim 1445*ff879b07SJung-uk Kim /* Capabilities Flags */ 1446*ff879b07SJung-uk Kim 1447*ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ 1448*ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ 1449*ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ 1450*ff879b07SJung-uk Kim 1451*ff879b07SJung-uk Kim 1452*ff879b07SJung-uk Kim /* 1453*ff879b07SJung-uk Kim * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM 1454*ff879b07SJung-uk Kim */ 1455*ff879b07SJung-uk Kim typedef struct nfit_device_handle 1456*ff879b07SJung-uk Kim { 1457*ff879b07SJung-uk Kim UINT32 Handle; 1458*ff879b07SJung-uk Kim 1459*ff879b07SJung-uk Kim } NFIT_DEVICE_HANDLE; 1460*ff879b07SJung-uk Kim 1461*ff879b07SJung-uk Kim /* Device handle construction and extraction macros */ 1462*ff879b07SJung-uk Kim 1463*ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F 1464*ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 1465*ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 1466*ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 1467*ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 1468*ff879b07SJung-uk Kim 1469*ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 1470*ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 1471*ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_OFFSET 8 1472*ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_OFFSET 12 1473*ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_OFFSET 16 1474*ff879b07SJung-uk Kim 1475*ff879b07SJung-uk Kim /* Macro to construct a NFIT/NVDIMM device handle */ 1476*ff879b07SJung-uk Kim 1477*ff879b07SJung-uk Kim #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ 1478*ff879b07SJung-uk Kim ((dimm) | \ 1479*ff879b07SJung-uk Kim ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ 1480*ff879b07SJung-uk Kim ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ 1481*ff879b07SJung-uk Kim ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ 1482*ff879b07SJung-uk Kim ((node) << ACPI_NFIT_NODE_ID_OFFSET)) 1483*ff879b07SJung-uk Kim 1484*ff879b07SJung-uk Kim /* Macros to extract individual fields from a NFIT/NVDIMM device handle */ 1485*ff879b07SJung-uk Kim 1486*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ 1487*ff879b07SJung-uk Kim ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) 1488*ff879b07SJung-uk Kim 1489*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ 1490*ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) 1491*ff879b07SJung-uk Kim 1492*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_MEMORY_ID(handle) \ 1493*ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) 1494*ff879b07SJung-uk Kim 1495*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_SOCKET_ID(handle) \ 1496*ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) 1497*ff879b07SJung-uk Kim 1498*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_NODE_ID(handle) \ 1499*ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) 1500*ff879b07SJung-uk Kim 1501*ff879b07SJung-uk Kim 1502*ff879b07SJung-uk Kim /******************************************************************************* 1503*ff879b07SJung-uk Kim * 1504*ff879b07SJung-uk Kim * PCCT - Platform Communications Channel Table (ACPI 5.0) 1505*ff879b07SJung-uk Kim * Version 2 (ACPI 6.2) 1506*ff879b07SJung-uk Kim * 1507*ff879b07SJung-uk Kim ******************************************************************************/ 1508*ff879b07SJung-uk Kim 1509*ff879b07SJung-uk Kim typedef struct acpi_table_pcct 1510*ff879b07SJung-uk Kim { 1511*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1512*ff879b07SJung-uk Kim UINT32 Flags; 1513*ff879b07SJung-uk Kim UINT64 Reserved; 1514*ff879b07SJung-uk Kim 1515*ff879b07SJung-uk Kim } ACPI_TABLE_PCCT; 1516*ff879b07SJung-uk Kim 1517*ff879b07SJung-uk Kim /* Values for Flags field above */ 1518*ff879b07SJung-uk Kim 1519*ff879b07SJung-uk Kim #define ACPI_PCCT_DOORBELL 1 1520*ff879b07SJung-uk Kim 1521*ff879b07SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 1522*ff879b07SJung-uk Kim 1523*ff879b07SJung-uk Kim enum AcpiPcctType 1524*ff879b07SJung-uk Kim { 1525*ff879b07SJung-uk Kim ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 1526*ff879b07SJung-uk Kim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 1527*ff879b07SJung-uk Kim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 1528*ff879b07SJung-uk Kim ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ 1529*ff879b07SJung-uk Kim ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ 1530*ff879b07SJung-uk Kim ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 1531*ff879b07SJung-uk Kim }; 1532*ff879b07SJung-uk Kim 1533*ff879b07SJung-uk Kim /* 1534*ff879b07SJung-uk Kim * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1535*ff879b07SJung-uk Kim */ 1536*ff879b07SJung-uk Kim 1537*ff879b07SJung-uk Kim /* 0: Generic Communications Subspace */ 1538*ff879b07SJung-uk Kim 1539*ff879b07SJung-uk Kim typedef struct acpi_pcct_subspace 1540*ff879b07SJung-uk Kim { 1541*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1542*ff879b07SJung-uk Kim UINT8 Reserved[6]; 1543*ff879b07SJung-uk Kim UINT64 BaseAddress; 1544*ff879b07SJung-uk Kim UINT64 Length; 1545*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1546*ff879b07SJung-uk Kim UINT64 PreserveMask; 1547*ff879b07SJung-uk Kim UINT64 WriteMask; 1548*ff879b07SJung-uk Kim UINT32 Latency; 1549*ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1550*ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1551*ff879b07SJung-uk Kim 1552*ff879b07SJung-uk Kim } ACPI_PCCT_SUBSPACE; 1553*ff879b07SJung-uk Kim 1554*ff879b07SJung-uk Kim 1555*ff879b07SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 1556*ff879b07SJung-uk Kim 1557*ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced 1558*ff879b07SJung-uk Kim { 1559*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1560*ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1561*ff879b07SJung-uk Kim UINT8 Flags; 1562*ff879b07SJung-uk Kim UINT8 Reserved; 1563*ff879b07SJung-uk Kim UINT64 BaseAddress; 1564*ff879b07SJung-uk Kim UINT64 Length; 1565*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1566*ff879b07SJung-uk Kim UINT64 PreserveMask; 1567*ff879b07SJung-uk Kim UINT64 WriteMask; 1568*ff879b07SJung-uk Kim UINT32 Latency; 1569*ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1570*ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1571*ff879b07SJung-uk Kim 1572*ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED; 1573*ff879b07SJung-uk Kim 1574*ff879b07SJung-uk Kim 1575*ff879b07SJung-uk Kim /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 1576*ff879b07SJung-uk Kim 1577*ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced_type2 1578*ff879b07SJung-uk Kim { 1579*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1580*ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1581*ff879b07SJung-uk Kim UINT8 Flags; 1582*ff879b07SJung-uk Kim UINT8 Reserved; 1583*ff879b07SJung-uk Kim UINT64 BaseAddress; 1584*ff879b07SJung-uk Kim UINT64 Length; 1585*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1586*ff879b07SJung-uk Kim UINT64 PreserveMask; 1587*ff879b07SJung-uk Kim UINT64 WriteMask; 1588*ff879b07SJung-uk Kim UINT32 Latency; 1589*ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1590*ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1591*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1592*ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1593*ff879b07SJung-uk Kim UINT64 AckWriteMask; 1594*ff879b07SJung-uk Kim 1595*ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED_TYPE2; 1596*ff879b07SJung-uk Kim 1597*ff879b07SJung-uk Kim 1598*ff879b07SJung-uk Kim /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ 1599*ff879b07SJung-uk Kim 1600*ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_master 1601*ff879b07SJung-uk Kim { 1602*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1603*ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1604*ff879b07SJung-uk Kim UINT8 Flags; 1605*ff879b07SJung-uk Kim UINT8 Reserved1; 1606*ff879b07SJung-uk Kim UINT64 BaseAddress; 1607*ff879b07SJung-uk Kim UINT32 Length; 1608*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1609*ff879b07SJung-uk Kim UINT64 PreserveMask; 1610*ff879b07SJung-uk Kim UINT64 WriteMask; 1611*ff879b07SJung-uk Kim UINT32 Latency; 1612*ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1613*ff879b07SJung-uk Kim UINT32 MinTurnaroundTime; 1614*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1615*ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1616*ff879b07SJung-uk Kim UINT64 AckSetMask; 1617*ff879b07SJung-uk Kim UINT64 Reserved2; 1618*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 1619*ff879b07SJung-uk Kim UINT64 CmdCompleteMask; 1620*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdUpdateRegister; 1621*ff879b07SJung-uk Kim UINT64 CmdUpdatePreserveMask; 1622*ff879b07SJung-uk Kim UINT64 CmdUpdateSetMask; 1623*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 1624*ff879b07SJung-uk Kim UINT64 ErrorStatusMask; 1625*ff879b07SJung-uk Kim 1626*ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_MASTER; 1627*ff879b07SJung-uk Kim 1628*ff879b07SJung-uk Kim 1629*ff879b07SJung-uk Kim /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ 1630*ff879b07SJung-uk Kim 1631*ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_slave 1632*ff879b07SJung-uk Kim { 1633*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1634*ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1635*ff879b07SJung-uk Kim UINT8 Flags; 1636*ff879b07SJung-uk Kim UINT8 Reserved1; 1637*ff879b07SJung-uk Kim UINT64 BaseAddress; 1638*ff879b07SJung-uk Kim UINT32 Length; 1639*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1640*ff879b07SJung-uk Kim UINT64 PreserveMask; 1641*ff879b07SJung-uk Kim UINT64 WriteMask; 1642*ff879b07SJung-uk Kim UINT32 Latency; 1643*ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1644*ff879b07SJung-uk Kim UINT32 MinTurnaroundTime; 1645*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1646*ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1647*ff879b07SJung-uk Kim UINT64 AckSetMask; 1648*ff879b07SJung-uk Kim UINT64 Reserved2; 1649*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 1650*ff879b07SJung-uk Kim UINT64 CmdCompleteMask; 1651*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdUpdateRegister; 1652*ff879b07SJung-uk Kim UINT64 CmdUpdatePreserveMask; 1653*ff879b07SJung-uk Kim UINT64 CmdUpdateSetMask; 1654*ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 1655*ff879b07SJung-uk Kim UINT64 ErrorStatusMask; 1656*ff879b07SJung-uk Kim 1657*ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SLAVE; 1658*ff879b07SJung-uk Kim 1659*ff879b07SJung-uk Kim 1660*ff879b07SJung-uk Kim /* Values for doorbell flags above */ 1661*ff879b07SJung-uk Kim 1662*ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY (1) 1663*ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE (1<<1) 1664*ff879b07SJung-uk Kim 1665*ff879b07SJung-uk Kim 1666*ff879b07SJung-uk Kim /* 1667*ff879b07SJung-uk Kim * PCC memory structures (not part of the ACPI table) 1668*ff879b07SJung-uk Kim */ 1669*ff879b07SJung-uk Kim 1670*ff879b07SJung-uk Kim /* Shared Memory Region */ 1671*ff879b07SJung-uk Kim 1672*ff879b07SJung-uk Kim typedef struct acpi_pcct_shared_memory 1673*ff879b07SJung-uk Kim { 1674*ff879b07SJung-uk Kim UINT32 Signature; 1675*ff879b07SJung-uk Kim UINT16 Command; 1676*ff879b07SJung-uk Kim UINT16 Status; 1677*ff879b07SJung-uk Kim 1678*ff879b07SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY; 1679*ff879b07SJung-uk Kim 1680*ff879b07SJung-uk Kim 1681*ff879b07SJung-uk Kim /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ 1682*ff879b07SJung-uk Kim 1683*ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_shared_memory 1684*ff879b07SJung-uk Kim { 1685*ff879b07SJung-uk Kim UINT32 Signature; 1686*ff879b07SJung-uk Kim UINT32 Flags; 1687*ff879b07SJung-uk Kim UINT32 Length; 1688*ff879b07SJung-uk Kim UINT32 Command; 1689*ff879b07SJung-uk Kim 1690*ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SHARED_MEMORY; 1691*ff879b07SJung-uk Kim 1692*ff879b07SJung-uk Kim 1693*ff879b07SJung-uk Kim /******************************************************************************* 1694*ff879b07SJung-uk Kim * 1695*ff879b07SJung-uk Kim * PDTT - Platform Debug Trigger Table (ACPI 6.2) 1696*ff879b07SJung-uk Kim * Version 0 1697*ff879b07SJung-uk Kim * 1698*ff879b07SJung-uk Kim ******************************************************************************/ 1699*ff879b07SJung-uk Kim 1700*ff879b07SJung-uk Kim typedef struct acpi_table_pdtt 1701*ff879b07SJung-uk Kim { 1702*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1703*ff879b07SJung-uk Kim UINT8 TriggerCount; 1704*ff879b07SJung-uk Kim UINT8 Reserved[3]; 1705*ff879b07SJung-uk Kim UINT32 ArrayOffset; 1706*ff879b07SJung-uk Kim 1707*ff879b07SJung-uk Kim } ACPI_TABLE_PDTT; 1708*ff879b07SJung-uk Kim 1709*ff879b07SJung-uk Kim 1710*ff879b07SJung-uk Kim /* 1711*ff879b07SJung-uk Kim * PDTT Communication Channel Identifier Structure. 1712*ff879b07SJung-uk Kim * The number of these structures is defined by TriggerCount above, 1713*ff879b07SJung-uk Kim * starting at ArrayOffset. 1714*ff879b07SJung-uk Kim */ 1715*ff879b07SJung-uk Kim typedef struct acpi_pdtt_channel 1716*ff879b07SJung-uk Kim { 1717*ff879b07SJung-uk Kim UINT8 SubchannelId; 1718*ff879b07SJung-uk Kim UINT8 Flags; 1719*ff879b07SJung-uk Kim 1720*ff879b07SJung-uk Kim } ACPI_PDTT_CHANNEL; 1721*ff879b07SJung-uk Kim 1722*ff879b07SJung-uk Kim /* Flags for above */ 1723*ff879b07SJung-uk Kim 1724*ff879b07SJung-uk Kim #define ACPI_PDTT_RUNTIME_TRIGGER (1) 1725*ff879b07SJung-uk Kim #define ACPI_PDTT_WAIT_COMPLETION (1<<1) 1726*ff879b07SJung-uk Kim 1727*ff879b07SJung-uk Kim 1728*ff879b07SJung-uk Kim /******************************************************************************* 1729*ff879b07SJung-uk Kim * 1730*ff879b07SJung-uk Kim * PMTT - Platform Memory Topology Table (ACPI 5.0) 1731*ff879b07SJung-uk Kim * Version 1 1732*ff879b07SJung-uk Kim * 1733*ff879b07SJung-uk Kim ******************************************************************************/ 1734*ff879b07SJung-uk Kim 1735*ff879b07SJung-uk Kim typedef struct acpi_table_pmtt 1736*ff879b07SJung-uk Kim { 1737*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1738*ff879b07SJung-uk Kim UINT32 Reserved; 1739*ff879b07SJung-uk Kim 1740*ff879b07SJung-uk Kim } ACPI_TABLE_PMTT; 1741*ff879b07SJung-uk Kim 1742*ff879b07SJung-uk Kim 1743*ff879b07SJung-uk Kim /* Common header for PMTT subtables that follow main table */ 1744*ff879b07SJung-uk Kim 1745*ff879b07SJung-uk Kim typedef struct acpi_pmtt_header 1746*ff879b07SJung-uk Kim { 1747*ff879b07SJung-uk Kim UINT8 Type; 1748*ff879b07SJung-uk Kim UINT8 Reserved1; 1749*ff879b07SJung-uk Kim UINT16 Length; 1750*ff879b07SJung-uk Kim UINT16 Flags; 1751*ff879b07SJung-uk Kim UINT16 Reserved2; 1752*ff879b07SJung-uk Kim 1753*ff879b07SJung-uk Kim } ACPI_PMTT_HEADER; 1754*ff879b07SJung-uk Kim 1755*ff879b07SJung-uk Kim /* Values for Type field above */ 1756*ff879b07SJung-uk Kim 1757*ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET 0 1758*ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER 1 1759*ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM 2 1760*ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ 1761*ff879b07SJung-uk Kim 1762*ff879b07SJung-uk Kim /* Values for Flags field above */ 1763*ff879b07SJung-uk Kim 1764*ff879b07SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL 0x0001 1765*ff879b07SJung-uk Kim #define ACPI_PMTT_PHYSICAL 0x0002 1766*ff879b07SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE 0x000C 1767*ff879b07SJung-uk Kim 1768*ff879b07SJung-uk Kim 1769*ff879b07SJung-uk Kim /* 1770*ff879b07SJung-uk Kim * PMTT subtables, correspond to Type in acpi_pmtt_header 1771*ff879b07SJung-uk Kim */ 1772*ff879b07SJung-uk Kim 1773*ff879b07SJung-uk Kim 1774*ff879b07SJung-uk Kim /* 0: Socket Structure */ 1775*ff879b07SJung-uk Kim 1776*ff879b07SJung-uk Kim typedef struct acpi_pmtt_socket 1777*ff879b07SJung-uk Kim { 1778*ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 1779*ff879b07SJung-uk Kim UINT16 SocketId; 1780*ff879b07SJung-uk Kim UINT16 Reserved; 1781*ff879b07SJung-uk Kim 1782*ff879b07SJung-uk Kim } ACPI_PMTT_SOCKET; 1783*ff879b07SJung-uk Kim 1784*ff879b07SJung-uk Kim 1785*ff879b07SJung-uk Kim /* 1: Memory Controller subtable */ 1786*ff879b07SJung-uk Kim 1787*ff879b07SJung-uk Kim typedef struct acpi_pmtt_controller 1788*ff879b07SJung-uk Kim { 1789*ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 1790*ff879b07SJung-uk Kim UINT32 ReadLatency; 1791*ff879b07SJung-uk Kim UINT32 WriteLatency; 1792*ff879b07SJung-uk Kim UINT32 ReadBandwidth; 1793*ff879b07SJung-uk Kim UINT32 WriteBandwidth; 1794*ff879b07SJung-uk Kim UINT16 AccessWidth; 1795*ff879b07SJung-uk Kim UINT16 Alignment; 1796*ff879b07SJung-uk Kim UINT16 Reserved; 1797*ff879b07SJung-uk Kim UINT16 DomainCount; 1798*ff879b07SJung-uk Kim 1799*ff879b07SJung-uk Kim } ACPI_PMTT_CONTROLLER; 1800*ff879b07SJung-uk Kim 1801*ff879b07SJung-uk Kim /* 1a: Proximity Domain substructure */ 1802*ff879b07SJung-uk Kim 1803*ff879b07SJung-uk Kim typedef struct acpi_pmtt_domain 1804*ff879b07SJung-uk Kim { 1805*ff879b07SJung-uk Kim UINT32 ProximityDomain; 1806*ff879b07SJung-uk Kim 1807*ff879b07SJung-uk Kim } ACPI_PMTT_DOMAIN; 1808*ff879b07SJung-uk Kim 1809*ff879b07SJung-uk Kim 1810*ff879b07SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */ 1811*ff879b07SJung-uk Kim 1812*ff879b07SJung-uk Kim typedef struct acpi_pmtt_physical_component 1813*ff879b07SJung-uk Kim { 1814*ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 1815*ff879b07SJung-uk Kim UINT16 ComponentId; 1816*ff879b07SJung-uk Kim UINT16 Reserved; 1817*ff879b07SJung-uk Kim UINT32 MemorySize; 1818*ff879b07SJung-uk Kim UINT32 BiosHandle; 1819*ff879b07SJung-uk Kim 1820*ff879b07SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT; 1821*ff879b07SJung-uk Kim 1822*ff879b07SJung-uk Kim 1823*ff879b07SJung-uk Kim /******************************************************************************* 1824*ff879b07SJung-uk Kim * 1825*ff879b07SJung-uk Kim * PPTT - Processor Properties Topology Table (ACPI 6.2) 1826*ff879b07SJung-uk Kim * Version 1 1827*ff879b07SJung-uk Kim * 1828*ff879b07SJung-uk Kim ******************************************************************************/ 1829*ff879b07SJung-uk Kim 1830*ff879b07SJung-uk Kim typedef struct acpi_table_pptt 1831*ff879b07SJung-uk Kim { 1832*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1833*ff879b07SJung-uk Kim 1834*ff879b07SJung-uk Kim } ACPI_TABLE_PPTT; 1835*ff879b07SJung-uk Kim 1836*ff879b07SJung-uk Kim /* Values for Type field above */ 1837*ff879b07SJung-uk Kim 1838*ff879b07SJung-uk Kim enum AcpiPpttType 1839*ff879b07SJung-uk Kim { 1840*ff879b07SJung-uk Kim ACPI_PPTT_TYPE_PROCESSOR = 0, 1841*ff879b07SJung-uk Kim ACPI_PPTT_TYPE_CACHE = 1, 1842*ff879b07SJung-uk Kim ACPI_PPTT_TYPE_ID = 2, 1843*ff879b07SJung-uk Kim ACPI_PPTT_TYPE_RESERVED = 3 1844*ff879b07SJung-uk Kim }; 1845*ff879b07SJung-uk Kim 1846*ff879b07SJung-uk Kim 1847*ff879b07SJung-uk Kim /* 0: Processor Hierarchy Node Structure */ 1848*ff879b07SJung-uk Kim 1849*ff879b07SJung-uk Kim typedef struct acpi_pptt_processor 1850*ff879b07SJung-uk Kim { 1851*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1852*ff879b07SJung-uk Kim UINT16 Reserved; 1853*ff879b07SJung-uk Kim UINT32 Flags; 1854*ff879b07SJung-uk Kim UINT32 Parent; 1855*ff879b07SJung-uk Kim UINT32 AcpiProcessorId; 1856*ff879b07SJung-uk Kim UINT32 NumberOfPrivResources; 1857*ff879b07SJung-uk Kim 1858*ff879b07SJung-uk Kim } ACPI_PPTT_PROCESSOR; 1859*ff879b07SJung-uk Kim 1860*ff879b07SJung-uk Kim /* Flags */ 1861*ff879b07SJung-uk Kim 1862*ff879b07SJung-uk Kim #define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ 1863*ff879b07SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ 1864*ff879b07SJung-uk Kim 1865*ff879b07SJung-uk Kim 1866*ff879b07SJung-uk Kim /* 1: Cache Type Structure */ 1867*ff879b07SJung-uk Kim 1868*ff879b07SJung-uk Kim typedef struct acpi_pptt_cache 1869*ff879b07SJung-uk Kim { 1870*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1871*ff879b07SJung-uk Kim UINT16 Reserved; 1872*ff879b07SJung-uk Kim UINT32 Flags; 1873*ff879b07SJung-uk Kim UINT32 NextLevelOfCache; 1874*ff879b07SJung-uk Kim UINT32 Size; 1875*ff879b07SJung-uk Kim UINT32 NumberOfSets; 1876*ff879b07SJung-uk Kim UINT8 Associativity; 1877*ff879b07SJung-uk Kim UINT8 Attributes; 1878*ff879b07SJung-uk Kim UINT16 LineSize; 1879*ff879b07SJung-uk Kim 1880*ff879b07SJung-uk Kim } ACPI_PPTT_CACHE; 1881*ff879b07SJung-uk Kim 1882*ff879b07SJung-uk Kim /* Flags */ 1883*ff879b07SJung-uk Kim 1884*ff879b07SJung-uk Kim #define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 1885*ff879b07SJung-uk Kim #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 1886*ff879b07SJung-uk Kim #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 1887*ff879b07SJung-uk Kim #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 1888*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 1889*ff879b07SJung-uk Kim #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 1890*ff879b07SJung-uk Kim #define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 1891*ff879b07SJung-uk Kim 1892*ff879b07SJung-uk Kim /* Masks for Attributes */ 1893*ff879b07SJung-uk Kim 1894*ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 1895*ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 1896*ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 1897*ff879b07SJung-uk Kim 1898*ff879b07SJung-uk Kim /* Attributes describing cache */ 1899*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ 1900*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ 1901*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ 1902*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ 1903*ff879b07SJung-uk Kim 1904*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ 1905*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ 1906*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ 1907*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ 1908*ff879b07SJung-uk Kim 1909*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ 1910*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ 1911*ff879b07SJung-uk Kim 1912*ff879b07SJung-uk Kim /* 2: ID Structure */ 1913*ff879b07SJung-uk Kim 1914*ff879b07SJung-uk Kim typedef struct acpi_pptt_id 1915*ff879b07SJung-uk Kim { 1916*ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1917*ff879b07SJung-uk Kim UINT16 Reserved; 1918*ff879b07SJung-uk Kim UINT32 VendorId; 1919*ff879b07SJung-uk Kim UINT64 Level1Id; 1920*ff879b07SJung-uk Kim UINT64 Level2Id; 1921*ff879b07SJung-uk Kim UINT16 MajorRev; 1922*ff879b07SJung-uk Kim UINT16 MinorRev; 1923*ff879b07SJung-uk Kim UINT16 SpinRev; 1924*ff879b07SJung-uk Kim 1925*ff879b07SJung-uk Kim } ACPI_PPTT_ID; 1926*ff879b07SJung-uk Kim 1927*ff879b07SJung-uk Kim 1928*ff879b07SJung-uk Kim /******************************************************************************* 1929*ff879b07SJung-uk Kim * 1930*ff879b07SJung-uk Kim * RASF - RAS Feature Table (ACPI 5.0) 1931*ff879b07SJung-uk Kim * Version 1 1932*ff879b07SJung-uk Kim * 1933*ff879b07SJung-uk Kim ******************************************************************************/ 1934*ff879b07SJung-uk Kim 1935*ff879b07SJung-uk Kim typedef struct acpi_table_rasf 1936*ff879b07SJung-uk Kim { 1937*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1938*ff879b07SJung-uk Kim UINT8 ChannelId[12]; 1939*ff879b07SJung-uk Kim 1940*ff879b07SJung-uk Kim } ACPI_TABLE_RASF; 1941*ff879b07SJung-uk Kim 1942*ff879b07SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */ 1943*ff879b07SJung-uk Kim 1944*ff879b07SJung-uk Kim typedef struct acpi_rasf_shared_memory 1945*ff879b07SJung-uk Kim { 1946*ff879b07SJung-uk Kim UINT32 Signature; 1947*ff879b07SJung-uk Kim UINT16 Command; 1948*ff879b07SJung-uk Kim UINT16 Status; 1949*ff879b07SJung-uk Kim UINT16 Version; 1950*ff879b07SJung-uk Kim UINT8 Capabilities[16]; 1951*ff879b07SJung-uk Kim UINT8 SetCapabilities[16]; 1952*ff879b07SJung-uk Kim UINT16 NumParameterBlocks; 1953*ff879b07SJung-uk Kim UINT32 SetCapabilitiesStatus; 1954*ff879b07SJung-uk Kim 1955*ff879b07SJung-uk Kim } ACPI_RASF_SHARED_MEMORY; 1956*ff879b07SJung-uk Kim 1957*ff879b07SJung-uk Kim /* RASF Parameter Block Structure Header */ 1958*ff879b07SJung-uk Kim 1959*ff879b07SJung-uk Kim typedef struct acpi_rasf_parameter_block 1960*ff879b07SJung-uk Kim { 1961*ff879b07SJung-uk Kim UINT16 Type; 1962*ff879b07SJung-uk Kim UINT16 Version; 1963*ff879b07SJung-uk Kim UINT16 Length; 1964*ff879b07SJung-uk Kim 1965*ff879b07SJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK; 1966*ff879b07SJung-uk Kim 1967*ff879b07SJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */ 1968*ff879b07SJung-uk Kim 1969*ff879b07SJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter 1970*ff879b07SJung-uk Kim { 1971*ff879b07SJung-uk Kim ACPI_RASF_PARAMETER_BLOCK Header; 1972*ff879b07SJung-uk Kim UINT16 PatrolScrubCommand; 1973*ff879b07SJung-uk Kim UINT64 RequestedAddressRange[2]; 1974*ff879b07SJung-uk Kim UINT64 ActualAddressRange[2]; 1975*ff879b07SJung-uk Kim UINT16 Flags; 1976*ff879b07SJung-uk Kim UINT8 RequestedSpeed; 1977*ff879b07SJung-uk Kim 1978*ff879b07SJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER; 1979*ff879b07SJung-uk Kim 1980*ff879b07SJung-uk Kim /* Masks for Flags and Speed fields above */ 1981*ff879b07SJung-uk Kim 1982*ff879b07SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING 1 1983*ff879b07SJung-uk Kim #define ACPI_RASF_SPEED (7<<1) 1984*ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_SLOW (0<<1) 1985*ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM (4<<1) 1986*ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_FAST (7<<1) 1987*ff879b07SJung-uk Kim 1988*ff879b07SJung-uk Kim /* Channel Commands */ 1989*ff879b07SJung-uk Kim 1990*ff879b07SJung-uk Kim enum AcpiRasfCommands 1991*ff879b07SJung-uk Kim { 1992*ff879b07SJung-uk Kim ACPI_RASF_EXECUTE_RASF_COMMAND = 1 1993*ff879b07SJung-uk Kim }; 1994*ff879b07SJung-uk Kim 1995*ff879b07SJung-uk Kim /* Platform RAS Capabilities */ 1996*ff879b07SJung-uk Kim 1997*ff879b07SJung-uk Kim enum AcpiRasfCapabiliities 1998*ff879b07SJung-uk Kim { 1999*ff879b07SJung-uk Kim ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 2000*ff879b07SJung-uk Kim ACPI_SW_PATROL_SCRUB_EXPOSED = 1 2001*ff879b07SJung-uk Kim }; 2002*ff879b07SJung-uk Kim 2003*ff879b07SJung-uk Kim /* Patrol Scrub Commands */ 2004*ff879b07SJung-uk Kim 2005*ff879b07SJung-uk Kim enum AcpiRasfPatrolScrubCommands 2006*ff879b07SJung-uk Kim { 2007*ff879b07SJung-uk Kim ACPI_RASF_GET_PATROL_PARAMETERS = 1, 2008*ff879b07SJung-uk Kim ACPI_RASF_START_PATROL_SCRUBBER = 2, 2009*ff879b07SJung-uk Kim ACPI_RASF_STOP_PATROL_SCRUBBER = 3 2010*ff879b07SJung-uk Kim }; 2011*ff879b07SJung-uk Kim 2012*ff879b07SJung-uk Kim /* Channel Command flags */ 2013*ff879b07SJung-uk Kim 2014*ff879b07SJung-uk Kim #define ACPI_RASF_GENERATE_SCI (1<<15) 2015*ff879b07SJung-uk Kim 2016*ff879b07SJung-uk Kim /* Status values */ 2017*ff879b07SJung-uk Kim 2018*ff879b07SJung-uk Kim enum AcpiRasfStatus 2019*ff879b07SJung-uk Kim { 2020*ff879b07SJung-uk Kim ACPI_RASF_SUCCESS = 0, 2021*ff879b07SJung-uk Kim ACPI_RASF_NOT_VALID = 1, 2022*ff879b07SJung-uk Kim ACPI_RASF_NOT_SUPPORTED = 2, 2023*ff879b07SJung-uk Kim ACPI_RASF_BUSY = 3, 2024*ff879b07SJung-uk Kim ACPI_RASF_FAILED = 4, 2025*ff879b07SJung-uk Kim ACPI_RASF_ABORTED = 5, 2026*ff879b07SJung-uk Kim ACPI_RASF_INVALID_DATA = 6 2027*ff879b07SJung-uk Kim }; 2028*ff879b07SJung-uk Kim 2029*ff879b07SJung-uk Kim /* Status flags */ 2030*ff879b07SJung-uk Kim 2031*ff879b07SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE (1) 2032*ff879b07SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL (1<<1) 2033*ff879b07SJung-uk Kim #define ACPI_RASF_ERROR (1<<2) 2034*ff879b07SJung-uk Kim #define ACPI_RASF_STATUS (0x1F<<3) 2035*ff879b07SJung-uk Kim 2036*ff879b07SJung-uk Kim 2037*ff879b07SJung-uk Kim /******************************************************************************* 2038*ff879b07SJung-uk Kim * 2039*ff879b07SJung-uk Kim * SBST - Smart Battery Specification Table 2040*ff879b07SJung-uk Kim * Version 1 2041*ff879b07SJung-uk Kim * 2042*ff879b07SJung-uk Kim ******************************************************************************/ 2043*ff879b07SJung-uk Kim 2044*ff879b07SJung-uk Kim typedef struct acpi_table_sbst 2045*ff879b07SJung-uk Kim { 2046*ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2047*ff879b07SJung-uk Kim UINT32 WarningLevel; 2048*ff879b07SJung-uk Kim UINT32 LowLevel; 2049*ff879b07SJung-uk Kim UINT32 CriticalLevel; 2050*ff879b07SJung-uk Kim 2051*ff879b07SJung-uk Kim } ACPI_TABLE_SBST; 2052*ff879b07SJung-uk Kim 2053*ff879b07SJung-uk Kim 20545f9b24faSJung-uk Kim /******************************************************************************* 20555f9b24faSJung-uk Kim * 20565f9b24faSJung-uk Kim * SDEI - Software Delegated Exception Interface Descriptor Table 20575f9b24faSJung-uk Kim * 20585f9b24faSJung-uk Kim * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, 20595f9b24faSJung-uk Kim * May 8th, 2017. Copyright 2017 ARM Ltd. 20605f9b24faSJung-uk Kim * 20615f9b24faSJung-uk Kim ******************************************************************************/ 20625f9b24faSJung-uk Kim 20635f9b24faSJung-uk Kim typedef struct acpi_table_sdei 20645f9b24faSJung-uk Kim { 20655f9b24faSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 20665f9b24faSJung-uk Kim 20675f9b24faSJung-uk Kim } ACPI_TABLE_SDEI; 20685f9b24faSJung-uk Kim 20699c48c75eSJung-uk Kim 20709c48c75eSJung-uk Kim /******************************************************************************* 20719c48c75eSJung-uk Kim * 2072*ff879b07SJung-uk Kim * SDEV - Secure Devices Table (ACPI 6.2) 2073*ff879b07SJung-uk Kim * Version 1 2074dcbce41eSJung-uk Kim * 2075dcbce41eSJung-uk Kim ******************************************************************************/ 2076dcbce41eSJung-uk Kim 2077*ff879b07SJung-uk Kim typedef struct acpi_table_sdev 2078dcbce41eSJung-uk Kim { 2079dcbce41eSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2080dcbce41eSJung-uk Kim 2081*ff879b07SJung-uk Kim } ACPI_TABLE_SDEV; 2082dcbce41eSJung-uk Kim 2083dcbce41eSJung-uk Kim 2084*ff879b07SJung-uk Kim typedef struct acpi_sdev_header 2085d6dd1baeSJung-uk Kim { 2086*ff879b07SJung-uk Kim UINT8 Type; 2087*ff879b07SJung-uk Kim UINT8 Flags; 2088*ff879b07SJung-uk Kim UINT16 Length; 2089d6dd1baeSJung-uk Kim 2090*ff879b07SJung-uk Kim } ACPI_SDEV_HEADER; 2091f8146b88SJung-uk Kim 2092d6dd1baeSJung-uk Kim 2093*ff879b07SJung-uk Kim /* Values for subtable type above */ 2094d6dd1baeSJung-uk Kim 2095*ff879b07SJung-uk Kim enum AcpiSdevType 2096d6dd1baeSJung-uk Kim { 2097*ff879b07SJung-uk Kim ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, 2098*ff879b07SJung-uk Kim ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, 2099*ff879b07SJung-uk Kim ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 2100d6dd1baeSJung-uk Kim }; 2101d6dd1baeSJung-uk Kim 2102*ff879b07SJung-uk Kim /* Values for flags above */ 2103d6dd1baeSJung-uk Kim 2104*ff879b07SJung-uk Kim #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) 2105fe0f0bbbSJung-uk Kim 2106fe0f0bbbSJung-uk Kim /* 2107*ff879b07SJung-uk Kim * SDEV subtables 2108fe0f0bbbSJung-uk Kim */ 2109fe0f0bbbSJung-uk Kim 2110*ff879b07SJung-uk Kim /* 0: Namespace Device Based Secure Device Structure */ 2111fe0f0bbbSJung-uk Kim 2112*ff879b07SJung-uk Kim typedef struct acpi_sdev_namespace 2113fe0f0bbbSJung-uk Kim { 2114*ff879b07SJung-uk Kim ACPI_SDEV_HEADER Header; 2115*ff879b07SJung-uk Kim UINT16 DeviceIdOffset; 2116*ff879b07SJung-uk Kim UINT16 DeviceIdLength; 2117*ff879b07SJung-uk Kim UINT16 VendorDataOffset; 2118*ff879b07SJung-uk Kim UINT16 VendorDataLength; 2119d6dd1baeSJung-uk Kim 2120*ff879b07SJung-uk Kim } ACPI_SDEV_NAMESPACE; 21215ef50723SJung-uk Kim 2122*ff879b07SJung-uk Kim /* 1: PCIe Endpoint Device Based Device Structure */ 2123*ff879b07SJung-uk Kim 2124*ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie 21255ef50723SJung-uk Kim { 2126*ff879b07SJung-uk Kim ACPI_SDEV_HEADER Header; 2127*ff879b07SJung-uk Kim UINT16 Segment; 2128*ff879b07SJung-uk Kim UINT16 StartBus; 2129*ff879b07SJung-uk Kim UINT16 PathOffset; 2130*ff879b07SJung-uk Kim UINT16 PathLength; 2131*ff879b07SJung-uk Kim UINT16 VendorDataOffset; 2132*ff879b07SJung-uk Kim UINT16 VendorDataLength; 2133*ff879b07SJung-uk Kim 2134*ff879b07SJung-uk Kim } ACPI_SDEV_PCIE; 2135*ff879b07SJung-uk Kim 2136*ff879b07SJung-uk Kim /* 1a: PCIe Endpoint path entry */ 2137*ff879b07SJung-uk Kim 2138*ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie_path 2139*ff879b07SJung-uk Kim { 21405ef50723SJung-uk Kim UINT8 Device; 21415ef50723SJung-uk Kim UINT8 Function; 21425ef50723SJung-uk Kim 2143*ff879b07SJung-uk Kim } ACPI_SDEV_PCIE_PATH; 2144af051161SJung-uk Kim 2145af051161SJung-uk Kim 2146d6dd1baeSJung-uk Kim /* Reset to default packing */ 2147d6dd1baeSJung-uk Kim 2148d6dd1baeSJung-uk Kim #pragma pack() 2149d6dd1baeSJung-uk Kim 2150d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */ 2151