17c478bd9Sstevel@tonic-gate /****************************************************************************** 27c478bd9Sstevel@tonic-gate * 327f7c583Smyers * Name: actbl1.h - Additional ACPI table definitions 47c478bd9Sstevel@tonic-gate * 57c478bd9Sstevel@tonic-gate *****************************************************************************/ 67c478bd9Sstevel@tonic-gate 7*35786f68SRobert Mustacchi /****************************************************************************** 8*35786f68SRobert Mustacchi * 9*35786f68SRobert Mustacchi * 1. Copyright Notice 10*35786f68SRobert Mustacchi * 11*35786f68SRobert Mustacchi * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. 127c478bd9Sstevel@tonic-gate * All rights reserved. 137c478bd9Sstevel@tonic-gate * 14*35786f68SRobert Mustacchi * 2. License 15*35786f68SRobert Mustacchi * 16*35786f68SRobert Mustacchi * 2.1. This is your license from Intel Corp. under its intellectual property 17*35786f68SRobert Mustacchi * rights. You may have additional license terms from the party that provided 18*35786f68SRobert Mustacchi * you this software, covering your right to use that party's intellectual 19*35786f68SRobert Mustacchi * property rights. 20*35786f68SRobert Mustacchi * 21*35786f68SRobert Mustacchi * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 22*35786f68SRobert Mustacchi * copy of the source code appearing in this file ("Covered Code") an 23*35786f68SRobert Mustacchi * irrevocable, perpetual, worldwide license under Intel's copyrights in the 24*35786f68SRobert Mustacchi * base code distributed originally by Intel ("Original Intel Code") to copy, 25*35786f68SRobert Mustacchi * make derivatives, distribute, use and display any portion of the Covered 26*35786f68SRobert Mustacchi * Code in any form, with the right to sublicense such rights; and 27*35786f68SRobert Mustacchi * 28*35786f68SRobert Mustacchi * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 29*35786f68SRobert Mustacchi * license (with the right to sublicense), under only those claims of Intel 30*35786f68SRobert Mustacchi * patents that are infringed by the Original Intel Code, to make, use, sell, 31*35786f68SRobert Mustacchi * offer to sell, and import the Covered Code and derivative works thereof 32*35786f68SRobert Mustacchi * solely to the minimum extent necessary to exercise the above copyright 33*35786f68SRobert Mustacchi * license, and in no event shall the patent license extend to any additions 34*35786f68SRobert Mustacchi * to or modifications of the Original Intel Code. No other license or right 35*35786f68SRobert Mustacchi * is granted directly or by implication, estoppel or otherwise; 36*35786f68SRobert Mustacchi * 37*35786f68SRobert Mustacchi * The above copyright and patent license is granted only if the following 38*35786f68SRobert Mustacchi * conditions are met: 39*35786f68SRobert Mustacchi * 40*35786f68SRobert Mustacchi * 3. Conditions 41*35786f68SRobert Mustacchi * 42*35786f68SRobert Mustacchi * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43*35786f68SRobert Mustacchi * Redistribution of source code of any substantial portion of the Covered 44*35786f68SRobert Mustacchi * Code or modification with rights to further distribute source must include 45*35786f68SRobert Mustacchi * the above Copyright Notice, the above License, this list of Conditions, 46*35786f68SRobert Mustacchi * and the following Disclaimer and Export Compliance provision. In addition, 47*35786f68SRobert Mustacchi * Licensee must cause all Covered Code to which Licensee contributes to 48*35786f68SRobert Mustacchi * contain a file documenting the changes Licensee made to create that Covered 49*35786f68SRobert Mustacchi * Code and the date of any change. Licensee must include in that file the 50*35786f68SRobert Mustacchi * documentation of any changes made by any predecessor Licensee. Licensee 51*35786f68SRobert Mustacchi * must include a prominent statement that the modification is derived, 52*35786f68SRobert Mustacchi * directly or indirectly, from Original Intel Code. 53*35786f68SRobert Mustacchi * 54*35786f68SRobert Mustacchi * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 55*35786f68SRobert Mustacchi * Redistribution of source code of any substantial portion of the Covered 56*35786f68SRobert Mustacchi * Code or modification without rights to further distribute source must 57*35786f68SRobert Mustacchi * include the following Disclaimer and Export Compliance provision in the 58*35786f68SRobert Mustacchi * documentation and/or other materials provided with distribution. In 59*35786f68SRobert Mustacchi * addition, Licensee may not authorize further sublicense of source of any 60*35786f68SRobert Mustacchi * portion of the Covered Code, and must include terms to the effect that the 61*35786f68SRobert Mustacchi * license from Licensee to its licensee is limited to the intellectual 62*35786f68SRobert Mustacchi * property embodied in the software Licensee provides to its licensee, and 63*35786f68SRobert Mustacchi * not to intellectual property embodied in modifications its licensee may 64*35786f68SRobert Mustacchi * make. 65*35786f68SRobert Mustacchi * 66*35786f68SRobert Mustacchi * 3.3. Redistribution of Executable. Redistribution in executable form of any 67*35786f68SRobert Mustacchi * substantial portion of the Covered Code or modification must reproduce the 68*35786f68SRobert Mustacchi * above Copyright Notice, and the following Disclaimer and Export Compliance 69*35786f68SRobert Mustacchi * provision in the documentation and/or other materials provided with the 70*35786f68SRobert Mustacchi * distribution. 71*35786f68SRobert Mustacchi * 72*35786f68SRobert Mustacchi * 3.4. Intel retains all right, title, and interest in and to the Original 73*35786f68SRobert Mustacchi * Intel Code. 74*35786f68SRobert Mustacchi * 75*35786f68SRobert Mustacchi * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76*35786f68SRobert Mustacchi * Intel shall be used in advertising or otherwise to promote the sale, use or 77*35786f68SRobert Mustacchi * other dealings in products derived from or relating to the Covered Code 78*35786f68SRobert Mustacchi * without prior written authorization from Intel. 79*35786f68SRobert Mustacchi * 80*35786f68SRobert Mustacchi * 4. Disclaimer and Export Compliance 81*35786f68SRobert Mustacchi * 82*35786f68SRobert Mustacchi * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83*35786f68SRobert Mustacchi * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84*35786f68SRobert Mustacchi * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85*35786f68SRobert Mustacchi * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86*35786f68SRobert Mustacchi * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 87*35786f68SRobert Mustacchi * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 88*35786f68SRobert Mustacchi * PARTICULAR PURPOSE. 89*35786f68SRobert Mustacchi * 90*35786f68SRobert Mustacchi * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 91*35786f68SRobert Mustacchi * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 92*35786f68SRobert Mustacchi * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93*35786f68SRobert Mustacchi * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 94*35786f68SRobert Mustacchi * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95*35786f68SRobert Mustacchi * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 96*35786f68SRobert Mustacchi * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 97*35786f68SRobert Mustacchi * LIMITED REMEDY. 98*35786f68SRobert Mustacchi * 99*35786f68SRobert Mustacchi * 4.3. Licensee shall not export, either directly or indirectly, any of this 100*35786f68SRobert Mustacchi * software or system incorporating such software without first obtaining any 101*35786f68SRobert Mustacchi * required license or other approval from the U. S. Department of Commerce or 102*35786f68SRobert Mustacchi * any other agency or department of the United States Government. In the 103*35786f68SRobert Mustacchi * event Licensee exports any such software from the United States or 104*35786f68SRobert Mustacchi * re-exports any such software from a foreign destination, Licensee shall 105*35786f68SRobert Mustacchi * ensure that the distribution and export/re-export of the software is in 106*35786f68SRobert Mustacchi * compliance with all laws, regulations, orders, or other restrictions of the 107*35786f68SRobert Mustacchi * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108*35786f68SRobert Mustacchi * any of its subsidiaries will export/re-export any technical data, process, 109*35786f68SRobert Mustacchi * software, or service, directly or indirectly, to any country for which the 110*35786f68SRobert Mustacchi * United States government or any agency thereof requires an export license, 111*35786f68SRobert Mustacchi * other governmental approval, or letter of assurance, without first obtaining 112*35786f68SRobert Mustacchi * such license, approval or letter. 113*35786f68SRobert Mustacchi * 114*35786f68SRobert Mustacchi ***************************************************************************** 115*35786f68SRobert Mustacchi * 116*35786f68SRobert Mustacchi * Alternatively, you may choose to be licensed under the terms of the 117*35786f68SRobert Mustacchi * following license: 118*35786f68SRobert Mustacchi * 11926f3cdf0SGordon Ross * Redistribution and use in source and binary forms, with or without 12026f3cdf0SGordon Ross * modification, are permitted provided that the following conditions 12126f3cdf0SGordon Ross * are met: 12226f3cdf0SGordon Ross * 1. Redistributions of source code must retain the above copyright 12326f3cdf0SGordon Ross * notice, this list of conditions, and the following disclaimer, 12426f3cdf0SGordon Ross * without modification. 12526f3cdf0SGordon Ross * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12626f3cdf0SGordon Ross * substantially similar to the "NO WARRANTY" disclaimer below 12726f3cdf0SGordon Ross * ("Disclaimer") and any redistribution must be conditioned upon 12826f3cdf0SGordon Ross * including a substantially similar Disclaimer requirement for further 12926f3cdf0SGordon Ross * binary redistribution. 13026f3cdf0SGordon Ross * 3. Neither the names of the above-listed copyright holders nor the names 13126f3cdf0SGordon Ross * of any contributors may be used to endorse or promote products derived 13226f3cdf0SGordon Ross * from this software without specific prior written permission. 1337c478bd9Sstevel@tonic-gate * 134*35786f68SRobert Mustacchi * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 135*35786f68SRobert Mustacchi * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 136*35786f68SRobert Mustacchi * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 137*35786f68SRobert Mustacchi * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 138*35786f68SRobert Mustacchi * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 139*35786f68SRobert Mustacchi * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 140*35786f68SRobert Mustacchi * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 141*35786f68SRobert Mustacchi * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 142*35786f68SRobert Mustacchi * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 143*35786f68SRobert Mustacchi * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 144*35786f68SRobert Mustacchi * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 145*35786f68SRobert Mustacchi * 146*35786f68SRobert Mustacchi * Alternatively, you may choose to be licensed under the terms of the 14726f3cdf0SGordon Ross * GNU General Public License ("GPL") version 2 as published by the Free 14826f3cdf0SGordon Ross * Software Foundation. 1497c478bd9Sstevel@tonic-gate * 150*35786f68SRobert Mustacchi *****************************************************************************/ 1517c478bd9Sstevel@tonic-gate 1527c478bd9Sstevel@tonic-gate #ifndef __ACTBL1_H__ 1537c478bd9Sstevel@tonic-gate #define __ACTBL1_H__ 1547c478bd9Sstevel@tonic-gate 15527f7c583Smyers 15627f7c583Smyers /******************************************************************************* 15727f7c583Smyers * 158*35786f68SRobert Mustacchi * Additional ACPI Tables 15927f7c583Smyers * 16027f7c583Smyers * These tables are not consumed directly by the ACPICA subsystem, but are 16127f7c583Smyers * included here to support device drivers and the AML disassembler. 16227f7c583Smyers * 16327f7c583Smyers ******************************************************************************/ 16427f7c583Smyers 16527f7c583Smyers 16627f7c583Smyers /* 16757190917SDana Myers * Values for description table header signatures for tables defined in this 16857190917SDana Myers * file. Useful because they make it more difficult to inadvertently type in 16957190917SDana Myers * the wrong signature. 17027f7c583Smyers */ 171*35786f68SRobert Mustacchi #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ 172db2bae30SDana Myers #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 173*35786f68SRobert Mustacchi #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 174*35786f68SRobert Mustacchi #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ 17527f7c583Smyers #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 176*35786f68SRobert Mustacchi #define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ 177*35786f68SRobert Mustacchi #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ 178*35786f68SRobert Mustacchi #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ 179*35786f68SRobert Mustacchi #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ 180*35786f68SRobert Mustacchi #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 18127f7c583Smyers #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 182db2bae30SDana Myers #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 183db2bae30SDana Myers #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 184*35786f68SRobert Mustacchi #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 185*35786f68SRobert Mustacchi #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 186db2bae30SDana Myers #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 187*35786f68SRobert Mustacchi #define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ 188*35786f68SRobert Mustacchi #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ 189*35786f68SRobert Mustacchi #define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ 19027f7c583Smyers 191*35786f68SRobert Mustacchi #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 192*35786f68SRobert Mustacchi #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 193*35786f68SRobert Mustacchi 194*35786f68SRobert Mustacchi 195*35786f68SRobert Mustacchi /* Reserved table signatures */ 196*35786f68SRobert Mustacchi 197*35786f68SRobert Mustacchi #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 198*35786f68SRobert Mustacchi #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 199*35786f68SRobert Mustacchi 200*35786f68SRobert Mustacchi /* 201*35786f68SRobert Mustacchi * These tables have been seen in the field, but no definition has been found 202*35786f68SRobert Mustacchi */ 203*35786f68SRobert Mustacchi #ifdef ACPI_UNDEFINED_TABLES 204*35786f68SRobert Mustacchi #define ACPI_SIG_ATKG "ATKG" 205*35786f68SRobert Mustacchi #define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ 206*35786f68SRobert Mustacchi #define ACPI_SIG_IEIT "IEIT" 207*35786f68SRobert Mustacchi #endif 20827f7c583Smyers 20927f7c583Smyers /* 21027f7c583Smyers * All tables must be byte-packed to match the ACPI specification, since 21127f7c583Smyers * the tables are provided by the system BIOS. 21227f7c583Smyers */ 2137c478bd9Sstevel@tonic-gate #pragma pack(1) 2147c478bd9Sstevel@tonic-gate 2157c478bd9Sstevel@tonic-gate /* 2167b1019a6SJerry Jelinek * Note: C bitfields are not used for this reason: 2177b1019a6SJerry Jelinek * 2187b1019a6SJerry Jelinek * "Bitfields are great and easy to read, but unfortunately the C language 2197b1019a6SJerry Jelinek * does not specify the layout of bitfields in memory, which means they are 2207b1019a6SJerry Jelinek * essentially useless for dealing with packed data in on-disk formats or 2217b1019a6SJerry Jelinek * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 2227b1019a6SJerry Jelinek * this decision was a design error in C. Ritchie could have picked an order 2237b1019a6SJerry Jelinek * and stuck with it." Norman Ramsey. 2247b1019a6SJerry Jelinek * See http://stackoverflow.com/a/1053662/41661 2257c478bd9Sstevel@tonic-gate */ 22627f7c583Smyers 22727f7c583Smyers 22857190917SDana Myers /******************************************************************************* 22957190917SDana Myers * 23057190917SDana Myers * Common subtable headers 23157190917SDana Myers * 23257190917SDana Myers ******************************************************************************/ 23357190917SDana Myers 23457190917SDana Myers /* Generic subtable header (used in MADT, SRAT, etc.) */ 235db2bae30SDana Myers 236db2bae30SDana Myers typedef struct acpi_subtable_header 237db2bae30SDana Myers { 238db2bae30SDana Myers UINT8 Type; 239db2bae30SDana Myers UINT8 Length; 240db2bae30SDana Myers 241db2bae30SDana Myers } ACPI_SUBTABLE_HEADER; 242db2bae30SDana Myers 243db2bae30SDana Myers 24457190917SDana Myers /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 245db2bae30SDana Myers 246db2bae30SDana Myers typedef struct acpi_whea_header 247db2bae30SDana Myers { 248db2bae30SDana Myers UINT8 Action; 249db2bae30SDana Myers UINT8 Instruction; 250db2bae30SDana Myers UINT8 Flags; 251db2bae30SDana Myers UINT8 Reserved; 252db2bae30SDana Myers ACPI_GENERIC_ADDRESS RegisterRegion; 253db2bae30SDana Myers UINT64 Value; /* Value used with Read/Write register */ 254db2bae30SDana Myers UINT64 Mask; /* Bitmask required for this register instruction */ 255db2bae30SDana Myers 256db2bae30SDana Myers } ACPI_WHEA_HEADER; 257db2bae30SDana Myers 258db2bae30SDana Myers 25927f7c583Smyers /******************************************************************************* 26027f7c583Smyers * 261*35786f68SRobert Mustacchi * ASF - Alert Standard Format table (Signature "ASF!") 262*35786f68SRobert Mustacchi * Revision 0x10 263*35786f68SRobert Mustacchi * 264*35786f68SRobert Mustacchi * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 265*35786f68SRobert Mustacchi * 266*35786f68SRobert Mustacchi ******************************************************************************/ 267*35786f68SRobert Mustacchi 268*35786f68SRobert Mustacchi typedef struct acpi_table_asf 269*35786f68SRobert Mustacchi { 270*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 271*35786f68SRobert Mustacchi 272*35786f68SRobert Mustacchi } ACPI_TABLE_ASF; 273*35786f68SRobert Mustacchi 274*35786f68SRobert Mustacchi 275*35786f68SRobert Mustacchi /* ASF subtable header */ 276*35786f68SRobert Mustacchi 277*35786f68SRobert Mustacchi typedef struct acpi_asf_header 278*35786f68SRobert Mustacchi { 279*35786f68SRobert Mustacchi UINT8 Type; 280*35786f68SRobert Mustacchi UINT8 Reserved; 281*35786f68SRobert Mustacchi UINT16 Length; 282*35786f68SRobert Mustacchi 283*35786f68SRobert Mustacchi } ACPI_ASF_HEADER; 284*35786f68SRobert Mustacchi 285*35786f68SRobert Mustacchi 286*35786f68SRobert Mustacchi /* Values for Type field above */ 287*35786f68SRobert Mustacchi 288*35786f68SRobert Mustacchi enum AcpiAsfType 289*35786f68SRobert Mustacchi { 290*35786f68SRobert Mustacchi ACPI_ASF_TYPE_INFO = 0, 291*35786f68SRobert Mustacchi ACPI_ASF_TYPE_ALERT = 1, 292*35786f68SRobert Mustacchi ACPI_ASF_TYPE_CONTROL = 2, 293*35786f68SRobert Mustacchi ACPI_ASF_TYPE_BOOT = 3, 294*35786f68SRobert Mustacchi ACPI_ASF_TYPE_ADDRESS = 4, 295*35786f68SRobert Mustacchi ACPI_ASF_TYPE_RESERVED = 5 296*35786f68SRobert Mustacchi }; 297*35786f68SRobert Mustacchi 298*35786f68SRobert Mustacchi /* 299*35786f68SRobert Mustacchi * ASF subtables 300*35786f68SRobert Mustacchi */ 301*35786f68SRobert Mustacchi 302*35786f68SRobert Mustacchi /* 0: ASF Information */ 303*35786f68SRobert Mustacchi 304*35786f68SRobert Mustacchi typedef struct acpi_asf_info 305*35786f68SRobert Mustacchi { 306*35786f68SRobert Mustacchi ACPI_ASF_HEADER Header; 307*35786f68SRobert Mustacchi UINT8 MinResetValue; 308*35786f68SRobert Mustacchi UINT8 MinPollInterval; 309*35786f68SRobert Mustacchi UINT16 SystemId; 310*35786f68SRobert Mustacchi UINT32 MfgId; 311*35786f68SRobert Mustacchi UINT8 Flags; 312*35786f68SRobert Mustacchi UINT8 Reserved2[3]; 313*35786f68SRobert Mustacchi 314*35786f68SRobert Mustacchi } ACPI_ASF_INFO; 315*35786f68SRobert Mustacchi 316*35786f68SRobert Mustacchi /* Masks for Flags field above */ 317*35786f68SRobert Mustacchi 318*35786f68SRobert Mustacchi #define ACPI_ASF_SMBUS_PROTOCOLS (1) 319*35786f68SRobert Mustacchi 320*35786f68SRobert Mustacchi 321*35786f68SRobert Mustacchi /* 1: ASF Alerts */ 322*35786f68SRobert Mustacchi 323*35786f68SRobert Mustacchi typedef struct acpi_asf_alert 324*35786f68SRobert Mustacchi { 325*35786f68SRobert Mustacchi ACPI_ASF_HEADER Header; 326*35786f68SRobert Mustacchi UINT8 AssertMask; 327*35786f68SRobert Mustacchi UINT8 DeassertMask; 328*35786f68SRobert Mustacchi UINT8 Alerts; 329*35786f68SRobert Mustacchi UINT8 DataLength; 330*35786f68SRobert Mustacchi 331*35786f68SRobert Mustacchi } ACPI_ASF_ALERT; 332*35786f68SRobert Mustacchi 333*35786f68SRobert Mustacchi typedef struct acpi_asf_alert_data 334*35786f68SRobert Mustacchi { 335*35786f68SRobert Mustacchi UINT8 Address; 336*35786f68SRobert Mustacchi UINT8 Command; 337*35786f68SRobert Mustacchi UINT8 Mask; 338*35786f68SRobert Mustacchi UINT8 Value; 339*35786f68SRobert Mustacchi UINT8 SensorType; 340*35786f68SRobert Mustacchi UINT8 Type; 341*35786f68SRobert Mustacchi UINT8 Offset; 342*35786f68SRobert Mustacchi UINT8 SourceType; 343*35786f68SRobert Mustacchi UINT8 Severity; 344*35786f68SRobert Mustacchi UINT8 SensorNumber; 345*35786f68SRobert Mustacchi UINT8 Entity; 346*35786f68SRobert Mustacchi UINT8 Instance; 347*35786f68SRobert Mustacchi 348*35786f68SRobert Mustacchi } ACPI_ASF_ALERT_DATA; 349*35786f68SRobert Mustacchi 350*35786f68SRobert Mustacchi 351*35786f68SRobert Mustacchi /* 2: ASF Remote Control */ 352*35786f68SRobert Mustacchi 353*35786f68SRobert Mustacchi typedef struct acpi_asf_remote 354*35786f68SRobert Mustacchi { 355*35786f68SRobert Mustacchi ACPI_ASF_HEADER Header; 356*35786f68SRobert Mustacchi UINT8 Controls; 357*35786f68SRobert Mustacchi UINT8 DataLength; 358*35786f68SRobert Mustacchi UINT16 Reserved2; 359*35786f68SRobert Mustacchi 360*35786f68SRobert Mustacchi } ACPI_ASF_REMOTE; 361*35786f68SRobert Mustacchi 362*35786f68SRobert Mustacchi typedef struct acpi_asf_control_data 363*35786f68SRobert Mustacchi { 364*35786f68SRobert Mustacchi UINT8 Function; 365*35786f68SRobert Mustacchi UINT8 Address; 366*35786f68SRobert Mustacchi UINT8 Command; 367*35786f68SRobert Mustacchi UINT8 Value; 368*35786f68SRobert Mustacchi 369*35786f68SRobert Mustacchi } ACPI_ASF_CONTROL_DATA; 370*35786f68SRobert Mustacchi 371*35786f68SRobert Mustacchi 372*35786f68SRobert Mustacchi /* 3: ASF RMCP Boot Options */ 373*35786f68SRobert Mustacchi 374*35786f68SRobert Mustacchi typedef struct acpi_asf_rmcp 375*35786f68SRobert Mustacchi { 376*35786f68SRobert Mustacchi ACPI_ASF_HEADER Header; 377*35786f68SRobert Mustacchi UINT8 Capabilities[7]; 378*35786f68SRobert Mustacchi UINT8 CompletionCode; 379*35786f68SRobert Mustacchi UINT32 EnterpriseId; 380*35786f68SRobert Mustacchi UINT8 Command; 381*35786f68SRobert Mustacchi UINT16 Parameter; 382*35786f68SRobert Mustacchi UINT16 BootOptions; 383*35786f68SRobert Mustacchi UINT16 OemParameters; 384*35786f68SRobert Mustacchi 385*35786f68SRobert Mustacchi } ACPI_ASF_RMCP; 386*35786f68SRobert Mustacchi 387*35786f68SRobert Mustacchi 388*35786f68SRobert Mustacchi /* 4: ASF Address */ 389*35786f68SRobert Mustacchi 390*35786f68SRobert Mustacchi typedef struct acpi_asf_address 391*35786f68SRobert Mustacchi { 392*35786f68SRobert Mustacchi ACPI_ASF_HEADER Header; 393*35786f68SRobert Mustacchi UINT8 EpromAddress; 394*35786f68SRobert Mustacchi UINT8 Devices; 395*35786f68SRobert Mustacchi 396*35786f68SRobert Mustacchi } ACPI_ASF_ADDRESS; 397*35786f68SRobert Mustacchi 398*35786f68SRobert Mustacchi 399*35786f68SRobert Mustacchi /******************************************************************************* 400*35786f68SRobert Mustacchi * 40157190917SDana Myers * BERT - Boot Error Record Table (ACPI 4.0) 40257190917SDana Myers * Version 1 403db2bae30SDana Myers * 404db2bae30SDana Myers ******************************************************************************/ 405db2bae30SDana Myers 406db2bae30SDana Myers typedef struct acpi_table_bert 407db2bae30SDana Myers { 408db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 409db2bae30SDana Myers UINT32 RegionLength; /* Length of the boot error region */ 4107b1019a6SJerry Jelinek UINT64 Address; /* Physical address of the error region */ 411db2bae30SDana Myers 412db2bae30SDana Myers } ACPI_TABLE_BERT; 413db2bae30SDana Myers 414db2bae30SDana Myers 41557190917SDana Myers /* Boot Error Region (not a subtable, pointed to by Address field above) */ 416db2bae30SDana Myers 417db2bae30SDana Myers typedef struct acpi_bert_region 418db2bae30SDana Myers { 41957190917SDana Myers UINT32 BlockStatus; /* Type of error information */ 42057190917SDana Myers UINT32 RawDataOffset; /* Offset to raw error data */ 42157190917SDana Myers UINT32 RawDataLength; /* Length of raw error data */ 42257190917SDana Myers UINT32 DataLength; /* Length of generic error data */ 42357190917SDana Myers UINT32 ErrorSeverity; /* Severity code */ 424db2bae30SDana Myers 425db2bae30SDana Myers } ACPI_BERT_REGION; 426db2bae30SDana Myers 42757190917SDana Myers /* Values for BlockStatus flags above */ 428db2bae30SDana Myers 429db2bae30SDana Myers #define ACPI_BERT_UNCORRECTABLE (1) 43057190917SDana Myers #define ACPI_BERT_CORRECTABLE (1<<1) 43157190917SDana Myers #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 43257190917SDana Myers #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 43357190917SDana Myers #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 434db2bae30SDana Myers 43557190917SDana Myers /* Values for ErrorSeverity above */ 436db2bae30SDana Myers 43757190917SDana Myers enum AcpiBertErrorSeverity 43827f7c583Smyers { 43957190917SDana Myers ACPI_BERT_ERROR_CORRECTABLE = 0, 44057190917SDana Myers ACPI_BERT_ERROR_FATAL = 1, 44157190917SDana Myers ACPI_BERT_ERROR_CORRECTED = 2, 44257190917SDana Myers ACPI_BERT_ERROR_NONE = 3, 44357190917SDana Myers ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 44457190917SDana Myers }; 44527f7c583Smyers 44657190917SDana Myers /* 44757190917SDana Myers * Note: The generic error data that follows the ErrorSeverity field above 44857190917SDana Myers * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 44957190917SDana Myers */ 45027f7c583Smyers 45127f7c583Smyers 45227f7c583Smyers /******************************************************************************* 45327f7c583Smyers * 454*35786f68SRobert Mustacchi * BGRT - Boot Graphics Resource Table (ACPI 5.0) 455*35786f68SRobert Mustacchi * Version 1 456*35786f68SRobert Mustacchi * 457*35786f68SRobert Mustacchi ******************************************************************************/ 458*35786f68SRobert Mustacchi 459*35786f68SRobert Mustacchi typedef struct acpi_table_bgrt 460*35786f68SRobert Mustacchi { 461*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 462*35786f68SRobert Mustacchi UINT16 Version; 463*35786f68SRobert Mustacchi UINT8 Status; 464*35786f68SRobert Mustacchi UINT8 ImageType; 465*35786f68SRobert Mustacchi UINT64 ImageAddress; 466*35786f68SRobert Mustacchi UINT32 ImageOffsetX; 467*35786f68SRobert Mustacchi UINT32 ImageOffsetY; 468*35786f68SRobert Mustacchi 469*35786f68SRobert Mustacchi } ACPI_TABLE_BGRT; 470*35786f68SRobert Mustacchi 471*35786f68SRobert Mustacchi /* Flags for Status field above */ 472*35786f68SRobert Mustacchi 473*35786f68SRobert Mustacchi #define ACPI_BGRT_DISPLAYED (1) 474*35786f68SRobert Mustacchi #define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) 475*35786f68SRobert Mustacchi 476*35786f68SRobert Mustacchi 477*35786f68SRobert Mustacchi /******************************************************************************* 478*35786f68SRobert Mustacchi * 479*35786f68SRobert Mustacchi * BOOT - Simple Boot Flag Table 480*35786f68SRobert Mustacchi * Version 1 481*35786f68SRobert Mustacchi * 482*35786f68SRobert Mustacchi * Conforms to the "Simple Boot Flag Specification", Version 2.1 483*35786f68SRobert Mustacchi * 484*35786f68SRobert Mustacchi ******************************************************************************/ 485*35786f68SRobert Mustacchi 486*35786f68SRobert Mustacchi typedef struct acpi_table_boot 487*35786f68SRobert Mustacchi { 488*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 489*35786f68SRobert Mustacchi UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ 490*35786f68SRobert Mustacchi UINT8 Reserved[3]; 491*35786f68SRobert Mustacchi 492*35786f68SRobert Mustacchi } ACPI_TABLE_BOOT; 493*35786f68SRobert Mustacchi 494*35786f68SRobert Mustacchi 495*35786f68SRobert Mustacchi /******************************************************************************* 496*35786f68SRobert Mustacchi * 49757190917SDana Myers * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 49857190917SDana Myers * Version 1 49927f7c583Smyers * 50027f7c583Smyers ******************************************************************************/ 50127f7c583Smyers 50227f7c583Smyers typedef struct acpi_table_cpep 50327f7c583Smyers { 504db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 50527f7c583Smyers UINT64 Reserved; 50627f7c583Smyers 50727f7c583Smyers } ACPI_TABLE_CPEP; 50827f7c583Smyers 509db2bae30SDana Myers 51027f7c583Smyers /* Subtable */ 51127f7c583Smyers 51227f7c583Smyers typedef struct acpi_cpep_polling 51327f7c583Smyers { 51457190917SDana Myers ACPI_SUBTABLE_HEADER Header; 515db2bae30SDana Myers UINT8 Id; /* Processor ID */ 516db2bae30SDana Myers UINT8 Eid; /* Processor EID */ 517db2bae30SDana Myers UINT32 Interval; /* Polling interval (msec) */ 51827f7c583Smyers 51927f7c583Smyers } ACPI_CPEP_POLLING; 52027f7c583Smyers 52127f7c583Smyers 52227f7c583Smyers /******************************************************************************* 52327f7c583Smyers * 524*35786f68SRobert Mustacchi * CSRT - Core System Resource Table 525*35786f68SRobert Mustacchi * Version 0 526*35786f68SRobert Mustacchi * 527*35786f68SRobert Mustacchi * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 528*35786f68SRobert Mustacchi * 529*35786f68SRobert Mustacchi ******************************************************************************/ 530*35786f68SRobert Mustacchi 531*35786f68SRobert Mustacchi typedef struct acpi_table_csrt 532*35786f68SRobert Mustacchi { 533*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 534*35786f68SRobert Mustacchi 535*35786f68SRobert Mustacchi } ACPI_TABLE_CSRT; 536*35786f68SRobert Mustacchi 537*35786f68SRobert Mustacchi 538*35786f68SRobert Mustacchi /* Resource Group subtable */ 539*35786f68SRobert Mustacchi 540*35786f68SRobert Mustacchi typedef struct acpi_csrt_group 541*35786f68SRobert Mustacchi { 542*35786f68SRobert Mustacchi UINT32 Length; 543*35786f68SRobert Mustacchi UINT32 VendorId; 544*35786f68SRobert Mustacchi UINT32 SubvendorId; 545*35786f68SRobert Mustacchi UINT16 DeviceId; 546*35786f68SRobert Mustacchi UINT16 SubdeviceId; 547*35786f68SRobert Mustacchi UINT16 Revision; 548*35786f68SRobert Mustacchi UINT16 Reserved; 549*35786f68SRobert Mustacchi UINT32 SharedInfoLength; 550*35786f68SRobert Mustacchi 551*35786f68SRobert Mustacchi /* Shared data immediately follows (Length = SharedInfoLength) */ 552*35786f68SRobert Mustacchi 553*35786f68SRobert Mustacchi } ACPI_CSRT_GROUP; 554*35786f68SRobert Mustacchi 555*35786f68SRobert Mustacchi /* Shared Info subtable */ 556*35786f68SRobert Mustacchi 557*35786f68SRobert Mustacchi typedef struct acpi_csrt_shared_info 558*35786f68SRobert Mustacchi { 559*35786f68SRobert Mustacchi UINT16 MajorVersion; 560*35786f68SRobert Mustacchi UINT16 MinorVersion; 561*35786f68SRobert Mustacchi UINT32 MmioBaseLow; 562*35786f68SRobert Mustacchi UINT32 MmioBaseHigh; 563*35786f68SRobert Mustacchi UINT32 GsiInterrupt; 564*35786f68SRobert Mustacchi UINT8 InterruptPolarity; 565*35786f68SRobert Mustacchi UINT8 InterruptMode; 566*35786f68SRobert Mustacchi UINT8 NumChannels; 567*35786f68SRobert Mustacchi UINT8 DmaAddressWidth; 568*35786f68SRobert Mustacchi UINT16 BaseRequestLine; 569*35786f68SRobert Mustacchi UINT16 NumHandshakeSignals; 570*35786f68SRobert Mustacchi UINT32 MaxBlockSize; 571*35786f68SRobert Mustacchi 572*35786f68SRobert Mustacchi /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ 573*35786f68SRobert Mustacchi 574*35786f68SRobert Mustacchi } ACPI_CSRT_SHARED_INFO; 575*35786f68SRobert Mustacchi 576*35786f68SRobert Mustacchi /* Resource Descriptor subtable */ 577*35786f68SRobert Mustacchi 578*35786f68SRobert Mustacchi typedef struct acpi_csrt_descriptor 579*35786f68SRobert Mustacchi { 580*35786f68SRobert Mustacchi UINT32 Length; 581*35786f68SRobert Mustacchi UINT16 Type; 582*35786f68SRobert Mustacchi UINT16 Subtype; 583*35786f68SRobert Mustacchi UINT32 Uid; 584*35786f68SRobert Mustacchi 585*35786f68SRobert Mustacchi /* Resource-specific information immediately follows */ 586*35786f68SRobert Mustacchi 587*35786f68SRobert Mustacchi } ACPI_CSRT_DESCRIPTOR; 588*35786f68SRobert Mustacchi 589*35786f68SRobert Mustacchi 590*35786f68SRobert Mustacchi /* Resource Types */ 591*35786f68SRobert Mustacchi 592*35786f68SRobert Mustacchi #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 593*35786f68SRobert Mustacchi #define ACPI_CSRT_TYPE_TIMER 0x0002 594*35786f68SRobert Mustacchi #define ACPI_CSRT_TYPE_DMA 0x0003 595*35786f68SRobert Mustacchi 596*35786f68SRobert Mustacchi /* Resource Subtypes */ 597*35786f68SRobert Mustacchi 598*35786f68SRobert Mustacchi #define ACPI_CSRT_XRUPT_LINE 0x0000 599*35786f68SRobert Mustacchi #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 600*35786f68SRobert Mustacchi #define ACPI_CSRT_TIMER 0x0000 601*35786f68SRobert Mustacchi #define ACPI_CSRT_DMA_CHANNEL 0x0000 602*35786f68SRobert Mustacchi #define ACPI_CSRT_DMA_CONTROLLER 0x0001 603*35786f68SRobert Mustacchi 604*35786f68SRobert Mustacchi 605*35786f68SRobert Mustacchi /******************************************************************************* 606*35786f68SRobert Mustacchi * 607*35786f68SRobert Mustacchi * DBG2 - Debug Port Table 2 608*35786f68SRobert Mustacchi * Version 0 (Both main table and subtables) 609*35786f68SRobert Mustacchi * 610*35786f68SRobert Mustacchi * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 611*35786f68SRobert Mustacchi * 612*35786f68SRobert Mustacchi ******************************************************************************/ 613*35786f68SRobert Mustacchi 614*35786f68SRobert Mustacchi typedef struct acpi_table_dbg2 615*35786f68SRobert Mustacchi { 616*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 617*35786f68SRobert Mustacchi UINT32 InfoOffset; 618*35786f68SRobert Mustacchi UINT32 InfoCount; 619*35786f68SRobert Mustacchi 620*35786f68SRobert Mustacchi } ACPI_TABLE_DBG2; 621*35786f68SRobert Mustacchi 622*35786f68SRobert Mustacchi 623*35786f68SRobert Mustacchi typedef struct acpi_dbg2_header 624*35786f68SRobert Mustacchi { 625*35786f68SRobert Mustacchi UINT32 InfoOffset; 626*35786f68SRobert Mustacchi UINT32 InfoCount; 627*35786f68SRobert Mustacchi 628*35786f68SRobert Mustacchi } ACPI_DBG2_HEADER; 629*35786f68SRobert Mustacchi 630*35786f68SRobert Mustacchi 631*35786f68SRobert Mustacchi /* Debug Device Information Subtable */ 632*35786f68SRobert Mustacchi 633*35786f68SRobert Mustacchi typedef struct acpi_dbg2_device 634*35786f68SRobert Mustacchi { 635*35786f68SRobert Mustacchi UINT8 Revision; 636*35786f68SRobert Mustacchi UINT16 Length; 637*35786f68SRobert Mustacchi UINT8 RegisterCount; /* Number of BaseAddress registers */ 638*35786f68SRobert Mustacchi UINT16 NamepathLength; 639*35786f68SRobert Mustacchi UINT16 NamepathOffset; 640*35786f68SRobert Mustacchi UINT16 OemDataLength; 641*35786f68SRobert Mustacchi UINT16 OemDataOffset; 642*35786f68SRobert Mustacchi UINT16 PortType; 643*35786f68SRobert Mustacchi UINT16 PortSubtype; 644*35786f68SRobert Mustacchi UINT16 Reserved; 645*35786f68SRobert Mustacchi UINT16 BaseAddressOffset; 646*35786f68SRobert Mustacchi UINT16 AddressSizeOffset; 647*35786f68SRobert Mustacchi /* 648*35786f68SRobert Mustacchi * Data that follows: 649*35786f68SRobert Mustacchi * BaseAddress (required) - Each in 12-byte Generic Address Structure format. 650*35786f68SRobert Mustacchi * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. 651*35786f68SRobert Mustacchi * Namepath (required) - Null terminated string. Single dot if not supported. 652*35786f68SRobert Mustacchi * OemData (optional) - Length is OemDataLength. 653*35786f68SRobert Mustacchi */ 654*35786f68SRobert Mustacchi } ACPI_DBG2_DEVICE; 655*35786f68SRobert Mustacchi 656*35786f68SRobert Mustacchi /* Types for PortType field above */ 657*35786f68SRobert Mustacchi 658*35786f68SRobert Mustacchi #define ACPI_DBG2_SERIAL_PORT 0x8000 659*35786f68SRobert Mustacchi #define ACPI_DBG2_1394_PORT 0x8001 660*35786f68SRobert Mustacchi #define ACPI_DBG2_USB_PORT 0x8002 661*35786f68SRobert Mustacchi #define ACPI_DBG2_NET_PORT 0x8003 662*35786f68SRobert Mustacchi 663*35786f68SRobert Mustacchi /* Subtypes for PortSubtype field above */ 664*35786f68SRobert Mustacchi 665*35786f68SRobert Mustacchi #define ACPI_DBG2_16550_COMPATIBLE 0x0000 666*35786f68SRobert Mustacchi #define ACPI_DBG2_16550_SUBSET 0x0001 667*35786f68SRobert Mustacchi #define ACPI_DBG2_ARM_PL011 0x0003 668*35786f68SRobert Mustacchi #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D 669*35786f68SRobert Mustacchi #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E 670*35786f68SRobert Mustacchi #define ACPI_DBG2_ARM_DCC 0x000F 671*35786f68SRobert Mustacchi #define ACPI_DBG2_BCM2835 0x0010 672*35786f68SRobert Mustacchi 673*35786f68SRobert Mustacchi #define ACPI_DBG2_1394_STANDARD 0x0000 674*35786f68SRobert Mustacchi 675*35786f68SRobert Mustacchi #define ACPI_DBG2_USB_XHCI 0x0000 676*35786f68SRobert Mustacchi #define ACPI_DBG2_USB_EHCI 0x0001 677*35786f68SRobert Mustacchi 678*35786f68SRobert Mustacchi 679*35786f68SRobert Mustacchi /******************************************************************************* 680*35786f68SRobert Mustacchi * 681*35786f68SRobert Mustacchi * DBGP - Debug Port table 682*35786f68SRobert Mustacchi * Version 1 683*35786f68SRobert Mustacchi * 684*35786f68SRobert Mustacchi * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 685*35786f68SRobert Mustacchi * 686*35786f68SRobert Mustacchi ******************************************************************************/ 687*35786f68SRobert Mustacchi 688*35786f68SRobert Mustacchi typedef struct acpi_table_dbgp 689*35786f68SRobert Mustacchi { 690*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 691*35786f68SRobert Mustacchi UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ 692*35786f68SRobert Mustacchi UINT8 Reserved[3]; 693*35786f68SRobert Mustacchi ACPI_GENERIC_ADDRESS DebugPort; 694*35786f68SRobert Mustacchi 695*35786f68SRobert Mustacchi } ACPI_TABLE_DBGP; 696*35786f68SRobert Mustacchi 697*35786f68SRobert Mustacchi 698*35786f68SRobert Mustacchi /******************************************************************************* 699*35786f68SRobert Mustacchi * 700*35786f68SRobert Mustacchi * DMAR - DMA Remapping table 701*35786f68SRobert Mustacchi * Version 1 702*35786f68SRobert Mustacchi * 703*35786f68SRobert Mustacchi * Conforms to "Intel Virtualization Technology for Directed I/O", 704*35786f68SRobert Mustacchi * Version 2.3, October 2014 705*35786f68SRobert Mustacchi * 706*35786f68SRobert Mustacchi ******************************************************************************/ 707*35786f68SRobert Mustacchi 708*35786f68SRobert Mustacchi typedef struct acpi_table_dmar 709*35786f68SRobert Mustacchi { 710*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 711*35786f68SRobert Mustacchi UINT8 Width; /* Host Address Width */ 712*35786f68SRobert Mustacchi UINT8 Flags; 713*35786f68SRobert Mustacchi UINT8 Reserved[10]; 714*35786f68SRobert Mustacchi 715*35786f68SRobert Mustacchi } ACPI_TABLE_DMAR; 716*35786f68SRobert Mustacchi 717*35786f68SRobert Mustacchi /* Masks for Flags field above */ 718*35786f68SRobert Mustacchi 719*35786f68SRobert Mustacchi #define ACPI_DMAR_INTR_REMAP (1) 720*35786f68SRobert Mustacchi #define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) 721*35786f68SRobert Mustacchi #define ACPI_DMAR_X2APIC_MODE (1<<2) 722*35786f68SRobert Mustacchi 723*35786f68SRobert Mustacchi 724*35786f68SRobert Mustacchi /* DMAR subtable header */ 725*35786f68SRobert Mustacchi 726*35786f68SRobert Mustacchi typedef struct acpi_dmar_header 727*35786f68SRobert Mustacchi { 728*35786f68SRobert Mustacchi UINT16 Type; 729*35786f68SRobert Mustacchi UINT16 Length; 730*35786f68SRobert Mustacchi 731*35786f68SRobert Mustacchi } ACPI_DMAR_HEADER; 732*35786f68SRobert Mustacchi 733*35786f68SRobert Mustacchi /* Values for subtable type in ACPI_DMAR_HEADER */ 734*35786f68SRobert Mustacchi 735*35786f68SRobert Mustacchi enum AcpiDmarType 736*35786f68SRobert Mustacchi { 737*35786f68SRobert Mustacchi ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, 738*35786f68SRobert Mustacchi ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, 739*35786f68SRobert Mustacchi ACPI_DMAR_TYPE_ROOT_ATS = 2, 740*35786f68SRobert Mustacchi ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, 741*35786f68SRobert Mustacchi ACPI_DMAR_TYPE_NAMESPACE = 4, 742*35786f68SRobert Mustacchi ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 743*35786f68SRobert Mustacchi }; 744*35786f68SRobert Mustacchi 745*35786f68SRobert Mustacchi 746*35786f68SRobert Mustacchi /* DMAR Device Scope structure */ 747*35786f68SRobert Mustacchi 748*35786f68SRobert Mustacchi typedef struct acpi_dmar_device_scope 749*35786f68SRobert Mustacchi { 750*35786f68SRobert Mustacchi UINT8 EntryType; 751*35786f68SRobert Mustacchi UINT8 Length; 752*35786f68SRobert Mustacchi UINT16 Reserved; 753*35786f68SRobert Mustacchi UINT8 EnumerationId; 754*35786f68SRobert Mustacchi UINT8 Bus; 755*35786f68SRobert Mustacchi 756*35786f68SRobert Mustacchi } ACPI_DMAR_DEVICE_SCOPE; 757*35786f68SRobert Mustacchi 758*35786f68SRobert Mustacchi /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ 759*35786f68SRobert Mustacchi 760*35786f68SRobert Mustacchi enum AcpiDmarScopeType 761*35786f68SRobert Mustacchi { 762*35786f68SRobert Mustacchi ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, 763*35786f68SRobert Mustacchi ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, 764*35786f68SRobert Mustacchi ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, 765*35786f68SRobert Mustacchi ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, 766*35786f68SRobert Mustacchi ACPI_DMAR_SCOPE_TYPE_HPET = 4, 767*35786f68SRobert Mustacchi ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, 768*35786f68SRobert Mustacchi ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 769*35786f68SRobert Mustacchi }; 770*35786f68SRobert Mustacchi 771*35786f68SRobert Mustacchi typedef struct acpi_dmar_pci_path 772*35786f68SRobert Mustacchi { 773*35786f68SRobert Mustacchi UINT8 Device; 774*35786f68SRobert Mustacchi UINT8 Function; 775*35786f68SRobert Mustacchi 776*35786f68SRobert Mustacchi } ACPI_DMAR_PCI_PATH; 777*35786f68SRobert Mustacchi 778*35786f68SRobert Mustacchi 779*35786f68SRobert Mustacchi /* 780*35786f68SRobert Mustacchi * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER 781*35786f68SRobert Mustacchi */ 782*35786f68SRobert Mustacchi 783*35786f68SRobert Mustacchi /* 0: Hardware Unit Definition */ 784*35786f68SRobert Mustacchi 785*35786f68SRobert Mustacchi typedef struct acpi_dmar_hardware_unit 786*35786f68SRobert Mustacchi { 787*35786f68SRobert Mustacchi ACPI_DMAR_HEADER Header; 788*35786f68SRobert Mustacchi UINT8 Flags; 789*35786f68SRobert Mustacchi UINT8 Reserved; 790*35786f68SRobert Mustacchi UINT16 Segment; 791*35786f68SRobert Mustacchi UINT64 Address; /* Register Base Address */ 792*35786f68SRobert Mustacchi 793*35786f68SRobert Mustacchi } ACPI_DMAR_HARDWARE_UNIT; 794*35786f68SRobert Mustacchi 795*35786f68SRobert Mustacchi /* Masks for Flags field above */ 796*35786f68SRobert Mustacchi 797*35786f68SRobert Mustacchi #define ACPI_DMAR_INCLUDE_ALL (1) 798*35786f68SRobert Mustacchi 799*35786f68SRobert Mustacchi 800*35786f68SRobert Mustacchi /* 1: Reserved Memory Defininition */ 801*35786f68SRobert Mustacchi 802*35786f68SRobert Mustacchi typedef struct acpi_dmar_reserved_memory 803*35786f68SRobert Mustacchi { 804*35786f68SRobert Mustacchi ACPI_DMAR_HEADER Header; 805*35786f68SRobert Mustacchi UINT16 Reserved; 806*35786f68SRobert Mustacchi UINT16 Segment; 807*35786f68SRobert Mustacchi UINT64 BaseAddress; /* 4K aligned base address */ 808*35786f68SRobert Mustacchi UINT64 EndAddress; /* 4K aligned limit address */ 809*35786f68SRobert Mustacchi 810*35786f68SRobert Mustacchi } ACPI_DMAR_RESERVED_MEMORY; 811*35786f68SRobert Mustacchi 812*35786f68SRobert Mustacchi /* Masks for Flags field above */ 813*35786f68SRobert Mustacchi 814*35786f68SRobert Mustacchi #define ACPI_DMAR_ALLOW_ALL (1) 815*35786f68SRobert Mustacchi 816*35786f68SRobert Mustacchi 817*35786f68SRobert Mustacchi /* 2: Root Port ATS Capability Reporting Structure */ 818*35786f68SRobert Mustacchi 819*35786f68SRobert Mustacchi typedef struct acpi_dmar_atsr 820*35786f68SRobert Mustacchi { 821*35786f68SRobert Mustacchi ACPI_DMAR_HEADER Header; 822*35786f68SRobert Mustacchi UINT8 Flags; 823*35786f68SRobert Mustacchi UINT8 Reserved; 824*35786f68SRobert Mustacchi UINT16 Segment; 825*35786f68SRobert Mustacchi 826*35786f68SRobert Mustacchi } ACPI_DMAR_ATSR; 827*35786f68SRobert Mustacchi 828*35786f68SRobert Mustacchi /* Masks for Flags field above */ 829*35786f68SRobert Mustacchi 830*35786f68SRobert Mustacchi #define ACPI_DMAR_ALL_PORTS (1) 831*35786f68SRobert Mustacchi 832*35786f68SRobert Mustacchi 833*35786f68SRobert Mustacchi /* 3: Remapping Hardware Static Affinity Structure */ 834*35786f68SRobert Mustacchi 835*35786f68SRobert Mustacchi typedef struct acpi_dmar_rhsa 836*35786f68SRobert Mustacchi { 837*35786f68SRobert Mustacchi ACPI_DMAR_HEADER Header; 838*35786f68SRobert Mustacchi UINT32 Reserved; 839*35786f68SRobert Mustacchi UINT64 BaseAddress; 840*35786f68SRobert Mustacchi UINT32 ProximityDomain; 841*35786f68SRobert Mustacchi 842*35786f68SRobert Mustacchi } ACPI_DMAR_RHSA; 843*35786f68SRobert Mustacchi 844*35786f68SRobert Mustacchi 845*35786f68SRobert Mustacchi /* 4: ACPI Namespace Device Declaration Structure */ 846*35786f68SRobert Mustacchi 847*35786f68SRobert Mustacchi typedef struct acpi_dmar_andd 848*35786f68SRobert Mustacchi { 849*35786f68SRobert Mustacchi ACPI_DMAR_HEADER Header; 850*35786f68SRobert Mustacchi UINT8 Reserved[3]; 851*35786f68SRobert Mustacchi UINT8 DeviceNumber; 852*35786f68SRobert Mustacchi char DeviceName[1]; 853*35786f68SRobert Mustacchi 854*35786f68SRobert Mustacchi } ACPI_DMAR_ANDD; 855*35786f68SRobert Mustacchi 856*35786f68SRobert Mustacchi 857*35786f68SRobert Mustacchi /******************************************************************************* 858*35786f68SRobert Mustacchi * 859*35786f68SRobert Mustacchi * DRTM - Dynamic Root of Trust for Measurement table 860*35786f68SRobert Mustacchi * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 861*35786f68SRobert Mustacchi * Table version 1 862*35786f68SRobert Mustacchi * 863*35786f68SRobert Mustacchi ******************************************************************************/ 864*35786f68SRobert Mustacchi 865*35786f68SRobert Mustacchi typedef struct acpi_table_drtm 866*35786f68SRobert Mustacchi { 867*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 868*35786f68SRobert Mustacchi UINT64 EntryBaseAddress; 869*35786f68SRobert Mustacchi UINT64 EntryLength; 870*35786f68SRobert Mustacchi UINT32 EntryAddress32; 871*35786f68SRobert Mustacchi UINT64 EntryAddress64; 872*35786f68SRobert Mustacchi UINT64 ExitAddress; 873*35786f68SRobert Mustacchi UINT64 LogAreaAddress; 874*35786f68SRobert Mustacchi UINT32 LogAreaLength; 875*35786f68SRobert Mustacchi UINT64 ArchDependentAddress; 876*35786f68SRobert Mustacchi UINT32 Flags; 877*35786f68SRobert Mustacchi 878*35786f68SRobert Mustacchi } ACPI_TABLE_DRTM; 879*35786f68SRobert Mustacchi 880*35786f68SRobert Mustacchi /* Flag Definitions for above */ 881*35786f68SRobert Mustacchi 882*35786f68SRobert Mustacchi #define ACPI_DRTM_ACCESS_ALLOWED (1) 883*35786f68SRobert Mustacchi #define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) 884*35786f68SRobert Mustacchi #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) 885*35786f68SRobert Mustacchi #define ACPI_DRTM_AUTHORITY_ORDER (1<<3) 886*35786f68SRobert Mustacchi 887*35786f68SRobert Mustacchi 888*35786f68SRobert Mustacchi /* 1) Validated Tables List (64-bit addresses) */ 889*35786f68SRobert Mustacchi 890*35786f68SRobert Mustacchi typedef struct acpi_drtm_vtable_list 891*35786f68SRobert Mustacchi { 892*35786f68SRobert Mustacchi UINT32 ValidatedTableCount; 893*35786f68SRobert Mustacchi UINT64 ValidatedTables[1]; 894*35786f68SRobert Mustacchi 895*35786f68SRobert Mustacchi } ACPI_DRTM_VTABLE_LIST; 896*35786f68SRobert Mustacchi 897*35786f68SRobert Mustacchi /* 2) Resources List (of Resource Descriptors) */ 898*35786f68SRobert Mustacchi 899*35786f68SRobert Mustacchi /* Resource Descriptor */ 900*35786f68SRobert Mustacchi 901*35786f68SRobert Mustacchi typedef struct acpi_drtm_resource 902*35786f68SRobert Mustacchi { 903*35786f68SRobert Mustacchi UINT8 Size[7]; 904*35786f68SRobert Mustacchi UINT8 Type; 905*35786f68SRobert Mustacchi UINT64 Address; 906*35786f68SRobert Mustacchi 907*35786f68SRobert Mustacchi } ACPI_DRTM_RESOURCE; 908*35786f68SRobert Mustacchi 909*35786f68SRobert Mustacchi typedef struct acpi_drtm_resource_list 910*35786f68SRobert Mustacchi { 911*35786f68SRobert Mustacchi UINT32 ResourceCount; 912*35786f68SRobert Mustacchi ACPI_DRTM_RESOURCE Resources[1]; 913*35786f68SRobert Mustacchi 914*35786f68SRobert Mustacchi } ACPI_DRTM_RESOURCE_LIST; 915*35786f68SRobert Mustacchi 916*35786f68SRobert Mustacchi /* 3) Platform-specific Identifiers List */ 917*35786f68SRobert Mustacchi 918*35786f68SRobert Mustacchi typedef struct acpi_drtm_dps_id 919*35786f68SRobert Mustacchi { 920*35786f68SRobert Mustacchi UINT32 DpsIdLength; 921*35786f68SRobert Mustacchi UINT8 DpsId[16]; 922*35786f68SRobert Mustacchi 923*35786f68SRobert Mustacchi } ACPI_DRTM_DPS_ID; 924*35786f68SRobert Mustacchi 925*35786f68SRobert Mustacchi 926*35786f68SRobert Mustacchi /******************************************************************************* 927*35786f68SRobert Mustacchi * 92827f7c583Smyers * ECDT - Embedded Controller Boot Resources Table 92957190917SDana Myers * Version 1 93027f7c583Smyers * 93127f7c583Smyers ******************************************************************************/ 93227f7c583Smyers 933db2bae30SDana Myers typedef struct acpi_table_ecdt 93427f7c583Smyers { 935db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 936db2bae30SDana Myers ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 937db2bae30SDana Myers ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 93827f7c583Smyers UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 939db2bae30SDana Myers UINT8 Gpe; /* The GPE for the EC */ 940db2bae30SDana Myers UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 94127f7c583Smyers 942db2bae30SDana Myers } ACPI_TABLE_ECDT; 943db2bae30SDana Myers 944db2bae30SDana Myers 945db2bae30SDana Myers /******************************************************************************* 946db2bae30SDana Myers * 94757190917SDana Myers * EINJ - Error Injection Table (ACPI 4.0) 94857190917SDana Myers * Version 1 949db2bae30SDana Myers * 950db2bae30SDana Myers ******************************************************************************/ 951db2bae30SDana Myers 952db2bae30SDana Myers typedef struct acpi_table_einj 953db2bae30SDana Myers { 954db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 955db2bae30SDana Myers UINT32 HeaderLength; 95657190917SDana Myers UINT8 Flags; 95757190917SDana Myers UINT8 Reserved[3]; 958db2bae30SDana Myers UINT32 Entries; 959db2bae30SDana Myers 960db2bae30SDana Myers } ACPI_TABLE_EINJ; 961db2bae30SDana Myers 96257190917SDana Myers 963db2bae30SDana Myers /* EINJ Injection Instruction Entries (actions) */ 964db2bae30SDana Myers 965db2bae30SDana Myers typedef struct acpi_einj_entry 966db2bae30SDana Myers { 967db2bae30SDana Myers ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 968db2bae30SDana Myers 969db2bae30SDana Myers } ACPI_EINJ_ENTRY; 970db2bae30SDana Myers 97157190917SDana Myers /* Masks for Flags field above */ 97257190917SDana Myers 97357190917SDana Myers #define ACPI_EINJ_PRESERVE (1) 97457190917SDana Myers 975db2bae30SDana Myers /* Values for Action field above */ 976db2bae30SDana Myers 977db2bae30SDana Myers enum AcpiEinjActions 978db2bae30SDana Myers { 979db2bae30SDana Myers ACPI_EINJ_BEGIN_OPERATION = 0, 980db2bae30SDana Myers ACPI_EINJ_GET_TRIGGER_TABLE = 1, 981db2bae30SDana Myers ACPI_EINJ_SET_ERROR_TYPE = 2, 982db2bae30SDana Myers ACPI_EINJ_GET_ERROR_TYPE = 3, 983db2bae30SDana Myers ACPI_EINJ_END_OPERATION = 4, 984db2bae30SDana Myers ACPI_EINJ_EXECUTE_OPERATION = 5, 985db2bae30SDana Myers ACPI_EINJ_CHECK_BUSY_STATUS = 6, 986db2bae30SDana Myers ACPI_EINJ_GET_COMMAND_STATUS = 7, 9877b1019a6SJerry Jelinek ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 9887b1019a6SJerry Jelinek ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 9897b1019a6SJerry Jelinek ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 990db2bae30SDana Myers ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 991db2bae30SDana Myers }; 992db2bae30SDana Myers 993db2bae30SDana Myers /* Values for Instruction field above */ 994db2bae30SDana Myers 995db2bae30SDana Myers enum AcpiEinjInstructions 996db2bae30SDana Myers { 997db2bae30SDana Myers ACPI_EINJ_READ_REGISTER = 0, 998db2bae30SDana Myers ACPI_EINJ_READ_REGISTER_VALUE = 1, 999db2bae30SDana Myers ACPI_EINJ_WRITE_REGISTER = 2, 1000db2bae30SDana Myers ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 1001db2bae30SDana Myers ACPI_EINJ_NOOP = 4, 10027b1019a6SJerry Jelinek ACPI_EINJ_FLUSH_CACHELINE = 5, 10037b1019a6SJerry Jelinek ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 1004db2bae30SDana Myers }; 1005db2bae30SDana Myers 10067b1019a6SJerry Jelinek typedef struct acpi_einj_error_type_with_addr 10077b1019a6SJerry Jelinek { 10087b1019a6SJerry Jelinek UINT32 ErrorType; 10097b1019a6SJerry Jelinek UINT32 VendorStructOffset; 10107b1019a6SJerry Jelinek UINT32 Flags; 10117b1019a6SJerry Jelinek UINT32 ApicId; 10127b1019a6SJerry Jelinek UINT64 Address; 10137b1019a6SJerry Jelinek UINT64 Range; 10147b1019a6SJerry Jelinek UINT32 PcieId; 10157b1019a6SJerry Jelinek 10167b1019a6SJerry Jelinek } ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 10177b1019a6SJerry Jelinek 10187b1019a6SJerry Jelinek typedef struct acpi_einj_vendor 10197b1019a6SJerry Jelinek { 10207b1019a6SJerry Jelinek UINT32 Length; 10217b1019a6SJerry Jelinek UINT32 PcieId; 10227b1019a6SJerry Jelinek UINT16 VendorId; 10237b1019a6SJerry Jelinek UINT16 DeviceId; 10247b1019a6SJerry Jelinek UINT8 RevisionId; 10257b1019a6SJerry Jelinek UINT8 Reserved[3]; 10267b1019a6SJerry Jelinek 10277b1019a6SJerry Jelinek } ACPI_EINJ_VENDOR; 10287b1019a6SJerry Jelinek 102957190917SDana Myers 1030db2bae30SDana Myers /* EINJ Trigger Error Action Table */ 1031db2bae30SDana Myers 1032db2bae30SDana Myers typedef struct acpi_einj_trigger 1033db2bae30SDana Myers { 1034db2bae30SDana Myers UINT32 HeaderSize; 1035db2bae30SDana Myers UINT32 Revision; 1036db2bae30SDana Myers UINT32 TableSize; 1037db2bae30SDana Myers UINT32 EntryCount; 1038db2bae30SDana Myers 1039db2bae30SDana Myers } ACPI_EINJ_TRIGGER; 1040db2bae30SDana Myers 104157190917SDana Myers /* Command status return values */ 104257190917SDana Myers 104357190917SDana Myers enum AcpiEinjCommandStatus 104457190917SDana Myers { 104557190917SDana Myers ACPI_EINJ_SUCCESS = 0, 104657190917SDana Myers ACPI_EINJ_FAILURE = 1, 104757190917SDana Myers ACPI_EINJ_INVALID_ACCESS = 2, 104857190917SDana Myers ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 104957190917SDana Myers }; 105057190917SDana Myers 105157190917SDana Myers 105257190917SDana Myers /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 105357190917SDana Myers 105457190917SDana Myers #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 105557190917SDana Myers #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 105657190917SDana Myers #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 105757190917SDana Myers #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 105857190917SDana Myers #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 105957190917SDana Myers #define ACPI_EINJ_MEMORY_FATAL (1<<5) 106057190917SDana Myers #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 106157190917SDana Myers #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 106257190917SDana Myers #define ACPI_EINJ_PCIX_FATAL (1<<8) 106357190917SDana Myers #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 106457190917SDana Myers #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 106557190917SDana Myers #define ACPI_EINJ_PLATFORM_FATAL (1<<11) 10667b1019a6SJerry Jelinek #define ACPI_EINJ_VENDOR_DEFINED (1<<31) 106757190917SDana Myers 1068db2bae30SDana Myers 1069db2bae30SDana Myers /******************************************************************************* 1070db2bae30SDana Myers * 107157190917SDana Myers * ERST - Error Record Serialization Table (ACPI 4.0) 107257190917SDana Myers * Version 1 1073db2bae30SDana Myers * 1074db2bae30SDana Myers ******************************************************************************/ 1075db2bae30SDana Myers 1076db2bae30SDana Myers typedef struct acpi_table_erst 1077db2bae30SDana Myers { 1078db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1079db2bae30SDana Myers UINT32 HeaderLength; 1080db2bae30SDana Myers UINT32 Reserved; 1081db2bae30SDana Myers UINT32 Entries; 1082db2bae30SDana Myers 1083db2bae30SDana Myers } ACPI_TABLE_ERST; 1084db2bae30SDana Myers 108557190917SDana Myers 1086db2bae30SDana Myers /* ERST Serialization Entries (actions) */ 1087db2bae30SDana Myers 1088db2bae30SDana Myers typedef struct acpi_erst_entry 1089db2bae30SDana Myers { 1090db2bae30SDana Myers ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 1091db2bae30SDana Myers 1092db2bae30SDana Myers } ACPI_ERST_ENTRY; 1093db2bae30SDana Myers 109457190917SDana Myers /* Masks for Flags field above */ 109557190917SDana Myers 109657190917SDana Myers #define ACPI_ERST_PRESERVE (1) 109757190917SDana Myers 1098db2bae30SDana Myers /* Values for Action field above */ 1099db2bae30SDana Myers 1100db2bae30SDana Myers enum AcpiErstActions 1101db2bae30SDana Myers { 110257190917SDana Myers ACPI_ERST_BEGIN_WRITE = 0, 110357190917SDana Myers ACPI_ERST_BEGIN_READ = 1, 110457190917SDana Myers ACPI_ERST_BEGIN_CLEAR = 2, 110557190917SDana Myers ACPI_ERST_END = 3, 1106db2bae30SDana Myers ACPI_ERST_SET_RECORD_OFFSET = 4, 1107db2bae30SDana Myers ACPI_ERST_EXECUTE_OPERATION = 5, 1108db2bae30SDana Myers ACPI_ERST_CHECK_BUSY_STATUS = 6, 1109db2bae30SDana Myers ACPI_ERST_GET_COMMAND_STATUS = 7, 111057190917SDana Myers ACPI_ERST_GET_RECORD_ID = 8, 111157190917SDana Myers ACPI_ERST_SET_RECORD_ID = 9, 1112db2bae30SDana Myers ACPI_ERST_GET_RECORD_COUNT = 10, 1113db2bae30SDana Myers ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 1114db2bae30SDana Myers ACPI_ERST_NOT_USED = 12, 1115db2bae30SDana Myers ACPI_ERST_GET_ERROR_RANGE = 13, 1116db2bae30SDana Myers ACPI_ERST_GET_ERROR_LENGTH = 14, 1117db2bae30SDana Myers ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 11187b1019a6SJerry Jelinek ACPI_ERST_EXECUTE_TIMINGS = 16, 11197b1019a6SJerry Jelinek ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 1120db2bae30SDana Myers }; 1121db2bae30SDana Myers 1122db2bae30SDana Myers /* Values for Instruction field above */ 1123db2bae30SDana Myers 1124db2bae30SDana Myers enum AcpiErstInstructions 1125db2bae30SDana Myers { 1126db2bae30SDana Myers ACPI_ERST_READ_REGISTER = 0, 1127db2bae30SDana Myers ACPI_ERST_READ_REGISTER_VALUE = 1, 1128db2bae30SDana Myers ACPI_ERST_WRITE_REGISTER = 2, 1129db2bae30SDana Myers ACPI_ERST_WRITE_REGISTER_VALUE = 3, 1130db2bae30SDana Myers ACPI_ERST_NOOP = 4, 1131db2bae30SDana Myers ACPI_ERST_LOAD_VAR1 = 5, 1132db2bae30SDana Myers ACPI_ERST_LOAD_VAR2 = 6, 1133db2bae30SDana Myers ACPI_ERST_STORE_VAR1 = 7, 1134db2bae30SDana Myers ACPI_ERST_ADD = 8, 1135db2bae30SDana Myers ACPI_ERST_SUBTRACT = 9, 1136db2bae30SDana Myers ACPI_ERST_ADD_VALUE = 10, 1137db2bae30SDana Myers ACPI_ERST_SUBTRACT_VALUE = 11, 1138db2bae30SDana Myers ACPI_ERST_STALL = 12, 1139db2bae30SDana Myers ACPI_ERST_STALL_WHILE_TRUE = 13, 1140db2bae30SDana Myers ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 1141db2bae30SDana Myers ACPI_ERST_GOTO = 15, 1142db2bae30SDana Myers ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 1143db2bae30SDana Myers ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 1144db2bae30SDana Myers ACPI_ERST_MOVE_DATA = 18, 1145db2bae30SDana Myers ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 1146db2bae30SDana Myers }; 1147db2bae30SDana Myers 114857190917SDana Myers /* Command status return values */ 114957190917SDana Myers 115057190917SDana Myers enum AcpiErstCommandStatus 115157190917SDana Myers { 115257190917SDana Myers ACPI_ERST_SUCESS = 0, 115357190917SDana Myers ACPI_ERST_NO_SPACE = 1, 115457190917SDana Myers ACPI_ERST_NOT_AVAILABLE = 2, 115557190917SDana Myers ACPI_ERST_FAILURE = 3, 115657190917SDana Myers ACPI_ERST_RECORD_EMPTY = 4, 115757190917SDana Myers ACPI_ERST_NOT_FOUND = 5, 115857190917SDana Myers ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 115957190917SDana Myers }; 116057190917SDana Myers 116157190917SDana Myers 116257190917SDana Myers /* Error Record Serialization Information */ 116357190917SDana Myers 116457190917SDana Myers typedef struct acpi_erst_info 116557190917SDana Myers { 116657190917SDana Myers UINT16 Signature; /* Should be "ER" */ 116757190917SDana Myers UINT8 Data[48]; 116857190917SDana Myers 116957190917SDana Myers } ACPI_ERST_INFO; 117057190917SDana Myers 1171db2bae30SDana Myers 1172db2bae30SDana Myers /******************************************************************************* 1173db2bae30SDana Myers * 1174*35786f68SRobert Mustacchi * FPDT - Firmware Performance Data Table (ACPI 5.0) 1175*35786f68SRobert Mustacchi * Version 1 1176*35786f68SRobert Mustacchi * 1177*35786f68SRobert Mustacchi ******************************************************************************/ 1178*35786f68SRobert Mustacchi 1179*35786f68SRobert Mustacchi typedef struct acpi_table_fpdt 1180*35786f68SRobert Mustacchi { 1181*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1182*35786f68SRobert Mustacchi 1183*35786f68SRobert Mustacchi } ACPI_TABLE_FPDT; 1184*35786f68SRobert Mustacchi 1185*35786f68SRobert Mustacchi 1186*35786f68SRobert Mustacchi /* FPDT subtable header (Performance Record Structure) */ 1187*35786f68SRobert Mustacchi 1188*35786f68SRobert Mustacchi typedef struct acpi_fpdt_header 1189*35786f68SRobert Mustacchi { 1190*35786f68SRobert Mustacchi UINT16 Type; 1191*35786f68SRobert Mustacchi UINT8 Length; 1192*35786f68SRobert Mustacchi UINT8 Revision; 1193*35786f68SRobert Mustacchi 1194*35786f68SRobert Mustacchi } ACPI_FPDT_HEADER; 1195*35786f68SRobert Mustacchi 1196*35786f68SRobert Mustacchi /* Values for Type field above */ 1197*35786f68SRobert Mustacchi 1198*35786f68SRobert Mustacchi enum AcpiFpdtType 1199*35786f68SRobert Mustacchi { 1200*35786f68SRobert Mustacchi ACPI_FPDT_TYPE_BOOT = 0, 1201*35786f68SRobert Mustacchi ACPI_FPDT_TYPE_S3PERF = 1 1202*35786f68SRobert Mustacchi }; 1203*35786f68SRobert Mustacchi 1204*35786f68SRobert Mustacchi 1205*35786f68SRobert Mustacchi /* 1206*35786f68SRobert Mustacchi * FPDT subtables 1207*35786f68SRobert Mustacchi */ 1208*35786f68SRobert Mustacchi 1209*35786f68SRobert Mustacchi /* 0: Firmware Basic Boot Performance Record */ 1210*35786f68SRobert Mustacchi 1211*35786f68SRobert Mustacchi typedef struct acpi_fpdt_boot_pointer 1212*35786f68SRobert Mustacchi { 1213*35786f68SRobert Mustacchi ACPI_FPDT_HEADER Header; 1214*35786f68SRobert Mustacchi UINT8 Reserved[4]; 1215*35786f68SRobert Mustacchi UINT64 Address; 1216*35786f68SRobert Mustacchi 1217*35786f68SRobert Mustacchi } ACPI_FPDT_BOOT_POINTER; 1218*35786f68SRobert Mustacchi 1219*35786f68SRobert Mustacchi 1220*35786f68SRobert Mustacchi /* 1: S3 Performance Table Pointer Record */ 1221*35786f68SRobert Mustacchi 1222*35786f68SRobert Mustacchi typedef struct acpi_fpdt_s3pt_pointer 1223*35786f68SRobert Mustacchi { 1224*35786f68SRobert Mustacchi ACPI_FPDT_HEADER Header; 1225*35786f68SRobert Mustacchi UINT8 Reserved[4]; 1226*35786f68SRobert Mustacchi UINT64 Address; 1227*35786f68SRobert Mustacchi 1228*35786f68SRobert Mustacchi } ACPI_FPDT_S3PT_POINTER; 1229*35786f68SRobert Mustacchi 1230*35786f68SRobert Mustacchi 1231*35786f68SRobert Mustacchi /* 1232*35786f68SRobert Mustacchi * S3PT - S3 Performance Table. This table is pointed to by the 1233*35786f68SRobert Mustacchi * S3 Pointer Record above. 1234*35786f68SRobert Mustacchi */ 1235*35786f68SRobert Mustacchi typedef struct acpi_table_s3pt 1236*35786f68SRobert Mustacchi { 1237*35786f68SRobert Mustacchi UINT8 Signature[4]; /* "S3PT" */ 1238*35786f68SRobert Mustacchi UINT32 Length; 1239*35786f68SRobert Mustacchi 1240*35786f68SRobert Mustacchi } ACPI_TABLE_S3PT; 1241*35786f68SRobert Mustacchi 1242*35786f68SRobert Mustacchi 1243*35786f68SRobert Mustacchi /* 1244*35786f68SRobert Mustacchi * S3PT Subtables (Not part of the actual FPDT) 1245*35786f68SRobert Mustacchi */ 1246*35786f68SRobert Mustacchi 1247*35786f68SRobert Mustacchi /* Values for Type field in S3PT header */ 1248*35786f68SRobert Mustacchi 1249*35786f68SRobert Mustacchi enum AcpiS3ptType 1250*35786f68SRobert Mustacchi { 1251*35786f68SRobert Mustacchi ACPI_S3PT_TYPE_RESUME = 0, 1252*35786f68SRobert Mustacchi ACPI_S3PT_TYPE_SUSPEND = 1, 1253*35786f68SRobert Mustacchi ACPI_FPDT_BOOT_PERFORMANCE = 2 1254*35786f68SRobert Mustacchi }; 1255*35786f68SRobert Mustacchi 1256*35786f68SRobert Mustacchi typedef struct acpi_s3pt_resume 1257*35786f68SRobert Mustacchi { 1258*35786f68SRobert Mustacchi ACPI_FPDT_HEADER Header; 1259*35786f68SRobert Mustacchi UINT32 ResumeCount; 1260*35786f68SRobert Mustacchi UINT64 FullResume; 1261*35786f68SRobert Mustacchi UINT64 AverageResume; 1262*35786f68SRobert Mustacchi 1263*35786f68SRobert Mustacchi } ACPI_S3PT_RESUME; 1264*35786f68SRobert Mustacchi 1265*35786f68SRobert Mustacchi typedef struct acpi_s3pt_suspend 1266*35786f68SRobert Mustacchi { 1267*35786f68SRobert Mustacchi ACPI_FPDT_HEADER Header; 1268*35786f68SRobert Mustacchi UINT64 SuspendStart; 1269*35786f68SRobert Mustacchi UINT64 SuspendEnd; 1270*35786f68SRobert Mustacchi 1271*35786f68SRobert Mustacchi } ACPI_S3PT_SUSPEND; 1272*35786f68SRobert Mustacchi 1273*35786f68SRobert Mustacchi 1274*35786f68SRobert Mustacchi /* 1275*35786f68SRobert Mustacchi * FPDT Boot Performance Record (Not part of the actual FPDT) 1276*35786f68SRobert Mustacchi */ 1277*35786f68SRobert Mustacchi typedef struct acpi_fpdt_boot 1278*35786f68SRobert Mustacchi { 1279*35786f68SRobert Mustacchi ACPI_FPDT_HEADER Header; 1280*35786f68SRobert Mustacchi UINT8 Reserved[4]; 1281*35786f68SRobert Mustacchi UINT64 ResetEnd; 1282*35786f68SRobert Mustacchi UINT64 LoadStart; 1283*35786f68SRobert Mustacchi UINT64 StartupStart; 1284*35786f68SRobert Mustacchi UINT64 ExitServicesEntry; 1285*35786f68SRobert Mustacchi UINT64 ExitServicesExit; 1286*35786f68SRobert Mustacchi 1287*35786f68SRobert Mustacchi } ACPI_FPDT_BOOT; 1288*35786f68SRobert Mustacchi 1289*35786f68SRobert Mustacchi 1290*35786f68SRobert Mustacchi /******************************************************************************* 1291*35786f68SRobert Mustacchi * 1292*35786f68SRobert Mustacchi * GTDT - Generic Timer Description Table (ACPI 5.1) 1293*35786f68SRobert Mustacchi * Version 2 1294*35786f68SRobert Mustacchi * 1295*35786f68SRobert Mustacchi ******************************************************************************/ 1296*35786f68SRobert Mustacchi 1297*35786f68SRobert Mustacchi typedef struct acpi_table_gtdt 1298*35786f68SRobert Mustacchi { 1299*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1300*35786f68SRobert Mustacchi UINT64 CounterBlockAddresss; 1301*35786f68SRobert Mustacchi UINT32 Reserved; 1302*35786f68SRobert Mustacchi UINT32 SecureEl1Interrupt; 1303*35786f68SRobert Mustacchi UINT32 SecureEl1Flags; 1304*35786f68SRobert Mustacchi UINT32 NonSecureEl1Interrupt; 1305*35786f68SRobert Mustacchi UINT32 NonSecureEl1Flags; 1306*35786f68SRobert Mustacchi UINT32 VirtualTimerInterrupt; 1307*35786f68SRobert Mustacchi UINT32 VirtualTimerFlags; 1308*35786f68SRobert Mustacchi UINT32 NonSecureEl2Interrupt; 1309*35786f68SRobert Mustacchi UINT32 NonSecureEl2Flags; 1310*35786f68SRobert Mustacchi UINT64 CounterReadBlockAddress; 1311*35786f68SRobert Mustacchi UINT32 PlatformTimerCount; 1312*35786f68SRobert Mustacchi UINT32 PlatformTimerOffset; 1313*35786f68SRobert Mustacchi 1314*35786f68SRobert Mustacchi } ACPI_TABLE_GTDT; 1315*35786f68SRobert Mustacchi 1316*35786f68SRobert Mustacchi /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ 1317*35786f68SRobert Mustacchi 1318*35786f68SRobert Mustacchi #define ACPI_GTDT_INTERRUPT_MODE (1) 1319*35786f68SRobert Mustacchi #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) 1320*35786f68SRobert Mustacchi #define ACPI_GTDT_ALWAYS_ON (1<<2) 1321*35786f68SRobert Mustacchi 1322*35786f68SRobert Mustacchi 1323*35786f68SRobert Mustacchi /* Common GTDT subtable header */ 1324*35786f68SRobert Mustacchi 1325*35786f68SRobert Mustacchi typedef struct acpi_gtdt_header 1326*35786f68SRobert Mustacchi { 1327*35786f68SRobert Mustacchi UINT8 Type; 1328*35786f68SRobert Mustacchi UINT16 Length; 1329*35786f68SRobert Mustacchi 1330*35786f68SRobert Mustacchi } ACPI_GTDT_HEADER; 1331*35786f68SRobert Mustacchi 1332*35786f68SRobert Mustacchi /* Values for GTDT subtable type above */ 1333*35786f68SRobert Mustacchi 1334*35786f68SRobert Mustacchi enum AcpiGtdtType 1335*35786f68SRobert Mustacchi { 1336*35786f68SRobert Mustacchi ACPI_GTDT_TYPE_TIMER_BLOCK = 0, 1337*35786f68SRobert Mustacchi ACPI_GTDT_TYPE_WATCHDOG = 1, 1338*35786f68SRobert Mustacchi ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 1339*35786f68SRobert Mustacchi }; 1340*35786f68SRobert Mustacchi 1341*35786f68SRobert Mustacchi 1342*35786f68SRobert Mustacchi /* GTDT Subtables, correspond to Type in acpi_gtdt_header */ 1343*35786f68SRobert Mustacchi 1344*35786f68SRobert Mustacchi /* 0: Generic Timer Block */ 1345*35786f68SRobert Mustacchi 1346*35786f68SRobert Mustacchi typedef struct acpi_gtdt_timer_block 1347*35786f68SRobert Mustacchi { 1348*35786f68SRobert Mustacchi ACPI_GTDT_HEADER Header; 1349*35786f68SRobert Mustacchi UINT8 Reserved; 1350*35786f68SRobert Mustacchi UINT64 BlockAddress; 1351*35786f68SRobert Mustacchi UINT32 TimerCount; 1352*35786f68SRobert Mustacchi UINT32 TimerOffset; 1353*35786f68SRobert Mustacchi 1354*35786f68SRobert Mustacchi } ACPI_GTDT_TIMER_BLOCK; 1355*35786f68SRobert Mustacchi 1356*35786f68SRobert Mustacchi /* Timer Sub-Structure, one per timer */ 1357*35786f68SRobert Mustacchi 1358*35786f68SRobert Mustacchi typedef struct acpi_gtdt_timer_entry 1359*35786f68SRobert Mustacchi { 1360*35786f68SRobert Mustacchi UINT8 FrameNumber; 1361*35786f68SRobert Mustacchi UINT8 Reserved[3]; 1362*35786f68SRobert Mustacchi UINT64 BaseAddress; 1363*35786f68SRobert Mustacchi UINT64 El0BaseAddress; 1364*35786f68SRobert Mustacchi UINT32 TimerInterrupt; 1365*35786f68SRobert Mustacchi UINT32 TimerFlags; 1366*35786f68SRobert Mustacchi UINT32 VirtualTimerInterrupt; 1367*35786f68SRobert Mustacchi UINT32 VirtualTimerFlags; 1368*35786f68SRobert Mustacchi UINT32 CommonFlags; 1369*35786f68SRobert Mustacchi 1370*35786f68SRobert Mustacchi } ACPI_GTDT_TIMER_ENTRY; 1371*35786f68SRobert Mustacchi 1372*35786f68SRobert Mustacchi /* Flag Definitions: TimerFlags and VirtualTimerFlags above */ 1373*35786f68SRobert Mustacchi 1374*35786f68SRobert Mustacchi #define ACPI_GTDT_GT_IRQ_MODE (1) 1375*35786f68SRobert Mustacchi #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) 1376*35786f68SRobert Mustacchi 1377*35786f68SRobert Mustacchi /* Flag Definitions: CommonFlags above */ 1378*35786f68SRobert Mustacchi 1379*35786f68SRobert Mustacchi #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) 1380*35786f68SRobert Mustacchi #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) 1381*35786f68SRobert Mustacchi 1382*35786f68SRobert Mustacchi 1383*35786f68SRobert Mustacchi /* 1: SBSA Generic Watchdog Structure */ 1384*35786f68SRobert Mustacchi 1385*35786f68SRobert Mustacchi typedef struct acpi_gtdt_watchdog 1386*35786f68SRobert Mustacchi { 1387*35786f68SRobert Mustacchi ACPI_GTDT_HEADER Header; 1388*35786f68SRobert Mustacchi UINT8 Reserved; 1389*35786f68SRobert Mustacchi UINT64 RefreshFrameAddress; 1390*35786f68SRobert Mustacchi UINT64 ControlFrameAddress; 1391*35786f68SRobert Mustacchi UINT32 TimerInterrupt; 1392*35786f68SRobert Mustacchi UINT32 TimerFlags; 1393*35786f68SRobert Mustacchi 1394*35786f68SRobert Mustacchi } ACPI_GTDT_WATCHDOG; 1395*35786f68SRobert Mustacchi 1396*35786f68SRobert Mustacchi /* Flag Definitions: TimerFlags above */ 1397*35786f68SRobert Mustacchi 1398*35786f68SRobert Mustacchi #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) 1399*35786f68SRobert Mustacchi #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) 1400*35786f68SRobert Mustacchi #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) 1401*35786f68SRobert Mustacchi 1402*35786f68SRobert Mustacchi 1403*35786f68SRobert Mustacchi /******************************************************************************* 1404*35786f68SRobert Mustacchi * 140557190917SDana Myers * HEST - Hardware Error Source Table (ACPI 4.0) 140657190917SDana Myers * Version 1 1407db2bae30SDana Myers * 1408db2bae30SDana Myers ******************************************************************************/ 1409db2bae30SDana Myers 1410db2bae30SDana Myers typedef struct acpi_table_hest 1411db2bae30SDana Myers { 1412db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1413db2bae30SDana Myers UINT32 ErrorSourceCount; 1414db2bae30SDana Myers 1415db2bae30SDana Myers } ACPI_TABLE_HEST; 1416db2bae30SDana Myers 1417db2bae30SDana Myers 1418db2bae30SDana Myers /* HEST subtable header */ 1419db2bae30SDana Myers 1420db2bae30SDana Myers typedef struct acpi_hest_header 1421db2bae30SDana Myers { 1422db2bae30SDana Myers UINT16 Type; 142357190917SDana Myers UINT16 SourceId; 1424db2bae30SDana Myers 1425db2bae30SDana Myers } ACPI_HEST_HEADER; 1426db2bae30SDana Myers 1427db2bae30SDana Myers 1428db2bae30SDana Myers /* Values for Type field above for subtables */ 1429db2bae30SDana Myers 1430db2bae30SDana Myers enum AcpiHestTypes 1431db2bae30SDana Myers { 143257190917SDana Myers ACPI_HEST_TYPE_IA32_CHECK = 0, 143357190917SDana Myers ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 143457190917SDana Myers ACPI_HEST_TYPE_IA32_NMI = 2, 143557190917SDana Myers ACPI_HEST_TYPE_NOT_USED3 = 3, 143657190917SDana Myers ACPI_HEST_TYPE_NOT_USED4 = 4, 143757190917SDana Myers ACPI_HEST_TYPE_NOT_USED5 = 5, 1438db2bae30SDana Myers ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 1439db2bae30SDana Myers ACPI_HEST_TYPE_AER_ENDPOINT = 7, 1440db2bae30SDana Myers ACPI_HEST_TYPE_AER_BRIDGE = 8, 144157190917SDana Myers ACPI_HEST_TYPE_GENERIC_ERROR = 9, 14427b1019a6SJerry Jelinek ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 1443*35786f68SRobert Mustacchi ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, 1444*35786f68SRobert Mustacchi ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ 1445db2bae30SDana Myers }; 1446db2bae30SDana Myers 1447db2bae30SDana Myers 1448db2bae30SDana Myers /* 144957190917SDana Myers * HEST substructures contained in subtables 1450db2bae30SDana Myers */ 1451db2bae30SDana Myers 145257190917SDana Myers /* 145357190917SDana Myers * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 145457190917SDana Myers * ACPI_HEST_IA_CORRECTED structures. 145557190917SDana Myers */ 145657190917SDana Myers typedef struct acpi_hest_ia_error_bank 1457db2bae30SDana Myers { 1458db2bae30SDana Myers UINT8 BankNumber; 1459db2bae30SDana Myers UINT8 ClearStatusOnInit; 1460db2bae30SDana Myers UINT8 StatusFormat; 146157190917SDana Myers UINT8 Reserved; 1462db2bae30SDana Myers UINT32 ControlRegister; 146357190917SDana Myers UINT64 ControlData; 1464db2bae30SDana Myers UINT32 StatusRegister; 1465db2bae30SDana Myers UINT32 AddressRegister; 1466db2bae30SDana Myers UINT32 MiscRegister; 1467db2bae30SDana Myers 146857190917SDana Myers } ACPI_HEST_IA_ERROR_BANK; 1469db2bae30SDana Myers 1470db2bae30SDana Myers 147157190917SDana Myers /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 1472db2bae30SDana Myers 1473db2bae30SDana Myers typedef struct acpi_hest_aer_common 1474db2bae30SDana Myers { 147557190917SDana Myers UINT16 Reserved1; 1476db2bae30SDana Myers UINT8 Flags; 1477db2bae30SDana Myers UINT8 Enabled; 147857190917SDana Myers UINT32 RecordsToPreallocate; 1479db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 14807b1019a6SJerry Jelinek UINT32 Bus; /* Bus and Segment numbers */ 1481db2bae30SDana Myers UINT16 Device; 1482db2bae30SDana Myers UINT16 Function; 1483db2bae30SDana Myers UINT16 DeviceControl; 148457190917SDana Myers UINT16 Reserved2; 148557190917SDana Myers UINT32 UncorrectableMask; 148657190917SDana Myers UINT32 UncorrectableSeverity; 148757190917SDana Myers UINT32 CorrectableMask; 148857190917SDana Myers UINT32 AdvancedCapabilities; 1489db2bae30SDana Myers 1490db2bae30SDana Myers } ACPI_HEST_AER_COMMON; 1491db2bae30SDana Myers 149257190917SDana Myers /* Masks for HEST Flags fields */ 149357190917SDana Myers 149457190917SDana Myers #define ACPI_HEST_FIRMWARE_FIRST (1) 149557190917SDana Myers #define ACPI_HEST_GLOBAL (1<<1) 1496*35786f68SRobert Mustacchi #define ACPI_HEST_GHES_ASSIST (1<<2) 149757190917SDana Myers 14987b1019a6SJerry Jelinek /* 14997b1019a6SJerry Jelinek * Macros to access the bus/segment numbers in Bus field above: 15007b1019a6SJerry Jelinek * Bus number is encoded in bits 7:0 15017b1019a6SJerry Jelinek * Segment number is encoded in bits 23:8 15027b1019a6SJerry Jelinek */ 15037b1019a6SJerry Jelinek #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 15047b1019a6SJerry Jelinek #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 15057b1019a6SJerry Jelinek 1506db2bae30SDana Myers 1507db2bae30SDana Myers /* Hardware Error Notification */ 1508db2bae30SDana Myers 1509db2bae30SDana Myers typedef struct acpi_hest_notify 1510db2bae30SDana Myers { 1511db2bae30SDana Myers UINT8 Type; 1512db2bae30SDana Myers UINT8 Length; 1513db2bae30SDana Myers UINT16 ConfigWriteEnable; 1514db2bae30SDana Myers UINT32 PollInterval; 1515db2bae30SDana Myers UINT32 Vector; 1516db2bae30SDana Myers UINT32 PollingThresholdValue; 1517db2bae30SDana Myers UINT32 PollingThresholdWindow; 1518db2bae30SDana Myers UINT32 ErrorThresholdValue; 1519db2bae30SDana Myers UINT32 ErrorThresholdWindow; 1520db2bae30SDana Myers 1521db2bae30SDana Myers } ACPI_HEST_NOTIFY; 1522db2bae30SDana Myers 1523db2bae30SDana Myers /* Values for Notify Type field above */ 1524db2bae30SDana Myers 1525db2bae30SDana Myers enum AcpiHestNotifyTypes 1526db2bae30SDana Myers { 1527db2bae30SDana Myers ACPI_HEST_NOTIFY_POLLED = 0, 1528db2bae30SDana Myers ACPI_HEST_NOTIFY_EXTERNAL = 1, 1529db2bae30SDana Myers ACPI_HEST_NOTIFY_LOCAL = 2, 1530db2bae30SDana Myers ACPI_HEST_NOTIFY_SCI = 3, 1531db2bae30SDana Myers ACPI_HEST_NOTIFY_NMI = 4, 15327b1019a6SJerry Jelinek ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 15337b1019a6SJerry Jelinek ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 15347b1019a6SJerry Jelinek ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 15357b1019a6SJerry Jelinek ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 15367b1019a6SJerry Jelinek ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 15377b1019a6SJerry Jelinek ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 1538*35786f68SRobert Mustacchi ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ 1539*35786f68SRobert Mustacchi ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ 1540db2bae30SDana Myers }; 1541db2bae30SDana Myers 154257190917SDana Myers /* Values for ConfigWriteEnable bitfield above */ 154357190917SDana Myers 154457190917SDana Myers #define ACPI_HEST_TYPE (1) 154557190917SDana Myers #define ACPI_HEST_POLL_INTERVAL (1<<1) 154657190917SDana Myers #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 154757190917SDana Myers #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 154857190917SDana Myers #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 154957190917SDana Myers #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 155057190917SDana Myers 1551db2bae30SDana Myers 1552db2bae30SDana Myers /* 1553db2bae30SDana Myers * HEST subtables 1554db2bae30SDana Myers */ 1555db2bae30SDana Myers 155657190917SDana Myers /* 0: IA32 Machine Check Exception */ 1557db2bae30SDana Myers 155857190917SDana Myers typedef struct acpi_hest_ia_machine_check 1559db2bae30SDana Myers { 1560db2bae30SDana Myers ACPI_HEST_HEADER Header; 156157190917SDana Myers UINT16 Reserved1; 1562*35786f68SRobert Mustacchi UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 156357190917SDana Myers UINT8 Enabled; 156457190917SDana Myers UINT32 RecordsToPreallocate; 1565db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 1566db2bae30SDana Myers UINT64 GlobalCapabilityData; 1567db2bae30SDana Myers UINT64 GlobalControlData; 1568db2bae30SDana Myers UINT8 NumHardwareBanks; 156957190917SDana Myers UINT8 Reserved3[7]; 1570db2bae30SDana Myers 157157190917SDana Myers } ACPI_HEST_IA_MACHINE_CHECK; 1572db2bae30SDana Myers 1573db2bae30SDana Myers 157457190917SDana Myers /* 1: IA32 Corrected Machine Check */ 1575db2bae30SDana Myers 157657190917SDana Myers typedef struct acpi_hest_ia_corrected 1577db2bae30SDana Myers { 1578db2bae30SDana Myers ACPI_HEST_HEADER Header; 157957190917SDana Myers UINT16 Reserved1; 1580*35786f68SRobert Mustacchi UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1581db2bae30SDana Myers UINT8 Enabled; 158257190917SDana Myers UINT32 RecordsToPreallocate; 1583db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 1584db2bae30SDana Myers ACPI_HEST_NOTIFY Notify; 1585db2bae30SDana Myers UINT8 NumHardwareBanks; 158657190917SDana Myers UINT8 Reserved2[3]; 1587db2bae30SDana Myers 158857190917SDana Myers } ACPI_HEST_IA_CORRECTED; 1589db2bae30SDana Myers 1590db2bae30SDana Myers 159157190917SDana Myers /* 2: IA32 Non-Maskable Interrupt */ 1592db2bae30SDana Myers 159357190917SDana Myers typedef struct acpi_hest_ia_nmi 1594db2bae30SDana Myers { 1595db2bae30SDana Myers ACPI_HEST_HEADER Header; 1596db2bae30SDana Myers UINT32 Reserved; 159757190917SDana Myers UINT32 RecordsToPreallocate; 1598db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 1599db2bae30SDana Myers UINT32 MaxRawDataLength; 1600db2bae30SDana Myers 160157190917SDana Myers } ACPI_HEST_IA_NMI; 1602db2bae30SDana Myers 1603db2bae30SDana Myers 160457190917SDana Myers /* 3,4,5: Not used */ 1605db2bae30SDana Myers 1606db2bae30SDana Myers /* 6: PCI Express Root Port AER */ 1607db2bae30SDana Myers 1608db2bae30SDana Myers typedef struct acpi_hest_aer_root 1609db2bae30SDana Myers { 1610db2bae30SDana Myers ACPI_HEST_HEADER Header; 1611db2bae30SDana Myers ACPI_HEST_AER_COMMON Aer; 1612db2bae30SDana Myers UINT32 RootErrorCommand; 1613db2bae30SDana Myers 1614db2bae30SDana Myers } ACPI_HEST_AER_ROOT; 1615db2bae30SDana Myers 1616db2bae30SDana Myers 1617db2bae30SDana Myers /* 7: PCI Express AER (AER Endpoint) */ 1618db2bae30SDana Myers 1619db2bae30SDana Myers typedef struct acpi_hest_aer 1620db2bae30SDana Myers { 1621db2bae30SDana Myers ACPI_HEST_HEADER Header; 1622db2bae30SDana Myers ACPI_HEST_AER_COMMON Aer; 1623db2bae30SDana Myers 1624db2bae30SDana Myers } ACPI_HEST_AER; 1625db2bae30SDana Myers 1626db2bae30SDana Myers 1627db2bae30SDana Myers /* 8: PCI Express/PCI-X Bridge AER */ 1628db2bae30SDana Myers 1629db2bae30SDana Myers typedef struct acpi_hest_aer_bridge 1630db2bae30SDana Myers { 1631db2bae30SDana Myers ACPI_HEST_HEADER Header; 1632db2bae30SDana Myers ACPI_HEST_AER_COMMON Aer; 163357190917SDana Myers UINT32 UncorrectableMask2; 163457190917SDana Myers UINT32 UncorrectableSeverity2; 163557190917SDana Myers UINT32 AdvancedCapabilities2; 1636db2bae30SDana Myers 1637db2bae30SDana Myers } ACPI_HEST_AER_BRIDGE; 1638db2bae30SDana Myers 1639db2bae30SDana Myers 1640db2bae30SDana Myers /* 9: Generic Hardware Error Source */ 1641db2bae30SDana Myers 1642db2bae30SDana Myers typedef struct acpi_hest_generic 1643db2bae30SDana Myers { 1644db2bae30SDana Myers ACPI_HEST_HEADER Header; 1645db2bae30SDana Myers UINT16 RelatedSourceId; 164657190917SDana Myers UINT8 Reserved; 1647db2bae30SDana Myers UINT8 Enabled; 164857190917SDana Myers UINT32 RecordsToPreallocate; 1649db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 1650db2bae30SDana Myers UINT32 MaxRawDataLength; 1651db2bae30SDana Myers ACPI_GENERIC_ADDRESS ErrorStatusAddress; 1652db2bae30SDana Myers ACPI_HEST_NOTIFY Notify; 165357190917SDana Myers UINT32 ErrorBlockLength; 1654db2bae30SDana Myers 1655db2bae30SDana Myers } ACPI_HEST_GENERIC; 165627f7c583Smyers 165727f7c583Smyers 16587b1019a6SJerry Jelinek /* 10: Generic Hardware Error Source, version 2 */ 16597b1019a6SJerry Jelinek 16607b1019a6SJerry Jelinek typedef struct acpi_hest_generic_v2 16617b1019a6SJerry Jelinek { 16627b1019a6SJerry Jelinek ACPI_HEST_HEADER Header; 16637b1019a6SJerry Jelinek UINT16 RelatedSourceId; 16647b1019a6SJerry Jelinek UINT8 Reserved; 16657b1019a6SJerry Jelinek UINT8 Enabled; 16667b1019a6SJerry Jelinek UINT32 RecordsToPreallocate; 16677b1019a6SJerry Jelinek UINT32 MaxSectionsPerRecord; 16687b1019a6SJerry Jelinek UINT32 MaxRawDataLength; 16697b1019a6SJerry Jelinek ACPI_GENERIC_ADDRESS ErrorStatusAddress; 16707b1019a6SJerry Jelinek ACPI_HEST_NOTIFY Notify; 16717b1019a6SJerry Jelinek UINT32 ErrorBlockLength; 16727b1019a6SJerry Jelinek ACPI_GENERIC_ADDRESS ReadAckRegister; 16737b1019a6SJerry Jelinek UINT64 ReadAckPreserve; 16747b1019a6SJerry Jelinek UINT64 ReadAckWrite; 16757b1019a6SJerry Jelinek 16767b1019a6SJerry Jelinek } ACPI_HEST_GENERIC_V2; 16777b1019a6SJerry Jelinek 16787b1019a6SJerry Jelinek 167957190917SDana Myers /* Generic Error Status block */ 168027f7c583Smyers 168157190917SDana Myers typedef struct acpi_hest_generic_status 168227f7c583Smyers { 168357190917SDana Myers UINT32 BlockStatus; 168457190917SDana Myers UINT32 RawDataOffset; 168557190917SDana Myers UINT32 RawDataLength; 168657190917SDana Myers UINT32 DataLength; 168757190917SDana Myers UINT32 ErrorSeverity; 168857190917SDana Myers 168957190917SDana Myers } ACPI_HEST_GENERIC_STATUS; 169057190917SDana Myers 169157190917SDana Myers /* Values for BlockStatus flags above */ 169257190917SDana Myers 169357190917SDana Myers #define ACPI_HEST_UNCORRECTABLE (1) 169457190917SDana Myers #define ACPI_HEST_CORRECTABLE (1<<1) 169557190917SDana Myers #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 169657190917SDana Myers #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 169757190917SDana Myers #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 169857190917SDana Myers 169957190917SDana Myers 170057190917SDana Myers /* Generic Error Data entry */ 170157190917SDana Myers 170257190917SDana Myers typedef struct acpi_hest_generic_data 170357190917SDana Myers { 170457190917SDana Myers UINT8 SectionType[16]; 170557190917SDana Myers UINT32 ErrorSeverity; 170657190917SDana Myers UINT16 Revision; 170757190917SDana Myers UINT8 ValidationBits; 1708db2bae30SDana Myers UINT8 Flags; 170957190917SDana Myers UINT32 ErrorDataLength; 171057190917SDana Myers UINT8 FruId[16]; 171157190917SDana Myers UINT8 FruText[20]; 171227f7c583Smyers 171357190917SDana Myers } ACPI_HEST_GENERIC_DATA; 171427f7c583Smyers 17157b1019a6SJerry Jelinek /* Extension for revision 0x0300 */ 17167b1019a6SJerry Jelinek 17177b1019a6SJerry Jelinek typedef struct acpi_hest_generic_data_v300 17187b1019a6SJerry Jelinek { 17197b1019a6SJerry Jelinek UINT8 SectionType[16]; 17207b1019a6SJerry Jelinek UINT32 ErrorSeverity; 17217b1019a6SJerry Jelinek UINT16 Revision; 17227b1019a6SJerry Jelinek UINT8 ValidationBits; 17237b1019a6SJerry Jelinek UINT8 Flags; 17247b1019a6SJerry Jelinek UINT32 ErrorDataLength; 17257b1019a6SJerry Jelinek UINT8 FruId[16]; 17267b1019a6SJerry Jelinek UINT8 FruText[20]; 17277b1019a6SJerry Jelinek UINT64 TimeStamp; 17287b1019a6SJerry Jelinek 17297b1019a6SJerry Jelinek } ACPI_HEST_GENERIC_DATA_V300; 17307b1019a6SJerry Jelinek 17317b1019a6SJerry Jelinek /* Values for ErrorSeverity above */ 17327b1019a6SJerry Jelinek 17337b1019a6SJerry Jelinek #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 17347b1019a6SJerry Jelinek #define ACPI_HEST_GEN_ERROR_FATAL 1 17357b1019a6SJerry Jelinek #define ACPI_HEST_GEN_ERROR_CORRECTED 2 17367b1019a6SJerry Jelinek #define ACPI_HEST_GEN_ERROR_NONE 3 17377b1019a6SJerry Jelinek 17387b1019a6SJerry Jelinek /* Flags for ValidationBits above */ 17397b1019a6SJerry Jelinek 17407b1019a6SJerry Jelinek #define ACPI_HEST_GEN_VALID_FRU_ID (1) 17417b1019a6SJerry Jelinek #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 17427b1019a6SJerry Jelinek #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 17437b1019a6SJerry Jelinek 174427f7c583Smyers 1745*35786f68SRobert Mustacchi /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ 174627f7c583Smyers 1747*35786f68SRobert Mustacchi typedef struct acpi_hest_ia_deferred_check 174827f7c583Smyers { 1749*35786f68SRobert Mustacchi ACPI_HEST_HEADER Header; 1750*35786f68SRobert Mustacchi UINT16 Reserved1; 1751*35786f68SRobert Mustacchi UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1752*35786f68SRobert Mustacchi UINT8 Enabled; 1753*35786f68SRobert Mustacchi UINT32 RecordsToPreallocate; 1754*35786f68SRobert Mustacchi UINT32 MaxSectionsPerRecord; 1755*35786f68SRobert Mustacchi ACPI_HEST_NOTIFY Notify; 1756*35786f68SRobert Mustacchi UINT8 NumHardwareBanks; 17577b1019a6SJerry Jelinek UINT8 Reserved2[3]; 17587b1019a6SJerry Jelinek 1759*35786f68SRobert Mustacchi } ACPI_HEST_IA_DEFERRED_CHECK; 17607b1019a6SJerry Jelinek 17617b1019a6SJerry Jelinek 1762*35786f68SRobert Mustacchi /******************************************************************************* 1763*35786f68SRobert Mustacchi * 1764*35786f68SRobert Mustacchi * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) 1765*35786f68SRobert Mustacchi * Version 1 1766*35786f68SRobert Mustacchi * 1767*35786f68SRobert Mustacchi ******************************************************************************/ 17687b1019a6SJerry Jelinek 1769*35786f68SRobert Mustacchi typedef struct acpi_table_hmat 17707b1019a6SJerry Jelinek { 1771*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1772*35786f68SRobert Mustacchi UINT32 Reserved; 17737b1019a6SJerry Jelinek 1774*35786f68SRobert Mustacchi } ACPI_TABLE_HMAT; 17757b1019a6SJerry Jelinek 17767b1019a6SJerry Jelinek 1777*35786f68SRobert Mustacchi /* Values for HMAT structure types */ 1778*35786f68SRobert Mustacchi 1779*35786f68SRobert Mustacchi enum AcpiHmatType 17807b1019a6SJerry Jelinek { 1781*35786f68SRobert Mustacchi ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ 1782*35786f68SRobert Mustacchi ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ 1783*35786f68SRobert Mustacchi ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ 1784*35786f68SRobert Mustacchi ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 17857b1019a6SJerry Jelinek }; 17867b1019a6SJerry Jelinek 1787*35786f68SRobert Mustacchi typedef struct acpi_hmat_structure 17887b1019a6SJerry Jelinek { 17897b1019a6SJerry Jelinek UINT16 Type; 1790*35786f68SRobert Mustacchi UINT16 Reserved; 1791*35786f68SRobert Mustacchi UINT32 Length; 17927b1019a6SJerry Jelinek 1793*35786f68SRobert Mustacchi } ACPI_HMAT_STRUCTURE; 17947b1019a6SJerry Jelinek 17957b1019a6SJerry Jelinek 17967b1019a6SJerry Jelinek /* 1797*35786f68SRobert Mustacchi * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE 17987b1019a6SJerry Jelinek */ 17997b1019a6SJerry Jelinek 1800*35786f68SRobert Mustacchi /* 0: Memory subystem address range */ 18017b1019a6SJerry Jelinek 1802*35786f68SRobert Mustacchi typedef struct acpi_hmat_address_range 18037b1019a6SJerry Jelinek { 1804*35786f68SRobert Mustacchi ACPI_HMAT_STRUCTURE Header; 18057b1019a6SJerry Jelinek UINT16 Flags; 1806*35786f68SRobert Mustacchi UINT16 Reserved1; 1807*35786f68SRobert Mustacchi UINT32 ProcessorPD; /* Processor proximity domain */ 1808*35786f68SRobert Mustacchi UINT32 MemoryPD; /* Memory proximity domain */ 180957190917SDana Myers UINT32 Reserved2; 1810*35786f68SRobert Mustacchi UINT64 PhysicalAddressBase; /* Physical address range base */ 1811*35786f68SRobert Mustacchi UINT64 PhysicalAddressLength; /* Physical address range length */ 1812db2bae30SDana Myers 1813*35786f68SRobert Mustacchi } ACPI_HMAT_ADDRESS_RANGE; 1814db2bae30SDana Myers 1815*35786f68SRobert Mustacchi /* Masks for Flags field above */ 1816db2bae30SDana Myers 1817*35786f68SRobert Mustacchi #define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ 1818*35786f68SRobert Mustacchi #define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ 1819*35786f68SRobert Mustacchi #define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ 182027f7c583Smyers 182127f7c583Smyers 1822*35786f68SRobert Mustacchi /* 1: System locality latency and bandwidth information */ 18237b1019a6SJerry Jelinek 1824*35786f68SRobert Mustacchi typedef struct acpi_hmat_locality 18257b1019a6SJerry Jelinek { 1826*35786f68SRobert Mustacchi ACPI_HMAT_STRUCTURE Header; 1827*35786f68SRobert Mustacchi UINT8 Flags; 1828*35786f68SRobert Mustacchi UINT8 DataType; 1829*35786f68SRobert Mustacchi UINT16 Reserved1; 1830*35786f68SRobert Mustacchi UINT32 NumberOfInitiatorPDs; 1831*35786f68SRobert Mustacchi UINT32 NumberOfTargetPDs; 1832*35786f68SRobert Mustacchi UINT32 Reserved2; 1833*35786f68SRobert Mustacchi UINT64 EntryBaseUnit; 18347b1019a6SJerry Jelinek 1835*35786f68SRobert Mustacchi } ACPI_HMAT_LOCALITY; 18367b1019a6SJerry Jelinek 1837*35786f68SRobert Mustacchi /* Masks for Flags field above */ 18387b1019a6SJerry Jelinek 1839*35786f68SRobert Mustacchi #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) 1840*35786f68SRobert Mustacchi 1841*35786f68SRobert Mustacchi /* Values for Memory Hierarchy flag */ 1842*35786f68SRobert Mustacchi 1843*35786f68SRobert Mustacchi #define ACPI_HMAT_MEMORY 0 1844*35786f68SRobert Mustacchi #define ACPI_HMAT_LAST_LEVEL_CACHE 1 1845*35786f68SRobert Mustacchi #define ACPI_HMAT_1ST_LEVEL_CACHE 2 1846*35786f68SRobert Mustacchi #define ACPI_HMAT_2ND_LEVEL_CACHE 3 1847*35786f68SRobert Mustacchi #define ACPI_HMAT_3RD_LEVEL_CACHE 4 1848*35786f68SRobert Mustacchi 1849*35786f68SRobert Mustacchi /* Values for DataType field above */ 1850*35786f68SRobert Mustacchi 1851*35786f68SRobert Mustacchi #define ACPI_HMAT_ACCESS_LATENCY 0 1852*35786f68SRobert Mustacchi #define ACPI_HMAT_READ_LATENCY 1 1853*35786f68SRobert Mustacchi #define ACPI_HMAT_WRITE_LATENCY 2 1854*35786f68SRobert Mustacchi #define ACPI_HMAT_ACCESS_BANDWIDTH 3 1855*35786f68SRobert Mustacchi #define ACPI_HMAT_READ_BANDWIDTH 4 1856*35786f68SRobert Mustacchi #define ACPI_HMAT_WRITE_BANDWIDTH 5 1857*35786f68SRobert Mustacchi 1858*35786f68SRobert Mustacchi 1859*35786f68SRobert Mustacchi /* 2: Memory side cache information */ 1860*35786f68SRobert Mustacchi 1861*35786f68SRobert Mustacchi typedef struct acpi_hmat_cache 1862*35786f68SRobert Mustacchi { 1863*35786f68SRobert Mustacchi ACPI_HMAT_STRUCTURE Header; 1864*35786f68SRobert Mustacchi UINT32 MemoryPD; 1865*35786f68SRobert Mustacchi UINT32 Reserved1; 1866*35786f68SRobert Mustacchi UINT64 CacheSize; 1867*35786f68SRobert Mustacchi UINT32 CacheAttributes; 1868*35786f68SRobert Mustacchi UINT16 Reserved2; 1869*35786f68SRobert Mustacchi UINT16 NumberOfSMBIOSHandles; 1870*35786f68SRobert Mustacchi 1871*35786f68SRobert Mustacchi } ACPI_HMAT_CACHE; 1872*35786f68SRobert Mustacchi 1873*35786f68SRobert Mustacchi /* Masks for CacheAttributes field above */ 1874*35786f68SRobert Mustacchi 1875*35786f68SRobert Mustacchi #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) 1876*35786f68SRobert Mustacchi #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) 1877*35786f68SRobert Mustacchi #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) 1878*35786f68SRobert Mustacchi #define ACPI_HMAT_WRITE_POLICY (0x0000F000) 1879*35786f68SRobert Mustacchi #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) 1880*35786f68SRobert Mustacchi 1881*35786f68SRobert Mustacchi /* Values for cache associativity flag */ 1882*35786f68SRobert Mustacchi 1883*35786f68SRobert Mustacchi #define ACPI_HMAT_CA_NONE (0) 1884*35786f68SRobert Mustacchi #define ACPI_HMAT_CA_DIRECT_MAPPED (1) 1885*35786f68SRobert Mustacchi #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) 1886*35786f68SRobert Mustacchi 1887*35786f68SRobert Mustacchi /* Values for write policy flag */ 1888*35786f68SRobert Mustacchi 1889*35786f68SRobert Mustacchi #define ACPI_HMAT_CP_NONE (0) 1890*35786f68SRobert Mustacchi #define ACPI_HMAT_CP_WB (1) 1891*35786f68SRobert Mustacchi #define ACPI_HMAT_CP_WT (2) 1892*35786f68SRobert Mustacchi 1893*35786f68SRobert Mustacchi 1894*35786f68SRobert Mustacchi /******************************************************************************* 1895*35786f68SRobert Mustacchi * 1896*35786f68SRobert Mustacchi * HPET - High Precision Event Timer table 1897*35786f68SRobert Mustacchi * Version 1 1898*35786f68SRobert Mustacchi * 1899*35786f68SRobert Mustacchi * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", 1900*35786f68SRobert Mustacchi * Version 1.0a, October 2004 1901*35786f68SRobert Mustacchi * 1902*35786f68SRobert Mustacchi ******************************************************************************/ 1903*35786f68SRobert Mustacchi 1904*35786f68SRobert Mustacchi typedef struct acpi_table_hpet 1905*35786f68SRobert Mustacchi { 1906*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1907*35786f68SRobert Mustacchi UINT32 Id; /* Hardware ID of event timer block */ 1908*35786f68SRobert Mustacchi ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ 1909*35786f68SRobert Mustacchi UINT8 Sequence; /* HPET sequence number */ 1910*35786f68SRobert Mustacchi UINT16 MinimumTick; /* Main counter min tick, periodic mode */ 1911*35786f68SRobert Mustacchi UINT8 Flags; 1912*35786f68SRobert Mustacchi 1913*35786f68SRobert Mustacchi } ACPI_TABLE_HPET; 1914*35786f68SRobert Mustacchi 1915*35786f68SRobert Mustacchi /* Masks for Flags field above */ 1916*35786f68SRobert Mustacchi 1917*35786f68SRobert Mustacchi #define ACPI_HPET_PAGE_PROTECT_MASK (3) 1918*35786f68SRobert Mustacchi 1919*35786f68SRobert Mustacchi /* Values for Page Protect flags */ 1920*35786f68SRobert Mustacchi 1921*35786f68SRobert Mustacchi enum AcpiHpetPageProtect 1922*35786f68SRobert Mustacchi { 1923*35786f68SRobert Mustacchi ACPI_HPET_NO_PAGE_PROTECT = 0, 1924*35786f68SRobert Mustacchi ACPI_HPET_PAGE_PROTECT4 = 1, 1925*35786f68SRobert Mustacchi ACPI_HPET_PAGE_PROTECT64 = 2 1926*35786f68SRobert Mustacchi }; 1927*35786f68SRobert Mustacchi 1928*35786f68SRobert Mustacchi 1929*35786f68SRobert Mustacchi /******************************************************************************* 1930*35786f68SRobert Mustacchi * 1931*35786f68SRobert Mustacchi * IBFT - Boot Firmware Table 1932*35786f68SRobert Mustacchi * Version 1 1933*35786f68SRobert Mustacchi * 1934*35786f68SRobert Mustacchi * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b 1935*35786f68SRobert Mustacchi * Specification", Version 1.01, March 1, 2007 1936*35786f68SRobert Mustacchi * 1937*35786f68SRobert Mustacchi * Note: It appears that this table is not intended to appear in the RSDT/XSDT. 1938*35786f68SRobert Mustacchi * Therefore, it is not currently supported by the disassembler. 1939*35786f68SRobert Mustacchi * 1940*35786f68SRobert Mustacchi ******************************************************************************/ 1941*35786f68SRobert Mustacchi 1942*35786f68SRobert Mustacchi typedef struct acpi_table_ibft 1943*35786f68SRobert Mustacchi { 1944*35786f68SRobert Mustacchi ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1945*35786f68SRobert Mustacchi UINT8 Reserved[12]; 1946*35786f68SRobert Mustacchi 1947*35786f68SRobert Mustacchi } ACPI_TABLE_IBFT; 1948*35786f68SRobert Mustacchi 1949*35786f68SRobert Mustacchi 1950*35786f68SRobert Mustacchi /* IBFT common subtable header */ 1951*35786f68SRobert Mustacchi 1952*35786f68SRobert Mustacchi typedef struct acpi_ibft_header 1953*35786f68SRobert Mustacchi { 1954*35786f68SRobert Mustacchi UINT8 Type; 1955*35786f68SRobert Mustacchi UINT8 Version; 1956*35786f68SRobert Mustacchi UINT16 Length; 1957*35786f68SRobert Mustacchi UINT8 Index; 1958*35786f68SRobert Mustacchi UINT8 Flags; 1959*35786f68SRobert Mustacchi 1960*35786f68SRobert Mustacchi } ACPI_IBFT_HEADER; 1961*35786f68SRobert Mustacchi 1962*35786f68SRobert Mustacchi /* Values for Type field above */ 1963*35786f68SRobert Mustacchi 1964*35786f68SRobert Mustacchi enum AcpiIbftType 1965*35786f68SRobert Mustacchi { 1966*35786f68SRobert Mustacchi ACPI_IBFT_TYPE_NOT_USED = 0, 1967*35786f68SRobert Mustacchi ACPI_IBFT_TYPE_CONTROL = 1, 1968*35786f68SRobert Mustacchi ACPI_IBFT_TYPE_INITIATOR = 2, 1969*35786f68SRobert Mustacchi ACPI_IBFT_TYPE_NIC = 3, 1970*35786f68SRobert Mustacchi ACPI_IBFT_TYPE_TARGET = 4, 1971*35786f68SRobert Mustacchi ACPI_IBFT_TYPE_EXTENSIONS = 5, 1972*35786f68SRobert Mustacchi ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 1973*35786f68SRobert Mustacchi }; 1974*35786f68SRobert Mustacchi 1975*35786f68SRobert Mustacchi 1976*35786f68SRobert Mustacchi /* IBFT subtables */ 1977*35786f68SRobert Mustacchi 1978*35786f68SRobert Mustacchi typedef struct acpi_ibft_control 1979*35786f68SRobert Mustacchi { 1980*35786f68SRobert Mustacchi ACPI_IBFT_HEADER Header; 1981*35786f68SRobert Mustacchi UINT16 Extensions; 1982*35786f68SRobert Mustacchi UINT16 InitiatorOffset; 1983*35786f68SRobert Mustacchi UINT16 Nic0Offset; 1984*35786f68SRobert Mustacchi UINT16 Target0Offset; 1985*35786f68SRobert Mustacchi UINT16 Nic1Offset; 1986*35786f68SRobert Mustacchi UINT16 Target1Offset; 1987*35786f68SRobert Mustacchi 1988*35786f68SRobert Mustacchi } ACPI_IBFT_CONTROL; 1989*35786f68SRobert Mustacchi 1990*35786f68SRobert Mustacchi typedef struct acpi_ibft_initiator 1991*35786f68SRobert Mustacchi { 1992*35786f68SRobert Mustacchi ACPI_IBFT_HEADER Header; 1993*35786f68SRobert Mustacchi UINT8 SnsServer[16]; 1994*35786f68SRobert Mustacchi UINT8 SlpServer[16]; 1995*35786f68SRobert Mustacchi UINT8 PrimaryServer[16]; 1996*35786f68SRobert Mustacchi UINT8 SecondaryServer[16]; 1997*35786f68SRobert Mustacchi UINT16 NameLength; 1998*35786f68SRobert Mustacchi UINT16 NameOffset; 1999*35786f68SRobert Mustacchi 2000*35786f68SRobert Mustacchi } ACPI_IBFT_INITIATOR; 2001*35786f68SRobert Mustacchi 2002*35786f68SRobert Mustacchi typedef struct acpi_ibft_nic 2003*35786f68SRobert Mustacchi { 2004*35786f68SRobert Mustacchi ACPI_IBFT_HEADER Header; 2005*35786f68SRobert Mustacchi UINT8 IpAddress[16]; 2006*35786f68SRobert Mustacchi UINT8 SubnetMaskPrefix; 2007*35786f68SRobert Mustacchi UINT8 Origin; 2008*35786f68SRobert Mustacchi UINT8 Gateway[16]; 2009*35786f68SRobert Mustacchi UINT8 PrimaryDns[16]; 2010*35786f68SRobert Mustacchi UINT8 SecondaryDns[16]; 2011*35786f68SRobert Mustacchi UINT8 Dhcp[16]; 2012*35786f68SRobert Mustacchi UINT16 Vlan; 2013*35786f68SRobert Mustacchi UINT8 MacAddress[6]; 2014*35786f68SRobert Mustacchi UINT16 PciAddress; 2015*35786f68SRobert Mustacchi UINT16 NameLength; 2016*35786f68SRobert Mustacchi UINT16 NameOffset; 2017*35786f68SRobert Mustacchi 2018*35786f68SRobert Mustacchi } ACPI_IBFT_NIC; 2019*35786f68SRobert Mustacchi 2020*35786f68SRobert Mustacchi typedef struct acpi_ibft_target 2021*35786f68SRobert Mustacchi { 2022*35786f68SRobert Mustacchi ACPI_IBFT_HEADER Header; 2023*35786f68SRobert Mustacchi UINT8 TargetIpAddress[16]; 2024*35786f68SRobert Mustacchi UINT16 TargetIpSocket; 2025*35786f68SRobert Mustacchi UINT8 TargetBootLun[8]; 2026*35786f68SRobert Mustacchi UINT8 ChapType; 2027*35786f68SRobert Mustacchi UINT8 NicAssociation; 2028*35786f68SRobert Mustacchi UINT16 TargetNameLength; 2029*35786f68SRobert Mustacchi UINT16 TargetNameOffset; 2030*35786f68SRobert Mustacchi UINT16 ChapNameLength; 2031*35786f68SRobert Mustacchi UINT16 ChapNameOffset; 2032*35786f68SRobert Mustacchi UINT16 ChapSecretLength; 2033*35786f68SRobert Mustacchi UINT16 ChapSecretOffset; 2034*35786f68SRobert Mustacchi UINT16 ReverseChapNameLength; 2035*35786f68SRobert Mustacchi UINT16 ReverseChapNameOffset; 2036*35786f68SRobert Mustacchi UINT16 ReverseChapSecretLength; 2037*35786f68SRobert Mustacchi UINT16 ReverseChapSecretOffset; 2038*35786f68SRobert Mustacchi 2039*35786f68SRobert Mustacchi } ACPI_IBFT_TARGET; 20407b1019a6SJerry Jelinek 20417b1019a6SJerry Jelinek 204227f7c583Smyers /* Reset to default packing */ 20437c478bd9Sstevel@tonic-gate 20447c478bd9Sstevel@tonic-gate #pragma pack() 20457c478bd9Sstevel@tonic-gate 20467c478bd9Sstevel@tonic-gate #endif /* __ACTBL1_H__ */ 2047