1 /****************************************************************************** 2 * 3 * Name: actbl1.h - Additional ACPI table definitions 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2008, 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 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 ******************************************************************************/ 55 56 /* 57 * Values for description table header signatures. Useful because they make 58 * it more difficult to inadvertently type in the wrong signature. 59 */ 60 #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ 61 #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 62 #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ 63 #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 64 #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ 65 #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ 66 #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 67 #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 68 #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 69 #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 70 #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ 71 #define ACPI_SIG_IBFT "IBFT" /* i_sCSI Boot Firmware Table */ 72 #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 73 #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 74 #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 75 #define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ 76 #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ 77 #define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ 78 #define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ 79 #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ 80 #define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ 81 #define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ 82 #define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ 83 #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ 84 85 /* 86 * All tables must be byte-packed to match the ACPI specification, since 87 * the tables are provided by the system BIOS. 88 */ 89 #pragma pack(1) 90 91 /* 92 * Note about bitfields: The u8 type is used for bitfields in ACPI tables. 93 * This is the only type that is even remotely portable. Anything else is not 94 * portable, so do not use any other bitfield types. 95 */ 96 97 /* Common Subtable header (used in MADT, SRAT, etc.) */ 98 99 struct acpi_subtable_header { 100 u8 type; 101 u8 length; 102 }; 103 104 /* Common Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 105 106 struct acpi_whea_header { 107 u8 action; 108 u8 instruction; 109 u8 flags; 110 u8 reserved; 111 struct acpi_generic_address register_region; 112 u64 value; /* Value used with Read/Write register */ 113 u64 mask; /* Bitmask required for this register instruction */ 114 }; 115 116 /******************************************************************************* 117 * 118 * ASF - Alert Standard Format table (Signature "ASF!") 119 * 120 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 121 * 122 ******************************************************************************/ 123 124 struct acpi_table_asf { 125 struct acpi_table_header header; /* Common ACPI table header */ 126 }; 127 128 /* ASF subtable header */ 129 130 struct acpi_asf_header { 131 u8 type; 132 u8 reserved; 133 u16 length; 134 }; 135 136 /* Values for Type field above */ 137 138 enum acpi_asf_type { 139 ACPI_ASF_TYPE_INFO = 0, 140 ACPI_ASF_TYPE_ALERT = 1, 141 ACPI_ASF_TYPE_CONTROL = 2, 142 ACPI_ASF_TYPE_BOOT = 3, 143 ACPI_ASF_TYPE_ADDRESS = 4, 144 ACPI_ASF_TYPE_RESERVED = 5 145 }; 146 147 /* 148 * ASF subtables 149 */ 150 151 /* 0: ASF Information */ 152 153 struct acpi_asf_info { 154 struct acpi_asf_header header; 155 u8 min_reset_value; 156 u8 min_poll_interval; 157 u16 system_id; 158 u32 mfg_id; 159 u8 flags; 160 u8 reserved2[3]; 161 }; 162 163 /* 1: ASF Alerts */ 164 165 struct acpi_asf_alert { 166 struct acpi_asf_header header; 167 u8 assert_mask; 168 u8 deassert_mask; 169 u8 alerts; 170 u8 data_length; 171 }; 172 173 struct acpi_asf_alert_data { 174 u8 address; 175 u8 command; 176 u8 mask; 177 u8 value; 178 u8 sensor_type; 179 u8 type; 180 u8 offset; 181 u8 source_type; 182 u8 severity; 183 u8 sensor_number; 184 u8 entity; 185 u8 instance; 186 }; 187 188 /* 2: ASF Remote Control */ 189 190 struct acpi_asf_remote { 191 struct acpi_asf_header header; 192 u8 controls; 193 u8 data_length; 194 u16 reserved2; 195 }; 196 197 struct acpi_asf_control_data { 198 u8 function; 199 u8 address; 200 u8 command; 201 u8 value; 202 }; 203 204 /* 3: ASF RMCP Boot Options */ 205 206 struct acpi_asf_rmcp { 207 struct acpi_asf_header header; 208 u8 capabilities[7]; 209 u8 completion_code; 210 u32 enterprise_id; 211 u8 command; 212 u16 parameter; 213 u16 boot_options; 214 u16 oem_parameters; 215 }; 216 217 /* 4: ASF Address */ 218 219 struct acpi_asf_address { 220 struct acpi_asf_header header; 221 u8 eprom_address; 222 u8 devices; 223 }; 224 225 /******************************************************************************* 226 * 227 * BERT - Boot Error Record Table 228 * 229 ******************************************************************************/ 230 231 struct acpi_table_bert { 232 struct acpi_table_header header; /* Common ACPI table header */ 233 u32 region_length; /* Length of the boot error region */ 234 u64 address; /* Physical addresss of the error region */ 235 }; 236 237 /* Boot Error Region */ 238 239 struct acpi_bert_region { 240 u32 block_status; 241 u32 raw_data_offset; 242 u32 raw_data_length; 243 u32 data_length; 244 u32 error_severity; 245 }; 246 247 /* block_status Flags */ 248 249 #define ACPI_BERT_UNCORRECTABLE (1) 250 #define ACPI_BERT_CORRECTABLE (2) 251 #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (4) 252 #define ACPI_BERT_MULTIPLE_CORRECTABLE (8) 253 254 /******************************************************************************* 255 * 256 * BOOT - Simple Boot Flag Table 257 * 258 ******************************************************************************/ 259 260 struct acpi_table_boot { 261 struct acpi_table_header header; /* Common ACPI table header */ 262 u8 cmos_index; /* Index in CMOS RAM for the boot register */ 263 u8 reserved[3]; 264 }; 265 266 /******************************************************************************* 267 * 268 * CPEP - Corrected Platform Error Polling table 269 * 270 ******************************************************************************/ 271 272 struct acpi_table_cpep { 273 struct acpi_table_header header; /* Common ACPI table header */ 274 u64 reserved; 275 }; 276 277 /* Subtable */ 278 279 struct acpi_cpep_polling { 280 u8 type; 281 u8 length; 282 u8 id; /* Processor ID */ 283 u8 eid; /* Processor EID */ 284 u32 interval; /* Polling interval (msec) */ 285 }; 286 287 /******************************************************************************* 288 * 289 * DBGP - Debug Port table 290 * 291 ******************************************************************************/ 292 293 struct acpi_table_dbgp { 294 struct acpi_table_header header; /* Common ACPI table header */ 295 u8 type; /* 0=full 16550, 1=subset of 16550 */ 296 u8 reserved[3]; 297 struct acpi_generic_address debug_port; 298 }; 299 300 /******************************************************************************* 301 * 302 * DMAR - DMA Remapping table 303 * From "Intel Virtualization Technology for Directed I/O", Sept. 2007 304 * 305 ******************************************************************************/ 306 307 struct acpi_table_dmar { 308 struct acpi_table_header header; /* Common ACPI table header */ 309 u8 width; /* Host Address Width */ 310 u8 flags; 311 u8 reserved[10]; 312 }; 313 314 /* Flags */ 315 316 #define ACPI_DMAR_INTR_REMAP (1) 317 318 /* DMAR subtable header */ 319 320 struct acpi_dmar_header { 321 u16 type; 322 u16 length; 323 }; 324 325 /* Values for subtable type in struct acpi_dmar_header */ 326 327 enum acpi_dmar_type { 328 ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, 329 ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, 330 ACPI_DMAR_TYPE_ATSR = 2, 331 ACPI_DMAR_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 332 }; 333 334 struct acpi_dmar_device_scope { 335 u8 entry_type; 336 u8 length; 337 u16 reserved; 338 u8 enumeration_id; 339 u8 bus; 340 }; 341 342 /* Values for entry_type in struct acpi_dmar_device_scope */ 343 344 enum acpi_dmar_scope_type { 345 ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, 346 ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, 347 ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, 348 ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, 349 ACPI_DMAR_SCOPE_TYPE_HPET = 4, 350 ACPI_DMAR_SCOPE_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 351 }; 352 353 struct acpi_dmar_pci_path { 354 u8 dev; 355 u8 fn; 356 }; 357 358 /* 359 * DMAR Sub-tables, correspond to Type in struct acpi_dmar_header 360 */ 361 362 /* 0: Hardware Unit Definition */ 363 364 struct acpi_dmar_hardware_unit { 365 struct acpi_dmar_header header; 366 u8 flags; 367 u8 reserved; 368 u16 segment; 369 u64 address; /* Register Base Address */ 370 }; 371 372 /* Flags */ 373 374 #define ACPI_DMAR_INCLUDE_ALL (1) 375 376 /* 1: Reserved Memory Defininition */ 377 378 struct acpi_dmar_reserved_memory { 379 struct acpi_dmar_header header; 380 u16 reserved; 381 u16 segment; 382 u64 base_address; /* 4_k aligned base address */ 383 u64 end_address; /* 4_k aligned limit address */ 384 }; 385 386 /* Flags */ 387 388 #define ACPI_DMAR_ALLOW_ALL (1) 389 390 391 /* 2: Root Port ATS Capability Reporting Structure */ 392 393 struct acpi_dmar_atsr { 394 struct acpi_dmar_header header; 395 u8 flags; 396 u8 reserved; 397 u16 segment; 398 }; 399 400 /* Flags */ 401 402 #define ACPI_DMAR_ALL_PORTS (1) 403 404 /******************************************************************************* 405 * 406 * ECDT - Embedded Controller Boot Resources Table 407 * 408 ******************************************************************************/ 409 410 struct acpi_table_ecdt { 411 struct acpi_table_header header; /* Common ACPI table header */ 412 struct acpi_generic_address control; /* Address of EC command/status register */ 413 struct acpi_generic_address data; /* Address of EC data register */ 414 u32 uid; /* Unique ID - must be same as the EC _UID method */ 415 u8 gpe; /* The GPE for the EC */ 416 u8 id[1]; /* Full namepath of the EC in the ACPI namespace */ 417 }; 418 419 /******************************************************************************* 420 * 421 * EINJ - Error Injection Table 422 * 423 ******************************************************************************/ 424 425 struct acpi_table_einj { 426 struct acpi_table_header header; /* Common ACPI table header */ 427 u32 header_length; 428 u32 reserved; 429 u32 entries; 430 }; 431 432 /* EINJ Injection Instruction Entries (actions) */ 433 434 struct acpi_einj_entry { 435 struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 436 }; 437 438 /* Values for Action field above */ 439 440 enum acpi_einj_actions { 441 ACPI_EINJ_BEGIN_OPERATION = 0, 442 ACPI_EINJ_GET_TRIGGER_TABLE = 1, 443 ACPI_EINJ_SET_ERROR_TYPE = 2, 444 ACPI_EINJ_GET_ERROR_TYPE = 3, 445 ACPI_EINJ_END_OPERATION = 4, 446 ACPI_EINJ_EXECUTE_OPERATION = 5, 447 ACPI_EINJ_CHECK_BUSY_STATUS = 6, 448 ACPI_EINJ_GET_COMMAND_STATUS = 7, 449 ACPI_EINJ_ACTION_RESERVED = 8, /* 8 and greater are reserved */ 450 ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 451 }; 452 453 /* Values for Instruction field above */ 454 455 enum acpi_einj_instructions { 456 ACPI_EINJ_READ_REGISTER = 0, 457 ACPI_EINJ_READ_REGISTER_VALUE = 1, 458 ACPI_EINJ_WRITE_REGISTER = 2, 459 ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 460 ACPI_EINJ_NOOP = 4, 461 ACPI_EINJ_INSTRUCTION_RESERVED = 5 /* 5 and greater are reserved */ 462 }; 463 464 /* EINJ Trigger Error Action Table */ 465 466 struct acpi_einj_trigger { 467 u32 header_size; 468 u32 revision; 469 u32 table_size; 470 u32 entry_count; 471 }; 472 473 /******************************************************************************* 474 * 475 * ERST - Error Record Serialization Table 476 * 477 ******************************************************************************/ 478 479 struct acpi_table_erst { 480 struct acpi_table_header header; /* Common ACPI table header */ 481 u32 header_length; 482 u32 reserved; 483 u32 entries; 484 }; 485 486 /* ERST Serialization Entries (actions) */ 487 488 struct acpi_erst_entry { 489 struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 490 }; 491 492 /* Values for Action field above */ 493 494 enum acpi_erst_actions { 495 ACPI_ERST_BEGIN_WRITE_OPERATION = 0, 496 ACPI_ERST_BEGIN_READ_OPERATION = 1, 497 ACPI_ERST_BETGIN_CLEAR_OPERATION = 2, 498 ACPI_ERST_END_OPERATION = 3, 499 ACPI_ERST_SET_RECORD_OFFSET = 4, 500 ACPI_ERST_EXECUTE_OPERATION = 5, 501 ACPI_ERST_CHECK_BUSY_STATUS = 6, 502 ACPI_ERST_GET_COMMAND_STATUS = 7, 503 ACPI_ERST_GET_RECORD_IDENTIFIER = 8, 504 ACPI_ERST_SET_RECORD_IDENTIFIER = 9, 505 ACPI_ERST_GET_RECORD_COUNT = 10, 506 ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 507 ACPI_ERST_NOT_USED = 12, 508 ACPI_ERST_GET_ERROR_RANGE = 13, 509 ACPI_ERST_GET_ERROR_LENGTH = 14, 510 ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 511 ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */ 512 }; 513 514 /* Values for Instruction field above */ 515 516 enum acpi_erst_instructions { 517 ACPI_ERST_READ_REGISTER = 0, 518 ACPI_ERST_READ_REGISTER_VALUE = 1, 519 ACPI_ERST_WRITE_REGISTER = 2, 520 ACPI_ERST_WRITE_REGISTER_VALUE = 3, 521 ACPI_ERST_NOOP = 4, 522 ACPI_ERST_LOAD_VAR1 = 5, 523 ACPI_ERST_LOAD_VAR2 = 6, 524 ACPI_ERST_STORE_VAR1 = 7, 525 ACPI_ERST_ADD = 8, 526 ACPI_ERST_SUBTRACT = 9, 527 ACPI_ERST_ADD_VALUE = 10, 528 ACPI_ERST_SUBTRACT_VALUE = 11, 529 ACPI_ERST_STALL = 12, 530 ACPI_ERST_STALL_WHILE_TRUE = 13, 531 ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 532 ACPI_ERST_GOTO = 15, 533 ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 534 ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 535 ACPI_ERST_MOVE_DATA = 18, 536 ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 537 }; 538 539 /******************************************************************************* 540 * 541 * HEST - Hardware Error Source Table 542 * 543 ******************************************************************************/ 544 545 struct acpi_table_hest { 546 struct acpi_table_header header; /* Common ACPI table header */ 547 u32 error_source_count; 548 }; 549 550 /* HEST subtable header */ 551 552 struct acpi_hest_header { 553 u16 type; 554 }; 555 556 /* Values for Type field above for subtables */ 557 558 enum acpi_hest_types { 559 ACPI_HEST_TYPE_XPF_MACHINE_CHECK = 0, 560 ACPI_HEST_TYPE_XPF_CORRECTED_MACHINE_CHECK = 1, 561 ACPI_HEST_TYPE_XPF_UNUSED = 2, 562 ACPI_HEST_TYPE_XPF_NON_MASKABLE_INTERRUPT = 3, 563 ACPI_HEST_TYPE_IPF_CORRECTED_MACHINE_CHECK = 4, 564 ACPI_HEST_TYPE_IPF_CORRECTED_PLATFORM_ERROR = 5, 565 ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 566 ACPI_HEST_TYPE_AER_ENDPOINT = 7, 567 ACPI_HEST_TYPE_AER_BRIDGE = 8, 568 ACPI_HEST_TYPE_GENERIC_HARDWARE_ERROR_SOURCE = 9, 569 ACPI_HEST_TYPE_RESERVED = 10 /* 10 and greater are reserved */ 570 }; 571 572 /* 573 * HEST Sub-subtables 574 */ 575 576 /* XPF Machine Check Error Bank */ 577 578 struct acpi_hest_xpf_error_bank { 579 u8 bank_number; 580 u8 clear_status_on_init; 581 u8 status_format; 582 u8 config_write_enable; 583 u32 control_register; 584 u64 control_init_data; 585 u32 status_register; 586 u32 address_register; 587 u32 misc_register; 588 }; 589 590 /* Generic Error Status */ 591 592 struct acpi_hest_generic_status { 593 u32 block_status; 594 u32 raw_data_offset; 595 u32 raw_data_length; 596 u32 data_length; 597 u32 error_severity; 598 }; 599 600 /* Generic Error Data */ 601 602 struct acpi_hest_generic_data { 603 u8 section_type[16]; 604 u32 error_severity; 605 u16 revision; 606 u8 validation_bits; 607 u8 flags; 608 u32 error_data_length; 609 u8 fru_id[16]; 610 u8 fru_text[20]; 611 }; 612 613 /* Common HEST structure for PCI/AER types below (6,7,8) */ 614 615 struct acpi_hest_aer_common { 616 u16 source_id; 617 u16 config_write_enable; 618 u8 flags; 619 u8 enabled; 620 u32 records_to_pre_allocate; 621 u32 max_sections_per_record; 622 u32 bus; 623 u16 device; 624 u16 function; 625 u16 device_control; 626 u16 reserved; 627 u32 uncorrectable_error_mask; 628 u32 uncorrectable_error_severity; 629 u32 correctable_error_mask; 630 u32 advanced_error_cababilities; 631 }; 632 633 /* Hardware Error Notification */ 634 635 struct acpi_hest_notify { 636 u8 type; 637 u8 length; 638 u16 config_write_enable; 639 u32 poll_interval; 640 u32 vector; 641 u32 polling_threshold_value; 642 u32 polling_threshold_window; 643 u32 error_threshold_value; 644 u32 error_threshold_window; 645 }; 646 647 /* Values for Notify Type field above */ 648 649 enum acpi_hest_notify_types { 650 ACPI_HEST_NOTIFY_POLLED = 0, 651 ACPI_HEST_NOTIFY_EXTERNAL = 1, 652 ACPI_HEST_NOTIFY_LOCAL = 2, 653 ACPI_HEST_NOTIFY_SCI = 3, 654 ACPI_HEST_NOTIFY_NMI = 4, 655 ACPI_HEST_NOTIFY_RESERVED = 5 /* 5 and greater are reserved */ 656 }; 657 658 /* 659 * HEST subtables 660 * 661 * From WHEA Design Document, 16 May 2007. 662 * Note: There is no subtable type 2 in this version of the document, 663 * and there are two different subtable type 3s. 664 */ 665 666 /* 0: XPF Machine Check Exception */ 667 668 struct acpi_hest_xpf_machine_check { 669 struct acpi_hest_header header; 670 u16 source_id; 671 u16 config_write_enable; 672 u8 flags; 673 u8 reserved1; 674 u32 records_to_pre_allocate; 675 u32 max_sections_per_record; 676 u64 global_capability_data; 677 u64 global_control_data; 678 u8 num_hardware_banks; 679 u8 reserved2[7]; 680 }; 681 682 /* 1: XPF Corrected Machine Check */ 683 684 struct acpi_table_hest_xpf_corrected { 685 struct acpi_hest_header header; 686 u16 source_id; 687 u16 config_write_enable; 688 u8 flags; 689 u8 enabled; 690 u32 records_to_pre_allocate; 691 u32 max_sections_per_record; 692 struct acpi_hest_notify notify; 693 u8 num_hardware_banks; 694 u8 reserved[3]; 695 }; 696 697 /* 3: XPF Non-Maskable Interrupt */ 698 699 struct acpi_hest_xpf_nmi { 700 struct acpi_hest_header header; 701 u16 source_id; 702 u32 reserved; 703 u32 records_to_pre_allocate; 704 u32 max_sections_per_record; 705 u32 max_raw_data_length; 706 }; 707 708 /* 4: IPF Corrected Machine Check */ 709 710 struct acpi_hest_ipf_corrected { 711 struct acpi_hest_header header; 712 u8 enabled; 713 u8 reserved; 714 }; 715 716 /* 5: IPF Corrected Platform Error */ 717 718 struct acpi_hest_ipf_corrected_platform { 719 struct acpi_hest_header header; 720 u8 enabled; 721 u8 reserved; 722 }; 723 724 /* 6: PCI Express Root Port AER */ 725 726 struct acpi_hest_aer_root { 727 struct acpi_hest_header header; 728 struct acpi_hest_aer_common aer; 729 u32 root_error_command; 730 }; 731 732 /* 7: PCI Express AER (AER Endpoint) */ 733 734 struct acpi_hest_aer { 735 struct acpi_hest_header header; 736 struct acpi_hest_aer_common aer; 737 }; 738 739 /* 8: PCI Express/PCI-X Bridge AER */ 740 741 struct acpi_hest_aer_bridge { 742 struct acpi_hest_header header; 743 struct acpi_hest_aer_common aer; 744 u32 secondary_uncorrectable_error_mask; 745 u32 secondary_uncorrectable_error_severity; 746 u32 secondary_advanced_capabilities; 747 }; 748 749 /* 9: Generic Hardware Error Source */ 750 751 struct acpi_hest_generic { 752 struct acpi_hest_header header; 753 u16 source_id; 754 u16 related_source_id; 755 u8 config_write_enable; 756 u8 enabled; 757 u32 records_to_pre_allocate; 758 u32 max_sections_per_record; 759 u32 max_raw_data_length; 760 struct acpi_generic_address error_status_address; 761 struct acpi_hest_notify notify; 762 u32 error_status_block_length; 763 }; 764 765 /******************************************************************************* 766 * 767 * HPET - High Precision Event Timer table 768 * 769 ******************************************************************************/ 770 771 struct acpi_table_hpet { 772 struct acpi_table_header header; /* Common ACPI table header */ 773 u32 id; /* Hardware ID of event timer block */ 774 struct acpi_generic_address address; /* Address of event timer block */ 775 u8 sequence; /* HPET sequence number */ 776 u16 minimum_tick; /* Main counter min tick, periodic mode */ 777 u8 flags; 778 }; 779 780 /*! Flags */ 781 782 #define ACPI_HPET_PAGE_PROTECT (1) /* 00: No page protection */ 783 #define ACPI_HPET_PAGE_PROTECT_4 (1<<1) /* 01: 4KB page protected */ 784 #define ACPI_HPET_PAGE_PROTECT_64 (1<<2) /* 02: 64KB page protected */ 785 786 /*! [End] no source code translation !*/ 787 788 /******************************************************************************* 789 * 790 * IBFT - Boot Firmware Table 791 * 792 ******************************************************************************/ 793 794 struct acpi_table_ibft { 795 struct acpi_table_header header; /* Common ACPI table header */ 796 u8 reserved[12]; 797 }; 798 799 /* IBFT common subtable header */ 800 801 struct acpi_ibft_header { 802 u8 type; 803 u8 version; 804 u16 length; 805 u8 index; 806 u8 flags; 807 }; 808 809 /* Values for Type field above */ 810 811 enum acpi_ibft_type { 812 ACPI_IBFT_TYPE_NOT_USED = 0, 813 ACPI_IBFT_TYPE_CONTROL = 1, 814 ACPI_IBFT_TYPE_INITIATOR = 2, 815 ACPI_IBFT_TYPE_NIC = 3, 816 ACPI_IBFT_TYPE_TARGET = 4, 817 ACPI_IBFT_TYPE_EXTENSIONS = 5, 818 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 819 }; 820 821 /* IBFT subtables */ 822 823 struct acpi_ibft_control { 824 struct acpi_ibft_header header; 825 u16 extensions; 826 u16 initiator_offset; 827 u16 nic0_offset; 828 u16 target0_offset; 829 u16 nic1_offset; 830 u16 target1_offset; 831 }; 832 833 struct acpi_ibft_initiator { 834 struct acpi_ibft_header header; 835 u8 sns_server[16]; 836 u8 slp_server[16]; 837 u8 primary_server[16]; 838 u8 secondary_server[16]; 839 u16 name_length; 840 u16 name_offset; 841 }; 842 843 struct acpi_ibft_nic { 844 struct acpi_ibft_header header; 845 u8 ip_address[16]; 846 u8 subnet_mask_prefix; 847 u8 origin; 848 u8 gateway[16]; 849 u8 primary_dns[16]; 850 u8 secondary_dns[16]; 851 u8 dhcp[16]; 852 u16 vlan; 853 u8 mac_address[6]; 854 u16 pci_address; 855 u16 name_length; 856 u16 name_offset; 857 }; 858 859 struct acpi_ibft_target { 860 struct acpi_ibft_header header; 861 u8 target_ip_address[16]; 862 u16 target_ip_socket; 863 u8 target_boot_lun[8]; 864 u8 chap_type; 865 u8 nic_association; 866 u16 target_name_length; 867 u16 target_name_offset; 868 u16 chap_name_length; 869 u16 chap_name_offset; 870 u16 chap_secret_length; 871 u16 chap_secret_offset; 872 u16 reverse_chap_name_length; 873 u16 reverse_chap_name_offset; 874 u16 reverse_chap_secret_length; 875 u16 reverse_chap_secret_offset; 876 }; 877 878 /******************************************************************************* 879 * 880 * MADT - Multiple APIC Description Table 881 * 882 ******************************************************************************/ 883 884 struct acpi_table_madt { 885 struct acpi_table_header header; /* Common ACPI table header */ 886 u32 address; /* Physical address of local APIC */ 887 u32 flags; 888 }; 889 890 /* Flags */ 891 892 #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 893 894 /* Values for PCATCompat flag */ 895 896 #define ACPI_MADT_DUAL_PIC 0 897 #define ACPI_MADT_MULTIPLE_APIC 1 898 899 /* Values for subtable type in struct acpi_subtable_header */ 900 901 enum acpi_madt_type { 902 ACPI_MADT_TYPE_LOCAL_APIC = 0, 903 ACPI_MADT_TYPE_IO_APIC = 1, 904 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 905 ACPI_MADT_TYPE_NMI_SOURCE = 3, 906 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 907 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 908 ACPI_MADT_TYPE_IO_SAPIC = 6, 909 ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 910 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 911 ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 912 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 913 ACPI_MADT_TYPE_RESERVED = 11 /* 11 and greater are reserved */ 914 }; 915 916 /* 917 * MADT Sub-tables, correspond to Type in struct acpi_subtable_header 918 */ 919 920 /* 0: Processor Local APIC */ 921 922 struct acpi_madt_local_apic { 923 struct acpi_subtable_header header; 924 u8 processor_id; /* ACPI processor id */ 925 u8 id; /* Processor's local APIC id */ 926 u32 lapic_flags; 927 }; 928 929 /* 1: IO APIC */ 930 931 struct acpi_madt_io_apic { 932 struct acpi_subtable_header header; 933 u8 id; /* I/O APIC ID */ 934 u8 reserved; /* Reserved - must be zero */ 935 u32 address; /* APIC physical address */ 936 u32 global_irq_base; /* Global system interrupt where INTI lines start */ 937 }; 938 939 /* 2: Interrupt Override */ 940 941 struct acpi_madt_interrupt_override { 942 struct acpi_subtable_header header; 943 u8 bus; /* 0 - ISA */ 944 u8 source_irq; /* Interrupt source (IRQ) */ 945 u32 global_irq; /* Global system interrupt */ 946 u16 inti_flags; 947 }; 948 949 /* 3: NMI Source */ 950 951 struct acpi_madt_nmi_source { 952 struct acpi_subtable_header header; 953 u16 inti_flags; 954 u32 global_irq; /* Global system interrupt */ 955 }; 956 957 /* 4: Local APIC NMI */ 958 959 struct acpi_madt_local_apic_nmi { 960 struct acpi_subtable_header header; 961 u8 processor_id; /* ACPI processor id */ 962 u16 inti_flags; 963 u8 lint; /* LINTn to which NMI is connected */ 964 }; 965 966 /* 5: Address Override */ 967 968 struct acpi_madt_local_apic_override { 969 struct acpi_subtable_header header; 970 u16 reserved; /* Reserved, must be zero */ 971 u64 address; /* APIC physical address */ 972 }; 973 974 /* 6: I/O Sapic */ 975 976 struct acpi_madt_io_sapic { 977 struct acpi_subtable_header header; 978 u8 id; /* I/O SAPIC ID */ 979 u8 reserved; /* Reserved, must be zero */ 980 u32 global_irq_base; /* Global interrupt for SAPIC start */ 981 u64 address; /* SAPIC physical address */ 982 }; 983 984 /* 7: Local Sapic */ 985 986 struct acpi_madt_local_sapic { 987 struct acpi_subtable_header header; 988 u8 processor_id; /* ACPI processor id */ 989 u8 id; /* SAPIC ID */ 990 u8 eid; /* SAPIC EID */ 991 u8 reserved[3]; /* Reserved, must be zero */ 992 u32 lapic_flags; 993 u32 uid; /* Numeric UID - ACPI 3.0 */ 994 char uid_string[1]; /* String UID - ACPI 3.0 */ 995 }; 996 997 /* 8: Platform Interrupt Source */ 998 999 struct acpi_madt_interrupt_source { 1000 struct acpi_subtable_header header; 1001 u16 inti_flags; 1002 u8 type; /* 1=PMI, 2=INIT, 3=corrected */ 1003 u8 id; /* Processor ID */ 1004 u8 eid; /* Processor EID */ 1005 u8 io_sapic_vector; /* Vector value for PMI interrupts */ 1006 u32 global_irq; /* Global system interrupt */ 1007 u32 flags; /* Interrupt Source Flags */ 1008 }; 1009 1010 /* Flags field above */ 1011 1012 #define ACPI_MADT_CPEI_OVERRIDE (1) 1013 1014 /* 9: Processor Local X2_APIC (07/2008) */ 1015 1016 struct acpi_madt_local_x2apic { 1017 struct acpi_subtable_header header; 1018 u16 reserved; /* Reserved - must be zero */ 1019 u32 local_apic_id; /* Processor X2_APIC ID */ 1020 u32 lapic_flags; 1021 u32 uid; /* Extended X2_APIC processor ID */ 1022 }; 1023 1024 /* 10: Local X2APIC NMI (07/2008) */ 1025 1026 struct acpi_madt_local_x2apic_nmi { 1027 struct acpi_subtable_header header; 1028 u16 inti_flags; 1029 u32 uid; /* Processor X2_APIC ID */ 1030 u8 lint; /* LINTn to which NMI is connected */ 1031 u8 reserved[3]; 1032 }; 1033 1034 /* 1035 * Common flags fields for MADT subtables 1036 */ 1037 1038 /* MADT Local APIC flags (lapic_flags) */ 1039 1040 #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1041 1042 /* MADT MPS INTI flags (inti_flags) */ 1043 1044 #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1045 #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1046 1047 /* Values for MPS INTI flags */ 1048 1049 #define ACPI_MADT_POLARITY_CONFORMS 0 1050 #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1051 #define ACPI_MADT_POLARITY_RESERVED 2 1052 #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1053 1054 #define ACPI_MADT_TRIGGER_CONFORMS (0) 1055 #define ACPI_MADT_TRIGGER_EDGE (1<<2) 1056 #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1057 #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1058 1059 /******************************************************************************* 1060 * 1061 * MCFG - PCI Memory Mapped Configuration table and sub-table 1062 * 1063 ******************************************************************************/ 1064 1065 struct acpi_table_mcfg { 1066 struct acpi_table_header header; /* Common ACPI table header */ 1067 u8 reserved[8]; 1068 }; 1069 1070 /* Subtable */ 1071 1072 struct acpi_mcfg_allocation { 1073 u64 address; /* Base address, processor-relative */ 1074 u16 pci_segment; /* PCI segment group number */ 1075 u8 start_bus_number; /* Starting PCI Bus number */ 1076 u8 end_bus_number; /* Final PCI Bus number */ 1077 u32 reserved; 1078 }; 1079 1080 /******************************************************************************* 1081 * 1082 * SBST - Smart Battery Specification Table 1083 * 1084 ******************************************************************************/ 1085 1086 struct acpi_table_sbst { 1087 struct acpi_table_header header; /* Common ACPI table header */ 1088 u32 warning_level; 1089 u32 low_level; 1090 u32 critical_level; 1091 }; 1092 1093 /******************************************************************************* 1094 * 1095 * SLIT - System Locality Distance Information Table 1096 * 1097 ******************************************************************************/ 1098 1099 struct acpi_table_slit { 1100 struct acpi_table_header header; /* Common ACPI table header */ 1101 u64 locality_count; 1102 u8 entry[1]; /* Real size = localities^2 */ 1103 }; 1104 1105 /******************************************************************************* 1106 * 1107 * SPCR - Serial Port Console Redirection table 1108 * 1109 ******************************************************************************/ 1110 1111 struct acpi_table_spcr { 1112 struct acpi_table_header header; /* Common ACPI table header */ 1113 u8 interface_type; /* 0=full 16550, 1=subset of 16550 */ 1114 u8 reserved[3]; 1115 struct acpi_generic_address serial_port; 1116 u8 interrupt_type; 1117 u8 pc_interrupt; 1118 u32 interrupt; 1119 u8 baud_rate; 1120 u8 parity; 1121 u8 stop_bits; 1122 u8 flow_control; 1123 u8 terminal_type; 1124 u8 reserved1; 1125 u16 pci_device_id; 1126 u16 pci_vendor_id; 1127 u8 pci_bus; 1128 u8 pci_device; 1129 u8 pci_function; 1130 u32 pci_flags; 1131 u8 pci_segment; 1132 u32 reserved2; 1133 }; 1134 1135 /******************************************************************************* 1136 * 1137 * SPMI - Server Platform Management Interface table 1138 * 1139 ******************************************************************************/ 1140 1141 struct acpi_table_spmi { 1142 struct acpi_table_header header; /* Common ACPI table header */ 1143 u8 reserved; 1144 u8 interface_type; 1145 u16 spec_revision; /* Version of IPMI */ 1146 u8 interrupt_type; 1147 u8 gpe_number; /* GPE assigned */ 1148 u8 reserved1; 1149 u8 pci_device_flag; 1150 u32 interrupt; 1151 struct acpi_generic_address ipmi_register; 1152 u8 pci_segment; 1153 u8 pci_bus; 1154 u8 pci_device; 1155 u8 pci_function; 1156 }; 1157 1158 /******************************************************************************* 1159 * 1160 * SRAT - System Resource Affinity Table 1161 * 1162 ******************************************************************************/ 1163 1164 struct acpi_table_srat { 1165 struct acpi_table_header header; /* Common ACPI table header */ 1166 u32 table_revision; /* Must be value '1' */ 1167 u64 reserved; /* Reserved, must be zero */ 1168 }; 1169 1170 /* Values for subtable type in struct acpi_subtable_header */ 1171 1172 enum acpi_srat_type { 1173 ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1174 ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1175 ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, 1176 ACPI_SRAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 1177 }; 1178 1179 /* 1180 * SRAT Sub-tables, correspond to Type in struct acpi_subtable_header 1181 */ 1182 1183 /* 0: Processor Local APIC/SAPIC Affinity */ 1184 1185 struct acpi_srat_cpu_affinity { 1186 struct acpi_subtable_header header; 1187 u8 proximity_domain_lo; 1188 u8 apic_id; 1189 u32 flags; 1190 u8 local_sapic_eid; 1191 u8 proximity_domain_hi[3]; 1192 u32 reserved; /* Reserved, must be zero */ 1193 }; 1194 1195 /* 1: Memory Affinity */ 1196 1197 struct acpi_srat_mem_affinity { 1198 struct acpi_subtable_header header; 1199 u32 proximity_domain; 1200 u16 reserved; /* Reserved, must be zero */ 1201 u64 base_address; 1202 u64 length; 1203 u32 reserved1; 1204 u32 flags; 1205 u64 reserved2; /* Reserved, must be zero */ 1206 }; 1207 1208 /* Flags */ 1209 1210 #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1211 #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1212 #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1213 1214 /* 2: Processor Local X2_APIC Affinity (07/2008) */ 1215 1216 struct acpi_srat_x2apic_cpu_affinity { 1217 struct acpi_subtable_header header; 1218 u16 reserved; /* Reserved, must be zero */ 1219 u32 proximity_domain; 1220 u32 apic_id; 1221 u32 flags; 1222 }; 1223 1224 /* Flags for struct acpi_srat_cpu_affinity and struct acpi_srat_x2apic_cpu_affinity */ 1225 1226 #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 1227 1228 /******************************************************************************* 1229 * 1230 * TCPA - Trusted Computing Platform Alliance table 1231 * 1232 ******************************************************************************/ 1233 1234 struct acpi_table_tcpa { 1235 struct acpi_table_header header; /* Common ACPI table header */ 1236 u16 reserved; 1237 u32 max_log_length; /* Maximum length for the event log area */ 1238 u64 log_address; /* Address of the event log area */ 1239 }; 1240 1241 /******************************************************************************* 1242 * 1243 * UEFI - UEFI Boot optimization Table 1244 * 1245 ******************************************************************************/ 1246 1247 struct acpi_table_uefi { 1248 struct acpi_table_header header; /* Common ACPI table header */ 1249 u8 identifier[16]; /* UUID identifier */ 1250 u16 data_offset; /* Offset of remaining data in table */ 1251 u8 data; 1252 }; 1253 1254 /******************************************************************************* 1255 * 1256 * WDAT - Watchdog Action Table 1257 * 1258 ******************************************************************************/ 1259 1260 struct acpi_table_wdat { 1261 struct acpi_table_header header; /* Common ACPI table header */ 1262 u32 header_length; /* Watchdog Header Length */ 1263 u16 pci_segment; /* PCI Segment number */ 1264 u8 pci_bus; /* PCI Bus number */ 1265 u8 pci_device; /* PCI Device number */ 1266 u8 pci_function; /* PCI Function number */ 1267 u8 reserved[3]; 1268 u32 timer_period; /* Period of one timer count (msec) */ 1269 u32 max_count; /* Maximum counter value supported */ 1270 u32 min_count; /* Minimum counter value */ 1271 u8 flags; 1272 u8 reserved2[3]; 1273 u32 entries; /* Number of watchdog entries that follow */ 1274 }; 1275 1276 /* WDAT Instruction Entries (actions) */ 1277 1278 struct acpi_wdat_entry { 1279 struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 1280 }; 1281 1282 /* Values for Action field above */ 1283 1284 enum acpi_wdat_actions { 1285 ACPI_WDAT_RESET = 1, 1286 ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, 1287 ACPI_WDAT_GET_COUNTDOWN = 5, 1288 ACPI_WDAT_SET_COUNTDOWN = 6, 1289 ACPI_WDAT_GET_RUNNING_STATE = 8, 1290 ACPI_WDAT_SET_RUNNING_STATE = 9, 1291 ACPI_WDAT_GET_STOPPED_STATE = 10, 1292 ACPI_WDAT_SET_STOPPED_STATE = 11, 1293 ACPI_WDAT_GET_REBOOT = 16, 1294 ACPI_WDAT_SET_REBOOT = 17, 1295 ACPI_WDAT_GET_SHUTDOWN = 18, 1296 ACPI_WDAT_SET_SHUTDOWN = 19, 1297 ACPI_WDAT_GET_STATUS = 32, 1298 ACPI_WDAT_SET_STATUS = 33, 1299 ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ 1300 }; 1301 1302 /* Values for Instruction field above */ 1303 1304 enum acpi_wdat_instructions { 1305 ACPI_WDAT_READ_VALUE = 0, 1306 ACPI_WDAT_READ_COUNTDOWN = 1, 1307 ACPI_WDAT_WRITE_VALUE = 2, 1308 ACPI_WDAT_WRITE_COUNTDOWN = 3, 1309 ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ 1310 ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ 1311 }; 1312 1313 /******************************************************************************* 1314 * 1315 * WDRT - Watchdog Resource Table 1316 * 1317 ******************************************************************************/ 1318 1319 struct acpi_table_wdrt { 1320 struct acpi_table_header header; /* Common ACPI table header */ 1321 u32 header_length; /* Watchdog Header Length */ 1322 u8 pci_segment; /* PCI Segment number */ 1323 u8 pci_bus; /* PCI Bus number */ 1324 u8 pci_device; /* PCI Device number */ 1325 u8 pci_function; /* PCI Function number */ 1326 u32 timer_period; /* Period of one timer count (msec) */ 1327 u32 max_count; /* Maximum counter value supported */ 1328 u32 min_count; /* Minimum counter value */ 1329 u8 flags; 1330 u8 reserved[3]; 1331 u32 entries; /* Number of watchdog entries that follow */ 1332 }; 1333 1334 /* Flags */ 1335 1336 #define ACPI_WDRT_TIMER_ENABLED (1) /* 00: Timer enabled */ 1337 1338 /* Reset to default packing */ 1339 1340 #pragma pack() 1341 1342 #endif /* __ACTBL1_H__ */ 1343