10d02842fSSascha Wildner /****************************************************************************** 20d02842fSSascha Wildner * 30d02842fSSascha Wildner * Name: actbl1.h - Additional ACPI table definitions 40d02842fSSascha Wildner * 50d02842fSSascha Wildner *****************************************************************************/ 60d02842fSSascha Wildner 7b4315fc7SSascha Wildner /****************************************************************************** 8b4315fc7SSascha Wildner * 9b4315fc7SSascha Wildner * 1. Copyright Notice 10b4315fc7SSascha Wildner * 11b4315fc7SSascha Wildner * Some or all of this work - Copyright (c) 1999 - 2017, 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 __ACTBL1_H__ 1530d02842fSSascha Wildner #define __ACTBL1_H__ 1540d02842fSSascha Wildner 1550d02842fSSascha Wildner 1560d02842fSSascha Wildner /******************************************************************************* 1570d02842fSSascha Wildner * 1580d02842fSSascha Wildner * Additional ACPI Tables (1) 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 * The tables in this file are fully defined within the ACPI specification. 1640d02842fSSascha Wildner * 1650d02842fSSascha Wildner ******************************************************************************/ 1660d02842fSSascha Wildner 1670d02842fSSascha Wildner 1680d02842fSSascha Wildner /* 1690d02842fSSascha Wildner * Values for description table header signatures for tables defined in this 1700d02842fSSascha Wildner * file. Useful because they make it more difficult to inadvertently type in 1710d02842fSSascha Wildner * the wrong signature. 1720d02842fSSascha Wildner */ 1730d02842fSSascha Wildner #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 1740d02842fSSascha Wildner #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 1750d02842fSSascha Wildner #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 1760d02842fSSascha Wildner #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 1770d02842fSSascha Wildner #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 178*1093ca81SSascha Wildner #define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ 1790d02842fSSascha Wildner #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 1800d02842fSSascha Wildner #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 1810d02842fSSascha Wildner #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 182*1093ca81SSascha Wildner #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 1830d02842fSSascha Wildner #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 1840d02842fSSascha Wildner #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 1850d02842fSSascha Wildner #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 186896f2e3aSSascha Wildner #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 1870d02842fSSascha Wildner 1880d02842fSSascha Wildner 1890d02842fSSascha Wildner /* 1900d02842fSSascha Wildner * All tables must be byte-packed to match the ACPI specification, since 1910d02842fSSascha Wildner * the tables are provided by the system BIOS. 1920d02842fSSascha Wildner */ 1930d02842fSSascha Wildner #pragma pack(1) 1940d02842fSSascha Wildner 1950d02842fSSascha Wildner /* 1960d02842fSSascha Wildner * Note: C bitfields are not used for this reason: 1970d02842fSSascha Wildner * 1980d02842fSSascha Wildner * "Bitfields are great and easy to read, but unfortunately the C language 1990d02842fSSascha Wildner * does not specify the layout of bitfields in memory, which means they are 2000d02842fSSascha Wildner * essentially useless for dealing with packed data in on-disk formats or 2010d02842fSSascha Wildner * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 2020d02842fSSascha Wildner * this decision was a design error in C. Ritchie could have picked an order 2030d02842fSSascha Wildner * and stuck with it." Norman Ramsey. 2040d02842fSSascha Wildner * See http://stackoverflow.com/a/1053662/41661 2050d02842fSSascha Wildner */ 2060d02842fSSascha Wildner 2070d02842fSSascha Wildner 2080d02842fSSascha Wildner /******************************************************************************* 2090d02842fSSascha Wildner * 2100d02842fSSascha Wildner * Common subtable headers 2110d02842fSSascha Wildner * 2120d02842fSSascha Wildner ******************************************************************************/ 2130d02842fSSascha Wildner 2140d02842fSSascha Wildner /* Generic subtable header (used in MADT, SRAT, etc.) */ 2150d02842fSSascha Wildner 2160d02842fSSascha Wildner typedef struct acpi_subtable_header 2170d02842fSSascha Wildner { 2180d02842fSSascha Wildner UINT8 Type; 2190d02842fSSascha Wildner UINT8 Length; 2200d02842fSSascha Wildner 2210d02842fSSascha Wildner } ACPI_SUBTABLE_HEADER; 2220d02842fSSascha Wildner 2230d02842fSSascha Wildner 2240d02842fSSascha Wildner /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 2250d02842fSSascha Wildner 2260d02842fSSascha Wildner typedef struct acpi_whea_header 2270d02842fSSascha Wildner { 2280d02842fSSascha Wildner UINT8 Action; 2290d02842fSSascha Wildner UINT8 Instruction; 2300d02842fSSascha Wildner UINT8 Flags; 2310d02842fSSascha Wildner UINT8 Reserved; 2320d02842fSSascha Wildner ACPI_GENERIC_ADDRESS RegisterRegion; 2330d02842fSSascha Wildner UINT64 Value; /* Value used with Read/Write register */ 2340d02842fSSascha Wildner UINT64 Mask; /* Bitmask required for this register instruction */ 2350d02842fSSascha Wildner 2360d02842fSSascha Wildner } ACPI_WHEA_HEADER; 2370d02842fSSascha Wildner 2380d02842fSSascha Wildner 2390d02842fSSascha Wildner /******************************************************************************* 2400d02842fSSascha Wildner * 2410d02842fSSascha Wildner * BERT - Boot Error Record Table (ACPI 4.0) 2420d02842fSSascha Wildner * Version 1 2430d02842fSSascha Wildner * 2440d02842fSSascha Wildner ******************************************************************************/ 2450d02842fSSascha Wildner 2460d02842fSSascha Wildner typedef struct acpi_table_bert 2470d02842fSSascha Wildner { 2480d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2490d02842fSSascha Wildner UINT32 RegionLength; /* Length of the boot error region */ 2500d02842fSSascha Wildner UINT64 Address; /* Physical address of the error region */ 2510d02842fSSascha Wildner 2520d02842fSSascha Wildner } ACPI_TABLE_BERT; 2530d02842fSSascha Wildner 2540d02842fSSascha Wildner 2550d02842fSSascha Wildner /* Boot Error Region (not a subtable, pointed to by Address field above) */ 2560d02842fSSascha Wildner 2570d02842fSSascha Wildner typedef struct acpi_bert_region 2580d02842fSSascha Wildner { 2590d02842fSSascha Wildner UINT32 BlockStatus; /* Type of error information */ 2600d02842fSSascha Wildner UINT32 RawDataOffset; /* Offset to raw error data */ 2610d02842fSSascha Wildner UINT32 RawDataLength; /* Length of raw error data */ 2620d02842fSSascha Wildner UINT32 DataLength; /* Length of generic error data */ 2630d02842fSSascha Wildner UINT32 ErrorSeverity; /* Severity code */ 2640d02842fSSascha Wildner 2650d02842fSSascha Wildner } ACPI_BERT_REGION; 2660d02842fSSascha Wildner 2670d02842fSSascha Wildner /* Values for BlockStatus flags above */ 2680d02842fSSascha Wildner 2690d02842fSSascha Wildner #define ACPI_BERT_UNCORRECTABLE (1) 2700d02842fSSascha Wildner #define ACPI_BERT_CORRECTABLE (1<<1) 2710d02842fSSascha Wildner #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 2720d02842fSSascha Wildner #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 2730d02842fSSascha Wildner #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 2740d02842fSSascha Wildner 2750d02842fSSascha Wildner /* Values for ErrorSeverity above */ 2760d02842fSSascha Wildner 2770d02842fSSascha Wildner enum AcpiBertErrorSeverity 2780d02842fSSascha Wildner { 2790d02842fSSascha Wildner ACPI_BERT_ERROR_CORRECTABLE = 0, 2800d02842fSSascha Wildner ACPI_BERT_ERROR_FATAL = 1, 2810d02842fSSascha Wildner ACPI_BERT_ERROR_CORRECTED = 2, 2820d02842fSSascha Wildner ACPI_BERT_ERROR_NONE = 3, 2830d02842fSSascha Wildner ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 2840d02842fSSascha Wildner }; 2850d02842fSSascha Wildner 2860d02842fSSascha Wildner /* 2870d02842fSSascha Wildner * Note: The generic error data that follows the ErrorSeverity field above 2880d02842fSSascha Wildner * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 2890d02842fSSascha Wildner */ 2900d02842fSSascha Wildner 2910d02842fSSascha Wildner 2920d02842fSSascha Wildner /******************************************************************************* 2930d02842fSSascha Wildner * 2940d02842fSSascha Wildner * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 2950d02842fSSascha Wildner * Version 1 2960d02842fSSascha Wildner * 2970d02842fSSascha Wildner ******************************************************************************/ 2980d02842fSSascha Wildner 2990d02842fSSascha Wildner typedef struct acpi_table_cpep 3000d02842fSSascha Wildner { 3010d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3020d02842fSSascha Wildner UINT64 Reserved; 3030d02842fSSascha Wildner 3040d02842fSSascha Wildner } ACPI_TABLE_CPEP; 3050d02842fSSascha Wildner 3060d02842fSSascha Wildner 3070d02842fSSascha Wildner /* Subtable */ 3080d02842fSSascha Wildner 3090d02842fSSascha Wildner typedef struct acpi_cpep_polling 3100d02842fSSascha Wildner { 3110d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 3120d02842fSSascha Wildner UINT8 Id; /* Processor ID */ 3130d02842fSSascha Wildner UINT8 Eid; /* Processor EID */ 3140d02842fSSascha Wildner UINT32 Interval; /* Polling interval (msec) */ 3150d02842fSSascha Wildner 3160d02842fSSascha Wildner } ACPI_CPEP_POLLING; 3170d02842fSSascha Wildner 3180d02842fSSascha Wildner 3190d02842fSSascha Wildner /******************************************************************************* 3200d02842fSSascha Wildner * 3210d02842fSSascha Wildner * ECDT - Embedded Controller Boot Resources Table 3220d02842fSSascha Wildner * Version 1 3230d02842fSSascha Wildner * 3240d02842fSSascha Wildner ******************************************************************************/ 3250d02842fSSascha Wildner 3260d02842fSSascha Wildner typedef struct acpi_table_ecdt 3270d02842fSSascha Wildner { 3280d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3290d02842fSSascha Wildner ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 3300d02842fSSascha Wildner ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 3310d02842fSSascha Wildner UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 3320d02842fSSascha Wildner UINT8 Gpe; /* The GPE for the EC */ 3330d02842fSSascha Wildner UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 3340d02842fSSascha Wildner 3350d02842fSSascha Wildner } ACPI_TABLE_ECDT; 3360d02842fSSascha Wildner 3370d02842fSSascha Wildner 3380d02842fSSascha Wildner /******************************************************************************* 3390d02842fSSascha Wildner * 3400d02842fSSascha Wildner * EINJ - Error Injection Table (ACPI 4.0) 3410d02842fSSascha Wildner * Version 1 3420d02842fSSascha Wildner * 3430d02842fSSascha Wildner ******************************************************************************/ 3440d02842fSSascha Wildner 3450d02842fSSascha Wildner typedef struct acpi_table_einj 3460d02842fSSascha Wildner { 3470d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3480d02842fSSascha Wildner UINT32 HeaderLength; 3490d02842fSSascha Wildner UINT8 Flags; 3500d02842fSSascha Wildner UINT8 Reserved[3]; 3510d02842fSSascha Wildner UINT32 Entries; 3520d02842fSSascha Wildner 3530d02842fSSascha Wildner } ACPI_TABLE_EINJ; 3540d02842fSSascha Wildner 3550d02842fSSascha Wildner 3560d02842fSSascha Wildner /* EINJ Injection Instruction Entries (actions) */ 3570d02842fSSascha Wildner 3580d02842fSSascha Wildner typedef struct acpi_einj_entry 3590d02842fSSascha Wildner { 3600d02842fSSascha Wildner ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 3610d02842fSSascha Wildner 3620d02842fSSascha Wildner } ACPI_EINJ_ENTRY; 3630d02842fSSascha Wildner 3640d02842fSSascha Wildner /* Masks for Flags field above */ 3650d02842fSSascha Wildner 3660d02842fSSascha Wildner #define ACPI_EINJ_PRESERVE (1) 3670d02842fSSascha Wildner 3680d02842fSSascha Wildner /* Values for Action field above */ 3690d02842fSSascha Wildner 3700d02842fSSascha Wildner enum AcpiEinjActions 3710d02842fSSascha Wildner { 3720d02842fSSascha Wildner ACPI_EINJ_BEGIN_OPERATION = 0, 3730d02842fSSascha Wildner ACPI_EINJ_GET_TRIGGER_TABLE = 1, 3740d02842fSSascha Wildner ACPI_EINJ_SET_ERROR_TYPE = 2, 3750d02842fSSascha Wildner ACPI_EINJ_GET_ERROR_TYPE = 3, 3760d02842fSSascha Wildner ACPI_EINJ_END_OPERATION = 4, 3770d02842fSSascha Wildner ACPI_EINJ_EXECUTE_OPERATION = 5, 3780d02842fSSascha Wildner ACPI_EINJ_CHECK_BUSY_STATUS = 6, 3790d02842fSSascha Wildner ACPI_EINJ_GET_COMMAND_STATUS = 7, 3800d02842fSSascha Wildner ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 3817c9678bcSSascha Wildner ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 3827c9678bcSSascha Wildner ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 3830d02842fSSascha Wildner ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 3840d02842fSSascha Wildner }; 3850d02842fSSascha Wildner 3860d02842fSSascha Wildner /* Values for Instruction field above */ 3870d02842fSSascha Wildner 3880d02842fSSascha Wildner enum AcpiEinjInstructions 3890d02842fSSascha Wildner { 3900d02842fSSascha Wildner ACPI_EINJ_READ_REGISTER = 0, 3910d02842fSSascha Wildner ACPI_EINJ_READ_REGISTER_VALUE = 1, 3920d02842fSSascha Wildner ACPI_EINJ_WRITE_REGISTER = 2, 3930d02842fSSascha Wildner ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 3940d02842fSSascha Wildner ACPI_EINJ_NOOP = 4, 3950d02842fSSascha Wildner ACPI_EINJ_FLUSH_CACHELINE = 5, 3960d02842fSSascha Wildner ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 3970d02842fSSascha Wildner }; 3980d02842fSSascha Wildner 3990d02842fSSascha Wildner typedef struct acpi_einj_error_type_with_addr 4000d02842fSSascha Wildner { 4010d02842fSSascha Wildner UINT32 ErrorType; 4020d02842fSSascha Wildner UINT32 VendorStructOffset; 4030d02842fSSascha Wildner UINT32 Flags; 4040d02842fSSascha Wildner UINT32 ApicId; 4050d02842fSSascha Wildner UINT64 Address; 4060d02842fSSascha Wildner UINT64 Range; 4070d02842fSSascha Wildner UINT32 PcieId; 4080d02842fSSascha Wildner 4090d02842fSSascha Wildner } ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 4100d02842fSSascha Wildner 4110d02842fSSascha Wildner typedef struct acpi_einj_vendor 4120d02842fSSascha Wildner { 4130d02842fSSascha Wildner UINT32 Length; 4140d02842fSSascha Wildner UINT32 PcieId; 4150d02842fSSascha Wildner UINT16 VendorId; 4160d02842fSSascha Wildner UINT16 DeviceId; 4170d02842fSSascha Wildner UINT8 RevisionId; 4180d02842fSSascha Wildner UINT8 Reserved[3]; 4190d02842fSSascha Wildner 4200d02842fSSascha Wildner } ACPI_EINJ_VENDOR; 4210d02842fSSascha Wildner 4220d02842fSSascha Wildner 4230d02842fSSascha Wildner /* EINJ Trigger Error Action Table */ 4240d02842fSSascha Wildner 4250d02842fSSascha Wildner typedef struct acpi_einj_trigger 4260d02842fSSascha Wildner { 4270d02842fSSascha Wildner UINT32 HeaderSize; 4280d02842fSSascha Wildner UINT32 Revision; 4290d02842fSSascha Wildner UINT32 TableSize; 4300d02842fSSascha Wildner UINT32 EntryCount; 4310d02842fSSascha Wildner 4320d02842fSSascha Wildner } ACPI_EINJ_TRIGGER; 4330d02842fSSascha Wildner 4340d02842fSSascha Wildner /* Command status return values */ 4350d02842fSSascha Wildner 4360d02842fSSascha Wildner enum AcpiEinjCommandStatus 4370d02842fSSascha Wildner { 4380d02842fSSascha Wildner ACPI_EINJ_SUCCESS = 0, 4390d02842fSSascha Wildner ACPI_EINJ_FAILURE = 1, 4400d02842fSSascha Wildner ACPI_EINJ_INVALID_ACCESS = 2, 4410d02842fSSascha Wildner ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 4420d02842fSSascha Wildner }; 4430d02842fSSascha Wildner 4440d02842fSSascha Wildner 4450d02842fSSascha Wildner /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 4460d02842fSSascha Wildner 4470d02842fSSascha Wildner #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 4480d02842fSSascha Wildner #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 4490d02842fSSascha Wildner #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 4500d02842fSSascha Wildner #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 4510d02842fSSascha Wildner #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 4520d02842fSSascha Wildner #define ACPI_EINJ_MEMORY_FATAL (1<<5) 4530d02842fSSascha Wildner #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 4540d02842fSSascha Wildner #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 4550d02842fSSascha Wildner #define ACPI_EINJ_PCIX_FATAL (1<<8) 4560d02842fSSascha Wildner #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 4570d02842fSSascha Wildner #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 4580d02842fSSascha Wildner #define ACPI_EINJ_PLATFORM_FATAL (1<<11) 4590d02842fSSascha Wildner #define ACPI_EINJ_VENDOR_DEFINED (1<<31) 4600d02842fSSascha Wildner 4610d02842fSSascha Wildner 4620d02842fSSascha Wildner /******************************************************************************* 4630d02842fSSascha Wildner * 4640d02842fSSascha Wildner * ERST - Error Record Serialization Table (ACPI 4.0) 4650d02842fSSascha Wildner * Version 1 4660d02842fSSascha Wildner * 4670d02842fSSascha Wildner ******************************************************************************/ 4680d02842fSSascha Wildner 4690d02842fSSascha Wildner typedef struct acpi_table_erst 4700d02842fSSascha Wildner { 4710d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 4720d02842fSSascha Wildner UINT32 HeaderLength; 4730d02842fSSascha Wildner UINT32 Reserved; 4740d02842fSSascha Wildner UINT32 Entries; 4750d02842fSSascha Wildner 4760d02842fSSascha Wildner } ACPI_TABLE_ERST; 4770d02842fSSascha Wildner 4780d02842fSSascha Wildner 4790d02842fSSascha Wildner /* ERST Serialization Entries (actions) */ 4800d02842fSSascha Wildner 4810d02842fSSascha Wildner typedef struct acpi_erst_entry 4820d02842fSSascha Wildner { 4830d02842fSSascha Wildner ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 4840d02842fSSascha Wildner 4850d02842fSSascha Wildner } ACPI_ERST_ENTRY; 4860d02842fSSascha Wildner 4870d02842fSSascha Wildner /* Masks for Flags field above */ 4880d02842fSSascha Wildner 4890d02842fSSascha Wildner #define ACPI_ERST_PRESERVE (1) 4900d02842fSSascha Wildner 4910d02842fSSascha Wildner /* Values for Action field above */ 4920d02842fSSascha Wildner 4930d02842fSSascha Wildner enum AcpiErstActions 4940d02842fSSascha Wildner { 4950d02842fSSascha Wildner ACPI_ERST_BEGIN_WRITE = 0, 4960d02842fSSascha Wildner ACPI_ERST_BEGIN_READ = 1, 4970d02842fSSascha Wildner ACPI_ERST_BEGIN_CLEAR = 2, 4980d02842fSSascha Wildner ACPI_ERST_END = 3, 4990d02842fSSascha Wildner ACPI_ERST_SET_RECORD_OFFSET = 4, 5000d02842fSSascha Wildner ACPI_ERST_EXECUTE_OPERATION = 5, 5010d02842fSSascha Wildner ACPI_ERST_CHECK_BUSY_STATUS = 6, 5020d02842fSSascha Wildner ACPI_ERST_GET_COMMAND_STATUS = 7, 5030d02842fSSascha Wildner ACPI_ERST_GET_RECORD_ID = 8, 5040d02842fSSascha Wildner ACPI_ERST_SET_RECORD_ID = 9, 5050d02842fSSascha Wildner ACPI_ERST_GET_RECORD_COUNT = 10, 5060d02842fSSascha Wildner ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 5070d02842fSSascha Wildner ACPI_ERST_NOT_USED = 12, 5080d02842fSSascha Wildner ACPI_ERST_GET_ERROR_RANGE = 13, 5090d02842fSSascha Wildner ACPI_ERST_GET_ERROR_LENGTH = 14, 5100d02842fSSascha Wildner ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 5117c9678bcSSascha Wildner ACPI_ERST_EXECUTE_TIMINGS = 16, 5127c9678bcSSascha Wildner ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 5130d02842fSSascha Wildner }; 5140d02842fSSascha Wildner 5150d02842fSSascha Wildner /* Values for Instruction field above */ 5160d02842fSSascha Wildner 5170d02842fSSascha Wildner enum AcpiErstInstructions 5180d02842fSSascha Wildner { 5190d02842fSSascha Wildner ACPI_ERST_READ_REGISTER = 0, 5200d02842fSSascha Wildner ACPI_ERST_READ_REGISTER_VALUE = 1, 5210d02842fSSascha Wildner ACPI_ERST_WRITE_REGISTER = 2, 5220d02842fSSascha Wildner ACPI_ERST_WRITE_REGISTER_VALUE = 3, 5230d02842fSSascha Wildner ACPI_ERST_NOOP = 4, 5240d02842fSSascha Wildner ACPI_ERST_LOAD_VAR1 = 5, 5250d02842fSSascha Wildner ACPI_ERST_LOAD_VAR2 = 6, 5260d02842fSSascha Wildner ACPI_ERST_STORE_VAR1 = 7, 5270d02842fSSascha Wildner ACPI_ERST_ADD = 8, 5280d02842fSSascha Wildner ACPI_ERST_SUBTRACT = 9, 5290d02842fSSascha Wildner ACPI_ERST_ADD_VALUE = 10, 5300d02842fSSascha Wildner ACPI_ERST_SUBTRACT_VALUE = 11, 5310d02842fSSascha Wildner ACPI_ERST_STALL = 12, 5320d02842fSSascha Wildner ACPI_ERST_STALL_WHILE_TRUE = 13, 5330d02842fSSascha Wildner ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 5340d02842fSSascha Wildner ACPI_ERST_GOTO = 15, 5350d02842fSSascha Wildner ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 5360d02842fSSascha Wildner ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 5370d02842fSSascha Wildner ACPI_ERST_MOVE_DATA = 18, 5380d02842fSSascha Wildner ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 5390d02842fSSascha Wildner }; 5400d02842fSSascha Wildner 5410d02842fSSascha Wildner /* Command status return values */ 5420d02842fSSascha Wildner 5430d02842fSSascha Wildner enum AcpiErstCommandStatus 5440d02842fSSascha Wildner { 5450d02842fSSascha Wildner ACPI_ERST_SUCESS = 0, 5460d02842fSSascha Wildner ACPI_ERST_NO_SPACE = 1, 5470d02842fSSascha Wildner ACPI_ERST_NOT_AVAILABLE = 2, 5480d02842fSSascha Wildner ACPI_ERST_FAILURE = 3, 5490d02842fSSascha Wildner ACPI_ERST_RECORD_EMPTY = 4, 5500d02842fSSascha Wildner ACPI_ERST_NOT_FOUND = 5, 5510d02842fSSascha Wildner ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 5520d02842fSSascha Wildner }; 5530d02842fSSascha Wildner 5540d02842fSSascha Wildner 5550d02842fSSascha Wildner /* Error Record Serialization Information */ 5560d02842fSSascha Wildner 5570d02842fSSascha Wildner typedef struct acpi_erst_info 5580d02842fSSascha Wildner { 5590d02842fSSascha Wildner UINT16 Signature; /* Should be "ER" */ 5600d02842fSSascha Wildner UINT8 Data[48]; 5610d02842fSSascha Wildner 5620d02842fSSascha Wildner } ACPI_ERST_INFO; 5630d02842fSSascha Wildner 5640d02842fSSascha Wildner 5650d02842fSSascha Wildner /******************************************************************************* 5660d02842fSSascha Wildner * 5670d02842fSSascha Wildner * HEST - Hardware Error Source Table (ACPI 4.0) 5680d02842fSSascha Wildner * Version 1 5690d02842fSSascha Wildner * 5700d02842fSSascha Wildner ******************************************************************************/ 5710d02842fSSascha Wildner 5720d02842fSSascha Wildner typedef struct acpi_table_hest 5730d02842fSSascha Wildner { 5740d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 5750d02842fSSascha Wildner UINT32 ErrorSourceCount; 5760d02842fSSascha Wildner 5770d02842fSSascha Wildner } ACPI_TABLE_HEST; 5780d02842fSSascha Wildner 5790d02842fSSascha Wildner 5800d02842fSSascha Wildner /* HEST subtable header */ 5810d02842fSSascha Wildner 5820d02842fSSascha Wildner typedef struct acpi_hest_header 5830d02842fSSascha Wildner { 5840d02842fSSascha Wildner UINT16 Type; 5850d02842fSSascha Wildner UINT16 SourceId; 5860d02842fSSascha Wildner 5870d02842fSSascha Wildner } ACPI_HEST_HEADER; 5880d02842fSSascha Wildner 5890d02842fSSascha Wildner 5900d02842fSSascha Wildner /* Values for Type field above for subtables */ 5910d02842fSSascha Wildner 5920d02842fSSascha Wildner enum AcpiHestTypes 5930d02842fSSascha Wildner { 5940d02842fSSascha Wildner ACPI_HEST_TYPE_IA32_CHECK = 0, 5950d02842fSSascha Wildner ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 5960d02842fSSascha Wildner ACPI_HEST_TYPE_IA32_NMI = 2, 5970d02842fSSascha Wildner ACPI_HEST_TYPE_NOT_USED3 = 3, 5980d02842fSSascha Wildner ACPI_HEST_TYPE_NOT_USED4 = 4, 5990d02842fSSascha Wildner ACPI_HEST_TYPE_NOT_USED5 = 5, 6000d02842fSSascha Wildner ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 6010d02842fSSascha Wildner ACPI_HEST_TYPE_AER_ENDPOINT = 7, 6020d02842fSSascha Wildner ACPI_HEST_TYPE_AER_BRIDGE = 8, 6030d02842fSSascha Wildner ACPI_HEST_TYPE_GENERIC_ERROR = 9, 6047c9678bcSSascha Wildner ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 605*1093ca81SSascha Wildner ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, 606*1093ca81SSascha Wildner ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ 6070d02842fSSascha Wildner }; 6080d02842fSSascha Wildner 6090d02842fSSascha Wildner 6100d02842fSSascha Wildner /* 6110d02842fSSascha Wildner * HEST substructures contained in subtables 6120d02842fSSascha Wildner */ 6130d02842fSSascha Wildner 6140d02842fSSascha Wildner /* 6150d02842fSSascha Wildner * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 6160d02842fSSascha Wildner * ACPI_HEST_IA_CORRECTED structures. 6170d02842fSSascha Wildner */ 6180d02842fSSascha Wildner typedef struct acpi_hest_ia_error_bank 6190d02842fSSascha Wildner { 6200d02842fSSascha Wildner UINT8 BankNumber; 6210d02842fSSascha Wildner UINT8 ClearStatusOnInit; 6220d02842fSSascha Wildner UINT8 StatusFormat; 6230d02842fSSascha Wildner UINT8 Reserved; 6240d02842fSSascha Wildner UINT32 ControlRegister; 6250d02842fSSascha Wildner UINT64 ControlData; 6260d02842fSSascha Wildner UINT32 StatusRegister; 6270d02842fSSascha Wildner UINT32 AddressRegister; 6280d02842fSSascha Wildner UINT32 MiscRegister; 6290d02842fSSascha Wildner 6300d02842fSSascha Wildner } ACPI_HEST_IA_ERROR_BANK; 6310d02842fSSascha Wildner 6320d02842fSSascha Wildner 6330d02842fSSascha Wildner /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 6340d02842fSSascha Wildner 6350d02842fSSascha Wildner typedef struct acpi_hest_aer_common 6360d02842fSSascha Wildner { 6370d02842fSSascha Wildner UINT16 Reserved1; 6380d02842fSSascha Wildner UINT8 Flags; 6390d02842fSSascha Wildner UINT8 Enabled; 6400d02842fSSascha Wildner UINT32 RecordsToPreallocate; 6410d02842fSSascha Wildner UINT32 MaxSectionsPerRecord; 6420d02842fSSascha Wildner UINT32 Bus; /* Bus and Segment numbers */ 6430d02842fSSascha Wildner UINT16 Device; 6440d02842fSSascha Wildner UINT16 Function; 6450d02842fSSascha Wildner UINT16 DeviceControl; 6460d02842fSSascha Wildner UINT16 Reserved2; 6470d02842fSSascha Wildner UINT32 UncorrectableMask; 6480d02842fSSascha Wildner UINT32 UncorrectableSeverity; 6490d02842fSSascha Wildner UINT32 CorrectableMask; 6500d02842fSSascha Wildner UINT32 AdvancedCapabilities; 6510d02842fSSascha Wildner 6520d02842fSSascha Wildner } ACPI_HEST_AER_COMMON; 6530d02842fSSascha Wildner 6540d02842fSSascha Wildner /* Masks for HEST Flags fields */ 6550d02842fSSascha Wildner 6560d02842fSSascha Wildner #define ACPI_HEST_FIRMWARE_FIRST (1) 6570d02842fSSascha Wildner #define ACPI_HEST_GLOBAL (1<<1) 658*1093ca81SSascha Wildner #define ACPI_HEST_GHES_ASSIST (1<<2) 6590d02842fSSascha Wildner 6600d02842fSSascha Wildner /* 6610d02842fSSascha Wildner * Macros to access the bus/segment numbers in Bus field above: 6620d02842fSSascha Wildner * Bus number is encoded in bits 7:0 6630d02842fSSascha Wildner * Segment number is encoded in bits 23:8 6640d02842fSSascha Wildner */ 6650d02842fSSascha Wildner #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 6660d02842fSSascha Wildner #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 6670d02842fSSascha Wildner 6680d02842fSSascha Wildner 6690d02842fSSascha Wildner /* Hardware Error Notification */ 6700d02842fSSascha Wildner 6710d02842fSSascha Wildner typedef struct acpi_hest_notify 6720d02842fSSascha Wildner { 6730d02842fSSascha Wildner UINT8 Type; 6740d02842fSSascha Wildner UINT8 Length; 6750d02842fSSascha Wildner UINT16 ConfigWriteEnable; 6760d02842fSSascha Wildner UINT32 PollInterval; 6770d02842fSSascha Wildner UINT32 Vector; 6780d02842fSSascha Wildner UINT32 PollingThresholdValue; 6790d02842fSSascha Wildner UINT32 PollingThresholdWindow; 6800d02842fSSascha Wildner UINT32 ErrorThresholdValue; 6810d02842fSSascha Wildner UINT32 ErrorThresholdWindow; 6820d02842fSSascha Wildner 6830d02842fSSascha Wildner } ACPI_HEST_NOTIFY; 6840d02842fSSascha Wildner 6850d02842fSSascha Wildner /* Values for Notify Type field above */ 6860d02842fSSascha Wildner 6870d02842fSSascha Wildner enum AcpiHestNotifyTypes 6880d02842fSSascha Wildner { 6890d02842fSSascha Wildner ACPI_HEST_NOTIFY_POLLED = 0, 6900d02842fSSascha Wildner ACPI_HEST_NOTIFY_EXTERNAL = 1, 6910d02842fSSascha Wildner ACPI_HEST_NOTIFY_LOCAL = 2, 6920d02842fSSascha Wildner ACPI_HEST_NOTIFY_SCI = 3, 6930d02842fSSascha Wildner ACPI_HEST_NOTIFY_NMI = 4, 6940d02842fSSascha Wildner ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 6950d02842fSSascha Wildner ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 6962ffe9f16SSascha Wildner ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 6972ffe9f16SSascha Wildner ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 6982ffe9f16SSascha Wildner ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 6992ffe9f16SSascha Wildner ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 700*1093ca81SSascha Wildner ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ 701*1093ca81SSascha Wildner ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ 7020d02842fSSascha Wildner }; 7030d02842fSSascha Wildner 7040d02842fSSascha Wildner /* Values for ConfigWriteEnable bitfield above */ 7050d02842fSSascha Wildner 7060d02842fSSascha Wildner #define ACPI_HEST_TYPE (1) 7070d02842fSSascha Wildner #define ACPI_HEST_POLL_INTERVAL (1<<1) 7080d02842fSSascha Wildner #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 7090d02842fSSascha Wildner #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 7100d02842fSSascha Wildner #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 7110d02842fSSascha Wildner #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 7120d02842fSSascha Wildner 7130d02842fSSascha Wildner 7140d02842fSSascha Wildner /* 7150d02842fSSascha Wildner * HEST subtables 7160d02842fSSascha Wildner */ 7170d02842fSSascha Wildner 7180d02842fSSascha Wildner /* 0: IA32 Machine Check Exception */ 7190d02842fSSascha Wildner 7200d02842fSSascha Wildner typedef struct acpi_hest_ia_machine_check 7210d02842fSSascha Wildner { 7220d02842fSSascha Wildner ACPI_HEST_HEADER Header; 7230d02842fSSascha Wildner UINT16 Reserved1; 724*1093ca81SSascha Wildner UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 7250d02842fSSascha Wildner UINT8 Enabled; 7260d02842fSSascha Wildner UINT32 RecordsToPreallocate; 7270d02842fSSascha Wildner UINT32 MaxSectionsPerRecord; 7280d02842fSSascha Wildner UINT64 GlobalCapabilityData; 7290d02842fSSascha Wildner UINT64 GlobalControlData; 7300d02842fSSascha Wildner UINT8 NumHardwareBanks; 7310d02842fSSascha Wildner UINT8 Reserved3[7]; 7320d02842fSSascha Wildner 7330d02842fSSascha Wildner } ACPI_HEST_IA_MACHINE_CHECK; 7340d02842fSSascha Wildner 7350d02842fSSascha Wildner 7360d02842fSSascha Wildner /* 1: IA32 Corrected Machine Check */ 7370d02842fSSascha Wildner 7380d02842fSSascha Wildner typedef struct acpi_hest_ia_corrected 7390d02842fSSascha Wildner { 7400d02842fSSascha Wildner ACPI_HEST_HEADER Header; 7410d02842fSSascha Wildner UINT16 Reserved1; 742*1093ca81SSascha Wildner UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 7430d02842fSSascha Wildner UINT8 Enabled; 7440d02842fSSascha Wildner UINT32 RecordsToPreallocate; 7450d02842fSSascha Wildner UINT32 MaxSectionsPerRecord; 7460d02842fSSascha Wildner ACPI_HEST_NOTIFY Notify; 7470d02842fSSascha Wildner UINT8 NumHardwareBanks; 7480d02842fSSascha Wildner UINT8 Reserved2[3]; 7490d02842fSSascha Wildner 7500d02842fSSascha Wildner } ACPI_HEST_IA_CORRECTED; 7510d02842fSSascha Wildner 7520d02842fSSascha Wildner 7530d02842fSSascha Wildner /* 2: IA32 Non-Maskable Interrupt */ 7540d02842fSSascha Wildner 7550d02842fSSascha Wildner typedef struct acpi_hest_ia_nmi 7560d02842fSSascha Wildner { 7570d02842fSSascha Wildner ACPI_HEST_HEADER Header; 7580d02842fSSascha Wildner UINT32 Reserved; 7590d02842fSSascha Wildner UINT32 RecordsToPreallocate; 7600d02842fSSascha Wildner UINT32 MaxSectionsPerRecord; 7610d02842fSSascha Wildner UINT32 MaxRawDataLength; 7620d02842fSSascha Wildner 7630d02842fSSascha Wildner } ACPI_HEST_IA_NMI; 7640d02842fSSascha Wildner 7650d02842fSSascha Wildner 7660d02842fSSascha Wildner /* 3,4,5: Not used */ 7670d02842fSSascha Wildner 7680d02842fSSascha Wildner /* 6: PCI Express Root Port AER */ 7690d02842fSSascha Wildner 7700d02842fSSascha Wildner typedef struct acpi_hest_aer_root 7710d02842fSSascha Wildner { 7720d02842fSSascha Wildner ACPI_HEST_HEADER Header; 7730d02842fSSascha Wildner ACPI_HEST_AER_COMMON Aer; 7740d02842fSSascha Wildner UINT32 RootErrorCommand; 7750d02842fSSascha Wildner 7760d02842fSSascha Wildner } ACPI_HEST_AER_ROOT; 7770d02842fSSascha Wildner 7780d02842fSSascha Wildner 7790d02842fSSascha Wildner /* 7: PCI Express AER (AER Endpoint) */ 7800d02842fSSascha Wildner 7810d02842fSSascha Wildner typedef struct acpi_hest_aer 7820d02842fSSascha Wildner { 7830d02842fSSascha Wildner ACPI_HEST_HEADER Header; 7840d02842fSSascha Wildner ACPI_HEST_AER_COMMON Aer; 7850d02842fSSascha Wildner 7860d02842fSSascha Wildner } ACPI_HEST_AER; 7870d02842fSSascha Wildner 7880d02842fSSascha Wildner 7890d02842fSSascha Wildner /* 8: PCI Express/PCI-X Bridge AER */ 7900d02842fSSascha Wildner 7910d02842fSSascha Wildner typedef struct acpi_hest_aer_bridge 7920d02842fSSascha Wildner { 7930d02842fSSascha Wildner ACPI_HEST_HEADER Header; 7940d02842fSSascha Wildner ACPI_HEST_AER_COMMON Aer; 7950d02842fSSascha Wildner UINT32 UncorrectableMask2; 7960d02842fSSascha Wildner UINT32 UncorrectableSeverity2; 7970d02842fSSascha Wildner UINT32 AdvancedCapabilities2; 7980d02842fSSascha Wildner 7990d02842fSSascha Wildner } ACPI_HEST_AER_BRIDGE; 8000d02842fSSascha Wildner 8010d02842fSSascha Wildner 8020d02842fSSascha Wildner /* 9: Generic Hardware Error Source */ 8030d02842fSSascha Wildner 8040d02842fSSascha Wildner typedef struct acpi_hest_generic 8050d02842fSSascha Wildner { 8060d02842fSSascha Wildner ACPI_HEST_HEADER Header; 8070d02842fSSascha Wildner UINT16 RelatedSourceId; 8080d02842fSSascha Wildner UINT8 Reserved; 8090d02842fSSascha Wildner UINT8 Enabled; 8100d02842fSSascha Wildner UINT32 RecordsToPreallocate; 8110d02842fSSascha Wildner UINT32 MaxSectionsPerRecord; 8120d02842fSSascha Wildner UINT32 MaxRawDataLength; 8130d02842fSSascha Wildner ACPI_GENERIC_ADDRESS ErrorStatusAddress; 8140d02842fSSascha Wildner ACPI_HEST_NOTIFY Notify; 8150d02842fSSascha Wildner UINT32 ErrorBlockLength; 8160d02842fSSascha Wildner 8170d02842fSSascha Wildner } ACPI_HEST_GENERIC; 8180d02842fSSascha Wildner 8190d02842fSSascha Wildner 8207c9678bcSSascha Wildner /* 10: Generic Hardware Error Source, version 2 */ 8217c9678bcSSascha Wildner 8227c9678bcSSascha Wildner typedef struct acpi_hest_generic_v2 8237c9678bcSSascha Wildner { 8247c9678bcSSascha Wildner ACPI_HEST_HEADER Header; 8257c9678bcSSascha Wildner UINT16 RelatedSourceId; 8267c9678bcSSascha Wildner UINT8 Reserved; 8277c9678bcSSascha Wildner UINT8 Enabled; 8287c9678bcSSascha Wildner UINT32 RecordsToPreallocate; 8297c9678bcSSascha Wildner UINT32 MaxSectionsPerRecord; 8307c9678bcSSascha Wildner UINT32 MaxRawDataLength; 8317c9678bcSSascha Wildner ACPI_GENERIC_ADDRESS ErrorStatusAddress; 8327c9678bcSSascha Wildner ACPI_HEST_NOTIFY Notify; 8337c9678bcSSascha Wildner UINT32 ErrorBlockLength; 8347c9678bcSSascha Wildner ACPI_GENERIC_ADDRESS ReadAckRegister; 8357c9678bcSSascha Wildner UINT64 ReadAckPreserve; 8367c9678bcSSascha Wildner UINT64 ReadAckWrite; 8377c9678bcSSascha Wildner 8387c9678bcSSascha Wildner } ACPI_HEST_GENERIC_V2; 8397c9678bcSSascha Wildner 8407c9678bcSSascha Wildner 8410d02842fSSascha Wildner /* Generic Error Status block */ 8420d02842fSSascha Wildner 8430d02842fSSascha Wildner typedef struct acpi_hest_generic_status 8440d02842fSSascha Wildner { 8450d02842fSSascha Wildner UINT32 BlockStatus; 8460d02842fSSascha Wildner UINT32 RawDataOffset; 8470d02842fSSascha Wildner UINT32 RawDataLength; 8480d02842fSSascha Wildner UINT32 DataLength; 8490d02842fSSascha Wildner UINT32 ErrorSeverity; 8500d02842fSSascha Wildner 8510d02842fSSascha Wildner } ACPI_HEST_GENERIC_STATUS; 8520d02842fSSascha Wildner 8530d02842fSSascha Wildner /* Values for BlockStatus flags above */ 8540d02842fSSascha Wildner 8550d02842fSSascha Wildner #define ACPI_HEST_UNCORRECTABLE (1) 8560d02842fSSascha Wildner #define ACPI_HEST_CORRECTABLE (1<<1) 8570d02842fSSascha Wildner #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 8580d02842fSSascha Wildner #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 8590d02842fSSascha Wildner #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 8600d02842fSSascha Wildner 8610d02842fSSascha Wildner 8620d02842fSSascha Wildner /* Generic Error Data entry */ 8630d02842fSSascha Wildner 8640d02842fSSascha Wildner typedef struct acpi_hest_generic_data 8650d02842fSSascha Wildner { 8660d02842fSSascha Wildner UINT8 SectionType[16]; 8670d02842fSSascha Wildner UINT32 ErrorSeverity; 8680d02842fSSascha Wildner UINT16 Revision; 8690d02842fSSascha Wildner UINT8 ValidationBits; 8700d02842fSSascha Wildner UINT8 Flags; 8710d02842fSSascha Wildner UINT32 ErrorDataLength; 8720d02842fSSascha Wildner UINT8 FruId[16]; 8730d02842fSSascha Wildner UINT8 FruText[20]; 8749cefb7c8SSascha Wildner 875dbd7d990SSascha Wildner } ACPI_HEST_GENERIC_DATA; 8769cefb7c8SSascha Wildner 8772ffe9f16SSascha Wildner /* Extension for revision 0x0300 */ 8782ffe9f16SSascha Wildner 8792ffe9f16SSascha Wildner typedef struct acpi_hest_generic_data_v300 8802ffe9f16SSascha Wildner { 8812ffe9f16SSascha Wildner UINT8 SectionType[16]; 8822ffe9f16SSascha Wildner UINT32 ErrorSeverity; 8832ffe9f16SSascha Wildner UINT16 Revision; 8842ffe9f16SSascha Wildner UINT8 ValidationBits; 8852ffe9f16SSascha Wildner UINT8 Flags; 8862ffe9f16SSascha Wildner UINT32 ErrorDataLength; 8872ffe9f16SSascha Wildner UINT8 FruId[16]; 8882ffe9f16SSascha Wildner UINT8 FruText[20]; 8892ffe9f16SSascha Wildner UINT64 TimeStamp; 8902ffe9f16SSascha Wildner 8912ffe9f16SSascha Wildner } ACPI_HEST_GENERIC_DATA_V300; 8922ffe9f16SSascha Wildner 8932ffe9f16SSascha Wildner /* Values for ErrorSeverity above */ 8942ffe9f16SSascha Wildner 8952ffe9f16SSascha Wildner #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 8962ffe9f16SSascha Wildner #define ACPI_HEST_GEN_ERROR_FATAL 1 8972ffe9f16SSascha Wildner #define ACPI_HEST_GEN_ERROR_CORRECTED 2 8982ffe9f16SSascha Wildner #define ACPI_HEST_GEN_ERROR_NONE 3 8992ffe9f16SSascha Wildner 9002ffe9f16SSascha Wildner /* Flags for ValidationBits above */ 9012ffe9f16SSascha Wildner 9022ffe9f16SSascha Wildner #define ACPI_HEST_GEN_VALID_FRU_ID (1) 9032ffe9f16SSascha Wildner #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 9042ffe9f16SSascha Wildner #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 9052ffe9f16SSascha Wildner 9060d02842fSSascha Wildner 907*1093ca81SSascha Wildner /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ 908*1093ca81SSascha Wildner 909*1093ca81SSascha Wildner typedef struct acpi_hest_ia_deferred_check 910*1093ca81SSascha Wildner { 911*1093ca81SSascha Wildner ACPI_HEST_HEADER Header; 912*1093ca81SSascha Wildner UINT16 Reserved1; 913*1093ca81SSascha Wildner UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 914*1093ca81SSascha Wildner UINT8 Enabled; 915*1093ca81SSascha Wildner UINT32 RecordsToPreallocate; 916*1093ca81SSascha Wildner UINT32 MaxSectionsPerRecord; 917*1093ca81SSascha Wildner ACPI_HEST_NOTIFY Notify; 918*1093ca81SSascha Wildner UINT8 NumHardwareBanks; 919*1093ca81SSascha Wildner UINT8 Reserved2[3]; 920*1093ca81SSascha Wildner 921*1093ca81SSascha Wildner } ACPI_HEST_IA_DEFERRED_CHECK; 922*1093ca81SSascha Wildner 923*1093ca81SSascha Wildner 924*1093ca81SSascha Wildner /******************************************************************************* 925*1093ca81SSascha Wildner * 926*1093ca81SSascha Wildner * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) 927*1093ca81SSascha Wildner * Version 1 928*1093ca81SSascha Wildner * 929*1093ca81SSascha Wildner ******************************************************************************/ 930*1093ca81SSascha Wildner 931*1093ca81SSascha Wildner typedef struct acpi_table_hmat 932*1093ca81SSascha Wildner { 933*1093ca81SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 934*1093ca81SSascha Wildner UINT32 Reserved; 935*1093ca81SSascha Wildner 936*1093ca81SSascha Wildner } ACPI_TABLE_HMAT; 937*1093ca81SSascha Wildner 938*1093ca81SSascha Wildner 939*1093ca81SSascha Wildner /* Values for HMAT structure types */ 940*1093ca81SSascha Wildner 941*1093ca81SSascha Wildner enum AcpiHmatType 942*1093ca81SSascha Wildner { 943*1093ca81SSascha Wildner ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ 944*1093ca81SSascha Wildner ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ 945*1093ca81SSascha Wildner ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ 946*1093ca81SSascha Wildner ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 947*1093ca81SSascha Wildner }; 948*1093ca81SSascha Wildner 949*1093ca81SSascha Wildner typedef struct acpi_hmat_structure 950*1093ca81SSascha Wildner { 951*1093ca81SSascha Wildner UINT16 Type; 952*1093ca81SSascha Wildner UINT16 Reserved; 953*1093ca81SSascha Wildner UINT32 Length; 954*1093ca81SSascha Wildner 955*1093ca81SSascha Wildner } ACPI_HMAT_STRUCTURE; 956*1093ca81SSascha Wildner 957*1093ca81SSascha Wildner 958*1093ca81SSascha Wildner /* 959*1093ca81SSascha Wildner * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE 960*1093ca81SSascha Wildner */ 961*1093ca81SSascha Wildner 962*1093ca81SSascha Wildner /* 0: Memory subystem address range */ 963*1093ca81SSascha Wildner 964*1093ca81SSascha Wildner typedef struct acpi_hmat_address_range 965*1093ca81SSascha Wildner { 966*1093ca81SSascha Wildner ACPI_HMAT_STRUCTURE Header; 967*1093ca81SSascha Wildner UINT16 Flags; 968*1093ca81SSascha Wildner UINT16 Reserved1; 969*1093ca81SSascha Wildner UINT32 ProcessorPD; /* Processor proximity domain */ 970*1093ca81SSascha Wildner UINT32 MemoryPD; /* Memory proximity domain */ 971*1093ca81SSascha Wildner UINT32 Reserved2; 972*1093ca81SSascha Wildner UINT64 PhysicalAddressBase; /* Physical address range base */ 973*1093ca81SSascha Wildner UINT64 PhysicalAddressLength; /* Physical address range length */ 974*1093ca81SSascha Wildner 975*1093ca81SSascha Wildner } ACPI_HMAT_ADDRESS_RANGE; 976*1093ca81SSascha Wildner 977*1093ca81SSascha Wildner /* Masks for Flags field above */ 978*1093ca81SSascha Wildner 979*1093ca81SSascha Wildner #define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ 980*1093ca81SSascha Wildner #define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ 981*1093ca81SSascha Wildner #define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ 982*1093ca81SSascha Wildner 983*1093ca81SSascha Wildner 984*1093ca81SSascha Wildner /* 1: System locality latency and bandwidth information */ 985*1093ca81SSascha Wildner 986*1093ca81SSascha Wildner typedef struct acpi_hmat_locality 987*1093ca81SSascha Wildner { 988*1093ca81SSascha Wildner ACPI_HMAT_STRUCTURE Header; 989*1093ca81SSascha Wildner UINT8 Flags; 990*1093ca81SSascha Wildner UINT8 DataType; 991*1093ca81SSascha Wildner UINT16 Reserved1; 992*1093ca81SSascha Wildner UINT32 NumberOfInitiatorPDs; 993*1093ca81SSascha Wildner UINT32 NumberOfTargetPDs; 994*1093ca81SSascha Wildner UINT32 Reserved2; 995*1093ca81SSascha Wildner UINT64 EntryBaseUnit; 996*1093ca81SSascha Wildner 997*1093ca81SSascha Wildner } ACPI_HMAT_LOCALITY; 998*1093ca81SSascha Wildner 999*1093ca81SSascha Wildner /* Masks for Flags field above */ 1000*1093ca81SSascha Wildner 1001*1093ca81SSascha Wildner #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) 1002*1093ca81SSascha Wildner 1003*1093ca81SSascha Wildner /* Values for Memory Hierarchy flag */ 1004*1093ca81SSascha Wildner 1005*1093ca81SSascha Wildner #define ACPI_HMAT_MEMORY 0 1006*1093ca81SSascha Wildner #define ACPI_HMAT_LAST_LEVEL_CACHE 1 1007*1093ca81SSascha Wildner #define ACPI_HMAT_1ST_LEVEL_CACHE 2 1008*1093ca81SSascha Wildner #define ACPI_HMAT_2ND_LEVEL_CACHE 3 1009*1093ca81SSascha Wildner #define ACPI_HMAT_3RD_LEVEL_CACHE 4 1010*1093ca81SSascha Wildner 1011*1093ca81SSascha Wildner /* Values for DataType field above */ 1012*1093ca81SSascha Wildner 1013*1093ca81SSascha Wildner #define ACPI_HMAT_ACCESS_LATENCY 0 1014*1093ca81SSascha Wildner #define ACPI_HMAT_READ_LATENCY 1 1015*1093ca81SSascha Wildner #define ACPI_HMAT_WRITE_LATENCY 2 1016*1093ca81SSascha Wildner #define ACPI_HMAT_ACCESS_BANDWIDTH 3 1017*1093ca81SSascha Wildner #define ACPI_HMAT_READ_BANDWIDTH 4 1018*1093ca81SSascha Wildner #define ACPI_HMAT_WRITE_BANDWIDTH 5 1019*1093ca81SSascha Wildner 1020*1093ca81SSascha Wildner 1021*1093ca81SSascha Wildner /* 2: Memory side cache information */ 1022*1093ca81SSascha Wildner 1023*1093ca81SSascha Wildner typedef struct acpi_hmat_cache 1024*1093ca81SSascha Wildner { 1025*1093ca81SSascha Wildner ACPI_HMAT_STRUCTURE Header; 1026*1093ca81SSascha Wildner UINT32 MemoryPD; 1027*1093ca81SSascha Wildner UINT32 Reserved1; 1028*1093ca81SSascha Wildner UINT64 CacheSize; 1029*1093ca81SSascha Wildner UINT32 CacheAttributes; 1030*1093ca81SSascha Wildner UINT16 Reserved2; 1031*1093ca81SSascha Wildner UINT16 NumberOfSMBIOSHandles; 1032*1093ca81SSascha Wildner 1033*1093ca81SSascha Wildner } ACPI_HMAT_CACHE; 1034*1093ca81SSascha Wildner 1035*1093ca81SSascha Wildner /* Masks for CacheAttributes field above */ 1036*1093ca81SSascha Wildner 1037*1093ca81SSascha Wildner #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) 1038*1093ca81SSascha Wildner #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) 1039*1093ca81SSascha Wildner #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) 1040*1093ca81SSascha Wildner #define ACPI_HMAT_WRITE_POLICY (0x0000F000) 1041*1093ca81SSascha Wildner #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) 1042*1093ca81SSascha Wildner 1043*1093ca81SSascha Wildner /* Values for cache associativity flag */ 1044*1093ca81SSascha Wildner 1045*1093ca81SSascha Wildner #define ACPI_HMAT_CA_NONE (0) 1046*1093ca81SSascha Wildner #define ACPI_HMAT_CA_DIRECT_MAPPED (1) 1047*1093ca81SSascha Wildner #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) 1048*1093ca81SSascha Wildner 1049*1093ca81SSascha Wildner /* Values for write policy flag */ 1050*1093ca81SSascha Wildner 1051*1093ca81SSascha Wildner #define ACPI_HMAT_CP_NONE (0) 1052*1093ca81SSascha Wildner #define ACPI_HMAT_CP_WB (1) 1053*1093ca81SSascha Wildner #define ACPI_HMAT_CP_WT (2) 1054*1093ca81SSascha Wildner 1055*1093ca81SSascha Wildner 10560d02842fSSascha Wildner /******************************************************************************* 10570d02842fSSascha Wildner * 10580d02842fSSascha Wildner * MADT - Multiple APIC Description Table 10590d02842fSSascha Wildner * Version 3 10600d02842fSSascha Wildner * 10610d02842fSSascha Wildner ******************************************************************************/ 10620d02842fSSascha Wildner 10630d02842fSSascha Wildner typedef struct acpi_table_madt 10640d02842fSSascha Wildner { 10650d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 10660d02842fSSascha Wildner UINT32 Address; /* Physical address of local APIC */ 10670d02842fSSascha Wildner UINT32 Flags; 10680d02842fSSascha Wildner 10690d02842fSSascha Wildner } ACPI_TABLE_MADT; 10700d02842fSSascha Wildner 10710d02842fSSascha Wildner /* Masks for Flags field above */ 10720d02842fSSascha Wildner 10730d02842fSSascha Wildner #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 10740d02842fSSascha Wildner 10750d02842fSSascha Wildner /* Values for PCATCompat flag */ 10760d02842fSSascha Wildner 1077*1093ca81SSascha Wildner #define ACPI_MADT_DUAL_PIC 1 1078*1093ca81SSascha Wildner #define ACPI_MADT_MULTIPLE_APIC 0 10790d02842fSSascha Wildner 10800d02842fSSascha Wildner 10810d02842fSSascha Wildner /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 10820d02842fSSascha Wildner 10830d02842fSSascha Wildner enum AcpiMadtType 10840d02842fSSascha Wildner { 10850d02842fSSascha Wildner ACPI_MADT_TYPE_LOCAL_APIC = 0, 10860d02842fSSascha Wildner ACPI_MADT_TYPE_IO_APIC = 1, 10870d02842fSSascha Wildner ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 10880d02842fSSascha Wildner ACPI_MADT_TYPE_NMI_SOURCE = 3, 10890d02842fSSascha Wildner ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 10900d02842fSSascha Wildner ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 10910d02842fSSascha Wildner ACPI_MADT_TYPE_IO_SAPIC = 6, 10920d02842fSSascha Wildner ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 10930d02842fSSascha Wildner ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 10940d02842fSSascha Wildner ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 10950d02842fSSascha Wildner ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 10960d02842fSSascha Wildner ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 10970d02842fSSascha Wildner ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 1098066b6da2SSascha Wildner ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 1099066b6da2SSascha Wildner ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 1100896f2e3aSSascha Wildner ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 1101896f2e3aSSascha Wildner ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ 11020d02842fSSascha Wildner }; 11030d02842fSSascha Wildner 11040d02842fSSascha Wildner 11050d02842fSSascha Wildner /* 11069e1c0880SSascha Wildner * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 11070d02842fSSascha Wildner */ 11080d02842fSSascha Wildner 11090d02842fSSascha Wildner /* 0: Processor Local APIC */ 11100d02842fSSascha Wildner 11110d02842fSSascha Wildner typedef struct acpi_madt_local_apic 11120d02842fSSascha Wildner { 11130d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11140d02842fSSascha Wildner UINT8 ProcessorId; /* ACPI processor id */ 11150d02842fSSascha Wildner UINT8 Id; /* Processor's local APIC id */ 11160d02842fSSascha Wildner UINT32 LapicFlags; 11170d02842fSSascha Wildner 11180d02842fSSascha Wildner } ACPI_MADT_LOCAL_APIC; 11190d02842fSSascha Wildner 11200d02842fSSascha Wildner 11210d02842fSSascha Wildner /* 1: IO APIC */ 11220d02842fSSascha Wildner 11230d02842fSSascha Wildner typedef struct acpi_madt_io_apic 11240d02842fSSascha Wildner { 11250d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11260d02842fSSascha Wildner UINT8 Id; /* I/O APIC ID */ 11270d02842fSSascha Wildner UINT8 Reserved; /* Reserved - must be zero */ 11280d02842fSSascha Wildner UINT32 Address; /* APIC physical address */ 11290d02842fSSascha Wildner UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 11300d02842fSSascha Wildner 11310d02842fSSascha Wildner } ACPI_MADT_IO_APIC; 11320d02842fSSascha Wildner 11330d02842fSSascha Wildner 11340d02842fSSascha Wildner /* 2: Interrupt Override */ 11350d02842fSSascha Wildner 11360d02842fSSascha Wildner typedef struct acpi_madt_interrupt_override 11370d02842fSSascha Wildner { 11380d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11390d02842fSSascha Wildner UINT8 Bus; /* 0 - ISA */ 11400d02842fSSascha Wildner UINT8 SourceIrq; /* Interrupt source (IRQ) */ 11410d02842fSSascha Wildner UINT32 GlobalIrq; /* Global system interrupt */ 11420d02842fSSascha Wildner UINT16 IntiFlags; 11430d02842fSSascha Wildner 11440d02842fSSascha Wildner } ACPI_MADT_INTERRUPT_OVERRIDE; 11450d02842fSSascha Wildner 11460d02842fSSascha Wildner 11470d02842fSSascha Wildner /* 3: NMI Source */ 11480d02842fSSascha Wildner 11490d02842fSSascha Wildner typedef struct acpi_madt_nmi_source 11500d02842fSSascha Wildner { 11510d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11520d02842fSSascha Wildner UINT16 IntiFlags; 11530d02842fSSascha Wildner UINT32 GlobalIrq; /* Global system interrupt */ 11540d02842fSSascha Wildner 11550d02842fSSascha Wildner } ACPI_MADT_NMI_SOURCE; 11560d02842fSSascha Wildner 11570d02842fSSascha Wildner 11580d02842fSSascha Wildner /* 4: Local APIC NMI */ 11590d02842fSSascha Wildner 11600d02842fSSascha Wildner typedef struct acpi_madt_local_apic_nmi 11610d02842fSSascha Wildner { 11620d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11630d02842fSSascha Wildner UINT8 ProcessorId; /* ACPI processor id */ 11640d02842fSSascha Wildner UINT16 IntiFlags; 11650d02842fSSascha Wildner UINT8 Lint; /* LINTn to which NMI is connected */ 11660d02842fSSascha Wildner 11670d02842fSSascha Wildner } ACPI_MADT_LOCAL_APIC_NMI; 11680d02842fSSascha Wildner 11690d02842fSSascha Wildner 11700d02842fSSascha Wildner /* 5: Address Override */ 11710d02842fSSascha Wildner 11720d02842fSSascha Wildner typedef struct acpi_madt_local_apic_override 11730d02842fSSascha Wildner { 11740d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11750d02842fSSascha Wildner UINT16 Reserved; /* Reserved, must be zero */ 11760d02842fSSascha Wildner UINT64 Address; /* APIC physical address */ 11770d02842fSSascha Wildner 11780d02842fSSascha Wildner } ACPI_MADT_LOCAL_APIC_OVERRIDE; 11790d02842fSSascha Wildner 11800d02842fSSascha Wildner 11810d02842fSSascha Wildner /* 6: I/O Sapic */ 11820d02842fSSascha Wildner 11830d02842fSSascha Wildner typedef struct acpi_madt_io_sapic 11840d02842fSSascha Wildner { 11850d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11860d02842fSSascha Wildner UINT8 Id; /* I/O SAPIC ID */ 11870d02842fSSascha Wildner UINT8 Reserved; /* Reserved, must be zero */ 11880d02842fSSascha Wildner UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 11890d02842fSSascha Wildner UINT64 Address; /* SAPIC physical address */ 11900d02842fSSascha Wildner 11910d02842fSSascha Wildner } ACPI_MADT_IO_SAPIC; 11920d02842fSSascha Wildner 11930d02842fSSascha Wildner 11940d02842fSSascha Wildner /* 7: Local Sapic */ 11950d02842fSSascha Wildner 11960d02842fSSascha Wildner typedef struct acpi_madt_local_sapic 11970d02842fSSascha Wildner { 11980d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 11990d02842fSSascha Wildner UINT8 ProcessorId; /* ACPI processor id */ 12000d02842fSSascha Wildner UINT8 Id; /* SAPIC ID */ 12010d02842fSSascha Wildner UINT8 Eid; /* SAPIC EID */ 12020d02842fSSascha Wildner UINT8 Reserved[3]; /* Reserved, must be zero */ 12030d02842fSSascha Wildner UINT32 LapicFlags; 12040d02842fSSascha Wildner UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 12050d02842fSSascha Wildner char UidString[1]; /* String UID - ACPI 3.0 */ 12060d02842fSSascha Wildner 12070d02842fSSascha Wildner } ACPI_MADT_LOCAL_SAPIC; 12080d02842fSSascha Wildner 12090d02842fSSascha Wildner 12100d02842fSSascha Wildner /* 8: Platform Interrupt Source */ 12110d02842fSSascha Wildner 12120d02842fSSascha Wildner typedef struct acpi_madt_interrupt_source 12130d02842fSSascha Wildner { 12140d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 12150d02842fSSascha Wildner UINT16 IntiFlags; 12160d02842fSSascha Wildner UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 12170d02842fSSascha Wildner UINT8 Id; /* Processor ID */ 12180d02842fSSascha Wildner UINT8 Eid; /* Processor EID */ 12190d02842fSSascha Wildner UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 12200d02842fSSascha Wildner UINT32 GlobalIrq; /* Global system interrupt */ 12210d02842fSSascha Wildner UINT32 Flags; /* Interrupt Source Flags */ 12220d02842fSSascha Wildner 12230d02842fSSascha Wildner } ACPI_MADT_INTERRUPT_SOURCE; 12240d02842fSSascha Wildner 12250d02842fSSascha Wildner /* Masks for Flags field above */ 12260d02842fSSascha Wildner 12270d02842fSSascha Wildner #define ACPI_MADT_CPEI_OVERRIDE (1) 12280d02842fSSascha Wildner 12290d02842fSSascha Wildner 12300d02842fSSascha Wildner /* 9: Processor Local X2APIC (ACPI 4.0) */ 12310d02842fSSascha Wildner 12320d02842fSSascha Wildner typedef struct acpi_madt_local_x2apic 12330d02842fSSascha Wildner { 12340d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 12350d02842fSSascha Wildner UINT16 Reserved; /* Reserved - must be zero */ 12360d02842fSSascha Wildner UINT32 LocalApicId; /* Processor x2APIC ID */ 12370d02842fSSascha Wildner UINT32 LapicFlags; 12380d02842fSSascha Wildner UINT32 Uid; /* ACPI processor UID */ 12390d02842fSSascha Wildner 12400d02842fSSascha Wildner } ACPI_MADT_LOCAL_X2APIC; 12410d02842fSSascha Wildner 12420d02842fSSascha Wildner 12430d02842fSSascha Wildner /* 10: Local X2APIC NMI (ACPI 4.0) */ 12440d02842fSSascha Wildner 12450d02842fSSascha Wildner typedef struct acpi_madt_local_x2apic_nmi 12460d02842fSSascha Wildner { 12470d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 12480d02842fSSascha Wildner UINT16 IntiFlags; 12490d02842fSSascha Wildner UINT32 Uid; /* ACPI processor UID */ 12500d02842fSSascha Wildner UINT8 Lint; /* LINTn to which NMI is connected */ 12510d02842fSSascha Wildner UINT8 Reserved[3]; /* Reserved - must be zero */ 12520d02842fSSascha Wildner 12530d02842fSSascha Wildner } ACPI_MADT_LOCAL_X2APIC_NMI; 12540d02842fSSascha Wildner 12550d02842fSSascha Wildner 1256896f2e3aSSascha Wildner /* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ 12570d02842fSSascha Wildner 12580d02842fSSascha Wildner typedef struct acpi_madt_generic_interrupt 12590d02842fSSascha Wildner { 12600d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 12610d02842fSSascha Wildner UINT16 Reserved; /* Reserved - must be zero */ 1262066b6da2SSascha Wildner UINT32 CpuInterfaceNumber; 12630d02842fSSascha Wildner UINT32 Uid; 12640d02842fSSascha Wildner UINT32 Flags; 12650d02842fSSascha Wildner UINT32 ParkingVersion; 12660d02842fSSascha Wildner UINT32 PerformanceInterrupt; 12670d02842fSSascha Wildner UINT64 ParkedAddress; 12680d02842fSSascha Wildner UINT64 BaseAddress; 1269066b6da2SSascha Wildner UINT64 GicvBaseAddress; 1270066b6da2SSascha Wildner UINT64 GichBaseAddress; 1271066b6da2SSascha Wildner UINT32 VgicInterrupt; 1272066b6da2SSascha Wildner UINT64 GicrBaseAddress; 1273066b6da2SSascha Wildner UINT64 ArmMpidr; 1274896f2e3aSSascha Wildner UINT8 EfficiencyClass; 1275896f2e3aSSascha Wildner UINT8 Reserved2[3]; 12760d02842fSSascha Wildner 12770d02842fSSascha Wildner } ACPI_MADT_GENERIC_INTERRUPT; 12780d02842fSSascha Wildner 1279066b6da2SSascha Wildner /* Masks for Flags field above */ 1280066b6da2SSascha Wildner 1281066b6da2SSascha Wildner /* ACPI_MADT_ENABLED (1) Processor is usable if set */ 1282066b6da2SSascha Wildner #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 1283066b6da2SSascha Wildner #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 1284066b6da2SSascha Wildner 12850d02842fSSascha Wildner 1286896f2e3aSSascha Wildner /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 12870d02842fSSascha Wildner 12880d02842fSSascha Wildner typedef struct acpi_madt_generic_distributor 12890d02842fSSascha Wildner { 12900d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 12910d02842fSSascha Wildner UINT16 Reserved; /* Reserved - must be zero */ 12920d02842fSSascha Wildner UINT32 GicId; 12930d02842fSSascha Wildner UINT64 BaseAddress; 12940d02842fSSascha Wildner UINT32 GlobalIrqBase; 1295896f2e3aSSascha Wildner UINT8 Version; 1296896f2e3aSSascha Wildner UINT8 Reserved2[3]; /* Reserved - must be zero */ 12970d02842fSSascha Wildner 12980d02842fSSascha Wildner } ACPI_MADT_GENERIC_DISTRIBUTOR; 129925ca8c79SSascha Wildner 130025ca8c79SSascha Wildner /* Values for Version field above */ 130125ca8c79SSascha Wildner 130225ca8c79SSascha Wildner enum AcpiMadtGicVersion 130325ca8c79SSascha Wildner { 130425ca8c79SSascha Wildner ACPI_MADT_GIC_VERSION_NONE = 0, 130525ca8c79SSascha Wildner ACPI_MADT_GIC_VERSION_V1 = 1, 130625ca8c79SSascha Wildner ACPI_MADT_GIC_VERSION_V2 = 2, 130725ca8c79SSascha Wildner ACPI_MADT_GIC_VERSION_V3 = 3, 130825ca8c79SSascha Wildner ACPI_MADT_GIC_VERSION_V4 = 4, 130925ca8c79SSascha Wildner ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 131025ca8c79SSascha Wildner }; 13110d02842fSSascha Wildner 13120d02842fSSascha Wildner 1313066b6da2SSascha Wildner /* 13: Generic MSI Frame (ACPI 5.1) */ 1314066b6da2SSascha Wildner 1315066b6da2SSascha Wildner typedef struct acpi_madt_generic_msi_frame 1316066b6da2SSascha Wildner { 1317066b6da2SSascha Wildner ACPI_SUBTABLE_HEADER Header; 1318066b6da2SSascha Wildner UINT16 Reserved; /* Reserved - must be zero */ 1319066b6da2SSascha Wildner UINT32 MsiFrameId; 1320066b6da2SSascha Wildner UINT64 BaseAddress; 1321066b6da2SSascha Wildner UINT32 Flags; 1322066b6da2SSascha Wildner UINT16 SpiCount; 1323066b6da2SSascha Wildner UINT16 SpiBase; 1324066b6da2SSascha Wildner 1325066b6da2SSascha Wildner } ACPI_MADT_GENERIC_MSI_FRAME; 1326066b6da2SSascha Wildner 1327066b6da2SSascha Wildner /* Masks for Flags field above */ 1328066b6da2SSascha Wildner 1329066b6da2SSascha Wildner #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1330066b6da2SSascha Wildner 1331066b6da2SSascha Wildner 1332066b6da2SSascha Wildner /* 14: Generic Redistributor (ACPI 5.1) */ 1333066b6da2SSascha Wildner 1334066b6da2SSascha Wildner typedef struct acpi_madt_generic_redistributor 1335066b6da2SSascha Wildner { 1336066b6da2SSascha Wildner ACPI_SUBTABLE_HEADER Header; 1337066b6da2SSascha Wildner UINT16 Reserved; /* reserved - must be zero */ 1338066b6da2SSascha Wildner UINT64 BaseAddress; 1339066b6da2SSascha Wildner UINT32 Length; 1340066b6da2SSascha Wildner 1341066b6da2SSascha Wildner } ACPI_MADT_GENERIC_REDISTRIBUTOR; 1342066b6da2SSascha Wildner 1343066b6da2SSascha Wildner 1344896f2e3aSSascha Wildner /* 15: Generic Translator (ACPI 6.0) */ 1345896f2e3aSSascha Wildner 1346896f2e3aSSascha Wildner typedef struct acpi_madt_generic_translator 1347896f2e3aSSascha Wildner { 1348896f2e3aSSascha Wildner ACPI_SUBTABLE_HEADER Header; 1349896f2e3aSSascha Wildner UINT16 Reserved; /* reserved - must be zero */ 1350896f2e3aSSascha Wildner UINT32 TranslationId; 1351896f2e3aSSascha Wildner UINT64 BaseAddress; 1352896f2e3aSSascha Wildner UINT32 Reserved2; 1353896f2e3aSSascha Wildner 1354896f2e3aSSascha Wildner } ACPI_MADT_GENERIC_TRANSLATOR; 1355896f2e3aSSascha Wildner 1356896f2e3aSSascha Wildner 13570d02842fSSascha Wildner /* 13580d02842fSSascha Wildner * Common flags fields for MADT subtables 13590d02842fSSascha Wildner */ 13600d02842fSSascha Wildner 1361066b6da2SSascha Wildner /* MADT Local APIC flags */ 13620d02842fSSascha Wildner 13630d02842fSSascha Wildner #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 13640d02842fSSascha Wildner 13650d02842fSSascha Wildner /* MADT MPS INTI flags (IntiFlags) */ 13660d02842fSSascha Wildner 13670d02842fSSascha Wildner #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 13680d02842fSSascha Wildner #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 13690d02842fSSascha Wildner 13700d02842fSSascha Wildner /* Values for MPS INTI flags */ 13710d02842fSSascha Wildner 13720d02842fSSascha Wildner #define ACPI_MADT_POLARITY_CONFORMS 0 13730d02842fSSascha Wildner #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 13740d02842fSSascha Wildner #define ACPI_MADT_POLARITY_RESERVED 2 13750d02842fSSascha Wildner #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 13760d02842fSSascha Wildner 13770d02842fSSascha Wildner #define ACPI_MADT_TRIGGER_CONFORMS (0) 13780d02842fSSascha Wildner #define ACPI_MADT_TRIGGER_EDGE (1<<2) 13790d02842fSSascha Wildner #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 13800d02842fSSascha Wildner #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 13810d02842fSSascha Wildner 13820d02842fSSascha Wildner 13830d02842fSSascha Wildner /******************************************************************************* 13840d02842fSSascha Wildner * 13850d02842fSSascha Wildner * MSCT - Maximum System Characteristics Table (ACPI 4.0) 13860d02842fSSascha Wildner * Version 1 13870d02842fSSascha Wildner * 13880d02842fSSascha Wildner ******************************************************************************/ 13890d02842fSSascha Wildner 13900d02842fSSascha Wildner typedef struct acpi_table_msct 13910d02842fSSascha Wildner { 13920d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 13930d02842fSSascha Wildner UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 13940d02842fSSascha Wildner UINT32 MaxProximityDomains;/* Max number of proximity domains */ 13950d02842fSSascha Wildner UINT32 MaxClockDomains; /* Max number of clock domains */ 13960d02842fSSascha Wildner UINT64 MaxAddress; /* Max physical address in system */ 13970d02842fSSascha Wildner 13980d02842fSSascha Wildner } ACPI_TABLE_MSCT; 13990d02842fSSascha Wildner 14000d02842fSSascha Wildner 14010d02842fSSascha Wildner /* Subtable - Maximum Proximity Domain Information. Version 1 */ 14020d02842fSSascha Wildner 14030d02842fSSascha Wildner typedef struct acpi_msct_proximity 14040d02842fSSascha Wildner { 14050d02842fSSascha Wildner UINT8 Revision; 14060d02842fSSascha Wildner UINT8 Length; 14070d02842fSSascha Wildner UINT32 RangeStart; /* Start of domain range */ 14080d02842fSSascha Wildner UINT32 RangeEnd; /* End of domain range */ 14090d02842fSSascha Wildner UINT32 ProcessorCapacity; 14100d02842fSSascha Wildner UINT64 MemoryCapacity; /* In bytes */ 14110d02842fSSascha Wildner 14120d02842fSSascha Wildner } ACPI_MSCT_PROXIMITY; 14130d02842fSSascha Wildner 14140d02842fSSascha Wildner 14150d02842fSSascha Wildner /******************************************************************************* 14160d02842fSSascha Wildner * 14172ffe9f16SSascha Wildner * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1418896f2e3aSSascha Wildner * Version 1 1419896f2e3aSSascha Wildner * 1420896f2e3aSSascha Wildner ******************************************************************************/ 1421896f2e3aSSascha Wildner 1422896f2e3aSSascha Wildner typedef struct acpi_table_nfit 1423896f2e3aSSascha Wildner { 1424896f2e3aSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1425896f2e3aSSascha Wildner UINT32 Reserved; /* Reserved, must be zero */ 1426896f2e3aSSascha Wildner 1427896f2e3aSSascha Wildner } ACPI_TABLE_NFIT; 1428896f2e3aSSascha Wildner 1429896f2e3aSSascha Wildner /* Subtable header for NFIT */ 1430896f2e3aSSascha Wildner 1431896f2e3aSSascha Wildner typedef struct acpi_nfit_header 1432896f2e3aSSascha Wildner { 1433896f2e3aSSascha Wildner UINT16 Type; 1434896f2e3aSSascha Wildner UINT16 Length; 1435896f2e3aSSascha Wildner 1436896f2e3aSSascha Wildner } ACPI_NFIT_HEADER; 1437896f2e3aSSascha Wildner 1438896f2e3aSSascha Wildner 1439896f2e3aSSascha Wildner /* Values for subtable type in ACPI_NFIT_HEADER */ 1440896f2e3aSSascha Wildner 1441896f2e3aSSascha Wildner enum AcpiNfitType 1442896f2e3aSSascha Wildner { 1443896f2e3aSSascha Wildner ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1444896f2e3aSSascha Wildner ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1445896f2e3aSSascha Wildner ACPI_NFIT_TYPE_INTERLEAVE = 2, 1446896f2e3aSSascha Wildner ACPI_NFIT_TYPE_SMBIOS = 3, 1447896f2e3aSSascha Wildner ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1448896f2e3aSSascha Wildner ACPI_NFIT_TYPE_DATA_REGION = 5, 1449896f2e3aSSascha Wildner ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1450896f2e3aSSascha Wildner ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ 1451896f2e3aSSascha Wildner }; 1452896f2e3aSSascha Wildner 1453896f2e3aSSascha Wildner /* 1454896f2e3aSSascha Wildner * NFIT Subtables 1455896f2e3aSSascha Wildner */ 1456896f2e3aSSascha Wildner 1457896f2e3aSSascha Wildner /* 0: System Physical Address Range Structure */ 1458896f2e3aSSascha Wildner 1459896f2e3aSSascha Wildner typedef struct acpi_nfit_system_address 1460896f2e3aSSascha Wildner { 1461896f2e3aSSascha Wildner ACPI_NFIT_HEADER Header; 1462896f2e3aSSascha Wildner UINT16 RangeIndex; 1463896f2e3aSSascha Wildner UINT16 Flags; 1464896f2e3aSSascha Wildner UINT32 Reserved; /* Reseved, must be zero */ 1465896f2e3aSSascha Wildner UINT32 ProximityDomain; 1466896f2e3aSSascha Wildner UINT8 RangeGuid[16]; 1467896f2e3aSSascha Wildner UINT64 Address; 1468896f2e3aSSascha Wildner UINT64 Length; 1469896f2e3aSSascha Wildner UINT64 MemoryMapping; 1470896f2e3aSSascha Wildner 1471896f2e3aSSascha Wildner } ACPI_NFIT_SYSTEM_ADDRESS; 1472896f2e3aSSascha Wildner 1473896f2e3aSSascha Wildner /* Flags */ 1474896f2e3aSSascha Wildner 1475896f2e3aSSascha Wildner #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1476896f2e3aSSascha Wildner #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1477896f2e3aSSascha Wildner 1478896f2e3aSSascha Wildner /* Range Type GUIDs appear in the include/acuuid.h file */ 1479896f2e3aSSascha Wildner 1480896f2e3aSSascha Wildner 1481896f2e3aSSascha Wildner /* 1: Memory Device to System Address Range Map Structure */ 1482896f2e3aSSascha Wildner 1483896f2e3aSSascha Wildner typedef struct acpi_nfit_memory_map 1484896f2e3aSSascha Wildner { 1485896f2e3aSSascha Wildner ACPI_NFIT_HEADER Header; 1486896f2e3aSSascha Wildner UINT32 DeviceHandle; 1487896f2e3aSSascha Wildner UINT16 PhysicalId; 1488896f2e3aSSascha Wildner UINT16 RegionId; 1489896f2e3aSSascha Wildner UINT16 RangeIndex; 1490896f2e3aSSascha Wildner UINT16 RegionIndex; 1491896f2e3aSSascha Wildner UINT64 RegionSize; 1492896f2e3aSSascha Wildner UINT64 RegionOffset; 1493896f2e3aSSascha Wildner UINT64 Address; 1494896f2e3aSSascha Wildner UINT16 InterleaveIndex; 1495896f2e3aSSascha Wildner UINT16 InterleaveWays; 1496896f2e3aSSascha Wildner UINT16 Flags; 1497896f2e3aSSascha Wildner UINT16 Reserved; /* Reserved, must be zero */ 1498896f2e3aSSascha Wildner 1499896f2e3aSSascha Wildner } ACPI_NFIT_MEMORY_MAP; 1500896f2e3aSSascha Wildner 1501896f2e3aSSascha Wildner /* Flags */ 1502896f2e3aSSascha Wildner 1503896f2e3aSSascha Wildner #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1504896f2e3aSSascha Wildner #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1505896f2e3aSSascha Wildner #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1506c6400d37SSascha Wildner #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1507896f2e3aSSascha Wildner #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1508896f2e3aSSascha Wildner #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 15097c9678bcSSascha Wildner #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1510896f2e3aSSascha Wildner 1511896f2e3aSSascha Wildner 1512896f2e3aSSascha Wildner /* 2: Interleave Structure */ 1513896f2e3aSSascha Wildner 1514896f2e3aSSascha Wildner typedef struct acpi_nfit_interleave 1515896f2e3aSSascha Wildner { 1516896f2e3aSSascha Wildner ACPI_NFIT_HEADER Header; 1517896f2e3aSSascha Wildner UINT16 InterleaveIndex; 1518896f2e3aSSascha Wildner UINT16 Reserved; /* Reserved, must be zero */ 1519896f2e3aSSascha Wildner UINT32 LineCount; 1520896f2e3aSSascha Wildner UINT32 LineSize; 1521896f2e3aSSascha Wildner UINT32 LineOffset[1]; /* Variable length */ 1522896f2e3aSSascha Wildner 1523896f2e3aSSascha Wildner } ACPI_NFIT_INTERLEAVE; 1524896f2e3aSSascha Wildner 1525896f2e3aSSascha Wildner 1526896f2e3aSSascha Wildner /* 3: SMBIOS Management Information Structure */ 1527896f2e3aSSascha Wildner 1528896f2e3aSSascha Wildner typedef struct acpi_nfit_smbios 1529896f2e3aSSascha Wildner { 1530896f2e3aSSascha Wildner ACPI_NFIT_HEADER Header; 1531896f2e3aSSascha Wildner UINT32 Reserved; /* Reserved, must be zero */ 1532896f2e3aSSascha Wildner UINT8 Data[1]; /* Variable length */ 1533896f2e3aSSascha Wildner 1534896f2e3aSSascha Wildner } ACPI_NFIT_SMBIOS; 1535896f2e3aSSascha Wildner 1536896f2e3aSSascha Wildner 1537896f2e3aSSascha Wildner /* 4: NVDIMM Control Region Structure */ 1538896f2e3aSSascha Wildner 1539896f2e3aSSascha Wildner typedef struct acpi_nfit_control_region 1540896f2e3aSSascha Wildner { 1541896f2e3aSSascha Wildner ACPI_NFIT_HEADER Header; 1542896f2e3aSSascha Wildner UINT16 RegionIndex; 1543896f2e3aSSascha Wildner UINT16 VendorId; 1544896f2e3aSSascha Wildner UINT16 DeviceId; 1545896f2e3aSSascha Wildner UINT16 RevisionId; 1546896f2e3aSSascha Wildner UINT16 SubsystemVendorId; 1547896f2e3aSSascha Wildner UINT16 SubsystemDeviceId; 1548896f2e3aSSascha Wildner UINT16 SubsystemRevisionId; 15492ffe9f16SSascha Wildner UINT8 ValidFields; 15502ffe9f16SSascha Wildner UINT8 ManufacturingLocation; 15512ffe9f16SSascha Wildner UINT16 ManufacturingDate; 15522ffe9f16SSascha Wildner UINT8 Reserved[2]; /* Reserved, must be zero */ 1553896f2e3aSSascha Wildner UINT32 SerialNumber; 1554896f2e3aSSascha Wildner UINT16 Code; 1555896f2e3aSSascha Wildner UINT16 Windows; 1556896f2e3aSSascha Wildner UINT64 WindowSize; 1557896f2e3aSSascha Wildner UINT64 CommandOffset; 1558896f2e3aSSascha Wildner UINT64 CommandSize; 1559896f2e3aSSascha Wildner UINT64 StatusOffset; 1560896f2e3aSSascha Wildner UINT64 StatusSize; 1561896f2e3aSSascha Wildner UINT16 Flags; 1562896f2e3aSSascha Wildner UINT8 Reserved1[6]; /* Reserved, must be zero */ 1563896f2e3aSSascha Wildner 1564896f2e3aSSascha Wildner } ACPI_NFIT_CONTROL_REGION; 1565896f2e3aSSascha Wildner 1566896f2e3aSSascha Wildner /* Flags */ 1567896f2e3aSSascha Wildner 1568896f2e3aSSascha Wildner #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1569896f2e3aSSascha Wildner 15702ffe9f16SSascha Wildner /* ValidFields bits */ 15712ffe9f16SSascha Wildner 15722ffe9f16SSascha Wildner #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 15732ffe9f16SSascha Wildner 1574896f2e3aSSascha Wildner 1575896f2e3aSSascha Wildner /* 5: NVDIMM Block Data Window Region Structure */ 1576896f2e3aSSascha Wildner 1577896f2e3aSSascha Wildner typedef struct acpi_nfit_data_region 1578896f2e3aSSascha Wildner { 1579896f2e3aSSascha Wildner ACPI_NFIT_HEADER Header; 1580896f2e3aSSascha Wildner UINT16 RegionIndex; 1581896f2e3aSSascha Wildner UINT16 Windows; 1582896f2e3aSSascha Wildner UINT64 Offset; 1583896f2e3aSSascha Wildner UINT64 Size; 1584896f2e3aSSascha Wildner UINT64 Capacity; 1585896f2e3aSSascha Wildner UINT64 StartAddress; 1586896f2e3aSSascha Wildner 1587896f2e3aSSascha Wildner } ACPI_NFIT_DATA_REGION; 1588896f2e3aSSascha Wildner 1589896f2e3aSSascha Wildner 1590896f2e3aSSascha Wildner /* 6: Flush Hint Address Structure */ 1591896f2e3aSSascha Wildner 1592896f2e3aSSascha Wildner typedef struct acpi_nfit_flush_address 1593896f2e3aSSascha Wildner { 1594896f2e3aSSascha Wildner ACPI_NFIT_HEADER Header; 1595896f2e3aSSascha Wildner UINT32 DeviceHandle; 1596896f2e3aSSascha Wildner UINT16 HintCount; 1597896f2e3aSSascha Wildner UINT8 Reserved[6]; /* Reserved, must be zero */ 1598896f2e3aSSascha Wildner UINT64 HintAddress[1]; /* Variable length */ 1599896f2e3aSSascha Wildner 1600896f2e3aSSascha Wildner } ACPI_NFIT_FLUSH_ADDRESS; 1601896f2e3aSSascha Wildner 1602896f2e3aSSascha Wildner 1603896f2e3aSSascha Wildner /******************************************************************************* 1604896f2e3aSSascha Wildner * 1605*1093ca81SSascha Wildner * PPTT - Processor Properties Topology Table (ACPI 6.2) 1606*1093ca81SSascha Wildner * Version 1 1607*1093ca81SSascha Wildner * 1608*1093ca81SSascha Wildner ******************************************************************************/ 1609*1093ca81SSascha Wildner 1610*1093ca81SSascha Wildner typedef struct acpi_table_pptt 1611*1093ca81SSascha Wildner { 1612*1093ca81SSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1613*1093ca81SSascha Wildner 1614*1093ca81SSascha Wildner } ACPI_TABLE_PPTT; 1615*1093ca81SSascha Wildner 1616*1093ca81SSascha Wildner /* Values for Type field above */ 1617*1093ca81SSascha Wildner 1618*1093ca81SSascha Wildner enum AcpiPpttType 1619*1093ca81SSascha Wildner { 1620*1093ca81SSascha Wildner ACPI_PPTT_TYPE_PROCESSOR = 0, 1621*1093ca81SSascha Wildner ACPI_PPTT_TYPE_CACHE = 1, 1622*1093ca81SSascha Wildner ACPI_PPTT_TYPE_ID = 2, 1623*1093ca81SSascha Wildner ACPI_PPTT_TYPE_RESERVED = 3 1624*1093ca81SSascha Wildner }; 1625*1093ca81SSascha Wildner 1626*1093ca81SSascha Wildner 1627*1093ca81SSascha Wildner /* 0: Processor Hierarchy Node Structure */ 1628*1093ca81SSascha Wildner 1629*1093ca81SSascha Wildner typedef struct acpi_pptt_processor { 1630*1093ca81SSascha Wildner ACPI_SUBTABLE_HEADER Header; 1631*1093ca81SSascha Wildner UINT16 Reserved; 1632*1093ca81SSascha Wildner UINT32 Flags; 1633*1093ca81SSascha Wildner UINT32 Parent; 1634*1093ca81SSascha Wildner UINT32 AcpiProcessorId; 1635*1093ca81SSascha Wildner UINT32 NumberOfPrivResources; 1636*1093ca81SSascha Wildner 1637*1093ca81SSascha Wildner } ACPI_PPTT_PROCESSOR; 1638*1093ca81SSascha Wildner 1639*1093ca81SSascha Wildner /* Flags */ 1640*1093ca81SSascha Wildner 1641*1093ca81SSascha Wildner #define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ 1642*1093ca81SSascha Wildner #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ 1643*1093ca81SSascha Wildner 1644*1093ca81SSascha Wildner 1645*1093ca81SSascha Wildner /* 1: Cache Type Structure */ 1646*1093ca81SSascha Wildner 1647*1093ca81SSascha Wildner typedef struct acpi_pptt_cache { 1648*1093ca81SSascha Wildner ACPI_SUBTABLE_HEADER Header; 1649*1093ca81SSascha Wildner UINT16 Reserved; 1650*1093ca81SSascha Wildner UINT32 Flags; 1651*1093ca81SSascha Wildner UINT32 NextLevelOfCache; 1652*1093ca81SSascha Wildner UINT32 Size; 1653*1093ca81SSascha Wildner UINT32 NumberOfSets; 1654*1093ca81SSascha Wildner UINT8 Associativity; 1655*1093ca81SSascha Wildner UINT8 Attributes; 1656*1093ca81SSascha Wildner UINT16 LineSize; 1657*1093ca81SSascha Wildner 1658*1093ca81SSascha Wildner } ACPI_PPTT_CACHE; 1659*1093ca81SSascha Wildner 1660*1093ca81SSascha Wildner /* Flags */ 1661*1093ca81SSascha Wildner 1662*1093ca81SSascha Wildner #define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 1663*1093ca81SSascha Wildner #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 1664*1093ca81SSascha Wildner #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 1665*1093ca81SSascha Wildner #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 1666*1093ca81SSascha Wildner #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 1667*1093ca81SSascha Wildner #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 1668*1093ca81SSascha Wildner #define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 1669*1093ca81SSascha Wildner 1670*1093ca81SSascha Wildner /* Masks for Attributes */ 1671*1093ca81SSascha Wildner 1672*1093ca81SSascha Wildner #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 1673*1093ca81SSascha Wildner #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 1674*1093ca81SSascha Wildner #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 1675*1093ca81SSascha Wildner 1676*1093ca81SSascha Wildner 1677*1093ca81SSascha Wildner /* 2: ID Structure */ 1678*1093ca81SSascha Wildner 1679*1093ca81SSascha Wildner typedef struct acpi_pptt_id { 1680*1093ca81SSascha Wildner ACPI_SUBTABLE_HEADER Header; 1681*1093ca81SSascha Wildner UINT16 Reserved; 1682*1093ca81SSascha Wildner UINT32 VendorId; 1683*1093ca81SSascha Wildner UINT64 Level1Id; 1684*1093ca81SSascha Wildner UINT64 Level2Id; 1685*1093ca81SSascha Wildner UINT16 MajorRev; 1686*1093ca81SSascha Wildner UINT16 MinorRev; 1687*1093ca81SSascha Wildner UINT16 SpinRev; 1688*1093ca81SSascha Wildner 1689*1093ca81SSascha Wildner } ACPI_PPTT_ID; 1690*1093ca81SSascha Wildner 1691*1093ca81SSascha Wildner 1692*1093ca81SSascha Wildner /******************************************************************************* 1693*1093ca81SSascha Wildner * 16940d02842fSSascha Wildner * SBST - Smart Battery Specification Table 16950d02842fSSascha Wildner * Version 1 16960d02842fSSascha Wildner * 16970d02842fSSascha Wildner ******************************************************************************/ 16980d02842fSSascha Wildner 16990d02842fSSascha Wildner typedef struct acpi_table_sbst 17000d02842fSSascha Wildner { 17010d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 17020d02842fSSascha Wildner UINT32 WarningLevel; 17030d02842fSSascha Wildner UINT32 LowLevel; 17040d02842fSSascha Wildner UINT32 CriticalLevel; 17050d02842fSSascha Wildner 17060d02842fSSascha Wildner } ACPI_TABLE_SBST; 17070d02842fSSascha Wildner 17080d02842fSSascha Wildner 17090d02842fSSascha Wildner /******************************************************************************* 17100d02842fSSascha Wildner * 17110d02842fSSascha Wildner * SLIT - System Locality Distance Information Table 17120d02842fSSascha Wildner * Version 1 17130d02842fSSascha Wildner * 17140d02842fSSascha Wildner ******************************************************************************/ 17150d02842fSSascha Wildner 17160d02842fSSascha Wildner typedef struct acpi_table_slit 17170d02842fSSascha Wildner { 17180d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 17190d02842fSSascha Wildner UINT64 LocalityCount; 17200d02842fSSascha Wildner UINT8 Entry[1]; /* Real size = localities^2 */ 17210d02842fSSascha Wildner 17220d02842fSSascha Wildner } ACPI_TABLE_SLIT; 17230d02842fSSascha Wildner 17240d02842fSSascha Wildner 17250d02842fSSascha Wildner /******************************************************************************* 17260d02842fSSascha Wildner * 17270d02842fSSascha Wildner * SRAT - System Resource Affinity Table 17280d02842fSSascha Wildner * Version 3 17290d02842fSSascha Wildner * 17300d02842fSSascha Wildner ******************************************************************************/ 17310d02842fSSascha Wildner 17320d02842fSSascha Wildner typedef struct acpi_table_srat 17330d02842fSSascha Wildner { 17340d02842fSSascha Wildner ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 17350d02842fSSascha Wildner UINT32 TableRevision; /* Must be value '1' */ 17360d02842fSSascha Wildner UINT64 Reserved; /* Reserved, must be zero */ 17370d02842fSSascha Wildner 17380d02842fSSascha Wildner } ACPI_TABLE_SRAT; 17390d02842fSSascha Wildner 17400d02842fSSascha Wildner /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 17410d02842fSSascha Wildner 17420d02842fSSascha Wildner enum AcpiSratType 17430d02842fSSascha Wildner { 17440d02842fSSascha Wildner ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 17450d02842fSSascha Wildner ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 17460d02842fSSascha Wildner ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 174779eafdd7SSascha Wildner ACPI_SRAT_TYPE_GICC_AFFINITY = 3, 1748*1093ca81SSascha Wildner ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ 1749*1093ca81SSascha Wildner ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 17500d02842fSSascha Wildner }; 17510d02842fSSascha Wildner 17520d02842fSSascha Wildner /* 17539e1c0880SSascha Wildner * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 17540d02842fSSascha Wildner */ 17550d02842fSSascha Wildner 17560d02842fSSascha Wildner /* 0: Processor Local APIC/SAPIC Affinity */ 17570d02842fSSascha Wildner 17580d02842fSSascha Wildner typedef struct acpi_srat_cpu_affinity 17590d02842fSSascha Wildner { 17600d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 17610d02842fSSascha Wildner UINT8 ProximityDomainLo; 17620d02842fSSascha Wildner UINT8 ApicId; 17630d02842fSSascha Wildner UINT32 Flags; 17640d02842fSSascha Wildner UINT8 LocalSapicEid; 17650d02842fSSascha Wildner UINT8 ProximityDomainHi[3]; 176679eafdd7SSascha Wildner UINT32 ClockDomain; 17670d02842fSSascha Wildner 17680d02842fSSascha Wildner } ACPI_SRAT_CPU_AFFINITY; 17690d02842fSSascha Wildner 17700d02842fSSascha Wildner /* Flags */ 17710d02842fSSascha Wildner 17720d02842fSSascha Wildner #define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 17730d02842fSSascha Wildner 17740d02842fSSascha Wildner 17750d02842fSSascha Wildner /* 1: Memory Affinity */ 17760d02842fSSascha Wildner 17770d02842fSSascha Wildner typedef struct acpi_srat_mem_affinity 17780d02842fSSascha Wildner { 17790d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 17800d02842fSSascha Wildner UINT32 ProximityDomain; 17810d02842fSSascha Wildner UINT16 Reserved; /* Reserved, must be zero */ 17820d02842fSSascha Wildner UINT64 BaseAddress; 17830d02842fSSascha Wildner UINT64 Length; 17840d02842fSSascha Wildner UINT32 Reserved1; 17850d02842fSSascha Wildner UINT32 Flags; 17860d02842fSSascha Wildner UINT64 Reserved2; /* Reserved, must be zero */ 17870d02842fSSascha Wildner 17880d02842fSSascha Wildner } ACPI_SRAT_MEM_AFFINITY; 17890d02842fSSascha Wildner 17900d02842fSSascha Wildner /* Flags */ 17910d02842fSSascha Wildner 17920d02842fSSascha Wildner #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 17930d02842fSSascha Wildner #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 17940d02842fSSascha Wildner #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 17950d02842fSSascha Wildner 17960d02842fSSascha Wildner 17970d02842fSSascha Wildner /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 17980d02842fSSascha Wildner 17990d02842fSSascha Wildner typedef struct acpi_srat_x2apic_cpu_affinity 18000d02842fSSascha Wildner { 18010d02842fSSascha Wildner ACPI_SUBTABLE_HEADER Header; 18020d02842fSSascha Wildner UINT16 Reserved; /* Reserved, must be zero */ 18030d02842fSSascha Wildner UINT32 ProximityDomain; 18040d02842fSSascha Wildner UINT32 ApicId; 18050d02842fSSascha Wildner UINT32 Flags; 18060d02842fSSascha Wildner UINT32 ClockDomain; 18070d02842fSSascha Wildner UINT32 Reserved2; 18080d02842fSSascha Wildner 18090d02842fSSascha Wildner } ACPI_SRAT_X2APIC_CPU_AFFINITY; 18100d02842fSSascha Wildner 18110d02842fSSascha Wildner /* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 18120d02842fSSascha Wildner 18130d02842fSSascha Wildner #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 18140d02842fSSascha Wildner 18150d02842fSSascha Wildner 181679eafdd7SSascha Wildner /* 3: GICC Affinity (ACPI 5.1) */ 181779eafdd7SSascha Wildner 181879eafdd7SSascha Wildner typedef struct acpi_srat_gicc_affinity 181979eafdd7SSascha Wildner { 182079eafdd7SSascha Wildner ACPI_SUBTABLE_HEADER Header; 182179eafdd7SSascha Wildner UINT32 ProximityDomain; 182279eafdd7SSascha Wildner UINT32 AcpiProcessorUid; 182379eafdd7SSascha Wildner UINT32 Flags; 182479eafdd7SSascha Wildner UINT32 ClockDomain; 182579eafdd7SSascha Wildner 182679eafdd7SSascha Wildner } ACPI_SRAT_GICC_AFFINITY; 182779eafdd7SSascha Wildner 182879eafdd7SSascha Wildner /* Flags for ACPI_SRAT_GICC_AFFINITY */ 182979eafdd7SSascha Wildner 183079eafdd7SSascha Wildner #define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ 183179eafdd7SSascha Wildner 1832896f2e3aSSascha Wildner 1833*1093ca81SSascha Wildner /* 4: GCC ITS Affinity (ACPI 6.2) */ 1834*1093ca81SSascha Wildner 1835*1093ca81SSascha Wildner typedef struct acpi_srat_gic_its_affinity 1836*1093ca81SSascha Wildner { 1837*1093ca81SSascha Wildner ACPI_SUBTABLE_HEADER Header; 1838*1093ca81SSascha Wildner UINT32 ProximityDomain; 1839*1093ca81SSascha Wildner UINT16 Reserved; 1840*1093ca81SSascha Wildner UINT32 ItsId; 1841*1093ca81SSascha Wildner 1842*1093ca81SSascha Wildner } ACPI_SRAT_GIC_ITS_AFFINITY; 1843*1093ca81SSascha Wildner 1844*1093ca81SSascha Wildner 1845d4972a9cSSascha Wildner /* Reset to default packing */ 1846d4972a9cSSascha Wildner 1847d4972a9cSSascha Wildner #pragma pack() 18480d02842fSSascha Wildner 18490d02842fSSascha Wildner #endif /* __ACTBL1_H__ */ 1850