actbl2.h revision b24aad44438d5bc21cbbfb94a99d9bf710d8295b
1#ifndef __ACTBL2_H__ 2#define __ACTBL2_H__ 3 4/******************************************************************************* 5 * 6 * Additional ACPI Tables (2) 7 * 8 * These tables are not consumed directly by the ACPICA subsystem, but are 9 * included here to support device drivers and the AML disassembler. 10 * 11 * The tables in this file are defined by third-party specifications, and are 12 * not defined directly by the ACPI specification itself. 13 * 14 ******************************************************************************/ 15 16/* 17 * Values for description table header signatures. Useful because they make 18 * it more difficult to inadvertently type in the wrong signature. 19 */ 20#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ 21#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ 22#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ 23#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ 24#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ 25#define ACPI_SIG_IBFT "IBFT" /* i_sCSI Boot Firmware Table */ 26#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 27#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ 28#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ 29#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ 30#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ 31#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ 32#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ 33#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ 34 35/* 36 * All tables must be byte-packed to match the ACPI specification, since 37 * the tables are provided by the system BIOS. 38 */ 39#pragma pack(1) 40 41/* 42 * Note about bitfields: The u8 type is used for bitfields in ACPI tables. 43 * This is the only type that is even remotely portable. Anything else is not 44 * portable, so do not use any other bitfield types. 45 */ 46 47/******************************************************************************* 48 * 49 * ASF - Alert Standard Format table (Signature "ASF!") 50 * 51 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 52 * 53 ******************************************************************************/ 54 55struct acpi_table_asf { 56 struct acpi_table_header header; /* Common ACPI table header */ 57}; 58 59/* ASF subtable header */ 60 61struct acpi_asf_header { 62 u8 type; 63 u8 reserved; 64 u16 length; 65}; 66 67/* Values for Type field above */ 68 69enum acpi_asf_type { 70 ACPI_ASF_TYPE_INFO = 0, 71 ACPI_ASF_TYPE_ALERT = 1, 72 ACPI_ASF_TYPE_CONTROL = 2, 73 ACPI_ASF_TYPE_BOOT = 3, 74 ACPI_ASF_TYPE_ADDRESS = 4, 75 ACPI_ASF_TYPE_RESERVED = 5 76}; 77 78/* 79 * ASF subtables 80 */ 81 82/* 0: ASF Information */ 83 84struct acpi_asf_info { 85 struct acpi_asf_header header; 86 u8 min_reset_value; 87 u8 min_poll_interval; 88 u16 system_id; 89 u32 mfg_id; 90 u8 flags; 91 u8 reserved2[3]; 92}; 93 94/* 1: ASF Alerts */ 95 96struct acpi_asf_alert { 97 struct acpi_asf_header header; 98 u8 assert_mask; 99 u8 deassert_mask; 100 u8 alerts; 101 u8 data_length; 102}; 103 104struct acpi_asf_alert_data { 105 u8 address; 106 u8 command; 107 u8 mask; 108 u8 value; 109 u8 sensor_type; 110 u8 type; 111 u8 offset; 112 u8 source_type; 113 u8 severity; 114 u8 sensor_number; 115 u8 entity; 116 u8 instance; 117}; 118 119/* 2: ASF Remote Control */ 120 121struct acpi_asf_remote { 122 struct acpi_asf_header header; 123 u8 controls; 124 u8 data_length; 125 u16 reserved2; 126}; 127 128struct acpi_asf_control_data { 129 u8 function; 130 u8 address; 131 u8 command; 132 u8 value; 133}; 134 135/* 3: ASF RMCP Boot Options */ 136 137struct acpi_asf_rmcp { 138 struct acpi_asf_header header; 139 u8 capabilities[7]; 140 u8 completion_code; 141 u32 enterprise_id; 142 u8 command; 143 u16 parameter; 144 u16 boot_options; 145 u16 oem_parameters; 146}; 147 148/* 4: ASF Address */ 149 150struct acpi_asf_address { 151 struct acpi_asf_header header; 152 u8 eprom_address; 153 u8 devices; 154}; 155 156/******************************************************************************* 157 * 158 * BOOT - Simple Boot Flag Table 159 * 160 ******************************************************************************/ 161 162struct acpi_table_boot { 163 struct acpi_table_header header; /* Common ACPI table header */ 164 u8 cmos_index; /* Index in CMOS RAM for the boot register */ 165 u8 reserved[3]; 166}; 167 168/******************************************************************************* 169 * 170 * DBGP - Debug Port table 171 * 172 ******************************************************************************/ 173 174struct acpi_table_dbgp { 175 struct acpi_table_header header; /* Common ACPI table header */ 176 u8 type; /* 0=full 16550, 1=subset of 16550 */ 177 u8 reserved[3]; 178 struct acpi_generic_address debug_port; 179}; 180 181/******************************************************************************* 182 * 183 * DMAR - DMA Remapping table 184 * From "Intel Virtualization Technology for Directed I/O", Sept. 2007 185 * 186 ******************************************************************************/ 187 188struct acpi_table_dmar { 189 struct acpi_table_header header; /* Common ACPI table header */ 190 u8 width; /* Host Address Width */ 191 u8 flags; 192 u8 reserved[10]; 193}; 194 195/* Flags */ 196 197#define ACPI_DMAR_INTR_REMAP (1) 198 199/* DMAR subtable header */ 200 201struct acpi_dmar_header { 202 u16 type; 203 u16 length; 204}; 205 206/* Values for subtable type in struct acpi_dmar_header */ 207 208enum acpi_dmar_type { 209 ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, 210 ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, 211 ACPI_DMAR_TYPE_ATSR = 2, 212 ACPI_DMAR_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 213}; 214 215struct acpi_dmar_device_scope { 216 u8 entry_type; 217 u8 length; 218 u16 reserved; 219 u8 enumeration_id; 220 u8 bus; 221}; 222 223/* Values for entry_type in struct acpi_dmar_device_scope */ 224 225enum acpi_dmar_scope_type { 226 ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, 227 ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, 228 ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, 229 ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, 230 ACPI_DMAR_SCOPE_TYPE_HPET = 4, 231 ACPI_DMAR_SCOPE_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 232}; 233 234struct acpi_dmar_pci_path { 235 u8 dev; 236 u8 fn; 237}; 238 239/* 240 * DMAR Sub-tables, correspond to Type in struct acpi_dmar_header 241 */ 242 243/* 0: Hardware Unit Definition */ 244 245struct acpi_dmar_hardware_unit { 246 struct acpi_dmar_header header; 247 u8 flags; 248 u8 reserved; 249 u16 segment; 250 u64 address; /* Register Base Address */ 251}; 252 253/* Flags */ 254 255#define ACPI_DMAR_INCLUDE_ALL (1) 256 257/* 1: Reserved Memory Defininition */ 258 259struct acpi_dmar_reserved_memory { 260 struct acpi_dmar_header header; 261 u16 reserved; 262 u16 segment; 263 u64 base_address; /* 4_k aligned base address */ 264 u64 end_address; /* 4_k aligned limit address */ 265}; 266 267/* Flags */ 268 269#define ACPI_DMAR_ALLOW_ALL (1) 270 271/* 2: Root Port ATS Capability Reporting Structure */ 272 273struct acpi_dmar_atsr { 274 struct acpi_dmar_header header; 275 u8 flags; 276 u8 reserved; 277 u16 segment; 278}; 279 280/* Flags */ 281 282#define ACPI_DMAR_ALL_PORTS (1) 283 284/******************************************************************************* 285 * 286 * HPET - High Precision Event Timer table 287 * 288 ******************************************************************************/ 289 290struct acpi_table_hpet { 291 struct acpi_table_header header; /* Common ACPI table header */ 292 u32 id; /* Hardware ID of event timer block */ 293 struct acpi_generic_address address; /* Address of event timer block */ 294 u8 sequence; /* HPET sequence number */ 295 u16 minimum_tick; /* Main counter min tick, periodic mode */ 296 u8 flags; 297}; 298 299/*! Flags */ 300 301#define ACPI_HPET_PAGE_PROTECT (1) /* 00: No page protection */ 302#define ACPI_HPET_PAGE_PROTECT_4 (1<<1) /* 01: 4KB page protected */ 303#define ACPI_HPET_PAGE_PROTECT_64 (1<<2) /* 02: 64KB page protected */ 304 305/*! [End] no source code translation !*/ 306 307/******************************************************************************* 308 * 309 * IBFT - Boot Firmware Table 310 * 311 ******************************************************************************/ 312 313struct acpi_table_ibft { 314 struct acpi_table_header header; /* Common ACPI table header */ 315 u8 reserved[12]; 316}; 317 318/* IBFT common subtable header */ 319 320struct acpi_ibft_header { 321 u8 type; 322 u8 version; 323 u16 length; 324 u8 index; 325 u8 flags; 326}; 327 328/* Values for Type field above */ 329 330enum acpi_ibft_type { 331 ACPI_IBFT_TYPE_NOT_USED = 0, 332 ACPI_IBFT_TYPE_CONTROL = 1, 333 ACPI_IBFT_TYPE_INITIATOR = 2, 334 ACPI_IBFT_TYPE_NIC = 3, 335 ACPI_IBFT_TYPE_TARGET = 4, 336 ACPI_IBFT_TYPE_EXTENSIONS = 5, 337 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 338}; 339 340/* IBFT subtables */ 341 342struct acpi_ibft_control { 343 struct acpi_ibft_header header; 344 u16 extensions; 345 u16 initiator_offset; 346 u16 nic0_offset; 347 u16 target0_offset; 348 u16 nic1_offset; 349 u16 target1_offset; 350}; 351 352struct acpi_ibft_initiator { 353 struct acpi_ibft_header header; 354 u8 sns_server[16]; 355 u8 slp_server[16]; 356 u8 primary_server[16]; 357 u8 secondary_server[16]; 358 u16 name_length; 359 u16 name_offset; 360}; 361 362struct acpi_ibft_nic { 363 struct acpi_ibft_header header; 364 u8 ip_address[16]; 365 u8 subnet_mask_prefix; 366 u8 origin; 367 u8 gateway[16]; 368 u8 primary_dns[16]; 369 u8 secondary_dns[16]; 370 u8 dhcp[16]; 371 u16 vlan; 372 u8 mac_address[6]; 373 u16 pci_address; 374 u16 name_length; 375 u16 name_offset; 376}; 377 378struct acpi_ibft_target { 379 struct acpi_ibft_header header; 380 u8 target_ip_address[16]; 381 u16 target_ip_socket; 382 u8 target_boot_lun[8]; 383 u8 chap_type; 384 u8 nic_association; 385 u16 target_name_length; 386 u16 target_name_offset; 387 u16 chap_name_length; 388 u16 chap_name_offset; 389 u16 chap_secret_length; 390 u16 chap_secret_offset; 391 u16 reverse_chap_name_length; 392 u16 reverse_chap_name_offset; 393 u16 reverse_chap_secret_length; 394 u16 reverse_chap_secret_offset; 395}; 396 397/******************************************************************************* 398 * 399 * MCFG - PCI Memory Mapped Configuration table and sub-table 400 * 401 ******************************************************************************/ 402 403struct acpi_table_mcfg { 404 struct acpi_table_header header; /* Common ACPI table header */ 405 u8 reserved[8]; 406}; 407 408/* Subtable */ 409 410struct acpi_mcfg_allocation { 411 u64 address; /* Base address, processor-relative */ 412 u16 pci_segment; /* PCI segment group number */ 413 u8 start_bus_number; /* Starting PCI Bus number */ 414 u8 end_bus_number; /* Final PCI Bus number */ 415 u32 reserved; 416}; 417 418/******************************************************************************* 419 * 420 * SPCR - Serial Port Console Redirection table 421 * 422 ******************************************************************************/ 423 424struct acpi_table_spcr { 425 struct acpi_table_header header; /* Common ACPI table header */ 426 u8 interface_type; /* 0=full 16550, 1=subset of 16550 */ 427 u8 reserved[3]; 428 struct acpi_generic_address serial_port; 429 u8 interrupt_type; 430 u8 pc_interrupt; 431 u32 interrupt; 432 u8 baud_rate; 433 u8 parity; 434 u8 stop_bits; 435 u8 flow_control; 436 u8 terminal_type; 437 u8 reserved1; 438 u16 pci_device_id; 439 u16 pci_vendor_id; 440 u8 pci_bus; 441 u8 pci_device; 442 u8 pci_function; 443 u32 pci_flags; 444 u8 pci_segment; 445 u32 reserved2; 446}; 447 448/******************************************************************************* 449 * 450 * SPMI - Server Platform Management Interface table 451 * 452 ******************************************************************************/ 453 454struct acpi_table_spmi { 455 struct acpi_table_header header; /* Common ACPI table header */ 456 u8 reserved; 457 u8 interface_type; 458 u16 spec_revision; /* Version of IPMI */ 459 u8 interrupt_type; 460 u8 gpe_number; /* GPE assigned */ 461 u8 reserved1; 462 u8 pci_device_flag; 463 u32 interrupt; 464 struct acpi_generic_address ipmi_register; 465 u8 pci_segment; 466 u8 pci_bus; 467 u8 pci_device; 468 u8 pci_function; 469}; 470 471/******************************************************************************* 472 * 473 * TCPA - Trusted Computing Platform Alliance table 474 * 475 ******************************************************************************/ 476 477struct acpi_table_tcpa { 478 struct acpi_table_header header; /* Common ACPI table header */ 479 u16 reserved; 480 u32 max_log_length; /* Maximum length for the event log area */ 481 u64 log_address; /* Address of the event log area */ 482}; 483 484/******************************************************************************* 485 * 486 * UEFI - UEFI Boot optimization Table 487 * 488 ******************************************************************************/ 489 490struct acpi_table_uefi { 491 struct acpi_table_header header; /* Common ACPI table header */ 492 u8 identifier[16]; /* UUID identifier */ 493 u16 data_offset; /* Offset of remaining data in table */ 494 u8 data; 495}; 496 497/******************************************************************************* 498 * 499 * WDAT - Watchdog Action Table 500 * 501 ******************************************************************************/ 502 503struct acpi_table_wdat { 504 struct acpi_table_header header; /* Common ACPI table header */ 505 u32 header_length; /* Watchdog Header Length */ 506 u16 pci_segment; /* PCI Segment number */ 507 u8 pci_bus; /* PCI Bus number */ 508 u8 pci_device; /* PCI Device number */ 509 u8 pci_function; /* PCI Function number */ 510 u8 reserved[3]; 511 u32 timer_period; /* Period of one timer count (msec) */ 512 u32 max_count; /* Maximum counter value supported */ 513 u32 min_count; /* Minimum counter value */ 514 u8 flags; 515 u8 reserved2[3]; 516 u32 entries; /* Number of watchdog entries that follow */ 517}; 518 519/* WDAT Instruction Entries (actions) */ 520 521struct acpi_wdat_entry { 522 struct acpi_whea_header whea_header; /* Common header for WHEA tables */ 523}; 524 525/* Values for Action field above */ 526 527enum acpi_wdat_actions { 528 ACPI_WDAT_RESET = 1, 529 ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, 530 ACPI_WDAT_GET_COUNTDOWN = 5, 531 ACPI_WDAT_SET_COUNTDOWN = 6, 532 ACPI_WDAT_GET_RUNNING_STATE = 8, 533 ACPI_WDAT_SET_RUNNING_STATE = 9, 534 ACPI_WDAT_GET_STOPPED_STATE = 10, 535 ACPI_WDAT_SET_STOPPED_STATE = 11, 536 ACPI_WDAT_GET_REBOOT = 16, 537 ACPI_WDAT_SET_REBOOT = 17, 538 ACPI_WDAT_GET_SHUTDOWN = 18, 539 ACPI_WDAT_SET_SHUTDOWN = 19, 540 ACPI_WDAT_GET_STATUS = 32, 541 ACPI_WDAT_SET_STATUS = 33, 542 ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ 543}; 544 545/* Values for Instruction field above */ 546 547enum acpi_wdat_instructions { 548 ACPI_WDAT_READ_VALUE = 0, 549 ACPI_WDAT_READ_COUNTDOWN = 1, 550 ACPI_WDAT_WRITE_VALUE = 2, 551 ACPI_WDAT_WRITE_COUNTDOWN = 3, 552 ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ 553 ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ 554}; 555 556/******************************************************************************* 557 * 558 * WDRT - Watchdog Resource Table 559 * 560 ******************************************************************************/ 561 562struct acpi_table_wdrt { 563 struct acpi_table_header header; /* Common ACPI table header */ 564 u32 header_length; /* Watchdog Header Length */ 565 u8 pci_segment; /* PCI Segment number */ 566 u8 pci_bus; /* PCI Bus number */ 567 u8 pci_device; /* PCI Device number */ 568 u8 pci_function; /* PCI Function number */ 569 u32 timer_period; /* Period of one timer count (msec) */ 570 u32 max_count; /* Maximum counter value supported */ 571 u32 min_count; /* Minimum counter value */ 572 u8 flags; 573 u8 reserved[3]; 574 u32 entries; /* Number of watchdog entries that follow */ 575}; 576 577/* Flags */ 578 579#define ACPI_WDRT_TIMER_ENABLED (1) /* 00: Timer enabled */ 580 581/* Reset to default packing */ 582 583#pragma pack() 584 585#endif /* __ACTBL2_H__ */ 586