actbl1.h revision 238381
169450Smsmith/****************************************************************************** 269450Smsmith * 3167802Sjkim * Name: actbl1.h - Additional ACPI table definitions 469450Smsmith * 569450Smsmith *****************************************************************************/ 669450Smsmith 7217365Sjkim/* 8229989Sjkim * Copyright (C) 2000 - 2012, 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 */ 76167802Sjkim 77167802Sjkim 78167802Sjkim/* 79167802Sjkim * All tables must be byte-packed to match the ACPI specification, since 80167802Sjkim * the tables are provided by the system BIOS. 81167802Sjkim */ 8269450Smsmith#pragma pack(1) 8369450Smsmith 8491116Smsmith/* 85167802Sjkim * Note about bitfields: The UINT8 type is used for bitfields in ACPI tables. 86167802Sjkim * This is the only type that is even remotely portable. Anything else is not 87167802Sjkim * portable, so do not use any other bitfield types. 8891116Smsmith */ 89167802Sjkim 90167802Sjkim 91197104Sjkim/******************************************************************************* 92197104Sjkim * 93197104Sjkim * Common subtable headers 94197104Sjkim * 95197104Sjkim ******************************************************************************/ 96167802Sjkim 97197104Sjkim/* Generic subtable header (used in MADT, SRAT, etc.) */ 98197104Sjkim 99167802Sjkimtypedef struct acpi_subtable_header 10069450Smsmith{ 101167802Sjkim UINT8 Type; 102167802Sjkim UINT8 Length; 103151937Sjkim 104167802Sjkim} ACPI_SUBTABLE_HEADER; 10569450Smsmith 10669450Smsmith 107197104Sjkim/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 108193267Sjkim 109193267Sjkimtypedef struct acpi_whea_header 110193267Sjkim{ 111193267Sjkim UINT8 Action; 112193267Sjkim UINT8 Instruction; 113193267Sjkim UINT8 Flags; 114193267Sjkim UINT8 Reserved; 115193267Sjkim ACPI_GENERIC_ADDRESS RegisterRegion; 116193267Sjkim UINT64 Value; /* Value used with Read/Write register */ 117193267Sjkim UINT64 Mask; /* Bitmask required for this register instruction */ 118193267Sjkim 119193267Sjkim} ACPI_WHEA_HEADER; 120193267Sjkim 121193267Sjkim 122167802Sjkim/******************************************************************************* 123167802Sjkim * 124197104Sjkim * BERT - Boot Error Record Table (ACPI 4.0) 125197104Sjkim * Version 1 126167802Sjkim * 127167802Sjkim ******************************************************************************/ 128167802Sjkim 129193267Sjkimtypedef struct acpi_table_bert 130193267Sjkim{ 131193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 132193267Sjkim UINT32 RegionLength; /* Length of the boot error region */ 133238381Sjkim UINT64 Address; /* Physical address of the error region */ 134193267Sjkim 135193267Sjkim} ACPI_TABLE_BERT; 136193267Sjkim 137193267Sjkim 138197104Sjkim/* Boot Error Region (not a subtable, pointed to by Address field above) */ 139193267Sjkim 140193267Sjkimtypedef struct acpi_bert_region 141193267Sjkim{ 142197104Sjkim UINT32 BlockStatus; /* Type of error information */ 143197104Sjkim UINT32 RawDataOffset; /* Offset to raw error data */ 144197104Sjkim UINT32 RawDataLength; /* Length of raw error data */ 145197104Sjkim UINT32 DataLength; /* Length of generic error data */ 146197104Sjkim UINT32 ErrorSeverity; /* Severity code */ 147193267Sjkim 148193267Sjkim} ACPI_BERT_REGION; 149193267Sjkim 150197104Sjkim/* Values for BlockStatus flags above */ 151193267Sjkim 152193267Sjkim#define ACPI_BERT_UNCORRECTABLE (1) 153197104Sjkim#define ACPI_BERT_CORRECTABLE (1<<1) 154197104Sjkim#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 155197104Sjkim#define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 156197104Sjkim#define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 157193267Sjkim 158197104Sjkim/* Values for ErrorSeverity above */ 159193267Sjkim 160197104Sjkimenum AcpiBertErrorSeverity 161167802Sjkim{ 162197104Sjkim ACPI_BERT_ERROR_CORRECTABLE = 0, 163197104Sjkim ACPI_BERT_ERROR_FATAL = 1, 164197104Sjkim ACPI_BERT_ERROR_CORRECTED = 2, 165197104Sjkim ACPI_BERT_ERROR_NONE = 3, 166197104Sjkim ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 167197104Sjkim}; 168167802Sjkim 169197104Sjkim/* 170197104Sjkim * Note: The generic error data that follows the ErrorSeverity field above 171197104Sjkim * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 172197104Sjkim */ 173167802Sjkim 174167802Sjkim 175167802Sjkim/******************************************************************************* 176167802Sjkim * 177197104Sjkim * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 178197104Sjkim * Version 1 179167802Sjkim * 180167802Sjkim ******************************************************************************/ 181167802Sjkim 182167802Sjkimtypedef struct acpi_table_cpep 183167802Sjkim{ 184167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 185167802Sjkim UINT64 Reserved; 186167802Sjkim 187167802Sjkim} ACPI_TABLE_CPEP; 188167802Sjkim 189167802Sjkim 190167802Sjkim/* Subtable */ 191167802Sjkim 192167802Sjkimtypedef struct acpi_cpep_polling 193167802Sjkim{ 194197104Sjkim ACPI_SUBTABLE_HEADER Header; 195167802Sjkim UINT8 Id; /* Processor ID */ 196167802Sjkim UINT8 Eid; /* Processor EID */ 197167802Sjkim UINT32 Interval; /* Polling interval (msec) */ 198167802Sjkim 199167802Sjkim} ACPI_CPEP_POLLING; 200167802Sjkim 201167802Sjkim 202167802Sjkim/******************************************************************************* 203167802Sjkim * 204167802Sjkim * ECDT - Embedded Controller Boot Resources Table 205197104Sjkim * Version 1 206167802Sjkim * 207167802Sjkim ******************************************************************************/ 208167802Sjkim 209167802Sjkimtypedef struct acpi_table_ecdt 210167802Sjkim{ 211167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 212167802Sjkim ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 213167802Sjkim ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 214167802Sjkim UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 215167802Sjkim UINT8 Gpe; /* The GPE for the EC */ 216167802Sjkim UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 217167802Sjkim 218167802Sjkim} ACPI_TABLE_ECDT; 219167802Sjkim 220167802Sjkim 221167802Sjkim/******************************************************************************* 222167802Sjkim * 223197104Sjkim * EINJ - Error Injection Table (ACPI 4.0) 224197104Sjkim * Version 1 225193267Sjkim * 226193267Sjkim ******************************************************************************/ 227193267Sjkim 228193267Sjkimtypedef struct acpi_table_einj 229193267Sjkim{ 230193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 231193267Sjkim UINT32 HeaderLength; 232197104Sjkim UINT8 Flags; 233197104Sjkim UINT8 Reserved[3]; 234193267Sjkim UINT32 Entries; 235193267Sjkim 236193267Sjkim} ACPI_TABLE_EINJ; 237193267Sjkim 238197104Sjkim 239193267Sjkim/* EINJ Injection Instruction Entries (actions) */ 240193267Sjkim 241193267Sjkimtypedef struct acpi_einj_entry 242193267Sjkim{ 243193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 244193267Sjkim 245193267Sjkim} ACPI_EINJ_ENTRY; 246193267Sjkim 247197104Sjkim/* Masks for Flags field above */ 248197104Sjkim 249197104Sjkim#define ACPI_EINJ_PRESERVE (1) 250197104Sjkim 251193267Sjkim/* Values for Action field above */ 252193267Sjkim 253193267Sjkimenum AcpiEinjActions 254193267Sjkim{ 255228110Sjkim ACPI_EINJ_BEGIN_OPERATION = 0, 256228110Sjkim ACPI_EINJ_GET_TRIGGER_TABLE = 1, 257228110Sjkim ACPI_EINJ_SET_ERROR_TYPE = 2, 258228110Sjkim ACPI_EINJ_GET_ERROR_TYPE = 3, 259228110Sjkim ACPI_EINJ_END_OPERATION = 4, 260228110Sjkim ACPI_EINJ_EXECUTE_OPERATION = 5, 261228110Sjkim ACPI_EINJ_CHECK_BUSY_STATUS = 6, 262228110Sjkim ACPI_EINJ_GET_COMMAND_STATUS = 7, 263228110Sjkim ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 264228110Sjkim ACPI_EINJ_ACTION_RESERVED = 9, /* 9 and greater are reserved */ 265228110Sjkim ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 266193267Sjkim}; 267193267Sjkim 268193267Sjkim/* Values for Instruction field above */ 269193267Sjkim 270193267Sjkimenum AcpiEinjInstructions 271193267Sjkim{ 272193267Sjkim ACPI_EINJ_READ_REGISTER = 0, 273193267Sjkim ACPI_EINJ_READ_REGISTER_VALUE = 1, 274193267Sjkim ACPI_EINJ_WRITE_REGISTER = 2, 275193267Sjkim ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 276193267Sjkim ACPI_EINJ_NOOP = 4, 277228110Sjkim ACPI_EINJ_FLUSH_CACHELINE = 5, 278228110Sjkim ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 279193267Sjkim}; 280193267Sjkim 281228110Sjkimtypedef struct acpi_einj_error_type_with_addr 282228110Sjkim{ 283228110Sjkim UINT32 ErrorType; 284228110Sjkim UINT32 VendorStructOffset; 285228110Sjkim UINT32 Flags; 286228110Sjkim UINT32 ApicId; 287228110Sjkim UINT64 Address; 288228110Sjkim UINT64 Range; 289228110Sjkim UINT32 PcieId; 290197104Sjkim 291228110Sjkim} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 292228110Sjkim 293228110Sjkimtypedef struct acpi_einj_vendor 294228110Sjkim{ 295228110Sjkim UINT32 Length; 296228110Sjkim UINT32 PcieId; 297228110Sjkim UINT16 VendorId; 298228110Sjkim UINT16 DeviceId; 299228110Sjkim UINT8 RevisionId; 300228110Sjkim UINT8 Reserved[3]; 301228110Sjkim 302228110Sjkim} ACPI_EINJ_VENDOR; 303228110Sjkim 304228110Sjkim 305193267Sjkim/* EINJ Trigger Error Action Table */ 306193267Sjkim 307193267Sjkimtypedef struct acpi_einj_trigger 308193267Sjkim{ 309193267Sjkim UINT32 HeaderSize; 310193267Sjkim UINT32 Revision; 311193267Sjkim UINT32 TableSize; 312193267Sjkim UINT32 EntryCount; 313193267Sjkim 314193267Sjkim} ACPI_EINJ_TRIGGER; 315193267Sjkim 316197104Sjkim/* Command status return values */ 317193267Sjkim 318197104Sjkimenum AcpiEinjCommandStatus 319197104Sjkim{ 320197104Sjkim ACPI_EINJ_SUCCESS = 0, 321197104Sjkim ACPI_EINJ_FAILURE = 1, 322197104Sjkim ACPI_EINJ_INVALID_ACCESS = 2, 323197104Sjkim ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 324197104Sjkim}; 325197104Sjkim 326197104Sjkim 327197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 328197104Sjkim 329197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 330197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 331197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 332197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 333197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 334197104Sjkim#define ACPI_EINJ_MEMORY_FATAL (1<<5) 335197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 336197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 337197104Sjkim#define ACPI_EINJ_PCIX_FATAL (1<<8) 338197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 339197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 340197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL (1<<11) 341228110Sjkim#define ACPI_EINJ_VENDOR_DEFINED (1<<31) 342197104Sjkim 343197104Sjkim 344193267Sjkim/******************************************************************************* 345193267Sjkim * 346197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0) 347197104Sjkim * Version 1 348193267Sjkim * 349193267Sjkim ******************************************************************************/ 350193267Sjkim 351193267Sjkimtypedef struct acpi_table_erst 352193267Sjkim{ 353193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 354193267Sjkim UINT32 HeaderLength; 355193267Sjkim UINT32 Reserved; 356193267Sjkim UINT32 Entries; 357193267Sjkim 358193267Sjkim} ACPI_TABLE_ERST; 359193267Sjkim 360197104Sjkim 361193267Sjkim/* ERST Serialization Entries (actions) */ 362193267Sjkim 363193267Sjkimtypedef struct acpi_erst_entry 364193267Sjkim{ 365193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 366193267Sjkim 367193267Sjkim} ACPI_ERST_ENTRY; 368193267Sjkim 369197104Sjkim/* Masks for Flags field above */ 370197104Sjkim 371197104Sjkim#define ACPI_ERST_PRESERVE (1) 372197104Sjkim 373193267Sjkim/* Values for Action field above */ 374193267Sjkim 375193267Sjkimenum AcpiErstActions 376193267Sjkim{ 377197104Sjkim ACPI_ERST_BEGIN_WRITE = 0, 378197104Sjkim ACPI_ERST_BEGIN_READ = 1, 379197104Sjkim ACPI_ERST_BEGIN_CLEAR = 2, 380197104Sjkim ACPI_ERST_END = 3, 381193267Sjkim ACPI_ERST_SET_RECORD_OFFSET = 4, 382193267Sjkim ACPI_ERST_EXECUTE_OPERATION = 5, 383193267Sjkim ACPI_ERST_CHECK_BUSY_STATUS = 6, 384193267Sjkim ACPI_ERST_GET_COMMAND_STATUS = 7, 385197104Sjkim ACPI_ERST_GET_RECORD_ID = 8, 386197104Sjkim ACPI_ERST_SET_RECORD_ID = 9, 387193267Sjkim ACPI_ERST_GET_RECORD_COUNT = 10, 388193267Sjkim ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 389193267Sjkim ACPI_ERST_NOT_USED = 12, 390193267Sjkim ACPI_ERST_GET_ERROR_RANGE = 13, 391193267Sjkim ACPI_ERST_GET_ERROR_LENGTH = 14, 392193267Sjkim ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 393193267Sjkim ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */ 394193267Sjkim}; 395193267Sjkim 396193267Sjkim/* Values for Instruction field above */ 397193267Sjkim 398193267Sjkimenum AcpiErstInstructions 399193267Sjkim{ 400193267Sjkim ACPI_ERST_READ_REGISTER = 0, 401193267Sjkim ACPI_ERST_READ_REGISTER_VALUE = 1, 402193267Sjkim ACPI_ERST_WRITE_REGISTER = 2, 403193267Sjkim ACPI_ERST_WRITE_REGISTER_VALUE = 3, 404193267Sjkim ACPI_ERST_NOOP = 4, 405193267Sjkim ACPI_ERST_LOAD_VAR1 = 5, 406193267Sjkim ACPI_ERST_LOAD_VAR2 = 6, 407193267Sjkim ACPI_ERST_STORE_VAR1 = 7, 408193267Sjkim ACPI_ERST_ADD = 8, 409193267Sjkim ACPI_ERST_SUBTRACT = 9, 410193267Sjkim ACPI_ERST_ADD_VALUE = 10, 411193267Sjkim ACPI_ERST_SUBTRACT_VALUE = 11, 412193267Sjkim ACPI_ERST_STALL = 12, 413193267Sjkim ACPI_ERST_STALL_WHILE_TRUE = 13, 414193267Sjkim ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 415193267Sjkim ACPI_ERST_GOTO = 15, 416193267Sjkim ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 417193267Sjkim ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 418193267Sjkim ACPI_ERST_MOVE_DATA = 18, 419193267Sjkim ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 420193267Sjkim}; 421193267Sjkim 422197104Sjkim/* Command status return values */ 423193267Sjkim 424197104Sjkimenum AcpiErstCommandStatus 425197104Sjkim{ 426197104Sjkim ACPI_ERST_SUCESS = 0, 427197104Sjkim ACPI_ERST_NO_SPACE = 1, 428197104Sjkim ACPI_ERST_NOT_AVAILABLE = 2, 429197104Sjkim ACPI_ERST_FAILURE = 3, 430197104Sjkim ACPI_ERST_RECORD_EMPTY = 4, 431197104Sjkim ACPI_ERST_NOT_FOUND = 5, 432197104Sjkim ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 433197104Sjkim}; 434197104Sjkim 435197104Sjkim 436197104Sjkim/* Error Record Serialization Information */ 437197104Sjkim 438197104Sjkimtypedef struct acpi_erst_info 439197104Sjkim{ 440197104Sjkim UINT16 Signature; /* Should be "ER" */ 441197104Sjkim UINT8 Data[48]; 442197104Sjkim 443197104Sjkim} ACPI_ERST_INFO; 444197104Sjkim 445197104Sjkim 446193267Sjkim/******************************************************************************* 447193267Sjkim * 448197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0) 449197104Sjkim * Version 1 450193267Sjkim * 451193267Sjkim ******************************************************************************/ 452193267Sjkim 453193267Sjkimtypedef struct acpi_table_hest 454193267Sjkim{ 455193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 456193267Sjkim UINT32 ErrorSourceCount; 457193267Sjkim 458193267Sjkim} ACPI_TABLE_HEST; 459193267Sjkim 460193267Sjkim 461193267Sjkim/* HEST subtable header */ 462193267Sjkim 463193267Sjkimtypedef struct acpi_hest_header 464193267Sjkim{ 465193267Sjkim UINT16 Type; 466197104Sjkim UINT16 SourceId; 467193267Sjkim 468193267Sjkim} ACPI_HEST_HEADER; 469193267Sjkim 470193267Sjkim 471193267Sjkim/* Values for Type field above for subtables */ 472193267Sjkim 473193267Sjkimenum AcpiHestTypes 474193267Sjkim{ 475197104Sjkim ACPI_HEST_TYPE_IA32_CHECK = 0, 476197104Sjkim ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 477197104Sjkim ACPI_HEST_TYPE_IA32_NMI = 2, 478197104Sjkim ACPI_HEST_TYPE_NOT_USED3 = 3, 479197104Sjkim ACPI_HEST_TYPE_NOT_USED4 = 4, 480197104Sjkim ACPI_HEST_TYPE_NOT_USED5 = 5, 481197104Sjkim ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 482197104Sjkim ACPI_HEST_TYPE_AER_ENDPOINT = 7, 483197104Sjkim ACPI_HEST_TYPE_AER_BRIDGE = 8, 484197104Sjkim ACPI_HEST_TYPE_GENERIC_ERROR = 9, 485197104Sjkim ACPI_HEST_TYPE_RESERVED = 10 /* 10 and greater are reserved */ 486193267Sjkim}; 487193267Sjkim 488193267Sjkim 489193267Sjkim/* 490197104Sjkim * HEST substructures contained in subtables 491193267Sjkim */ 492193267Sjkim 493197104Sjkim/* 494197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 495197104Sjkim * ACPI_HEST_IA_CORRECTED structures. 496197104Sjkim */ 497197104Sjkimtypedef struct acpi_hest_ia_error_bank 498193267Sjkim{ 499193267Sjkim UINT8 BankNumber; 500193267Sjkim UINT8 ClearStatusOnInit; 501193267Sjkim UINT8 StatusFormat; 502197104Sjkim UINT8 Reserved; 503193267Sjkim UINT32 ControlRegister; 504197104Sjkim UINT64 ControlData; 505193267Sjkim UINT32 StatusRegister; 506193267Sjkim UINT32 AddressRegister; 507193267Sjkim UINT32 MiscRegister; 508193267Sjkim 509197104Sjkim} ACPI_HEST_IA_ERROR_BANK; 510193267Sjkim 511193267Sjkim 512197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 513193267Sjkim 514193267Sjkimtypedef struct acpi_hest_aer_common 515193267Sjkim{ 516197104Sjkim UINT16 Reserved1; 517193267Sjkim UINT8 Flags; 518193267Sjkim UINT8 Enabled; 519197104Sjkim UINT32 RecordsToPreallocate; 520193267Sjkim UINT32 MaxSectionsPerRecord; 521193267Sjkim UINT32 Bus; 522193267Sjkim UINT16 Device; 523193267Sjkim UINT16 Function; 524193267Sjkim UINT16 DeviceControl; 525197104Sjkim UINT16 Reserved2; 526197104Sjkim UINT32 UncorrectableMask; 527197104Sjkim UINT32 UncorrectableSeverity; 528197104Sjkim UINT32 CorrectableMask; 529197104Sjkim UINT32 AdvancedCapabilities; 530193267Sjkim 531193267Sjkim} ACPI_HEST_AER_COMMON; 532193267Sjkim 533197104Sjkim/* Masks for HEST Flags fields */ 534193267Sjkim 535197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST (1) 536197104Sjkim#define ACPI_HEST_GLOBAL (1<<1) 537197104Sjkim 538197104Sjkim 539193267Sjkim/* Hardware Error Notification */ 540193267Sjkim 541193267Sjkimtypedef struct acpi_hest_notify 542193267Sjkim{ 543193267Sjkim UINT8 Type; 544193267Sjkim UINT8 Length; 545193267Sjkim UINT16 ConfigWriteEnable; 546193267Sjkim UINT32 PollInterval; 547193267Sjkim UINT32 Vector; 548193267Sjkim UINT32 PollingThresholdValue; 549193267Sjkim UINT32 PollingThresholdWindow; 550193267Sjkim UINT32 ErrorThresholdValue; 551193267Sjkim UINT32 ErrorThresholdWindow; 552193267Sjkim 553193267Sjkim} ACPI_HEST_NOTIFY; 554193267Sjkim 555193267Sjkim/* Values for Notify Type field above */ 556193267Sjkim 557193267Sjkimenum AcpiHestNotifyTypes 558193267Sjkim{ 559193267Sjkim ACPI_HEST_NOTIFY_POLLED = 0, 560193267Sjkim ACPI_HEST_NOTIFY_EXTERNAL = 1, 561193267Sjkim ACPI_HEST_NOTIFY_LOCAL = 2, 562193267Sjkim ACPI_HEST_NOTIFY_SCI = 3, 563193267Sjkim ACPI_HEST_NOTIFY_NMI = 4, 564193267Sjkim ACPI_HEST_NOTIFY_RESERVED = 5 /* 5 and greater are reserved */ 565193267Sjkim}; 566193267Sjkim 567197104Sjkim/* Values for ConfigWriteEnable bitfield above */ 568193267Sjkim 569197104Sjkim#define ACPI_HEST_TYPE (1) 570197104Sjkim#define ACPI_HEST_POLL_INTERVAL (1<<1) 571197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 572197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 573197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 574197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 575197104Sjkim 576197104Sjkim 577193267Sjkim/* 578193267Sjkim * HEST subtables 579193267Sjkim */ 580193267Sjkim 581197104Sjkim/* 0: IA32 Machine Check Exception */ 582193267Sjkim 583197104Sjkimtypedef struct acpi_hest_ia_machine_check 584193267Sjkim{ 585193267Sjkim ACPI_HEST_HEADER Header; 586197104Sjkim UINT16 Reserved1; 587193267Sjkim UINT8 Flags; 588197104Sjkim UINT8 Enabled; 589197104Sjkim UINT32 RecordsToPreallocate; 590193267Sjkim UINT32 MaxSectionsPerRecord; 591193267Sjkim UINT64 GlobalCapabilityData; 592193267Sjkim UINT64 GlobalControlData; 593193267Sjkim UINT8 NumHardwareBanks; 594197104Sjkim UINT8 Reserved3[7]; 595193267Sjkim 596197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK; 597193267Sjkim 598193267Sjkim 599197104Sjkim/* 1: IA32 Corrected Machine Check */ 600193267Sjkim 601197104Sjkimtypedef struct acpi_hest_ia_corrected 602193267Sjkim{ 603193267Sjkim ACPI_HEST_HEADER Header; 604197104Sjkim UINT16 Reserved1; 605193267Sjkim UINT8 Flags; 606193267Sjkim UINT8 Enabled; 607197104Sjkim UINT32 RecordsToPreallocate; 608193267Sjkim UINT32 MaxSectionsPerRecord; 609193267Sjkim ACPI_HEST_NOTIFY Notify; 610193267Sjkim UINT8 NumHardwareBanks; 611197104Sjkim UINT8 Reserved2[3]; 612193267Sjkim 613197104Sjkim} ACPI_HEST_IA_CORRECTED; 614193267Sjkim 615193267Sjkim 616197104Sjkim/* 2: IA32 Non-Maskable Interrupt */ 617193267Sjkim 618197104Sjkimtypedef struct acpi_hest_ia_nmi 619193267Sjkim{ 620193267Sjkim ACPI_HEST_HEADER Header; 621193267Sjkim UINT32 Reserved; 622197104Sjkim UINT32 RecordsToPreallocate; 623193267Sjkim UINT32 MaxSectionsPerRecord; 624193267Sjkim UINT32 MaxRawDataLength; 625193267Sjkim 626197104Sjkim} ACPI_HEST_IA_NMI; 627193267Sjkim 628193267Sjkim 629197104Sjkim/* 3,4,5: Not used */ 630193267Sjkim 631193267Sjkim/* 6: PCI Express Root Port AER */ 632193267Sjkim 633193267Sjkimtypedef struct acpi_hest_aer_root 634193267Sjkim{ 635193267Sjkim ACPI_HEST_HEADER Header; 636193267Sjkim ACPI_HEST_AER_COMMON Aer; 637193267Sjkim UINT32 RootErrorCommand; 638193267Sjkim 639193267Sjkim} ACPI_HEST_AER_ROOT; 640193267Sjkim 641193267Sjkim 642193267Sjkim/* 7: PCI Express AER (AER Endpoint) */ 643193267Sjkim 644193267Sjkimtypedef struct acpi_hest_aer 645193267Sjkim{ 646193267Sjkim ACPI_HEST_HEADER Header; 647193267Sjkim ACPI_HEST_AER_COMMON Aer; 648193267Sjkim 649193267Sjkim} ACPI_HEST_AER; 650193267Sjkim 651193267Sjkim 652193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */ 653193267Sjkim 654193267Sjkimtypedef struct acpi_hest_aer_bridge 655193267Sjkim{ 656193267Sjkim ACPI_HEST_HEADER Header; 657193267Sjkim ACPI_HEST_AER_COMMON Aer; 658197104Sjkim UINT32 UncorrectableMask2; 659197104Sjkim UINT32 UncorrectableSeverity2; 660197104Sjkim UINT32 AdvancedCapabilities2; 661193267Sjkim 662193267Sjkim} ACPI_HEST_AER_BRIDGE; 663193267Sjkim 664193267Sjkim 665193267Sjkim/* 9: Generic Hardware Error Source */ 666193267Sjkim 667193267Sjkimtypedef struct acpi_hest_generic 668193267Sjkim{ 669193267Sjkim ACPI_HEST_HEADER Header; 670193267Sjkim UINT16 RelatedSourceId; 671197104Sjkim UINT8 Reserved; 672193267Sjkim UINT8 Enabled; 673197104Sjkim UINT32 RecordsToPreallocate; 674193267Sjkim UINT32 MaxSectionsPerRecord; 675193267Sjkim UINT32 MaxRawDataLength; 676193267Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 677193267Sjkim ACPI_HEST_NOTIFY Notify; 678197104Sjkim UINT32 ErrorBlockLength; 679193267Sjkim 680193267Sjkim} ACPI_HEST_GENERIC; 681193267Sjkim 682193267Sjkim 683197104Sjkim/* Generic Error Status block */ 684167802Sjkim 685197104Sjkimtypedef struct acpi_hest_generic_status 686167802Sjkim{ 687197104Sjkim UINT32 BlockStatus; 688197104Sjkim UINT32 RawDataOffset; 689197104Sjkim UINT32 RawDataLength; 690197104Sjkim UINT32 DataLength; 691197104Sjkim UINT32 ErrorSeverity; 692167802Sjkim 693197104Sjkim} ACPI_HEST_GENERIC_STATUS; 694167802Sjkim 695197104Sjkim/* Values for BlockStatus flags above */ 696167802Sjkim 697197104Sjkim#define ACPI_HEST_UNCORRECTABLE (1) 698197104Sjkim#define ACPI_HEST_CORRECTABLE (1<<1) 699197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 700197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 701197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 702167802Sjkim 703167802Sjkim 704197104Sjkim/* Generic Error Data entry */ 705167802Sjkim 706197104Sjkimtypedef struct acpi_hest_generic_data 707193267Sjkim{ 708197104Sjkim UINT8 SectionType[16]; 709197104Sjkim UINT32 ErrorSeverity; 710197104Sjkim UINT16 Revision; 711197104Sjkim UINT8 ValidationBits; 712193267Sjkim UINT8 Flags; 713197104Sjkim UINT32 ErrorDataLength; 714197104Sjkim UINT8 FruId[16]; 715197104Sjkim UINT8 FruText[20]; 716193267Sjkim 717197104Sjkim} ACPI_HEST_GENERIC_DATA; 718193267Sjkim 719193267Sjkim 720193267Sjkim/******************************************************************************* 721193267Sjkim * 722167802Sjkim * MADT - Multiple APIC Description Table 723197104Sjkim * Version 3 724167802Sjkim * 725167802Sjkim ******************************************************************************/ 726167802Sjkim 727167802Sjkimtypedef struct acpi_table_madt 728167802Sjkim{ 729167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 730167802Sjkim UINT32 Address; /* Physical address of local APIC */ 731167802Sjkim UINT32 Flags; 732167802Sjkim 733167802Sjkim} ACPI_TABLE_MADT; 734167802Sjkim 735197104Sjkim/* Masks for Flags field above */ 736167802Sjkim 737197104Sjkim#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 738167802Sjkim 739167802Sjkim/* Values for PCATCompat flag */ 740167802Sjkim 741167802Sjkim#define ACPI_MADT_DUAL_PIC 0 742167802Sjkim#define ACPI_MADT_MULTIPLE_APIC 1 743167802Sjkim 744167802Sjkim 745197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 746167802Sjkim 747167802Sjkimenum AcpiMadtType 748167802Sjkim{ 749167802Sjkim ACPI_MADT_TYPE_LOCAL_APIC = 0, 750167802Sjkim ACPI_MADT_TYPE_IO_APIC = 1, 751167802Sjkim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 752167802Sjkim ACPI_MADT_TYPE_NMI_SOURCE = 3, 753167802Sjkim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 754167802Sjkim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 755167802Sjkim ACPI_MADT_TYPE_IO_SAPIC = 6, 756167802Sjkim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 757167802Sjkim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 758193267Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 759193267Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 760228110Sjkim ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 761228110Sjkim ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 762228110Sjkim ACPI_MADT_TYPE_RESERVED = 13 /* 13 and greater are reserved */ 763167802Sjkim}; 764167802Sjkim 765167802Sjkim 766167802Sjkim/* 767167802Sjkim * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER 768167802Sjkim */ 769167802Sjkim 770167802Sjkim/* 0: Processor Local APIC */ 771167802Sjkim 772167802Sjkimtypedef struct acpi_madt_local_apic 773167802Sjkim{ 774167802Sjkim ACPI_SUBTABLE_HEADER Header; 775167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 776167802Sjkim UINT8 Id; /* Processor's local APIC id */ 777167802Sjkim UINT32 LapicFlags; 778167802Sjkim 779167802Sjkim} ACPI_MADT_LOCAL_APIC; 780167802Sjkim 781197104Sjkim 782167802Sjkim/* 1: IO APIC */ 783167802Sjkim 784167802Sjkimtypedef struct acpi_madt_io_apic 785167802Sjkim{ 786167802Sjkim ACPI_SUBTABLE_HEADER Header; 787167802Sjkim UINT8 Id; /* I/O APIC ID */ 788167802Sjkim UINT8 Reserved; /* Reserved - must be zero */ 789167802Sjkim UINT32 Address; /* APIC physical address */ 790167802Sjkim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 791167802Sjkim 792167802Sjkim} ACPI_MADT_IO_APIC; 793167802Sjkim 794197104Sjkim 795167802Sjkim/* 2: Interrupt Override */ 796167802Sjkim 797167802Sjkimtypedef struct acpi_madt_interrupt_override 798167802Sjkim{ 799167802Sjkim ACPI_SUBTABLE_HEADER Header; 800167802Sjkim UINT8 Bus; /* 0 - ISA */ 801167802Sjkim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 802167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 803167802Sjkim UINT16 IntiFlags; 804167802Sjkim 805167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE; 806167802Sjkim 807197104Sjkim 808167802Sjkim/* 3: NMI Source */ 809167802Sjkim 810167802Sjkimtypedef struct acpi_madt_nmi_source 811167802Sjkim{ 812167802Sjkim ACPI_SUBTABLE_HEADER Header; 813167802Sjkim UINT16 IntiFlags; 814167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 815167802Sjkim 816167802Sjkim} ACPI_MADT_NMI_SOURCE; 817167802Sjkim 818197104Sjkim 819167802Sjkim/* 4: Local APIC NMI */ 820167802Sjkim 821167802Sjkimtypedef struct acpi_madt_local_apic_nmi 822167802Sjkim{ 823167802Sjkim ACPI_SUBTABLE_HEADER Header; 824167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 825167802Sjkim UINT16 IntiFlags; 826167802Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 827167802Sjkim 828167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI; 829167802Sjkim 830197104Sjkim 831167802Sjkim/* 5: Address Override */ 832167802Sjkim 833167802Sjkimtypedef struct acpi_madt_local_apic_override 834167802Sjkim{ 835167802Sjkim ACPI_SUBTABLE_HEADER Header; 836167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 837167802Sjkim UINT64 Address; /* APIC physical address */ 838167802Sjkim 839167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE; 840167802Sjkim 841197104Sjkim 842167802Sjkim/* 6: I/O Sapic */ 843167802Sjkim 844167802Sjkimtypedef struct acpi_madt_io_sapic 845167802Sjkim{ 846167802Sjkim ACPI_SUBTABLE_HEADER Header; 847167802Sjkim UINT8 Id; /* I/O SAPIC ID */ 848167802Sjkim UINT8 Reserved; /* Reserved, must be zero */ 849167802Sjkim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 850167802Sjkim UINT64 Address; /* SAPIC physical address */ 851167802Sjkim 852167802Sjkim} ACPI_MADT_IO_SAPIC; 853167802Sjkim 854197104Sjkim 855167802Sjkim/* 7: Local Sapic */ 856167802Sjkim 857167802Sjkimtypedef struct acpi_madt_local_sapic 858167802Sjkim{ 859167802Sjkim ACPI_SUBTABLE_HEADER Header; 860167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 861167802Sjkim UINT8 Id; /* SAPIC ID */ 862167802Sjkim UINT8 Eid; /* SAPIC EID */ 863167802Sjkim UINT8 Reserved[3]; /* Reserved, must be zero */ 864167802Sjkim UINT32 LapicFlags; 865167802Sjkim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 866167802Sjkim char UidString[1]; /* String UID - ACPI 3.0 */ 867167802Sjkim 868167802Sjkim} ACPI_MADT_LOCAL_SAPIC; 869167802Sjkim 870197104Sjkim 871167802Sjkim/* 8: Platform Interrupt Source */ 872167802Sjkim 873167802Sjkimtypedef struct acpi_madt_interrupt_source 874167802Sjkim{ 875167802Sjkim ACPI_SUBTABLE_HEADER Header; 876167802Sjkim UINT16 IntiFlags; 877167802Sjkim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 878167802Sjkim UINT8 Id; /* Processor ID */ 879167802Sjkim UINT8 Eid; /* Processor EID */ 880167802Sjkim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 881167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 882167802Sjkim UINT32 Flags; /* Interrupt Source Flags */ 883167802Sjkim 884167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE; 885167802Sjkim 886197104Sjkim/* Masks for Flags field above */ 887167802Sjkim 888167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE (1) 889167802Sjkim 890167802Sjkim 891197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */ 892197104Sjkim 893193267Sjkimtypedef struct acpi_madt_local_x2apic 894193267Sjkim{ 895193267Sjkim ACPI_SUBTABLE_HEADER Header; 896193267Sjkim UINT16 Reserved; /* Reserved - must be zero */ 897193267Sjkim UINT32 LocalApicId; /* Processor x2APIC ID */ 898193267Sjkim UINT32 LapicFlags; 899193267Sjkim UINT32 Uid; /* ACPI processor UID */ 900193267Sjkim 901193267Sjkim} ACPI_MADT_LOCAL_X2APIC; 902193267Sjkim 903193267Sjkim 904197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */ 905197104Sjkim 906193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi 907193267Sjkim{ 908193267Sjkim ACPI_SUBTABLE_HEADER Header; 909193267Sjkim UINT16 IntiFlags; 910193267Sjkim UINT32 Uid; /* ACPI processor UID */ 911193267Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 912193267Sjkim UINT8 Reserved[3]; /* Reserved - must be zero */ 913193267Sjkim 914193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI; 915193267Sjkim 916193267Sjkim 917228110Sjkim/* 11: Generic Interrupt (ACPI 5.0) */ 918228110Sjkim 919228110Sjkimtypedef struct acpi_madt_generic_interrupt 920228110Sjkim{ 921228110Sjkim ACPI_SUBTABLE_HEADER Header; 922228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 923228110Sjkim UINT32 GicId; 924228110Sjkim UINT32 Uid; 925228110Sjkim UINT32 Flags; 926228110Sjkim UINT32 ParkingVersion; 927228110Sjkim UINT32 PerformanceInterrupt; 928228110Sjkim UINT64 ParkedAddress; 929228110Sjkim UINT64 BaseAddress; 930228110Sjkim 931228110Sjkim} ACPI_MADT_GENERIC_INTERRUPT; 932228110Sjkim 933228110Sjkim 934228110Sjkim/* 12: Generic Distributor (ACPI 5.0) */ 935228110Sjkim 936228110Sjkimtypedef struct acpi_madt_generic_distributor 937228110Sjkim{ 938228110Sjkim ACPI_SUBTABLE_HEADER Header; 939228110Sjkim UINT16 Reserved; /* Reserved - must be zero */ 940228110Sjkim UINT32 GicId; 941228110Sjkim UINT64 BaseAddress; 942228110Sjkim UINT32 GlobalIrqBase; 943228110Sjkim UINT32 Reserved2; /* Reserved - must be zero */ 944228110Sjkim 945228110Sjkim} ACPI_MADT_GENERIC_DISTRIBUTOR; 946228110Sjkim 947228110Sjkim 948167802Sjkim/* 949167802Sjkim * Common flags fields for MADT subtables 950167802Sjkim */ 951167802Sjkim 952228110Sjkim/* MADT Local APIC flags (LapicFlags) and GIC flags */ 953167802Sjkim 954167802Sjkim#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 955167802Sjkim 956167802Sjkim/* MADT MPS INTI flags (IntiFlags) */ 957167802Sjkim 958167802Sjkim#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 959167802Sjkim#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 960167802Sjkim 961167802Sjkim/* Values for MPS INTI flags */ 962167802Sjkim 963167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS 0 964167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 965167802Sjkim#define ACPI_MADT_POLARITY_RESERVED 2 966167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 967167802Sjkim 968167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS (0) 969167802Sjkim#define ACPI_MADT_TRIGGER_EDGE (1<<2) 970167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED (2<<2) 971167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL (3<<2) 972167802Sjkim 973167802Sjkim 974167802Sjkim/******************************************************************************* 975167802Sjkim * 976197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 977197104Sjkim * Version 1 978167802Sjkim * 979167802Sjkim ******************************************************************************/ 980167802Sjkim 981197104Sjkimtypedef struct acpi_table_msct 982167802Sjkim{ 983167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 984197104Sjkim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 985197104Sjkim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 986197104Sjkim UINT32 MaxClockDomains; /* Max number of clock domains */ 987197104Sjkim UINT64 MaxAddress; /* Max physical address in system */ 988167802Sjkim 989197104Sjkim} ACPI_TABLE_MSCT; 990167802Sjkim 991167802Sjkim 992197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */ 993167802Sjkim 994197104Sjkimtypedef struct acpi_msct_proximity 995167802Sjkim{ 996197104Sjkim UINT8 Revision; 997197104Sjkim UINT8 Length; 998197104Sjkim UINT32 RangeStart; /* Start of domain range */ 999197104Sjkim UINT32 RangeEnd; /* End of domain range */ 1000197104Sjkim UINT32 ProcessorCapacity; 1001197104Sjkim UINT64 MemoryCapacity; /* In bytes */ 1002167802Sjkim 1003197104Sjkim} ACPI_MSCT_PROXIMITY; 1004167802Sjkim 1005167802Sjkim 1006167802Sjkim/******************************************************************************* 1007167802Sjkim * 1008167802Sjkim * SBST - Smart Battery Specification Table 1009197104Sjkim * Version 1 1010167802Sjkim * 1011167802Sjkim ******************************************************************************/ 1012167802Sjkim 1013167802Sjkimtypedef struct acpi_table_sbst 1014167802Sjkim{ 1015167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1016167802Sjkim UINT32 WarningLevel; 1017167802Sjkim UINT32 LowLevel; 1018167802Sjkim UINT32 CriticalLevel; 1019167802Sjkim 1020167802Sjkim} ACPI_TABLE_SBST; 1021167802Sjkim 1022167802Sjkim 1023167802Sjkim/******************************************************************************* 1024167802Sjkim * 1025167802Sjkim * SLIT - System Locality Distance Information Table 1026197104Sjkim * Version 1 1027167802Sjkim * 1028167802Sjkim ******************************************************************************/ 1029167802Sjkim 1030167802Sjkimtypedef struct acpi_table_slit 1031167802Sjkim{ 1032167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1033167802Sjkim UINT64 LocalityCount; 1034167802Sjkim UINT8 Entry[1]; /* Real size = localities^2 */ 1035167802Sjkim 1036167802Sjkim} ACPI_TABLE_SLIT; 1037167802Sjkim 1038167802Sjkim 1039167802Sjkim/******************************************************************************* 1040167802Sjkim * 1041167802Sjkim * SRAT - System Resource Affinity Table 1042197104Sjkim * Version 3 1043167802Sjkim * 1044167802Sjkim ******************************************************************************/ 1045167802Sjkim 1046167802Sjkimtypedef struct acpi_table_srat 1047167802Sjkim{ 1048167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1049167802Sjkim UINT32 TableRevision; /* Must be value '1' */ 1050167802Sjkim UINT64 Reserved; /* Reserved, must be zero */ 1051167802Sjkim 1052167802Sjkim} ACPI_TABLE_SRAT; 1053167802Sjkim 1054167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 1055167802Sjkim 1056167802Sjkimenum AcpiSratType 1057167802Sjkim{ 1058193267Sjkim ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1059193267Sjkim ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1060193267Sjkim ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 1061193267Sjkim ACPI_SRAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 1062167802Sjkim}; 1063167802Sjkim 1064193267Sjkim/* 1065193267Sjkim * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER 1066193267Sjkim */ 1067167802Sjkim 1068193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */ 1069193267Sjkim 1070167802Sjkimtypedef struct acpi_srat_cpu_affinity 1071167802Sjkim{ 1072167802Sjkim ACPI_SUBTABLE_HEADER Header; 1073167802Sjkim UINT8 ProximityDomainLo; 1074167802Sjkim UINT8 ApicId; 1075167802Sjkim UINT32 Flags; 1076167802Sjkim UINT8 LocalSapicEid; 1077167802Sjkim UINT8 ProximityDomainHi[3]; 1078167802Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1079167802Sjkim 1080167802Sjkim} ACPI_SRAT_CPU_AFFINITY; 1081167802Sjkim 1082197104Sjkim/* Flags */ 1083197104Sjkim 1084197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 1085197104Sjkim 1086197104Sjkim 1087193267Sjkim/* 1: Memory Affinity */ 1088167802Sjkim 1089167802Sjkimtypedef struct acpi_srat_mem_affinity 1090167802Sjkim{ 1091167802Sjkim ACPI_SUBTABLE_HEADER Header; 1092167802Sjkim UINT32 ProximityDomain; 1093167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1094167802Sjkim UINT64 BaseAddress; 1095167802Sjkim UINT64 Length; 1096193267Sjkim UINT32 Reserved1; 1097167802Sjkim UINT32 Flags; 1098193267Sjkim UINT64 Reserved2; /* Reserved, must be zero */ 1099167802Sjkim 1100167802Sjkim} ACPI_SRAT_MEM_AFFINITY; 1101167802Sjkim 1102167802Sjkim/* Flags */ 1103167802Sjkim 1104167802Sjkim#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1105167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1106167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1107167802Sjkim 1108167802Sjkim 1109197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 1110197104Sjkim 1111193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity 1112167802Sjkim{ 1113193267Sjkim ACPI_SUBTABLE_HEADER Header; 1114193267Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1115193267Sjkim UINT32 ProximityDomain; 1116193267Sjkim UINT32 ApicId; 1117193267Sjkim UINT32 Flags; 1118197104Sjkim UINT32 ClockDomain; 1119197104Sjkim UINT32 Reserved2; 1120167802Sjkim 1121193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY; 1122167802Sjkim 1123193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 1124193267Sjkim 1125193267Sjkim#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 1126193267Sjkim 1127193267Sjkim 1128167802Sjkim/* Reset to default packing */ 1129167802Sjkim 113069450Smsmith#pragma pack() 113169450Smsmith 113269450Smsmith#endif /* __ACTBL1_H__ */ 1133