actbl1.h revision 284583
169450Smsmith/****************************************************************************** 269450Smsmith * 3167802Sjkim * Name: actbl1.h - Additional ACPI table definitions 469450Smsmith * 569450Smsmith *****************************************************************************/ 669450Smsmith 7217365Sjkim/* 8278970Sjkim * Copyright (C) 2000 - 2015, Intel Corp. 970243Smsmith * All rights reserved. 1069450Smsmith * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 2569450Smsmith * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 2969450Smsmith * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 4369450Smsmith 4469450Smsmith#ifndef __ACTBL1_H__ 4569450Smsmith#define __ACTBL1_H__ 4669450Smsmith 47167802Sjkim 48167802Sjkim/******************************************************************************* 49167802Sjkim * 50197104Sjkim * Additional ACPI Tables (1) 51167802Sjkim * 52167802Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are 53167802Sjkim * included here to support device drivers and the AML disassembler. 54167802Sjkim * 55197104Sjkim * The tables in this file are fully defined within the ACPI specification. 56197104Sjkim * 57167802Sjkim ******************************************************************************/ 58167802Sjkim 59167802Sjkim 60167802Sjkim/* 61197104Sjkim * Values for description table header signatures for tables defined in this 62197104Sjkim * file. Useful because they make it more difficult to inadvertently type in 63197104Sjkim * the wrong signature. 64167802Sjkim */ 65193267Sjkim#define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 66167802Sjkim#define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 67167802Sjkim#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 68193267Sjkim#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 69193267Sjkim#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 70193267Sjkim#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 71167802Sjkim#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 72197104Sjkim#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 73167802Sjkim#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 74167802Sjkim#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 75167802Sjkim#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 76283092Sjkim#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 77167802Sjkim 78167802Sjkim 79167802Sjkim/* 80167802Sjkim * All tables must be byte-packed to match the ACPI specification, since 81167802Sjkim * the tables are provided by the system BIOS. 82167802Sjkim */ 8369450Smsmith#pragma pack(1) 8469450Smsmith 8591116Smsmith/* 86239340Sjkim * Note: C bitfields are not used for this reason: 87239340Sjkim * 88239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language 89239340Sjkim * does not specify the layout of bitfields in memory, which means they are 90239340Sjkim * essentially useless for dealing with packed data in on-disk formats or 91239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 92239340Sjkim * this decision was a design error in C. Ritchie could have picked an order 93239340Sjkim * and stuck with it." Norman Ramsey. 94239340Sjkim * See http://stackoverflow.com/a/1053662/41661 9591116Smsmith */ 96167802Sjkim 97167802Sjkim 98197104Sjkim/******************************************************************************* 99197104Sjkim * 100197104Sjkim * Common subtable headers 101197104Sjkim * 102197104Sjkim ******************************************************************************/ 103167802Sjkim 104197104Sjkim/* Generic subtable header (used in MADT, SRAT, etc.) */ 105197104Sjkim 106167802Sjkimtypedef struct acpi_subtable_header 10769450Smsmith{ 108167802Sjkim UINT8 Type; 109167802Sjkim UINT8 Length; 110151937Sjkim 111167802Sjkim} ACPI_SUBTABLE_HEADER; 11269450Smsmith 11369450Smsmith 114197104Sjkim/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 115193267Sjkim 116193267Sjkimtypedef struct acpi_whea_header 117193267Sjkim{ 118193267Sjkim UINT8 Action; 119193267Sjkim UINT8 Instruction; 120193267Sjkim UINT8 Flags; 121193267Sjkim UINT8 Reserved; 122193267Sjkim ACPI_GENERIC_ADDRESS RegisterRegion; 123193267Sjkim UINT64 Value; /* Value used with Read/Write register */ 124193267Sjkim UINT64 Mask; /* Bitmask required for this register instruction */ 125193267Sjkim 126193267Sjkim} ACPI_WHEA_HEADER; 127193267Sjkim 128193267Sjkim 129167802Sjkim/******************************************************************************* 130167802Sjkim * 131197104Sjkim * BERT - Boot Error Record Table (ACPI 4.0) 132197104Sjkim * Version 1 133167802Sjkim * 134167802Sjkim ******************************************************************************/ 135167802Sjkim 136193267Sjkimtypedef struct acpi_table_bert 137193267Sjkim{ 138193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 139193267Sjkim UINT32 RegionLength; /* Length of the boot error region */ 140238381Sjkim UINT64 Address; /* Physical address of the error region */ 141193267Sjkim 142193267Sjkim} ACPI_TABLE_BERT; 143193267Sjkim 144193267Sjkim 145197104Sjkim/* Boot Error Region (not a subtable, pointed to by Address field above) */ 146193267Sjkim 147193267Sjkimtypedef struct acpi_bert_region 148193267Sjkim{ 149197104Sjkim UINT32 BlockStatus; /* Type of error information */ 150197104Sjkim UINT32 RawDataOffset; /* Offset to raw error data */ 151197104Sjkim UINT32 RawDataLength; /* Length of raw error data */ 152197104Sjkim UINT32 DataLength; /* Length of generic error data */ 153197104Sjkim UINT32 ErrorSeverity; /* Severity code */ 154193267Sjkim 155193267Sjkim} ACPI_BERT_REGION; 156193267Sjkim 157197104Sjkim/* Values for BlockStatus flags above */ 158193267Sjkim 159193267Sjkim#define ACPI_BERT_UNCORRECTABLE (1) 160197104Sjkim#define ACPI_BERT_CORRECTABLE (1<<1) 161197104Sjkim#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 162197104Sjkim#define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 163197104Sjkim#define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 164193267Sjkim 165197104Sjkim/* Values for ErrorSeverity above */ 166193267Sjkim 167197104Sjkimenum AcpiBertErrorSeverity 168167802Sjkim{ 169197104Sjkim ACPI_BERT_ERROR_CORRECTABLE = 0, 170197104Sjkim ACPI_BERT_ERROR_FATAL = 1, 171197104Sjkim ACPI_BERT_ERROR_CORRECTED = 2, 172197104Sjkim ACPI_BERT_ERROR_NONE = 3, 173197104Sjkim ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 174197104Sjkim}; 175167802Sjkim 176197104Sjkim/* 177197104Sjkim * Note: The generic error data that follows the ErrorSeverity field above 178197104Sjkim * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 179197104Sjkim */ 180167802Sjkim 181167802Sjkim 182167802Sjkim/******************************************************************************* 183167802Sjkim * 184197104Sjkim * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 185197104Sjkim * Version 1 186167802Sjkim * 187167802Sjkim ******************************************************************************/ 188167802Sjkim 189167802Sjkimtypedef struct acpi_table_cpep 190167802Sjkim{ 191167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 192167802Sjkim UINT64 Reserved; 193167802Sjkim 194167802Sjkim} ACPI_TABLE_CPEP; 195167802Sjkim 196167802Sjkim 197167802Sjkim/* Subtable */ 198167802Sjkim 199167802Sjkimtypedef struct acpi_cpep_polling 200167802Sjkim{ 201197104Sjkim ACPI_SUBTABLE_HEADER Header; 202167802Sjkim UINT8 Id; /* Processor ID */ 203167802Sjkim UINT8 Eid; /* Processor EID */ 204167802Sjkim UINT32 Interval; /* Polling interval (msec) */ 205167802Sjkim 206167802Sjkim} ACPI_CPEP_POLLING; 207167802Sjkim 208167802Sjkim 209167802Sjkim/******************************************************************************* 210167802Sjkim * 211167802Sjkim * ECDT - Embedded Controller Boot Resources Table 212197104Sjkim * Version 1 213167802Sjkim * 214167802Sjkim ******************************************************************************/ 215167802Sjkim 216167802Sjkimtypedef struct acpi_table_ecdt 217167802Sjkim{ 218167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 219167802Sjkim ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 220167802Sjkim ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 221167802Sjkim UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 222167802Sjkim UINT8 Gpe; /* The GPE for the EC */ 223167802Sjkim UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 224167802Sjkim 225167802Sjkim} ACPI_TABLE_ECDT; 226167802Sjkim 227167802Sjkim 228167802Sjkim/******************************************************************************* 229167802Sjkim * 230197104Sjkim * EINJ - Error Injection Table (ACPI 4.0) 231197104Sjkim * Version 1 232193267Sjkim * 233193267Sjkim ******************************************************************************/ 234193267Sjkim 235193267Sjkimtypedef struct acpi_table_einj 236193267Sjkim{ 237193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 238193267Sjkim UINT32 HeaderLength; 239197104Sjkim UINT8 Flags; 240197104Sjkim UINT8 Reserved[3]; 241193267Sjkim UINT32 Entries; 242193267Sjkim 243193267Sjkim} ACPI_TABLE_EINJ; 244193267Sjkim 245197104Sjkim 246193267Sjkim/* EINJ Injection Instruction Entries (actions) */ 247193267Sjkim 248193267Sjkimtypedef struct acpi_einj_entry 249193267Sjkim{ 250193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 251193267Sjkim 252193267Sjkim} ACPI_EINJ_ENTRY; 253193267Sjkim 254197104Sjkim/* Masks for Flags field above */ 255197104Sjkim 256197104Sjkim#define ACPI_EINJ_PRESERVE (1) 257197104Sjkim 258193267Sjkim/* Values for Action field above */ 259193267Sjkim 260193267Sjkimenum AcpiEinjActions 261193267Sjkim{ 262228110Sjkim ACPI_EINJ_BEGIN_OPERATION = 0, 263228110Sjkim ACPI_EINJ_GET_TRIGGER_TABLE = 1, 264228110Sjkim ACPI_EINJ_SET_ERROR_TYPE = 2, 265228110Sjkim ACPI_EINJ_GET_ERROR_TYPE = 3, 266228110Sjkim ACPI_EINJ_END_OPERATION = 4, 267228110Sjkim ACPI_EINJ_EXECUTE_OPERATION = 5, 268228110Sjkim ACPI_EINJ_CHECK_BUSY_STATUS = 6, 269228110Sjkim ACPI_EINJ_GET_COMMAND_STATUS = 7, 270228110Sjkim ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 271228110Sjkim ACPI_EINJ_ACTION_RESERVED = 9, /* 9 and greater are reserved */ 272228110Sjkim ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 273193267Sjkim}; 274193267Sjkim 275193267Sjkim/* Values for Instruction field above */ 276193267Sjkim 277193267Sjkimenum AcpiEinjInstructions 278193267Sjkim{ 279193267Sjkim ACPI_EINJ_READ_REGISTER = 0, 280193267Sjkim ACPI_EINJ_READ_REGISTER_VALUE = 1, 281193267Sjkim ACPI_EINJ_WRITE_REGISTER = 2, 282193267Sjkim ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 283193267Sjkim ACPI_EINJ_NOOP = 4, 284228110Sjkim ACPI_EINJ_FLUSH_CACHELINE = 5, 285228110Sjkim ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 286193267Sjkim}; 287193267Sjkim 288228110Sjkimtypedef struct acpi_einj_error_type_with_addr 289228110Sjkim{ 290228110Sjkim UINT32 ErrorType; 291228110Sjkim UINT32 VendorStructOffset; 292228110Sjkim UINT32 Flags; 293228110Sjkim UINT32 ApicId; 294228110Sjkim UINT64 Address; 295228110Sjkim UINT64 Range; 296228110Sjkim UINT32 PcieId; 297197104Sjkim 298228110Sjkim} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 299228110Sjkim 300228110Sjkimtypedef struct acpi_einj_vendor 301228110Sjkim{ 302228110Sjkim UINT32 Length; 303228110Sjkim UINT32 PcieId; 304228110Sjkim UINT16 VendorId; 305228110Sjkim UINT16 DeviceId; 306228110Sjkim UINT8 RevisionId; 307228110Sjkim UINT8 Reserved[3]; 308228110Sjkim 309228110Sjkim} ACPI_EINJ_VENDOR; 310228110Sjkim 311228110Sjkim 312193267Sjkim/* EINJ Trigger Error Action Table */ 313193267Sjkim 314193267Sjkimtypedef struct acpi_einj_trigger 315193267Sjkim{ 316193267Sjkim UINT32 HeaderSize; 317193267Sjkim UINT32 Revision; 318193267Sjkim UINT32 TableSize; 319193267Sjkim UINT32 EntryCount; 320193267Sjkim 321193267Sjkim} ACPI_EINJ_TRIGGER; 322193267Sjkim 323197104Sjkim/* Command status return values */ 324193267Sjkim 325197104Sjkimenum AcpiEinjCommandStatus 326197104Sjkim{ 327197104Sjkim ACPI_EINJ_SUCCESS = 0, 328197104Sjkim ACPI_EINJ_FAILURE = 1, 329197104Sjkim ACPI_EINJ_INVALID_ACCESS = 2, 330197104Sjkim ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 331197104Sjkim}; 332197104Sjkim 333197104Sjkim 334197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 335197104Sjkim 336197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 337197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 338197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 339197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 340197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 341197104Sjkim#define ACPI_EINJ_MEMORY_FATAL (1<<5) 342197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 343197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 344197104Sjkim#define ACPI_EINJ_PCIX_FATAL (1<<8) 345197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 346197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 347197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL (1<<11) 348228110Sjkim#define ACPI_EINJ_VENDOR_DEFINED (1<<31) 349197104Sjkim 350197104Sjkim 351193267Sjkim/******************************************************************************* 352193267Sjkim * 353197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0) 354197104Sjkim * Version 1 355193267Sjkim * 356193267Sjkim ******************************************************************************/ 357193267Sjkim 358193267Sjkimtypedef struct acpi_table_erst 359193267Sjkim{ 360193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 361193267Sjkim UINT32 HeaderLength; 362193267Sjkim UINT32 Reserved; 363193267Sjkim UINT32 Entries; 364193267Sjkim 365193267Sjkim} ACPI_TABLE_ERST; 366193267Sjkim 367197104Sjkim 368193267Sjkim/* ERST Serialization Entries (actions) */ 369193267Sjkim 370193267Sjkimtypedef struct acpi_erst_entry 371193267Sjkim{ 372193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 373193267Sjkim 374193267Sjkim} ACPI_ERST_ENTRY; 375193267Sjkim 376197104Sjkim/* Masks for Flags field above */ 377197104Sjkim 378197104Sjkim#define ACPI_ERST_PRESERVE (1) 379197104Sjkim 380193267Sjkim/* Values for Action field above */ 381193267Sjkim 382193267Sjkimenum AcpiErstActions 383193267Sjkim{ 384197104Sjkim ACPI_ERST_BEGIN_WRITE = 0, 385197104Sjkim ACPI_ERST_BEGIN_READ = 1, 386197104Sjkim ACPI_ERST_BEGIN_CLEAR = 2, 387197104Sjkim ACPI_ERST_END = 3, 388193267Sjkim ACPI_ERST_SET_RECORD_OFFSET = 4, 389193267Sjkim ACPI_ERST_EXECUTE_OPERATION = 5, 390193267Sjkim ACPI_ERST_CHECK_BUSY_STATUS = 6, 391193267Sjkim ACPI_ERST_GET_COMMAND_STATUS = 7, 392197104Sjkim ACPI_ERST_GET_RECORD_ID = 8, 393197104Sjkim ACPI_ERST_SET_RECORD_ID = 9, 394193267Sjkim ACPI_ERST_GET_RECORD_COUNT = 10, 395193267Sjkim ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 396193267Sjkim ACPI_ERST_NOT_USED = 12, 397193267Sjkim ACPI_ERST_GET_ERROR_RANGE = 13, 398193267Sjkim ACPI_ERST_GET_ERROR_LENGTH = 14, 399193267Sjkim ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 400193267Sjkim ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */ 401193267Sjkim}; 402193267Sjkim 403193267Sjkim/* Values for Instruction field above */ 404193267Sjkim 405193267Sjkimenum AcpiErstInstructions 406193267Sjkim{ 407193267Sjkim ACPI_ERST_READ_REGISTER = 0, 408193267Sjkim ACPI_ERST_READ_REGISTER_VALUE = 1, 409193267Sjkim ACPI_ERST_WRITE_REGISTER = 2, 410193267Sjkim ACPI_ERST_WRITE_REGISTER_VALUE = 3, 411193267Sjkim ACPI_ERST_NOOP = 4, 412193267Sjkim ACPI_ERST_LOAD_VAR1 = 5, 413193267Sjkim ACPI_ERST_LOAD_VAR2 = 6, 414193267Sjkim ACPI_ERST_STORE_VAR1 = 7, 415193267Sjkim ACPI_ERST_ADD = 8, 416193267Sjkim ACPI_ERST_SUBTRACT = 9, 417193267Sjkim ACPI_ERST_ADD_VALUE = 10, 418193267Sjkim ACPI_ERST_SUBTRACT_VALUE = 11, 419193267Sjkim ACPI_ERST_STALL = 12, 420193267Sjkim ACPI_ERST_STALL_WHILE_TRUE = 13, 421193267Sjkim ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 422193267Sjkim ACPI_ERST_GOTO = 15, 423193267Sjkim ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 424193267Sjkim ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 425193267Sjkim ACPI_ERST_MOVE_DATA = 18, 426193267Sjkim ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 427193267Sjkim}; 428193267Sjkim 429197104Sjkim/* Command status return values */ 430193267Sjkim 431197104Sjkimenum AcpiErstCommandStatus 432197104Sjkim{ 433197104Sjkim ACPI_ERST_SUCESS = 0, 434197104Sjkim ACPI_ERST_NO_SPACE = 1, 435197104Sjkim ACPI_ERST_NOT_AVAILABLE = 2, 436197104Sjkim ACPI_ERST_FAILURE = 3, 437197104Sjkim ACPI_ERST_RECORD_EMPTY = 4, 438197104Sjkim ACPI_ERST_NOT_FOUND = 5, 439197104Sjkim ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 440197104Sjkim}; 441197104Sjkim 442197104Sjkim 443197104Sjkim/* Error Record Serialization Information */ 444197104Sjkim 445197104Sjkimtypedef struct acpi_erst_info 446197104Sjkim{ 447197104Sjkim UINT16 Signature; /* Should be "ER" */ 448197104Sjkim UINT8 Data[48]; 449197104Sjkim 450197104Sjkim} ACPI_ERST_INFO; 451197104Sjkim 452197104Sjkim 453193267Sjkim/******************************************************************************* 454193267Sjkim * 455197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0) 456197104Sjkim * Version 1 457193267Sjkim * 458193267Sjkim ******************************************************************************/ 459193267Sjkim 460193267Sjkimtypedef struct acpi_table_hest 461193267Sjkim{ 462193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 463193267Sjkim UINT32 ErrorSourceCount; 464193267Sjkim 465193267Sjkim} ACPI_TABLE_HEST; 466193267Sjkim 467193267Sjkim 468193267Sjkim/* HEST subtable header */ 469193267Sjkim 470193267Sjkimtypedef struct acpi_hest_header 471193267Sjkim{ 472193267Sjkim UINT16 Type; 473197104Sjkim UINT16 SourceId; 474193267Sjkim 475193267Sjkim} ACPI_HEST_HEADER; 476193267Sjkim 477193267Sjkim 478193267Sjkim/* Values for Type field above for subtables */ 479193267Sjkim 480193267Sjkimenum AcpiHestTypes 481193267Sjkim{ 482197104Sjkim ACPI_HEST_TYPE_IA32_CHECK = 0, 483197104Sjkim ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 484197104Sjkim ACPI_HEST_TYPE_IA32_NMI = 2, 485197104Sjkim ACPI_HEST_TYPE_NOT_USED3 = 3, 486197104Sjkim ACPI_HEST_TYPE_NOT_USED4 = 4, 487197104Sjkim ACPI_HEST_TYPE_NOT_USED5 = 5, 488197104Sjkim ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 489197104Sjkim ACPI_HEST_TYPE_AER_ENDPOINT = 7, 490197104Sjkim ACPI_HEST_TYPE_AER_BRIDGE = 8, 491197104Sjkim ACPI_HEST_TYPE_GENERIC_ERROR = 9, 492197104Sjkim ACPI_HEST_TYPE_RESERVED = 10 /* 10 and greater are reserved */ 493193267Sjkim}; 494193267Sjkim 495193267Sjkim 496193267Sjkim/* 497197104Sjkim * HEST substructures contained in subtables 498193267Sjkim */ 499193267Sjkim 500197104Sjkim/* 501197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 502197104Sjkim * ACPI_HEST_IA_CORRECTED structures. 503197104Sjkim */ 504197104Sjkimtypedef struct acpi_hest_ia_error_bank 505193267Sjkim{ 506193267Sjkim UINT8 BankNumber; 507193267Sjkim UINT8 ClearStatusOnInit; 508193267Sjkim UINT8 StatusFormat; 509197104Sjkim UINT8 Reserved; 510193267Sjkim UINT32 ControlRegister; 511197104Sjkim UINT64 ControlData; 512193267Sjkim UINT32 StatusRegister; 513193267Sjkim UINT32 AddressRegister; 514193267Sjkim UINT32 MiscRegister; 515193267Sjkim 516197104Sjkim} ACPI_HEST_IA_ERROR_BANK; 517193267Sjkim 518193267Sjkim 519197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 520193267Sjkim 521193267Sjkimtypedef struct acpi_hest_aer_common 522193267Sjkim{ 523197104Sjkim UINT16 Reserved1; 524193267Sjkim UINT8 Flags; 525193267Sjkim UINT8 Enabled; 526197104Sjkim UINT32 RecordsToPreallocate; 527193267Sjkim UINT32 MaxSectionsPerRecord; 528272444Sjkim UINT32 Bus; /* Bus and Segment numbers */ 529193267Sjkim UINT16 Device; 530193267Sjkim UINT16 Function; 531193267Sjkim UINT16 DeviceControl; 532197104Sjkim UINT16 Reserved2; 533197104Sjkim UINT32 UncorrectableMask; 534197104Sjkim UINT32 UncorrectableSeverity; 535197104Sjkim UINT32 CorrectableMask; 536197104Sjkim UINT32 AdvancedCapabilities; 537193267Sjkim 538193267Sjkim} ACPI_HEST_AER_COMMON; 539193267Sjkim 540197104Sjkim/* Masks for HEST Flags fields */ 541193267Sjkim 542197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST (1) 543197104Sjkim#define ACPI_HEST_GLOBAL (1<<1) 544197104Sjkim 545272444Sjkim/* 546272444Sjkim * Macros to access the bus/segment numbers in Bus field above: 547272444Sjkim * Bus number is encoded in bits 7:0 548272444Sjkim * Segment number is encoded in bits 23:8 549272444Sjkim */ 550272444Sjkim#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 551272444Sjkim#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 552197104Sjkim 553272444Sjkim 554193267Sjkim/* Hardware Error Notification */ 555193267Sjkim 556193267Sjkimtypedef struct acpi_hest_notify 557193267Sjkim{ 558193267Sjkim UINT8 Type; 559193267Sjkim UINT8 Length; 560193267Sjkim UINT16 ConfigWriteEnable; 561193267Sjkim UINT32 PollInterval; 562193267Sjkim UINT32 Vector; 563193267Sjkim UINT32 PollingThresholdValue; 564193267Sjkim UINT32 PollingThresholdWindow; 565193267Sjkim UINT32 ErrorThresholdValue; 566193267Sjkim UINT32 ErrorThresholdWindow; 567193267Sjkim 568193267Sjkim} ACPI_HEST_NOTIFY; 569193267Sjkim 570193267Sjkim/* Values for Notify Type field above */ 571193267Sjkim 572193267Sjkimenum AcpiHestNotifyTypes 573193267Sjkim{ 574193267Sjkim ACPI_HEST_NOTIFY_POLLED = 0, 575193267Sjkim ACPI_HEST_NOTIFY_EXTERNAL = 1, 576193267Sjkim ACPI_HEST_NOTIFY_LOCAL = 2, 577193267Sjkim ACPI_HEST_NOTIFY_SCI = 3, 578193267Sjkim ACPI_HEST_NOTIFY_NMI = 4, 579240716Sjkim ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 580240716Sjkim ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 581240716Sjkim ACPI_HEST_NOTIFY_RESERVED = 7 /* 7 and greater are reserved */ 582193267Sjkim}; 583193267Sjkim 584197104Sjkim/* Values for ConfigWriteEnable bitfield above */ 585193267Sjkim 586197104Sjkim#define ACPI_HEST_TYPE (1) 587197104Sjkim#define ACPI_HEST_POLL_INTERVAL (1<<1) 588197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 589197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 590197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 591197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 592197104Sjkim 593197104Sjkim 594193267Sjkim/* 595193267Sjkim * HEST subtables 596193267Sjkim */ 597193267Sjkim 598197104Sjkim/* 0: IA32 Machine Check Exception */ 599193267Sjkim 600197104Sjkimtypedef struct acpi_hest_ia_machine_check 601193267Sjkim{ 602193267Sjkim ACPI_HEST_HEADER Header; 603197104Sjkim UINT16 Reserved1; 604193267Sjkim UINT8 Flags; 605197104Sjkim UINT8 Enabled; 606197104Sjkim UINT32 RecordsToPreallocate; 607193267Sjkim UINT32 MaxSectionsPerRecord; 608193267Sjkim UINT64 GlobalCapabilityData; 609193267Sjkim UINT64 GlobalControlData; 610193267Sjkim UINT8 NumHardwareBanks; 611197104Sjkim UINT8 Reserved3[7]; 612193267Sjkim 613197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK; 614193267Sjkim 615193267Sjkim 616197104Sjkim/* 1: IA32 Corrected Machine Check */ 617193267Sjkim 618197104Sjkimtypedef struct acpi_hest_ia_corrected 619193267Sjkim{ 620193267Sjkim ACPI_HEST_HEADER Header; 621197104Sjkim UINT16 Reserved1; 622193267Sjkim UINT8 Flags; 623193267Sjkim UINT8 Enabled; 624197104Sjkim UINT32 RecordsToPreallocate; 625193267Sjkim UINT32 MaxSectionsPerRecord; 626193267Sjkim ACPI_HEST_NOTIFY Notify; 627193267Sjkim UINT8 NumHardwareBanks; 628197104Sjkim UINT8 Reserved2[3]; 629193267Sjkim 630197104Sjkim} ACPI_HEST_IA_CORRECTED; 631193267Sjkim 632193267Sjkim 633197104Sjkim/* 2: IA32 Non-Maskable Interrupt */ 634193267Sjkim 635197104Sjkimtypedef struct acpi_hest_ia_nmi 636193267Sjkim{ 637193267Sjkim ACPI_HEST_HEADER Header; 638193267Sjkim UINT32 Reserved; 639197104Sjkim UINT32 RecordsToPreallocate; 640193267Sjkim UINT32 MaxSectionsPerRecord; 641193267Sjkim UINT32 MaxRawDataLength; 642193267Sjkim 643197104Sjkim} ACPI_HEST_IA_NMI; 644193267Sjkim 645193267Sjkim 646197104Sjkim/* 3,4,5: Not used */ 647193267Sjkim 648193267Sjkim/* 6: PCI Express Root Port AER */ 649193267Sjkim 650193267Sjkimtypedef struct acpi_hest_aer_root 651193267Sjkim{ 652193267Sjkim ACPI_HEST_HEADER Header; 653193267Sjkim ACPI_HEST_AER_COMMON Aer; 654193267Sjkim UINT32 RootErrorCommand; 655193267Sjkim 656193267Sjkim} ACPI_HEST_AER_ROOT; 657193267Sjkim 658193267Sjkim 659193267Sjkim/* 7: PCI Express AER (AER Endpoint) */ 660193267Sjkim 661193267Sjkimtypedef struct acpi_hest_aer 662193267Sjkim{ 663193267Sjkim ACPI_HEST_HEADER Header; 664193267Sjkim ACPI_HEST_AER_COMMON Aer; 665193267Sjkim 666193267Sjkim} ACPI_HEST_AER; 667193267Sjkim 668193267Sjkim 669193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */ 670193267Sjkim 671193267Sjkimtypedef struct acpi_hest_aer_bridge 672193267Sjkim{ 673193267Sjkim ACPI_HEST_HEADER Header; 674193267Sjkim ACPI_HEST_AER_COMMON Aer; 675197104Sjkim UINT32 UncorrectableMask2; 676197104Sjkim UINT32 UncorrectableSeverity2; 677197104Sjkim UINT32 AdvancedCapabilities2; 678193267Sjkim 679193267Sjkim} ACPI_HEST_AER_BRIDGE; 680193267Sjkim 681193267Sjkim 682193267Sjkim/* 9: Generic Hardware Error Source */ 683193267Sjkim 684193267Sjkimtypedef struct acpi_hest_generic 685193267Sjkim{ 686193267Sjkim ACPI_HEST_HEADER Header; 687193267Sjkim UINT16 RelatedSourceId; 688197104Sjkim UINT8 Reserved; 689193267Sjkim UINT8 Enabled; 690197104Sjkim UINT32 RecordsToPreallocate; 691193267Sjkim UINT32 MaxSectionsPerRecord; 692193267Sjkim UINT32 MaxRawDataLength; 693193267Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 694193267Sjkim ACPI_HEST_NOTIFY Notify; 695197104Sjkim UINT32 ErrorBlockLength; 696193267Sjkim 697193267Sjkim} ACPI_HEST_GENERIC; 698193267Sjkim 699193267Sjkim 700197104Sjkim/* Generic Error Status block */ 701167802Sjkim 702197104Sjkimtypedef struct acpi_hest_generic_status 703167802Sjkim{ 704197104Sjkim UINT32 BlockStatus; 705197104Sjkim UINT32 RawDataOffset; 706197104Sjkim UINT32 RawDataLength; 707197104Sjkim UINT32 DataLength; 708197104Sjkim UINT32 ErrorSeverity; 709167802Sjkim 710197104Sjkim} ACPI_HEST_GENERIC_STATUS; 711167802Sjkim 712197104Sjkim/* Values for BlockStatus flags above */ 713167802Sjkim 714197104Sjkim#define ACPI_HEST_UNCORRECTABLE (1) 715197104Sjkim#define ACPI_HEST_CORRECTABLE (1<<1) 716197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 717197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 718197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 719167802Sjkim 720167802Sjkim 721197104Sjkim/* Generic Error Data entry */ 722167802Sjkim 723197104Sjkimtypedef struct acpi_hest_generic_data 724193267Sjkim{ 725197104Sjkim UINT8 SectionType[16]; 726197104Sjkim UINT32 ErrorSeverity; 727197104Sjkim UINT16 Revision; 728197104Sjkim UINT8 ValidationBits; 729193267Sjkim UINT8 Flags; 730197104Sjkim UINT32 ErrorDataLength; 731197104Sjkim UINT8 FruId[16]; 732197104Sjkim UINT8 FruText[20]; 733193267Sjkim 734197104Sjkim} ACPI_HEST_GENERIC_DATA; 735193267Sjkim 736193267Sjkim 737193267Sjkim/******************************************************************************* 738193267Sjkim * 739167802Sjkim * MADT - Multiple APIC Description Table 740197104Sjkim * Version 3 741167802Sjkim * 742167802Sjkim ******************************************************************************/ 743167802Sjkim 744167802Sjkimtypedef struct acpi_table_madt 745167802Sjkim{ 746167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 747167802Sjkim UINT32 Address; /* Physical address of local APIC */ 748167802Sjkim UINT32 Flags; 749167802Sjkim 750167802Sjkim} ACPI_TABLE_MADT; 751167802Sjkim 752197104Sjkim/* Masks for Flags field above */ 753167802Sjkim 754197104Sjkim#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 755167802Sjkim 756167802Sjkim/* Values for PCATCompat flag */ 757167802Sjkim 758167802Sjkim#define ACPI_MADT_DUAL_PIC 0 759167802Sjkim#define ACPI_MADT_MULTIPLE_APIC 1 760167802Sjkim 761167802Sjkim 762197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 763167802Sjkim 764167802Sjkimenum AcpiMadtType 765167802Sjkim{ 766272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC = 0, 767272444Sjkim ACPI_MADT_TYPE_IO_APIC = 1, 768272444Sjkim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 769272444Sjkim ACPI_MADT_TYPE_NMI_SOURCE = 3, 770272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 771272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 772272444Sjkim ACPI_MADT_TYPE_IO_SAPIC = 6, 773272444Sjkim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 774272444Sjkim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 775272444Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 776272444Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 777272444Sjkim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 778272444Sjkim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 779272444Sjkim ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 780272444Sjkim ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 781283092Sjkim ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 782283092Sjkim ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ 783167802Sjkim}; 784167802Sjkim 785167802Sjkim 786167802Sjkim/* 787272444Sjkim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 788167802Sjkim */ 789167802Sjkim 790167802Sjkim/* 0: Processor Local APIC */ 791167802Sjkim 792167802Sjkimtypedef struct acpi_madt_local_apic 793167802Sjkim{ 794167802Sjkim ACPI_SUBTABLE_HEADER Header; 795167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 796167802Sjkim UINT8 Id; /* Processor's local APIC id */ 797167802Sjkim UINT32 LapicFlags; 798167802Sjkim 799167802Sjkim} ACPI_MADT_LOCAL_APIC; 800167802Sjkim 801197104Sjkim 802167802Sjkim/* 1: IO APIC */ 803167802Sjkim 804167802Sjkimtypedef struct acpi_madt_io_apic 805167802Sjkim{ 806167802Sjkim ACPI_SUBTABLE_HEADER Header; 807167802Sjkim UINT8 Id; /* I/O APIC ID */ 808167802Sjkim UINT8 Reserved; /* Reserved - must be zero */ 809167802Sjkim UINT32 Address; /* APIC physical address */ 810167802Sjkim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 811167802Sjkim 812167802Sjkim} ACPI_MADT_IO_APIC; 813167802Sjkim 814197104Sjkim 815167802Sjkim/* 2: Interrupt Override */ 816167802Sjkim 817167802Sjkimtypedef struct acpi_madt_interrupt_override 818167802Sjkim{ 819167802Sjkim ACPI_SUBTABLE_HEADER Header; 820167802Sjkim UINT8 Bus; /* 0 - ISA */ 821167802Sjkim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 822167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 823167802Sjkim UINT16 IntiFlags; 824167802Sjkim 825167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE; 826167802Sjkim 827197104Sjkim 828167802Sjkim/* 3: NMI Source */ 829167802Sjkim 830167802Sjkimtypedef struct acpi_madt_nmi_source 831167802Sjkim{ 832167802Sjkim ACPI_SUBTABLE_HEADER Header; 833167802Sjkim UINT16 IntiFlags; 834167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 835167802Sjkim 836167802Sjkim} ACPI_MADT_NMI_SOURCE; 837167802Sjkim 838197104Sjkim 839167802Sjkim/* 4: Local APIC NMI */ 840167802Sjkim 841167802Sjkimtypedef struct acpi_madt_local_apic_nmi 842167802Sjkim{ 843167802Sjkim ACPI_SUBTABLE_HEADER Header; 844167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 845167802Sjkim UINT16 IntiFlags; 846167802Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 847167802Sjkim 848167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI; 849167802Sjkim 850197104Sjkim 851167802Sjkim/* 5: Address Override */ 852167802Sjkim 853167802Sjkimtypedef struct acpi_madt_local_apic_override 854167802Sjkim{ 855167802Sjkim ACPI_SUBTABLE_HEADER Header; 856167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 857167802Sjkim UINT64 Address; /* APIC physical address */ 858167802Sjkim 859167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE; 860167802Sjkim 861197104Sjkim 862167802Sjkim/* 6: I/O Sapic */ 863167802Sjkim 864167802Sjkimtypedef struct acpi_madt_io_sapic 865167802Sjkim{ 866167802Sjkim ACPI_SUBTABLE_HEADER Header; 867167802Sjkim UINT8 Id; /* I/O SAPIC ID */ 868167802Sjkim UINT8 Reserved; /* Reserved, must be zero */ 869167802Sjkim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 870167802Sjkim UINT64 Address; /* SAPIC physical address */ 871167802Sjkim 872167802Sjkim} ACPI_MADT_IO_SAPIC; 873167802Sjkim 874197104Sjkim 875167802Sjkim/* 7: Local Sapic */ 876167802Sjkim 877167802Sjkimtypedef struct acpi_madt_local_sapic 878167802Sjkim{ 879167802Sjkim ACPI_SUBTABLE_HEADER Header; 880167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 881167802Sjkim UINT8 Id; /* SAPIC ID */ 882167802Sjkim UINT8 Eid; /* SAPIC EID */ 883167802Sjkim UINT8 Reserved[3]; /* Reserved, must be zero */ 884167802Sjkim UINT32 LapicFlags; 885167802Sjkim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 886167802Sjkim char UidString[1]; /* String UID - ACPI 3.0 */ 887167802Sjkim 888167802Sjkim} ACPI_MADT_LOCAL_SAPIC; 889167802Sjkim 890197104Sjkim 891167802Sjkim/* 8: Platform Interrupt Source */ 892167802Sjkim 893167802Sjkimtypedef struct acpi_madt_interrupt_source 894167802Sjkim{ 895167802Sjkim ACPI_SUBTABLE_HEADER Header; 896167802Sjkim UINT16 IntiFlags; 897167802Sjkim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 898167802Sjkim UINT8 Id; /* Processor ID */ 899167802Sjkim UINT8 Eid; /* Processor EID */ 900167802Sjkim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 901167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 902167802Sjkim UINT32 Flags; /* Interrupt Source Flags */ 903167802Sjkim 904167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE; 905167802Sjkim 906197104Sjkim/* Masks for Flags field above */ 907167802Sjkim 908167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE (1) 909167802Sjkim 910167802Sjkim 911197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */ 912197104Sjkim 913193267Sjkimtypedef struct acpi_madt_local_x2apic 914193267Sjkim{ 915193267Sjkim ACPI_SUBTABLE_HEADER Header; 916193267Sjkim UINT16 Reserved; /* Reserved - must be zero */ 917193267Sjkim UINT32 LocalApicId; /* Processor x2APIC ID */ 918193267Sjkim UINT32 LapicFlags; 919193267Sjkim UINT32 Uid; /* ACPI processor UID */ 920193267Sjkim 921193267Sjkim} ACPI_MADT_LOCAL_X2APIC; 922193267Sjkim 923193267Sjkim 924197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */ 925197104Sjkim 926193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi 927193267Sjkim{ 928193267Sjkim ACPI_SUBTABLE_HEADER Header; 929193267Sjkim UINT16 IntiFlags; 930193267Sjkim UINT32 Uid; /* ACPI processor UID */ 931193267Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 932193267Sjkim UINT8 Reserved[3]; /* Reserved - must be zero */ 933193267Sjkim 934193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI; 935193267Sjkim 936193267Sjkim 937283092Sjkim/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ 938228110Sjkim 939228110Sjkimtypedef struct acpi_madt_generic_interrupt 940228110Sjkim{ 941228110Sjkim ACPI_SUBTABLE_HEADER Header; 942228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 943272444Sjkim UINT32 CpuInterfaceNumber; 944228110Sjkim UINT32 Uid; 945228110Sjkim UINT32 Flags; 946228110Sjkim UINT32 ParkingVersion; 947228110Sjkim UINT32 PerformanceInterrupt; 948228110Sjkim UINT64 ParkedAddress; 949228110Sjkim UINT64 BaseAddress; 950272444Sjkim UINT64 GicvBaseAddress; 951272444Sjkim UINT64 GichBaseAddress; 952272444Sjkim UINT32 VgicInterrupt; 953272444Sjkim UINT64 GicrBaseAddress; 954272444Sjkim UINT64 ArmMpidr; 955283092Sjkim UINT8 EfficiencyClass; 956283092Sjkim UINT8 Reserved2[3]; 957228110Sjkim 958228110Sjkim} ACPI_MADT_GENERIC_INTERRUPT; 959228110Sjkim 960272444Sjkim/* Masks for Flags field above */ 961228110Sjkim 962272444Sjkim/* ACPI_MADT_ENABLED (1) Processor is usable if set */ 963272444Sjkim#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 964272444Sjkim#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 965272444Sjkim 966272444Sjkim 967283092Sjkim/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 968228110Sjkim 969228110Sjkimtypedef struct acpi_madt_generic_distributor 970228110Sjkim{ 971228110Sjkim ACPI_SUBTABLE_HEADER Header; 972228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 973228110Sjkim UINT32 GicId; 974228110Sjkim UINT64 BaseAddress; 975228110Sjkim UINT32 GlobalIrqBase; 976283092Sjkim UINT8 Version; 977284583Sjkim UINT8 Reserved2[3]; /* Reserved - must be zero */ 978228110Sjkim 979228110Sjkim} ACPI_MADT_GENERIC_DISTRIBUTOR; 980228110Sjkim 981284583Sjkim/* Values for Version field above */ 982228110Sjkim 983284583Sjkimenum AcpiMadtGicVersion 984284583Sjkim{ 985284583Sjkim ACPI_MADT_GIC_VERSION_NONE = 0, 986284583Sjkim ACPI_MADT_GIC_VERSION_V1 = 1, 987284583Sjkim ACPI_MADT_GIC_VERSION_V2 = 2, 988284583Sjkim ACPI_MADT_GIC_VERSION_V3 = 3, 989284583Sjkim ACPI_MADT_GIC_VERSION_V4 = 4, 990284583Sjkim ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 991284583Sjkim}; 992284583Sjkim 993284583Sjkim 994272444Sjkim/* 13: Generic MSI Frame (ACPI 5.1) */ 995272444Sjkim 996272444Sjkimtypedef struct acpi_madt_generic_msi_frame 997272444Sjkim{ 998272444Sjkim ACPI_SUBTABLE_HEADER Header; 999272444Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1000272444Sjkim UINT32 MsiFrameId; 1001272444Sjkim UINT64 BaseAddress; 1002272444Sjkim UINT32 Flags; 1003272444Sjkim UINT16 SpiCount; 1004272444Sjkim UINT16 SpiBase; 1005272444Sjkim 1006272444Sjkim} ACPI_MADT_GENERIC_MSI_FRAME; 1007272444Sjkim 1008272444Sjkim/* Masks for Flags field above */ 1009272444Sjkim 1010272444Sjkim#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1011272444Sjkim 1012272444Sjkim 1013272444Sjkim/* 14: Generic Redistributor (ACPI 5.1) */ 1014272444Sjkim 1015272444Sjkimtypedef struct acpi_madt_generic_redistributor 1016272444Sjkim{ 1017272444Sjkim ACPI_SUBTABLE_HEADER Header; 1018272444Sjkim UINT16 Reserved; /* reserved - must be zero */ 1019272444Sjkim UINT64 BaseAddress; 1020272444Sjkim UINT32 Length; 1021272444Sjkim 1022272444Sjkim} ACPI_MADT_GENERIC_REDISTRIBUTOR; 1023272444Sjkim 1024272444Sjkim 1025283092Sjkim/* 15: Generic Translator (ACPI 6.0) */ 1026283092Sjkim 1027283092Sjkimtypedef struct acpi_madt_generic_translator 1028283092Sjkim{ 1029283092Sjkim ACPI_SUBTABLE_HEADER Header; 1030283092Sjkim UINT16 Reserved; /* reserved - must be zero */ 1031283092Sjkim UINT32 TranslationId; 1032283092Sjkim UINT64 BaseAddress; 1033283092Sjkim UINT32 Reserved2; 1034283092Sjkim 1035283092Sjkim} ACPI_MADT_GENERIC_TRANSLATOR; 1036283092Sjkim 1037283092Sjkim 1038167802Sjkim/* 1039167802Sjkim * Common flags fields for MADT subtables 1040167802Sjkim */ 1041167802Sjkim 1042272444Sjkim/* MADT Local APIC flags */ 1043167802Sjkim 1044167802Sjkim#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1045167802Sjkim 1046167802Sjkim/* MADT MPS INTI flags (IntiFlags) */ 1047167802Sjkim 1048167802Sjkim#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1049167802Sjkim#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1050167802Sjkim 1051167802Sjkim/* Values for MPS INTI flags */ 1052167802Sjkim 1053167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS 0 1054167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1055167802Sjkim#define ACPI_MADT_POLARITY_RESERVED 2 1056167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1057167802Sjkim 1058167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS (0) 1059167802Sjkim#define ACPI_MADT_TRIGGER_EDGE (1<<2) 1060167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1061167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1062167802Sjkim 1063167802Sjkim 1064167802Sjkim/******************************************************************************* 1065167802Sjkim * 1066197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1067197104Sjkim * Version 1 1068167802Sjkim * 1069167802Sjkim ******************************************************************************/ 1070167802Sjkim 1071197104Sjkimtypedef struct acpi_table_msct 1072167802Sjkim{ 1073167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1074197104Sjkim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1075197104Sjkim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1076197104Sjkim UINT32 MaxClockDomains; /* Max number of clock domains */ 1077197104Sjkim UINT64 MaxAddress; /* Max physical address in system */ 1078167802Sjkim 1079197104Sjkim} ACPI_TABLE_MSCT; 1080167802Sjkim 1081167802Sjkim 1082197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */ 1083167802Sjkim 1084197104Sjkimtypedef struct acpi_msct_proximity 1085167802Sjkim{ 1086197104Sjkim UINT8 Revision; 1087197104Sjkim UINT8 Length; 1088197104Sjkim UINT32 RangeStart; /* Start of domain range */ 1089197104Sjkim UINT32 RangeEnd; /* End of domain range */ 1090197104Sjkim UINT32 ProcessorCapacity; 1091197104Sjkim UINT64 MemoryCapacity; /* In bytes */ 1092167802Sjkim 1093197104Sjkim} ACPI_MSCT_PROXIMITY; 1094167802Sjkim 1095167802Sjkim 1096167802Sjkim/******************************************************************************* 1097167802Sjkim * 1098283092Sjkim * NFIT - NVDIMM Interface Table (ACPI 6.0) 1099283092Sjkim * Version 1 1100283092Sjkim * 1101283092Sjkim ******************************************************************************/ 1102283092Sjkim 1103283092Sjkimtypedef struct acpi_table_nfit 1104283092Sjkim{ 1105283092Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1106283092Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1107283092Sjkim 1108283092Sjkim} ACPI_TABLE_NFIT; 1109283092Sjkim 1110283092Sjkim/* Subtable header for NFIT */ 1111283092Sjkim 1112283092Sjkimtypedef struct acpi_nfit_header 1113283092Sjkim{ 1114283092Sjkim UINT16 Type; 1115283092Sjkim UINT16 Length; 1116283092Sjkim 1117283092Sjkim} ACPI_NFIT_HEADER; 1118283092Sjkim 1119283092Sjkim 1120283092Sjkim/* Values for subtable type in ACPI_NFIT_HEADER */ 1121283092Sjkim 1122283092Sjkimenum AcpiNfitType 1123283092Sjkim{ 1124283092Sjkim ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1125283092Sjkim ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1126283092Sjkim ACPI_NFIT_TYPE_INTERLEAVE = 2, 1127283092Sjkim ACPI_NFIT_TYPE_SMBIOS = 3, 1128283092Sjkim ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1129283092Sjkim ACPI_NFIT_TYPE_DATA_REGION = 5, 1130283092Sjkim ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1131283092Sjkim ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ 1132283092Sjkim}; 1133283092Sjkim 1134283092Sjkim/* 1135283092Sjkim * NFIT Subtables 1136283092Sjkim */ 1137283092Sjkim 1138283092Sjkim/* 0: System Physical Address Range Structure */ 1139283092Sjkim 1140283092Sjkimtypedef struct acpi_nfit_system_address 1141283092Sjkim{ 1142283092Sjkim ACPI_NFIT_HEADER Header; 1143283092Sjkim UINT16 RangeIndex; 1144283092Sjkim UINT16 Flags; 1145283092Sjkim UINT32 Reserved; /* Reseved, must be zero */ 1146283092Sjkim UINT32 ProximityDomain; 1147283092Sjkim UINT8 RangeGuid[16]; 1148283092Sjkim UINT64 Address; 1149283092Sjkim UINT64 Length; 1150283092Sjkim UINT64 MemoryMapping; 1151283092Sjkim 1152283092Sjkim} ACPI_NFIT_SYSTEM_ADDRESS; 1153283092Sjkim 1154283092Sjkim/* Flags */ 1155283092Sjkim 1156283092Sjkim#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1157283092Sjkim#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1158283092Sjkim 1159283092Sjkim/* Range Type GUIDs appear in the include/acuuid.h file */ 1160283092Sjkim 1161283092Sjkim 1162283092Sjkim/* 1: Memory Device to System Address Range Map Structure */ 1163283092Sjkim 1164283092Sjkimtypedef struct acpi_nfit_memory_map 1165283092Sjkim{ 1166283092Sjkim ACPI_NFIT_HEADER Header; 1167283092Sjkim UINT32 DeviceHandle; 1168283092Sjkim UINT16 PhysicalId; 1169283092Sjkim UINT16 RegionId; 1170283092Sjkim UINT16 RangeIndex; 1171283092Sjkim UINT16 RegionIndex; 1172283092Sjkim UINT64 RegionSize; 1173283092Sjkim UINT64 RegionOffset; 1174283092Sjkim UINT64 Address; 1175283092Sjkim UINT16 InterleaveIndex; 1176283092Sjkim UINT16 InterleaveWays; 1177283092Sjkim UINT16 Flags; 1178283092Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1179283092Sjkim 1180283092Sjkim} ACPI_NFIT_MEMORY_MAP; 1181283092Sjkim 1182283092Sjkim/* Flags */ 1183283092Sjkim 1184283092Sjkim#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1185283092Sjkim#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1186283092Sjkim#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1187283092Sjkim#define ACPI_NFIT_MEM_ARMED (1<<3) /* 03: Memory Device observed to be not armed */ 1188283092Sjkim#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1189283092Sjkim#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1190283092Sjkim 1191283092Sjkim 1192283092Sjkim/* 2: Interleave Structure */ 1193283092Sjkim 1194283092Sjkimtypedef struct acpi_nfit_interleave 1195283092Sjkim{ 1196283092Sjkim ACPI_NFIT_HEADER Header; 1197283092Sjkim UINT16 InterleaveIndex; 1198283092Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1199283092Sjkim UINT32 LineCount; 1200283092Sjkim UINT32 LineSize; 1201283092Sjkim UINT32 LineOffset[1]; /* Variable length */ 1202283092Sjkim 1203283092Sjkim} ACPI_NFIT_INTERLEAVE; 1204283092Sjkim 1205283092Sjkim 1206283092Sjkim/* 3: SMBIOS Management Information Structure */ 1207283092Sjkim 1208283092Sjkimtypedef struct acpi_nfit_smbios 1209283092Sjkim{ 1210283092Sjkim ACPI_NFIT_HEADER Header; 1211283092Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1212283092Sjkim UINT8 Data[1]; /* Variable length */ 1213283092Sjkim 1214283092Sjkim} ACPI_NFIT_SMBIOS; 1215283092Sjkim 1216283092Sjkim 1217283092Sjkim/* 4: NVDIMM Control Region Structure */ 1218283092Sjkim 1219283092Sjkimtypedef struct acpi_nfit_control_region 1220283092Sjkim{ 1221283092Sjkim ACPI_NFIT_HEADER Header; 1222283092Sjkim UINT16 RegionIndex; 1223283092Sjkim UINT16 VendorId; 1224283092Sjkim UINT16 DeviceId; 1225283092Sjkim UINT16 RevisionId; 1226283092Sjkim UINT16 SubsystemVendorId; 1227283092Sjkim UINT16 SubsystemDeviceId; 1228283092Sjkim UINT16 SubsystemRevisionId; 1229283092Sjkim UINT8 Reserved[6]; /* Reserved, must be zero */ 1230283092Sjkim UINT32 SerialNumber; 1231283092Sjkim UINT16 Code; 1232283092Sjkim UINT16 Windows; 1233283092Sjkim UINT64 WindowSize; 1234283092Sjkim UINT64 CommandOffset; 1235283092Sjkim UINT64 CommandSize; 1236283092Sjkim UINT64 StatusOffset; 1237283092Sjkim UINT64 StatusSize; 1238283092Sjkim UINT16 Flags; 1239283092Sjkim UINT8 Reserved1[6]; /* Reserved, must be zero */ 1240283092Sjkim 1241283092Sjkim} ACPI_NFIT_CONTROL_REGION; 1242283092Sjkim 1243283092Sjkim/* Flags */ 1244283092Sjkim 1245283092Sjkim#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1246283092Sjkim 1247283092Sjkim 1248283092Sjkim/* 5: NVDIMM Block Data Window Region Structure */ 1249283092Sjkim 1250283092Sjkimtypedef struct acpi_nfit_data_region 1251283092Sjkim{ 1252283092Sjkim ACPI_NFIT_HEADER Header; 1253283092Sjkim UINT16 RegionIndex; 1254283092Sjkim UINT16 Windows; 1255283092Sjkim UINT64 Offset; 1256283092Sjkim UINT64 Size; 1257283092Sjkim UINT64 Capacity; 1258283092Sjkim UINT64 StartAddress; 1259283092Sjkim 1260283092Sjkim} ACPI_NFIT_DATA_REGION; 1261283092Sjkim 1262283092Sjkim 1263283092Sjkim/* 6: Flush Hint Address Structure */ 1264283092Sjkim 1265283092Sjkimtypedef struct acpi_nfit_flush_address 1266283092Sjkim{ 1267283092Sjkim ACPI_NFIT_HEADER Header; 1268283092Sjkim UINT32 DeviceHandle; 1269283092Sjkim UINT16 HintCount; 1270283092Sjkim UINT8 Reserved[6]; /* Reserved, must be zero */ 1271283092Sjkim UINT64 HintAddress[1]; /* Variable length */ 1272283092Sjkim 1273283092Sjkim} ACPI_NFIT_FLUSH_ADDRESS; 1274283092Sjkim 1275283092Sjkim 1276283092Sjkim/******************************************************************************* 1277283092Sjkim * 1278167802Sjkim * SBST - Smart Battery Specification Table 1279197104Sjkim * Version 1 1280167802Sjkim * 1281167802Sjkim ******************************************************************************/ 1282167802Sjkim 1283167802Sjkimtypedef struct acpi_table_sbst 1284167802Sjkim{ 1285167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1286167802Sjkim UINT32 WarningLevel; 1287167802Sjkim UINT32 LowLevel; 1288167802Sjkim UINT32 CriticalLevel; 1289167802Sjkim 1290167802Sjkim} ACPI_TABLE_SBST; 1291167802Sjkim 1292167802Sjkim 1293167802Sjkim/******************************************************************************* 1294167802Sjkim * 1295167802Sjkim * SLIT - System Locality Distance Information Table 1296197104Sjkim * Version 1 1297167802Sjkim * 1298167802Sjkim ******************************************************************************/ 1299167802Sjkim 1300167802Sjkimtypedef struct acpi_table_slit 1301167802Sjkim{ 1302167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1303167802Sjkim UINT64 LocalityCount; 1304167802Sjkim UINT8 Entry[1]; /* Real size = localities^2 */ 1305167802Sjkim 1306167802Sjkim} ACPI_TABLE_SLIT; 1307167802Sjkim 1308167802Sjkim 1309167802Sjkim/******************************************************************************* 1310167802Sjkim * 1311167802Sjkim * SRAT - System Resource Affinity Table 1312197104Sjkim * Version 3 1313167802Sjkim * 1314167802Sjkim ******************************************************************************/ 1315167802Sjkim 1316167802Sjkimtypedef struct acpi_table_srat 1317167802Sjkim{ 1318167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1319167802Sjkim UINT32 TableRevision; /* Must be value '1' */ 1320167802Sjkim UINT64 Reserved; /* Reserved, must be zero */ 1321167802Sjkim 1322167802Sjkim} ACPI_TABLE_SRAT; 1323167802Sjkim 1324167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 1325167802Sjkim 1326167802Sjkimenum AcpiSratType 1327167802Sjkim{ 1328193267Sjkim ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1329193267Sjkim ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1330193267Sjkim ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 1331272444Sjkim ACPI_SRAT_TYPE_GICC_AFFINITY = 3, 1332272444Sjkim ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */ 1333167802Sjkim}; 1334167802Sjkim 1335193267Sjkim/* 1336272444Sjkim * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1337193267Sjkim */ 1338167802Sjkim 1339193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */ 1340193267Sjkim 1341167802Sjkimtypedef struct acpi_srat_cpu_affinity 1342167802Sjkim{ 1343167802Sjkim ACPI_SUBTABLE_HEADER Header; 1344167802Sjkim UINT8 ProximityDomainLo; 1345167802Sjkim UINT8 ApicId; 1346167802Sjkim UINT32 Flags; 1347167802Sjkim UINT8 LocalSapicEid; 1348167802Sjkim UINT8 ProximityDomainHi[3]; 1349272444Sjkim UINT32 ClockDomain; 1350167802Sjkim 1351167802Sjkim} ACPI_SRAT_CPU_AFFINITY; 1352167802Sjkim 1353197104Sjkim/* Flags */ 1354197104Sjkim 1355197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 1356197104Sjkim 1357197104Sjkim 1358193267Sjkim/* 1: Memory Affinity */ 1359167802Sjkim 1360167802Sjkimtypedef struct acpi_srat_mem_affinity 1361167802Sjkim{ 1362167802Sjkim ACPI_SUBTABLE_HEADER Header; 1363167802Sjkim UINT32 ProximityDomain; 1364167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1365167802Sjkim UINT64 BaseAddress; 1366167802Sjkim UINT64 Length; 1367193267Sjkim UINT32 Reserved1; 1368167802Sjkim UINT32 Flags; 1369193267Sjkim UINT64 Reserved2; /* Reserved, must be zero */ 1370167802Sjkim 1371167802Sjkim} ACPI_SRAT_MEM_AFFINITY; 1372167802Sjkim 1373167802Sjkim/* Flags */ 1374167802Sjkim 1375167802Sjkim#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1376167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1377167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1378167802Sjkim 1379167802Sjkim 1380197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 1381197104Sjkim 1382193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity 1383167802Sjkim{ 1384193267Sjkim ACPI_SUBTABLE_HEADER Header; 1385193267Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1386193267Sjkim UINT32 ProximityDomain; 1387193267Sjkim UINT32 ApicId; 1388193267Sjkim UINT32 Flags; 1389197104Sjkim UINT32 ClockDomain; 1390197104Sjkim UINT32 Reserved2; 1391167802Sjkim 1392193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY; 1393167802Sjkim 1394193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 1395193267Sjkim 1396193267Sjkim#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 1397193267Sjkim 1398193267Sjkim 1399272444Sjkim/* 3: GICC Affinity (ACPI 5.1) */ 1400272444Sjkim 1401272444Sjkimtypedef struct acpi_srat_gicc_affinity 1402272444Sjkim{ 1403272444Sjkim ACPI_SUBTABLE_HEADER Header; 1404272444Sjkim UINT32 ProximityDomain; 1405272444Sjkim UINT32 AcpiProcessorUid; 1406272444Sjkim UINT32 Flags; 1407272444Sjkim UINT32 ClockDomain; 1408272444Sjkim 1409272444Sjkim} ACPI_SRAT_GICC_AFFINITY; 1410272444Sjkim 1411272444Sjkim/* Flags for ACPI_SRAT_GICC_AFFINITY */ 1412272444Sjkim 1413272444Sjkim#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ 1414272444Sjkim 1415283092Sjkim 1416167802Sjkim/* Reset to default packing */ 1417167802Sjkim 141869450Smsmith#pragma pack() 141969450Smsmith 142069450Smsmith#endif /* __ACTBL1_H__ */ 1421