1 /****************************************************************************** 2 * 3 * Name: actbl1.h - Additional ACPI table definitions 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2022, 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 MERCHANTABILITY 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 * 50 * Additional ACPI Tables 51 * 52 * These tables are not consumed directly by the ACPICA subsystem, but are 53 * included here to support device drivers and the AML disassembler. 54 * 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_AEST "AEST" /* Arm Error Source Table */ 64 #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ 65 #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ 66 #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ 67 #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ 68 #define ACPI_SIG_CEDT "CEDT" /* CXL Early Discovery Table */ 69 #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ 70 #define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ 71 #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ 72 #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ 73 #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ 74 #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ 75 #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ 76 #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ 77 #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ 78 #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ 79 #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ 80 #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ 81 #define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ 82 #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ 83 #define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ 84 #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table*/ 85 86 #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ 87 #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ 88 89 90 /* Reserved table signatures */ 91 92 #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ 93 #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 94 95 /* 96 * These tables have been seen in the field, but no definition has been found 97 */ 98 #ifdef ACPI_UNDEFINED_TABLES 99 #define ACPI_SIG_ATKG "ATKG" 100 #define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ 101 #define ACPI_SIG_IEIT "IEIT" 102 #endif 103 104 /* 105 * All tables must be byte-packed to match the ACPI specification, since 106 * the tables are provided by the system BIOS. 107 */ 108 #pragma pack(1) 109 110 /* 111 * Note: C bitfields are not used for this reason: 112 * 113 * "Bitfields are great and easy to read, but unfortunately the C language 114 * does not specify the layout of bitfields in memory, which means they are 115 * essentially useless for dealing with packed data in on-disk formats or 116 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 117 * this decision was a design error in C. Ritchie could have picked an order 118 * and stuck with it." Norman Ramsey. 119 * See http://stackoverflow.com/a/1053662/41661 120 */ 121 122 123 /******************************************************************************* 124 * 125 * Common subtable headers 126 * 127 ******************************************************************************/ 128 129 /* Generic subtable header (used in MADT, SRAT, etc.) */ 130 131 typedef struct acpi_subtable_header 132 { 133 UINT8 Type; 134 UINT8 Length; 135 136 } ACPI_SUBTABLE_HEADER; 137 138 139 /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ 140 141 typedef struct acpi_whea_header 142 { 143 UINT8 Action; 144 UINT8 Instruction; 145 UINT8 Flags; 146 UINT8 Reserved; 147 ACPI_GENERIC_ADDRESS RegisterRegion; 148 UINT64 Value; /* Value used with Read/Write register */ 149 UINT64 Mask; /* Bitmask required for this register instruction */ 150 151 } ACPI_WHEA_HEADER; 152 153 154 /******************************************************************************* 155 * 156 * ASF - Alert Standard Format table (Signature "ASF!") 157 * Revision 0x10 158 * 159 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 160 * 161 ******************************************************************************/ 162 163 typedef struct acpi_table_asf 164 { 165 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 166 167 } ACPI_TABLE_ASF; 168 169 170 /* ASF subtable header */ 171 172 typedef struct acpi_asf_header 173 { 174 UINT8 Type; 175 UINT8 Reserved; 176 UINT16 Length; 177 178 } ACPI_ASF_HEADER; 179 180 181 /* Values for Type field above */ 182 183 enum AcpiAsfType 184 { 185 ACPI_ASF_TYPE_INFO = 0, 186 ACPI_ASF_TYPE_ALERT = 1, 187 ACPI_ASF_TYPE_CONTROL = 2, 188 ACPI_ASF_TYPE_BOOT = 3, 189 ACPI_ASF_TYPE_ADDRESS = 4, 190 ACPI_ASF_TYPE_RESERVED = 5 191 }; 192 193 /* 194 * ASF subtables 195 */ 196 197 /* 0: ASF Information */ 198 199 typedef struct acpi_asf_info 200 { 201 ACPI_ASF_HEADER Header; 202 UINT8 MinResetValue; 203 UINT8 MinPollInterval; 204 UINT16 SystemId; 205 UINT32 MfgId; 206 UINT8 Flags; 207 UINT8 Reserved2[3]; 208 209 } ACPI_ASF_INFO; 210 211 /* Masks for Flags field above */ 212 213 #define ACPI_ASF_SMBUS_PROTOCOLS (1) 214 215 216 /* 1: ASF Alerts */ 217 218 typedef struct acpi_asf_alert 219 { 220 ACPI_ASF_HEADER Header; 221 UINT8 AssertMask; 222 UINT8 DeassertMask; 223 UINT8 Alerts; 224 UINT8 DataLength; 225 226 } ACPI_ASF_ALERT; 227 228 typedef struct acpi_asf_alert_data 229 { 230 UINT8 Address; 231 UINT8 Command; 232 UINT8 Mask; 233 UINT8 Value; 234 UINT8 SensorType; 235 UINT8 Type; 236 UINT8 Offset; 237 UINT8 SourceType; 238 UINT8 Severity; 239 UINT8 SensorNumber; 240 UINT8 Entity; 241 UINT8 Instance; 242 243 } ACPI_ASF_ALERT_DATA; 244 245 246 /* 2: ASF Remote Control */ 247 248 typedef struct acpi_asf_remote 249 { 250 ACPI_ASF_HEADER Header; 251 UINT8 Controls; 252 UINT8 DataLength; 253 UINT16 Reserved2; 254 255 } ACPI_ASF_REMOTE; 256 257 typedef struct acpi_asf_control_data 258 { 259 UINT8 Function; 260 UINT8 Address; 261 UINT8 Command; 262 UINT8 Value; 263 264 } ACPI_ASF_CONTROL_DATA; 265 266 267 /* 3: ASF RMCP Boot Options */ 268 269 typedef struct acpi_asf_rmcp 270 { 271 ACPI_ASF_HEADER Header; 272 UINT8 Capabilities[7]; 273 UINT8 CompletionCode; 274 UINT32 EnterpriseId; 275 UINT8 Command; 276 UINT16 Parameter; 277 UINT16 BootOptions; 278 UINT16 OemParameters; 279 280 } ACPI_ASF_RMCP; 281 282 283 /* 4: ASF Address */ 284 285 typedef struct acpi_asf_address 286 { 287 ACPI_ASF_HEADER Header; 288 UINT8 EpromAddress; 289 UINT8 Devices; 290 291 } ACPI_ASF_ADDRESS; 292 293 294 /******************************************************************************* 295 * 296 * BERT - Boot Error Record Table (ACPI 4.0) 297 * Version 1 298 * 299 ******************************************************************************/ 300 301 typedef struct acpi_table_bert 302 { 303 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 304 UINT32 RegionLength; /* Length of the boot error region */ 305 UINT64 Address; /* Physical address of the error region */ 306 307 } ACPI_TABLE_BERT; 308 309 310 /* Boot Error Region (not a subtable, pointed to by Address field above) */ 311 312 typedef struct acpi_bert_region 313 { 314 UINT32 BlockStatus; /* Type of error information */ 315 UINT32 RawDataOffset; /* Offset to raw error data */ 316 UINT32 RawDataLength; /* Length of raw error data */ 317 UINT32 DataLength; /* Length of generic error data */ 318 UINT32 ErrorSeverity; /* Severity code */ 319 320 } ACPI_BERT_REGION; 321 322 /* Values for BlockStatus flags above */ 323 324 #define ACPI_BERT_UNCORRECTABLE (1) 325 #define ACPI_BERT_CORRECTABLE (1<<1) 326 #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) 327 #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) 328 #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 329 330 /* Values for ErrorSeverity above */ 331 332 enum AcpiBertErrorSeverity 333 { 334 ACPI_BERT_ERROR_CORRECTABLE = 0, 335 ACPI_BERT_ERROR_FATAL = 1, 336 ACPI_BERT_ERROR_CORRECTED = 2, 337 ACPI_BERT_ERROR_NONE = 3, 338 ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ 339 }; 340 341 /* 342 * Note: The generic error data that follows the ErrorSeverity field above 343 * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below 344 */ 345 346 347 /******************************************************************************* 348 * 349 * BGRT - Boot Graphics Resource Table (ACPI 5.0) 350 * Version 1 351 * 352 ******************************************************************************/ 353 354 typedef struct acpi_table_bgrt 355 { 356 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 357 UINT16 Version; 358 UINT8 Status; 359 UINT8 ImageType; 360 UINT64 ImageAddress; 361 UINT32 ImageOffsetX; 362 UINT32 ImageOffsetY; 363 364 } ACPI_TABLE_BGRT; 365 366 /* Flags for Status field above */ 367 368 #define ACPI_BGRT_DISPLAYED (1) 369 #define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) 370 371 372 /******************************************************************************* 373 * 374 * BOOT - Simple Boot Flag Table 375 * Version 1 376 * 377 * Conforms to the "Simple Boot Flag Specification", Version 2.1 378 * 379 ******************************************************************************/ 380 381 typedef struct acpi_table_boot 382 { 383 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 384 UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ 385 UINT8 Reserved[3]; 386 387 } ACPI_TABLE_BOOT; 388 389 390 391 /******************************************************************************* 392 * 393 * CDAT - Coherent Device Attribute Table 394 * Version 1 395 * 396 * Conforms to the "Coherent Device Attribute Table (CDAT) Specification 397 " (Revision 1.01, October 2020.) 398 * 399 ******************************************************************************/ 400 401 typedef struct acpi_table_cdat 402 { 403 UINT32 Length; /* Length of table in bytes, including this header */ 404 UINT8 Revision; /* ACPI Specification minor version number */ 405 UINT8 Checksum; /* To make sum of entire table == 0 */ 406 UINT8 Reserved[6]; 407 UINT32 Sequence; /* Used to detect runtime CDAT table changes */ 408 409 } ACPI_TABLE_CDAT; 410 411 412 /* CDAT common subtable header */ 413 414 typedef struct acpi_cdat_header 415 { 416 UINT8 Type; 417 UINT8 Reserved; 418 UINT16 Length; 419 420 } ACPI_CDAT_HEADER; 421 422 /* Values for Type field above */ 423 424 enum AcpiCdatType 425 { 426 ACPI_CDAT_TYPE_DSMAS = 0, 427 ACPI_CDAT_TYPE_DSLBIS = 1, 428 ACPI_CDAT_TYPE_DSMSCIS = 2, 429 ACPI_CDAT_TYPE_DSIS = 3, 430 ACPI_CDAT_TYPE_DSEMTS = 4, 431 ACPI_CDAT_TYPE_SSLBIS = 5, 432 ACPI_CDAT_TYPE_RESERVED = 6 /* 6 through 0xFF are reserved */ 433 }; 434 435 436 /* Subtable 0: Device Scoped Memory Affinity Structure (DSMAS) */ 437 438 typedef struct acpi_cadt_dsmas 439 { 440 UINT8 DsmadHandle; 441 UINT8 Flags; 442 UINT16 Reserved; 443 UINT64 DpaBaseAddress; 444 UINT64 DpaLength; 445 446 } ACPI_CDAT_DSMAS; 447 448 /* Flags for subtable above */ 449 450 #define ACPI_CEDT_DSMAS_NON_VOLATILE (1 << 2) 451 452 453 /* Subtable 1: Device scoped Latency and Bandwidth Information Structure (DSLBIS) */ 454 455 typedef struct acpi_cdat_dslbis 456 { 457 UINT8 Handle; 458 UINT8 Flags; /* If Handle matches a DSMAS handle, the definition of this field matches 459 * Flags field in HMAT System Locality Latency */ 460 UINT8 DataType; 461 UINT8 Reserved; 462 UINT64 EntryBaseUnit; 463 UINT16 Entry[3]; 464 UINT16 Reserved2; 465 466 } ACPI_CDAT_DSLBIS; 467 468 469 /* Subtable 2: Device Scoped Memory Side Cache Information Structure (DSMSCIS) */ 470 471 typedef struct acpi_cdat_dsmscis 472 { 473 UINT8 DsmasHandle; 474 UINT8 Reserved[3]; 475 UINT64 SideCacheSize; 476 UINT32 CacheAttributes; 477 478 } ACPI_CDAT_DSMSCIS; 479 480 481 /* Subtable 3: Device Scoped Initiator Structure (DSIS) */ 482 483 typedef struct acpi_cdat_dsis 484 { 485 UINT8 Flags; 486 UINT8 Handle; 487 UINT16 Reserved; 488 489 } ACPI_CDAT_DSIS; 490 491 /* Flags for above subtable */ 492 493 #define ACPI_CDAT_DSIS_MEM_ATTACHED (1 << 0) 494 495 496 /* Subtable 4: Device Scoped EFI Memory Type Structure (DSEMTS) */ 497 498 typedef struct acpi_cdat_dsemts 499 { 500 UINT8 DsmasHandle; 501 UINT8 MemoryType; 502 UINT16 Reserved; 503 UINT64 DpaOffset; 504 UINT64 RangeLength; 505 506 } ACPI_CDAT_DSEMTS; 507 508 509 /* Subtable 5: Switch Scoped Latency and Bandwidth Information Structure (SSLBIS) */ 510 511 typedef struct acpi_cdat_sslbis 512 { 513 UINT8 DataType; 514 UINT8 Reserved[3]; 515 UINT64 EntryBaseUnit; 516 517 } ACPI_CDAT_SSLBIS; 518 519 520 /* Sub-subtable for above, SslbeEntries field */ 521 522 typedef struct acpi_cdat_sslbe 523 { 524 UINT16 PortxId; 525 UINT16 PortyId; 526 UINT16 LatencyOrBandwidth; 527 UINT16 Reserved; 528 529 } ACPI_CDAT_SSLBE; 530 531 532 /******************************************************************************* 533 * 534 * CEDT - CXL Early Discovery Table 535 * Version 1 536 * 537 * Conforms to the "CXL Early Discovery Table" (CXL 2.0, October 2020) 538 * 539 ******************************************************************************/ 540 541 typedef struct acpi_table_cedt 542 { 543 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 544 545 } ACPI_TABLE_CEDT; 546 547 /* CEDT subtable header (Performance Record Structure) */ 548 549 typedef struct acpi_cedt_header 550 { 551 UINT8 Type; 552 UINT8 Reserved; 553 UINT16 Length; 554 555 } ACPI_CEDT_HEADER; 556 557 /* Values for Type field above */ 558 559 enum AcpiCedtType 560 { 561 ACPI_CEDT_TYPE_CHBS = 0, 562 ACPI_CEDT_TYPE_CFMWS = 1, 563 ACPI_CEDT_TYPE_CXIMS = 2, 564 ACPI_CEDT_TYPE_RDPAS = 3, 565 ACPI_CEDT_TYPE_RESERVED = 4, 566 }; 567 568 /* Values for version field above */ 569 570 #define ACPI_CEDT_CHBS_VERSION_CXL11 (0) 571 #define ACPI_CEDT_CHBS_VERSION_CXL20 (1) 572 573 /* Values for length field above */ 574 575 #define ACPI_CEDT_CHBS_LENGTH_CXL11 (0x2000) 576 #define ACPI_CEDT_CHBS_LENGTH_CXL20 (0x10000) 577 578 /* 579 * CEDT subtables 580 */ 581 582 /* 0: CXL Host Bridge Structure */ 583 584 typedef struct acpi_cedt_chbs 585 { 586 ACPI_CEDT_HEADER Header; 587 UINT32 Uid; 588 UINT32 CxlVersion; 589 UINT32 Reserved; 590 UINT64 Base; 591 UINT64 Length; 592 593 } ACPI_CEDT_CHBS; 594 595 596 /* 1: CXL Fixed Memory Window Structure */ 597 598 typedef struct acpi_cedt_cfmws 599 { 600 ACPI_CEDT_HEADER Header; 601 UINT32 Reserved1; 602 UINT64 BaseHpa; 603 UINT64 WindowSize; 604 UINT8 InterleaveWays; 605 UINT8 InterleaveArithmetic; 606 UINT16 Reserved2; 607 UINT32 Granularity; 608 UINT16 Restrictions; 609 UINT16 QtgId; 610 UINT32 InterleaveTargets[]; 611 612 } ACPI_CEDT_CFMWS; 613 614 typedef struct acpi_cedt_cfmws_target_element 615 { 616 UINT32 InterleaveTarget; 617 618 } ACPI_CEDT_CFMWS_TARGET_ELEMENT; 619 620 /* Values for Interleave Arithmetic field above */ 621 622 #define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO (0) 623 #define ACPI_CEDT_CFMWS_ARITHMETIC_XOR (1) 624 625 /* Values for Restrictions field above */ 626 627 #define ACPI_CEDT_CFMWS_RESTRICT_TYPE2 (1) 628 #define ACPI_CEDT_CFMWS_RESTRICT_TYPE3 (1<<1) 629 #define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE (1<<2) 630 #define ACPI_CEDT_CFMWS_RESTRICT_PMEM (1<<3) 631 #define ACPI_CEDT_CFMWS_RESTRICT_FIXED (1<<4) 632 633 /* 2: CXL XOR Interleave Math Structure */ 634 635 struct acpi_cedt_cxims { 636 ACPI_CEDT_HEADER Header; 637 UINT16 Reserved1; 638 UINT8 Hbig; 639 UINT8 NrXormaps; 640 UINT64 XormapList[]; 641 }; 642 643 /* 3: CXL RCEC Downstream Port Association Structure */ 644 645 struct acpi_cedt_rdpas { 646 ACPI_CEDT_HEADER Header; 647 UINT8 Reserved1; 648 UINT16 Length; 649 UINT16 Segment; 650 UINT16 Bdf; 651 UINT8 Protocol; 652 UINT64 Address; 653 }; 654 655 /* Masks for bdf field above */ 656 #define ACPI_CEDT_RDPAS_BUS_MASK 0xff00 657 #define ACPI_CEDT_RDPAS_DEVICE_MASK 0x00f8 658 #define ACPI_CEDT_RDPAS_FUNCTION_MASK 0x0007 659 660 #define ACPI_CEDT_RDPAS_PROTOCOL_IO (0) 661 #define ACPI_CEDT_RDPAS_PROTOCOL_CACHEMEM (1) 662 663 /******************************************************************************* 664 * 665 * CPEP - Corrected Platform Error Polling table (ACPI 4.0) 666 * Version 1 667 * 668 ******************************************************************************/ 669 670 typedef struct acpi_table_cpep 671 { 672 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 673 UINT64 Reserved; 674 675 } ACPI_TABLE_CPEP; 676 677 678 /* Subtable */ 679 680 typedef struct acpi_cpep_polling 681 { 682 ACPI_SUBTABLE_HEADER Header; 683 UINT8 Id; /* Processor ID */ 684 UINT8 Eid; /* Processor EID */ 685 UINT32 Interval; /* Polling interval (msec) */ 686 687 } ACPI_CPEP_POLLING; 688 689 690 /******************************************************************************* 691 * 692 * CSRT - Core System Resource Table 693 * Version 0 694 * 695 * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 696 * 697 ******************************************************************************/ 698 699 typedef struct acpi_table_csrt 700 { 701 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 702 703 } ACPI_TABLE_CSRT; 704 705 706 /* Resource Group subtable */ 707 708 typedef struct acpi_csrt_group 709 { 710 UINT32 Length; 711 UINT32 VendorId; 712 UINT32 SubvendorId; 713 UINT16 DeviceId; 714 UINT16 SubdeviceId; 715 UINT16 Revision; 716 UINT16 Reserved; 717 UINT32 SharedInfoLength; 718 719 /* Shared data immediately follows (Length = SharedInfoLength) */ 720 721 } ACPI_CSRT_GROUP; 722 723 /* Shared Info subtable */ 724 725 typedef struct acpi_csrt_shared_info 726 { 727 UINT16 MajorVersion; 728 UINT16 MinorVersion; 729 UINT32 MmioBaseLow; 730 UINT32 MmioBaseHigh; 731 UINT32 GsiInterrupt; 732 UINT8 InterruptPolarity; 733 UINT8 InterruptMode; 734 UINT8 NumChannels; 735 UINT8 DmaAddressWidth; 736 UINT16 BaseRequestLine; 737 UINT16 NumHandshakeSignals; 738 UINT32 MaxBlockSize; 739 740 /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ 741 742 } ACPI_CSRT_SHARED_INFO; 743 744 /* Resource Descriptor subtable */ 745 746 typedef struct acpi_csrt_descriptor 747 { 748 UINT32 Length; 749 UINT16 Type; 750 UINT16 Subtype; 751 UINT32 Uid; 752 753 /* Resource-specific information immediately follows */ 754 755 } ACPI_CSRT_DESCRIPTOR; 756 757 758 /* Resource Types */ 759 760 #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 761 #define ACPI_CSRT_TYPE_TIMER 0x0002 762 #define ACPI_CSRT_TYPE_DMA 0x0003 763 764 /* Resource Subtypes */ 765 766 #define ACPI_CSRT_XRUPT_LINE 0x0000 767 #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 768 #define ACPI_CSRT_TIMER 0x0000 769 #define ACPI_CSRT_DMA_CHANNEL 0x0000 770 #define ACPI_CSRT_DMA_CONTROLLER 0x0001 771 772 773 /******************************************************************************* 774 * 775 * DBG2 - Debug Port Table 2 776 * Version 0 (Both main table and subtables) 777 * 778 * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020 779 * 780 ******************************************************************************/ 781 782 typedef struct acpi_table_dbg2 783 { 784 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 785 UINT32 InfoOffset; 786 UINT32 InfoCount; 787 788 } ACPI_TABLE_DBG2; 789 790 791 typedef struct acpi_dbg2_header 792 { 793 UINT32 InfoOffset; 794 UINT32 InfoCount; 795 796 } ACPI_DBG2_HEADER; 797 798 799 /* Debug Device Information Subtable */ 800 801 typedef struct acpi_dbg2_device 802 { 803 UINT8 Revision; 804 UINT16 Length; 805 UINT8 RegisterCount; /* Number of BaseAddress registers */ 806 UINT16 NamepathLength; 807 UINT16 NamepathOffset; 808 UINT16 OemDataLength; 809 UINT16 OemDataOffset; 810 UINT16 PortType; 811 UINT16 PortSubtype; 812 UINT16 Reserved; 813 UINT16 BaseAddressOffset; 814 UINT16 AddressSizeOffset; 815 /* 816 * Data that follows: 817 * BaseAddress (required) - Each in 12-byte Generic Address Structure format. 818 * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. 819 * Namepath (required) - Null terminated string. Single dot if not supported. 820 * OemData (optional) - Length is OemDataLength. 821 */ 822 } ACPI_DBG2_DEVICE; 823 824 /* Types for PortType field above */ 825 826 #define ACPI_DBG2_SERIAL_PORT 0x8000 827 #define ACPI_DBG2_1394_PORT 0x8001 828 #define ACPI_DBG2_USB_PORT 0x8002 829 #define ACPI_DBG2_NET_PORT 0x8003 830 831 /* Subtypes for PortSubtype field above */ 832 833 #define ACPI_DBG2_16550_COMPATIBLE 0x0000 834 #define ACPI_DBG2_16550_SUBSET 0x0001 835 #define ACPI_DBG2_MAX311XE_SPI 0x0002 836 #define ACPI_DBG2_ARM_PL011 0x0003 837 #define ACPI_DBG2_MSM8X60 0x0004 838 #define ACPI_DBG2_16550_NVIDIA 0x0005 839 #define ACPI_DBG2_TI_OMAP 0x0006 840 #define ACPI_DBG2_APM88XXXX 0x0008 841 #define ACPI_DBG2_MSM8974 0x0009 842 #define ACPI_DBG2_SAM5250 0x000A 843 #define ACPI_DBG2_INTEL_USIF 0x000B 844 #define ACPI_DBG2_IMX6 0x000C 845 #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D 846 #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E 847 #define ACPI_DBG2_ARM_DCC 0x000F 848 #define ACPI_DBG2_BCM2835 0x0010 849 #define ACPI_DBG2_SDM845_1_8432MHZ 0x0011 850 #define ACPI_DBG2_16550_WITH_GAS 0x0012 851 #define ACPI_DBG2_SDM845_7_372MHZ 0x0013 852 #define ACPI_DBG2_INTEL_LPSS 0x0014 853 854 #define ACPI_DBG2_1394_STANDARD 0x0000 855 856 #define ACPI_DBG2_USB_XHCI 0x0000 857 #define ACPI_DBG2_USB_EHCI 0x0001 858 859 860 /******************************************************************************* 861 * 862 * DBGP - Debug Port table 863 * Version 1 864 * 865 * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 866 * 867 ******************************************************************************/ 868 869 typedef struct acpi_table_dbgp 870 { 871 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 872 UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ 873 UINT8 Reserved[3]; 874 ACPI_GENERIC_ADDRESS DebugPort; 875 876 } ACPI_TABLE_DBGP; 877 878 879 /******************************************************************************* 880 * 881 * DMAR - DMA Remapping table 882 * Version 1 883 * 884 * Conforms to "Intel Virtualization Technology for Directed I/O", 885 * Version 2.3, October 2014 886 * 887 ******************************************************************************/ 888 889 typedef struct acpi_table_dmar 890 { 891 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 892 UINT8 Width; /* Host Address Width */ 893 UINT8 Flags; 894 UINT8 Reserved[10]; 895 896 } ACPI_TABLE_DMAR; 897 898 /* Masks for Flags field above */ 899 900 #define ACPI_DMAR_INTR_REMAP (1) 901 #define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) 902 #define ACPI_DMAR_X2APIC_MODE (1<<2) 903 904 905 /* DMAR subtable header */ 906 907 typedef struct acpi_dmar_header 908 { 909 UINT16 Type; 910 UINT16 Length; 911 912 } ACPI_DMAR_HEADER; 913 914 /* Values for subtable type in ACPI_DMAR_HEADER */ 915 916 enum AcpiDmarType 917 { 918 ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, 919 ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, 920 ACPI_DMAR_TYPE_ROOT_ATS = 2, 921 ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, 922 ACPI_DMAR_TYPE_NAMESPACE = 4, 923 ACPI_DMAR_TYPE_SATC = 5, 924 ACPI_DMAR_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 925 }; 926 927 928 /* DMAR Device Scope structure */ 929 930 typedef struct acpi_dmar_device_scope 931 { 932 UINT8 EntryType; 933 UINT8 Length; 934 UINT16 Reserved; 935 UINT8 EnumerationId; 936 UINT8 Bus; 937 938 } ACPI_DMAR_DEVICE_SCOPE; 939 940 /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ 941 942 enum AcpiDmarScopeType 943 { 944 ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, 945 ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, 946 ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, 947 ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, 948 ACPI_DMAR_SCOPE_TYPE_HPET = 4, 949 ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, 950 ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 951 }; 952 953 typedef struct acpi_dmar_pci_path 954 { 955 UINT8 Device; 956 UINT8 Function; 957 958 } ACPI_DMAR_PCI_PATH; 959 960 961 /* 962 * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER 963 */ 964 965 /* 0: Hardware Unit Definition */ 966 967 typedef struct acpi_dmar_hardware_unit 968 { 969 ACPI_DMAR_HEADER Header; 970 UINT8 Flags; 971 UINT8 Reserved; 972 UINT16 Segment; 973 UINT64 Address; /* Register Base Address */ 974 975 } ACPI_DMAR_HARDWARE_UNIT; 976 977 /* Masks for Flags field above */ 978 979 #define ACPI_DMAR_INCLUDE_ALL (1) 980 981 982 /* 1: Reserved Memory Definition */ 983 984 typedef struct acpi_dmar_reserved_memory 985 { 986 ACPI_DMAR_HEADER Header; 987 UINT16 Reserved; 988 UINT16 Segment; 989 UINT64 BaseAddress; /* 4K aligned base address */ 990 UINT64 EndAddress; /* 4K aligned limit address */ 991 992 } ACPI_DMAR_RESERVED_MEMORY; 993 994 /* Masks for Flags field above */ 995 996 #define ACPI_DMAR_ALLOW_ALL (1) 997 998 999 /* 2: Root Port ATS Capability Reporting Structure */ 1000 1001 typedef struct acpi_dmar_atsr 1002 { 1003 ACPI_DMAR_HEADER Header; 1004 UINT8 Flags; 1005 UINT8 Reserved; 1006 UINT16 Segment; 1007 1008 } ACPI_DMAR_ATSR; 1009 1010 /* Masks for Flags field above */ 1011 1012 #define ACPI_DMAR_ALL_PORTS (1) 1013 1014 1015 /* 3: Remapping Hardware Static Affinity Structure */ 1016 1017 typedef struct acpi_dmar_rhsa 1018 { 1019 ACPI_DMAR_HEADER Header; 1020 UINT32 Reserved; 1021 UINT64 BaseAddress; 1022 UINT32 ProximityDomain; 1023 1024 } ACPI_DMAR_RHSA; 1025 1026 1027 /* 4: ACPI Namespace Device Declaration Structure */ 1028 1029 typedef struct acpi_dmar_andd 1030 { 1031 ACPI_DMAR_HEADER Header; 1032 UINT8 Reserved[3]; 1033 UINT8 DeviceNumber; 1034 char DeviceName[1]; 1035 1036 } ACPI_DMAR_ANDD; 1037 1038 1039 /* 5: SoC Integrated Address Translation Cache (SATC) */ 1040 1041 typedef struct acpi_dmar_satc 1042 { 1043 ACPI_DMAR_HEADER Header; 1044 UINT8 Flags; 1045 UINT8 Reserved; 1046 UINT16 Segment; 1047 1048 } ACPI_DMAR_SATC 1049 1050 ; 1051 /******************************************************************************* 1052 * 1053 * DRTM - Dynamic Root of Trust for Measurement table 1054 * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 1055 * Table version 1 1056 * 1057 ******************************************************************************/ 1058 1059 typedef struct acpi_table_drtm 1060 { 1061 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1062 UINT64 EntryBaseAddress; 1063 UINT64 EntryLength; 1064 UINT32 EntryAddress32; 1065 UINT64 EntryAddress64; 1066 UINT64 ExitAddress; 1067 UINT64 LogAreaAddress; 1068 UINT32 LogAreaLength; 1069 UINT64 ArchDependentAddress; 1070 UINT32 Flags; 1071 1072 } ACPI_TABLE_DRTM; 1073 1074 /* Flag Definitions for above */ 1075 1076 #define ACPI_DRTM_ACCESS_ALLOWED (1) 1077 #define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) 1078 #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) 1079 #define ACPI_DRTM_AUTHORITY_ORDER (1<<3) 1080 1081 1082 /* 1) Validated Tables List (64-bit addresses) */ 1083 1084 typedef struct acpi_drtm_vtable_list 1085 { 1086 UINT32 ValidatedTableCount; 1087 UINT64 ValidatedTables[1]; 1088 1089 } ACPI_DRTM_VTABLE_LIST; 1090 1091 /* 2) Resources List (of Resource Descriptors) */ 1092 1093 /* Resource Descriptor */ 1094 1095 typedef struct acpi_drtm_resource 1096 { 1097 UINT8 Size[7]; 1098 UINT8 Type; 1099 UINT64 Address; 1100 1101 } ACPI_DRTM_RESOURCE; 1102 1103 typedef struct acpi_drtm_resource_list 1104 { 1105 UINT32 ResourceCount; 1106 ACPI_DRTM_RESOURCE Resources[1]; 1107 1108 } ACPI_DRTM_RESOURCE_LIST; 1109 1110 /* 3) Platform-specific Identifiers List */ 1111 1112 typedef struct acpi_drtm_dps_id 1113 { 1114 UINT32 DpsIdLength; 1115 UINT8 DpsId[16]; 1116 1117 } ACPI_DRTM_DPS_ID; 1118 1119 1120 /******************************************************************************* 1121 * 1122 * ECDT - Embedded Controller Boot Resources Table 1123 * Version 1 1124 * 1125 ******************************************************************************/ 1126 1127 typedef struct acpi_table_ecdt 1128 { 1129 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1130 ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ 1131 ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ 1132 UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ 1133 UINT8 Gpe; /* The GPE for the EC */ 1134 UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ 1135 1136 } ACPI_TABLE_ECDT; 1137 1138 1139 /******************************************************************************* 1140 * 1141 * EINJ - Error Injection Table (ACPI 4.0) 1142 * Version 1 1143 * 1144 ******************************************************************************/ 1145 1146 typedef struct acpi_table_einj 1147 { 1148 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1149 UINT32 HeaderLength; 1150 UINT8 Flags; 1151 UINT8 Reserved[3]; 1152 UINT32 Entries; 1153 1154 } ACPI_TABLE_EINJ; 1155 1156 1157 /* EINJ Injection Instruction Entries (actions) */ 1158 1159 typedef struct acpi_einj_entry 1160 { 1161 ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 1162 1163 } ACPI_EINJ_ENTRY; 1164 1165 /* Masks for Flags field above */ 1166 1167 #define ACPI_EINJ_PRESERVE (1) 1168 1169 /* Values for Action field above */ 1170 1171 enum AcpiEinjActions 1172 { 1173 ACPI_EINJ_BEGIN_OPERATION = 0, 1174 ACPI_EINJ_GET_TRIGGER_TABLE = 1, 1175 ACPI_EINJ_SET_ERROR_TYPE = 2, 1176 ACPI_EINJ_GET_ERROR_TYPE = 3, 1177 ACPI_EINJ_END_OPERATION = 4, 1178 ACPI_EINJ_EXECUTE_OPERATION = 5, 1179 ACPI_EINJ_CHECK_BUSY_STATUS = 6, 1180 ACPI_EINJ_GET_COMMAND_STATUS = 7, 1181 ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 1182 ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, 1183 ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ 1184 ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ 1185 }; 1186 1187 /* Values for Instruction field above */ 1188 1189 enum AcpiEinjInstructions 1190 { 1191 ACPI_EINJ_READ_REGISTER = 0, 1192 ACPI_EINJ_READ_REGISTER_VALUE = 1, 1193 ACPI_EINJ_WRITE_REGISTER = 2, 1194 ACPI_EINJ_WRITE_REGISTER_VALUE = 3, 1195 ACPI_EINJ_NOOP = 4, 1196 ACPI_EINJ_FLUSH_CACHELINE = 5, 1197 ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ 1198 }; 1199 1200 typedef struct acpi_einj_error_type_with_addr 1201 { 1202 UINT32 ErrorType; 1203 UINT32 VendorStructOffset; 1204 UINT32 Flags; 1205 UINT32 ApicId; 1206 UINT64 Address; 1207 UINT64 Range; 1208 UINT32 PcieId; 1209 1210 } ACPI_EINJ_ERROR_TYPE_WITH_ADDR; 1211 1212 typedef struct acpi_einj_vendor 1213 { 1214 UINT32 Length; 1215 UINT32 PcieId; 1216 UINT16 VendorId; 1217 UINT16 DeviceId; 1218 UINT8 RevisionId; 1219 UINT8 Reserved[3]; 1220 1221 } ACPI_EINJ_VENDOR; 1222 1223 1224 /* EINJ Trigger Error Action Table */ 1225 1226 typedef struct acpi_einj_trigger 1227 { 1228 UINT32 HeaderSize; 1229 UINT32 Revision; 1230 UINT32 TableSize; 1231 UINT32 EntryCount; 1232 1233 } ACPI_EINJ_TRIGGER; 1234 1235 /* Command status return values */ 1236 1237 enum AcpiEinjCommandStatus 1238 { 1239 ACPI_EINJ_SUCCESS = 0, 1240 ACPI_EINJ_FAILURE = 1, 1241 ACPI_EINJ_INVALID_ACCESS = 2, 1242 ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ 1243 }; 1244 1245 1246 /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ 1247 1248 #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) 1249 #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) 1250 #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) 1251 #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) 1252 #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) 1253 #define ACPI_EINJ_MEMORY_FATAL (1<<5) 1254 #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) 1255 #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) 1256 #define ACPI_EINJ_PCIX_FATAL (1<<8) 1257 #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) 1258 #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) 1259 #define ACPI_EINJ_PLATFORM_FATAL (1<<11) 1260 #define ACPI_EINJ_VENDOR_DEFINED (1<<31) 1261 1262 1263 /******************************************************************************* 1264 * 1265 * ERST - Error Record Serialization Table (ACPI 4.0) 1266 * Version 1 1267 * 1268 ******************************************************************************/ 1269 1270 typedef struct acpi_table_erst 1271 { 1272 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1273 UINT32 HeaderLength; 1274 UINT32 Reserved; 1275 UINT32 Entries; 1276 1277 } ACPI_TABLE_ERST; 1278 1279 1280 /* ERST Serialization Entries (actions) */ 1281 1282 typedef struct acpi_erst_entry 1283 { 1284 ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ 1285 1286 } ACPI_ERST_ENTRY; 1287 1288 /* Masks for Flags field above */ 1289 1290 #define ACPI_ERST_PRESERVE (1) 1291 1292 /* Values for Action field above */ 1293 1294 enum AcpiErstActions 1295 { 1296 ACPI_ERST_BEGIN_WRITE = 0, 1297 ACPI_ERST_BEGIN_READ = 1, 1298 ACPI_ERST_BEGIN_CLEAR = 2, 1299 ACPI_ERST_END = 3, 1300 ACPI_ERST_SET_RECORD_OFFSET = 4, 1301 ACPI_ERST_EXECUTE_OPERATION = 5, 1302 ACPI_ERST_CHECK_BUSY_STATUS = 6, 1303 ACPI_ERST_GET_COMMAND_STATUS = 7, 1304 ACPI_ERST_GET_RECORD_ID = 8, 1305 ACPI_ERST_SET_RECORD_ID = 9, 1306 ACPI_ERST_GET_RECORD_COUNT = 10, 1307 ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, 1308 ACPI_ERST_NOT_USED = 12, 1309 ACPI_ERST_GET_ERROR_RANGE = 13, 1310 ACPI_ERST_GET_ERROR_LENGTH = 14, 1311 ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 1312 ACPI_ERST_EXECUTE_TIMINGS = 16, 1313 ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ 1314 }; 1315 1316 /* Values for Instruction field above */ 1317 1318 enum AcpiErstInstructions 1319 { 1320 ACPI_ERST_READ_REGISTER = 0, 1321 ACPI_ERST_READ_REGISTER_VALUE = 1, 1322 ACPI_ERST_WRITE_REGISTER = 2, 1323 ACPI_ERST_WRITE_REGISTER_VALUE = 3, 1324 ACPI_ERST_NOOP = 4, 1325 ACPI_ERST_LOAD_VAR1 = 5, 1326 ACPI_ERST_LOAD_VAR2 = 6, 1327 ACPI_ERST_STORE_VAR1 = 7, 1328 ACPI_ERST_ADD = 8, 1329 ACPI_ERST_SUBTRACT = 9, 1330 ACPI_ERST_ADD_VALUE = 10, 1331 ACPI_ERST_SUBTRACT_VALUE = 11, 1332 ACPI_ERST_STALL = 12, 1333 ACPI_ERST_STALL_WHILE_TRUE = 13, 1334 ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, 1335 ACPI_ERST_GOTO = 15, 1336 ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, 1337 ACPI_ERST_SET_DST_ADDRESS_BASE = 17, 1338 ACPI_ERST_MOVE_DATA = 18, 1339 ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ 1340 }; 1341 1342 /* Command status return values */ 1343 1344 enum AcpiErstCommandStatus 1345 { 1346 ACPI_ERST_SUCCESS = 0, 1347 ACPI_ERST_NO_SPACE = 1, 1348 ACPI_ERST_NOT_AVAILABLE = 2, 1349 ACPI_ERST_FAILURE = 3, 1350 ACPI_ERST_RECORD_EMPTY = 4, 1351 ACPI_ERST_NOT_FOUND = 5, 1352 ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ 1353 }; 1354 1355 1356 /* Error Record Serialization Information */ 1357 1358 typedef struct acpi_erst_info 1359 { 1360 UINT16 Signature; /* Should be "ER" */ 1361 UINT8 Data[48]; 1362 1363 } ACPI_ERST_INFO; 1364 1365 1366 /******************************************************************************* 1367 * 1368 * FPDT - Firmware Performance Data Table (ACPI 5.0) 1369 * Version 1 1370 * 1371 ******************************************************************************/ 1372 1373 typedef struct acpi_table_fpdt 1374 { 1375 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1376 1377 } ACPI_TABLE_FPDT; 1378 1379 1380 /* FPDT subtable header (Performance Record Structure) */ 1381 1382 typedef struct acpi_fpdt_header 1383 { 1384 UINT16 Type; 1385 UINT8 Length; 1386 UINT8 Revision; 1387 1388 } ACPI_FPDT_HEADER; 1389 1390 /* Values for Type field above */ 1391 1392 enum AcpiFpdtType 1393 { 1394 ACPI_FPDT_TYPE_BOOT = 0, 1395 ACPI_FPDT_TYPE_S3PERF = 1 1396 }; 1397 1398 1399 /* 1400 * FPDT subtables 1401 */ 1402 1403 /* 0: Firmware Basic Boot Performance Record */ 1404 1405 typedef struct acpi_fpdt_boot_pointer 1406 { 1407 ACPI_FPDT_HEADER Header; 1408 UINT8 Reserved[4]; 1409 UINT64 Address; 1410 1411 } ACPI_FPDT_BOOT_POINTER; 1412 1413 1414 /* 1: S3 Performance Table Pointer Record */ 1415 1416 typedef struct acpi_fpdt_s3pt_pointer 1417 { 1418 ACPI_FPDT_HEADER Header; 1419 UINT8 Reserved[4]; 1420 UINT64 Address; 1421 1422 } ACPI_FPDT_S3PT_POINTER; 1423 1424 1425 /* 1426 * S3PT - S3 Performance Table. This table is pointed to by the 1427 * S3 Pointer Record above. 1428 */ 1429 typedef struct acpi_table_s3pt 1430 { 1431 UINT8 Signature[4]; /* "S3PT" */ 1432 UINT32 Length; 1433 1434 } ACPI_TABLE_S3PT; 1435 1436 1437 /* 1438 * S3PT Subtables (Not part of the actual FPDT) 1439 */ 1440 1441 /* Values for Type field in S3PT header */ 1442 1443 enum AcpiS3ptType 1444 { 1445 ACPI_S3PT_TYPE_RESUME = 0, 1446 ACPI_S3PT_TYPE_SUSPEND = 1, 1447 ACPI_FPDT_BOOT_PERFORMANCE = 2 1448 }; 1449 1450 typedef struct acpi_s3pt_resume 1451 { 1452 ACPI_FPDT_HEADER Header; 1453 UINT32 ResumeCount; 1454 UINT64 FullResume; 1455 UINT64 AverageResume; 1456 1457 } ACPI_S3PT_RESUME; 1458 1459 typedef struct acpi_s3pt_suspend 1460 { 1461 ACPI_FPDT_HEADER Header; 1462 UINT64 SuspendStart; 1463 UINT64 SuspendEnd; 1464 1465 } ACPI_S3PT_SUSPEND; 1466 1467 1468 /* 1469 * FPDT Boot Performance Record (Not part of the actual FPDT) 1470 */ 1471 typedef struct acpi_fpdt_boot 1472 { 1473 ACPI_FPDT_HEADER Header; 1474 UINT8 Reserved[4]; 1475 UINT64 ResetEnd; 1476 UINT64 LoadStart; 1477 UINT64 StartupStart; 1478 UINT64 ExitServicesEntry; 1479 UINT64 ExitServicesExit; 1480 1481 } ACPI_FPDT_BOOT; 1482 1483 1484 /******************************************************************************* 1485 * 1486 * GTDT - Generic Timer Description Table (ACPI 5.1) 1487 * Version 2 1488 * 1489 ******************************************************************************/ 1490 1491 typedef struct acpi_table_gtdt 1492 { 1493 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1494 UINT64 CounterBlockAddresss; 1495 UINT32 Reserved; 1496 UINT32 SecureEl1Interrupt; 1497 UINT32 SecureEl1Flags; 1498 UINT32 NonSecureEl1Interrupt; 1499 UINT32 NonSecureEl1Flags; 1500 UINT32 VirtualTimerInterrupt; 1501 UINT32 VirtualTimerFlags; 1502 UINT32 NonSecureEl2Interrupt; 1503 UINT32 NonSecureEl2Flags; 1504 UINT64 CounterReadBlockAddress; 1505 UINT32 PlatformTimerCount; 1506 UINT32 PlatformTimerOffset; 1507 1508 } ACPI_TABLE_GTDT; 1509 1510 /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ 1511 1512 #define ACPI_GTDT_INTERRUPT_MODE (1) 1513 #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) 1514 #define ACPI_GTDT_ALWAYS_ON (1<<2) 1515 1516 typedef struct acpi_gtdt_el2 1517 { 1518 UINT32 VirtualEL2TimerGsiv; 1519 UINT32 VirtualEL2TimerFlags; 1520 } ACPI_GTDT_EL2; 1521 1522 1523 /* Common GTDT subtable header */ 1524 1525 typedef struct acpi_gtdt_header 1526 { 1527 UINT8 Type; 1528 UINT16 Length; 1529 1530 } ACPI_GTDT_HEADER; 1531 1532 /* Values for GTDT subtable type above */ 1533 1534 enum AcpiGtdtType 1535 { 1536 ACPI_GTDT_TYPE_TIMER_BLOCK = 0, 1537 ACPI_GTDT_TYPE_WATCHDOG = 1, 1538 ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 1539 }; 1540 1541 1542 /* GTDT Subtables, correspond to Type in acpi_gtdt_header */ 1543 1544 /* 0: Generic Timer Block */ 1545 1546 typedef struct acpi_gtdt_timer_block 1547 { 1548 ACPI_GTDT_HEADER Header; 1549 UINT8 Reserved; 1550 UINT64 BlockAddress; 1551 UINT32 TimerCount; 1552 UINT32 TimerOffset; 1553 1554 } ACPI_GTDT_TIMER_BLOCK; 1555 1556 /* Timer Sub-Structure, one per timer */ 1557 1558 typedef struct acpi_gtdt_timer_entry 1559 { 1560 UINT8 FrameNumber; 1561 UINT8 Reserved[3]; 1562 UINT64 BaseAddress; 1563 UINT64 El0BaseAddress; 1564 UINT32 TimerInterrupt; 1565 UINT32 TimerFlags; 1566 UINT32 VirtualTimerInterrupt; 1567 UINT32 VirtualTimerFlags; 1568 UINT32 CommonFlags; 1569 1570 } ACPI_GTDT_TIMER_ENTRY; 1571 1572 /* Flag Definitions: TimerFlags and VirtualTimerFlags above */ 1573 1574 #define ACPI_GTDT_GT_IRQ_MODE (1) 1575 #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) 1576 1577 /* Flag Definitions: CommonFlags above */ 1578 1579 #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) 1580 #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) 1581 1582 1583 /* 1: SBSA Generic Watchdog Structure */ 1584 1585 typedef struct acpi_gtdt_watchdog 1586 { 1587 ACPI_GTDT_HEADER Header; 1588 UINT8 Reserved; 1589 UINT64 RefreshFrameAddress; 1590 UINT64 ControlFrameAddress; 1591 UINT32 TimerInterrupt; 1592 UINT32 TimerFlags; 1593 1594 } ACPI_GTDT_WATCHDOG; 1595 1596 /* Flag Definitions: TimerFlags above */ 1597 1598 #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) 1599 #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) 1600 #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) 1601 1602 1603 /******************************************************************************* 1604 * 1605 * HEST - Hardware Error Source Table (ACPI 4.0) 1606 * Version 1 1607 * 1608 ******************************************************************************/ 1609 1610 typedef struct acpi_table_hest 1611 { 1612 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1613 UINT32 ErrorSourceCount; 1614 1615 } ACPI_TABLE_HEST; 1616 1617 1618 /* HEST subtable header */ 1619 1620 typedef struct acpi_hest_header 1621 { 1622 UINT16 Type; 1623 UINT16 SourceId; 1624 1625 } ACPI_HEST_HEADER; 1626 1627 1628 /* Values for Type field above for subtables */ 1629 1630 enum AcpiHestTypes 1631 { 1632 ACPI_HEST_TYPE_IA32_CHECK = 0, 1633 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, 1634 ACPI_HEST_TYPE_IA32_NMI = 2, 1635 ACPI_HEST_TYPE_NOT_USED3 = 3, 1636 ACPI_HEST_TYPE_NOT_USED4 = 4, 1637 ACPI_HEST_TYPE_NOT_USED5 = 5, 1638 ACPI_HEST_TYPE_AER_ROOT_PORT = 6, 1639 ACPI_HEST_TYPE_AER_ENDPOINT = 7, 1640 ACPI_HEST_TYPE_AER_BRIDGE = 8, 1641 ACPI_HEST_TYPE_GENERIC_ERROR = 9, 1642 ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, 1643 ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, 1644 ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ 1645 }; 1646 1647 1648 /* 1649 * HEST substructures contained in subtables 1650 */ 1651 1652 /* 1653 * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and 1654 * ACPI_HEST_IA_CORRECTED structures. 1655 */ 1656 typedef struct acpi_hest_ia_error_bank 1657 { 1658 UINT8 BankNumber; 1659 UINT8 ClearStatusOnInit; 1660 UINT8 StatusFormat; 1661 UINT8 Reserved; 1662 UINT32 ControlRegister; 1663 UINT64 ControlData; 1664 UINT32 StatusRegister; 1665 UINT32 AddressRegister; 1666 UINT32 MiscRegister; 1667 1668 } ACPI_HEST_IA_ERROR_BANK; 1669 1670 1671 /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ 1672 1673 typedef struct acpi_hest_aer_common 1674 { 1675 UINT16 Reserved1; 1676 UINT8 Flags; 1677 UINT8 Enabled; 1678 UINT32 RecordsToPreallocate; 1679 UINT32 MaxSectionsPerRecord; 1680 UINT32 Bus; /* Bus and Segment numbers */ 1681 UINT16 Device; 1682 UINT16 Function; 1683 UINT16 DeviceControl; 1684 UINT16 Reserved2; 1685 UINT32 UncorrectableMask; 1686 UINT32 UncorrectableSeverity; 1687 UINT32 CorrectableMask; 1688 UINT32 AdvancedCapabilities; 1689 1690 } ACPI_HEST_AER_COMMON; 1691 1692 /* Masks for HEST Flags fields */ 1693 1694 #define ACPI_HEST_FIRMWARE_FIRST (1) 1695 #define ACPI_HEST_GLOBAL (1<<1) 1696 #define ACPI_HEST_GHES_ASSIST (1<<2) 1697 1698 /* 1699 * Macros to access the bus/segment numbers in Bus field above: 1700 * Bus number is encoded in bits 7:0 1701 * Segment number is encoded in bits 23:8 1702 */ 1703 #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) 1704 #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) 1705 1706 1707 /* Hardware Error Notification */ 1708 1709 typedef struct acpi_hest_notify 1710 { 1711 UINT8 Type; 1712 UINT8 Length; 1713 UINT16 ConfigWriteEnable; 1714 UINT32 PollInterval; 1715 UINT32 Vector; 1716 UINT32 PollingThresholdValue; 1717 UINT32 PollingThresholdWindow; 1718 UINT32 ErrorThresholdValue; 1719 UINT32 ErrorThresholdWindow; 1720 1721 } ACPI_HEST_NOTIFY; 1722 1723 /* Values for Notify Type field above */ 1724 1725 enum AcpiHestNotifyTypes 1726 { 1727 ACPI_HEST_NOTIFY_POLLED = 0, 1728 ACPI_HEST_NOTIFY_EXTERNAL = 1, 1729 ACPI_HEST_NOTIFY_LOCAL = 2, 1730 ACPI_HEST_NOTIFY_SCI = 3, 1731 ACPI_HEST_NOTIFY_NMI = 4, 1732 ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ 1733 ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ 1734 ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ 1735 ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ 1736 ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ 1737 ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ 1738 ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ 1739 ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ 1740 }; 1741 1742 /* Values for ConfigWriteEnable bitfield above */ 1743 1744 #define ACPI_HEST_TYPE (1) 1745 #define ACPI_HEST_POLL_INTERVAL (1<<1) 1746 #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) 1747 #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) 1748 #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) 1749 #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) 1750 1751 1752 /* 1753 * HEST subtables 1754 */ 1755 1756 /* 0: IA32 Machine Check Exception */ 1757 1758 typedef struct acpi_hest_ia_machine_check 1759 { 1760 ACPI_HEST_HEADER Header; 1761 UINT16 Reserved1; 1762 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1763 UINT8 Enabled; 1764 UINT32 RecordsToPreallocate; 1765 UINT32 MaxSectionsPerRecord; 1766 UINT64 GlobalCapabilityData; 1767 UINT64 GlobalControlData; 1768 UINT8 NumHardwareBanks; 1769 UINT8 Reserved3[7]; 1770 1771 } ACPI_HEST_IA_MACHINE_CHECK; 1772 1773 1774 /* 1: IA32 Corrected Machine Check */ 1775 1776 typedef struct acpi_hest_ia_corrected 1777 { 1778 ACPI_HEST_HEADER Header; 1779 UINT16 Reserved1; 1780 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1781 UINT8 Enabled; 1782 UINT32 RecordsToPreallocate; 1783 UINT32 MaxSectionsPerRecord; 1784 ACPI_HEST_NOTIFY Notify; 1785 UINT8 NumHardwareBanks; 1786 UINT8 Reserved2[3]; 1787 1788 } ACPI_HEST_IA_CORRECTED; 1789 1790 1791 /* 2: IA32 Non-Maskable Interrupt */ 1792 1793 typedef struct acpi_hest_ia_nmi 1794 { 1795 ACPI_HEST_HEADER Header; 1796 UINT32 Reserved; 1797 UINT32 RecordsToPreallocate; 1798 UINT32 MaxSectionsPerRecord; 1799 UINT32 MaxRawDataLength; 1800 1801 } ACPI_HEST_IA_NMI; 1802 1803 1804 /* 3,4,5: Not used */ 1805 1806 /* 6: PCI Express Root Port AER */ 1807 1808 typedef struct acpi_hest_aer_root 1809 { 1810 ACPI_HEST_HEADER Header; 1811 ACPI_HEST_AER_COMMON Aer; 1812 UINT32 RootErrorCommand; 1813 1814 } ACPI_HEST_AER_ROOT; 1815 1816 1817 /* 7: PCI Express AER (AER Endpoint) */ 1818 1819 typedef struct acpi_hest_aer 1820 { 1821 ACPI_HEST_HEADER Header; 1822 ACPI_HEST_AER_COMMON Aer; 1823 1824 } ACPI_HEST_AER; 1825 1826 1827 /* 8: PCI Express/PCI-X Bridge AER */ 1828 1829 typedef struct acpi_hest_aer_bridge 1830 { 1831 ACPI_HEST_HEADER Header; 1832 ACPI_HEST_AER_COMMON Aer; 1833 UINT32 UncorrectableMask2; 1834 UINT32 UncorrectableSeverity2; 1835 UINT32 AdvancedCapabilities2; 1836 1837 } ACPI_HEST_AER_BRIDGE; 1838 1839 1840 /* 9: Generic Hardware Error Source */ 1841 1842 typedef struct acpi_hest_generic 1843 { 1844 ACPI_HEST_HEADER Header; 1845 UINT16 RelatedSourceId; 1846 UINT8 Reserved; 1847 UINT8 Enabled; 1848 UINT32 RecordsToPreallocate; 1849 UINT32 MaxSectionsPerRecord; 1850 UINT32 MaxRawDataLength; 1851 ACPI_GENERIC_ADDRESS ErrorStatusAddress; 1852 ACPI_HEST_NOTIFY Notify; 1853 UINT32 ErrorBlockLength; 1854 1855 } ACPI_HEST_GENERIC; 1856 1857 1858 /* 10: Generic Hardware Error Source, version 2 */ 1859 1860 typedef struct acpi_hest_generic_v2 1861 { 1862 ACPI_HEST_HEADER Header; 1863 UINT16 RelatedSourceId; 1864 UINT8 Reserved; 1865 UINT8 Enabled; 1866 UINT32 RecordsToPreallocate; 1867 UINT32 MaxSectionsPerRecord; 1868 UINT32 MaxRawDataLength; 1869 ACPI_GENERIC_ADDRESS ErrorStatusAddress; 1870 ACPI_HEST_NOTIFY Notify; 1871 UINT32 ErrorBlockLength; 1872 ACPI_GENERIC_ADDRESS ReadAckRegister; 1873 UINT64 ReadAckPreserve; 1874 UINT64 ReadAckWrite; 1875 1876 } ACPI_HEST_GENERIC_V2; 1877 1878 1879 /* Generic Error Status block */ 1880 1881 typedef struct acpi_hest_generic_status 1882 { 1883 UINT32 BlockStatus; 1884 UINT32 RawDataOffset; 1885 UINT32 RawDataLength; 1886 UINT32 DataLength; 1887 UINT32 ErrorSeverity; 1888 1889 } ACPI_HEST_GENERIC_STATUS; 1890 1891 /* Values for BlockStatus flags above */ 1892 1893 #define ACPI_HEST_UNCORRECTABLE (1) 1894 #define ACPI_HEST_CORRECTABLE (1<<1) 1895 #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) 1896 #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) 1897 #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ 1898 1899 1900 /* Generic Error Data entry */ 1901 1902 typedef struct acpi_hest_generic_data 1903 { 1904 UINT8 SectionType[16]; 1905 UINT32 ErrorSeverity; 1906 UINT16 Revision; 1907 UINT8 ValidationBits; 1908 UINT8 Flags; 1909 UINT32 ErrorDataLength; 1910 UINT8 FruId[16]; 1911 UINT8 FruText[20]; 1912 1913 } ACPI_HEST_GENERIC_DATA; 1914 1915 /* Extension for revision 0x0300 */ 1916 1917 typedef struct acpi_hest_generic_data_v300 1918 { 1919 UINT8 SectionType[16]; 1920 UINT32 ErrorSeverity; 1921 UINT16 Revision; 1922 UINT8 ValidationBits; 1923 UINT8 Flags; 1924 UINT32 ErrorDataLength; 1925 UINT8 FruId[16]; 1926 UINT8 FruText[20]; 1927 UINT64 TimeStamp; 1928 1929 } ACPI_HEST_GENERIC_DATA_V300; 1930 1931 /* Values for ErrorSeverity above */ 1932 1933 #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 1934 #define ACPI_HEST_GEN_ERROR_FATAL 1 1935 #define ACPI_HEST_GEN_ERROR_CORRECTED 2 1936 #define ACPI_HEST_GEN_ERROR_NONE 3 1937 1938 /* Flags for ValidationBits above */ 1939 1940 #define ACPI_HEST_GEN_VALID_FRU_ID (1) 1941 #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) 1942 #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) 1943 1944 1945 /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ 1946 1947 typedef struct acpi_hest_ia_deferred_check 1948 { 1949 ACPI_HEST_HEADER Header; 1950 UINT16 Reserved1; 1951 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ 1952 UINT8 Enabled; 1953 UINT32 RecordsToPreallocate; 1954 UINT32 MaxSectionsPerRecord; 1955 ACPI_HEST_NOTIFY Notify; 1956 UINT8 NumHardwareBanks; 1957 UINT8 Reserved2[3]; 1958 1959 } ACPI_HEST_IA_DEFERRED_CHECK; 1960 1961 1962 /******************************************************************************* 1963 * 1964 * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.3) 1965 * 1966 ******************************************************************************/ 1967 1968 typedef struct acpi_table_hmat 1969 { 1970 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1971 UINT32 Reserved; 1972 1973 } ACPI_TABLE_HMAT; 1974 1975 1976 /* Values for HMAT structure types */ 1977 1978 enum AcpiHmatType 1979 { 1980 ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subsystem address range */ 1981 ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ 1982 ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ 1983 ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ 1984 }; 1985 1986 typedef struct acpi_hmat_structure 1987 { 1988 UINT16 Type; 1989 UINT16 Reserved; 1990 UINT32 Length; 1991 1992 } ACPI_HMAT_STRUCTURE; 1993 1994 1995 /* 1996 * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE 1997 */ 1998 1999 /* 0: Memory proximity domain attributes */ 2000 2001 typedef struct acpi_hmat_proximity_domain 2002 { 2003 ACPI_HMAT_STRUCTURE Header; 2004 UINT16 Flags; 2005 UINT16 Reserved1; 2006 UINT32 InitiatorPD; /* Attached Initiator proximity domain */ 2007 UINT32 MemoryPD; /* Memory proximity domain */ 2008 UINT32 Reserved2; 2009 UINT64 Reserved3; 2010 UINT64 Reserved4; 2011 2012 } ACPI_HMAT_PROXIMITY_DOMAIN; 2013 2014 /* Masks for Flags field above */ 2015 2016 #define ACPI_HMAT_INITIATOR_PD_VALID (1) /* 1: InitiatorPD field is valid */ 2017 2018 2019 /* 1: System locality latency and bandwidth information */ 2020 2021 typedef struct acpi_hmat_locality 2022 { 2023 ACPI_HMAT_STRUCTURE Header; 2024 UINT8 Flags; 2025 UINT8 DataType; 2026 UINT8 MinTransferSize; 2027 UINT8 Reserved1; 2028 UINT32 NumberOfInitiatorPDs; 2029 UINT32 NumberOfTargetPDs; 2030 UINT32 Reserved2; 2031 UINT64 EntryBaseUnit; 2032 2033 } ACPI_HMAT_LOCALITY; 2034 2035 /* Masks for Flags field above */ 2036 2037 #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) /* Bits 0-3 */ 2038 2039 /* Values for Memory Hierarchy flags */ 2040 2041 #define ACPI_HMAT_MEMORY 0 2042 #define ACPI_HMAT_1ST_LEVEL_CACHE 1 2043 #define ACPI_HMAT_2ND_LEVEL_CACHE 2 2044 #define ACPI_HMAT_3RD_LEVEL_CACHE 3 2045 #define ACPI_HMAT_MINIMUM_XFER_SIZE 0x10 /* Bit 4: ACPI 6.4 */ 2046 #define ACPI_HMAT_NON_SEQUENTIAL_XFERS 0x20 /* Bit 5: ACPI 6.4 */ 2047 2048 2049 /* Values for DataType field above */ 2050 2051 #define ACPI_HMAT_ACCESS_LATENCY 0 2052 #define ACPI_HMAT_READ_LATENCY 1 2053 #define ACPI_HMAT_WRITE_LATENCY 2 2054 #define ACPI_HMAT_ACCESS_BANDWIDTH 3 2055 #define ACPI_HMAT_READ_BANDWIDTH 4 2056 #define ACPI_HMAT_WRITE_BANDWIDTH 5 2057 2058 2059 /* 2: Memory side cache information */ 2060 2061 typedef struct acpi_hmat_cache 2062 { 2063 ACPI_HMAT_STRUCTURE Header; 2064 UINT32 MemoryPD; 2065 UINT32 Reserved1; 2066 UINT64 CacheSize; 2067 UINT32 CacheAttributes; 2068 UINT16 Reserved2; 2069 UINT16 NumberOfSMBIOSHandles; 2070 2071 } ACPI_HMAT_CACHE; 2072 2073 /* Masks for CacheAttributes field above */ 2074 2075 #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) 2076 #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) 2077 #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) 2078 #define ACPI_HMAT_WRITE_POLICY (0x0000F000) 2079 #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) 2080 2081 /* Values for cache associativity flag */ 2082 2083 #define ACPI_HMAT_CA_NONE (0) 2084 #define ACPI_HMAT_CA_DIRECT_MAPPED (1) 2085 #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) 2086 2087 /* Values for write policy flag */ 2088 2089 #define ACPI_HMAT_CP_NONE (0) 2090 #define ACPI_HMAT_CP_WB (1) 2091 #define ACPI_HMAT_CP_WT (2) 2092 2093 2094 /******************************************************************************* 2095 * 2096 * HPET - High Precision Event Timer table 2097 * Version 1 2098 * 2099 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", 2100 * Version 1.0a, October 2004 2101 * 2102 ******************************************************************************/ 2103 2104 typedef struct acpi_table_hpet 2105 { 2106 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2107 UINT32 Id; /* Hardware ID of event timer block */ 2108 ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ 2109 UINT8 Sequence; /* HPET sequence number */ 2110 UINT16 MinimumTick; /* Main counter min tick, periodic mode */ 2111 UINT8 Flags; 2112 2113 } ACPI_TABLE_HPET; 2114 2115 /* Masks for Flags field above */ 2116 2117 #define ACPI_HPET_PAGE_PROTECT_MASK (3) 2118 2119 /* Values for Page Protect flags */ 2120 2121 enum AcpiHpetPageProtect 2122 { 2123 ACPI_HPET_NO_PAGE_PROTECT = 0, 2124 ACPI_HPET_PAGE_PROTECT4 = 1, 2125 ACPI_HPET_PAGE_PROTECT64 = 2 2126 }; 2127 2128 2129 /******************************************************************************* 2130 * 2131 * IBFT - Boot Firmware Table 2132 * Version 1 2133 * 2134 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b 2135 * Specification", Version 1.01, March 1, 2007 2136 * 2137 * Note: It appears that this table is not intended to appear in the RSDT/XSDT. 2138 * Therefore, it is not currently supported by the disassembler. 2139 * 2140 ******************************************************************************/ 2141 2142 typedef struct acpi_table_ibft 2143 { 2144 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2145 UINT8 Reserved[12]; 2146 2147 } ACPI_TABLE_IBFT; 2148 2149 2150 /* IBFT common subtable header */ 2151 2152 typedef struct acpi_ibft_header 2153 { 2154 UINT8 Type; 2155 UINT8 Version; 2156 UINT16 Length; 2157 UINT8 Index; 2158 UINT8 Flags; 2159 2160 } ACPI_IBFT_HEADER; 2161 2162 /* Values for Type field above */ 2163 2164 enum AcpiIbftType 2165 { 2166 ACPI_IBFT_TYPE_NOT_USED = 0, 2167 ACPI_IBFT_TYPE_CONTROL = 1, 2168 ACPI_IBFT_TYPE_INITIATOR = 2, 2169 ACPI_IBFT_TYPE_NIC = 3, 2170 ACPI_IBFT_TYPE_TARGET = 4, 2171 ACPI_IBFT_TYPE_EXTENSIONS = 5, 2172 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 2173 }; 2174 2175 2176 /* IBFT subtables */ 2177 2178 typedef struct acpi_ibft_control 2179 { 2180 ACPI_IBFT_HEADER Header; 2181 UINT16 Extensions; 2182 UINT16 InitiatorOffset; 2183 UINT16 Nic0Offset; 2184 UINT16 Target0Offset; 2185 UINT16 Nic1Offset; 2186 UINT16 Target1Offset; 2187 2188 } ACPI_IBFT_CONTROL; 2189 2190 typedef struct acpi_ibft_initiator 2191 { 2192 ACPI_IBFT_HEADER Header; 2193 UINT8 SnsServer[16]; 2194 UINT8 SlpServer[16]; 2195 UINT8 PrimaryServer[16]; 2196 UINT8 SecondaryServer[16]; 2197 UINT16 NameLength; 2198 UINT16 NameOffset; 2199 2200 } ACPI_IBFT_INITIATOR; 2201 2202 typedef struct acpi_ibft_nic 2203 { 2204 ACPI_IBFT_HEADER Header; 2205 UINT8 IpAddress[16]; 2206 UINT8 SubnetMaskPrefix; 2207 UINT8 Origin; 2208 UINT8 Gateway[16]; 2209 UINT8 PrimaryDns[16]; 2210 UINT8 SecondaryDns[16]; 2211 UINT8 Dhcp[16]; 2212 UINT16 Vlan; 2213 UINT8 MacAddress[6]; 2214 UINT16 PciAddress; 2215 UINT16 NameLength; 2216 UINT16 NameOffset; 2217 2218 } ACPI_IBFT_NIC; 2219 2220 typedef struct acpi_ibft_target 2221 { 2222 ACPI_IBFT_HEADER Header; 2223 UINT8 TargetIpAddress[16]; 2224 UINT16 TargetIpSocket; 2225 UINT8 TargetBootLun[8]; 2226 UINT8 ChapType; 2227 UINT8 NicAssociation; 2228 UINT16 TargetNameLength; 2229 UINT16 TargetNameOffset; 2230 UINT16 ChapNameLength; 2231 UINT16 ChapNameOffset; 2232 UINT16 ChapSecretLength; 2233 UINT16 ChapSecretOffset; 2234 UINT16 ReverseChapNameLength; 2235 UINT16 ReverseChapNameOffset; 2236 UINT16 ReverseChapSecretLength; 2237 UINT16 ReverseChapSecretOffset; 2238 2239 } ACPI_IBFT_TARGET; 2240 2241 2242 /* Reset to default packing */ 2243 2244 #pragma pack() 2245 2246 #endif /* __ACTBL1_H__ */ 2247