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