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_RESERVED = 9 /* 9 and greater are reserved */ 912 }; 913 914 /* 915 * MADT Sub-tables, correspond to Type in struct acpi_subtable_header 916 */ 917 918 /* 0: Processor Local APIC */ 919 920 struct acpi_madt_local_apic { 921 struct acpi_subtable_header header; 922 u8 processor_id; /* ACPI processor id */ 923 u8 id; /* Processor's local APIC id */ 924 u32 lapic_flags; 925 }; 926 927 /* 1: IO APIC */ 928 929 struct acpi_madt_io_apic { 930 struct acpi_subtable_header header; 931 u8 id; /* I/O APIC ID */ 932 u8 reserved; /* Reserved - must be zero */ 933 u32 address; /* APIC physical address */ 934 u32 global_irq_base; /* Global system interrupt where INTI lines start */ 935 }; 936 937 /* 2: Interrupt Override */ 938 939 struct acpi_madt_interrupt_override { 940 struct acpi_subtable_header header; 941 u8 bus; /* 0 - ISA */ 942 u8 source_irq; /* Interrupt source (IRQ) */ 943 u32 global_irq; /* Global system interrupt */ 944 u16 inti_flags; 945 }; 946 947 /* 3: NMI Source */ 948 949 struct acpi_madt_nmi_source { 950 struct acpi_subtable_header header; 951 u16 inti_flags; 952 u32 global_irq; /* Global system interrupt */ 953 }; 954 955 /* 4: Local APIC NMI */ 956 957 struct acpi_madt_local_apic_nmi { 958 struct acpi_subtable_header header; 959 u8 processor_id; /* ACPI processor id */ 960 u16 inti_flags; 961 u8 lint; /* LINTn to which NMI is connected */ 962 }; 963 964 /* 5: Address Override */ 965 966 struct acpi_madt_local_apic_override { 967 struct acpi_subtable_header header; 968 u16 reserved; /* Reserved, must be zero */ 969 u64 address; /* APIC physical address */ 970 }; 971 972 /* 6: I/O Sapic */ 973 974 struct acpi_madt_io_sapic { 975 struct acpi_subtable_header header; 976 u8 id; /* I/O SAPIC ID */ 977 u8 reserved; /* Reserved, must be zero */ 978 u32 global_irq_base; /* Global interrupt for SAPIC start */ 979 u64 address; /* SAPIC physical address */ 980 }; 981 982 /* 7: Local Sapic */ 983 984 struct acpi_madt_local_sapic { 985 struct acpi_subtable_header header; 986 u8 processor_id; /* ACPI processor id */ 987 u8 id; /* SAPIC ID */ 988 u8 eid; /* SAPIC EID */ 989 u8 reserved[3]; /* Reserved, must be zero */ 990 u32 lapic_flags; 991 u32 uid; /* Numeric UID - ACPI 3.0 */ 992 char uid_string[1]; /* String UID - ACPI 3.0 */ 993 }; 994 995 /* 8: Platform Interrupt Source */ 996 997 struct acpi_madt_interrupt_source { 998 struct acpi_subtable_header header; 999 u16 inti_flags; 1000 u8 type; /* 1=PMI, 2=INIT, 3=corrected */ 1001 u8 id; /* Processor ID */ 1002 u8 eid; /* Processor EID */ 1003 u8 io_sapic_vector; /* Vector value for PMI interrupts */ 1004 u32 global_irq; /* Global system interrupt */ 1005 u32 flags; /* Interrupt Source Flags */ 1006 }; 1007 1008 /* Flags field above */ 1009 1010 #define ACPI_MADT_CPEI_OVERRIDE (1) 1011 1012 /* 1013 * Common flags fields for MADT subtables 1014 */ 1015 1016 /* MADT Local APIC flags (lapic_flags) */ 1017 1018 #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1019 1020 /* MADT MPS INTI flags (inti_flags) */ 1021 1022 #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1023 #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1024 1025 /* Values for MPS INTI flags */ 1026 1027 #define ACPI_MADT_POLARITY_CONFORMS 0 1028 #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1029 #define ACPI_MADT_POLARITY_RESERVED 2 1030 #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1031 1032 #define ACPI_MADT_TRIGGER_CONFORMS (0) 1033 #define ACPI_MADT_TRIGGER_EDGE (1<<2) 1034 #define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1035 #define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1036 1037 /******************************************************************************* 1038 * 1039 * MCFG - PCI Memory Mapped Configuration table and sub-table 1040 * 1041 ******************************************************************************/ 1042 1043 struct acpi_table_mcfg { 1044 struct acpi_table_header header; /* Common ACPI table header */ 1045 u8 reserved[8]; 1046 }; 1047 1048 /* Subtable */ 1049 1050 struct acpi_mcfg_allocation { 1051 u64 address; /* Base address, processor-relative */ 1052 u16 pci_segment; /* PCI segment group number */ 1053 u8 start_bus_number; /* Starting PCI Bus number */ 1054 u8 end_bus_number; /* Final PCI Bus number */ 1055 u32 reserved; 1056 }; 1057 1058 /******************************************************************************* 1059 * 1060 * SBST - Smart Battery Specification Table 1061 * 1062 ******************************************************************************/ 1063 1064 struct acpi_table_sbst { 1065 struct acpi_table_header header; /* Common ACPI table header */ 1066 u32 warning_level; 1067 u32 low_level; 1068 u32 critical_level; 1069 }; 1070 1071 /******************************************************************************* 1072 * 1073 * SLIT - System Locality Distance Information Table 1074 * 1075 ******************************************************************************/ 1076 1077 struct acpi_table_slit { 1078 struct acpi_table_header header; /* Common ACPI table header */ 1079 u64 locality_count; 1080 u8 entry[1]; /* Real size = localities^2 */ 1081 }; 1082 1083 /******************************************************************************* 1084 * 1085 * SPCR - Serial Port Console Redirection table 1086 * 1087 ******************************************************************************/ 1088 1089 struct acpi_table_spcr { 1090 struct acpi_table_header header; /* Common ACPI table header */ 1091 u8 interface_type; /* 0=full 16550, 1=subset of 16550 */ 1092 u8 reserved[3]; 1093 struct acpi_generic_address serial_port; 1094 u8 interrupt_type; 1095 u8 pc_interrupt; 1096 u32 interrupt; 1097 u8 baud_rate; 1098 u8 parity; 1099 u8 stop_bits; 1100 u8 flow_control; 1101 u8 terminal_type; 1102 u8 reserved1; 1103 u16 pci_device_id; 1104 u16 pci_vendor_id; 1105 u8 pci_bus; 1106 u8 pci_device; 1107 u8 pci_function; 1108 u32 pci_flags; 1109 u8 pci_segment; 1110 u32 reserved2; 1111 }; 1112 1113 /******************************************************************************* 1114 * 1115 * SPMI - Server Platform Management Interface table 1116 * 1117 ******************************************************************************/ 1118 1119 struct acpi_table_spmi { 1120 struct acpi_table_header header; /* Common ACPI table header */ 1121 u8 reserved; 1122 u8 interface_type; 1123 u16 spec_revision; /* Version of IPMI */ 1124 u8 interrupt_type; 1125 u8 gpe_number; /* GPE assigned */ 1126 u8 reserved1; 1127 u8 pci_device_flag; 1128 u32 interrupt; 1129 struct acpi_generic_address ipmi_register; 1130 u8 pci_segment; 1131 u8 pci_bus; 1132 u8 pci_device; 1133 u8 pci_function; 1134 }; 1135 1136 /******************************************************************************* 1137 * 1138 * SRAT - System Resource Affinity Table 1139 * 1140 ******************************************************************************/ 1141 1142 struct acpi_table_srat { 1143 struct acpi_table_header header; /* Common ACPI table header */ 1144 u32 table_revision; /* Must be value '1' */ 1145 u64 reserved; /* Reserved, must be zero */ 1146 }; 1147 1148 /* Values for subtable type in struct acpi_subtable_header */ 1149 1150 enum acpi_srat_type { 1151 ACPI_SRAT_TYPE_CPU_AFFINITY = 0, 1152 ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, 1153 ACPI_SRAT_TYPE_RESERVED = 2 1154 }; 1155 1156 /* SRAT sub-tables */ 1157 1158 struct acpi_srat_cpu_affinity { 1159 struct acpi_subtable_header header; 1160 u8 proximity_domain_lo; 1161 u8 apic_id; 1162 u32 flags; 1163 u8 local_sapic_eid; 1164 u8 proximity_domain_hi[3]; 1165 u32 reserved; /* Reserved, must be zero */ 1166 }; 1167 1168 /* Flags */ 1169 1170 #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ 1171 1172 struct acpi_srat_mem_affinity { 1173 struct acpi_subtable_header header; 1174 u32 proximity_domain; 1175 u16 reserved; /* Reserved, must be zero */ 1176 u64 base_address; 1177 u64 length; 1178 u32 reserved1; 1179 u32 flags; 1180 u64 reserved2; /* Reserved, must be zero */ 1181 }; 1182 1183 /* Flags */ 1184 1185 #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ 1186 #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ 1187 #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ 1188 1189 /******************************************************************************* 1190 * 1191 * TCPA - Trusted Computing Platform Alliance table 1192 * 1193 ******************************************************************************/ 1194 1195 struct acpi_table_tcpa { 1196 struct acpi_table_header header; /* Common ACPI table header */ 1197 u16 reserved; 1198 u32 max_log_length; /* Maximum length for the event log area */ 1199 u64 log_address; /* Address of the event log area */ 1200 }; 1201 1202 /******************************************************************************* 1203 * 1204 * UEFI - UEFI Boot optimization Table 1205 * 1206 ******************************************************************************/ 1207 1208 struct acpi_table_uefi { 1209 struct acpi_table_header header; /* Common ACPI table header */ 1210 u8 identifier[16]; /* UUID identifier */ 1211 u16 data_offset; /* Offset of remaining data in table */ 1212 u8 data; 1213 }; 1214 1215 /******************************************************************************* 1216 * 1217 * WDAT - Watchdog Action Table 1218 * 1219 ******************************************************************************/ 1220 1221 struct acpi_table_wdat { 1222 struct acpi_table_header header; /* Common ACPI table header */ 1223 u32 header_length; /* Watchdog Header Length */ 1224 u16 pci_segment; /* PCI Segment number */ 1225 u8 pci_bus; /* PCI Bus number */ 1226 u8 pci_device; /* PCI Device number */ 1227 u8 pci_function; /* PCI Function number */ 1228 u8 reserved[3]; 1229 u32 timer_period; /* Period of one timer count (msec) */ 1230 u32 max_count; /* Maximum counter value supported */ 1231 u32 min_count; /* Minimum counter value */ 1232 u8 flags; 1233 u8 reserved2[3]; 1234 u32 entries; /* Number of watchdog entries that follow */ 1235 }; 1236 1237 /* WDAT Instruction Entries (actions) */ 1238 1239 struct acpi_wdat_entry { 1240 struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 1241 }; 1242 1243 /* Values for Action field above */ 1244 1245 enum acpi_wdat_actions { 1246 ACPI_WDAT_RESET = 1, 1247 ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, 1248 ACPI_WDAT_GET_COUNTDOWN = 5, 1249 ACPI_WDAT_SET_COUNTDOWN = 6, 1250 ACPI_WDAT_GET_RUNNING_STATE = 8, 1251 ACPI_WDAT_SET_RUNNING_STATE = 9, 1252 ACPI_WDAT_GET_STOPPED_STATE = 10, 1253 ACPI_WDAT_SET_STOPPED_STATE = 11, 1254 ACPI_WDAT_GET_REBOOT = 16, 1255 ACPI_WDAT_SET_REBOOT = 17, 1256 ACPI_WDAT_GET_SHUTDOWN = 18, 1257 ACPI_WDAT_SET_SHUTDOWN = 19, 1258 ACPI_WDAT_GET_STATUS = 32, 1259 ACPI_WDAT_SET_STATUS = 33, 1260 ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ 1261 }; 1262 1263 /* Values for Instruction field above */ 1264 1265 enum acpi_wdat_instructions { 1266 ACPI_WDAT_READ_VALUE = 0, 1267 ACPI_WDAT_READ_COUNTDOWN = 1, 1268 ACPI_WDAT_WRITE_VALUE = 2, 1269 ACPI_WDAT_WRITE_COUNTDOWN = 3, 1270 ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ 1271 ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ 1272 }; 1273 1274 /******************************************************************************* 1275 * 1276 * WDRT - Watchdog Resource Table 1277 * 1278 ******************************************************************************/ 1279 1280 struct acpi_table_wdrt { 1281 struct acpi_table_header header; /* Common ACPI table header */ 1282 u32 header_length; /* Watchdog Header Length */ 1283 u8 pci_segment; /* PCI Segment number */ 1284 u8 pci_bus; /* PCI Bus number */ 1285 u8 pci_device; /* PCI Device number */ 1286 u8 pci_function; /* PCI Function number */ 1287 u32 timer_period; /* Period of one timer count (msec) */ 1288 u32 max_count; /* Maximum counter value supported */ 1289 u32 min_count; /* Minimum counter value */ 1290 u8 flags; 1291 u8 reserved[3]; 1292 u32 entries; /* Number of watchdog entries that follow */ 1293 }; 1294 1295 /* Flags */ 1296 1297 #define ACPI_WDRT_TIMER_ENABLED (1) /* 00: Timer enabled */ 1298 1299 /* Reset to default packing */ 1300 1301 #pragma pack() 1302 1303 #endif /* __ACTBL1_H__ */ 1304