10d02842fSSascha Wildner /****************************************************************************** 20d02842fSSascha Wildner * 30d02842fSSascha Wildner * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) 40d02842fSSascha Wildner * 50d02842fSSascha Wildner *****************************************************************************/ 60d02842fSSascha Wildner 7b4315fc7SSascha Wildner /****************************************************************************** 8b4315fc7SSascha Wildner * 9b4315fc7SSascha Wildner * 1. Copyright Notice 10b4315fc7SSascha Wildner * 11383048acSSascha Wildner * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp. 120d02842fSSascha Wildner * All rights reserved. 130d02842fSSascha Wildner * 14b4315fc7SSascha Wildner * 2. License 15b4315fc7SSascha Wildner * 16b4315fc7SSascha Wildner * 2.1. This is your license from Intel Corp. under its intellectual property 17b4315fc7SSascha Wildner * rights. You may have additional license terms from the party that provided 18b4315fc7SSascha Wildner * you this software, covering your right to use that party's intellectual 19b4315fc7SSascha Wildner * property rights. 20b4315fc7SSascha Wildner * 21b4315fc7SSascha Wildner * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 22b4315fc7SSascha Wildner * copy of the source code appearing in this file ("Covered Code") an 23b4315fc7SSascha Wildner * irrevocable, perpetual, worldwide license under Intel's copyrights in the 24b4315fc7SSascha Wildner * base code distributed originally by Intel ("Original Intel Code") to copy, 25b4315fc7SSascha Wildner * make derivatives, distribute, use and display any portion of the Covered 26b4315fc7SSascha Wildner * Code in any form, with the right to sublicense such rights; and 27b4315fc7SSascha Wildner * 28b4315fc7SSascha Wildner * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 29b4315fc7SSascha Wildner * license (with the right to sublicense), under only those claims of Intel 30b4315fc7SSascha Wildner * patents that are infringed by the Original Intel Code, to make, use, sell, 31b4315fc7SSascha Wildner * offer to sell, and import the Covered Code and derivative works thereof 32b4315fc7SSascha Wildner * solely to the minimum extent necessary to exercise the above copyright 33b4315fc7SSascha Wildner * license, and in no event shall the patent license extend to any additions 34b4315fc7SSascha Wildner * to or modifications of the Original Intel Code. No other license or right 35b4315fc7SSascha Wildner * is granted directly or by implication, estoppel or otherwise; 36b4315fc7SSascha Wildner * 37b4315fc7SSascha Wildner * The above copyright and patent license is granted only if the following 38b4315fc7SSascha Wildner * conditions are met: 39b4315fc7SSascha Wildner * 40b4315fc7SSascha Wildner * 3. Conditions 41b4315fc7SSascha Wildner * 42b4315fc7SSascha Wildner * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered 44b4315fc7SSascha Wildner * Code or modification with rights to further distribute source must include 45b4315fc7SSascha Wildner * the above Copyright Notice, the above License, this list of Conditions, 46b4315fc7SSascha Wildner * and the following Disclaimer and Export Compliance provision. In addition, 47b4315fc7SSascha Wildner * Licensee must cause all Covered Code to which Licensee contributes to 48b4315fc7SSascha Wildner * contain a file documenting the changes Licensee made to create that Covered 49b4315fc7SSascha Wildner * Code and the date of any change. Licensee must include in that file the 50b4315fc7SSascha Wildner * documentation of any changes made by any predecessor Licensee. Licensee 51b4315fc7SSascha Wildner * must include a prominent statement that the modification is derived, 52b4315fc7SSascha Wildner * directly or indirectly, from Original Intel Code. 53b4315fc7SSascha Wildner * 54b4315fc7SSascha Wildner * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 55b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered 56b4315fc7SSascha Wildner * Code or modification without rights to further distribute source must 57b4315fc7SSascha Wildner * include the following Disclaimer and Export Compliance provision in the 58b4315fc7SSascha Wildner * documentation and/or other materials provided with distribution. In 59b4315fc7SSascha Wildner * addition, Licensee may not authorize further sublicense of source of any 60b4315fc7SSascha Wildner * portion of the Covered Code, and must include terms to the effect that the 61b4315fc7SSascha Wildner * license from Licensee to its licensee is limited to the intellectual 62b4315fc7SSascha Wildner * property embodied in the software Licensee provides to its licensee, and 63b4315fc7SSascha Wildner * not to intellectual property embodied in modifications its licensee may 64b4315fc7SSascha Wildner * make. 65b4315fc7SSascha Wildner * 66b4315fc7SSascha Wildner * 3.3. Redistribution of Executable. Redistribution in executable form of any 67b4315fc7SSascha Wildner * substantial portion of the Covered Code or modification must reproduce the 68b4315fc7SSascha Wildner * above Copyright Notice, and the following Disclaimer and Export Compliance 69b4315fc7SSascha Wildner * provision in the documentation and/or other materials provided with the 70b4315fc7SSascha Wildner * distribution. 71b4315fc7SSascha Wildner * 72b4315fc7SSascha Wildner * 3.4. Intel retains all right, title, and interest in and to the Original 73b4315fc7SSascha Wildner * Intel Code. 74b4315fc7SSascha Wildner * 75b4315fc7SSascha Wildner * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76b4315fc7SSascha Wildner * Intel shall be used in advertising or otherwise to promote the sale, use or 77b4315fc7SSascha Wildner * other dealings in products derived from or relating to the Covered Code 78b4315fc7SSascha Wildner * without prior written authorization from Intel. 79b4315fc7SSascha Wildner * 80b4315fc7SSascha Wildner * 4. Disclaimer and Export Compliance 81b4315fc7SSascha Wildner * 82b4315fc7SSascha Wildner * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83b4315fc7SSascha Wildner * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84b4315fc7SSascha Wildner * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85b4315fc7SSascha Wildner * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86b4315fc7SSascha Wildner * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 87b4315fc7SSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 88b4315fc7SSascha Wildner * PARTICULAR PURPOSE. 89b4315fc7SSascha Wildner * 90b4315fc7SSascha Wildner * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 91b4315fc7SSascha Wildner * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 92b4315fc7SSascha Wildner * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93b4315fc7SSascha Wildner * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 94b4315fc7SSascha Wildner * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95b4315fc7SSascha Wildner * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 96b4315fc7SSascha Wildner * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 97b4315fc7SSascha Wildner * LIMITED REMEDY. 98b4315fc7SSascha Wildner * 99b4315fc7SSascha Wildner * 4.3. Licensee shall not export, either directly or indirectly, any of this 100b4315fc7SSascha Wildner * software or system incorporating such software without first obtaining any 101b4315fc7SSascha Wildner * required license or other approval from the U. S. Department of Commerce or 102b4315fc7SSascha Wildner * any other agency or department of the United States Government. In the 103b4315fc7SSascha Wildner * event Licensee exports any such software from the United States or 104b4315fc7SSascha Wildner * re-exports any such software from a foreign destination, Licensee shall 105b4315fc7SSascha Wildner * ensure that the distribution and export/re-export of the software is in 106b4315fc7SSascha Wildner * compliance with all laws, regulations, orders, or other restrictions of the 107b4315fc7SSascha Wildner * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108b4315fc7SSascha Wildner * any of its subsidiaries will export/re-export any technical data, process, 109b4315fc7SSascha Wildner * software, or service, directly or indirectly, to any country for which the 110b4315fc7SSascha Wildner * United States government or any agency thereof requires an export license, 111b4315fc7SSascha Wildner * other governmental approval, or letter of assurance, without first obtaining 112b4315fc7SSascha Wildner * such license, approval or letter. 113b4315fc7SSascha Wildner * 114b4315fc7SSascha Wildner ***************************************************************************** 115b4315fc7SSascha Wildner * 116b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the 117b4315fc7SSascha Wildner * following license: 118b4315fc7SSascha Wildner * 1190d02842fSSascha Wildner * Redistribution and use in source and binary forms, with or without 1200d02842fSSascha Wildner * modification, are permitted provided that the following conditions 1210d02842fSSascha Wildner * are met: 1220d02842fSSascha Wildner * 1. Redistributions of source code must retain the above copyright 1230d02842fSSascha Wildner * notice, this list of conditions, and the following disclaimer, 1240d02842fSSascha Wildner * without modification. 1250d02842fSSascha Wildner * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1260d02842fSSascha Wildner * substantially similar to the "NO WARRANTY" disclaimer below 1270d02842fSSascha Wildner * ("Disclaimer") and any redistribution must be conditioned upon 1280d02842fSSascha Wildner * including a substantially similar Disclaimer requirement for further 1290d02842fSSascha Wildner * binary redistribution. 1300d02842fSSascha Wildner * 3. Neither the names of the above-listed copyright holders nor the names 1310d02842fSSascha Wildner * of any contributors may be used to endorse or promote products derived 1320d02842fSSascha Wildner * from this software without specific prior written permission. 1330d02842fSSascha Wildner * 134b4315fc7SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 135b4315fc7SSascha Wildner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 136b4315fc7SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 137b4315fc7SSascha Wildner * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 138b4315fc7SSascha Wildner * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 139b4315fc7SSascha Wildner * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 140b4315fc7SSascha Wildner * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 141b4315fc7SSascha Wildner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 142b4315fc7SSascha Wildner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 143b4315fc7SSascha Wildner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 144b4315fc7SSascha Wildner * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 145b4315fc7SSascha Wildner * 146b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the 1470d02842fSSascha Wildner * GNU General Public License ("GPL") version 2 as published by the Free 1480d02842fSSascha Wildner * Software Foundation. 1490d02842fSSascha Wildner * 150b4315fc7SSascha Wildner *****************************************************************************/ 1510d02842fSSascha Wildner 1520d02842fSSascha Wildner #ifndef __ACTBL2_H__ 1530d02842fSSascha Wildner #define __ACTBL2_H__ 1540d02842fSSascha Wildner 1550d02842fSSascha Wildner 1560d02842fSSascha Wildner /******************************************************************************* 1570d02842fSSascha Wildner * 1580d02842fSSascha Wildner * Additional ACPI Tables (2) 1590d02842fSSascha Wildner * 1600d02842fSSascha Wildner * These tables are not consumed directly by the ACPICA subsystem, but are 1610d02842fSSascha Wildner * included here to support device drivers and the AML disassembler. 1620d02842fSSascha Wildner * 1630d02842fSSascha Wildner ******************************************************************************/ 1640d02842fSSascha Wildner 1650d02842fSSascha Wildner 1660d02842fSSascha Wildner /* 1670d02842fSSascha Wildner * Values for description table header signatures for tables defined in this 1680d02842fSSascha Wildner * file. Useful because they make it more difficult to inadvertently type in 1690d02842fSSascha Wildner * the wrong signature. 1700d02842fSSascha Wildner */ 171*aab122a6SSascha Wildner #define ACPI_SIG_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */ 1724898bea4SSascha Wildner #define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */ 173896f2e3aSSascha Wildner #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 1740d02842fSSascha Wildner #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 1759e1c0880SSascha Wildner #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 1767bcb6cafSSascha Wildner #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 1770d02842fSSascha Wildner #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 1780d02842fSSascha Wildner #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 1797bcb6cafSSascha Wildner #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 1807bcb6cafSSascha Wildner #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 1815943f66cSSascha Wildner #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 1827bcb6cafSSascha Wildner #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 18384fe3360SSascha Wildner #define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ 1847bcb6cafSSascha Wildner #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 1857bcb6cafSSascha Wildner #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ 18601d5d5dfSSascha Wildner #define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ 1877bcb6cafSSascha Wildner #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 1887bcb6cafSSascha Wildner #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 1894898bea4SSascha Wildner #define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */ 1907bcb6cafSSascha Wildner #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 1914898bea4SSascha Wildner #define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */ 1927bcb6cafSSascha Wildner #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 1933c639e0cSSascha Wildner #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ 1947bcb6cafSSascha Wildner #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 1954898bea4SSascha Wildner #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ 196*aab122a6SSascha Wildner #define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */ 1970d02842fSSascha Wildner 1980d02842fSSascha Wildner 1990d02842fSSascha Wildner /* 2000d02842fSSascha Wildner * All tables must be byte-packed to match the ACPI specification, since 2010d02842fSSascha Wildner * the tables are provided by the system BIOS. 2020d02842fSSascha Wildner */ 2030d02842fSSascha Wildner #pragma pack(1) 2040d02842fSSascha Wildner 2050d02842fSSascha Wildner /* 2060d02842fSSascha Wildner * Note: C bitfields are not used for this reason: 2070d02842fSSascha Wildner * 2080d02842fSSascha Wildner * "Bitfields are great and easy to read, but unfortunately the C language 2090d02842fSSascha Wildner * does not specify the layout of bitfields in memory, which means they are 2100d02842fSSascha Wildner * essentially useless for dealing with packed data in on-disk formats or 2110d02842fSSascha Wildner * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 2120d02842fSSascha Wildner * this decision was a design error in C. Ritchie could have picked an order 2130d02842fSSascha Wildner * and stuck with it." Norman Ramsey. 2140d02842fSSascha Wildner * See http://stackoverflow.com/a/1053662/41661 2150d02842fSSascha Wildner */ 2160d02842fSSascha Wildner 2170d02842fSSascha Wildner 2180d02842fSSascha Wildner /******************************************************************************* 2190d02842fSSascha Wildner * 2200672a19bSSascha Wildner * AEST - Arm Error Source Table 2210672a19bSSascha Wildner * 2220672a19bSSascha Wildner * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document 2230672a19bSSascha Wildner * September 2020. 2240672a19bSSascha Wildner * 2250672a19bSSascha Wildner ******************************************************************************/ 2260672a19bSSascha Wildner 2270672a19bSSascha Wildner typedef struct acpi_table_aest 2280672a19bSSascha Wildner { 2290672a19bSSascha Wildner ACPI_TABLE_HEADER Header; 2300672a19bSSascha Wildner void *NodeArray[]; 2310672a19bSSascha Wildner 2320672a19bSSascha Wildner } ACPI_TABLE_AEST; 2330672a19bSSascha Wildner 2340672a19bSSascha Wildner /* Common Subtable header - one per Node Structure (Subtable) */ 2350672a19bSSascha Wildner 2360672a19bSSascha Wildner typedef struct acpi_aest_hdr 2370672a19bSSascha Wildner { 2380672a19bSSascha Wildner UINT8 Type; 2390672a19bSSascha Wildner UINT16 Length; 2400672a19bSSascha Wildner UINT8 Reserved; 2410672a19bSSascha Wildner UINT32 NodeSpecificOffset; 2420672a19bSSascha Wildner UINT32 NodeInterfaceOffset; 2430672a19bSSascha Wildner UINT32 NodeInterruptOffset; 2440672a19bSSascha Wildner UINT32 NodeInterruptCount; 2450672a19bSSascha Wildner UINT64 TimestampRate; 2460672a19bSSascha Wildner UINT64 Reserved1; 2470672a19bSSascha Wildner UINT64 ErrorInjectionRate; 2480672a19bSSascha Wildner 2490672a19bSSascha Wildner } ACPI_AEST_HEADER; 2500672a19bSSascha Wildner 2510672a19bSSascha Wildner /* Values for Type above */ 2520672a19bSSascha Wildner 2530672a19bSSascha Wildner #define ACPI_AEST_PROCESSOR_ERROR_NODE 0 2540672a19bSSascha Wildner #define ACPI_AEST_MEMORY_ERROR_NODE 1 2550672a19bSSascha Wildner #define ACPI_AEST_SMMU_ERROR_NODE 2 2560672a19bSSascha Wildner #define ACPI_AEST_VENDOR_ERROR_NODE 3 2570672a19bSSascha Wildner #define ACPI_AEST_GIC_ERROR_NODE 4 2580672a19bSSascha Wildner #define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ 2590672a19bSSascha Wildner 2600672a19bSSascha Wildner 2610672a19bSSascha Wildner /* 2620672a19bSSascha Wildner * AEST subtables (Error nodes) 2630672a19bSSascha Wildner */ 2640672a19bSSascha Wildner 2650672a19bSSascha Wildner /* 0: Processor Error */ 2660672a19bSSascha Wildner 2670672a19bSSascha Wildner typedef struct acpi_aest_processor 2680672a19bSSascha Wildner { 2690672a19bSSascha Wildner UINT32 ProcessorId; 2700672a19bSSascha Wildner UINT8 ResourceType; 2710672a19bSSascha Wildner UINT8 Reserved; 2720672a19bSSascha Wildner UINT8 Flags; 2730672a19bSSascha Wildner UINT8 Revision; 2740672a19bSSascha Wildner UINT64 ProcessorAffinity; 2750672a19bSSascha Wildner 2760672a19bSSascha Wildner } ACPI_AEST_PROCESSOR; 2770672a19bSSascha Wildner 2780672a19bSSascha Wildner /* Values for ResourceType above, related structs below */ 2790672a19bSSascha Wildner 2800672a19bSSascha Wildner #define ACPI_AEST_CACHE_RESOURCE 0 2810672a19bSSascha Wildner #define ACPI_AEST_TLB_RESOURCE 1 2820672a19bSSascha Wildner #define ACPI_AEST_GENERIC_RESOURCE 2 2830672a19bSSascha Wildner #define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ 2840672a19bSSascha Wildner 2850672a19bSSascha Wildner /* 0R: Processor Cache Resource Substructure */ 2860672a19bSSascha Wildner 2870672a19bSSascha Wildner typedef struct acpi_aest_processor_cache 2880672a19bSSascha Wildner { 2890672a19bSSascha Wildner UINT32 CacheReference; 2900672a19bSSascha Wildner UINT32 Reserved; 2910672a19bSSascha Wildner 2920672a19bSSascha Wildner } ACPI_AEST_PROCESSOR_CACHE; 2930672a19bSSascha Wildner 2940672a19bSSascha Wildner /* Values for CacheType above */ 2950672a19bSSascha Wildner 2960672a19bSSascha Wildner #define ACPI_AEST_CACHE_DATA 0 2970672a19bSSascha Wildner #define ACPI_AEST_CACHE_INSTRUCTION 1 2980672a19bSSascha Wildner #define ACPI_AEST_CACHE_UNIFIED 2 2990672a19bSSascha Wildner #define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ 3000672a19bSSascha Wildner 3010672a19bSSascha Wildner /* 1R: Processor TLB Resource Substructure */ 3020672a19bSSascha Wildner 3030672a19bSSascha Wildner typedef struct acpi_aest_processor_tlb 3040672a19bSSascha Wildner { 3050672a19bSSascha Wildner UINT32 TlbLevel; 3060672a19bSSascha Wildner UINT32 Reserved; 3070672a19bSSascha Wildner 3080672a19bSSascha Wildner } ACPI_AEST_PROCESSOR_TLB; 3090672a19bSSascha Wildner 3100672a19bSSascha Wildner /* 2R: Processor Generic Resource Substructure */ 3110672a19bSSascha Wildner 3120672a19bSSascha Wildner typedef struct acpi_aest_processor_generic 3130672a19bSSascha Wildner { 314*aab122a6SSascha Wildner UINT32 Resource; 3150672a19bSSascha Wildner 3160672a19bSSascha Wildner } ACPI_AEST_PROCESSOR_GENERIC; 3170672a19bSSascha Wildner 3180672a19bSSascha Wildner /* 1: Memory Error */ 3190672a19bSSascha Wildner 3200672a19bSSascha Wildner typedef struct acpi_aest_memory 3210672a19bSSascha Wildner { 3220672a19bSSascha Wildner UINT32 SratProximityDomain; 3230672a19bSSascha Wildner 3240672a19bSSascha Wildner } ACPI_AEST_MEMORY; 3250672a19bSSascha Wildner 3260672a19bSSascha Wildner /* 2: Smmu Error */ 3270672a19bSSascha Wildner 3280672a19bSSascha Wildner typedef struct acpi_aest_smmu 3290672a19bSSascha Wildner { 3300672a19bSSascha Wildner UINT32 IortNodeReference; 3310672a19bSSascha Wildner UINT32 SubcomponentReference; 3320672a19bSSascha Wildner 3330672a19bSSascha Wildner } ACPI_AEST_SMMU; 3340672a19bSSascha Wildner 3350672a19bSSascha Wildner /* 3: Vendor Defined */ 3360672a19bSSascha Wildner 3370672a19bSSascha Wildner typedef struct acpi_aest_vendor 3380672a19bSSascha Wildner { 3390672a19bSSascha Wildner UINT32 AcpiHid; 3400672a19bSSascha Wildner UINT32 AcpiUid; 3410672a19bSSascha Wildner UINT8 VendorSpecificData[16]; 3420672a19bSSascha Wildner 3430672a19bSSascha Wildner } ACPI_AEST_VENDOR; 3440672a19bSSascha Wildner 3450672a19bSSascha Wildner /* 4: Gic Error */ 3460672a19bSSascha Wildner 3470672a19bSSascha Wildner typedef struct acpi_aest_gic 3480672a19bSSascha Wildner { 3490672a19bSSascha Wildner UINT32 InterfaceType; 3500672a19bSSascha Wildner UINT32 InstanceId; 3510672a19bSSascha Wildner 3520672a19bSSascha Wildner } ACPI_AEST_GIC; 3530672a19bSSascha Wildner 3540672a19bSSascha Wildner /* Values for InterfaceType above */ 3550672a19bSSascha Wildner 3560672a19bSSascha Wildner #define ACPI_AEST_GIC_CPU 0 3570672a19bSSascha Wildner #define ACPI_AEST_GIC_DISTRIBUTOR 1 3580672a19bSSascha Wildner #define ACPI_AEST_GIC_REDISTRIBUTOR 2 3590672a19bSSascha Wildner #define ACPI_AEST_GIC_ITS 3 3600672a19bSSascha Wildner #define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ 3610672a19bSSascha Wildner 3620672a19bSSascha Wildner 3630672a19bSSascha Wildner /* Node Interface Structure */ 3640672a19bSSascha Wildner 3650672a19bSSascha Wildner typedef struct acpi_aest_node_interface 3660672a19bSSascha Wildner { 3670672a19bSSascha Wildner UINT8 Type; 3680672a19bSSascha Wildner UINT8 Reserved[3]; 3690672a19bSSascha Wildner UINT32 Flags; 3700672a19bSSascha Wildner UINT64 Address; 3710672a19bSSascha Wildner UINT32 ErrorRecordIndex; 3720672a19bSSascha Wildner UINT32 ErrorRecordCount; 3730672a19bSSascha Wildner UINT64 ErrorRecordImplemented; 3740672a19bSSascha Wildner UINT64 ErrorStatusReporting; 3750672a19bSSascha Wildner UINT64 AddressingMode; 3760672a19bSSascha Wildner 3770672a19bSSascha Wildner } ACPI_AEST_NODE_INTERFACE; 3780672a19bSSascha Wildner 3790672a19bSSascha Wildner /* Values for Type field above */ 3800672a19bSSascha Wildner 3810672a19bSSascha Wildner #define ACPI_AEST_NODE_SYSTEM_REGISTER 0 3820672a19bSSascha Wildner #define ACPI_AEST_NODE_MEMORY_MAPPED 1 3830672a19bSSascha Wildner #define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ 3840672a19bSSascha Wildner 3850672a19bSSascha Wildner /* Node Interrupt Structure */ 3860672a19bSSascha Wildner 3870672a19bSSascha Wildner typedef struct acpi_aest_node_interrupt 3880672a19bSSascha Wildner { 3890672a19bSSascha Wildner UINT8 Type; 3900672a19bSSascha Wildner UINT8 Reserved[2]; 3910672a19bSSascha Wildner UINT8 Flags; 3920672a19bSSascha Wildner UINT32 Gsiv; 3930672a19bSSascha Wildner UINT8 IortId; 3940672a19bSSascha Wildner UINT8 Reserved1[3]; 3950672a19bSSascha Wildner 3960672a19bSSascha Wildner } ACPI_AEST_NODE_INTERRUPT; 3970672a19bSSascha Wildner 3980672a19bSSascha Wildner /* Values for Type field above */ 3990672a19bSSascha Wildner 4000672a19bSSascha Wildner #define ACPI_AEST_NODE_FAULT_HANDLING 0 4010672a19bSSascha Wildner #define ACPI_AEST_NODE_ERROR_RECOVERY 1 4020672a19bSSascha Wildner #define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ 4030672a19bSSascha Wildner 4040672a19bSSascha Wildner 4050672a19bSSascha Wildner /******************************************************************************* 406*aab122a6SSascha Wildner * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface 407*aab122a6SSascha Wildner * 408*aab122a6SSascha Wildner * Conforms to "ACPI for Arm Components 1.1, Platform Design Document" 409*aab122a6SSascha Wildner * ARM DEN0093 v1.1 410*aab122a6SSascha Wildner * 411*aab122a6SSascha Wildner ******************************************************************************/ 412*aab122a6SSascha Wildner typedef struct acpi_table_agdi 413*aab122a6SSascha Wildner { 414*aab122a6SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 415*aab122a6SSascha Wildner UINT8 Flags; 416*aab122a6SSascha Wildner UINT8 Reserved[3]; 417*aab122a6SSascha Wildner UINT32 SdeiEvent; 418*aab122a6SSascha Wildner UINT32 Gsiv; 419*aab122a6SSascha Wildner 420*aab122a6SSascha Wildner } ACPI_TABLE_AGDI; 421*aab122a6SSascha Wildner 422*aab122a6SSascha Wildner /* Mask for Flags field above */ 423*aab122a6SSascha Wildner 424*aab122a6SSascha Wildner #define ACPI_AGDI_SIGNALING_MODE (1) 425*aab122a6SSascha Wildner 426*aab122a6SSascha Wildner 427*aab122a6SSascha Wildner /******************************************************************************* 4280672a19bSSascha Wildner * 4294898bea4SSascha Wildner * BDAT - BIOS Data ACPI Table 4304898bea4SSascha Wildner * 4314898bea4SSascha Wildner * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5 4324898bea4SSascha Wildner * Nov 2020 4334898bea4SSascha Wildner * 4344898bea4SSascha Wildner ******************************************************************************/ 4354898bea4SSascha Wildner 4364898bea4SSascha Wildner typedef struct acpi_table_bdat 4374898bea4SSascha Wildner { 4384898bea4SSascha Wildner ACPI_TABLE_HEADER Header; 4394898bea4SSascha Wildner ACPI_GENERIC_ADDRESS Gas; 4404898bea4SSascha Wildner 4414898bea4SSascha Wildner } ACPI_TABLE_BDAT; 4424898bea4SSascha Wildner 4434898bea4SSascha Wildner 4444898bea4SSascha Wildner /******************************************************************************* 4454898bea4SSascha Wildner * 446896f2e3aSSascha Wildner * IORT - IO Remapping Table 447896f2e3aSSascha Wildner * 448896f2e3aSSascha Wildner * Conforms to "IO Remapping Table System Software on ARM Platforms", 44901d5d5dfSSascha Wildner * Document number: ARM DEN 0049E.b, Feb 2021 450896f2e3aSSascha Wildner * 451896f2e3aSSascha Wildner ******************************************************************************/ 452896f2e3aSSascha Wildner 453896f2e3aSSascha Wildner typedef struct acpi_table_iort 454896f2e3aSSascha Wildner { 455896f2e3aSSascha Wildner ACPI_TABLE_HEADER Header; 456896f2e3aSSascha Wildner UINT32 NodeCount; 457896f2e3aSSascha Wildner UINT32 NodeOffset; 458896f2e3aSSascha Wildner UINT32 Reserved; 459896f2e3aSSascha Wildner 460896f2e3aSSascha Wildner } ACPI_TABLE_IORT; 461896f2e3aSSascha Wildner 462896f2e3aSSascha Wildner 463896f2e3aSSascha Wildner /* 464896f2e3aSSascha Wildner * IORT subtables 465896f2e3aSSascha Wildner */ 466896f2e3aSSascha Wildner typedef struct acpi_iort_node 467896f2e3aSSascha Wildner { 468896f2e3aSSascha Wildner UINT8 Type; 469896f2e3aSSascha Wildner UINT16 Length; 470896f2e3aSSascha Wildner UINT8 Revision; 47101d5d5dfSSascha Wildner UINT32 Identifier; 472896f2e3aSSascha Wildner UINT32 MappingCount; 473896f2e3aSSascha Wildner UINT32 MappingOffset; 474896f2e3aSSascha Wildner char NodeData[1]; 475896f2e3aSSascha Wildner 476896f2e3aSSascha Wildner } ACPI_IORT_NODE; 477896f2e3aSSascha Wildner 478896f2e3aSSascha Wildner /* Values for subtable Type above */ 479896f2e3aSSascha Wildner 480896f2e3aSSascha Wildner enum AcpiIortNodeType 481896f2e3aSSascha Wildner { 482896f2e3aSSascha Wildner ACPI_IORT_NODE_ITS_GROUP = 0x00, 483896f2e3aSSascha Wildner ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 484896f2e3aSSascha Wildner ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 4852ffe9f16SSascha Wildner ACPI_IORT_NODE_SMMU = 0x03, 486e416ee21SSascha Wildner ACPI_IORT_NODE_SMMU_V3 = 0x04, 48701d5d5dfSSascha Wildner ACPI_IORT_NODE_PMCG = 0x05, 48801d5d5dfSSascha Wildner ACPI_IORT_NODE_RMR = 0x06, 489896f2e3aSSascha Wildner }; 490896f2e3aSSascha Wildner 491896f2e3aSSascha Wildner 492896f2e3aSSascha Wildner typedef struct acpi_iort_id_mapping 493896f2e3aSSascha Wildner { 494896f2e3aSSascha Wildner UINT32 InputBase; /* Lowest value in input range */ 495896f2e3aSSascha Wildner UINT32 IdCount; /* Number of IDs */ 496896f2e3aSSascha Wildner UINT32 OutputBase; /* Lowest value in output range */ 497896f2e3aSSascha Wildner UINT32 OutputReference; /* A reference to the output node */ 498896f2e3aSSascha Wildner UINT32 Flags; 499896f2e3aSSascha Wildner 500896f2e3aSSascha Wildner } ACPI_IORT_ID_MAPPING; 501896f2e3aSSascha Wildner 502896f2e3aSSascha Wildner /* Masks for Flags field above for IORT subtable */ 503896f2e3aSSascha Wildner 504896f2e3aSSascha Wildner #define ACPI_IORT_ID_SINGLE_MAPPING (1) 505896f2e3aSSascha Wildner 506896f2e3aSSascha Wildner 507896f2e3aSSascha Wildner typedef struct acpi_iort_memory_access 508896f2e3aSSascha Wildner { 509896f2e3aSSascha Wildner UINT32 CacheCoherency; 510896f2e3aSSascha Wildner UINT8 Hints; 511896f2e3aSSascha Wildner UINT16 Reserved; 512896f2e3aSSascha Wildner UINT8 MemoryFlags; 513896f2e3aSSascha Wildner 514896f2e3aSSascha Wildner } ACPI_IORT_MEMORY_ACCESS; 515896f2e3aSSascha Wildner 516896f2e3aSSascha Wildner /* Values for CacheCoherency field above */ 517896f2e3aSSascha Wildner 518896f2e3aSSascha Wildner #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 519896f2e3aSSascha Wildner #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 520896f2e3aSSascha Wildner 521896f2e3aSSascha Wildner /* Masks for Hints field above */ 522896f2e3aSSascha Wildner 523896f2e3aSSascha Wildner #define ACPI_IORT_HT_TRANSIENT (1) 524896f2e3aSSascha Wildner #define ACPI_IORT_HT_WRITE (1<<1) 525896f2e3aSSascha Wildner #define ACPI_IORT_HT_READ (1<<2) 526896f2e3aSSascha Wildner #define ACPI_IORT_HT_OVERRIDE (1<<3) 527896f2e3aSSascha Wildner 528896f2e3aSSascha Wildner /* Masks for MemoryFlags field above */ 529896f2e3aSSascha Wildner 530896f2e3aSSascha Wildner #define ACPI_IORT_MF_COHERENCY (1) 531896f2e3aSSascha Wildner #define ACPI_IORT_MF_ATTRIBUTES (1<<1) 532896f2e3aSSascha Wildner 533896f2e3aSSascha Wildner 534896f2e3aSSascha Wildner /* 535896f2e3aSSascha Wildner * IORT node specific subtables 536896f2e3aSSascha Wildner */ 537896f2e3aSSascha Wildner typedef struct acpi_iort_its_group 538896f2e3aSSascha Wildner { 539896f2e3aSSascha Wildner UINT32 ItsCount; 54000ffa116SSascha Wildner UINT32 Identifiers[1]; /* GIC ITS identifier array */ 541896f2e3aSSascha Wildner 542896f2e3aSSascha Wildner } ACPI_IORT_ITS_GROUP; 543896f2e3aSSascha Wildner 544896f2e3aSSascha Wildner 545896f2e3aSSascha Wildner typedef struct acpi_iort_named_component 546896f2e3aSSascha Wildner { 547896f2e3aSSascha Wildner UINT32 NodeFlags; 548896f2e3aSSascha Wildner UINT64 MemoryProperties; /* Memory access properties */ 549896f2e3aSSascha Wildner UINT8 MemoryAddressLimit; /* Memory address size limit */ 550896f2e3aSSascha Wildner char DeviceName[1]; /* Path of namespace object */ 551896f2e3aSSascha Wildner 552896f2e3aSSascha Wildner } ACPI_IORT_NAMED_COMPONENT; 553896f2e3aSSascha Wildner 554e416ee21SSascha Wildner /* Masks for Flags field above */ 555e416ee21SSascha Wildner 556e416ee21SSascha Wildner #define ACPI_IORT_NC_STALL_SUPPORTED (1) 557e416ee21SSascha Wildner #define ACPI_IORT_NC_PASID_BITS (31<<1) 558896f2e3aSSascha Wildner 559896f2e3aSSascha Wildner typedef struct acpi_iort_root_complex 560896f2e3aSSascha Wildner { 561896f2e3aSSascha Wildner UINT64 MemoryProperties; /* Memory access properties */ 562896f2e3aSSascha Wildner UINT32 AtsAttribute; 563896f2e3aSSascha Wildner UINT32 PciSegmentNumber; 564e416ee21SSascha Wildner UINT8 MemoryAddressLimit; /* Memory address size limit */ 565e416ee21SSascha Wildner UINT8 Reserved[3]; /* Reserved, must be zero */ 566896f2e3aSSascha Wildner 567896f2e3aSSascha Wildner } ACPI_IORT_ROOT_COMPLEX; 568896f2e3aSSascha Wildner 56901d5d5dfSSascha Wildner /* Masks for AtsAttribute field above */ 570896f2e3aSSascha Wildner 57101d5d5dfSSascha Wildner #define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */ 57201d5d5dfSSascha Wildner #define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */ 57301d5d5dfSSascha Wildner #define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */ 574896f2e3aSSascha Wildner 575896f2e3aSSascha Wildner 576896f2e3aSSascha Wildner typedef struct acpi_iort_smmu 577896f2e3aSSascha Wildner { 578896f2e3aSSascha Wildner UINT64 BaseAddress; /* SMMU base address */ 579896f2e3aSSascha Wildner UINT64 Span; /* Length of memory range */ 580896f2e3aSSascha Wildner UINT32 Model; 581896f2e3aSSascha Wildner UINT32 Flags; 582896f2e3aSSascha Wildner UINT32 GlobalInterruptOffset; 583896f2e3aSSascha Wildner UINT32 ContextInterruptCount; 584896f2e3aSSascha Wildner UINT32 ContextInterruptOffset; 585896f2e3aSSascha Wildner UINT32 PmuInterruptCount; 586896f2e3aSSascha Wildner UINT32 PmuInterruptOffset; 587896f2e3aSSascha Wildner UINT64 Interrupts[1]; /* Interrupt array */ 588896f2e3aSSascha Wildner 589896f2e3aSSascha Wildner } ACPI_IORT_SMMU; 590896f2e3aSSascha Wildner 591896f2e3aSSascha Wildner /* Values for Model field above */ 592896f2e3aSSascha Wildner 593896f2e3aSSascha Wildner #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 594896f2e3aSSascha Wildner #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 595896f2e3aSSascha Wildner #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 596896f2e3aSSascha Wildner #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 5971093ca81SSascha Wildner #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ 5981093ca81SSascha Wildner #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ 599896f2e3aSSascha Wildner 600896f2e3aSSascha Wildner /* Masks for Flags field above */ 601896f2e3aSSascha Wildner 602896f2e3aSSascha Wildner #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 603896f2e3aSSascha Wildner #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 604896f2e3aSSascha Wildner 605d638c6eeSSascha Wildner /* Global interrupt format */ 606d638c6eeSSascha Wildner 607d638c6eeSSascha Wildner typedef struct acpi_iort_smmu_gsi 608d638c6eeSSascha Wildner { 609d638c6eeSSascha Wildner UINT32 NSgIrpt; 610d638c6eeSSascha Wildner UINT32 NSgIrptFlags; 611d638c6eeSSascha Wildner UINT32 NSgCfgIrpt; 612d638c6eeSSascha Wildner UINT32 NSgCfgIrptFlags; 613cf6b3eb1SSascha Wildner 614d638c6eeSSascha Wildner } ACPI_IORT_SMMU_GSI; 615d638c6eeSSascha Wildner 616896f2e3aSSascha Wildner 6172ffe9f16SSascha Wildner typedef struct acpi_iort_smmu_v3 6182ffe9f16SSascha Wildner { 6192ffe9f16SSascha Wildner UINT64 BaseAddress; /* SMMUv3 base address */ 6202ffe9f16SSascha Wildner UINT32 Flags; 6212ffe9f16SSascha Wildner UINT32 Reserved; 6222ffe9f16SSascha Wildner UINT64 VatosAddress; 6231093ca81SSascha Wildner UINT32 Model; 6242ffe9f16SSascha Wildner UINT32 EventGsiv; 6252ffe9f16SSascha Wildner UINT32 PriGsiv; 6262ffe9f16SSascha Wildner UINT32 GerrGsiv; 6272ffe9f16SSascha Wildner UINT32 SyncGsiv; 628e416ee21SSascha Wildner UINT32 Pxm; 6297bcb6cafSSascha Wildner UINT32 IdMappingIndex; 6302ffe9f16SSascha Wildner 6312ffe9f16SSascha Wildner } ACPI_IORT_SMMU_V3; 6322ffe9f16SSascha Wildner 6331093ca81SSascha Wildner /* Values for Model field above */ 6341093ca81SSascha Wildner 6351093ca81SSascha Wildner #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ 6361093ca81SSascha Wildner #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ 6371093ca81SSascha Wildner #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ 6381093ca81SSascha Wildner 6392ffe9f16SSascha Wildner /* Masks for Flags field above */ 6402ffe9f16SSascha Wildner 6412ffe9f16SSascha Wildner #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 642e416ee21SSascha Wildner #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1) 6431093ca81SSascha Wildner #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) 6442ffe9f16SSascha Wildner 645e416ee21SSascha Wildner typedef struct acpi_iort_pmcg 646e416ee21SSascha Wildner { 647e416ee21SSascha Wildner UINT64 Page0BaseAddress; 648e416ee21SSascha Wildner UINT32 OverflowGsiv; 649e416ee21SSascha Wildner UINT32 NodeReference; 650e416ee21SSascha Wildner UINT64 Page1BaseAddress; 651e416ee21SSascha Wildner 652e416ee21SSascha Wildner } ACPI_IORT_PMCG; 653e416ee21SSascha Wildner 65401d5d5dfSSascha Wildner typedef struct acpi_iort_rmr { 65501d5d5dfSSascha Wildner UINT32 Flags; 65601d5d5dfSSascha Wildner UINT32 RmrCount; 65701d5d5dfSSascha Wildner UINT32 RmrOffset; 65801d5d5dfSSascha Wildner 65901d5d5dfSSascha Wildner } ACPI_IORT_RMR; 66001d5d5dfSSascha Wildner 66101d5d5dfSSascha Wildner typedef struct acpi_iort_rmr_desc { 66201d5d5dfSSascha Wildner UINT64 BaseAddress; 66301d5d5dfSSascha Wildner UINT64 Length; 66401d5d5dfSSascha Wildner UINT32 Reserved; 66501d5d5dfSSascha Wildner 66601d5d5dfSSascha Wildner } ACPI_IORT_RMR_DESC; 6672ffe9f16SSascha Wildner 668896f2e3aSSascha Wildner /******************************************************************************* 669896f2e3aSSascha Wildner * 6700d02842fSSascha Wildner * IVRS - I/O Virtualization Reporting Structure 6710d02842fSSascha Wildner * Version 1 6720d02842fSSascha Wildner * 6730d02842fSSascha Wildner * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 6740d02842fSSascha Wildner * Revision 1.26, February 2009. 6750d02842fSSascha Wildner * 6760d02842fSSascha Wildner ******************************************************************************/ 6770d02842fSSascha Wildner 6780d02842fSSascha Wildner typedef struct acpi_table_ivrs 6790d02842fSSascha Wildner { 6800d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 6810d02842fSSascha Wildner UINT32 Info; /* Common virtualization info */ 6820d02842fSSascha Wildner UINT64 Reserved; 6830d02842fSSascha Wildner 6840d02842fSSascha Wildner } ACPI_TABLE_IVRS; 6850d02842fSSascha Wildner 6860d02842fSSascha Wildner /* Values for Info field above */ 6870d02842fSSascha Wildner 6880d02842fSSascha Wildner #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 6890d02842fSSascha Wildner #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 6900d02842fSSascha Wildner #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 6910d02842fSSascha Wildner 6920d02842fSSascha Wildner 6930d02842fSSascha Wildner /* IVRS subtable header */ 6940d02842fSSascha Wildner 6950d02842fSSascha Wildner typedef struct acpi_ivrs_header 6960d02842fSSascha Wildner { 6970d02842fSSascha Wildner UINT8 Type; /* Subtable type */ 6980d02842fSSascha Wildner UINT8 Flags; 6990d02842fSSascha Wildner UINT16 Length; /* Subtable length */ 7000d02842fSSascha Wildner UINT16 DeviceId; /* ID of IOMMU */ 7010d02842fSSascha Wildner 7020d02842fSSascha Wildner } ACPI_IVRS_HEADER; 7030d02842fSSascha Wildner 7040d02842fSSascha Wildner /* Values for subtable Type above */ 7050d02842fSSascha Wildner 7060d02842fSSascha Wildner enum AcpiIvrsType 7070d02842fSSascha Wildner { 70871c97a3cSSascha Wildner ACPI_IVRS_TYPE_HARDWARE1 = 0x10, 70971c97a3cSSascha Wildner ACPI_IVRS_TYPE_HARDWARE2 = 0x11, 71001d5d5dfSSascha Wildner ACPI_IVRS_TYPE_HARDWARE3 = 0x40, 7110d02842fSSascha Wildner ACPI_IVRS_TYPE_MEMORY1 = 0x20, 7120d02842fSSascha Wildner ACPI_IVRS_TYPE_MEMORY2 = 0x21, 7130d02842fSSascha Wildner ACPI_IVRS_TYPE_MEMORY3 = 0x22 7140d02842fSSascha Wildner }; 7150d02842fSSascha Wildner 7160d02842fSSascha Wildner /* Masks for Flags field above for IVHD subtable */ 7170d02842fSSascha Wildner 7180d02842fSSascha Wildner #define ACPI_IVHD_TT_ENABLE (1) 7190d02842fSSascha Wildner #define ACPI_IVHD_PASS_PW (1<<1) 7200d02842fSSascha Wildner #define ACPI_IVHD_RES_PASS_PW (1<<2) 7210d02842fSSascha Wildner #define ACPI_IVHD_ISOC (1<<3) 7220d02842fSSascha Wildner #define ACPI_IVHD_IOTLB (1<<4) 7230d02842fSSascha Wildner 7240d02842fSSascha Wildner /* Masks for Flags field above for IVMD subtable */ 7250d02842fSSascha Wildner 7260d02842fSSascha Wildner #define ACPI_IVMD_UNITY (1) 7270d02842fSSascha Wildner #define ACPI_IVMD_READ (1<<1) 7280d02842fSSascha Wildner #define ACPI_IVMD_WRITE (1<<2) 7290d02842fSSascha Wildner #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 7300d02842fSSascha Wildner 7310d02842fSSascha Wildner 7320d02842fSSascha Wildner /* 7330d02842fSSascha Wildner * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER 7340d02842fSSascha Wildner */ 7350d02842fSSascha Wildner 7360d02842fSSascha Wildner /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 7370d02842fSSascha Wildner 73871c97a3cSSascha Wildner typedef struct acpi_ivrs_hardware_10 7390d02842fSSascha Wildner { 7400d02842fSSascha Wildner ACPI_IVRS_HEADER Header; 7410d02842fSSascha Wildner UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 7420d02842fSSascha Wildner UINT64 BaseAddress; /* IOMMU control registers */ 7430d02842fSSascha Wildner UINT16 PciSegmentGroup; 7440d02842fSSascha Wildner UINT16 Info; /* MSI number and unit ID */ 74571c97a3cSSascha Wildner UINT32 FeatureReporting; 7460d02842fSSascha Wildner 74771c97a3cSSascha Wildner } ACPI_IVRS_HARDWARE1; 74871c97a3cSSascha Wildner 74971c97a3cSSascha Wildner /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ 75071c97a3cSSascha Wildner 75171c97a3cSSascha Wildner typedef struct acpi_ivrs_hardware_11 75271c97a3cSSascha Wildner { 75371c97a3cSSascha Wildner ACPI_IVRS_HEADER Header; 75471c97a3cSSascha Wildner UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 75571c97a3cSSascha Wildner UINT64 BaseAddress; /* IOMMU control registers */ 75671c97a3cSSascha Wildner UINT16 PciSegmentGroup; 75771c97a3cSSascha Wildner UINT16 Info; /* MSI number and unit ID */ 75871c97a3cSSascha Wildner UINT32 Attributes; 75971c97a3cSSascha Wildner UINT64 EfrRegisterImage; 76071c97a3cSSascha Wildner UINT64 Reserved; 76171c97a3cSSascha Wildner } ACPI_IVRS_HARDWARE2; 7620d02842fSSascha Wildner 7630d02842fSSascha Wildner /* Masks for Info field above */ 7640d02842fSSascha Wildner 7650d02842fSSascha Wildner #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 7660d02842fSSascha Wildner #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ 7670d02842fSSascha Wildner 7680d02842fSSascha Wildner 7690d02842fSSascha Wildner /* 7700d02842fSSascha Wildner * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. 7710d02842fSSascha Wildner * Upper two bits of the Type field are the (encoded) length of the structure. 7720d02842fSSascha Wildner * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 7730d02842fSSascha Wildner * are reserved for future use but not defined. 7740d02842fSSascha Wildner */ 7750d02842fSSascha Wildner typedef struct acpi_ivrs_de_header 7760d02842fSSascha Wildner { 7770d02842fSSascha Wildner UINT8 Type; 7780d02842fSSascha Wildner UINT16 Id; 7790d02842fSSascha Wildner UINT8 DataSetting; 7800d02842fSSascha Wildner 7810d02842fSSascha Wildner } ACPI_IVRS_DE_HEADER; 7820d02842fSSascha Wildner 7830d02842fSSascha Wildner /* Length of device entry is in the top two bits of Type field above */ 7840d02842fSSascha Wildner 7850d02842fSSascha Wildner #define ACPI_IVHD_ENTRY_LENGTH 0xC0 7860d02842fSSascha Wildner 7870d02842fSSascha Wildner /* Values for device entry Type field above */ 7880d02842fSSascha Wildner 7890d02842fSSascha Wildner enum AcpiIvrsDeviceEntryType 7900d02842fSSascha Wildner { 7910d02842fSSascha Wildner /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ 7920d02842fSSascha Wildner 7930d02842fSSascha Wildner ACPI_IVRS_TYPE_PAD4 = 0, 7940d02842fSSascha Wildner ACPI_IVRS_TYPE_ALL = 1, 7950d02842fSSascha Wildner ACPI_IVRS_TYPE_SELECT = 2, 7960d02842fSSascha Wildner ACPI_IVRS_TYPE_START = 3, 7970d02842fSSascha Wildner ACPI_IVRS_TYPE_END = 4, 7980d02842fSSascha Wildner 7990d02842fSSascha Wildner /* 8-byte device entries */ 8000d02842fSSascha Wildner 8010d02842fSSascha Wildner ACPI_IVRS_TYPE_PAD8 = 64, 8020d02842fSSascha Wildner ACPI_IVRS_TYPE_NOT_USED = 65, 8030d02842fSSascha Wildner ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ 8040d02842fSSascha Wildner ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ 8050d02842fSSascha Wildner ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ 8060d02842fSSascha Wildner ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ 80701d5d5dfSSascha Wildner ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses ACPI_IVRS_DEVICE8C */ 80801d5d5dfSSascha Wildner 80901d5d5dfSSascha Wildner /* Variable-length device entries */ 81001d5d5dfSSascha Wildner 81101d5d5dfSSascha Wildner ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */ 8120d02842fSSascha Wildner }; 8130d02842fSSascha Wildner 8140d02842fSSascha Wildner /* Values for Data field above */ 8150d02842fSSascha Wildner 8160d02842fSSascha Wildner #define ACPI_IVHD_INIT_PASS (1) 8170d02842fSSascha Wildner #define ACPI_IVHD_EINT_PASS (1<<1) 8180d02842fSSascha Wildner #define ACPI_IVHD_NMI_PASS (1<<2) 8190d02842fSSascha Wildner #define ACPI_IVHD_SYSTEM_MGMT (3<<4) 8200d02842fSSascha Wildner #define ACPI_IVHD_LINT0_PASS (1<<6) 8210d02842fSSascha Wildner #define ACPI_IVHD_LINT1_PASS (1<<7) 8220d02842fSSascha Wildner 8230d02842fSSascha Wildner 8240d02842fSSascha Wildner /* Types 0-4: 4-byte device entry */ 8250d02842fSSascha Wildner 8260d02842fSSascha Wildner typedef struct acpi_ivrs_device4 8270d02842fSSascha Wildner { 8280d02842fSSascha Wildner ACPI_IVRS_DE_HEADER Header; 8290d02842fSSascha Wildner 8300d02842fSSascha Wildner } ACPI_IVRS_DEVICE4; 8310d02842fSSascha Wildner 8320d02842fSSascha Wildner /* Types 66-67: 8-byte device entry */ 8330d02842fSSascha Wildner 8340d02842fSSascha Wildner typedef struct acpi_ivrs_device8a 8350d02842fSSascha Wildner { 8360d02842fSSascha Wildner ACPI_IVRS_DE_HEADER Header; 8370d02842fSSascha Wildner UINT8 Reserved1; 8380d02842fSSascha Wildner UINT16 UsedId; 8390d02842fSSascha Wildner UINT8 Reserved2; 8400d02842fSSascha Wildner 8410d02842fSSascha Wildner } ACPI_IVRS_DEVICE8A; 8420d02842fSSascha Wildner 8430d02842fSSascha Wildner /* Types 70-71: 8-byte device entry */ 8440d02842fSSascha Wildner 8450d02842fSSascha Wildner typedef struct acpi_ivrs_device8b 8460d02842fSSascha Wildner { 8470d02842fSSascha Wildner ACPI_IVRS_DE_HEADER Header; 8480d02842fSSascha Wildner UINT32 ExtendedData; 8490d02842fSSascha Wildner 8500d02842fSSascha Wildner } ACPI_IVRS_DEVICE8B; 8510d02842fSSascha Wildner 8520d02842fSSascha Wildner /* Values for ExtendedData above */ 8530d02842fSSascha Wildner 8540d02842fSSascha Wildner #define ACPI_IVHD_ATS_DISABLED (1<<31) 8550d02842fSSascha Wildner 8560d02842fSSascha Wildner /* Type 72: 8-byte device entry */ 8570d02842fSSascha Wildner 8580d02842fSSascha Wildner typedef struct acpi_ivrs_device8c 8590d02842fSSascha Wildner { 8600d02842fSSascha Wildner ACPI_IVRS_DE_HEADER Header; 8610d02842fSSascha Wildner UINT8 Handle; 8620d02842fSSascha Wildner UINT16 UsedId; 8630d02842fSSascha Wildner UINT8 Variety; 8640d02842fSSascha Wildner 8650d02842fSSascha Wildner } ACPI_IVRS_DEVICE8C; 8660d02842fSSascha Wildner 8670d02842fSSascha Wildner /* Values for Variety field above */ 8680d02842fSSascha Wildner 8690d02842fSSascha Wildner #define ACPI_IVHD_IOAPIC 1 8700d02842fSSascha Wildner #define ACPI_IVHD_HPET 2 8710d02842fSSascha Wildner 87201d5d5dfSSascha Wildner /* Type 240: variable-length device entry */ 87301d5d5dfSSascha Wildner 87401d5d5dfSSascha Wildner typedef struct acpi_ivrs_device_hid 87501d5d5dfSSascha Wildner { 87601d5d5dfSSascha Wildner ACPI_IVRS_DE_HEADER Header; 87701d5d5dfSSascha Wildner UINT64 AcpiHid; 87801d5d5dfSSascha Wildner UINT64 AcpiCid; 87901d5d5dfSSascha Wildner UINT8 UidType; 88001d5d5dfSSascha Wildner UINT8 UidLength; 88101d5d5dfSSascha Wildner 88201d5d5dfSSascha Wildner } ACPI_IVRS_DEVICE_HID; 88301d5d5dfSSascha Wildner 8844898bea4SSascha Wildner /* Values for UidType above */ 8854898bea4SSascha Wildner 8864898bea4SSascha Wildner #define ACPI_IVRS_UID_NOT_PRESENT 0 8874898bea4SSascha Wildner #define ACPI_IVRS_UID_IS_INTEGER 1 8884898bea4SSascha Wildner #define ACPI_IVRS_UID_IS_STRING 2 8890d02842fSSascha Wildner 8900d02842fSSascha Wildner /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 8910d02842fSSascha Wildner 8920d02842fSSascha Wildner typedef struct acpi_ivrs_memory 8930d02842fSSascha Wildner { 8940d02842fSSascha Wildner ACPI_IVRS_HEADER Header; 8950d02842fSSascha Wildner UINT16 AuxData; 8960d02842fSSascha Wildner UINT64 Reserved; 8970d02842fSSascha Wildner UINT64 StartAddress; 8980d02842fSSascha Wildner UINT64 MemoryLength; 8990d02842fSSascha Wildner 9000d02842fSSascha Wildner } ACPI_IVRS_MEMORY; 9010d02842fSSascha Wildner 9020d02842fSSascha Wildner 9030d02842fSSascha Wildner /******************************************************************************* 9040d02842fSSascha Wildner * 9059e1c0880SSascha Wildner * LPIT - Low Power Idle Table 9069e1c0880SSascha Wildner * 907896f2e3aSSascha Wildner * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 9089e1c0880SSascha Wildner * 9099e1c0880SSascha Wildner ******************************************************************************/ 9109e1c0880SSascha Wildner 9119e1c0880SSascha Wildner typedef struct acpi_table_lpit 9129e1c0880SSascha Wildner { 9139e1c0880SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 9149e1c0880SSascha Wildner 9159e1c0880SSascha Wildner } ACPI_TABLE_LPIT; 9169e1c0880SSascha Wildner 9179e1c0880SSascha Wildner 9189e1c0880SSascha Wildner /* LPIT subtable header */ 9199e1c0880SSascha Wildner 9209e1c0880SSascha Wildner typedef struct acpi_lpit_header 9219e1c0880SSascha Wildner { 9229e1c0880SSascha Wildner UINT32 Type; /* Subtable type */ 9239e1c0880SSascha Wildner UINT32 Length; /* Subtable length */ 9249e1c0880SSascha Wildner UINT16 UniqueId; 9259e1c0880SSascha Wildner UINT16 Reserved; 9269e1c0880SSascha Wildner UINT32 Flags; 9279e1c0880SSascha Wildner 9289e1c0880SSascha Wildner } ACPI_LPIT_HEADER; 9299e1c0880SSascha Wildner 9309e1c0880SSascha Wildner /* Values for subtable Type above */ 9319e1c0880SSascha Wildner 9329e1c0880SSascha Wildner enum AcpiLpitType 9339e1c0880SSascha Wildner { 9349e1c0880SSascha Wildner ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 935896f2e3aSSascha Wildner ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 9369e1c0880SSascha Wildner }; 9379e1c0880SSascha Wildner 9389e1c0880SSascha Wildner /* Masks for Flags field above */ 9399e1c0880SSascha Wildner 9409e1c0880SSascha Wildner #define ACPI_LPIT_STATE_DISABLED (1) 9419e1c0880SSascha Wildner #define ACPI_LPIT_NO_COUNTER (1<<1) 9429e1c0880SSascha Wildner 9439e1c0880SSascha Wildner /* 9449e1c0880SSascha Wildner * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER 9459e1c0880SSascha Wildner */ 9469e1c0880SSascha Wildner 9479e1c0880SSascha Wildner /* 0x00: Native C-state instruction based LPI structure */ 9489e1c0880SSascha Wildner 9499e1c0880SSascha Wildner typedef struct acpi_lpit_native 9509e1c0880SSascha Wildner { 9519e1c0880SSascha Wildner ACPI_LPIT_HEADER Header; 9529e1c0880SSascha Wildner ACPI_GENERIC_ADDRESS EntryTrigger; 9539e1c0880SSascha Wildner UINT32 Residency; 9549e1c0880SSascha Wildner UINT32 Latency; 9559e1c0880SSascha Wildner ACPI_GENERIC_ADDRESS ResidencyCounter; 9569e1c0880SSascha Wildner UINT64 CounterFrequency; 9579e1c0880SSascha Wildner 9589e1c0880SSascha Wildner } ACPI_LPIT_NATIVE; 9599e1c0880SSascha Wildner 9609e1c0880SSascha Wildner 9619e1c0880SSascha Wildner /******************************************************************************* 9629e1c0880SSascha Wildner * 9637bcb6cafSSascha Wildner * MADT - Multiple APIC Description Table 9647bcb6cafSSascha Wildner * Version 3 9657bcb6cafSSascha Wildner * 9667bcb6cafSSascha Wildner ******************************************************************************/ 9677bcb6cafSSascha Wildner 9687bcb6cafSSascha Wildner typedef struct acpi_table_madt 9697bcb6cafSSascha Wildner { 9707bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 9717bcb6cafSSascha Wildner UINT32 Address; /* Physical address of local APIC */ 9727bcb6cafSSascha Wildner UINT32 Flags; 9737bcb6cafSSascha Wildner 9747bcb6cafSSascha Wildner } ACPI_TABLE_MADT; 9757bcb6cafSSascha Wildner 9767bcb6cafSSascha Wildner /* Masks for Flags field above */ 9777bcb6cafSSascha Wildner 9787bcb6cafSSascha Wildner #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 9797bcb6cafSSascha Wildner 9807bcb6cafSSascha Wildner /* Values for PCATCompat flag */ 9817bcb6cafSSascha Wildner 9827bcb6cafSSascha Wildner #define ACPI_MADT_DUAL_PIC 1 9837bcb6cafSSascha Wildner #define ACPI_MADT_MULTIPLE_APIC 0 9847bcb6cafSSascha Wildner 9857bcb6cafSSascha Wildner 9867bcb6cafSSascha Wildner /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 9877bcb6cafSSascha Wildner 9887bcb6cafSSascha Wildner enum AcpiMadtType 9897bcb6cafSSascha Wildner { 9907bcb6cafSSascha Wildner ACPI_MADT_TYPE_LOCAL_APIC = 0, 9917bcb6cafSSascha Wildner ACPI_MADT_TYPE_IO_APIC = 1, 9927bcb6cafSSascha Wildner ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 9937bcb6cafSSascha Wildner ACPI_MADT_TYPE_NMI_SOURCE = 3, 9947bcb6cafSSascha Wildner ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 9957bcb6cafSSascha Wildner ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 9967bcb6cafSSascha Wildner ACPI_MADT_TYPE_IO_SAPIC = 6, 9977bcb6cafSSascha Wildner ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 9987bcb6cafSSascha Wildner ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 9997bcb6cafSSascha Wildner ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 10007bcb6cafSSascha Wildner ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 10017bcb6cafSSascha Wildner ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 10027bcb6cafSSascha Wildner ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 10037bcb6cafSSascha Wildner ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 10047bcb6cafSSascha Wildner ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 10057bcb6cafSSascha Wildner ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 100601d5d5dfSSascha Wildner ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, 100701d5d5dfSSascha Wildner ACPI_MADT_TYPE_RESERVED = 17 /* 17 and greater are reserved */ 10087bcb6cafSSascha Wildner }; 10097bcb6cafSSascha Wildner 10107bcb6cafSSascha Wildner 10117bcb6cafSSascha Wildner /* 10127bcb6cafSSascha Wildner * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 10137bcb6cafSSascha Wildner */ 10147bcb6cafSSascha Wildner 10157bcb6cafSSascha Wildner /* 0: Processor Local APIC */ 10167bcb6cafSSascha Wildner 10177bcb6cafSSascha Wildner typedef struct acpi_madt_local_apic 10187bcb6cafSSascha Wildner { 10197bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 10207bcb6cafSSascha Wildner UINT8 ProcessorId; /* ACPI processor id */ 10217bcb6cafSSascha Wildner UINT8 Id; /* Processor's local APIC id */ 10227bcb6cafSSascha Wildner UINT32 LapicFlags; 10237bcb6cafSSascha Wildner 10247bcb6cafSSascha Wildner } ACPI_MADT_LOCAL_APIC; 10257bcb6cafSSascha Wildner 10267bcb6cafSSascha Wildner 10277bcb6cafSSascha Wildner /* 1: IO APIC */ 10287bcb6cafSSascha Wildner 10297bcb6cafSSascha Wildner typedef struct acpi_madt_io_apic 10307bcb6cafSSascha Wildner { 10317bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 10327bcb6cafSSascha Wildner UINT8 Id; /* I/O APIC ID */ 10337bcb6cafSSascha Wildner UINT8 Reserved; /* Reserved - must be zero */ 10347bcb6cafSSascha Wildner UINT32 Address; /* APIC physical address */ 10357bcb6cafSSascha Wildner UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 10367bcb6cafSSascha Wildner 10377bcb6cafSSascha Wildner } ACPI_MADT_IO_APIC; 10387bcb6cafSSascha Wildner 10397bcb6cafSSascha Wildner 10407bcb6cafSSascha Wildner /* 2: Interrupt Override */ 10417bcb6cafSSascha Wildner 10427bcb6cafSSascha Wildner typedef struct acpi_madt_interrupt_override 10437bcb6cafSSascha Wildner { 10447bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 10457bcb6cafSSascha Wildner UINT8 Bus; /* 0 - ISA */ 10467bcb6cafSSascha Wildner UINT8 SourceIrq; /* Interrupt source (IRQ) */ 10477bcb6cafSSascha Wildner UINT32 GlobalIrq; /* Global system interrupt */ 10487bcb6cafSSascha Wildner UINT16 IntiFlags; 10497bcb6cafSSascha Wildner 10507bcb6cafSSascha Wildner } ACPI_MADT_INTERRUPT_OVERRIDE; 10517bcb6cafSSascha Wildner 10527bcb6cafSSascha Wildner 10537bcb6cafSSascha Wildner /* 3: NMI Source */ 10547bcb6cafSSascha Wildner 10557bcb6cafSSascha Wildner typedef struct acpi_madt_nmi_source 10567bcb6cafSSascha Wildner { 10577bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 10587bcb6cafSSascha Wildner UINT16 IntiFlags; 10597bcb6cafSSascha Wildner UINT32 GlobalIrq; /* Global system interrupt */ 10607bcb6cafSSascha Wildner 10617bcb6cafSSascha Wildner } ACPI_MADT_NMI_SOURCE; 10627bcb6cafSSascha Wildner 10637bcb6cafSSascha Wildner 10647bcb6cafSSascha Wildner /* 4: Local APIC NMI */ 10657bcb6cafSSascha Wildner 10667bcb6cafSSascha Wildner typedef struct acpi_madt_local_apic_nmi 10677bcb6cafSSascha Wildner { 10687bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 10697bcb6cafSSascha Wildner UINT8 ProcessorId; /* ACPI processor id */ 10707bcb6cafSSascha Wildner UINT16 IntiFlags; 10717bcb6cafSSascha Wildner UINT8 Lint; /* LINTn to which NMI is connected */ 10727bcb6cafSSascha Wildner 10737bcb6cafSSascha Wildner } ACPI_MADT_LOCAL_APIC_NMI; 10747bcb6cafSSascha Wildner 10757bcb6cafSSascha Wildner 10767bcb6cafSSascha Wildner /* 5: Address Override */ 10777bcb6cafSSascha Wildner 10787bcb6cafSSascha Wildner typedef struct acpi_madt_local_apic_override 10797bcb6cafSSascha Wildner { 10807bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 10817bcb6cafSSascha Wildner UINT16 Reserved; /* Reserved, must be zero */ 10827bcb6cafSSascha Wildner UINT64 Address; /* APIC physical address */ 10837bcb6cafSSascha Wildner 10847bcb6cafSSascha Wildner } ACPI_MADT_LOCAL_APIC_OVERRIDE; 10857bcb6cafSSascha Wildner 10867bcb6cafSSascha Wildner 10877bcb6cafSSascha Wildner /* 6: I/O Sapic */ 10887bcb6cafSSascha Wildner 10897bcb6cafSSascha Wildner typedef struct acpi_madt_io_sapic 10907bcb6cafSSascha Wildner { 10917bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 10927bcb6cafSSascha Wildner UINT8 Id; /* I/O SAPIC ID */ 10937bcb6cafSSascha Wildner UINT8 Reserved; /* Reserved, must be zero */ 10947bcb6cafSSascha Wildner UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 10957bcb6cafSSascha Wildner UINT64 Address; /* SAPIC physical address */ 10967bcb6cafSSascha Wildner 10977bcb6cafSSascha Wildner } ACPI_MADT_IO_SAPIC; 10987bcb6cafSSascha Wildner 10997bcb6cafSSascha Wildner 11007bcb6cafSSascha Wildner /* 7: Local Sapic */ 11017bcb6cafSSascha Wildner 11027bcb6cafSSascha Wildner typedef struct acpi_madt_local_sapic 11037bcb6cafSSascha Wildner { 11047bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11057bcb6cafSSascha Wildner UINT8 ProcessorId; /* ACPI processor id */ 11067bcb6cafSSascha Wildner UINT8 Id; /* SAPIC ID */ 11077bcb6cafSSascha Wildner UINT8 Eid; /* SAPIC EID */ 11087bcb6cafSSascha Wildner UINT8 Reserved[3]; /* Reserved, must be zero */ 11097bcb6cafSSascha Wildner UINT32 LapicFlags; 11107bcb6cafSSascha Wildner UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 11117bcb6cafSSascha Wildner char UidString[1]; /* String UID - ACPI 3.0 */ 11127bcb6cafSSascha Wildner 11137bcb6cafSSascha Wildner } ACPI_MADT_LOCAL_SAPIC; 11147bcb6cafSSascha Wildner 11157bcb6cafSSascha Wildner 11167bcb6cafSSascha Wildner /* 8: Platform Interrupt Source */ 11177bcb6cafSSascha Wildner 11187bcb6cafSSascha Wildner typedef struct acpi_madt_interrupt_source 11197bcb6cafSSascha Wildner { 11207bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11217bcb6cafSSascha Wildner UINT16 IntiFlags; 11227bcb6cafSSascha Wildner UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 11237bcb6cafSSascha Wildner UINT8 Id; /* Processor ID */ 11247bcb6cafSSascha Wildner UINT8 Eid; /* Processor EID */ 11257bcb6cafSSascha Wildner UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 11267bcb6cafSSascha Wildner UINT32 GlobalIrq; /* Global system interrupt */ 11277bcb6cafSSascha Wildner UINT32 Flags; /* Interrupt Source Flags */ 11287bcb6cafSSascha Wildner 11297bcb6cafSSascha Wildner } ACPI_MADT_INTERRUPT_SOURCE; 11307bcb6cafSSascha Wildner 11317bcb6cafSSascha Wildner /* Masks for Flags field above */ 11327bcb6cafSSascha Wildner 11337bcb6cafSSascha Wildner #define ACPI_MADT_CPEI_OVERRIDE (1) 11347bcb6cafSSascha Wildner 11357bcb6cafSSascha Wildner 11367bcb6cafSSascha Wildner /* 9: Processor Local X2APIC (ACPI 4.0) */ 11377bcb6cafSSascha Wildner 11387bcb6cafSSascha Wildner typedef struct acpi_madt_local_x2apic 11397bcb6cafSSascha Wildner { 11407bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11417bcb6cafSSascha Wildner UINT16 Reserved; /* Reserved - must be zero */ 11427bcb6cafSSascha Wildner UINT32 LocalApicId; /* Processor x2APIC ID */ 11437bcb6cafSSascha Wildner UINT32 LapicFlags; 11447bcb6cafSSascha Wildner UINT32 Uid; /* ACPI processor UID */ 11457bcb6cafSSascha Wildner 11467bcb6cafSSascha Wildner } ACPI_MADT_LOCAL_X2APIC; 11477bcb6cafSSascha Wildner 11487bcb6cafSSascha Wildner 11497bcb6cafSSascha Wildner /* 10: Local X2APIC NMI (ACPI 4.0) */ 11507bcb6cafSSascha Wildner 11517bcb6cafSSascha Wildner typedef struct acpi_madt_local_x2apic_nmi 11527bcb6cafSSascha Wildner { 11537bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11547bcb6cafSSascha Wildner UINT16 IntiFlags; 11557bcb6cafSSascha Wildner UINT32 Uid; /* ACPI processor UID */ 11567bcb6cafSSascha Wildner UINT8 Lint; /* LINTn to which NMI is connected */ 11577bcb6cafSSascha Wildner UINT8 Reserved[3]; /* Reserved - must be zero */ 11587bcb6cafSSascha Wildner 11597bcb6cafSSascha Wildner } ACPI_MADT_LOCAL_X2APIC_NMI; 11607bcb6cafSSascha Wildner 11617bcb6cafSSascha Wildner 116200ffa116SSascha Wildner /* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 changes) */ 11637bcb6cafSSascha Wildner 11647bcb6cafSSascha Wildner typedef struct acpi_madt_generic_interrupt 11657bcb6cafSSascha Wildner { 11667bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11677bcb6cafSSascha Wildner UINT16 Reserved; /* Reserved - must be zero */ 11687bcb6cafSSascha Wildner UINT32 CpuInterfaceNumber; 11697bcb6cafSSascha Wildner UINT32 Uid; 11707bcb6cafSSascha Wildner UINT32 Flags; 11717bcb6cafSSascha Wildner UINT32 ParkingVersion; 11727bcb6cafSSascha Wildner UINT32 PerformanceInterrupt; 11737bcb6cafSSascha Wildner UINT64 ParkedAddress; 11747bcb6cafSSascha Wildner UINT64 BaseAddress; 11757bcb6cafSSascha Wildner UINT64 GicvBaseAddress; 11767bcb6cafSSascha Wildner UINT64 GichBaseAddress; 11777bcb6cafSSascha Wildner UINT32 VgicInterrupt; 11787bcb6cafSSascha Wildner UINT64 GicrBaseAddress; 11797bcb6cafSSascha Wildner UINT64 ArmMpidr; 11807bcb6cafSSascha Wildner UINT8 EfficiencyClass; 118100ffa116SSascha Wildner UINT8 Reserved2[1]; 118200ffa116SSascha Wildner UINT16 SpeInterrupt; /* ACPI 6.3 */ 11837bcb6cafSSascha Wildner 11847bcb6cafSSascha Wildner } ACPI_MADT_GENERIC_INTERRUPT; 11857bcb6cafSSascha Wildner 11867bcb6cafSSascha Wildner /* Masks for Flags field above */ 11877bcb6cafSSascha Wildner 11887bcb6cafSSascha Wildner /* ACPI_MADT_ENABLED (1) Processor is usable if set */ 11897bcb6cafSSascha Wildner #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 11907bcb6cafSSascha Wildner #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 11917bcb6cafSSascha Wildner 11927bcb6cafSSascha Wildner 11937bcb6cafSSascha Wildner /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 11947bcb6cafSSascha Wildner 11957bcb6cafSSascha Wildner typedef struct acpi_madt_generic_distributor 11967bcb6cafSSascha Wildner { 11977bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11987bcb6cafSSascha Wildner UINT16 Reserved; /* Reserved - must be zero */ 11997bcb6cafSSascha Wildner UINT32 GicId; 12007bcb6cafSSascha Wildner UINT64 BaseAddress; 12017bcb6cafSSascha Wildner UINT32 GlobalIrqBase; 12027bcb6cafSSascha Wildner UINT8 Version; 12037bcb6cafSSascha Wildner UINT8 Reserved2[3]; /* Reserved - must be zero */ 12047bcb6cafSSascha Wildner 12057bcb6cafSSascha Wildner } ACPI_MADT_GENERIC_DISTRIBUTOR; 12067bcb6cafSSascha Wildner 12077bcb6cafSSascha Wildner /* Values for Version field above */ 12087bcb6cafSSascha Wildner 12097bcb6cafSSascha Wildner enum AcpiMadtGicVersion 12107bcb6cafSSascha Wildner { 12117bcb6cafSSascha Wildner ACPI_MADT_GIC_VERSION_NONE = 0, 12127bcb6cafSSascha Wildner ACPI_MADT_GIC_VERSION_V1 = 1, 12137bcb6cafSSascha Wildner ACPI_MADT_GIC_VERSION_V2 = 2, 12147bcb6cafSSascha Wildner ACPI_MADT_GIC_VERSION_V3 = 3, 12157bcb6cafSSascha Wildner ACPI_MADT_GIC_VERSION_V4 = 4, 12167bcb6cafSSascha Wildner ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 12177bcb6cafSSascha Wildner }; 12187bcb6cafSSascha Wildner 12197bcb6cafSSascha Wildner 12207bcb6cafSSascha Wildner /* 13: Generic MSI Frame (ACPI 5.1) */ 12217bcb6cafSSascha Wildner 12227bcb6cafSSascha Wildner typedef struct acpi_madt_generic_msi_frame 12237bcb6cafSSascha Wildner { 12247bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 12257bcb6cafSSascha Wildner UINT16 Reserved; /* Reserved - must be zero */ 12267bcb6cafSSascha Wildner UINT32 MsiFrameId; 12277bcb6cafSSascha Wildner UINT64 BaseAddress; 12287bcb6cafSSascha Wildner UINT32 Flags; 12297bcb6cafSSascha Wildner UINT16 SpiCount; 12307bcb6cafSSascha Wildner UINT16 SpiBase; 12317bcb6cafSSascha Wildner 12327bcb6cafSSascha Wildner } ACPI_MADT_GENERIC_MSI_FRAME; 12337bcb6cafSSascha Wildner 12347bcb6cafSSascha Wildner /* Masks for Flags field above */ 12357bcb6cafSSascha Wildner 12367bcb6cafSSascha Wildner #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 12377bcb6cafSSascha Wildner 12387bcb6cafSSascha Wildner 12397bcb6cafSSascha Wildner /* 14: Generic Redistributor (ACPI 5.1) */ 12407bcb6cafSSascha Wildner 12417bcb6cafSSascha Wildner typedef struct acpi_madt_generic_redistributor 12427bcb6cafSSascha Wildner { 12437bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 12447bcb6cafSSascha Wildner UINT16 Reserved; /* reserved - must be zero */ 12457bcb6cafSSascha Wildner UINT64 BaseAddress; 12467bcb6cafSSascha Wildner UINT32 Length; 12477bcb6cafSSascha Wildner 12487bcb6cafSSascha Wildner } ACPI_MADT_GENERIC_REDISTRIBUTOR; 12497bcb6cafSSascha Wildner 12507bcb6cafSSascha Wildner 12517bcb6cafSSascha Wildner /* 15: Generic Translator (ACPI 6.0) */ 12527bcb6cafSSascha Wildner 12537bcb6cafSSascha Wildner typedef struct acpi_madt_generic_translator 12547bcb6cafSSascha Wildner { 12557bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 12567bcb6cafSSascha Wildner UINT16 Reserved; /* reserved - must be zero */ 12577bcb6cafSSascha Wildner UINT32 TranslationId; 12587bcb6cafSSascha Wildner UINT64 BaseAddress; 12597bcb6cafSSascha Wildner UINT32 Reserved2; 12607bcb6cafSSascha Wildner 12617bcb6cafSSascha Wildner } ACPI_MADT_GENERIC_TRANSLATOR; 12627bcb6cafSSascha Wildner 126301d5d5dfSSascha Wildner /* 16: Multiprocessor wakeup (ACPI 6.4) */ 126401d5d5dfSSascha Wildner 126501d5d5dfSSascha Wildner typedef struct acpi_madt_multiproc_wakeup 126601d5d5dfSSascha Wildner { 126701d5d5dfSSascha Wildner ACPI_SUBTABLE_HEADER Header; 126801d5d5dfSSascha Wildner UINT16 MailboxVersion; 126901d5d5dfSSascha Wildner UINT32 Reserved; /* reserved - must be zero */ 127001d5d5dfSSascha Wildner UINT64 BaseAddress; 127101d5d5dfSSascha Wildner 127201d5d5dfSSascha Wildner } ACPI_MADT_MULTIPROC_WAKEUP; 127301d5d5dfSSascha Wildner 12744898bea4SSascha Wildner #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032 12754898bea4SSascha Wildner #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048 12764898bea4SSascha Wildner 12774898bea4SSascha Wildner typedef struct acpi_madt_multiproc_wakeup_mailbox 12784898bea4SSascha Wildner { 12794898bea4SSascha Wildner UINT16 Command; 12804898bea4SSascha Wildner UINT16 Reserved; /* reserved - must be zero */ 12814898bea4SSascha Wildner UINT32 ApicId; 12824898bea4SSascha Wildner UINT64 WakeupVector; 12834898bea4SSascha Wildner UINT8 ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */ 12844898bea4SSascha Wildner UINT8 ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */ 12854898bea4SSascha Wildner 12864898bea4SSascha Wildner } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX; 12874898bea4SSascha Wildner 12884898bea4SSascha Wildner #define ACPI_MP_WAKE_COMMAND_WAKEUP 1 12894898bea4SSascha Wildner 12907bcb6cafSSascha Wildner 12917bcb6cafSSascha Wildner /* 12927bcb6cafSSascha Wildner * Common flags fields for MADT subtables 12937bcb6cafSSascha Wildner */ 12947bcb6cafSSascha Wildner 12957bcb6cafSSascha Wildner /* MADT Local APIC flags */ 12967bcb6cafSSascha Wildner 12977bcb6cafSSascha Wildner #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 129884fe3360SSascha Wildner #define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */ 12997bcb6cafSSascha Wildner 13007bcb6cafSSascha Wildner /* MADT MPS INTI flags (IntiFlags) */ 13017bcb6cafSSascha Wildner 13027bcb6cafSSascha Wildner #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 13037bcb6cafSSascha Wildner #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 13047bcb6cafSSascha Wildner 13057bcb6cafSSascha Wildner /* Values for MPS INTI flags */ 13067bcb6cafSSascha Wildner 13077bcb6cafSSascha Wildner #define ACPI_MADT_POLARITY_CONFORMS 0 13087bcb6cafSSascha Wildner #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 13097bcb6cafSSascha Wildner #define ACPI_MADT_POLARITY_RESERVED 2 13107bcb6cafSSascha Wildner #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 13117bcb6cafSSascha Wildner 13127bcb6cafSSascha Wildner #define ACPI_MADT_TRIGGER_CONFORMS (0) 13137bcb6cafSSascha Wildner #define ACPI_MADT_TRIGGER_EDGE (1<<2) 13147bcb6cafSSascha Wildner #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 13157bcb6cafSSascha Wildner #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 13167bcb6cafSSascha Wildner 13177bcb6cafSSascha Wildner 13187bcb6cafSSascha Wildner /******************************************************************************* 13197bcb6cafSSascha Wildner * 13209e1c0880SSascha Wildner * MCFG - PCI Memory Mapped Configuration table and subtable 13210d02842fSSascha Wildner * Version 1 13220d02842fSSascha Wildner * 13230d02842fSSascha Wildner * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 13240d02842fSSascha Wildner * 13250d02842fSSascha Wildner ******************************************************************************/ 13260d02842fSSascha Wildner 13270d02842fSSascha Wildner typedef struct acpi_table_mcfg 13280d02842fSSascha Wildner { 13290d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 13300d02842fSSascha Wildner UINT8 Reserved[8]; 13310d02842fSSascha Wildner 13320d02842fSSascha Wildner } ACPI_TABLE_MCFG; 13330d02842fSSascha Wildner 13340d02842fSSascha Wildner 13350d02842fSSascha Wildner /* Subtable */ 13360d02842fSSascha Wildner 13370d02842fSSascha Wildner typedef struct acpi_mcfg_allocation 13380d02842fSSascha Wildner { 13390d02842fSSascha Wildner UINT64 Address; /* Base address, processor-relative */ 13400d02842fSSascha Wildner UINT16 PciSegment; /* PCI segment group number */ 13410d02842fSSascha Wildner UINT8 StartBusNumber; /* Starting PCI Bus number */ 13420d02842fSSascha Wildner UINT8 EndBusNumber; /* Final PCI Bus number */ 13430d02842fSSascha Wildner UINT32 Reserved; 13440d02842fSSascha Wildner 13450d02842fSSascha Wildner } ACPI_MCFG_ALLOCATION; 13460d02842fSSascha Wildner 13470d02842fSSascha Wildner 13480d02842fSSascha Wildner /******************************************************************************* 13490d02842fSSascha Wildner * 13500d02842fSSascha Wildner * MCHI - Management Controller Host Interface Table 13510d02842fSSascha Wildner * Version 1 13520d02842fSSascha Wildner * 13530d02842fSSascha Wildner * Conforms to "Management Component Transport Protocol (MCTP) Host 13540d02842fSSascha Wildner * Interface Specification", Revision 1.0.0a, October 13, 2009 13550d02842fSSascha Wildner * 13560d02842fSSascha Wildner ******************************************************************************/ 13570d02842fSSascha Wildner 13580d02842fSSascha Wildner typedef struct acpi_table_mchi 13590d02842fSSascha Wildner { 13600d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 13610d02842fSSascha Wildner UINT8 InterfaceType; 13620d02842fSSascha Wildner UINT8 Protocol; 13630d02842fSSascha Wildner UINT64 ProtocolData; 13640d02842fSSascha Wildner UINT8 InterruptType; 13650d02842fSSascha Wildner UINT8 Gpe; 13660d02842fSSascha Wildner UINT8 PciDeviceFlag; 13670d02842fSSascha Wildner UINT32 GlobalInterrupt; 13680d02842fSSascha Wildner ACPI_GENERIC_ADDRESS ControlRegister; 13690d02842fSSascha Wildner UINT8 PciSegment; 13700d02842fSSascha Wildner UINT8 PciBus; 13710d02842fSSascha Wildner UINT8 PciDevice; 13720d02842fSSascha Wildner UINT8 PciFunction; 13730d02842fSSascha Wildner 13740d02842fSSascha Wildner } ACPI_TABLE_MCHI; 13750d02842fSSascha Wildner 13760d02842fSSascha Wildner 13770d02842fSSascha Wildner /******************************************************************************* 13780d02842fSSascha Wildner * 13797bcb6cafSSascha Wildner * MPST - Memory Power State Table (ACPI 5.0) 13807bcb6cafSSascha Wildner * Version 1 13817bcb6cafSSascha Wildner * 13827bcb6cafSSascha Wildner ******************************************************************************/ 13837bcb6cafSSascha Wildner 13847bcb6cafSSascha Wildner #define ACPI_MPST_CHANNEL_INFO \ 13857bcb6cafSSascha Wildner UINT8 ChannelId; \ 13867bcb6cafSSascha Wildner UINT8 Reserved1[3]; \ 13877bcb6cafSSascha Wildner UINT16 PowerNodeCount; \ 13887bcb6cafSSascha Wildner UINT16 Reserved2; 13897bcb6cafSSascha Wildner 13907bcb6cafSSascha Wildner /* Main table */ 13917bcb6cafSSascha Wildner 13927bcb6cafSSascha Wildner typedef struct acpi_table_mpst 13937bcb6cafSSascha Wildner { 13947bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 13957bcb6cafSSascha Wildner ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 13967bcb6cafSSascha Wildner 13977bcb6cafSSascha Wildner } ACPI_TABLE_MPST; 13987bcb6cafSSascha Wildner 13997bcb6cafSSascha Wildner 14007bcb6cafSSascha Wildner /* Memory Platform Communication Channel Info */ 14017bcb6cafSSascha Wildner 14027bcb6cafSSascha Wildner typedef struct acpi_mpst_channel 14037bcb6cafSSascha Wildner { 14047bcb6cafSSascha Wildner ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 14057bcb6cafSSascha Wildner 14067bcb6cafSSascha Wildner } ACPI_MPST_CHANNEL; 14077bcb6cafSSascha Wildner 14087bcb6cafSSascha Wildner 14097bcb6cafSSascha Wildner /* Memory Power Node Structure */ 14107bcb6cafSSascha Wildner 14117bcb6cafSSascha Wildner typedef struct acpi_mpst_power_node 14127bcb6cafSSascha Wildner { 14137bcb6cafSSascha Wildner UINT8 Flags; 14147bcb6cafSSascha Wildner UINT8 Reserved1; 14157bcb6cafSSascha Wildner UINT16 NodeId; 14167bcb6cafSSascha Wildner UINT32 Length; 14177bcb6cafSSascha Wildner UINT64 RangeAddress; 14187bcb6cafSSascha Wildner UINT64 RangeLength; 14197bcb6cafSSascha Wildner UINT32 NumPowerStates; 14207bcb6cafSSascha Wildner UINT32 NumPhysicalComponents; 14217bcb6cafSSascha Wildner 14227bcb6cafSSascha Wildner } ACPI_MPST_POWER_NODE; 14237bcb6cafSSascha Wildner 14247bcb6cafSSascha Wildner /* Values for Flags field above */ 14257bcb6cafSSascha Wildner 14267bcb6cafSSascha Wildner #define ACPI_MPST_ENABLED 1 14277bcb6cafSSascha Wildner #define ACPI_MPST_POWER_MANAGED 2 14287bcb6cafSSascha Wildner #define ACPI_MPST_HOT_PLUG_CAPABLE 4 14297bcb6cafSSascha Wildner 14307bcb6cafSSascha Wildner 14317bcb6cafSSascha Wildner /* Memory Power State Structure (follows POWER_NODE above) */ 14327bcb6cafSSascha Wildner 14337bcb6cafSSascha Wildner typedef struct acpi_mpst_power_state 14347bcb6cafSSascha Wildner { 14357bcb6cafSSascha Wildner UINT8 PowerState; 14367bcb6cafSSascha Wildner UINT8 InfoIndex; 14377bcb6cafSSascha Wildner 14387bcb6cafSSascha Wildner } ACPI_MPST_POWER_STATE; 14397bcb6cafSSascha Wildner 14407bcb6cafSSascha Wildner 14417bcb6cafSSascha Wildner /* Physical Component ID Structure (follows POWER_STATE above) */ 14427bcb6cafSSascha Wildner 14437bcb6cafSSascha Wildner typedef struct acpi_mpst_component 14447bcb6cafSSascha Wildner { 14457bcb6cafSSascha Wildner UINT16 ComponentId; 14467bcb6cafSSascha Wildner 14477bcb6cafSSascha Wildner } ACPI_MPST_COMPONENT; 14487bcb6cafSSascha Wildner 14497bcb6cafSSascha Wildner 14507bcb6cafSSascha Wildner /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 14517bcb6cafSSascha Wildner 14527bcb6cafSSascha Wildner typedef struct acpi_mpst_data_hdr 14537bcb6cafSSascha Wildner { 14547bcb6cafSSascha Wildner UINT16 CharacteristicsCount; 14557bcb6cafSSascha Wildner UINT16 Reserved; 14567bcb6cafSSascha Wildner 14577bcb6cafSSascha Wildner } ACPI_MPST_DATA_HDR; 14587bcb6cafSSascha Wildner 14597bcb6cafSSascha Wildner typedef struct acpi_mpst_power_data 14607bcb6cafSSascha Wildner { 14617bcb6cafSSascha Wildner UINT8 StructureId; 14627bcb6cafSSascha Wildner UINT8 Flags; 14637bcb6cafSSascha Wildner UINT16 Reserved1; 14647bcb6cafSSascha Wildner UINT32 AveragePower; 14657bcb6cafSSascha Wildner UINT32 PowerSaving; 14667bcb6cafSSascha Wildner UINT64 ExitLatency; 14677bcb6cafSSascha Wildner UINT64 Reserved2; 14687bcb6cafSSascha Wildner 14697bcb6cafSSascha Wildner } ACPI_MPST_POWER_DATA; 14707bcb6cafSSascha Wildner 14717bcb6cafSSascha Wildner /* Values for Flags field above */ 14727bcb6cafSSascha Wildner 14737bcb6cafSSascha Wildner #define ACPI_MPST_PRESERVE 1 14747bcb6cafSSascha Wildner #define ACPI_MPST_AUTOENTRY 2 14757bcb6cafSSascha Wildner #define ACPI_MPST_AUTOEXIT 4 14767bcb6cafSSascha Wildner 14777bcb6cafSSascha Wildner 14787bcb6cafSSascha Wildner /* Shared Memory Region (not part of an ACPI table) */ 14797bcb6cafSSascha Wildner 14807bcb6cafSSascha Wildner typedef struct acpi_mpst_shared 14817bcb6cafSSascha Wildner { 14827bcb6cafSSascha Wildner UINT32 Signature; 14837bcb6cafSSascha Wildner UINT16 PccCommand; 14847bcb6cafSSascha Wildner UINT16 PccStatus; 14857bcb6cafSSascha Wildner UINT32 CommandRegister; 14867bcb6cafSSascha Wildner UINT32 StatusRegister; 14877bcb6cafSSascha Wildner UINT32 PowerStateId; 14887bcb6cafSSascha Wildner UINT32 PowerNodeId; 14897bcb6cafSSascha Wildner UINT64 EnergyConsumed; 14907bcb6cafSSascha Wildner UINT64 AveragePower; 14917bcb6cafSSascha Wildner 14927bcb6cafSSascha Wildner } ACPI_MPST_SHARED; 14937bcb6cafSSascha Wildner 14947bcb6cafSSascha Wildner 14957bcb6cafSSascha Wildner /******************************************************************************* 14967bcb6cafSSascha Wildner * 14977bcb6cafSSascha Wildner * MSCT - Maximum System Characteristics Table (ACPI 4.0) 14987bcb6cafSSascha Wildner * Version 1 14997bcb6cafSSascha Wildner * 15007bcb6cafSSascha Wildner ******************************************************************************/ 15017bcb6cafSSascha Wildner 15027bcb6cafSSascha Wildner typedef struct acpi_table_msct 15037bcb6cafSSascha Wildner { 15047bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 15057bcb6cafSSascha Wildner UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 15067bcb6cafSSascha Wildner UINT32 MaxProximityDomains;/* Max number of proximity domains */ 15077bcb6cafSSascha Wildner UINT32 MaxClockDomains; /* Max number of clock domains */ 15087bcb6cafSSascha Wildner UINT64 MaxAddress; /* Max physical address in system */ 15097bcb6cafSSascha Wildner 15107bcb6cafSSascha Wildner } ACPI_TABLE_MSCT; 15117bcb6cafSSascha Wildner 15127bcb6cafSSascha Wildner 15137bcb6cafSSascha Wildner /* Subtable - Maximum Proximity Domain Information. Version 1 */ 15147bcb6cafSSascha Wildner 15157bcb6cafSSascha Wildner typedef struct acpi_msct_proximity 15167bcb6cafSSascha Wildner { 15177bcb6cafSSascha Wildner UINT8 Revision; 15187bcb6cafSSascha Wildner UINT8 Length; 15197bcb6cafSSascha Wildner UINT32 RangeStart; /* Start of domain range */ 15207bcb6cafSSascha Wildner UINT32 RangeEnd; /* End of domain range */ 15217bcb6cafSSascha Wildner UINT32 ProcessorCapacity; 15227bcb6cafSSascha Wildner UINT64 MemoryCapacity; /* In bytes */ 15237bcb6cafSSascha Wildner 15247bcb6cafSSascha Wildner } ACPI_MSCT_PROXIMITY; 15257bcb6cafSSascha Wildner 15267bcb6cafSSascha Wildner 15277bcb6cafSSascha Wildner /******************************************************************************* 15287bcb6cafSSascha Wildner * 15295943f66cSSascha Wildner * MSDM - Microsoft Data Management table 15305943f66cSSascha Wildner * 15315943f66cSSascha Wildner * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 15325943f66cSSascha Wildner * November 29, 2011. Copyright 2011 Microsoft 15335943f66cSSascha Wildner * 15345943f66cSSascha Wildner ******************************************************************************/ 15355943f66cSSascha Wildner 15365943f66cSSascha Wildner /* Basic MSDM table is only the common ACPI header */ 15375943f66cSSascha Wildner 15385943f66cSSascha Wildner typedef struct acpi_table_msdm 15395943f66cSSascha Wildner { 15405943f66cSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 15415943f66cSSascha Wildner 15425943f66cSSascha Wildner } ACPI_TABLE_MSDM; 15435943f66cSSascha Wildner 15445943f66cSSascha Wildner 15455943f66cSSascha Wildner /******************************************************************************* 15465943f66cSSascha Wildner * 15477bcb6cafSSascha Wildner * NFIT - NVDIMM Interface Table (ACPI 6.0+) 15487bcb6cafSSascha Wildner * Version 1 15497bcb6cafSSascha Wildner * 15507bcb6cafSSascha Wildner ******************************************************************************/ 15517bcb6cafSSascha Wildner 15527bcb6cafSSascha Wildner typedef struct acpi_table_nfit 15537bcb6cafSSascha Wildner { 15547bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 15557bcb6cafSSascha Wildner UINT32 Reserved; /* Reserved, must be zero */ 15567bcb6cafSSascha Wildner 15577bcb6cafSSascha Wildner } ACPI_TABLE_NFIT; 15587bcb6cafSSascha Wildner 15597bcb6cafSSascha Wildner /* Subtable header for NFIT */ 15607bcb6cafSSascha Wildner 15617bcb6cafSSascha Wildner typedef struct acpi_nfit_header 15627bcb6cafSSascha Wildner { 15637bcb6cafSSascha Wildner UINT16 Type; 15647bcb6cafSSascha Wildner UINT16 Length; 15657bcb6cafSSascha Wildner 15667bcb6cafSSascha Wildner } ACPI_NFIT_HEADER; 15677bcb6cafSSascha Wildner 15687bcb6cafSSascha Wildner 15697bcb6cafSSascha Wildner /* Values for subtable type in ACPI_NFIT_HEADER */ 15707bcb6cafSSascha Wildner 15717bcb6cafSSascha Wildner enum AcpiNfitType 15727bcb6cafSSascha Wildner { 15737bcb6cafSSascha Wildner ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 15747bcb6cafSSascha Wildner ACPI_NFIT_TYPE_MEMORY_MAP = 1, 15757bcb6cafSSascha Wildner ACPI_NFIT_TYPE_INTERLEAVE = 2, 15767bcb6cafSSascha Wildner ACPI_NFIT_TYPE_SMBIOS = 3, 15777bcb6cafSSascha Wildner ACPI_NFIT_TYPE_CONTROL_REGION = 4, 15787bcb6cafSSascha Wildner ACPI_NFIT_TYPE_DATA_REGION = 5, 15797bcb6cafSSascha Wildner ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 15807bcb6cafSSascha Wildner ACPI_NFIT_TYPE_CAPABILITIES = 7, 15817bcb6cafSSascha Wildner ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ 15827bcb6cafSSascha Wildner }; 15837bcb6cafSSascha Wildner 15847bcb6cafSSascha Wildner /* 15857bcb6cafSSascha Wildner * NFIT Subtables 15867bcb6cafSSascha Wildner */ 15877bcb6cafSSascha Wildner 15887bcb6cafSSascha Wildner /* 0: System Physical Address Range Structure */ 15897bcb6cafSSascha Wildner 15907bcb6cafSSascha Wildner typedef struct acpi_nfit_system_address 15917bcb6cafSSascha Wildner { 15927bcb6cafSSascha Wildner ACPI_NFIT_HEADER Header; 15937bcb6cafSSascha Wildner UINT16 RangeIndex; 15947bcb6cafSSascha Wildner UINT16 Flags; 15957bcb6cafSSascha Wildner UINT32 Reserved; /* Reserved, must be zero */ 15967bcb6cafSSascha Wildner UINT32 ProximityDomain; 15977bcb6cafSSascha Wildner UINT8 RangeGuid[16]; 15987bcb6cafSSascha Wildner UINT64 Address; 15997bcb6cafSSascha Wildner UINT64 Length; 16007bcb6cafSSascha Wildner UINT64 MemoryMapping; 160101d5d5dfSSascha Wildner UINT64 LocationCookie; /* ACPI 6.4 */ 16027bcb6cafSSascha Wildner 16037bcb6cafSSascha Wildner } ACPI_NFIT_SYSTEM_ADDRESS; 16047bcb6cafSSascha Wildner 16057bcb6cafSSascha Wildner /* Flags */ 16067bcb6cafSSascha Wildner 16077bcb6cafSSascha Wildner #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 16087bcb6cafSSascha Wildner #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 160901d5d5dfSSascha Wildner #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */ 16107bcb6cafSSascha Wildner 16117bcb6cafSSascha Wildner /* Range Type GUIDs appear in the include/acuuid.h file */ 16127bcb6cafSSascha Wildner 16137bcb6cafSSascha Wildner 16147bcb6cafSSascha Wildner /* 1: Memory Device to System Address Range Map Structure */ 16157bcb6cafSSascha Wildner 16167bcb6cafSSascha Wildner typedef struct acpi_nfit_memory_map 16177bcb6cafSSascha Wildner { 16187bcb6cafSSascha Wildner ACPI_NFIT_HEADER Header; 16197bcb6cafSSascha Wildner UINT32 DeviceHandle; 16207bcb6cafSSascha Wildner UINT16 PhysicalId; 16217bcb6cafSSascha Wildner UINT16 RegionId; 16227bcb6cafSSascha Wildner UINT16 RangeIndex; 16237bcb6cafSSascha Wildner UINT16 RegionIndex; 16247bcb6cafSSascha Wildner UINT64 RegionSize; 16257bcb6cafSSascha Wildner UINT64 RegionOffset; 16267bcb6cafSSascha Wildner UINT64 Address; 16277bcb6cafSSascha Wildner UINT16 InterleaveIndex; 16287bcb6cafSSascha Wildner UINT16 InterleaveWays; 16297bcb6cafSSascha Wildner UINT16 Flags; 16307bcb6cafSSascha Wildner UINT16 Reserved; /* Reserved, must be zero */ 16317bcb6cafSSascha Wildner 16327bcb6cafSSascha Wildner } ACPI_NFIT_MEMORY_MAP; 16337bcb6cafSSascha Wildner 16347bcb6cafSSascha Wildner /* Flags */ 16357bcb6cafSSascha Wildner 16367bcb6cafSSascha Wildner #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 16377bcb6cafSSascha Wildner #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 16387bcb6cafSSascha Wildner #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 16397bcb6cafSSascha Wildner #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 16407bcb6cafSSascha Wildner #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 16417bcb6cafSSascha Wildner #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 16427bcb6cafSSascha Wildner #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 16437bcb6cafSSascha Wildner 16447bcb6cafSSascha Wildner 16457bcb6cafSSascha Wildner /* 2: Interleave Structure */ 16467bcb6cafSSascha Wildner 16477bcb6cafSSascha Wildner typedef struct acpi_nfit_interleave 16487bcb6cafSSascha Wildner { 16497bcb6cafSSascha Wildner ACPI_NFIT_HEADER Header; 16507bcb6cafSSascha Wildner UINT16 InterleaveIndex; 16517bcb6cafSSascha Wildner UINT16 Reserved; /* Reserved, must be zero */ 16527bcb6cafSSascha Wildner UINT32 LineCount; 16537bcb6cafSSascha Wildner UINT32 LineSize; 16547bcb6cafSSascha Wildner UINT32 LineOffset[1]; /* Variable length */ 16557bcb6cafSSascha Wildner 16567bcb6cafSSascha Wildner } ACPI_NFIT_INTERLEAVE; 16577bcb6cafSSascha Wildner 16587bcb6cafSSascha Wildner 16597bcb6cafSSascha Wildner /* 3: SMBIOS Management Information Structure */ 16607bcb6cafSSascha Wildner 16617bcb6cafSSascha Wildner typedef struct acpi_nfit_smbios 16627bcb6cafSSascha Wildner { 16637bcb6cafSSascha Wildner ACPI_NFIT_HEADER Header; 16647bcb6cafSSascha Wildner UINT32 Reserved; /* Reserved, must be zero */ 16657bcb6cafSSascha Wildner UINT8 Data[1]; /* Variable length */ 16667bcb6cafSSascha Wildner 16677bcb6cafSSascha Wildner } ACPI_NFIT_SMBIOS; 16687bcb6cafSSascha Wildner 16697bcb6cafSSascha Wildner 16707bcb6cafSSascha Wildner /* 4: NVDIMM Control Region Structure */ 16717bcb6cafSSascha Wildner 16727bcb6cafSSascha Wildner typedef struct acpi_nfit_control_region 16737bcb6cafSSascha Wildner { 16747bcb6cafSSascha Wildner ACPI_NFIT_HEADER Header; 16757bcb6cafSSascha Wildner UINT16 RegionIndex; 16767bcb6cafSSascha Wildner UINT16 VendorId; 16777bcb6cafSSascha Wildner UINT16 DeviceId; 16787bcb6cafSSascha Wildner UINT16 RevisionId; 16797bcb6cafSSascha Wildner UINT16 SubsystemVendorId; 16807bcb6cafSSascha Wildner UINT16 SubsystemDeviceId; 16817bcb6cafSSascha Wildner UINT16 SubsystemRevisionId; 16827bcb6cafSSascha Wildner UINT8 ValidFields; 16837bcb6cafSSascha Wildner UINT8 ManufacturingLocation; 16847bcb6cafSSascha Wildner UINT16 ManufacturingDate; 16857bcb6cafSSascha Wildner UINT8 Reserved[2]; /* Reserved, must be zero */ 16867bcb6cafSSascha Wildner UINT32 SerialNumber; 16877bcb6cafSSascha Wildner UINT16 Code; 16887bcb6cafSSascha Wildner UINT16 Windows; 16897bcb6cafSSascha Wildner UINT64 WindowSize; 16907bcb6cafSSascha Wildner UINT64 CommandOffset; 16917bcb6cafSSascha Wildner UINT64 CommandSize; 16927bcb6cafSSascha Wildner UINT64 StatusOffset; 16937bcb6cafSSascha Wildner UINT64 StatusSize; 16947bcb6cafSSascha Wildner UINT16 Flags; 16957bcb6cafSSascha Wildner UINT8 Reserved1[6]; /* Reserved, must be zero */ 16967bcb6cafSSascha Wildner 16977bcb6cafSSascha Wildner } ACPI_NFIT_CONTROL_REGION; 16987bcb6cafSSascha Wildner 16997bcb6cafSSascha Wildner /* Flags */ 17007bcb6cafSSascha Wildner 17017bcb6cafSSascha Wildner #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 17027bcb6cafSSascha Wildner 17037bcb6cafSSascha Wildner /* ValidFields bits */ 17047bcb6cafSSascha Wildner 17057bcb6cafSSascha Wildner #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 17067bcb6cafSSascha Wildner 17077bcb6cafSSascha Wildner 17087bcb6cafSSascha Wildner /* 5: NVDIMM Block Data Window Region Structure */ 17097bcb6cafSSascha Wildner 17107bcb6cafSSascha Wildner typedef struct acpi_nfit_data_region 17117bcb6cafSSascha Wildner { 17127bcb6cafSSascha Wildner ACPI_NFIT_HEADER Header; 17137bcb6cafSSascha Wildner UINT16 RegionIndex; 17147bcb6cafSSascha Wildner UINT16 Windows; 17157bcb6cafSSascha Wildner UINT64 Offset; 17167bcb6cafSSascha Wildner UINT64 Size; 17177bcb6cafSSascha Wildner UINT64 Capacity; 17187bcb6cafSSascha Wildner UINT64 StartAddress; 17197bcb6cafSSascha Wildner 17207bcb6cafSSascha Wildner } ACPI_NFIT_DATA_REGION; 17217bcb6cafSSascha Wildner 17227bcb6cafSSascha Wildner 17237bcb6cafSSascha Wildner /* 6: Flush Hint Address Structure */ 17247bcb6cafSSascha Wildner 17257bcb6cafSSascha Wildner typedef struct acpi_nfit_flush_address 17267bcb6cafSSascha Wildner { 17277bcb6cafSSascha Wildner ACPI_NFIT_HEADER Header; 17287bcb6cafSSascha Wildner UINT32 DeviceHandle; 17297bcb6cafSSascha Wildner UINT16 HintCount; 17307bcb6cafSSascha Wildner UINT8 Reserved[6]; /* Reserved, must be zero */ 17317bcb6cafSSascha Wildner UINT64 HintAddress[1]; /* Variable length */ 17327bcb6cafSSascha Wildner 17337bcb6cafSSascha Wildner } ACPI_NFIT_FLUSH_ADDRESS; 17347bcb6cafSSascha Wildner 17357bcb6cafSSascha Wildner 17367bcb6cafSSascha Wildner /* 7: Platform Capabilities Structure */ 17377bcb6cafSSascha Wildner 17387bcb6cafSSascha Wildner typedef struct acpi_nfit_capabilities 17397bcb6cafSSascha Wildner { 17407bcb6cafSSascha Wildner ACPI_NFIT_HEADER Header; 17417bcb6cafSSascha Wildner UINT8 HighestCapability; 17427bcb6cafSSascha Wildner UINT8 Reserved[3]; /* Reserved, must be zero */ 17437bcb6cafSSascha Wildner UINT32 Capabilities; 17447bcb6cafSSascha Wildner UINT32 Reserved2; 17457bcb6cafSSascha Wildner 17467bcb6cafSSascha Wildner } ACPI_NFIT_CAPABILITIES; 17477bcb6cafSSascha Wildner 17487bcb6cafSSascha Wildner /* Capabilities Flags */ 17497bcb6cafSSascha Wildner 17507bcb6cafSSascha Wildner #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ 17517bcb6cafSSascha Wildner #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ 17527bcb6cafSSascha Wildner #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ 17537bcb6cafSSascha Wildner 17547bcb6cafSSascha Wildner 17557bcb6cafSSascha Wildner /* 17567bcb6cafSSascha Wildner * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM 17577bcb6cafSSascha Wildner */ 17587bcb6cafSSascha Wildner typedef struct nfit_device_handle 17597bcb6cafSSascha Wildner { 17607bcb6cafSSascha Wildner UINT32 Handle; 17617bcb6cafSSascha Wildner 17627bcb6cafSSascha Wildner } NFIT_DEVICE_HANDLE; 17637bcb6cafSSascha Wildner 17647bcb6cafSSascha Wildner /* Device handle construction and extraction macros */ 17657bcb6cafSSascha Wildner 17667bcb6cafSSascha Wildner #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F 17677bcb6cafSSascha Wildner #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 17687bcb6cafSSascha Wildner #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 17697bcb6cafSSascha Wildner #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 17707bcb6cafSSascha Wildner #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 17717bcb6cafSSascha Wildner 17727bcb6cafSSascha Wildner #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 17737bcb6cafSSascha Wildner #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 17747bcb6cafSSascha Wildner #define ACPI_NFIT_MEMORY_ID_OFFSET 8 17757bcb6cafSSascha Wildner #define ACPI_NFIT_SOCKET_ID_OFFSET 12 17767bcb6cafSSascha Wildner #define ACPI_NFIT_NODE_ID_OFFSET 16 17777bcb6cafSSascha Wildner 17787bcb6cafSSascha Wildner /* Macro to construct a NFIT/NVDIMM device handle */ 17797bcb6cafSSascha Wildner 17807bcb6cafSSascha Wildner #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ 17817bcb6cafSSascha Wildner ((dimm) | \ 17827bcb6cafSSascha Wildner ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ 17837bcb6cafSSascha Wildner ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ 17847bcb6cafSSascha Wildner ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ 17857bcb6cafSSascha Wildner ((node) << ACPI_NFIT_NODE_ID_OFFSET)) 17867bcb6cafSSascha Wildner 17877bcb6cafSSascha Wildner /* Macros to extract individual fields from a NFIT/NVDIMM device handle */ 17887bcb6cafSSascha Wildner 17897bcb6cafSSascha Wildner #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ 17907bcb6cafSSascha Wildner ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) 17917bcb6cafSSascha Wildner 17927bcb6cafSSascha Wildner #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ 17937bcb6cafSSascha Wildner (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) 17947bcb6cafSSascha Wildner 17957bcb6cafSSascha Wildner #define ACPI_NFIT_GET_MEMORY_ID(handle) \ 17967bcb6cafSSascha Wildner (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) 17977bcb6cafSSascha Wildner 17987bcb6cafSSascha Wildner #define ACPI_NFIT_GET_SOCKET_ID(handle) \ 17997bcb6cafSSascha Wildner (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) 18007bcb6cafSSascha Wildner 18017bcb6cafSSascha Wildner #define ACPI_NFIT_GET_NODE_ID(handle) \ 18027bcb6cafSSascha Wildner (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) 18037bcb6cafSSascha Wildner 18047bcb6cafSSascha Wildner 18057bcb6cafSSascha Wildner /******************************************************************************* 18067bcb6cafSSascha Wildner * 180784fe3360SSascha Wildner * NHLT - Non HD Audio Link Table 180884fe3360SSascha Wildner * 180984fe3360SSascha Wildner * Conforms to: Intel Smart Sound Technology NHLT Specification 181084fe3360SSascha Wildner * Version 0.8.1, January 2020. 181184fe3360SSascha Wildner * 181284fe3360SSascha Wildner ******************************************************************************/ 181384fe3360SSascha Wildner 181484fe3360SSascha Wildner /* Main table */ 181584fe3360SSascha Wildner 181684fe3360SSascha Wildner typedef struct acpi_table_nhlt 181784fe3360SSascha Wildner { 181884fe3360SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 181984fe3360SSascha Wildner UINT8 EndpointCount; 182084fe3360SSascha Wildner 182184fe3360SSascha Wildner } ACPI_TABLE_NHLT; 182284fe3360SSascha Wildner 1823*aab122a6SSascha Wildner typedef struct acpi_table_nhlt_endpoint_count 1824*aab122a6SSascha Wildner { 1825*aab122a6SSascha Wildner UINT8 EndpointCount; 1826*aab122a6SSascha Wildner 1827*aab122a6SSascha Wildner } ACPI_TABLE_NHLT_ENDPOINT_COUNT; 1828*aab122a6SSascha Wildner 182984fe3360SSascha Wildner typedef struct acpi_nhlt_endpoint 183084fe3360SSascha Wildner { 183184fe3360SSascha Wildner UINT32 DescriptorLength; 183284fe3360SSascha Wildner UINT8 LinkType; 183384fe3360SSascha Wildner UINT8 InstanceId; 183484fe3360SSascha Wildner UINT16 VendorId; 183584fe3360SSascha Wildner UINT16 DeviceId; 183684fe3360SSascha Wildner UINT16 RevisionId; 183784fe3360SSascha Wildner UINT32 SubsystemId; 183884fe3360SSascha Wildner UINT8 DeviceType; 183984fe3360SSascha Wildner UINT8 Direction; 184084fe3360SSascha Wildner UINT8 VirtualBusId; 184184fe3360SSascha Wildner 184284fe3360SSascha Wildner } ACPI_NHLT_ENDPOINT; 184384fe3360SSascha Wildner 184484fe3360SSascha Wildner /* Types for LinkType field above */ 184584fe3360SSascha Wildner 184684fe3360SSascha Wildner #define ACPI_NHLT_RESERVED_HD_AUDIO 0 184784fe3360SSascha Wildner #define ACPI_NHLT_RESERVED_DSP 1 184884fe3360SSascha Wildner #define ACPI_NHLT_PDM 2 184984fe3360SSascha Wildner #define ACPI_NHLT_SSP 3 185084fe3360SSascha Wildner #define ACPI_NHLT_RESERVED_SLIMBUS 4 185184fe3360SSascha Wildner #define ACPI_NHLT_RESERVED_SOUNDWIRE 5 185284fe3360SSascha Wildner #define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */ 185384fe3360SSascha Wildner 185484fe3360SSascha Wildner /* All other values above are reserved */ 185584fe3360SSascha Wildner 185684fe3360SSascha Wildner /* Values for DeviceId field above */ 185784fe3360SSascha Wildner 185884fe3360SSascha Wildner #define ACPI_NHLT_PDM_DMIC 0xAE20 185984fe3360SSascha Wildner #define ACPI_NHLT_BT_SIDEBAND 0xAE30 186084fe3360SSascha Wildner #define ACPI_NHLT_I2S_TDM_CODECS 0xAE23 186184fe3360SSascha Wildner 186284fe3360SSascha Wildner /* Values for DeviceType field above */ 186384fe3360SSascha Wildner 186484fe3360SSascha Wildner /* SSP Link */ 186584fe3360SSascha Wildner 186684fe3360SSascha Wildner #define ACPI_NHLT_LINK_BT_SIDEBAND 0 186784fe3360SSascha Wildner #define ACPI_NHLT_LINK_FM 1 186884fe3360SSascha Wildner #define ACPI_NHLT_LINK_MODEM 2 186984fe3360SSascha Wildner /* 3 is reserved */ 187084fe3360SSascha Wildner #define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4 187184fe3360SSascha Wildner 187284fe3360SSascha Wildner /* PDM Link */ 187384fe3360SSascha Wildner 187484fe3360SSascha Wildner #define ACPI_NHLT_PDM_ON_CAVS_1P8 0 187584fe3360SSascha Wildner #define ACPI_NHLT_PDM_ON_CAVS_1P5 1 187684fe3360SSascha Wildner 187784fe3360SSascha Wildner /* Values for Direction field above */ 187884fe3360SSascha Wildner 187984fe3360SSascha Wildner #define ACPI_NHLT_DIR_RENDER 0 188084fe3360SSascha Wildner #define ACPI_NHLT_DIR_CAPTURE 1 188184fe3360SSascha Wildner #define ACPI_NHLT_DIR_RENDER_LOOPBACK 2 188284fe3360SSascha Wildner #define ACPI_NHLT_DIR_RENDER_FEEDBACK 3 188384fe3360SSascha Wildner #define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */ 188484fe3360SSascha Wildner 1885*aab122a6SSascha Wildner /* Capabilities = 2 */ 1886*aab122a6SSascha Wildner 188784fe3360SSascha Wildner typedef struct acpi_nhlt_device_specific_config 188884fe3360SSascha Wildner { 188984fe3360SSascha Wildner UINT32 CapabilitiesSize; 189084fe3360SSascha Wildner UINT8 VirtualSlot; 189184fe3360SSascha Wildner UINT8 ConfigType; 189284fe3360SSascha Wildner 189384fe3360SSascha Wildner } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG; 189484fe3360SSascha Wildner 1895*aab122a6SSascha Wildner /* Capabilities = 3 */ 1896*aab122a6SSascha Wildner 189784fe3360SSascha Wildner typedef struct acpi_nhlt_device_specific_config_a 189884fe3360SSascha Wildner { 189984fe3360SSascha Wildner UINT32 CapabilitiesSize; 190084fe3360SSascha Wildner UINT8 VirtualSlot; 190184fe3360SSascha Wildner UINT8 ConfigType; 190284fe3360SSascha Wildner UINT8 ArrayType; 190384fe3360SSascha Wildner 190484fe3360SSascha Wildner } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A; 190584fe3360SSascha Wildner 1906*aab122a6SSascha Wildner /* Capabilities = 3 */ 1907*aab122a6SSascha Wildner 1908*aab122a6SSascha Wildner typedef struct acpi_nhlt_device_specific_config_d 1909*aab122a6SSascha Wildner { 1910*aab122a6SSascha Wildner UINT8 VirtualSlot; 1911*aab122a6SSascha Wildner UINT8 ConfigType; 1912*aab122a6SSascha Wildner UINT8 ArrayType; 1913*aab122a6SSascha Wildner 1914*aab122a6SSascha Wildner } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_D; 1915*aab122a6SSascha Wildner 191684fe3360SSascha Wildner /* Values for Config Type above */ 191784fe3360SSascha Wildner 1918*aab122a6SSascha Wildner #define ACPI_NHLT_CONFIG_TYPE_GENERIC 0x00 1919*aab122a6SSascha Wildner #define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY 0x01 1920*aab122a6SSascha Wildner #define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK 0x03 1921*aab122a6SSascha Wildner #define ACPI_NHLT_CONFIG_TYPE_RESERVED 0x04 /* 4 and above are reserved */ 192284fe3360SSascha Wildner 1923*aab122a6SSascha Wildner /* Capabilities = 0 */ 192484fe3360SSascha Wildner 192584fe3360SSascha Wildner typedef struct acpi_nhlt_device_specific_config_b 192684fe3360SSascha Wildner { 192784fe3360SSascha Wildner UINT32 CapabilitiesSize; 192884fe3360SSascha Wildner 192984fe3360SSascha Wildner } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B; 193084fe3360SSascha Wildner 1931*aab122a6SSascha Wildner /* Capabilities = 1 */ 1932*aab122a6SSascha Wildner 193384fe3360SSascha Wildner typedef struct acpi_nhlt_device_specific_config_c 193484fe3360SSascha Wildner { 193584fe3360SSascha Wildner UINT32 CapabilitiesSize; 193684fe3360SSascha Wildner UINT8 VirtualSlot; 193784fe3360SSascha Wildner 193884fe3360SSascha Wildner } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C; 193984fe3360SSascha Wildner 1940*aab122a6SSascha Wildner typedef struct acpi_nhlt_render_device_specific_config 1941*aab122a6SSascha Wildner { 1942*aab122a6SSascha Wildner UINT32 CapabilitiesSize; 1943*aab122a6SSascha Wildner UINT8 VirtualSlot; 1944*aab122a6SSascha Wildner 1945*aab122a6SSascha Wildner } ACPI_NHLT_RENDER_DEVICE_SPECIFIC_CONFIG; 1946*aab122a6SSascha Wildner 194784fe3360SSascha Wildner typedef struct acpi_nhlt_wave_extensible 194884fe3360SSascha Wildner { 194984fe3360SSascha Wildner UINT16 FormatTag; 195084fe3360SSascha Wildner UINT16 ChannelCount; 195184fe3360SSascha Wildner UINT32 SamplesPerSec; 195284fe3360SSascha Wildner UINT32 AvgBytesPerSec; 195384fe3360SSascha Wildner UINT16 BlockAlign; 195484fe3360SSascha Wildner UINT16 BitsPerSample; 195584fe3360SSascha Wildner UINT16 ExtraFormatSize; 195684fe3360SSascha Wildner UINT16 ValidBitsPerSample; 195784fe3360SSascha Wildner UINT32 ChannelMask; 195884fe3360SSascha Wildner UINT8 SubFormatGuid[16]; 195984fe3360SSascha Wildner 196084fe3360SSascha Wildner } ACPI_NHLT_WAVE_EXTENSIBLE; 196184fe3360SSascha Wildner 196284fe3360SSascha Wildner /* Values for ChannelMask above */ 196384fe3360SSascha Wildner 196484fe3360SSascha Wildner #define ACPI_NHLT_SPKR_FRONT_LEFT 0x1 196584fe3360SSascha Wildner #define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2 196684fe3360SSascha Wildner #define ACPI_NHLT_SPKR_FRONT_CENTER 0x4 196784fe3360SSascha Wildner #define ACPI_NHLT_SPKR_LOW_FREQ 0x8 196884fe3360SSascha Wildner #define ACPI_NHLT_SPKR_BACK_LEFT 0x10 196984fe3360SSascha Wildner #define ACPI_NHLT_SPKR_BACK_RIGHT 0x20 197084fe3360SSascha Wildner #define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40 197184fe3360SSascha Wildner #define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80 197284fe3360SSascha Wildner #define ACPI_NHLT_SPKR_BACK_CENTER 0x100 197384fe3360SSascha Wildner #define ACPI_NHLT_SPKR_SIDE_LEFT 0x200 197484fe3360SSascha Wildner #define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400 197584fe3360SSascha Wildner #define ACPI_NHLT_SPKR_TOP_CENTER 0x800 197684fe3360SSascha Wildner #define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000 197784fe3360SSascha Wildner #define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000 197884fe3360SSascha Wildner #define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000 197984fe3360SSascha Wildner #define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000 198084fe3360SSascha Wildner #define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000 198184fe3360SSascha Wildner #define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000 198284fe3360SSascha Wildner 198384fe3360SSascha Wildner typedef struct acpi_nhlt_format_config 198484fe3360SSascha Wildner { 198584fe3360SSascha Wildner ACPI_NHLT_WAVE_EXTENSIBLE Format; 198684fe3360SSascha Wildner UINT32 CapabilitySize; 198784fe3360SSascha Wildner UINT8 Capabilities[]; 198884fe3360SSascha Wildner 198984fe3360SSascha Wildner } ACPI_NHLT_FORMAT_CONFIG; 199084fe3360SSascha Wildner 199184fe3360SSascha Wildner typedef struct acpi_nhlt_formats_config 199284fe3360SSascha Wildner { 199384fe3360SSascha Wildner UINT8 FormatsCount; 199484fe3360SSascha Wildner 199584fe3360SSascha Wildner } ACPI_NHLT_FORMATS_CONFIG; 199684fe3360SSascha Wildner 199784fe3360SSascha Wildner typedef struct acpi_nhlt_device_specific_hdr 199884fe3360SSascha Wildner { 199984fe3360SSascha Wildner UINT8 VirtualSlot; 200084fe3360SSascha Wildner UINT8 ConfigType; 200184fe3360SSascha Wildner 200284fe3360SSascha Wildner } ACPI_NHLT_DEVICE_SPECIFIC_HDR; 200384fe3360SSascha Wildner 200484fe3360SSascha Wildner /* Types for ConfigType above */ 200584fe3360SSascha Wildner 200684fe3360SSascha Wildner #define ACPI_NHLT_GENERIC 0 200784fe3360SSascha Wildner #define ACPI_NHLT_MIC 1 200884fe3360SSascha Wildner #define ACPI_NHLT_RENDER 3 200984fe3360SSascha Wildner 201084fe3360SSascha Wildner typedef struct acpi_nhlt_mic_device_specific_config 201184fe3360SSascha Wildner { 201284fe3360SSascha Wildner ACPI_NHLT_DEVICE_SPECIFIC_HDR DeviceConfig; 201384fe3360SSascha Wildner UINT8 ArrayTypeExt; 201484fe3360SSascha Wildner 201584fe3360SSascha Wildner } ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG; 201684fe3360SSascha Wildner 201784fe3360SSascha Wildner /* Values for ArrayTypeExt above */ 201884fe3360SSascha Wildner 2019*aab122a6SSascha Wildner #define ACPI_NHLT_ARRAY_TYPE_RESERVED 0x09 // 9 and below are reserved 2020*aab122a6SSascha Wildner #define ACPI_NHLT_SMALL_LINEAR_2ELEMENT 0x0A 2021*aab122a6SSascha Wildner #define ACPI_NHLT_BIG_LINEAR_2ELEMENT 0x0B 2022*aab122a6SSascha Wildner #define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C 2023*aab122a6SSascha Wildner #define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT 0x0D 2024*aab122a6SSascha Wildner #define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E 2025*aab122a6SSascha Wildner #define ACPI_NHLT_VENDOR_DEFINED 0x0F 2026*aab122a6SSascha Wildner #define ACPI_NHLT_ARRAY_TYPE_MASK 0x0F 2027*aab122a6SSascha Wildner #define ACPI_NHLT_ARRAY_TYPE_EXT_MASK 0x10 202884fe3360SSascha Wildner 2029*aab122a6SSascha Wildner #define ACPI_NHLT_NO_EXTENSION 0x0 2030*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT (1<<4) 203184fe3360SSascha Wildner 2032*aab122a6SSascha Wildner typedef struct acpi_nhlt_vendor_mic_count 2033*aab122a6SSascha Wildner { 2034*aab122a6SSascha Wildner UINT8 MicrophoneCount; 2035*aab122a6SSascha Wildner 2036*aab122a6SSascha Wildner } ACPI_NHLT_VENDOR_MIC_COUNT; 203784fe3360SSascha Wildner 203884fe3360SSascha Wildner typedef struct acpi_nhlt_vendor_mic_config 203984fe3360SSascha Wildner { 204084fe3360SSascha Wildner UINT8 Type; 204184fe3360SSascha Wildner UINT8 Panel; 204284fe3360SSascha Wildner UINT16 SpeakerPositionDistance; // mm 204384fe3360SSascha Wildner UINT16 HorizontalOffset; // mm 204484fe3360SSascha Wildner UINT16 VerticalOffset; // mm 204584fe3360SSascha Wildner UINT8 FrequencyLowBand; // 5*Hz 204684fe3360SSascha Wildner UINT8 FrequencyHighBand; // 500*Hz 204784fe3360SSascha Wildner UINT16 DirectionAngle; // -180 - + 180 204884fe3360SSascha Wildner UINT16 ElevationAngle; // -180 - + 180 204984fe3360SSascha Wildner UINT16 WorkVerticalAngleBegin; // -180 - + 180 with 2 deg step 205084fe3360SSascha Wildner UINT16 WorkVerticalAngleEnd; // -180 - + 180 with 2 deg step 205184fe3360SSascha Wildner UINT16 WorkHorizontalAngleBegin; // -180 - + 180 with 2 deg step 205284fe3360SSascha Wildner UINT16 WorkHorizontalAngleEnd; // -180 - + 180 with 2 deg step 205384fe3360SSascha Wildner 205484fe3360SSascha Wildner } ACPI_NHLT_VENDOR_MIC_CONFIG; 205584fe3360SSascha Wildner 205684fe3360SSascha Wildner /* Values for Type field above */ 205784fe3360SSascha Wildner 2058*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_OMNIDIRECTIONAL 0 2059*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_SUBCARDIOID 1 2060*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_CARDIOID 2 2061*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_SUPER_CARDIOID 3 2062*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_HYPER_CARDIOID 4 2063*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_8_SHAPED 5 2064*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_RESERVED6 6 // 6 is reserved 2065*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_VENDOR_DEFINED 7 2066*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_RESERVED 8 // 8 and above are reserved 206784fe3360SSascha Wildner 206884fe3360SSascha Wildner /* Values for Panel field above */ 206984fe3360SSascha Wildner 2070*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_POSITION_TOP 0 2071*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_POSITION_BOTTOM 1 2072*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_POSITION_LEFT 2 2073*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_POSITION_RIGHT 3 2074*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_POSITION_FRONT 4 2075*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_POSITION_BACK 5 2076*aab122a6SSascha Wildner #define ACPI_NHLT_MIC_POSITION_RESERVED 6 // 6 and above are reserved 207784fe3360SSascha Wildner 207884fe3360SSascha Wildner typedef struct acpi_nhlt_vendor_mic_device_specific_config 207984fe3360SSascha Wildner { 208084fe3360SSascha Wildner ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG MicArrayDeviceConfig; 208184fe3360SSascha Wildner UINT8 NumberOfMicrophones; 208284fe3360SSascha Wildner ACPI_NHLT_VENDOR_MIC_CONFIG MicConfig[]; // Indexed by NumberOfMicrophones 208384fe3360SSascha Wildner 208484fe3360SSascha Wildner } ACPI_NHLT_VENDOR_MIC_DEVICE_SPECIFIC_CONFIG; 208584fe3360SSascha Wildner 208684fe3360SSascha Wildner /* Microphone SNR and Sensitivity extension */ 208784fe3360SSascha Wildner 208884fe3360SSascha Wildner typedef struct acpi_nhlt_mic_snr_sensitivity_extension 208984fe3360SSascha Wildner { 209084fe3360SSascha Wildner UINT32 SNR; 209184fe3360SSascha Wildner UINT32 Sensitivity; 209284fe3360SSascha Wildner 209384fe3360SSascha Wildner } ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION; 209484fe3360SSascha Wildner 2095*aab122a6SSascha Wildner /* Render device with feedback */ 2096*aab122a6SSascha Wildner 209784fe3360SSascha Wildner typedef struct acpi_nhlt_render_feedback_device_specific_config 209884fe3360SSascha Wildner { 209984fe3360SSascha Wildner UINT8 FeedbackVirtualSlot; // Render slot in case of capture 210084fe3360SSascha Wildner UINT16 FeedbackChannels; // Informative only 210184fe3360SSascha Wildner UINT16 FeedbackValidBitsPerSample; 210284fe3360SSascha Wildner 210384fe3360SSascha Wildner } ACPI_NHLT_RENDER_FEEDBACK_DEVICE_SPECIFIC_CONFIG; 210484fe3360SSascha Wildner 210584fe3360SSascha Wildner /* Linux-specific structures */ 210684fe3360SSascha Wildner 210784fe3360SSascha Wildner typedef struct acpi_nhlt_linux_specific_count 210884fe3360SSascha Wildner { 210984fe3360SSascha Wildner UINT8 StructureCount; 211084fe3360SSascha Wildner 211184fe3360SSascha Wildner } ACPI_NHLT_LINUX_SPECIFIC_COUNT; 211284fe3360SSascha Wildner 211384fe3360SSascha Wildner typedef struct acpi_nhlt_linux_specific_data 211484fe3360SSascha Wildner { 211584fe3360SSascha Wildner UINT8 DeviceId[16]; 211684fe3360SSascha Wildner UINT8 DeviceInstanceId; 211784fe3360SSascha Wildner UINT8 DevicePortId; 211884fe3360SSascha Wildner 211984fe3360SSascha Wildner } ACPI_NHLT_LINUX_SPECIFIC_DATA; 212084fe3360SSascha Wildner 2121*aab122a6SSascha Wildner typedef struct acpi_nhlt_linux_specific_data_b 2122*aab122a6SSascha Wildner { 2123*aab122a6SSascha Wildner UINT8 SpecificData[18]; 2124*aab122a6SSascha Wildner 2125*aab122a6SSascha Wildner } ACPI_NHLT_LINUX_SPECIFIC_DATA_B; 2126*aab122a6SSascha Wildner 212784fe3360SSascha Wildner typedef struct acpi_nhlt_table_terminator 212884fe3360SSascha Wildner { 212984fe3360SSascha Wildner UINT32 TerminatorValue; 213084fe3360SSascha Wildner UINT32 TerminatorSignature; 213184fe3360SSascha Wildner 213284fe3360SSascha Wildner } ACPI_NHLT_TABLE_TERMINATOR; 213384fe3360SSascha Wildner 213484fe3360SSascha Wildner 213584fe3360SSascha Wildner /******************************************************************************* 213684fe3360SSascha Wildner * 21377bcb6cafSSascha Wildner * PCCT - Platform Communications Channel Table (ACPI 5.0) 21387bcb6cafSSascha Wildner * Version 2 (ACPI 6.2) 21397bcb6cafSSascha Wildner * 21407bcb6cafSSascha Wildner ******************************************************************************/ 21417bcb6cafSSascha Wildner 21427bcb6cafSSascha Wildner typedef struct acpi_table_pcct 21437bcb6cafSSascha Wildner { 21447bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 21457bcb6cafSSascha Wildner UINT32 Flags; 21467bcb6cafSSascha Wildner UINT64 Reserved; 21477bcb6cafSSascha Wildner 21487bcb6cafSSascha Wildner } ACPI_TABLE_PCCT; 21497bcb6cafSSascha Wildner 21507bcb6cafSSascha Wildner /* Values for Flags field above */ 21517bcb6cafSSascha Wildner 21527bcb6cafSSascha Wildner #define ACPI_PCCT_DOORBELL 1 21537bcb6cafSSascha Wildner 21547bcb6cafSSascha Wildner /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 21557bcb6cafSSascha Wildner 21567bcb6cafSSascha Wildner enum AcpiPcctType 21577bcb6cafSSascha Wildner { 21587bcb6cafSSascha Wildner ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 21597bcb6cafSSascha Wildner ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 21607bcb6cafSSascha Wildner ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 21617bcb6cafSSascha Wildner ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ 21627bcb6cafSSascha Wildner ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ 216301d5d5dfSSascha Wildner ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */ 216401d5d5dfSSascha Wildner ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 21657bcb6cafSSascha Wildner }; 21667bcb6cafSSascha Wildner 21677bcb6cafSSascha Wildner /* 21687bcb6cafSSascha Wildner * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 21697bcb6cafSSascha Wildner */ 21707bcb6cafSSascha Wildner 21717bcb6cafSSascha Wildner /* 0: Generic Communications Subspace */ 21727bcb6cafSSascha Wildner 21737bcb6cafSSascha Wildner typedef struct acpi_pcct_subspace 21747bcb6cafSSascha Wildner { 21757bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 21767bcb6cafSSascha Wildner UINT8 Reserved[6]; 21777bcb6cafSSascha Wildner UINT64 BaseAddress; 21787bcb6cafSSascha Wildner UINT64 Length; 21797bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS DoorbellRegister; 21807bcb6cafSSascha Wildner UINT64 PreserveMask; 21817bcb6cafSSascha Wildner UINT64 WriteMask; 21827bcb6cafSSascha Wildner UINT32 Latency; 21837bcb6cafSSascha Wildner UINT32 MaxAccessRate; 21847bcb6cafSSascha Wildner UINT16 MinTurnaroundTime; 21857bcb6cafSSascha Wildner 21867bcb6cafSSascha Wildner } ACPI_PCCT_SUBSPACE; 21877bcb6cafSSascha Wildner 21887bcb6cafSSascha Wildner 21897bcb6cafSSascha Wildner /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 21907bcb6cafSSascha Wildner 21917bcb6cafSSascha Wildner typedef struct acpi_pcct_hw_reduced 21927bcb6cafSSascha Wildner { 21937bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 21947bcb6cafSSascha Wildner UINT32 PlatformInterrupt; 21957bcb6cafSSascha Wildner UINT8 Flags; 21967bcb6cafSSascha Wildner UINT8 Reserved; 21977bcb6cafSSascha Wildner UINT64 BaseAddress; 21987bcb6cafSSascha Wildner UINT64 Length; 21997bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS DoorbellRegister; 22007bcb6cafSSascha Wildner UINT64 PreserveMask; 22017bcb6cafSSascha Wildner UINT64 WriteMask; 22027bcb6cafSSascha Wildner UINT32 Latency; 22037bcb6cafSSascha Wildner UINT32 MaxAccessRate; 22047bcb6cafSSascha Wildner UINT16 MinTurnaroundTime; 22057bcb6cafSSascha Wildner 22067bcb6cafSSascha Wildner } ACPI_PCCT_HW_REDUCED; 22077bcb6cafSSascha Wildner 22087bcb6cafSSascha Wildner 22097bcb6cafSSascha Wildner /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 22107bcb6cafSSascha Wildner 22117bcb6cafSSascha Wildner typedef struct acpi_pcct_hw_reduced_type2 22127bcb6cafSSascha Wildner { 22137bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 22147bcb6cafSSascha Wildner UINT32 PlatformInterrupt; 22157bcb6cafSSascha Wildner UINT8 Flags; 22167bcb6cafSSascha Wildner UINT8 Reserved; 22177bcb6cafSSascha Wildner UINT64 BaseAddress; 22187bcb6cafSSascha Wildner UINT64 Length; 22197bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS DoorbellRegister; 22207bcb6cafSSascha Wildner UINT64 PreserveMask; 22217bcb6cafSSascha Wildner UINT64 WriteMask; 22227bcb6cafSSascha Wildner UINT32 Latency; 22237bcb6cafSSascha Wildner UINT32 MaxAccessRate; 22247bcb6cafSSascha Wildner UINT16 MinTurnaroundTime; 22257bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS PlatformAckRegister; 22267bcb6cafSSascha Wildner UINT64 AckPreserveMask; 22277bcb6cafSSascha Wildner UINT64 AckWriteMask; 22287bcb6cafSSascha Wildner 22297bcb6cafSSascha Wildner } ACPI_PCCT_HW_REDUCED_TYPE2; 22307bcb6cafSSascha Wildner 22317bcb6cafSSascha Wildner 22327bcb6cafSSascha Wildner /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ 22337bcb6cafSSascha Wildner 22347bcb6cafSSascha Wildner typedef struct acpi_pcct_ext_pcc_master 22357bcb6cafSSascha Wildner { 22367bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 22377bcb6cafSSascha Wildner UINT32 PlatformInterrupt; 22387bcb6cafSSascha Wildner UINT8 Flags; 22397bcb6cafSSascha Wildner UINT8 Reserved1; 22407bcb6cafSSascha Wildner UINT64 BaseAddress; 22417bcb6cafSSascha Wildner UINT32 Length; 22427bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS DoorbellRegister; 22437bcb6cafSSascha Wildner UINT64 PreserveMask; 22447bcb6cafSSascha Wildner UINT64 WriteMask; 22457bcb6cafSSascha Wildner UINT32 Latency; 22467bcb6cafSSascha Wildner UINT32 MaxAccessRate; 22477bcb6cafSSascha Wildner UINT32 MinTurnaroundTime; 22487bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS PlatformAckRegister; 22497bcb6cafSSascha Wildner UINT64 AckPreserveMask; 22507bcb6cafSSascha Wildner UINT64 AckSetMask; 22517bcb6cafSSascha Wildner UINT64 Reserved2; 22527bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS CmdCompleteRegister; 22537bcb6cafSSascha Wildner UINT64 CmdCompleteMask; 22547bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS CmdUpdateRegister; 22557bcb6cafSSascha Wildner UINT64 CmdUpdatePreserveMask; 22567bcb6cafSSascha Wildner UINT64 CmdUpdateSetMask; 22577bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS ErrorStatusRegister; 22587bcb6cafSSascha Wildner UINT64 ErrorStatusMask; 22597bcb6cafSSascha Wildner 22607bcb6cafSSascha Wildner } ACPI_PCCT_EXT_PCC_MASTER; 22617bcb6cafSSascha Wildner 22627bcb6cafSSascha Wildner 22637bcb6cafSSascha Wildner /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ 22647bcb6cafSSascha Wildner 22657bcb6cafSSascha Wildner typedef struct acpi_pcct_ext_pcc_slave 22667bcb6cafSSascha Wildner { 22677bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 22687bcb6cafSSascha Wildner UINT32 PlatformInterrupt; 22697bcb6cafSSascha Wildner UINT8 Flags; 22707bcb6cafSSascha Wildner UINT8 Reserved1; 22717bcb6cafSSascha Wildner UINT64 BaseAddress; 22727bcb6cafSSascha Wildner UINT32 Length; 22737bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS DoorbellRegister; 22747bcb6cafSSascha Wildner UINT64 PreserveMask; 22757bcb6cafSSascha Wildner UINT64 WriteMask; 22767bcb6cafSSascha Wildner UINT32 Latency; 22777bcb6cafSSascha Wildner UINT32 MaxAccessRate; 22787bcb6cafSSascha Wildner UINT32 MinTurnaroundTime; 22797bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS PlatformAckRegister; 22807bcb6cafSSascha Wildner UINT64 AckPreserveMask; 22817bcb6cafSSascha Wildner UINT64 AckSetMask; 22827bcb6cafSSascha Wildner UINT64 Reserved2; 22837bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS CmdCompleteRegister; 22847bcb6cafSSascha Wildner UINT64 CmdCompleteMask; 22857bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS CmdUpdateRegister; 22867bcb6cafSSascha Wildner UINT64 CmdUpdatePreserveMask; 22877bcb6cafSSascha Wildner UINT64 CmdUpdateSetMask; 22887bcb6cafSSascha Wildner ACPI_GENERIC_ADDRESS ErrorStatusRegister; 22897bcb6cafSSascha Wildner UINT64 ErrorStatusMask; 22907bcb6cafSSascha Wildner 22917bcb6cafSSascha Wildner } ACPI_PCCT_EXT_PCC_SLAVE; 22927bcb6cafSSascha Wildner 229301d5d5dfSSascha Wildner /* 5: HW Registers based Communications Subspace */ 229401d5d5dfSSascha Wildner 229501d5d5dfSSascha Wildner typedef struct acpi_pcct_hw_reg 229601d5d5dfSSascha Wildner { 229701d5d5dfSSascha Wildner ACPI_SUBTABLE_HEADER Header; 229801d5d5dfSSascha Wildner UINT16 Version; 229901d5d5dfSSascha Wildner UINT64 BaseAddress; 230001d5d5dfSSascha Wildner UINT64 Length; 230101d5d5dfSSascha Wildner ACPI_GENERIC_ADDRESS DoorbellRegister; 230201d5d5dfSSascha Wildner UINT64 DoorbellPreserve; 230301d5d5dfSSascha Wildner UINT64 DoorbellWrite; 230401d5d5dfSSascha Wildner ACPI_GENERIC_ADDRESS CmdCompleteRegister; 230501d5d5dfSSascha Wildner UINT64 CmdCompleteMask; 230601d5d5dfSSascha Wildner ACPI_GENERIC_ADDRESS ErrorStatusRegister; 230701d5d5dfSSascha Wildner UINT64 ErrorStatusMask; 230801d5d5dfSSascha Wildner UINT32 NominalLatency; 230901d5d5dfSSascha Wildner UINT32 MinTurnaroundTime; 231001d5d5dfSSascha Wildner 231101d5d5dfSSascha Wildner } ACPI_PCCT_HW_REG; 231201d5d5dfSSascha Wildner 23137bcb6cafSSascha Wildner 23147bcb6cafSSascha Wildner /* Values for doorbell flags above */ 23157bcb6cafSSascha Wildner 23167bcb6cafSSascha Wildner #define ACPI_PCCT_INTERRUPT_POLARITY (1) 23177bcb6cafSSascha Wildner #define ACPI_PCCT_INTERRUPT_MODE (1<<1) 23187bcb6cafSSascha Wildner 23197bcb6cafSSascha Wildner 23207bcb6cafSSascha Wildner /* 23217bcb6cafSSascha Wildner * PCC memory structures (not part of the ACPI table) 23227bcb6cafSSascha Wildner */ 23237bcb6cafSSascha Wildner 23247bcb6cafSSascha Wildner /* Shared Memory Region */ 23257bcb6cafSSascha Wildner 23267bcb6cafSSascha Wildner typedef struct acpi_pcct_shared_memory 23277bcb6cafSSascha Wildner { 23287bcb6cafSSascha Wildner UINT32 Signature; 23297bcb6cafSSascha Wildner UINT16 Command; 23307bcb6cafSSascha Wildner UINT16 Status; 23317bcb6cafSSascha Wildner 23327bcb6cafSSascha Wildner } ACPI_PCCT_SHARED_MEMORY; 23337bcb6cafSSascha Wildner 23347bcb6cafSSascha Wildner 23357bcb6cafSSascha Wildner /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ 23367bcb6cafSSascha Wildner 23377bcb6cafSSascha Wildner typedef struct acpi_pcct_ext_pcc_shared_memory 23387bcb6cafSSascha Wildner { 23397bcb6cafSSascha Wildner UINT32 Signature; 23407bcb6cafSSascha Wildner UINT32 Flags; 23417bcb6cafSSascha Wildner UINT32 Length; 23427bcb6cafSSascha Wildner UINT32 Command; 23437bcb6cafSSascha Wildner 23447bcb6cafSSascha Wildner } ACPI_PCCT_EXT_PCC_SHARED_MEMORY; 23457bcb6cafSSascha Wildner 23467bcb6cafSSascha Wildner 23477bcb6cafSSascha Wildner /******************************************************************************* 23487bcb6cafSSascha Wildner * 23497bcb6cafSSascha Wildner * PDTT - Platform Debug Trigger Table (ACPI 6.2) 23507bcb6cafSSascha Wildner * Version 0 23517bcb6cafSSascha Wildner * 23527bcb6cafSSascha Wildner ******************************************************************************/ 23537bcb6cafSSascha Wildner 23547bcb6cafSSascha Wildner typedef struct acpi_table_pdtt 23557bcb6cafSSascha Wildner { 23567bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 23577bcb6cafSSascha Wildner UINT8 TriggerCount; 23587bcb6cafSSascha Wildner UINT8 Reserved[3]; 23597bcb6cafSSascha Wildner UINT32 ArrayOffset; 23607bcb6cafSSascha Wildner 23617bcb6cafSSascha Wildner } ACPI_TABLE_PDTT; 23627bcb6cafSSascha Wildner 23637bcb6cafSSascha Wildner 23647bcb6cafSSascha Wildner /* 23657bcb6cafSSascha Wildner * PDTT Communication Channel Identifier Structure. 23667bcb6cafSSascha Wildner * The number of these structures is defined by TriggerCount above, 23677bcb6cafSSascha Wildner * starting at ArrayOffset. 23687bcb6cafSSascha Wildner */ 23697bcb6cafSSascha Wildner typedef struct acpi_pdtt_channel 23707bcb6cafSSascha Wildner { 23717bcb6cafSSascha Wildner UINT8 SubchannelId; 23727bcb6cafSSascha Wildner UINT8 Flags; 23737bcb6cafSSascha Wildner 23747bcb6cafSSascha Wildner } ACPI_PDTT_CHANNEL; 23757bcb6cafSSascha Wildner 23767bcb6cafSSascha Wildner /* Flags for above */ 23777bcb6cafSSascha Wildner 23787bcb6cafSSascha Wildner #define ACPI_PDTT_RUNTIME_TRIGGER (1) 23797bcb6cafSSascha Wildner #define ACPI_PDTT_WAIT_COMPLETION (1<<1) 238000ffa116SSascha Wildner #define ACPI_PDTT_TRIGGER_ORDER (1<<2) 23817bcb6cafSSascha Wildner 23827bcb6cafSSascha Wildner 23837bcb6cafSSascha Wildner /******************************************************************************* 23847bcb6cafSSascha Wildner * 238501d5d5dfSSascha Wildner * PHAT - Platform Health Assessment Table (ACPI 6.4) 238601d5d5dfSSascha Wildner * Version 1 238701d5d5dfSSascha Wildner * 238801d5d5dfSSascha Wildner ******************************************************************************/ 238901d5d5dfSSascha Wildner 239001d5d5dfSSascha Wildner typedef struct acpi_table_phat 239101d5d5dfSSascha Wildner { 239201d5d5dfSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 239301d5d5dfSSascha Wildner 239401d5d5dfSSascha Wildner } ACPI_TABLE_PHAT; 239501d5d5dfSSascha Wildner 239601d5d5dfSSascha Wildner /* Common header for PHAT subtables that follow main table */ 239701d5d5dfSSascha Wildner 239801d5d5dfSSascha Wildner typedef struct acpi_phat_header 239901d5d5dfSSascha Wildner { 240001d5d5dfSSascha Wildner UINT16 Type; 240101d5d5dfSSascha Wildner UINT16 Length; 240201d5d5dfSSascha Wildner UINT8 Revision; 240301d5d5dfSSascha Wildner 240401d5d5dfSSascha Wildner } ACPI_PHAT_HEADER; 240501d5d5dfSSascha Wildner 240601d5d5dfSSascha Wildner 240701d5d5dfSSascha Wildner /* Values for Type field above */ 240801d5d5dfSSascha Wildner 240901d5d5dfSSascha Wildner #define ACPI_PHAT_TYPE_FW_VERSION_DATA 0 241001d5d5dfSSascha Wildner #define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1 241101d5d5dfSSascha Wildner #define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */ 241201d5d5dfSSascha Wildner 241301d5d5dfSSascha Wildner /* 241401d5d5dfSSascha Wildner * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER 241501d5d5dfSSascha Wildner */ 241601d5d5dfSSascha Wildner 241701d5d5dfSSascha Wildner /* 0: Firmware Version Data Record */ 241801d5d5dfSSascha Wildner 241901d5d5dfSSascha Wildner typedef struct acpi_phat_version_data 242001d5d5dfSSascha Wildner { 242101d5d5dfSSascha Wildner ACPI_PHAT_HEADER Header; 242201d5d5dfSSascha Wildner UINT8 Reserved[3]; 242301d5d5dfSSascha Wildner UINT32 ElementCount; 242401d5d5dfSSascha Wildner 242501d5d5dfSSascha Wildner } ACPI_PHAT_VERSION_DATA; 242601d5d5dfSSascha Wildner 242701d5d5dfSSascha Wildner typedef struct acpi_phat_version_element 242801d5d5dfSSascha Wildner { 242901d5d5dfSSascha Wildner UINT8 Guid[16]; 243001d5d5dfSSascha Wildner UINT64 VersionValue; 243101d5d5dfSSascha Wildner UINT32 ProducerId; 243201d5d5dfSSascha Wildner 243301d5d5dfSSascha Wildner } ACPI_PHAT_VERSION_ELEMENT; 243401d5d5dfSSascha Wildner 243501d5d5dfSSascha Wildner 243601d5d5dfSSascha Wildner /* 1: Firmware Health Data Record */ 243701d5d5dfSSascha Wildner 243801d5d5dfSSascha Wildner typedef struct acpi_phat_health_data 243901d5d5dfSSascha Wildner { 244001d5d5dfSSascha Wildner ACPI_PHAT_HEADER Header; 244101d5d5dfSSascha Wildner UINT8 Reserved[2]; 244201d5d5dfSSascha Wildner UINT8 Health; 244301d5d5dfSSascha Wildner UINT8 DeviceGuid[16]; 244401d5d5dfSSascha Wildner UINT32 DeviceSpecificOffset; /* Zero if no Device-specific data */ 244501d5d5dfSSascha Wildner 244601d5d5dfSSascha Wildner } ACPI_PHAT_HEALTH_DATA; 244701d5d5dfSSascha Wildner 244801d5d5dfSSascha Wildner /* Values for Health field above */ 244901d5d5dfSSascha Wildner 245001d5d5dfSSascha Wildner #define ACPI_PHAT_ERRORS_FOUND 0 245101d5d5dfSSascha Wildner #define ACPI_PHAT_NO_ERRORS 1 245201d5d5dfSSascha Wildner #define ACPI_PHAT_UNKNOWN_ERRORS 2 245301d5d5dfSSascha Wildner #define ACPI_PHAT_ADVISORY 3 245401d5d5dfSSascha Wildner 245501d5d5dfSSascha Wildner 245601d5d5dfSSascha Wildner /******************************************************************************* 245701d5d5dfSSascha Wildner * 24587bcb6cafSSascha Wildner * PMTT - Platform Memory Topology Table (ACPI 5.0) 24597bcb6cafSSascha Wildner * Version 1 24607bcb6cafSSascha Wildner * 24617bcb6cafSSascha Wildner ******************************************************************************/ 24627bcb6cafSSascha Wildner 24637bcb6cafSSascha Wildner typedef struct acpi_table_pmtt 24647bcb6cafSSascha Wildner { 24657bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 246601d5d5dfSSascha Wildner UINT32 MemoryDeviceCount; 246701d5d5dfSSascha Wildner /* 246801d5d5dfSSascha Wildner * Immediately followed by: 246901d5d5dfSSascha Wildner * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 247001d5d5dfSSascha Wildner */ 24717bcb6cafSSascha Wildner 24727bcb6cafSSascha Wildner } ACPI_TABLE_PMTT; 24737bcb6cafSSascha Wildner 24747bcb6cafSSascha Wildner 24757bcb6cafSSascha Wildner /* Common header for PMTT subtables that follow main table */ 24767bcb6cafSSascha Wildner 24777bcb6cafSSascha Wildner typedef struct acpi_pmtt_header 24787bcb6cafSSascha Wildner { 24797bcb6cafSSascha Wildner UINT8 Type; 24807bcb6cafSSascha Wildner UINT8 Reserved1; 24817bcb6cafSSascha Wildner UINT16 Length; 24827bcb6cafSSascha Wildner UINT16 Flags; 24837bcb6cafSSascha Wildner UINT16 Reserved2; 248401d5d5dfSSascha Wildner UINT32 MemoryDeviceCount; /* Zero means no memory device structs follow */ 248501d5d5dfSSascha Wildner /* 248601d5d5dfSSascha Wildner * Immediately followed by: 248701d5d5dfSSascha Wildner * UINT8 TypeSpecificData[] 248801d5d5dfSSascha Wildner * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 248901d5d5dfSSascha Wildner */ 24907bcb6cafSSascha Wildner 24917bcb6cafSSascha Wildner } ACPI_PMTT_HEADER; 24927bcb6cafSSascha Wildner 24937bcb6cafSSascha Wildner /* Values for Type field above */ 24947bcb6cafSSascha Wildner 24957bcb6cafSSascha Wildner #define ACPI_PMTT_TYPE_SOCKET 0 24967bcb6cafSSascha Wildner #define ACPI_PMTT_TYPE_CONTROLLER 1 24977bcb6cafSSascha Wildner #define ACPI_PMTT_TYPE_DIMM 2 249801d5d5dfSSascha Wildner #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */ 249901d5d5dfSSascha Wildner #define ACPI_PMTT_TYPE_VENDOR 0xFF 25007bcb6cafSSascha Wildner 25017bcb6cafSSascha Wildner /* Values for Flags field above */ 25027bcb6cafSSascha Wildner 25037bcb6cafSSascha Wildner #define ACPI_PMTT_TOP_LEVEL 0x0001 25047bcb6cafSSascha Wildner #define ACPI_PMTT_PHYSICAL 0x0002 25057bcb6cafSSascha Wildner #define ACPI_PMTT_MEMORY_TYPE 0x000C 25067bcb6cafSSascha Wildner 25077bcb6cafSSascha Wildner 25087bcb6cafSSascha Wildner /* 25097bcb6cafSSascha Wildner * PMTT subtables, correspond to Type in acpi_pmtt_header 25107bcb6cafSSascha Wildner */ 25117bcb6cafSSascha Wildner 25127bcb6cafSSascha Wildner 25137bcb6cafSSascha Wildner /* 0: Socket Structure */ 25147bcb6cafSSascha Wildner 25157bcb6cafSSascha Wildner typedef struct acpi_pmtt_socket 25167bcb6cafSSascha Wildner { 25177bcb6cafSSascha Wildner ACPI_PMTT_HEADER Header; 25187bcb6cafSSascha Wildner UINT16 SocketId; 25197bcb6cafSSascha Wildner UINT16 Reserved; 25207bcb6cafSSascha Wildner 25217bcb6cafSSascha Wildner } ACPI_PMTT_SOCKET; 252201d5d5dfSSascha Wildner /* 252301d5d5dfSSascha Wildner * Immediately followed by: 252401d5d5dfSSascha Wildner * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 252501d5d5dfSSascha Wildner */ 25267bcb6cafSSascha Wildner 25277bcb6cafSSascha Wildner 25287bcb6cafSSascha Wildner /* 1: Memory Controller subtable */ 25297bcb6cafSSascha Wildner 25307bcb6cafSSascha Wildner typedef struct acpi_pmtt_controller 25317bcb6cafSSascha Wildner { 25327bcb6cafSSascha Wildner ACPI_PMTT_HEADER Header; 253301d5d5dfSSascha Wildner UINT16 ControllerId; 25347bcb6cafSSascha Wildner UINT16 Reserved; 25357bcb6cafSSascha Wildner 25367bcb6cafSSascha Wildner } ACPI_PMTT_CONTROLLER; 253701d5d5dfSSascha Wildner /* 253801d5d5dfSSascha Wildner * Immediately followed by: 253901d5d5dfSSascha Wildner * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 254001d5d5dfSSascha Wildner */ 25417bcb6cafSSascha Wildner 25427bcb6cafSSascha Wildner 25437bcb6cafSSascha Wildner /* 2: Physical Component Identifier (DIMM) */ 25447bcb6cafSSascha Wildner 25457bcb6cafSSascha Wildner typedef struct acpi_pmtt_physical_component 25467bcb6cafSSascha Wildner { 25477bcb6cafSSascha Wildner ACPI_PMTT_HEADER Header; 25487bcb6cafSSascha Wildner UINT32 BiosHandle; 25497bcb6cafSSascha Wildner 25507bcb6cafSSascha Wildner } ACPI_PMTT_PHYSICAL_COMPONENT; 25517bcb6cafSSascha Wildner 25527bcb6cafSSascha Wildner 255301d5d5dfSSascha Wildner /* 0xFF: Vendor Specific Data */ 255401d5d5dfSSascha Wildner 255501d5d5dfSSascha Wildner typedef struct acpi_pmtt_vendor_specific 255601d5d5dfSSascha Wildner { 255701d5d5dfSSascha Wildner ACPI_PMTT_HEADER Header; 255801d5d5dfSSascha Wildner UINT8 TypeUuid[16]; 255901d5d5dfSSascha Wildner UINT8 Specific[]; 256001d5d5dfSSascha Wildner /* 256101d5d5dfSSascha Wildner * Immediately followed by: 256201d5d5dfSSascha Wildner * UINT8 VendorSpecificData[]; 256301d5d5dfSSascha Wildner * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 256401d5d5dfSSascha Wildner */ 256501d5d5dfSSascha Wildner 256601d5d5dfSSascha Wildner } ACPI_PMTT_VENDOR_SPECIFIC; 256701d5d5dfSSascha Wildner 256801d5d5dfSSascha Wildner 25697bcb6cafSSascha Wildner /******************************************************************************* 25707bcb6cafSSascha Wildner * 25717bcb6cafSSascha Wildner * PPTT - Processor Properties Topology Table (ACPI 6.2) 25727bcb6cafSSascha Wildner * Version 1 25737bcb6cafSSascha Wildner * 25747bcb6cafSSascha Wildner ******************************************************************************/ 25757bcb6cafSSascha Wildner 25767bcb6cafSSascha Wildner typedef struct acpi_table_pptt 25777bcb6cafSSascha Wildner { 25787bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 25797bcb6cafSSascha Wildner 25807bcb6cafSSascha Wildner } ACPI_TABLE_PPTT; 25817bcb6cafSSascha Wildner 25827bcb6cafSSascha Wildner /* Values for Type field above */ 25837bcb6cafSSascha Wildner 25847bcb6cafSSascha Wildner enum AcpiPpttType 25857bcb6cafSSascha Wildner { 25867bcb6cafSSascha Wildner ACPI_PPTT_TYPE_PROCESSOR = 0, 25877bcb6cafSSascha Wildner ACPI_PPTT_TYPE_CACHE = 1, 25887bcb6cafSSascha Wildner ACPI_PPTT_TYPE_ID = 2, 25897bcb6cafSSascha Wildner ACPI_PPTT_TYPE_RESERVED = 3 25907bcb6cafSSascha Wildner }; 25917bcb6cafSSascha Wildner 25927bcb6cafSSascha Wildner 25937bcb6cafSSascha Wildner /* 0: Processor Hierarchy Node Structure */ 25947bcb6cafSSascha Wildner 25957bcb6cafSSascha Wildner typedef struct acpi_pptt_processor 25967bcb6cafSSascha Wildner { 25977bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 25987bcb6cafSSascha Wildner UINT16 Reserved; 25997bcb6cafSSascha Wildner UINT32 Flags; 26007bcb6cafSSascha Wildner UINT32 Parent; 26017bcb6cafSSascha Wildner UINT32 AcpiProcessorId; 26027bcb6cafSSascha Wildner UINT32 NumberOfPrivResources; 26037bcb6cafSSascha Wildner 26047bcb6cafSSascha Wildner } ACPI_PPTT_PROCESSOR; 26057bcb6cafSSascha Wildner 26067bcb6cafSSascha Wildner /* Flags */ 26077bcb6cafSSascha Wildner 260800ffa116SSascha Wildner #define ACPI_PPTT_PHYSICAL_PACKAGE (1) 260900ffa116SSascha Wildner #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1) 261000ffa116SSascha Wildner #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */ 261100ffa116SSascha Wildner #define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */ 261200ffa116SSascha Wildner #define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */ 26137bcb6cafSSascha Wildner 26147bcb6cafSSascha Wildner 26157bcb6cafSSascha Wildner /* 1: Cache Type Structure */ 26167bcb6cafSSascha Wildner 26177bcb6cafSSascha Wildner typedef struct acpi_pptt_cache 26187bcb6cafSSascha Wildner { 26197bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 26207bcb6cafSSascha Wildner UINT16 Reserved; 26217bcb6cafSSascha Wildner UINT32 Flags; 26227bcb6cafSSascha Wildner UINT32 NextLevelOfCache; 26237bcb6cafSSascha Wildner UINT32 Size; 26247bcb6cafSSascha Wildner UINT32 NumberOfSets; 26257bcb6cafSSascha Wildner UINT8 Associativity; 26267bcb6cafSSascha Wildner UINT8 Attributes; 26277bcb6cafSSascha Wildner UINT16 LineSize; 26287bcb6cafSSascha Wildner 26297bcb6cafSSascha Wildner } ACPI_PPTT_CACHE; 26307bcb6cafSSascha Wildner 263101d5d5dfSSascha Wildner /* 1: Cache Type Structure for PPTT version 3 */ 263201d5d5dfSSascha Wildner 263301d5d5dfSSascha Wildner typedef struct acpi_pptt_cache_v1 263401d5d5dfSSascha Wildner { 263501d5d5dfSSascha Wildner UINT32 CacheId; 263601d5d5dfSSascha Wildner 263701d5d5dfSSascha Wildner } ACPI_PPTT_CACHE_V1; 263801d5d5dfSSascha Wildner 263901d5d5dfSSascha Wildner 26407bcb6cafSSascha Wildner /* Flags */ 26417bcb6cafSSascha Wildner 26427bcb6cafSSascha Wildner #define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 26437bcb6cafSSascha Wildner #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 26447bcb6cafSSascha Wildner #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 26457bcb6cafSSascha Wildner #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 26467bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 26477bcb6cafSSascha Wildner #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 26487bcb6cafSSascha Wildner #define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 264901d5d5dfSSascha Wildner #define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */ 26507bcb6cafSSascha Wildner 26517bcb6cafSSascha Wildner /* Masks for Attributes */ 26527bcb6cafSSascha Wildner 26537bcb6cafSSascha Wildner #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 26547bcb6cafSSascha Wildner #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 26557bcb6cafSSascha Wildner #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 26567bcb6cafSSascha Wildner 26577bcb6cafSSascha Wildner /* Attributes describing cache */ 26587bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ 26597bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ 26607bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ 26617bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ 26627bcb6cafSSascha Wildner 26637bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ 26647bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ 26657bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ 26667bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ 26677bcb6cafSSascha Wildner 26687bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ 26697bcb6cafSSascha Wildner #define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ 26707bcb6cafSSascha Wildner 26717bcb6cafSSascha Wildner /* 2: ID Structure */ 26727bcb6cafSSascha Wildner 26737bcb6cafSSascha Wildner typedef struct acpi_pptt_id 26747bcb6cafSSascha Wildner { 26757bcb6cafSSascha Wildner ACPI_SUBTABLE_HEADER Header; 26767bcb6cafSSascha Wildner UINT16 Reserved; 26777bcb6cafSSascha Wildner UINT32 VendorId; 26787bcb6cafSSascha Wildner UINT64 Level1Id; 26797bcb6cafSSascha Wildner UINT64 Level2Id; 26807bcb6cafSSascha Wildner UINT16 MajorRev; 26817bcb6cafSSascha Wildner UINT16 MinorRev; 26827bcb6cafSSascha Wildner UINT16 SpinRev; 26837bcb6cafSSascha Wildner 26847bcb6cafSSascha Wildner } ACPI_PPTT_ID; 26857bcb6cafSSascha Wildner 26867bcb6cafSSascha Wildner 26877bcb6cafSSascha Wildner /******************************************************************************* 26887bcb6cafSSascha Wildner * 26894898bea4SSascha Wildner * PRMT - Platform Runtime Mechanism Table 26904898bea4SSascha Wildner * Version 1 26914898bea4SSascha Wildner * 26924898bea4SSascha Wildner ******************************************************************************/ 26934898bea4SSascha Wildner 26944898bea4SSascha Wildner typedef struct acpi_table_prmt 26954898bea4SSascha Wildner { 26964898bea4SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 26974898bea4SSascha Wildner 26984898bea4SSascha Wildner } ACPI_TABLE_PRMT; 26994898bea4SSascha Wildner 27004898bea4SSascha Wildner typedef struct acpi_table_prmt_header 27014898bea4SSascha Wildner { 27024898bea4SSascha Wildner UINT8 PlatformGuid[16]; 27034898bea4SSascha Wildner UINT32 ModuleInfoOffset; 27044898bea4SSascha Wildner UINT32 ModuleInfoCount; 27054898bea4SSascha Wildner 27064898bea4SSascha Wildner } ACPI_TABLE_PRMT_HEADER; 27074898bea4SSascha Wildner 27080672a19bSSascha Wildner typedef struct acpi_prmt_module_header 27090672a19bSSascha Wildner { 27100672a19bSSascha Wildner UINT16 Revision; 27110672a19bSSascha Wildner UINT16 Length; 27120672a19bSSascha Wildner 27130672a19bSSascha Wildner } ACPI_PRMT_MODULE_HEADER; 27140672a19bSSascha Wildner 27154898bea4SSascha Wildner typedef struct acpi_prmt_module_info 27164898bea4SSascha Wildner { 27174898bea4SSascha Wildner UINT16 Revision; 27184898bea4SSascha Wildner UINT16 Length; 27194898bea4SSascha Wildner UINT8 ModuleGuid[16]; 27204898bea4SSascha Wildner UINT16 MajorRev; 27214898bea4SSascha Wildner UINT16 MinorRev; 27224898bea4SSascha Wildner UINT16 HandlerInfoCount; 27234898bea4SSascha Wildner UINT32 HandlerInfoOffset; 27244898bea4SSascha Wildner UINT64 MmioListPointer; 27254898bea4SSascha Wildner 27264898bea4SSascha Wildner } ACPI_PRMT_MODULE_INFO; 27274898bea4SSascha Wildner 27284898bea4SSascha Wildner typedef struct acpi_prmt_handler_info 27294898bea4SSascha Wildner { 27304898bea4SSascha Wildner UINT16 Revision; 27314898bea4SSascha Wildner UINT16 Length; 27324898bea4SSascha Wildner UINT8 HandlerGuid[16]; 27334898bea4SSascha Wildner UINT64 HandlerAddress; 27344898bea4SSascha Wildner UINT64 StaticDataBufferAddress; 27354898bea4SSascha Wildner UINT64 AcpiParamBufferAddress; 27364898bea4SSascha Wildner 27374898bea4SSascha Wildner } ACPI_PRMT_HANDLER_INFO; 27384898bea4SSascha Wildner 27394898bea4SSascha Wildner 27404898bea4SSascha Wildner /******************************************************************************* 27414898bea4SSascha Wildner * 27427bcb6cafSSascha Wildner * RASF - RAS Feature Table (ACPI 5.0) 27437bcb6cafSSascha Wildner * Version 1 27447bcb6cafSSascha Wildner * 27457bcb6cafSSascha Wildner ******************************************************************************/ 27467bcb6cafSSascha Wildner 27477bcb6cafSSascha Wildner typedef struct acpi_table_rasf 27487bcb6cafSSascha Wildner { 27497bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 27507bcb6cafSSascha Wildner UINT8 ChannelId[12]; 27517bcb6cafSSascha Wildner 27527bcb6cafSSascha Wildner } ACPI_TABLE_RASF; 27537bcb6cafSSascha Wildner 27547bcb6cafSSascha Wildner /* RASF Platform Communication Channel Shared Memory Region */ 27557bcb6cafSSascha Wildner 27567bcb6cafSSascha Wildner typedef struct acpi_rasf_shared_memory 27577bcb6cafSSascha Wildner { 27587bcb6cafSSascha Wildner UINT32 Signature; 27597bcb6cafSSascha Wildner UINT16 Command; 27607bcb6cafSSascha Wildner UINT16 Status; 27617bcb6cafSSascha Wildner UINT16 Version; 27627bcb6cafSSascha Wildner UINT8 Capabilities[16]; 27637bcb6cafSSascha Wildner UINT8 SetCapabilities[16]; 27647bcb6cafSSascha Wildner UINT16 NumParameterBlocks; 27657bcb6cafSSascha Wildner UINT32 SetCapabilitiesStatus; 27667bcb6cafSSascha Wildner 27677bcb6cafSSascha Wildner } ACPI_RASF_SHARED_MEMORY; 27687bcb6cafSSascha Wildner 27697bcb6cafSSascha Wildner /* RASF Parameter Block Structure Header */ 27707bcb6cafSSascha Wildner 27717bcb6cafSSascha Wildner typedef struct acpi_rasf_parameter_block 27727bcb6cafSSascha Wildner { 27737bcb6cafSSascha Wildner UINT16 Type; 27747bcb6cafSSascha Wildner UINT16 Version; 27757bcb6cafSSascha Wildner UINT16 Length; 27767bcb6cafSSascha Wildner 27777bcb6cafSSascha Wildner } ACPI_RASF_PARAMETER_BLOCK; 27787bcb6cafSSascha Wildner 27797bcb6cafSSascha Wildner /* RASF Parameter Block Structure for PATROL_SCRUB */ 27807bcb6cafSSascha Wildner 27817bcb6cafSSascha Wildner typedef struct acpi_rasf_patrol_scrub_parameter 27827bcb6cafSSascha Wildner { 27837bcb6cafSSascha Wildner ACPI_RASF_PARAMETER_BLOCK Header; 27847bcb6cafSSascha Wildner UINT16 PatrolScrubCommand; 27857bcb6cafSSascha Wildner UINT64 RequestedAddressRange[2]; 27867bcb6cafSSascha Wildner UINT64 ActualAddressRange[2]; 27877bcb6cafSSascha Wildner UINT16 Flags; 27887bcb6cafSSascha Wildner UINT8 RequestedSpeed; 27897bcb6cafSSascha Wildner 27907bcb6cafSSascha Wildner } ACPI_RASF_PATROL_SCRUB_PARAMETER; 27917bcb6cafSSascha Wildner 27927bcb6cafSSascha Wildner /* Masks for Flags and Speed fields above */ 27937bcb6cafSSascha Wildner 27947bcb6cafSSascha Wildner #define ACPI_RASF_SCRUBBER_RUNNING 1 27957bcb6cafSSascha Wildner #define ACPI_RASF_SPEED (7<<1) 27967bcb6cafSSascha Wildner #define ACPI_RASF_SPEED_SLOW (0<<1) 27977bcb6cafSSascha Wildner #define ACPI_RASF_SPEED_MEDIUM (4<<1) 27987bcb6cafSSascha Wildner #define ACPI_RASF_SPEED_FAST (7<<1) 27997bcb6cafSSascha Wildner 28007bcb6cafSSascha Wildner /* Channel Commands */ 28017bcb6cafSSascha Wildner 28027bcb6cafSSascha Wildner enum AcpiRasfCommands 28037bcb6cafSSascha Wildner { 28047bcb6cafSSascha Wildner ACPI_RASF_EXECUTE_RASF_COMMAND = 1 28057bcb6cafSSascha Wildner }; 28067bcb6cafSSascha Wildner 28077bcb6cafSSascha Wildner /* Platform RAS Capabilities */ 28087bcb6cafSSascha Wildner 28097bcb6cafSSascha Wildner enum AcpiRasfCapabiliities 28107bcb6cafSSascha Wildner { 28117bcb6cafSSascha Wildner ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 28127bcb6cafSSascha Wildner ACPI_SW_PATROL_SCRUB_EXPOSED = 1 28137bcb6cafSSascha Wildner }; 28147bcb6cafSSascha Wildner 28157bcb6cafSSascha Wildner /* Patrol Scrub Commands */ 28167bcb6cafSSascha Wildner 28177bcb6cafSSascha Wildner enum AcpiRasfPatrolScrubCommands 28187bcb6cafSSascha Wildner { 28197bcb6cafSSascha Wildner ACPI_RASF_GET_PATROL_PARAMETERS = 1, 28207bcb6cafSSascha Wildner ACPI_RASF_START_PATROL_SCRUBBER = 2, 28217bcb6cafSSascha Wildner ACPI_RASF_STOP_PATROL_SCRUBBER = 3 28227bcb6cafSSascha Wildner }; 28237bcb6cafSSascha Wildner 28247bcb6cafSSascha Wildner /* Channel Command flags */ 28257bcb6cafSSascha Wildner 28267bcb6cafSSascha Wildner #define ACPI_RASF_GENERATE_SCI (1<<15) 28277bcb6cafSSascha Wildner 28287bcb6cafSSascha Wildner /* Status values */ 28297bcb6cafSSascha Wildner 28307bcb6cafSSascha Wildner enum AcpiRasfStatus 28317bcb6cafSSascha Wildner { 28327bcb6cafSSascha Wildner ACPI_RASF_SUCCESS = 0, 28337bcb6cafSSascha Wildner ACPI_RASF_NOT_VALID = 1, 28347bcb6cafSSascha Wildner ACPI_RASF_NOT_SUPPORTED = 2, 28357bcb6cafSSascha Wildner ACPI_RASF_BUSY = 3, 28367bcb6cafSSascha Wildner ACPI_RASF_FAILED = 4, 28377bcb6cafSSascha Wildner ACPI_RASF_ABORTED = 5, 28387bcb6cafSSascha Wildner ACPI_RASF_INVALID_DATA = 6 28397bcb6cafSSascha Wildner }; 28407bcb6cafSSascha Wildner 28417bcb6cafSSascha Wildner /* Status flags */ 28427bcb6cafSSascha Wildner 28437bcb6cafSSascha Wildner #define ACPI_RASF_COMMAND_COMPLETE (1) 28447bcb6cafSSascha Wildner #define ACPI_RASF_SCI_DOORBELL (1<<1) 28457bcb6cafSSascha Wildner #define ACPI_RASF_ERROR (1<<2) 28467bcb6cafSSascha Wildner #define ACPI_RASF_STATUS (0x1F<<3) 28477bcb6cafSSascha Wildner 28487bcb6cafSSascha Wildner 28497bcb6cafSSascha Wildner /******************************************************************************* 28507bcb6cafSSascha Wildner * 28514898bea4SSascha Wildner * RGRT - Regulatory Graphics Resource Table 28524898bea4SSascha Wildner * Version 1 28534898bea4SSascha Wildner * 28544898bea4SSascha Wildner * Conforms to "ACPI RGRT" available at: 28554898bea4SSascha Wildner * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/ 28564898bea4SSascha Wildner * 28574898bea4SSascha Wildner ******************************************************************************/ 28584898bea4SSascha Wildner 28594898bea4SSascha Wildner typedef struct acpi_table_rgrt 28604898bea4SSascha Wildner { 28614898bea4SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 28624898bea4SSascha Wildner UINT16 Version; 28634898bea4SSascha Wildner UINT8 ImageType; 28644898bea4SSascha Wildner UINT8 Reserved; 28654898bea4SSascha Wildner UINT8 Image[0]; 28664898bea4SSascha Wildner 28674898bea4SSascha Wildner } ACPI_TABLE_RGRT; 28684898bea4SSascha Wildner 28694898bea4SSascha Wildner /* ImageType values */ 28704898bea4SSascha Wildner 28714898bea4SSascha Wildner enum AcpiRgrtImageType 28724898bea4SSascha Wildner { 28734898bea4SSascha Wildner ACPI_RGRT_TYPE_RESERVED0 = 0, 28744898bea4SSascha Wildner ACPI_RGRT_IMAGE_TYPE_PNG = 1, 28754898bea4SSascha Wildner ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 28764898bea4SSascha Wildner }; 28774898bea4SSascha Wildner 28784898bea4SSascha Wildner 28794898bea4SSascha Wildner /******************************************************************************* 28804898bea4SSascha Wildner * 28817bcb6cafSSascha Wildner * SBST - Smart Battery Specification Table 28827bcb6cafSSascha Wildner * Version 1 28837bcb6cafSSascha Wildner * 28847bcb6cafSSascha Wildner ******************************************************************************/ 28857bcb6cafSSascha Wildner 28867bcb6cafSSascha Wildner typedef struct acpi_table_sbst 28877bcb6cafSSascha Wildner { 28887bcb6cafSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 28897bcb6cafSSascha Wildner UINT32 WarningLevel; 28907bcb6cafSSascha Wildner UINT32 LowLevel; 28917bcb6cafSSascha Wildner UINT32 CriticalLevel; 28927bcb6cafSSascha Wildner 28937bcb6cafSSascha Wildner } ACPI_TABLE_SBST; 28947bcb6cafSSascha Wildner 28957bcb6cafSSascha Wildner 28963c639e0cSSascha Wildner /******************************************************************************* 28973c639e0cSSascha Wildner * 28983c639e0cSSascha Wildner * SDEI - Software Delegated Exception Interface Descriptor Table 28993c639e0cSSascha Wildner * 29003c639e0cSSascha Wildner * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, 29013c639e0cSSascha Wildner * May 8th, 2017. Copyright 2017 ARM Ltd. 29023c639e0cSSascha Wildner * 29033c639e0cSSascha Wildner ******************************************************************************/ 29043c639e0cSSascha Wildner 29053c639e0cSSascha Wildner typedef struct acpi_table_sdei 29063c639e0cSSascha Wildner { 29073c639e0cSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 29083c639e0cSSascha Wildner 29093c639e0cSSascha Wildner } ACPI_TABLE_SDEI; 29103c639e0cSSascha Wildner 29110d02842fSSascha Wildner 29120d02842fSSascha Wildner /******************************************************************************* 29130d02842fSSascha Wildner * 29147bcb6cafSSascha Wildner * SDEV - Secure Devices Table (ACPI 6.2) 29157bcb6cafSSascha Wildner * Version 1 29160d02842fSSascha Wildner * 29170d02842fSSascha Wildner ******************************************************************************/ 29180d02842fSSascha Wildner 29197bcb6cafSSascha Wildner typedef struct acpi_table_sdev 29200d02842fSSascha Wildner { 29210d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 29220d02842fSSascha Wildner 29237bcb6cafSSascha Wildner } ACPI_TABLE_SDEV; 29240d02842fSSascha Wildner 29250d02842fSSascha Wildner 29267bcb6cafSSascha Wildner typedef struct acpi_sdev_header 29270d02842fSSascha Wildner { 29287bcb6cafSSascha Wildner UINT8 Type; 29297bcb6cafSSascha Wildner UINT8 Flags; 29307bcb6cafSSascha Wildner UINT16 Length; 29310d02842fSSascha Wildner 29327bcb6cafSSascha Wildner } ACPI_SDEV_HEADER; 29332ffe9f16SSascha Wildner 29340d02842fSSascha Wildner 29357bcb6cafSSascha Wildner /* Values for subtable type above */ 29360d02842fSSascha Wildner 29377bcb6cafSSascha Wildner enum AcpiSdevType 29380d02842fSSascha Wildner { 29397bcb6cafSSascha Wildner ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, 29407bcb6cafSSascha Wildner ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, 29417bcb6cafSSascha Wildner ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 29420d02842fSSascha Wildner }; 29430d02842fSSascha Wildner 29447bcb6cafSSascha Wildner /* Values for flags above */ 29450d02842fSSascha Wildner 29467bcb6cafSSascha Wildner #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) 294701d5d5dfSSascha Wildner #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1) 2948267c04fdSSascha Wildner 2949267c04fdSSascha Wildner /* 29507bcb6cafSSascha Wildner * SDEV subtables 2951267c04fdSSascha Wildner */ 2952267c04fdSSascha Wildner 29537bcb6cafSSascha Wildner /* 0: Namespace Device Based Secure Device Structure */ 2954267c04fdSSascha Wildner 29557bcb6cafSSascha Wildner typedef struct acpi_sdev_namespace 2956267c04fdSSascha Wildner { 29577bcb6cafSSascha Wildner ACPI_SDEV_HEADER Header; 29587bcb6cafSSascha Wildner UINT16 DeviceIdOffset; 29597bcb6cafSSascha Wildner UINT16 DeviceIdLength; 29607bcb6cafSSascha Wildner UINT16 VendorDataOffset; 29617bcb6cafSSascha Wildner UINT16 VendorDataLength; 29620d02842fSSascha Wildner 29637bcb6cafSSascha Wildner } ACPI_SDEV_NAMESPACE; 296425ca8c79SSascha Wildner 296501d5d5dfSSascha Wildner typedef struct acpi_sdev_secure_component 296601d5d5dfSSascha Wildner { 296701d5d5dfSSascha Wildner UINT16 SecureComponentOffset; 296801d5d5dfSSascha Wildner UINT16 SecureComponentLength; 296901d5d5dfSSascha Wildner 297001d5d5dfSSascha Wildner } ACPI_SDEV_SECURE_COMPONENT; 297101d5d5dfSSascha Wildner 297201d5d5dfSSascha Wildner 297301d5d5dfSSascha Wildner /* 297401d5d5dfSSascha Wildner * SDEV sub-subtables ("Components") for above 297501d5d5dfSSascha Wildner */ 297601d5d5dfSSascha Wildner typedef struct acpi_sdev_component 297701d5d5dfSSascha Wildner { 297801d5d5dfSSascha Wildner ACPI_SDEV_HEADER Header; 297901d5d5dfSSascha Wildner 298001d5d5dfSSascha Wildner } ACPI_SDEV_COMPONENT; 298101d5d5dfSSascha Wildner 298201d5d5dfSSascha Wildner 298301d5d5dfSSascha Wildner /* Values for sub-subtable type above */ 298401d5d5dfSSascha Wildner 298501d5d5dfSSascha Wildner enum AcpiSacType 298601d5d5dfSSascha Wildner { 298701d5d5dfSSascha Wildner ACPI_SDEV_TYPE_ID_COMPONENT = 0, 298801d5d5dfSSascha Wildner ACPI_SDEV_TYPE_MEM_COMPONENT = 1 298901d5d5dfSSascha Wildner }; 299001d5d5dfSSascha Wildner 299101d5d5dfSSascha Wildner typedef struct acpi_sdev_id_component 299201d5d5dfSSascha Wildner { 299301d5d5dfSSascha Wildner ACPI_SDEV_HEADER Header; 299401d5d5dfSSascha Wildner UINT16 HardwareIdOffset; 299501d5d5dfSSascha Wildner UINT16 HardwareIdLength; 299601d5d5dfSSascha Wildner UINT16 SubsystemIdOffset; 299701d5d5dfSSascha Wildner UINT16 SubsystemIdLength; 299801d5d5dfSSascha Wildner UINT16 HardwareRevision; 299901d5d5dfSSascha Wildner UINT8 HardwareRevPresent; 300001d5d5dfSSascha Wildner UINT8 ClassCodePresent; 300101d5d5dfSSascha Wildner UINT8 PciBaseClass; 300201d5d5dfSSascha Wildner UINT8 PciSubClass; 300301d5d5dfSSascha Wildner UINT8 PciProgrammingXface; 300401d5d5dfSSascha Wildner 300501d5d5dfSSascha Wildner } ACPI_SDEV_ID_COMPONENT; 300601d5d5dfSSascha Wildner 300701d5d5dfSSascha Wildner typedef struct acpi_sdev_mem_component 300801d5d5dfSSascha Wildner { 300901d5d5dfSSascha Wildner ACPI_SDEV_HEADER Header; 301001d5d5dfSSascha Wildner UINT32 Reserved; 301101d5d5dfSSascha Wildner UINT64 MemoryBaseAddress; 301201d5d5dfSSascha Wildner UINT64 MemoryLength; 301301d5d5dfSSascha Wildner 301401d5d5dfSSascha Wildner } ACPI_SDEV_MEM_COMPONENT; 301501d5d5dfSSascha Wildner 301601d5d5dfSSascha Wildner 30177bcb6cafSSascha Wildner /* 1: PCIe Endpoint Device Based Device Structure */ 30187bcb6cafSSascha Wildner 30197bcb6cafSSascha Wildner typedef struct acpi_sdev_pcie 302025ca8c79SSascha Wildner { 30217bcb6cafSSascha Wildner ACPI_SDEV_HEADER Header; 30227bcb6cafSSascha Wildner UINT16 Segment; 30237bcb6cafSSascha Wildner UINT16 StartBus; 30247bcb6cafSSascha Wildner UINT16 PathOffset; 30257bcb6cafSSascha Wildner UINT16 PathLength; 30267bcb6cafSSascha Wildner UINT16 VendorDataOffset; 30277bcb6cafSSascha Wildner UINT16 VendorDataLength; 30287bcb6cafSSascha Wildner 30297bcb6cafSSascha Wildner } ACPI_SDEV_PCIE; 30307bcb6cafSSascha Wildner 30317bcb6cafSSascha Wildner /* 1a: PCIe Endpoint path entry */ 30327bcb6cafSSascha Wildner 30337bcb6cafSSascha Wildner typedef struct acpi_sdev_pcie_path 30347bcb6cafSSascha Wildner { 303525ca8c79SSascha Wildner UINT8 Device; 303625ca8c79SSascha Wildner UINT8 Function; 303725ca8c79SSascha Wildner 30387bcb6cafSSascha Wildner } ACPI_SDEV_PCIE_PATH; 30391093ca81SSascha Wildner 30401093ca81SSascha Wildner 30414898bea4SSascha Wildner /******************************************************************************* 30424898bea4SSascha Wildner * 30434898bea4SSascha Wildner * SVKL - Storage Volume Key Location Table (ACPI 6.4) 30444898bea4SSascha Wildner * From: "Guest-Host-Communication Interface (GHCI) for Intel 30454898bea4SSascha Wildner * Trust Domain Extensions (Intel TDX)". 30464898bea4SSascha Wildner * Version 1 30474898bea4SSascha Wildner * 30484898bea4SSascha Wildner ******************************************************************************/ 30494898bea4SSascha Wildner 30504898bea4SSascha Wildner typedef struct acpi_table_svkl 30514898bea4SSascha Wildner { 30524898bea4SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 30534898bea4SSascha Wildner UINT32 Count; 30544898bea4SSascha Wildner 30554898bea4SSascha Wildner } ACPI_TABLE_SVKL; 30564898bea4SSascha Wildner 30574898bea4SSascha Wildner typedef struct acpi_svkl_key 30584898bea4SSascha Wildner { 30594898bea4SSascha Wildner UINT16 Type; 30604898bea4SSascha Wildner UINT16 Format; 30614898bea4SSascha Wildner UINT32 Size; 30624898bea4SSascha Wildner UINT64 Address; 30634898bea4SSascha Wildner 30644898bea4SSascha Wildner } ACPI_SVKL_KEY; 30654898bea4SSascha Wildner 30664898bea4SSascha Wildner enum acpi_svkl_type 30674898bea4SSascha Wildner { 30684898bea4SSascha Wildner ACPI_SVKL_TYPE_MAIN_STORAGE = 0, 30694898bea4SSascha Wildner ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */ 30704898bea4SSascha Wildner }; 30714898bea4SSascha Wildner 30724898bea4SSascha Wildner enum acpi_svkl_format 30734898bea4SSascha Wildner { 30744898bea4SSascha Wildner ACPI_SVKL_FORMAT_RAW_BINARY = 0, 30754898bea4SSascha Wildner ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */ 30764898bea4SSascha Wildner }; 30774898bea4SSascha Wildner 30784898bea4SSascha Wildner 3079*aab122a6SSascha Wildner /******************************************************************************* 3080*aab122a6SSascha Wildner * 3081*aab122a6SSascha Wildner * TDEL - TD-Event Log 3082*aab122a6SSascha Wildner * From: "Guest-Host-Communication Interface (GHCI) for Intel 3083*aab122a6SSascha Wildner * Trust Domain Extensions (Intel TDX)". 3084*aab122a6SSascha Wildner * September 2020 3085*aab122a6SSascha Wildner * 3086*aab122a6SSascha Wildner ******************************************************************************/ 3087*aab122a6SSascha Wildner 3088*aab122a6SSascha Wildner typedef struct acpi_table_tdel 3089*aab122a6SSascha Wildner { 3090*aab122a6SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3091*aab122a6SSascha Wildner UINT32 Reserved; 3092*aab122a6SSascha Wildner UINT64 LogAreaMinimumLength; 3093*aab122a6SSascha Wildner UINT64 LogAreaStartAddress; 3094*aab122a6SSascha Wildner 3095*aab122a6SSascha Wildner } ACPI_TABLE_TDEL; 3096*aab122a6SSascha Wildner 3097d4972a9cSSascha Wildner /* Reset to default packing */ 3098d4972a9cSSascha Wildner 3099d4972a9cSSascha Wildner #pragma pack() 31000d02842fSSascha Wildner 31010d02842fSSascha Wildner #endif /* __ACTBL2_H__ */ 3102