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