1 /****************************************************************************** 2 * 3 * Name: actbl1.h - Additional ACPI table definitions 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2011, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44 #ifndef __ACTBL1_H__ 45 #define __ACTBL1_H__ 46 47 /******************************************************************************* 48 * 49 * Additional ACPI Tables (1) 50 * 51 * These tables are not consumed directly by the ACPICA subsystem, but are 52 * included here to support device drivers and the AML disassembler. 53 * 54 * The tables in this file are fully defined within the ACPI specification. 55 * 56 ******************************************************************************/ 57 58 /* 59 * Values for description table header signatures for tables defined in this 60 * file. Useful because they make it more difficult to inadvertently type in 61 * the wrong signature. 62 */ 63 #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 64 #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 65 #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 66 #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 67 #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 68 #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 69 #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 70 #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ 71 #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 72 #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 73 #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 74 75 /* 76 * All tables must be byte-packed to match the ACPI specification, since 77 * the tables are provided by the system BIOS. 78 */ 79 #pragma pack(1) 80 81 /* 82 * Note about bitfields: The u8 type is used for bitfields in ACPI tables. 83 * This is the only type that is even remotely portable. Anything else is not 84 * portable, so do not use any other bitfield types. 85 */ 86 87 /******************************************************************************* 88 * 89 * Common subtable headers 90 * 91 ******************************************************************************/ 92 93 /* Generic subtable header (used in MADT, SRAT, etc.) */ 94 95 struct acpi_subtable_header { 96 u8 type; 97 u8 length; 98 }; 99 100 /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 101 102 struct acpi_whea_header { 103 u8 action; 104 u8 instruction; 105 u8 flags; 106 u8 reserved; 107 struct acpi_generic_address register_region; 108 u64 value; /* Value used with Read/Write register */ 109 u64 mask; /* Bitmask required for this register instruction */ 110 }; 111 112 /******************************************************************************* 113 * 114 * BERT - Boot Error Record Table (ACPI 4.0) 115 * Version 1 116 * 117 ******************************************************************************/ 118 119 struct acpi_table_bert { 120 struct acpi_table_header header; /* Common ACPI table header */ 121 u32 region_length; /* Length of the boot error region */ 122 u64 address; /* Physical address of the error region */ 123 }; 124 125 /* Boot Error Region (not a subtable, pointed to by Address field above) */ 126 127 struct acpi_bert_region { 128 u32 block_status; /* Type of error information */ 129 u32 raw_data_offset; /* Offset to raw error data */ 130 u32 raw_data_length; /* Length of raw error data */ 131 u32 data_length; /* Length of generic error data */ 132 u32 error_severity; /* Severity code */ 133 }; 134 135 /* Values for block_status flags above */ 136 137 #define ACPI_BERT_UNCORRECTABLE (1) 138 #define ACPI_BERT_CORRECTABLE (1<<1) 139 #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 140 #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 141 #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 142 143 /* Values for error_severity above */ 144 145 enum acpi_bert_error_severity { 146 ACPI_BERT_ERROR_CORRECTABLE = 0, 147 ACPI_BERT_ERROR_FATAL = 1, 148 ACPI_BERT_ERROR_CORRECTED = 2, 149 ACPI_BERT_ERROR_NONE = 3, 150 ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 151 }; 152 153 /* 154 * Note: The generic error data that follows the error_severity field above 155 * uses the struct acpi_hest_generic_data defined under the HEST table below 156 */ 157 158 /******************************************************************************* 159 * 160 * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 161 * Version 1 162 * 163 ******************************************************************************/ 164 165 struct acpi_table_cpep { 166 struct acpi_table_header header; /* Common ACPI table header */ 167 u64 reserved; 168 }; 169 170 /* Subtable */ 171 172 struct acpi_cpep_polling { 173 struct acpi_subtable_header header; 174 u8 id; /* Processor ID */ 175 u8 eid; /* Processor EID */ 176 u32 interval; /* Polling interval (msec) */ 177 }; 178 179 /******************************************************************************* 180 * 181 * ECDT - Embedded Controller Boot Resources Table 182 * Version 1 183 * 184 ******************************************************************************/ 185 186 struct acpi_table_ecdt { 187 struct acpi_table_header header; /* Common ACPI table header */ 188 struct acpi_generic_address control; /* Address of EC command/status register */ 189 struct acpi_generic_address data; /* Address of EC data register */ 190 u32 uid; /* Unique ID - must be same as the EC _UID method */ 191 u8 gpe; /* The GPE for the EC */ 192 u8 id[1]; /* Full namepath of the EC in the ACPI namespace */ 193 }; 194 195 /******************************************************************************* 196 * 197 * EINJ - Error Injection Table (ACPI 4.0) 198 * Version 1 199 * 200 ******************************************************************************/ 201 202 struct acpi_table_einj { 203 struct acpi_table_header header; /* Common ACPI table header */ 204 u32 header_length; 205 u8 flags; 206 u8 reserved[3]; 207 u32 entries; 208 }; 209 210 /* EINJ Injection Instruction Entries (actions) */ 211 212 struct acpi_einj_entry { 213 struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 214 }; 215 216 /* Masks for Flags field above */ 217 218 #define ACPI_EINJ_PRESERVE (1) 219 220 /* Values for Action field above */ 221 222 enum acpi_einj_actions { 223 ACPI_EINJ_BEGIN_OPERATION = 0, 224 ACPI_EINJ_GET_TRIGGER_TABLE = 1, 225 ACPI_EINJ_SET_ERROR_TYPE = 2, 226 ACPI_EINJ_GET_ERROR_TYPE = 3, 227 ACPI_EINJ_END_OPERATION = 4, 228 ACPI_EINJ_EXECUTE_OPERATION = 5, 229 ACPI_EINJ_CHECK_BUSY_STATUS = 6, 230 ACPI_EINJ_GET_COMMAND_STATUS = 7, 231 ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 232 ACPI_EINJ_ACTION_RESERVED = 9, /* 9 and greater are reserved */ 233 ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 234 }; 235 236 /* Values for Instruction field above */ 237 238 enum acpi_einj_instructions { 239 ACPI_EINJ_READ_REGISTER = 0, 240 ACPI_EINJ_READ_REGISTER_VALUE = 1, 241 ACPI_EINJ_WRITE_REGISTER = 2, 242 ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 243 ACPI_EINJ_NOOP = 4, 244 ACPI_EINJ_FLUSH_CACHELINE = 5, 245 ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 246 }; 247 248 struct acpi_einj_error_type_with_addr { 249 u32 error_type; 250 u32 vendor_struct_offset; 251 u32 flags; 252 u32 apic_id; 253 u64 address; 254 u64 range; 255 u32 pcie_id; 256 }; 257 258 struct acpi_einj_vendor { 259 u32 length; 260 u32 pcie_id; 261 u16 vendor_id; 262 u16 device_id; 263 u8 revision_id; 264 u8 reserved[3]; 265 }; 266 267 /* EINJ Trigger Error Action Table */ 268 269 struct acpi_einj_trigger { 270 u32 header_size; 271 u32 revision; 272 u32 table_size; 273 u32 entry_count; 274 }; 275 276 /* Command status return values */ 277 278 enum acpi_einj_command_status { 279 ACPI_EINJ_SUCCESS = 0, 280 ACPI_EINJ_FAILURE = 1, 281 ACPI_EINJ_INVALID_ACCESS = 2, 282 ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 283 }; 284 285 /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 286 287 #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 288 #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 289 #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 290 #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 291 #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 292 #define ACPI_EINJ_MEMORY_FATAL (1<<5) 293 #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 294 #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 295 #define ACPI_EINJ_PCIX_FATAL (1<<8) 296 #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 297 #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 298 #define ACPI_EINJ_PLATFORM_FATAL (1<<11) 299 #define ACPI_EINJ_VENDOR_DEFINED (1<<31) 300 301 /******************************************************************************* 302 * 303 * ERST - Error Record Serialization Table (ACPI 4.0) 304 * Version 1 305 * 306 ******************************************************************************/ 307 308 struct acpi_table_erst { 309 struct acpi_table_header header; /* Common ACPI table header */ 310 u32 header_length; 311 u32 reserved; 312 u32 entries; 313 }; 314 315 /* ERST Serialization Entries (actions) */ 316 317 struct acpi_erst_entry { 318 struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 319 }; 320 321 /* Masks for Flags field above */ 322 323 #define ACPI_ERST_PRESERVE (1) 324 325 /* Values for Action field above */ 326 327 enum acpi_erst_actions { 328 ACPI_ERST_BEGIN_WRITE = 0, 329 ACPI_ERST_BEGIN_READ = 1, 330 ACPI_ERST_BEGIN_CLEAR = 2, 331 ACPI_ERST_END = 3, 332 ACPI_ERST_SET_RECORD_OFFSET = 4, 333 ACPI_ERST_EXECUTE_OPERATION = 5, 334 ACPI_ERST_CHECK_BUSY_STATUS = 6, 335 ACPI_ERST_GET_COMMAND_STATUS = 7, 336 ACPI_ERST_GET_RECORD_ID = 8, 337 ACPI_ERST_SET_RECORD_ID = 9, 338 ACPI_ERST_GET_RECORD_COUNT = 10, 339 ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 340 ACPI_ERST_NOT_USED = 12, 341 ACPI_ERST_GET_ERROR_RANGE = 13, 342 ACPI_ERST_GET_ERROR_LENGTH = 14, 343 ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 344 ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */ 345 }; 346 347 /* Values for Instruction field above */ 348 349 enum acpi_erst_instructions { 350 ACPI_ERST_READ_REGISTER = 0, 351 ACPI_ERST_READ_REGISTER_VALUE = 1, 352 ACPI_ERST_WRITE_REGISTER = 2, 353 ACPI_ERST_WRITE_REGISTER_VALUE = 3, 354 ACPI_ERST_NOOP = 4, 355 ACPI_ERST_LOAD_VAR1 = 5, 356 ACPI_ERST_LOAD_VAR2 = 6, 357 ACPI_ERST_STORE_VAR1 = 7, 358 ACPI_ERST_ADD = 8, 359 ACPI_ERST_SUBTRACT = 9, 360 ACPI_ERST_ADD_VALUE = 10, 361 ACPI_ERST_SUBTRACT_VALUE = 11, 362 ACPI_ERST_STALL = 12, 363 ACPI_ERST_STALL_WHILE_TRUE = 13, 364 ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 365 ACPI_ERST_GOTO = 15, 366 ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 367 ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 368 ACPI_ERST_MOVE_DATA = 18, 369 ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 370 }; 371 372 /* Command status return values */ 373 374 enum acpi_erst_command_status { 375 ACPI_ERST_SUCESS = 0, 376 ACPI_ERST_NO_SPACE = 1, 377 ACPI_ERST_NOT_AVAILABLE = 2, 378 ACPI_ERST_FAILURE = 3, 379 ACPI_ERST_RECORD_EMPTY = 4, 380 ACPI_ERST_NOT_FOUND = 5, 381 ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 382 }; 383 384 /* Error Record Serialization Information */ 385 386 struct acpi_erst_info { 387 u16 signature; /* Should be "ER" */ 388 u8 data[48]; 389 }; 390 391 /******************************************************************************* 392 * 393 * HEST - Hardware Error Source Table (ACPI 4.0) 394 * Version 1 395 * 396 ******************************************************************************/ 397 398 struct acpi_table_hest { 399 struct acpi_table_header header; /* Common ACPI table header */ 400 u32 error_source_count; 401 }; 402 403 /* HEST subtable header */ 404 405 struct acpi_hest_header { 406 u16 type; 407 u16 source_id; 408 }; 409 410 /* Values for Type field above for subtables */ 411 412 enum acpi_hest_types { 413 ACPI_HEST_TYPE_IA32_CHECK = 0, 414 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 415 ACPI_HEST_TYPE_IA32_NMI = 2, 416 ACPI_HEST_TYPE_NOT_USED3 = 3, 417 ACPI_HEST_TYPE_NOT_USED4 = 4, 418 ACPI_HEST_TYPE_NOT_USED5 = 5, 419 ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 420 ACPI_HEST_TYPE_AER_ENDPOINT = 7, 421 ACPI_HEST_TYPE_AER_BRIDGE = 8, 422 ACPI_HEST_TYPE_GENERIC_ERROR = 9, 423 ACPI_HEST_TYPE_RESERVED = 10 /* 10 and greater are reserved */ 424 }; 425 426 /* 427 * HEST substructures contained in subtables 428 */ 429 430 /* 431 * IA32 Error Bank(s) - Follows the struct acpi_hest_ia_machine_check and 432 * struct acpi_hest_ia_corrected structures. 433 */ 434 struct acpi_hest_ia_error_bank { 435 u8 bank_number; 436 u8 clear_status_on_init; 437 u8 status_format; 438 u8 reserved; 439 u32 control_register; 440 u64 control_data; 441 u32 status_register; 442 u32 address_register; 443 u32 misc_register; 444 }; 445 446 /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 447 448 struct acpi_hest_aer_common { 449 u16 reserved1; 450 u8 flags; 451 u8 enabled; 452 u32 records_to_preallocate; 453 u32 max_sections_per_record; 454 u32 bus; 455 u16 device; 456 u16 function; 457 u16 device_control; 458 u16 reserved2; 459 u32 uncorrectable_mask; 460 u32 uncorrectable_severity; 461 u32 correctable_mask; 462 u32 advanced_capabilities; 463 }; 464 465 /* Masks for HEST Flags fields */ 466 467 #define ACPI_HEST_FIRMWARE_FIRST (1) 468 #define ACPI_HEST_GLOBAL (1<<1) 469 470 /* Hardware Error Notification */ 471 472 struct acpi_hest_notify { 473 u8 type; 474 u8 length; 475 u16 config_write_enable; 476 u32 poll_interval; 477 u32 vector; 478 u32 polling_threshold_value; 479 u32 polling_threshold_window; 480 u32 error_threshold_value; 481 u32 error_threshold_window; 482 }; 483 484 /* Values for Notify Type field above */ 485 486 enum acpi_hest_notify_types { 487 ACPI_HEST_NOTIFY_POLLED = 0, 488 ACPI_HEST_NOTIFY_EXTERNAL = 1, 489 ACPI_HEST_NOTIFY_LOCAL = 2, 490 ACPI_HEST_NOTIFY_SCI = 3, 491 ACPI_HEST_NOTIFY_NMI = 4, 492 ACPI_HEST_NOTIFY_RESERVED = 5 /* 5 and greater are reserved */ 493 }; 494 495 /* Values for config_write_enable bitfield above */ 496 497 #define ACPI_HEST_TYPE (1) 498 #define ACPI_HEST_POLL_INTERVAL (1<<1) 499 #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 500 #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 501 #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 502 #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 503 504 /* 505 * HEST subtables 506 */ 507 508 /* 0: IA32 Machine Check Exception */ 509 510 struct acpi_hest_ia_machine_check { 511 struct acpi_hest_header header; 512 u16 reserved1; 513 u8 flags; 514 u8 enabled; 515 u32 records_to_preallocate; 516 u32 max_sections_per_record; 517 u64 global_capability_data; 518 u64 global_control_data; 519 u8 num_hardware_banks; 520 u8 reserved3[7]; 521 }; 522 523 /* 1: IA32 Corrected Machine Check */ 524 525 struct acpi_hest_ia_corrected { 526 struct acpi_hest_header header; 527 u16 reserved1; 528 u8 flags; 529 u8 enabled; 530 u32 records_to_preallocate; 531 u32 max_sections_per_record; 532 struct acpi_hest_notify notify; 533 u8 num_hardware_banks; 534 u8 reserved2[3]; 535 }; 536 537 /* 2: IA32 Non-Maskable Interrupt */ 538 539 struct acpi_hest_ia_nmi { 540 struct acpi_hest_header header; 541 u32 reserved; 542 u32 records_to_preallocate; 543 u32 max_sections_per_record; 544 u32 max_raw_data_length; 545 }; 546 547 /* 3,4,5: Not used */ 548 549 /* 6: PCI Express Root Port AER */ 550 551 struct acpi_hest_aer_root { 552 struct acpi_hest_header header; 553 struct acpi_hest_aer_common aer; 554 u32 root_error_command; 555 }; 556 557 /* 7: PCI Express AER (AER Endpoint) */ 558 559 struct acpi_hest_aer { 560 struct acpi_hest_header header; 561 struct acpi_hest_aer_common aer; 562 }; 563 564 /* 8: PCI Express/PCI-X Bridge AER */ 565 566 struct acpi_hest_aer_bridge { 567 struct acpi_hest_header header; 568 struct acpi_hest_aer_common aer; 569 u32 uncorrectable_mask2; 570 u32 uncorrectable_severity2; 571 u32 advanced_capabilities2; 572 }; 573 574 /* 9: Generic Hardware Error Source */ 575 576 struct acpi_hest_generic { 577 struct acpi_hest_header header; 578 u16 related_source_id; 579 u8 reserved; 580 u8 enabled; 581 u32 records_to_preallocate; 582 u32 max_sections_per_record; 583 u32 max_raw_data_length; 584 struct acpi_generic_address error_status_address; 585 struct acpi_hest_notify notify; 586 u32 error_block_length; 587 }; 588 589 /* Generic Error Status block */ 590 591 struct acpi_hest_generic_status { 592 u32 block_status; 593 u32 raw_data_offset; 594 u32 raw_data_length; 595 u32 data_length; 596 u32 error_severity; 597 }; 598 599 /* Values for block_status flags above */ 600 601 #define ACPI_HEST_UNCORRECTABLE (1) 602 #define ACPI_HEST_CORRECTABLE (1<<1) 603 #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 604 #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 605 #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 606 607 /* Generic Error Data entry */ 608 609 struct acpi_hest_generic_data { 610 u8 section_type[16]; 611 u32 error_severity; 612 u16 revision; 613 u8 validation_bits; 614 u8 flags; 615 u32 error_data_length; 616 u8 fru_id[16]; 617 u8 fru_text[20]; 618 }; 619 620 /******************************************************************************* 621 * 622 * MADT - Multiple APIC Description Table 623 * Version 3 624 * 625 ******************************************************************************/ 626 627 struct acpi_table_madt { 628 struct acpi_table_header header; /* Common ACPI table header */ 629 u32 address; /* Physical address of local APIC */ 630 u32 flags; 631 }; 632 633 /* Masks for Flags field above */ 634 635 #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 636 637 /* Values for PCATCompat flag */ 638 639 #define ACPI_MADT_DUAL_PIC 0 640 #define ACPI_MADT_MULTIPLE_APIC 1 641 642 /* Values for MADT subtable type in struct acpi_subtable_header */ 643 644 enum acpi_madt_type { 645 ACPI_MADT_TYPE_LOCAL_APIC = 0, 646 ACPI_MADT_TYPE_IO_APIC = 1, 647 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 648 ACPI_MADT_TYPE_NMI_SOURCE = 3, 649 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 650 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 651 ACPI_MADT_TYPE_IO_SAPIC = 6, 652 ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 653 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 654 ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 655 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 656 ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 657 ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 658 ACPI_MADT_TYPE_RESERVED = 13 /* 13 and greater are reserved */ 659 }; 660 661 /* 662 * MADT Sub-tables, correspond to Type in struct acpi_subtable_header 663 */ 664 665 /* 0: Processor Local APIC */ 666 667 struct acpi_madt_local_apic { 668 struct acpi_subtable_header header; 669 u8 processor_id; /* ACPI processor id */ 670 u8 id; /* Processor's local APIC id */ 671 u32 lapic_flags; 672 }; 673 674 /* 1: IO APIC */ 675 676 struct acpi_madt_io_apic { 677 struct acpi_subtable_header header; 678 u8 id; /* I/O APIC ID */ 679 u8 reserved; /* Reserved - must be zero */ 680 u32 address; /* APIC physical address */ 681 u32 global_irq_base; /* Global system interrupt where INTI lines start */ 682 }; 683 684 /* 2: Interrupt Override */ 685 686 struct acpi_madt_interrupt_override { 687 struct acpi_subtable_header header; 688 u8 bus; /* 0 - ISA */ 689 u8 source_irq; /* Interrupt source (IRQ) */ 690 u32 global_irq; /* Global system interrupt */ 691 u16 inti_flags; 692 }; 693 694 /* 3: NMI Source */ 695 696 struct acpi_madt_nmi_source { 697 struct acpi_subtable_header header; 698 u16 inti_flags; 699 u32 global_irq; /* Global system interrupt */ 700 }; 701 702 /* 4: Local APIC NMI */ 703 704 struct acpi_madt_local_apic_nmi { 705 struct acpi_subtable_header header; 706 u8 processor_id; /* ACPI processor id */ 707 u16 inti_flags; 708 u8 lint; /* LINTn to which NMI is connected */ 709 }; 710 711 /* 5: Address Override */ 712 713 struct acpi_madt_local_apic_override { 714 struct acpi_subtable_header header; 715 u16 reserved; /* Reserved, must be zero */ 716 u64 address; /* APIC physical address */ 717 }; 718 719 /* 6: I/O Sapic */ 720 721 struct acpi_madt_io_sapic { 722 struct acpi_subtable_header header; 723 u8 id; /* I/O SAPIC ID */ 724 u8 reserved; /* Reserved, must be zero */ 725 u32 global_irq_base; /* Global interrupt for SAPIC start */ 726 u64 address; /* SAPIC physical address */ 727 }; 728 729 /* 7: Local Sapic */ 730 731 struct acpi_madt_local_sapic { 732 struct acpi_subtable_header header; 733 u8 processor_id; /* ACPI processor id */ 734 u8 id; /* SAPIC ID */ 735 u8 eid; /* SAPIC EID */ 736 u8 reserved[3]; /* Reserved, must be zero */ 737 u32 lapic_flags; 738 u32 uid; /* Numeric UID - ACPI 3.0 */ 739 char uid_string[1]; /* String UID - ACPI 3.0 */ 740 }; 741 742 /* 8: Platform Interrupt Source */ 743 744 struct acpi_madt_interrupt_source { 745 struct acpi_subtable_header header; 746 u16 inti_flags; 747 u8 type; /* 1=PMI, 2=INIT, 3=corrected */ 748 u8 id; /* Processor ID */ 749 u8 eid; /* Processor EID */ 750 u8 io_sapic_vector; /* Vector value for PMI interrupts */ 751 u32 global_irq; /* Global system interrupt */ 752 u32 flags; /* Interrupt Source Flags */ 753 }; 754 755 /* Masks for Flags field above */ 756 757 #define ACPI_MADT_CPEI_OVERRIDE (1) 758 759 /* 9: Processor Local X2APIC (ACPI 4.0) */ 760 761 struct acpi_madt_local_x2apic { 762 struct acpi_subtable_header header; 763 u16 reserved; /* Reserved - must be zero */ 764 u32 local_apic_id; /* Processor x2APIC ID */ 765 u32 lapic_flags; 766 u32 uid; /* ACPI processor UID */ 767 }; 768 769 /* 10: Local X2APIC NMI (ACPI 4.0) */ 770 771 struct acpi_madt_local_x2apic_nmi { 772 struct acpi_subtable_header header; 773 u16 inti_flags; 774 u32 uid; /* ACPI processor UID */ 775 u8 lint; /* LINTn to which NMI is connected */ 776 u8 reserved[3]; 777 }; 778 779 /* 11: Generic Interrupt (ACPI 5.0) */ 780 781 struct acpi_madt_generic_interrupt { 782 struct acpi_subtable_header header; 783 u16 reserved; /* Reserved - must be zero */ 784 u32 gic_id; 785 u32 uid; 786 u32 flags; 787 u32 parking_version; 788 u32 performance_interrupt; 789 u64 parked_address; 790 u64 base_address; 791 }; 792 793 /* 12: Generic Distributor (ACPI 5.0) */ 794 795 struct acpi_madt_generic_distributor { 796 struct acpi_subtable_header header; 797 u16 reserved; /* Reserved - must be zero */ 798 u32 gic_id; 799 u64 base_address; 800 u32 global_irq_base; 801 u32 reserved2; /* Reserved - must be zero */ 802 }; 803 804 /* 805 * Common flags fields for MADT subtables 806 */ 807 808 /* MADT Local APIC flags (lapic_flags) and GIC flags */ 809 810 #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 811 812 /* MADT MPS INTI flags (inti_flags) */ 813 814 #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 815 #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 816 817 /* Values for MPS INTI flags */ 818 819 #define ACPI_MADT_POLARITY_CONFORMS 0 820 #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 821 #define ACPI_MADT_POLARITY_RESERVED 2 822 #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 823 824 #define ACPI_MADT_TRIGGER_CONFORMS (0) 825 #define ACPI_MADT_TRIGGER_EDGE (1<<2) 826 #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 827 #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 828 829 /******************************************************************************* 830 * 831 * MSCT - Maximum System Characteristics Table (ACPI 4.0) 832 * Version 1 833 * 834 ******************************************************************************/ 835 836 struct acpi_table_msct { 837 struct acpi_table_header header; /* Common ACPI table header */ 838 u32 proximity_offset; /* Location of proximity info struct(s) */ 839 u32 max_proximity_domains; /* Max number of proximity domains */ 840 u32 max_clock_domains; /* Max number of clock domains */ 841 u64 max_address; /* Max physical address in system */ 842 }; 843 844 /* Subtable - Maximum Proximity Domain Information. Version 1 */ 845 846 struct acpi_msct_proximity { 847 u8 revision; 848 u8 length; 849 u32 range_start; /* Start of domain range */ 850 u32 range_end; /* End of domain range */ 851 u32 processor_capacity; 852 u64 memory_capacity; /* In bytes */ 853 }; 854 855 /******************************************************************************* 856 * 857 * SBST - Smart Battery Specification Table 858 * Version 1 859 * 860 ******************************************************************************/ 861 862 struct acpi_table_sbst { 863 struct acpi_table_header header; /* Common ACPI table header */ 864 u32 warning_level; 865 u32 low_level; 866 u32 critical_level; 867 }; 868 869 /******************************************************************************* 870 * 871 * SLIT - System Locality Distance Information Table 872 * Version 1 873 * 874 ******************************************************************************/ 875 876 struct acpi_table_slit { 877 struct acpi_table_header header; /* Common ACPI table header */ 878 u64 locality_count; 879 u8 entry[1]; /* Real size = localities^2 */ 880 }; 881 882 /******************************************************************************* 883 * 884 * SRAT - System Resource Affinity Table 885 * Version 3 886 * 887 ******************************************************************************/ 888 889 struct acpi_table_srat { 890 struct acpi_table_header header; /* Common ACPI table header */ 891 u32 table_revision; /* Must be value '1' */ 892 u64 reserved; /* Reserved, must be zero */ 893 }; 894 895 /* Values for subtable type in struct acpi_subtable_header */ 896 897 enum acpi_srat_type { 898 ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 899 ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 900 ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 901 ACPI_SRAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 902 }; 903 904 /* 905 * SRAT Sub-tables, correspond to Type in struct acpi_subtable_header 906 */ 907 908 /* 0: Processor Local APIC/SAPIC Affinity */ 909 910 struct acpi_srat_cpu_affinity { 911 struct acpi_subtable_header header; 912 u8 proximity_domain_lo; 913 u8 apic_id; 914 u32 flags; 915 u8 local_sapic_eid; 916 u8 proximity_domain_hi[3]; 917 u32 reserved; /* Reserved, must be zero */ 918 }; 919 920 /* Flags */ 921 922 #define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ 923 924 /* 1: Memory Affinity */ 925 926 struct acpi_srat_mem_affinity { 927 struct acpi_subtable_header header; 928 u32 proximity_domain; 929 u16 reserved; /* Reserved, must be zero */ 930 u64 base_address; 931 u64 length; 932 u32 reserved1; 933 u32 flags; 934 u64 reserved2; /* Reserved, must be zero */ 935 }; 936 937 /* Flags */ 938 939 #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 940 #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 941 #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 942 943 /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ 944 945 struct acpi_srat_x2apic_cpu_affinity { 946 struct acpi_subtable_header header; 947 u16 reserved; /* Reserved, must be zero */ 948 u32 proximity_domain; 949 u32 apic_id; 950 u32 flags; 951 u32 clock_domain; 952 u32 reserved2; 953 }; 954 955 /* Flags for struct acpi_srat_cpu_affinity and struct acpi_srat_x2apic_cpu_affinity */ 956 957 #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 958 959 /* Reset to default packing */ 960 961 #pragma pack() 962 963 #endif /* __ACTBL1_H__ */ 964