cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

actbl1.h (44254B)


      1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
      2/******************************************************************************
      3 *
      4 * Name: actbl1.h - Additional ACPI table definitions
      5 *
      6 * Copyright (C) 2000 - 2022, Intel Corp.
      7 *
      8 *****************************************************************************/
      9
     10#ifndef __ACTBL1_H__
     11#define __ACTBL1_H__
     12
     13/*******************************************************************************
     14 *
     15 * Additional ACPI Tables
     16 *
     17 * These tables are not consumed directly by the ACPICA subsystem, but are
     18 * included here to support device drivers and the AML disassembler.
     19 *
     20 ******************************************************************************/
     21
     22/*
     23 * Values for description table header signatures for tables defined in this
     24 * file. Useful because they make it more difficult to inadvertently type in
     25 * the wrong signature.
     26 */
     27#define ACPI_SIG_AEST           "AEST"	/* Arm Error Source Table */
     28#define ACPI_SIG_ASF            "ASF!"	/* Alert Standard Format table */
     29#define ACPI_SIG_BERT           "BERT"	/* Boot Error Record Table */
     30#define ACPI_SIG_BGRT           "BGRT"	/* Boot Graphics Resource Table */
     31#define ACPI_SIG_BOOT           "BOOT"	/* Simple Boot Flag Table */
     32#define ACPI_SIG_CEDT           "CEDT"	/* CXL Early Discovery Table */
     33#define ACPI_SIG_CPEP           "CPEP"	/* Corrected Platform Error Polling table */
     34#define ACPI_SIG_CSRT           "CSRT"	/* Core System Resource Table */
     35#define ACPI_SIG_DBG2           "DBG2"	/* Debug Port table type 2 */
     36#define ACPI_SIG_DBGP           "DBGP"	/* Debug Port table */
     37#define ACPI_SIG_DMAR           "DMAR"	/* DMA Remapping table */
     38#define ACPI_SIG_DRTM           "DRTM"	/* Dynamic Root of Trust for Measurement table */
     39#define ACPI_SIG_ECDT           "ECDT"	/* Embedded Controller Boot Resources Table */
     40#define ACPI_SIG_EINJ           "EINJ"	/* Error Injection table */
     41#define ACPI_SIG_ERST           "ERST"	/* Error Record Serialization Table */
     42#define ACPI_SIG_FPDT           "FPDT"	/* Firmware Performance Data Table */
     43#define ACPI_SIG_GTDT           "GTDT"	/* Generic Timer Description Table */
     44#define ACPI_SIG_HEST           "HEST"	/* Hardware Error Source Table */
     45#define ACPI_SIG_HMAT           "HMAT"	/* Heterogeneous Memory Attributes Table */
     46#define ACPI_SIG_HPET           "HPET"	/* High Precision Event Timer table */
     47#define ACPI_SIG_IBFT           "IBFT"	/* iSCSI Boot Firmware Table */
     48
     49#define ACPI_SIG_S3PT           "S3PT"	/* S3 Performance (sub)Table */
     50#define ACPI_SIG_PCCS           "PCC"	/* PCC Shared Memory Region */
     51
     52/* Reserved table signatures */
     53
     54#define ACPI_SIG_MATR           "MATR"	/* Memory Address Translation Table */
     55#define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
     56
     57/*
     58 * These tables have been seen in the field, but no definition has been found
     59 */
     60#ifdef ACPI_UNDEFINED_TABLES
     61#define ACPI_SIG_ATKG           "ATKG"
     62#define ACPI_SIG_GSCI           "GSCI"	/* GMCH SCI table */
     63#define ACPI_SIG_IEIT           "IEIT"
     64#endif
     65
     66/*
     67 * All tables must be byte-packed to match the ACPI specification, since
     68 * the tables are provided by the system BIOS.
     69 */
     70#pragma pack(1)
     71
     72/*
     73 * Note: C bitfields are not used for this reason:
     74 *
     75 * "Bitfields are great and easy to read, but unfortunately the C language
     76 * does not specify the layout of bitfields in memory, which means they are
     77 * essentially useless for dealing with packed data in on-disk formats or
     78 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
     79 * this decision was a design error in C. Ritchie could have picked an order
     80 * and stuck with it." Norman Ramsey.
     81 * See http://stackoverflow.com/a/1053662/41661
     82 */
     83
     84/*******************************************************************************
     85 *
     86 * Common subtable headers
     87 *
     88 ******************************************************************************/
     89
     90/* Generic subtable header (used in MADT, SRAT, etc.) */
     91
     92struct acpi_subtable_header {
     93	u8 type;
     94	u8 length;
     95};
     96
     97/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
     98
     99struct acpi_whea_header {
    100	u8 action;
    101	u8 instruction;
    102	u8 flags;
    103	u8 reserved;
    104	struct acpi_generic_address register_region;
    105	u64 value;		/* Value used with Read/Write register */
    106	u64 mask;		/* Bitmask required for this register instruction */
    107};
    108
    109/*******************************************************************************
    110 *
    111 * ASF - Alert Standard Format table (Signature "ASF!")
    112 *       Revision 0x10
    113 *
    114 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
    115 *
    116 ******************************************************************************/
    117
    118struct acpi_table_asf {
    119	struct acpi_table_header header;	/* Common ACPI table header */
    120};
    121
    122/* ASF subtable header */
    123
    124struct acpi_asf_header {
    125	u8 type;
    126	u8 reserved;
    127	u16 length;
    128};
    129
    130/* Values for Type field above */
    131
    132enum acpi_asf_type {
    133	ACPI_ASF_TYPE_INFO = 0,
    134	ACPI_ASF_TYPE_ALERT = 1,
    135	ACPI_ASF_TYPE_CONTROL = 2,
    136	ACPI_ASF_TYPE_BOOT = 3,
    137	ACPI_ASF_TYPE_ADDRESS = 4,
    138	ACPI_ASF_TYPE_RESERVED = 5
    139};
    140
    141/*
    142 * ASF subtables
    143 */
    144
    145/* 0: ASF Information */
    146
    147struct acpi_asf_info {
    148	struct acpi_asf_header header;
    149	u8 min_reset_value;
    150	u8 min_poll_interval;
    151	u16 system_id;
    152	u32 mfg_id;
    153	u8 flags;
    154	u8 reserved2[3];
    155};
    156
    157/* Masks for Flags field above */
    158
    159#define ACPI_ASF_SMBUS_PROTOCOLS    (1)
    160
    161/* 1: ASF Alerts */
    162
    163struct acpi_asf_alert {
    164	struct acpi_asf_header header;
    165	u8 assert_mask;
    166	u8 deassert_mask;
    167	u8 alerts;
    168	u8 data_length;
    169};
    170
    171struct acpi_asf_alert_data {
    172	u8 address;
    173	u8 command;
    174	u8 mask;
    175	u8 value;
    176	u8 sensor_type;
    177	u8 type;
    178	u8 offset;
    179	u8 source_type;
    180	u8 severity;
    181	u8 sensor_number;
    182	u8 entity;
    183	u8 instance;
    184};
    185
    186/* 2: ASF Remote Control */
    187
    188struct acpi_asf_remote {
    189	struct acpi_asf_header header;
    190	u8 controls;
    191	u8 data_length;
    192	u16 reserved2;
    193};
    194
    195struct acpi_asf_control_data {
    196	u8 function;
    197	u8 address;
    198	u8 command;
    199	u8 value;
    200};
    201
    202/* 3: ASF RMCP Boot Options */
    203
    204struct acpi_asf_rmcp {
    205	struct acpi_asf_header header;
    206	u8 capabilities[7];
    207	u8 completion_code;
    208	u32 enterprise_id;
    209	u8 command;
    210	u16 parameter;
    211	u16 boot_options;
    212	u16 oem_parameters;
    213};
    214
    215/* 4: ASF Address */
    216
    217struct acpi_asf_address {
    218	struct acpi_asf_header header;
    219	u8 eprom_address;
    220	u8 devices;
    221};
    222
    223/*******************************************************************************
    224 *
    225 * BERT - Boot Error Record Table (ACPI 4.0)
    226 *        Version 1
    227 *
    228 ******************************************************************************/
    229
    230struct acpi_table_bert {
    231	struct acpi_table_header header;	/* Common ACPI table header */
    232	u32 region_length;	/* Length of the boot error region */
    233	u64 address;		/* Physical address of the error region */
    234};
    235
    236/* Boot Error Region (not a subtable, pointed to by Address field above) */
    237
    238struct acpi_bert_region {
    239	u32 block_status;	/* Type of error information */
    240	u32 raw_data_offset;	/* Offset to raw error data */
    241	u32 raw_data_length;	/* Length of raw error data */
    242	u32 data_length;	/* Length of generic error data */
    243	u32 error_severity;	/* Severity code */
    244};
    245
    246/* Values for block_status flags above */
    247
    248#define ACPI_BERT_UNCORRECTABLE             (1)
    249#define ACPI_BERT_CORRECTABLE               (1<<1)
    250#define ACPI_BERT_MULTIPLE_UNCORRECTABLE    (1<<2)
    251#define ACPI_BERT_MULTIPLE_CORRECTABLE      (1<<3)
    252#define ACPI_BERT_ERROR_ENTRY_COUNT         (0xFF<<4)	/* 8 bits, error count */
    253
    254/* Values for error_severity above */
    255
    256enum acpi_bert_error_severity {
    257	ACPI_BERT_ERROR_CORRECTABLE = 0,
    258	ACPI_BERT_ERROR_FATAL = 1,
    259	ACPI_BERT_ERROR_CORRECTED = 2,
    260	ACPI_BERT_ERROR_NONE = 3,
    261	ACPI_BERT_ERROR_RESERVED = 4	/* 4 and greater are reserved */
    262};
    263
    264/*
    265 * Note: The generic error data that follows the error_severity field above
    266 * uses the struct acpi_hest_generic_data defined under the HEST table below
    267 */
    268
    269/*******************************************************************************
    270 *
    271 * BGRT - Boot Graphics Resource Table (ACPI 5.0)
    272 *        Version 1
    273 *
    274 ******************************************************************************/
    275
    276struct acpi_table_bgrt {
    277	struct acpi_table_header header;	/* Common ACPI table header */
    278	u16 version;
    279	u8 status;
    280	u8 image_type;
    281	u64 image_address;
    282	u32 image_offset_x;
    283	u32 image_offset_y;
    284};
    285
    286/* Flags for Status field above */
    287
    288#define ACPI_BGRT_DISPLAYED                 (1)
    289#define ACPI_BGRT_ORIENTATION_OFFSET        (3 << 1)
    290
    291/*******************************************************************************
    292 *
    293 * BOOT - Simple Boot Flag Table
    294 *        Version 1
    295 *
    296 * Conforms to the "Simple Boot Flag Specification", Version 2.1
    297 *
    298 ******************************************************************************/
    299
    300struct acpi_table_boot {
    301	struct acpi_table_header header;	/* Common ACPI table header */
    302	u8 cmos_index;		/* Index in CMOS RAM for the boot register */
    303	u8 reserved[3];
    304};
    305
    306/*******************************************************************************
    307 *
    308 * CEDT - CXL Early Discovery Table
    309 *        Version 1
    310 *
    311 * Conforms to the "CXL Early Discovery Table" (CXL 2.0)
    312 *
    313 ******************************************************************************/
    314
    315struct acpi_table_cedt {
    316	struct acpi_table_header header;	/* Common ACPI table header */
    317};
    318
    319/* CEDT subtable header (Performance Record Structure) */
    320
    321struct acpi_cedt_header {
    322	u8 type;
    323	u8 reserved;
    324	u16 length;
    325};
    326
    327/* Values for Type field above */
    328
    329enum acpi_cedt_type {
    330	ACPI_CEDT_TYPE_CHBS = 0,
    331	ACPI_CEDT_TYPE_CFMWS = 1,
    332	ACPI_CEDT_TYPE_RESERVED = 2,
    333};
    334
    335/* Values for version field above */
    336
    337#define ACPI_CEDT_CHBS_VERSION_CXL11    (0)
    338#define ACPI_CEDT_CHBS_VERSION_CXL20    (1)
    339
    340/* Values for length field above */
    341
    342#define ACPI_CEDT_CHBS_LENGTH_CXL11     (0x2000)
    343#define ACPI_CEDT_CHBS_LENGTH_CXL20     (0x10000)
    344
    345/*
    346 * CEDT subtables
    347 */
    348
    349/* 0: CXL Host Bridge Structure */
    350
    351struct acpi_cedt_chbs {
    352	struct acpi_cedt_header header;
    353	u32 uid;
    354	u32 cxl_version;
    355	u32 reserved;
    356	u64 base;
    357	u64 length;
    358};
    359
    360/* 1: CXL Fixed Memory Window Structure */
    361
    362struct acpi_cedt_cfmws {
    363	struct acpi_cedt_header header;
    364	u32 reserved1;
    365	u64 base_hpa;
    366	u64 window_size;
    367	u8 interleave_ways;
    368	u8 interleave_arithmetic;
    369	u16 reserved2;
    370	u32 granularity;
    371	u16 restrictions;
    372	u16 qtg_id;
    373	u32 interleave_targets[];
    374};
    375
    376struct acpi_cedt_cfmws_target_element {
    377	u32 interleave_target;
    378};
    379
    380/* Values for Interleave Arithmetic field above */
    381
    382#define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO   (0)
    383
    384/* Values for Restrictions field above */
    385
    386#define ACPI_CEDT_CFMWS_RESTRICT_TYPE2      (1)
    387#define ACPI_CEDT_CFMWS_RESTRICT_TYPE3      (1<<1)
    388#define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE   (1<<2)
    389#define ACPI_CEDT_CFMWS_RESTRICT_PMEM       (1<<3)
    390#define ACPI_CEDT_CFMWS_RESTRICT_FIXED      (1<<4)
    391
    392/*******************************************************************************
    393 *
    394 * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
    395 *        Version 1
    396 *
    397 ******************************************************************************/
    398
    399struct acpi_table_cpep {
    400	struct acpi_table_header header;	/* Common ACPI table header */
    401	u64 reserved;
    402};
    403
    404/* Subtable */
    405
    406struct acpi_cpep_polling {
    407	struct acpi_subtable_header header;
    408	u8 id;			/* Processor ID */
    409	u8 eid;			/* Processor EID */
    410	u32 interval;		/* Polling interval (msec) */
    411};
    412
    413/*******************************************************************************
    414 *
    415 * CSRT - Core System Resource Table
    416 *        Version 0
    417 *
    418 * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
    419 *
    420 ******************************************************************************/
    421
    422struct acpi_table_csrt {
    423	struct acpi_table_header header;	/* Common ACPI table header */
    424};
    425
    426/* Resource Group subtable */
    427
    428struct acpi_csrt_group {
    429	u32 length;
    430	u32 vendor_id;
    431	u32 subvendor_id;
    432	u16 device_id;
    433	u16 subdevice_id;
    434	u16 revision;
    435	u16 reserved;
    436	u32 shared_info_length;
    437
    438	/* Shared data immediately follows (Length = shared_info_length) */
    439};
    440
    441/* Shared Info subtable */
    442
    443struct acpi_csrt_shared_info {
    444	u16 major_version;
    445	u16 minor_version;
    446	u32 mmio_base_low;
    447	u32 mmio_base_high;
    448	u32 gsi_interrupt;
    449	u8 interrupt_polarity;
    450	u8 interrupt_mode;
    451	u8 num_channels;
    452	u8 dma_address_width;
    453	u16 base_request_line;
    454	u16 num_handshake_signals;
    455	u32 max_block_size;
    456
    457	/* Resource descriptors immediately follow (Length = Group length - shared_info_length) */
    458};
    459
    460/* Resource Descriptor subtable */
    461
    462struct acpi_csrt_descriptor {
    463	u32 length;
    464	u16 type;
    465	u16 subtype;
    466	u32 uid;
    467
    468	/* Resource-specific information immediately follows */
    469};
    470
    471/* Resource Types */
    472
    473#define ACPI_CSRT_TYPE_INTERRUPT    0x0001
    474#define ACPI_CSRT_TYPE_TIMER        0x0002
    475#define ACPI_CSRT_TYPE_DMA          0x0003
    476
    477/* Resource Subtypes */
    478
    479#define ACPI_CSRT_XRUPT_LINE        0x0000
    480#define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
    481#define ACPI_CSRT_TIMER             0x0000
    482#define ACPI_CSRT_DMA_CHANNEL       0x0000
    483#define ACPI_CSRT_DMA_CONTROLLER    0x0001
    484
    485/*******************************************************************************
    486 *
    487 * DBG2 - Debug Port Table 2
    488 *        Version 0 (Both main table and subtables)
    489 *
    490 * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020
    491 *
    492 ******************************************************************************/
    493
    494struct acpi_table_dbg2 {
    495	struct acpi_table_header header;	/* Common ACPI table header */
    496	u32 info_offset;
    497	u32 info_count;
    498};
    499
    500struct acpi_dbg2_header {
    501	u32 info_offset;
    502	u32 info_count;
    503};
    504
    505/* Debug Device Information Subtable */
    506
    507struct acpi_dbg2_device {
    508	u8 revision;
    509	u16 length;
    510	u8 register_count;	/* Number of base_address registers */
    511	u16 namepath_length;
    512	u16 namepath_offset;
    513	u16 oem_data_length;
    514	u16 oem_data_offset;
    515	u16 port_type;
    516	u16 port_subtype;
    517	u16 reserved;
    518	u16 base_address_offset;
    519	u16 address_size_offset;
    520	/*
    521	 * Data that follows:
    522	 *    base_address (required) - Each in 12-byte Generic Address Structure format.
    523	 *    address_size (required) - Array of u32 sizes corresponding to each base_address register.
    524	 *    Namepath    (required) - Null terminated string. Single dot if not supported.
    525	 *    oem_data    (optional) - Length is oem_data_length.
    526	 */
    527};
    528
    529/* Types for port_type field above */
    530
    531#define ACPI_DBG2_SERIAL_PORT       0x8000
    532#define ACPI_DBG2_1394_PORT         0x8001
    533#define ACPI_DBG2_USB_PORT          0x8002
    534#define ACPI_DBG2_NET_PORT          0x8003
    535
    536/* Subtypes for port_subtype field above */
    537
    538#define ACPI_DBG2_16550_COMPATIBLE  0x0000
    539#define ACPI_DBG2_16550_SUBSET      0x0001
    540#define ACPI_DBG2_MAX311XE_SPI      0x0002
    541#define ACPI_DBG2_ARM_PL011         0x0003
    542#define ACPI_DBG2_MSM8X60           0x0004
    543#define ACPI_DBG2_16550_NVIDIA      0x0005
    544#define ACPI_DBG2_TI_OMAP           0x0006
    545#define ACPI_DBG2_APM88XXXX         0x0008
    546#define ACPI_DBG2_MSM8974           0x0009
    547#define ACPI_DBG2_SAM5250           0x000A
    548#define ACPI_DBG2_INTEL_USIF        0x000B
    549#define ACPI_DBG2_IMX6              0x000C
    550#define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
    551#define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
    552#define ACPI_DBG2_ARM_DCC           0x000F
    553#define ACPI_DBG2_BCM2835           0x0010
    554#define ACPI_DBG2_SDM845_1_8432MHZ  0x0011
    555#define ACPI_DBG2_16550_WITH_GAS    0x0012
    556#define ACPI_DBG2_SDM845_7_372MHZ   0x0013
    557#define ACPI_DBG2_INTEL_LPSS        0x0014
    558
    559#define ACPI_DBG2_1394_STANDARD     0x0000
    560
    561#define ACPI_DBG2_USB_XHCI          0x0000
    562#define ACPI_DBG2_USB_EHCI          0x0001
    563
    564/*******************************************************************************
    565 *
    566 * DBGP - Debug Port table
    567 *        Version 1
    568 *
    569 * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
    570 *
    571 ******************************************************************************/
    572
    573struct acpi_table_dbgp {
    574	struct acpi_table_header header;	/* Common ACPI table header */
    575	u8 type;		/* 0=full 16550, 1=subset of 16550 */
    576	u8 reserved[3];
    577	struct acpi_generic_address debug_port;
    578};
    579
    580/*******************************************************************************
    581 *
    582 * DMAR - DMA Remapping table
    583 *        Version 1
    584 *
    585 * Conforms to "Intel Virtualization Technology for Directed I/O",
    586 * Version 2.3, October 2014
    587 *
    588 ******************************************************************************/
    589
    590struct acpi_table_dmar {
    591	struct acpi_table_header header;	/* Common ACPI table header */
    592	u8 width;		/* Host Address Width */
    593	u8 flags;
    594	u8 reserved[10];
    595};
    596
    597/* Masks for Flags field above */
    598
    599#define ACPI_DMAR_INTR_REMAP        (1)
    600#define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
    601#define ACPI_DMAR_X2APIC_MODE       (1<<2)
    602
    603/* DMAR subtable header */
    604
    605struct acpi_dmar_header {
    606	u16 type;
    607	u16 length;
    608};
    609
    610/* Values for subtable type in struct acpi_dmar_header */
    611
    612enum acpi_dmar_type {
    613	ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
    614	ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
    615	ACPI_DMAR_TYPE_ROOT_ATS = 2,
    616	ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3,
    617	ACPI_DMAR_TYPE_NAMESPACE = 4,
    618	ACPI_DMAR_TYPE_SATC = 5,
    619	ACPI_DMAR_TYPE_RESERVED = 6	/* 6 and greater are reserved */
    620};
    621
    622/* DMAR Device Scope structure */
    623
    624struct acpi_dmar_device_scope {
    625	u8 entry_type;
    626	u8 length;
    627	u16 reserved;
    628	u8 enumeration_id;
    629	u8 bus;
    630};
    631
    632/* Values for entry_type in struct acpi_dmar_device_scope - device types */
    633
    634enum acpi_dmar_scope_type {
    635	ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
    636	ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
    637	ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
    638	ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
    639	ACPI_DMAR_SCOPE_TYPE_HPET = 4,
    640	ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5,
    641	ACPI_DMAR_SCOPE_TYPE_RESERVED = 6	/* 6 and greater are reserved */
    642};
    643
    644struct acpi_dmar_pci_path {
    645	u8 device;
    646	u8 function;
    647};
    648
    649/*
    650 * DMAR Subtables, correspond to Type in struct acpi_dmar_header
    651 */
    652
    653/* 0: Hardware Unit Definition */
    654
    655struct acpi_dmar_hardware_unit {
    656	struct acpi_dmar_header header;
    657	u8 flags;
    658	u8 reserved;
    659	u16 segment;
    660	u64 address;		/* Register Base Address */
    661};
    662
    663/* Masks for Flags field above */
    664
    665#define ACPI_DMAR_INCLUDE_ALL       (1)
    666
    667/* 1: Reserved Memory Definition */
    668
    669struct acpi_dmar_reserved_memory {
    670	struct acpi_dmar_header header;
    671	u16 reserved;
    672	u16 segment;
    673	u64 base_address;	/* 4K aligned base address */
    674	u64 end_address;	/* 4K aligned limit address */
    675};
    676
    677/* Masks for Flags field above */
    678
    679#define ACPI_DMAR_ALLOW_ALL         (1)
    680
    681/* 2: Root Port ATS Capability Reporting Structure */
    682
    683struct acpi_dmar_atsr {
    684	struct acpi_dmar_header header;
    685	u8 flags;
    686	u8 reserved;
    687	u16 segment;
    688};
    689
    690/* Masks for Flags field above */
    691
    692#define ACPI_DMAR_ALL_PORTS         (1)
    693
    694/* 3: Remapping Hardware Static Affinity Structure */
    695
    696struct acpi_dmar_rhsa {
    697	struct acpi_dmar_header header;
    698	u32 reserved;
    699	u64 base_address;
    700	u32 proximity_domain;
    701};
    702
    703/* 4: ACPI Namespace Device Declaration Structure */
    704
    705struct acpi_dmar_andd {
    706	struct acpi_dmar_header header;
    707	u8 reserved[3];
    708	u8 device_number;
    709	char device_name[1];
    710};
    711
    712/* 5: SOC Integrated Address Translation Cache Reporting Structure */
    713
    714struct acpi_dmar_satc {
    715	struct acpi_dmar_header header;
    716	u8 flags;
    717	u8 reserved;
    718	u16 segment;
    719};
    720/*******************************************************************************
    721 *
    722 * DRTM - Dynamic Root of Trust for Measurement table
    723 * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0
    724 * Table version 1
    725 *
    726 ******************************************************************************/
    727
    728struct acpi_table_drtm {
    729	struct acpi_table_header header;	/* Common ACPI table header */
    730	u64 entry_base_address;
    731	u64 entry_length;
    732	u32 entry_address32;
    733	u64 entry_address64;
    734	u64 exit_address;
    735	u64 log_area_address;
    736	u32 log_area_length;
    737	u64 arch_dependent_address;
    738	u32 flags;
    739};
    740
    741/* Flag Definitions for above */
    742
    743#define ACPI_DRTM_ACCESS_ALLOWED            (1)
    744#define ACPI_DRTM_ENABLE_GAP_CODE           (1<<1)
    745#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS   (1<<2)
    746#define ACPI_DRTM_AUTHORITY_ORDER           (1<<3)
    747
    748/* 1) Validated Tables List (64-bit addresses) */
    749
    750struct acpi_drtm_vtable_list {
    751	u32 validated_table_count;
    752	u64 validated_tables[1];
    753};
    754
    755/* 2) Resources List (of Resource Descriptors) */
    756
    757/* Resource Descriptor */
    758
    759struct acpi_drtm_resource {
    760	u8 size[7];
    761	u8 type;
    762	u64 address;
    763};
    764
    765struct acpi_drtm_resource_list {
    766	u32 resource_count;
    767	struct acpi_drtm_resource resources[1];
    768};
    769
    770/* 3) Platform-specific Identifiers List */
    771
    772struct acpi_drtm_dps_id {
    773	u32 dps_id_length;
    774	u8 dps_id[16];
    775};
    776
    777/*******************************************************************************
    778 *
    779 * ECDT - Embedded Controller Boot Resources Table
    780 *        Version 1
    781 *
    782 ******************************************************************************/
    783
    784struct acpi_table_ecdt {
    785	struct acpi_table_header header;	/* Common ACPI table header */
    786	struct acpi_generic_address control;	/* Address of EC command/status register */
    787	struct acpi_generic_address data;	/* Address of EC data register */
    788	u32 uid;		/* Unique ID - must be same as the EC _UID method */
    789	u8 gpe;			/* The GPE for the EC */
    790	u8 id[1];		/* Full namepath of the EC in the ACPI namespace */
    791};
    792
    793/*******************************************************************************
    794 *
    795 * EINJ - Error Injection Table (ACPI 4.0)
    796 *        Version 1
    797 *
    798 ******************************************************************************/
    799
    800struct acpi_table_einj {
    801	struct acpi_table_header header;	/* Common ACPI table header */
    802	u32 header_length;
    803	u8 flags;
    804	u8 reserved[3];
    805	u32 entries;
    806};
    807
    808/* EINJ Injection Instruction Entries (actions) */
    809
    810struct acpi_einj_entry {
    811	struct acpi_whea_header whea_header;	/* Common header for WHEA tables */
    812};
    813
    814/* Masks for Flags field above */
    815
    816#define ACPI_EINJ_PRESERVE          (1)
    817
    818/* Values for Action field above */
    819
    820enum acpi_einj_actions {
    821	ACPI_EINJ_BEGIN_OPERATION = 0,
    822	ACPI_EINJ_GET_TRIGGER_TABLE = 1,
    823	ACPI_EINJ_SET_ERROR_TYPE = 2,
    824	ACPI_EINJ_GET_ERROR_TYPE = 3,
    825	ACPI_EINJ_END_OPERATION = 4,
    826	ACPI_EINJ_EXECUTE_OPERATION = 5,
    827	ACPI_EINJ_CHECK_BUSY_STATUS = 6,
    828	ACPI_EINJ_GET_COMMAND_STATUS = 7,
    829	ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
    830	ACPI_EINJ_GET_EXECUTE_TIMINGS = 9,
    831	ACPI_EINJ_ACTION_RESERVED = 10,	/* 10 and greater are reserved */
    832	ACPI_EINJ_TRIGGER_ERROR = 0xFF	/* Except for this value */
    833};
    834
    835/* Values for Instruction field above */
    836
    837enum acpi_einj_instructions {
    838	ACPI_EINJ_READ_REGISTER = 0,
    839	ACPI_EINJ_READ_REGISTER_VALUE = 1,
    840	ACPI_EINJ_WRITE_REGISTER = 2,
    841	ACPI_EINJ_WRITE_REGISTER_VALUE = 3,
    842	ACPI_EINJ_NOOP = 4,
    843	ACPI_EINJ_FLUSH_CACHELINE = 5,
    844	ACPI_EINJ_INSTRUCTION_RESERVED = 6	/* 6 and greater are reserved */
    845};
    846
    847struct acpi_einj_error_type_with_addr {
    848	u32 error_type;
    849	u32 vendor_struct_offset;
    850	u32 flags;
    851	u32 apic_id;
    852	u64 address;
    853	u64 range;
    854	u32 pcie_id;
    855};
    856
    857struct acpi_einj_vendor {
    858	u32 length;
    859	u32 pcie_id;
    860	u16 vendor_id;
    861	u16 device_id;
    862	u8 revision_id;
    863	u8 reserved[3];
    864};
    865
    866/* EINJ Trigger Error Action Table */
    867
    868struct acpi_einj_trigger {
    869	u32 header_size;
    870	u32 revision;
    871	u32 table_size;
    872	u32 entry_count;
    873};
    874
    875/* Command status return values */
    876
    877enum acpi_einj_command_status {
    878	ACPI_EINJ_SUCCESS = 0,
    879	ACPI_EINJ_FAILURE = 1,
    880	ACPI_EINJ_INVALID_ACCESS = 2,
    881	ACPI_EINJ_STATUS_RESERVED = 3	/* 3 and greater are reserved */
    882};
    883
    884/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
    885
    886#define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
    887#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
    888#define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
    889#define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
    890#define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
    891#define ACPI_EINJ_MEMORY_FATAL              (1<<5)
    892#define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
    893#define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
    894#define ACPI_EINJ_PCIX_FATAL                (1<<8)
    895#define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
    896#define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
    897#define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
    898#define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
    899
    900/*******************************************************************************
    901 *
    902 * ERST - Error Record Serialization Table (ACPI 4.0)
    903 *        Version 1
    904 *
    905 ******************************************************************************/
    906
    907struct acpi_table_erst {
    908	struct acpi_table_header header;	/* Common ACPI table header */
    909	u32 header_length;
    910	u32 reserved;
    911	u32 entries;
    912};
    913
    914/* ERST Serialization Entries (actions) */
    915
    916struct acpi_erst_entry {
    917	struct acpi_whea_header whea_header;	/* Common header for WHEA tables */
    918};
    919
    920/* Masks for Flags field above */
    921
    922#define ACPI_ERST_PRESERVE          (1)
    923
    924/* Values for Action field above */
    925
    926enum acpi_erst_actions {
    927	ACPI_ERST_BEGIN_WRITE = 0,
    928	ACPI_ERST_BEGIN_READ = 1,
    929	ACPI_ERST_BEGIN_CLEAR = 2,
    930	ACPI_ERST_END = 3,
    931	ACPI_ERST_SET_RECORD_OFFSET = 4,
    932	ACPI_ERST_EXECUTE_OPERATION = 5,
    933	ACPI_ERST_CHECK_BUSY_STATUS = 6,
    934	ACPI_ERST_GET_COMMAND_STATUS = 7,
    935	ACPI_ERST_GET_RECORD_ID = 8,
    936	ACPI_ERST_SET_RECORD_ID = 9,
    937	ACPI_ERST_GET_RECORD_COUNT = 10,
    938	ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
    939	ACPI_ERST_NOT_USED = 12,
    940	ACPI_ERST_GET_ERROR_RANGE = 13,
    941	ACPI_ERST_GET_ERROR_LENGTH = 14,
    942	ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
    943	ACPI_ERST_EXECUTE_TIMINGS = 16,
    944	ACPI_ERST_ACTION_RESERVED = 17	/* 17 and greater are reserved */
    945};
    946
    947/* Values for Instruction field above */
    948
    949enum acpi_erst_instructions {
    950	ACPI_ERST_READ_REGISTER = 0,
    951	ACPI_ERST_READ_REGISTER_VALUE = 1,
    952	ACPI_ERST_WRITE_REGISTER = 2,
    953	ACPI_ERST_WRITE_REGISTER_VALUE = 3,
    954	ACPI_ERST_NOOP = 4,
    955	ACPI_ERST_LOAD_VAR1 = 5,
    956	ACPI_ERST_LOAD_VAR2 = 6,
    957	ACPI_ERST_STORE_VAR1 = 7,
    958	ACPI_ERST_ADD = 8,
    959	ACPI_ERST_SUBTRACT = 9,
    960	ACPI_ERST_ADD_VALUE = 10,
    961	ACPI_ERST_SUBTRACT_VALUE = 11,
    962	ACPI_ERST_STALL = 12,
    963	ACPI_ERST_STALL_WHILE_TRUE = 13,
    964	ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
    965	ACPI_ERST_GOTO = 15,
    966	ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
    967	ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
    968	ACPI_ERST_MOVE_DATA = 18,
    969	ACPI_ERST_INSTRUCTION_RESERVED = 19	/* 19 and greater are reserved */
    970};
    971
    972/* Command status return values */
    973
    974enum acpi_erst_command_status {
    975	ACPI_ERST_SUCCESS = 0,
    976	ACPI_ERST_NO_SPACE = 1,
    977	ACPI_ERST_NOT_AVAILABLE = 2,
    978	ACPI_ERST_FAILURE = 3,
    979	ACPI_ERST_RECORD_EMPTY = 4,
    980	ACPI_ERST_NOT_FOUND = 5,
    981	ACPI_ERST_STATUS_RESERVED = 6	/* 6 and greater are reserved */
    982};
    983
    984/* Error Record Serialization Information */
    985
    986struct acpi_erst_info {
    987	u16 signature;		/* Should be "ER" */
    988	u8 data[48];
    989};
    990
    991/*******************************************************************************
    992 *
    993 * FPDT - Firmware Performance Data Table (ACPI 5.0)
    994 *        Version 1
    995 *
    996 ******************************************************************************/
    997
    998struct acpi_table_fpdt {
    999	struct acpi_table_header header;	/* Common ACPI table header */
   1000};
   1001
   1002/* FPDT subtable header (Performance Record Structure) */
   1003
   1004struct acpi_fpdt_header {
   1005	u16 type;
   1006	u8 length;
   1007	u8 revision;
   1008};
   1009
   1010/* Values for Type field above */
   1011
   1012enum acpi_fpdt_type {
   1013	ACPI_FPDT_TYPE_BOOT = 0,
   1014	ACPI_FPDT_TYPE_S3PERF = 1
   1015};
   1016
   1017/*
   1018 * FPDT subtables
   1019 */
   1020
   1021/* 0: Firmware Basic Boot Performance Record */
   1022
   1023struct acpi_fpdt_boot_pointer {
   1024	struct acpi_fpdt_header header;
   1025	u8 reserved[4];
   1026	u64 address;
   1027};
   1028
   1029/* 1: S3 Performance Table Pointer Record */
   1030
   1031struct acpi_fpdt_s3pt_pointer {
   1032	struct acpi_fpdt_header header;
   1033	u8 reserved[4];
   1034	u64 address;
   1035};
   1036
   1037/*
   1038 * S3PT - S3 Performance Table. This table is pointed to by the
   1039 * S3 Pointer Record above.
   1040 */
   1041struct acpi_table_s3pt {
   1042	u8 signature[4];	/* "S3PT" */
   1043	u32 length;
   1044};
   1045
   1046/*
   1047 * S3PT Subtables (Not part of the actual FPDT)
   1048 */
   1049
   1050/* Values for Type field in S3PT header */
   1051
   1052enum acpi_s3pt_type {
   1053	ACPI_S3PT_TYPE_RESUME = 0,
   1054	ACPI_S3PT_TYPE_SUSPEND = 1,
   1055	ACPI_FPDT_BOOT_PERFORMANCE = 2
   1056};
   1057
   1058struct acpi_s3pt_resume {
   1059	struct acpi_fpdt_header header;
   1060	u32 resume_count;
   1061	u64 full_resume;
   1062	u64 average_resume;
   1063};
   1064
   1065struct acpi_s3pt_suspend {
   1066	struct acpi_fpdt_header header;
   1067	u64 suspend_start;
   1068	u64 suspend_end;
   1069};
   1070
   1071/*
   1072 * FPDT Boot Performance Record (Not part of the actual FPDT)
   1073 */
   1074struct acpi_fpdt_boot {
   1075	struct acpi_fpdt_header header;
   1076	u8 reserved[4];
   1077	u64 reset_end;
   1078	u64 load_start;
   1079	u64 startup_start;
   1080	u64 exit_services_entry;
   1081	u64 exit_services_exit;
   1082};
   1083
   1084/*******************************************************************************
   1085 *
   1086 * GTDT - Generic Timer Description Table (ACPI 5.1)
   1087 *        Version 2
   1088 *
   1089 ******************************************************************************/
   1090
   1091struct acpi_table_gtdt {
   1092	struct acpi_table_header header;	/* Common ACPI table header */
   1093	u64 counter_block_addresss;
   1094	u32 reserved;
   1095	u32 secure_el1_interrupt;
   1096	u32 secure_el1_flags;
   1097	u32 non_secure_el1_interrupt;
   1098	u32 non_secure_el1_flags;
   1099	u32 virtual_timer_interrupt;
   1100	u32 virtual_timer_flags;
   1101	u32 non_secure_el2_interrupt;
   1102	u32 non_secure_el2_flags;
   1103	u64 counter_read_block_address;
   1104	u32 platform_timer_count;
   1105	u32 platform_timer_offset;
   1106};
   1107
   1108/* Flag Definitions: Timer Block Physical Timers and Virtual timers */
   1109
   1110#define ACPI_GTDT_INTERRUPT_MODE        (1)
   1111#define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
   1112#define ACPI_GTDT_ALWAYS_ON             (1<<2)
   1113
   1114struct acpi_gtdt_el2 {
   1115	u32 virtual_el2_timer_gsiv;
   1116	u32 virtual_el2_timer_flags;
   1117};
   1118
   1119/* Common GTDT subtable header */
   1120
   1121struct acpi_gtdt_header {
   1122	u8 type;
   1123	u16 length;
   1124};
   1125
   1126/* Values for GTDT subtable type above */
   1127
   1128enum acpi_gtdt_type {
   1129	ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
   1130	ACPI_GTDT_TYPE_WATCHDOG = 1,
   1131	ACPI_GTDT_TYPE_RESERVED = 2	/* 2 and greater are reserved */
   1132};
   1133
   1134/* GTDT Subtables, correspond to Type in struct acpi_gtdt_header */
   1135
   1136/* 0: Generic Timer Block */
   1137
   1138struct acpi_gtdt_timer_block {
   1139	struct acpi_gtdt_header header;
   1140	u8 reserved;
   1141	u64 block_address;
   1142	u32 timer_count;
   1143	u32 timer_offset;
   1144};
   1145
   1146/* Timer Sub-Structure, one per timer */
   1147
   1148struct acpi_gtdt_timer_entry {
   1149	u8 frame_number;
   1150	u8 reserved[3];
   1151	u64 base_address;
   1152	u64 el0_base_address;
   1153	u32 timer_interrupt;
   1154	u32 timer_flags;
   1155	u32 virtual_timer_interrupt;
   1156	u32 virtual_timer_flags;
   1157	u32 common_flags;
   1158};
   1159
   1160/* Flag Definitions: timer_flags and virtual_timer_flags above */
   1161
   1162#define ACPI_GTDT_GT_IRQ_MODE               (1)
   1163#define ACPI_GTDT_GT_IRQ_POLARITY           (1<<1)
   1164
   1165/* Flag Definitions: common_flags above */
   1166
   1167#define ACPI_GTDT_GT_IS_SECURE_TIMER        (1)
   1168#define ACPI_GTDT_GT_ALWAYS_ON              (1<<1)
   1169
   1170/* 1: SBSA Generic Watchdog Structure */
   1171
   1172struct acpi_gtdt_watchdog {
   1173	struct acpi_gtdt_header header;
   1174	u8 reserved;
   1175	u64 refresh_frame_address;
   1176	u64 control_frame_address;
   1177	u32 timer_interrupt;
   1178	u32 timer_flags;
   1179};
   1180
   1181/* Flag Definitions: timer_flags above */
   1182
   1183#define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
   1184#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
   1185#define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
   1186
   1187/*******************************************************************************
   1188 *
   1189 * HEST - Hardware Error Source Table (ACPI 4.0)
   1190 *        Version 1
   1191 *
   1192 ******************************************************************************/
   1193
   1194struct acpi_table_hest {
   1195	struct acpi_table_header header;	/* Common ACPI table header */
   1196	u32 error_source_count;
   1197};
   1198
   1199/* HEST subtable header */
   1200
   1201struct acpi_hest_header {
   1202	u16 type;
   1203	u16 source_id;
   1204};
   1205
   1206/* Values for Type field above for subtables */
   1207
   1208enum acpi_hest_types {
   1209	ACPI_HEST_TYPE_IA32_CHECK = 0,
   1210	ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
   1211	ACPI_HEST_TYPE_IA32_NMI = 2,
   1212	ACPI_HEST_TYPE_NOT_USED3 = 3,
   1213	ACPI_HEST_TYPE_NOT_USED4 = 4,
   1214	ACPI_HEST_TYPE_NOT_USED5 = 5,
   1215	ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
   1216	ACPI_HEST_TYPE_AER_ENDPOINT = 7,
   1217	ACPI_HEST_TYPE_AER_BRIDGE = 8,
   1218	ACPI_HEST_TYPE_GENERIC_ERROR = 9,
   1219	ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
   1220	ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
   1221	ACPI_HEST_TYPE_RESERVED = 12	/* 12 and greater are reserved */
   1222};
   1223
   1224/*
   1225 * HEST substructures contained in subtables
   1226 */
   1227
   1228/*
   1229 * IA32 Error Bank(s) - Follows the struct acpi_hest_ia_machine_check and
   1230 * struct acpi_hest_ia_corrected structures.
   1231 */
   1232struct acpi_hest_ia_error_bank {
   1233	u8 bank_number;
   1234	u8 clear_status_on_init;
   1235	u8 status_format;
   1236	u8 reserved;
   1237	u32 control_register;
   1238	u64 control_data;
   1239	u32 status_register;
   1240	u32 address_register;
   1241	u32 misc_register;
   1242};
   1243
   1244/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
   1245
   1246struct acpi_hest_aer_common {
   1247	u16 reserved1;
   1248	u8 flags;
   1249	u8 enabled;
   1250	u32 records_to_preallocate;
   1251	u32 max_sections_per_record;
   1252	u32 bus;		/* Bus and Segment numbers */
   1253	u16 device;
   1254	u16 function;
   1255	u16 device_control;
   1256	u16 reserved2;
   1257	u32 uncorrectable_mask;
   1258	u32 uncorrectable_severity;
   1259	u32 correctable_mask;
   1260	u32 advanced_capabilities;
   1261};
   1262
   1263/* Masks for HEST Flags fields */
   1264
   1265#define ACPI_HEST_FIRMWARE_FIRST        (1)
   1266#define ACPI_HEST_GLOBAL                (1<<1)
   1267#define ACPI_HEST_GHES_ASSIST           (1<<2)
   1268
   1269/*
   1270 * Macros to access the bus/segment numbers in Bus field above:
   1271 *  Bus number is encoded in bits 7:0
   1272 *  Segment number is encoded in bits 23:8
   1273 */
   1274#define ACPI_HEST_BUS(bus)              ((bus) & 0xFF)
   1275#define ACPI_HEST_SEGMENT(bus)          (((bus) >> 8) & 0xFFFF)
   1276
   1277/* Hardware Error Notification */
   1278
   1279struct acpi_hest_notify {
   1280	u8 type;
   1281	u8 length;
   1282	u16 config_write_enable;
   1283	u32 poll_interval;
   1284	u32 vector;
   1285	u32 polling_threshold_value;
   1286	u32 polling_threshold_window;
   1287	u32 error_threshold_value;
   1288	u32 error_threshold_window;
   1289};
   1290
   1291/* Values for Notify Type field above */
   1292
   1293enum acpi_hest_notify_types {
   1294	ACPI_HEST_NOTIFY_POLLED = 0,
   1295	ACPI_HEST_NOTIFY_EXTERNAL = 1,
   1296	ACPI_HEST_NOTIFY_LOCAL = 2,
   1297	ACPI_HEST_NOTIFY_SCI = 3,
   1298	ACPI_HEST_NOTIFY_NMI = 4,
   1299	ACPI_HEST_NOTIFY_CMCI = 5,	/* ACPI 5.0 */
   1300	ACPI_HEST_NOTIFY_MCE = 6,	/* ACPI 5.0 */
   1301	ACPI_HEST_NOTIFY_GPIO = 7,	/* ACPI 6.0 */
   1302	ACPI_HEST_NOTIFY_SEA = 8,	/* ACPI 6.1 */
   1303	ACPI_HEST_NOTIFY_SEI = 9,	/* ACPI 6.1 */
   1304	ACPI_HEST_NOTIFY_GSIV = 10,	/* ACPI 6.1 */
   1305	ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11,	/* ACPI 6.2 */
   1306	ACPI_HEST_NOTIFY_RESERVED = 12	/* 12 and greater are reserved */
   1307};
   1308
   1309/* Values for config_write_enable bitfield above */
   1310
   1311#define ACPI_HEST_TYPE                  (1)
   1312#define ACPI_HEST_POLL_INTERVAL         (1<<1)
   1313#define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
   1314#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
   1315#define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
   1316#define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
   1317
   1318/*
   1319 * HEST subtables
   1320 */
   1321
   1322/* 0: IA32 Machine Check Exception */
   1323
   1324struct acpi_hest_ia_machine_check {
   1325	struct acpi_hest_header header;
   1326	u16 reserved1;
   1327	u8 flags;		/* See flags ACPI_HEST_GLOBAL, etc. above */
   1328	u8 enabled;
   1329	u32 records_to_preallocate;
   1330	u32 max_sections_per_record;
   1331	u64 global_capability_data;
   1332	u64 global_control_data;
   1333	u8 num_hardware_banks;
   1334	u8 reserved3[7];
   1335};
   1336
   1337/* 1: IA32 Corrected Machine Check */
   1338
   1339struct acpi_hest_ia_corrected {
   1340	struct acpi_hest_header header;
   1341	u16 reserved1;
   1342	u8 flags;		/* See flags ACPI_HEST_GLOBAL, etc. above */
   1343	u8 enabled;
   1344	u32 records_to_preallocate;
   1345	u32 max_sections_per_record;
   1346	struct acpi_hest_notify notify;
   1347	u8 num_hardware_banks;
   1348	u8 reserved2[3];
   1349};
   1350
   1351/* 2: IA32 Non-Maskable Interrupt */
   1352
   1353struct acpi_hest_ia_nmi {
   1354	struct acpi_hest_header header;
   1355	u32 reserved;
   1356	u32 records_to_preallocate;
   1357	u32 max_sections_per_record;
   1358	u32 max_raw_data_length;
   1359};
   1360
   1361/* 3,4,5: Not used */
   1362
   1363/* 6: PCI Express Root Port AER */
   1364
   1365struct acpi_hest_aer_root {
   1366	struct acpi_hest_header header;
   1367	struct acpi_hest_aer_common aer;
   1368	u32 root_error_command;
   1369};
   1370
   1371/* 7: PCI Express AER (AER Endpoint) */
   1372
   1373struct acpi_hest_aer {
   1374	struct acpi_hest_header header;
   1375	struct acpi_hest_aer_common aer;
   1376};
   1377
   1378/* 8: PCI Express/PCI-X Bridge AER */
   1379
   1380struct acpi_hest_aer_bridge {
   1381	struct acpi_hest_header header;
   1382	struct acpi_hest_aer_common aer;
   1383	u32 uncorrectable_mask2;
   1384	u32 uncorrectable_severity2;
   1385	u32 advanced_capabilities2;
   1386};
   1387
   1388/* 9: Generic Hardware Error Source */
   1389
   1390struct acpi_hest_generic {
   1391	struct acpi_hest_header header;
   1392	u16 related_source_id;
   1393	u8 reserved;
   1394	u8 enabled;
   1395	u32 records_to_preallocate;
   1396	u32 max_sections_per_record;
   1397	u32 max_raw_data_length;
   1398	struct acpi_generic_address error_status_address;
   1399	struct acpi_hest_notify notify;
   1400	u32 error_block_length;
   1401};
   1402
   1403/* 10: Generic Hardware Error Source, version 2 */
   1404
   1405struct acpi_hest_generic_v2 {
   1406	struct acpi_hest_header header;
   1407	u16 related_source_id;
   1408	u8 reserved;
   1409	u8 enabled;
   1410	u32 records_to_preallocate;
   1411	u32 max_sections_per_record;
   1412	u32 max_raw_data_length;
   1413	struct acpi_generic_address error_status_address;
   1414	struct acpi_hest_notify notify;
   1415	u32 error_block_length;
   1416	struct acpi_generic_address read_ack_register;
   1417	u64 read_ack_preserve;
   1418	u64 read_ack_write;
   1419};
   1420
   1421/* Generic Error Status block */
   1422
   1423struct acpi_hest_generic_status {
   1424	u32 block_status;
   1425	u32 raw_data_offset;
   1426	u32 raw_data_length;
   1427	u32 data_length;
   1428	u32 error_severity;
   1429};
   1430
   1431/* Values for block_status flags above */
   1432
   1433#define ACPI_HEST_UNCORRECTABLE             (1)
   1434#define ACPI_HEST_CORRECTABLE               (1<<1)
   1435#define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
   1436#define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
   1437#define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4)	/* 8 bits, error count */
   1438
   1439/* Generic Error Data entry */
   1440
   1441struct acpi_hest_generic_data {
   1442	u8 section_type[16];
   1443	u32 error_severity;
   1444	u16 revision;
   1445	u8 validation_bits;
   1446	u8 flags;
   1447	u32 error_data_length;
   1448	u8 fru_id[16];
   1449	u8 fru_text[20];
   1450};
   1451
   1452/* Extension for revision 0x0300 */
   1453
   1454struct acpi_hest_generic_data_v300 {
   1455	u8 section_type[16];
   1456	u32 error_severity;
   1457	u16 revision;
   1458	u8 validation_bits;
   1459	u8 flags;
   1460	u32 error_data_length;
   1461	u8 fru_id[16];
   1462	u8 fru_text[20];
   1463	u64 time_stamp;
   1464};
   1465
   1466/* Values for error_severity above */
   1467
   1468#define ACPI_HEST_GEN_ERROR_RECOVERABLE     0
   1469#define ACPI_HEST_GEN_ERROR_FATAL           1
   1470#define ACPI_HEST_GEN_ERROR_CORRECTED       2
   1471#define ACPI_HEST_GEN_ERROR_NONE            3
   1472
   1473/* Flags for validation_bits above */
   1474
   1475#define ACPI_HEST_GEN_VALID_FRU_ID          (1)
   1476#define ACPI_HEST_GEN_VALID_FRU_STRING      (1<<1)
   1477#define ACPI_HEST_GEN_VALID_TIMESTAMP       (1<<2)
   1478
   1479/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
   1480
   1481struct acpi_hest_ia_deferred_check {
   1482	struct acpi_hest_header header;
   1483	u16 reserved1;
   1484	u8 flags;		/* See flags ACPI_HEST_GLOBAL, etc. above */
   1485	u8 enabled;
   1486	u32 records_to_preallocate;
   1487	u32 max_sections_per_record;
   1488	struct acpi_hest_notify notify;
   1489	u8 num_hardware_banks;
   1490	u8 reserved2[3];
   1491};
   1492
   1493/*******************************************************************************
   1494 *
   1495 * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
   1496 *        Version 1
   1497 *
   1498 ******************************************************************************/
   1499
   1500struct acpi_table_hmat {
   1501	struct acpi_table_header header;	/* Common ACPI table header */
   1502	u32 reserved;
   1503};
   1504
   1505/* Values for HMAT structure types */
   1506
   1507enum acpi_hmat_type {
   1508	ACPI_HMAT_TYPE_PROXIMITY = 0,	/* Memory proximity domain attributes */
   1509	ACPI_HMAT_TYPE_LOCALITY = 1,	/* System locality latency and bandwidth information */
   1510	ACPI_HMAT_TYPE_CACHE = 2,	/* Memory side cache information */
   1511	ACPI_HMAT_TYPE_RESERVED = 3	/* 3 and greater are reserved */
   1512};
   1513
   1514struct acpi_hmat_structure {
   1515	u16 type;
   1516	u16 reserved;
   1517	u32 length;
   1518};
   1519
   1520/*
   1521 * HMAT Structures, correspond to Type in struct acpi_hmat_structure
   1522 */
   1523
   1524/* 0: Memory proximity domain attributes */
   1525
   1526struct acpi_hmat_proximity_domain {
   1527	struct acpi_hmat_structure header;
   1528	u16 flags;
   1529	u16 reserved1;
   1530	u32 processor_PD;	/* Processor proximity domain */
   1531	u32 memory_PD;		/* Memory proximity domain */
   1532	u32 reserved2;
   1533	u64 reserved3;
   1534	u64 reserved4;
   1535};
   1536
   1537/* Masks for Flags field above */
   1538
   1539#define ACPI_HMAT_PROCESSOR_PD_VALID    (1)	/* 1: processor_PD field is valid */
   1540#define ACPI_HMAT_MEMORY_PD_VALID       (1<<1)	/* 1: memory_PD field is valid */
   1541#define ACPI_HMAT_RESERVATION_HINT      (1<<2)	/* 1: Reservation hint */
   1542
   1543/* 1: System locality latency and bandwidth information */
   1544
   1545struct acpi_hmat_locality {
   1546	struct acpi_hmat_structure header;
   1547	u8 flags;
   1548	u8 data_type;
   1549	u8 min_transfer_size;
   1550	u8 reserved1;
   1551	u32 number_of_initiator_Pds;
   1552	u32 number_of_target_Pds;
   1553	u32 reserved2;
   1554	u64 entry_base_unit;
   1555};
   1556
   1557/* Masks for Flags field above */
   1558
   1559#define ACPI_HMAT_MEMORY_HIERARCHY  (0x0F)     /* Bits 0-3 */
   1560
   1561/* Values for Memory Hierarchy flags */
   1562
   1563#define ACPI_HMAT_MEMORY            0
   1564#define ACPI_HMAT_LAST_LEVEL_CACHE  1
   1565#define ACPI_HMAT_1ST_LEVEL_CACHE   2
   1566#define ACPI_HMAT_2ND_LEVEL_CACHE   3
   1567#define ACPI_HMAT_3RD_LEVEL_CACHE   4
   1568#define ACPI_HMAT_MINIMUM_XFER_SIZE 0x10       /* Bit 4: ACPI 6.4 */
   1569#define ACPI_HMAT_NON_SEQUENTIAL_XFERS 0x20    /* Bit 5: ACPI 6.4 */
   1570
   1571
   1572/* Values for data_type field above */
   1573
   1574#define ACPI_HMAT_ACCESS_LATENCY    0
   1575#define ACPI_HMAT_READ_LATENCY      1
   1576#define ACPI_HMAT_WRITE_LATENCY     2
   1577#define ACPI_HMAT_ACCESS_BANDWIDTH  3
   1578#define ACPI_HMAT_READ_BANDWIDTH    4
   1579#define ACPI_HMAT_WRITE_BANDWIDTH   5
   1580
   1581/* 2: Memory side cache information */
   1582
   1583struct acpi_hmat_cache {
   1584	struct acpi_hmat_structure header;
   1585	u32 memory_PD;
   1586	u32 reserved1;
   1587	u64 cache_size;
   1588	u32 cache_attributes;
   1589	u16 reserved2;
   1590	u16 number_of_SMBIOShandles;
   1591};
   1592
   1593/* Masks for cache_attributes field above */
   1594
   1595#define ACPI_HMAT_TOTAL_CACHE_LEVEL     (0x0000000F)
   1596#define ACPI_HMAT_CACHE_LEVEL           (0x000000F0)
   1597#define ACPI_HMAT_CACHE_ASSOCIATIVITY   (0x00000F00)
   1598#define ACPI_HMAT_WRITE_POLICY          (0x0000F000)
   1599#define ACPI_HMAT_CACHE_LINE_SIZE       (0xFFFF0000)
   1600
   1601/* Values for cache associativity flag */
   1602
   1603#define ACPI_HMAT_CA_NONE                     (0)
   1604#define ACPI_HMAT_CA_DIRECT_MAPPED            (1)
   1605#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING   (2)
   1606
   1607/* Values for write policy flag */
   1608
   1609#define ACPI_HMAT_CP_NONE   (0)
   1610#define ACPI_HMAT_CP_WB     (1)
   1611#define ACPI_HMAT_CP_WT     (2)
   1612
   1613/*******************************************************************************
   1614 *
   1615 * HPET - High Precision Event Timer table
   1616 *        Version 1
   1617 *
   1618 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
   1619 * Version 1.0a, October 2004
   1620 *
   1621 ******************************************************************************/
   1622
   1623struct acpi_table_hpet {
   1624	struct acpi_table_header header;	/* Common ACPI table header */
   1625	u32 id;			/* Hardware ID of event timer block */
   1626	struct acpi_generic_address address;	/* Address of event timer block */
   1627	u8 sequence;		/* HPET sequence number */
   1628	u16 minimum_tick;	/* Main counter min tick, periodic mode */
   1629	u8 flags;
   1630};
   1631
   1632/* Masks for Flags field above */
   1633
   1634#define ACPI_HPET_PAGE_PROTECT_MASK (3)
   1635
   1636/* Values for Page Protect flags */
   1637
   1638enum acpi_hpet_page_protect {
   1639	ACPI_HPET_NO_PAGE_PROTECT = 0,
   1640	ACPI_HPET_PAGE_PROTECT4 = 1,
   1641	ACPI_HPET_PAGE_PROTECT64 = 2
   1642};
   1643
   1644/*******************************************************************************
   1645 *
   1646 * IBFT - Boot Firmware Table
   1647 *        Version 1
   1648 *
   1649 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
   1650 * Specification", Version 1.01, March 1, 2007
   1651 *
   1652 * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
   1653 * Therefore, it is not currently supported by the disassembler.
   1654 *
   1655 ******************************************************************************/
   1656
   1657struct acpi_table_ibft {
   1658	struct acpi_table_header header;	/* Common ACPI table header */
   1659	u8 reserved[12];
   1660};
   1661
   1662/* IBFT common subtable header */
   1663
   1664struct acpi_ibft_header {
   1665	u8 type;
   1666	u8 version;
   1667	u16 length;
   1668	u8 index;
   1669	u8 flags;
   1670};
   1671
   1672/* Values for Type field above */
   1673
   1674enum acpi_ibft_type {
   1675	ACPI_IBFT_TYPE_NOT_USED = 0,
   1676	ACPI_IBFT_TYPE_CONTROL = 1,
   1677	ACPI_IBFT_TYPE_INITIATOR = 2,
   1678	ACPI_IBFT_TYPE_NIC = 3,
   1679	ACPI_IBFT_TYPE_TARGET = 4,
   1680	ACPI_IBFT_TYPE_EXTENSIONS = 5,
   1681	ACPI_IBFT_TYPE_RESERVED = 6	/* 6 and greater are reserved */
   1682};
   1683
   1684/* IBFT subtables */
   1685
   1686struct acpi_ibft_control {
   1687	struct acpi_ibft_header header;
   1688	u16 extensions;
   1689	u16 initiator_offset;
   1690	u16 nic0_offset;
   1691	u16 target0_offset;
   1692	u16 nic1_offset;
   1693	u16 target1_offset;
   1694};
   1695
   1696struct acpi_ibft_initiator {
   1697	struct acpi_ibft_header header;
   1698	u8 sns_server[16];
   1699	u8 slp_server[16];
   1700	u8 primary_server[16];
   1701	u8 secondary_server[16];
   1702	u16 name_length;
   1703	u16 name_offset;
   1704};
   1705
   1706struct acpi_ibft_nic {
   1707	struct acpi_ibft_header header;
   1708	u8 ip_address[16];
   1709	u8 subnet_mask_prefix;
   1710	u8 origin;
   1711	u8 gateway[16];
   1712	u8 primary_dns[16];
   1713	u8 secondary_dns[16];
   1714	u8 dhcp[16];
   1715	u16 vlan;
   1716	u8 mac_address[6];
   1717	u16 pci_address;
   1718	u16 name_length;
   1719	u16 name_offset;
   1720};
   1721
   1722struct acpi_ibft_target {
   1723	struct acpi_ibft_header header;
   1724	u8 target_ip_address[16];
   1725	u16 target_ip_socket;
   1726	u8 target_boot_lun[8];
   1727	u8 chap_type;
   1728	u8 nic_association;
   1729	u16 target_name_length;
   1730	u16 target_name_offset;
   1731	u16 chap_name_length;
   1732	u16 chap_name_offset;
   1733	u16 chap_secret_length;
   1734	u16 chap_secret_offset;
   1735	u16 reverse_chap_name_length;
   1736	u16 reverse_chap_name_offset;
   1737	u16 reverse_chap_secret_length;
   1738	u16 reverse_chap_secret_offset;
   1739};
   1740
   1741/* Reset to default packing */
   1742
   1743#pragma pack()
   1744
   1745#endif				/* __ACTBL1_H__ */