169450Smsmith/****************************************************************************** 269450Smsmith * 3167802Sjkim * Name: actbl1.h - Additional ACPI table definitions 469450Smsmith * 569450Smsmith *****************************************************************************/ 669450Smsmith 7217365Sjkim/* 8217365Sjkim * Copyright (C) 2000 - 2011, 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 */ 133193267Sjkim UINT64 Address; /* Physical addresss 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{ 255193267Sjkim ACPI_EINJ_BEGIN_OPERATION = 0, 256193267Sjkim ACPI_EINJ_GET_TRIGGER_TABLE = 1, 257193267Sjkim ACPI_EINJ_SET_ERROR_TYPE = 2, 258193267Sjkim ACPI_EINJ_GET_ERROR_TYPE = 3, 259193267Sjkim ACPI_EINJ_END_OPERATION = 4, 260193267Sjkim ACPI_EINJ_EXECUTE_OPERATION = 5, 261193267Sjkim ACPI_EINJ_CHECK_BUSY_STATUS = 6, 262193267Sjkim ACPI_EINJ_GET_COMMAND_STATUS = 7, 263193267Sjkim ACPI_EINJ_ACTION_RESERVED = 8, /* 8 and greater are reserved */ 264193267Sjkim ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 265193267Sjkim}; 266193267Sjkim 267193267Sjkim/* Values for Instruction field above */ 268193267Sjkim 269193267Sjkimenum AcpiEinjInstructions 270193267Sjkim{ 271193267Sjkim ACPI_EINJ_READ_REGISTER = 0, 272193267Sjkim ACPI_EINJ_READ_REGISTER_VALUE = 1, 273193267Sjkim ACPI_EINJ_WRITE_REGISTER = 2, 274193267Sjkim ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 275193267Sjkim ACPI_EINJ_NOOP = 4, 276193267Sjkim ACPI_EINJ_INSTRUCTION_RESERVED = 5 /* 5 and greater are reserved */ 277193267Sjkim}; 278193267Sjkim 279197104Sjkim 280193267Sjkim/* EINJ Trigger Error Action Table */ 281193267Sjkim 282193267Sjkimtypedef struct acpi_einj_trigger 283193267Sjkim{ 284193267Sjkim UINT32 HeaderSize; 285193267Sjkim UINT32 Revision; 286193267Sjkim UINT32 TableSize; 287193267Sjkim UINT32 EntryCount; 288193267Sjkim 289193267Sjkim} ACPI_EINJ_TRIGGER; 290193267Sjkim 291197104Sjkim/* Command status return values */ 292193267Sjkim 293197104Sjkimenum AcpiEinjCommandStatus 294197104Sjkim{ 295197104Sjkim ACPI_EINJ_SUCCESS = 0, 296197104Sjkim ACPI_EINJ_FAILURE = 1, 297197104Sjkim ACPI_EINJ_INVALID_ACCESS = 2, 298197104Sjkim ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 299197104Sjkim}; 300197104Sjkim 301197104Sjkim 302197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 303197104Sjkim 304197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 305197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 306197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 307197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 308197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 309197104Sjkim#define ACPI_EINJ_MEMORY_FATAL (1<<5) 310197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 311197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 312197104Sjkim#define ACPI_EINJ_PCIX_FATAL (1<<8) 313197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 314197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 315197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL (1<<11) 316197104Sjkim 317197104Sjkim 318193267Sjkim/******************************************************************************* 319193267Sjkim * 320197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0) 321197104Sjkim * Version 1 322193267Sjkim * 323193267Sjkim ******************************************************************************/ 324193267Sjkim 325193267Sjkimtypedef struct acpi_table_erst 326193267Sjkim{ 327193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 328193267Sjkim UINT32 HeaderLength; 329193267Sjkim UINT32 Reserved; 330193267Sjkim UINT32 Entries; 331193267Sjkim 332193267Sjkim} ACPI_TABLE_ERST; 333193267Sjkim 334197104Sjkim 335193267Sjkim/* ERST Serialization Entries (actions) */ 336193267Sjkim 337193267Sjkimtypedef struct acpi_erst_entry 338193267Sjkim{ 339193267Sjkim ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 340193267Sjkim 341193267Sjkim} ACPI_ERST_ENTRY; 342193267Sjkim 343197104Sjkim/* Masks for Flags field above */ 344197104Sjkim 345197104Sjkim#define ACPI_ERST_PRESERVE (1) 346197104Sjkim 347193267Sjkim/* Values for Action field above */ 348193267Sjkim 349193267Sjkimenum AcpiErstActions 350193267Sjkim{ 351197104Sjkim ACPI_ERST_BEGIN_WRITE = 0, 352197104Sjkim ACPI_ERST_BEGIN_READ = 1, 353197104Sjkim ACPI_ERST_BEGIN_CLEAR = 2, 354197104Sjkim ACPI_ERST_END = 3, 355193267Sjkim ACPI_ERST_SET_RECORD_OFFSET = 4, 356193267Sjkim ACPI_ERST_EXECUTE_OPERATION = 5, 357193267Sjkim ACPI_ERST_CHECK_BUSY_STATUS = 6, 358193267Sjkim ACPI_ERST_GET_COMMAND_STATUS = 7, 359197104Sjkim ACPI_ERST_GET_RECORD_ID = 8, 360197104Sjkim ACPI_ERST_SET_RECORD_ID = 9, 361193267Sjkim ACPI_ERST_GET_RECORD_COUNT = 10, 362193267Sjkim ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 363193267Sjkim ACPI_ERST_NOT_USED = 12, 364193267Sjkim ACPI_ERST_GET_ERROR_RANGE = 13, 365193267Sjkim ACPI_ERST_GET_ERROR_LENGTH = 14, 366193267Sjkim ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 367193267Sjkim ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */ 368193267Sjkim}; 369193267Sjkim 370193267Sjkim/* Values for Instruction field above */ 371193267Sjkim 372193267Sjkimenum AcpiErstInstructions 373193267Sjkim{ 374193267Sjkim ACPI_ERST_READ_REGISTER = 0, 375193267Sjkim ACPI_ERST_READ_REGISTER_VALUE = 1, 376193267Sjkim ACPI_ERST_WRITE_REGISTER = 2, 377193267Sjkim ACPI_ERST_WRITE_REGISTER_VALUE = 3, 378193267Sjkim ACPI_ERST_NOOP = 4, 379193267Sjkim ACPI_ERST_LOAD_VAR1 = 5, 380193267Sjkim ACPI_ERST_LOAD_VAR2 = 6, 381193267Sjkim ACPI_ERST_STORE_VAR1 = 7, 382193267Sjkim ACPI_ERST_ADD = 8, 383193267Sjkim ACPI_ERST_SUBTRACT = 9, 384193267Sjkim ACPI_ERST_ADD_VALUE = 10, 385193267Sjkim ACPI_ERST_SUBTRACT_VALUE = 11, 386193267Sjkim ACPI_ERST_STALL = 12, 387193267Sjkim ACPI_ERST_STALL_WHILE_TRUE = 13, 388193267Sjkim ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 389193267Sjkim ACPI_ERST_GOTO = 15, 390193267Sjkim ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 391193267Sjkim ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 392193267Sjkim ACPI_ERST_MOVE_DATA = 18, 393193267Sjkim ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 394193267Sjkim}; 395193267Sjkim 396197104Sjkim/* Command status return values */ 397193267Sjkim 398197104Sjkimenum AcpiErstCommandStatus 399197104Sjkim{ 400197104Sjkim ACPI_ERST_SUCESS = 0, 401197104Sjkim ACPI_ERST_NO_SPACE = 1, 402197104Sjkim ACPI_ERST_NOT_AVAILABLE = 2, 403197104Sjkim ACPI_ERST_FAILURE = 3, 404197104Sjkim ACPI_ERST_RECORD_EMPTY = 4, 405197104Sjkim ACPI_ERST_NOT_FOUND = 5, 406197104Sjkim ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 407197104Sjkim}; 408197104Sjkim 409197104Sjkim 410197104Sjkim/* Error Record Serialization Information */ 411197104Sjkim 412197104Sjkimtypedef struct acpi_erst_info 413197104Sjkim{ 414197104Sjkim UINT16 Signature; /* Should be "ER" */ 415197104Sjkim UINT8 Data[48]; 416197104Sjkim 417197104Sjkim} ACPI_ERST_INFO; 418197104Sjkim 419197104Sjkim 420193267Sjkim/******************************************************************************* 421193267Sjkim * 422197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0) 423197104Sjkim * Version 1 424193267Sjkim * 425193267Sjkim ******************************************************************************/ 426193267Sjkim 427193267Sjkimtypedef struct acpi_table_hest 428193267Sjkim{ 429193267Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 430193267Sjkim UINT32 ErrorSourceCount; 431193267Sjkim 432193267Sjkim} ACPI_TABLE_HEST; 433193267Sjkim 434193267Sjkim 435193267Sjkim/* HEST subtable header */ 436193267Sjkim 437193267Sjkimtypedef struct acpi_hest_header 438193267Sjkim{ 439193267Sjkim UINT16 Type; 440197104Sjkim UINT16 SourceId; 441193267Sjkim 442193267Sjkim} ACPI_HEST_HEADER; 443193267Sjkim 444193267Sjkim 445193267Sjkim/* Values for Type field above for subtables */ 446193267Sjkim 447193267Sjkimenum AcpiHestTypes 448193267Sjkim{ 449197104Sjkim ACPI_HEST_TYPE_IA32_CHECK = 0, 450197104Sjkim ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 451197104Sjkim ACPI_HEST_TYPE_IA32_NMI = 2, 452197104Sjkim ACPI_HEST_TYPE_NOT_USED3 = 3, 453197104Sjkim ACPI_HEST_TYPE_NOT_USED4 = 4, 454197104Sjkim ACPI_HEST_TYPE_NOT_USED5 = 5, 455197104Sjkim ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 456197104Sjkim ACPI_HEST_TYPE_AER_ENDPOINT = 7, 457197104Sjkim ACPI_HEST_TYPE_AER_BRIDGE = 8, 458197104Sjkim ACPI_HEST_TYPE_GENERIC_ERROR = 9, 459197104Sjkim ACPI_HEST_TYPE_RESERVED = 10 /* 10 and greater are reserved */ 460193267Sjkim}; 461193267Sjkim 462193267Sjkim 463193267Sjkim/* 464197104Sjkim * HEST substructures contained in subtables 465193267Sjkim */ 466193267Sjkim 467197104Sjkim/* 468197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 469197104Sjkim * ACPI_HEST_IA_CORRECTED structures. 470197104Sjkim */ 471197104Sjkimtypedef struct acpi_hest_ia_error_bank 472193267Sjkim{ 473193267Sjkim UINT8 BankNumber; 474193267Sjkim UINT8 ClearStatusOnInit; 475193267Sjkim UINT8 StatusFormat; 476197104Sjkim UINT8 Reserved; 477193267Sjkim UINT32 ControlRegister; 478197104Sjkim UINT64 ControlData; 479193267Sjkim UINT32 StatusRegister; 480193267Sjkim UINT32 AddressRegister; 481193267Sjkim UINT32 MiscRegister; 482193267Sjkim 483197104Sjkim} ACPI_HEST_IA_ERROR_BANK; 484193267Sjkim 485193267Sjkim 486197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 487193267Sjkim 488193267Sjkimtypedef struct acpi_hest_aer_common 489193267Sjkim{ 490197104Sjkim UINT16 Reserved1; 491193267Sjkim UINT8 Flags; 492193267Sjkim UINT8 Enabled; 493197104Sjkim UINT32 RecordsToPreallocate; 494193267Sjkim UINT32 MaxSectionsPerRecord; 495193267Sjkim UINT32 Bus; 496193267Sjkim UINT16 Device; 497193267Sjkim UINT16 Function; 498193267Sjkim UINT16 DeviceControl; 499197104Sjkim UINT16 Reserved2; 500197104Sjkim UINT32 UncorrectableMask; 501197104Sjkim UINT32 UncorrectableSeverity; 502197104Sjkim UINT32 CorrectableMask; 503197104Sjkim UINT32 AdvancedCapabilities; 504193267Sjkim 505193267Sjkim} ACPI_HEST_AER_COMMON; 506193267Sjkim 507197104Sjkim/* Masks for HEST Flags fields */ 508193267Sjkim 509197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST (1) 510197104Sjkim#define ACPI_HEST_GLOBAL (1<<1) 511197104Sjkim 512197104Sjkim 513193267Sjkim/* Hardware Error Notification */ 514193267Sjkim 515193267Sjkimtypedef struct acpi_hest_notify 516193267Sjkim{ 517193267Sjkim UINT8 Type; 518193267Sjkim UINT8 Length; 519193267Sjkim UINT16 ConfigWriteEnable; 520193267Sjkim UINT32 PollInterval; 521193267Sjkim UINT32 Vector; 522193267Sjkim UINT32 PollingThresholdValue; 523193267Sjkim UINT32 PollingThresholdWindow; 524193267Sjkim UINT32 ErrorThresholdValue; 525193267Sjkim UINT32 ErrorThresholdWindow; 526193267Sjkim 527193267Sjkim} ACPI_HEST_NOTIFY; 528193267Sjkim 529193267Sjkim/* Values for Notify Type field above */ 530193267Sjkim 531193267Sjkimenum AcpiHestNotifyTypes 532193267Sjkim{ 533193267Sjkim ACPI_HEST_NOTIFY_POLLED = 0, 534193267Sjkim ACPI_HEST_NOTIFY_EXTERNAL = 1, 535193267Sjkim ACPI_HEST_NOTIFY_LOCAL = 2, 536193267Sjkim ACPI_HEST_NOTIFY_SCI = 3, 537193267Sjkim ACPI_HEST_NOTIFY_NMI = 4, 538193267Sjkim ACPI_HEST_NOTIFY_RESERVED = 5 /* 5 and greater are reserved */ 539193267Sjkim}; 540193267Sjkim 541197104Sjkim/* Values for ConfigWriteEnable bitfield above */ 542193267Sjkim 543197104Sjkim#define ACPI_HEST_TYPE (1) 544197104Sjkim#define ACPI_HEST_POLL_INTERVAL (1<<1) 545197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 546197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 547197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 548197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 549197104Sjkim 550197104Sjkim 551193267Sjkim/* 552193267Sjkim * HEST subtables 553193267Sjkim */ 554193267Sjkim 555197104Sjkim/* 0: IA32 Machine Check Exception */ 556193267Sjkim 557197104Sjkimtypedef struct acpi_hest_ia_machine_check 558193267Sjkim{ 559193267Sjkim ACPI_HEST_HEADER Header; 560197104Sjkim UINT16 Reserved1; 561193267Sjkim UINT8 Flags; 562197104Sjkim UINT8 Enabled; 563197104Sjkim UINT32 RecordsToPreallocate; 564193267Sjkim UINT32 MaxSectionsPerRecord; 565193267Sjkim UINT64 GlobalCapabilityData; 566193267Sjkim UINT64 GlobalControlData; 567193267Sjkim UINT8 NumHardwareBanks; 568197104Sjkim UINT8 Reserved3[7]; 569193267Sjkim 570197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK; 571193267Sjkim 572193267Sjkim 573197104Sjkim/* 1: IA32 Corrected Machine Check */ 574193267Sjkim 575197104Sjkimtypedef struct acpi_hest_ia_corrected 576193267Sjkim{ 577193267Sjkim ACPI_HEST_HEADER Header; 578197104Sjkim UINT16 Reserved1; 579193267Sjkim UINT8 Flags; 580193267Sjkim UINT8 Enabled; 581197104Sjkim UINT32 RecordsToPreallocate; 582193267Sjkim UINT32 MaxSectionsPerRecord; 583193267Sjkim ACPI_HEST_NOTIFY Notify; 584193267Sjkim UINT8 NumHardwareBanks; 585197104Sjkim UINT8 Reserved2[3]; 586193267Sjkim 587197104Sjkim} ACPI_HEST_IA_CORRECTED; 588193267Sjkim 589193267Sjkim 590197104Sjkim/* 2: IA32 Non-Maskable Interrupt */ 591193267Sjkim 592197104Sjkimtypedef struct acpi_hest_ia_nmi 593193267Sjkim{ 594193267Sjkim ACPI_HEST_HEADER Header; 595193267Sjkim UINT32 Reserved; 596197104Sjkim UINT32 RecordsToPreallocate; 597193267Sjkim UINT32 MaxSectionsPerRecord; 598193267Sjkim UINT32 MaxRawDataLength; 599193267Sjkim 600197104Sjkim} ACPI_HEST_IA_NMI; 601193267Sjkim 602193267Sjkim 603197104Sjkim/* 3,4,5: Not used */ 604193267Sjkim 605193267Sjkim/* 6: PCI Express Root Port AER */ 606193267Sjkim 607193267Sjkimtypedef struct acpi_hest_aer_root 608193267Sjkim{ 609193267Sjkim ACPI_HEST_HEADER Header; 610193267Sjkim ACPI_HEST_AER_COMMON Aer; 611193267Sjkim UINT32 RootErrorCommand; 612193267Sjkim 613193267Sjkim} ACPI_HEST_AER_ROOT; 614193267Sjkim 615193267Sjkim 616193267Sjkim/* 7: PCI Express AER (AER Endpoint) */ 617193267Sjkim 618193267Sjkimtypedef struct acpi_hest_aer 619193267Sjkim{ 620193267Sjkim ACPI_HEST_HEADER Header; 621193267Sjkim ACPI_HEST_AER_COMMON Aer; 622193267Sjkim 623193267Sjkim} ACPI_HEST_AER; 624193267Sjkim 625193267Sjkim 626193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */ 627193267Sjkim 628193267Sjkimtypedef struct acpi_hest_aer_bridge 629193267Sjkim{ 630193267Sjkim ACPI_HEST_HEADER Header; 631193267Sjkim ACPI_HEST_AER_COMMON Aer; 632197104Sjkim UINT32 UncorrectableMask2; 633197104Sjkim UINT32 UncorrectableSeverity2; 634197104Sjkim UINT32 AdvancedCapabilities2; 635193267Sjkim 636193267Sjkim} ACPI_HEST_AER_BRIDGE; 637193267Sjkim 638193267Sjkim 639193267Sjkim/* 9: Generic Hardware Error Source */ 640193267Sjkim 641193267Sjkimtypedef struct acpi_hest_generic 642193267Sjkim{ 643193267Sjkim ACPI_HEST_HEADER Header; 644193267Sjkim UINT16 RelatedSourceId; 645197104Sjkim UINT8 Reserved; 646193267Sjkim UINT8 Enabled; 647197104Sjkim UINT32 RecordsToPreallocate; 648193267Sjkim UINT32 MaxSectionsPerRecord; 649193267Sjkim UINT32 MaxRawDataLength; 650193267Sjkim ACPI_GENERIC_ADDRESS ErrorStatusAddress; 651193267Sjkim ACPI_HEST_NOTIFY Notify; 652197104Sjkim UINT32 ErrorBlockLength; 653193267Sjkim 654193267Sjkim} ACPI_HEST_GENERIC; 655193267Sjkim 656193267Sjkim 657197104Sjkim/* Generic Error Status block */ 658167802Sjkim 659197104Sjkimtypedef struct acpi_hest_generic_status 660167802Sjkim{ 661197104Sjkim UINT32 BlockStatus; 662197104Sjkim UINT32 RawDataOffset; 663197104Sjkim UINT32 RawDataLength; 664197104Sjkim UINT32 DataLength; 665197104Sjkim UINT32 ErrorSeverity; 666167802Sjkim 667197104Sjkim} ACPI_HEST_GENERIC_STATUS; 668167802Sjkim 669197104Sjkim/* Values for BlockStatus flags above */ 670167802Sjkim 671197104Sjkim#define ACPI_HEST_UNCORRECTABLE (1) 672197104Sjkim#define ACPI_HEST_CORRECTABLE (1<<1) 673197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 674197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 675197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 676167802Sjkim 677167802Sjkim 678197104Sjkim/* Generic Error Data entry */ 679167802Sjkim 680197104Sjkimtypedef struct acpi_hest_generic_data 681193267Sjkim{ 682197104Sjkim UINT8 SectionType[16]; 683197104Sjkim UINT32 ErrorSeverity; 684197104Sjkim UINT16 Revision; 685197104Sjkim UINT8 ValidationBits; 686193267Sjkim UINT8 Flags; 687197104Sjkim UINT32 ErrorDataLength; 688197104Sjkim UINT8 FruId[16]; 689197104Sjkim UINT8 FruText[20]; 690193267Sjkim 691197104Sjkim} ACPI_HEST_GENERIC_DATA; 692193267Sjkim 693193267Sjkim 694193267Sjkim/******************************************************************************* 695193267Sjkim * 696167802Sjkim * MADT - Multiple APIC Description Table 697197104Sjkim * Version 3 698167802Sjkim * 699167802Sjkim ******************************************************************************/ 700167802Sjkim 701167802Sjkimtypedef struct acpi_table_madt 702167802Sjkim{ 703167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 704167802Sjkim UINT32 Address; /* Physical address of local APIC */ 705167802Sjkim UINT32 Flags; 706167802Sjkim 707167802Sjkim} ACPI_TABLE_MADT; 708167802Sjkim 709197104Sjkim/* Masks for Flags field above */ 710167802Sjkim 711197104Sjkim#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 712167802Sjkim 713167802Sjkim/* Values for PCATCompat flag */ 714167802Sjkim 715167802Sjkim#define ACPI_MADT_DUAL_PIC 0 716167802Sjkim#define ACPI_MADT_MULTIPLE_APIC 1 717167802Sjkim 718167802Sjkim 719197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 720167802Sjkim 721167802Sjkimenum AcpiMadtType 722167802Sjkim{ 723167802Sjkim ACPI_MADT_TYPE_LOCAL_APIC = 0, 724167802Sjkim ACPI_MADT_TYPE_IO_APIC = 1, 725167802Sjkim ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 726167802Sjkim ACPI_MADT_TYPE_NMI_SOURCE = 3, 727167802Sjkim ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 728167802Sjkim ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 729167802Sjkim ACPI_MADT_TYPE_IO_SAPIC = 6, 730167802Sjkim ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 731167802Sjkim ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 732193267Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 733193267Sjkim ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 734193267Sjkim ACPI_MADT_TYPE_RESERVED = 11 /* 11 and greater are reserved */ 735167802Sjkim}; 736167802Sjkim 737167802Sjkim 738167802Sjkim/* 739167802Sjkim * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER 740167802Sjkim */ 741167802Sjkim 742167802Sjkim/* 0: Processor Local APIC */ 743167802Sjkim 744167802Sjkimtypedef struct acpi_madt_local_apic 745167802Sjkim{ 746167802Sjkim ACPI_SUBTABLE_HEADER Header; 747167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 748167802Sjkim UINT8 Id; /* Processor's local APIC id */ 749167802Sjkim UINT32 LapicFlags; 750167802Sjkim 751167802Sjkim} ACPI_MADT_LOCAL_APIC; 752167802Sjkim 753197104Sjkim 754167802Sjkim/* 1: IO APIC */ 755167802Sjkim 756167802Sjkimtypedef struct acpi_madt_io_apic 757167802Sjkim{ 758167802Sjkim ACPI_SUBTABLE_HEADER Header; 759167802Sjkim UINT8 Id; /* I/O APIC ID */ 760167802Sjkim UINT8 Reserved; /* Reserved - must be zero */ 761167802Sjkim UINT32 Address; /* APIC physical address */ 762167802Sjkim UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 763167802Sjkim 764167802Sjkim} ACPI_MADT_IO_APIC; 765167802Sjkim 766197104Sjkim 767167802Sjkim/* 2: Interrupt Override */ 768167802Sjkim 769167802Sjkimtypedef struct acpi_madt_interrupt_override 770167802Sjkim{ 771167802Sjkim ACPI_SUBTABLE_HEADER Header; 772167802Sjkim UINT8 Bus; /* 0 - ISA */ 773167802Sjkim UINT8 SourceIrq; /* Interrupt source (IRQ) */ 774167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 775167802Sjkim UINT16 IntiFlags; 776167802Sjkim 777167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE; 778167802Sjkim 779197104Sjkim 780167802Sjkim/* 3: NMI Source */ 781167802Sjkim 782167802Sjkimtypedef struct acpi_madt_nmi_source 783167802Sjkim{ 784167802Sjkim ACPI_SUBTABLE_HEADER Header; 785167802Sjkim UINT16 IntiFlags; 786167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 787167802Sjkim 788167802Sjkim} ACPI_MADT_NMI_SOURCE; 789167802Sjkim 790197104Sjkim 791167802Sjkim/* 4: Local APIC NMI */ 792167802Sjkim 793167802Sjkimtypedef struct acpi_madt_local_apic_nmi 794167802Sjkim{ 795167802Sjkim ACPI_SUBTABLE_HEADER Header; 796167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 797167802Sjkim UINT16 IntiFlags; 798167802Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 799167802Sjkim 800167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI; 801167802Sjkim 802197104Sjkim 803167802Sjkim/* 5: Address Override */ 804167802Sjkim 805167802Sjkimtypedef struct acpi_madt_local_apic_override 806167802Sjkim{ 807167802Sjkim ACPI_SUBTABLE_HEADER Header; 808167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 809167802Sjkim UINT64 Address; /* APIC physical address */ 810167802Sjkim 811167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE; 812167802Sjkim 813197104Sjkim 814167802Sjkim/* 6: I/O Sapic */ 815167802Sjkim 816167802Sjkimtypedef struct acpi_madt_io_sapic 817167802Sjkim{ 818167802Sjkim ACPI_SUBTABLE_HEADER Header; 819167802Sjkim UINT8 Id; /* I/O SAPIC ID */ 820167802Sjkim UINT8 Reserved; /* Reserved, must be zero */ 821167802Sjkim UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 822167802Sjkim UINT64 Address; /* SAPIC physical address */ 823167802Sjkim 824167802Sjkim} ACPI_MADT_IO_SAPIC; 825167802Sjkim 826197104Sjkim 827167802Sjkim/* 7: Local Sapic */ 828167802Sjkim 829167802Sjkimtypedef struct acpi_madt_local_sapic 830167802Sjkim{ 831167802Sjkim ACPI_SUBTABLE_HEADER Header; 832167802Sjkim UINT8 ProcessorId; /* ACPI processor id */ 833167802Sjkim UINT8 Id; /* SAPIC ID */ 834167802Sjkim UINT8 Eid; /* SAPIC EID */ 835167802Sjkim UINT8 Reserved[3]; /* Reserved, must be zero */ 836167802Sjkim UINT32 LapicFlags; 837167802Sjkim UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 838167802Sjkim char UidString[1]; /* String UID - ACPI 3.0 */ 839167802Sjkim 840167802Sjkim} ACPI_MADT_LOCAL_SAPIC; 841167802Sjkim 842197104Sjkim 843167802Sjkim/* 8: Platform Interrupt Source */ 844167802Sjkim 845167802Sjkimtypedef struct acpi_madt_interrupt_source 846167802Sjkim{ 847167802Sjkim ACPI_SUBTABLE_HEADER Header; 848167802Sjkim UINT16 IntiFlags; 849167802Sjkim UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 850167802Sjkim UINT8 Id; /* Processor ID */ 851167802Sjkim UINT8 Eid; /* Processor EID */ 852167802Sjkim UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 853167802Sjkim UINT32 GlobalIrq; /* Global system interrupt */ 854167802Sjkim UINT32 Flags; /* Interrupt Source Flags */ 855167802Sjkim 856167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE; 857167802Sjkim 858197104Sjkim/* Masks for Flags field above */ 859167802Sjkim 860167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE (1) 861167802Sjkim 862167802Sjkim 863197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */ 864197104Sjkim 865193267Sjkimtypedef struct acpi_madt_local_x2apic 866193267Sjkim{ 867193267Sjkim ACPI_SUBTABLE_HEADER Header; 868193267Sjkim UINT16 Reserved; /* Reserved - must be zero */ 869193267Sjkim UINT32 LocalApicId; /* Processor x2APIC ID */ 870193267Sjkim UINT32 LapicFlags; 871193267Sjkim UINT32 Uid; /* ACPI processor UID */ 872193267Sjkim 873193267Sjkim} ACPI_MADT_LOCAL_X2APIC; 874193267Sjkim 875193267Sjkim 876197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */ 877197104Sjkim 878193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi 879193267Sjkim{ 880193267Sjkim ACPI_SUBTABLE_HEADER Header; 881193267Sjkim UINT16 IntiFlags; 882193267Sjkim UINT32 Uid; /* ACPI processor UID */ 883193267Sjkim UINT8 Lint; /* LINTn to which NMI is connected */ 884193267Sjkim UINT8 Reserved[3]; /* Reserved - must be zero */ 885193267Sjkim 886193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI; 887193267Sjkim 888193267Sjkim 889167802Sjkim/* 890167802Sjkim * Common flags fields for MADT subtables 891167802Sjkim */ 892167802Sjkim 893167802Sjkim/* MADT Local APIC flags (LapicFlags) */ 894167802Sjkim 895167802Sjkim#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 896167802Sjkim 897167802Sjkim/* MADT MPS INTI flags (IntiFlags) */ 898167802Sjkim 899167802Sjkim#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 900167802Sjkim#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 901167802Sjkim 902167802Sjkim/* Values for MPS INTI flags */ 903167802Sjkim 904167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS 0 905167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 906167802Sjkim#define ACPI_MADT_POLARITY_RESERVED 2 907167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 908167802Sjkim 909167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS (0) 910167802Sjkim#define ACPI_MADT_TRIGGER_EDGE (1<<2) 911167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED (2<<2) 912167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL (3<<2) 913167802Sjkim 914167802Sjkim 915167802Sjkim/******************************************************************************* 916167802Sjkim * 917197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0) 918197104Sjkim * Version 1 919167802Sjkim * 920167802Sjkim ******************************************************************************/ 921167802Sjkim 922197104Sjkimtypedef struct acpi_table_msct 923167802Sjkim{ 924167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 925197104Sjkim UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 926197104Sjkim UINT32 MaxProximityDomains;/* Max number of proximity domains */ 927197104Sjkim UINT32 MaxClockDomains; /* Max number of clock domains */ 928197104Sjkim UINT64 MaxAddress; /* Max physical address in system */ 929167802Sjkim 930197104Sjkim} ACPI_TABLE_MSCT; 931167802Sjkim 932167802Sjkim 933197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */ 934167802Sjkim 935197104Sjkimtypedef struct acpi_msct_proximity 936167802Sjkim{ 937197104Sjkim UINT8 Revision; 938197104Sjkim UINT8 Length; 939197104Sjkim UINT32 RangeStart; /* Start of domain range */ 940197104Sjkim UINT32 RangeEnd; /* End of domain range */ 941197104Sjkim UINT32 ProcessorCapacity; 942197104Sjkim UINT64 MemoryCapacity; /* In bytes */ 943167802Sjkim 944197104Sjkim} ACPI_MSCT_PROXIMITY; 945167802Sjkim 946167802Sjkim 947167802Sjkim/******************************************************************************* 948167802Sjkim * 949167802Sjkim * SBST - Smart Battery Specification Table 950197104Sjkim * Version 1 951167802Sjkim * 952167802Sjkim ******************************************************************************/ 953167802Sjkim 954167802Sjkimtypedef struct acpi_table_sbst 955167802Sjkim{ 956167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 957167802Sjkim UINT32 WarningLevel; 958167802Sjkim UINT32 LowLevel; 959167802Sjkim UINT32 CriticalLevel; 960167802Sjkim 961167802Sjkim} ACPI_TABLE_SBST; 962167802Sjkim 963167802Sjkim 964167802Sjkim/******************************************************************************* 965167802Sjkim * 966167802Sjkim * SLIT - System Locality Distance Information Table 967197104Sjkim * Version 1 968167802Sjkim * 969167802Sjkim ******************************************************************************/ 970167802Sjkim 971167802Sjkimtypedef struct acpi_table_slit 972167802Sjkim{ 973167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 974167802Sjkim UINT64 LocalityCount; 975167802Sjkim UINT8 Entry[1]; /* Real size = localities^2 */ 976167802Sjkim 977167802Sjkim} ACPI_TABLE_SLIT; 978167802Sjkim 979167802Sjkim 980167802Sjkim/******************************************************************************* 981167802Sjkim * 982167802Sjkim * SRAT - System Resource Affinity Table 983197104Sjkim * Version 3 984167802Sjkim * 985167802Sjkim ******************************************************************************/ 986167802Sjkim 987167802Sjkimtypedef struct acpi_table_srat 988167802Sjkim{ 989167802Sjkim ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 990167802Sjkim UINT32 TableRevision; /* Must be value '1' */ 991167802Sjkim UINT64 Reserved; /* Reserved, must be zero */ 992167802Sjkim 993167802Sjkim} ACPI_TABLE_SRAT; 994167802Sjkim 995167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 996167802Sjkim 997167802Sjkimenum AcpiSratType 998167802Sjkim{ 999193267Sjkim ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1000193267Sjkim ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1001193267Sjkim ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 1002193267Sjkim ACPI_SRAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 1003167802Sjkim}; 1004167802Sjkim 1005193267Sjkim/* 1006193267Sjkim * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER 1007193267Sjkim */ 1008167802Sjkim 1009193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */ 1010193267Sjkim 1011167802Sjkimtypedef struct acpi_srat_cpu_affinity 1012167802Sjkim{ 1013167802Sjkim ACPI_SUBTABLE_HEADER Header; 1014167802Sjkim UINT8 ProximityDomainLo; 1015167802Sjkim UINT8 ApicId; 1016167802Sjkim UINT32 Flags; 1017167802Sjkim UINT8 LocalSapicEid; 1018167802Sjkim UINT8 ProximityDomainHi[3]; 1019167802Sjkim UINT32 Reserved; /* Reserved, must be zero */ 1020167802Sjkim 1021167802Sjkim} ACPI_SRAT_CPU_AFFINITY; 1022167802Sjkim 1023197104Sjkim/* Flags */ 1024197104Sjkim 1025197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 1026197104Sjkim 1027197104Sjkim 1028193267Sjkim/* 1: Memory Affinity */ 1029167802Sjkim 1030167802Sjkimtypedef struct acpi_srat_mem_affinity 1031167802Sjkim{ 1032167802Sjkim ACPI_SUBTABLE_HEADER Header; 1033167802Sjkim UINT32 ProximityDomain; 1034167802Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1035167802Sjkim UINT64 BaseAddress; 1036167802Sjkim UINT64 Length; 1037193267Sjkim UINT32 Reserved1; 1038167802Sjkim UINT32 Flags; 1039193267Sjkim UINT64 Reserved2; /* Reserved, must be zero */ 1040167802Sjkim 1041167802Sjkim} ACPI_SRAT_MEM_AFFINITY; 1042167802Sjkim 1043167802Sjkim/* Flags */ 1044167802Sjkim 1045167802Sjkim#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1046167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1047167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1048167802Sjkim 1049167802Sjkim 1050197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 1051197104Sjkim 1052193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity 1053167802Sjkim{ 1054193267Sjkim ACPI_SUBTABLE_HEADER Header; 1055193267Sjkim UINT16 Reserved; /* Reserved, must be zero */ 1056193267Sjkim UINT32 ProximityDomain; 1057193267Sjkim UINT32 ApicId; 1058193267Sjkim UINT32 Flags; 1059197104Sjkim UINT32 ClockDomain; 1060197104Sjkim UINT32 Reserved2; 1061167802Sjkim 1062193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY; 1063167802Sjkim 1064193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ 1065193267Sjkim 1066193267Sjkim#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 1067193267Sjkim 1068193267Sjkim 1069167802Sjkim/* Reset to default packing */ 1070167802Sjkim 107169450Smsmith#pragma pack() 107269450Smsmith 107369450Smsmith#endif /* __ACTBL1_H__ */ 1074