1 /****************************************************************************** 2 * 3 * Name: actbl3.h - ACPI Table Definitions 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2018, 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 __ACTBL3_H__ 45 #define __ACTBL3_H__ 46 47 /******************************************************************************* 48 * 49 * Additional ACPI Tables (3) 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 * In general, the tables in this file are fully defined within the ACPI 55 * specification. 56 * 57 ******************************************************************************/ 58 59 /* 60 * Values for description table header signatures for tables defined in this 61 * file. Useful because they make it more difficult to inadvertently type in 62 * the wrong signature. 63 */ 64 #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 65 #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 66 #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 67 #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 68 #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 69 #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 70 #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 71 #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 72 #define ACPI_SIG_STAO "STAO" /* Status Override table */ 73 #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 74 #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ 75 76 #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 77 #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 78 79 /* Reserved table signatures */ 80 81 #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 82 #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 83 84 /* 85 * All tables must be byte-packed to match the ACPI specification, since 86 * the tables are provided by the system BIOS. 87 */ 88 #pragma pack(1) 89 90 /* 91 * Note: C bitfields are not used for this reason: 92 * 93 * "Bitfields are great and easy to read, but unfortunately the C language 94 * does not specify the layout of bitfields in memory, which means they are 95 * essentially useless for dealing with packed data in on-disk formats or 96 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 97 * this decision was a design error in C. Ritchie could have picked an order 98 * and stuck with it." Norman Ramsey. 99 * See http://stackoverflow.com/a/1053662/41661 100 */ 101 102 /******************************************************************************* 103 * 104 * BGRT - Boot Graphics Resource Table (ACPI 5.0) 105 * Version 1 106 * 107 ******************************************************************************/ 108 109 struct acpi_table_bgrt { 110 struct acpi_table_header header; /* Common ACPI table header */ 111 u16 version; 112 u8 status; 113 u8 image_type; 114 u64 image_address; 115 u32 image_offset_x; 116 u32 image_offset_y; 117 }; 118 119 /* Flags for Status field above */ 120 121 #define ACPI_BGRT_DISPLAYED (1) 122 #define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) 123 124 /******************************************************************************* 125 * 126 * DRTM - Dynamic Root of Trust for Measurement table 127 * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 128 * Table version 1 129 * 130 ******************************************************************************/ 131 132 struct acpi_table_drtm { 133 struct acpi_table_header header; /* Common ACPI table header */ 134 u64 entry_base_address; 135 u64 entry_length; 136 u32 entry_address32; 137 u64 entry_address64; 138 u64 exit_address; 139 u64 log_area_address; 140 u32 log_area_length; 141 u64 arch_dependent_address; 142 u32 flags; 143 }; 144 145 /* Flag Definitions for above */ 146 147 #define ACPI_DRTM_ACCESS_ALLOWED (1) 148 #define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) 149 #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) 150 #define ACPI_DRTM_AUTHORITY_ORDER (1<<3) 151 152 /* 1) Validated Tables List (64-bit addresses) */ 153 154 struct acpi_drtm_vtable_list { 155 u32 validated_table_count; 156 u64 validated_tables[1]; 157 }; 158 159 /* 2) Resources List (of Resource Descriptors) */ 160 161 /* Resource Descriptor */ 162 163 struct acpi_drtm_resource { 164 u8 size[7]; 165 u8 type; 166 u64 address; 167 }; 168 169 struct acpi_drtm_resource_list { 170 u32 resource_count; 171 struct acpi_drtm_resource resources[1]; 172 }; 173 174 /* 3) Platform-specific Identifiers List */ 175 176 struct acpi_drtm_dps_id { 177 u32 dps_id_length; 178 u8 dps_id[16]; 179 }; 180 181 /******************************************************************************* 182 * 183 * FPDT - Firmware Performance Data Table (ACPI 5.0) 184 * Version 1 185 * 186 ******************************************************************************/ 187 188 struct acpi_table_fpdt { 189 struct acpi_table_header header; /* Common ACPI table header */ 190 }; 191 192 /* FPDT subtable header (Performance Record Structure) */ 193 194 struct acpi_fpdt_header { 195 u16 type; 196 u8 length; 197 u8 revision; 198 }; 199 200 /* Values for Type field above */ 201 202 enum acpi_fpdt_type { 203 ACPI_FPDT_TYPE_BOOT = 0, 204 ACPI_FPDT_TYPE_S3PERF = 1 205 }; 206 207 /* 208 * FPDT subtables 209 */ 210 211 /* 0: Firmware Basic Boot Performance Record */ 212 213 struct acpi_fpdt_boot_pointer { 214 struct acpi_fpdt_header header; 215 u8 reserved[4]; 216 u64 address; 217 }; 218 219 /* 1: S3 Performance Table Pointer Record */ 220 221 struct acpi_fpdt_s3pt_pointer { 222 struct acpi_fpdt_header header; 223 u8 reserved[4]; 224 u64 address; 225 }; 226 227 /* 228 * S3PT - S3 Performance Table. This table is pointed to by the 229 * S3 Pointer Record above. 230 */ 231 struct acpi_table_s3pt { 232 u8 signature[4]; /* "S3PT" */ 233 u32 length; 234 }; 235 236 /* 237 * S3PT Subtables (Not part of the actual FPDT) 238 */ 239 240 /* Values for Type field in S3PT header */ 241 242 enum acpi_s3pt_type { 243 ACPI_S3PT_TYPE_RESUME = 0, 244 ACPI_S3PT_TYPE_SUSPEND = 1, 245 ACPI_FPDT_BOOT_PERFORMANCE = 2 246 }; 247 248 struct acpi_s3pt_resume { 249 struct acpi_fpdt_header header; 250 u32 resume_count; 251 u64 full_resume; 252 u64 average_resume; 253 }; 254 255 struct acpi_s3pt_suspend { 256 struct acpi_fpdt_header header; 257 u64 suspend_start; 258 u64 suspend_end; 259 }; 260 261 /* 262 * FPDT Boot Performance Record (Not part of the actual FPDT) 263 */ 264 struct acpi_fpdt_boot { 265 struct acpi_fpdt_header header; 266 u8 reserved[4]; 267 u64 reset_end; 268 u64 load_start; 269 u64 startup_start; 270 u64 exit_services_entry; 271 u64 exit_services_exit; 272 }; 273 274 /******************************************************************************* 275 * 276 * GTDT - Generic Timer Description Table (ACPI 5.1) 277 * Version 2 278 * 279 ******************************************************************************/ 280 281 struct acpi_table_gtdt { 282 struct acpi_table_header header; /* Common ACPI table header */ 283 u64 counter_block_addresss; 284 u32 reserved; 285 u32 secure_el1_interrupt; 286 u32 secure_el1_flags; 287 u32 non_secure_el1_interrupt; 288 u32 non_secure_el1_flags; 289 u32 virtual_timer_interrupt; 290 u32 virtual_timer_flags; 291 u32 non_secure_el2_interrupt; 292 u32 non_secure_el2_flags; 293 u64 counter_read_block_address; 294 u32 platform_timer_count; 295 u32 platform_timer_offset; 296 }; 297 298 /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ 299 300 #define ACPI_GTDT_INTERRUPT_MODE (1) 301 #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) 302 #define ACPI_GTDT_ALWAYS_ON (1<<2) 303 304 /* Common GTDT subtable header */ 305 306 struct acpi_gtdt_header { 307 u8 type; 308 u16 length; 309 }; 310 311 /* Values for GTDT subtable type above */ 312 313 enum acpi_gtdt_type { 314 ACPI_GTDT_TYPE_TIMER_BLOCK = 0, 315 ACPI_GTDT_TYPE_WATCHDOG = 1, 316 ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 317 }; 318 319 /* GTDT Subtables, correspond to Type in struct acpi_gtdt_header */ 320 321 /* 0: Generic Timer Block */ 322 323 struct acpi_gtdt_timer_block { 324 struct acpi_gtdt_header header; 325 u8 reserved; 326 u64 block_address; 327 u32 timer_count; 328 u32 timer_offset; 329 }; 330 331 /* Timer Sub-Structure, one per timer */ 332 333 struct acpi_gtdt_timer_entry { 334 u8 frame_number; 335 u8 reserved[3]; 336 u64 base_address; 337 u64 el0_base_address; 338 u32 timer_interrupt; 339 u32 timer_flags; 340 u32 virtual_timer_interrupt; 341 u32 virtual_timer_flags; 342 u32 common_flags; 343 }; 344 345 /* Flag Definitions: timer_flags and virtual_timer_flags above */ 346 347 #define ACPI_GTDT_GT_IRQ_MODE (1) 348 #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) 349 350 /* Flag Definitions: common_flags above */ 351 352 #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) 353 #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) 354 355 /* 1: SBSA Generic Watchdog Structure */ 356 357 struct acpi_gtdt_watchdog { 358 struct acpi_gtdt_header header; 359 u8 reserved; 360 u64 refresh_frame_address; 361 u64 control_frame_address; 362 u32 timer_interrupt; 363 u32 timer_flags; 364 }; 365 366 /* Flag Definitions: timer_flags above */ 367 368 #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) 369 #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) 370 #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) 371 372 /******************************************************************************* 373 * 374 * MPST - Memory Power State Table (ACPI 5.0) 375 * Version 1 376 * 377 ******************************************************************************/ 378 379 #define ACPI_MPST_CHANNEL_INFO \ 380 u8 channel_id; \ 381 u8 reserved1[3]; \ 382 u16 power_node_count; \ 383 u16 reserved2; 384 385 /* Main table */ 386 387 struct acpi_table_mpst { 388 struct acpi_table_header header; /* Common ACPI table header */ 389 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 390 }; 391 392 /* Memory Platform Communication Channel Info */ 393 394 struct acpi_mpst_channel { 395 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 396 }; 397 398 /* Memory Power Node Structure */ 399 400 struct acpi_mpst_power_node { 401 u8 flags; 402 u8 reserved1; 403 u16 node_id; 404 u32 length; 405 u64 range_address; 406 u64 range_length; 407 u32 num_power_states; 408 u32 num_physical_components; 409 }; 410 411 /* Values for Flags field above */ 412 413 #define ACPI_MPST_ENABLED 1 414 #define ACPI_MPST_POWER_MANAGED 2 415 #define ACPI_MPST_HOT_PLUG_CAPABLE 4 416 417 /* Memory Power State Structure (follows POWER_NODE above) */ 418 419 struct acpi_mpst_power_state { 420 u8 power_state; 421 u8 info_index; 422 }; 423 424 /* Physical Component ID Structure (follows POWER_STATE above) */ 425 426 struct acpi_mpst_component { 427 u16 component_id; 428 }; 429 430 /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 431 432 struct acpi_mpst_data_hdr { 433 u16 characteristics_count; 434 u16 reserved; 435 }; 436 437 struct acpi_mpst_power_data { 438 u8 structure_id; 439 u8 flags; 440 u16 reserved1; 441 u32 average_power; 442 u32 power_saving; 443 u64 exit_latency; 444 u64 reserved2; 445 }; 446 447 /* Values for Flags field above */ 448 449 #define ACPI_MPST_PRESERVE 1 450 #define ACPI_MPST_AUTOENTRY 2 451 #define ACPI_MPST_AUTOEXIT 4 452 453 /* Shared Memory Region (not part of an ACPI table) */ 454 455 struct acpi_mpst_shared { 456 u32 signature; 457 u16 pcc_command; 458 u16 pcc_status; 459 u32 command_register; 460 u32 status_register; 461 u32 power_state_id; 462 u32 power_node_id; 463 u64 energy_consumed; 464 u64 average_power; 465 }; 466 467 /******************************************************************************* 468 * 469 * PCCT - Platform Communications Channel Table (ACPI 5.0) 470 * Version 2 (ACPI 6.2) 471 * 472 ******************************************************************************/ 473 474 struct acpi_table_pcct { 475 struct acpi_table_header header; /* Common ACPI table header */ 476 u32 flags; 477 u64 reserved; 478 }; 479 480 /* Values for Flags field above */ 481 482 #define ACPI_PCCT_DOORBELL 1 483 484 /* Values for subtable type in struct acpi_subtable_header */ 485 486 enum acpi_pcct_type { 487 ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 488 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 489 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 490 ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ 491 ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ 492 ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ 493 }; 494 495 /* 496 * PCCT Subtables, correspond to Type in struct acpi_subtable_header 497 */ 498 499 /* 0: Generic Communications Subspace */ 500 501 struct acpi_pcct_subspace { 502 struct acpi_subtable_header header; 503 u8 reserved[6]; 504 u64 base_address; 505 u64 length; 506 struct acpi_generic_address doorbell_register; 507 u64 preserve_mask; 508 u64 write_mask; 509 u32 latency; 510 u32 max_access_rate; 511 u16 min_turnaround_time; 512 }; 513 514 /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 515 516 struct acpi_pcct_hw_reduced { 517 struct acpi_subtable_header header; 518 u32 platform_interrupt; 519 u8 flags; 520 u8 reserved; 521 u64 base_address; 522 u64 length; 523 struct acpi_generic_address doorbell_register; 524 u64 preserve_mask; 525 u64 write_mask; 526 u32 latency; 527 u32 max_access_rate; 528 u16 min_turnaround_time; 529 }; 530 531 /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 532 533 struct acpi_pcct_hw_reduced_type2 { 534 struct acpi_subtable_header header; 535 u32 platform_interrupt; 536 u8 flags; 537 u8 reserved; 538 u64 base_address; 539 u64 length; 540 struct acpi_generic_address doorbell_register; 541 u64 preserve_mask; 542 u64 write_mask; 543 u32 latency; 544 u32 max_access_rate; 545 u16 min_turnaround_time; 546 struct acpi_generic_address platform_ack_register; 547 u64 ack_preserve_mask; 548 u64 ack_write_mask; 549 }; 550 551 /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ 552 553 struct acpi_pcct_ext_pcc_master { 554 struct acpi_subtable_header header; 555 u32 platform_interrupt; 556 u8 flags; 557 u8 reserved1; 558 u64 base_address; 559 u32 length; 560 struct acpi_generic_address doorbell_register; 561 u64 preserve_mask; 562 u64 write_mask; 563 u32 latency; 564 u32 max_access_rate; 565 u32 min_turnaround_time; 566 struct acpi_generic_address platform_ack_register; 567 u64 ack_preserve_mask; 568 u64 ack_set_mask; 569 u64 reserved2; 570 struct acpi_generic_address cmd_complete_register; 571 u64 cmd_complete_mask; 572 struct acpi_generic_address cmd_update_register; 573 u64 cmd_update_preserve_mask; 574 u64 cmd_update_set_mask; 575 struct acpi_generic_address error_status_register; 576 u64 error_status_mask; 577 }; 578 579 /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ 580 581 struct acpi_pcct_ext_pcc_slave { 582 struct acpi_subtable_header header; 583 u32 platform_interrupt; 584 u8 flags; 585 u8 reserved1; 586 u64 base_address; 587 u32 length; 588 struct acpi_generic_address doorbell_register; 589 u64 preserve_mask; 590 u64 write_mask; 591 u32 latency; 592 u32 max_access_rate; 593 u32 min_turnaround_time; 594 struct acpi_generic_address platform_ack_register; 595 u64 ack_preserve_mask; 596 u64 ack_set_mask; 597 u64 reserved2; 598 struct acpi_generic_address cmd_complete_register; 599 u64 cmd_complete_mask; 600 struct acpi_generic_address cmd_update_register; 601 u64 cmd_update_preserve_mask; 602 u64 cmd_update_set_mask; 603 struct acpi_generic_address error_status_register; 604 u64 error_status_mask; 605 }; 606 607 /* Values for doorbell flags above */ 608 609 #define ACPI_PCCT_INTERRUPT_POLARITY (1) 610 #define ACPI_PCCT_INTERRUPT_MODE (1<<1) 611 612 /* 613 * PCC memory structures (not part of the ACPI table) 614 */ 615 616 /* Shared Memory Region */ 617 618 struct acpi_pcct_shared_memory { 619 u32 signature; 620 u16 command; 621 u16 status; 622 }; 623 624 /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ 625 626 struct acpi_pcct_ext_pcc_shared_memory { 627 u32 signature; 628 u32 flags; 629 u32 length; 630 u32 command; 631 }; 632 633 /******************************************************************************* 634 * 635 * PMTT - Platform Memory Topology Table (ACPI 5.0) 636 * Version 1 637 * 638 ******************************************************************************/ 639 640 struct acpi_table_pmtt { 641 struct acpi_table_header header; /* Common ACPI table header */ 642 u32 reserved; 643 }; 644 645 /* Common header for PMTT subtables that follow main table */ 646 647 struct acpi_pmtt_header { 648 u8 type; 649 u8 reserved1; 650 u16 length; 651 u16 flags; 652 u16 reserved2; 653 }; 654 655 /* Values for Type field above */ 656 657 #define ACPI_PMTT_TYPE_SOCKET 0 658 #define ACPI_PMTT_TYPE_CONTROLLER 1 659 #define ACPI_PMTT_TYPE_DIMM 2 660 #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ 661 662 /* Values for Flags field above */ 663 664 #define ACPI_PMTT_TOP_LEVEL 0x0001 665 #define ACPI_PMTT_PHYSICAL 0x0002 666 #define ACPI_PMTT_MEMORY_TYPE 0x000C 667 668 /* 669 * PMTT subtables, correspond to Type in struct acpi_pmtt_header 670 */ 671 672 /* 0: Socket Structure */ 673 674 struct acpi_pmtt_socket { 675 struct acpi_pmtt_header header; 676 u16 socket_id; 677 u16 reserved; 678 }; 679 680 /* 1: Memory Controller subtable */ 681 682 struct acpi_pmtt_controller { 683 struct acpi_pmtt_header header; 684 u32 read_latency; 685 u32 write_latency; 686 u32 read_bandwidth; 687 u32 write_bandwidth; 688 u16 access_width; 689 u16 alignment; 690 u16 reserved; 691 u16 domain_count; 692 }; 693 694 /* 1a: Proximity Domain substructure */ 695 696 struct acpi_pmtt_domain { 697 u32 proximity_domain; 698 }; 699 700 /* 2: Physical Component Identifier (DIMM) */ 701 702 struct acpi_pmtt_physical_component { 703 struct acpi_pmtt_header header; 704 u16 component_id; 705 u16 reserved; 706 u32 memory_size; 707 u32 bios_handle; 708 }; 709 710 /******************************************************************************* 711 * 712 * RASF - RAS Feature Table (ACPI 5.0) 713 * Version 1 714 * 715 ******************************************************************************/ 716 717 struct acpi_table_rasf { 718 struct acpi_table_header header; /* Common ACPI table header */ 719 u8 channel_id[12]; 720 }; 721 722 /* RASF Platform Communication Channel Shared Memory Region */ 723 724 struct acpi_rasf_shared_memory { 725 u32 signature; 726 u16 command; 727 u16 status; 728 u16 version; 729 u8 capabilities[16]; 730 u8 set_capabilities[16]; 731 u16 num_parameter_blocks; 732 u32 set_capabilities_status; 733 }; 734 735 /* RASF Parameter Block Structure Header */ 736 737 struct acpi_rasf_parameter_block { 738 u16 type; 739 u16 version; 740 u16 length; 741 }; 742 743 /* RASF Parameter Block Structure for PATROL_SCRUB */ 744 745 struct acpi_rasf_patrol_scrub_parameter { 746 struct acpi_rasf_parameter_block header; 747 u16 patrol_scrub_command; 748 u64 requested_address_range[2]; 749 u64 actual_address_range[2]; 750 u16 flags; 751 u8 requested_speed; 752 }; 753 754 /* Masks for Flags and Speed fields above */ 755 756 #define ACPI_RASF_SCRUBBER_RUNNING 1 757 #define ACPI_RASF_SPEED (7<<1) 758 #define ACPI_RASF_SPEED_SLOW (0<<1) 759 #define ACPI_RASF_SPEED_MEDIUM (4<<1) 760 #define ACPI_RASF_SPEED_FAST (7<<1) 761 762 /* Channel Commands */ 763 764 enum acpi_rasf_commands { 765 ACPI_RASF_EXECUTE_RASF_COMMAND = 1 766 }; 767 768 /* Platform RAS Capabilities */ 769 770 enum acpi_rasf_capabiliities { 771 ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 772 ACPI_SW_PATROL_SCRUB_EXPOSED = 1 773 }; 774 775 /* Patrol Scrub Commands */ 776 777 enum acpi_rasf_patrol_scrub_commands { 778 ACPI_RASF_GET_PATROL_PARAMETERS = 1, 779 ACPI_RASF_START_PATROL_SCRUBBER = 2, 780 ACPI_RASF_STOP_PATROL_SCRUBBER = 3 781 }; 782 783 /* Channel Command flags */ 784 785 #define ACPI_RASF_GENERATE_SCI (1<<15) 786 787 /* Status values */ 788 789 enum acpi_rasf_status { 790 ACPI_RASF_SUCCESS = 0, 791 ACPI_RASF_NOT_VALID = 1, 792 ACPI_RASF_NOT_SUPPORTED = 2, 793 ACPI_RASF_BUSY = 3, 794 ACPI_RASF_FAILED = 4, 795 ACPI_RASF_ABORTED = 5, 796 ACPI_RASF_INVALID_DATA = 6 797 }; 798 799 /* Status flags */ 800 801 #define ACPI_RASF_COMMAND_COMPLETE (1) 802 #define ACPI_RASF_SCI_DOORBELL (1<<1) 803 #define ACPI_RASF_ERROR (1<<2) 804 #define ACPI_RASF_STATUS (0x1F<<3) 805 806 /******************************************************************************* 807 * 808 * STAO - Status Override Table (_STA override) - ACPI 6.0 809 * Version 1 810 * 811 * Conforms to "ACPI Specification for Status Override Table" 812 * 6 January 2015 813 * 814 ******************************************************************************/ 815 816 struct acpi_table_stao { 817 struct acpi_table_header header; /* Common ACPI table header */ 818 u8 ignore_uart; 819 }; 820 821 /******************************************************************************* 822 * 823 * WPBT - Windows Platform Environment Table (ACPI 6.0) 824 * Version 1 825 * 826 * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 827 * 828 ******************************************************************************/ 829 830 struct acpi_table_wpbt { 831 struct acpi_table_header header; /* Common ACPI table header */ 832 u32 handoff_size; 833 u64 handoff_address; 834 u8 layout; 835 u8 type; 836 u16 arguments_length; 837 }; 838 839 /******************************************************************************* 840 * 841 * XENV - Xen Environment Table (ACPI 6.0) 842 * Version 1 843 * 844 * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015 845 * 846 ******************************************************************************/ 847 848 struct acpi_table_xenv { 849 struct acpi_table_header header; /* Common ACPI table header */ 850 u64 grant_table_address; 851 u64 grant_table_size; 852 u32 event_interrupt; 853 u8 event_flags; 854 }; 855 856 /* Reset to default packing */ 857 858 #pragma pack() 859 860 #endif /* __ACTBL3_H__ */ 861