11da177e4SLinus Torvalds /****************************************************************************** 21da177e4SLinus Torvalds * 3793c2388SBob Moore * Name: actbl1.h - Additional ACPI table definitions 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds *****************************************************************************/ 61da177e4SLinus Torvalds 71da177e4SLinus Torvalds /* 87735ca0eSBob Moore * Copyright (C) 2000 - 2017, Intel Corp. 91da177e4SLinus Torvalds * All rights reserved. 101da177e4SLinus Torvalds * 111da177e4SLinus Torvalds * Redistribution and use in source and binary forms, with or without 121da177e4SLinus Torvalds * modification, are permitted provided that the following conditions 131da177e4SLinus Torvalds * are met: 141da177e4SLinus Torvalds * 1. Redistributions of source code must retain the above copyright 151da177e4SLinus Torvalds * notice, this list of conditions, and the following disclaimer, 161da177e4SLinus Torvalds * without modification. 171da177e4SLinus Torvalds * 2. Redistributions in binary form must reproduce at minimum a disclaimer 181da177e4SLinus Torvalds * substantially similar to the "NO WARRANTY" disclaimer below 191da177e4SLinus Torvalds * ("Disclaimer") and any redistribution must be conditioned upon 201da177e4SLinus Torvalds * including a substantially similar Disclaimer requirement for further 211da177e4SLinus Torvalds * binary redistribution. 221da177e4SLinus Torvalds * 3. Neither the names of the above-listed copyright holders nor the names 231da177e4SLinus Torvalds * of any contributors may be used to endorse or promote products derived 241da177e4SLinus Torvalds * from this software without specific prior written permission. 251da177e4SLinus Torvalds * 261da177e4SLinus Torvalds * Alternatively, this software may be distributed under the terms of the 271da177e4SLinus Torvalds * GNU General Public License ("GPL") version 2 as published by the Free 281da177e4SLinus Torvalds * Software Foundation. 291da177e4SLinus Torvalds * 301da177e4SLinus Torvalds * NO WARRANTY 311da177e4SLinus Torvalds * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 321da177e4SLinus Torvalds * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 331da177e4SLinus Torvalds * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 341da177e4SLinus Torvalds * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 351da177e4SLinus Torvalds * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 361da177e4SLinus Torvalds * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 371da177e4SLinus Torvalds * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 381da177e4SLinus Torvalds * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 391da177e4SLinus Torvalds * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 401da177e4SLinus Torvalds * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 411da177e4SLinus Torvalds * POSSIBILITY OF SUCH DAMAGES. 421da177e4SLinus Torvalds */ 431da177e4SLinus Torvalds 441da177e4SLinus Torvalds #ifndef __ACTBL1_H__ 451da177e4SLinus Torvalds #define __ACTBL1_H__ 461da177e4SLinus Torvalds 47793c2388SBob Moore /******************************************************************************* 48793c2388SBob Moore * 49b24aad44SBob Moore * Additional ACPI Tables (1) 50793c2388SBob Moore * 51793c2388SBob Moore * These tables are not consumed directly by the ACPICA subsystem, but are 52793c2388SBob Moore * included here to support device drivers and the AML disassembler. 53793c2388SBob Moore * 54b24aad44SBob Moore * The tables in this file are fully defined within the ACPI specification. 55b24aad44SBob Moore * 56793c2388SBob Moore ******************************************************************************/ 57793c2388SBob Moore 58793c2388SBob Moore /* 596e2d5ebdSBob Moore * Values for description table header signatures for tables defined in this 606e2d5ebdSBob Moore * file. Useful because they make it more difficult to inadvertently type in 616e2d5ebdSBob Moore * the wrong signature. 62793c2388SBob Moore */ 63970d9c9eSBob Moore #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 64793c2388SBob Moore #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 65793c2388SBob Moore #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 66970d9c9eSBob Moore #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 67970d9c9eSBob Moore #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 68fa418ddfSLv Zheng #define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ 69970d9c9eSBob Moore #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 70793c2388SBob Moore #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 716e2d5ebdSBob Moore #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 72793c2388SBob Moore #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 73793c2388SBob Moore #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 74793c2388SBob Moore #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 7504f8e384SBob Moore #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 76793c2388SBob Moore 77793c2388SBob Moore /* 78793c2388SBob Moore * All tables must be byte-packed to match the ACPI specification, since 79793c2388SBob Moore * the tables are provided by the system BIOS. 80793c2388SBob Moore */ 811da177e4SLinus Torvalds #pragma pack(1) 821da177e4SLinus Torvalds 831da177e4SLinus Torvalds /* 84be030a57SBob Moore * Note: C bitfields are not used for this reason: 85be030a57SBob Moore * 86be030a57SBob Moore * "Bitfields are great and easy to read, but unfortunately the C language 87be030a57SBob Moore * does not specify the layout of bitfields in memory, which means they are 88be030a57SBob Moore * essentially useless for dealing with packed data in on-disk formats or 89be030a57SBob Moore * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 90be030a57SBob Moore * this decision was a design error in C. Ritchie could have picked an order 91be030a57SBob Moore * and stuck with it." Norman Ramsey. 92be030a57SBob Moore * See http://stackoverflow.com/a/1053662/41661 931da177e4SLinus Torvalds */ 94793c2388SBob Moore 956e2d5ebdSBob Moore /******************************************************************************* 966e2d5ebdSBob Moore * 976e2d5ebdSBob Moore * Common subtable headers 986e2d5ebdSBob Moore * 996e2d5ebdSBob Moore ******************************************************************************/ 1006e2d5ebdSBob Moore 1016e2d5ebdSBob Moore /* Generic subtable header (used in MADT, SRAT, etc.) */ 102f3d2e786SBob Moore 103f3d2e786SBob Moore struct acpi_subtable_header { 104f3d2e786SBob Moore u8 type; 105f3d2e786SBob Moore u8 length; 106f3d2e786SBob Moore }; 107f3d2e786SBob Moore 1086e2d5ebdSBob Moore /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 109970d9c9eSBob Moore 110970d9c9eSBob Moore struct acpi_whea_header { 111970d9c9eSBob Moore u8 action; 112970d9c9eSBob Moore u8 instruction; 113970d9c9eSBob Moore u8 flags; 114970d9c9eSBob Moore u8 reserved; 115970d9c9eSBob Moore struct acpi_generic_address register_region; 1163fa34777SBob Moore u64 value; /* Value used with Read/Write register */ 1173fa34777SBob Moore u64 mask; /* Bitmask required for this register instruction */ 118970d9c9eSBob Moore }; 119970d9c9eSBob Moore 120793c2388SBob Moore /******************************************************************************* 121793c2388SBob Moore * 1226e2d5ebdSBob Moore * BERT - Boot Error Record Table (ACPI 4.0) 1236e2d5ebdSBob Moore * Version 1 124970d9c9eSBob Moore * 125970d9c9eSBob Moore ******************************************************************************/ 126970d9c9eSBob Moore 127970d9c9eSBob Moore struct acpi_table_bert { 128970d9c9eSBob Moore struct acpi_table_header header; /* Common ACPI table header */ 129970d9c9eSBob Moore u32 region_length; /* Length of the boot error region */ 130b595076aSUwe Kleine-König u64 address; /* Physical address of the error region */ 131970d9c9eSBob Moore }; 132970d9c9eSBob Moore 1336e2d5ebdSBob Moore /* Boot Error Region (not a subtable, pointed to by Address field above) */ 1343fa34777SBob Moore 135970d9c9eSBob Moore struct acpi_bert_region { 1366e2d5ebdSBob Moore u32 block_status; /* Type of error information */ 1376e2d5ebdSBob Moore u32 raw_data_offset; /* Offset to raw error data */ 1386e2d5ebdSBob Moore u32 raw_data_length; /* Length of raw error data */ 1396e2d5ebdSBob Moore u32 data_length; /* Length of generic error data */ 1406e2d5ebdSBob Moore u32 error_severity; /* Severity code */ 141970d9c9eSBob Moore }; 142970d9c9eSBob Moore 1436e2d5ebdSBob Moore /* Values for block_status flags above */ 144970d9c9eSBob Moore 145970d9c9eSBob Moore #define ACPI_BERT_UNCORRECTABLE (1) 1466e2d5ebdSBob Moore #define ACPI_BERT_CORRECTABLE (1<<1) 1476e2d5ebdSBob Moore #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 1486e2d5ebdSBob Moore #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 1496e2d5ebdSBob Moore #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 1506e2d5ebdSBob Moore 1516e2d5ebdSBob Moore /* Values for error_severity above */ 1526e2d5ebdSBob Moore 1536e2d5ebdSBob Moore enum acpi_bert_error_severity { 1546e2d5ebdSBob Moore ACPI_BERT_ERROR_CORRECTABLE = 0, 1556e2d5ebdSBob Moore ACPI_BERT_ERROR_FATAL = 1, 1566e2d5ebdSBob Moore ACPI_BERT_ERROR_CORRECTED = 2, 1576e2d5ebdSBob Moore ACPI_BERT_ERROR_NONE = 3, 1586e2d5ebdSBob Moore ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 1596e2d5ebdSBob Moore }; 1606e2d5ebdSBob Moore 1616e2d5ebdSBob Moore /* 1626e2d5ebdSBob Moore * Note: The generic error data that follows the error_severity field above 1636e2d5ebdSBob Moore * uses the struct acpi_hest_generic_data defined under the HEST table below 1646e2d5ebdSBob Moore */ 165970d9c9eSBob Moore 166970d9c9eSBob Moore /******************************************************************************* 167970d9c9eSBob Moore * 1686e2d5ebdSBob Moore * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 1696e2d5ebdSBob Moore * Version 1 170793c2388SBob Moore * 171793c2388SBob Moore ******************************************************************************/ 172793c2388SBob Moore 173793c2388SBob Moore struct acpi_table_cpep { 174f3d2e786SBob Moore struct acpi_table_header header; /* Common ACPI table header */ 175f3d2e786SBob Moore u64 reserved; 176793c2388SBob Moore }; 177793c2388SBob Moore 178793c2388SBob Moore /* Subtable */ 179793c2388SBob Moore 180793c2388SBob Moore struct acpi_cpep_polling { 1816e2d5ebdSBob Moore struct acpi_subtable_header header; 182f3d2e786SBob Moore u8 id; /* Processor ID */ 183f3d2e786SBob Moore u8 eid; /* Processor EID */ 184f3d2e786SBob Moore u32 interval; /* Polling interval (msec) */ 185793c2388SBob Moore }; 186793c2388SBob Moore 187793c2388SBob Moore /******************************************************************************* 188793c2388SBob Moore * 189793c2388SBob Moore * ECDT - Embedded Controller Boot Resources Table 1906e2d5ebdSBob Moore * Version 1 191793c2388SBob Moore * 192793c2388SBob Moore ******************************************************************************/ 193793c2388SBob Moore 194f3d2e786SBob Moore struct acpi_table_ecdt { 195f3d2e786SBob Moore struct acpi_table_header header; /* Common ACPI table header */ 196f3d2e786SBob Moore struct acpi_generic_address control; /* Address of EC command/status register */ 197f3d2e786SBob Moore struct acpi_generic_address data; /* Address of EC data register */ 198793c2388SBob Moore u32 uid; /* Unique ID - must be same as the EC _UID method */ 199f3d2e786SBob Moore u8 gpe; /* The GPE for the EC */ 200f3d2e786SBob Moore u8 id[1]; /* Full namepath of the EC in the ACPI namespace */ 201793c2388SBob Moore }; 202793c2388SBob Moore 203793c2388SBob Moore /******************************************************************************* 204793c2388SBob Moore * 2056e2d5ebdSBob Moore * EINJ - Error Injection Table (ACPI 4.0) 2066e2d5ebdSBob Moore * Version 1 207970d9c9eSBob Moore * 208970d9c9eSBob Moore ******************************************************************************/ 209970d9c9eSBob Moore 210970d9c9eSBob Moore struct acpi_table_einj { 211970d9c9eSBob Moore struct acpi_table_header header; /* Common ACPI table header */ 212970d9c9eSBob Moore u32 header_length; 2136e2d5ebdSBob Moore u8 flags; 2146e2d5ebdSBob Moore u8 reserved[3]; 215970d9c9eSBob Moore u32 entries; 216970d9c9eSBob Moore }; 217970d9c9eSBob Moore 218970d9c9eSBob Moore /* EINJ Injection Instruction Entries (actions) */ 219970d9c9eSBob Moore 220970d9c9eSBob Moore struct acpi_einj_entry { 221970d9c9eSBob Moore struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 222970d9c9eSBob Moore }; 223970d9c9eSBob Moore 2246e2d5ebdSBob Moore /* Masks for Flags field above */ 2256e2d5ebdSBob Moore 2266e2d5ebdSBob Moore #define ACPI_EINJ_PRESERVE (1) 2276e2d5ebdSBob Moore 228970d9c9eSBob Moore /* Values for Action field above */ 229970d9c9eSBob Moore 230970d9c9eSBob Moore enum acpi_einj_actions { 231970d9c9eSBob Moore ACPI_EINJ_BEGIN_OPERATION = 0, 232970d9c9eSBob Moore ACPI_EINJ_GET_TRIGGER_TABLE = 1, 233970d9c9eSBob Moore ACPI_EINJ_SET_ERROR_TYPE = 2, 234970d9c9eSBob Moore ACPI_EINJ_GET_ERROR_TYPE = 3, 235970d9c9eSBob Moore ACPI_EINJ_END_OPERATION = 4, 236970d9c9eSBob Moore ACPI_EINJ_EXECUTE_OPERATION = 5, 237970d9c9eSBob Moore ACPI_EINJ_CHECK_BUSY_STATUS = 6, 238970d9c9eSBob Moore ACPI_EINJ_GET_COMMAND_STATUS = 7, 239c5bd6537SBob Moore ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 240a88e0ce6SBob Moore ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 241a88e0ce6SBob Moore ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 242970d9c9eSBob Moore ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 243970d9c9eSBob Moore }; 244970d9c9eSBob Moore 245970d9c9eSBob Moore /* Values for Instruction field above */ 246970d9c9eSBob Moore 247970d9c9eSBob Moore enum acpi_einj_instructions { 248970d9c9eSBob Moore ACPI_EINJ_READ_REGISTER = 0, 249970d9c9eSBob Moore ACPI_EINJ_READ_REGISTER_VALUE = 1, 250970d9c9eSBob Moore ACPI_EINJ_WRITE_REGISTER = 2, 251970d9c9eSBob Moore ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 252970d9c9eSBob Moore ACPI_EINJ_NOOP = 4, 253c5bd6537SBob Moore ACPI_EINJ_FLUSH_CACHELINE = 5, 254c5bd6537SBob Moore ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 255c5bd6537SBob Moore }; 256c5bd6537SBob Moore 257c5bd6537SBob Moore struct acpi_einj_error_type_with_addr { 258c5bd6537SBob Moore u32 error_type; 259c5bd6537SBob Moore u32 vendor_struct_offset; 260c5bd6537SBob Moore u32 flags; 261c5bd6537SBob Moore u32 apic_id; 262c5bd6537SBob Moore u64 address; 263c5bd6537SBob Moore u64 range; 264c5bd6537SBob Moore u32 pcie_id; 265c5bd6537SBob Moore }; 266c5bd6537SBob Moore 267c5bd6537SBob Moore struct acpi_einj_vendor { 268c5bd6537SBob Moore u32 length; 269c5bd6537SBob Moore u32 pcie_id; 270c5bd6537SBob Moore u16 vendor_id; 271c5bd6537SBob Moore u16 device_id; 272c5bd6537SBob Moore u8 revision_id; 273c5bd6537SBob Moore u8 reserved[3]; 274970d9c9eSBob Moore }; 275970d9c9eSBob Moore 2763fa34777SBob Moore /* EINJ Trigger Error Action Table */ 2773fa34777SBob Moore 2783fa34777SBob Moore struct acpi_einj_trigger { 2793fa34777SBob Moore u32 header_size; 2803fa34777SBob Moore u32 revision; 2813fa34777SBob Moore u32 table_size; 2823fa34777SBob Moore u32 entry_count; 2833fa34777SBob Moore }; 2843fa34777SBob Moore 2856e2d5ebdSBob Moore /* Command status return values */ 2866e2d5ebdSBob Moore 2876e2d5ebdSBob Moore enum acpi_einj_command_status { 2886e2d5ebdSBob Moore ACPI_EINJ_SUCCESS = 0, 2896e2d5ebdSBob Moore ACPI_EINJ_FAILURE = 1, 2906e2d5ebdSBob Moore ACPI_EINJ_INVALID_ACCESS = 2, 2916e2d5ebdSBob Moore ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 2926e2d5ebdSBob Moore }; 2936e2d5ebdSBob Moore 2946e2d5ebdSBob Moore /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 2956e2d5ebdSBob Moore 2966e2d5ebdSBob Moore #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 2976e2d5ebdSBob Moore #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 2986e2d5ebdSBob Moore #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 2996e2d5ebdSBob Moore #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 3006e2d5ebdSBob Moore #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 3016e2d5ebdSBob Moore #define ACPI_EINJ_MEMORY_FATAL (1<<5) 3026e2d5ebdSBob Moore #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 3036e2d5ebdSBob Moore #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 3046e2d5ebdSBob Moore #define ACPI_EINJ_PCIX_FATAL (1<<8) 3056e2d5ebdSBob Moore #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 3066e2d5ebdSBob Moore #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 3076e2d5ebdSBob Moore #define ACPI_EINJ_PLATFORM_FATAL (1<<11) 308c5bd6537SBob Moore #define ACPI_EINJ_VENDOR_DEFINED (1<<31) 3096e2d5ebdSBob Moore 310970d9c9eSBob Moore /******************************************************************************* 311970d9c9eSBob Moore * 3126e2d5ebdSBob Moore * ERST - Error Record Serialization Table (ACPI 4.0) 3136e2d5ebdSBob Moore * Version 1 314970d9c9eSBob Moore * 315970d9c9eSBob Moore ******************************************************************************/ 316970d9c9eSBob Moore 317970d9c9eSBob Moore struct acpi_table_erst { 318970d9c9eSBob Moore struct acpi_table_header header; /* Common ACPI table header */ 319970d9c9eSBob Moore u32 header_length; 320970d9c9eSBob Moore u32 reserved; 321970d9c9eSBob Moore u32 entries; 322970d9c9eSBob Moore }; 323970d9c9eSBob Moore 324970d9c9eSBob Moore /* ERST Serialization Entries (actions) */ 325970d9c9eSBob Moore 326970d9c9eSBob Moore struct acpi_erst_entry { 327970d9c9eSBob Moore struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 328970d9c9eSBob Moore }; 329970d9c9eSBob Moore 3306e2d5ebdSBob Moore /* Masks for Flags field above */ 3316e2d5ebdSBob Moore 3326e2d5ebdSBob Moore #define ACPI_ERST_PRESERVE (1) 3336e2d5ebdSBob Moore 334970d9c9eSBob Moore /* Values for Action field above */ 335970d9c9eSBob Moore 336970d9c9eSBob Moore enum acpi_erst_actions { 3376e2d5ebdSBob Moore ACPI_ERST_BEGIN_WRITE = 0, 3386e2d5ebdSBob Moore ACPI_ERST_BEGIN_READ = 1, 3396e2d5ebdSBob Moore ACPI_ERST_BEGIN_CLEAR = 2, 3406e2d5ebdSBob Moore ACPI_ERST_END = 3, 341970d9c9eSBob Moore ACPI_ERST_SET_RECORD_OFFSET = 4, 342970d9c9eSBob Moore ACPI_ERST_EXECUTE_OPERATION = 5, 343970d9c9eSBob Moore ACPI_ERST_CHECK_BUSY_STATUS = 6, 344970d9c9eSBob Moore ACPI_ERST_GET_COMMAND_STATUS = 7, 3456e2d5ebdSBob Moore ACPI_ERST_GET_RECORD_ID = 8, 3466e2d5ebdSBob Moore ACPI_ERST_SET_RECORD_ID = 9, 347970d9c9eSBob Moore ACPI_ERST_GET_RECORD_COUNT = 10, 348970d9c9eSBob Moore ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 349970d9c9eSBob Moore ACPI_ERST_NOT_USED = 12, 350970d9c9eSBob Moore ACPI_ERST_GET_ERROR_RANGE = 13, 351970d9c9eSBob Moore ACPI_ERST_GET_ERROR_LENGTH = 14, 352970d9c9eSBob Moore ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 353a88e0ce6SBob Moore ACPI_ERST_EXECUTE_TIMINGS = 16, 354a88e0ce6SBob Moore ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 355970d9c9eSBob Moore }; 356970d9c9eSBob Moore 357970d9c9eSBob Moore /* Values for Instruction field above */ 358970d9c9eSBob Moore 359970d9c9eSBob Moore enum acpi_erst_instructions { 360970d9c9eSBob Moore ACPI_ERST_READ_REGISTER = 0, 361970d9c9eSBob Moore ACPI_ERST_READ_REGISTER_VALUE = 1, 362970d9c9eSBob Moore ACPI_ERST_WRITE_REGISTER = 2, 363970d9c9eSBob Moore ACPI_ERST_WRITE_REGISTER_VALUE = 3, 364970d9c9eSBob Moore ACPI_ERST_NOOP = 4, 365970d9c9eSBob Moore ACPI_ERST_LOAD_VAR1 = 5, 366970d9c9eSBob Moore ACPI_ERST_LOAD_VAR2 = 6, 367970d9c9eSBob Moore ACPI_ERST_STORE_VAR1 = 7, 368970d9c9eSBob Moore ACPI_ERST_ADD = 8, 369970d9c9eSBob Moore ACPI_ERST_SUBTRACT = 9, 370970d9c9eSBob Moore ACPI_ERST_ADD_VALUE = 10, 371970d9c9eSBob Moore ACPI_ERST_SUBTRACT_VALUE = 11, 372970d9c9eSBob Moore ACPI_ERST_STALL = 12, 373970d9c9eSBob Moore ACPI_ERST_STALL_WHILE_TRUE = 13, 374970d9c9eSBob Moore ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 375970d9c9eSBob Moore ACPI_ERST_GOTO = 15, 376970d9c9eSBob Moore ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 377970d9c9eSBob Moore ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 378970d9c9eSBob Moore ACPI_ERST_MOVE_DATA = 18, 379970d9c9eSBob Moore ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 380970d9c9eSBob Moore }; 381970d9c9eSBob Moore 3826e2d5ebdSBob Moore /* Command status return values */ 3836e2d5ebdSBob Moore 3846e2d5ebdSBob Moore enum acpi_erst_command_status { 3856e2d5ebdSBob Moore ACPI_ERST_SUCESS = 0, 3866e2d5ebdSBob Moore ACPI_ERST_NO_SPACE = 1, 3876e2d5ebdSBob Moore ACPI_ERST_NOT_AVAILABLE = 2, 3886e2d5ebdSBob Moore ACPI_ERST_FAILURE = 3, 3896e2d5ebdSBob Moore ACPI_ERST_RECORD_EMPTY = 4, 3906e2d5ebdSBob Moore ACPI_ERST_NOT_FOUND = 5, 3916e2d5ebdSBob Moore ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 3926e2d5ebdSBob Moore }; 3936e2d5ebdSBob Moore 3946e2d5ebdSBob Moore /* Error Record Serialization Information */ 3956e2d5ebdSBob Moore 3966e2d5ebdSBob Moore struct acpi_erst_info { 3976e2d5ebdSBob Moore u16 signature; /* Should be "ER" */ 3986e2d5ebdSBob Moore u8 data[48]; 3996e2d5ebdSBob Moore }; 4006e2d5ebdSBob Moore 401970d9c9eSBob Moore /******************************************************************************* 402970d9c9eSBob Moore * 4036e2d5ebdSBob Moore * HEST - Hardware Error Source Table (ACPI 4.0) 4046e2d5ebdSBob Moore * Version 1 405970d9c9eSBob Moore * 406970d9c9eSBob Moore ******************************************************************************/ 407970d9c9eSBob Moore 408970d9c9eSBob Moore struct acpi_table_hest { 409970d9c9eSBob Moore struct acpi_table_header header; /* Common ACPI table header */ 410970d9c9eSBob Moore u32 error_source_count; 411970d9c9eSBob Moore }; 412970d9c9eSBob Moore 4133fa34777SBob Moore /* HEST subtable header */ 4143fa34777SBob Moore 4153fa34777SBob Moore struct acpi_hest_header { 4163fa34777SBob Moore u16 type; 4176e2d5ebdSBob Moore u16 source_id; 4183fa34777SBob Moore }; 4193fa34777SBob Moore 4203fa34777SBob Moore /* Values for Type field above for subtables */ 4213fa34777SBob Moore 4223fa34777SBob Moore enum acpi_hest_types { 4236e2d5ebdSBob Moore ACPI_HEST_TYPE_IA32_CHECK = 0, 4246e2d5ebdSBob Moore ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 4256e2d5ebdSBob Moore ACPI_HEST_TYPE_IA32_NMI = 2, 4266e2d5ebdSBob Moore ACPI_HEST_TYPE_NOT_USED3 = 3, 4276e2d5ebdSBob Moore ACPI_HEST_TYPE_NOT_USED4 = 4, 4286e2d5ebdSBob Moore ACPI_HEST_TYPE_NOT_USED5 = 5, 4293fa34777SBob Moore ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 4303fa34777SBob Moore ACPI_HEST_TYPE_AER_ENDPOINT = 7, 4313fa34777SBob Moore ACPI_HEST_TYPE_AER_BRIDGE = 8, 4326e2d5ebdSBob Moore ACPI_HEST_TYPE_GENERIC_ERROR = 9, 4337cd55c76SBob Moore ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 4347cd55c76SBob Moore ACPI_HEST_TYPE_RESERVED = 11 /* 11 and greater are reserved */ 4353fa34777SBob Moore }; 4363fa34777SBob Moore 4373fa34777SBob Moore /* 4386e2d5ebdSBob Moore * HEST substructures contained in subtables 4393fa34777SBob Moore */ 4403fa34777SBob Moore 4416e2d5ebdSBob Moore /* 4426e2d5ebdSBob Moore * IA32 Error Bank(s) - Follows the struct acpi_hest_ia_machine_check and 4436e2d5ebdSBob Moore * struct acpi_hest_ia_corrected structures. 4446e2d5ebdSBob Moore */ 4456e2d5ebdSBob Moore struct acpi_hest_ia_error_bank { 4463fa34777SBob Moore u8 bank_number; 4473fa34777SBob Moore u8 clear_status_on_init; 4483fa34777SBob Moore u8 status_format; 4496e2d5ebdSBob Moore u8 reserved; 4503fa34777SBob Moore u32 control_register; 4516e2d5ebdSBob Moore u64 control_data; 4523fa34777SBob Moore u32 status_register; 4533fa34777SBob Moore u32 address_register; 4543fa34777SBob Moore u32 misc_register; 4553fa34777SBob Moore }; 4563fa34777SBob Moore 4576e2d5ebdSBob Moore /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 4583fa34777SBob Moore 4593fa34777SBob Moore struct acpi_hest_aer_common { 4606e2d5ebdSBob Moore u16 reserved1; 4613fa34777SBob Moore u8 flags; 4623fa34777SBob Moore u8 enabled; 463c276e388SBob Moore u32 records_to_preallocate; 4643fa34777SBob Moore u32 max_sections_per_record; 4654059a310SBetty Dall u32 bus; /* Bus and Segment numbers */ 4663fa34777SBob Moore u16 device; 4673fa34777SBob Moore u16 function; 4683fa34777SBob Moore u16 device_control; 4696e2d5ebdSBob Moore u16 reserved2; 470c276e388SBob Moore u32 uncorrectable_mask; 471c276e388SBob Moore u32 uncorrectable_severity; 472c276e388SBob Moore u32 correctable_mask; 473c276e388SBob Moore u32 advanced_capabilities; 4743fa34777SBob Moore }; 4753fa34777SBob Moore 4766e2d5ebdSBob Moore /* Masks for HEST Flags fields */ 4776e2d5ebdSBob Moore 4786e2d5ebdSBob Moore #define ACPI_HEST_FIRMWARE_FIRST (1) 4796e2d5ebdSBob Moore #define ACPI_HEST_GLOBAL (1<<1) 4806e2d5ebdSBob Moore 4814059a310SBetty Dall /* 4824059a310SBetty Dall * Macros to access the bus/segment numbers in Bus field above: 4834059a310SBetty Dall * Bus number is encoded in bits 7:0 4844059a310SBetty Dall * Segment number is encoded in bits 23:8 4854059a310SBetty Dall */ 4864059a310SBetty Dall #define ACPI_HEST_BUS(bus) ((bus) & 0xFF) 4874059a310SBetty Dall #define ACPI_HEST_SEGMENT(bus) (((bus) >> 8) & 0xFFFF) 4884059a310SBetty Dall 4893fa34777SBob Moore /* Hardware Error Notification */ 4903fa34777SBob Moore 4913fa34777SBob Moore struct acpi_hest_notify { 4923fa34777SBob Moore u8 type; 4933fa34777SBob Moore u8 length; 4943fa34777SBob Moore u16 config_write_enable; 4953fa34777SBob Moore u32 poll_interval; 4963fa34777SBob Moore u32 vector; 4973fa34777SBob Moore u32 polling_threshold_value; 4983fa34777SBob Moore u32 polling_threshold_window; 4993fa34777SBob Moore u32 error_threshold_value; 5003fa34777SBob Moore u32 error_threshold_window; 5013fa34777SBob Moore }; 5023fa34777SBob Moore 5033fa34777SBob Moore /* Values for Notify Type field above */ 5043fa34777SBob Moore 5053fa34777SBob Moore enum acpi_hest_notify_types { 5063fa34777SBob Moore ACPI_HEST_NOTIFY_POLLED = 0, 5073fa34777SBob Moore ACPI_HEST_NOTIFY_EXTERNAL = 1, 5083fa34777SBob Moore ACPI_HEST_NOTIFY_LOCAL = 2, 5093fa34777SBob Moore ACPI_HEST_NOTIFY_SCI = 3, 5103fa34777SBob Moore ACPI_HEST_NOTIFY_NMI = 4, 511ca4a0314SBob Moore ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 512ca4a0314SBob Moore ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 5137cd55c76SBob Moore ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 5147cd55c76SBob Moore ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 5157cd55c76SBob Moore ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 5167cd55c76SBob Moore ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 5177cd55c76SBob Moore ACPI_HEST_NOTIFY_RESERVED = 11 /* 11 and greater are reserved */ 5183fa34777SBob Moore }; 5193fa34777SBob Moore 5206e2d5ebdSBob Moore /* Values for config_write_enable bitfield above */ 5216e2d5ebdSBob Moore 5226e2d5ebdSBob Moore #define ACPI_HEST_TYPE (1) 5236e2d5ebdSBob Moore #define ACPI_HEST_POLL_INTERVAL (1<<1) 5246e2d5ebdSBob Moore #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 5256e2d5ebdSBob Moore #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 5266e2d5ebdSBob Moore #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 5276e2d5ebdSBob Moore #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 5286e2d5ebdSBob Moore 5293fa34777SBob Moore /* 5303fa34777SBob Moore * HEST subtables 5313fa34777SBob Moore */ 5323fa34777SBob Moore 5336e2d5ebdSBob Moore /* 0: IA32 Machine Check Exception */ 5343fa34777SBob Moore 5356e2d5ebdSBob Moore struct acpi_hest_ia_machine_check { 5363fa34777SBob Moore struct acpi_hest_header header; 5376e2d5ebdSBob Moore u16 reserved1; 5383fa34777SBob Moore u8 flags; 5396e2d5ebdSBob Moore u8 enabled; 540c276e388SBob Moore u32 records_to_preallocate; 5413fa34777SBob Moore u32 max_sections_per_record; 5423fa34777SBob Moore u64 global_capability_data; 5433fa34777SBob Moore u64 global_control_data; 5443fa34777SBob Moore u8 num_hardware_banks; 5456e2d5ebdSBob Moore u8 reserved3[7]; 5463fa34777SBob Moore }; 5473fa34777SBob Moore 5486e2d5ebdSBob Moore /* 1: IA32 Corrected Machine Check */ 5493fa34777SBob Moore 5501872bbc9SBob Moore struct acpi_hest_ia_corrected { 5513fa34777SBob Moore struct acpi_hest_header header; 5526e2d5ebdSBob Moore u16 reserved1; 5533fa34777SBob Moore u8 flags; 5543fa34777SBob Moore u8 enabled; 555c276e388SBob Moore u32 records_to_preallocate; 5563fa34777SBob Moore u32 max_sections_per_record; 5573fa34777SBob Moore struct acpi_hest_notify notify; 5583fa34777SBob Moore u8 num_hardware_banks; 5596e2d5ebdSBob Moore u8 reserved2[3]; 5603fa34777SBob Moore }; 5613fa34777SBob Moore 5626e2d5ebdSBob Moore /* 2: IA32 Non-Maskable Interrupt */ 5633fa34777SBob Moore 5646e2d5ebdSBob Moore struct acpi_hest_ia_nmi { 5653fa34777SBob Moore struct acpi_hest_header header; 5663fa34777SBob Moore u32 reserved; 567c276e388SBob Moore u32 records_to_preallocate; 5683fa34777SBob Moore u32 max_sections_per_record; 5693fa34777SBob Moore u32 max_raw_data_length; 5703fa34777SBob Moore }; 5713fa34777SBob Moore 5726e2d5ebdSBob Moore /* 3,4,5: Not used */ 5733fa34777SBob Moore 5743fa34777SBob Moore /* 6: PCI Express Root Port AER */ 5753fa34777SBob Moore 5763fa34777SBob Moore struct acpi_hest_aer_root { 5773fa34777SBob Moore struct acpi_hest_header header; 5783fa34777SBob Moore struct acpi_hest_aer_common aer; 5793fa34777SBob Moore u32 root_error_command; 5803fa34777SBob Moore }; 5813fa34777SBob Moore 5823fa34777SBob Moore /* 7: PCI Express AER (AER Endpoint) */ 5833fa34777SBob Moore 5843fa34777SBob Moore struct acpi_hest_aer { 5853fa34777SBob Moore struct acpi_hest_header header; 5863fa34777SBob Moore struct acpi_hest_aer_common aer; 5873fa34777SBob Moore }; 5883fa34777SBob Moore 5893fa34777SBob Moore /* 8: PCI Express/PCI-X Bridge AER */ 5903fa34777SBob Moore 5913fa34777SBob Moore struct acpi_hest_aer_bridge { 5923fa34777SBob Moore struct acpi_hest_header header; 5933fa34777SBob Moore struct acpi_hest_aer_common aer; 594c276e388SBob Moore u32 uncorrectable_mask2; 595c276e388SBob Moore u32 uncorrectable_severity2; 596c276e388SBob Moore u32 advanced_capabilities2; 5973fa34777SBob Moore }; 5983fa34777SBob Moore 5993fa34777SBob Moore /* 9: Generic Hardware Error Source */ 6003fa34777SBob Moore 6013fa34777SBob Moore struct acpi_hest_generic { 6023fa34777SBob Moore struct acpi_hest_header header; 6033fa34777SBob Moore u16 related_source_id; 6046e2d5ebdSBob Moore u8 reserved; 6053fa34777SBob Moore u8 enabled; 606c276e388SBob Moore u32 records_to_preallocate; 6073fa34777SBob Moore u32 max_sections_per_record; 6083fa34777SBob Moore u32 max_raw_data_length; 6093fa34777SBob Moore struct acpi_generic_address error_status_address; 6103fa34777SBob Moore struct acpi_hest_notify notify; 6116e2d5ebdSBob Moore u32 error_block_length; 6126e2d5ebdSBob Moore }; 6136e2d5ebdSBob Moore 6147cd55c76SBob Moore /* 10: Generic Hardware Error Source, version 2 */ 6157cd55c76SBob Moore 6167cd55c76SBob Moore struct acpi_hest_generic_v2 { 6177cd55c76SBob Moore struct acpi_hest_header header; 6187cd55c76SBob Moore u16 related_source_id; 6197cd55c76SBob Moore u8 reserved; 6207cd55c76SBob Moore u8 enabled; 6217cd55c76SBob Moore u32 records_to_preallocate; 6227cd55c76SBob Moore u32 max_sections_per_record; 6237cd55c76SBob Moore u32 max_raw_data_length; 6247cd55c76SBob Moore struct acpi_generic_address error_status_address; 6257cd55c76SBob Moore struct acpi_hest_notify notify; 6267cd55c76SBob Moore u32 error_block_length; 6277cd55c76SBob Moore struct acpi_generic_address read_ack_register; 6287cd55c76SBob Moore u64 read_ack_preserve; 6297cd55c76SBob Moore u64 read_ack_write; 6307cd55c76SBob Moore }; 6317cd55c76SBob Moore 6326e2d5ebdSBob Moore /* Generic Error Status block */ 6336e2d5ebdSBob Moore 6340a00fd5eSLv Zheng struct acpi_hest_generic_status { 6356e2d5ebdSBob Moore u32 block_status; 6366e2d5ebdSBob Moore u32 raw_data_offset; 6376e2d5ebdSBob Moore u32 raw_data_length; 6386e2d5ebdSBob Moore u32 data_length; 6396e2d5ebdSBob Moore u32 error_severity; 6406e2d5ebdSBob Moore }; 6416e2d5ebdSBob Moore 6426e2d5ebdSBob Moore /* Values for block_status flags above */ 6436e2d5ebdSBob Moore 6440a00fd5eSLv Zheng #define ACPI_HEST_UNCORRECTABLE (1) 6450a00fd5eSLv Zheng #define ACPI_HEST_CORRECTABLE (1<<1) 6460a00fd5eSLv Zheng #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 6470a00fd5eSLv Zheng #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 6480a00fd5eSLv Zheng #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 6496e2d5ebdSBob Moore 6506e2d5ebdSBob Moore /* Generic Error Data entry */ 6516e2d5ebdSBob Moore 6520a00fd5eSLv Zheng struct acpi_hest_generic_data { 6536e2d5ebdSBob Moore u8 section_type[16]; 6546e2d5ebdSBob Moore u32 error_severity; 6556e2d5ebdSBob Moore u16 revision; 6566e2d5ebdSBob Moore u8 validation_bits; 6576e2d5ebdSBob Moore u8 flags; 6586e2d5ebdSBob Moore u32 error_data_length; 6596e2d5ebdSBob Moore u8 fru_id[16]; 6606e2d5ebdSBob Moore u8 fru_text[20]; 6613fa34777SBob Moore }; 662970d9c9eSBob Moore 6637cd55c76SBob Moore /* Extension for revision 0x0300 */ 6647cd55c76SBob Moore 6657cd55c76SBob Moore struct acpi_hest_generic_data_v300 { 6667cd55c76SBob Moore u8 section_type[16]; 6677cd55c76SBob Moore u32 error_severity; 6687cd55c76SBob Moore u16 revision; 6697cd55c76SBob Moore u8 validation_bits; 6707cd55c76SBob Moore u8 flags; 6717cd55c76SBob Moore u32 error_data_length; 6727cd55c76SBob Moore u8 fru_id[16]; 6737cd55c76SBob Moore u8 fru_text[20]; 6747cd55c76SBob Moore u64 time_stamp; 6757cd55c76SBob Moore }; 6767cd55c76SBob Moore 6777cd55c76SBob Moore /* Values for error_severity above */ 6787cd55c76SBob Moore 6797cd55c76SBob Moore #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 6807cd55c76SBob Moore #define ACPI_HEST_GEN_ERROR_FATAL 1 6817cd55c76SBob Moore #define ACPI_HEST_GEN_ERROR_CORRECTED 2 6827cd55c76SBob Moore #define ACPI_HEST_GEN_ERROR_NONE 3 6837cd55c76SBob Moore 6847cd55c76SBob Moore /* Flags for validation_bits above */ 6857cd55c76SBob Moore 6867cd55c76SBob Moore #define ACPI_HEST_GEN_VALID_FRU_ID (1) 6877cd55c76SBob Moore #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 6887cd55c76SBob Moore #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 6897cd55c76SBob Moore 690970d9c9eSBob Moore /******************************************************************************* 691970d9c9eSBob Moore * 692fa418ddfSLv Zheng * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) 693fa418ddfSLv Zheng * Version 1 694fa418ddfSLv Zheng * 695fa418ddfSLv Zheng ******************************************************************************/ 696fa418ddfSLv Zheng 697fa418ddfSLv Zheng struct acpi_table_hmat { 698fa418ddfSLv Zheng struct acpi_table_header header; /* Common ACPI table header */ 699fa418ddfSLv Zheng u32 reserved; 700fa418ddfSLv Zheng }; 701fa418ddfSLv Zheng 702fa418ddfSLv Zheng /* Values for HMAT structure types */ 703fa418ddfSLv Zheng 704fa418ddfSLv Zheng enum acpi_hmat_type { 705fa418ddfSLv Zheng ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ 706fa418ddfSLv Zheng ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ 707fa418ddfSLv Zheng ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ 708fa418ddfSLv Zheng ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 709fa418ddfSLv Zheng }; 710fa418ddfSLv Zheng 711fa418ddfSLv Zheng struct acpi_hmat_structure { 712fa418ddfSLv Zheng u16 type; 713fa418ddfSLv Zheng u16 reserved; 714fa418ddfSLv Zheng u32 length; 715fa418ddfSLv Zheng }; 716fa418ddfSLv Zheng 717fa418ddfSLv Zheng /* 718fa418ddfSLv Zheng * HMAT Structures, correspond to Type in struct acpi_hmat_structure 719fa418ddfSLv Zheng */ 720fa418ddfSLv Zheng 721fa418ddfSLv Zheng /* 0: Memory subystem address range */ 722fa418ddfSLv Zheng 723fa418ddfSLv Zheng struct acpi_hmat_address_range { 724fa418ddfSLv Zheng struct acpi_hmat_structure header; 725fa418ddfSLv Zheng u16 flags; 726fa418ddfSLv Zheng u16 reserved1; 727fa418ddfSLv Zheng u32 processor_PD; /* Processor proximity domain */ 728fa418ddfSLv Zheng u32 memory_PD; /* Memory proximity domain */ 729fa418ddfSLv Zheng u32 reserved2; 730fa418ddfSLv Zheng u64 physical_address_base; /* Physical address range base */ 731fa418ddfSLv Zheng u64 physical_address_length; /* Physical address range length */ 732fa418ddfSLv Zheng }; 733fa418ddfSLv Zheng 734fa418ddfSLv Zheng /* Masks for Flags field above */ 735fa418ddfSLv Zheng 736fa418ddfSLv Zheng #define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: processor_PD field is valid */ 737fa418ddfSLv Zheng #define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: memory_PD field is valid */ 738fa418ddfSLv Zheng #define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ 739fa418ddfSLv Zheng 740fa418ddfSLv Zheng /* 1: System locality latency and bandwidth information */ 741fa418ddfSLv Zheng 742fa418ddfSLv Zheng struct acpi_hmat_locality { 743fa418ddfSLv Zheng struct acpi_hmat_structure header; 744fa418ddfSLv Zheng u8 flags; 745fa418ddfSLv Zheng u8 data_type; 746fa418ddfSLv Zheng u16 reserved1; 747fa418ddfSLv Zheng u32 number_of_initiator_Pds; 748fa418ddfSLv Zheng u32 number_of_target_Pds; 749fa418ddfSLv Zheng u32 reserved2; 750fa418ddfSLv Zheng u64 entry_base_unit; 751fa418ddfSLv Zheng }; 752fa418ddfSLv Zheng 753fa418ddfSLv Zheng /* Masks for Flags field above */ 754fa418ddfSLv Zheng 755fa418ddfSLv Zheng #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) 756fa418ddfSLv Zheng 757fa418ddfSLv Zheng /* Values for Memory Hierarchy flag */ 758fa418ddfSLv Zheng 759fa418ddfSLv Zheng #define ACPI_HMAT_MEMORY 0 760fa418ddfSLv Zheng #define ACPI_HMAT_LAST_LEVEL_CACHE 1 761fa418ddfSLv Zheng #define ACPI_HMAT_1ST_LEVEL_CACHE 2 762fa418ddfSLv Zheng #define ACPI_HMAT_2ND_LEVEL_CACHE 3 763fa418ddfSLv Zheng #define ACPI_HMAT_3RD_LEVEL_CACHE 4 764fa418ddfSLv Zheng 765fa418ddfSLv Zheng /* Values for data_type field above */ 766fa418ddfSLv Zheng 767fa418ddfSLv Zheng #define ACPI_HMAT_ACCESS_LATENCY 0 768fa418ddfSLv Zheng #define ACPI_HMAT_READ_LATENCY 1 769fa418ddfSLv Zheng #define ACPI_HMAT_WRITE_LATENCY 2 770fa418ddfSLv Zheng #define ACPI_HMAT_ACCESS_BANDWIDTH 3 771fa418ddfSLv Zheng #define ACPI_HMAT_READ_BANDWIDTH 4 772fa418ddfSLv Zheng #define ACPI_HMAT_WRITE_BANDWIDTH 5 773fa418ddfSLv Zheng 774fa418ddfSLv Zheng /* 2: Memory side cache information */ 775fa418ddfSLv Zheng 776fa418ddfSLv Zheng struct acpi_hmat_cache { 777fa418ddfSLv Zheng struct acpi_hmat_structure header; 778fa418ddfSLv Zheng u32 memory_PD; 779fa418ddfSLv Zheng u32 reserved1; 780fa418ddfSLv Zheng u64 cache_size; 781fa418ddfSLv Zheng u32 cache_attributes; 782fa418ddfSLv Zheng u16 reserved2; 783fa418ddfSLv Zheng u16 number_of_SMBIOShandles; 784fa418ddfSLv Zheng }; 785fa418ddfSLv Zheng 786fa418ddfSLv Zheng /* Masks for cache_attributes field above */ 787fa418ddfSLv Zheng 788fa418ddfSLv Zheng #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) 789fa418ddfSLv Zheng #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) 790fa418ddfSLv Zheng #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) 791fa418ddfSLv Zheng #define ACPI_HMAT_WRITE_POLICY (0x0000F000) 792fa418ddfSLv Zheng #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) 793fa418ddfSLv Zheng 794fa418ddfSLv Zheng /* Values for cache associativity flag */ 795fa418ddfSLv Zheng 796fa418ddfSLv Zheng #define ACPI_HMAT_CA_NONE (0) 797fa418ddfSLv Zheng #define ACPI_HMAT_CA_DIRECT_MAPPED (1) 798fa418ddfSLv Zheng #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) 799fa418ddfSLv Zheng 800fa418ddfSLv Zheng /* Values for write policy flag */ 801fa418ddfSLv Zheng 802fa418ddfSLv Zheng #define ACPI_HMAT_CP_NONE (0) 803fa418ddfSLv Zheng #define ACPI_HMAT_CP_WB (1) 804fa418ddfSLv Zheng #define ACPI_HMAT_CP_WT (2) 805fa418ddfSLv Zheng 806fa418ddfSLv Zheng /******************************************************************************* 807fa418ddfSLv Zheng * 808793c2388SBob Moore * MADT - Multiple APIC Description Table 8096e2d5ebdSBob Moore * Version 3 810793c2388SBob Moore * 811793c2388SBob Moore ******************************************************************************/ 812793c2388SBob Moore 813f3d2e786SBob Moore struct acpi_table_madt { 814f3d2e786SBob Moore struct acpi_table_header header; /* Common ACPI table header */ 815f3d2e786SBob Moore u32 address; /* Physical address of local APIC */ 816f3d2e786SBob Moore u32 flags; 8171da177e4SLinus Torvalds }; 8181da177e4SLinus Torvalds 8196e2d5ebdSBob Moore /* Masks for Flags field above */ 820793c2388SBob Moore 821f3d2e786SBob Moore #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 822793c2388SBob Moore 823f3d2e786SBob Moore /* Values for PCATCompat flag */ 824793c2388SBob Moore 825f3d2e786SBob Moore #define ACPI_MADT_DUAL_PIC 0 826f3d2e786SBob Moore #define ACPI_MADT_MULTIPLE_APIC 1 827793c2388SBob Moore 8286e2d5ebdSBob Moore /* Values for MADT subtable type in struct acpi_subtable_header */ 829793c2388SBob Moore 830f3d2e786SBob Moore enum acpi_madt_type { 831f3d2e786SBob Moore ACPI_MADT_TYPE_LOCAL_APIC = 0, 832f3d2e786SBob Moore ACPI_MADT_TYPE_IO_APIC = 1, 833f3d2e786SBob Moore ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 834f3d2e786SBob Moore ACPI_MADT_TYPE_NMI_SOURCE = 3, 835f3d2e786SBob Moore ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 836f3d2e786SBob Moore ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 837f3d2e786SBob Moore ACPI_MADT_TYPE_IO_SAPIC = 6, 838f3d2e786SBob Moore ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 839f3d2e786SBob Moore ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 8401d7cc030SBob Moore ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 8411d7cc030SBob Moore ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 842c5bd6537SBob Moore ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 843c5bd6537SBob Moore ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 844d0c383e4STomasz Nowicki ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 845d0c383e4STomasz Nowicki ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 8460cff8dc0SBob Moore ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 8470cff8dc0SBob Moore ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ 848f3d2e786SBob Moore }; 849793c2388SBob Moore 8501da177e4SLinus Torvalds /* 8511a49b72cSBob Moore * MADT Subtables, correspond to Type in struct acpi_subtable_header 8521da177e4SLinus Torvalds */ 853793c2388SBob Moore 854f3d2e786SBob Moore /* 0: Processor Local APIC */ 855793c2388SBob Moore 856f3d2e786SBob Moore struct acpi_madt_local_apic { 857f3d2e786SBob Moore struct acpi_subtable_header header; 858f3d2e786SBob Moore u8 processor_id; /* ACPI processor id */ 859f3d2e786SBob Moore u8 id; /* Processor's local APIC id */ 860f3d2e786SBob Moore u32 lapic_flags; 861f3d2e786SBob Moore }; 862793c2388SBob Moore 863793c2388SBob Moore /* 1: IO APIC */ 864793c2388SBob Moore 865f3d2e786SBob Moore struct acpi_madt_io_apic { 866f3d2e786SBob Moore struct acpi_subtable_header header; 867f3d2e786SBob Moore u8 id; /* I/O APIC ID */ 868ba494beeSBob Moore u8 reserved; /* reserved - must be zero */ 869793c2388SBob Moore u32 address; /* APIC physical address */ 870f3d2e786SBob Moore u32 global_irq_base; /* Global system interrupt where INTI lines start */ 871793c2388SBob Moore }; 872793c2388SBob Moore 873793c2388SBob Moore /* 2: Interrupt Override */ 874793c2388SBob Moore 875f3d2e786SBob Moore struct acpi_madt_interrupt_override { 876f3d2e786SBob Moore struct acpi_subtable_header header; 877f3d2e786SBob Moore u8 bus; /* 0 - ISA */ 878f3d2e786SBob Moore u8 source_irq; /* Interrupt source (IRQ) */ 879f3d2e786SBob Moore u32 global_irq; /* Global system interrupt */ 880f3d2e786SBob Moore u16 inti_flags; 881f3d2e786SBob Moore }; 882793c2388SBob Moore 883f3d2e786SBob Moore /* 3: NMI Source */ 884793c2388SBob Moore 885f3d2e786SBob Moore struct acpi_madt_nmi_source { 886f3d2e786SBob Moore struct acpi_subtable_header header; 887f3d2e786SBob Moore u16 inti_flags; 888f3d2e786SBob Moore u32 global_irq; /* Global system interrupt */ 889793c2388SBob Moore }; 890793c2388SBob Moore 891793c2388SBob Moore /* 4: Local APIC NMI */ 892793c2388SBob Moore 893f3d2e786SBob Moore struct acpi_madt_local_apic_nmi { 894f3d2e786SBob Moore struct acpi_subtable_header header; 895f3d2e786SBob Moore u8 processor_id; /* ACPI processor id */ 896f3d2e786SBob Moore u16 inti_flags; 897f3d2e786SBob Moore u8 lint; /* LINTn to which NMI is connected */ 898793c2388SBob Moore }; 899793c2388SBob Moore 900793c2388SBob Moore /* 5: Address Override */ 901793c2388SBob Moore 902f3d2e786SBob Moore struct acpi_madt_local_apic_override { 903f3d2e786SBob Moore struct acpi_subtable_header header; 904f3d2e786SBob Moore u16 reserved; /* Reserved, must be zero */ 905793c2388SBob Moore u64 address; /* APIC physical address */ 906793c2388SBob Moore }; 907793c2388SBob Moore 908793c2388SBob Moore /* 6: I/O Sapic */ 909793c2388SBob Moore 910f3d2e786SBob Moore struct acpi_madt_io_sapic { 911f3d2e786SBob Moore struct acpi_subtable_header header; 912f3d2e786SBob Moore u8 id; /* I/O SAPIC ID */ 913793c2388SBob Moore u8 reserved; /* Reserved, must be zero */ 914f3d2e786SBob Moore u32 global_irq_base; /* Global interrupt for SAPIC start */ 915793c2388SBob Moore u64 address; /* SAPIC physical address */ 916793c2388SBob Moore }; 917793c2388SBob Moore 918793c2388SBob Moore /* 7: Local Sapic */ 919793c2388SBob Moore 920f3d2e786SBob Moore struct acpi_madt_local_sapic { 921f3d2e786SBob Moore struct acpi_subtable_header header; 922f3d2e786SBob Moore u8 processor_id; /* ACPI processor id */ 923f3d2e786SBob Moore u8 id; /* SAPIC ID */ 924f3d2e786SBob Moore u8 eid; /* SAPIC EID */ 925793c2388SBob Moore u8 reserved[3]; /* Reserved, must be zero */ 926f3d2e786SBob Moore u32 lapic_flags; 927f3d2e786SBob Moore u32 uid; /* Numeric UID - ACPI 3.0 */ 928f3d2e786SBob Moore char uid_string[1]; /* String UID - ACPI 3.0 */ 929793c2388SBob Moore }; 930793c2388SBob Moore 931793c2388SBob Moore /* 8: Platform Interrupt Source */ 932793c2388SBob Moore 933f3d2e786SBob Moore struct acpi_madt_interrupt_source { 934f3d2e786SBob Moore struct acpi_subtable_header header; 935f3d2e786SBob Moore u16 inti_flags; 936f3d2e786SBob Moore u8 type; /* 1=PMI, 2=INIT, 3=corrected */ 937f3d2e786SBob Moore u8 id; /* Processor ID */ 938f3d2e786SBob Moore u8 eid; /* Processor EID */ 939793c2388SBob Moore u8 io_sapic_vector; /* Vector value for PMI interrupts */ 940f3d2e786SBob Moore u32 global_irq; /* Global system interrupt */ 941793c2388SBob Moore u32 flags; /* Interrupt Source Flags */ 942793c2388SBob Moore }; 943793c2388SBob Moore 9446e2d5ebdSBob Moore /* Masks for Flags field above */ 945f3d2e786SBob Moore 946f3d2e786SBob Moore #define ACPI_MADT_CPEI_OVERRIDE (1) 947f3d2e786SBob Moore 948eb2289baSBob Moore /* 9: Processor Local X2APIC (ACPI 4.0) */ 9491d7cc030SBob Moore 9501d7cc030SBob Moore struct acpi_madt_local_x2apic { 9511d7cc030SBob Moore struct acpi_subtable_header header; 95275c8044fSLv Zheng u16 reserved; /* reserved - must be zero */ 953786c221aSSuresh Siddha u32 local_apic_id; /* Processor x2APIC ID */ 9541d7cc030SBob Moore u32 lapic_flags; 955786c221aSSuresh Siddha u32 uid; /* ACPI processor UID */ 9561d7cc030SBob Moore }; 9571d7cc030SBob Moore 958eb2289baSBob Moore /* 10: Local X2APIC NMI (ACPI 4.0) */ 9591d7cc030SBob Moore 9601d7cc030SBob Moore struct acpi_madt_local_x2apic_nmi { 9611d7cc030SBob Moore struct acpi_subtable_header header; 9621d7cc030SBob Moore u16 inti_flags; 963786c221aSSuresh Siddha u32 uid; /* ACPI processor UID */ 9641d7cc030SBob Moore u8 lint; /* LINTn to which NMI is connected */ 96575c8044fSLv Zheng u8 reserved[3]; /* reserved - must be zero */ 9661d7cc030SBob Moore }; 9671d7cc030SBob Moore 9680cff8dc0SBob Moore /* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ 969c5bd6537SBob Moore 970c5bd6537SBob Moore struct acpi_madt_generic_interrupt { 971c5bd6537SBob Moore struct acpi_subtable_header header; 97275c8044fSLv Zheng u16 reserved; /* reserved - must be zero */ 973d0c383e4STomasz Nowicki u32 cpu_interface_number; 974c5bd6537SBob Moore u32 uid; 975c5bd6537SBob Moore u32 flags; 976c5bd6537SBob Moore u32 parking_version; 977c5bd6537SBob Moore u32 performance_interrupt; 978c5bd6537SBob Moore u64 parked_address; 979c5bd6537SBob Moore u64 base_address; 980d0c383e4STomasz Nowicki u64 gicv_base_address; 981d0c383e4STomasz Nowicki u64 gich_base_address; 982d0c383e4STomasz Nowicki u32 vgic_interrupt; 983d0c383e4STomasz Nowicki u64 gicr_base_address; 984d0c383e4STomasz Nowicki u64 arm_mpidr; 9850cff8dc0SBob Moore u8 efficiency_class; 9860cff8dc0SBob Moore u8 reserved2[3]; 987c5bd6537SBob Moore }; 988c5bd6537SBob Moore 989d0c383e4STomasz Nowicki /* Masks for Flags field above */ 990d0c383e4STomasz Nowicki 991d0c383e4STomasz Nowicki /* ACPI_MADT_ENABLED (1) Processor is usable if set */ 992d0c383e4STomasz Nowicki #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 993d0c383e4STomasz Nowicki #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 994d0c383e4STomasz Nowicki 9950cff8dc0SBob Moore /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 996c5bd6537SBob Moore 997c5bd6537SBob Moore struct acpi_madt_generic_distributor { 998c5bd6537SBob Moore struct acpi_subtable_header header; 999ba494beeSBob Moore u16 reserved; /* reserved - must be zero */ 1000c5bd6537SBob Moore u32 gic_id; 1001c5bd6537SBob Moore u64 base_address; 1002c5bd6537SBob Moore u32 global_irq_base; 10030cff8dc0SBob Moore u8 version; 10040cff8dc0SBob Moore u8 reserved2[3]; /* reserved - must be zero */ 1005c5bd6537SBob Moore }; 1006c5bd6537SBob Moore 1007a8bd0f07SHanjun Guo /* Values for Version field above */ 1008a8bd0f07SHanjun Guo 1009a8bd0f07SHanjun Guo enum acpi_madt_gic_version { 1010a8bd0f07SHanjun Guo ACPI_MADT_GIC_VERSION_NONE = 0, 1011a8bd0f07SHanjun Guo ACPI_MADT_GIC_VERSION_V1 = 1, 1012a8bd0f07SHanjun Guo ACPI_MADT_GIC_VERSION_V2 = 2, 1013a8bd0f07SHanjun Guo ACPI_MADT_GIC_VERSION_V3 = 3, 1014a8bd0f07SHanjun Guo ACPI_MADT_GIC_VERSION_V4 = 4, 1015a8bd0f07SHanjun Guo ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1016a8bd0f07SHanjun Guo }; 1017a8bd0f07SHanjun Guo 1018d0c383e4STomasz Nowicki /* 13: Generic MSI Frame (ACPI 5.1) */ 1019d0c383e4STomasz Nowicki 1020d0c383e4STomasz Nowicki struct acpi_madt_generic_msi_frame { 1021d0c383e4STomasz Nowicki struct acpi_subtable_header header; 1022d0c383e4STomasz Nowicki u16 reserved; /* reserved - must be zero */ 1023d0c383e4STomasz Nowicki u32 msi_frame_id; 1024d0c383e4STomasz Nowicki u64 base_address; 1025d0c383e4STomasz Nowicki u32 flags; 1026d0c383e4STomasz Nowicki u16 spi_count; 1027d0c383e4STomasz Nowicki u16 spi_base; 1028d0c383e4STomasz Nowicki }; 1029d0c383e4STomasz Nowicki 1030d0c383e4STomasz Nowicki /* Masks for Flags field above */ 1031d0c383e4STomasz Nowicki 1032d0c383e4STomasz Nowicki #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1033d0c383e4STomasz Nowicki 1034d0c383e4STomasz Nowicki /* 14: Generic Redistributor (ACPI 5.1) */ 1035d0c383e4STomasz Nowicki 1036d0c383e4STomasz Nowicki struct acpi_madt_generic_redistributor { 1037d0c383e4STomasz Nowicki struct acpi_subtable_header header; 1038d0c383e4STomasz Nowicki u16 reserved; /* reserved - must be zero */ 1039d0c383e4STomasz Nowicki u64 base_address; 1040d0c383e4STomasz Nowicki u32 length; 1041d0c383e4STomasz Nowicki }; 1042d0c383e4STomasz Nowicki 10430cff8dc0SBob Moore /* 15: Generic Translator (ACPI 6.0) */ 10440cff8dc0SBob Moore 10450cff8dc0SBob Moore struct acpi_madt_generic_translator { 10460cff8dc0SBob Moore struct acpi_subtable_header header; 10470cff8dc0SBob Moore u16 reserved; /* reserved - must be zero */ 10480cff8dc0SBob Moore u32 translation_id; 10490cff8dc0SBob Moore u64 base_address; 10500cff8dc0SBob Moore u32 reserved2; 10510cff8dc0SBob Moore }; 10520cff8dc0SBob Moore 1053f3d2e786SBob Moore /* 1054f3d2e786SBob Moore * Common flags fields for MADT subtables 1055f3d2e786SBob Moore */ 1056f3d2e786SBob Moore 1057d0c383e4STomasz Nowicki /* MADT Local APIC flags */ 1058f3d2e786SBob Moore 1059f3d2e786SBob Moore #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1060f3d2e786SBob Moore 1061f3d2e786SBob Moore /* MADT MPS INTI flags (inti_flags) */ 1062f3d2e786SBob Moore 1063f3d2e786SBob Moore #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1064f3d2e786SBob Moore #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1065f3d2e786SBob Moore 1066f3d2e786SBob Moore /* Values for MPS INTI flags */ 1067f3d2e786SBob Moore 1068f3d2e786SBob Moore #define ACPI_MADT_POLARITY_CONFORMS 0 1069f3d2e786SBob Moore #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1070f3d2e786SBob Moore #define ACPI_MADT_POLARITY_RESERVED 2 1071f3d2e786SBob Moore #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1072f3d2e786SBob Moore 1073f3d2e786SBob Moore #define ACPI_MADT_TRIGGER_CONFORMS (0) 1074f3d2e786SBob Moore #define ACPI_MADT_TRIGGER_EDGE (1<<2) 1075f3d2e786SBob Moore #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1076f3d2e786SBob Moore #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1077f3d2e786SBob Moore 1078793c2388SBob Moore /******************************************************************************* 1079793c2388SBob Moore * 10806e2d5ebdSBob Moore * MSCT - Maximum System Characteristics Table (ACPI 4.0) 10816e2d5ebdSBob Moore * Version 1 10826e2d5ebdSBob Moore * 10836e2d5ebdSBob Moore ******************************************************************************/ 10846e2d5ebdSBob Moore 10856e2d5ebdSBob Moore struct acpi_table_msct { 10866e2d5ebdSBob Moore struct acpi_table_header header; /* Common ACPI table header */ 10876e2d5ebdSBob Moore u32 proximity_offset; /* Location of proximity info struct(s) */ 10886e2d5ebdSBob Moore u32 max_proximity_domains; /* Max number of proximity domains */ 10896e2d5ebdSBob Moore u32 max_clock_domains; /* Max number of clock domains */ 10906e2d5ebdSBob Moore u64 max_address; /* Max physical address in system */ 10916e2d5ebdSBob Moore }; 10926e2d5ebdSBob Moore 1093ba494beeSBob Moore /* subtable - Maximum Proximity Domain Information. Version 1 */ 10946e2d5ebdSBob Moore 10956e2d5ebdSBob Moore struct acpi_msct_proximity { 10966e2d5ebdSBob Moore u8 revision; 10976e2d5ebdSBob Moore u8 length; 10986e2d5ebdSBob Moore u32 range_start; /* Start of domain range */ 10996e2d5ebdSBob Moore u32 range_end; /* End of domain range */ 11006e2d5ebdSBob Moore u32 processor_capacity; 11016e2d5ebdSBob Moore u64 memory_capacity; /* In bytes */ 11026e2d5ebdSBob Moore }; 11036e2d5ebdSBob Moore 11046e2d5ebdSBob Moore /******************************************************************************* 11056e2d5ebdSBob Moore * 1106138a9554SBob Moore * NFIT - NVDIMM Interface Table (ACPI 6.0+) 110704f8e384SBob Moore * Version 1 110804f8e384SBob Moore * 110904f8e384SBob Moore ******************************************************************************/ 111004f8e384SBob Moore 111104f8e384SBob Moore struct acpi_table_nfit { 111204f8e384SBob Moore struct acpi_table_header header; /* Common ACPI table header */ 111304f8e384SBob Moore u32 reserved; /* Reserved, must be zero */ 111404f8e384SBob Moore }; 111504f8e384SBob Moore 111604f8e384SBob Moore /* Subtable header for NFIT */ 111704f8e384SBob Moore 111804f8e384SBob Moore struct acpi_nfit_header { 111904f8e384SBob Moore u16 type; 112004f8e384SBob Moore u16 length; 112104f8e384SBob Moore }; 112204f8e384SBob Moore 112304f8e384SBob Moore /* Values for subtable type in struct acpi_nfit_header */ 112404f8e384SBob Moore 112504f8e384SBob Moore enum acpi_nfit_type { 112604f8e384SBob Moore ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 112704f8e384SBob Moore ACPI_NFIT_TYPE_MEMORY_MAP = 1, 112804f8e384SBob Moore ACPI_NFIT_TYPE_INTERLEAVE = 2, 112904f8e384SBob Moore ACPI_NFIT_TYPE_SMBIOS = 3, 113004f8e384SBob Moore ACPI_NFIT_TYPE_CONTROL_REGION = 4, 113104f8e384SBob Moore ACPI_NFIT_TYPE_DATA_REGION = 5, 113204f8e384SBob Moore ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 113304f8e384SBob Moore ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ 113404f8e384SBob Moore }; 113504f8e384SBob Moore 113604f8e384SBob Moore /* 113704f8e384SBob Moore * NFIT Subtables 113804f8e384SBob Moore */ 113904f8e384SBob Moore 114004f8e384SBob Moore /* 0: System Physical Address Range Structure */ 114104f8e384SBob Moore 114204f8e384SBob Moore struct acpi_nfit_system_address { 114304f8e384SBob Moore struct acpi_nfit_header header; 114404f8e384SBob Moore u16 range_index; 114504f8e384SBob Moore u16 flags; 114604f8e384SBob Moore u32 reserved; /* Reseved, must be zero */ 114704f8e384SBob Moore u32 proximity_domain; 114804f8e384SBob Moore u8 range_guid[16]; 114904f8e384SBob Moore u64 address; 115004f8e384SBob Moore u64 length; 115104f8e384SBob Moore u64 memory_mapping; 115204f8e384SBob Moore }; 115304f8e384SBob Moore 115404f8e384SBob Moore /* Flags */ 115504f8e384SBob Moore 115604f8e384SBob Moore #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 115704f8e384SBob Moore #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 115804f8e384SBob Moore 115904f8e384SBob Moore /* Range Type GUIDs appear in the include/acuuid.h file */ 116004f8e384SBob Moore 116104f8e384SBob Moore /* 1: Memory Device to System Address Range Map Structure */ 116204f8e384SBob Moore 116304f8e384SBob Moore struct acpi_nfit_memory_map { 116404f8e384SBob Moore struct acpi_nfit_header header; 116504f8e384SBob Moore u32 device_handle; 116604f8e384SBob Moore u16 physical_id; 116704f8e384SBob Moore u16 region_id; 116804f8e384SBob Moore u16 range_index; 116904f8e384SBob Moore u16 region_index; 117004f8e384SBob Moore u64 region_size; 117104f8e384SBob Moore u64 region_offset; 117204f8e384SBob Moore u64 address; 117304f8e384SBob Moore u16 interleave_index; 117404f8e384SBob Moore u16 interleave_ways; 117504f8e384SBob Moore u16 flags; 117604f8e384SBob Moore u16 reserved; /* Reserved, must be zero */ 117704f8e384SBob Moore }; 117804f8e384SBob Moore 117904f8e384SBob Moore /* Flags */ 118004f8e384SBob Moore 118104f8e384SBob Moore #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 118204f8e384SBob Moore #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 118304f8e384SBob Moore #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1184ca321d1cSBob Moore #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 118504f8e384SBob Moore #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 118604f8e384SBob Moore #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1187138a9554SBob Moore #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 118804f8e384SBob Moore 118904f8e384SBob Moore /* 2: Interleave Structure */ 119004f8e384SBob Moore 119104f8e384SBob Moore struct acpi_nfit_interleave { 119204f8e384SBob Moore struct acpi_nfit_header header; 119304f8e384SBob Moore u16 interleave_index; 119404f8e384SBob Moore u16 reserved; /* Reserved, must be zero */ 119504f8e384SBob Moore u32 line_count; 119604f8e384SBob Moore u32 line_size; 119704f8e384SBob Moore u32 line_offset[1]; /* Variable length */ 119804f8e384SBob Moore }; 119904f8e384SBob Moore 120004f8e384SBob Moore /* 3: SMBIOS Management Information Structure */ 120104f8e384SBob Moore 120204f8e384SBob Moore struct acpi_nfit_smbios { 120304f8e384SBob Moore struct acpi_nfit_header header; 120404f8e384SBob Moore u32 reserved; /* Reserved, must be zero */ 120504f8e384SBob Moore u8 data[1]; /* Variable length */ 120604f8e384SBob Moore }; 120704f8e384SBob Moore 120804f8e384SBob Moore /* 4: NVDIMM Control Region Structure */ 120904f8e384SBob Moore 121004f8e384SBob Moore struct acpi_nfit_control_region { 121104f8e384SBob Moore struct acpi_nfit_header header; 121204f8e384SBob Moore u16 region_index; 121304f8e384SBob Moore u16 vendor_id; 121404f8e384SBob Moore u16 device_id; 121504f8e384SBob Moore u16 revision_id; 121604f8e384SBob Moore u16 subsystem_vendor_id; 121704f8e384SBob Moore u16 subsystem_device_id; 121804f8e384SBob Moore u16 subsystem_revision_id; 1219138a9554SBob Moore u8 valid_fields; 1220138a9554SBob Moore u8 manufacturing_location; 1221138a9554SBob Moore u16 manufacturing_date; 1222138a9554SBob Moore u8 reserved[2]; /* Reserved, must be zero */ 122304f8e384SBob Moore u32 serial_number; 122404f8e384SBob Moore u16 code; 122504f8e384SBob Moore u16 windows; 122604f8e384SBob Moore u64 window_size; 122704f8e384SBob Moore u64 command_offset; 122804f8e384SBob Moore u64 command_size; 122904f8e384SBob Moore u64 status_offset; 123004f8e384SBob Moore u64 status_size; 123104f8e384SBob Moore u16 flags; 123204f8e384SBob Moore u8 reserved1[6]; /* Reserved, must be zero */ 123304f8e384SBob Moore }; 123404f8e384SBob Moore 123504f8e384SBob Moore /* Flags */ 123604f8e384SBob Moore 123704f8e384SBob Moore #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 123804f8e384SBob Moore 1239138a9554SBob Moore /* valid_fields bits */ 1240138a9554SBob Moore 1241138a9554SBob Moore #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 1242138a9554SBob Moore 124304f8e384SBob Moore /* 5: NVDIMM Block Data Window Region Structure */ 124404f8e384SBob Moore 124504f8e384SBob Moore struct acpi_nfit_data_region { 124604f8e384SBob Moore struct acpi_nfit_header header; 124704f8e384SBob Moore u16 region_index; 124804f8e384SBob Moore u16 windows; 124904f8e384SBob Moore u64 offset; 125004f8e384SBob Moore u64 size; 125104f8e384SBob Moore u64 capacity; 125204f8e384SBob Moore u64 start_address; 125304f8e384SBob Moore }; 125404f8e384SBob Moore 125504f8e384SBob Moore /* 6: Flush Hint Address Structure */ 125604f8e384SBob Moore 125704f8e384SBob Moore struct acpi_nfit_flush_address { 125804f8e384SBob Moore struct acpi_nfit_header header; 125904f8e384SBob Moore u32 device_handle; 126004f8e384SBob Moore u16 hint_count; 126104f8e384SBob Moore u8 reserved[6]; /* Reserved, must be zero */ 126204f8e384SBob Moore u64 hint_address[1]; /* Variable length */ 126304f8e384SBob Moore }; 126404f8e384SBob Moore 126504f8e384SBob Moore /******************************************************************************* 126604f8e384SBob Moore * 1267793c2388SBob Moore * SBST - Smart Battery Specification Table 12686e2d5ebdSBob Moore * Version 1 1269793c2388SBob Moore * 1270793c2388SBob Moore ******************************************************************************/ 1271793c2388SBob Moore 1272f3d2e786SBob Moore struct acpi_table_sbst { 1273f3d2e786SBob Moore struct acpi_table_header header; /* Common ACPI table header */ 1274f3d2e786SBob Moore u32 warning_level; 1275793c2388SBob Moore u32 low_level; 1276793c2388SBob Moore u32 critical_level; 1277793c2388SBob Moore }; 1278793c2388SBob Moore 1279793c2388SBob Moore /******************************************************************************* 1280793c2388SBob Moore * 1281793c2388SBob Moore * SLIT - System Locality Distance Information Table 12826e2d5ebdSBob Moore * Version 1 1283793c2388SBob Moore * 1284793c2388SBob Moore ******************************************************************************/ 1285793c2388SBob Moore 1286f3d2e786SBob Moore struct acpi_table_slit { 1287f3d2e786SBob Moore struct acpi_table_header header; /* Common ACPI table header */ 1288f3d2e786SBob Moore u64 locality_count; 1289f3d2e786SBob Moore u8 entry[1]; /* Real size = localities^2 */ 1290793c2388SBob Moore }; 1291793c2388SBob Moore 1292793c2388SBob Moore /******************************************************************************* 1293793c2388SBob Moore * 1294793c2388SBob Moore * SRAT - System Resource Affinity Table 12956e2d5ebdSBob Moore * Version 3 1296793c2388SBob Moore * 1297793c2388SBob Moore ******************************************************************************/ 1298793c2388SBob Moore 1299f3d2e786SBob Moore struct acpi_table_srat { 1300f3d2e786SBob Moore struct acpi_table_header header; /* Common ACPI table header */ 1301f3d2e786SBob Moore u32 table_revision; /* Must be value '1' */ 1302f3d2e786SBob Moore u64 reserved; /* Reserved, must be zero */ 1303793c2388SBob Moore }; 1304793c2388SBob Moore 1305f3d2e786SBob Moore /* Values for subtable type in struct acpi_subtable_header */ 1306793c2388SBob Moore 1307f3d2e786SBob Moore enum acpi_srat_type { 1308f3d2e786SBob Moore ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1309f3d2e786SBob Moore ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 13101d7cc030SBob Moore ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 131163b8f8cdSHanjun Guo ACPI_SRAT_TYPE_GICC_AFFINITY = 3, 131263b8f8cdSHanjun Guo ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */ 1313f3d2e786SBob Moore }; 1314793c2388SBob Moore 13151d7cc030SBob Moore /* 13161a49b72cSBob Moore * SRAT Subtables, correspond to Type in struct acpi_subtable_header 13171d7cc030SBob Moore */ 13181d7cc030SBob Moore 13191d7cc030SBob Moore /* 0: Processor Local APIC/SAPIC Affinity */ 1320793c2388SBob Moore 1321f3d2e786SBob Moore struct acpi_srat_cpu_affinity { 1322f3d2e786SBob Moore struct acpi_subtable_header header; 1323f3d2e786SBob Moore u8 proximity_domain_lo; 1324793c2388SBob Moore u8 apic_id; 1325f3d2e786SBob Moore u32 flags; 1326793c2388SBob Moore u8 local_sapic_eid; 1327793c2388SBob Moore u8 proximity_domain_hi[3]; 132863b8f8cdSHanjun Guo u32 clock_domain; 13291da177e4SLinus Torvalds }; 13301da177e4SLinus Torvalds 13316e2d5ebdSBob Moore /* Flags */ 13326e2d5ebdSBob Moore 13336e2d5ebdSBob Moore #define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 13346e2d5ebdSBob Moore 13351d7cc030SBob Moore /* 1: Memory Affinity */ 1336f3d2e786SBob Moore 1337f3d2e786SBob Moore struct acpi_srat_mem_affinity { 1338f3d2e786SBob Moore struct acpi_subtable_header header; 1339f3d2e786SBob Moore u32 proximity_domain; 1340f3d2e786SBob Moore u16 reserved; /* Reserved, must be zero */ 1341793c2388SBob Moore u64 base_address; 1342f3d2e786SBob Moore u64 length; 134319d0cfe9SBob Moore u32 reserved1; 1344f3d2e786SBob Moore u32 flags; 134519d0cfe9SBob Moore u64 reserved2; /* Reserved, must be zero */ 1346f3d2e786SBob Moore }; 1347793c2388SBob Moore 1348f3d2e786SBob Moore /* Flags */ 1349793c2388SBob Moore 1350f3d2e786SBob Moore #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1351f3d2e786SBob Moore #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1352f3d2e786SBob Moore #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1353793c2388SBob Moore 1354eb2289baSBob Moore /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 13551d7cc030SBob Moore 13561d7cc030SBob Moore struct acpi_srat_x2apic_cpu_affinity { 13571d7cc030SBob Moore struct acpi_subtable_header header; 13581d7cc030SBob Moore u16 reserved; /* Reserved, must be zero */ 13591d7cc030SBob Moore u32 proximity_domain; 13601d7cc030SBob Moore u32 apic_id; 13611d7cc030SBob Moore u32 flags; 1362eb2289baSBob Moore u32 clock_domain; 1363eb2289baSBob Moore u32 reserved2; 13641d7cc030SBob Moore }; 13651d7cc030SBob Moore 13661d7cc030SBob Moore /* Flags for struct acpi_srat_cpu_affinity and struct acpi_srat_x2apic_cpu_affinity */ 13671d7cc030SBob Moore 13681d7cc030SBob Moore #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 13691d7cc030SBob Moore 137063b8f8cdSHanjun Guo /* 3: GICC Affinity (ACPI 5.1) */ 137163b8f8cdSHanjun Guo 137263b8f8cdSHanjun Guo struct acpi_srat_gicc_affinity { 137363b8f8cdSHanjun Guo struct acpi_subtable_header header; 137463b8f8cdSHanjun Guo u32 proximity_domain; 137563b8f8cdSHanjun Guo u32 acpi_processor_uid; 137663b8f8cdSHanjun Guo u32 flags; 137763b8f8cdSHanjun Guo u32 clock_domain; 137863b8f8cdSHanjun Guo }; 137963b8f8cdSHanjun Guo 138063b8f8cdSHanjun Guo /* Flags for struct acpi_srat_gicc_affinity */ 138163b8f8cdSHanjun Guo 138263b8f8cdSHanjun Guo #define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ 138363b8f8cdSHanjun Guo 13846e596084SRobert Moore /* Reset to default packing */ 13856e596084SRobert Moore 13866e596084SRobert Moore #pragma pack() 13871da177e4SLinus Torvalds 13881da177e4SLinus Torvalds #endif /* __ACTBL1_H__ */ 1389