actbl1.h revision 316303
169450Smsmith/****************************************************************************** 269450Smsmith * 3167802Sjkim * Name: actbl1.h - Additional ACPI table definitions 469450Smsmith * 569450Smsmith *****************************************************************************/ 669450Smsmith 7316303Sjkim/****************************************************************************** 8316303Sjkim * 9316303Sjkim * 1. Copyright Notice 10316303Sjkim * 11316303Sjkim * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. 1270243Smsmith * All rights reserved. 1369450Smsmith * 14316303Sjkim * 2. License 15316303Sjkim * 16316303Sjkim * 2.1. This is your license from Intel Corp. under its intellectual property 17316303Sjkim * rights. You may have additional license terms from the party that provided 18316303Sjkim * you this software, covering your right to use that party's intellectual 19316303Sjkim * property rights. 20316303Sjkim * 21316303Sjkim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 22316303Sjkim * copy of the source code appearing in this file ("Covered Code") an 23316303Sjkim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 24316303Sjkim * base code distributed originally by Intel ("Original Intel Code") to copy, 25316303Sjkim * make derivatives, distribute, use and display any portion of the Covered 26316303Sjkim * Code in any form, with the right to sublicense such rights; and 27316303Sjkim * 28316303Sjkim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 29316303Sjkim * license (with the right to sublicense), under only those claims of Intel 30316303Sjkim * patents that are infringed by the Original Intel Code, to make, use, sell, 31316303Sjkim * offer to sell, and import the Covered Code and derivative works thereof 32316303Sjkim * solely to the minimum extent necessary to exercise the above copyright 33316303Sjkim * license, and in no event shall the patent license extend to any additions 34316303Sjkim * to or modifications of the Original Intel Code. No other license or right 35316303Sjkim * is granted directly or by implication, estoppel or otherwise; 36316303Sjkim * 37316303Sjkim * The above copyright and patent license is granted only if the following 38316303Sjkim * conditions are met: 39316303Sjkim * 40316303Sjkim * 3. Conditions 41316303Sjkim * 42316303Sjkim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43316303Sjkim * Redistribution of source code of any substantial portion of the Covered 44316303Sjkim * Code or modification with rights to further distribute source must include 45316303Sjkim * the above Copyright Notice, the above License, this list of Conditions, 46316303Sjkim * and the following Disclaimer and Export Compliance provision. In addition, 47316303Sjkim * Licensee must cause all Covered Code to which Licensee contributes to 48316303Sjkim * contain a file documenting the changes Licensee made to create that Covered 49316303Sjkim * Code and the date of any change. Licensee must include in that file the 50316303Sjkim * documentation of any changes made by any predecessor Licensee. Licensee 51316303Sjkim * must include a prominent statement that the modification is derived, 52316303Sjkim * directly or indirectly, from Original Intel Code. 53316303Sjkim * 54316303Sjkim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 55316303Sjkim * Redistribution of source code of any substantial portion of the Covered 56316303Sjkim * Code or modification without rights to further distribute source must 57316303Sjkim * include the following Disclaimer and Export Compliance provision in the 58316303Sjkim * documentation and/or other materials provided with distribution. In 59316303Sjkim * addition, Licensee may not authorize further sublicense of source of any 60316303Sjkim * portion of the Covered Code, and must include terms to the effect that the 61316303Sjkim * license from Licensee to its licensee is limited to the intellectual 62316303Sjkim * property embodied in the software Licensee provides to its licensee, and 63316303Sjkim * not to intellectual property embodied in modifications its licensee may 64316303Sjkim * make. 65316303Sjkim * 66316303Sjkim * 3.3. Redistribution of Executable. Redistribution in executable form of any 67316303Sjkim * substantial portion of the Covered Code or modification must reproduce the 68316303Sjkim * above Copyright Notice, and the following Disclaimer and Export Compliance 69316303Sjkim * provision in the documentation and/or other materials provided with the 70316303Sjkim * distribution. 71316303Sjkim * 72316303Sjkim * 3.4. Intel retains all right, title, and interest in and to the Original 73316303Sjkim * Intel Code. 74316303Sjkim * 75316303Sjkim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76316303Sjkim * Intel shall be used in advertising or otherwise to promote the sale, use or 77316303Sjkim * other dealings in products derived from or relating to the Covered Code 78316303Sjkim * without prior written authorization from Intel. 79316303Sjkim * 80316303Sjkim * 4. Disclaimer and Export Compliance 81316303Sjkim * 82316303Sjkim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83316303Sjkim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84316303Sjkim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85316303Sjkim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86316303Sjkim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 87316303Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 88316303Sjkim * PARTICULAR PURPOSE. 89316303Sjkim * 90316303Sjkim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 91316303Sjkim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 92316303Sjkim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93316303Sjkim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 94316303Sjkim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95316303Sjkim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 96316303Sjkim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 97316303Sjkim * LIMITED REMEDY. 98316303Sjkim * 99316303Sjkim * 4.3. Licensee shall not export, either directly or indirectly, any of this 100316303Sjkim * software or system incorporating such software without first obtaining any 101316303Sjkim * required license or other approval from the U. S. Department of Commerce or 102316303Sjkim * any other agency or department of the United States Government. In the 103316303Sjkim * event Licensee exports any such software from the United States or 104316303Sjkim * re-exports any such software from a foreign destination, Licensee shall 105316303Sjkim * ensure that the distribution and export/re-export of the software is in 106316303Sjkim * compliance with all laws, regulations, orders, or other restrictions of the 107316303Sjkim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108316303Sjkim * any of its subsidiaries will export/re-export any technical data, process, 109316303Sjkim * software, or service, directly or indirectly, to any country for which the 110316303Sjkim * United States government or any agency thereof requires an export license, 111316303Sjkim * other governmental approval, or letter of assurance, without first obtaining 112316303Sjkim * such license, approval or letter. 113316303Sjkim * 114316303Sjkim ***************************************************************************** 115316303Sjkim * 116316303Sjkim * Alternatively, you may choose to be licensed under the terms of the 117316303Sjkim * following license: 118316303Sjkim * 119217365Sjkim * Redistribution and use in source and binary forms, with or without 120217365Sjkim * modification, are permitted provided that the following conditions 121217365Sjkim * are met: 122217365Sjkim * 1. Redistributions of source code must retain the above copyright 123217365Sjkim * notice, this list of conditions, and the following disclaimer, 124217365Sjkim * without modification. 125217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 126217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 127217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 128217365Sjkim * including a substantially similar Disclaimer requirement for further 129217365Sjkim * binary redistribution. 130217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 131217365Sjkim * of any contributors may be used to endorse or promote products derived 132217365Sjkim * from this software without specific prior written permission. 13369450Smsmith * 134316303Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 135316303Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 136316303Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 137316303Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 138316303Sjkim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 139316303Sjkim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 140316303Sjkim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 141316303Sjkim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 142316303Sjkim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 143316303Sjkim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 144316303Sjkim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 145316303Sjkim * 146316303Sjkim * Alternatively, you may choose to be licensed under the terms of the 147217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 148217365Sjkim * Software Foundation. 14969450Smsmith * 150316303Sjkim *****************************************************************************/ 15169450Smsmith 15269450Smsmith#ifndef __ACTBL1_H__ 15369450Smsmith#define __ACTBL1_H__ 15469450Smsmith 155167802Sjkim 156167802Sjkim/******************************************************************************* 157167802Sjkim * 158197104Sjkim * Additional ACPI Tables (1) 159167802Sjkim * 160167802Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are 161167802Sjkim * included here to support device drivers and the AML disassembler. 162167802Sjkim * 163197104Sjkim * The tables in this file are fully defined within the ACPI specification. 164197104Sjkim * 165167802Sjkim ******************************************************************************/ 166167802Sjkim 167167802Sjkim 168167802Sjkim/* 169197104Sjkim * Values for description table header signatures for tables defined in this 170197104Sjkim * file. Useful because they make it more difficult to inadvertently type in 171197104Sjkim * the wrong signature. 172167802Sjkim */ 173193267Sjkim#define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 174167802Sjkim#define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 175167802Sjkim#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 176193267Sjkim#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 177193267Sjkim#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 178193267Sjkim#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 179167802Sjkim#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 180197104Sjkim#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 181167802Sjkim#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 182167802Sjkim#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 183167802Sjkim#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 184283092Sjkim#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 185167802Sjkim 186167802Sjkim 187167802Sjkim/* 188167802Sjkim * All tables must be byte-packed to match the ACPI specification, since 189167802Sjkim * the tables are provided by the system BIOS. 190167802Sjkim */ 19169450Smsmith#pragma pack(1) 19269450Smsmith 19391116Smsmith/* 194239340Sjkim * Note: C bitfields are not used for this reason: 195239340Sjkim * 196239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language 197239340Sjkim * does not specify the layout of bitfields in memory, which means they are 198239340Sjkim * essentially useless for dealing with packed data in on-disk formats or 199239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 200239340Sjkim * this decision was a design error in C. Ritchie could have picked an order 201239340Sjkim * and stuck with it." Norman Ramsey. 202239340Sjkim * See http://stackoverflow.com/a/1053662/41661 20391116Smsmith */ 204167802Sjkim 205167802Sjkim 206197104Sjkim/******************************************************************************* 207197104Sjkim * 208197104Sjkim * Common subtable headers 209197104Sjkim * 210197104Sjkim ******************************************************************************/ 211167802Sjkim 212197104Sjkim/* Generic subtable header (used in MADT, SRAT, etc.) */ 213197104Sjkim 214167802Sjkimtypedef struct acpi_subtable_header 21569450Smsmith{ 216167802Sjkim UINT8 Type; 217167802Sjkim UINT8 Length; 218151937Sjkim 219167802Sjkim} ACPI_SUBTABLE_HEADER; 22069450Smsmith 22169450Smsmith 222197104Sjkim/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 223193267Sjkim 224193267Sjkimtypedef struct acpi_whea_header 225193267Sjkim{ 226193267Sjkim UINT8 Action; 227193267Sjkim UINT8 Instruction; 228193267Sjkim UINT8 Flags; 229193267Sjkim UINT8 Reserved; 230193267Sjkim ACPI_GENERIC_ADDRESS RegisterRegion; 231193267Sjkim UINT64 Value; /* Value used with Read/Write register */ 232193267Sjkim UINT64 Mask; /* Bitmask required for this register instruction */ 233193267Sjkim 234193267Sjkim} ACPI_WHEA_HEADER; 235193267Sjkim 236193267Sjkim 237167802Sjkim/******************************************************************************* 238167802Sjkim * 239197104Sjkim * BERT - Boot Error Record Table (ACPI 4.0) 240197104Sjkim * Version 1 241167802Sjkim * 242167802Sjkim ******************************************************************************/ 243167802Sjkim 244193267Sjkimtypedef struct acpi_table_bert 245193267Sjkim{ 246193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 247193267Sjkim UINT32 RegionLength; /* Length of the boot error region */ 248238381Sjkim UINT64 Address; /* Physical address of the error region */ 249193267Sjkim 250193267Sjkim} ACPI_TABLE_BERT; 251193267Sjkim 252193267Sjkim 253197104Sjkim/* Boot Error Region (not a subtable, pointed to by Address field above) */ 254193267Sjkim 255193267Sjkimtypedef struct acpi_bert_region 256193267Sjkim{ 257197104Sjkim UINT32 BlockStatus; /* Type of error information */ 258197104Sjkim UINT32 RawDataOffset; /* Offset to raw error data */ 259197104Sjkim UINT32 RawDataLength; /* Length of raw error data */ 260197104Sjkim UINT32 DataLength; /* Length of generic error data */ 261197104Sjkim UINT32 ErrorSeverity; /* Severity code */ 262193267Sjkim 263193267Sjkim} ACPI_BERT_REGION; 264193267Sjkim 265197104Sjkim/* Values for BlockStatus flags above */ 266193267Sjkim 267193267Sjkim#define ACPI_BERT_UNCORRECTABLE (1) 268197104Sjkim#define ACPI_BERT_CORRECTABLE (1<<1) 269197104Sjkim#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 270197104Sjkim#define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 271197104Sjkim#define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 272193267Sjkim 273197104Sjkim/* Values for ErrorSeverity above */ 274193267Sjkim 275197104Sjkimenum AcpiBertErrorSeverity 276167802Sjkim{ 277197104Sjkim ACPI_BERT_ERROR_CORRECTABLE = 0, 278197104Sjkim ACPI_BERT_ERROR_FATAL = 1, 279197104Sjkim ACPI_BERT_ERROR_CORRECTED = 2, 280197104Sjkim ACPI_BERT_ERROR_NONE = 3, 281197104Sjkim ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 282197104Sjkim}; 283167802Sjkim 284197104Sjkim/* 285197104Sjkim * Note: The generic error data that follows the ErrorSeverity field above 286197104Sjkim * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 287197104Sjkim */ 288167802Sjkim 289167802Sjkim 290167802Sjkim/******************************************************************************* 291167802Sjkim * 292197104Sjkim * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 293197104Sjkim * Version 1 294167802Sjkim * 295167802Sjkim ******************************************************************************/ 296167802Sjkim 297167802Sjkimtypedef struct acpi_table_cpep 298167802Sjkim{ 299167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 300167802Sjkim UINT64 Reserved; 301167802Sjkim 302167802Sjkim} ACPI_TABLE_CPEP; 303167802Sjkim 304167802Sjkim 305167802Sjkim/* Subtable */ 306167802Sjkim 307167802Sjkimtypedef struct acpi_cpep_polling 308167802Sjkim{ 309197104Sjkim ACPI_SUBTABLE_HEADER Header; 310167802Sjkim UINT8 Id; /* Processor ID */ 311167802Sjkim UINT8 Eid; /* Processor EID */ 312167802Sjkim UINT32 Interval; /* Polling interval (msec) */ 313167802Sjkim 314167802Sjkim} ACPI_CPEP_POLLING; 315167802Sjkim 316167802Sjkim 317167802Sjkim/******************************************************************************* 318167802Sjkim * 319167802Sjkim * ECDT - Embedded Controller Boot Resources Table 320197104Sjkim * Version 1 321167802Sjkim * 322167802Sjkim ******************************************************************************/ 323167802Sjkim 324167802Sjkimtypedef struct acpi_table_ecdt 325167802Sjkim{ 326167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 327167802Sjkim ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 328167802Sjkim ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 329167802Sjkim UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 330167802Sjkim UINT8 Gpe; /* The GPE for the EC */ 331167802Sjkim UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 332167802Sjkim 333167802Sjkim} ACPI_TABLE_ECDT; 334167802Sjkim 335167802Sjkim 336167802Sjkim/******************************************************************************* 337167802Sjkim * 338197104Sjkim * EINJ - Error Injection Table (ACPI 4.0) 339197104Sjkim * Version 1 340193267Sjkim * 341193267Sjkim ******************************************************************************/ 342193267Sjkim 343193267Sjkimtypedef struct acpi_table_einj 344193267Sjkim{ 345193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 346193267Sjkim UINT32 HeaderLength; 347197104Sjkim UINT8 Flags; 348197104Sjkim UINT8 Reserved[3]; 349193267Sjkim UINT32 Entries; 350193267Sjkim 351193267Sjkim} ACPI_TABLE_EINJ; 352193267Sjkim 353197104Sjkim 354193267Sjkim/* EINJ Injection Instruction Entries (actions) */ 355193267Sjkim 356193267Sjkimtypedef struct acpi_einj_entry 357193267Sjkim{ 358193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 359193267Sjkim 360193267Sjkim} ACPI_EINJ_ENTRY; 361193267Sjkim 362197104Sjkim/* Masks for Flags field above */ 363197104Sjkim 364197104Sjkim#define ACPI_EINJ_PRESERVE (1) 365197104Sjkim 366193267Sjkim/* Values for Action field above */ 367193267Sjkim 368193267Sjkimenum AcpiEinjActions 369193267Sjkim{ 370228110Sjkim ACPI_EINJ_BEGIN_OPERATION = 0, 371228110Sjkim ACPI_EINJ_GET_TRIGGER_TABLE = 1, 372228110Sjkim ACPI_EINJ_SET_ERROR_TYPE = 2, 373228110Sjkim ACPI_EINJ_GET_ERROR_TYPE = 3, 374228110Sjkim ACPI_EINJ_END_OPERATION = 4, 375228110Sjkim ACPI_EINJ_EXECUTE_OPERATION = 5, 376228110Sjkim ACPI_EINJ_CHECK_BUSY_STATUS = 6, 377228110Sjkim ACPI_EINJ_GET_COMMAND_STATUS = 7, 378228110Sjkim ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 379298714Sjkim ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 380298714Sjkim ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 381228110Sjkim ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 382193267Sjkim}; 383193267Sjkim 384193267Sjkim/* Values for Instruction field above */ 385193267Sjkim 386193267Sjkimenum AcpiEinjInstructions 387193267Sjkim{ 388193267Sjkim ACPI_EINJ_READ_REGISTER = 0, 389193267Sjkim ACPI_EINJ_READ_REGISTER_VALUE = 1, 390193267Sjkim ACPI_EINJ_WRITE_REGISTER = 2, 391193267Sjkim ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 392193267Sjkim ACPI_EINJ_NOOP = 4, 393228110Sjkim ACPI_EINJ_FLUSH_CACHELINE = 5, 394228110Sjkim ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 395193267Sjkim}; 396193267Sjkim 397228110Sjkimtypedef struct acpi_einj_error_type_with_addr 398228110Sjkim{ 399228110Sjkim UINT32 ErrorType; 400228110Sjkim UINT32 VendorStructOffset; 401228110Sjkim UINT32 Flags; 402228110Sjkim UINT32 ApicId; 403228110Sjkim UINT64 Address; 404228110Sjkim UINT64 Range; 405228110Sjkim UINT32 PcieId; 406197104Sjkim 407228110Sjkim} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 408228110Sjkim 409228110Sjkimtypedef struct acpi_einj_vendor 410228110Sjkim{ 411228110Sjkim UINT32 Length; 412228110Sjkim UINT32 PcieId; 413228110Sjkim UINT16 VendorId; 414228110Sjkim UINT16 DeviceId; 415228110Sjkim UINT8 RevisionId; 416228110Sjkim UINT8 Reserved[3]; 417228110Sjkim 418228110Sjkim} ACPI_EINJ_VENDOR; 419228110Sjkim 420228110Sjkim 421193267Sjkim/* EINJ Trigger Error Action Table */ 422193267Sjkim 423193267Sjkimtypedef struct acpi_einj_trigger 424193267Sjkim{ 425193267Sjkim UINT32 HeaderSize; 426193267Sjkim UINT32 Revision; 427193267Sjkim UINT32 TableSize; 428193267Sjkim UINT32 EntryCount; 429193267Sjkim 430193267Sjkim} ACPI_EINJ_TRIGGER; 431193267Sjkim 432197104Sjkim/* Command status return values */ 433193267Sjkim 434197104Sjkimenum AcpiEinjCommandStatus 435197104Sjkim{ 436197104Sjkim ACPI_EINJ_SUCCESS = 0, 437197104Sjkim ACPI_EINJ_FAILURE = 1, 438197104Sjkim ACPI_EINJ_INVALID_ACCESS = 2, 439197104Sjkim ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 440197104Sjkim}; 441197104Sjkim 442197104Sjkim 443197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 444197104Sjkim 445197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 446197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 447197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 448197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 449197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 450197104Sjkim#define ACPI_EINJ_MEMORY_FATAL (1<<5) 451197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 452197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 453197104Sjkim#define ACPI_EINJ_PCIX_FATAL (1<<8) 454197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 455197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 456197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL (1<<11) 457228110Sjkim#define ACPI_EINJ_VENDOR_DEFINED (1<<31) 458197104Sjkim 459197104Sjkim 460193267Sjkim/******************************************************************************* 461193267Sjkim * 462197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0) 463197104Sjkim * Version 1 464193267Sjkim * 465193267Sjkim ******************************************************************************/ 466193267Sjkim 467193267Sjkimtypedef struct acpi_table_erst 468193267Sjkim{ 469193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 470193267Sjkim UINT32 HeaderLength; 471193267Sjkim UINT32 Reserved; 472193267Sjkim UINT32 Entries; 473193267Sjkim 474193267Sjkim} ACPI_TABLE_ERST; 475193267Sjkim 476197104Sjkim 477193267Sjkim/* ERST Serialization Entries (actions) */ 478193267Sjkim 479193267Sjkimtypedef struct acpi_erst_entry 480193267Sjkim{ 481193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 482193267Sjkim 483193267Sjkim} ACPI_ERST_ENTRY; 484193267Sjkim 485197104Sjkim/* Masks for Flags field above */ 486197104Sjkim 487197104Sjkim#define ACPI_ERST_PRESERVE (1) 488197104Sjkim 489193267Sjkim/* Values for Action field above */ 490193267Sjkim 491193267Sjkimenum AcpiErstActions 492193267Sjkim{ 493197104Sjkim ACPI_ERST_BEGIN_WRITE = 0, 494197104Sjkim ACPI_ERST_BEGIN_READ = 1, 495197104Sjkim ACPI_ERST_BEGIN_CLEAR = 2, 496197104Sjkim ACPI_ERST_END = 3, 497193267Sjkim ACPI_ERST_SET_RECORD_OFFSET = 4, 498193267Sjkim ACPI_ERST_EXECUTE_OPERATION = 5, 499193267Sjkim ACPI_ERST_CHECK_BUSY_STATUS = 6, 500193267Sjkim ACPI_ERST_GET_COMMAND_STATUS = 7, 501197104Sjkim ACPI_ERST_GET_RECORD_ID = 8, 502197104Sjkim ACPI_ERST_SET_RECORD_ID = 9, 503193267Sjkim ACPI_ERST_GET_RECORD_COUNT = 10, 504193267Sjkim ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 505193267Sjkim ACPI_ERST_NOT_USED = 12, 506193267Sjkim ACPI_ERST_GET_ERROR_RANGE = 13, 507193267Sjkim ACPI_ERST_GET_ERROR_LENGTH = 14, 508193267Sjkim ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 509298714Sjkim ACPI_ERST_EXECUTE_TIMINGS = 16, 510298714Sjkim ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 511193267Sjkim}; 512193267Sjkim 513193267Sjkim/* Values for Instruction field above */ 514193267Sjkim 515193267Sjkimenum AcpiErstInstructions 516193267Sjkim{ 517193267Sjkim ACPI_ERST_READ_REGISTER = 0, 518193267Sjkim ACPI_ERST_READ_REGISTER_VALUE = 1, 519193267Sjkim ACPI_ERST_WRITE_REGISTER = 2, 520193267Sjkim ACPI_ERST_WRITE_REGISTER_VALUE = 3, 521193267Sjkim ACPI_ERST_NOOP = 4, 522193267Sjkim ACPI_ERST_LOAD_VAR1 = 5, 523193267Sjkim ACPI_ERST_LOAD_VAR2 = 6, 524193267Sjkim ACPI_ERST_STORE_VAR1 = 7, 525193267Sjkim ACPI_ERST_ADD = 8, 526193267Sjkim ACPI_ERST_SUBTRACT = 9, 527193267Sjkim ACPI_ERST_ADD_VALUE = 10, 528193267Sjkim ACPI_ERST_SUBTRACT_VALUE = 11, 529193267Sjkim ACPI_ERST_STALL = 12, 530193267Sjkim ACPI_ERST_STALL_WHILE_TRUE = 13, 531193267Sjkim ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 532193267Sjkim ACPI_ERST_GOTO = 15, 533193267Sjkim ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 534193267Sjkim ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 535193267Sjkim ACPI_ERST_MOVE_DATA = 18, 536193267Sjkim ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 537193267Sjkim}; 538193267Sjkim 539197104Sjkim/* Command status return values */ 540193267Sjkim 541197104Sjkimenum AcpiErstCommandStatus 542197104Sjkim{ 543197104Sjkim ACPI_ERST_SUCESS = 0, 544197104Sjkim ACPI_ERST_NO_SPACE = 1, 545197104Sjkim ACPI_ERST_NOT_AVAILABLE = 2, 546197104Sjkim ACPI_ERST_FAILURE = 3, 547197104Sjkim ACPI_ERST_RECORD_EMPTY = 4, 548197104Sjkim ACPI_ERST_NOT_FOUND = 5, 549197104Sjkim ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 550197104Sjkim}; 551197104Sjkim 552197104Sjkim 553197104Sjkim/* Error Record Serialization Information */ 554197104Sjkim 555197104Sjkimtypedef struct acpi_erst_info 556197104Sjkim{ 557197104Sjkim UINT16 Signature; /* Should be "ER" */ 558197104Sjkim UINT8 Data[48]; 559197104Sjkim 560197104Sjkim} ACPI_ERST_INFO; 561197104Sjkim 562197104Sjkim 563193267Sjkim/******************************************************************************* 564193267Sjkim * 565197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0) 566197104Sjkim * Version 1 567193267Sjkim * 568193267Sjkim ******************************************************************************/ 569193267Sjkim 570193267Sjkimtypedef struct acpi_table_hest 571193267Sjkim{ 572193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 573193267Sjkim UINT32 ErrorSourceCount; 574193267Sjkim 575193267Sjkim} ACPI_TABLE_HEST; 576193267Sjkim 577193267Sjkim 578193267Sjkim/* HEST subtable header */ 579193267Sjkim 580193267Sjkimtypedef struct acpi_hest_header 581193267Sjkim{ 582193267Sjkim UINT16 Type; 583197104Sjkim UINT16 SourceId; 584193267Sjkim 585193267Sjkim} ACPI_HEST_HEADER; 586193267Sjkim 587193267Sjkim 588193267Sjkim/* Values for Type field above for subtables */ 589193267Sjkim 590193267Sjkimenum AcpiHestTypes 591193267Sjkim{ 592197104Sjkim ACPI_HEST_TYPE_IA32_CHECK = 0, 593197104Sjkim ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 594197104Sjkim ACPI_HEST_TYPE_IA32_NMI = 2, 595197104Sjkim ACPI_HEST_TYPE_NOT_USED3 = 3, 596197104Sjkim ACPI_HEST_TYPE_NOT_USED4 = 4, 597197104Sjkim ACPI_HEST_TYPE_NOT_USED5 = 5, 598197104Sjkim ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 599197104Sjkim ACPI_HEST_TYPE_AER_ENDPOINT = 7, 600197104Sjkim ACPI_HEST_TYPE_AER_BRIDGE = 8, 601197104Sjkim ACPI_HEST_TYPE_GENERIC_ERROR = 9, 602298714Sjkim ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 603298714Sjkim ACPI_HEST_TYPE_RESERVED = 11 /* 11 and greater are reserved */ 604193267Sjkim}; 605193267Sjkim 606193267Sjkim 607193267Sjkim/* 608197104Sjkim * HEST substructures contained in subtables 609193267Sjkim */ 610193267Sjkim 611197104Sjkim/* 612197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 613197104Sjkim * ACPI_HEST_IA_CORRECTED structures. 614197104Sjkim */ 615197104Sjkimtypedef struct acpi_hest_ia_error_bank 616193267Sjkim{ 617193267Sjkim UINT8 BankNumber; 618193267Sjkim UINT8 ClearStatusOnInit; 619193267Sjkim UINT8 StatusFormat; 620197104Sjkim UINT8 Reserved; 621193267Sjkim UINT32 ControlRegister; 622197104Sjkim UINT64 ControlData; 623193267Sjkim UINT32 StatusRegister; 624193267Sjkim UINT32 AddressRegister; 625193267Sjkim UINT32 MiscRegister; 626193267Sjkim 627197104Sjkim} ACPI_HEST_IA_ERROR_BANK; 628193267Sjkim 629193267Sjkim 630197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 631193267Sjkim 632193267Sjkimtypedef struct acpi_hest_aer_common 633193267Sjkim{ 634197104Sjkim UINT16 Reserved1; 635193267Sjkim UINT8 Flags; 636193267Sjkim UINT8 Enabled; 637197104Sjkim UINT32 RecordsToPreallocate; 638193267Sjkim UINT32 MaxSectionsPerRecord; 639272444Sjkim UINT32 Bus; /* Bus and Segment numbers */ 640193267Sjkim UINT16 Device; 641193267Sjkim UINT16 Function; 642193267Sjkim UINT16 DeviceControl; 643197104Sjkim UINT16 Reserved2; 644197104Sjkim UINT32 UncorrectableMask; 645197104Sjkim UINT32 UncorrectableSeverity; 646197104Sjkim UINT32 CorrectableMask; 647197104Sjkim UINT32 AdvancedCapabilities; 648193267Sjkim 649193267Sjkim} ACPI_HEST_AER_COMMON; 650193267Sjkim 651197104Sjkim/* Masks for HEST Flags fields */ 652193267Sjkim 653197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST (1) 654197104Sjkim#define ACPI_HEST_GLOBAL (1<<1) 655197104Sjkim 656272444Sjkim/* 657272444Sjkim * Macros to access the bus/segment numbers in Bus field above: 658272444Sjkim * Bus number is encoded in bits 7:0 659272444Sjkim * Segment number is encoded in bits 23:8 660272444Sjkim */ 661272444Sjkim#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 662272444Sjkim#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 663197104Sjkim 664272444Sjkim 665193267Sjkim/* Hardware Error Notification */ 666193267Sjkim 667193267Sjkimtypedef struct acpi_hest_notify 668193267Sjkim{ 669193267Sjkim UINT8 Type; 670193267Sjkim UINT8 Length; 671193267Sjkim UINT16 ConfigWriteEnable; 672193267Sjkim UINT32 PollInterval; 673193267Sjkim UINT32 Vector; 674193267Sjkim UINT32 PollingThresholdValue; 675193267Sjkim UINT32 PollingThresholdWindow; 676193267Sjkim UINT32 ErrorThresholdValue; 677193267Sjkim UINT32 ErrorThresholdWindow; 678193267Sjkim 679193267Sjkim} ACPI_HEST_NOTIFY; 680193267Sjkim 681193267Sjkim/* Values for Notify Type field above */ 682193267Sjkim 683193267Sjkimenum AcpiHestNotifyTypes 684193267Sjkim{ 685193267Sjkim ACPI_HEST_NOTIFY_POLLED = 0, 686193267Sjkim ACPI_HEST_NOTIFY_EXTERNAL = 1, 687193267Sjkim ACPI_HEST_NOTIFY_LOCAL = 2, 688193267Sjkim ACPI_HEST_NOTIFY_SCI = 3, 689193267Sjkim ACPI_HEST_NOTIFY_NMI = 4, 690240716Sjkim ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 691240716Sjkim ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 692298714Sjkim ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 693298714Sjkim ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 694298714Sjkim ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 695298714Sjkim ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 696298714Sjkim ACPI_HEST_NOTIFY_RESERVED = 11 /* 11 and greater are reserved */ 697193267Sjkim}; 698193267Sjkim 699197104Sjkim/* Values for ConfigWriteEnable bitfield above */ 700193267Sjkim 701197104Sjkim#define ACPI_HEST_TYPE (1) 702197104Sjkim#define ACPI_HEST_POLL_INTERVAL (1<<1) 703197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 704197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 705197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 706197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 707197104Sjkim 708197104Sjkim 709193267Sjkim/* 710193267Sjkim * HEST subtables 711193267Sjkim */ 712193267Sjkim 713197104Sjkim/* 0: IA32 Machine Check Exception */ 714193267Sjkim 715197104Sjkimtypedef struct acpi_hest_ia_machine_check 716193267Sjkim{ 717193267Sjkim ACPI_HEST_HEADER Header; 718197104Sjkim UINT16 Reserved1; 719193267Sjkim UINT8 Flags; 720197104Sjkim UINT8 Enabled; 721197104Sjkim UINT32 RecordsToPreallocate; 722193267Sjkim UINT32 MaxSectionsPerRecord; 723193267Sjkim UINT64 GlobalCapabilityData; 724193267Sjkim UINT64 GlobalControlData; 725193267Sjkim UINT8 NumHardwareBanks; 726197104Sjkim UINT8 Reserved3[7]; 727193267Sjkim 728197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK; 729193267Sjkim 730193267Sjkim 731197104Sjkim/* 1: IA32 Corrected Machine Check */ 732193267Sjkim 733197104Sjkimtypedef struct acpi_hest_ia_corrected 734193267Sjkim{ 735193267Sjkim ACPI_HEST_HEADER Header; 736197104Sjkim UINT16 Reserved1; 737193267Sjkim UINT8 Flags; 738193267Sjkim UINT8 Enabled; 739197104Sjkim UINT32 RecordsToPreallocate; 740193267Sjkim UINT32 MaxSectionsPerRecord; 741193267Sjkim ACPI_HEST_NOTIFY Notify; 742193267Sjkim UINT8 NumHardwareBanks; 743197104Sjkim UINT8 Reserved2[3]; 744193267Sjkim 745197104Sjkim} ACPI_HEST_IA_CORRECTED; 746193267Sjkim 747193267Sjkim 748197104Sjkim/* 2: IA32 Non-Maskable Interrupt */ 749193267Sjkim 750197104Sjkimtypedef struct acpi_hest_ia_nmi 751193267Sjkim{ 752193267Sjkim ACPI_HEST_HEADER Header; 753193267Sjkim UINT32 Reserved; 754197104Sjkim UINT32 RecordsToPreallocate; 755193267Sjkim UINT32 MaxSectionsPerRecord; 756193267Sjkim UINT32 MaxRawDataLength; 757193267Sjkim 758197104Sjkim} ACPI_HEST_IA_NMI; 759193267Sjkim 760193267Sjkim 761197104Sjkim/* 3,4,5: Not used */ 762193267Sjkim 763193267Sjkim/* 6: PCI Express Root Port AER */ 764193267Sjkim 765193267Sjkimtypedef struct acpi_hest_aer_root 766193267Sjkim{ 767193267Sjkim ACPI_HEST_HEADER Header; 768193267Sjkim ACPI_HEST_AER_COMMON Aer; 769193267Sjkim UINT32 RootErrorCommand; 770193267Sjkim 771193267Sjkim} ACPI_HEST_AER_ROOT; 772193267Sjkim 773193267Sjkim 774193267Sjkim/* 7: PCI Express AER (AER Endpoint) */ 775193267Sjkim 776193267Sjkimtypedef struct acpi_hest_aer 777193267Sjkim{ 778193267Sjkim ACPI_HEST_HEADER Header; 779193267Sjkim ACPI_HEST_AER_COMMON Aer; 780193267Sjkim 781193267Sjkim} ACPI_HEST_AER; 782193267Sjkim 783193267Sjkim 784193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */ 785193267Sjkim 786193267Sjkimtypedef struct acpi_hest_aer_bridge 787193267Sjkim{ 788193267Sjkim ACPI_HEST_HEADER Header; 789193267Sjkim ACPI_HEST_AER_COMMON Aer; 790197104Sjkim UINT32 UncorrectableMask2; 791197104Sjkim UINT32 UncorrectableSeverity2; 792197104Sjkim UINT32 AdvancedCapabilities2; 793193267Sjkim 794193267Sjkim} ACPI_HEST_AER_BRIDGE; 795193267Sjkim 796193267Sjkim 797193267Sjkim/* 9: Generic Hardware Error Source */ 798193267Sjkim 799193267Sjkimtypedef struct acpi_hest_generic 800193267Sjkim{ 801193267Sjkim ACPI_HEST_HEADER Header; 802193267Sjkim UINT16 RelatedSourceId; 803197104Sjkim UINT8 Reserved; 804193267Sjkim UINT8 Enabled; 805197104Sjkim UINT32 RecordsToPreallocate; 806193267Sjkim UINT32 MaxSectionsPerRecord; 807193267Sjkim UINT32 MaxRawDataLength; 808193267Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 809193267Sjkim ACPI_HEST_NOTIFY Notify; 810197104Sjkim UINT32 ErrorBlockLength; 811193267Sjkim 812193267Sjkim} ACPI_HEST_GENERIC; 813193267Sjkim 814193267Sjkim 815298714Sjkim/* 10: Generic Hardware Error Source, version 2 */ 816298714Sjkim 817298714Sjkimtypedef struct acpi_hest_generic_v2 818298714Sjkim{ 819298714Sjkim ACPI_HEST_HEADER Header; 820298714Sjkim UINT16 RelatedSourceId; 821298714Sjkim UINT8 Reserved; 822298714Sjkim UINT8 Enabled; 823298714Sjkim UINT32 RecordsToPreallocate; 824298714Sjkim UINT32 MaxSectionsPerRecord; 825298714Sjkim UINT32 MaxRawDataLength; 826298714Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 827298714Sjkim ACPI_HEST_NOTIFY Notify; 828298714Sjkim UINT32 ErrorBlockLength; 829298714Sjkim ACPI_GENERIC_ADDRESS ReadAckRegister; 830298714Sjkim UINT64 ReadAckPreserve; 831298714Sjkim UINT64 ReadAckWrite; 832298714Sjkim 833298714Sjkim} ACPI_HEST_GENERIC_V2; 834298714Sjkim 835298714Sjkim 836197104Sjkim/* Generic Error Status block */ 837167802Sjkim 838197104Sjkimtypedef struct acpi_hest_generic_status 839167802Sjkim{ 840197104Sjkim UINT32 BlockStatus; 841197104Sjkim UINT32 RawDataOffset; 842197104Sjkim UINT32 RawDataLength; 843197104Sjkim UINT32 DataLength; 844197104Sjkim UINT32 ErrorSeverity; 845167802Sjkim 846197104Sjkim} ACPI_HEST_GENERIC_STATUS; 847167802Sjkim 848197104Sjkim/* Values for BlockStatus flags above */ 849167802Sjkim 850197104Sjkim#define ACPI_HEST_UNCORRECTABLE (1) 851197104Sjkim#define ACPI_HEST_CORRECTABLE (1<<1) 852197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 853197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 854197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 855167802Sjkim 856167802Sjkim 857197104Sjkim/* Generic Error Data entry */ 858167802Sjkim 859197104Sjkimtypedef struct acpi_hest_generic_data 860193267Sjkim{ 861197104Sjkim UINT8 SectionType[16]; 862197104Sjkim UINT32 ErrorSeverity; 863197104Sjkim UINT16 Revision; 864197104Sjkim UINT8 ValidationBits; 865193267Sjkim UINT8 Flags; 866197104Sjkim UINT32 ErrorDataLength; 867197104Sjkim UINT8 FruId[16]; 868197104Sjkim UINT8 FruText[20]; 869193267Sjkim 870197104Sjkim} ACPI_HEST_GENERIC_DATA; 871193267Sjkim 872298714Sjkim/* Extension for revision 0x0300 */ 873193267Sjkim 874298714Sjkimtypedef struct acpi_hest_generic_data_v300 875298714Sjkim{ 876298714Sjkim UINT8 SectionType[16]; 877298714Sjkim UINT32 ErrorSeverity; 878298714Sjkim UINT16 Revision; 879298714Sjkim UINT8 ValidationBits; 880298714Sjkim UINT8 Flags; 881298714Sjkim UINT32 ErrorDataLength; 882298714Sjkim UINT8 FruId[16]; 883298714Sjkim UINT8 FruText[20]; 884298714Sjkim UINT64 TimeStamp; 885298714Sjkim 886298714Sjkim} ACPI_HEST_GENERIC_DATA_V300; 887298714Sjkim 888298714Sjkim/* Values for ErrorSeverity above */ 889298714Sjkim 890298714Sjkim#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 891298714Sjkim#define ACPI_HEST_GEN_ERROR_FATAL 1 892298714Sjkim#define ACPI_HEST_GEN_ERROR_CORRECTED 2 893298714Sjkim#define ACPI_HEST_GEN_ERROR_NONE 3 894298714Sjkim 895298714Sjkim/* Flags for ValidationBits above */ 896298714Sjkim 897298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_ID (1) 898298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 899298714Sjkim#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 900298714Sjkim 901298714Sjkim 902193267Sjkim/******************************************************************************* 903193267Sjkim * 904167802Sjkim * MADT - Multiple APIC Description Table 905197104Sjkim * Version 3 906167802Sjkim * 907167802Sjkim ******************************************************************************/ 908167802Sjkim 909167802Sjkimtypedef struct acpi_table_madt 910167802Sjkim{ 911167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 912167802Sjkim UINT32 Address; /* Physical address of local APIC */ 913167802Sjkim UINT32 Flags; 914167802Sjkim 915167802Sjkim} ACPI_TABLE_MADT; 916167802Sjkim 917197104Sjkim/* Masks for Flags field above */ 918167802Sjkim 919197104Sjkim#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 920167802Sjkim 921167802Sjkim/* Values for PCATCompat flag */ 922167802Sjkim 923167802Sjkim#define ACPI_MADT_DUAL_PIC 0 924167802Sjkim#define ACPI_MADT_MULTIPLE_APIC 1 925167802Sjkim 926167802Sjkim 927197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 928167802Sjkim 929167802Sjkimenum AcpiMadtType 930167802Sjkim{ 931272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC = 0, 932272444Sjkim ACPI_MADT_TYPE_IO_APIC = 1, 933272444Sjkim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 934272444Sjkim ACPI_MADT_TYPE_NMI_SOURCE = 3, 935272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 936272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 937272444Sjkim ACPI_MADT_TYPE_IO_SAPIC = 6, 938272444Sjkim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 939272444Sjkim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 940272444Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 941272444Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 942272444Sjkim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 943272444Sjkim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 944272444Sjkim ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 945272444Sjkim ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 946283092Sjkim ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 947283092Sjkim ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ 948167802Sjkim}; 949167802Sjkim 950167802Sjkim 951167802Sjkim/* 952272444Sjkim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 953167802Sjkim */ 954167802Sjkim 955167802Sjkim/* 0: Processor Local APIC */ 956167802Sjkim 957167802Sjkimtypedef struct acpi_madt_local_apic 958167802Sjkim{ 959167802Sjkim ACPI_SUBTABLE_HEADER Header; 960167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 961167802Sjkim UINT8 Id; /* Processor's local APIC id */ 962167802Sjkim UINT32 LapicFlags; 963167802Sjkim 964167802Sjkim} ACPI_MADT_LOCAL_APIC; 965167802Sjkim 966197104Sjkim 967167802Sjkim/* 1: IO APIC */ 968167802Sjkim 969167802Sjkimtypedef struct acpi_madt_io_apic 970167802Sjkim{ 971167802Sjkim ACPI_SUBTABLE_HEADER Header; 972167802Sjkim UINT8 Id; /* I/O APIC ID */ 973167802Sjkim UINT8 Reserved; /* Reserved - must be zero */ 974167802Sjkim UINT32 Address; /* APIC physical address */ 975167802Sjkim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 976167802Sjkim 977167802Sjkim} ACPI_MADT_IO_APIC; 978167802Sjkim 979197104Sjkim 980167802Sjkim/* 2: Interrupt Override */ 981167802Sjkim 982167802Sjkimtypedef struct acpi_madt_interrupt_override 983167802Sjkim{ 984167802Sjkim ACPI_SUBTABLE_HEADER Header; 985167802Sjkim UINT8 Bus; /* 0 - ISA */ 986167802Sjkim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 987167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 988167802Sjkim UINT16 IntiFlags; 989167802Sjkim 990167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE; 991167802Sjkim 992197104Sjkim 993167802Sjkim/* 3: NMI Source */ 994167802Sjkim 995167802Sjkimtypedef struct acpi_madt_nmi_source 996167802Sjkim{ 997167802Sjkim ACPI_SUBTABLE_HEADER Header; 998167802Sjkim UINT16 IntiFlags; 999167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 1000167802Sjkim 1001167802Sjkim} ACPI_MADT_NMI_SOURCE; 1002167802Sjkim 1003197104Sjkim 1004167802Sjkim/* 4: Local APIC NMI */ 1005167802Sjkim 1006167802Sjkimtypedef struct acpi_madt_local_apic_nmi 1007167802Sjkim{ 1008167802Sjkim ACPI_SUBTABLE_HEADER Header; 1009167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 1010167802Sjkim UINT16 IntiFlags; 1011167802Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 1012167802Sjkim 1013167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI; 1014167802Sjkim 1015197104Sjkim 1016167802Sjkim/* 5: Address Override */ 1017167802Sjkim 1018167802Sjkimtypedef struct acpi_madt_local_apic_override 1019167802Sjkim{ 1020167802Sjkim ACPI_SUBTABLE_HEADER Header; 1021167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1022167802Sjkim UINT64 Address; /* APIC physical address */ 1023167802Sjkim 1024167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE; 1025167802Sjkim 1026197104Sjkim 1027167802Sjkim/* 6: I/O Sapic */ 1028167802Sjkim 1029167802Sjkimtypedef struct acpi_madt_io_sapic 1030167802Sjkim{ 1031167802Sjkim ACPI_SUBTABLE_HEADER Header; 1032167802Sjkim UINT8 Id; /* I/O SAPIC ID */ 1033167802Sjkim UINT8 Reserved; /* Reserved, must be zero */ 1034167802Sjkim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 1035167802Sjkim UINT64 Address; /* SAPIC physical address */ 1036167802Sjkim 1037167802Sjkim} ACPI_MADT_IO_SAPIC; 1038167802Sjkim 1039197104Sjkim 1040167802Sjkim/* 7: Local Sapic */ 1041167802Sjkim 1042167802Sjkimtypedef struct acpi_madt_local_sapic 1043167802Sjkim{ 1044167802Sjkim ACPI_SUBTABLE_HEADER Header; 1045167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 1046167802Sjkim UINT8 Id; /* SAPIC ID */ 1047167802Sjkim UINT8 Eid; /* SAPIC EID */ 1048167802Sjkim UINT8 Reserved[3]; /* Reserved, must be zero */ 1049167802Sjkim UINT32 LapicFlags; 1050167802Sjkim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 1051167802Sjkim char UidString[1]; /* String UID - ACPI 3.0 */ 1052167802Sjkim 1053167802Sjkim} ACPI_MADT_LOCAL_SAPIC; 1054167802Sjkim 1055197104Sjkim 1056167802Sjkim/* 8: Platform Interrupt Source */ 1057167802Sjkim 1058167802Sjkimtypedef struct acpi_madt_interrupt_source 1059167802Sjkim{ 1060167802Sjkim ACPI_SUBTABLE_HEADER Header; 1061167802Sjkim UINT16 IntiFlags; 1062167802Sjkim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 1063167802Sjkim UINT8 Id; /* Processor ID */ 1064167802Sjkim UINT8 Eid; /* Processor EID */ 1065167802Sjkim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 1066167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 1067167802Sjkim UINT32 Flags; /* Interrupt Source Flags */ 1068167802Sjkim 1069167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE; 1070167802Sjkim 1071197104Sjkim/* Masks for Flags field above */ 1072167802Sjkim 1073167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE (1) 1074167802Sjkim 1075167802Sjkim 1076197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */ 1077197104Sjkim 1078193267Sjkimtypedef struct acpi_madt_local_x2apic 1079193267Sjkim{ 1080193267Sjkim ACPI_SUBTABLE_HEADER Header; 1081193267Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1082193267Sjkim UINT32 LocalApicId; /* Processor x2APIC ID */ 1083193267Sjkim UINT32 LapicFlags; 1084193267Sjkim UINT32 Uid; /* ACPI processor UID */ 1085193267Sjkim 1086193267Sjkim} ACPI_MADT_LOCAL_X2APIC; 1087193267Sjkim 1088193267Sjkim 1089197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */ 1090197104Sjkim 1091193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi 1092193267Sjkim{ 1093193267Sjkim ACPI_SUBTABLE_HEADER Header; 1094193267Sjkim UINT16 IntiFlags; 1095193267Sjkim UINT32 Uid; /* ACPI processor UID */ 1096193267Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 1097193267Sjkim UINT8 Reserved[3]; /* Reserved - must be zero */ 1098193267Sjkim 1099193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI; 1100193267Sjkim 1101193267Sjkim 1102283092Sjkim/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ 1103228110Sjkim 1104228110Sjkimtypedef struct acpi_madt_generic_interrupt 1105228110Sjkim{ 1106228110Sjkim ACPI_SUBTABLE_HEADER Header; 1107228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1108272444Sjkim UINT32 CpuInterfaceNumber; 1109228110Sjkim UINT32 Uid; 1110228110Sjkim UINT32 Flags; 1111228110Sjkim UINT32 ParkingVersion; 1112228110Sjkim UINT32 PerformanceInterrupt; 1113228110Sjkim UINT64 ParkedAddress; 1114228110Sjkim UINT64 BaseAddress; 1115272444Sjkim UINT64 GicvBaseAddress; 1116272444Sjkim UINT64 GichBaseAddress; 1117272444Sjkim UINT32 VgicInterrupt; 1118272444Sjkim UINT64 GicrBaseAddress; 1119272444Sjkim UINT64 ArmMpidr; 1120283092Sjkim UINT8 EfficiencyClass; 1121283092Sjkim UINT8 Reserved2[3]; 1122228110Sjkim 1123228110Sjkim} ACPI_MADT_GENERIC_INTERRUPT; 1124228110Sjkim 1125272444Sjkim/* Masks for Flags field above */ 1126228110Sjkim 1127272444Sjkim/* ACPI_MADT_ENABLED (1) Processor is usable if set */ 1128272444Sjkim#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 1129272444Sjkim#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 1130272444Sjkim 1131272444Sjkim 1132283092Sjkim/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 1133228110Sjkim 1134228110Sjkimtypedef struct acpi_madt_generic_distributor 1135228110Sjkim{ 1136228110Sjkim ACPI_SUBTABLE_HEADER Header; 1137228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1138228110Sjkim UINT32 GicId; 1139228110Sjkim UINT64 BaseAddress; 1140228110Sjkim UINT32 GlobalIrqBase; 1141283092Sjkim UINT8 Version; 1142284583Sjkim UINT8 Reserved2[3]; /* Reserved - must be zero */ 1143228110Sjkim 1144228110Sjkim} ACPI_MADT_GENERIC_DISTRIBUTOR; 1145228110Sjkim 1146284583Sjkim/* Values for Version field above */ 1147228110Sjkim 1148284583Sjkimenum AcpiMadtGicVersion 1149284583Sjkim{ 1150284583Sjkim ACPI_MADT_GIC_VERSION_NONE = 0, 1151284583Sjkim ACPI_MADT_GIC_VERSION_V1 = 1, 1152284583Sjkim ACPI_MADT_GIC_VERSION_V2 = 2, 1153284583Sjkim ACPI_MADT_GIC_VERSION_V3 = 3, 1154284583Sjkim ACPI_MADT_GIC_VERSION_V4 = 4, 1155284583Sjkim ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1156284583Sjkim}; 1157284583Sjkim 1158284583Sjkim 1159272444Sjkim/* 13: Generic MSI Frame (ACPI 5.1) */ 1160272444Sjkim 1161272444Sjkimtypedef struct acpi_madt_generic_msi_frame 1162272444Sjkim{ 1163272444Sjkim ACPI_SUBTABLE_HEADER Header; 1164272444Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1165272444Sjkim UINT32 MsiFrameId; 1166272444Sjkim UINT64 BaseAddress; 1167272444Sjkim UINT32 Flags; 1168272444Sjkim UINT16 SpiCount; 1169272444Sjkim UINT16 SpiBase; 1170272444Sjkim 1171272444Sjkim} ACPI_MADT_GENERIC_MSI_FRAME; 1172272444Sjkim 1173272444Sjkim/* Masks for Flags field above */ 1174272444Sjkim 1175272444Sjkim#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1176272444Sjkim 1177272444Sjkim 1178272444Sjkim/* 14: Generic Redistributor (ACPI 5.1) */ 1179272444Sjkim 1180272444Sjkimtypedef struct acpi_madt_generic_redistributor 1181272444Sjkim{ 1182272444Sjkim ACPI_SUBTABLE_HEADER Header; 1183272444Sjkim UINT16 Reserved; /* reserved - must be zero */ 1184272444Sjkim UINT64 BaseAddress; 1185272444Sjkim UINT32 Length; 1186272444Sjkim 1187272444Sjkim} ACPI_MADT_GENERIC_REDISTRIBUTOR; 1188272444Sjkim 1189272444Sjkim 1190283092Sjkim/* 15: Generic Translator (ACPI 6.0) */ 1191283092Sjkim 1192283092Sjkimtypedef struct acpi_madt_generic_translator 1193283092Sjkim{ 1194283092Sjkim ACPI_SUBTABLE_HEADER Header; 1195283092Sjkim UINT16 Reserved; /* reserved - must be zero */ 1196283092Sjkim UINT32 TranslationId; 1197283092Sjkim UINT64 BaseAddress; 1198283092Sjkim UINT32 Reserved2; 1199283092Sjkim 1200283092Sjkim} ACPI_MADT_GENERIC_TRANSLATOR; 1201283092Sjkim 1202283092Sjkim 1203167802Sjkim/* 1204167802Sjkim * Common flags fields for MADT subtables 1205167802Sjkim */ 1206167802Sjkim 1207272444Sjkim/* MADT Local APIC flags */ 1208167802Sjkim 1209167802Sjkim#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1210167802Sjkim 1211167802Sjkim/* MADT MPS INTI flags (IntiFlags) */ 1212167802Sjkim 1213167802Sjkim#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1214167802Sjkim#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1215167802Sjkim 1216167802Sjkim/* Values for MPS INTI flags */ 1217167802Sjkim 1218167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS 0 1219167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1220167802Sjkim#define ACPI_MADT_POLARITY_RESERVED 2 1221167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1222167802Sjkim 1223167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS (0) 1224167802Sjkim#define ACPI_MADT_TRIGGER_EDGE (1<<2) 1225167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1226167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1227167802Sjkim 1228167802Sjkim 1229167802Sjkim/******************************************************************************* 1230167802Sjkim * 1231197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1232197104Sjkim * Version 1 1233167802Sjkim * 1234167802Sjkim ******************************************************************************/ 1235167802Sjkim 1236197104Sjkimtypedef struct acpi_table_msct 1237167802Sjkim{ 1238167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1239197104Sjkim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1240197104Sjkim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1241197104Sjkim UINT32 MaxClockDomains; /* Max number of clock domains */ 1242197104Sjkim UINT64 MaxAddress; /* Max physical address in system */ 1243167802Sjkim 1244197104Sjkim} ACPI_TABLE_MSCT; 1245167802Sjkim 1246167802Sjkim 1247197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */ 1248167802Sjkim 1249197104Sjkimtypedef struct acpi_msct_proximity 1250167802Sjkim{ 1251197104Sjkim UINT8 Revision; 1252197104Sjkim UINT8 Length; 1253197104Sjkim UINT32 RangeStart; /* Start of domain range */ 1254197104Sjkim UINT32 RangeEnd; /* End of domain range */ 1255197104Sjkim UINT32 ProcessorCapacity; 1256197104Sjkim UINT64 MemoryCapacity; /* In bytes */ 1257167802Sjkim 1258197104Sjkim} ACPI_MSCT_PROXIMITY; 1259167802Sjkim 1260167802Sjkim 1261167802Sjkim/******************************************************************************* 1262167802Sjkim * 1263298714Sjkim * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1264283092Sjkim * Version 1 1265283092Sjkim * 1266283092Sjkim ******************************************************************************/ 1267283092Sjkim 1268283092Sjkimtypedef struct acpi_table_nfit 1269283092Sjkim{ 1270283092Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1271283092Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1272283092Sjkim 1273283092Sjkim} ACPI_TABLE_NFIT; 1274283092Sjkim 1275283092Sjkim/* Subtable header for NFIT */ 1276283092Sjkim 1277283092Sjkimtypedef struct acpi_nfit_header 1278283092Sjkim{ 1279283092Sjkim UINT16 Type; 1280283092Sjkim UINT16 Length; 1281283092Sjkim 1282283092Sjkim} ACPI_NFIT_HEADER; 1283283092Sjkim 1284283092Sjkim 1285283092Sjkim/* Values for subtable type in ACPI_NFIT_HEADER */ 1286283092Sjkim 1287283092Sjkimenum AcpiNfitType 1288283092Sjkim{ 1289283092Sjkim ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1290283092Sjkim ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1291283092Sjkim ACPI_NFIT_TYPE_INTERLEAVE = 2, 1292283092Sjkim ACPI_NFIT_TYPE_SMBIOS = 3, 1293283092Sjkim ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1294283092Sjkim ACPI_NFIT_TYPE_DATA_REGION = 5, 1295283092Sjkim ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1296283092Sjkim ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ 1297283092Sjkim}; 1298283092Sjkim 1299283092Sjkim/* 1300283092Sjkim * NFIT Subtables 1301283092Sjkim */ 1302283092Sjkim 1303283092Sjkim/* 0: System Physical Address Range Structure */ 1304283092Sjkim 1305283092Sjkimtypedef struct acpi_nfit_system_address 1306283092Sjkim{ 1307283092Sjkim ACPI_NFIT_HEADER Header; 1308283092Sjkim UINT16 RangeIndex; 1309283092Sjkim UINT16 Flags; 1310283092Sjkim UINT32 Reserved; /* Reseved, must be zero */ 1311283092Sjkim UINT32 ProximityDomain; 1312283092Sjkim UINT8 RangeGuid[16]; 1313283092Sjkim UINT64 Address; 1314283092Sjkim UINT64 Length; 1315283092Sjkim UINT64 MemoryMapping; 1316283092Sjkim 1317283092Sjkim} ACPI_NFIT_SYSTEM_ADDRESS; 1318283092Sjkim 1319283092Sjkim/* Flags */ 1320283092Sjkim 1321283092Sjkim#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1322283092Sjkim#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1323283092Sjkim 1324283092Sjkim/* Range Type GUIDs appear in the include/acuuid.h file */ 1325283092Sjkim 1326283092Sjkim 1327283092Sjkim/* 1: Memory Device to System Address Range Map Structure */ 1328283092Sjkim 1329283092Sjkimtypedef struct acpi_nfit_memory_map 1330283092Sjkim{ 1331283092Sjkim ACPI_NFIT_HEADER Header; 1332283092Sjkim UINT32 DeviceHandle; 1333283092Sjkim UINT16 PhysicalId; 1334283092Sjkim UINT16 RegionId; 1335283092Sjkim UINT16 RangeIndex; 1336283092Sjkim UINT16 RegionIndex; 1337283092Sjkim UINT64 RegionSize; 1338283092Sjkim UINT64 RegionOffset; 1339283092Sjkim UINT64 Address; 1340283092Sjkim UINT16 InterleaveIndex; 1341283092Sjkim UINT16 InterleaveWays; 1342283092Sjkim UINT16 Flags; 1343283092Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1344283092Sjkim 1345283092Sjkim} ACPI_NFIT_MEMORY_MAP; 1346283092Sjkim 1347283092Sjkim/* Flags */ 1348283092Sjkim 1349283092Sjkim#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1350283092Sjkim#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1351283092Sjkim#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1352298714Sjkim#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1353283092Sjkim#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1354283092Sjkim#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1355298714Sjkim#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1356283092Sjkim 1357283092Sjkim 1358283092Sjkim/* 2: Interleave Structure */ 1359283092Sjkim 1360283092Sjkimtypedef struct acpi_nfit_interleave 1361283092Sjkim{ 1362283092Sjkim ACPI_NFIT_HEADER Header; 1363283092Sjkim UINT16 InterleaveIndex; 1364283092Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1365283092Sjkim UINT32 LineCount; 1366283092Sjkim UINT32 LineSize; 1367283092Sjkim UINT32 LineOffset[1]; /* Variable length */ 1368283092Sjkim 1369283092Sjkim} ACPI_NFIT_INTERLEAVE; 1370283092Sjkim 1371283092Sjkim 1372283092Sjkim/* 3: SMBIOS Management Information Structure */ 1373283092Sjkim 1374283092Sjkimtypedef struct acpi_nfit_smbios 1375283092Sjkim{ 1376283092Sjkim ACPI_NFIT_HEADER Header; 1377283092Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1378283092Sjkim UINT8 Data[1]; /* Variable length */ 1379283092Sjkim 1380283092Sjkim} ACPI_NFIT_SMBIOS; 1381283092Sjkim 1382283092Sjkim 1383283092Sjkim/* 4: NVDIMM Control Region Structure */ 1384283092Sjkim 1385283092Sjkimtypedef struct acpi_nfit_control_region 1386283092Sjkim{ 1387283092Sjkim ACPI_NFIT_HEADER Header; 1388283092Sjkim UINT16 RegionIndex; 1389283092Sjkim UINT16 VendorId; 1390283092Sjkim UINT16 DeviceId; 1391283092Sjkim UINT16 RevisionId; 1392283092Sjkim UINT16 SubsystemVendorId; 1393283092Sjkim UINT16 SubsystemDeviceId; 1394283092Sjkim UINT16 SubsystemRevisionId; 1395298714Sjkim UINT8 ValidFields; 1396298714Sjkim UINT8 ManufacturingLocation; 1397298714Sjkim UINT16 ManufacturingDate; 1398298714Sjkim UINT8 Reserved[2]; /* Reserved, must be zero */ 1399283092Sjkim UINT32 SerialNumber; 1400283092Sjkim UINT16 Code; 1401283092Sjkim UINT16 Windows; 1402283092Sjkim UINT64 WindowSize; 1403283092Sjkim UINT64 CommandOffset; 1404283092Sjkim UINT64 CommandSize; 1405283092Sjkim UINT64 StatusOffset; 1406283092Sjkim UINT64 StatusSize; 1407283092Sjkim UINT16 Flags; 1408283092Sjkim UINT8 Reserved1[6]; /* Reserved, must be zero */ 1409283092Sjkim 1410283092Sjkim} ACPI_NFIT_CONTROL_REGION; 1411283092Sjkim 1412283092Sjkim/* Flags */ 1413283092Sjkim 1414298714Sjkim#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1415283092Sjkim 1416298714Sjkim/* ValidFields bits */ 1417283092Sjkim 1418298714Sjkim#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 1419298714Sjkim 1420298714Sjkim 1421283092Sjkim/* 5: NVDIMM Block Data Window Region Structure */ 1422283092Sjkim 1423283092Sjkimtypedef struct acpi_nfit_data_region 1424283092Sjkim{ 1425283092Sjkim ACPI_NFIT_HEADER Header; 1426283092Sjkim UINT16 RegionIndex; 1427283092Sjkim UINT16 Windows; 1428283092Sjkim UINT64 Offset; 1429283092Sjkim UINT64 Size; 1430283092Sjkim UINT64 Capacity; 1431283092Sjkim UINT64 StartAddress; 1432283092Sjkim 1433283092Sjkim} ACPI_NFIT_DATA_REGION; 1434283092Sjkim 1435283092Sjkim 1436283092Sjkim/* 6: Flush Hint Address Structure */ 1437283092Sjkim 1438283092Sjkimtypedef struct acpi_nfit_flush_address 1439283092Sjkim{ 1440283092Sjkim ACPI_NFIT_HEADER Header; 1441283092Sjkim UINT32 DeviceHandle; 1442283092Sjkim UINT16 HintCount; 1443283092Sjkim UINT8 Reserved[6]; /* Reserved, must be zero */ 1444283092Sjkim UINT64 HintAddress[1]; /* Variable length */ 1445283092Sjkim 1446283092Sjkim} ACPI_NFIT_FLUSH_ADDRESS; 1447283092Sjkim 1448283092Sjkim 1449283092Sjkim/******************************************************************************* 1450283092Sjkim * 1451167802Sjkim * SBST - Smart Battery Specification Table 1452197104Sjkim * Version 1 1453167802Sjkim * 1454167802Sjkim ******************************************************************************/ 1455167802Sjkim 1456167802Sjkimtypedef struct acpi_table_sbst 1457167802Sjkim{ 1458167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1459167802Sjkim UINT32 WarningLevel; 1460167802Sjkim UINT32 LowLevel; 1461167802Sjkim UINT32 CriticalLevel; 1462167802Sjkim 1463167802Sjkim} ACPI_TABLE_SBST; 1464167802Sjkim 1465167802Sjkim 1466167802Sjkim/******************************************************************************* 1467167802Sjkim * 1468167802Sjkim * SLIT - System Locality Distance Information Table 1469197104Sjkim * Version 1 1470167802Sjkim * 1471167802Sjkim ******************************************************************************/ 1472167802Sjkim 1473167802Sjkimtypedef struct acpi_table_slit 1474167802Sjkim{ 1475167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1476167802Sjkim UINT64 LocalityCount; 1477167802Sjkim UINT8 Entry[1]; /* Real size = localities^2 */ 1478167802Sjkim 1479167802Sjkim} ACPI_TABLE_SLIT; 1480167802Sjkim 1481167802Sjkim 1482167802Sjkim/******************************************************************************* 1483167802Sjkim * 1484167802Sjkim * SRAT - System Resource Affinity Table 1485197104Sjkim * Version 3 1486167802Sjkim * 1487167802Sjkim ******************************************************************************/ 1488167802Sjkim 1489167802Sjkimtypedef struct acpi_table_srat 1490167802Sjkim{ 1491167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1492167802Sjkim UINT32 TableRevision; /* Must be value '1' */ 1493167802Sjkim UINT64 Reserved; /* Reserved, must be zero */ 1494167802Sjkim 1495167802Sjkim} ACPI_TABLE_SRAT; 1496167802Sjkim 1497167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 1498167802Sjkim 1499167802Sjkimenum AcpiSratType 1500167802Sjkim{ 1501193267Sjkim ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1502193267Sjkim ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1503193267Sjkim ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 1504272444Sjkim ACPI_SRAT_TYPE_GICC_AFFINITY = 3, 1505272444Sjkim ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */ 1506167802Sjkim}; 1507167802Sjkim 1508193267Sjkim/* 1509272444Sjkim * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1510193267Sjkim */ 1511167802Sjkim 1512193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */ 1513193267Sjkim 1514167802Sjkimtypedef struct acpi_srat_cpu_affinity 1515167802Sjkim{ 1516167802Sjkim ACPI_SUBTABLE_HEADER Header; 1517167802Sjkim UINT8 ProximityDomainLo; 1518167802Sjkim UINT8 ApicId; 1519167802Sjkim UINT32 Flags; 1520167802Sjkim UINT8 LocalSapicEid; 1521167802Sjkim UINT8 ProximityDomainHi[3]; 1522272444Sjkim UINT32 ClockDomain; 1523167802Sjkim 1524167802Sjkim} ACPI_SRAT_CPU_AFFINITY; 1525167802Sjkim 1526197104Sjkim/* Flags */ 1527197104Sjkim 1528197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 1529197104Sjkim 1530197104Sjkim 1531193267Sjkim/* 1: Memory Affinity */ 1532167802Sjkim 1533167802Sjkimtypedef struct acpi_srat_mem_affinity 1534167802Sjkim{ 1535167802Sjkim ACPI_SUBTABLE_HEADER Header; 1536167802Sjkim UINT32 ProximityDomain; 1537167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1538167802Sjkim UINT64 BaseAddress; 1539167802Sjkim UINT64 Length; 1540193267Sjkim UINT32 Reserved1; 1541167802Sjkim UINT32 Flags; 1542193267Sjkim UINT64 Reserved2; /* Reserved, must be zero */ 1543167802Sjkim 1544167802Sjkim} ACPI_SRAT_MEM_AFFINITY; 1545167802Sjkim 1546167802Sjkim/* Flags */ 1547167802Sjkim 1548167802Sjkim#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1549167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1550167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1551167802Sjkim 1552167802Sjkim 1553197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 1554197104Sjkim 1555193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity 1556167802Sjkim{ 1557193267Sjkim ACPI_SUBTABLE_HEADER Header; 1558193267Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1559193267Sjkim UINT32 ProximityDomain; 1560193267Sjkim UINT32 ApicId; 1561193267Sjkim UINT32 Flags; 1562197104Sjkim UINT32 ClockDomain; 1563197104Sjkim UINT32 Reserved2; 1564167802Sjkim 1565193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY; 1566167802Sjkim 1567193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 1568193267Sjkim 1569193267Sjkim#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 1570193267Sjkim 1571193267Sjkim 1572272444Sjkim/* 3: GICC Affinity (ACPI 5.1) */ 1573272444Sjkim 1574272444Sjkimtypedef struct acpi_srat_gicc_affinity 1575272444Sjkim{ 1576272444Sjkim ACPI_SUBTABLE_HEADER Header; 1577272444Sjkim UINT32 ProximityDomain; 1578272444Sjkim UINT32 AcpiProcessorUid; 1579272444Sjkim UINT32 Flags; 1580272444Sjkim UINT32 ClockDomain; 1581272444Sjkim 1582272444Sjkim} ACPI_SRAT_GICC_AFFINITY; 1583272444Sjkim 1584272444Sjkim/* Flags for ACPI_SRAT_GICC_AFFINITY */ 1585272444Sjkim 1586272444Sjkim#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ 1587272444Sjkim 1588283092Sjkim 1589167802Sjkim/* Reset to default packing */ 1590167802Sjkim 159169450Smsmith#pragma pack() 159269450Smsmith 159369450Smsmith#endif /* __ACTBL1_H__ */ 1594