17c478bd9Sstevel@tonic-gate /****************************************************************************** 27c478bd9Sstevel@tonic-gate * 327f7c583Smyers * Name: actbl1.h - Additional ACPI table definitions 47c478bd9Sstevel@tonic-gate * 57c478bd9Sstevel@tonic-gate *****************************************************************************/ 67c478bd9Sstevel@tonic-gate 726f3cdf0SGordon Ross /* 8*385cc6b4SJerry Jelinek * Copyright (C) 2000 - 2016, Intel Corp. 97c478bd9Sstevel@tonic-gate * All rights reserved. 107c478bd9Sstevel@tonic-gate * 1126f3cdf0SGordon Ross * Redistribution and use in source and binary forms, with or without 1226f3cdf0SGordon Ross * modification, are permitted provided that the following conditions 1326f3cdf0SGordon Ross * are met: 1426f3cdf0SGordon Ross * 1. Redistributions of source code must retain the above copyright 1526f3cdf0SGordon Ross * notice, this list of conditions, and the following disclaimer, 1626f3cdf0SGordon Ross * without modification. 1726f3cdf0SGordon Ross * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1826f3cdf0SGordon Ross * substantially similar to the "NO WARRANTY" disclaimer below 1926f3cdf0SGordon Ross * ("Disclaimer") and any redistribution must be conditioned upon 2026f3cdf0SGordon Ross * including a substantially similar Disclaimer requirement for further 2126f3cdf0SGordon Ross * binary redistribution. 2226f3cdf0SGordon Ross * 3. Neither the names of the above-listed copyright holders nor the names 2326f3cdf0SGordon Ross * of any contributors may be used to endorse or promote products derived 2426f3cdf0SGordon Ross * from this software without specific prior written permission. 257c478bd9Sstevel@tonic-gate * 2626f3cdf0SGordon Ross * Alternatively, this software may be distributed under the terms of the 2726f3cdf0SGordon Ross * GNU General Public License ("GPL") version 2 as published by the Free 2826f3cdf0SGordon Ross * Software Foundation. 297c478bd9Sstevel@tonic-gate * 3026f3cdf0SGordon Ross * NO WARRANTY 3126f3cdf0SGordon Ross * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3226f3cdf0SGordon Ross * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3326f3cdf0SGordon Ross * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 3426f3cdf0SGordon Ross * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3526f3cdf0SGordon Ross * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3626f3cdf0SGordon Ross * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3726f3cdf0SGordon Ross * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3826f3cdf0SGordon Ross * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3926f3cdf0SGordon Ross * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 4026f3cdf0SGordon Ross * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 4126f3cdf0SGordon Ross * POSSIBILITY OF SUCH DAMAGES. 4226f3cdf0SGordon Ross */ 437c478bd9Sstevel@tonic-gate 447c478bd9Sstevel@tonic-gate #ifndef __ACTBL1_H__ 457c478bd9Sstevel@tonic-gate #define __ACTBL1_H__ 467c478bd9Sstevel@tonic-gate 4727f7c583Smyers 4827f7c583Smyers /******************************************************************************* 4927f7c583Smyers * 5057190917SDana Myers * Additional ACPI Tables (1) 5127f7c583Smyers * 5227f7c583Smyers * These tables are not consumed directly by the ACPICA subsystem, but are 5327f7c583Smyers * included here to support device drivers and the AML disassembler. 5427f7c583Smyers * 5557190917SDana Myers * The tables in this file are fully defined within the ACPI specification. 5657190917SDana Myers * 5727f7c583Smyers ******************************************************************************/ 5827f7c583Smyers 5927f7c583Smyers 6027f7c583Smyers /* 6157190917SDana Myers * Values for description table header signatures for tables defined in this 6257190917SDana Myers * file. Useful because they make it more difficult to inadvertently type in 6357190917SDana Myers * the wrong signature. 6427f7c583Smyers */ 65db2bae30SDana Myers #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 6627f7c583Smyers #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 6727f7c583Smyers #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 68db2bae30SDana Myers #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 69db2bae30SDana Myers #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 70db2bae30SDana Myers #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 7127f7c583Smyers #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 7257190917SDana Myers #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 7327f7c583Smyers #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 7427f7c583Smyers #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 7527f7c583Smyers #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 76*385cc6b4SJerry Jelinek #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 7727f7c583Smyers 7827f7c583Smyers 7927f7c583Smyers /* 8027f7c583Smyers * All tables must be byte-packed to match the ACPI specification, since 8127f7c583Smyers * the tables are provided by the system BIOS. 8227f7c583Smyers */ 837c478bd9Sstevel@tonic-gate #pragma pack(1) 847c478bd9Sstevel@tonic-gate 857c478bd9Sstevel@tonic-gate /* 86*385cc6b4SJerry Jelinek * Note: C bitfields are not used for this reason: 87*385cc6b4SJerry Jelinek * 88*385cc6b4SJerry Jelinek * "Bitfields are great and easy to read, but unfortunately the C language 89*385cc6b4SJerry Jelinek * does not specify the layout of bitfields in memory, which means they are 90*385cc6b4SJerry Jelinek * essentially useless for dealing with packed data in on-disk formats or 91*385cc6b4SJerry Jelinek * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 92*385cc6b4SJerry Jelinek * this decision was a design error in C. Ritchie could have picked an order 93*385cc6b4SJerry Jelinek * and stuck with it." Norman Ramsey. 94*385cc6b4SJerry Jelinek * See http://stackoverflow.com/a/1053662/41661 957c478bd9Sstevel@tonic-gate */ 9627f7c583Smyers 9727f7c583Smyers 9857190917SDana Myers /******************************************************************************* 9957190917SDana Myers * 10057190917SDana Myers * Common subtable headers 10157190917SDana Myers * 10257190917SDana Myers ******************************************************************************/ 10357190917SDana Myers 10457190917SDana Myers /* Generic subtable header (used in MADT, SRAT, etc.) */ 105db2bae30SDana Myers 106db2bae30SDana Myers typedef struct acpi_subtable_header 107db2bae30SDana Myers { 108db2bae30SDana Myers UINT8 Type; 109db2bae30SDana Myers UINT8 Length; 110db2bae30SDana Myers 111db2bae30SDana Myers } ACPI_SUBTABLE_HEADER; 112db2bae30SDana Myers 113db2bae30SDana Myers 11457190917SDana Myers /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 115db2bae30SDana Myers 116db2bae30SDana Myers typedef struct acpi_whea_header 117db2bae30SDana Myers { 118db2bae30SDana Myers UINT8 Action; 119db2bae30SDana Myers UINT8 Instruction; 120db2bae30SDana Myers UINT8 Flags; 121db2bae30SDana Myers UINT8 Reserved; 122db2bae30SDana Myers ACPI_GENERIC_ADDRESS RegisterRegion; 123db2bae30SDana Myers UINT64 Value; /* Value used with Read/Write register */ 124db2bae30SDana Myers UINT64 Mask; /* Bitmask required for this register instruction */ 125db2bae30SDana Myers 126db2bae30SDana Myers } ACPI_WHEA_HEADER; 127db2bae30SDana Myers 128db2bae30SDana Myers 12927f7c583Smyers /******************************************************************************* 13027f7c583Smyers * 13157190917SDana Myers * BERT - Boot Error Record Table (ACPI 4.0) 13257190917SDana Myers * Version 1 133db2bae30SDana Myers * 134db2bae30SDana Myers ******************************************************************************/ 135db2bae30SDana Myers 136db2bae30SDana Myers typedef struct acpi_table_bert 137db2bae30SDana Myers { 138db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 139db2bae30SDana Myers UINT32 RegionLength; /* Length of the boot error region */ 140*385cc6b4SJerry Jelinek UINT64 Address; /* Physical address of the error region */ 141db2bae30SDana Myers 142db2bae30SDana Myers } ACPI_TABLE_BERT; 143db2bae30SDana Myers 144db2bae30SDana Myers 14557190917SDana Myers /* Boot Error Region (not a subtable, pointed to by Address field above) */ 146db2bae30SDana Myers 147db2bae30SDana Myers typedef struct acpi_bert_region 148db2bae30SDana Myers { 14957190917SDana Myers UINT32 BlockStatus; /* Type of error information */ 15057190917SDana Myers UINT32 RawDataOffset; /* Offset to raw error data */ 15157190917SDana Myers UINT32 RawDataLength; /* Length of raw error data */ 15257190917SDana Myers UINT32 DataLength; /* Length of generic error data */ 15357190917SDana Myers UINT32 ErrorSeverity; /* Severity code */ 154db2bae30SDana Myers 155db2bae30SDana Myers } ACPI_BERT_REGION; 156db2bae30SDana Myers 15757190917SDana Myers /* Values for BlockStatus flags above */ 158db2bae30SDana Myers 159db2bae30SDana Myers #define ACPI_BERT_UNCORRECTABLE (1) 16057190917SDana Myers #define ACPI_BERT_CORRECTABLE (1<<1) 16157190917SDana Myers #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 16257190917SDana Myers #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 16357190917SDana Myers #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 164db2bae30SDana Myers 16557190917SDana Myers /* Values for ErrorSeverity above */ 166db2bae30SDana Myers 16757190917SDana Myers enum AcpiBertErrorSeverity 16827f7c583Smyers { 16957190917SDana Myers ACPI_BERT_ERROR_CORRECTABLE = 0, 17057190917SDana Myers ACPI_BERT_ERROR_FATAL = 1, 17157190917SDana Myers ACPI_BERT_ERROR_CORRECTED = 2, 17257190917SDana Myers ACPI_BERT_ERROR_NONE = 3, 17357190917SDana Myers ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 17457190917SDana Myers }; 17527f7c583Smyers 17657190917SDana Myers /* 17757190917SDana Myers * Note: The generic error data that follows the ErrorSeverity field above 17857190917SDana Myers * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 17957190917SDana Myers */ 18027f7c583Smyers 18127f7c583Smyers 18227f7c583Smyers /******************************************************************************* 18327f7c583Smyers * 18457190917SDana Myers * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 18557190917SDana Myers * Version 1 18627f7c583Smyers * 18727f7c583Smyers ******************************************************************************/ 18827f7c583Smyers 18927f7c583Smyers typedef struct acpi_table_cpep 19027f7c583Smyers { 191db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 19227f7c583Smyers UINT64 Reserved; 19327f7c583Smyers 19427f7c583Smyers } ACPI_TABLE_CPEP; 19527f7c583Smyers 196db2bae30SDana Myers 19727f7c583Smyers /* Subtable */ 19827f7c583Smyers 19927f7c583Smyers typedef struct acpi_cpep_polling 20027f7c583Smyers { 20157190917SDana Myers ACPI_SUBTABLE_HEADER Header; 202db2bae30SDana Myers UINT8 Id; /* Processor ID */ 203db2bae30SDana Myers UINT8 Eid; /* Processor EID */ 204db2bae30SDana Myers UINT32 Interval; /* Polling interval (msec) */ 20527f7c583Smyers 20627f7c583Smyers } ACPI_CPEP_POLLING; 20727f7c583Smyers 20827f7c583Smyers 20927f7c583Smyers /******************************************************************************* 21027f7c583Smyers * 21127f7c583Smyers * ECDT - Embedded Controller Boot Resources Table 21257190917SDana Myers * Version 1 21327f7c583Smyers * 21427f7c583Smyers ******************************************************************************/ 21527f7c583Smyers 216db2bae30SDana Myers typedef struct acpi_table_ecdt 21727f7c583Smyers { 218db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 219db2bae30SDana Myers ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 220db2bae30SDana Myers ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 22127f7c583Smyers UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 222db2bae30SDana Myers UINT8 Gpe; /* The GPE for the EC */ 223db2bae30SDana Myers UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 22427f7c583Smyers 225db2bae30SDana Myers } ACPI_TABLE_ECDT; 226db2bae30SDana Myers 227db2bae30SDana Myers 228db2bae30SDana Myers /******************************************************************************* 229db2bae30SDana Myers * 23057190917SDana Myers * EINJ - Error Injection Table (ACPI 4.0) 23157190917SDana Myers * Version 1 232db2bae30SDana Myers * 233db2bae30SDana Myers ******************************************************************************/ 234db2bae30SDana Myers 235db2bae30SDana Myers typedef struct acpi_table_einj 236db2bae30SDana Myers { 237db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 238db2bae30SDana Myers UINT32 HeaderLength; 23957190917SDana Myers UINT8 Flags; 24057190917SDana Myers UINT8 Reserved[3]; 241db2bae30SDana Myers UINT32 Entries; 242db2bae30SDana Myers 243db2bae30SDana Myers } ACPI_TABLE_EINJ; 244db2bae30SDana Myers 24557190917SDana Myers 246db2bae30SDana Myers /* EINJ Injection Instruction Entries (actions) */ 247db2bae30SDana Myers 248db2bae30SDana Myers typedef struct acpi_einj_entry 249db2bae30SDana Myers { 250db2bae30SDana Myers ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 251db2bae30SDana Myers 252db2bae30SDana Myers } ACPI_EINJ_ENTRY; 253db2bae30SDana Myers 25457190917SDana Myers /* Masks for Flags field above */ 25557190917SDana Myers 25657190917SDana Myers #define ACPI_EINJ_PRESERVE (1) 25757190917SDana Myers 258db2bae30SDana Myers /* Values for Action field above */ 259db2bae30SDana Myers 260db2bae30SDana Myers enum AcpiEinjActions 261db2bae30SDana Myers { 262db2bae30SDana Myers ACPI_EINJ_BEGIN_OPERATION = 0, 263db2bae30SDana Myers ACPI_EINJ_GET_TRIGGER_TABLE = 1, 264db2bae30SDana Myers ACPI_EINJ_SET_ERROR_TYPE = 2, 265db2bae30SDana Myers ACPI_EINJ_GET_ERROR_TYPE = 3, 266db2bae30SDana Myers ACPI_EINJ_END_OPERATION = 4, 267db2bae30SDana Myers ACPI_EINJ_EXECUTE_OPERATION = 5, 268db2bae30SDana Myers ACPI_EINJ_CHECK_BUSY_STATUS = 6, 269db2bae30SDana Myers ACPI_EINJ_GET_COMMAND_STATUS = 7, 270*385cc6b4SJerry Jelinek ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 271*385cc6b4SJerry Jelinek ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 272*385cc6b4SJerry Jelinek ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 273db2bae30SDana Myers ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 274db2bae30SDana Myers }; 275db2bae30SDana Myers 276db2bae30SDana Myers /* Values for Instruction field above */ 277db2bae30SDana Myers 278db2bae30SDana Myers enum AcpiEinjInstructions 279db2bae30SDana Myers { 280db2bae30SDana Myers ACPI_EINJ_READ_REGISTER = 0, 281db2bae30SDana Myers ACPI_EINJ_READ_REGISTER_VALUE = 1, 282db2bae30SDana Myers ACPI_EINJ_WRITE_REGISTER = 2, 283db2bae30SDana Myers ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 284db2bae30SDana Myers ACPI_EINJ_NOOP = 4, 285*385cc6b4SJerry Jelinek ACPI_EINJ_FLUSH_CACHELINE = 5, 286*385cc6b4SJerry Jelinek ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 287db2bae30SDana Myers }; 288db2bae30SDana Myers 289*385cc6b4SJerry Jelinek typedef struct acpi_einj_error_type_with_addr 290*385cc6b4SJerry Jelinek { 291*385cc6b4SJerry Jelinek UINT32 ErrorType; 292*385cc6b4SJerry Jelinek UINT32 VendorStructOffset; 293*385cc6b4SJerry Jelinek UINT32 Flags; 294*385cc6b4SJerry Jelinek UINT32 ApicId; 295*385cc6b4SJerry Jelinek UINT64 Address; 296*385cc6b4SJerry Jelinek UINT64 Range; 297*385cc6b4SJerry Jelinek UINT32 PcieId; 298*385cc6b4SJerry Jelinek 299*385cc6b4SJerry Jelinek } ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 300*385cc6b4SJerry Jelinek 301*385cc6b4SJerry Jelinek typedef struct acpi_einj_vendor 302*385cc6b4SJerry Jelinek { 303*385cc6b4SJerry Jelinek UINT32 Length; 304*385cc6b4SJerry Jelinek UINT32 PcieId; 305*385cc6b4SJerry Jelinek UINT16 VendorId; 306*385cc6b4SJerry Jelinek UINT16 DeviceId; 307*385cc6b4SJerry Jelinek UINT8 RevisionId; 308*385cc6b4SJerry Jelinek UINT8 Reserved[3]; 309*385cc6b4SJerry Jelinek 310*385cc6b4SJerry Jelinek } ACPI_EINJ_VENDOR; 311*385cc6b4SJerry Jelinek 31257190917SDana Myers 313db2bae30SDana Myers /* EINJ Trigger Error Action Table */ 314db2bae30SDana Myers 315db2bae30SDana Myers typedef struct acpi_einj_trigger 316db2bae30SDana Myers { 317db2bae30SDana Myers UINT32 HeaderSize; 318db2bae30SDana Myers UINT32 Revision; 319db2bae30SDana Myers UINT32 TableSize; 320db2bae30SDana Myers UINT32 EntryCount; 321db2bae30SDana Myers 322db2bae30SDana Myers } ACPI_EINJ_TRIGGER; 323db2bae30SDana Myers 32457190917SDana Myers /* Command status return values */ 32557190917SDana Myers 32657190917SDana Myers enum AcpiEinjCommandStatus 32757190917SDana Myers { 32857190917SDana Myers ACPI_EINJ_SUCCESS = 0, 32957190917SDana Myers ACPI_EINJ_FAILURE = 1, 33057190917SDana Myers ACPI_EINJ_INVALID_ACCESS = 2, 33157190917SDana Myers ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 33257190917SDana Myers }; 33357190917SDana Myers 33457190917SDana Myers 33557190917SDana Myers /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 33657190917SDana Myers 33757190917SDana Myers #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 33857190917SDana Myers #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 33957190917SDana Myers #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 34057190917SDana Myers #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 34157190917SDana Myers #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 34257190917SDana Myers #define ACPI_EINJ_MEMORY_FATAL (1<<5) 34357190917SDana Myers #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 34457190917SDana Myers #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 34557190917SDana Myers #define ACPI_EINJ_PCIX_FATAL (1<<8) 34657190917SDana Myers #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 34757190917SDana Myers #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 34857190917SDana Myers #define ACPI_EINJ_PLATFORM_FATAL (1<<11) 349*385cc6b4SJerry Jelinek #define ACPI_EINJ_VENDOR_DEFINED (1<<31) 35057190917SDana Myers 351db2bae30SDana Myers 352db2bae30SDana Myers /******************************************************************************* 353db2bae30SDana Myers * 35457190917SDana Myers * ERST - Error Record Serialization Table (ACPI 4.0) 35557190917SDana Myers * Version 1 356db2bae30SDana Myers * 357db2bae30SDana Myers ******************************************************************************/ 358db2bae30SDana Myers 359db2bae30SDana Myers typedef struct acpi_table_erst 360db2bae30SDana Myers { 361db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 362db2bae30SDana Myers UINT32 HeaderLength; 363db2bae30SDana Myers UINT32 Reserved; 364db2bae30SDana Myers UINT32 Entries; 365db2bae30SDana Myers 366db2bae30SDana Myers } ACPI_TABLE_ERST; 367db2bae30SDana Myers 36857190917SDana Myers 369db2bae30SDana Myers /* ERST Serialization Entries (actions) */ 370db2bae30SDana Myers 371db2bae30SDana Myers typedef struct acpi_erst_entry 372db2bae30SDana Myers { 373db2bae30SDana Myers ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 374db2bae30SDana Myers 375db2bae30SDana Myers } ACPI_ERST_ENTRY; 376db2bae30SDana Myers 37757190917SDana Myers /* Masks for Flags field above */ 37857190917SDana Myers 37957190917SDana Myers #define ACPI_ERST_PRESERVE (1) 38057190917SDana Myers 381db2bae30SDana Myers /* Values for Action field above */ 382db2bae30SDana Myers 383db2bae30SDana Myers enum AcpiErstActions 384db2bae30SDana Myers { 38557190917SDana Myers ACPI_ERST_BEGIN_WRITE = 0, 38657190917SDana Myers ACPI_ERST_BEGIN_READ = 1, 38757190917SDana Myers ACPI_ERST_BEGIN_CLEAR = 2, 38857190917SDana Myers ACPI_ERST_END = 3, 389db2bae30SDana Myers ACPI_ERST_SET_RECORD_OFFSET = 4, 390db2bae30SDana Myers ACPI_ERST_EXECUTE_OPERATION = 5, 391db2bae30SDana Myers ACPI_ERST_CHECK_BUSY_STATUS = 6, 392db2bae30SDana Myers ACPI_ERST_GET_COMMAND_STATUS = 7, 39357190917SDana Myers ACPI_ERST_GET_RECORD_ID = 8, 39457190917SDana Myers ACPI_ERST_SET_RECORD_ID = 9, 395db2bae30SDana Myers ACPI_ERST_GET_RECORD_COUNT = 10, 396db2bae30SDana Myers ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 397db2bae30SDana Myers ACPI_ERST_NOT_USED = 12, 398db2bae30SDana Myers ACPI_ERST_GET_ERROR_RANGE = 13, 399db2bae30SDana Myers ACPI_ERST_GET_ERROR_LENGTH = 14, 400db2bae30SDana Myers ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 401*385cc6b4SJerry Jelinek ACPI_ERST_EXECUTE_TIMINGS = 16, 402*385cc6b4SJerry Jelinek ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 403db2bae30SDana Myers }; 404db2bae30SDana Myers 405db2bae30SDana Myers /* Values for Instruction field above */ 406db2bae30SDana Myers 407db2bae30SDana Myers enum AcpiErstInstructions 408db2bae30SDana Myers { 409db2bae30SDana Myers ACPI_ERST_READ_REGISTER = 0, 410db2bae30SDana Myers ACPI_ERST_READ_REGISTER_VALUE = 1, 411db2bae30SDana Myers ACPI_ERST_WRITE_REGISTER = 2, 412db2bae30SDana Myers ACPI_ERST_WRITE_REGISTER_VALUE = 3, 413db2bae30SDana Myers ACPI_ERST_NOOP = 4, 414db2bae30SDana Myers ACPI_ERST_LOAD_VAR1 = 5, 415db2bae30SDana Myers ACPI_ERST_LOAD_VAR2 = 6, 416db2bae30SDana Myers ACPI_ERST_STORE_VAR1 = 7, 417db2bae30SDana Myers ACPI_ERST_ADD = 8, 418db2bae30SDana Myers ACPI_ERST_SUBTRACT = 9, 419db2bae30SDana Myers ACPI_ERST_ADD_VALUE = 10, 420db2bae30SDana Myers ACPI_ERST_SUBTRACT_VALUE = 11, 421db2bae30SDana Myers ACPI_ERST_STALL = 12, 422db2bae30SDana Myers ACPI_ERST_STALL_WHILE_TRUE = 13, 423db2bae30SDana Myers ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 424db2bae30SDana Myers ACPI_ERST_GOTO = 15, 425db2bae30SDana Myers ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 426db2bae30SDana Myers ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 427db2bae30SDana Myers ACPI_ERST_MOVE_DATA = 18, 428db2bae30SDana Myers ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 429db2bae30SDana Myers }; 430db2bae30SDana Myers 43157190917SDana Myers /* Command status return values */ 43257190917SDana Myers 43357190917SDana Myers enum AcpiErstCommandStatus 43457190917SDana Myers { 43557190917SDana Myers ACPI_ERST_SUCESS = 0, 43657190917SDana Myers ACPI_ERST_NO_SPACE = 1, 43757190917SDana Myers ACPI_ERST_NOT_AVAILABLE = 2, 43857190917SDana Myers ACPI_ERST_FAILURE = 3, 43957190917SDana Myers ACPI_ERST_RECORD_EMPTY = 4, 44057190917SDana Myers ACPI_ERST_NOT_FOUND = 5, 44157190917SDana Myers ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 44257190917SDana Myers }; 44357190917SDana Myers 44457190917SDana Myers 44557190917SDana Myers /* Error Record Serialization Information */ 44657190917SDana Myers 44757190917SDana Myers typedef struct acpi_erst_info 44857190917SDana Myers { 44957190917SDana Myers UINT16 Signature; /* Should be "ER" */ 45057190917SDana Myers UINT8 Data[48]; 45157190917SDana Myers 45257190917SDana Myers } ACPI_ERST_INFO; 45357190917SDana Myers 454db2bae30SDana Myers 455db2bae30SDana Myers /******************************************************************************* 456db2bae30SDana Myers * 45757190917SDana Myers * HEST - Hardware Error Source Table (ACPI 4.0) 45857190917SDana Myers * Version 1 459db2bae30SDana Myers * 460db2bae30SDana Myers ******************************************************************************/ 461db2bae30SDana Myers 462db2bae30SDana Myers typedef struct acpi_table_hest 463db2bae30SDana Myers { 464db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 465db2bae30SDana Myers UINT32 ErrorSourceCount; 466db2bae30SDana Myers 467db2bae30SDana Myers } ACPI_TABLE_HEST; 468db2bae30SDana Myers 469db2bae30SDana Myers 470db2bae30SDana Myers /* HEST subtable header */ 471db2bae30SDana Myers 472db2bae30SDana Myers typedef struct acpi_hest_header 473db2bae30SDana Myers { 474db2bae30SDana Myers UINT16 Type; 47557190917SDana Myers UINT16 SourceId; 476db2bae30SDana Myers 477db2bae30SDana Myers } ACPI_HEST_HEADER; 478db2bae30SDana Myers 479db2bae30SDana Myers 480db2bae30SDana Myers /* Values for Type field above for subtables */ 481db2bae30SDana Myers 482db2bae30SDana Myers enum AcpiHestTypes 483db2bae30SDana Myers { 48457190917SDana Myers ACPI_HEST_TYPE_IA32_CHECK = 0, 48557190917SDana Myers ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 48657190917SDana Myers ACPI_HEST_TYPE_IA32_NMI = 2, 48757190917SDana Myers ACPI_HEST_TYPE_NOT_USED3 = 3, 48857190917SDana Myers ACPI_HEST_TYPE_NOT_USED4 = 4, 48957190917SDana Myers ACPI_HEST_TYPE_NOT_USED5 = 5, 490db2bae30SDana Myers ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 491db2bae30SDana Myers ACPI_HEST_TYPE_AER_ENDPOINT = 7, 492db2bae30SDana Myers ACPI_HEST_TYPE_AER_BRIDGE = 8, 49357190917SDana Myers ACPI_HEST_TYPE_GENERIC_ERROR = 9, 494*385cc6b4SJerry Jelinek ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 495*385cc6b4SJerry Jelinek ACPI_HEST_TYPE_RESERVED = 11 /* 11 and greater are reserved */ 496db2bae30SDana Myers }; 497db2bae30SDana Myers 498db2bae30SDana Myers 499db2bae30SDana Myers /* 50057190917SDana Myers * HEST substructures contained in subtables 501db2bae30SDana Myers */ 502db2bae30SDana Myers 50357190917SDana Myers /* 50457190917SDana Myers * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 50557190917SDana Myers * ACPI_HEST_IA_CORRECTED structures. 50657190917SDana Myers */ 50757190917SDana Myers typedef struct acpi_hest_ia_error_bank 508db2bae30SDana Myers { 509db2bae30SDana Myers UINT8 BankNumber; 510db2bae30SDana Myers UINT8 ClearStatusOnInit; 511db2bae30SDana Myers UINT8 StatusFormat; 51257190917SDana Myers UINT8 Reserved; 513db2bae30SDana Myers UINT32 ControlRegister; 51457190917SDana Myers UINT64 ControlData; 515db2bae30SDana Myers UINT32 StatusRegister; 516db2bae30SDana Myers UINT32 AddressRegister; 517db2bae30SDana Myers UINT32 MiscRegister; 518db2bae30SDana Myers 51957190917SDana Myers } ACPI_HEST_IA_ERROR_BANK; 520db2bae30SDana Myers 521db2bae30SDana Myers 52257190917SDana Myers /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 523db2bae30SDana Myers 524db2bae30SDana Myers typedef struct acpi_hest_aer_common 525db2bae30SDana Myers { 52657190917SDana Myers UINT16 Reserved1; 527db2bae30SDana Myers UINT8 Flags; 528db2bae30SDana Myers UINT8 Enabled; 52957190917SDana Myers UINT32 RecordsToPreallocate; 530db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 531*385cc6b4SJerry Jelinek UINT32 Bus; /* Bus and Segment numbers */ 532db2bae30SDana Myers UINT16 Device; 533db2bae30SDana Myers UINT16 Function; 534db2bae30SDana Myers UINT16 DeviceControl; 53557190917SDana Myers UINT16 Reserved2; 53657190917SDana Myers UINT32 UncorrectableMask; 53757190917SDana Myers UINT32 UncorrectableSeverity; 53857190917SDana Myers UINT32 CorrectableMask; 53957190917SDana Myers UINT32 AdvancedCapabilities; 540db2bae30SDana Myers 541db2bae30SDana Myers } ACPI_HEST_AER_COMMON; 542db2bae30SDana Myers 54357190917SDana Myers /* Masks for HEST Flags fields */ 54457190917SDana Myers 54557190917SDana Myers #define ACPI_HEST_FIRMWARE_FIRST (1) 54657190917SDana Myers #define ACPI_HEST_GLOBAL (1<<1) 54757190917SDana Myers 548*385cc6b4SJerry Jelinek /* 549*385cc6b4SJerry Jelinek * Macros to access the bus/segment numbers in Bus field above: 550*385cc6b4SJerry Jelinek * Bus number is encoded in bits 7:0 551*385cc6b4SJerry Jelinek * Segment number is encoded in bits 23:8 552*385cc6b4SJerry Jelinek */ 553*385cc6b4SJerry Jelinek #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 554*385cc6b4SJerry Jelinek #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 555*385cc6b4SJerry Jelinek 556db2bae30SDana Myers 557db2bae30SDana Myers /* Hardware Error Notification */ 558db2bae30SDana Myers 559db2bae30SDana Myers typedef struct acpi_hest_notify 560db2bae30SDana Myers { 561db2bae30SDana Myers UINT8 Type; 562db2bae30SDana Myers UINT8 Length; 563db2bae30SDana Myers UINT16 ConfigWriteEnable; 564db2bae30SDana Myers UINT32 PollInterval; 565db2bae30SDana Myers UINT32 Vector; 566db2bae30SDana Myers UINT32 PollingThresholdValue; 567db2bae30SDana Myers UINT32 PollingThresholdWindow; 568db2bae30SDana Myers UINT32 ErrorThresholdValue; 569db2bae30SDana Myers UINT32 ErrorThresholdWindow; 570db2bae30SDana Myers 571db2bae30SDana Myers } ACPI_HEST_NOTIFY; 572db2bae30SDana Myers 573db2bae30SDana Myers /* Values for Notify Type field above */ 574db2bae30SDana Myers 575db2bae30SDana Myers enum AcpiHestNotifyTypes 576db2bae30SDana Myers { 577db2bae30SDana Myers ACPI_HEST_NOTIFY_POLLED = 0, 578db2bae30SDana Myers ACPI_HEST_NOTIFY_EXTERNAL = 1, 579db2bae30SDana Myers ACPI_HEST_NOTIFY_LOCAL = 2, 580db2bae30SDana Myers ACPI_HEST_NOTIFY_SCI = 3, 581db2bae30SDana Myers ACPI_HEST_NOTIFY_NMI = 4, 582*385cc6b4SJerry Jelinek ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 583*385cc6b4SJerry Jelinek ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 584*385cc6b4SJerry Jelinek ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 585*385cc6b4SJerry Jelinek ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 586*385cc6b4SJerry Jelinek ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 587*385cc6b4SJerry Jelinek ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 588*385cc6b4SJerry Jelinek ACPI_HEST_NOTIFY_RESERVED = 11 /* 11 and greater are reserved */ 589db2bae30SDana Myers }; 590db2bae30SDana Myers 59157190917SDana Myers /* Values for ConfigWriteEnable bitfield above */ 59257190917SDana Myers 59357190917SDana Myers #define ACPI_HEST_TYPE (1) 59457190917SDana Myers #define ACPI_HEST_POLL_INTERVAL (1<<1) 59557190917SDana Myers #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 59657190917SDana Myers #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 59757190917SDana Myers #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 59857190917SDana Myers #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 59957190917SDana Myers 600db2bae30SDana Myers 601db2bae30SDana Myers /* 602db2bae30SDana Myers * HEST subtables 603db2bae30SDana Myers */ 604db2bae30SDana Myers 60557190917SDana Myers /* 0: IA32 Machine Check Exception */ 606db2bae30SDana Myers 60757190917SDana Myers typedef struct acpi_hest_ia_machine_check 608db2bae30SDana Myers { 609db2bae30SDana Myers ACPI_HEST_HEADER Header; 61057190917SDana Myers UINT16 Reserved1; 611db2bae30SDana Myers UINT8 Flags; 61257190917SDana Myers UINT8 Enabled; 61357190917SDana Myers UINT32 RecordsToPreallocate; 614db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 615db2bae30SDana Myers UINT64 GlobalCapabilityData; 616db2bae30SDana Myers UINT64 GlobalControlData; 617db2bae30SDana Myers UINT8 NumHardwareBanks; 61857190917SDana Myers UINT8 Reserved3[7]; 619db2bae30SDana Myers 62057190917SDana Myers } ACPI_HEST_IA_MACHINE_CHECK; 621db2bae30SDana Myers 622db2bae30SDana Myers 62357190917SDana Myers /* 1: IA32 Corrected Machine Check */ 624db2bae30SDana Myers 62557190917SDana Myers typedef struct acpi_hest_ia_corrected 626db2bae30SDana Myers { 627db2bae30SDana Myers ACPI_HEST_HEADER Header; 62857190917SDana Myers UINT16 Reserved1; 629db2bae30SDana Myers UINT8 Flags; 630db2bae30SDana Myers UINT8 Enabled; 63157190917SDana Myers UINT32 RecordsToPreallocate; 632db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 633db2bae30SDana Myers ACPI_HEST_NOTIFY Notify; 634db2bae30SDana Myers UINT8 NumHardwareBanks; 63557190917SDana Myers UINT8 Reserved2[3]; 636db2bae30SDana Myers 63757190917SDana Myers } ACPI_HEST_IA_CORRECTED; 638db2bae30SDana Myers 639db2bae30SDana Myers 64057190917SDana Myers /* 2: IA32 Non-Maskable Interrupt */ 641db2bae30SDana Myers 64257190917SDana Myers typedef struct acpi_hest_ia_nmi 643db2bae30SDana Myers { 644db2bae30SDana Myers ACPI_HEST_HEADER Header; 645db2bae30SDana Myers UINT32 Reserved; 64657190917SDana Myers UINT32 RecordsToPreallocate; 647db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 648db2bae30SDana Myers UINT32 MaxRawDataLength; 649db2bae30SDana Myers 65057190917SDana Myers } ACPI_HEST_IA_NMI; 651db2bae30SDana Myers 652db2bae30SDana Myers 65357190917SDana Myers /* 3,4,5: Not used */ 654db2bae30SDana Myers 655db2bae30SDana Myers /* 6: PCI Express Root Port AER */ 656db2bae30SDana Myers 657db2bae30SDana Myers typedef struct acpi_hest_aer_root 658db2bae30SDana Myers { 659db2bae30SDana Myers ACPI_HEST_HEADER Header; 660db2bae30SDana Myers ACPI_HEST_AER_COMMON Aer; 661db2bae30SDana Myers UINT32 RootErrorCommand; 662db2bae30SDana Myers 663db2bae30SDana Myers } ACPI_HEST_AER_ROOT; 664db2bae30SDana Myers 665db2bae30SDana Myers 666db2bae30SDana Myers /* 7: PCI Express AER (AER Endpoint) */ 667db2bae30SDana Myers 668db2bae30SDana Myers typedef struct acpi_hest_aer 669db2bae30SDana Myers { 670db2bae30SDana Myers ACPI_HEST_HEADER Header; 671db2bae30SDana Myers ACPI_HEST_AER_COMMON Aer; 672db2bae30SDana Myers 673db2bae30SDana Myers } ACPI_HEST_AER; 674db2bae30SDana Myers 675db2bae30SDana Myers 676db2bae30SDana Myers /* 8: PCI Express/PCI-X Bridge AER */ 677db2bae30SDana Myers 678db2bae30SDana Myers typedef struct acpi_hest_aer_bridge 679db2bae30SDana Myers { 680db2bae30SDana Myers ACPI_HEST_HEADER Header; 681db2bae30SDana Myers ACPI_HEST_AER_COMMON Aer; 68257190917SDana Myers UINT32 UncorrectableMask2; 68357190917SDana Myers UINT32 UncorrectableSeverity2; 68457190917SDana Myers UINT32 AdvancedCapabilities2; 685db2bae30SDana Myers 686db2bae30SDana Myers } ACPI_HEST_AER_BRIDGE; 687db2bae30SDana Myers 688db2bae30SDana Myers 689db2bae30SDana Myers /* 9: Generic Hardware Error Source */ 690db2bae30SDana Myers 691db2bae30SDana Myers typedef struct acpi_hest_generic 692db2bae30SDana Myers { 693db2bae30SDana Myers ACPI_HEST_HEADER Header; 694db2bae30SDana Myers UINT16 RelatedSourceId; 69557190917SDana Myers UINT8 Reserved; 696db2bae30SDana Myers UINT8 Enabled; 69757190917SDana Myers UINT32 RecordsToPreallocate; 698db2bae30SDana Myers UINT32 MaxSectionsPerRecord; 699db2bae30SDana Myers UINT32 MaxRawDataLength; 700db2bae30SDana Myers ACPI_GENERIC_ADDRESS ErrorStatusAddress; 701db2bae30SDana Myers ACPI_HEST_NOTIFY Notify; 70257190917SDana Myers UINT32 ErrorBlockLength; 703db2bae30SDana Myers 704db2bae30SDana Myers } ACPI_HEST_GENERIC; 70527f7c583Smyers 70627f7c583Smyers 707*385cc6b4SJerry Jelinek /* 10: Generic Hardware Error Source, version 2 */ 708*385cc6b4SJerry Jelinek 709*385cc6b4SJerry Jelinek typedef struct acpi_hest_generic_v2 710*385cc6b4SJerry Jelinek { 711*385cc6b4SJerry Jelinek ACPI_HEST_HEADER Header; 712*385cc6b4SJerry Jelinek UINT16 RelatedSourceId; 713*385cc6b4SJerry Jelinek UINT8 Reserved; 714*385cc6b4SJerry Jelinek UINT8 Enabled; 715*385cc6b4SJerry Jelinek UINT32 RecordsToPreallocate; 716*385cc6b4SJerry Jelinek UINT32 MaxSectionsPerRecord; 717*385cc6b4SJerry Jelinek UINT32 MaxRawDataLength; 718*385cc6b4SJerry Jelinek ACPI_GENERIC_ADDRESS ErrorStatusAddress; 719*385cc6b4SJerry Jelinek ACPI_HEST_NOTIFY Notify; 720*385cc6b4SJerry Jelinek UINT32 ErrorBlockLength; 721*385cc6b4SJerry Jelinek ACPI_GENERIC_ADDRESS ReadAckRegister; 722*385cc6b4SJerry Jelinek UINT64 ReadAckPreserve; 723*385cc6b4SJerry Jelinek UINT64 ReadAckWrite; 724*385cc6b4SJerry Jelinek 725*385cc6b4SJerry Jelinek } ACPI_HEST_GENERIC_V2; 726*385cc6b4SJerry Jelinek 727*385cc6b4SJerry Jelinek 72857190917SDana Myers /* Generic Error Status block */ 72927f7c583Smyers 73057190917SDana Myers typedef struct acpi_hest_generic_status 73127f7c583Smyers { 73257190917SDana Myers UINT32 BlockStatus; 73357190917SDana Myers UINT32 RawDataOffset; 73457190917SDana Myers UINT32 RawDataLength; 73557190917SDana Myers UINT32 DataLength; 73657190917SDana Myers UINT32 ErrorSeverity; 73757190917SDana Myers 73857190917SDana Myers } ACPI_HEST_GENERIC_STATUS; 73957190917SDana Myers 74057190917SDana Myers /* Values for BlockStatus flags above */ 74157190917SDana Myers 74257190917SDana Myers #define ACPI_HEST_UNCORRECTABLE (1) 74357190917SDana Myers #define ACPI_HEST_CORRECTABLE (1<<1) 74457190917SDana Myers #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 74557190917SDana Myers #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 74657190917SDana Myers #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 74757190917SDana Myers 74857190917SDana Myers 74957190917SDana Myers /* Generic Error Data entry */ 75057190917SDana Myers 75157190917SDana Myers typedef struct acpi_hest_generic_data 75257190917SDana Myers { 75357190917SDana Myers UINT8 SectionType[16]; 75457190917SDana Myers UINT32 ErrorSeverity; 75557190917SDana Myers UINT16 Revision; 75657190917SDana Myers UINT8 ValidationBits; 757db2bae30SDana Myers UINT8 Flags; 75857190917SDana Myers UINT32 ErrorDataLength; 75957190917SDana Myers UINT8 FruId[16]; 76057190917SDana Myers UINT8 FruText[20]; 76127f7c583Smyers 76257190917SDana Myers } ACPI_HEST_GENERIC_DATA; 76327f7c583Smyers 764*385cc6b4SJerry Jelinek /* Extension for revision 0x0300 */ 765*385cc6b4SJerry Jelinek 766*385cc6b4SJerry Jelinek typedef struct acpi_hest_generic_data_v300 767*385cc6b4SJerry Jelinek { 768*385cc6b4SJerry Jelinek UINT8 SectionType[16]; 769*385cc6b4SJerry Jelinek UINT32 ErrorSeverity; 770*385cc6b4SJerry Jelinek UINT16 Revision; 771*385cc6b4SJerry Jelinek UINT8 ValidationBits; 772*385cc6b4SJerry Jelinek UINT8 Flags; 773*385cc6b4SJerry Jelinek UINT32 ErrorDataLength; 774*385cc6b4SJerry Jelinek UINT8 FruId[16]; 775*385cc6b4SJerry Jelinek UINT8 FruText[20]; 776*385cc6b4SJerry Jelinek UINT64 TimeStamp; 777*385cc6b4SJerry Jelinek 778*385cc6b4SJerry Jelinek } ACPI_HEST_GENERIC_DATA_V300; 779*385cc6b4SJerry Jelinek 780*385cc6b4SJerry Jelinek /* Values for ErrorSeverity above */ 781*385cc6b4SJerry Jelinek 782*385cc6b4SJerry Jelinek #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 783*385cc6b4SJerry Jelinek #define ACPI_HEST_GEN_ERROR_FATAL 1 784*385cc6b4SJerry Jelinek #define ACPI_HEST_GEN_ERROR_CORRECTED 2 785*385cc6b4SJerry Jelinek #define ACPI_HEST_GEN_ERROR_NONE 3 786*385cc6b4SJerry Jelinek 787*385cc6b4SJerry Jelinek /* Flags for ValidationBits above */ 788*385cc6b4SJerry Jelinek 789*385cc6b4SJerry Jelinek #define ACPI_HEST_GEN_VALID_FRU_ID (1) 790*385cc6b4SJerry Jelinek #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 791*385cc6b4SJerry Jelinek #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 792*385cc6b4SJerry Jelinek 79327f7c583Smyers 79427f7c583Smyers /******************************************************************************* 79527f7c583Smyers * 79627f7c583Smyers * MADT - Multiple APIC Description Table 79757190917SDana Myers * Version 3 79827f7c583Smyers * 79927f7c583Smyers ******************************************************************************/ 80027f7c583Smyers 801db2bae30SDana Myers typedef struct acpi_table_madt 80227f7c583Smyers { 803db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 804db2bae30SDana Myers UINT32 Address; /* Physical address of local APIC */ 805db2bae30SDana Myers UINT32 Flags; 806450d6964Smyers 807db2bae30SDana Myers } ACPI_TABLE_MADT; 808450d6964Smyers 80957190917SDana Myers /* Masks for Flags field above */ 810450d6964Smyers 811db2bae30SDana Myers #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 8127c478bd9Sstevel@tonic-gate 813db2bae30SDana Myers /* Values for PCATCompat flag */ 81427f7c583Smyers 815db2bae30SDana Myers #define ACPI_MADT_DUAL_PIC 0 816db2bae30SDana Myers #define ACPI_MADT_MULTIPLE_APIC 1 81727f7c583Smyers 81827f7c583Smyers 81957190917SDana Myers /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 82027f7c583Smyers 821db2bae30SDana Myers enum AcpiMadtType 82227f7c583Smyers { 823db2bae30SDana Myers ACPI_MADT_TYPE_LOCAL_APIC = 0, 824db2bae30SDana Myers ACPI_MADT_TYPE_IO_APIC = 1, 825db2bae30SDana Myers ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 826db2bae30SDana Myers ACPI_MADT_TYPE_NMI_SOURCE = 3, 827db2bae30SDana Myers ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 828db2bae30SDana Myers ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 829db2bae30SDana Myers ACPI_MADT_TYPE_IO_SAPIC = 6, 830db2bae30SDana Myers ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 831db2bae30SDana Myers ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 832db2bae30SDana Myers ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 833db2bae30SDana Myers ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 834*385cc6b4SJerry Jelinek ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 835*385cc6b4SJerry Jelinek ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 836*385cc6b4SJerry Jelinek ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 837*385cc6b4SJerry Jelinek ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 838*385cc6b4SJerry Jelinek ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 839*385cc6b4SJerry Jelinek ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ 840db2bae30SDana Myers }; 8417c478bd9Sstevel@tonic-gate 8427c478bd9Sstevel@tonic-gate 8437c478bd9Sstevel@tonic-gate /* 844*385cc6b4SJerry Jelinek * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 8457c478bd9Sstevel@tonic-gate */ 84627f7c583Smyers 847db2bae30SDana Myers /* 0: Processor Local APIC */ 84827f7c583Smyers 849db2bae30SDana Myers typedef struct acpi_madt_local_apic 8507c478bd9Sstevel@tonic-gate { 851db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 85227f7c583Smyers UINT8 ProcessorId; /* ACPI processor id */ 853db2bae30SDana Myers UINT8 Id; /* Processor's local APIC id */ 854db2bae30SDana Myers UINT32 LapicFlags; 85527f7c583Smyers 856db2bae30SDana Myers } ACPI_MADT_LOCAL_APIC; 85727f7c583Smyers 85857190917SDana Myers 85927f7c583Smyers /* 1: IO APIC */ 86027f7c583Smyers 861db2bae30SDana Myers typedef struct acpi_madt_io_apic 86227f7c583Smyers { 863db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 864db2bae30SDana Myers UINT8 Id; /* I/O APIC ID */ 86527f7c583Smyers UINT8 Reserved; /* Reserved - must be zero */ 86627f7c583Smyers UINT32 Address; /* APIC physical address */ 867db2bae30SDana Myers UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 86827f7c583Smyers 869db2bae30SDana Myers } ACPI_MADT_IO_APIC; 87027f7c583Smyers 87157190917SDana Myers 87227f7c583Smyers /* 2: Interrupt Override */ 87327f7c583Smyers 874db2bae30SDana Myers typedef struct acpi_madt_interrupt_override 87527f7c583Smyers { 876db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 87727f7c583Smyers UINT8 Bus; /* 0 - ISA */ 878db2bae30SDana Myers UINT8 SourceIrq; /* Interrupt source (IRQ) */ 879db2bae30SDana Myers UINT32 GlobalIrq; /* Global system interrupt */ 880db2bae30SDana Myers UINT16 IntiFlags; 88127f7c583Smyers 882db2bae30SDana Myers } ACPI_MADT_INTERRUPT_OVERRIDE; 88327f7c583Smyers 88457190917SDana Myers 885db2bae30SDana Myers /* 3: NMI Source */ 88627f7c583Smyers 887db2bae30SDana Myers typedef struct acpi_madt_nmi_source 88827f7c583Smyers { 889db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 890db2bae30SDana Myers UINT16 IntiFlags; 891db2bae30SDana Myers UINT32 GlobalIrq; /* Global system interrupt */ 89227f7c583Smyers 893db2bae30SDana Myers } ACPI_MADT_NMI_SOURCE; 89427f7c583Smyers 89557190917SDana Myers 89627f7c583Smyers /* 4: Local APIC NMI */ 89727f7c583Smyers 898db2bae30SDana Myers typedef struct acpi_madt_local_apic_nmi 89927f7c583Smyers { 900db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 90127f7c583Smyers UINT8 ProcessorId; /* ACPI processor id */ 902db2bae30SDana Myers UINT16 IntiFlags; 90327f7c583Smyers UINT8 Lint; /* LINTn to which NMI is connected */ 90427f7c583Smyers 905db2bae30SDana Myers } ACPI_MADT_LOCAL_APIC_NMI; 90627f7c583Smyers 90757190917SDana Myers 90827f7c583Smyers /* 5: Address Override */ 90927f7c583Smyers 910db2bae30SDana Myers typedef struct acpi_madt_local_apic_override 91127f7c583Smyers { 912db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 91327f7c583Smyers UINT16 Reserved; /* Reserved, must be zero */ 91427f7c583Smyers UINT64 Address; /* APIC physical address */ 91527f7c583Smyers 916db2bae30SDana Myers } ACPI_MADT_LOCAL_APIC_OVERRIDE; 91727f7c583Smyers 91857190917SDana Myers 91927f7c583Smyers /* 6: I/O Sapic */ 92027f7c583Smyers 921db2bae30SDana Myers typedef struct acpi_madt_io_sapic 92227f7c583Smyers { 923db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 924db2bae30SDana Myers UINT8 Id; /* I/O SAPIC ID */ 92527f7c583Smyers UINT8 Reserved; /* Reserved, must be zero */ 926db2bae30SDana Myers UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 92727f7c583Smyers UINT64 Address; /* SAPIC physical address */ 92827f7c583Smyers 929db2bae30SDana Myers } ACPI_MADT_IO_SAPIC; 93027f7c583Smyers 93157190917SDana Myers 93227f7c583Smyers /* 7: Local Sapic */ 93327f7c583Smyers 934db2bae30SDana Myers typedef struct acpi_madt_local_sapic 93527f7c583Smyers { 936db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 93727f7c583Smyers UINT8 ProcessorId; /* ACPI processor id */ 938db2bae30SDana Myers UINT8 Id; /* SAPIC ID */ 939db2bae30SDana Myers UINT8 Eid; /* SAPIC EID */ 94027f7c583Smyers UINT8 Reserved[3]; /* Reserved, must be zero */ 941db2bae30SDana Myers UINT32 LapicFlags; 942db2bae30SDana Myers UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 943db2bae30SDana Myers char UidString[1]; /* String UID - ACPI 3.0 */ 94427f7c583Smyers 945db2bae30SDana Myers } ACPI_MADT_LOCAL_SAPIC; 94627f7c583Smyers 94757190917SDana Myers 94827f7c583Smyers /* 8: Platform Interrupt Source */ 94927f7c583Smyers 950db2bae30SDana Myers typedef struct acpi_madt_interrupt_source 95127f7c583Smyers { 952db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 953db2bae30SDana Myers UINT16 IntiFlags; 954db2bae30SDana Myers UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 955db2bae30SDana Myers UINT8 Id; /* Processor ID */ 956db2bae30SDana Myers UINT8 Eid; /* Processor EID */ 95727f7c583Smyers UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 958db2bae30SDana Myers UINT32 GlobalIrq; /* Global system interrupt */ 95927f7c583Smyers UINT32 Flags; /* Interrupt Source Flags */ 96027f7c583Smyers 961db2bae30SDana Myers } ACPI_MADT_INTERRUPT_SOURCE; 96227f7c583Smyers 96357190917SDana Myers /* Masks for Flags field above */ 964b6917abeSmishra 965db2bae30SDana Myers #define ACPI_MADT_CPEI_OVERRIDE (1) 966db2bae30SDana Myers 96757190917SDana Myers 96857190917SDana Myers /* 9: Processor Local X2APIC (ACPI 4.0) */ 969db2bae30SDana Myers 970db2bae30SDana Myers typedef struct acpi_madt_local_x2apic 971b6917abeSmishra { 972db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 973b6917abeSmishra UINT16 Reserved; /* Reserved - must be zero */ 974aa2aa9a6SDana Myers UINT32 LocalApicId; /* Processor x2APIC ID */ 975db2bae30SDana Myers UINT32 LapicFlags; 976aa2aa9a6SDana Myers UINT32 Uid; /* ACPI processor UID */ 977b6917abeSmishra 978db2bae30SDana Myers } ACPI_MADT_LOCAL_X2APIC; 979b6917abeSmishra 98057190917SDana Myers 98157190917SDana Myers /* 10: Local X2APIC NMI (ACPI 4.0) */ 982db2bae30SDana Myers 983db2bae30SDana Myers typedef struct acpi_madt_local_x2apic_nmi 984b6917abeSmishra { 985db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 986db2bae30SDana Myers UINT16 IntiFlags; 987aa2aa9a6SDana Myers UINT32 Uid; /* ACPI processor UID */ 988b6917abeSmishra UINT8 Lint; /* LINTn to which NMI is connected */ 989aa2aa9a6SDana Myers UINT8 Reserved[3]; /* Reserved - must be zero */ 990db2bae30SDana Myers 991db2bae30SDana Myers } ACPI_MADT_LOCAL_X2APIC_NMI; 992db2bae30SDana Myers 993db2bae30SDana Myers 994*385cc6b4SJerry Jelinek /* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ 995*385cc6b4SJerry Jelinek 996*385cc6b4SJerry Jelinek typedef struct acpi_madt_generic_interrupt 997*385cc6b4SJerry Jelinek { 998*385cc6b4SJerry Jelinek ACPI_SUBTABLE_HEADER Header; 999*385cc6b4SJerry Jelinek UINT16 Reserved; /* Reserved - must be zero */ 1000*385cc6b4SJerry Jelinek UINT32 CpuInterfaceNumber; 1001*385cc6b4SJerry Jelinek UINT32 Uid; 1002*385cc6b4SJerry Jelinek UINT32 Flags; 1003*385cc6b4SJerry Jelinek UINT32 ParkingVersion; 1004*385cc6b4SJerry Jelinek UINT32 PerformanceInterrupt; 1005*385cc6b4SJerry Jelinek UINT64 ParkedAddress; 1006*385cc6b4SJerry Jelinek UINT64 BaseAddress; 1007*385cc6b4SJerry Jelinek UINT64 GicvBaseAddress; 1008*385cc6b4SJerry Jelinek UINT64 GichBaseAddress; 1009*385cc6b4SJerry Jelinek UINT32 VgicInterrupt; 1010*385cc6b4SJerry Jelinek UINT64 GicrBaseAddress; 1011*385cc6b4SJerry Jelinek UINT64 ArmMpidr; 1012*385cc6b4SJerry Jelinek UINT8 EfficiencyClass; 1013*385cc6b4SJerry Jelinek UINT8 Reserved2[3]; 1014*385cc6b4SJerry Jelinek 1015*385cc6b4SJerry Jelinek } ACPI_MADT_GENERIC_INTERRUPT; 1016*385cc6b4SJerry Jelinek 1017*385cc6b4SJerry Jelinek /* Masks for Flags field above */ 1018*385cc6b4SJerry Jelinek 1019*385cc6b4SJerry Jelinek /* ACPI_MADT_ENABLED (1) Processor is usable if set */ 1020*385cc6b4SJerry Jelinek #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 1021*385cc6b4SJerry Jelinek #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 1022*385cc6b4SJerry Jelinek 1023*385cc6b4SJerry Jelinek 1024*385cc6b4SJerry Jelinek /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 1025*385cc6b4SJerry Jelinek 1026*385cc6b4SJerry Jelinek typedef struct acpi_madt_generic_distributor 1027*385cc6b4SJerry Jelinek { 1028*385cc6b4SJerry Jelinek ACPI_SUBTABLE_HEADER Header; 1029*385cc6b4SJerry Jelinek UINT16 Reserved; /* Reserved - must be zero */ 1030*385cc6b4SJerry Jelinek UINT32 GicId; 1031*385cc6b4SJerry Jelinek UINT64 BaseAddress; 1032*385cc6b4SJerry Jelinek UINT32 GlobalIrqBase; 1033*385cc6b4SJerry Jelinek UINT8 Version; 1034*385cc6b4SJerry Jelinek UINT8 Reserved2[3]; /* Reserved - must be zero */ 1035*385cc6b4SJerry Jelinek 1036*385cc6b4SJerry Jelinek } ACPI_MADT_GENERIC_DISTRIBUTOR; 1037*385cc6b4SJerry Jelinek 1038*385cc6b4SJerry Jelinek /* Values for Version field above */ 1039*385cc6b4SJerry Jelinek 1040*385cc6b4SJerry Jelinek enum AcpiMadtGicVersion 1041*385cc6b4SJerry Jelinek { 1042*385cc6b4SJerry Jelinek ACPI_MADT_GIC_VERSION_NONE = 0, 1043*385cc6b4SJerry Jelinek ACPI_MADT_GIC_VERSION_V1 = 1, 1044*385cc6b4SJerry Jelinek ACPI_MADT_GIC_VERSION_V2 = 2, 1045*385cc6b4SJerry Jelinek ACPI_MADT_GIC_VERSION_V3 = 3, 1046*385cc6b4SJerry Jelinek ACPI_MADT_GIC_VERSION_V4 = 4, 1047*385cc6b4SJerry Jelinek ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1048*385cc6b4SJerry Jelinek }; 1049*385cc6b4SJerry Jelinek 1050*385cc6b4SJerry Jelinek 1051*385cc6b4SJerry Jelinek /* 13: Generic MSI Frame (ACPI 5.1) */ 1052*385cc6b4SJerry Jelinek 1053*385cc6b4SJerry Jelinek typedef struct acpi_madt_generic_msi_frame 1054*385cc6b4SJerry Jelinek { 1055*385cc6b4SJerry Jelinek ACPI_SUBTABLE_HEADER Header; 1056*385cc6b4SJerry Jelinek UINT16 Reserved; /* Reserved - must be zero */ 1057*385cc6b4SJerry Jelinek UINT32 MsiFrameId; 1058*385cc6b4SJerry Jelinek UINT64 BaseAddress; 1059*385cc6b4SJerry Jelinek UINT32 Flags; 1060*385cc6b4SJerry Jelinek UINT16 SpiCount; 1061*385cc6b4SJerry Jelinek UINT16 SpiBase; 1062*385cc6b4SJerry Jelinek 1063*385cc6b4SJerry Jelinek } ACPI_MADT_GENERIC_MSI_FRAME; 1064*385cc6b4SJerry Jelinek 1065*385cc6b4SJerry Jelinek /* Masks for Flags field above */ 1066*385cc6b4SJerry Jelinek 1067*385cc6b4SJerry Jelinek #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1068*385cc6b4SJerry Jelinek 1069*385cc6b4SJerry Jelinek 1070*385cc6b4SJerry Jelinek /* 14: Generic Redistributor (ACPI 5.1) */ 1071*385cc6b4SJerry Jelinek 1072*385cc6b4SJerry Jelinek typedef struct acpi_madt_generic_redistributor 1073*385cc6b4SJerry Jelinek { 1074*385cc6b4SJerry Jelinek ACPI_SUBTABLE_HEADER Header; 1075*385cc6b4SJerry Jelinek UINT16 Reserved; /* reserved - must be zero */ 1076*385cc6b4SJerry Jelinek UINT64 BaseAddress; 1077*385cc6b4SJerry Jelinek UINT32 Length; 1078*385cc6b4SJerry Jelinek 1079*385cc6b4SJerry Jelinek } ACPI_MADT_GENERIC_REDISTRIBUTOR; 1080*385cc6b4SJerry Jelinek 1081*385cc6b4SJerry Jelinek 1082*385cc6b4SJerry Jelinek /* 15: Generic Translator (ACPI 6.0) */ 1083*385cc6b4SJerry Jelinek 1084*385cc6b4SJerry Jelinek typedef struct acpi_madt_generic_translator 1085*385cc6b4SJerry Jelinek { 1086*385cc6b4SJerry Jelinek ACPI_SUBTABLE_HEADER Header; 1087*385cc6b4SJerry Jelinek UINT16 Reserved; /* reserved - must be zero */ 1088*385cc6b4SJerry Jelinek UINT32 TranslationId; 1089*385cc6b4SJerry Jelinek UINT64 BaseAddress; 1090*385cc6b4SJerry Jelinek UINT32 Reserved2; 1091*385cc6b4SJerry Jelinek 1092*385cc6b4SJerry Jelinek } ACPI_MADT_GENERIC_TRANSLATOR; 1093*385cc6b4SJerry Jelinek 1094*385cc6b4SJerry Jelinek 1095db2bae30SDana Myers /* 1096db2bae30SDana Myers * Common flags fields for MADT subtables 1097db2bae30SDana Myers */ 1098db2bae30SDana Myers 1099*385cc6b4SJerry Jelinek /* MADT Local APIC flags */ 1100db2bae30SDana Myers 1101db2bae30SDana Myers #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1102db2bae30SDana Myers 1103db2bae30SDana Myers /* MADT MPS INTI flags (IntiFlags) */ 1104db2bae30SDana Myers 1105db2bae30SDana Myers #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1106db2bae30SDana Myers #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1107db2bae30SDana Myers 1108db2bae30SDana Myers /* Values for MPS INTI flags */ 1109db2bae30SDana Myers 1110db2bae30SDana Myers #define ACPI_MADT_POLARITY_CONFORMS 0 1111db2bae30SDana Myers #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1112db2bae30SDana Myers #define ACPI_MADT_POLARITY_RESERVED 2 1113db2bae30SDana Myers #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1114db2bae30SDana Myers 1115db2bae30SDana Myers #define ACPI_MADT_TRIGGER_CONFORMS (0) 1116db2bae30SDana Myers #define ACPI_MADT_TRIGGER_EDGE (1<<2) 1117db2bae30SDana Myers #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1118db2bae30SDana Myers #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1119b6917abeSmishra 112027f7c583Smyers 112127f7c583Smyers /******************************************************************************* 112227f7c583Smyers * 112357190917SDana Myers * MSCT - Maximum System Characteristics Table (ACPI 4.0) 112457190917SDana Myers * Version 1 112527f7c583Smyers * 112627f7c583Smyers ******************************************************************************/ 112727f7c583Smyers 112857190917SDana Myers typedef struct acpi_table_msct 112927f7c583Smyers { 1130db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 113157190917SDana Myers UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 113257190917SDana Myers UINT32 MaxProximityDomains;/* Max number of proximity domains */ 113357190917SDana Myers UINT32 MaxClockDomains; /* Max number of clock domains */ 113457190917SDana Myers UINT64 MaxAddress; /* Max physical address in system */ 113527f7c583Smyers 113657190917SDana Myers } ACPI_TABLE_MSCT; 113727f7c583Smyers 1138db2bae30SDana Myers 113957190917SDana Myers /* Subtable - Maximum Proximity Domain Information. Version 1 */ 1140db2bae30SDana Myers 114157190917SDana Myers typedef struct acpi_msct_proximity 114227f7c583Smyers { 114357190917SDana Myers UINT8 Revision; 114457190917SDana Myers UINT8 Length; 114557190917SDana Myers UINT32 RangeStart; /* Start of domain range */ 114657190917SDana Myers UINT32 RangeEnd; /* End of domain range */ 114757190917SDana Myers UINT32 ProcessorCapacity; 114857190917SDana Myers UINT64 MemoryCapacity; /* In bytes */ 114927f7c583Smyers 115057190917SDana Myers } ACPI_MSCT_PROXIMITY; 115127f7c583Smyers 115227f7c583Smyers 115327f7c583Smyers /******************************************************************************* 115427f7c583Smyers * 1155*385cc6b4SJerry Jelinek * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1156*385cc6b4SJerry Jelinek * Version 1 1157*385cc6b4SJerry Jelinek * 1158*385cc6b4SJerry Jelinek ******************************************************************************/ 1159*385cc6b4SJerry Jelinek 1160*385cc6b4SJerry Jelinek typedef struct acpi_table_nfit 1161*385cc6b4SJerry Jelinek { 1162*385cc6b4SJerry Jelinek ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1163*385cc6b4SJerry Jelinek UINT32 Reserved; /* Reserved, must be zero */ 1164*385cc6b4SJerry Jelinek 1165*385cc6b4SJerry Jelinek } ACPI_TABLE_NFIT; 1166*385cc6b4SJerry Jelinek 1167*385cc6b4SJerry Jelinek /* Subtable header for NFIT */ 1168*385cc6b4SJerry Jelinek 1169*385cc6b4SJerry Jelinek typedef struct acpi_nfit_header 1170*385cc6b4SJerry Jelinek { 1171*385cc6b4SJerry Jelinek UINT16 Type; 1172*385cc6b4SJerry Jelinek UINT16 Length; 1173*385cc6b4SJerry Jelinek 1174*385cc6b4SJerry Jelinek } ACPI_NFIT_HEADER; 1175*385cc6b4SJerry Jelinek 1176*385cc6b4SJerry Jelinek 1177*385cc6b4SJerry Jelinek /* Values for subtable type in ACPI_NFIT_HEADER */ 1178*385cc6b4SJerry Jelinek 1179*385cc6b4SJerry Jelinek enum AcpiNfitType 1180*385cc6b4SJerry Jelinek { 1181*385cc6b4SJerry Jelinek ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1182*385cc6b4SJerry Jelinek ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1183*385cc6b4SJerry Jelinek ACPI_NFIT_TYPE_INTERLEAVE = 2, 1184*385cc6b4SJerry Jelinek ACPI_NFIT_TYPE_SMBIOS = 3, 1185*385cc6b4SJerry Jelinek ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1186*385cc6b4SJerry Jelinek ACPI_NFIT_TYPE_DATA_REGION = 5, 1187*385cc6b4SJerry Jelinek ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1188*385cc6b4SJerry Jelinek ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ 1189*385cc6b4SJerry Jelinek }; 1190*385cc6b4SJerry Jelinek 1191*385cc6b4SJerry Jelinek /* 1192*385cc6b4SJerry Jelinek * NFIT Subtables 1193*385cc6b4SJerry Jelinek */ 1194*385cc6b4SJerry Jelinek 1195*385cc6b4SJerry Jelinek /* 0: System Physical Address Range Structure */ 1196*385cc6b4SJerry Jelinek 1197*385cc6b4SJerry Jelinek typedef struct acpi_nfit_system_address 1198*385cc6b4SJerry Jelinek { 1199*385cc6b4SJerry Jelinek ACPI_NFIT_HEADER Header; 1200*385cc6b4SJerry Jelinek UINT16 RangeIndex; 1201*385cc6b4SJerry Jelinek UINT16 Flags; 1202*385cc6b4SJerry Jelinek UINT32 Reserved; /* Reseved, must be zero */ 1203*385cc6b4SJerry Jelinek UINT32 ProximityDomain; 1204*385cc6b4SJerry Jelinek UINT8 RangeGuid[16]; 1205*385cc6b4SJerry Jelinek UINT64 Address; 1206*385cc6b4SJerry Jelinek UINT64 Length; 1207*385cc6b4SJerry Jelinek UINT64 MemoryMapping; 1208*385cc6b4SJerry Jelinek 1209*385cc6b4SJerry Jelinek } ACPI_NFIT_SYSTEM_ADDRESS; 1210*385cc6b4SJerry Jelinek 1211*385cc6b4SJerry Jelinek /* Flags */ 1212*385cc6b4SJerry Jelinek 1213*385cc6b4SJerry Jelinek #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1214*385cc6b4SJerry Jelinek #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1215*385cc6b4SJerry Jelinek 1216*385cc6b4SJerry Jelinek /* Range Type GUIDs appear in the include/acuuid.h file */ 1217*385cc6b4SJerry Jelinek 1218*385cc6b4SJerry Jelinek 1219*385cc6b4SJerry Jelinek /* 1: Memory Device to System Address Range Map Structure */ 1220*385cc6b4SJerry Jelinek 1221*385cc6b4SJerry Jelinek typedef struct acpi_nfit_memory_map 1222*385cc6b4SJerry Jelinek { 1223*385cc6b4SJerry Jelinek ACPI_NFIT_HEADER Header; 1224*385cc6b4SJerry Jelinek UINT32 DeviceHandle; 1225*385cc6b4SJerry Jelinek UINT16 PhysicalId; 1226*385cc6b4SJerry Jelinek UINT16 RegionId; 1227*385cc6b4SJerry Jelinek UINT16 RangeIndex; 1228*385cc6b4SJerry Jelinek UINT16 RegionIndex; 1229*385cc6b4SJerry Jelinek UINT64 RegionSize; 1230*385cc6b4SJerry Jelinek UINT64 RegionOffset; 1231*385cc6b4SJerry Jelinek UINT64 Address; 1232*385cc6b4SJerry Jelinek UINT16 InterleaveIndex; 1233*385cc6b4SJerry Jelinek UINT16 InterleaveWays; 1234*385cc6b4SJerry Jelinek UINT16 Flags; 1235*385cc6b4SJerry Jelinek UINT16 Reserved; /* Reserved, must be zero */ 1236*385cc6b4SJerry Jelinek 1237*385cc6b4SJerry Jelinek } ACPI_NFIT_MEMORY_MAP; 1238*385cc6b4SJerry Jelinek 1239*385cc6b4SJerry Jelinek /* Flags */ 1240*385cc6b4SJerry Jelinek 1241*385cc6b4SJerry Jelinek #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1242*385cc6b4SJerry Jelinek #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1243*385cc6b4SJerry Jelinek #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1244*385cc6b4SJerry Jelinek #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1245*385cc6b4SJerry Jelinek #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1246*385cc6b4SJerry Jelinek #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1247*385cc6b4SJerry Jelinek #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1248*385cc6b4SJerry Jelinek 1249*385cc6b4SJerry Jelinek 1250*385cc6b4SJerry Jelinek /* 2: Interleave Structure */ 1251*385cc6b4SJerry Jelinek 1252*385cc6b4SJerry Jelinek typedef struct acpi_nfit_interleave 1253*385cc6b4SJerry Jelinek { 1254*385cc6b4SJerry Jelinek ACPI_NFIT_HEADER Header; 1255*385cc6b4SJerry Jelinek UINT16 InterleaveIndex; 1256*385cc6b4SJerry Jelinek UINT16 Reserved; /* Reserved, must be zero */ 1257*385cc6b4SJerry Jelinek UINT32 LineCount; 1258*385cc6b4SJerry Jelinek UINT32 LineSize; 1259*385cc6b4SJerry Jelinek UINT32 LineOffset[1]; /* Variable length */ 1260*385cc6b4SJerry Jelinek 1261*385cc6b4SJerry Jelinek } ACPI_NFIT_INTERLEAVE; 1262*385cc6b4SJerry Jelinek 1263*385cc6b4SJerry Jelinek 1264*385cc6b4SJerry Jelinek /* 3: SMBIOS Management Information Structure */ 1265*385cc6b4SJerry Jelinek 1266*385cc6b4SJerry Jelinek typedef struct acpi_nfit_smbios 1267*385cc6b4SJerry Jelinek { 1268*385cc6b4SJerry Jelinek ACPI_NFIT_HEADER Header; 1269*385cc6b4SJerry Jelinek UINT32 Reserved; /* Reserved, must be zero */ 1270*385cc6b4SJerry Jelinek UINT8 Data[1]; /* Variable length */ 1271*385cc6b4SJerry Jelinek 1272*385cc6b4SJerry Jelinek } ACPI_NFIT_SMBIOS; 1273*385cc6b4SJerry Jelinek 1274*385cc6b4SJerry Jelinek 1275*385cc6b4SJerry Jelinek /* 4: NVDIMM Control Region Structure */ 1276*385cc6b4SJerry Jelinek 1277*385cc6b4SJerry Jelinek typedef struct acpi_nfit_control_region 1278*385cc6b4SJerry Jelinek { 1279*385cc6b4SJerry Jelinek ACPI_NFIT_HEADER Header; 1280*385cc6b4SJerry Jelinek UINT16 RegionIndex; 1281*385cc6b4SJerry Jelinek UINT16 VendorId; 1282*385cc6b4SJerry Jelinek UINT16 DeviceId; 1283*385cc6b4SJerry Jelinek UINT16 RevisionId; 1284*385cc6b4SJerry Jelinek UINT16 SubsystemVendorId; 1285*385cc6b4SJerry Jelinek UINT16 SubsystemDeviceId; 1286*385cc6b4SJerry Jelinek UINT16 SubsystemRevisionId; 1287*385cc6b4SJerry Jelinek UINT8 ValidFields; 1288*385cc6b4SJerry Jelinek UINT8 ManufacturingLocation; 1289*385cc6b4SJerry Jelinek UINT16 ManufacturingDate; 1290*385cc6b4SJerry Jelinek UINT8 Reserved[2]; /* Reserved, must be zero */ 1291*385cc6b4SJerry Jelinek UINT32 SerialNumber; 1292*385cc6b4SJerry Jelinek UINT16 Code; 1293*385cc6b4SJerry Jelinek UINT16 Windows; 1294*385cc6b4SJerry Jelinek UINT64 WindowSize; 1295*385cc6b4SJerry Jelinek UINT64 CommandOffset; 1296*385cc6b4SJerry Jelinek UINT64 CommandSize; 1297*385cc6b4SJerry Jelinek UINT64 StatusOffset; 1298*385cc6b4SJerry Jelinek UINT64 StatusSize; 1299*385cc6b4SJerry Jelinek UINT16 Flags; 1300*385cc6b4SJerry Jelinek UINT8 Reserved1[6]; /* Reserved, must be zero */ 1301*385cc6b4SJerry Jelinek 1302*385cc6b4SJerry Jelinek } ACPI_NFIT_CONTROL_REGION; 1303*385cc6b4SJerry Jelinek 1304*385cc6b4SJerry Jelinek /* Flags */ 1305*385cc6b4SJerry Jelinek 1306*385cc6b4SJerry Jelinek #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1307*385cc6b4SJerry Jelinek 1308*385cc6b4SJerry Jelinek /* ValidFields bits */ 1309*385cc6b4SJerry Jelinek 1310*385cc6b4SJerry Jelinek #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 1311*385cc6b4SJerry Jelinek 1312*385cc6b4SJerry Jelinek 1313*385cc6b4SJerry Jelinek /* 5: NVDIMM Block Data Window Region Structure */ 1314*385cc6b4SJerry Jelinek 1315*385cc6b4SJerry Jelinek typedef struct acpi_nfit_data_region 1316*385cc6b4SJerry Jelinek { 1317*385cc6b4SJerry Jelinek ACPI_NFIT_HEADER Header; 1318*385cc6b4SJerry Jelinek UINT16 RegionIndex; 1319*385cc6b4SJerry Jelinek UINT16 Windows; 1320*385cc6b4SJerry Jelinek UINT64 Offset; 1321*385cc6b4SJerry Jelinek UINT64 Size; 1322*385cc6b4SJerry Jelinek UINT64 Capacity; 1323*385cc6b4SJerry Jelinek UINT64 StartAddress; 1324*385cc6b4SJerry Jelinek 1325*385cc6b4SJerry Jelinek } ACPI_NFIT_DATA_REGION; 1326*385cc6b4SJerry Jelinek 1327*385cc6b4SJerry Jelinek 1328*385cc6b4SJerry Jelinek /* 6: Flush Hint Address Structure */ 1329*385cc6b4SJerry Jelinek 1330*385cc6b4SJerry Jelinek typedef struct acpi_nfit_flush_address 1331*385cc6b4SJerry Jelinek { 1332*385cc6b4SJerry Jelinek ACPI_NFIT_HEADER Header; 1333*385cc6b4SJerry Jelinek UINT32 DeviceHandle; 1334*385cc6b4SJerry Jelinek UINT16 HintCount; 1335*385cc6b4SJerry Jelinek UINT8 Reserved[6]; /* Reserved, must be zero */ 1336*385cc6b4SJerry Jelinek UINT64 HintAddress[1]; /* Variable length */ 1337*385cc6b4SJerry Jelinek 1338*385cc6b4SJerry Jelinek } ACPI_NFIT_FLUSH_ADDRESS; 1339*385cc6b4SJerry Jelinek 1340*385cc6b4SJerry Jelinek 1341*385cc6b4SJerry Jelinek /******************************************************************************* 1342*385cc6b4SJerry Jelinek * 134327f7c583Smyers * SBST - Smart Battery Specification Table 134457190917SDana Myers * Version 1 134527f7c583Smyers * 134627f7c583Smyers ******************************************************************************/ 134727f7c583Smyers 1348db2bae30SDana Myers typedef struct acpi_table_sbst 134927f7c583Smyers { 1350db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 135127f7c583Smyers UINT32 WarningLevel; 135227f7c583Smyers UINT32 LowLevel; 135327f7c583Smyers UINT32 CriticalLevel; 135427f7c583Smyers 1355db2bae30SDana Myers } ACPI_TABLE_SBST; 135627f7c583Smyers 135727f7c583Smyers 135827f7c583Smyers /******************************************************************************* 135927f7c583Smyers * 136027f7c583Smyers * SLIT - System Locality Distance Information Table 136157190917SDana Myers * Version 1 136227f7c583Smyers * 136327f7c583Smyers ******************************************************************************/ 136427f7c583Smyers 1365db2bae30SDana Myers typedef struct acpi_table_slit 136627f7c583Smyers { 1367db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 136827f7c583Smyers UINT64 LocalityCount; 1369db2bae30SDana Myers UINT8 Entry[1]; /* Real size = localities^2 */ 137027f7c583Smyers 1371db2bae30SDana Myers } ACPI_TABLE_SLIT; 137227f7c583Smyers 137327f7c583Smyers 137427f7c583Smyers /******************************************************************************* 137527f7c583Smyers * 137627f7c583Smyers * SRAT - System Resource Affinity Table 137757190917SDana Myers * Version 3 137827f7c583Smyers * 137927f7c583Smyers ******************************************************************************/ 138027f7c583Smyers 1381db2bae30SDana Myers typedef struct acpi_table_srat 138227f7c583Smyers { 1383db2bae30SDana Myers ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1384db2bae30SDana Myers UINT32 TableRevision; /* Must be value '1' */ 1385db2bae30SDana Myers UINT64 Reserved; /* Reserved, must be zero */ 138627f7c583Smyers 1387db2bae30SDana Myers } ACPI_TABLE_SRAT; 138827f7c583Smyers 1389db2bae30SDana Myers /* Values for subtable type in ACPI_SUBTABLE_HEADER */ 139027f7c583Smyers 1391db2bae30SDana Myers enum AcpiSratType 139227f7c583Smyers { 1393db2bae30SDana Myers ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1394db2bae30SDana Myers ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1395db2bae30SDana Myers ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 1396*385cc6b4SJerry Jelinek ACPI_SRAT_TYPE_GICC_AFFINITY = 3, 1397*385cc6b4SJerry Jelinek ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */ 1398db2bae30SDana Myers }; 1399db2bae30SDana Myers 1400db2bae30SDana Myers /* 1401*385cc6b4SJerry Jelinek * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1402db2bae30SDana Myers */ 1403db2bae30SDana Myers 1404db2bae30SDana Myers /* 0: Processor Local APIC/SAPIC Affinity */ 1405db2bae30SDana Myers 1406db2bae30SDana Myers typedef struct acpi_srat_cpu_affinity 1407db2bae30SDana Myers { 1408db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 140927f7c583Smyers UINT8 ProximityDomainLo; 141027f7c583Smyers UINT8 ApicId; 1411db2bae30SDana Myers UINT32 Flags; 141227f7c583Smyers UINT8 LocalSapicEid; 141327f7c583Smyers UINT8 ProximityDomainHi[3]; 1414*385cc6b4SJerry Jelinek UINT32 ClockDomain; 141527f7c583Smyers 1416db2bae30SDana Myers } ACPI_SRAT_CPU_AFFINITY; 141727f7c583Smyers 141857190917SDana Myers /* Flags */ 141957190917SDana Myers 142057190917SDana Myers #define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 142157190917SDana Myers 142257190917SDana Myers 1423db2bae30SDana Myers /* 1: Memory Affinity */ 1424db2bae30SDana Myers 1425db2bae30SDana Myers typedef struct acpi_srat_mem_affinity 142627f7c583Smyers { 1427db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 142827f7c583Smyers UINT32 ProximityDomain; 1429db2bae30SDana Myers UINT16 Reserved; /* Reserved, must be zero */ 143027f7c583Smyers UINT64 BaseAddress; 1431db2bae30SDana Myers UINT64 Length; 1432db2bae30SDana Myers UINT32 Reserved1; 1433db2bae30SDana Myers UINT32 Flags; 1434db2bae30SDana Myers UINT64 Reserved2; /* Reserved, must be zero */ 143527f7c583Smyers 1436db2bae30SDana Myers } ACPI_SRAT_MEM_AFFINITY; 143727f7c583Smyers 1438db2bae30SDana Myers /* Flags */ 143927f7c583Smyers 1440db2bae30SDana Myers #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1441db2bae30SDana Myers #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1442db2bae30SDana Myers #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 144327f7c583Smyers 144457190917SDana Myers 144557190917SDana Myers /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 1446db2bae30SDana Myers 1447db2bae30SDana Myers typedef struct acpi_srat_x2apic_cpu_affinity 1448db2bae30SDana Myers { 1449db2bae30SDana Myers ACPI_SUBTABLE_HEADER Header; 1450db2bae30SDana Myers UINT16 Reserved; /* Reserved, must be zero */ 1451db2bae30SDana Myers UINT32 ProximityDomain; 1452db2bae30SDana Myers UINT32 ApicId; 1453db2bae30SDana Myers UINT32 Flags; 145457190917SDana Myers UINT32 ClockDomain; 145557190917SDana Myers UINT32 Reserved2; 1456db2bae30SDana Myers 1457db2bae30SDana Myers } ACPI_SRAT_X2APIC_CPU_AFFINITY; 1458db2bae30SDana Myers 1459db2bae30SDana Myers /* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 1460db2bae30SDana Myers 1461db2bae30SDana Myers #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 146227f7c583Smyers 146327f7c583Smyers 1464*385cc6b4SJerry Jelinek /* 3: GICC Affinity (ACPI 5.1) */ 1465*385cc6b4SJerry Jelinek 1466*385cc6b4SJerry Jelinek typedef struct acpi_srat_gicc_affinity 1467*385cc6b4SJerry Jelinek { 1468*385cc6b4SJerry Jelinek ACPI_SUBTABLE_HEADER Header; 1469*385cc6b4SJerry Jelinek UINT32 ProximityDomain; 1470*385cc6b4SJerry Jelinek UINT32 AcpiProcessorUid; 1471*385cc6b4SJerry Jelinek UINT32 Flags; 1472*385cc6b4SJerry Jelinek UINT32 ClockDomain; 1473*385cc6b4SJerry Jelinek 1474*385cc6b4SJerry Jelinek } ACPI_SRAT_GICC_AFFINITY; 1475*385cc6b4SJerry Jelinek 1476*385cc6b4SJerry Jelinek /* Flags for ACPI_SRAT_GICC_AFFINITY */ 1477*385cc6b4SJerry Jelinek 1478*385cc6b4SJerry Jelinek #define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ 1479*385cc6b4SJerry Jelinek 1480*385cc6b4SJerry Jelinek 148127f7c583Smyers /* Reset to default packing */ 14827c478bd9Sstevel@tonic-gate 14837c478bd9Sstevel@tonic-gate #pragma pack() 14847c478bd9Sstevel@tonic-gate 14857c478bd9Sstevel@tonic-gate #endif /* __ACTBL1_H__ */ 1486