Home | History | Annotate | Line # | Download | only in include
actbl1.h revision 1.3.10.1
      1       1.1  jruoho /******************************************************************************
      2       1.1  jruoho  *
      3       1.1  jruoho  * Name: actbl1.h - Additional ACPI table definitions
      4       1.1  jruoho  *
      5       1.1  jruoho  *****************************************************************************/
      6       1.1  jruoho 
      7       1.3  jruoho /*
      8  1.3.10.1    yamt  * Copyright (C) 2000 - 2013, Intel Corp.
      9       1.1  jruoho  * All rights reserved.
     10       1.1  jruoho  *
     11       1.3  jruoho  * Redistribution and use in source and binary forms, with or without
     12       1.3  jruoho  * modification, are permitted provided that the following conditions
     13       1.3  jruoho  * are met:
     14       1.3  jruoho  * 1. Redistributions of source code must retain the above copyright
     15       1.3  jruoho  *    notice, this list of conditions, and the following disclaimer,
     16       1.3  jruoho  *    without modification.
     17       1.3  jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18       1.3  jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19       1.3  jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20       1.3  jruoho  *    including a substantially similar Disclaimer requirement for further
     21       1.3  jruoho  *    binary redistribution.
     22       1.3  jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23       1.3  jruoho  *    of any contributors may be used to endorse or promote products derived
     24       1.3  jruoho  *    from this software without specific prior written permission.
     25       1.3  jruoho  *
     26       1.3  jruoho  * Alternatively, this software may be distributed under the terms of the
     27       1.3  jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28       1.3  jruoho  * Software Foundation.
     29       1.3  jruoho  *
     30       1.3  jruoho  * NO WARRANTY
     31       1.3  jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32       1.3  jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33       1.3  jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34       1.3  jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35       1.3  jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36       1.3  jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37       1.3  jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38       1.3  jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39       1.3  jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40       1.3  jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41       1.3  jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42       1.3  jruoho  */
     43       1.1  jruoho 
     44       1.1  jruoho #ifndef __ACTBL1_H__
     45       1.1  jruoho #define __ACTBL1_H__
     46       1.1  jruoho 
     47       1.1  jruoho 
     48       1.1  jruoho /*******************************************************************************
     49       1.1  jruoho  *
     50       1.1  jruoho  * Additional ACPI Tables (1)
     51       1.1  jruoho  *
     52       1.1  jruoho  * These tables are not consumed directly by the ACPICA subsystem, but are
     53       1.1  jruoho  * included here to support device drivers and the AML disassembler.
     54       1.1  jruoho  *
     55       1.1  jruoho  * The tables in this file are fully defined within the ACPI specification.
     56       1.1  jruoho  *
     57       1.1  jruoho  ******************************************************************************/
     58       1.1  jruoho 
     59       1.1  jruoho 
     60       1.1  jruoho /*
     61       1.1  jruoho  * Values for description table header signatures for tables defined in this
     62       1.1  jruoho  * file. Useful because they make it more difficult to inadvertently type in
     63       1.1  jruoho  * the wrong signature.
     64       1.1  jruoho  */
     65       1.1  jruoho #define ACPI_SIG_BERT           "BERT"      /* Boot Error Record Table */
     66       1.1  jruoho #define ACPI_SIG_CPEP           "CPEP"      /* Corrected Platform Error Polling table */
     67       1.1  jruoho #define ACPI_SIG_ECDT           "ECDT"      /* Embedded Controller Boot Resources Table */
     68       1.1  jruoho #define ACPI_SIG_EINJ           "EINJ"      /* Error Injection table */
     69       1.1  jruoho #define ACPI_SIG_ERST           "ERST"      /* Error Record Serialization Table */
     70       1.1  jruoho #define ACPI_SIG_HEST           "HEST"      /* Hardware Error Source Table */
     71       1.1  jruoho #define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
     72       1.1  jruoho #define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table */
     73       1.1  jruoho #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
     74       1.1  jruoho #define ACPI_SIG_SLIT           "SLIT"      /* System Locality Distance Information Table */
     75       1.1  jruoho #define ACPI_SIG_SRAT           "SRAT"      /* System Resource Affinity Table */
     76       1.1  jruoho 
     77       1.1  jruoho 
     78       1.1  jruoho /*
     79       1.1  jruoho  * All tables must be byte-packed to match the ACPI specification, since
     80       1.1  jruoho  * the tables are provided by the system BIOS.
     81       1.1  jruoho  */
     82       1.1  jruoho #pragma pack(1)
     83       1.1  jruoho 
     84       1.1  jruoho /*
     85  1.3.10.1    yamt  * Note: C bitfields are not used for this reason:
     86  1.3.10.1    yamt  *
     87  1.3.10.1    yamt  * "Bitfields are great and easy to read, but unfortunately the C language
     88  1.3.10.1    yamt  * does not specify the layout of bitfields in memory, which means they are
     89  1.3.10.1    yamt  * essentially useless for dealing with packed data in on-disk formats or
     90  1.3.10.1    yamt  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
     91  1.3.10.1    yamt  * this decision was a design error in C. Ritchie could have picked an order
     92  1.3.10.1    yamt  * and stuck with it." Norman Ramsey.
     93  1.3.10.1    yamt  * See http://stackoverflow.com/a/1053662/41661
     94       1.1  jruoho  */
     95       1.1  jruoho 
     96       1.1  jruoho 
     97       1.1  jruoho /*******************************************************************************
     98       1.1  jruoho  *
     99       1.1  jruoho  * Common subtable headers
    100       1.1  jruoho  *
    101       1.1  jruoho  ******************************************************************************/
    102       1.1  jruoho 
    103       1.1  jruoho /* Generic subtable header (used in MADT, SRAT, etc.) */
    104       1.1  jruoho 
    105       1.1  jruoho typedef struct acpi_subtable_header
    106       1.1  jruoho {
    107       1.1  jruoho     UINT8                   Type;
    108       1.1  jruoho     UINT8                   Length;
    109       1.1  jruoho 
    110       1.1  jruoho } ACPI_SUBTABLE_HEADER;
    111       1.1  jruoho 
    112       1.1  jruoho 
    113       1.1  jruoho /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
    114       1.1  jruoho 
    115       1.1  jruoho typedef struct acpi_whea_header
    116       1.1  jruoho {
    117       1.1  jruoho     UINT8                   Action;
    118       1.1  jruoho     UINT8                   Instruction;
    119       1.1  jruoho     UINT8                   Flags;
    120       1.1  jruoho     UINT8                   Reserved;
    121       1.1  jruoho     ACPI_GENERIC_ADDRESS    RegisterRegion;
    122       1.1  jruoho     UINT64                  Value;              /* Value used with Read/Write register */
    123       1.1  jruoho     UINT64                  Mask;               /* Bitmask required for this register instruction */
    124       1.1  jruoho 
    125       1.1  jruoho } ACPI_WHEA_HEADER;
    126       1.1  jruoho 
    127       1.1  jruoho 
    128       1.1  jruoho /*******************************************************************************
    129       1.1  jruoho  *
    130       1.1  jruoho  * BERT - Boot Error Record Table (ACPI 4.0)
    131       1.1  jruoho  *        Version 1
    132       1.1  jruoho  *
    133       1.1  jruoho  ******************************************************************************/
    134       1.1  jruoho 
    135       1.1  jruoho typedef struct acpi_table_bert
    136       1.1  jruoho {
    137       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
    138       1.1  jruoho     UINT32                  RegionLength;       /* Length of the boot error region */
    139  1.3.10.1    yamt     UINT64                  Address;            /* Physical address of the error region */
    140       1.1  jruoho 
    141       1.1  jruoho } ACPI_TABLE_BERT;
    142       1.1  jruoho 
    143       1.1  jruoho 
    144       1.1  jruoho /* Boot Error Region (not a subtable, pointed to by Address field above) */
    145       1.1  jruoho 
    146       1.1  jruoho typedef struct acpi_bert_region
    147       1.1  jruoho {
    148       1.1  jruoho     UINT32                  BlockStatus;        /* Type of error information */
    149       1.1  jruoho     UINT32                  RawDataOffset;      /* Offset to raw error data */
    150       1.1  jruoho     UINT32                  RawDataLength;      /* Length of raw error data */
    151       1.1  jruoho     UINT32                  DataLength;         /* Length of generic error data */
    152       1.1  jruoho     UINT32                  ErrorSeverity;      /* Severity code */
    153       1.1  jruoho 
    154       1.1  jruoho } ACPI_BERT_REGION;
    155       1.1  jruoho 
    156       1.1  jruoho /* Values for BlockStatus flags above */
    157       1.1  jruoho 
    158       1.1  jruoho #define ACPI_BERT_UNCORRECTABLE             (1)
    159       1.1  jruoho #define ACPI_BERT_CORRECTABLE               (1<<1)
    160       1.1  jruoho #define ACPI_BERT_MULTIPLE_UNCORRECTABLE    (1<<2)
    161       1.1  jruoho #define ACPI_BERT_MULTIPLE_CORRECTABLE      (1<<3)
    162       1.1  jruoho #define ACPI_BERT_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
    163       1.1  jruoho 
    164       1.1  jruoho /* Values for ErrorSeverity above */
    165       1.1  jruoho 
    166       1.1  jruoho enum AcpiBertErrorSeverity
    167       1.1  jruoho {
    168       1.1  jruoho     ACPI_BERT_ERROR_CORRECTABLE     = 0,
    169       1.1  jruoho     ACPI_BERT_ERROR_FATAL           = 1,
    170       1.1  jruoho     ACPI_BERT_ERROR_CORRECTED       = 2,
    171       1.1  jruoho     ACPI_BERT_ERROR_NONE            = 3,
    172       1.1  jruoho     ACPI_BERT_ERROR_RESERVED        = 4     /* 4 and greater are reserved */
    173       1.1  jruoho };
    174       1.1  jruoho 
    175       1.1  jruoho /*
    176       1.1  jruoho  * Note: The generic error data that follows the ErrorSeverity field above
    177       1.1  jruoho  * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below
    178       1.1  jruoho  */
    179       1.1  jruoho 
    180       1.1  jruoho 
    181       1.1  jruoho /*******************************************************************************
    182       1.1  jruoho  *
    183       1.1  jruoho  * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
    184       1.1  jruoho  *        Version 1
    185       1.1  jruoho  *
    186       1.1  jruoho  ******************************************************************************/
    187       1.1  jruoho 
    188       1.1  jruoho typedef struct acpi_table_cpep
    189       1.1  jruoho {
    190       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
    191       1.1  jruoho     UINT64                  Reserved;
    192       1.1  jruoho 
    193       1.1  jruoho } ACPI_TABLE_CPEP;
    194       1.1  jruoho 
    195       1.1  jruoho 
    196       1.1  jruoho /* Subtable */
    197       1.1  jruoho 
    198       1.1  jruoho typedef struct acpi_cpep_polling
    199       1.1  jruoho {
    200       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    201       1.1  jruoho     UINT8                   Id;                 /* Processor ID */
    202       1.1  jruoho     UINT8                   Eid;                /* Processor EID */
    203       1.1  jruoho     UINT32                  Interval;           /* Polling interval (msec) */
    204       1.1  jruoho 
    205       1.1  jruoho } ACPI_CPEP_POLLING;
    206       1.1  jruoho 
    207       1.1  jruoho 
    208       1.1  jruoho /*******************************************************************************
    209       1.1  jruoho  *
    210       1.1  jruoho  * ECDT - Embedded Controller Boot Resources Table
    211       1.1  jruoho  *        Version 1
    212       1.1  jruoho  *
    213       1.1  jruoho  ******************************************************************************/
    214       1.1  jruoho 
    215       1.1  jruoho typedef struct acpi_table_ecdt
    216       1.1  jruoho {
    217       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
    218       1.1  jruoho     ACPI_GENERIC_ADDRESS    Control;            /* Address of EC command/status register */
    219       1.1  jruoho     ACPI_GENERIC_ADDRESS    Data;               /* Address of EC data register */
    220       1.1  jruoho     UINT32                  Uid;                /* Unique ID - must be same as the EC _UID method */
    221       1.1  jruoho     UINT8                   Gpe;                /* The GPE for the EC */
    222       1.1  jruoho     UINT8                   Id[1];              /* Full namepath of the EC in the ACPI namespace */
    223       1.1  jruoho 
    224       1.1  jruoho } ACPI_TABLE_ECDT;
    225       1.1  jruoho 
    226       1.1  jruoho 
    227       1.1  jruoho /*******************************************************************************
    228       1.1  jruoho  *
    229       1.1  jruoho  * EINJ - Error Injection Table (ACPI 4.0)
    230       1.1  jruoho  *        Version 1
    231       1.1  jruoho  *
    232       1.1  jruoho  ******************************************************************************/
    233       1.1  jruoho 
    234       1.1  jruoho typedef struct acpi_table_einj
    235       1.1  jruoho {
    236       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
    237       1.1  jruoho     UINT32                  HeaderLength;
    238       1.1  jruoho     UINT8                   Flags;
    239       1.1  jruoho     UINT8                   Reserved[3];
    240       1.1  jruoho     UINT32                  Entries;
    241       1.1  jruoho 
    242       1.1  jruoho } ACPI_TABLE_EINJ;
    243       1.1  jruoho 
    244       1.1  jruoho 
    245       1.1  jruoho /* EINJ Injection Instruction Entries (actions) */
    246       1.1  jruoho 
    247       1.1  jruoho typedef struct acpi_einj_entry
    248       1.1  jruoho {
    249       1.1  jruoho     ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
    250       1.1  jruoho 
    251       1.1  jruoho } ACPI_EINJ_ENTRY;
    252       1.1  jruoho 
    253       1.1  jruoho /* Masks for Flags field above */
    254       1.1  jruoho 
    255       1.1  jruoho #define ACPI_EINJ_PRESERVE          (1)
    256       1.1  jruoho 
    257       1.1  jruoho /* Values for Action field above */
    258       1.1  jruoho 
    259       1.1  jruoho enum AcpiEinjActions
    260       1.1  jruoho {
    261  1.3.10.1    yamt     ACPI_EINJ_BEGIN_OPERATION               = 0,
    262  1.3.10.1    yamt     ACPI_EINJ_GET_TRIGGER_TABLE             = 1,
    263  1.3.10.1    yamt     ACPI_EINJ_SET_ERROR_TYPE                = 2,
    264  1.3.10.1    yamt     ACPI_EINJ_GET_ERROR_TYPE                = 3,
    265  1.3.10.1    yamt     ACPI_EINJ_END_OPERATION                 = 4,
    266  1.3.10.1    yamt     ACPI_EINJ_EXECUTE_OPERATION             = 5,
    267  1.3.10.1    yamt     ACPI_EINJ_CHECK_BUSY_STATUS             = 6,
    268  1.3.10.1    yamt     ACPI_EINJ_GET_COMMAND_STATUS            = 7,
    269  1.3.10.1    yamt     ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS   = 8,
    270  1.3.10.1    yamt     ACPI_EINJ_ACTION_RESERVED               = 9,     /* 9 and greater are reserved */
    271  1.3.10.1    yamt     ACPI_EINJ_TRIGGER_ERROR                 = 0xFF   /* Except for this value */
    272       1.1  jruoho };
    273       1.1  jruoho 
    274       1.1  jruoho /* Values for Instruction field above */
    275       1.1  jruoho 
    276       1.1  jruoho enum AcpiEinjInstructions
    277       1.1  jruoho {
    278       1.1  jruoho     ACPI_EINJ_READ_REGISTER         = 0,
    279       1.1  jruoho     ACPI_EINJ_READ_REGISTER_VALUE   = 1,
    280       1.1  jruoho     ACPI_EINJ_WRITE_REGISTER        = 2,
    281       1.1  jruoho     ACPI_EINJ_WRITE_REGISTER_VALUE  = 3,
    282       1.1  jruoho     ACPI_EINJ_NOOP                  = 4,
    283  1.3.10.1    yamt     ACPI_EINJ_FLUSH_CACHELINE       = 5,
    284  1.3.10.1    yamt     ACPI_EINJ_INSTRUCTION_RESERVED  = 6     /* 6 and greater are reserved */
    285       1.1  jruoho };
    286       1.1  jruoho 
    287  1.3.10.1    yamt typedef struct acpi_einj_error_type_with_addr
    288  1.3.10.1    yamt {
    289  1.3.10.1    yamt     UINT32                  ErrorType;
    290  1.3.10.1    yamt     UINT32                  VendorStructOffset;
    291  1.3.10.1    yamt     UINT32                  Flags;
    292  1.3.10.1    yamt     UINT32                  ApicId;
    293  1.3.10.1    yamt     UINT64                  Address;
    294  1.3.10.1    yamt     UINT64                  Range;
    295  1.3.10.1    yamt     UINT32                  PcieId;
    296  1.3.10.1    yamt 
    297  1.3.10.1    yamt } ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
    298  1.3.10.1    yamt 
    299  1.3.10.1    yamt typedef struct acpi_einj_vendor
    300  1.3.10.1    yamt {
    301  1.3.10.1    yamt     UINT32                  Length;
    302  1.3.10.1    yamt     UINT32                  PcieId;
    303  1.3.10.1    yamt     UINT16                  VendorId;
    304  1.3.10.1    yamt     UINT16                  DeviceId;
    305  1.3.10.1    yamt     UINT8                   RevisionId;
    306  1.3.10.1    yamt     UINT8                   Reserved[3];
    307  1.3.10.1    yamt 
    308  1.3.10.1    yamt } ACPI_EINJ_VENDOR;
    309  1.3.10.1    yamt 
    310       1.1  jruoho 
    311       1.1  jruoho /* EINJ Trigger Error Action Table */
    312       1.1  jruoho 
    313       1.1  jruoho typedef struct acpi_einj_trigger
    314       1.1  jruoho {
    315       1.1  jruoho     UINT32                  HeaderSize;
    316       1.1  jruoho     UINT32                  Revision;
    317       1.1  jruoho     UINT32                  TableSize;
    318       1.1  jruoho     UINT32                  EntryCount;
    319       1.1  jruoho 
    320       1.1  jruoho } ACPI_EINJ_TRIGGER;
    321       1.1  jruoho 
    322       1.1  jruoho /* Command status return values */
    323       1.1  jruoho 
    324       1.1  jruoho enum AcpiEinjCommandStatus
    325       1.1  jruoho {
    326       1.1  jruoho     ACPI_EINJ_SUCCESS               = 0,
    327       1.1  jruoho     ACPI_EINJ_FAILURE               = 1,
    328       1.1  jruoho     ACPI_EINJ_INVALID_ACCESS        = 2,
    329       1.1  jruoho     ACPI_EINJ_STATUS_RESERVED       = 3     /* 3 and greater are reserved */
    330       1.1  jruoho };
    331       1.1  jruoho 
    332       1.1  jruoho 
    333       1.1  jruoho /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
    334       1.1  jruoho 
    335       1.1  jruoho #define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
    336       1.1  jruoho #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
    337       1.1  jruoho #define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
    338       1.1  jruoho #define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
    339       1.1  jruoho #define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
    340       1.1  jruoho #define ACPI_EINJ_MEMORY_FATAL              (1<<5)
    341       1.1  jruoho #define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
    342       1.1  jruoho #define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
    343       1.1  jruoho #define ACPI_EINJ_PCIX_FATAL                (1<<8)
    344       1.1  jruoho #define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
    345       1.1  jruoho #define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
    346       1.1  jruoho #define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
    347  1.3.10.1    yamt #define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
    348       1.1  jruoho 
    349       1.1  jruoho 
    350       1.1  jruoho /*******************************************************************************
    351       1.1  jruoho  *
    352       1.1  jruoho  * ERST - Error Record Serialization Table (ACPI 4.0)
    353       1.1  jruoho  *        Version 1
    354       1.1  jruoho  *
    355       1.1  jruoho  ******************************************************************************/
    356       1.1  jruoho 
    357       1.1  jruoho typedef struct acpi_table_erst
    358       1.1  jruoho {
    359       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
    360       1.1  jruoho     UINT32                  HeaderLength;
    361       1.1  jruoho     UINT32                  Reserved;
    362       1.1  jruoho     UINT32                  Entries;
    363       1.1  jruoho 
    364       1.1  jruoho } ACPI_TABLE_ERST;
    365       1.1  jruoho 
    366       1.1  jruoho 
    367       1.1  jruoho /* ERST Serialization Entries (actions) */
    368       1.1  jruoho 
    369       1.1  jruoho typedef struct acpi_erst_entry
    370       1.1  jruoho {
    371       1.1  jruoho     ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
    372       1.1  jruoho 
    373       1.1  jruoho } ACPI_ERST_ENTRY;
    374       1.1  jruoho 
    375       1.1  jruoho /* Masks for Flags field above */
    376       1.1  jruoho 
    377       1.1  jruoho #define ACPI_ERST_PRESERVE          (1)
    378       1.1  jruoho 
    379       1.1  jruoho /* Values for Action field above */
    380       1.1  jruoho 
    381       1.1  jruoho enum AcpiErstActions
    382       1.1  jruoho {
    383       1.1  jruoho     ACPI_ERST_BEGIN_WRITE           = 0,
    384       1.1  jruoho     ACPI_ERST_BEGIN_READ            = 1,
    385       1.1  jruoho     ACPI_ERST_BEGIN_CLEAR           = 2,
    386       1.1  jruoho     ACPI_ERST_END                   = 3,
    387       1.1  jruoho     ACPI_ERST_SET_RECORD_OFFSET     = 4,
    388       1.1  jruoho     ACPI_ERST_EXECUTE_OPERATION     = 5,
    389       1.1  jruoho     ACPI_ERST_CHECK_BUSY_STATUS     = 6,
    390       1.1  jruoho     ACPI_ERST_GET_COMMAND_STATUS    = 7,
    391       1.1  jruoho     ACPI_ERST_GET_RECORD_ID         = 8,
    392       1.1  jruoho     ACPI_ERST_SET_RECORD_ID         = 9,
    393       1.1  jruoho     ACPI_ERST_GET_RECORD_COUNT      = 10,
    394       1.1  jruoho     ACPI_ERST_BEGIN_DUMMY_WRIITE    = 11,
    395       1.1  jruoho     ACPI_ERST_NOT_USED              = 12,
    396       1.1  jruoho     ACPI_ERST_GET_ERROR_RANGE       = 13,
    397       1.1  jruoho     ACPI_ERST_GET_ERROR_LENGTH      = 14,
    398       1.1  jruoho     ACPI_ERST_GET_ERROR_ATTRIBUTES  = 15,
    399       1.1  jruoho     ACPI_ERST_ACTION_RESERVED       = 16    /* 16 and greater are reserved */
    400       1.1  jruoho };
    401       1.1  jruoho 
    402       1.1  jruoho /* Values for Instruction field above */
    403       1.1  jruoho 
    404       1.1  jruoho enum AcpiErstInstructions
    405       1.1  jruoho {
    406       1.1  jruoho     ACPI_ERST_READ_REGISTER         = 0,
    407       1.1  jruoho     ACPI_ERST_READ_REGISTER_VALUE   = 1,
    408       1.1  jruoho     ACPI_ERST_WRITE_REGISTER        = 2,
    409       1.1  jruoho     ACPI_ERST_WRITE_REGISTER_VALUE  = 3,
    410       1.1  jruoho     ACPI_ERST_NOOP                  = 4,
    411       1.1  jruoho     ACPI_ERST_LOAD_VAR1             = 5,
    412       1.1  jruoho     ACPI_ERST_LOAD_VAR2             = 6,
    413       1.1  jruoho     ACPI_ERST_STORE_VAR1            = 7,
    414       1.1  jruoho     ACPI_ERST_ADD                   = 8,
    415       1.1  jruoho     ACPI_ERST_SUBTRACT              = 9,
    416       1.1  jruoho     ACPI_ERST_ADD_VALUE             = 10,
    417       1.1  jruoho     ACPI_ERST_SUBTRACT_VALUE        = 11,
    418       1.1  jruoho     ACPI_ERST_STALL                 = 12,
    419       1.1  jruoho     ACPI_ERST_STALL_WHILE_TRUE      = 13,
    420       1.1  jruoho     ACPI_ERST_SKIP_NEXT_IF_TRUE     = 14,
    421       1.1  jruoho     ACPI_ERST_GOTO                  = 15,
    422       1.1  jruoho     ACPI_ERST_SET_SRC_ADDRESS_BASE  = 16,
    423       1.1  jruoho     ACPI_ERST_SET_DST_ADDRESS_BASE  = 17,
    424       1.1  jruoho     ACPI_ERST_MOVE_DATA             = 18,
    425       1.1  jruoho     ACPI_ERST_INSTRUCTION_RESERVED  = 19    /* 19 and greater are reserved */
    426       1.1  jruoho };
    427       1.1  jruoho 
    428       1.1  jruoho /* Command status return values */
    429       1.1  jruoho 
    430       1.1  jruoho enum AcpiErstCommandStatus
    431       1.1  jruoho {
    432       1.1  jruoho     ACPI_ERST_SUCESS                = 0,
    433       1.1  jruoho     ACPI_ERST_NO_SPACE              = 1,
    434       1.1  jruoho     ACPI_ERST_NOT_AVAILABLE         = 2,
    435       1.1  jruoho     ACPI_ERST_FAILURE               = 3,
    436       1.1  jruoho     ACPI_ERST_RECORD_EMPTY          = 4,
    437       1.1  jruoho     ACPI_ERST_NOT_FOUND             = 5,
    438       1.1  jruoho     ACPI_ERST_STATUS_RESERVED       = 6     /* 6 and greater are reserved */
    439       1.1  jruoho };
    440       1.1  jruoho 
    441       1.1  jruoho 
    442       1.1  jruoho /* Error Record Serialization Information */
    443       1.1  jruoho 
    444       1.1  jruoho typedef struct acpi_erst_info
    445       1.1  jruoho {
    446       1.1  jruoho     UINT16                  Signature;          /* Should be "ER" */
    447       1.1  jruoho     UINT8                   Data[48];
    448       1.1  jruoho 
    449       1.1  jruoho } ACPI_ERST_INFO;
    450       1.1  jruoho 
    451       1.1  jruoho 
    452       1.1  jruoho /*******************************************************************************
    453       1.1  jruoho  *
    454       1.1  jruoho  * HEST - Hardware Error Source Table (ACPI 4.0)
    455       1.1  jruoho  *        Version 1
    456       1.1  jruoho  *
    457       1.1  jruoho  ******************************************************************************/
    458       1.1  jruoho 
    459       1.1  jruoho typedef struct acpi_table_hest
    460       1.1  jruoho {
    461       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
    462       1.1  jruoho     UINT32                  ErrorSourceCount;
    463       1.1  jruoho 
    464       1.1  jruoho } ACPI_TABLE_HEST;
    465       1.1  jruoho 
    466       1.1  jruoho 
    467       1.1  jruoho /* HEST subtable header */
    468       1.1  jruoho 
    469       1.1  jruoho typedef struct acpi_hest_header
    470       1.1  jruoho {
    471       1.1  jruoho     UINT16                  Type;
    472       1.1  jruoho     UINT16                  SourceId;
    473       1.1  jruoho 
    474       1.1  jruoho } ACPI_HEST_HEADER;
    475       1.1  jruoho 
    476       1.1  jruoho 
    477       1.1  jruoho /* Values for Type field above for subtables */
    478       1.1  jruoho 
    479       1.1  jruoho enum AcpiHestTypes
    480       1.1  jruoho {
    481       1.1  jruoho     ACPI_HEST_TYPE_IA32_CHECK           = 0,
    482       1.1  jruoho     ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
    483       1.1  jruoho     ACPI_HEST_TYPE_IA32_NMI             = 2,
    484       1.1  jruoho     ACPI_HEST_TYPE_NOT_USED3            = 3,
    485       1.1  jruoho     ACPI_HEST_TYPE_NOT_USED4            = 4,
    486       1.1  jruoho     ACPI_HEST_TYPE_NOT_USED5            = 5,
    487       1.1  jruoho     ACPI_HEST_TYPE_AER_ROOT_PORT        = 6,
    488       1.1  jruoho     ACPI_HEST_TYPE_AER_ENDPOINT         = 7,
    489       1.1  jruoho     ACPI_HEST_TYPE_AER_BRIDGE           = 8,
    490       1.1  jruoho     ACPI_HEST_TYPE_GENERIC_ERROR        = 9,
    491       1.1  jruoho     ACPI_HEST_TYPE_RESERVED             = 10    /* 10 and greater are reserved */
    492       1.1  jruoho };
    493       1.1  jruoho 
    494       1.1  jruoho 
    495       1.1  jruoho /*
    496       1.1  jruoho  * HEST substructures contained in subtables
    497       1.1  jruoho  */
    498       1.1  jruoho 
    499       1.1  jruoho /*
    500       1.1  jruoho  * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
    501       1.1  jruoho  * ACPI_HEST_IA_CORRECTED structures.
    502       1.1  jruoho  */
    503       1.1  jruoho typedef struct acpi_hest_ia_error_bank
    504       1.1  jruoho {
    505       1.1  jruoho     UINT8                   BankNumber;
    506       1.1  jruoho     UINT8                   ClearStatusOnInit;
    507       1.1  jruoho     UINT8                   StatusFormat;
    508       1.1  jruoho     UINT8                   Reserved;
    509       1.1  jruoho     UINT32                  ControlRegister;
    510       1.1  jruoho     UINT64                  ControlData;
    511       1.1  jruoho     UINT32                  StatusRegister;
    512       1.1  jruoho     UINT32                  AddressRegister;
    513       1.1  jruoho     UINT32                  MiscRegister;
    514       1.1  jruoho 
    515       1.1  jruoho } ACPI_HEST_IA_ERROR_BANK;
    516       1.1  jruoho 
    517       1.1  jruoho 
    518       1.1  jruoho /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
    519       1.1  jruoho 
    520       1.1  jruoho typedef struct acpi_hest_aer_common
    521       1.1  jruoho {
    522       1.1  jruoho     UINT16                  Reserved1;
    523       1.1  jruoho     UINT8                   Flags;
    524       1.1  jruoho     UINT8                   Enabled;
    525       1.1  jruoho     UINT32                  RecordsToPreallocate;
    526       1.1  jruoho     UINT32                  MaxSectionsPerRecord;
    527  1.3.10.1    yamt     UINT32                  Bus;                    /* Bus and Segment numbers */
    528       1.1  jruoho     UINT16                  Device;
    529       1.1  jruoho     UINT16                  Function;
    530       1.1  jruoho     UINT16                  DeviceControl;
    531       1.1  jruoho     UINT16                  Reserved2;
    532       1.1  jruoho     UINT32                  UncorrectableMask;
    533       1.1  jruoho     UINT32                  UncorrectableSeverity;
    534       1.1  jruoho     UINT32                  CorrectableMask;
    535       1.1  jruoho     UINT32                  AdvancedCapabilities;
    536       1.1  jruoho 
    537       1.1  jruoho } ACPI_HEST_AER_COMMON;
    538       1.1  jruoho 
    539       1.1  jruoho /* Masks for HEST Flags fields */
    540       1.1  jruoho 
    541       1.1  jruoho #define ACPI_HEST_FIRMWARE_FIRST        (1)
    542       1.1  jruoho #define ACPI_HEST_GLOBAL                (1<<1)
    543       1.1  jruoho 
    544  1.3.10.1    yamt /*
    545  1.3.10.1    yamt  * Macros to access the bus/segment numbers in Bus field above:
    546  1.3.10.1    yamt  *  Bus number is encoded in bits 7:0
    547  1.3.10.1    yamt  *  Segment number is encoded in bits 23:8
    548  1.3.10.1    yamt  */
    549  1.3.10.1    yamt #define ACPI_HEST_BUS(Bus)              ((Bus) & 0xFF)
    550  1.3.10.1    yamt #define ACPI_HEST_SEGMENT(Bus)          (((Bus) >> 8) & 0xFFFF)
    551  1.3.10.1    yamt 
    552       1.1  jruoho 
    553       1.1  jruoho /* Hardware Error Notification */
    554       1.1  jruoho 
    555       1.1  jruoho typedef struct acpi_hest_notify
    556       1.1  jruoho {
    557       1.1  jruoho     UINT8                   Type;
    558       1.1  jruoho     UINT8                   Length;
    559       1.1  jruoho     UINT16                  ConfigWriteEnable;
    560       1.1  jruoho     UINT32                  PollInterval;
    561       1.1  jruoho     UINT32                  Vector;
    562       1.1  jruoho     UINT32                  PollingThresholdValue;
    563       1.1  jruoho     UINT32                  PollingThresholdWindow;
    564       1.1  jruoho     UINT32                  ErrorThresholdValue;
    565       1.1  jruoho     UINT32                  ErrorThresholdWindow;
    566       1.1  jruoho 
    567       1.1  jruoho } ACPI_HEST_NOTIFY;
    568       1.1  jruoho 
    569       1.1  jruoho /* Values for Notify Type field above */
    570       1.1  jruoho 
    571       1.1  jruoho enum AcpiHestNotifyTypes
    572       1.1  jruoho {
    573       1.1  jruoho     ACPI_HEST_NOTIFY_POLLED     = 0,
    574       1.1  jruoho     ACPI_HEST_NOTIFY_EXTERNAL   = 1,
    575       1.1  jruoho     ACPI_HEST_NOTIFY_LOCAL      = 2,
    576       1.1  jruoho     ACPI_HEST_NOTIFY_SCI        = 3,
    577       1.1  jruoho     ACPI_HEST_NOTIFY_NMI        = 4,
    578  1.3.10.1    yamt     ACPI_HEST_NOTIFY_CMCI       = 5,    /* ACPI 5.0 */
    579  1.3.10.1    yamt     ACPI_HEST_NOTIFY_MCE        = 6,    /* ACPI 5.0 */
    580  1.3.10.1    yamt     ACPI_HEST_NOTIFY_RESERVED   = 7     /* 7 and greater are reserved */
    581       1.1  jruoho };
    582       1.1  jruoho 
    583       1.1  jruoho /* Values for ConfigWriteEnable bitfield above */
    584       1.1  jruoho 
    585       1.1  jruoho #define ACPI_HEST_TYPE                  (1)
    586       1.1  jruoho #define ACPI_HEST_POLL_INTERVAL         (1<<1)
    587       1.1  jruoho #define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
    588       1.1  jruoho #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
    589       1.1  jruoho #define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
    590       1.1  jruoho #define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
    591       1.1  jruoho 
    592       1.1  jruoho 
    593       1.1  jruoho /*
    594       1.1  jruoho  * HEST subtables
    595       1.1  jruoho  */
    596       1.1  jruoho 
    597       1.1  jruoho /* 0: IA32 Machine Check Exception */
    598       1.1  jruoho 
    599       1.1  jruoho typedef struct acpi_hest_ia_machine_check
    600       1.1  jruoho {
    601       1.1  jruoho     ACPI_HEST_HEADER        Header;
    602       1.1  jruoho     UINT16                  Reserved1;
    603       1.1  jruoho     UINT8                   Flags;
    604       1.1  jruoho     UINT8                   Enabled;
    605       1.1  jruoho     UINT32                  RecordsToPreallocate;
    606       1.1  jruoho     UINT32                  MaxSectionsPerRecord;
    607       1.1  jruoho     UINT64                  GlobalCapabilityData;
    608       1.1  jruoho     UINT64                  GlobalControlData;
    609       1.1  jruoho     UINT8                   NumHardwareBanks;
    610       1.1  jruoho     UINT8                   Reserved3[7];
    611       1.1  jruoho 
    612       1.1  jruoho } ACPI_HEST_IA_MACHINE_CHECK;
    613       1.1  jruoho 
    614       1.1  jruoho 
    615       1.1  jruoho /* 1: IA32 Corrected Machine Check */
    616       1.1  jruoho 
    617       1.1  jruoho typedef struct acpi_hest_ia_corrected
    618       1.1  jruoho {
    619       1.1  jruoho     ACPI_HEST_HEADER        Header;
    620       1.1  jruoho     UINT16                  Reserved1;
    621       1.1  jruoho     UINT8                   Flags;
    622       1.1  jruoho     UINT8                   Enabled;
    623       1.1  jruoho     UINT32                  RecordsToPreallocate;
    624       1.1  jruoho     UINT32                  MaxSectionsPerRecord;
    625       1.1  jruoho     ACPI_HEST_NOTIFY        Notify;
    626       1.1  jruoho     UINT8                   NumHardwareBanks;
    627       1.1  jruoho     UINT8                   Reserved2[3];
    628       1.1  jruoho 
    629       1.1  jruoho } ACPI_HEST_IA_CORRECTED;
    630       1.1  jruoho 
    631       1.1  jruoho 
    632       1.1  jruoho /* 2: IA32 Non-Maskable Interrupt */
    633       1.1  jruoho 
    634       1.1  jruoho typedef struct acpi_hest_ia_nmi
    635       1.1  jruoho {
    636       1.1  jruoho     ACPI_HEST_HEADER        Header;
    637       1.1  jruoho     UINT32                  Reserved;
    638       1.1  jruoho     UINT32                  RecordsToPreallocate;
    639       1.1  jruoho     UINT32                  MaxSectionsPerRecord;
    640       1.1  jruoho     UINT32                  MaxRawDataLength;
    641       1.1  jruoho 
    642       1.1  jruoho } ACPI_HEST_IA_NMI;
    643       1.1  jruoho 
    644       1.1  jruoho 
    645       1.1  jruoho /* 3,4,5: Not used */
    646       1.1  jruoho 
    647       1.1  jruoho /* 6: PCI Express Root Port AER */
    648       1.1  jruoho 
    649       1.1  jruoho typedef struct acpi_hest_aer_root
    650       1.1  jruoho {
    651       1.1  jruoho     ACPI_HEST_HEADER        Header;
    652       1.1  jruoho     ACPI_HEST_AER_COMMON    Aer;
    653       1.1  jruoho     UINT32                  RootErrorCommand;
    654       1.1  jruoho 
    655       1.1  jruoho } ACPI_HEST_AER_ROOT;
    656       1.1  jruoho 
    657       1.1  jruoho 
    658       1.1  jruoho /* 7: PCI Express AER (AER Endpoint) */
    659       1.1  jruoho 
    660       1.1  jruoho typedef struct acpi_hest_aer
    661       1.1  jruoho {
    662       1.1  jruoho     ACPI_HEST_HEADER        Header;
    663       1.1  jruoho     ACPI_HEST_AER_COMMON    Aer;
    664       1.1  jruoho 
    665       1.1  jruoho } ACPI_HEST_AER;
    666       1.1  jruoho 
    667       1.1  jruoho 
    668       1.1  jruoho /* 8: PCI Express/PCI-X Bridge AER */
    669       1.1  jruoho 
    670       1.1  jruoho typedef struct acpi_hest_aer_bridge
    671       1.1  jruoho {
    672       1.1  jruoho     ACPI_HEST_HEADER        Header;
    673       1.1  jruoho     ACPI_HEST_AER_COMMON    Aer;
    674       1.1  jruoho     UINT32                  UncorrectableMask2;
    675       1.1  jruoho     UINT32                  UncorrectableSeverity2;
    676       1.1  jruoho     UINT32                  AdvancedCapabilities2;
    677       1.1  jruoho 
    678       1.1  jruoho } ACPI_HEST_AER_BRIDGE;
    679       1.1  jruoho 
    680       1.1  jruoho 
    681       1.1  jruoho /* 9: Generic Hardware Error Source */
    682       1.1  jruoho 
    683       1.1  jruoho typedef struct acpi_hest_generic
    684       1.1  jruoho {
    685       1.1  jruoho     ACPI_HEST_HEADER        Header;
    686       1.1  jruoho     UINT16                  RelatedSourceId;
    687       1.1  jruoho     UINT8                   Reserved;
    688       1.1  jruoho     UINT8                   Enabled;
    689       1.1  jruoho     UINT32                  RecordsToPreallocate;
    690       1.1  jruoho     UINT32                  MaxSectionsPerRecord;
    691       1.1  jruoho     UINT32                  MaxRawDataLength;
    692       1.1  jruoho     ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
    693       1.1  jruoho     ACPI_HEST_NOTIFY        Notify;
    694       1.1  jruoho     UINT32                  ErrorBlockLength;
    695       1.1  jruoho 
    696       1.1  jruoho } ACPI_HEST_GENERIC;
    697       1.1  jruoho 
    698       1.1  jruoho 
    699       1.1  jruoho /* Generic Error Status block */
    700       1.1  jruoho 
    701       1.1  jruoho typedef struct acpi_hest_generic_status
    702       1.1  jruoho {
    703       1.1  jruoho     UINT32                  BlockStatus;
    704       1.1  jruoho     UINT32                  RawDataOffset;
    705       1.1  jruoho     UINT32                  RawDataLength;
    706       1.1  jruoho     UINT32                  DataLength;
    707       1.1  jruoho     UINT32                  ErrorSeverity;
    708       1.1  jruoho 
    709       1.1  jruoho } ACPI_HEST_GENERIC_STATUS;
    710       1.1  jruoho 
    711       1.1  jruoho /* Values for BlockStatus flags above */
    712       1.1  jruoho 
    713       1.1  jruoho #define ACPI_HEST_UNCORRECTABLE             (1)
    714       1.1  jruoho #define ACPI_HEST_CORRECTABLE               (1<<1)
    715       1.1  jruoho #define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
    716       1.1  jruoho #define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
    717       1.1  jruoho #define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
    718       1.1  jruoho 
    719       1.1  jruoho 
    720       1.1  jruoho /* Generic Error Data entry */
    721       1.1  jruoho 
    722       1.1  jruoho typedef struct acpi_hest_generic_data
    723       1.1  jruoho {
    724       1.1  jruoho     UINT8                   SectionType[16];
    725       1.1  jruoho     UINT32                  ErrorSeverity;
    726       1.1  jruoho     UINT16                  Revision;
    727       1.1  jruoho     UINT8                   ValidationBits;
    728       1.1  jruoho     UINT8                   Flags;
    729       1.1  jruoho     UINT32                  ErrorDataLength;
    730       1.1  jruoho     UINT8                   FruId[16];
    731       1.1  jruoho     UINT8                   FruText[20];
    732       1.1  jruoho 
    733       1.1  jruoho } ACPI_HEST_GENERIC_DATA;
    734       1.1  jruoho 
    735       1.1  jruoho 
    736       1.1  jruoho /*******************************************************************************
    737       1.1  jruoho  *
    738       1.1  jruoho  * MADT - Multiple APIC Description Table
    739       1.1  jruoho  *        Version 3
    740       1.1  jruoho  *
    741       1.1  jruoho  ******************************************************************************/
    742       1.1  jruoho 
    743       1.1  jruoho typedef struct acpi_table_madt
    744       1.1  jruoho {
    745       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
    746       1.1  jruoho     UINT32                  Address;            /* Physical address of local APIC */
    747       1.1  jruoho     UINT32                  Flags;
    748       1.1  jruoho 
    749       1.1  jruoho } ACPI_TABLE_MADT;
    750       1.1  jruoho 
    751       1.1  jruoho /* Masks for Flags field above */
    752       1.1  jruoho 
    753       1.1  jruoho #define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
    754       1.1  jruoho 
    755       1.1  jruoho /* Values for PCATCompat flag */
    756       1.1  jruoho 
    757       1.1  jruoho #define ACPI_MADT_DUAL_PIC          0
    758       1.1  jruoho #define ACPI_MADT_MULTIPLE_APIC     1
    759       1.1  jruoho 
    760       1.1  jruoho 
    761       1.1  jruoho /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
    762       1.1  jruoho 
    763       1.1  jruoho enum AcpiMadtType
    764       1.1  jruoho {
    765       1.1  jruoho     ACPI_MADT_TYPE_LOCAL_APIC           = 0,
    766       1.1  jruoho     ACPI_MADT_TYPE_IO_APIC              = 1,
    767       1.1  jruoho     ACPI_MADT_TYPE_INTERRUPT_OVERRIDE   = 2,
    768       1.1  jruoho     ACPI_MADT_TYPE_NMI_SOURCE           = 3,
    769       1.1  jruoho     ACPI_MADT_TYPE_LOCAL_APIC_NMI       = 4,
    770       1.1  jruoho     ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE  = 5,
    771       1.1  jruoho     ACPI_MADT_TYPE_IO_SAPIC             = 6,
    772       1.1  jruoho     ACPI_MADT_TYPE_LOCAL_SAPIC          = 7,
    773       1.1  jruoho     ACPI_MADT_TYPE_INTERRUPT_SOURCE     = 8,
    774       1.1  jruoho     ACPI_MADT_TYPE_LOCAL_X2APIC         = 9,
    775       1.1  jruoho     ACPI_MADT_TYPE_LOCAL_X2APIC_NMI     = 10,
    776  1.3.10.1    yamt     ACPI_MADT_TYPE_GENERIC_INTERRUPT    = 11,
    777  1.3.10.1    yamt     ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR  = 12,
    778  1.3.10.1    yamt     ACPI_MADT_TYPE_RESERVED             = 13    /* 13 and greater are reserved */
    779       1.1  jruoho };
    780       1.1  jruoho 
    781       1.1  jruoho 
    782       1.1  jruoho /*
    783       1.1  jruoho  * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
    784       1.1  jruoho  */
    785       1.1  jruoho 
    786       1.1  jruoho /* 0: Processor Local APIC */
    787       1.1  jruoho 
    788       1.1  jruoho typedef struct acpi_madt_local_apic
    789       1.1  jruoho {
    790       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    791       1.1  jruoho     UINT8                   ProcessorId;        /* ACPI processor id */
    792       1.1  jruoho     UINT8                   Id;                 /* Processor's local APIC id */
    793       1.1  jruoho     UINT32                  LapicFlags;
    794       1.1  jruoho 
    795       1.1  jruoho } ACPI_MADT_LOCAL_APIC;
    796       1.1  jruoho 
    797       1.1  jruoho 
    798       1.1  jruoho /* 1: IO APIC */
    799       1.1  jruoho 
    800       1.1  jruoho typedef struct acpi_madt_io_apic
    801       1.1  jruoho {
    802       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    803       1.1  jruoho     UINT8                   Id;                 /* I/O APIC ID */
    804       1.1  jruoho     UINT8                   Reserved;           /* Reserved - must be zero */
    805       1.1  jruoho     UINT32                  Address;            /* APIC physical address */
    806       1.1  jruoho     UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
    807       1.1  jruoho 
    808       1.1  jruoho } ACPI_MADT_IO_APIC;
    809       1.1  jruoho 
    810       1.1  jruoho 
    811       1.1  jruoho /* 2: Interrupt Override */
    812       1.1  jruoho 
    813       1.1  jruoho typedef struct acpi_madt_interrupt_override
    814       1.1  jruoho {
    815       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    816       1.1  jruoho     UINT8                   Bus;                /* 0 - ISA */
    817       1.1  jruoho     UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
    818       1.1  jruoho     UINT32                  GlobalIrq;          /* Global system interrupt */
    819       1.1  jruoho     UINT16                  IntiFlags;
    820       1.1  jruoho 
    821       1.1  jruoho } ACPI_MADT_INTERRUPT_OVERRIDE;
    822       1.1  jruoho 
    823       1.1  jruoho 
    824       1.1  jruoho /* 3: NMI Source */
    825       1.1  jruoho 
    826       1.1  jruoho typedef struct acpi_madt_nmi_source
    827       1.1  jruoho {
    828       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    829       1.1  jruoho     UINT16                  IntiFlags;
    830       1.1  jruoho     UINT32                  GlobalIrq;          /* Global system interrupt */
    831       1.1  jruoho 
    832       1.1  jruoho } ACPI_MADT_NMI_SOURCE;
    833       1.1  jruoho 
    834       1.1  jruoho 
    835       1.1  jruoho /* 4: Local APIC NMI */
    836       1.1  jruoho 
    837       1.1  jruoho typedef struct acpi_madt_local_apic_nmi
    838       1.1  jruoho {
    839       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    840       1.1  jruoho     UINT8                   ProcessorId;        /* ACPI processor id */
    841       1.1  jruoho     UINT16                  IntiFlags;
    842       1.1  jruoho     UINT8                   Lint;               /* LINTn to which NMI is connected */
    843       1.1  jruoho 
    844       1.1  jruoho } ACPI_MADT_LOCAL_APIC_NMI;
    845       1.1  jruoho 
    846       1.1  jruoho 
    847       1.1  jruoho /* 5: Address Override */
    848       1.1  jruoho 
    849       1.1  jruoho typedef struct acpi_madt_local_apic_override
    850       1.1  jruoho {
    851       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    852       1.1  jruoho     UINT16                  Reserved;           /* Reserved, must be zero */
    853       1.1  jruoho     UINT64                  Address;            /* APIC physical address */
    854       1.1  jruoho 
    855       1.1  jruoho } ACPI_MADT_LOCAL_APIC_OVERRIDE;
    856       1.1  jruoho 
    857       1.1  jruoho 
    858       1.1  jruoho /* 6: I/O Sapic */
    859       1.1  jruoho 
    860       1.1  jruoho typedef struct acpi_madt_io_sapic
    861       1.1  jruoho {
    862       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    863       1.1  jruoho     UINT8                   Id;                 /* I/O SAPIC ID */
    864       1.1  jruoho     UINT8                   Reserved;           /* Reserved, must be zero */
    865       1.1  jruoho     UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
    866       1.1  jruoho     UINT64                  Address;            /* SAPIC physical address */
    867       1.1  jruoho 
    868       1.1  jruoho } ACPI_MADT_IO_SAPIC;
    869       1.1  jruoho 
    870       1.1  jruoho 
    871       1.1  jruoho /* 7: Local Sapic */
    872       1.1  jruoho 
    873       1.1  jruoho typedef struct acpi_madt_local_sapic
    874       1.1  jruoho {
    875       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    876       1.1  jruoho     UINT8                   ProcessorId;        /* ACPI processor id */
    877       1.1  jruoho     UINT8                   Id;                 /* SAPIC ID */
    878       1.1  jruoho     UINT8                   Eid;                /* SAPIC EID */
    879       1.1  jruoho     UINT8                   Reserved[3];        /* Reserved, must be zero */
    880       1.1  jruoho     UINT32                  LapicFlags;
    881       1.1  jruoho     UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
    882       1.1  jruoho     char                    UidString[1];       /* String UID  - ACPI 3.0 */
    883       1.1  jruoho 
    884       1.1  jruoho } ACPI_MADT_LOCAL_SAPIC;
    885       1.1  jruoho 
    886       1.1  jruoho 
    887       1.1  jruoho /* 8: Platform Interrupt Source */
    888       1.1  jruoho 
    889       1.1  jruoho typedef struct acpi_madt_interrupt_source
    890       1.1  jruoho {
    891       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    892       1.1  jruoho     UINT16                  IntiFlags;
    893       1.1  jruoho     UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
    894       1.1  jruoho     UINT8                   Id;                 /* Processor ID */
    895       1.1  jruoho     UINT8                   Eid;                /* Processor EID */
    896       1.1  jruoho     UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
    897       1.1  jruoho     UINT32                  GlobalIrq;          /* Global system interrupt */
    898       1.1  jruoho     UINT32                  Flags;              /* Interrupt Source Flags */
    899       1.1  jruoho 
    900       1.1  jruoho } ACPI_MADT_INTERRUPT_SOURCE;
    901       1.1  jruoho 
    902       1.1  jruoho /* Masks for Flags field above */
    903       1.1  jruoho 
    904       1.1  jruoho #define ACPI_MADT_CPEI_OVERRIDE     (1)
    905       1.1  jruoho 
    906       1.1  jruoho 
    907       1.1  jruoho /* 9: Processor Local X2APIC (ACPI 4.0) */
    908       1.1  jruoho 
    909       1.1  jruoho typedef struct acpi_madt_local_x2apic
    910       1.1  jruoho {
    911       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    912       1.1  jruoho     UINT16                  Reserved;           /* Reserved - must be zero */
    913       1.1  jruoho     UINT32                  LocalApicId;        /* Processor x2APIC ID  */
    914       1.1  jruoho     UINT32                  LapicFlags;
    915       1.1  jruoho     UINT32                  Uid;                /* ACPI processor UID */
    916       1.1  jruoho 
    917       1.1  jruoho } ACPI_MADT_LOCAL_X2APIC;
    918       1.1  jruoho 
    919       1.1  jruoho 
    920       1.1  jruoho /* 10: Local X2APIC NMI (ACPI 4.0) */
    921       1.1  jruoho 
    922       1.1  jruoho typedef struct acpi_madt_local_x2apic_nmi
    923       1.1  jruoho {
    924       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
    925       1.1  jruoho     UINT16                  IntiFlags;
    926       1.1  jruoho     UINT32                  Uid;                /* ACPI processor UID */
    927       1.1  jruoho     UINT8                   Lint;               /* LINTn to which NMI is connected */
    928       1.1  jruoho     UINT8                   Reserved[3];        /* Reserved - must be zero */
    929       1.1  jruoho 
    930       1.1  jruoho } ACPI_MADT_LOCAL_X2APIC_NMI;
    931       1.1  jruoho 
    932       1.1  jruoho 
    933  1.3.10.1    yamt /* 11: Generic Interrupt (ACPI 5.0) */
    934  1.3.10.1    yamt 
    935  1.3.10.1    yamt typedef struct acpi_madt_generic_interrupt
    936  1.3.10.1    yamt {
    937  1.3.10.1    yamt     ACPI_SUBTABLE_HEADER    Header;
    938  1.3.10.1    yamt     UINT16                  Reserved;           /* Reserved - must be zero */
    939  1.3.10.1    yamt     UINT32                  GicId;
    940  1.3.10.1    yamt     UINT32                  Uid;
    941  1.3.10.1    yamt     UINT32                  Flags;
    942  1.3.10.1    yamt     UINT32                  ParkingVersion;
    943  1.3.10.1    yamt     UINT32                  PerformanceInterrupt;
    944  1.3.10.1    yamt     UINT64                  ParkedAddress;
    945  1.3.10.1    yamt     UINT64                  BaseAddress;
    946  1.3.10.1    yamt 
    947  1.3.10.1    yamt } ACPI_MADT_GENERIC_INTERRUPT;
    948  1.3.10.1    yamt 
    949  1.3.10.1    yamt 
    950  1.3.10.1    yamt /* 12: Generic Distributor (ACPI 5.0) */
    951  1.3.10.1    yamt 
    952  1.3.10.1    yamt typedef struct acpi_madt_generic_distributor
    953  1.3.10.1    yamt {
    954  1.3.10.1    yamt     ACPI_SUBTABLE_HEADER    Header;
    955  1.3.10.1    yamt     UINT16                  Reserved;           /* Reserved - must be zero */
    956  1.3.10.1    yamt     UINT32                  GicId;
    957  1.3.10.1    yamt     UINT64                  BaseAddress;
    958  1.3.10.1    yamt     UINT32                  GlobalIrqBase;
    959  1.3.10.1    yamt     UINT32                  Reserved2;          /* Reserved - must be zero */
    960  1.3.10.1    yamt 
    961  1.3.10.1    yamt } ACPI_MADT_GENERIC_DISTRIBUTOR;
    962  1.3.10.1    yamt 
    963  1.3.10.1    yamt 
    964       1.1  jruoho /*
    965       1.1  jruoho  * Common flags fields for MADT subtables
    966       1.1  jruoho  */
    967       1.1  jruoho 
    968  1.3.10.1    yamt /* MADT Local APIC flags (LapicFlags) and GIC flags */
    969       1.1  jruoho 
    970       1.1  jruoho #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
    971       1.1  jruoho 
    972       1.1  jruoho /* MADT MPS INTI flags (IntiFlags) */
    973       1.1  jruoho 
    974       1.1  jruoho #define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
    975       1.1  jruoho #define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
    976       1.1  jruoho 
    977       1.1  jruoho /* Values for MPS INTI flags */
    978       1.1  jruoho 
    979       1.1  jruoho #define ACPI_MADT_POLARITY_CONFORMS       0
    980       1.1  jruoho #define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
    981       1.1  jruoho #define ACPI_MADT_POLARITY_RESERVED       2
    982       1.1  jruoho #define ACPI_MADT_POLARITY_ACTIVE_LOW     3
    983       1.1  jruoho 
    984       1.1  jruoho #define ACPI_MADT_TRIGGER_CONFORMS        (0)
    985       1.1  jruoho #define ACPI_MADT_TRIGGER_EDGE            (1<<2)
    986       1.1  jruoho #define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
    987       1.1  jruoho #define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
    988       1.1  jruoho 
    989       1.1  jruoho 
    990       1.1  jruoho /*******************************************************************************
    991       1.1  jruoho  *
    992       1.1  jruoho  * MSCT - Maximum System Characteristics Table (ACPI 4.0)
    993       1.1  jruoho  *        Version 1
    994       1.1  jruoho  *
    995       1.1  jruoho  ******************************************************************************/
    996       1.1  jruoho 
    997       1.1  jruoho typedef struct acpi_table_msct
    998       1.1  jruoho {
    999       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
   1000       1.1  jruoho     UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
   1001       1.1  jruoho     UINT32                  MaxProximityDomains;/* Max number of proximity domains */
   1002       1.1  jruoho     UINT32                  MaxClockDomains;    /* Max number of clock domains */
   1003       1.1  jruoho     UINT64                  MaxAddress;         /* Max physical address in system */
   1004       1.1  jruoho 
   1005       1.1  jruoho } ACPI_TABLE_MSCT;
   1006       1.1  jruoho 
   1007       1.1  jruoho 
   1008       1.1  jruoho /* Subtable - Maximum Proximity Domain Information. Version 1 */
   1009       1.1  jruoho 
   1010       1.1  jruoho typedef struct acpi_msct_proximity
   1011       1.1  jruoho {
   1012       1.1  jruoho     UINT8                   Revision;
   1013       1.1  jruoho     UINT8                   Length;
   1014       1.1  jruoho     UINT32                  RangeStart;         /* Start of domain range */
   1015       1.1  jruoho     UINT32                  RangeEnd;           /* End of domain range */
   1016       1.1  jruoho     UINT32                  ProcessorCapacity;
   1017       1.1  jruoho     UINT64                  MemoryCapacity;     /* In bytes */
   1018       1.1  jruoho 
   1019       1.1  jruoho } ACPI_MSCT_PROXIMITY;
   1020       1.1  jruoho 
   1021       1.1  jruoho 
   1022       1.1  jruoho /*******************************************************************************
   1023       1.1  jruoho  *
   1024       1.1  jruoho  * SBST - Smart Battery Specification Table
   1025       1.1  jruoho  *        Version 1
   1026       1.1  jruoho  *
   1027       1.1  jruoho  ******************************************************************************/
   1028       1.1  jruoho 
   1029       1.1  jruoho typedef struct acpi_table_sbst
   1030       1.1  jruoho {
   1031       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
   1032       1.1  jruoho     UINT32                  WarningLevel;
   1033       1.1  jruoho     UINT32                  LowLevel;
   1034       1.1  jruoho     UINT32                  CriticalLevel;
   1035       1.1  jruoho 
   1036       1.1  jruoho } ACPI_TABLE_SBST;
   1037       1.1  jruoho 
   1038       1.1  jruoho 
   1039       1.1  jruoho /*******************************************************************************
   1040       1.1  jruoho  *
   1041       1.1  jruoho  * SLIT - System Locality Distance Information Table
   1042       1.1  jruoho  *        Version 1
   1043       1.1  jruoho  *
   1044       1.1  jruoho  ******************************************************************************/
   1045       1.1  jruoho 
   1046       1.1  jruoho typedef struct acpi_table_slit
   1047       1.1  jruoho {
   1048       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
   1049       1.1  jruoho     UINT64                  LocalityCount;
   1050       1.1  jruoho     UINT8                   Entry[1];           /* Real size = localities^2 */
   1051       1.1  jruoho 
   1052       1.1  jruoho } ACPI_TABLE_SLIT;
   1053       1.1  jruoho 
   1054       1.1  jruoho 
   1055       1.1  jruoho /*******************************************************************************
   1056       1.1  jruoho  *
   1057       1.1  jruoho  * SRAT - System Resource Affinity Table
   1058       1.1  jruoho  *        Version 3
   1059       1.1  jruoho  *
   1060       1.1  jruoho  ******************************************************************************/
   1061       1.1  jruoho 
   1062       1.1  jruoho typedef struct acpi_table_srat
   1063       1.1  jruoho {
   1064       1.1  jruoho     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
   1065       1.1  jruoho     UINT32                  TableRevision;      /* Must be value '1' */
   1066       1.1  jruoho     UINT64                  Reserved;           /* Reserved, must be zero */
   1067       1.1  jruoho 
   1068       1.1  jruoho } ACPI_TABLE_SRAT;
   1069       1.1  jruoho 
   1070       1.1  jruoho /* Values for subtable type in ACPI_SUBTABLE_HEADER */
   1071       1.1  jruoho 
   1072       1.1  jruoho enum AcpiSratType
   1073       1.1  jruoho {
   1074       1.1  jruoho     ACPI_SRAT_TYPE_CPU_AFFINITY         = 0,
   1075       1.1  jruoho     ACPI_SRAT_TYPE_MEMORY_AFFINITY      = 1,
   1076       1.1  jruoho     ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY  = 2,
   1077       1.1  jruoho     ACPI_SRAT_TYPE_RESERVED             = 3     /* 3 and greater are reserved */
   1078       1.1  jruoho };
   1079       1.1  jruoho 
   1080       1.1  jruoho /*
   1081       1.1  jruoho  * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
   1082       1.1  jruoho  */
   1083       1.1  jruoho 
   1084       1.1  jruoho /* 0: Processor Local APIC/SAPIC Affinity */
   1085       1.1  jruoho 
   1086       1.1  jruoho typedef struct acpi_srat_cpu_affinity
   1087       1.1  jruoho {
   1088       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
   1089       1.1  jruoho     UINT8                   ProximityDomainLo;
   1090       1.1  jruoho     UINT8                   ApicId;
   1091       1.1  jruoho     UINT32                  Flags;
   1092       1.1  jruoho     UINT8                   LocalSapicEid;
   1093       1.1  jruoho     UINT8                   ProximityDomainHi[3];
   1094       1.2  jruoho     UINT32                  ClockDomain;
   1095       1.1  jruoho 
   1096       1.1  jruoho } ACPI_SRAT_CPU_AFFINITY;
   1097       1.1  jruoho 
   1098       1.1  jruoho /* Flags */
   1099       1.1  jruoho 
   1100       1.1  jruoho #define ACPI_SRAT_CPU_USE_AFFINITY  (1)         /* 00: Use affinity structure */
   1101       1.1  jruoho 
   1102       1.1  jruoho 
   1103       1.1  jruoho /* 1: Memory Affinity */
   1104       1.1  jruoho 
   1105       1.1  jruoho typedef struct acpi_srat_mem_affinity
   1106       1.1  jruoho {
   1107       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
   1108       1.1  jruoho     UINT32                  ProximityDomain;
   1109       1.1  jruoho     UINT16                  Reserved;           /* Reserved, must be zero */
   1110       1.1  jruoho     UINT64                  BaseAddress;
   1111       1.1  jruoho     UINT64                  Length;
   1112       1.1  jruoho     UINT32                  Reserved1;
   1113       1.1  jruoho     UINT32                  Flags;
   1114       1.1  jruoho     UINT64                  Reserved2;          /* Reserved, must be zero */
   1115       1.1  jruoho 
   1116       1.1  jruoho } ACPI_SRAT_MEM_AFFINITY;
   1117       1.1  jruoho 
   1118       1.1  jruoho /* Flags */
   1119       1.1  jruoho 
   1120       1.1  jruoho #define ACPI_SRAT_MEM_ENABLED       (1)         /* 00: Use affinity structure */
   1121       1.1  jruoho #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)      /* 01: Memory region is hot pluggable */
   1122       1.1  jruoho #define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)      /* 02: Memory region is non-volatile */
   1123       1.1  jruoho 
   1124       1.1  jruoho 
   1125       1.1  jruoho /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
   1126       1.1  jruoho 
   1127       1.1  jruoho typedef struct acpi_srat_x2apic_cpu_affinity
   1128       1.1  jruoho {
   1129       1.1  jruoho     ACPI_SUBTABLE_HEADER    Header;
   1130       1.1  jruoho     UINT16                  Reserved;           /* Reserved, must be zero */
   1131       1.1  jruoho     UINT32                  ProximityDomain;
   1132       1.1  jruoho     UINT32                  ApicId;
   1133       1.1  jruoho     UINT32                  Flags;
   1134       1.1  jruoho     UINT32                  ClockDomain;
   1135       1.1  jruoho     UINT32                  Reserved2;
   1136       1.1  jruoho 
   1137       1.1  jruoho } ACPI_SRAT_X2APIC_CPU_AFFINITY;
   1138       1.1  jruoho 
   1139       1.1  jruoho /* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
   1140       1.1  jruoho 
   1141       1.1  jruoho #define ACPI_SRAT_CPU_ENABLED       (1)         /* 00: Use affinity structure */
   1142       1.1  jruoho 
   1143       1.1  jruoho 
   1144       1.1  jruoho /* Reset to default packing */
   1145       1.1  jruoho 
   1146       1.1  jruoho #pragma pack()
   1147       1.1  jruoho 
   1148       1.1  jruoho #endif /* __ACTBL1_H__ */
   1149