Home | History | Annotate | Line # | Download | only in include
      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