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 */ 178322877Sjkim#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ 179193267Sjkim#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 180167802Sjkim#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 181197104Sjkim#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 182327557Sjkim#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ 183322877Sjkim#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 184167802Sjkim#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 185327557Sjkim#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 186167802Sjkim#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 187167802Sjkim#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 188283092Sjkim#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 189167802Sjkim 190167802Sjkim 191167802Sjkim/* 192167802Sjkim * All tables must be byte-packed to match the ACPI specification, since 193167802Sjkim * the tables are provided by the system BIOS. 194167802Sjkim */ 19569450Smsmith#pragma pack(1) 19669450Smsmith 19791116Smsmith/* 198239340Sjkim * Note: C bitfields are not used for this reason: 199239340Sjkim * 200239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language 201239340Sjkim * does not specify the layout of bitfields in memory, which means they are 202239340Sjkim * essentially useless for dealing with packed data in on-disk formats or 203239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 204239340Sjkim * this decision was a design error in C. Ritchie could have picked an order 205239340Sjkim * and stuck with it." Norman Ramsey. 206239340Sjkim * See http://stackoverflow.com/a/1053662/41661 20791116Smsmith */ 208167802Sjkim 209167802Sjkim 210197104Sjkim/******************************************************************************* 211197104Sjkim * 212197104Sjkim * Common subtable headers 213197104Sjkim * 214197104Sjkim ******************************************************************************/ 215167802Sjkim 216197104Sjkim/* Generic subtable header (used in MADT, SRAT, etc.) */ 217197104Sjkim 218167802Sjkimtypedef struct acpi_subtable_header 21969450Smsmith{ 220167802Sjkim UINT8 Type; 221167802Sjkim UINT8 Length; 222151937Sjkim 223167802Sjkim} ACPI_SUBTABLE_HEADER; 22469450Smsmith 22569450Smsmith 226197104Sjkim/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 227193267Sjkim 228193267Sjkimtypedef struct acpi_whea_header 229193267Sjkim{ 230193267Sjkim UINT8 Action; 231193267Sjkim UINT8 Instruction; 232193267Sjkim UINT8 Flags; 233193267Sjkim UINT8 Reserved; 234193267Sjkim ACPI_GENERIC_ADDRESS RegisterRegion; 235193267Sjkim UINT64 Value; /* Value used with Read/Write register */ 236193267Sjkim UINT64 Mask; /* Bitmask required for this register instruction */ 237193267Sjkim 238193267Sjkim} ACPI_WHEA_HEADER; 239193267Sjkim 240193267Sjkim 241167802Sjkim/******************************************************************************* 242167802Sjkim * 243197104Sjkim * BERT - Boot Error Record Table (ACPI 4.0) 244197104Sjkim * Version 1 245167802Sjkim * 246167802Sjkim ******************************************************************************/ 247167802Sjkim 248193267Sjkimtypedef struct acpi_table_bert 249193267Sjkim{ 250193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 251193267Sjkim UINT32 RegionLength; /* Length of the boot error region */ 252238381Sjkim UINT64 Address; /* Physical address of the error region */ 253193267Sjkim 254193267Sjkim} ACPI_TABLE_BERT; 255193267Sjkim 256193267Sjkim 257197104Sjkim/* Boot Error Region (not a subtable, pointed to by Address field above) */ 258193267Sjkim 259193267Sjkimtypedef struct acpi_bert_region 260193267Sjkim{ 261197104Sjkim UINT32 BlockStatus; /* Type of error information */ 262197104Sjkim UINT32 RawDataOffset; /* Offset to raw error data */ 263197104Sjkim UINT32 RawDataLength; /* Length of raw error data */ 264197104Sjkim UINT32 DataLength; /* Length of generic error data */ 265197104Sjkim UINT32 ErrorSeverity; /* Severity code */ 266193267Sjkim 267193267Sjkim} ACPI_BERT_REGION; 268193267Sjkim 269197104Sjkim/* Values for BlockStatus flags above */ 270193267Sjkim 271193267Sjkim#define ACPI_BERT_UNCORRECTABLE (1) 272197104Sjkim#define ACPI_BERT_CORRECTABLE (1<<1) 273197104Sjkim#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 274197104Sjkim#define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 275197104Sjkim#define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 276193267Sjkim 277197104Sjkim/* Values for ErrorSeverity above */ 278193267Sjkim 279197104Sjkimenum AcpiBertErrorSeverity 280167802Sjkim{ 281197104Sjkim ACPI_BERT_ERROR_CORRECTABLE = 0, 282197104Sjkim ACPI_BERT_ERROR_FATAL = 1, 283197104Sjkim ACPI_BERT_ERROR_CORRECTED = 2, 284197104Sjkim ACPI_BERT_ERROR_NONE = 3, 285197104Sjkim ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 286197104Sjkim}; 287167802Sjkim 288197104Sjkim/* 289197104Sjkim * Note: The generic error data that follows the ErrorSeverity field above 290197104Sjkim * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 291197104Sjkim */ 292167802Sjkim 293167802Sjkim 294167802Sjkim/******************************************************************************* 295167802Sjkim * 296197104Sjkim * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 297197104Sjkim * Version 1 298167802Sjkim * 299167802Sjkim ******************************************************************************/ 300167802Sjkim 301167802Sjkimtypedef struct acpi_table_cpep 302167802Sjkim{ 303167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 304167802Sjkim UINT64 Reserved; 305167802Sjkim 306167802Sjkim} ACPI_TABLE_CPEP; 307167802Sjkim 308167802Sjkim 309167802Sjkim/* Subtable */ 310167802Sjkim 311167802Sjkimtypedef struct acpi_cpep_polling 312167802Sjkim{ 313197104Sjkim ACPI_SUBTABLE_HEADER Header; 314167802Sjkim UINT8 Id; /* Processor ID */ 315167802Sjkim UINT8 Eid; /* Processor EID */ 316167802Sjkim UINT32 Interval; /* Polling interval (msec) */ 317167802Sjkim 318167802Sjkim} ACPI_CPEP_POLLING; 319167802Sjkim 320167802Sjkim 321167802Sjkim/******************************************************************************* 322167802Sjkim * 323167802Sjkim * ECDT - Embedded Controller Boot Resources Table 324197104Sjkim * Version 1 325167802Sjkim * 326167802Sjkim ******************************************************************************/ 327167802Sjkim 328167802Sjkimtypedef struct acpi_table_ecdt 329167802Sjkim{ 330167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 331167802Sjkim ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 332167802Sjkim ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 333167802Sjkim UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 334167802Sjkim UINT8 Gpe; /* The GPE for the EC */ 335167802Sjkim UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 336167802Sjkim 337167802Sjkim} ACPI_TABLE_ECDT; 338167802Sjkim 339167802Sjkim 340167802Sjkim/******************************************************************************* 341167802Sjkim * 342197104Sjkim * EINJ - Error Injection Table (ACPI 4.0) 343197104Sjkim * Version 1 344193267Sjkim * 345193267Sjkim ******************************************************************************/ 346193267Sjkim 347193267Sjkimtypedef struct acpi_table_einj 348193267Sjkim{ 349193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 350193267Sjkim UINT32 HeaderLength; 351197104Sjkim UINT8 Flags; 352197104Sjkim UINT8 Reserved[3]; 353193267Sjkim UINT32 Entries; 354193267Sjkim 355193267Sjkim} ACPI_TABLE_EINJ; 356193267Sjkim 357197104Sjkim 358193267Sjkim/* EINJ Injection Instruction Entries (actions) */ 359193267Sjkim 360193267Sjkimtypedef struct acpi_einj_entry 361193267Sjkim{ 362193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 363193267Sjkim 364193267Sjkim} ACPI_EINJ_ENTRY; 365193267Sjkim 366197104Sjkim/* Masks for Flags field above */ 367197104Sjkim 368197104Sjkim#define ACPI_EINJ_PRESERVE (1) 369197104Sjkim 370193267Sjkim/* Values for Action field above */ 371193267Sjkim 372193267Sjkimenum AcpiEinjActions 373193267Sjkim{ 374228110Sjkim ACPI_EINJ_BEGIN_OPERATION = 0, 375228110Sjkim ACPI_EINJ_GET_TRIGGER_TABLE = 1, 376228110Sjkim ACPI_EINJ_SET_ERROR_TYPE = 2, 377228110Sjkim ACPI_EINJ_GET_ERROR_TYPE = 3, 378228110Sjkim ACPI_EINJ_END_OPERATION = 4, 379228110Sjkim ACPI_EINJ_EXECUTE_OPERATION = 5, 380228110Sjkim ACPI_EINJ_CHECK_BUSY_STATUS = 6, 381228110Sjkim ACPI_EINJ_GET_COMMAND_STATUS = 7, 382228110Sjkim ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 383298714Sjkim ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 384298714Sjkim ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 385228110Sjkim ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 386193267Sjkim}; 387193267Sjkim 388193267Sjkim/* Values for Instruction field above */ 389193267Sjkim 390193267Sjkimenum AcpiEinjInstructions 391193267Sjkim{ 392193267Sjkim ACPI_EINJ_READ_REGISTER = 0, 393193267Sjkim ACPI_EINJ_READ_REGISTER_VALUE = 1, 394193267Sjkim ACPI_EINJ_WRITE_REGISTER = 2, 395193267Sjkim ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 396193267Sjkim ACPI_EINJ_NOOP = 4, 397228110Sjkim ACPI_EINJ_FLUSH_CACHELINE = 5, 398228110Sjkim ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 399193267Sjkim}; 400193267Sjkim 401228110Sjkimtypedef struct acpi_einj_error_type_with_addr 402228110Sjkim{ 403228110Sjkim UINT32 ErrorType; 404228110Sjkim UINT32 VendorStructOffset; 405228110Sjkim UINT32 Flags; 406228110Sjkim UINT32 ApicId; 407228110Sjkim UINT64 Address; 408228110Sjkim UINT64 Range; 409228110Sjkim UINT32 PcieId; 410197104Sjkim 411228110Sjkim} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 412228110Sjkim 413228110Sjkimtypedef struct acpi_einj_vendor 414228110Sjkim{ 415228110Sjkim UINT32 Length; 416228110Sjkim UINT32 PcieId; 417228110Sjkim UINT16 VendorId; 418228110Sjkim UINT16 DeviceId; 419228110Sjkim UINT8 RevisionId; 420228110Sjkim UINT8 Reserved[3]; 421228110Sjkim 422228110Sjkim} ACPI_EINJ_VENDOR; 423228110Sjkim 424228110Sjkim 425193267Sjkim/* EINJ Trigger Error Action Table */ 426193267Sjkim 427193267Sjkimtypedef struct acpi_einj_trigger 428193267Sjkim{ 429193267Sjkim UINT32 HeaderSize; 430193267Sjkim UINT32 Revision; 431193267Sjkim UINT32 TableSize; 432193267Sjkim UINT32 EntryCount; 433193267Sjkim 434193267Sjkim} ACPI_EINJ_TRIGGER; 435193267Sjkim 436197104Sjkim/* Command status return values */ 437193267Sjkim 438197104Sjkimenum AcpiEinjCommandStatus 439197104Sjkim{ 440197104Sjkim ACPI_EINJ_SUCCESS = 0, 441197104Sjkim ACPI_EINJ_FAILURE = 1, 442197104Sjkim ACPI_EINJ_INVALID_ACCESS = 2, 443197104Sjkim ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 444197104Sjkim}; 445197104Sjkim 446197104Sjkim 447197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 448197104Sjkim 449197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 450197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 451197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 452197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 453197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 454197104Sjkim#define ACPI_EINJ_MEMORY_FATAL (1<<5) 455197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 456197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 457197104Sjkim#define ACPI_EINJ_PCIX_FATAL (1<<8) 458197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 459197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 460197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL (1<<11) 461228110Sjkim#define ACPI_EINJ_VENDOR_DEFINED (1<<31) 462197104Sjkim 463197104Sjkim 464193267Sjkim/******************************************************************************* 465193267Sjkim * 466197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0) 467197104Sjkim * Version 1 468193267Sjkim * 469193267Sjkim ******************************************************************************/ 470193267Sjkim 471193267Sjkimtypedef struct acpi_table_erst 472193267Sjkim{ 473193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 474193267Sjkim UINT32 HeaderLength; 475193267Sjkim UINT32 Reserved; 476193267Sjkim UINT32 Entries; 477193267Sjkim 478193267Sjkim} ACPI_TABLE_ERST; 479193267Sjkim 480197104Sjkim 481193267Sjkim/* ERST Serialization Entries (actions) */ 482193267Sjkim 483193267Sjkimtypedef struct acpi_erst_entry 484193267Sjkim{ 485193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 486193267Sjkim 487193267Sjkim} ACPI_ERST_ENTRY; 488193267Sjkim 489197104Sjkim/* Masks for Flags field above */ 490197104Sjkim 491197104Sjkim#define ACPI_ERST_PRESERVE (1) 492197104Sjkim 493193267Sjkim/* Values for Action field above */ 494193267Sjkim 495193267Sjkimenum AcpiErstActions 496193267Sjkim{ 497197104Sjkim ACPI_ERST_BEGIN_WRITE = 0, 498197104Sjkim ACPI_ERST_BEGIN_READ = 1, 499197104Sjkim ACPI_ERST_BEGIN_CLEAR = 2, 500197104Sjkim ACPI_ERST_END = 3, 501193267Sjkim ACPI_ERST_SET_RECORD_OFFSET = 4, 502193267Sjkim ACPI_ERST_EXECUTE_OPERATION = 5, 503193267Sjkim ACPI_ERST_CHECK_BUSY_STATUS = 6, 504193267Sjkim ACPI_ERST_GET_COMMAND_STATUS = 7, 505197104Sjkim ACPI_ERST_GET_RECORD_ID = 8, 506197104Sjkim ACPI_ERST_SET_RECORD_ID = 9, 507193267Sjkim ACPI_ERST_GET_RECORD_COUNT = 10, 508193267Sjkim ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 509193267Sjkim ACPI_ERST_NOT_USED = 12, 510193267Sjkim ACPI_ERST_GET_ERROR_RANGE = 13, 511193267Sjkim ACPI_ERST_GET_ERROR_LENGTH = 14, 512193267Sjkim ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 513298714Sjkim ACPI_ERST_EXECUTE_TIMINGS = 16, 514298714Sjkim ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 515193267Sjkim}; 516193267Sjkim 517193267Sjkim/* Values for Instruction field above */ 518193267Sjkim 519193267Sjkimenum AcpiErstInstructions 520193267Sjkim{ 521193267Sjkim ACPI_ERST_READ_REGISTER = 0, 522193267Sjkim ACPI_ERST_READ_REGISTER_VALUE = 1, 523193267Sjkim ACPI_ERST_WRITE_REGISTER = 2, 524193267Sjkim ACPI_ERST_WRITE_REGISTER_VALUE = 3, 525193267Sjkim ACPI_ERST_NOOP = 4, 526193267Sjkim ACPI_ERST_LOAD_VAR1 = 5, 527193267Sjkim ACPI_ERST_LOAD_VAR2 = 6, 528193267Sjkim ACPI_ERST_STORE_VAR1 = 7, 529193267Sjkim ACPI_ERST_ADD = 8, 530193267Sjkim ACPI_ERST_SUBTRACT = 9, 531193267Sjkim ACPI_ERST_ADD_VALUE = 10, 532193267Sjkim ACPI_ERST_SUBTRACT_VALUE = 11, 533193267Sjkim ACPI_ERST_STALL = 12, 534193267Sjkim ACPI_ERST_STALL_WHILE_TRUE = 13, 535193267Sjkim ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 536193267Sjkim ACPI_ERST_GOTO = 15, 537193267Sjkim ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 538193267Sjkim ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 539193267Sjkim ACPI_ERST_MOVE_DATA = 18, 540193267Sjkim ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 541193267Sjkim}; 542193267Sjkim 543197104Sjkim/* Command status return values */ 544193267Sjkim 545197104Sjkimenum AcpiErstCommandStatus 546197104Sjkim{ 547197104Sjkim ACPI_ERST_SUCESS = 0, 548197104Sjkim ACPI_ERST_NO_SPACE = 1, 549197104Sjkim ACPI_ERST_NOT_AVAILABLE = 2, 550197104Sjkim ACPI_ERST_FAILURE = 3, 551197104Sjkim ACPI_ERST_RECORD_EMPTY = 4, 552197104Sjkim ACPI_ERST_NOT_FOUND = 5, 553197104Sjkim ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 554197104Sjkim}; 555197104Sjkim 556197104Sjkim 557197104Sjkim/* Error Record Serialization Information */ 558197104Sjkim 559197104Sjkimtypedef struct acpi_erst_info 560197104Sjkim{ 561197104Sjkim UINT16 Signature; /* Should be "ER" */ 562197104Sjkim UINT8 Data[48]; 563197104Sjkim 564197104Sjkim} ACPI_ERST_INFO; 565197104Sjkim 566197104Sjkim 567193267Sjkim/******************************************************************************* 568193267Sjkim * 569197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0) 570197104Sjkim * Version 1 571193267Sjkim * 572193267Sjkim ******************************************************************************/ 573193267Sjkim 574193267Sjkimtypedef struct acpi_table_hest 575193267Sjkim{ 576193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 577193267Sjkim UINT32 ErrorSourceCount; 578193267Sjkim 579193267Sjkim} ACPI_TABLE_HEST; 580193267Sjkim 581193267Sjkim 582193267Sjkim/* HEST subtable header */ 583193267Sjkim 584193267Sjkimtypedef struct acpi_hest_header 585193267Sjkim{ 586193267Sjkim UINT16 Type; 587197104Sjkim UINT16 SourceId; 588193267Sjkim 589193267Sjkim} ACPI_HEST_HEADER; 590193267Sjkim 591193267Sjkim 592193267Sjkim/* Values for Type field above for subtables */ 593193267Sjkim 594193267Sjkimenum AcpiHestTypes 595193267Sjkim{ 596197104Sjkim ACPI_HEST_TYPE_IA32_CHECK = 0, 597197104Sjkim ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 598197104Sjkim ACPI_HEST_TYPE_IA32_NMI = 2, 599197104Sjkim ACPI_HEST_TYPE_NOT_USED3 = 3, 600197104Sjkim ACPI_HEST_TYPE_NOT_USED4 = 4, 601197104Sjkim ACPI_HEST_TYPE_NOT_USED5 = 5, 602197104Sjkim ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 603197104Sjkim ACPI_HEST_TYPE_AER_ENDPOINT = 7, 604197104Sjkim ACPI_HEST_TYPE_AER_BRIDGE = 8, 605197104Sjkim ACPI_HEST_TYPE_GENERIC_ERROR = 9, 606298714Sjkim ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 607322877Sjkim ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, 608322877Sjkim ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ 609193267Sjkim}; 610193267Sjkim 611193267Sjkim 612193267Sjkim/* 613197104Sjkim * HEST substructures contained in subtables 614193267Sjkim */ 615193267Sjkim 616197104Sjkim/* 617197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 618197104Sjkim * ACPI_HEST_IA_CORRECTED structures. 619197104Sjkim */ 620197104Sjkimtypedef struct acpi_hest_ia_error_bank 621193267Sjkim{ 622193267Sjkim UINT8 BankNumber; 623193267Sjkim UINT8 ClearStatusOnInit; 624193267Sjkim UINT8 StatusFormat; 625197104Sjkim UINT8 Reserved; 626193267Sjkim UINT32 ControlRegister; 627197104Sjkim UINT64 ControlData; 628193267Sjkim UINT32 StatusRegister; 629193267Sjkim UINT32 AddressRegister; 630193267Sjkim UINT32 MiscRegister; 631193267Sjkim 632197104Sjkim} ACPI_HEST_IA_ERROR_BANK; 633193267Sjkim 634193267Sjkim 635197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 636193267Sjkim 637193267Sjkimtypedef struct acpi_hest_aer_common 638193267Sjkim{ 639197104Sjkim UINT16 Reserved1; 640193267Sjkim UINT8 Flags; 641193267Sjkim UINT8 Enabled; 642197104Sjkim UINT32 RecordsToPreallocate; 643193267Sjkim UINT32 MaxSectionsPerRecord; 644272444Sjkim UINT32 Bus; /* Bus and Segment numbers */ 645193267Sjkim UINT16 Device; 646193267Sjkim UINT16 Function; 647193267Sjkim UINT16 DeviceControl; 648197104Sjkim UINT16 Reserved2; 649197104Sjkim UINT32 UncorrectableMask; 650197104Sjkim UINT32 UncorrectableSeverity; 651197104Sjkim UINT32 CorrectableMask; 652197104Sjkim UINT32 AdvancedCapabilities; 653193267Sjkim 654193267Sjkim} ACPI_HEST_AER_COMMON; 655193267Sjkim 656197104Sjkim/* Masks for HEST Flags fields */ 657193267Sjkim 658197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST (1) 659197104Sjkim#define ACPI_HEST_GLOBAL (1<<1) 660322877Sjkim#define ACPI_HEST_GHES_ASSIST (1<<2) 661197104Sjkim 662272444Sjkim/* 663272444Sjkim * Macros to access the bus/segment numbers in Bus field above: 664272444Sjkim * Bus number is encoded in bits 7:0 665272444Sjkim * Segment number is encoded in bits 23:8 666272444Sjkim */ 667272444Sjkim#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 668272444Sjkim#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 669197104Sjkim 670272444Sjkim 671193267Sjkim/* Hardware Error Notification */ 672193267Sjkim 673193267Sjkimtypedef struct acpi_hest_notify 674193267Sjkim{ 675193267Sjkim UINT8 Type; 676193267Sjkim UINT8 Length; 677193267Sjkim UINT16 ConfigWriteEnable; 678193267Sjkim UINT32 PollInterval; 679193267Sjkim UINT32 Vector; 680193267Sjkim UINT32 PollingThresholdValue; 681193267Sjkim UINT32 PollingThresholdWindow; 682193267Sjkim UINT32 ErrorThresholdValue; 683193267Sjkim UINT32 ErrorThresholdWindow; 684193267Sjkim 685193267Sjkim} ACPI_HEST_NOTIFY; 686193267Sjkim 687193267Sjkim/* Values for Notify Type field above */ 688193267Sjkim 689193267Sjkimenum AcpiHestNotifyTypes 690193267Sjkim{ 691322877Sjkim ACPI_HEST_NOTIFY_POLLED = 0, 692322877Sjkim ACPI_HEST_NOTIFY_EXTERNAL = 1, 693322877Sjkim ACPI_HEST_NOTIFY_LOCAL = 2, 694322877Sjkim ACPI_HEST_NOTIFY_SCI = 3, 695322877Sjkim ACPI_HEST_NOTIFY_NMI = 4, 696322877Sjkim ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 697322877Sjkim ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 698322877Sjkim ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 699322877Sjkim ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 700322877Sjkim ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 701322877Sjkim ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 702322877Sjkim ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ 703322877Sjkim ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ 704193267Sjkim}; 705193267Sjkim 706197104Sjkim/* Values for ConfigWriteEnable bitfield above */ 707193267Sjkim 708197104Sjkim#define ACPI_HEST_TYPE (1) 709197104Sjkim#define ACPI_HEST_POLL_INTERVAL (1<<1) 710197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 711197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 712197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 713197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 714197104Sjkim 715197104Sjkim 716193267Sjkim/* 717193267Sjkim * HEST subtables 718193267Sjkim */ 719193267Sjkim 720197104Sjkim/* 0: IA32 Machine Check Exception */ 721193267Sjkim 722197104Sjkimtypedef struct acpi_hest_ia_machine_check 723193267Sjkim{ 724193267Sjkim ACPI_HEST_HEADER Header; 725197104Sjkim UINT16 Reserved1; 726322877Sjkim UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 727197104Sjkim UINT8 Enabled; 728197104Sjkim UINT32 RecordsToPreallocate; 729193267Sjkim UINT32 MaxSectionsPerRecord; 730193267Sjkim UINT64 GlobalCapabilityData; 731193267Sjkim UINT64 GlobalControlData; 732193267Sjkim UINT8 NumHardwareBanks; 733197104Sjkim UINT8 Reserved3[7]; 734193267Sjkim 735197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK; 736193267Sjkim 737193267Sjkim 738197104Sjkim/* 1: IA32 Corrected Machine Check */ 739193267Sjkim 740197104Sjkimtypedef struct acpi_hest_ia_corrected 741193267Sjkim{ 742193267Sjkim ACPI_HEST_HEADER Header; 743197104Sjkim UINT16 Reserved1; 744322877Sjkim UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 745193267Sjkim UINT8 Enabled; 746197104Sjkim UINT32 RecordsToPreallocate; 747193267Sjkim UINT32 MaxSectionsPerRecord; 748193267Sjkim ACPI_HEST_NOTIFY Notify; 749193267Sjkim UINT8 NumHardwareBanks; 750197104Sjkim UINT8 Reserved2[3]; 751193267Sjkim 752197104Sjkim} ACPI_HEST_IA_CORRECTED; 753193267Sjkim 754193267Sjkim 755197104Sjkim/* 2: IA32 Non-Maskable Interrupt */ 756193267Sjkim 757197104Sjkimtypedef struct acpi_hest_ia_nmi 758193267Sjkim{ 759193267Sjkim ACPI_HEST_HEADER Header; 760193267Sjkim UINT32 Reserved; 761197104Sjkim UINT32 RecordsToPreallocate; 762193267Sjkim UINT32 MaxSectionsPerRecord; 763193267Sjkim UINT32 MaxRawDataLength; 764193267Sjkim 765197104Sjkim} ACPI_HEST_IA_NMI; 766193267Sjkim 767193267Sjkim 768197104Sjkim/* 3,4,5: Not used */ 769193267Sjkim 770193267Sjkim/* 6: PCI Express Root Port AER */ 771193267Sjkim 772193267Sjkimtypedef struct acpi_hest_aer_root 773193267Sjkim{ 774193267Sjkim ACPI_HEST_HEADER Header; 775193267Sjkim ACPI_HEST_AER_COMMON Aer; 776193267Sjkim UINT32 RootErrorCommand; 777193267Sjkim 778193267Sjkim} ACPI_HEST_AER_ROOT; 779193267Sjkim 780193267Sjkim 781193267Sjkim/* 7: PCI Express AER (AER Endpoint) */ 782193267Sjkim 783193267Sjkimtypedef struct acpi_hest_aer 784193267Sjkim{ 785193267Sjkim ACPI_HEST_HEADER Header; 786193267Sjkim ACPI_HEST_AER_COMMON Aer; 787193267Sjkim 788193267Sjkim} ACPI_HEST_AER; 789193267Sjkim 790193267Sjkim 791193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */ 792193267Sjkim 793193267Sjkimtypedef struct acpi_hest_aer_bridge 794193267Sjkim{ 795193267Sjkim ACPI_HEST_HEADER Header; 796193267Sjkim ACPI_HEST_AER_COMMON Aer; 797197104Sjkim UINT32 UncorrectableMask2; 798197104Sjkim UINT32 UncorrectableSeverity2; 799197104Sjkim UINT32 AdvancedCapabilities2; 800193267Sjkim 801193267Sjkim} ACPI_HEST_AER_BRIDGE; 802193267Sjkim 803193267Sjkim 804193267Sjkim/* 9: Generic Hardware Error Source */ 805193267Sjkim 806193267Sjkimtypedef struct acpi_hest_generic 807193267Sjkim{ 808193267Sjkim ACPI_HEST_HEADER Header; 809193267Sjkim UINT16 RelatedSourceId; 810197104Sjkim UINT8 Reserved; 811193267Sjkim UINT8 Enabled; 812197104Sjkim UINT32 RecordsToPreallocate; 813193267Sjkim UINT32 MaxSectionsPerRecord; 814193267Sjkim UINT32 MaxRawDataLength; 815193267Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 816193267Sjkim ACPI_HEST_NOTIFY Notify; 817197104Sjkim UINT32 ErrorBlockLength; 818193267Sjkim 819193267Sjkim} ACPI_HEST_GENERIC; 820193267Sjkim 821193267Sjkim 822298714Sjkim/* 10: Generic Hardware Error Source, version 2 */ 823298714Sjkim 824298714Sjkimtypedef struct acpi_hest_generic_v2 825298714Sjkim{ 826298714Sjkim ACPI_HEST_HEADER Header; 827298714Sjkim UINT16 RelatedSourceId; 828298714Sjkim UINT8 Reserved; 829298714Sjkim UINT8 Enabled; 830298714Sjkim UINT32 RecordsToPreallocate; 831298714Sjkim UINT32 MaxSectionsPerRecord; 832298714Sjkim UINT32 MaxRawDataLength; 833298714Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 834298714Sjkim ACPI_HEST_NOTIFY Notify; 835298714Sjkim UINT32 ErrorBlockLength; 836298714Sjkim ACPI_GENERIC_ADDRESS ReadAckRegister; 837298714Sjkim UINT64 ReadAckPreserve; 838298714Sjkim UINT64 ReadAckWrite; 839298714Sjkim 840298714Sjkim} ACPI_HEST_GENERIC_V2; 841298714Sjkim 842298714Sjkim 843197104Sjkim/* Generic Error Status block */ 844167802Sjkim 845197104Sjkimtypedef struct acpi_hest_generic_status 846167802Sjkim{ 847197104Sjkim UINT32 BlockStatus; 848197104Sjkim UINT32 RawDataOffset; 849197104Sjkim UINT32 RawDataLength; 850197104Sjkim UINT32 DataLength; 851197104Sjkim UINT32 ErrorSeverity; 852167802Sjkim 853197104Sjkim} ACPI_HEST_GENERIC_STATUS; 854167802Sjkim 855197104Sjkim/* Values for BlockStatus flags above */ 856167802Sjkim 857197104Sjkim#define ACPI_HEST_UNCORRECTABLE (1) 858197104Sjkim#define ACPI_HEST_CORRECTABLE (1<<1) 859197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 860197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 861197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 862167802Sjkim 863167802Sjkim 864197104Sjkim/* Generic Error Data entry */ 865167802Sjkim 866197104Sjkimtypedef struct acpi_hest_generic_data 867193267Sjkim{ 868197104Sjkim UINT8 SectionType[16]; 869197104Sjkim UINT32 ErrorSeverity; 870197104Sjkim UINT16 Revision; 871197104Sjkim UINT8 ValidationBits; 872193267Sjkim UINT8 Flags; 873197104Sjkim UINT32 ErrorDataLength; 874197104Sjkim UINT8 FruId[16]; 875197104Sjkim UINT8 FruText[20]; 876193267Sjkim 877197104Sjkim} ACPI_HEST_GENERIC_DATA; 878193267Sjkim 879298714Sjkim/* Extension for revision 0x0300 */ 880193267Sjkim 881298714Sjkimtypedef struct acpi_hest_generic_data_v300 882298714Sjkim{ 883298714Sjkim UINT8 SectionType[16]; 884298714Sjkim UINT32 ErrorSeverity; 885298714Sjkim UINT16 Revision; 886298714Sjkim UINT8 ValidationBits; 887298714Sjkim UINT8 Flags; 888298714Sjkim UINT32 ErrorDataLength; 889298714Sjkim UINT8 FruId[16]; 890298714Sjkim UINT8 FruText[20]; 891298714Sjkim UINT64 TimeStamp; 892298714Sjkim 893298714Sjkim} ACPI_HEST_GENERIC_DATA_V300; 894298714Sjkim 895298714Sjkim/* Values for ErrorSeverity above */ 896298714Sjkim 897298714Sjkim#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 898298714Sjkim#define ACPI_HEST_GEN_ERROR_FATAL 1 899298714Sjkim#define ACPI_HEST_GEN_ERROR_CORRECTED 2 900298714Sjkim#define ACPI_HEST_GEN_ERROR_NONE 3 901298714Sjkim 902298714Sjkim/* Flags for ValidationBits above */ 903298714Sjkim 904298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_ID (1) 905298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 906298714Sjkim#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 907298714Sjkim 908298714Sjkim 909322877Sjkim/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ 910322877Sjkim 911322877Sjkimtypedef struct acpi_hest_ia_deferred_check 912322877Sjkim{ 913322877Sjkim ACPI_HEST_HEADER Header; 914322877Sjkim UINT16 Reserved1; 915322877Sjkim UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 916322877Sjkim UINT8 Enabled; 917322877Sjkim UINT32 RecordsToPreallocate; 918322877Sjkim UINT32 MaxSectionsPerRecord; 919322877Sjkim ACPI_HEST_NOTIFY Notify; 920322877Sjkim UINT8 NumHardwareBanks; 921322877Sjkim UINT8 Reserved2[3]; 922322877Sjkim 923322877Sjkim} ACPI_HEST_IA_DEFERRED_CHECK; 924322877Sjkim 925322877Sjkim 926193267Sjkim/******************************************************************************* 927193267Sjkim * 928322877Sjkim * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) 929322877Sjkim * Version 1 930322877Sjkim * 931322877Sjkim ******************************************************************************/ 932322877Sjkim 933322877Sjkimtypedef struct acpi_table_hmat 934322877Sjkim{ 935322877Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 936322877Sjkim UINT32 Reserved; 937322877Sjkim 938322877Sjkim} ACPI_TABLE_HMAT; 939322877Sjkim 940322877Sjkim 941322877Sjkim/* Values for HMAT structure types */ 942322877Sjkim 943322877Sjkimenum AcpiHmatType 944322877Sjkim{ 945322877Sjkim ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ 946322877Sjkim ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ 947322877Sjkim ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ 948322877Sjkim ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 949322877Sjkim}; 950322877Sjkim 951322877Sjkimtypedef struct acpi_hmat_structure 952322877Sjkim{ 953322877Sjkim UINT16 Type; 954322877Sjkim UINT16 Reserved; 955322877Sjkim UINT32 Length; 956322877Sjkim 957322877Sjkim} ACPI_HMAT_STRUCTURE; 958322877Sjkim 959322877Sjkim 960322877Sjkim/* 961322877Sjkim * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE 962322877Sjkim */ 963322877Sjkim 964322877Sjkim/* 0: Memory subystem address range */ 965322877Sjkim 966322877Sjkimtypedef struct acpi_hmat_address_range 967322877Sjkim{ 968322877Sjkim ACPI_HMAT_STRUCTURE Header; 969322877Sjkim UINT16 Flags; 970322877Sjkim UINT16 Reserved1; 971322877Sjkim UINT32 ProcessorPD; /* Processor proximity domain */ 972322877Sjkim UINT32 MemoryPD; /* Memory proximity domain */ 973322877Sjkim UINT32 Reserved2; 974322877Sjkim UINT64 PhysicalAddressBase; /* Physical address range base */ 975322877Sjkim UINT64 PhysicalAddressLength; /* Physical address range length */ 976322877Sjkim 977322877Sjkim} ACPI_HMAT_ADDRESS_RANGE; 978322877Sjkim 979322877Sjkim/* Masks for Flags field above */ 980322877Sjkim 981322877Sjkim#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ 982322877Sjkim#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ 983322877Sjkim#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ 984322877Sjkim 985322877Sjkim 986322877Sjkim/* 1: System locality latency and bandwidth information */ 987322877Sjkim 988322877Sjkimtypedef struct acpi_hmat_locality 989322877Sjkim{ 990322877Sjkim ACPI_HMAT_STRUCTURE Header; 991322877Sjkim UINT8 Flags; 992322877Sjkim UINT8 DataType; 993322877Sjkim UINT16 Reserved1; 994322877Sjkim UINT32 NumberOfInitiatorPDs; 995322877Sjkim UINT32 NumberOfTargetPDs; 996322877Sjkim UINT32 Reserved2; 997322877Sjkim UINT64 EntryBaseUnit; 998322877Sjkim 999322877Sjkim} ACPI_HMAT_LOCALITY; 1000322877Sjkim 1001322877Sjkim/* Masks for Flags field above */ 1002322877Sjkim 1003322877Sjkim#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) 1004322877Sjkim 1005322877Sjkim/* Values for Memory Hierarchy flag */ 1006322877Sjkim 1007322877Sjkim#define ACPI_HMAT_MEMORY 0 1008322877Sjkim#define ACPI_HMAT_LAST_LEVEL_CACHE 1 1009322877Sjkim#define ACPI_HMAT_1ST_LEVEL_CACHE 2 1010322877Sjkim#define ACPI_HMAT_2ND_LEVEL_CACHE 3 1011322877Sjkim#define ACPI_HMAT_3RD_LEVEL_CACHE 4 1012322877Sjkim 1013322877Sjkim/* Values for DataType field above */ 1014322877Sjkim 1015322877Sjkim#define ACPI_HMAT_ACCESS_LATENCY 0 1016322877Sjkim#define ACPI_HMAT_READ_LATENCY 1 1017322877Sjkim#define ACPI_HMAT_WRITE_LATENCY 2 1018322877Sjkim#define ACPI_HMAT_ACCESS_BANDWIDTH 3 1019322877Sjkim#define ACPI_HMAT_READ_BANDWIDTH 4 1020322877Sjkim#define ACPI_HMAT_WRITE_BANDWIDTH 5 1021322877Sjkim 1022322877Sjkim 1023322877Sjkim/* 2: Memory side cache information */ 1024322877Sjkim 1025322877Sjkimtypedef struct acpi_hmat_cache 1026322877Sjkim{ 1027322877Sjkim ACPI_HMAT_STRUCTURE Header; 1028322877Sjkim UINT32 MemoryPD; 1029322877Sjkim UINT32 Reserved1; 1030322877Sjkim UINT64 CacheSize; 1031322877Sjkim UINT32 CacheAttributes; 1032322877Sjkim UINT16 Reserved2; 1033322877Sjkim UINT16 NumberOfSMBIOSHandles; 1034322877Sjkim 1035322877Sjkim} ACPI_HMAT_CACHE; 1036322877Sjkim 1037322877Sjkim/* Masks for CacheAttributes field above */ 1038322877Sjkim 1039322877Sjkim#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) 1040322877Sjkim#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) 1041322877Sjkim#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) 1042322877Sjkim#define ACPI_HMAT_WRITE_POLICY (0x0000F000) 1043322877Sjkim#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) 1044322877Sjkim 1045322877Sjkim/* Values for cache associativity flag */ 1046322877Sjkim 1047322877Sjkim#define ACPI_HMAT_CA_NONE (0) 1048322877Sjkim#define ACPI_HMAT_CA_DIRECT_MAPPED (1) 1049322877Sjkim#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) 1050322877Sjkim 1051322877Sjkim/* Values for write policy flag */ 1052322877Sjkim 1053322877Sjkim#define ACPI_HMAT_CP_NONE (0) 1054322877Sjkim#define ACPI_HMAT_CP_WB (1) 1055322877Sjkim#define ACPI_HMAT_CP_WT (2) 1056322877Sjkim 1057322877Sjkim 1058322877Sjkim/******************************************************************************* 1059322877Sjkim * 1060167802Sjkim * MADT - Multiple APIC Description Table 1061197104Sjkim * Version 3 1062167802Sjkim * 1063167802Sjkim ******************************************************************************/ 1064167802Sjkim 1065167802Sjkimtypedef struct acpi_table_madt 1066167802Sjkim{ 1067167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1068167802Sjkim UINT32 Address; /* Physical address of local APIC */ 1069167802Sjkim UINT32 Flags; 1070167802Sjkim 1071167802Sjkim} ACPI_TABLE_MADT; 1072167802Sjkim 1073197104Sjkim/* Masks for Flags field above */ 1074167802Sjkim 1075197104Sjkim#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 1076167802Sjkim 1077167802Sjkim/* Values for PCATCompat flag */ 1078167802Sjkim 1079322877Sjkim#define ACPI_MADT_DUAL_PIC 1 1080322877Sjkim#define ACPI_MADT_MULTIPLE_APIC 0 1081167802Sjkim 1082167802Sjkim 1083197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 1084167802Sjkim 1085167802Sjkimenum AcpiMadtType 1086167802Sjkim{ 1087272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC = 0, 1088272444Sjkim ACPI_MADT_TYPE_IO_APIC = 1, 1089272444Sjkim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 1090272444Sjkim ACPI_MADT_TYPE_NMI_SOURCE = 3, 1091272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 1092272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 1093272444Sjkim ACPI_MADT_TYPE_IO_SAPIC = 6, 1094272444Sjkim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 1095272444Sjkim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 1096272444Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 1097272444Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 1098272444Sjkim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 1099272444Sjkim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 1100272444Sjkim ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 1101272444Sjkim ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 1102283092Sjkim ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 1103283092Sjkim ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ 1104167802Sjkim}; 1105167802Sjkim 1106167802Sjkim 1107167802Sjkim/* 1108272444Sjkim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1109167802Sjkim */ 1110167802Sjkim 1111167802Sjkim/* 0: Processor Local APIC */ 1112167802Sjkim 1113167802Sjkimtypedef struct acpi_madt_local_apic 1114167802Sjkim{ 1115167802Sjkim ACPI_SUBTABLE_HEADER Header; 1116167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 1117167802Sjkim UINT8 Id; /* Processor's local APIC id */ 1118167802Sjkim UINT32 LapicFlags; 1119167802Sjkim 1120167802Sjkim} ACPI_MADT_LOCAL_APIC; 1121167802Sjkim 1122197104Sjkim 1123167802Sjkim/* 1: IO APIC */ 1124167802Sjkim 1125167802Sjkimtypedef struct acpi_madt_io_apic 1126167802Sjkim{ 1127167802Sjkim ACPI_SUBTABLE_HEADER Header; 1128167802Sjkim UINT8 Id; /* I/O APIC ID */ 1129167802Sjkim UINT8 Reserved; /* Reserved - must be zero */ 1130167802Sjkim UINT32 Address; /* APIC physical address */ 1131167802Sjkim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 1132167802Sjkim 1133167802Sjkim} ACPI_MADT_IO_APIC; 1134167802Sjkim 1135197104Sjkim 1136167802Sjkim/* 2: Interrupt Override */ 1137167802Sjkim 1138167802Sjkimtypedef struct acpi_madt_interrupt_override 1139167802Sjkim{ 1140167802Sjkim ACPI_SUBTABLE_HEADER Header; 1141167802Sjkim UINT8 Bus; /* 0 - ISA */ 1142167802Sjkim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 1143167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 1144167802Sjkim UINT16 IntiFlags; 1145167802Sjkim 1146167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE; 1147167802Sjkim 1148197104Sjkim 1149167802Sjkim/* 3: NMI Source */ 1150167802Sjkim 1151167802Sjkimtypedef struct acpi_madt_nmi_source 1152167802Sjkim{ 1153167802Sjkim ACPI_SUBTABLE_HEADER Header; 1154167802Sjkim UINT16 IntiFlags; 1155167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 1156167802Sjkim 1157167802Sjkim} ACPI_MADT_NMI_SOURCE; 1158167802Sjkim 1159197104Sjkim 1160167802Sjkim/* 4: Local APIC NMI */ 1161167802Sjkim 1162167802Sjkimtypedef struct acpi_madt_local_apic_nmi 1163167802Sjkim{ 1164167802Sjkim ACPI_SUBTABLE_HEADER Header; 1165167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 1166167802Sjkim UINT16 IntiFlags; 1167167802Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 1168167802Sjkim 1169167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI; 1170167802Sjkim 1171197104Sjkim 1172167802Sjkim/* 5: Address Override */ 1173167802Sjkim 1174167802Sjkimtypedef struct acpi_madt_local_apic_override 1175167802Sjkim{ 1176167802Sjkim ACPI_SUBTABLE_HEADER Header; 1177167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1178167802Sjkim UINT64 Address; /* APIC physical address */ 1179167802Sjkim 1180167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE; 1181167802Sjkim 1182197104Sjkim 1183167802Sjkim/* 6: I/O Sapic */ 1184167802Sjkim 1185167802Sjkimtypedef struct acpi_madt_io_sapic 1186167802Sjkim{ 1187167802Sjkim ACPI_SUBTABLE_HEADER Header; 1188167802Sjkim UINT8 Id; /* I/O SAPIC ID */ 1189167802Sjkim UINT8 Reserved; /* Reserved, must be zero */ 1190167802Sjkim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 1191167802Sjkim UINT64 Address; /* SAPIC physical address */ 1192167802Sjkim 1193167802Sjkim} ACPI_MADT_IO_SAPIC; 1194167802Sjkim 1195197104Sjkim 1196167802Sjkim/* 7: Local Sapic */ 1197167802Sjkim 1198167802Sjkimtypedef struct acpi_madt_local_sapic 1199167802Sjkim{ 1200167802Sjkim ACPI_SUBTABLE_HEADER Header; 1201167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 1202167802Sjkim UINT8 Id; /* SAPIC ID */ 1203167802Sjkim UINT8 Eid; /* SAPIC EID */ 1204167802Sjkim UINT8 Reserved[3]; /* Reserved, must be zero */ 1205167802Sjkim UINT32 LapicFlags; 1206167802Sjkim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 1207167802Sjkim char UidString[1]; /* String UID - ACPI 3.0 */ 1208167802Sjkim 1209167802Sjkim} ACPI_MADT_LOCAL_SAPIC; 1210167802Sjkim 1211197104Sjkim 1212167802Sjkim/* 8: Platform Interrupt Source */ 1213167802Sjkim 1214167802Sjkimtypedef struct acpi_madt_interrupt_source 1215167802Sjkim{ 1216167802Sjkim ACPI_SUBTABLE_HEADER Header; 1217167802Sjkim UINT16 IntiFlags; 1218167802Sjkim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 1219167802Sjkim UINT8 Id; /* Processor ID */ 1220167802Sjkim UINT8 Eid; /* Processor EID */ 1221167802Sjkim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 1222167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 1223167802Sjkim UINT32 Flags; /* Interrupt Source Flags */ 1224167802Sjkim 1225167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE; 1226167802Sjkim 1227197104Sjkim/* Masks for Flags field above */ 1228167802Sjkim 1229167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE (1) 1230167802Sjkim 1231167802Sjkim 1232197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */ 1233197104Sjkim 1234193267Sjkimtypedef struct acpi_madt_local_x2apic 1235193267Sjkim{ 1236193267Sjkim ACPI_SUBTABLE_HEADER Header; 1237193267Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1238193267Sjkim UINT32 LocalApicId; /* Processor x2APIC ID */ 1239193267Sjkim UINT32 LapicFlags; 1240193267Sjkim UINT32 Uid; /* ACPI processor UID */ 1241193267Sjkim 1242193267Sjkim} ACPI_MADT_LOCAL_X2APIC; 1243193267Sjkim 1244193267Sjkim 1245197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */ 1246197104Sjkim 1247193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi 1248193267Sjkim{ 1249193267Sjkim ACPI_SUBTABLE_HEADER Header; 1250193267Sjkim UINT16 IntiFlags; 1251193267Sjkim UINT32 Uid; /* ACPI processor UID */ 1252193267Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 1253193267Sjkim UINT8 Reserved[3]; /* Reserved - must be zero */ 1254193267Sjkim 1255193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI; 1256193267Sjkim 1257193267Sjkim 1258283092Sjkim/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ 1259228110Sjkim 1260228110Sjkimtypedef struct acpi_madt_generic_interrupt 1261228110Sjkim{ 1262228110Sjkim ACPI_SUBTABLE_HEADER Header; 1263228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1264272444Sjkim UINT32 CpuInterfaceNumber; 1265228110Sjkim UINT32 Uid; 1266228110Sjkim UINT32 Flags; 1267228110Sjkim UINT32 ParkingVersion; 1268228110Sjkim UINT32 PerformanceInterrupt; 1269228110Sjkim UINT64 ParkedAddress; 1270228110Sjkim UINT64 BaseAddress; 1271272444Sjkim UINT64 GicvBaseAddress; 1272272444Sjkim UINT64 GichBaseAddress; 1273272444Sjkim UINT32 VgicInterrupt; 1274272444Sjkim UINT64 GicrBaseAddress; 1275272444Sjkim UINT64 ArmMpidr; 1276283092Sjkim UINT8 EfficiencyClass; 1277283092Sjkim UINT8 Reserved2[3]; 1278228110Sjkim 1279228110Sjkim} ACPI_MADT_GENERIC_INTERRUPT; 1280228110Sjkim 1281272444Sjkim/* Masks for Flags field above */ 1282228110Sjkim 1283272444Sjkim/* ACPI_MADT_ENABLED (1) Processor is usable if set */ 1284272444Sjkim#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 1285272444Sjkim#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 1286272444Sjkim 1287272444Sjkim 1288283092Sjkim/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 1289228110Sjkim 1290228110Sjkimtypedef struct acpi_madt_generic_distributor 1291228110Sjkim{ 1292228110Sjkim ACPI_SUBTABLE_HEADER Header; 1293228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1294228110Sjkim UINT32 GicId; 1295228110Sjkim UINT64 BaseAddress; 1296228110Sjkim UINT32 GlobalIrqBase; 1297283092Sjkim UINT8 Version; 1298284583Sjkim UINT8 Reserved2[3]; /* Reserved - must be zero */ 1299228110Sjkim 1300228110Sjkim} ACPI_MADT_GENERIC_DISTRIBUTOR; 1301228110Sjkim 1302284583Sjkim/* Values for Version field above */ 1303228110Sjkim 1304284583Sjkimenum AcpiMadtGicVersion 1305284583Sjkim{ 1306284583Sjkim ACPI_MADT_GIC_VERSION_NONE = 0, 1307284583Sjkim ACPI_MADT_GIC_VERSION_V1 = 1, 1308284583Sjkim ACPI_MADT_GIC_VERSION_V2 = 2, 1309284583Sjkim ACPI_MADT_GIC_VERSION_V3 = 3, 1310284583Sjkim ACPI_MADT_GIC_VERSION_V4 = 4, 1311284583Sjkim ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1312284583Sjkim}; 1313284583Sjkim 1314284583Sjkim 1315272444Sjkim/* 13: Generic MSI Frame (ACPI 5.1) */ 1316272444Sjkim 1317272444Sjkimtypedef struct acpi_madt_generic_msi_frame 1318272444Sjkim{ 1319272444Sjkim ACPI_SUBTABLE_HEADER Header; 1320272444Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1321272444Sjkim UINT32 MsiFrameId; 1322272444Sjkim UINT64 BaseAddress; 1323272444Sjkim UINT32 Flags; 1324272444Sjkim UINT16 SpiCount; 1325272444Sjkim UINT16 SpiBase; 1326272444Sjkim 1327272444Sjkim} ACPI_MADT_GENERIC_MSI_FRAME; 1328272444Sjkim 1329272444Sjkim/* Masks for Flags field above */ 1330272444Sjkim 1331272444Sjkim#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1332272444Sjkim 1333272444Sjkim 1334272444Sjkim/* 14: Generic Redistributor (ACPI 5.1) */ 1335272444Sjkim 1336272444Sjkimtypedef struct acpi_madt_generic_redistributor 1337272444Sjkim{ 1338272444Sjkim ACPI_SUBTABLE_HEADER Header; 1339272444Sjkim UINT16 Reserved; /* reserved - must be zero */ 1340272444Sjkim UINT64 BaseAddress; 1341272444Sjkim UINT32 Length; 1342272444Sjkim 1343272444Sjkim} ACPI_MADT_GENERIC_REDISTRIBUTOR; 1344272444Sjkim 1345272444Sjkim 1346283092Sjkim/* 15: Generic Translator (ACPI 6.0) */ 1347283092Sjkim 1348283092Sjkimtypedef struct acpi_madt_generic_translator 1349283092Sjkim{ 1350283092Sjkim ACPI_SUBTABLE_HEADER Header; 1351283092Sjkim UINT16 Reserved; /* reserved - must be zero */ 1352283092Sjkim UINT32 TranslationId; 1353283092Sjkim UINT64 BaseAddress; 1354283092Sjkim UINT32 Reserved2; 1355283092Sjkim 1356283092Sjkim} ACPI_MADT_GENERIC_TRANSLATOR; 1357283092Sjkim 1358283092Sjkim 1359167802Sjkim/* 1360167802Sjkim * Common flags fields for MADT subtables 1361167802Sjkim */ 1362167802Sjkim 1363272444Sjkim/* MADT Local APIC flags */ 1364167802Sjkim 1365167802Sjkim#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1366167802Sjkim 1367167802Sjkim/* MADT MPS INTI flags (IntiFlags) */ 1368167802Sjkim 1369167802Sjkim#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1370167802Sjkim#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1371167802Sjkim 1372167802Sjkim/* Values for MPS INTI flags */ 1373167802Sjkim 1374167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS 0 1375167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1376167802Sjkim#define ACPI_MADT_POLARITY_RESERVED 2 1377167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1378167802Sjkim 1379167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS (0) 1380167802Sjkim#define ACPI_MADT_TRIGGER_EDGE (1<<2) 1381167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1382167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1383167802Sjkim 1384167802Sjkim 1385167802Sjkim/******************************************************************************* 1386167802Sjkim * 1387197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1388197104Sjkim * Version 1 1389167802Sjkim * 1390167802Sjkim ******************************************************************************/ 1391167802Sjkim 1392197104Sjkimtypedef struct acpi_table_msct 1393167802Sjkim{ 1394167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1395197104Sjkim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1396197104Sjkim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1397197104Sjkim UINT32 MaxClockDomains; /* Max number of clock domains */ 1398197104Sjkim UINT64 MaxAddress; /* Max physical address in system */ 1399167802Sjkim 1400197104Sjkim} ACPI_TABLE_MSCT; 1401167802Sjkim 1402167802Sjkim 1403197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */ 1404167802Sjkim 1405197104Sjkimtypedef struct acpi_msct_proximity 1406167802Sjkim{ 1407197104Sjkim UINT8 Revision; 1408197104Sjkim UINT8 Length; 1409197104Sjkim UINT32 RangeStart; /* Start of domain range */ 1410197104Sjkim UINT32 RangeEnd; /* End of domain range */ 1411197104Sjkim UINT32 ProcessorCapacity; 1412197104Sjkim UINT64 MemoryCapacity; /* In bytes */ 1413167802Sjkim 1414197104Sjkim} ACPI_MSCT_PROXIMITY; 1415167802Sjkim 1416167802Sjkim 1417167802Sjkim/******************************************************************************* 1418167802Sjkim * 1419298714Sjkim * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1420283092Sjkim * Version 1 1421283092Sjkim * 1422283092Sjkim ******************************************************************************/ 1423283092Sjkim 1424283092Sjkimtypedef struct acpi_table_nfit 1425283092Sjkim{ 1426283092Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1427283092Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1428283092Sjkim 1429283092Sjkim} ACPI_TABLE_NFIT; 1430283092Sjkim 1431283092Sjkim/* Subtable header for NFIT */ 1432283092Sjkim 1433283092Sjkimtypedef struct acpi_nfit_header 1434283092Sjkim{ 1435283092Sjkim UINT16 Type; 1436283092Sjkim UINT16 Length; 1437283092Sjkim 1438283092Sjkim} ACPI_NFIT_HEADER; 1439283092Sjkim 1440283092Sjkim 1441283092Sjkim/* Values for subtable type in ACPI_NFIT_HEADER */ 1442283092Sjkim 1443283092Sjkimenum AcpiNfitType 1444283092Sjkim{ 1445283092Sjkim ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1446283092Sjkim ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1447283092Sjkim ACPI_NFIT_TYPE_INTERLEAVE = 2, 1448283092Sjkim ACPI_NFIT_TYPE_SMBIOS = 3, 1449283092Sjkim ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1450283092Sjkim ACPI_NFIT_TYPE_DATA_REGION = 5, 1451283092Sjkim ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1452327557Sjkim ACPI_NFIT_TYPE_CAPABILITIES = 7, 1453327557Sjkim ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ 1454283092Sjkim}; 1455283092Sjkim 1456283092Sjkim/* 1457283092Sjkim * NFIT Subtables 1458283092Sjkim */ 1459283092Sjkim 1460283092Sjkim/* 0: System Physical Address Range Structure */ 1461283092Sjkim 1462283092Sjkimtypedef struct acpi_nfit_system_address 1463283092Sjkim{ 1464283092Sjkim ACPI_NFIT_HEADER Header; 1465283092Sjkim UINT16 RangeIndex; 1466283092Sjkim UINT16 Flags; 1467327557Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1468283092Sjkim UINT32 ProximityDomain; 1469283092Sjkim UINT8 RangeGuid[16]; 1470283092Sjkim UINT64 Address; 1471283092Sjkim UINT64 Length; 1472283092Sjkim UINT64 MemoryMapping; 1473283092Sjkim 1474283092Sjkim} ACPI_NFIT_SYSTEM_ADDRESS; 1475283092Sjkim 1476283092Sjkim/* Flags */ 1477283092Sjkim 1478283092Sjkim#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1479283092Sjkim#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1480283092Sjkim 1481283092Sjkim/* Range Type GUIDs appear in the include/acuuid.h file */ 1482283092Sjkim 1483283092Sjkim 1484283092Sjkim/* 1: Memory Device to System Address Range Map Structure */ 1485283092Sjkim 1486283092Sjkimtypedef struct acpi_nfit_memory_map 1487283092Sjkim{ 1488283092Sjkim ACPI_NFIT_HEADER Header; 1489283092Sjkim UINT32 DeviceHandle; 1490283092Sjkim UINT16 PhysicalId; 1491283092Sjkim UINT16 RegionId; 1492283092Sjkim UINT16 RangeIndex; 1493283092Sjkim UINT16 RegionIndex; 1494283092Sjkim UINT64 RegionSize; 1495283092Sjkim UINT64 RegionOffset; 1496283092Sjkim UINT64 Address; 1497283092Sjkim UINT16 InterleaveIndex; 1498283092Sjkim UINT16 InterleaveWays; 1499283092Sjkim UINT16 Flags; 1500283092Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1501283092Sjkim 1502283092Sjkim} ACPI_NFIT_MEMORY_MAP; 1503283092Sjkim 1504283092Sjkim/* Flags */ 1505283092Sjkim 1506283092Sjkim#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1507283092Sjkim#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1508283092Sjkim#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1509298714Sjkim#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1510283092Sjkim#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1511283092Sjkim#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1512298714Sjkim#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1513283092Sjkim 1514283092Sjkim 1515283092Sjkim/* 2: Interleave Structure */ 1516283092Sjkim 1517283092Sjkimtypedef struct acpi_nfit_interleave 1518283092Sjkim{ 1519283092Sjkim ACPI_NFIT_HEADER Header; 1520283092Sjkim UINT16 InterleaveIndex; 1521283092Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1522283092Sjkim UINT32 LineCount; 1523283092Sjkim UINT32 LineSize; 1524283092Sjkim UINT32 LineOffset[1]; /* Variable length */ 1525283092Sjkim 1526283092Sjkim} ACPI_NFIT_INTERLEAVE; 1527283092Sjkim 1528283092Sjkim 1529283092Sjkim/* 3: SMBIOS Management Information Structure */ 1530283092Sjkim 1531283092Sjkimtypedef struct acpi_nfit_smbios 1532283092Sjkim{ 1533283092Sjkim ACPI_NFIT_HEADER Header; 1534283092Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1535283092Sjkim UINT8 Data[1]; /* Variable length */ 1536283092Sjkim 1537283092Sjkim} ACPI_NFIT_SMBIOS; 1538283092Sjkim 1539283092Sjkim 1540283092Sjkim/* 4: NVDIMM Control Region Structure */ 1541283092Sjkim 1542283092Sjkimtypedef struct acpi_nfit_control_region 1543283092Sjkim{ 1544283092Sjkim ACPI_NFIT_HEADER Header; 1545283092Sjkim UINT16 RegionIndex; 1546283092Sjkim UINT16 VendorId; 1547283092Sjkim UINT16 DeviceId; 1548283092Sjkim UINT16 RevisionId; 1549283092Sjkim UINT16 SubsystemVendorId; 1550283092Sjkim UINT16 SubsystemDeviceId; 1551283092Sjkim UINT16 SubsystemRevisionId; 1552298714Sjkim UINT8 ValidFields; 1553298714Sjkim UINT8 ManufacturingLocation; 1554298714Sjkim UINT16 ManufacturingDate; 1555298714Sjkim UINT8 Reserved[2]; /* Reserved, must be zero */ 1556283092Sjkim UINT32 SerialNumber; 1557283092Sjkim UINT16 Code; 1558283092Sjkim UINT16 Windows; 1559283092Sjkim UINT64 WindowSize; 1560283092Sjkim UINT64 CommandOffset; 1561283092Sjkim UINT64 CommandSize; 1562283092Sjkim UINT64 StatusOffset; 1563283092Sjkim UINT64 StatusSize; 1564283092Sjkim UINT16 Flags; 1565283092Sjkim UINT8 Reserved1[6]; /* Reserved, must be zero */ 1566283092Sjkim 1567283092Sjkim} ACPI_NFIT_CONTROL_REGION; 1568283092Sjkim 1569283092Sjkim/* Flags */ 1570283092Sjkim 1571298714Sjkim#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1572283092Sjkim 1573298714Sjkim/* ValidFields bits */ 1574283092Sjkim 1575298714Sjkim#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 1576298714Sjkim 1577298714Sjkim 1578283092Sjkim/* 5: NVDIMM Block Data Window Region Structure */ 1579283092Sjkim 1580283092Sjkimtypedef struct acpi_nfit_data_region 1581283092Sjkim{ 1582283092Sjkim ACPI_NFIT_HEADER Header; 1583283092Sjkim UINT16 RegionIndex; 1584283092Sjkim UINT16 Windows; 1585283092Sjkim UINT64 Offset; 1586283092Sjkim UINT64 Size; 1587283092Sjkim UINT64 Capacity; 1588283092Sjkim UINT64 StartAddress; 1589283092Sjkim 1590283092Sjkim} ACPI_NFIT_DATA_REGION; 1591283092Sjkim 1592283092Sjkim 1593283092Sjkim/* 6: Flush Hint Address Structure */ 1594283092Sjkim 1595283092Sjkimtypedef struct acpi_nfit_flush_address 1596283092Sjkim{ 1597283092Sjkim ACPI_NFIT_HEADER Header; 1598283092Sjkim UINT32 DeviceHandle; 1599283092Sjkim UINT16 HintCount; 1600283092Sjkim UINT8 Reserved[6]; /* Reserved, must be zero */ 1601283092Sjkim UINT64 HintAddress[1]; /* Variable length */ 1602283092Sjkim 1603283092Sjkim} ACPI_NFIT_FLUSH_ADDRESS; 1604283092Sjkim 1605283092Sjkim 1606327557Sjkim/* 7: Platform Capabilities Structure */ 1607327557Sjkim 1608327557Sjkimtypedef struct acpi_nfit_capabilities 1609327557Sjkim{ 1610327557Sjkim ACPI_NFIT_HEADER Header; 1611327557Sjkim UINT8 HighestCapability; 1612327557Sjkim UINT8 Reserved[3]; /* Reserved, must be zero */ 1613327557Sjkim UINT32 Capabilities; 1614327557Sjkim UINT32 Reserved2; 1615327557Sjkim 1616327557Sjkim} ACPI_NFIT_CAPABILITIES; 1617327557Sjkim 1618327557Sjkim/* Capabilities Flags */ 1619327557Sjkim 1620327557Sjkim#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ 1621327557Sjkim#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ 1622327557Sjkim#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ 1623327557Sjkim 1624327557Sjkim 1625327557Sjkim/* 1626327557Sjkim * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM 1627327557Sjkim */ 1628327557Sjkimtypedef struct nfit_device_handle 1629327557Sjkim{ 1630327557Sjkim UINT32 Handle; 1631327557Sjkim 1632327557Sjkim} NFIT_DEVICE_HANDLE; 1633327557Sjkim 1634327557Sjkim/* Device handle construction and extraction macros */ 1635327557Sjkim 1636327557Sjkim#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F 1637327557Sjkim#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 1638327557Sjkim#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 1639327557Sjkim#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 1640327557Sjkim#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 1641327557Sjkim 1642327557Sjkim#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 1643327557Sjkim#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 1644327557Sjkim#define ACPI_NFIT_MEMORY_ID_OFFSET 8 1645327557Sjkim#define ACPI_NFIT_SOCKET_ID_OFFSET 12 1646327557Sjkim#define ACPI_NFIT_NODE_ID_OFFSET 16 1647327557Sjkim 1648327557Sjkim/* Macro to construct a NFIT/NVDIMM device handle */ 1649327557Sjkim 1650327557Sjkim#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ 1651327557Sjkim ((dimm) | \ 1652327557Sjkim ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ 1653327557Sjkim ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ 1654327557Sjkim ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ 1655327557Sjkim ((node) << ACPI_NFIT_NODE_ID_OFFSET)) 1656327557Sjkim 1657327557Sjkim/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ 1658327557Sjkim 1659327557Sjkim#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ 1660327557Sjkim ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) 1661327557Sjkim 1662327557Sjkim#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ 1663327557Sjkim (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) 1664327557Sjkim 1665327557Sjkim#define ACPI_NFIT_GET_MEMORY_ID(handle) \ 1666327557Sjkim (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) 1667327557Sjkim 1668327557Sjkim#define ACPI_NFIT_GET_SOCKET_ID(handle) \ 1669327557Sjkim (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) 1670327557Sjkim 1671327557Sjkim#define ACPI_NFIT_GET_NODE_ID(handle) \ 1672327557Sjkim (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) 1673327557Sjkim 1674327557Sjkim 1675283092Sjkim/******************************************************************************* 1676283092Sjkim * 1677327557Sjkim * PDTT - Platform Debug Trigger Table (ACPI 6.2) 1678327557Sjkim * Version 0 1679327557Sjkim * 1680327557Sjkim ******************************************************************************/ 1681327557Sjkim 1682327557Sjkimtypedef struct acpi_table_pdtt 1683327557Sjkim{ 1684327557Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1685327557Sjkim UINT8 TriggerCount; 1686327557Sjkim UINT8 Reserved[3]; 1687327557Sjkim UINT32 ArrayOffset; 1688327557Sjkim 1689327557Sjkim} ACPI_TABLE_PDTT; 1690327557Sjkim 1691327557Sjkim 1692327557Sjkim/* 1693327557Sjkim * PDTT Communication Channel Identifier Structure. 1694327557Sjkim * The number of these structures is defined by TriggerCount above, 1695327557Sjkim * starting at ArrayOffset. 1696327557Sjkim */ 1697327557Sjkimtypedef struct acpi_pdtt_channel 1698327557Sjkim{ 1699327557Sjkim UINT8 SubchannelId; 1700327557Sjkim UINT8 Flags; 1701327557Sjkim 1702327557Sjkim} ACPI_PDTT_CHANNEL; 1703327557Sjkim 1704327557Sjkim/* Flags for above */ 1705327557Sjkim 1706327557Sjkim#define ACPI_PDTT_RUNTIME_TRIGGER (1) 1707327557Sjkim#define ACPI_PDTT_WAIT_COMPLETION (1<<1) 1708327557Sjkim 1709327557Sjkim 1710327557Sjkim/******************************************************************************* 1711327557Sjkim * 1712322877Sjkim * PPTT - Processor Properties Topology Table (ACPI 6.2) 1713322877Sjkim * Version 1 1714322877Sjkim * 1715322877Sjkim ******************************************************************************/ 1716322877Sjkim 1717322877Sjkimtypedef struct acpi_table_pptt 1718322877Sjkim{ 1719322877Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1720322877Sjkim 1721322877Sjkim} ACPI_TABLE_PPTT; 1722322877Sjkim 1723322877Sjkim/* Values for Type field above */ 1724322877Sjkim 1725322877Sjkimenum AcpiPpttType 1726322877Sjkim{ 1727322877Sjkim ACPI_PPTT_TYPE_PROCESSOR = 0, 1728322877Sjkim ACPI_PPTT_TYPE_CACHE = 1, 1729322877Sjkim ACPI_PPTT_TYPE_ID = 2, 1730322877Sjkim ACPI_PPTT_TYPE_RESERVED = 3 1731322877Sjkim}; 1732322877Sjkim 1733322877Sjkim 1734322877Sjkim/* 0: Processor Hierarchy Node Structure */ 1735322877Sjkim 1736327557Sjkimtypedef struct acpi_pptt_processor 1737327557Sjkim{ 1738322877Sjkim ACPI_SUBTABLE_HEADER Header; 1739322877Sjkim UINT16 Reserved; 1740322877Sjkim UINT32 Flags; 1741322877Sjkim UINT32 Parent; 1742322877Sjkim UINT32 AcpiProcessorId; 1743322877Sjkim UINT32 NumberOfPrivResources; 1744322877Sjkim 1745322877Sjkim} ACPI_PPTT_PROCESSOR; 1746322877Sjkim 1747322877Sjkim/* Flags */ 1748322877Sjkim 1749322877Sjkim#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ 1750322877Sjkim#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ 1751322877Sjkim 1752322877Sjkim 1753322877Sjkim/* 1: Cache Type Structure */ 1754322877Sjkim 1755327557Sjkimtypedef struct acpi_pptt_cache 1756327557Sjkim{ 1757322877Sjkim ACPI_SUBTABLE_HEADER Header; 1758322877Sjkim UINT16 Reserved; 1759322877Sjkim UINT32 Flags; 1760322877Sjkim UINT32 NextLevelOfCache; 1761322877Sjkim UINT32 Size; 1762322877Sjkim UINT32 NumberOfSets; 1763322877Sjkim UINT8 Associativity; 1764322877Sjkim UINT8 Attributes; 1765322877Sjkim UINT16 LineSize; 1766322877Sjkim 1767322877Sjkim} ACPI_PPTT_CACHE; 1768322877Sjkim 1769322877Sjkim/* Flags */ 1770322877Sjkim 1771322877Sjkim#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 1772322877Sjkim#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 1773322877Sjkim#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 1774322877Sjkim#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 1775322877Sjkim#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 1776322877Sjkim#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 1777322877Sjkim#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 1778322877Sjkim 1779322877Sjkim/* Masks for Attributes */ 1780322877Sjkim 1781322877Sjkim#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 1782322877Sjkim#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 1783322877Sjkim#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 1784322877Sjkim 1785327557Sjkim/* Attributes describing cache */ 1786327557Sjkim#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ 1787327557Sjkim#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ 1788327557Sjkim#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ 1789327557Sjkim#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ 1790322877Sjkim 1791327557Sjkim#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ 1792327557Sjkim#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ 1793327557Sjkim#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ 1794327557Sjkim#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ 1795327557Sjkim 1796327557Sjkim#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ 1797327557Sjkim#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ 1798327557Sjkim 1799322877Sjkim/* 2: ID Structure */ 1800322877Sjkim 1801327557Sjkimtypedef struct acpi_pptt_id 1802327557Sjkim{ 1803322877Sjkim ACPI_SUBTABLE_HEADER Header; 1804322877Sjkim UINT16 Reserved; 1805322877Sjkim UINT32 VendorId; 1806322877Sjkim UINT64 Level1Id; 1807322877Sjkim UINT64 Level2Id; 1808322877Sjkim UINT16 MajorRev; 1809322877Sjkim UINT16 MinorRev; 1810322877Sjkim UINT16 SpinRev; 1811322877Sjkim 1812322877Sjkim} ACPI_PPTT_ID; 1813322877Sjkim 1814322877Sjkim 1815322877Sjkim/******************************************************************************* 1816322877Sjkim * 1817167802Sjkim * SBST - Smart Battery Specification Table 1818197104Sjkim * Version 1 1819167802Sjkim * 1820167802Sjkim ******************************************************************************/ 1821167802Sjkim 1822167802Sjkimtypedef struct acpi_table_sbst 1823167802Sjkim{ 1824167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1825167802Sjkim UINT32 WarningLevel; 1826167802Sjkim UINT32 LowLevel; 1827167802Sjkim UINT32 CriticalLevel; 1828167802Sjkim 1829167802Sjkim} ACPI_TABLE_SBST; 1830167802Sjkim 1831167802Sjkim 1832167802Sjkim/******************************************************************************* 1833167802Sjkim * 1834327557Sjkim * SDEV - Secure Devices Table (ACPI 6.2) 1835327557Sjkim * Version 1 1836327557Sjkim * 1837327557Sjkim ******************************************************************************/ 1838327557Sjkim 1839327557Sjkimtypedef struct acpi_table_sdev 1840327557Sjkim{ 1841327557Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1842327557Sjkim 1843327557Sjkim} ACPI_TABLE_SDEV; 1844327557Sjkim 1845327557Sjkim 1846327557Sjkimtypedef struct acpi_sdev_header 1847327557Sjkim{ 1848327557Sjkim UINT8 Type; 1849327557Sjkim UINT8 Flags; 1850327557Sjkim UINT16 Length; 1851327557Sjkim 1852327557Sjkim} ACPI_SDEV_HEADER; 1853327557Sjkim 1854327557Sjkim 1855327557Sjkim/* Values for subtable type above */ 1856327557Sjkim 1857327557Sjkimenum AcpiSdevType 1858327557Sjkim{ 1859327557Sjkim ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, 1860327557Sjkim ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, 1861327557Sjkim ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 1862327557Sjkim}; 1863327557Sjkim 1864327557Sjkim/* Values for flags above */ 1865327557Sjkim 1866327557Sjkim#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) 1867327557Sjkim 1868327557Sjkim/* 1869327557Sjkim * SDEV subtables 1870327557Sjkim */ 1871327557Sjkim 1872327557Sjkim/* 0: Namespace Device Based Secure Device Structure */ 1873327557Sjkim 1874327557Sjkimtypedef struct acpi_sdev_namespace 1875327557Sjkim{ 1876327557Sjkim ACPI_SDEV_HEADER Header; 1877327557Sjkim UINT16 DeviceIdOffset; 1878327557Sjkim UINT16 DeviceIdLength; 1879327557Sjkim UINT16 VendorDataOffset; 1880327557Sjkim UINT16 VendorDataLength; 1881327557Sjkim 1882327557Sjkim} ACPI_SDEV_NAMESPACE; 1883327557Sjkim 1884327557Sjkim/* 1: PCIe Endpoint Device Based Device Structure */ 1885327557Sjkim 1886327557Sjkimtypedef struct acpi_sdev_pcie 1887327557Sjkim{ 1888327557Sjkim ACPI_SDEV_HEADER Header; 1889327557Sjkim UINT16 Segment; 1890327557Sjkim UINT16 StartBus; 1891327557Sjkim UINT16 PathOffset; 1892327557Sjkim UINT16 PathLength; 1893327557Sjkim UINT16 VendorDataOffset; 1894327557Sjkim UINT16 VendorDataLength; 1895327557Sjkim 1896327557Sjkim} ACPI_SDEV_PCIE; 1897327557Sjkim 1898327557Sjkim/* 1a: PCIe Endpoint path entry */ 1899327557Sjkim 1900327557Sjkimtypedef struct acpi_sdev_pcie_path 1901327557Sjkim{ 1902327557Sjkim UINT8 Device; 1903327557Sjkim UINT8 Function; 1904327557Sjkim 1905327557Sjkim} ACPI_SDEV_PCIE_PATH; 1906327557Sjkim 1907327557Sjkim 1908327557Sjkim/******************************************************************************* 1909327557Sjkim * 1910167802Sjkim * SLIT - System Locality Distance Information Table 1911197104Sjkim * Version 1 1912167802Sjkim * 1913167802Sjkim ******************************************************************************/ 1914167802Sjkim 1915167802Sjkimtypedef struct acpi_table_slit 1916167802Sjkim{ 1917167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1918167802Sjkim UINT64 LocalityCount; 1919167802Sjkim UINT8 Entry[1]; /* Real size = localities^2 */ 1920167802Sjkim 1921167802Sjkim} ACPI_TABLE_SLIT; 1922167802Sjkim 1923167802Sjkim 1924167802Sjkim/******************************************************************************* 1925167802Sjkim * 1926167802Sjkim * SRAT - System Resource Affinity Table 1927197104Sjkim * Version 3 1928167802Sjkim * 1929167802Sjkim ******************************************************************************/ 1930167802Sjkim 1931167802Sjkimtypedef struct acpi_table_srat 1932167802Sjkim{ 1933167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1934167802Sjkim UINT32 TableRevision; /* Must be value '1' */ 1935167802Sjkim UINT64 Reserved; /* Reserved, must be zero */ 1936167802Sjkim 1937167802Sjkim} ACPI_TABLE_SRAT; 1938167802Sjkim 1939167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 1940167802Sjkim 1941167802Sjkimenum AcpiSratType 1942167802Sjkim{ 1943193267Sjkim ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1944193267Sjkim ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1945193267Sjkim ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 1946272444Sjkim ACPI_SRAT_TYPE_GICC_AFFINITY = 3, 1947322877Sjkim ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ 1948322877Sjkim ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 1949167802Sjkim}; 1950167802Sjkim 1951193267Sjkim/* 1952272444Sjkim * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1953193267Sjkim */ 1954167802Sjkim 1955193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */ 1956193267Sjkim 1957167802Sjkimtypedef struct acpi_srat_cpu_affinity 1958167802Sjkim{ 1959167802Sjkim ACPI_SUBTABLE_HEADER Header; 1960167802Sjkim UINT8 ProximityDomainLo; 1961167802Sjkim UINT8 ApicId; 1962167802Sjkim UINT32 Flags; 1963167802Sjkim UINT8 LocalSapicEid; 1964167802Sjkim UINT8 ProximityDomainHi[3]; 1965272444Sjkim UINT32 ClockDomain; 1966167802Sjkim 1967167802Sjkim} ACPI_SRAT_CPU_AFFINITY; 1968167802Sjkim 1969197104Sjkim/* Flags */ 1970197104Sjkim 1971197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 1972197104Sjkim 1973197104Sjkim 1974193267Sjkim/* 1: Memory Affinity */ 1975167802Sjkim 1976167802Sjkimtypedef struct acpi_srat_mem_affinity 1977167802Sjkim{ 1978167802Sjkim ACPI_SUBTABLE_HEADER Header; 1979167802Sjkim UINT32 ProximityDomain; 1980167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1981167802Sjkim UINT64 BaseAddress; 1982167802Sjkim UINT64 Length; 1983193267Sjkim UINT32 Reserved1; 1984167802Sjkim UINT32 Flags; 1985193267Sjkim UINT64 Reserved2; /* Reserved, must be zero */ 1986167802Sjkim 1987167802Sjkim} ACPI_SRAT_MEM_AFFINITY; 1988167802Sjkim 1989167802Sjkim/* Flags */ 1990167802Sjkim 1991167802Sjkim#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1992167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1993167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1994167802Sjkim 1995167802Sjkim 1996197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 1997197104Sjkim 1998193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity 1999167802Sjkim{ 2000193267Sjkim ACPI_SUBTABLE_HEADER Header; 2001193267Sjkim UINT16 Reserved; /* Reserved, must be zero */ 2002193267Sjkim UINT32 ProximityDomain; 2003193267Sjkim UINT32 ApicId; 2004193267Sjkim UINT32 Flags; 2005197104Sjkim UINT32 ClockDomain; 2006197104Sjkim UINT32 Reserved2; 2007167802Sjkim 2008193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY; 2009167802Sjkim 2010193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 2011193267Sjkim 2012193267Sjkim#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 2013193267Sjkim 2014193267Sjkim 2015272444Sjkim/* 3: GICC Affinity (ACPI 5.1) */ 2016272444Sjkim 2017272444Sjkimtypedef struct acpi_srat_gicc_affinity 2018272444Sjkim{ 2019272444Sjkim ACPI_SUBTABLE_HEADER Header; 2020272444Sjkim UINT32 ProximityDomain; 2021272444Sjkim UINT32 AcpiProcessorUid; 2022272444Sjkim UINT32 Flags; 2023272444Sjkim UINT32 ClockDomain; 2024272444Sjkim 2025272444Sjkim} ACPI_SRAT_GICC_AFFINITY; 2026272444Sjkim 2027272444Sjkim/* Flags for ACPI_SRAT_GICC_AFFINITY */ 2028272444Sjkim 2029272444Sjkim#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ 2030272444Sjkim 2031283092Sjkim 2032322877Sjkim/* 4: GCC ITS Affinity (ACPI 6.2) */ 2033322877Sjkim 2034322877Sjkimtypedef struct acpi_srat_gic_its_affinity 2035322877Sjkim{ 2036322877Sjkim ACPI_SUBTABLE_HEADER Header; 2037322877Sjkim UINT32 ProximityDomain; 2038322877Sjkim UINT16 Reserved; 2039322877Sjkim UINT32 ItsId; 2040322877Sjkim 2041322877Sjkim} ACPI_SRAT_GIC_ITS_AFFINITY; 2042322877Sjkim 2043322877Sjkim 2044167802Sjkim/* Reset to default packing */ 2045167802Sjkim 204669450Smsmith#pragma pack() 204769450Smsmith 204869450Smsmith#endif /* __ACTBL1_H__ */ 2049