1 /****************************************************************************** 2 * 3 * Name: actbl3.h - ACPI Table Definitions 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2011, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44 #ifndef __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 * The tables in this file are fully defined within the ACPI specification. 55 * 56 ******************************************************************************/ 57 58 /* 59 * Values for description table header signatures for tables defined in this 60 * file. Useful because they make it more difficult to inadvertently type in 61 * the wrong signature. 62 */ 63 #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 64 #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 65 #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 66 #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 67 #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 68 #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 69 #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 70 #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 71 72 #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 73 #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 74 75 /* Reserved table signatures */ 76 77 #define ACPI_SIG_CSRT "CSRT" /* Core System Resources Table */ 78 #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table 2 */ 79 #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 80 #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 81 #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 82 83 /* 84 * All tables must be byte-packed to match the ACPI specification, since 85 * the tables are provided by the system BIOS. 86 */ 87 #pragma pack(1) 88 89 /* 90 * Note about bitfields: The u8 type is used for bitfields in ACPI tables. 91 * This is the only type that is even remotely portable. Anything else is not 92 * portable, so do not use any other bitfield types. 93 */ 94 95 /******************************************************************************* 96 * 97 * BGRT - Boot Graphics Resource Table (ACPI 5.0) 98 * Version 1 99 * 100 ******************************************************************************/ 101 102 struct acpi_table_bgrt { 103 struct acpi_table_header header; /* Common ACPI table header */ 104 u16 version; 105 u8 status; 106 u8 image_type; 107 u64 image_address; 108 u32 image_offset_x; 109 u32 image_offset_y; 110 }; 111 112 /******************************************************************************* 113 * 114 * DRTM - Dynamic Root of Trust for Measurement table 115 * 116 ******************************************************************************/ 117 118 struct acpi_table_drtm { 119 struct acpi_table_header header; /* Common ACPI table header */ 120 u64 entry_base_address; 121 u64 entry_length; 122 u32 entry_address32; 123 u64 entry_address64; 124 u64 exit_address; 125 u64 log_area_address; 126 u32 log_area_length; 127 u64 arch_dependent_address; 128 u32 flags; 129 }; 130 131 /* 1) Validated Tables List */ 132 133 struct acpi_drtm_vtl_list { 134 u32 validated_table_list_count; 135 }; 136 137 /* 2) Resources List */ 138 139 struct acpi_drtm_resource_list { 140 u32 resource_list_count; 141 }; 142 143 /* 3) Platform-specific Identifiers List */ 144 145 struct acpi_drtm_id_list { 146 u32 id_list_count; 147 }; 148 149 /******************************************************************************* 150 * 151 * FPDT - Firmware Performance Data Table (ACPI 5.0) 152 * Version 1 153 * 154 ******************************************************************************/ 155 156 struct acpi_table_fpdt { 157 struct acpi_table_header header; /* Common ACPI table header */ 158 }; 159 160 /* FPDT subtable header */ 161 162 struct acpi_fpdt_header { 163 u16 type; 164 u8 length; 165 u8 revision; 166 }; 167 168 /* Values for Type field above */ 169 170 enum acpi_fpdt_type { 171 ACPI_FPDT_TYPE_BOOT = 0, 172 ACPI_FPDT_TYPE_S3PERF = 1, 173 }; 174 175 /* 176 * FPDT subtables 177 */ 178 179 /* 0: Firmware Basic Boot Performance Record */ 180 181 struct acpi_fpdt_boot { 182 struct acpi_fpdt_header header; 183 u8 reserved[4]; 184 u64 reset_end; 185 u64 load_start; 186 u64 startup_start; 187 u64 exit_services_entry; 188 u64 exit_services_exit; 189 }; 190 191 /* 1: S3 Performance Table Pointer Record */ 192 193 struct acpi_fpdt_s3pt_ptr { 194 struct acpi_fpdt_header header; 195 u8 reserved[4]; 196 u64 address; 197 }; 198 199 /* 200 * S3PT - S3 Performance Table. This table is pointed to by the 201 * FPDT S3 Pointer Record above. 202 */ 203 struct acpi_table_s3pt { 204 u8 signature[4]; /* "S3PT" */ 205 u32 length; 206 }; 207 208 /* 209 * S3PT Subtables 210 */ 211 struct acpi_s3pt_header { 212 u16 type; 213 u8 length; 214 u8 revision; 215 }; 216 217 /* Values for Type field above */ 218 219 enum acpi_s3pt_type { 220 ACPI_S3PT_TYPE_RESUME = 0, 221 ACPI_S3PT_TYPE_SUSPEND = 1, 222 }; 223 224 struct acpi_s3pt_resume { 225 struct acpi_s3pt_header header; 226 u32 resume_count; 227 u64 full_resume; 228 u64 average_resume; 229 }; 230 231 struct acpi_s3pt_suspend { 232 struct acpi_s3pt_header header; 233 u64 suspend_start; 234 u64 suspend_end; 235 }; 236 237 /******************************************************************************* 238 * 239 * GTDT - Generic Timer Description Table (ACPI 5.0) 240 * Version 1 241 * 242 ******************************************************************************/ 243 244 struct acpi_table_gtdt { 245 struct acpi_table_header header; /* Common ACPI table header */ 246 u64 address; 247 u32 flags; 248 u32 secure_pl1_interrupt; 249 u32 secure_pl1_flags; 250 u32 non_secure_pl1_interrupt; 251 u32 non_secure_pl1_flags; 252 u32 virtual_timer_interrupt; 253 u32 virtual_timer_flags; 254 u32 non_secure_pl2_interrupt; 255 u32 non_secure_pl2_flags; 256 }; 257 258 /* Values for Flags field above */ 259 260 #define ACPI_GTDT_MAPPED_BLOCK_PRESENT 1 261 262 /* Values for all "TimerFlags" fields above */ 263 264 #define ACPI_GTDT_INTERRUPT_MODE 1 265 #define ACPI_GTDT_INTERRUPT_POLARITY 2 266 267 /******************************************************************************* 268 * 269 * MPST - Memory Power State Table (ACPI 5.0) 270 * Version 1 271 * 272 ******************************************************************************/ 273 274 #define ACPI_MPST_CHANNEL_INFO \ 275 u16 reserved1; \ 276 u8 channel_id; \ 277 u8 reserved2; \ 278 u16 power_node_count; 279 280 /* Main table */ 281 282 struct acpi_table_mpst { 283 struct acpi_table_header header; /* Common ACPI table header */ 284 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 285 }; 286 287 /* Memory Platform Communication Channel Info */ 288 289 struct acpi_mpst_channel { 290 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 291 }; 292 293 /* Memory Power Node Structure */ 294 295 struct acpi_mpst_power_node { 296 u8 flags; 297 u8 reserved1; 298 u16 node_id; 299 u32 length; 300 u64 range_address; 301 u64 range_length; 302 u8 num_power_states; 303 u8 num_physical_components; 304 u16 reserved2; 305 }; 306 307 /* Values for Flags field above */ 308 309 #define ACPI_MPST_ENABLED 1 310 #define ACPI_MPST_POWER_MANAGED 2 311 #define ACPI_MPST_HOT_PLUG_CAPABLE 4 312 313 /* Memory Power State Structure (follows POWER_NODE above) */ 314 315 struct acpi_mpst_power_state { 316 u8 power_state; 317 u8 info_index; 318 }; 319 320 /* Physical Component ID Structure (follows POWER_STATE above) */ 321 322 struct acpi_mpst_component { 323 u16 component_id; 324 }; 325 326 /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 327 328 struct acpi_mpst_data_hdr { 329 u16 characteristics_count; 330 }; 331 332 struct acpi_mpst_power_data { 333 u8 revision; 334 u8 flags; 335 u16 reserved1; 336 u32 average_power; 337 u32 power_saving; 338 u64 exit_latency; 339 u64 reserved2; 340 }; 341 342 /* Values for Flags field above */ 343 344 #define ACPI_MPST_PRESERVE 1 345 #define ACPI_MPST_AUTOENTRY 2 346 #define ACPI_MPST_AUTOEXIT 4 347 348 /* Shared Memory Region (not part of an ACPI table) */ 349 350 struct acpi_mpst_shared { 351 u32 signature; 352 u16 pcc_command; 353 u16 pcc_status; 354 u16 command_register; 355 u16 status_register; 356 u16 power_state_id; 357 u16 power_node_id; 358 u64 energy_consumed; 359 u64 average_power; 360 }; 361 362 /******************************************************************************* 363 * 364 * PCCT - Platform Communications Channel Table (ACPI 5.0) 365 * Version 1 366 * 367 ******************************************************************************/ 368 369 struct acpi_table_pcct { 370 struct acpi_table_header header; /* Common ACPI table header */ 371 u32 flags; 372 u32 latency; 373 u32 reserved; 374 }; 375 376 /* Values for Flags field above */ 377 378 #define ACPI_PCCT_DOORBELL 1 379 380 /* 381 * PCCT subtables 382 */ 383 384 /* 0: Generic Communications Subspace */ 385 386 struct acpi_pcct_subspace { 387 struct acpi_subtable_header header; 388 u8 reserved[6]; 389 u64 base_address; 390 u64 length; 391 struct acpi_generic_address doorbell_register; 392 u64 preserve_mask; 393 u64 write_mask; 394 }; 395 396 /* 397 * PCC memory structures (not part of the ACPI table) 398 */ 399 400 /* Shared Memory Region */ 401 402 struct acpi_pcct_shared_memory { 403 u32 signature; 404 u16 command; 405 u16 status; 406 }; 407 408 /******************************************************************************* 409 * 410 * PMTT - Platform Memory Topology Table (ACPI 5.0) 411 * Version 1 412 * 413 ******************************************************************************/ 414 415 struct acpi_table_pmtt { 416 struct acpi_table_header header; /* Common ACPI table header */ 417 u32 reserved; 418 }; 419 420 /* Common header for PMTT subtables that follow main table */ 421 422 struct acpi_pmtt_header { 423 u8 type; 424 u8 reserved1; 425 u16 length; 426 u16 flags; 427 u16 reserved2; 428 }; 429 430 /* Values for Type field above */ 431 432 #define ACPI_PMTT_TYPE_SOCKET 0 433 #define ACPI_PMTT_TYPE_CONTROLLER 1 434 #define ACPI_PMTT_TYPE_DIMM 2 435 #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ 436 437 /* Values for Flags field above */ 438 439 #define ACPI_PMTT_TOP_LEVEL 0x0001 440 #define ACPI_PMTT_PHYSICAL 0x0002 441 #define ACPI_PMTT_MEMORY_TYPE 0x000C 442 443 /* 444 * PMTT subtables, correspond to Type in struct acpi_pmtt_header 445 */ 446 447 /* 0: Socket Structure */ 448 449 struct acpi_pmtt_socket { 450 struct acpi_pmtt_header header; 451 u16 socket_id; 452 u16 reserved; 453 }; 454 455 /* 1: Memory Controller subtable */ 456 457 struct acpi_pmtt_controller { 458 struct acpi_pmtt_header header; 459 u32 read_latency; 460 u32 write_latency; 461 u32 read_bandwidth; 462 u32 write_bandwidth; 463 u16 access_width; 464 u16 alignment; 465 u16 reserved; 466 u16 domain_count; 467 }; 468 469 /* 1a: Proximity Domain substructure */ 470 471 struct acpi_pmtt_domain { 472 u32 proximity_domain; 473 }; 474 475 /* 2: Physical Component Identifier (DIMM) */ 476 477 struct acpi_pmtt_physical_component { 478 struct acpi_pmtt_header header; 479 u16 component_id; 480 u16 reserved; 481 u32 memory_size; 482 u32 bios_handle; 483 }; 484 485 /******************************************************************************* 486 * 487 * RASF - RAS Feature Table (ACPI 5.0) 488 * Version 1 489 * 490 ******************************************************************************/ 491 492 struct acpi_table_rasf { 493 struct acpi_table_header header; /* Common ACPI table header */ 494 u8 channel_id[12]; 495 }; 496 497 /* RASF Platform Communication Channel Shared Memory Region */ 498 499 struct acpi_rasf_shared_memory { 500 u32 signature; 501 u16 command; 502 u16 status; 503 u64 requested_address; 504 u64 requested_length; 505 u64 actual_address; 506 u64 actual_length; 507 u16 flags; 508 u8 speed; 509 }; 510 511 /* Masks for Flags and Speed fields above */ 512 513 #define ACPI_RASF_SCRUBBER_RUNNING 1 514 #define ACPI_RASF_SPEED (7<<1) 515 516 /* Channel Commands */ 517 518 enum acpi_rasf_commands { 519 ACPI_RASF_GET_RAS_CAPABILITIES = 1, 520 ACPI_RASF_GET_PATROL_PARAMETERS = 2, 521 ACPI_RASF_START_PATROL_SCRUBBER = 3, 522 ACPI_RASF_STOP_PATROL_SCRUBBER = 4 523 }; 524 525 /* Channel Command flags */ 526 527 #define ACPI_RASF_GENERATE_SCI (1<<15) 528 529 /* Status values */ 530 531 enum acpi_rasf_status { 532 ACPI_RASF_SUCCESS = 0, 533 ACPI_RASF_NOT_VALID = 1, 534 ACPI_RASF_NOT_SUPPORTED = 2, 535 ACPI_RASF_BUSY = 3, 536 ACPI_RASF_FAILED = 4, 537 ACPI_RASF_ABORTED = 5, 538 ACPI_RASF_INVALID_DATA = 6 539 }; 540 541 /* Status flags */ 542 543 #define ACPI_RASF_COMMAND_COMPLETE (1) 544 #define ACPI_RASF_SCI_DOORBELL (1<<1) 545 #define ACPI_RASF_ERROR (1<<2) 546 #define ACPI_RASF_STATUS (0x1F<<3) 547 548 /* Reset to default packing */ 549 550 #pragma pack() 551 552 #endif /* __ACTBL3_H__ */ 553