actbl1.h revision 298714
169450Smsmith/****************************************************************************** 269450Smsmith * 3167802Sjkim * Name: actbl1.h - Additional ACPI table definitions 469450Smsmith * 569450Smsmith *****************************************************************************/ 669450Smsmith 7217365Sjkim/* 8298714Sjkim * Copyright (C) 2000 - 2016, 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, 271298714Sjkim ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 272298714Sjkim ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 273228110Sjkim ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 274193267Sjkim}; 275193267Sjkim 276193267Sjkim/* Values for Instruction field above */ 277193267Sjkim 278193267Sjkimenum AcpiEinjInstructions 279193267Sjkim{ 280193267Sjkim ACPI_EINJ_READ_REGISTER = 0, 281193267Sjkim ACPI_EINJ_READ_REGISTER_VALUE = 1, 282193267Sjkim ACPI_EINJ_WRITE_REGISTER = 2, 283193267Sjkim ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 284193267Sjkim ACPI_EINJ_NOOP = 4, 285228110Sjkim ACPI_EINJ_FLUSH_CACHELINE = 5, 286228110Sjkim ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 287193267Sjkim}; 288193267Sjkim 289228110Sjkimtypedef struct acpi_einj_error_type_with_addr 290228110Sjkim{ 291228110Sjkim UINT32 ErrorType; 292228110Sjkim UINT32 VendorStructOffset; 293228110Sjkim UINT32 Flags; 294228110Sjkim UINT32 ApicId; 295228110Sjkim UINT64 Address; 296228110Sjkim UINT64 Range; 297228110Sjkim UINT32 PcieId; 298197104Sjkim 299228110Sjkim} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 300228110Sjkim 301228110Sjkimtypedef struct acpi_einj_vendor 302228110Sjkim{ 303228110Sjkim UINT32 Length; 304228110Sjkim UINT32 PcieId; 305228110Sjkim UINT16 VendorId; 306228110Sjkim UINT16 DeviceId; 307228110Sjkim UINT8 RevisionId; 308228110Sjkim UINT8 Reserved[3]; 309228110Sjkim 310228110Sjkim} ACPI_EINJ_VENDOR; 311228110Sjkim 312228110Sjkim 313193267Sjkim/* EINJ Trigger Error Action Table */ 314193267Sjkim 315193267Sjkimtypedef struct acpi_einj_trigger 316193267Sjkim{ 317193267Sjkim UINT32 HeaderSize; 318193267Sjkim UINT32 Revision; 319193267Sjkim UINT32 TableSize; 320193267Sjkim UINT32 EntryCount; 321193267Sjkim 322193267Sjkim} ACPI_EINJ_TRIGGER; 323193267Sjkim 324197104Sjkim/* Command status return values */ 325193267Sjkim 326197104Sjkimenum AcpiEinjCommandStatus 327197104Sjkim{ 328197104Sjkim ACPI_EINJ_SUCCESS = 0, 329197104Sjkim ACPI_EINJ_FAILURE = 1, 330197104Sjkim ACPI_EINJ_INVALID_ACCESS = 2, 331197104Sjkim ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 332197104Sjkim}; 333197104Sjkim 334197104Sjkim 335197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 336197104Sjkim 337197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 338197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 339197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 340197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 341197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 342197104Sjkim#define ACPI_EINJ_MEMORY_FATAL (1<<5) 343197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 344197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 345197104Sjkim#define ACPI_EINJ_PCIX_FATAL (1<<8) 346197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 347197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 348197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL (1<<11) 349228110Sjkim#define ACPI_EINJ_VENDOR_DEFINED (1<<31) 350197104Sjkim 351197104Sjkim 352193267Sjkim/******************************************************************************* 353193267Sjkim * 354197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0) 355197104Sjkim * Version 1 356193267Sjkim * 357193267Sjkim ******************************************************************************/ 358193267Sjkim 359193267Sjkimtypedef struct acpi_table_erst 360193267Sjkim{ 361193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 362193267Sjkim UINT32 HeaderLength; 363193267Sjkim UINT32 Reserved; 364193267Sjkim UINT32 Entries; 365193267Sjkim 366193267Sjkim} ACPI_TABLE_ERST; 367193267Sjkim 368197104Sjkim 369193267Sjkim/* ERST Serialization Entries (actions) */ 370193267Sjkim 371193267Sjkimtypedef struct acpi_erst_entry 372193267Sjkim{ 373193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 374193267Sjkim 375193267Sjkim} ACPI_ERST_ENTRY; 376193267Sjkim 377197104Sjkim/* Masks for Flags field above */ 378197104Sjkim 379197104Sjkim#define ACPI_ERST_PRESERVE (1) 380197104Sjkim 381193267Sjkim/* Values for Action field above */ 382193267Sjkim 383193267Sjkimenum AcpiErstActions 384193267Sjkim{ 385197104Sjkim ACPI_ERST_BEGIN_WRITE = 0, 386197104Sjkim ACPI_ERST_BEGIN_READ = 1, 387197104Sjkim ACPI_ERST_BEGIN_CLEAR = 2, 388197104Sjkim ACPI_ERST_END = 3, 389193267Sjkim ACPI_ERST_SET_RECORD_OFFSET = 4, 390193267Sjkim ACPI_ERST_EXECUTE_OPERATION = 5, 391193267Sjkim ACPI_ERST_CHECK_BUSY_STATUS = 6, 392193267Sjkim ACPI_ERST_GET_COMMAND_STATUS = 7, 393197104Sjkim ACPI_ERST_GET_RECORD_ID = 8, 394197104Sjkim ACPI_ERST_SET_RECORD_ID = 9, 395193267Sjkim ACPI_ERST_GET_RECORD_COUNT = 10, 396193267Sjkim ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 397193267Sjkim ACPI_ERST_NOT_USED = 12, 398193267Sjkim ACPI_ERST_GET_ERROR_RANGE = 13, 399193267Sjkim ACPI_ERST_GET_ERROR_LENGTH = 14, 400193267Sjkim ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 401298714Sjkim ACPI_ERST_EXECUTE_TIMINGS = 16, 402298714Sjkim ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 403193267Sjkim}; 404193267Sjkim 405193267Sjkim/* Values for Instruction field above */ 406193267Sjkim 407193267Sjkimenum AcpiErstInstructions 408193267Sjkim{ 409193267Sjkim ACPI_ERST_READ_REGISTER = 0, 410193267Sjkim ACPI_ERST_READ_REGISTER_VALUE = 1, 411193267Sjkim ACPI_ERST_WRITE_REGISTER = 2, 412193267Sjkim ACPI_ERST_WRITE_REGISTER_VALUE = 3, 413193267Sjkim ACPI_ERST_NOOP = 4, 414193267Sjkim ACPI_ERST_LOAD_VAR1 = 5, 415193267Sjkim ACPI_ERST_LOAD_VAR2 = 6, 416193267Sjkim ACPI_ERST_STORE_VAR1 = 7, 417193267Sjkim ACPI_ERST_ADD = 8, 418193267Sjkim ACPI_ERST_SUBTRACT = 9, 419193267Sjkim ACPI_ERST_ADD_VALUE = 10, 420193267Sjkim ACPI_ERST_SUBTRACT_VALUE = 11, 421193267Sjkim ACPI_ERST_STALL = 12, 422193267Sjkim ACPI_ERST_STALL_WHILE_TRUE = 13, 423193267Sjkim ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 424193267Sjkim ACPI_ERST_GOTO = 15, 425193267Sjkim ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 426193267Sjkim ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 427193267Sjkim ACPI_ERST_MOVE_DATA = 18, 428193267Sjkim ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 429193267Sjkim}; 430193267Sjkim 431197104Sjkim/* Command status return values */ 432193267Sjkim 433197104Sjkimenum AcpiErstCommandStatus 434197104Sjkim{ 435197104Sjkim ACPI_ERST_SUCESS = 0, 436197104Sjkim ACPI_ERST_NO_SPACE = 1, 437197104Sjkim ACPI_ERST_NOT_AVAILABLE = 2, 438197104Sjkim ACPI_ERST_FAILURE = 3, 439197104Sjkim ACPI_ERST_RECORD_EMPTY = 4, 440197104Sjkim ACPI_ERST_NOT_FOUND = 5, 441197104Sjkim ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 442197104Sjkim}; 443197104Sjkim 444197104Sjkim 445197104Sjkim/* Error Record Serialization Information */ 446197104Sjkim 447197104Sjkimtypedef struct acpi_erst_info 448197104Sjkim{ 449197104Sjkim UINT16 Signature; /* Should be "ER" */ 450197104Sjkim UINT8 Data[48]; 451197104Sjkim 452197104Sjkim} ACPI_ERST_INFO; 453197104Sjkim 454197104Sjkim 455193267Sjkim/******************************************************************************* 456193267Sjkim * 457197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0) 458197104Sjkim * Version 1 459193267Sjkim * 460193267Sjkim ******************************************************************************/ 461193267Sjkim 462193267Sjkimtypedef struct acpi_table_hest 463193267Sjkim{ 464193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 465193267Sjkim UINT32 ErrorSourceCount; 466193267Sjkim 467193267Sjkim} ACPI_TABLE_HEST; 468193267Sjkim 469193267Sjkim 470193267Sjkim/* HEST subtable header */ 471193267Sjkim 472193267Sjkimtypedef struct acpi_hest_header 473193267Sjkim{ 474193267Sjkim UINT16 Type; 475197104Sjkim UINT16 SourceId; 476193267Sjkim 477193267Sjkim} ACPI_HEST_HEADER; 478193267Sjkim 479193267Sjkim 480193267Sjkim/* Values for Type field above for subtables */ 481193267Sjkim 482193267Sjkimenum AcpiHestTypes 483193267Sjkim{ 484197104Sjkim ACPI_HEST_TYPE_IA32_CHECK = 0, 485197104Sjkim ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 486197104Sjkim ACPI_HEST_TYPE_IA32_NMI = 2, 487197104Sjkim ACPI_HEST_TYPE_NOT_USED3 = 3, 488197104Sjkim ACPI_HEST_TYPE_NOT_USED4 = 4, 489197104Sjkim ACPI_HEST_TYPE_NOT_USED5 = 5, 490197104Sjkim ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 491197104Sjkim ACPI_HEST_TYPE_AER_ENDPOINT = 7, 492197104Sjkim ACPI_HEST_TYPE_AER_BRIDGE = 8, 493197104Sjkim ACPI_HEST_TYPE_GENERIC_ERROR = 9, 494298714Sjkim ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 495298714Sjkim ACPI_HEST_TYPE_RESERVED = 11 /* 11 and greater are reserved */ 496193267Sjkim}; 497193267Sjkim 498193267Sjkim 499193267Sjkim/* 500197104Sjkim * HEST substructures contained in subtables 501193267Sjkim */ 502193267Sjkim 503197104Sjkim/* 504197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 505197104Sjkim * ACPI_HEST_IA_CORRECTED structures. 506197104Sjkim */ 507197104Sjkimtypedef struct acpi_hest_ia_error_bank 508193267Sjkim{ 509193267Sjkim UINT8 BankNumber; 510193267Sjkim UINT8 ClearStatusOnInit; 511193267Sjkim UINT8 StatusFormat; 512197104Sjkim UINT8 Reserved; 513193267Sjkim UINT32 ControlRegister; 514197104Sjkim UINT64 ControlData; 515193267Sjkim UINT32 StatusRegister; 516193267Sjkim UINT32 AddressRegister; 517193267Sjkim UINT32 MiscRegister; 518193267Sjkim 519197104Sjkim} ACPI_HEST_IA_ERROR_BANK; 520193267Sjkim 521193267Sjkim 522197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 523193267Sjkim 524193267Sjkimtypedef struct acpi_hest_aer_common 525193267Sjkim{ 526197104Sjkim UINT16 Reserved1; 527193267Sjkim UINT8 Flags; 528193267Sjkim UINT8 Enabled; 529197104Sjkim UINT32 RecordsToPreallocate; 530193267Sjkim UINT32 MaxSectionsPerRecord; 531272444Sjkim UINT32 Bus; /* Bus and Segment numbers */ 532193267Sjkim UINT16 Device; 533193267Sjkim UINT16 Function; 534193267Sjkim UINT16 DeviceControl; 535197104Sjkim UINT16 Reserved2; 536197104Sjkim UINT32 UncorrectableMask; 537197104Sjkim UINT32 UncorrectableSeverity; 538197104Sjkim UINT32 CorrectableMask; 539197104Sjkim UINT32 AdvancedCapabilities; 540193267Sjkim 541193267Sjkim} ACPI_HEST_AER_COMMON; 542193267Sjkim 543197104Sjkim/* Masks for HEST Flags fields */ 544193267Sjkim 545197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST (1) 546197104Sjkim#define ACPI_HEST_GLOBAL (1<<1) 547197104Sjkim 548272444Sjkim/* 549272444Sjkim * Macros to access the bus/segment numbers in Bus field above: 550272444Sjkim * Bus number is encoded in bits 7:0 551272444Sjkim * Segment number is encoded in bits 23:8 552272444Sjkim */ 553272444Sjkim#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 554272444Sjkim#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 555197104Sjkim 556272444Sjkim 557193267Sjkim/* Hardware Error Notification */ 558193267Sjkim 559193267Sjkimtypedef struct acpi_hest_notify 560193267Sjkim{ 561193267Sjkim UINT8 Type; 562193267Sjkim UINT8 Length; 563193267Sjkim UINT16 ConfigWriteEnable; 564193267Sjkim UINT32 PollInterval; 565193267Sjkim UINT32 Vector; 566193267Sjkim UINT32 PollingThresholdValue; 567193267Sjkim UINT32 PollingThresholdWindow; 568193267Sjkim UINT32 ErrorThresholdValue; 569193267Sjkim UINT32 ErrorThresholdWindow; 570193267Sjkim 571193267Sjkim} ACPI_HEST_NOTIFY; 572193267Sjkim 573193267Sjkim/* Values for Notify Type field above */ 574193267Sjkim 575193267Sjkimenum AcpiHestNotifyTypes 576193267Sjkim{ 577193267Sjkim ACPI_HEST_NOTIFY_POLLED = 0, 578193267Sjkim ACPI_HEST_NOTIFY_EXTERNAL = 1, 579193267Sjkim ACPI_HEST_NOTIFY_LOCAL = 2, 580193267Sjkim ACPI_HEST_NOTIFY_SCI = 3, 581193267Sjkim ACPI_HEST_NOTIFY_NMI = 4, 582240716Sjkim ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 583240716Sjkim ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 584298714Sjkim ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 585298714Sjkim ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 586298714Sjkim ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 587298714Sjkim ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 588298714Sjkim ACPI_HEST_NOTIFY_RESERVED = 11 /* 11 and greater are reserved */ 589193267Sjkim}; 590193267Sjkim 591197104Sjkim/* Values for ConfigWriteEnable bitfield above */ 592193267Sjkim 593197104Sjkim#define ACPI_HEST_TYPE (1) 594197104Sjkim#define ACPI_HEST_POLL_INTERVAL (1<<1) 595197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 596197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 597197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 598197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 599197104Sjkim 600197104Sjkim 601193267Sjkim/* 602193267Sjkim * HEST subtables 603193267Sjkim */ 604193267Sjkim 605197104Sjkim/* 0: IA32 Machine Check Exception */ 606193267Sjkim 607197104Sjkimtypedef struct acpi_hest_ia_machine_check 608193267Sjkim{ 609193267Sjkim ACPI_HEST_HEADER Header; 610197104Sjkim UINT16 Reserved1; 611193267Sjkim UINT8 Flags; 612197104Sjkim UINT8 Enabled; 613197104Sjkim UINT32 RecordsToPreallocate; 614193267Sjkim UINT32 MaxSectionsPerRecord; 615193267Sjkim UINT64 GlobalCapabilityData; 616193267Sjkim UINT64 GlobalControlData; 617193267Sjkim UINT8 NumHardwareBanks; 618197104Sjkim UINT8 Reserved3[7]; 619193267Sjkim 620197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK; 621193267Sjkim 622193267Sjkim 623197104Sjkim/* 1: IA32 Corrected Machine Check */ 624193267Sjkim 625197104Sjkimtypedef struct acpi_hest_ia_corrected 626193267Sjkim{ 627193267Sjkim ACPI_HEST_HEADER Header; 628197104Sjkim UINT16 Reserved1; 629193267Sjkim UINT8 Flags; 630193267Sjkim UINT8 Enabled; 631197104Sjkim UINT32 RecordsToPreallocate; 632193267Sjkim UINT32 MaxSectionsPerRecord; 633193267Sjkim ACPI_HEST_NOTIFY Notify; 634193267Sjkim UINT8 NumHardwareBanks; 635197104Sjkim UINT8 Reserved2[3]; 636193267Sjkim 637197104Sjkim} ACPI_HEST_IA_CORRECTED; 638193267Sjkim 639193267Sjkim 640197104Sjkim/* 2: IA32 Non-Maskable Interrupt */ 641193267Sjkim 642197104Sjkimtypedef struct acpi_hest_ia_nmi 643193267Sjkim{ 644193267Sjkim ACPI_HEST_HEADER Header; 645193267Sjkim UINT32 Reserved; 646197104Sjkim UINT32 RecordsToPreallocate; 647193267Sjkim UINT32 MaxSectionsPerRecord; 648193267Sjkim UINT32 MaxRawDataLength; 649193267Sjkim 650197104Sjkim} ACPI_HEST_IA_NMI; 651193267Sjkim 652193267Sjkim 653197104Sjkim/* 3,4,5: Not used */ 654193267Sjkim 655193267Sjkim/* 6: PCI Express Root Port AER */ 656193267Sjkim 657193267Sjkimtypedef struct acpi_hest_aer_root 658193267Sjkim{ 659193267Sjkim ACPI_HEST_HEADER Header; 660193267Sjkim ACPI_HEST_AER_COMMON Aer; 661193267Sjkim UINT32 RootErrorCommand; 662193267Sjkim 663193267Sjkim} ACPI_HEST_AER_ROOT; 664193267Sjkim 665193267Sjkim 666193267Sjkim/* 7: PCI Express AER (AER Endpoint) */ 667193267Sjkim 668193267Sjkimtypedef struct acpi_hest_aer 669193267Sjkim{ 670193267Sjkim ACPI_HEST_HEADER Header; 671193267Sjkim ACPI_HEST_AER_COMMON Aer; 672193267Sjkim 673193267Sjkim} ACPI_HEST_AER; 674193267Sjkim 675193267Sjkim 676193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */ 677193267Sjkim 678193267Sjkimtypedef struct acpi_hest_aer_bridge 679193267Sjkim{ 680193267Sjkim ACPI_HEST_HEADER Header; 681193267Sjkim ACPI_HEST_AER_COMMON Aer; 682197104Sjkim UINT32 UncorrectableMask2; 683197104Sjkim UINT32 UncorrectableSeverity2; 684197104Sjkim UINT32 AdvancedCapabilities2; 685193267Sjkim 686193267Sjkim} ACPI_HEST_AER_BRIDGE; 687193267Sjkim 688193267Sjkim 689193267Sjkim/* 9: Generic Hardware Error Source */ 690193267Sjkim 691193267Sjkimtypedef struct acpi_hest_generic 692193267Sjkim{ 693193267Sjkim ACPI_HEST_HEADER Header; 694193267Sjkim UINT16 RelatedSourceId; 695197104Sjkim UINT8 Reserved; 696193267Sjkim UINT8 Enabled; 697197104Sjkim UINT32 RecordsToPreallocate; 698193267Sjkim UINT32 MaxSectionsPerRecord; 699193267Sjkim UINT32 MaxRawDataLength; 700193267Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 701193267Sjkim ACPI_HEST_NOTIFY Notify; 702197104Sjkim UINT32 ErrorBlockLength; 703193267Sjkim 704193267Sjkim} ACPI_HEST_GENERIC; 705193267Sjkim 706193267Sjkim 707298714Sjkim/* 10: Generic Hardware Error Source, version 2 */ 708298714Sjkim 709298714Sjkimtypedef struct acpi_hest_generic_v2 710298714Sjkim{ 711298714Sjkim ACPI_HEST_HEADER Header; 712298714Sjkim UINT16 RelatedSourceId; 713298714Sjkim UINT8 Reserved; 714298714Sjkim UINT8 Enabled; 715298714Sjkim UINT32 RecordsToPreallocate; 716298714Sjkim UINT32 MaxSectionsPerRecord; 717298714Sjkim UINT32 MaxRawDataLength; 718298714Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 719298714Sjkim ACPI_HEST_NOTIFY Notify; 720298714Sjkim UINT32 ErrorBlockLength; 721298714Sjkim ACPI_GENERIC_ADDRESS ReadAckRegister; 722298714Sjkim UINT64 ReadAckPreserve; 723298714Sjkim UINT64 ReadAckWrite; 724298714Sjkim 725298714Sjkim} ACPI_HEST_GENERIC_V2; 726298714Sjkim 727298714Sjkim 728197104Sjkim/* Generic Error Status block */ 729167802Sjkim 730197104Sjkimtypedef struct acpi_hest_generic_status 731167802Sjkim{ 732197104Sjkim UINT32 BlockStatus; 733197104Sjkim UINT32 RawDataOffset; 734197104Sjkim UINT32 RawDataLength; 735197104Sjkim UINT32 DataLength; 736197104Sjkim UINT32 ErrorSeverity; 737167802Sjkim 738197104Sjkim} ACPI_HEST_GENERIC_STATUS; 739167802Sjkim 740197104Sjkim/* Values for BlockStatus flags above */ 741167802Sjkim 742197104Sjkim#define ACPI_HEST_UNCORRECTABLE (1) 743197104Sjkim#define ACPI_HEST_CORRECTABLE (1<<1) 744197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 745197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 746197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 747167802Sjkim 748167802Sjkim 749197104Sjkim/* Generic Error Data entry */ 750167802Sjkim 751197104Sjkimtypedef struct acpi_hest_generic_data 752193267Sjkim{ 753197104Sjkim UINT8 SectionType[16]; 754197104Sjkim UINT32 ErrorSeverity; 755197104Sjkim UINT16 Revision; 756197104Sjkim UINT8 ValidationBits; 757193267Sjkim UINT8 Flags; 758197104Sjkim UINT32 ErrorDataLength; 759197104Sjkim UINT8 FruId[16]; 760197104Sjkim UINT8 FruText[20]; 761193267Sjkim 762197104Sjkim} ACPI_HEST_GENERIC_DATA; 763193267Sjkim 764298714Sjkim/* Extension for revision 0x0300 */ 765193267Sjkim 766298714Sjkimtypedef struct acpi_hest_generic_data_v300 767298714Sjkim{ 768298714Sjkim UINT8 SectionType[16]; 769298714Sjkim UINT32 ErrorSeverity; 770298714Sjkim UINT16 Revision; 771298714Sjkim UINT8 ValidationBits; 772298714Sjkim UINT8 Flags; 773298714Sjkim UINT32 ErrorDataLength; 774298714Sjkim UINT8 FruId[16]; 775298714Sjkim UINT8 FruText[20]; 776298714Sjkim UINT64 TimeStamp; 777298714Sjkim 778298714Sjkim} ACPI_HEST_GENERIC_DATA_V300; 779298714Sjkim 780298714Sjkim/* Values for ErrorSeverity above */ 781298714Sjkim 782298714Sjkim#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 783298714Sjkim#define ACPI_HEST_GEN_ERROR_FATAL 1 784298714Sjkim#define ACPI_HEST_GEN_ERROR_CORRECTED 2 785298714Sjkim#define ACPI_HEST_GEN_ERROR_NONE 3 786298714Sjkim 787298714Sjkim/* Flags for ValidationBits above */ 788298714Sjkim 789298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_ID (1) 790298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 791298714Sjkim#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 792298714Sjkim 793298714Sjkim 794193267Sjkim/******************************************************************************* 795193267Sjkim * 796167802Sjkim * MADT - Multiple APIC Description Table 797197104Sjkim * Version 3 798167802Sjkim * 799167802Sjkim ******************************************************************************/ 800167802Sjkim 801167802Sjkimtypedef struct acpi_table_madt 802167802Sjkim{ 803167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 804167802Sjkim UINT32 Address; /* Physical address of local APIC */ 805167802Sjkim UINT32 Flags; 806167802Sjkim 807167802Sjkim} ACPI_TABLE_MADT; 808167802Sjkim 809197104Sjkim/* Masks for Flags field above */ 810167802Sjkim 811197104Sjkim#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 812167802Sjkim 813167802Sjkim/* Values for PCATCompat flag */ 814167802Sjkim 815167802Sjkim#define ACPI_MADT_DUAL_PIC 0 816167802Sjkim#define ACPI_MADT_MULTIPLE_APIC 1 817167802Sjkim 818167802Sjkim 819197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 820167802Sjkim 821167802Sjkimenum AcpiMadtType 822167802Sjkim{ 823272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC = 0, 824272444Sjkim ACPI_MADT_TYPE_IO_APIC = 1, 825272444Sjkim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 826272444Sjkim ACPI_MADT_TYPE_NMI_SOURCE = 3, 827272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 828272444Sjkim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 829272444Sjkim ACPI_MADT_TYPE_IO_SAPIC = 6, 830272444Sjkim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 831272444Sjkim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 832272444Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 833272444Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 834272444Sjkim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 835272444Sjkim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 836272444Sjkim ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 837272444Sjkim ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 838283092Sjkim ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 839283092Sjkim ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ 840167802Sjkim}; 841167802Sjkim 842167802Sjkim 843167802Sjkim/* 844272444Sjkim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 845167802Sjkim */ 846167802Sjkim 847167802Sjkim/* 0: Processor Local APIC */ 848167802Sjkim 849167802Sjkimtypedef struct acpi_madt_local_apic 850167802Sjkim{ 851167802Sjkim ACPI_SUBTABLE_HEADER Header; 852167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 853167802Sjkim UINT8 Id; /* Processor's local APIC id */ 854167802Sjkim UINT32 LapicFlags; 855167802Sjkim 856167802Sjkim} ACPI_MADT_LOCAL_APIC; 857167802Sjkim 858197104Sjkim 859167802Sjkim/* 1: IO APIC */ 860167802Sjkim 861167802Sjkimtypedef struct acpi_madt_io_apic 862167802Sjkim{ 863167802Sjkim ACPI_SUBTABLE_HEADER Header; 864167802Sjkim UINT8 Id; /* I/O APIC ID */ 865167802Sjkim UINT8 Reserved; /* Reserved - must be zero */ 866167802Sjkim UINT32 Address; /* APIC physical address */ 867167802Sjkim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 868167802Sjkim 869167802Sjkim} ACPI_MADT_IO_APIC; 870167802Sjkim 871197104Sjkim 872167802Sjkim/* 2: Interrupt Override */ 873167802Sjkim 874167802Sjkimtypedef struct acpi_madt_interrupt_override 875167802Sjkim{ 876167802Sjkim ACPI_SUBTABLE_HEADER Header; 877167802Sjkim UINT8 Bus; /* 0 - ISA */ 878167802Sjkim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 879167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 880167802Sjkim UINT16 IntiFlags; 881167802Sjkim 882167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE; 883167802Sjkim 884197104Sjkim 885167802Sjkim/* 3: NMI Source */ 886167802Sjkim 887167802Sjkimtypedef struct acpi_madt_nmi_source 888167802Sjkim{ 889167802Sjkim ACPI_SUBTABLE_HEADER Header; 890167802Sjkim UINT16 IntiFlags; 891167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 892167802Sjkim 893167802Sjkim} ACPI_MADT_NMI_SOURCE; 894167802Sjkim 895197104Sjkim 896167802Sjkim/* 4: Local APIC NMI */ 897167802Sjkim 898167802Sjkimtypedef struct acpi_madt_local_apic_nmi 899167802Sjkim{ 900167802Sjkim ACPI_SUBTABLE_HEADER Header; 901167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 902167802Sjkim UINT16 IntiFlags; 903167802Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 904167802Sjkim 905167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI; 906167802Sjkim 907197104Sjkim 908167802Sjkim/* 5: Address Override */ 909167802Sjkim 910167802Sjkimtypedef struct acpi_madt_local_apic_override 911167802Sjkim{ 912167802Sjkim ACPI_SUBTABLE_HEADER Header; 913167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 914167802Sjkim UINT64 Address; /* APIC physical address */ 915167802Sjkim 916167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE; 917167802Sjkim 918197104Sjkim 919167802Sjkim/* 6: I/O Sapic */ 920167802Sjkim 921167802Sjkimtypedef struct acpi_madt_io_sapic 922167802Sjkim{ 923167802Sjkim ACPI_SUBTABLE_HEADER Header; 924167802Sjkim UINT8 Id; /* I/O SAPIC ID */ 925167802Sjkim UINT8 Reserved; /* Reserved, must be zero */ 926167802Sjkim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 927167802Sjkim UINT64 Address; /* SAPIC physical address */ 928167802Sjkim 929167802Sjkim} ACPI_MADT_IO_SAPIC; 930167802Sjkim 931197104Sjkim 932167802Sjkim/* 7: Local Sapic */ 933167802Sjkim 934167802Sjkimtypedef struct acpi_madt_local_sapic 935167802Sjkim{ 936167802Sjkim ACPI_SUBTABLE_HEADER Header; 937167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 938167802Sjkim UINT8 Id; /* SAPIC ID */ 939167802Sjkim UINT8 Eid; /* SAPIC EID */ 940167802Sjkim UINT8 Reserved[3]; /* Reserved, must be zero */ 941167802Sjkim UINT32 LapicFlags; 942167802Sjkim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 943167802Sjkim char UidString[1]; /* String UID - ACPI 3.0 */ 944167802Sjkim 945167802Sjkim} ACPI_MADT_LOCAL_SAPIC; 946167802Sjkim 947197104Sjkim 948167802Sjkim/* 8: Platform Interrupt Source */ 949167802Sjkim 950167802Sjkimtypedef struct acpi_madt_interrupt_source 951167802Sjkim{ 952167802Sjkim ACPI_SUBTABLE_HEADER Header; 953167802Sjkim UINT16 IntiFlags; 954167802Sjkim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 955167802Sjkim UINT8 Id; /* Processor ID */ 956167802Sjkim UINT8 Eid; /* Processor EID */ 957167802Sjkim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 958167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 959167802Sjkim UINT32 Flags; /* Interrupt Source Flags */ 960167802Sjkim 961167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE; 962167802Sjkim 963197104Sjkim/* Masks for Flags field above */ 964167802Sjkim 965167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE (1) 966167802Sjkim 967167802Sjkim 968197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */ 969197104Sjkim 970193267Sjkimtypedef struct acpi_madt_local_x2apic 971193267Sjkim{ 972193267Sjkim ACPI_SUBTABLE_HEADER Header; 973193267Sjkim UINT16 Reserved; /* Reserved - must be zero */ 974193267Sjkim UINT32 LocalApicId; /* Processor x2APIC ID */ 975193267Sjkim UINT32 LapicFlags; 976193267Sjkim UINT32 Uid; /* ACPI processor UID */ 977193267Sjkim 978193267Sjkim} ACPI_MADT_LOCAL_X2APIC; 979193267Sjkim 980193267Sjkim 981197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */ 982197104Sjkim 983193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi 984193267Sjkim{ 985193267Sjkim ACPI_SUBTABLE_HEADER Header; 986193267Sjkim UINT16 IntiFlags; 987193267Sjkim UINT32 Uid; /* ACPI processor UID */ 988193267Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 989193267Sjkim UINT8 Reserved[3]; /* Reserved - must be zero */ 990193267Sjkim 991193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI; 992193267Sjkim 993193267Sjkim 994283092Sjkim/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ 995228110Sjkim 996228110Sjkimtypedef struct acpi_madt_generic_interrupt 997228110Sjkim{ 998228110Sjkim ACPI_SUBTABLE_HEADER Header; 999228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1000272444Sjkim UINT32 CpuInterfaceNumber; 1001228110Sjkim UINT32 Uid; 1002228110Sjkim UINT32 Flags; 1003228110Sjkim UINT32 ParkingVersion; 1004228110Sjkim UINT32 PerformanceInterrupt; 1005228110Sjkim UINT64 ParkedAddress; 1006228110Sjkim UINT64 BaseAddress; 1007272444Sjkim UINT64 GicvBaseAddress; 1008272444Sjkim UINT64 GichBaseAddress; 1009272444Sjkim UINT32 VgicInterrupt; 1010272444Sjkim UINT64 GicrBaseAddress; 1011272444Sjkim UINT64 ArmMpidr; 1012283092Sjkim UINT8 EfficiencyClass; 1013283092Sjkim UINT8 Reserved2[3]; 1014228110Sjkim 1015228110Sjkim} ACPI_MADT_GENERIC_INTERRUPT; 1016228110Sjkim 1017272444Sjkim/* Masks for Flags field above */ 1018228110Sjkim 1019272444Sjkim/* ACPI_MADT_ENABLED (1) Processor is usable if set */ 1020272444Sjkim#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 1021272444Sjkim#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 1022272444Sjkim 1023272444Sjkim 1024283092Sjkim/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 1025228110Sjkim 1026228110Sjkimtypedef struct acpi_madt_generic_distributor 1027228110Sjkim{ 1028228110Sjkim ACPI_SUBTABLE_HEADER Header; 1029228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1030228110Sjkim UINT32 GicId; 1031228110Sjkim UINT64 BaseAddress; 1032228110Sjkim UINT32 GlobalIrqBase; 1033283092Sjkim UINT8 Version; 1034284583Sjkim UINT8 Reserved2[3]; /* Reserved - must be zero */ 1035228110Sjkim 1036228110Sjkim} ACPI_MADT_GENERIC_DISTRIBUTOR; 1037228110Sjkim 1038284583Sjkim/* Values for Version field above */ 1039228110Sjkim 1040284583Sjkimenum AcpiMadtGicVersion 1041284583Sjkim{ 1042284583Sjkim ACPI_MADT_GIC_VERSION_NONE = 0, 1043284583Sjkim ACPI_MADT_GIC_VERSION_V1 = 1, 1044284583Sjkim ACPI_MADT_GIC_VERSION_V2 = 2, 1045284583Sjkim ACPI_MADT_GIC_VERSION_V3 = 3, 1046284583Sjkim ACPI_MADT_GIC_VERSION_V4 = 4, 1047284583Sjkim ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1048284583Sjkim}; 1049284583Sjkim 1050284583Sjkim 1051272444Sjkim/* 13: Generic MSI Frame (ACPI 5.1) */ 1052272444Sjkim 1053272444Sjkimtypedef struct acpi_madt_generic_msi_frame 1054272444Sjkim{ 1055272444Sjkim ACPI_SUBTABLE_HEADER Header; 1056272444Sjkim UINT16 Reserved; /* Reserved - must be zero */ 1057272444Sjkim UINT32 MsiFrameId; 1058272444Sjkim UINT64 BaseAddress; 1059272444Sjkim UINT32 Flags; 1060272444Sjkim UINT16 SpiCount; 1061272444Sjkim UINT16 SpiBase; 1062272444Sjkim 1063272444Sjkim} ACPI_MADT_GENERIC_MSI_FRAME; 1064272444Sjkim 1065272444Sjkim/* Masks for Flags field above */ 1066272444Sjkim 1067272444Sjkim#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1068272444Sjkim 1069272444Sjkim 1070272444Sjkim/* 14: Generic Redistributor (ACPI 5.1) */ 1071272444Sjkim 1072272444Sjkimtypedef struct acpi_madt_generic_redistributor 1073272444Sjkim{ 1074272444Sjkim ACPI_SUBTABLE_HEADER Header; 1075272444Sjkim UINT16 Reserved; /* reserved - must be zero */ 1076272444Sjkim UINT64 BaseAddress; 1077272444Sjkim UINT32 Length; 1078272444Sjkim 1079272444Sjkim} ACPI_MADT_GENERIC_REDISTRIBUTOR; 1080272444Sjkim 1081272444Sjkim 1082283092Sjkim/* 15: Generic Translator (ACPI 6.0) */ 1083283092Sjkim 1084283092Sjkimtypedef struct acpi_madt_generic_translator 1085283092Sjkim{ 1086283092Sjkim ACPI_SUBTABLE_HEADER Header; 1087283092Sjkim UINT16 Reserved; /* reserved - must be zero */ 1088283092Sjkim UINT32 TranslationId; 1089283092Sjkim UINT64 BaseAddress; 1090283092Sjkim UINT32 Reserved2; 1091283092Sjkim 1092283092Sjkim} ACPI_MADT_GENERIC_TRANSLATOR; 1093283092Sjkim 1094283092Sjkim 1095167802Sjkim/* 1096167802Sjkim * Common flags fields for MADT subtables 1097167802Sjkim */ 1098167802Sjkim 1099272444Sjkim/* MADT Local APIC flags */ 1100167802Sjkim 1101167802Sjkim#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1102167802Sjkim 1103167802Sjkim/* MADT MPS INTI flags (IntiFlags) */ 1104167802Sjkim 1105167802Sjkim#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1106167802Sjkim#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1107167802Sjkim 1108167802Sjkim/* Values for MPS INTI flags */ 1109167802Sjkim 1110167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS 0 1111167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1112167802Sjkim#define ACPI_MADT_POLARITY_RESERVED 2 1113167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1114167802Sjkim 1115167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS (0) 1116167802Sjkim#define ACPI_MADT_TRIGGER_EDGE (1<<2) 1117167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1118167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1119167802Sjkim 1120167802Sjkim 1121167802Sjkim/******************************************************************************* 1122167802Sjkim * 1123197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1124197104Sjkim * Version 1 1125167802Sjkim * 1126167802Sjkim ******************************************************************************/ 1127167802Sjkim 1128197104Sjkimtypedef struct acpi_table_msct 1129167802Sjkim{ 1130167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1131197104Sjkim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1132197104Sjkim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1133197104Sjkim UINT32 MaxClockDomains; /* Max number of clock domains */ 1134197104Sjkim UINT64 MaxAddress; /* Max physical address in system */ 1135167802Sjkim 1136197104Sjkim} ACPI_TABLE_MSCT; 1137167802Sjkim 1138167802Sjkim 1139197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */ 1140167802Sjkim 1141197104Sjkimtypedef struct acpi_msct_proximity 1142167802Sjkim{ 1143197104Sjkim UINT8 Revision; 1144197104Sjkim UINT8 Length; 1145197104Sjkim UINT32 RangeStart; /* Start of domain range */ 1146197104Sjkim UINT32 RangeEnd; /* End of domain range */ 1147197104Sjkim UINT32 ProcessorCapacity; 1148197104Sjkim UINT64 MemoryCapacity; /* In bytes */ 1149167802Sjkim 1150197104Sjkim} ACPI_MSCT_PROXIMITY; 1151167802Sjkim 1152167802Sjkim 1153167802Sjkim/******************************************************************************* 1154167802Sjkim * 1155298714Sjkim * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1156283092Sjkim * Version 1 1157283092Sjkim * 1158283092Sjkim ******************************************************************************/ 1159283092Sjkim 1160283092Sjkimtypedef struct acpi_table_nfit 1161283092Sjkim{ 1162283092Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1163283092Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1164283092Sjkim 1165283092Sjkim} ACPI_TABLE_NFIT; 1166283092Sjkim 1167283092Sjkim/* Subtable header for NFIT */ 1168283092Sjkim 1169283092Sjkimtypedef struct acpi_nfit_header 1170283092Sjkim{ 1171283092Sjkim UINT16 Type; 1172283092Sjkim UINT16 Length; 1173283092Sjkim 1174283092Sjkim} ACPI_NFIT_HEADER; 1175283092Sjkim 1176283092Sjkim 1177283092Sjkim/* Values for subtable type in ACPI_NFIT_HEADER */ 1178283092Sjkim 1179283092Sjkimenum AcpiNfitType 1180283092Sjkim{ 1181283092Sjkim ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1182283092Sjkim ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1183283092Sjkim ACPI_NFIT_TYPE_INTERLEAVE = 2, 1184283092Sjkim ACPI_NFIT_TYPE_SMBIOS = 3, 1185283092Sjkim ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1186283092Sjkim ACPI_NFIT_TYPE_DATA_REGION = 5, 1187283092Sjkim ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1188283092Sjkim ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ 1189283092Sjkim}; 1190283092Sjkim 1191283092Sjkim/* 1192283092Sjkim * NFIT Subtables 1193283092Sjkim */ 1194283092Sjkim 1195283092Sjkim/* 0: System Physical Address Range Structure */ 1196283092Sjkim 1197283092Sjkimtypedef struct acpi_nfit_system_address 1198283092Sjkim{ 1199283092Sjkim ACPI_NFIT_HEADER Header; 1200283092Sjkim UINT16 RangeIndex; 1201283092Sjkim UINT16 Flags; 1202283092Sjkim UINT32 Reserved; /* Reseved, must be zero */ 1203283092Sjkim UINT32 ProximityDomain; 1204283092Sjkim UINT8 RangeGuid[16]; 1205283092Sjkim UINT64 Address; 1206283092Sjkim UINT64 Length; 1207283092Sjkim UINT64 MemoryMapping; 1208283092Sjkim 1209283092Sjkim} ACPI_NFIT_SYSTEM_ADDRESS; 1210283092Sjkim 1211283092Sjkim/* Flags */ 1212283092Sjkim 1213283092Sjkim#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1214283092Sjkim#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1215283092Sjkim 1216283092Sjkim/* Range Type GUIDs appear in the include/acuuid.h file */ 1217283092Sjkim 1218283092Sjkim 1219283092Sjkim/* 1: Memory Device to System Address Range Map Structure */ 1220283092Sjkim 1221283092Sjkimtypedef struct acpi_nfit_memory_map 1222283092Sjkim{ 1223283092Sjkim ACPI_NFIT_HEADER Header; 1224283092Sjkim UINT32 DeviceHandle; 1225283092Sjkim UINT16 PhysicalId; 1226283092Sjkim UINT16 RegionId; 1227283092Sjkim UINT16 RangeIndex; 1228283092Sjkim UINT16 RegionIndex; 1229283092Sjkim UINT64 RegionSize; 1230283092Sjkim UINT64 RegionOffset; 1231283092Sjkim UINT64 Address; 1232283092Sjkim UINT16 InterleaveIndex; 1233283092Sjkim UINT16 InterleaveWays; 1234283092Sjkim UINT16 Flags; 1235283092Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1236283092Sjkim 1237283092Sjkim} ACPI_NFIT_MEMORY_MAP; 1238283092Sjkim 1239283092Sjkim/* Flags */ 1240283092Sjkim 1241283092Sjkim#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1242283092Sjkim#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1243283092Sjkim#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1244298714Sjkim#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1245283092Sjkim#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1246283092Sjkim#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1247298714Sjkim#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1248283092Sjkim 1249283092Sjkim 1250283092Sjkim/* 2: Interleave Structure */ 1251283092Sjkim 1252283092Sjkimtypedef struct acpi_nfit_interleave 1253283092Sjkim{ 1254283092Sjkim ACPI_NFIT_HEADER Header; 1255283092Sjkim UINT16 InterleaveIndex; 1256283092Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1257283092Sjkim UINT32 LineCount; 1258283092Sjkim UINT32 LineSize; 1259283092Sjkim UINT32 LineOffset[1]; /* Variable length */ 1260283092Sjkim 1261283092Sjkim} ACPI_NFIT_INTERLEAVE; 1262283092Sjkim 1263283092Sjkim 1264283092Sjkim/* 3: SMBIOS Management Information Structure */ 1265283092Sjkim 1266283092Sjkimtypedef struct acpi_nfit_smbios 1267283092Sjkim{ 1268283092Sjkim ACPI_NFIT_HEADER Header; 1269283092Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1270283092Sjkim UINT8 Data[1]; /* Variable length */ 1271283092Sjkim 1272283092Sjkim} ACPI_NFIT_SMBIOS; 1273283092Sjkim 1274283092Sjkim 1275283092Sjkim/* 4: NVDIMM Control Region Structure */ 1276283092Sjkim 1277283092Sjkimtypedef struct acpi_nfit_control_region 1278283092Sjkim{ 1279283092Sjkim ACPI_NFIT_HEADER Header; 1280283092Sjkim UINT16 RegionIndex; 1281283092Sjkim UINT16 VendorId; 1282283092Sjkim UINT16 DeviceId; 1283283092Sjkim UINT16 RevisionId; 1284283092Sjkim UINT16 SubsystemVendorId; 1285283092Sjkim UINT16 SubsystemDeviceId; 1286283092Sjkim UINT16 SubsystemRevisionId; 1287298714Sjkim UINT8 ValidFields; 1288298714Sjkim UINT8 ManufacturingLocation; 1289298714Sjkim UINT16 ManufacturingDate; 1290298714Sjkim UINT8 Reserved[2]; /* Reserved, must be zero */ 1291283092Sjkim UINT32 SerialNumber; 1292283092Sjkim UINT16 Code; 1293283092Sjkim UINT16 Windows; 1294283092Sjkim UINT64 WindowSize; 1295283092Sjkim UINT64 CommandOffset; 1296283092Sjkim UINT64 CommandSize; 1297283092Sjkim UINT64 StatusOffset; 1298283092Sjkim UINT64 StatusSize; 1299283092Sjkim UINT16 Flags; 1300283092Sjkim UINT8 Reserved1[6]; /* Reserved, must be zero */ 1301283092Sjkim 1302283092Sjkim} ACPI_NFIT_CONTROL_REGION; 1303283092Sjkim 1304283092Sjkim/* Flags */ 1305283092Sjkim 1306298714Sjkim#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 1307283092Sjkim 1308298714Sjkim/* ValidFields bits */ 1309283092Sjkim 1310298714Sjkim#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 1311298714Sjkim 1312298714Sjkim 1313283092Sjkim/* 5: NVDIMM Block Data Window Region Structure */ 1314283092Sjkim 1315283092Sjkimtypedef struct acpi_nfit_data_region 1316283092Sjkim{ 1317283092Sjkim ACPI_NFIT_HEADER Header; 1318283092Sjkim UINT16 RegionIndex; 1319283092Sjkim UINT16 Windows; 1320283092Sjkim UINT64 Offset; 1321283092Sjkim UINT64 Size; 1322283092Sjkim UINT64 Capacity; 1323283092Sjkim UINT64 StartAddress; 1324283092Sjkim 1325283092Sjkim} ACPI_NFIT_DATA_REGION; 1326283092Sjkim 1327283092Sjkim 1328283092Sjkim/* 6: Flush Hint Address Structure */ 1329283092Sjkim 1330283092Sjkimtypedef struct acpi_nfit_flush_address 1331283092Sjkim{ 1332283092Sjkim ACPI_NFIT_HEADER Header; 1333283092Sjkim UINT32 DeviceHandle; 1334283092Sjkim UINT16 HintCount; 1335283092Sjkim UINT8 Reserved[6]; /* Reserved, must be zero */ 1336283092Sjkim UINT64 HintAddress[1]; /* Variable length */ 1337283092Sjkim 1338283092Sjkim} ACPI_NFIT_FLUSH_ADDRESS; 1339283092Sjkim 1340283092Sjkim 1341283092Sjkim/******************************************************************************* 1342283092Sjkim * 1343167802Sjkim * SBST - Smart Battery Specification Table 1344197104Sjkim * Version 1 1345167802Sjkim * 1346167802Sjkim ******************************************************************************/ 1347167802Sjkim 1348167802Sjkimtypedef struct acpi_table_sbst 1349167802Sjkim{ 1350167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1351167802Sjkim UINT32 WarningLevel; 1352167802Sjkim UINT32 LowLevel; 1353167802Sjkim UINT32 CriticalLevel; 1354167802Sjkim 1355167802Sjkim} ACPI_TABLE_SBST; 1356167802Sjkim 1357167802Sjkim 1358167802Sjkim/******************************************************************************* 1359167802Sjkim * 1360167802Sjkim * SLIT - System Locality Distance Information Table 1361197104Sjkim * Version 1 1362167802Sjkim * 1363167802Sjkim ******************************************************************************/ 1364167802Sjkim 1365167802Sjkimtypedef struct acpi_table_slit 1366167802Sjkim{ 1367167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1368167802Sjkim UINT64 LocalityCount; 1369167802Sjkim UINT8 Entry[1]; /* Real size = localities^2 */ 1370167802Sjkim 1371167802Sjkim} ACPI_TABLE_SLIT; 1372167802Sjkim 1373167802Sjkim 1374167802Sjkim/******************************************************************************* 1375167802Sjkim * 1376167802Sjkim * SRAT - System Resource Affinity Table 1377197104Sjkim * Version 3 1378167802Sjkim * 1379167802Sjkim ******************************************************************************/ 1380167802Sjkim 1381167802Sjkimtypedef struct acpi_table_srat 1382167802Sjkim{ 1383167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1384167802Sjkim UINT32 TableRevision; /* Must be value '1' */ 1385167802Sjkim UINT64 Reserved; /* Reserved, must be zero */ 1386167802Sjkim 1387167802Sjkim} ACPI_TABLE_SRAT; 1388167802Sjkim 1389167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 1390167802Sjkim 1391167802Sjkimenum AcpiSratType 1392167802Sjkim{ 1393193267Sjkim ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1394193267Sjkim ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1395193267Sjkim ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 1396272444Sjkim ACPI_SRAT_TYPE_GICC_AFFINITY = 3, 1397272444Sjkim ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */ 1398167802Sjkim}; 1399167802Sjkim 1400193267Sjkim/* 1401272444Sjkim * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1402193267Sjkim */ 1403167802Sjkim 1404193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */ 1405193267Sjkim 1406167802Sjkimtypedef struct acpi_srat_cpu_affinity 1407167802Sjkim{ 1408167802Sjkim ACPI_SUBTABLE_HEADER Header; 1409167802Sjkim UINT8 ProximityDomainLo; 1410167802Sjkim UINT8 ApicId; 1411167802Sjkim UINT32 Flags; 1412167802Sjkim UINT8 LocalSapicEid; 1413167802Sjkim UINT8 ProximityDomainHi[3]; 1414272444Sjkim UINT32 ClockDomain; 1415167802Sjkim 1416167802Sjkim} ACPI_SRAT_CPU_AFFINITY; 1417167802Sjkim 1418197104Sjkim/* Flags */ 1419197104Sjkim 1420197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 1421197104Sjkim 1422197104Sjkim 1423193267Sjkim/* 1: Memory Affinity */ 1424167802Sjkim 1425167802Sjkimtypedef struct acpi_srat_mem_affinity 1426167802Sjkim{ 1427167802Sjkim ACPI_SUBTABLE_HEADER Header; 1428167802Sjkim UINT32 ProximityDomain; 1429167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1430167802Sjkim UINT64 BaseAddress; 1431167802Sjkim UINT64 Length; 1432193267Sjkim UINT32 Reserved1; 1433167802Sjkim UINT32 Flags; 1434193267Sjkim UINT64 Reserved2; /* Reserved, must be zero */ 1435167802Sjkim 1436167802Sjkim} ACPI_SRAT_MEM_AFFINITY; 1437167802Sjkim 1438167802Sjkim/* Flags */ 1439167802Sjkim 1440167802Sjkim#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1441167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1442167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1443167802Sjkim 1444167802Sjkim 1445197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 1446197104Sjkim 1447193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity 1448167802Sjkim{ 1449193267Sjkim ACPI_SUBTABLE_HEADER Header; 1450193267Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1451193267Sjkim UINT32 ProximityDomain; 1452193267Sjkim UINT32 ApicId; 1453193267Sjkim UINT32 Flags; 1454197104Sjkim UINT32 ClockDomain; 1455197104Sjkim UINT32 Reserved2; 1456167802Sjkim 1457193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY; 1458167802Sjkim 1459193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 1460193267Sjkim 1461193267Sjkim#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 1462193267Sjkim 1463193267Sjkim 1464272444Sjkim/* 3: GICC Affinity (ACPI 5.1) */ 1465272444Sjkim 1466272444Sjkimtypedef struct acpi_srat_gicc_affinity 1467272444Sjkim{ 1468272444Sjkim ACPI_SUBTABLE_HEADER Header; 1469272444Sjkim UINT32 ProximityDomain; 1470272444Sjkim UINT32 AcpiProcessorUid; 1471272444Sjkim UINT32 Flags; 1472272444Sjkim UINT32 ClockDomain; 1473272444Sjkim 1474272444Sjkim} ACPI_SRAT_GICC_AFFINITY; 1475272444Sjkim 1476272444Sjkim/* Flags for ACPI_SRAT_GICC_AFFINITY */ 1477272444Sjkim 1478272444Sjkim#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ 1479272444Sjkim 1480283092Sjkim 1481167802Sjkim/* Reset to default packing */ 1482167802Sjkim 148369450Smsmith#pragma pack() 148469450Smsmith 148569450Smsmith#endif /* __ACTBL1_H__ */ 1486