1d6dd1baeSJung-uk Kim /****************************************************************************** 2d6dd1baeSJung-uk Kim * 3dcbce41eSJung-uk Kim * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) 4d6dd1baeSJung-uk Kim * 5d6dd1baeSJung-uk Kim *****************************************************************************/ 6d6dd1baeSJung-uk Kim 70d84335fSJung-uk Kim /****************************************************************************** 80d84335fSJung-uk Kim * 90d84335fSJung-uk Kim * 1. Copyright Notice 100d84335fSJung-uk Kim * 1129f37e9bSJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp. 12d6dd1baeSJung-uk Kim * All rights reserved. 13d6dd1baeSJung-uk Kim * 140d84335fSJung-uk Kim * 2. License 150d84335fSJung-uk Kim * 160d84335fSJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property 170d84335fSJung-uk Kim * rights. You may have additional license terms from the party that provided 180d84335fSJung-uk Kim * you this software, covering your right to use that party's intellectual 190d84335fSJung-uk Kim * property rights. 200d84335fSJung-uk Kim * 210d84335fSJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 220d84335fSJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an 230d84335fSJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 240d84335fSJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy, 250d84335fSJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered 260d84335fSJung-uk Kim * Code in any form, with the right to sublicense such rights; and 270d84335fSJung-uk Kim * 280d84335fSJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 290d84335fSJung-uk Kim * license (with the right to sublicense), under only those claims of Intel 300d84335fSJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell, 310d84335fSJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof 320d84335fSJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright 330d84335fSJung-uk Kim * license, and in no event shall the patent license extend to any additions 340d84335fSJung-uk Kim * to or modifications of the Original Intel Code. No other license or right 350d84335fSJung-uk Kim * is granted directly or by implication, estoppel or otherwise; 360d84335fSJung-uk Kim * 370d84335fSJung-uk Kim * The above copyright and patent license is granted only if the following 380d84335fSJung-uk Kim * conditions are met: 390d84335fSJung-uk Kim * 400d84335fSJung-uk Kim * 3. Conditions 410d84335fSJung-uk Kim * 420d84335fSJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 430d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 440d84335fSJung-uk Kim * Code or modification with rights to further distribute source must include 450d84335fSJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions, 460d84335fSJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition, 470d84335fSJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to 480d84335fSJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered 490d84335fSJung-uk Kim * Code and the date of any change. Licensee must include in that file the 500d84335fSJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee 510d84335fSJung-uk Kim * must include a prominent statement that the modification is derived, 520d84335fSJung-uk Kim * directly or indirectly, from Original Intel Code. 530d84335fSJung-uk Kim * 540d84335fSJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 550d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 560d84335fSJung-uk Kim * Code or modification without rights to further distribute source must 570d84335fSJung-uk Kim * include the following Disclaimer and Export Compliance provision in the 580d84335fSJung-uk Kim * documentation and/or other materials provided with distribution. In 590d84335fSJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any 600d84335fSJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the 610d84335fSJung-uk Kim * license from Licensee to its licensee is limited to the intellectual 620d84335fSJung-uk Kim * property embodied in the software Licensee provides to its licensee, and 630d84335fSJung-uk Kim * not to intellectual property embodied in modifications its licensee may 640d84335fSJung-uk Kim * make. 650d84335fSJung-uk Kim * 660d84335fSJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any 670d84335fSJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the 680d84335fSJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance 690d84335fSJung-uk Kim * provision in the documentation and/or other materials provided with the 700d84335fSJung-uk Kim * distribution. 710d84335fSJung-uk Kim * 720d84335fSJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original 730d84335fSJung-uk Kim * Intel Code. 740d84335fSJung-uk Kim * 750d84335fSJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 760d84335fSJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or 770d84335fSJung-uk Kim * other dealings in products derived from or relating to the Covered Code 780d84335fSJung-uk Kim * without prior written authorization from Intel. 790d84335fSJung-uk Kim * 800d84335fSJung-uk Kim * 4. Disclaimer and Export Compliance 810d84335fSJung-uk Kim * 820d84335fSJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 830d84335fSJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 840d84335fSJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 850d84335fSJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 860d84335fSJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 870d84335fSJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 880d84335fSJung-uk Kim * PARTICULAR PURPOSE. 890d84335fSJung-uk Kim * 900d84335fSJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 910d84335fSJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 920d84335fSJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 930d84335fSJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 940d84335fSJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 950d84335fSJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 960d84335fSJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 970d84335fSJung-uk Kim * LIMITED REMEDY. 980d84335fSJung-uk Kim * 990d84335fSJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this 1000d84335fSJung-uk Kim * software or system incorporating such software without first obtaining any 1010d84335fSJung-uk Kim * required license or other approval from the U. S. Department of Commerce or 1020d84335fSJung-uk Kim * any other agency or department of the United States Government. In the 1030d84335fSJung-uk Kim * event Licensee exports any such software from the United States or 1040d84335fSJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall 1050d84335fSJung-uk Kim * ensure that the distribution and export/re-export of the software is in 1060d84335fSJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the 1070d84335fSJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 1080d84335fSJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process, 1090d84335fSJung-uk Kim * software, or service, directly or indirectly, to any country for which the 1100d84335fSJung-uk Kim * United States government or any agency thereof requires an export license, 1110d84335fSJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining 1120d84335fSJung-uk Kim * such license, approval or letter. 1130d84335fSJung-uk Kim * 1140d84335fSJung-uk Kim ***************************************************************************** 1150d84335fSJung-uk Kim * 1160d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 1170d84335fSJung-uk Kim * following license: 1180d84335fSJung-uk Kim * 119d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 120d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 121d244b227SJung-uk Kim * are met: 122d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 123d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 124d244b227SJung-uk Kim * without modification. 125d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 126d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 127d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 128d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 129d244b227SJung-uk Kim * binary redistribution. 130d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 131d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 132d244b227SJung-uk Kim * from this software without specific prior written permission. 133d6dd1baeSJung-uk Kim * 1340d84335fSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1350d84335fSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1360d84335fSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1370d84335fSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1380d84335fSJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1390d84335fSJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1400d84335fSJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1410d84335fSJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1420d84335fSJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1430d84335fSJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1440d84335fSJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1450d84335fSJung-uk Kim * 1460d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 147d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 148d244b227SJung-uk Kim * Software Foundation. 149d6dd1baeSJung-uk Kim * 1500d84335fSJung-uk Kim *****************************************************************************/ 151d6dd1baeSJung-uk Kim 152d6dd1baeSJung-uk Kim #ifndef __ACTBL2_H__ 153d6dd1baeSJung-uk Kim #define __ACTBL2_H__ 154d6dd1baeSJung-uk Kim 155d6dd1baeSJung-uk Kim 156d6dd1baeSJung-uk Kim /******************************************************************************* 157d6dd1baeSJung-uk Kim * 158d6dd1baeSJung-uk Kim * Additional ACPI Tables (2) 159d6dd1baeSJung-uk Kim * 160d6dd1baeSJung-uk Kim * These tables are not consumed directly by the ACPICA subsystem, but are 161d6dd1baeSJung-uk Kim * included here to support device drivers and the AML disassembler. 162d6dd1baeSJung-uk Kim * 163d6dd1baeSJung-uk Kim ******************************************************************************/ 164d6dd1baeSJung-uk Kim 165d6dd1baeSJung-uk Kim 166d6dd1baeSJung-uk Kim /* 167d6dd1baeSJung-uk Kim * Values for description table header signatures for tables defined in this 168d6dd1baeSJung-uk Kim * file. Useful because they make it more difficult to inadvertently type in 169d6dd1baeSJung-uk Kim * the wrong signature. 170d6dd1baeSJung-uk Kim */ 1711970d693SJung-uk Kim #define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */ 172a371a5fdSJung-uk Kim #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 173d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 174313a0c13SJung-uk Kim #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 175ff879b07SJung-uk Kim #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 176d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 177ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 178ff879b07SJung-uk Kim #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 179ff879b07SJung-uk Kim #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 1807cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 181ff879b07SJung-uk Kim #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 182ff879b07SJung-uk Kim #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 183ff879b07SJung-uk Kim #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ 184cfd1ed46SJung-uk Kim #define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ 185ff879b07SJung-uk Kim #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 186ff879b07SJung-uk Kim #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 1871970d693SJung-uk Kim #define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */ 188ff879b07SJung-uk Kim #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 1891970d693SJung-uk Kim #define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */ 190ff879b07SJung-uk Kim #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 1915f9b24faSJung-uk Kim #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ 192ff879b07SJung-uk Kim #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 1933ee58df5SJung-uk Kim #define ACPI_SIG_NHLT "NHLT" /* Non-HDAudio Link Table */ 1941970d693SJung-uk Kim #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ 195d6dd1baeSJung-uk Kim 196d6dd1baeSJung-uk Kim 197d6dd1baeSJung-uk Kim /* 198d6dd1baeSJung-uk Kim * All tables must be byte-packed to match the ACPI specification, since 199d6dd1baeSJung-uk Kim * the tables are provided by the system BIOS. 200d6dd1baeSJung-uk Kim */ 201d6dd1baeSJung-uk Kim #pragma pack(1) 202d6dd1baeSJung-uk Kim 203d6dd1baeSJung-uk Kim /* 2041df130f1SJung-uk Kim * Note: C bitfields are not used for this reason: 2051df130f1SJung-uk Kim * 2061df130f1SJung-uk Kim * "Bitfields are great and easy to read, but unfortunately the C language 2071df130f1SJung-uk Kim * does not specify the layout of bitfields in memory, which means they are 2081df130f1SJung-uk Kim * essentially useless for dealing with packed data in on-disk formats or 2091df130f1SJung-uk Kim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 2101df130f1SJung-uk Kim * this decision was a design error in C. Ritchie could have picked an order 2111df130f1SJung-uk Kim * and stuck with it." Norman Ramsey. 2121df130f1SJung-uk Kim * See http://stackoverflow.com/a/1053662/41661 213d6dd1baeSJung-uk Kim */ 214d6dd1baeSJung-uk Kim 215d6dd1baeSJung-uk Kim 216d6dd1baeSJung-uk Kim /******************************************************************************* 217d6dd1baeSJung-uk Kim * 218*97c0b5abSJung-uk Kim * AEST - Arm Error Source Table 219*97c0b5abSJung-uk Kim * 220*97c0b5abSJung-uk Kim * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document 221*97c0b5abSJung-uk Kim * September 2020. 222*97c0b5abSJung-uk Kim * 223*97c0b5abSJung-uk Kim ******************************************************************************/ 224*97c0b5abSJung-uk Kim 225*97c0b5abSJung-uk Kim typedef struct acpi_table_aest 226*97c0b5abSJung-uk Kim { 227*97c0b5abSJung-uk Kim ACPI_TABLE_HEADER Header; 228*97c0b5abSJung-uk Kim void *NodeArray[]; 229*97c0b5abSJung-uk Kim 230*97c0b5abSJung-uk Kim } ACPI_TABLE_AEST; 231*97c0b5abSJung-uk Kim 232*97c0b5abSJung-uk Kim /* Common Subtable header - one per Node Structure (Subtable) */ 233*97c0b5abSJung-uk Kim 234*97c0b5abSJung-uk Kim typedef struct acpi_aest_hdr 235*97c0b5abSJung-uk Kim { 236*97c0b5abSJung-uk Kim UINT8 Type; 237*97c0b5abSJung-uk Kim UINT16 Length; 238*97c0b5abSJung-uk Kim UINT8 Reserved; 239*97c0b5abSJung-uk Kim UINT32 NodeSpecificOffset; 240*97c0b5abSJung-uk Kim UINT32 NodeInterfaceOffset; 241*97c0b5abSJung-uk Kim UINT32 NodeInterruptOffset; 242*97c0b5abSJung-uk Kim UINT32 NodeInterruptCount; 243*97c0b5abSJung-uk Kim UINT64 TimestampRate; 244*97c0b5abSJung-uk Kim UINT64 Reserved1; 245*97c0b5abSJung-uk Kim UINT64 ErrorInjectionRate; 246*97c0b5abSJung-uk Kim 247*97c0b5abSJung-uk Kim } ACPI_AEST_HEADER; 248*97c0b5abSJung-uk Kim 249*97c0b5abSJung-uk Kim /* Values for Type above */ 250*97c0b5abSJung-uk Kim 251*97c0b5abSJung-uk Kim #define ACPI_AEST_PROCESSOR_ERROR_NODE 0 252*97c0b5abSJung-uk Kim #define ACPI_AEST_MEMORY_ERROR_NODE 1 253*97c0b5abSJung-uk Kim #define ACPI_AEST_SMMU_ERROR_NODE 2 254*97c0b5abSJung-uk Kim #define ACPI_AEST_VENDOR_ERROR_NODE 3 255*97c0b5abSJung-uk Kim #define ACPI_AEST_GIC_ERROR_NODE 4 256*97c0b5abSJung-uk Kim #define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ 257*97c0b5abSJung-uk Kim 258*97c0b5abSJung-uk Kim 259*97c0b5abSJung-uk Kim /* 260*97c0b5abSJung-uk Kim * AEST subtables (Error nodes) 261*97c0b5abSJung-uk Kim */ 262*97c0b5abSJung-uk Kim 263*97c0b5abSJung-uk Kim /* 0: Processor Error */ 264*97c0b5abSJung-uk Kim 265*97c0b5abSJung-uk Kim typedef struct acpi_aest_processor 266*97c0b5abSJung-uk Kim { 267*97c0b5abSJung-uk Kim UINT32 ProcessorId; 268*97c0b5abSJung-uk Kim UINT8 ResourceType; 269*97c0b5abSJung-uk Kim UINT8 Reserved; 270*97c0b5abSJung-uk Kim UINT8 Flags; 271*97c0b5abSJung-uk Kim UINT8 Revision; 272*97c0b5abSJung-uk Kim UINT64 ProcessorAffinity; 273*97c0b5abSJung-uk Kim 274*97c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR; 275*97c0b5abSJung-uk Kim 276*97c0b5abSJung-uk Kim /* Values for ResourceType above, related structs below */ 277*97c0b5abSJung-uk Kim 278*97c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_RESOURCE 0 279*97c0b5abSJung-uk Kim #define ACPI_AEST_TLB_RESOURCE 1 280*97c0b5abSJung-uk Kim #define ACPI_AEST_GENERIC_RESOURCE 2 281*97c0b5abSJung-uk Kim #define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ 282*97c0b5abSJung-uk Kim 283*97c0b5abSJung-uk Kim /* 0R: Processor Cache Resource Substructure */ 284*97c0b5abSJung-uk Kim 285*97c0b5abSJung-uk Kim typedef struct acpi_aest_processor_cache 286*97c0b5abSJung-uk Kim { 287*97c0b5abSJung-uk Kim UINT32 CacheReference; 288*97c0b5abSJung-uk Kim UINT32 Reserved; 289*97c0b5abSJung-uk Kim 290*97c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_CACHE; 291*97c0b5abSJung-uk Kim 292*97c0b5abSJung-uk Kim /* Values for CacheType above */ 293*97c0b5abSJung-uk Kim 294*97c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_DATA 0 295*97c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_INSTRUCTION 1 296*97c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_UNIFIED 2 297*97c0b5abSJung-uk Kim #define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ 298*97c0b5abSJung-uk Kim 299*97c0b5abSJung-uk Kim /* 1R: Processor TLB Resource Substructure */ 300*97c0b5abSJung-uk Kim 301*97c0b5abSJung-uk Kim typedef struct acpi_aest_processor_tlb 302*97c0b5abSJung-uk Kim { 303*97c0b5abSJung-uk Kim UINT32 TlbLevel; 304*97c0b5abSJung-uk Kim UINT32 Reserved; 305*97c0b5abSJung-uk Kim 306*97c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_TLB; 307*97c0b5abSJung-uk Kim 308*97c0b5abSJung-uk Kim /* 2R: Processor Generic Resource Substructure */ 309*97c0b5abSJung-uk Kim 310*97c0b5abSJung-uk Kim typedef struct acpi_aest_processor_generic 311*97c0b5abSJung-uk Kim { 312*97c0b5abSJung-uk Kim UINT8 *Resource; 313*97c0b5abSJung-uk Kim 314*97c0b5abSJung-uk Kim } ACPI_AEST_PROCESSOR_GENERIC; 315*97c0b5abSJung-uk Kim 316*97c0b5abSJung-uk Kim /* 1: Memory Error */ 317*97c0b5abSJung-uk Kim 318*97c0b5abSJung-uk Kim typedef struct acpi_aest_memory 319*97c0b5abSJung-uk Kim { 320*97c0b5abSJung-uk Kim UINT32 SratProximityDomain; 321*97c0b5abSJung-uk Kim 322*97c0b5abSJung-uk Kim } ACPI_AEST_MEMORY; 323*97c0b5abSJung-uk Kim 324*97c0b5abSJung-uk Kim /* 2: Smmu Error */ 325*97c0b5abSJung-uk Kim 326*97c0b5abSJung-uk Kim typedef struct acpi_aest_smmu 327*97c0b5abSJung-uk Kim { 328*97c0b5abSJung-uk Kim UINT32 IortNodeReference; 329*97c0b5abSJung-uk Kim UINT32 SubcomponentReference; 330*97c0b5abSJung-uk Kim 331*97c0b5abSJung-uk Kim } ACPI_AEST_SMMU; 332*97c0b5abSJung-uk Kim 333*97c0b5abSJung-uk Kim /* 3: Vendor Defined */ 334*97c0b5abSJung-uk Kim 335*97c0b5abSJung-uk Kim typedef struct acpi_aest_vendor 336*97c0b5abSJung-uk Kim { 337*97c0b5abSJung-uk Kim UINT32 AcpiHid; 338*97c0b5abSJung-uk Kim UINT32 AcpiUid; 339*97c0b5abSJung-uk Kim UINT8 VendorSpecificData[16]; 340*97c0b5abSJung-uk Kim 341*97c0b5abSJung-uk Kim } ACPI_AEST_VENDOR; 342*97c0b5abSJung-uk Kim 343*97c0b5abSJung-uk Kim /* 4: Gic Error */ 344*97c0b5abSJung-uk Kim 345*97c0b5abSJung-uk Kim typedef struct acpi_aest_gic 346*97c0b5abSJung-uk Kim { 347*97c0b5abSJung-uk Kim UINT32 InterfaceType; 348*97c0b5abSJung-uk Kim UINT32 InstanceId; 349*97c0b5abSJung-uk Kim 350*97c0b5abSJung-uk Kim } ACPI_AEST_GIC; 351*97c0b5abSJung-uk Kim 352*97c0b5abSJung-uk Kim /* Values for InterfaceType above */ 353*97c0b5abSJung-uk Kim 354*97c0b5abSJung-uk Kim #define ACPI_AEST_GIC_CPU 0 355*97c0b5abSJung-uk Kim #define ACPI_AEST_GIC_DISTRIBUTOR 1 356*97c0b5abSJung-uk Kim #define ACPI_AEST_GIC_REDISTRIBUTOR 2 357*97c0b5abSJung-uk Kim #define ACPI_AEST_GIC_ITS 3 358*97c0b5abSJung-uk Kim #define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ 359*97c0b5abSJung-uk Kim 360*97c0b5abSJung-uk Kim 361*97c0b5abSJung-uk Kim /* Node Interface Structure */ 362*97c0b5abSJung-uk Kim 363*97c0b5abSJung-uk Kim typedef struct acpi_aest_node_interface 364*97c0b5abSJung-uk Kim { 365*97c0b5abSJung-uk Kim UINT8 Type; 366*97c0b5abSJung-uk Kim UINT8 Reserved[3]; 367*97c0b5abSJung-uk Kim UINT32 Flags; 368*97c0b5abSJung-uk Kim UINT64 Address; 369*97c0b5abSJung-uk Kim UINT32 ErrorRecordIndex; 370*97c0b5abSJung-uk Kim UINT32 ErrorRecordCount; 371*97c0b5abSJung-uk Kim UINT64 ErrorRecordImplemented; 372*97c0b5abSJung-uk Kim UINT64 ErrorStatusReporting; 373*97c0b5abSJung-uk Kim UINT64 AddressingMode; 374*97c0b5abSJung-uk Kim 375*97c0b5abSJung-uk Kim } ACPI_AEST_NODE_INTERFACE; 376*97c0b5abSJung-uk Kim 377*97c0b5abSJung-uk Kim /* Values for Type field above */ 378*97c0b5abSJung-uk Kim 379*97c0b5abSJung-uk Kim #define ACPI_AEST_NODE_SYSTEM_REGISTER 0 380*97c0b5abSJung-uk Kim #define ACPI_AEST_NODE_MEMORY_MAPPED 1 381*97c0b5abSJung-uk Kim #define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ 382*97c0b5abSJung-uk Kim 383*97c0b5abSJung-uk Kim /* Node Interrupt Structure */ 384*97c0b5abSJung-uk Kim 385*97c0b5abSJung-uk Kim typedef struct acpi_aest_node_interrupt 386*97c0b5abSJung-uk Kim { 387*97c0b5abSJung-uk Kim UINT8 Type; 388*97c0b5abSJung-uk Kim UINT8 Reserved[2]; 389*97c0b5abSJung-uk Kim UINT8 Flags; 390*97c0b5abSJung-uk Kim UINT32 Gsiv; 391*97c0b5abSJung-uk Kim UINT8 IortId; 392*97c0b5abSJung-uk Kim UINT8 Reserved1[3]; 393*97c0b5abSJung-uk Kim 394*97c0b5abSJung-uk Kim } ACPI_AEST_NODE_INTERRUPT; 395*97c0b5abSJung-uk Kim 396*97c0b5abSJung-uk Kim /* Values for Type field above */ 397*97c0b5abSJung-uk Kim 398*97c0b5abSJung-uk Kim #define ACPI_AEST_NODE_FAULT_HANDLING 0 399*97c0b5abSJung-uk Kim #define ACPI_AEST_NODE_ERROR_RECOVERY 1 400*97c0b5abSJung-uk Kim #define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ 401*97c0b5abSJung-uk Kim 402*97c0b5abSJung-uk Kim 403*97c0b5abSJung-uk Kim /******************************************************************************* 404*97c0b5abSJung-uk Kim * 4051970d693SJung-uk Kim * BDAT - BIOS Data ACPI Table 4061970d693SJung-uk Kim * 4071970d693SJung-uk Kim * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5 4081970d693SJung-uk Kim * Nov 2020 4091970d693SJung-uk Kim * 4101970d693SJung-uk Kim ******************************************************************************/ 4111970d693SJung-uk Kim 4121970d693SJung-uk Kim typedef struct acpi_table_bdat 4131970d693SJung-uk Kim { 4141970d693SJung-uk Kim ACPI_TABLE_HEADER Header; 4151970d693SJung-uk Kim ACPI_GENERIC_ADDRESS Gas; 4161970d693SJung-uk Kim 4171970d693SJung-uk Kim } ACPI_TABLE_BDAT; 4181970d693SJung-uk Kim 4191970d693SJung-uk Kim 4201970d693SJung-uk Kim /******************************************************************************* 4211970d693SJung-uk Kim * 422a371a5fdSJung-uk Kim * IORT - IO Remapping Table 423a371a5fdSJung-uk Kim * 424a371a5fdSJung-uk Kim * Conforms to "IO Remapping Table System Software on ARM Platforms", 425cfd1ed46SJung-uk Kim * Document number: ARM DEN 0049E.b, Feb 2021 426a371a5fdSJung-uk Kim * 427a371a5fdSJung-uk Kim ******************************************************************************/ 428a371a5fdSJung-uk Kim 429a371a5fdSJung-uk Kim typedef struct acpi_table_iort 430a371a5fdSJung-uk Kim { 431a371a5fdSJung-uk Kim ACPI_TABLE_HEADER Header; 432a371a5fdSJung-uk Kim UINT32 NodeCount; 433a371a5fdSJung-uk Kim UINT32 NodeOffset; 434a371a5fdSJung-uk Kim UINT32 Reserved; 435a371a5fdSJung-uk Kim 436a371a5fdSJung-uk Kim } ACPI_TABLE_IORT; 437a371a5fdSJung-uk Kim 438a371a5fdSJung-uk Kim 439a371a5fdSJung-uk Kim /* 440a371a5fdSJung-uk Kim * IORT subtables 441a371a5fdSJung-uk Kim */ 442a371a5fdSJung-uk Kim typedef struct acpi_iort_node 443a371a5fdSJung-uk Kim { 444a371a5fdSJung-uk Kim UINT8 Type; 445a371a5fdSJung-uk Kim UINT16 Length; 446a371a5fdSJung-uk Kim UINT8 Revision; 447cfd1ed46SJung-uk Kim UINT32 Identifier; 448a371a5fdSJung-uk Kim UINT32 MappingCount; 449a371a5fdSJung-uk Kim UINT32 MappingOffset; 450a371a5fdSJung-uk Kim char NodeData[1]; 451a371a5fdSJung-uk Kim 452a371a5fdSJung-uk Kim } ACPI_IORT_NODE; 453a371a5fdSJung-uk Kim 454a371a5fdSJung-uk Kim /* Values for subtable Type above */ 455a371a5fdSJung-uk Kim 456a371a5fdSJung-uk Kim enum AcpiIortNodeType 457a371a5fdSJung-uk Kim { 458a371a5fdSJung-uk Kim ACPI_IORT_NODE_ITS_GROUP = 0x00, 459a371a5fdSJung-uk Kim ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 460a371a5fdSJung-uk Kim ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 461f8146b88SJung-uk Kim ACPI_IORT_NODE_SMMU = 0x03, 4623d90091dSJung-uk Kim ACPI_IORT_NODE_SMMU_V3 = 0x04, 463cfd1ed46SJung-uk Kim ACPI_IORT_NODE_PMCG = 0x05, 464cfd1ed46SJung-uk Kim ACPI_IORT_NODE_RMR = 0x06, 465a371a5fdSJung-uk Kim }; 466a371a5fdSJung-uk Kim 467a371a5fdSJung-uk Kim 468a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping 469a371a5fdSJung-uk Kim { 470a371a5fdSJung-uk Kim UINT32 InputBase; /* Lowest value in input range */ 471a371a5fdSJung-uk Kim UINT32 IdCount; /* Number of IDs */ 472a371a5fdSJung-uk Kim UINT32 OutputBase; /* Lowest value in output range */ 473a371a5fdSJung-uk Kim UINT32 OutputReference; /* A reference to the output node */ 474a371a5fdSJung-uk Kim UINT32 Flags; 475a371a5fdSJung-uk Kim 476a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING; 477a371a5fdSJung-uk Kim 478a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */ 479a371a5fdSJung-uk Kim 480a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1) 481a371a5fdSJung-uk Kim 482a371a5fdSJung-uk Kim 483a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access 484a371a5fdSJung-uk Kim { 485a371a5fdSJung-uk Kim UINT32 CacheCoherency; 486a371a5fdSJung-uk Kim UINT8 Hints; 487a371a5fdSJung-uk Kim UINT16 Reserved; 488a371a5fdSJung-uk Kim UINT8 MemoryFlags; 489a371a5fdSJung-uk Kim 490a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS; 491a371a5fdSJung-uk Kim 492a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */ 493a371a5fdSJung-uk Kim 494a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 495a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 496a371a5fdSJung-uk Kim 497a371a5fdSJung-uk Kim /* Masks for Hints field above */ 498a371a5fdSJung-uk Kim 499a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT (1) 500a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE (1<<1) 501a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ (1<<2) 502a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE (1<<3) 503a371a5fdSJung-uk Kim 504a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */ 505a371a5fdSJung-uk Kim 506a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY (1) 507a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES (1<<1) 508a371a5fdSJung-uk Kim 509a371a5fdSJung-uk Kim 510a371a5fdSJung-uk Kim /* 511a371a5fdSJung-uk Kim * IORT node specific subtables 512a371a5fdSJung-uk Kim */ 513a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group 514a371a5fdSJung-uk Kim { 515a371a5fdSJung-uk Kim UINT32 ItsCount; 516cd6518c7SJung-uk Kim UINT32 Identifiers[1]; /* GIC ITS identifier array */ 517a371a5fdSJung-uk Kim 518a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP; 519a371a5fdSJung-uk Kim 520a371a5fdSJung-uk Kim 521a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component 522a371a5fdSJung-uk Kim { 523a371a5fdSJung-uk Kim UINT32 NodeFlags; 524a371a5fdSJung-uk Kim UINT64 MemoryProperties; /* Memory access properties */ 525a371a5fdSJung-uk Kim UINT8 MemoryAddressLimit; /* Memory address size limit */ 526a371a5fdSJung-uk Kim char DeviceName[1]; /* Path of namespace object */ 527a371a5fdSJung-uk Kim 528a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT; 529a371a5fdSJung-uk Kim 5303d90091dSJung-uk Kim /* Masks for Flags field above */ 5313d90091dSJung-uk Kim 5323d90091dSJung-uk Kim #define ACPI_IORT_NC_STALL_SUPPORTED (1) 5333d90091dSJung-uk Kim #define ACPI_IORT_NC_PASID_BITS (31<<1) 534a371a5fdSJung-uk Kim 535a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex 536a371a5fdSJung-uk Kim { 537a371a5fdSJung-uk Kim UINT64 MemoryProperties; /* Memory access properties */ 538a371a5fdSJung-uk Kim UINT32 AtsAttribute; 539a371a5fdSJung-uk Kim UINT32 PciSegmentNumber; 5403d90091dSJung-uk Kim UINT8 MemoryAddressLimit; /* Memory address size limit */ 5413d90091dSJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 542a371a5fdSJung-uk Kim 543a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX; 544a371a5fdSJung-uk Kim 545cfd1ed46SJung-uk Kim /* Masks for AtsAttribute field above */ 546a371a5fdSJung-uk Kim 547cfd1ed46SJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */ 548cfd1ed46SJung-uk Kim #define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */ 549cfd1ed46SJung-uk Kim #define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */ 550a371a5fdSJung-uk Kim 551a371a5fdSJung-uk Kim 552a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu 553a371a5fdSJung-uk Kim { 554a371a5fdSJung-uk Kim UINT64 BaseAddress; /* SMMU base address */ 555a371a5fdSJung-uk Kim UINT64 Span; /* Length of memory range */ 556a371a5fdSJung-uk Kim UINT32 Model; 557a371a5fdSJung-uk Kim UINT32 Flags; 558a371a5fdSJung-uk Kim UINT32 GlobalInterruptOffset; 559a371a5fdSJung-uk Kim UINT32 ContextInterruptCount; 560a371a5fdSJung-uk Kim UINT32 ContextInterruptOffset; 561a371a5fdSJung-uk Kim UINT32 PmuInterruptCount; 562a371a5fdSJung-uk Kim UINT32 PmuInterruptOffset; 563a371a5fdSJung-uk Kim UINT64 Interrupts[1]; /* Interrupt array */ 564a371a5fdSJung-uk Kim 565a371a5fdSJung-uk Kim } ACPI_IORT_SMMU; 566a371a5fdSJung-uk Kim 567a371a5fdSJung-uk Kim /* Values for Model field above */ 568a371a5fdSJung-uk Kim 569a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 570a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 571a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 572a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 5735f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ 5745f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ 575a371a5fdSJung-uk Kim 576a371a5fdSJung-uk Kim /* Masks for Flags field above */ 577a371a5fdSJung-uk Kim 578a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 579a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 580a371a5fdSJung-uk Kim 5810d84335fSJung-uk Kim /* Global interrupt format */ 5820d84335fSJung-uk Kim 5830d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi 5840d84335fSJung-uk Kim { 5850d84335fSJung-uk Kim UINT32 NSgIrpt; 5860d84335fSJung-uk Kim UINT32 NSgIrptFlags; 5870d84335fSJung-uk Kim UINT32 NSgCfgIrpt; 5880d84335fSJung-uk Kim UINT32 NSgCfgIrptFlags; 5892f6a1a81SJung-uk Kim 5900d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI; 5910d84335fSJung-uk Kim 592a371a5fdSJung-uk Kim 593f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3 594f8146b88SJung-uk Kim { 595f8146b88SJung-uk Kim UINT64 BaseAddress; /* SMMUv3 base address */ 596f8146b88SJung-uk Kim UINT32 Flags; 597f8146b88SJung-uk Kim UINT32 Reserved; 598f8146b88SJung-uk Kim UINT64 VatosAddress; 5995f9b24faSJung-uk Kim UINT32 Model; 600f8146b88SJung-uk Kim UINT32 EventGsiv; 601f8146b88SJung-uk Kim UINT32 PriGsiv; 602f8146b88SJung-uk Kim UINT32 GerrGsiv; 603f8146b88SJung-uk Kim UINT32 SyncGsiv; 6043d90091dSJung-uk Kim UINT32 Pxm; 605b7b7e711SJung-uk Kim UINT32 IdMappingIndex; 606f8146b88SJung-uk Kim 607f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3; 608f8146b88SJung-uk Kim 6095f9b24faSJung-uk Kim /* Values for Model field above */ 6105f9b24faSJung-uk Kim 6115f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ 6125f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ 6135f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ 6145f9b24faSJung-uk Kim 615f8146b88SJung-uk Kim /* Masks for Flags field above */ 616f8146b88SJung-uk Kim 617f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 6183d90091dSJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1) 6195f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) 620f8146b88SJung-uk Kim 6213d90091dSJung-uk Kim typedef struct acpi_iort_pmcg 6223d90091dSJung-uk Kim { 6233d90091dSJung-uk Kim UINT64 Page0BaseAddress; 6243d90091dSJung-uk Kim UINT32 OverflowGsiv; 6253d90091dSJung-uk Kim UINT32 NodeReference; 6263d90091dSJung-uk Kim UINT64 Page1BaseAddress; 6273d90091dSJung-uk Kim 6283d90091dSJung-uk Kim } ACPI_IORT_PMCG; 6293d90091dSJung-uk Kim 630cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr { 631cfd1ed46SJung-uk Kim UINT32 Flags; 632cfd1ed46SJung-uk Kim UINT32 RmrCount; 633cfd1ed46SJung-uk Kim UINT32 RmrOffset; 634cfd1ed46SJung-uk Kim 635cfd1ed46SJung-uk Kim } ACPI_IORT_RMR; 636cfd1ed46SJung-uk Kim 637cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr_desc { 638cfd1ed46SJung-uk Kim UINT64 BaseAddress; 639cfd1ed46SJung-uk Kim UINT64 Length; 640cfd1ed46SJung-uk Kim UINT32 Reserved; 641cfd1ed46SJung-uk Kim 642cfd1ed46SJung-uk Kim } ACPI_IORT_RMR_DESC; 643f8146b88SJung-uk Kim 644a371a5fdSJung-uk Kim /******************************************************************************* 645a371a5fdSJung-uk Kim * 646d6dd1baeSJung-uk Kim * IVRS - I/O Virtualization Reporting Structure 647d6dd1baeSJung-uk Kim * Version 1 648d6dd1baeSJung-uk Kim * 649d6dd1baeSJung-uk Kim * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 650d6dd1baeSJung-uk Kim * Revision 1.26, February 2009. 651d6dd1baeSJung-uk Kim * 652d6dd1baeSJung-uk Kim ******************************************************************************/ 653d6dd1baeSJung-uk Kim 654d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs 655d6dd1baeSJung-uk Kim { 656d6dd1baeSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 657d6dd1baeSJung-uk Kim UINT32 Info; /* Common virtualization info */ 658d6dd1baeSJung-uk Kim UINT64 Reserved; 659d6dd1baeSJung-uk Kim 660d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS; 661d6dd1baeSJung-uk Kim 662d6dd1baeSJung-uk Kim /* Values for Info field above */ 663d6dd1baeSJung-uk Kim 664d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 665d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 666d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 667d6dd1baeSJung-uk Kim 668d6dd1baeSJung-uk Kim 669d6dd1baeSJung-uk Kim /* IVRS subtable header */ 670d6dd1baeSJung-uk Kim 671d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header 672d6dd1baeSJung-uk Kim { 673d6dd1baeSJung-uk Kim UINT8 Type; /* Subtable type */ 674d6dd1baeSJung-uk Kim UINT8 Flags; 675d6dd1baeSJung-uk Kim UINT16 Length; /* Subtable length */ 676d6dd1baeSJung-uk Kim UINT16 DeviceId; /* ID of IOMMU */ 677d6dd1baeSJung-uk Kim 678d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER; 679d6dd1baeSJung-uk Kim 680d6dd1baeSJung-uk Kim /* Values for subtable Type above */ 681d6dd1baeSJung-uk Kim 682d6dd1baeSJung-uk Kim enum AcpiIvrsType 683d6dd1baeSJung-uk Kim { 6843ee58df5SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE1 = 0x10, 6853ee58df5SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE2 = 0x11, 686cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_HARDWARE3 = 0x40, 687d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY1 = 0x20, 688d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY2 = 0x21, 689d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_MEMORY3 = 0x22 690d6dd1baeSJung-uk Kim }; 691d6dd1baeSJung-uk Kim 692d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */ 693d6dd1baeSJung-uk Kim 694d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE (1) 695d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW (1<<1) 696d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW (1<<2) 697d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC (1<<3) 698d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB (1<<4) 699d6dd1baeSJung-uk Kim 700d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */ 701d6dd1baeSJung-uk Kim 702d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY (1) 703d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ (1<<1) 704d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE (1<<2) 705d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 706d6dd1baeSJung-uk Kim 707d6dd1baeSJung-uk Kim 708d6dd1baeSJung-uk Kim /* 709d6dd1baeSJung-uk Kim * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER 710d6dd1baeSJung-uk Kim */ 711d6dd1baeSJung-uk Kim 712d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 713d6dd1baeSJung-uk Kim 7143ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_10 715d6dd1baeSJung-uk Kim { 716d6dd1baeSJung-uk Kim ACPI_IVRS_HEADER Header; 717d6dd1baeSJung-uk Kim UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 718d6dd1baeSJung-uk Kim UINT64 BaseAddress; /* IOMMU control registers */ 719d6dd1baeSJung-uk Kim UINT16 PciSegmentGroup; 720d6dd1baeSJung-uk Kim UINT16 Info; /* MSI number and unit ID */ 7213ee58df5SJung-uk Kim UINT32 FeatureReporting; 722d6dd1baeSJung-uk Kim 7233ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE1; 7243ee58df5SJung-uk Kim 7253ee58df5SJung-uk Kim /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ 7263ee58df5SJung-uk Kim 7273ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_11 7283ee58df5SJung-uk Kim { 7293ee58df5SJung-uk Kim ACPI_IVRS_HEADER Header; 7303ee58df5SJung-uk Kim UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 7313ee58df5SJung-uk Kim UINT64 BaseAddress; /* IOMMU control registers */ 7323ee58df5SJung-uk Kim UINT16 PciSegmentGroup; 7333ee58df5SJung-uk Kim UINT16 Info; /* MSI number and unit ID */ 7343ee58df5SJung-uk Kim UINT32 Attributes; 7353ee58df5SJung-uk Kim UINT64 EfrRegisterImage; 7363ee58df5SJung-uk Kim UINT64 Reserved; 7373ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE2; 738d6dd1baeSJung-uk Kim 739d6dd1baeSJung-uk Kim /* Masks for Info field above */ 740d6dd1baeSJung-uk Kim 741d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 742d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ 743d6dd1baeSJung-uk Kim 744d6dd1baeSJung-uk Kim 745d6dd1baeSJung-uk Kim /* 746d6dd1baeSJung-uk Kim * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. 747d6dd1baeSJung-uk Kim * Upper two bits of the Type field are the (encoded) length of the structure. 748d6dd1baeSJung-uk Kim * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 749d6dd1baeSJung-uk Kim * are reserved for future use but not defined. 750d6dd1baeSJung-uk Kim */ 751d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header 752d6dd1baeSJung-uk Kim { 753d6dd1baeSJung-uk Kim UINT8 Type; 754d6dd1baeSJung-uk Kim UINT16 Id; 755d6dd1baeSJung-uk Kim UINT8 DataSetting; 756d6dd1baeSJung-uk Kim 757d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER; 758d6dd1baeSJung-uk Kim 759d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */ 760d6dd1baeSJung-uk Kim 761d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH 0xC0 762d6dd1baeSJung-uk Kim 763d6dd1baeSJung-uk Kim /* Values for device entry Type field above */ 764d6dd1baeSJung-uk Kim 765d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType 766d6dd1baeSJung-uk Kim { 767d6dd1baeSJung-uk Kim /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ 768d6dd1baeSJung-uk Kim 769d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_PAD4 = 0, 770d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALL = 1, 771d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_SELECT = 2, 772d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_START = 3, 773d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_END = 4, 774d6dd1baeSJung-uk Kim 775d6dd1baeSJung-uk Kim /* 8-byte device entries */ 776d6dd1baeSJung-uk Kim 777d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_PAD8 = 64, 778d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_NOT_USED = 65, 779d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ 780d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ 781d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ 782d6dd1baeSJung-uk Kim ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ 783cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses ACPI_IVRS_DEVICE8C */ 784cfd1ed46SJung-uk Kim 785cfd1ed46SJung-uk Kim /* Variable-length device entries */ 786cfd1ed46SJung-uk Kim 787cfd1ed46SJung-uk Kim ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */ 788d6dd1baeSJung-uk Kim }; 789d6dd1baeSJung-uk Kim 790d6dd1baeSJung-uk Kim /* Values for Data field above */ 791d6dd1baeSJung-uk Kim 792d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS (1) 793d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS (1<<1) 794d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS (1<<2) 795d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT (3<<4) 796d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS (1<<6) 797d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS (1<<7) 798d6dd1baeSJung-uk Kim 799d6dd1baeSJung-uk Kim 800d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */ 801d6dd1baeSJung-uk Kim 802d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4 803d6dd1baeSJung-uk Kim { 804d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 805d6dd1baeSJung-uk Kim 806d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4; 807d6dd1baeSJung-uk Kim 808d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */ 809d6dd1baeSJung-uk Kim 810d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a 811d6dd1baeSJung-uk Kim { 812d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 813d6dd1baeSJung-uk Kim UINT8 Reserved1; 814d6dd1baeSJung-uk Kim UINT16 UsedId; 815d6dd1baeSJung-uk Kim UINT8 Reserved2; 816d6dd1baeSJung-uk Kim 817d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A; 818d6dd1baeSJung-uk Kim 819d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */ 820d6dd1baeSJung-uk Kim 821d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b 822d6dd1baeSJung-uk Kim { 823d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 824d6dd1baeSJung-uk Kim UINT32 ExtendedData; 825d6dd1baeSJung-uk Kim 826d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B; 827d6dd1baeSJung-uk Kim 828d6dd1baeSJung-uk Kim /* Values for ExtendedData above */ 829d6dd1baeSJung-uk Kim 830d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED (1<<31) 831d6dd1baeSJung-uk Kim 832d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */ 833d6dd1baeSJung-uk Kim 834d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c 835d6dd1baeSJung-uk Kim { 836d6dd1baeSJung-uk Kim ACPI_IVRS_DE_HEADER Header; 837d6dd1baeSJung-uk Kim UINT8 Handle; 838d6dd1baeSJung-uk Kim UINT16 UsedId; 839d6dd1baeSJung-uk Kim UINT8 Variety; 840d6dd1baeSJung-uk Kim 841d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C; 842d6dd1baeSJung-uk Kim 843d6dd1baeSJung-uk Kim /* Values for Variety field above */ 844d6dd1baeSJung-uk Kim 845d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC 1 846d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET 2 847d6dd1baeSJung-uk Kim 848cfd1ed46SJung-uk Kim /* Type 240: variable-length device entry */ 849cfd1ed46SJung-uk Kim 850cfd1ed46SJung-uk Kim typedef struct acpi_ivrs_device_hid 851cfd1ed46SJung-uk Kim { 852cfd1ed46SJung-uk Kim ACPI_IVRS_DE_HEADER Header; 853cfd1ed46SJung-uk Kim UINT64 AcpiHid; 854cfd1ed46SJung-uk Kim UINT64 AcpiCid; 855cfd1ed46SJung-uk Kim UINT8 UidType; 856cfd1ed46SJung-uk Kim UINT8 UidLength; 857cfd1ed46SJung-uk Kim 858cfd1ed46SJung-uk Kim } ACPI_IVRS_DEVICE_HID; 859cfd1ed46SJung-uk Kim 8601970d693SJung-uk Kim /* Values for UidType above */ 8611970d693SJung-uk Kim 8621970d693SJung-uk Kim #define ACPI_IVRS_UID_NOT_PRESENT 0 8631970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_INTEGER 1 8641970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_STRING 2 865d6dd1baeSJung-uk Kim 866d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 867d6dd1baeSJung-uk Kim 868d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory 869d6dd1baeSJung-uk Kim { 870d6dd1baeSJung-uk Kim ACPI_IVRS_HEADER Header; 871d6dd1baeSJung-uk Kim UINT16 AuxData; 872d6dd1baeSJung-uk Kim UINT64 Reserved; 873d6dd1baeSJung-uk Kim UINT64 StartAddress; 874d6dd1baeSJung-uk Kim UINT64 MemoryLength; 875d6dd1baeSJung-uk Kim 876d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY; 877d6dd1baeSJung-uk Kim 878d6dd1baeSJung-uk Kim 879d6dd1baeSJung-uk Kim /******************************************************************************* 880d6dd1baeSJung-uk Kim * 881313a0c13SJung-uk Kim * LPIT - Low Power Idle Table 882313a0c13SJung-uk Kim * 883a371a5fdSJung-uk Kim * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 884313a0c13SJung-uk Kim * 885313a0c13SJung-uk Kim ******************************************************************************/ 886313a0c13SJung-uk Kim 887313a0c13SJung-uk Kim typedef struct acpi_table_lpit 888313a0c13SJung-uk Kim { 889313a0c13SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 890313a0c13SJung-uk Kim 891313a0c13SJung-uk Kim } ACPI_TABLE_LPIT; 892313a0c13SJung-uk Kim 893313a0c13SJung-uk Kim 894313a0c13SJung-uk Kim /* LPIT subtable header */ 895313a0c13SJung-uk Kim 896313a0c13SJung-uk Kim typedef struct acpi_lpit_header 897313a0c13SJung-uk Kim { 898313a0c13SJung-uk Kim UINT32 Type; /* Subtable type */ 899313a0c13SJung-uk Kim UINT32 Length; /* Subtable length */ 900313a0c13SJung-uk Kim UINT16 UniqueId; 901313a0c13SJung-uk Kim UINT16 Reserved; 902313a0c13SJung-uk Kim UINT32 Flags; 903313a0c13SJung-uk Kim 904313a0c13SJung-uk Kim } ACPI_LPIT_HEADER; 905313a0c13SJung-uk Kim 906313a0c13SJung-uk Kim /* Values for subtable Type above */ 907313a0c13SJung-uk Kim 908313a0c13SJung-uk Kim enum AcpiLpitType 909313a0c13SJung-uk Kim { 910313a0c13SJung-uk Kim ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 911a371a5fdSJung-uk Kim ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 912313a0c13SJung-uk Kim }; 913313a0c13SJung-uk Kim 914313a0c13SJung-uk Kim /* Masks for Flags field above */ 915313a0c13SJung-uk Kim 916313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED (1) 917313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER (1<<1) 918313a0c13SJung-uk Kim 919313a0c13SJung-uk Kim /* 920313a0c13SJung-uk Kim * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER 921313a0c13SJung-uk Kim */ 922313a0c13SJung-uk Kim 923313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */ 924313a0c13SJung-uk Kim 925313a0c13SJung-uk Kim typedef struct acpi_lpit_native 926313a0c13SJung-uk Kim { 927313a0c13SJung-uk Kim ACPI_LPIT_HEADER Header; 928313a0c13SJung-uk Kim ACPI_GENERIC_ADDRESS EntryTrigger; 929313a0c13SJung-uk Kim UINT32 Residency; 930313a0c13SJung-uk Kim UINT32 Latency; 931313a0c13SJung-uk Kim ACPI_GENERIC_ADDRESS ResidencyCounter; 932313a0c13SJung-uk Kim UINT64 CounterFrequency; 933313a0c13SJung-uk Kim 934313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE; 935313a0c13SJung-uk Kim 936313a0c13SJung-uk Kim 937313a0c13SJung-uk Kim /******************************************************************************* 938313a0c13SJung-uk Kim * 939ff879b07SJung-uk Kim * MADT - Multiple APIC Description Table 940ff879b07SJung-uk Kim * Version 3 941ff879b07SJung-uk Kim * 942ff879b07SJung-uk Kim ******************************************************************************/ 943ff879b07SJung-uk Kim 944ff879b07SJung-uk Kim typedef struct acpi_table_madt 945ff879b07SJung-uk Kim { 946ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 947ff879b07SJung-uk Kim UINT32 Address; /* Physical address of local APIC */ 948ff879b07SJung-uk Kim UINT32 Flags; 949ff879b07SJung-uk Kim 950ff879b07SJung-uk Kim } ACPI_TABLE_MADT; 951ff879b07SJung-uk Kim 952ff879b07SJung-uk Kim /* Masks for Flags field above */ 953ff879b07SJung-uk Kim 954ff879b07SJung-uk Kim #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 955ff879b07SJung-uk Kim 956ff879b07SJung-uk Kim /* Values for PCATCompat flag */ 957ff879b07SJung-uk Kim 958ff879b07SJung-uk Kim #define ACPI_MADT_DUAL_PIC 1 959ff879b07SJung-uk Kim #define ACPI_MADT_MULTIPLE_APIC 0 960ff879b07SJung-uk Kim 961ff879b07SJung-uk Kim 962ff879b07SJung-uk Kim /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 963ff879b07SJung-uk Kim 964ff879b07SJung-uk Kim enum AcpiMadtType 965ff879b07SJung-uk Kim { 966ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC = 0, 967ff879b07SJung-uk Kim ACPI_MADT_TYPE_IO_APIC = 1, 968ff879b07SJung-uk Kim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 969ff879b07SJung-uk Kim ACPI_MADT_TYPE_NMI_SOURCE = 3, 970ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 971ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 972ff879b07SJung-uk Kim ACPI_MADT_TYPE_IO_SAPIC = 6, 973ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 974ff879b07SJung-uk Kim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 975ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 976ff879b07SJung-uk Kim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 977ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 978ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 979ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 980ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 981ff879b07SJung-uk Kim ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 982cfd1ed46SJung-uk Kim ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, 983cfd1ed46SJung-uk Kim ACPI_MADT_TYPE_RESERVED = 17 /* 17 and greater are reserved */ 984ff879b07SJung-uk Kim }; 985ff879b07SJung-uk Kim 986ff879b07SJung-uk Kim 987ff879b07SJung-uk Kim /* 988ff879b07SJung-uk Kim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 989ff879b07SJung-uk Kim */ 990ff879b07SJung-uk Kim 991ff879b07SJung-uk Kim /* 0: Processor Local APIC */ 992ff879b07SJung-uk Kim 993ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic 994ff879b07SJung-uk Kim { 995ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 996ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 997ff879b07SJung-uk Kim UINT8 Id; /* Processor's local APIC id */ 998ff879b07SJung-uk Kim UINT32 LapicFlags; 999ff879b07SJung-uk Kim 1000ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC; 1001ff879b07SJung-uk Kim 1002ff879b07SJung-uk Kim 1003ff879b07SJung-uk Kim /* 1: IO APIC */ 1004ff879b07SJung-uk Kim 1005ff879b07SJung-uk Kim typedef struct acpi_madt_io_apic 1006ff879b07SJung-uk Kim { 1007ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1008ff879b07SJung-uk Kim UINT8 Id; /* I/O APIC ID */ 1009ff879b07SJung-uk Kim UINT8 Reserved; /* Reserved - must be zero */ 1010ff879b07SJung-uk Kim UINT32 Address; /* APIC physical address */ 1011ff879b07SJung-uk Kim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 1012ff879b07SJung-uk Kim 1013ff879b07SJung-uk Kim } ACPI_MADT_IO_APIC; 1014ff879b07SJung-uk Kim 1015ff879b07SJung-uk Kim 1016ff879b07SJung-uk Kim /* 2: Interrupt Override */ 1017ff879b07SJung-uk Kim 1018ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_override 1019ff879b07SJung-uk Kim { 1020ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1021ff879b07SJung-uk Kim UINT8 Bus; /* 0 - ISA */ 1022ff879b07SJung-uk Kim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 1023ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 1024ff879b07SJung-uk Kim UINT16 IntiFlags; 1025ff879b07SJung-uk Kim 1026ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_OVERRIDE; 1027ff879b07SJung-uk Kim 1028ff879b07SJung-uk Kim 1029ff879b07SJung-uk Kim /* 3: NMI Source */ 1030ff879b07SJung-uk Kim 1031ff879b07SJung-uk Kim typedef struct acpi_madt_nmi_source 1032ff879b07SJung-uk Kim { 1033ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1034ff879b07SJung-uk Kim UINT16 IntiFlags; 1035ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 1036ff879b07SJung-uk Kim 1037ff879b07SJung-uk Kim } ACPI_MADT_NMI_SOURCE; 1038ff879b07SJung-uk Kim 1039ff879b07SJung-uk Kim 1040ff879b07SJung-uk Kim /* 4: Local APIC NMI */ 1041ff879b07SJung-uk Kim 1042ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_nmi 1043ff879b07SJung-uk Kim { 1044ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1045ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 1046ff879b07SJung-uk Kim UINT16 IntiFlags; 1047ff879b07SJung-uk Kim UINT8 Lint; /* LINTn to which NMI is connected */ 1048ff879b07SJung-uk Kim 1049ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_NMI; 1050ff879b07SJung-uk Kim 1051ff879b07SJung-uk Kim 1052ff879b07SJung-uk Kim /* 5: Address Override */ 1053ff879b07SJung-uk Kim 1054ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_override 1055ff879b07SJung-uk Kim { 1056ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1057ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 1058ff879b07SJung-uk Kim UINT64 Address; /* APIC physical address */ 1059ff879b07SJung-uk Kim 1060ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_OVERRIDE; 1061ff879b07SJung-uk Kim 1062ff879b07SJung-uk Kim 1063ff879b07SJung-uk Kim /* 6: I/O Sapic */ 1064ff879b07SJung-uk Kim 1065ff879b07SJung-uk Kim typedef struct acpi_madt_io_sapic 1066ff879b07SJung-uk Kim { 1067ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1068ff879b07SJung-uk Kim UINT8 Id; /* I/O SAPIC ID */ 1069ff879b07SJung-uk Kim UINT8 Reserved; /* Reserved, must be zero */ 1070ff879b07SJung-uk Kim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 1071ff879b07SJung-uk Kim UINT64 Address; /* SAPIC physical address */ 1072ff879b07SJung-uk Kim 1073ff879b07SJung-uk Kim } ACPI_MADT_IO_SAPIC; 1074ff879b07SJung-uk Kim 1075ff879b07SJung-uk Kim 1076ff879b07SJung-uk Kim /* 7: Local Sapic */ 1077ff879b07SJung-uk Kim 1078ff879b07SJung-uk Kim typedef struct acpi_madt_local_sapic 1079ff879b07SJung-uk Kim { 1080ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1081ff879b07SJung-uk Kim UINT8 ProcessorId; /* ACPI processor id */ 1082ff879b07SJung-uk Kim UINT8 Id; /* SAPIC ID */ 1083ff879b07SJung-uk Kim UINT8 Eid; /* SAPIC EID */ 1084ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 1085ff879b07SJung-uk Kim UINT32 LapicFlags; 1086ff879b07SJung-uk Kim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 1087ff879b07SJung-uk Kim char UidString[1]; /* String UID - ACPI 3.0 */ 1088ff879b07SJung-uk Kim 1089ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_SAPIC; 1090ff879b07SJung-uk Kim 1091ff879b07SJung-uk Kim 1092ff879b07SJung-uk Kim /* 8: Platform Interrupt Source */ 1093ff879b07SJung-uk Kim 1094ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_source 1095ff879b07SJung-uk Kim { 1096ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1097ff879b07SJung-uk Kim UINT16 IntiFlags; 1098ff879b07SJung-uk Kim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 1099ff879b07SJung-uk Kim UINT8 Id; /* Processor ID */ 1100ff879b07SJung-uk Kim UINT8 Eid; /* Processor EID */ 1101ff879b07SJung-uk Kim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 1102ff879b07SJung-uk Kim UINT32 GlobalIrq; /* Global system interrupt */ 1103ff879b07SJung-uk Kim UINT32 Flags; /* Interrupt Source Flags */ 1104ff879b07SJung-uk Kim 1105ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_SOURCE; 1106ff879b07SJung-uk Kim 1107ff879b07SJung-uk Kim /* Masks for Flags field above */ 1108ff879b07SJung-uk Kim 1109ff879b07SJung-uk Kim #define ACPI_MADT_CPEI_OVERRIDE (1) 1110ff879b07SJung-uk Kim 1111ff879b07SJung-uk Kim 1112ff879b07SJung-uk Kim /* 9: Processor Local X2APIC (ACPI 4.0) */ 1113ff879b07SJung-uk Kim 1114ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic 1115ff879b07SJung-uk Kim { 1116ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1117ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1118ff879b07SJung-uk Kim UINT32 LocalApicId; /* Processor x2APIC ID */ 1119ff879b07SJung-uk Kim UINT32 LapicFlags; 1120ff879b07SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 1121ff879b07SJung-uk Kim 1122ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC; 1123ff879b07SJung-uk Kim 1124ff879b07SJung-uk Kim 1125ff879b07SJung-uk Kim /* 10: Local X2APIC NMI (ACPI 4.0) */ 1126ff879b07SJung-uk Kim 1127ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic_nmi 1128ff879b07SJung-uk Kim { 1129ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1130ff879b07SJung-uk Kim UINT16 IntiFlags; 1131ff879b07SJung-uk Kim UINT32 Uid; /* ACPI processor UID */ 1132ff879b07SJung-uk Kim UINT8 Lint; /* LINTn to which NMI is connected */ 1133ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved - must be zero */ 1134ff879b07SJung-uk Kim 1135ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC_NMI; 1136ff879b07SJung-uk Kim 1137ff879b07SJung-uk Kim 1138cd6518c7SJung-uk Kim /* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 changes) */ 1139ff879b07SJung-uk Kim 1140ff879b07SJung-uk Kim typedef struct acpi_madt_generic_interrupt 1141ff879b07SJung-uk Kim { 1142ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1143ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1144ff879b07SJung-uk Kim UINT32 CpuInterfaceNumber; 1145ff879b07SJung-uk Kim UINT32 Uid; 1146ff879b07SJung-uk Kim UINT32 Flags; 1147ff879b07SJung-uk Kim UINT32 ParkingVersion; 1148ff879b07SJung-uk Kim UINT32 PerformanceInterrupt; 1149ff879b07SJung-uk Kim UINT64 ParkedAddress; 1150ff879b07SJung-uk Kim UINT64 BaseAddress; 1151ff879b07SJung-uk Kim UINT64 GicvBaseAddress; 1152ff879b07SJung-uk Kim UINT64 GichBaseAddress; 1153ff879b07SJung-uk Kim UINT32 VgicInterrupt; 1154ff879b07SJung-uk Kim UINT64 GicrBaseAddress; 1155ff879b07SJung-uk Kim UINT64 ArmMpidr; 1156ff879b07SJung-uk Kim UINT8 EfficiencyClass; 1157cd6518c7SJung-uk Kim UINT8 Reserved2[1]; 1158cd6518c7SJung-uk Kim UINT16 SpeInterrupt; /* ACPI 6.3 */ 1159ff879b07SJung-uk Kim 1160ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_INTERRUPT; 1161ff879b07SJung-uk Kim 1162ff879b07SJung-uk Kim /* Masks for Flags field above */ 1163ff879b07SJung-uk Kim 1164ff879b07SJung-uk Kim /* ACPI_MADT_ENABLED (1) Processor is usable if set */ 1165ff879b07SJung-uk Kim #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 1166ff879b07SJung-uk Kim #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 1167ff879b07SJung-uk Kim 1168ff879b07SJung-uk Kim 1169ff879b07SJung-uk Kim /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 1170ff879b07SJung-uk Kim 1171ff879b07SJung-uk Kim typedef struct acpi_madt_generic_distributor 1172ff879b07SJung-uk Kim { 1173ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1174ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1175ff879b07SJung-uk Kim UINT32 GicId; 1176ff879b07SJung-uk Kim UINT64 BaseAddress; 1177ff879b07SJung-uk Kim UINT32 GlobalIrqBase; 1178ff879b07SJung-uk Kim UINT8 Version; 1179ff879b07SJung-uk Kim UINT8 Reserved2[3]; /* Reserved - must be zero */ 1180ff879b07SJung-uk Kim 1181ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_DISTRIBUTOR; 1182ff879b07SJung-uk Kim 1183ff879b07SJung-uk Kim /* Values for Version field above */ 1184ff879b07SJung-uk Kim 1185ff879b07SJung-uk Kim enum AcpiMadtGicVersion 1186ff879b07SJung-uk Kim { 1187ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_NONE = 0, 1188ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V1 = 1, 1189ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V2 = 2, 1190ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V3 = 3, 1191ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_V4 = 4, 1192ff879b07SJung-uk Kim ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1193ff879b07SJung-uk Kim }; 1194ff879b07SJung-uk Kim 1195ff879b07SJung-uk Kim 1196ff879b07SJung-uk Kim /* 13: Generic MSI Frame (ACPI 5.1) */ 1197ff879b07SJung-uk Kim 1198ff879b07SJung-uk Kim typedef struct acpi_madt_generic_msi_frame 1199ff879b07SJung-uk Kim { 1200ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1201ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved - must be zero */ 1202ff879b07SJung-uk Kim UINT32 MsiFrameId; 1203ff879b07SJung-uk Kim UINT64 BaseAddress; 1204ff879b07SJung-uk Kim UINT32 Flags; 1205ff879b07SJung-uk Kim UINT16 SpiCount; 1206ff879b07SJung-uk Kim UINT16 SpiBase; 1207ff879b07SJung-uk Kim 1208ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_MSI_FRAME; 1209ff879b07SJung-uk Kim 1210ff879b07SJung-uk Kim /* Masks for Flags field above */ 1211ff879b07SJung-uk Kim 1212ff879b07SJung-uk Kim #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1213ff879b07SJung-uk Kim 1214ff879b07SJung-uk Kim 1215ff879b07SJung-uk Kim /* 14: Generic Redistributor (ACPI 5.1) */ 1216ff879b07SJung-uk Kim 1217ff879b07SJung-uk Kim typedef struct acpi_madt_generic_redistributor 1218ff879b07SJung-uk Kim { 1219ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1220ff879b07SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 1221ff879b07SJung-uk Kim UINT64 BaseAddress; 1222ff879b07SJung-uk Kim UINT32 Length; 1223ff879b07SJung-uk Kim 1224ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_REDISTRIBUTOR; 1225ff879b07SJung-uk Kim 1226ff879b07SJung-uk Kim 1227ff879b07SJung-uk Kim /* 15: Generic Translator (ACPI 6.0) */ 1228ff879b07SJung-uk Kim 1229ff879b07SJung-uk Kim typedef struct acpi_madt_generic_translator 1230ff879b07SJung-uk Kim { 1231ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1232ff879b07SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 1233ff879b07SJung-uk Kim UINT32 TranslationId; 1234ff879b07SJung-uk Kim UINT64 BaseAddress; 1235ff879b07SJung-uk Kim UINT32 Reserved2; 1236ff879b07SJung-uk Kim 1237ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_TRANSLATOR; 1238ff879b07SJung-uk Kim 1239cfd1ed46SJung-uk Kim /* 16: Multiprocessor wakeup (ACPI 6.4) */ 1240cfd1ed46SJung-uk Kim 1241cfd1ed46SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup 1242cfd1ed46SJung-uk Kim { 1243cfd1ed46SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1244cfd1ed46SJung-uk Kim UINT16 MailboxVersion; 1245cfd1ed46SJung-uk Kim UINT32 Reserved; /* reserved - must be zero */ 1246cfd1ed46SJung-uk Kim UINT64 BaseAddress; 1247cfd1ed46SJung-uk Kim 1248cfd1ed46SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP; 1249cfd1ed46SJung-uk Kim 12501970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032 12511970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048 12521970d693SJung-uk Kim 12531970d693SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup_mailbox 12541970d693SJung-uk Kim { 12551970d693SJung-uk Kim UINT16 Command; 12561970d693SJung-uk Kim UINT16 Reserved; /* reserved - must be zero */ 12571970d693SJung-uk Kim UINT32 ApicId; 12581970d693SJung-uk Kim UINT64 WakeupVector; 12591970d693SJung-uk Kim UINT8 ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */ 12601970d693SJung-uk Kim UINT8 ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */ 12611970d693SJung-uk Kim 12621970d693SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX; 12631970d693SJung-uk Kim 12641970d693SJung-uk Kim #define ACPI_MP_WAKE_COMMAND_WAKEUP 1 12651970d693SJung-uk Kim 1266ff879b07SJung-uk Kim 1267ff879b07SJung-uk Kim /* 1268ff879b07SJung-uk Kim * Common flags fields for MADT subtables 1269ff879b07SJung-uk Kim */ 1270ff879b07SJung-uk Kim 1271ff879b07SJung-uk Kim /* MADT Local APIC flags */ 1272ff879b07SJung-uk Kim 1273ff879b07SJung-uk Kim #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1274ff879b07SJung-uk Kim 1275ff879b07SJung-uk Kim /* MADT MPS INTI flags (IntiFlags) */ 1276ff879b07SJung-uk Kim 1277ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1278ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1279ff879b07SJung-uk Kim 1280ff879b07SJung-uk Kim /* Values for MPS INTI flags */ 1281ff879b07SJung-uk Kim 1282ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_CONFORMS 0 1283ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1284ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_RESERVED 2 1285ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1286ff879b07SJung-uk Kim 1287ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_CONFORMS (0) 1288ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_EDGE (1<<2) 1289ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1290ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1291ff879b07SJung-uk Kim 1292ff879b07SJung-uk Kim 1293ff879b07SJung-uk Kim /******************************************************************************* 1294ff879b07SJung-uk Kim * 1295313a0c13SJung-uk Kim * MCFG - PCI Memory Mapped Configuration table and subtable 1296d6dd1baeSJung-uk Kim * Version 1 1297d6dd1baeSJung-uk Kim * 1298d6dd1baeSJung-uk Kim * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 1299d6dd1baeSJung-uk Kim * 1300d6dd1baeSJung-uk Kim ******************************************************************************/ 1301d6dd1baeSJung-uk Kim 1302d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg 1303d6dd1baeSJung-uk Kim { 1304d6dd1baeSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1305d6dd1baeSJung-uk Kim UINT8 Reserved[8]; 1306d6dd1baeSJung-uk Kim 1307d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG; 1308d6dd1baeSJung-uk Kim 1309d6dd1baeSJung-uk Kim 1310d6dd1baeSJung-uk Kim /* Subtable */ 1311d6dd1baeSJung-uk Kim 1312d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation 1313d6dd1baeSJung-uk Kim { 1314d6dd1baeSJung-uk Kim UINT64 Address; /* Base address, processor-relative */ 1315d6dd1baeSJung-uk Kim UINT16 PciSegment; /* PCI segment group number */ 1316d6dd1baeSJung-uk Kim UINT8 StartBusNumber; /* Starting PCI Bus number */ 1317d6dd1baeSJung-uk Kim UINT8 EndBusNumber; /* Final PCI Bus number */ 1318d6dd1baeSJung-uk Kim UINT32 Reserved; 1319d6dd1baeSJung-uk Kim 1320d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION; 1321d6dd1baeSJung-uk Kim 1322d6dd1baeSJung-uk Kim 1323d6dd1baeSJung-uk Kim /******************************************************************************* 1324d6dd1baeSJung-uk Kim * 1325ca3cf4faSJung-uk Kim * MCHI - Management Controller Host Interface Table 1326ca3cf4faSJung-uk Kim * Version 1 1327ca3cf4faSJung-uk Kim * 1328ca3cf4faSJung-uk Kim * Conforms to "Management Component Transport Protocol (MCTP) Host 1329ca3cf4faSJung-uk Kim * Interface Specification", Revision 1.0.0a, October 13, 2009 1330ca3cf4faSJung-uk Kim * 1331ca3cf4faSJung-uk Kim ******************************************************************************/ 1332ca3cf4faSJung-uk Kim 1333ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi 1334ca3cf4faSJung-uk Kim { 1335ca3cf4faSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1336ca3cf4faSJung-uk Kim UINT8 InterfaceType; 1337ca3cf4faSJung-uk Kim UINT8 Protocol; 1338ca3cf4faSJung-uk Kim UINT64 ProtocolData; 1339ca3cf4faSJung-uk Kim UINT8 InterruptType; 1340ca3cf4faSJung-uk Kim UINT8 Gpe; 1341ca3cf4faSJung-uk Kim UINT8 PciDeviceFlag; 1342ca3cf4faSJung-uk Kim UINT32 GlobalInterrupt; 1343ca3cf4faSJung-uk Kim ACPI_GENERIC_ADDRESS ControlRegister; 1344ca3cf4faSJung-uk Kim UINT8 PciSegment; 1345ca3cf4faSJung-uk Kim UINT8 PciBus; 1346ca3cf4faSJung-uk Kim UINT8 PciDevice; 1347ca3cf4faSJung-uk Kim UINT8 PciFunction; 1348ca3cf4faSJung-uk Kim 1349ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI; 1350ca3cf4faSJung-uk Kim 1351ca3cf4faSJung-uk Kim 1352ca3cf4faSJung-uk Kim /******************************************************************************* 1353ca3cf4faSJung-uk Kim * 1354ff879b07SJung-uk Kim * MPST - Memory Power State Table (ACPI 5.0) 1355ff879b07SJung-uk Kim * Version 1 1356ff879b07SJung-uk Kim * 1357ff879b07SJung-uk Kim ******************************************************************************/ 1358ff879b07SJung-uk Kim 1359ff879b07SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \ 1360ff879b07SJung-uk Kim UINT8 ChannelId; \ 1361ff879b07SJung-uk Kim UINT8 Reserved1[3]; \ 1362ff879b07SJung-uk Kim UINT16 PowerNodeCount; \ 1363ff879b07SJung-uk Kim UINT16 Reserved2; 1364ff879b07SJung-uk Kim 1365ff879b07SJung-uk Kim /* Main table */ 1366ff879b07SJung-uk Kim 1367ff879b07SJung-uk Kim typedef struct acpi_table_mpst 1368ff879b07SJung-uk Kim { 1369ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1370ff879b07SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1371ff879b07SJung-uk Kim 1372ff879b07SJung-uk Kim } ACPI_TABLE_MPST; 1373ff879b07SJung-uk Kim 1374ff879b07SJung-uk Kim 1375ff879b07SJung-uk Kim /* Memory Platform Communication Channel Info */ 1376ff879b07SJung-uk Kim 1377ff879b07SJung-uk Kim typedef struct acpi_mpst_channel 1378ff879b07SJung-uk Kim { 1379ff879b07SJung-uk Kim ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1380ff879b07SJung-uk Kim 1381ff879b07SJung-uk Kim } ACPI_MPST_CHANNEL; 1382ff879b07SJung-uk Kim 1383ff879b07SJung-uk Kim 1384ff879b07SJung-uk Kim /* Memory Power Node Structure */ 1385ff879b07SJung-uk Kim 1386ff879b07SJung-uk Kim typedef struct acpi_mpst_power_node 1387ff879b07SJung-uk Kim { 1388ff879b07SJung-uk Kim UINT8 Flags; 1389ff879b07SJung-uk Kim UINT8 Reserved1; 1390ff879b07SJung-uk Kim UINT16 NodeId; 1391ff879b07SJung-uk Kim UINT32 Length; 1392ff879b07SJung-uk Kim UINT64 RangeAddress; 1393ff879b07SJung-uk Kim UINT64 RangeLength; 1394ff879b07SJung-uk Kim UINT32 NumPowerStates; 1395ff879b07SJung-uk Kim UINT32 NumPhysicalComponents; 1396ff879b07SJung-uk Kim 1397ff879b07SJung-uk Kim } ACPI_MPST_POWER_NODE; 1398ff879b07SJung-uk Kim 1399ff879b07SJung-uk Kim /* Values for Flags field above */ 1400ff879b07SJung-uk Kim 1401ff879b07SJung-uk Kim #define ACPI_MPST_ENABLED 1 1402ff879b07SJung-uk Kim #define ACPI_MPST_POWER_MANAGED 2 1403ff879b07SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE 4 1404ff879b07SJung-uk Kim 1405ff879b07SJung-uk Kim 1406ff879b07SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */ 1407ff879b07SJung-uk Kim 1408ff879b07SJung-uk Kim typedef struct acpi_mpst_power_state 1409ff879b07SJung-uk Kim { 1410ff879b07SJung-uk Kim UINT8 PowerState; 1411ff879b07SJung-uk Kim UINT8 InfoIndex; 1412ff879b07SJung-uk Kim 1413ff879b07SJung-uk Kim } ACPI_MPST_POWER_STATE; 1414ff879b07SJung-uk Kim 1415ff879b07SJung-uk Kim 1416ff879b07SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */ 1417ff879b07SJung-uk Kim 1418ff879b07SJung-uk Kim typedef struct acpi_mpst_component 1419ff879b07SJung-uk Kim { 1420ff879b07SJung-uk Kim UINT16 ComponentId; 1421ff879b07SJung-uk Kim 1422ff879b07SJung-uk Kim } ACPI_MPST_COMPONENT; 1423ff879b07SJung-uk Kim 1424ff879b07SJung-uk Kim 1425ff879b07SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 1426ff879b07SJung-uk Kim 1427ff879b07SJung-uk Kim typedef struct acpi_mpst_data_hdr 1428ff879b07SJung-uk Kim { 1429ff879b07SJung-uk Kim UINT16 CharacteristicsCount; 1430ff879b07SJung-uk Kim UINT16 Reserved; 1431ff879b07SJung-uk Kim 1432ff879b07SJung-uk Kim } ACPI_MPST_DATA_HDR; 1433ff879b07SJung-uk Kim 1434ff879b07SJung-uk Kim typedef struct acpi_mpst_power_data 1435ff879b07SJung-uk Kim { 1436ff879b07SJung-uk Kim UINT8 StructureId; 1437ff879b07SJung-uk Kim UINT8 Flags; 1438ff879b07SJung-uk Kim UINT16 Reserved1; 1439ff879b07SJung-uk Kim UINT32 AveragePower; 1440ff879b07SJung-uk Kim UINT32 PowerSaving; 1441ff879b07SJung-uk Kim UINT64 ExitLatency; 1442ff879b07SJung-uk Kim UINT64 Reserved2; 1443ff879b07SJung-uk Kim 1444ff879b07SJung-uk Kim } ACPI_MPST_POWER_DATA; 1445ff879b07SJung-uk Kim 1446ff879b07SJung-uk Kim /* Values for Flags field above */ 1447ff879b07SJung-uk Kim 1448ff879b07SJung-uk Kim #define ACPI_MPST_PRESERVE 1 1449ff879b07SJung-uk Kim #define ACPI_MPST_AUTOENTRY 2 1450ff879b07SJung-uk Kim #define ACPI_MPST_AUTOEXIT 4 1451ff879b07SJung-uk Kim 1452ff879b07SJung-uk Kim 1453ff879b07SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */ 1454ff879b07SJung-uk Kim 1455ff879b07SJung-uk Kim typedef struct acpi_mpst_shared 1456ff879b07SJung-uk Kim { 1457ff879b07SJung-uk Kim UINT32 Signature; 1458ff879b07SJung-uk Kim UINT16 PccCommand; 1459ff879b07SJung-uk Kim UINT16 PccStatus; 1460ff879b07SJung-uk Kim UINT32 CommandRegister; 1461ff879b07SJung-uk Kim UINT32 StatusRegister; 1462ff879b07SJung-uk Kim UINT32 PowerStateId; 1463ff879b07SJung-uk Kim UINT32 PowerNodeId; 1464ff879b07SJung-uk Kim UINT64 EnergyConsumed; 1465ff879b07SJung-uk Kim UINT64 AveragePower; 1466ff879b07SJung-uk Kim 1467ff879b07SJung-uk Kim } ACPI_MPST_SHARED; 1468ff879b07SJung-uk Kim 1469ff879b07SJung-uk Kim 1470ff879b07SJung-uk Kim /******************************************************************************* 1471ff879b07SJung-uk Kim * 1472ff879b07SJung-uk Kim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1473ff879b07SJung-uk Kim * Version 1 1474ff879b07SJung-uk Kim * 1475ff879b07SJung-uk Kim ******************************************************************************/ 1476ff879b07SJung-uk Kim 1477ff879b07SJung-uk Kim typedef struct acpi_table_msct 1478ff879b07SJung-uk Kim { 1479ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1480ff879b07SJung-uk Kim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1481ff879b07SJung-uk Kim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1482ff879b07SJung-uk Kim UINT32 MaxClockDomains; /* Max number of clock domains */ 1483ff879b07SJung-uk Kim UINT64 MaxAddress; /* Max physical address in system */ 1484ff879b07SJung-uk Kim 1485ff879b07SJung-uk Kim } ACPI_TABLE_MSCT; 1486ff879b07SJung-uk Kim 1487ff879b07SJung-uk Kim 1488ff879b07SJung-uk Kim /* Subtable - Maximum Proximity Domain Information. Version 1 */ 1489ff879b07SJung-uk Kim 1490ff879b07SJung-uk Kim typedef struct acpi_msct_proximity 1491ff879b07SJung-uk Kim { 1492ff879b07SJung-uk Kim UINT8 Revision; 1493ff879b07SJung-uk Kim UINT8 Length; 1494ff879b07SJung-uk Kim UINT32 RangeStart; /* Start of domain range */ 1495ff879b07SJung-uk Kim UINT32 RangeEnd; /* End of domain range */ 1496ff879b07SJung-uk Kim UINT32 ProcessorCapacity; 1497ff879b07SJung-uk Kim UINT64 MemoryCapacity; /* In bytes */ 1498ff879b07SJung-uk Kim 1499ff879b07SJung-uk Kim } ACPI_MSCT_PROXIMITY; 1500ff879b07SJung-uk Kim 1501ff879b07SJung-uk Kim 1502ff879b07SJung-uk Kim /******************************************************************************* 1503ff879b07SJung-uk Kim * 15047cf3e94aSJung-uk Kim * MSDM - Microsoft Data Management table 15057cf3e94aSJung-uk Kim * 15067cf3e94aSJung-uk Kim * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 15077cf3e94aSJung-uk Kim * November 29, 2011. Copyright 2011 Microsoft 15087cf3e94aSJung-uk Kim * 15097cf3e94aSJung-uk Kim ******************************************************************************/ 15107cf3e94aSJung-uk Kim 15117cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */ 15127cf3e94aSJung-uk Kim 15137cf3e94aSJung-uk Kim typedef struct acpi_table_msdm 15147cf3e94aSJung-uk Kim { 15157cf3e94aSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 15167cf3e94aSJung-uk Kim 15177cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM; 15187cf3e94aSJung-uk Kim 15197cf3e94aSJung-uk Kim 15207cf3e94aSJung-uk Kim /******************************************************************************* 15217cf3e94aSJung-uk Kim * 1522ff879b07SJung-uk Kim * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1523ff879b07SJung-uk Kim * Version 1 1524ff879b07SJung-uk Kim * 1525ff879b07SJung-uk Kim ******************************************************************************/ 1526ff879b07SJung-uk Kim 1527ff879b07SJung-uk Kim typedef struct acpi_table_nfit 1528ff879b07SJung-uk Kim { 1529ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1530ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1531ff879b07SJung-uk Kim 1532ff879b07SJung-uk Kim } ACPI_TABLE_NFIT; 1533ff879b07SJung-uk Kim 1534ff879b07SJung-uk Kim /* Subtable header for NFIT */ 1535ff879b07SJung-uk Kim 1536ff879b07SJung-uk Kim typedef struct acpi_nfit_header 1537ff879b07SJung-uk Kim { 1538ff879b07SJung-uk Kim UINT16 Type; 1539ff879b07SJung-uk Kim UINT16 Length; 1540ff879b07SJung-uk Kim 1541ff879b07SJung-uk Kim } ACPI_NFIT_HEADER; 1542ff879b07SJung-uk Kim 1543ff879b07SJung-uk Kim 1544ff879b07SJung-uk Kim /* Values for subtable type in ACPI_NFIT_HEADER */ 1545ff879b07SJung-uk Kim 1546ff879b07SJung-uk Kim enum AcpiNfitType 1547ff879b07SJung-uk Kim { 1548ff879b07SJung-uk Kim ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1549ff879b07SJung-uk Kim ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1550ff879b07SJung-uk Kim ACPI_NFIT_TYPE_INTERLEAVE = 2, 1551ff879b07SJung-uk Kim ACPI_NFIT_TYPE_SMBIOS = 3, 1552ff879b07SJung-uk Kim ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1553ff879b07SJung-uk Kim ACPI_NFIT_TYPE_DATA_REGION = 5, 1554ff879b07SJung-uk Kim ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1555ff879b07SJung-uk Kim ACPI_NFIT_TYPE_CAPABILITIES = 7, 1556ff879b07SJung-uk Kim ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ 1557ff879b07SJung-uk Kim }; 1558ff879b07SJung-uk Kim 1559ff879b07SJung-uk Kim /* 1560ff879b07SJung-uk Kim * NFIT Subtables 1561ff879b07SJung-uk Kim */ 1562ff879b07SJung-uk Kim 1563ff879b07SJung-uk Kim /* 0: System Physical Address Range Structure */ 1564ff879b07SJung-uk Kim 1565ff879b07SJung-uk Kim typedef struct acpi_nfit_system_address 1566ff879b07SJung-uk Kim { 1567ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1568ff879b07SJung-uk Kim UINT16 RangeIndex; 1569ff879b07SJung-uk Kim UINT16 Flags; 1570ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1571ff879b07SJung-uk Kim UINT32 ProximityDomain; 1572ff879b07SJung-uk Kim UINT8 RangeGuid[16]; 1573ff879b07SJung-uk Kim UINT64 Address; 1574ff879b07SJung-uk Kim UINT64 Length; 1575ff879b07SJung-uk Kim UINT64 MemoryMapping; 1576cfd1ed46SJung-uk Kim UINT64 LocationCookie; /* ACPI 6.4 */ 1577ff879b07SJung-uk Kim 1578ff879b07SJung-uk Kim } ACPI_NFIT_SYSTEM_ADDRESS; 1579ff879b07SJung-uk Kim 1580ff879b07SJung-uk Kim /* Flags */ 1581ff879b07SJung-uk Kim 1582ff879b07SJung-uk Kim #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1583ff879b07SJung-uk Kim #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1584cfd1ed46SJung-uk Kim #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */ 1585ff879b07SJung-uk Kim 1586ff879b07SJung-uk Kim /* Range Type GUIDs appear in the include/acuuid.h file */ 1587ff879b07SJung-uk Kim 1588ff879b07SJung-uk Kim 1589ff879b07SJung-uk Kim /* 1: Memory Device to System Address Range Map Structure */ 1590ff879b07SJung-uk Kim 1591ff879b07SJung-uk Kim typedef struct acpi_nfit_memory_map 1592ff879b07SJung-uk Kim { 1593ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1594ff879b07SJung-uk Kim UINT32 DeviceHandle; 1595ff879b07SJung-uk Kim UINT16 PhysicalId; 1596ff879b07SJung-uk Kim UINT16 RegionId; 1597ff879b07SJung-uk Kim UINT16 RangeIndex; 1598ff879b07SJung-uk Kim UINT16 RegionIndex; 1599ff879b07SJung-uk Kim UINT64 RegionSize; 1600ff879b07SJung-uk Kim UINT64 RegionOffset; 1601ff879b07SJung-uk Kim UINT64 Address; 1602ff879b07SJung-uk Kim UINT16 InterleaveIndex; 1603ff879b07SJung-uk Kim UINT16 InterleaveWays; 1604ff879b07SJung-uk Kim UINT16 Flags; 1605ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 1606ff879b07SJung-uk Kim 1607ff879b07SJung-uk Kim } ACPI_NFIT_MEMORY_MAP; 1608ff879b07SJung-uk Kim 1609ff879b07SJung-uk Kim /* Flags */ 1610ff879b07SJung-uk Kim 1611ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1612ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1613ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1614ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1615ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1616ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1617ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1618ff879b07SJung-uk Kim 1619ff879b07SJung-uk Kim 1620ff879b07SJung-uk Kim /* 2: Interleave Structure */ 1621ff879b07SJung-uk Kim 1622ff879b07SJung-uk Kim typedef struct acpi_nfit_interleave 1623ff879b07SJung-uk Kim { 1624ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1625ff879b07SJung-uk Kim UINT16 InterleaveIndex; 1626ff879b07SJung-uk Kim UINT16 Reserved; /* Reserved, must be zero */ 1627ff879b07SJung-uk Kim UINT32 LineCount; 1628ff879b07SJung-uk Kim UINT32 LineSize; 1629ff879b07SJung-uk Kim UINT32 LineOffset[1]; /* Variable length */ 1630ff879b07SJung-uk Kim 1631ff879b07SJung-uk Kim } ACPI_NFIT_INTERLEAVE; 1632ff879b07SJung-uk Kim 1633ff879b07SJung-uk Kim 1634ff879b07SJung-uk Kim /* 3: SMBIOS Management Information Structure */ 1635ff879b07SJung-uk Kim 1636ff879b07SJung-uk Kim typedef struct acpi_nfit_smbios 1637ff879b07SJung-uk Kim { 1638ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1639ff879b07SJung-uk Kim UINT32 Reserved; /* Reserved, must be zero */ 1640ff879b07SJung-uk Kim UINT8 Data[1]; /* Variable length */ 1641ff879b07SJung-uk Kim 1642ff879b07SJung-uk Kim } ACPI_NFIT_SMBIOS; 1643ff879b07SJung-uk Kim 1644ff879b07SJung-uk Kim 1645ff879b07SJung-uk Kim /* 4: NVDIMM Control Region Structure */ 1646ff879b07SJung-uk Kim 1647ff879b07SJung-uk Kim typedef struct acpi_nfit_control_region 1648ff879b07SJung-uk Kim { 1649ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1650ff879b07SJung-uk Kim UINT16 RegionIndex; 1651ff879b07SJung-uk Kim UINT16 VendorId; 1652ff879b07SJung-uk Kim UINT16 DeviceId; 1653ff879b07SJung-uk Kim UINT16 RevisionId; 1654ff879b07SJung-uk Kim UINT16 SubsystemVendorId; 1655ff879b07SJung-uk Kim UINT16 SubsystemDeviceId; 1656ff879b07SJung-uk Kim UINT16 SubsystemRevisionId; 1657ff879b07SJung-uk Kim UINT8 ValidFields; 1658ff879b07SJung-uk Kim UINT8 ManufacturingLocation; 1659ff879b07SJung-uk Kim UINT16 ManufacturingDate; 1660ff879b07SJung-uk Kim UINT8 Reserved[2]; /* Reserved, must be zero */ 1661ff879b07SJung-uk Kim UINT32 SerialNumber; 1662ff879b07SJung-uk Kim UINT16 Code; 1663ff879b07SJung-uk Kim UINT16 Windows; 1664ff879b07SJung-uk Kim UINT64 WindowSize; 1665ff879b07SJung-uk Kim UINT64 CommandOffset; 1666ff879b07SJung-uk Kim UINT64 CommandSize; 1667ff879b07SJung-uk Kim UINT64 StatusOffset; 1668ff879b07SJung-uk Kim UINT64 StatusSize; 1669ff879b07SJung-uk Kim UINT16 Flags; 1670ff879b07SJung-uk Kim UINT8 Reserved1[6]; /* Reserved, must be zero */ 1671ff879b07SJung-uk Kim 1672ff879b07SJung-uk Kim } ACPI_NFIT_CONTROL_REGION; 1673ff879b07SJung-uk Kim 1674ff879b07SJung-uk Kim /* Flags */ 1675ff879b07SJung-uk Kim 1676ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1677ff879b07SJung-uk Kim 1678ff879b07SJung-uk Kim /* ValidFields bits */ 1679ff879b07SJung-uk Kim 1680ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 1681ff879b07SJung-uk Kim 1682ff879b07SJung-uk Kim 1683ff879b07SJung-uk Kim /* 5: NVDIMM Block Data Window Region Structure */ 1684ff879b07SJung-uk Kim 1685ff879b07SJung-uk Kim typedef struct acpi_nfit_data_region 1686ff879b07SJung-uk Kim { 1687ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1688ff879b07SJung-uk Kim UINT16 RegionIndex; 1689ff879b07SJung-uk Kim UINT16 Windows; 1690ff879b07SJung-uk Kim UINT64 Offset; 1691ff879b07SJung-uk Kim UINT64 Size; 1692ff879b07SJung-uk Kim UINT64 Capacity; 1693ff879b07SJung-uk Kim UINT64 StartAddress; 1694ff879b07SJung-uk Kim 1695ff879b07SJung-uk Kim } ACPI_NFIT_DATA_REGION; 1696ff879b07SJung-uk Kim 1697ff879b07SJung-uk Kim 1698ff879b07SJung-uk Kim /* 6: Flush Hint Address Structure */ 1699ff879b07SJung-uk Kim 1700ff879b07SJung-uk Kim typedef struct acpi_nfit_flush_address 1701ff879b07SJung-uk Kim { 1702ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1703ff879b07SJung-uk Kim UINT32 DeviceHandle; 1704ff879b07SJung-uk Kim UINT16 HintCount; 1705ff879b07SJung-uk Kim UINT8 Reserved[6]; /* Reserved, must be zero */ 1706ff879b07SJung-uk Kim UINT64 HintAddress[1]; /* Variable length */ 1707ff879b07SJung-uk Kim 1708ff879b07SJung-uk Kim } ACPI_NFIT_FLUSH_ADDRESS; 1709ff879b07SJung-uk Kim 1710ff879b07SJung-uk Kim 1711ff879b07SJung-uk Kim /* 7: Platform Capabilities Structure */ 1712ff879b07SJung-uk Kim 1713ff879b07SJung-uk Kim typedef struct acpi_nfit_capabilities 1714ff879b07SJung-uk Kim { 1715ff879b07SJung-uk Kim ACPI_NFIT_HEADER Header; 1716ff879b07SJung-uk Kim UINT8 HighestCapability; 1717ff879b07SJung-uk Kim UINT8 Reserved[3]; /* Reserved, must be zero */ 1718ff879b07SJung-uk Kim UINT32 Capabilities; 1719ff879b07SJung-uk Kim UINT32 Reserved2; 1720ff879b07SJung-uk Kim 1721ff879b07SJung-uk Kim } ACPI_NFIT_CAPABILITIES; 1722ff879b07SJung-uk Kim 1723ff879b07SJung-uk Kim /* Capabilities Flags */ 1724ff879b07SJung-uk Kim 1725ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ 1726ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ 1727ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ 1728ff879b07SJung-uk Kim 1729ff879b07SJung-uk Kim 1730ff879b07SJung-uk Kim /* 1731ff879b07SJung-uk Kim * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM 1732ff879b07SJung-uk Kim */ 1733ff879b07SJung-uk Kim typedef struct nfit_device_handle 1734ff879b07SJung-uk Kim { 1735ff879b07SJung-uk Kim UINT32 Handle; 1736ff879b07SJung-uk Kim 1737ff879b07SJung-uk Kim } NFIT_DEVICE_HANDLE; 1738ff879b07SJung-uk Kim 1739ff879b07SJung-uk Kim /* Device handle construction and extraction macros */ 1740ff879b07SJung-uk Kim 1741ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F 1742ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 1743ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 1744ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 1745ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 1746ff879b07SJung-uk Kim 1747ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 1748ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 1749ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_OFFSET 8 1750ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_OFFSET 12 1751ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_OFFSET 16 1752ff879b07SJung-uk Kim 1753ff879b07SJung-uk Kim /* Macro to construct a NFIT/NVDIMM device handle */ 1754ff879b07SJung-uk Kim 1755ff879b07SJung-uk Kim #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ 1756ff879b07SJung-uk Kim ((dimm) | \ 1757ff879b07SJung-uk Kim ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ 1758ff879b07SJung-uk Kim ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ 1759ff879b07SJung-uk Kim ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ 1760ff879b07SJung-uk Kim ((node) << ACPI_NFIT_NODE_ID_OFFSET)) 1761ff879b07SJung-uk Kim 1762ff879b07SJung-uk Kim /* Macros to extract individual fields from a NFIT/NVDIMM device handle */ 1763ff879b07SJung-uk Kim 1764ff879b07SJung-uk Kim #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ 1765ff879b07SJung-uk Kim ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) 1766ff879b07SJung-uk Kim 1767ff879b07SJung-uk Kim #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ 1768ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) 1769ff879b07SJung-uk Kim 1770ff879b07SJung-uk Kim #define ACPI_NFIT_GET_MEMORY_ID(handle) \ 1771ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) 1772ff879b07SJung-uk Kim 1773ff879b07SJung-uk Kim #define ACPI_NFIT_GET_SOCKET_ID(handle) \ 1774ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) 1775ff879b07SJung-uk Kim 1776ff879b07SJung-uk Kim #define ACPI_NFIT_GET_NODE_ID(handle) \ 1777ff879b07SJung-uk Kim (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) 1778ff879b07SJung-uk Kim 1779ff879b07SJung-uk Kim 1780ff879b07SJung-uk Kim /******************************************************************************* 1781ff879b07SJung-uk Kim * 1782ff879b07SJung-uk Kim * PCCT - Platform Communications Channel Table (ACPI 5.0) 1783ff879b07SJung-uk Kim * Version 2 (ACPI 6.2) 1784ff879b07SJung-uk Kim * 1785ff879b07SJung-uk Kim ******************************************************************************/ 1786ff879b07SJung-uk Kim 1787ff879b07SJung-uk Kim typedef struct acpi_table_pcct 1788ff879b07SJung-uk Kim { 1789ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1790ff879b07SJung-uk Kim UINT32 Flags; 1791ff879b07SJung-uk Kim UINT64 Reserved; 1792ff879b07SJung-uk Kim 1793ff879b07SJung-uk Kim } ACPI_TABLE_PCCT; 1794ff879b07SJung-uk Kim 1795ff879b07SJung-uk Kim /* Values for Flags field above */ 1796ff879b07SJung-uk Kim 1797ff879b07SJung-uk Kim #define ACPI_PCCT_DOORBELL 1 1798ff879b07SJung-uk Kim 1799ff879b07SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 1800ff879b07SJung-uk Kim 1801ff879b07SJung-uk Kim enum AcpiPcctType 1802ff879b07SJung-uk Kim { 1803ff879b07SJung-uk Kim ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 1804ff879b07SJung-uk Kim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 1805ff879b07SJung-uk Kim ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 1806ff879b07SJung-uk Kim ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ 1807ff879b07SJung-uk Kim ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ 1808cfd1ed46SJung-uk Kim ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */ 1809cfd1ed46SJung-uk Kim ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 1810ff879b07SJung-uk Kim }; 1811ff879b07SJung-uk Kim 1812ff879b07SJung-uk Kim /* 1813ff879b07SJung-uk Kim * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1814ff879b07SJung-uk Kim */ 1815ff879b07SJung-uk Kim 1816ff879b07SJung-uk Kim /* 0: Generic Communications Subspace */ 1817ff879b07SJung-uk Kim 1818ff879b07SJung-uk Kim typedef struct acpi_pcct_subspace 1819ff879b07SJung-uk Kim { 1820ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1821ff879b07SJung-uk Kim UINT8 Reserved[6]; 1822ff879b07SJung-uk Kim UINT64 BaseAddress; 1823ff879b07SJung-uk Kim UINT64 Length; 1824ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1825ff879b07SJung-uk Kim UINT64 PreserveMask; 1826ff879b07SJung-uk Kim UINT64 WriteMask; 1827ff879b07SJung-uk Kim UINT32 Latency; 1828ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1829ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1830ff879b07SJung-uk Kim 1831ff879b07SJung-uk Kim } ACPI_PCCT_SUBSPACE; 1832ff879b07SJung-uk Kim 1833ff879b07SJung-uk Kim 1834ff879b07SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 1835ff879b07SJung-uk Kim 1836ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced 1837ff879b07SJung-uk Kim { 1838ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1839ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1840ff879b07SJung-uk Kim UINT8 Flags; 1841ff879b07SJung-uk Kim UINT8 Reserved; 1842ff879b07SJung-uk Kim UINT64 BaseAddress; 1843ff879b07SJung-uk Kim UINT64 Length; 1844ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1845ff879b07SJung-uk Kim UINT64 PreserveMask; 1846ff879b07SJung-uk Kim UINT64 WriteMask; 1847ff879b07SJung-uk Kim UINT32 Latency; 1848ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1849ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1850ff879b07SJung-uk Kim 1851ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED; 1852ff879b07SJung-uk Kim 1853ff879b07SJung-uk Kim 1854ff879b07SJung-uk Kim /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 1855ff879b07SJung-uk Kim 1856ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced_type2 1857ff879b07SJung-uk Kim { 1858ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1859ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1860ff879b07SJung-uk Kim UINT8 Flags; 1861ff879b07SJung-uk Kim UINT8 Reserved; 1862ff879b07SJung-uk Kim UINT64 BaseAddress; 1863ff879b07SJung-uk Kim UINT64 Length; 1864ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1865ff879b07SJung-uk Kim UINT64 PreserveMask; 1866ff879b07SJung-uk Kim UINT64 WriteMask; 1867ff879b07SJung-uk Kim UINT32 Latency; 1868ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1869ff879b07SJung-uk Kim UINT16 MinTurnaroundTime; 1870ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1871ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1872ff879b07SJung-uk Kim UINT64 AckWriteMask; 1873ff879b07SJung-uk Kim 1874ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED_TYPE2; 1875ff879b07SJung-uk Kim 1876ff879b07SJung-uk Kim 1877ff879b07SJung-uk Kim /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ 1878ff879b07SJung-uk Kim 1879ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_master 1880ff879b07SJung-uk Kim { 1881ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1882ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1883ff879b07SJung-uk Kim UINT8 Flags; 1884ff879b07SJung-uk Kim UINT8 Reserved1; 1885ff879b07SJung-uk Kim UINT64 BaseAddress; 1886ff879b07SJung-uk Kim UINT32 Length; 1887ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1888ff879b07SJung-uk Kim UINT64 PreserveMask; 1889ff879b07SJung-uk Kim UINT64 WriteMask; 1890ff879b07SJung-uk Kim UINT32 Latency; 1891ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1892ff879b07SJung-uk Kim UINT32 MinTurnaroundTime; 1893ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1894ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1895ff879b07SJung-uk Kim UINT64 AckSetMask; 1896ff879b07SJung-uk Kim UINT64 Reserved2; 1897ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 1898ff879b07SJung-uk Kim UINT64 CmdCompleteMask; 1899ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdUpdateRegister; 1900ff879b07SJung-uk Kim UINT64 CmdUpdatePreserveMask; 1901ff879b07SJung-uk Kim UINT64 CmdUpdateSetMask; 1902ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 1903ff879b07SJung-uk Kim UINT64 ErrorStatusMask; 1904ff879b07SJung-uk Kim 1905ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_MASTER; 1906ff879b07SJung-uk Kim 1907ff879b07SJung-uk Kim 1908ff879b07SJung-uk Kim /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ 1909ff879b07SJung-uk Kim 1910ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_slave 1911ff879b07SJung-uk Kim { 1912ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1913ff879b07SJung-uk Kim UINT32 PlatformInterrupt; 1914ff879b07SJung-uk Kim UINT8 Flags; 1915ff879b07SJung-uk Kim UINT8 Reserved1; 1916ff879b07SJung-uk Kim UINT64 BaseAddress; 1917ff879b07SJung-uk Kim UINT32 Length; 1918ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1919ff879b07SJung-uk Kim UINT64 PreserveMask; 1920ff879b07SJung-uk Kim UINT64 WriteMask; 1921ff879b07SJung-uk Kim UINT32 Latency; 1922ff879b07SJung-uk Kim UINT32 MaxAccessRate; 1923ff879b07SJung-uk Kim UINT32 MinTurnaroundTime; 1924ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS PlatformAckRegister; 1925ff879b07SJung-uk Kim UINT64 AckPreserveMask; 1926ff879b07SJung-uk Kim UINT64 AckSetMask; 1927ff879b07SJung-uk Kim UINT64 Reserved2; 1928ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 1929ff879b07SJung-uk Kim UINT64 CmdCompleteMask; 1930ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS CmdUpdateRegister; 1931ff879b07SJung-uk Kim UINT64 CmdUpdatePreserveMask; 1932ff879b07SJung-uk Kim UINT64 CmdUpdateSetMask; 1933ff879b07SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 1934ff879b07SJung-uk Kim UINT64 ErrorStatusMask; 1935ff879b07SJung-uk Kim 1936ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SLAVE; 1937ff879b07SJung-uk Kim 1938cfd1ed46SJung-uk Kim /* 5: HW Registers based Communications Subspace */ 1939cfd1ed46SJung-uk Kim 1940cfd1ed46SJung-uk Kim typedef struct acpi_pcct_hw_reg 1941cfd1ed46SJung-uk Kim { 1942cfd1ed46SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 1943cfd1ed46SJung-uk Kim UINT16 Version; 1944cfd1ed46SJung-uk Kim UINT64 BaseAddress; 1945cfd1ed46SJung-uk Kim UINT64 Length; 1946cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS DoorbellRegister; 1947cfd1ed46SJung-uk Kim UINT64 DoorbellPreserve; 1948cfd1ed46SJung-uk Kim UINT64 DoorbellWrite; 1949cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS CmdCompleteRegister; 1950cfd1ed46SJung-uk Kim UINT64 CmdCompleteMask; 1951cfd1ed46SJung-uk Kim ACPI_GENERIC_ADDRESS ErrorStatusRegister; 1952cfd1ed46SJung-uk Kim UINT64 ErrorStatusMask; 1953cfd1ed46SJung-uk Kim UINT32 NominalLatency; 1954cfd1ed46SJung-uk Kim UINT32 MinTurnaroundTime; 1955cfd1ed46SJung-uk Kim 1956cfd1ed46SJung-uk Kim } ACPI_PCCT_HW_REG; 1957cfd1ed46SJung-uk Kim 1958ff879b07SJung-uk Kim 1959ff879b07SJung-uk Kim /* Values for doorbell flags above */ 1960ff879b07SJung-uk Kim 1961ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY (1) 1962ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE (1<<1) 1963ff879b07SJung-uk Kim 1964ff879b07SJung-uk Kim 1965ff879b07SJung-uk Kim /* 1966ff879b07SJung-uk Kim * PCC memory structures (not part of the ACPI table) 1967ff879b07SJung-uk Kim */ 1968ff879b07SJung-uk Kim 1969ff879b07SJung-uk Kim /* Shared Memory Region */ 1970ff879b07SJung-uk Kim 1971ff879b07SJung-uk Kim typedef struct acpi_pcct_shared_memory 1972ff879b07SJung-uk Kim { 1973ff879b07SJung-uk Kim UINT32 Signature; 1974ff879b07SJung-uk Kim UINT16 Command; 1975ff879b07SJung-uk Kim UINT16 Status; 1976ff879b07SJung-uk Kim 1977ff879b07SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY; 1978ff879b07SJung-uk Kim 1979ff879b07SJung-uk Kim 1980ff879b07SJung-uk Kim /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ 1981ff879b07SJung-uk Kim 1982ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_shared_memory 1983ff879b07SJung-uk Kim { 1984ff879b07SJung-uk Kim UINT32 Signature; 1985ff879b07SJung-uk Kim UINT32 Flags; 1986ff879b07SJung-uk Kim UINT32 Length; 1987ff879b07SJung-uk Kim UINT32 Command; 1988ff879b07SJung-uk Kim 1989ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SHARED_MEMORY; 1990ff879b07SJung-uk Kim 1991ff879b07SJung-uk Kim 1992ff879b07SJung-uk Kim /******************************************************************************* 1993ff879b07SJung-uk Kim * 1994ff879b07SJung-uk Kim * PDTT - Platform Debug Trigger Table (ACPI 6.2) 1995ff879b07SJung-uk Kim * Version 0 1996ff879b07SJung-uk Kim * 1997ff879b07SJung-uk Kim ******************************************************************************/ 1998ff879b07SJung-uk Kim 1999ff879b07SJung-uk Kim typedef struct acpi_table_pdtt 2000ff879b07SJung-uk Kim { 2001ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2002ff879b07SJung-uk Kim UINT8 TriggerCount; 2003ff879b07SJung-uk Kim UINT8 Reserved[3]; 2004ff879b07SJung-uk Kim UINT32 ArrayOffset; 2005ff879b07SJung-uk Kim 2006ff879b07SJung-uk Kim } ACPI_TABLE_PDTT; 2007ff879b07SJung-uk Kim 2008ff879b07SJung-uk Kim 2009ff879b07SJung-uk Kim /* 2010ff879b07SJung-uk Kim * PDTT Communication Channel Identifier Structure. 2011ff879b07SJung-uk Kim * The number of these structures is defined by TriggerCount above, 2012ff879b07SJung-uk Kim * starting at ArrayOffset. 2013ff879b07SJung-uk Kim */ 2014ff879b07SJung-uk Kim typedef struct acpi_pdtt_channel 2015ff879b07SJung-uk Kim { 2016ff879b07SJung-uk Kim UINT8 SubchannelId; 2017ff879b07SJung-uk Kim UINT8 Flags; 2018ff879b07SJung-uk Kim 2019ff879b07SJung-uk Kim } ACPI_PDTT_CHANNEL; 2020ff879b07SJung-uk Kim 2021ff879b07SJung-uk Kim /* Flags for above */ 2022ff879b07SJung-uk Kim 2023ff879b07SJung-uk Kim #define ACPI_PDTT_RUNTIME_TRIGGER (1) 2024ff879b07SJung-uk Kim #define ACPI_PDTT_WAIT_COMPLETION (1<<1) 2025cd6518c7SJung-uk Kim #define ACPI_PDTT_TRIGGER_ORDER (1<<2) 2026ff879b07SJung-uk Kim 2027ff879b07SJung-uk Kim 2028ff879b07SJung-uk Kim /******************************************************************************* 2029ff879b07SJung-uk Kim * 2030cfd1ed46SJung-uk Kim * PHAT - Platform Health Assessment Table (ACPI 6.4) 2031cfd1ed46SJung-uk Kim * Version 1 2032cfd1ed46SJung-uk Kim * 2033cfd1ed46SJung-uk Kim ******************************************************************************/ 2034cfd1ed46SJung-uk Kim 2035cfd1ed46SJung-uk Kim typedef struct acpi_table_phat 2036cfd1ed46SJung-uk Kim { 2037cfd1ed46SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2038cfd1ed46SJung-uk Kim 2039cfd1ed46SJung-uk Kim } ACPI_TABLE_PHAT; 2040cfd1ed46SJung-uk Kim 2041cfd1ed46SJung-uk Kim /* Common header for PHAT subtables that follow main table */ 2042cfd1ed46SJung-uk Kim 2043cfd1ed46SJung-uk Kim typedef struct acpi_phat_header 2044cfd1ed46SJung-uk Kim { 2045cfd1ed46SJung-uk Kim UINT16 Type; 2046cfd1ed46SJung-uk Kim UINT16 Length; 2047cfd1ed46SJung-uk Kim UINT8 Revision; 2048cfd1ed46SJung-uk Kim 2049cfd1ed46SJung-uk Kim } ACPI_PHAT_HEADER; 2050cfd1ed46SJung-uk Kim 2051cfd1ed46SJung-uk Kim 2052cfd1ed46SJung-uk Kim /* Values for Type field above */ 2053cfd1ed46SJung-uk Kim 2054cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_VERSION_DATA 0 2055cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1 2056cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */ 2057cfd1ed46SJung-uk Kim 2058cfd1ed46SJung-uk Kim /* 2059cfd1ed46SJung-uk Kim * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER 2060cfd1ed46SJung-uk Kim */ 2061cfd1ed46SJung-uk Kim 2062cfd1ed46SJung-uk Kim /* 0: Firmware Version Data Record */ 2063cfd1ed46SJung-uk Kim 2064cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_data 2065cfd1ed46SJung-uk Kim { 2066cfd1ed46SJung-uk Kim ACPI_PHAT_HEADER Header; 2067cfd1ed46SJung-uk Kim UINT8 Reserved[3]; 2068cfd1ed46SJung-uk Kim UINT32 ElementCount; 2069cfd1ed46SJung-uk Kim 2070cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_DATA; 2071cfd1ed46SJung-uk Kim 2072cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_element 2073cfd1ed46SJung-uk Kim { 2074cfd1ed46SJung-uk Kim UINT8 Guid[16]; 2075cfd1ed46SJung-uk Kim UINT64 VersionValue; 2076cfd1ed46SJung-uk Kim UINT32 ProducerId; 2077cfd1ed46SJung-uk Kim 2078cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_ELEMENT; 2079cfd1ed46SJung-uk Kim 2080cfd1ed46SJung-uk Kim 2081cfd1ed46SJung-uk Kim /* 1: Firmware Health Data Record */ 2082cfd1ed46SJung-uk Kim 2083cfd1ed46SJung-uk Kim typedef struct acpi_phat_health_data 2084cfd1ed46SJung-uk Kim { 2085cfd1ed46SJung-uk Kim ACPI_PHAT_HEADER Header; 2086cfd1ed46SJung-uk Kim UINT8 Reserved[2]; 2087cfd1ed46SJung-uk Kim UINT8 Health; 2088cfd1ed46SJung-uk Kim UINT8 DeviceGuid[16]; 2089cfd1ed46SJung-uk Kim UINT32 DeviceSpecificOffset; /* Zero if no Device-specific data */ 2090cfd1ed46SJung-uk Kim 2091cfd1ed46SJung-uk Kim } ACPI_PHAT_HEALTH_DATA; 2092cfd1ed46SJung-uk Kim 2093cfd1ed46SJung-uk Kim /* Values for Health field above */ 2094cfd1ed46SJung-uk Kim 2095cfd1ed46SJung-uk Kim #define ACPI_PHAT_ERRORS_FOUND 0 2096cfd1ed46SJung-uk Kim #define ACPI_PHAT_NO_ERRORS 1 2097cfd1ed46SJung-uk Kim #define ACPI_PHAT_UNKNOWN_ERRORS 2 2098cfd1ed46SJung-uk Kim #define ACPI_PHAT_ADVISORY 3 2099cfd1ed46SJung-uk Kim 2100cfd1ed46SJung-uk Kim 2101cfd1ed46SJung-uk Kim /******************************************************************************* 2102cfd1ed46SJung-uk Kim * 2103ff879b07SJung-uk Kim * PMTT - Platform Memory Topology Table (ACPI 5.0) 2104ff879b07SJung-uk Kim * Version 1 2105ff879b07SJung-uk Kim * 2106ff879b07SJung-uk Kim ******************************************************************************/ 2107ff879b07SJung-uk Kim 2108ff879b07SJung-uk Kim typedef struct acpi_table_pmtt 2109ff879b07SJung-uk Kim { 2110ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2111cfd1ed46SJung-uk Kim UINT32 MemoryDeviceCount; 2112cfd1ed46SJung-uk Kim /* 2113cfd1ed46SJung-uk Kim * Immediately followed by: 2114cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2115cfd1ed46SJung-uk Kim */ 2116ff879b07SJung-uk Kim 2117ff879b07SJung-uk Kim } ACPI_TABLE_PMTT; 2118ff879b07SJung-uk Kim 2119ff879b07SJung-uk Kim 2120ff879b07SJung-uk Kim /* Common header for PMTT subtables that follow main table */ 2121ff879b07SJung-uk Kim 2122ff879b07SJung-uk Kim typedef struct acpi_pmtt_header 2123ff879b07SJung-uk Kim { 2124ff879b07SJung-uk Kim UINT8 Type; 2125ff879b07SJung-uk Kim UINT8 Reserved1; 2126ff879b07SJung-uk Kim UINT16 Length; 2127ff879b07SJung-uk Kim UINT16 Flags; 2128ff879b07SJung-uk Kim UINT16 Reserved2; 2129cfd1ed46SJung-uk Kim UINT32 MemoryDeviceCount; /* Zero means no memory device structs follow */ 2130cfd1ed46SJung-uk Kim /* 2131cfd1ed46SJung-uk Kim * Immediately followed by: 2132cfd1ed46SJung-uk Kim * UINT8 TypeSpecificData[] 2133cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2134cfd1ed46SJung-uk Kim */ 2135ff879b07SJung-uk Kim 2136ff879b07SJung-uk Kim } ACPI_PMTT_HEADER; 2137ff879b07SJung-uk Kim 2138ff879b07SJung-uk Kim /* Values for Type field above */ 2139ff879b07SJung-uk Kim 2140ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET 0 2141ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER 1 2142ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM 2 2143cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */ 2144cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_VENDOR 0xFF 2145ff879b07SJung-uk Kim 2146ff879b07SJung-uk Kim /* Values for Flags field above */ 2147ff879b07SJung-uk Kim 2148ff879b07SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL 0x0001 2149ff879b07SJung-uk Kim #define ACPI_PMTT_PHYSICAL 0x0002 2150ff879b07SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE 0x000C 2151ff879b07SJung-uk Kim 2152ff879b07SJung-uk Kim 2153ff879b07SJung-uk Kim /* 2154ff879b07SJung-uk Kim * PMTT subtables, correspond to Type in acpi_pmtt_header 2155ff879b07SJung-uk Kim */ 2156ff879b07SJung-uk Kim 2157ff879b07SJung-uk Kim 2158ff879b07SJung-uk Kim /* 0: Socket Structure */ 2159ff879b07SJung-uk Kim 2160ff879b07SJung-uk Kim typedef struct acpi_pmtt_socket 2161ff879b07SJung-uk Kim { 2162ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 2163ff879b07SJung-uk Kim UINT16 SocketId; 2164ff879b07SJung-uk Kim UINT16 Reserved; 2165ff879b07SJung-uk Kim 2166ff879b07SJung-uk Kim } ACPI_PMTT_SOCKET; 2167cfd1ed46SJung-uk Kim /* 2168cfd1ed46SJung-uk Kim * Immediately followed by: 2169cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2170cfd1ed46SJung-uk Kim */ 2171ff879b07SJung-uk Kim 2172ff879b07SJung-uk Kim 2173ff879b07SJung-uk Kim /* 1: Memory Controller subtable */ 2174ff879b07SJung-uk Kim 2175ff879b07SJung-uk Kim typedef struct acpi_pmtt_controller 2176ff879b07SJung-uk Kim { 2177ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 2178cfd1ed46SJung-uk Kim UINT16 ControllerId; 2179ff879b07SJung-uk Kim UINT16 Reserved; 2180ff879b07SJung-uk Kim 2181ff879b07SJung-uk Kim } ACPI_PMTT_CONTROLLER; 2182cfd1ed46SJung-uk Kim /* 2183cfd1ed46SJung-uk Kim * Immediately followed by: 2184cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2185cfd1ed46SJung-uk Kim */ 2186ff879b07SJung-uk Kim 2187ff879b07SJung-uk Kim 2188ff879b07SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */ 2189ff879b07SJung-uk Kim 2190ff879b07SJung-uk Kim typedef struct acpi_pmtt_physical_component 2191ff879b07SJung-uk Kim { 2192ff879b07SJung-uk Kim ACPI_PMTT_HEADER Header; 2193ff879b07SJung-uk Kim UINT32 BiosHandle; 2194ff879b07SJung-uk Kim 2195ff879b07SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT; 2196ff879b07SJung-uk Kim 2197ff879b07SJung-uk Kim 2198cfd1ed46SJung-uk Kim /* 0xFF: Vendor Specific Data */ 2199cfd1ed46SJung-uk Kim 2200cfd1ed46SJung-uk Kim typedef struct acpi_pmtt_vendor_specific 2201cfd1ed46SJung-uk Kim { 2202cfd1ed46SJung-uk Kim ACPI_PMTT_HEADER Header; 2203cfd1ed46SJung-uk Kim UINT8 TypeUuid[16]; 2204cfd1ed46SJung-uk Kim UINT8 Specific[]; 2205cfd1ed46SJung-uk Kim /* 2206cfd1ed46SJung-uk Kim * Immediately followed by: 2207cfd1ed46SJung-uk Kim * UINT8 VendorSpecificData[]; 2208cfd1ed46SJung-uk Kim * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2209cfd1ed46SJung-uk Kim */ 2210cfd1ed46SJung-uk Kim 2211cfd1ed46SJung-uk Kim } ACPI_PMTT_VENDOR_SPECIFIC; 2212cfd1ed46SJung-uk Kim 2213cfd1ed46SJung-uk Kim 2214ff879b07SJung-uk Kim /******************************************************************************* 2215ff879b07SJung-uk Kim * 2216ff879b07SJung-uk Kim * PPTT - Processor Properties Topology Table (ACPI 6.2) 2217ff879b07SJung-uk Kim * Version 1 2218ff879b07SJung-uk Kim * 2219ff879b07SJung-uk Kim ******************************************************************************/ 2220ff879b07SJung-uk Kim 2221ff879b07SJung-uk Kim typedef struct acpi_table_pptt 2222ff879b07SJung-uk Kim { 2223ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2224ff879b07SJung-uk Kim 2225ff879b07SJung-uk Kim } ACPI_TABLE_PPTT; 2226ff879b07SJung-uk Kim 2227ff879b07SJung-uk Kim /* Values for Type field above */ 2228ff879b07SJung-uk Kim 2229ff879b07SJung-uk Kim enum AcpiPpttType 2230ff879b07SJung-uk Kim { 2231ff879b07SJung-uk Kim ACPI_PPTT_TYPE_PROCESSOR = 0, 2232ff879b07SJung-uk Kim ACPI_PPTT_TYPE_CACHE = 1, 2233ff879b07SJung-uk Kim ACPI_PPTT_TYPE_ID = 2, 2234ff879b07SJung-uk Kim ACPI_PPTT_TYPE_RESERVED = 3 2235ff879b07SJung-uk Kim }; 2236ff879b07SJung-uk Kim 2237ff879b07SJung-uk Kim 2238ff879b07SJung-uk Kim /* 0: Processor Hierarchy Node Structure */ 2239ff879b07SJung-uk Kim 2240ff879b07SJung-uk Kim typedef struct acpi_pptt_processor 2241ff879b07SJung-uk Kim { 2242ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2243ff879b07SJung-uk Kim UINT16 Reserved; 2244ff879b07SJung-uk Kim UINT32 Flags; 2245ff879b07SJung-uk Kim UINT32 Parent; 2246ff879b07SJung-uk Kim UINT32 AcpiProcessorId; 2247ff879b07SJung-uk Kim UINT32 NumberOfPrivResources; 2248ff879b07SJung-uk Kim 2249ff879b07SJung-uk Kim } ACPI_PPTT_PROCESSOR; 2250ff879b07SJung-uk Kim 2251ff879b07SJung-uk Kim /* Flags */ 2252ff879b07SJung-uk Kim 2253cd6518c7SJung-uk Kim #define ACPI_PPTT_PHYSICAL_PACKAGE (1) 2254cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1) 2255cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */ 2256cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */ 2257cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */ 2258ff879b07SJung-uk Kim 2259ff879b07SJung-uk Kim 2260ff879b07SJung-uk Kim /* 1: Cache Type Structure */ 2261ff879b07SJung-uk Kim 2262ff879b07SJung-uk Kim typedef struct acpi_pptt_cache 2263ff879b07SJung-uk Kim { 2264ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2265ff879b07SJung-uk Kim UINT16 Reserved; 2266ff879b07SJung-uk Kim UINT32 Flags; 2267ff879b07SJung-uk Kim UINT32 NextLevelOfCache; 2268ff879b07SJung-uk Kim UINT32 Size; 2269ff879b07SJung-uk Kim UINT32 NumberOfSets; 2270ff879b07SJung-uk Kim UINT8 Associativity; 2271ff879b07SJung-uk Kim UINT8 Attributes; 2272ff879b07SJung-uk Kim UINT16 LineSize; 2273ff879b07SJung-uk Kim 2274ff879b07SJung-uk Kim } ACPI_PPTT_CACHE; 2275ff879b07SJung-uk Kim 2276cfd1ed46SJung-uk Kim /* 1: Cache Type Structure for PPTT version 3 */ 2277cfd1ed46SJung-uk Kim 2278cfd1ed46SJung-uk Kim typedef struct acpi_pptt_cache_v1 2279cfd1ed46SJung-uk Kim { 2280cfd1ed46SJung-uk Kim UINT32 CacheId; 2281cfd1ed46SJung-uk Kim 2282cfd1ed46SJung-uk Kim } ACPI_PPTT_CACHE_V1; 2283cfd1ed46SJung-uk Kim 2284cfd1ed46SJung-uk Kim 2285ff879b07SJung-uk Kim /* Flags */ 2286ff879b07SJung-uk Kim 2287ff879b07SJung-uk Kim #define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 2288ff879b07SJung-uk Kim #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 2289ff879b07SJung-uk Kim #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 2290ff879b07SJung-uk Kim #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 2291ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 2292ff879b07SJung-uk Kim #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 2293ff879b07SJung-uk Kim #define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 2294cfd1ed46SJung-uk Kim #define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */ 2295ff879b07SJung-uk Kim 2296ff879b07SJung-uk Kim /* Masks for Attributes */ 2297ff879b07SJung-uk Kim 2298ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 2299ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 2300ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 2301ff879b07SJung-uk Kim 2302ff879b07SJung-uk Kim /* Attributes describing cache */ 2303ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ 2304ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ 2305ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ 2306ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ 2307ff879b07SJung-uk Kim 2308ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ 2309ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ 2310ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ 2311ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ 2312ff879b07SJung-uk Kim 2313ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ 2314ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ 2315ff879b07SJung-uk Kim 2316ff879b07SJung-uk Kim /* 2: ID Structure */ 2317ff879b07SJung-uk Kim 2318ff879b07SJung-uk Kim typedef struct acpi_pptt_id 2319ff879b07SJung-uk Kim { 2320ff879b07SJung-uk Kim ACPI_SUBTABLE_HEADER Header; 2321ff879b07SJung-uk Kim UINT16 Reserved; 2322ff879b07SJung-uk Kim UINT32 VendorId; 2323ff879b07SJung-uk Kim UINT64 Level1Id; 2324ff879b07SJung-uk Kim UINT64 Level2Id; 2325ff879b07SJung-uk Kim UINT16 MajorRev; 2326ff879b07SJung-uk Kim UINT16 MinorRev; 2327ff879b07SJung-uk Kim UINT16 SpinRev; 2328ff879b07SJung-uk Kim 2329ff879b07SJung-uk Kim } ACPI_PPTT_ID; 2330ff879b07SJung-uk Kim 2331ff879b07SJung-uk Kim 2332ff879b07SJung-uk Kim /******************************************************************************* 2333ff879b07SJung-uk Kim * 23341970d693SJung-uk Kim * PRMT - Platform Runtime Mechanism Table 23351970d693SJung-uk Kim * Version 1 23361970d693SJung-uk Kim * 23371970d693SJung-uk Kim ******************************************************************************/ 23381970d693SJung-uk Kim 23391970d693SJung-uk Kim typedef struct acpi_table_prmt 23401970d693SJung-uk Kim { 23411970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 23421970d693SJung-uk Kim 23431970d693SJung-uk Kim } ACPI_TABLE_PRMT; 23441970d693SJung-uk Kim 23451970d693SJung-uk Kim typedef struct acpi_table_prmt_header 23461970d693SJung-uk Kim { 23471970d693SJung-uk Kim UINT8 PlatformGuid[16]; 23481970d693SJung-uk Kim UINT32 ModuleInfoOffset; 23491970d693SJung-uk Kim UINT32 ModuleInfoCount; 23501970d693SJung-uk Kim 23511970d693SJung-uk Kim } ACPI_TABLE_PRMT_HEADER; 23521970d693SJung-uk Kim 2353*97c0b5abSJung-uk Kim typedef struct acpi_prmt_module_header 2354*97c0b5abSJung-uk Kim { 2355*97c0b5abSJung-uk Kim UINT16 Revision; 2356*97c0b5abSJung-uk Kim UINT16 Length; 2357*97c0b5abSJung-uk Kim 2358*97c0b5abSJung-uk Kim } ACPI_PRMT_MODULE_HEADER; 2359*97c0b5abSJung-uk Kim 23601970d693SJung-uk Kim typedef struct acpi_prmt_module_info 23611970d693SJung-uk Kim { 23621970d693SJung-uk Kim UINT16 Revision; 23631970d693SJung-uk Kim UINT16 Length; 23641970d693SJung-uk Kim UINT8 ModuleGuid[16]; 23651970d693SJung-uk Kim UINT16 MajorRev; 23661970d693SJung-uk Kim UINT16 MinorRev; 23671970d693SJung-uk Kim UINT16 HandlerInfoCount; 23681970d693SJung-uk Kim UINT32 HandlerInfoOffset; 23691970d693SJung-uk Kim UINT64 MmioListPointer; 23701970d693SJung-uk Kim 23711970d693SJung-uk Kim } ACPI_PRMT_MODULE_INFO; 23721970d693SJung-uk Kim 23731970d693SJung-uk Kim typedef struct acpi_prmt_handler_info 23741970d693SJung-uk Kim { 23751970d693SJung-uk Kim UINT16 Revision; 23761970d693SJung-uk Kim UINT16 Length; 23771970d693SJung-uk Kim UINT8 HandlerGuid[16]; 23781970d693SJung-uk Kim UINT64 HandlerAddress; 23791970d693SJung-uk Kim UINT64 StaticDataBufferAddress; 23801970d693SJung-uk Kim UINT64 AcpiParamBufferAddress; 23811970d693SJung-uk Kim 23821970d693SJung-uk Kim } ACPI_PRMT_HANDLER_INFO; 23831970d693SJung-uk Kim 23841970d693SJung-uk Kim 23851970d693SJung-uk Kim /******************************************************************************* 23861970d693SJung-uk Kim * 2387ff879b07SJung-uk Kim * RASF - RAS Feature Table (ACPI 5.0) 2388ff879b07SJung-uk Kim * Version 1 2389ff879b07SJung-uk Kim * 2390ff879b07SJung-uk Kim ******************************************************************************/ 2391ff879b07SJung-uk Kim 2392ff879b07SJung-uk Kim typedef struct acpi_table_rasf 2393ff879b07SJung-uk Kim { 2394ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2395ff879b07SJung-uk Kim UINT8 ChannelId[12]; 2396ff879b07SJung-uk Kim 2397ff879b07SJung-uk Kim } ACPI_TABLE_RASF; 2398ff879b07SJung-uk Kim 2399ff879b07SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */ 2400ff879b07SJung-uk Kim 2401ff879b07SJung-uk Kim typedef struct acpi_rasf_shared_memory 2402ff879b07SJung-uk Kim { 2403ff879b07SJung-uk Kim UINT32 Signature; 2404ff879b07SJung-uk Kim UINT16 Command; 2405ff879b07SJung-uk Kim UINT16 Status; 2406ff879b07SJung-uk Kim UINT16 Version; 2407ff879b07SJung-uk Kim UINT8 Capabilities[16]; 2408ff879b07SJung-uk Kim UINT8 SetCapabilities[16]; 2409ff879b07SJung-uk Kim UINT16 NumParameterBlocks; 2410ff879b07SJung-uk Kim UINT32 SetCapabilitiesStatus; 2411ff879b07SJung-uk Kim 2412ff879b07SJung-uk Kim } ACPI_RASF_SHARED_MEMORY; 2413ff879b07SJung-uk Kim 2414ff879b07SJung-uk Kim /* RASF Parameter Block Structure Header */ 2415ff879b07SJung-uk Kim 2416ff879b07SJung-uk Kim typedef struct acpi_rasf_parameter_block 2417ff879b07SJung-uk Kim { 2418ff879b07SJung-uk Kim UINT16 Type; 2419ff879b07SJung-uk Kim UINT16 Version; 2420ff879b07SJung-uk Kim UINT16 Length; 2421ff879b07SJung-uk Kim 2422ff879b07SJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK; 2423ff879b07SJung-uk Kim 2424ff879b07SJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */ 2425ff879b07SJung-uk Kim 2426ff879b07SJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter 2427ff879b07SJung-uk Kim { 2428ff879b07SJung-uk Kim ACPI_RASF_PARAMETER_BLOCK Header; 2429ff879b07SJung-uk Kim UINT16 PatrolScrubCommand; 2430ff879b07SJung-uk Kim UINT64 RequestedAddressRange[2]; 2431ff879b07SJung-uk Kim UINT64 ActualAddressRange[2]; 2432ff879b07SJung-uk Kim UINT16 Flags; 2433ff879b07SJung-uk Kim UINT8 RequestedSpeed; 2434ff879b07SJung-uk Kim 2435ff879b07SJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER; 2436ff879b07SJung-uk Kim 2437ff879b07SJung-uk Kim /* Masks for Flags and Speed fields above */ 2438ff879b07SJung-uk Kim 2439ff879b07SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING 1 2440ff879b07SJung-uk Kim #define ACPI_RASF_SPEED (7<<1) 2441ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_SLOW (0<<1) 2442ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM (4<<1) 2443ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_FAST (7<<1) 2444ff879b07SJung-uk Kim 2445ff879b07SJung-uk Kim /* Channel Commands */ 2446ff879b07SJung-uk Kim 2447ff879b07SJung-uk Kim enum AcpiRasfCommands 2448ff879b07SJung-uk Kim { 2449ff879b07SJung-uk Kim ACPI_RASF_EXECUTE_RASF_COMMAND = 1 2450ff879b07SJung-uk Kim }; 2451ff879b07SJung-uk Kim 2452ff879b07SJung-uk Kim /* Platform RAS Capabilities */ 2453ff879b07SJung-uk Kim 2454ff879b07SJung-uk Kim enum AcpiRasfCapabiliities 2455ff879b07SJung-uk Kim { 2456ff879b07SJung-uk Kim ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 2457ff879b07SJung-uk Kim ACPI_SW_PATROL_SCRUB_EXPOSED = 1 2458ff879b07SJung-uk Kim }; 2459ff879b07SJung-uk Kim 2460ff879b07SJung-uk Kim /* Patrol Scrub Commands */ 2461ff879b07SJung-uk Kim 2462ff879b07SJung-uk Kim enum AcpiRasfPatrolScrubCommands 2463ff879b07SJung-uk Kim { 2464ff879b07SJung-uk Kim ACPI_RASF_GET_PATROL_PARAMETERS = 1, 2465ff879b07SJung-uk Kim ACPI_RASF_START_PATROL_SCRUBBER = 2, 2466ff879b07SJung-uk Kim ACPI_RASF_STOP_PATROL_SCRUBBER = 3 2467ff879b07SJung-uk Kim }; 2468ff879b07SJung-uk Kim 2469ff879b07SJung-uk Kim /* Channel Command flags */ 2470ff879b07SJung-uk Kim 2471ff879b07SJung-uk Kim #define ACPI_RASF_GENERATE_SCI (1<<15) 2472ff879b07SJung-uk Kim 2473ff879b07SJung-uk Kim /* Status values */ 2474ff879b07SJung-uk Kim 2475ff879b07SJung-uk Kim enum AcpiRasfStatus 2476ff879b07SJung-uk Kim { 2477ff879b07SJung-uk Kim ACPI_RASF_SUCCESS = 0, 2478ff879b07SJung-uk Kim ACPI_RASF_NOT_VALID = 1, 2479ff879b07SJung-uk Kim ACPI_RASF_NOT_SUPPORTED = 2, 2480ff879b07SJung-uk Kim ACPI_RASF_BUSY = 3, 2481ff879b07SJung-uk Kim ACPI_RASF_FAILED = 4, 2482ff879b07SJung-uk Kim ACPI_RASF_ABORTED = 5, 2483ff879b07SJung-uk Kim ACPI_RASF_INVALID_DATA = 6 2484ff879b07SJung-uk Kim }; 2485ff879b07SJung-uk Kim 2486ff879b07SJung-uk Kim /* Status flags */ 2487ff879b07SJung-uk Kim 2488ff879b07SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE (1) 2489ff879b07SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL (1<<1) 2490ff879b07SJung-uk Kim #define ACPI_RASF_ERROR (1<<2) 2491ff879b07SJung-uk Kim #define ACPI_RASF_STATUS (0x1F<<3) 2492ff879b07SJung-uk Kim 2493ff879b07SJung-uk Kim 2494ff879b07SJung-uk Kim /******************************************************************************* 2495ff879b07SJung-uk Kim * 24961970d693SJung-uk Kim * RGRT - Regulatory Graphics Resource Table 24971970d693SJung-uk Kim * Version 1 24981970d693SJung-uk Kim * 24991970d693SJung-uk Kim * Conforms to "ACPI RGRT" available at: 25001970d693SJung-uk Kim * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/ 25011970d693SJung-uk Kim * 25021970d693SJung-uk Kim ******************************************************************************/ 25031970d693SJung-uk Kim 25041970d693SJung-uk Kim typedef struct acpi_table_rgrt 25051970d693SJung-uk Kim { 25061970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 25071970d693SJung-uk Kim UINT16 Version; 25081970d693SJung-uk Kim UINT8 ImageType; 25091970d693SJung-uk Kim UINT8 Reserved; 25101970d693SJung-uk Kim UINT8 Image[0]; 25111970d693SJung-uk Kim 25121970d693SJung-uk Kim } ACPI_TABLE_RGRT; 25131970d693SJung-uk Kim 25141970d693SJung-uk Kim /* ImageType values */ 25151970d693SJung-uk Kim 25161970d693SJung-uk Kim enum AcpiRgrtImageType 25171970d693SJung-uk Kim { 25181970d693SJung-uk Kim ACPI_RGRT_TYPE_RESERVED0 = 0, 25191970d693SJung-uk Kim ACPI_RGRT_IMAGE_TYPE_PNG = 1, 25201970d693SJung-uk Kim ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 25211970d693SJung-uk Kim }; 25221970d693SJung-uk Kim 25231970d693SJung-uk Kim 25241970d693SJung-uk Kim /******************************************************************************* 25251970d693SJung-uk Kim * 2526ff879b07SJung-uk Kim * SBST - Smart Battery Specification Table 2527ff879b07SJung-uk Kim * Version 1 2528ff879b07SJung-uk Kim * 2529ff879b07SJung-uk Kim ******************************************************************************/ 2530ff879b07SJung-uk Kim 2531ff879b07SJung-uk Kim typedef struct acpi_table_sbst 2532ff879b07SJung-uk Kim { 2533ff879b07SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2534ff879b07SJung-uk Kim UINT32 WarningLevel; 2535ff879b07SJung-uk Kim UINT32 LowLevel; 2536ff879b07SJung-uk Kim UINT32 CriticalLevel; 2537ff879b07SJung-uk Kim 2538ff879b07SJung-uk Kim } ACPI_TABLE_SBST; 2539ff879b07SJung-uk Kim 2540ff879b07SJung-uk Kim 25415f9b24faSJung-uk Kim /******************************************************************************* 25425f9b24faSJung-uk Kim * 25435f9b24faSJung-uk Kim * SDEI - Software Delegated Exception Interface Descriptor Table 25445f9b24faSJung-uk Kim * 25455f9b24faSJung-uk Kim * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, 25465f9b24faSJung-uk Kim * May 8th, 2017. Copyright 2017 ARM Ltd. 25475f9b24faSJung-uk Kim * 25485f9b24faSJung-uk Kim ******************************************************************************/ 25495f9b24faSJung-uk Kim 25505f9b24faSJung-uk Kim typedef struct acpi_table_sdei 25515f9b24faSJung-uk Kim { 25525f9b24faSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 25535f9b24faSJung-uk Kim 25545f9b24faSJung-uk Kim } ACPI_TABLE_SDEI; 25555f9b24faSJung-uk Kim 25569c48c75eSJung-uk Kim 25579c48c75eSJung-uk Kim /******************************************************************************* 25589c48c75eSJung-uk Kim * 2559ff879b07SJung-uk Kim * SDEV - Secure Devices Table (ACPI 6.2) 2560ff879b07SJung-uk Kim * Version 1 2561dcbce41eSJung-uk Kim * 2562dcbce41eSJung-uk Kim ******************************************************************************/ 2563dcbce41eSJung-uk Kim 2564ff879b07SJung-uk Kim typedef struct acpi_table_sdev 2565dcbce41eSJung-uk Kim { 2566dcbce41eSJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2567dcbce41eSJung-uk Kim 2568ff879b07SJung-uk Kim } ACPI_TABLE_SDEV; 2569dcbce41eSJung-uk Kim 2570dcbce41eSJung-uk Kim 2571ff879b07SJung-uk Kim typedef struct acpi_sdev_header 2572d6dd1baeSJung-uk Kim { 2573ff879b07SJung-uk Kim UINT8 Type; 2574ff879b07SJung-uk Kim UINT8 Flags; 2575ff879b07SJung-uk Kim UINT16 Length; 2576d6dd1baeSJung-uk Kim 2577ff879b07SJung-uk Kim } ACPI_SDEV_HEADER; 2578f8146b88SJung-uk Kim 2579d6dd1baeSJung-uk Kim 2580ff879b07SJung-uk Kim /* Values for subtable type above */ 2581d6dd1baeSJung-uk Kim 2582ff879b07SJung-uk Kim enum AcpiSdevType 2583d6dd1baeSJung-uk Kim { 2584ff879b07SJung-uk Kim ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, 2585ff879b07SJung-uk Kim ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, 2586ff879b07SJung-uk Kim ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 2587d6dd1baeSJung-uk Kim }; 2588d6dd1baeSJung-uk Kim 2589ff879b07SJung-uk Kim /* Values for flags above */ 2590d6dd1baeSJung-uk Kim 2591ff879b07SJung-uk Kim #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) 2592cfd1ed46SJung-uk Kim #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1) 2593fe0f0bbbSJung-uk Kim 2594fe0f0bbbSJung-uk Kim /* 2595ff879b07SJung-uk Kim * SDEV subtables 2596fe0f0bbbSJung-uk Kim */ 2597fe0f0bbbSJung-uk Kim 2598ff879b07SJung-uk Kim /* 0: Namespace Device Based Secure Device Structure */ 2599fe0f0bbbSJung-uk Kim 2600ff879b07SJung-uk Kim typedef struct acpi_sdev_namespace 2601fe0f0bbbSJung-uk Kim { 2602ff879b07SJung-uk Kim ACPI_SDEV_HEADER Header; 2603ff879b07SJung-uk Kim UINT16 DeviceIdOffset; 2604ff879b07SJung-uk Kim UINT16 DeviceIdLength; 2605ff879b07SJung-uk Kim UINT16 VendorDataOffset; 2606ff879b07SJung-uk Kim UINT16 VendorDataLength; 2607d6dd1baeSJung-uk Kim 2608ff879b07SJung-uk Kim } ACPI_SDEV_NAMESPACE; 26095ef50723SJung-uk Kim 2610cfd1ed46SJung-uk Kim typedef struct acpi_sdev_secure_component 2611cfd1ed46SJung-uk Kim { 2612cfd1ed46SJung-uk Kim UINT16 SecureComponentOffset; 2613cfd1ed46SJung-uk Kim UINT16 SecureComponentLength; 2614cfd1ed46SJung-uk Kim 2615cfd1ed46SJung-uk Kim } ACPI_SDEV_SECURE_COMPONENT; 2616cfd1ed46SJung-uk Kim 2617cfd1ed46SJung-uk Kim 2618cfd1ed46SJung-uk Kim /* 2619cfd1ed46SJung-uk Kim * SDEV sub-subtables ("Components") for above 2620cfd1ed46SJung-uk Kim */ 2621cfd1ed46SJung-uk Kim typedef struct acpi_sdev_component 2622cfd1ed46SJung-uk Kim { 2623cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 2624cfd1ed46SJung-uk Kim 2625cfd1ed46SJung-uk Kim } ACPI_SDEV_COMPONENT; 2626cfd1ed46SJung-uk Kim 2627cfd1ed46SJung-uk Kim 2628cfd1ed46SJung-uk Kim /* Values for sub-subtable type above */ 2629cfd1ed46SJung-uk Kim 2630cfd1ed46SJung-uk Kim enum AcpiSacType 2631cfd1ed46SJung-uk Kim { 2632cfd1ed46SJung-uk Kim ACPI_SDEV_TYPE_ID_COMPONENT = 0, 2633cfd1ed46SJung-uk Kim ACPI_SDEV_TYPE_MEM_COMPONENT = 1 2634cfd1ed46SJung-uk Kim }; 2635cfd1ed46SJung-uk Kim 2636cfd1ed46SJung-uk Kim typedef struct acpi_sdev_id_component 2637cfd1ed46SJung-uk Kim { 2638cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 2639cfd1ed46SJung-uk Kim UINT16 HardwareIdOffset; 2640cfd1ed46SJung-uk Kim UINT16 HardwareIdLength; 2641cfd1ed46SJung-uk Kim UINT16 SubsystemIdOffset; 2642cfd1ed46SJung-uk Kim UINT16 SubsystemIdLength; 2643cfd1ed46SJung-uk Kim UINT16 HardwareRevision; 2644cfd1ed46SJung-uk Kim UINT8 HardwareRevPresent; 2645cfd1ed46SJung-uk Kim UINT8 ClassCodePresent; 2646cfd1ed46SJung-uk Kim UINT8 PciBaseClass; 2647cfd1ed46SJung-uk Kim UINT8 PciSubClass; 2648cfd1ed46SJung-uk Kim UINT8 PciProgrammingXface; 2649cfd1ed46SJung-uk Kim 2650cfd1ed46SJung-uk Kim } ACPI_SDEV_ID_COMPONENT; 2651cfd1ed46SJung-uk Kim 2652cfd1ed46SJung-uk Kim typedef struct acpi_sdev_mem_component 2653cfd1ed46SJung-uk Kim { 2654cfd1ed46SJung-uk Kim ACPI_SDEV_HEADER Header; 2655cfd1ed46SJung-uk Kim UINT32 Reserved; 2656cfd1ed46SJung-uk Kim UINT64 MemoryBaseAddress; 2657cfd1ed46SJung-uk Kim UINT64 MemoryLength; 2658cfd1ed46SJung-uk Kim 2659cfd1ed46SJung-uk Kim } ACPI_SDEV_MEM_COMPONENT; 2660cfd1ed46SJung-uk Kim 2661cfd1ed46SJung-uk Kim 2662ff879b07SJung-uk Kim /* 1: PCIe Endpoint Device Based Device Structure */ 2663ff879b07SJung-uk Kim 2664ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie 26655ef50723SJung-uk Kim { 2666ff879b07SJung-uk Kim ACPI_SDEV_HEADER Header; 2667ff879b07SJung-uk Kim UINT16 Segment; 2668ff879b07SJung-uk Kim UINT16 StartBus; 2669ff879b07SJung-uk Kim UINT16 PathOffset; 2670ff879b07SJung-uk Kim UINT16 PathLength; 2671ff879b07SJung-uk Kim UINT16 VendorDataOffset; 2672ff879b07SJung-uk Kim UINT16 VendorDataLength; 2673ff879b07SJung-uk Kim 2674ff879b07SJung-uk Kim } ACPI_SDEV_PCIE; 2675ff879b07SJung-uk Kim 2676ff879b07SJung-uk Kim /* 1a: PCIe Endpoint path entry */ 2677ff879b07SJung-uk Kim 2678ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie_path 2679ff879b07SJung-uk Kim { 26805ef50723SJung-uk Kim UINT8 Device; 26815ef50723SJung-uk Kim UINT8 Function; 26825ef50723SJung-uk Kim 2683ff879b07SJung-uk Kim } ACPI_SDEV_PCIE_PATH; 2684af051161SJung-uk Kim 2685af051161SJung-uk Kim 26861970d693SJung-uk Kim /******************************************************************************* 26871970d693SJung-uk Kim * 26881970d693SJung-uk Kim * SVKL - Storage Volume Key Location Table (ACPI 6.4) 26891970d693SJung-uk Kim * From: "Guest-Host-Communication Interface (GHCI) for Intel 26901970d693SJung-uk Kim * Trust Domain Extensions (Intel TDX)". 26911970d693SJung-uk Kim * Version 1 26921970d693SJung-uk Kim * 26931970d693SJung-uk Kim ******************************************************************************/ 26941970d693SJung-uk Kim 26951970d693SJung-uk Kim typedef struct acpi_table_svkl 26961970d693SJung-uk Kim { 26971970d693SJung-uk Kim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 26981970d693SJung-uk Kim UINT32 Count; 26991970d693SJung-uk Kim 27001970d693SJung-uk Kim } ACPI_TABLE_SVKL; 27011970d693SJung-uk Kim 27021970d693SJung-uk Kim typedef struct acpi_svkl_key 27031970d693SJung-uk Kim { 27041970d693SJung-uk Kim UINT16 Type; 27051970d693SJung-uk Kim UINT16 Format; 27061970d693SJung-uk Kim UINT32 Size; 27071970d693SJung-uk Kim UINT64 Address; 27081970d693SJung-uk Kim 27091970d693SJung-uk Kim } ACPI_SVKL_KEY; 27101970d693SJung-uk Kim 27111970d693SJung-uk Kim enum acpi_svkl_type 27121970d693SJung-uk Kim { 27131970d693SJung-uk Kim ACPI_SVKL_TYPE_MAIN_STORAGE = 0, 27141970d693SJung-uk Kim ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */ 27151970d693SJung-uk Kim }; 27161970d693SJung-uk Kim 27171970d693SJung-uk Kim enum acpi_svkl_format 27181970d693SJung-uk Kim { 27191970d693SJung-uk Kim ACPI_SVKL_FORMAT_RAW_BINARY = 0, 27201970d693SJung-uk Kim ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */ 27211970d693SJung-uk Kim }; 27221970d693SJung-uk Kim 27231970d693SJung-uk Kim 2724d6dd1baeSJung-uk Kim /* Reset to default packing */ 2725d6dd1baeSJung-uk Kim 2726d6dd1baeSJung-uk Kim #pragma pack() 2727d6dd1baeSJung-uk Kim 2728d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */ 2729