Subversion Repositories Kolibri OS

Rev

Rev 6588 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /******************************************************************************
  2.  *
  3.  * Name: actbl1.h - Additional ACPI table definitions
  4.  *
  5.  *****************************************************************************/
  6.  
  7. /*
  8.  * Copyright (C) 2000 - 2016, Intel Corp.
  9.  * All rights reserved.
  10.  *
  11.  * Redistribution and use in source and binary forms, with or without
  12.  * modification, are permitted provided that the following conditions
  13.  * are met:
  14.  * 1. Redistributions of source code must retain the above copyright
  15.  *    notice, this list of conditions, and the following disclaimer,
  16.  *    without modification.
  17.  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  18.  *    substantially similar to the "NO WARRANTY" disclaimer below
  19.  *    ("Disclaimer") and any redistribution must be conditioned upon
  20.  *    including a substantially similar Disclaimer requirement for further
  21.  *    binary redistribution.
  22.  * 3. Neither the names of the above-listed copyright holders nor the names
  23.  *    of any contributors may be used to endorse or promote products derived
  24.  *    from this software without specific prior written permission.
  25.  *
  26.  * Alternatively, this software may be distributed under the terms of the
  27.  * GNU General Public License ("GPL") version 2 as published by the Free
  28.  * Software Foundation.
  29.  *
  30.  * NO WARRANTY
  31.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  32.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  33.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  34.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  35.  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  36.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  37.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  38.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  39.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  40.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  41.  * POSSIBILITY OF SUCH DAMAGES.
  42.  */
  43.  
  44. #ifndef __ACTBL1_H__
  45. #define __ACTBL1_H__
  46.  
  47. /*******************************************************************************
  48.  *
  49.  * Additional ACPI Tables (1)
  50.  *
  51.  * These tables are not consumed directly by the ACPICA subsystem, but are
  52.  * included here to support device drivers and the AML disassembler.
  53.  *
  54.  * The tables in this file are fully defined within the ACPI specification.
  55.  *
  56.  ******************************************************************************/
  57.  
  58. /*
  59.  * Values for description table header signatures for tables defined in this
  60.  * file. Useful because they make it more difficult to inadvertently type in
  61.  * the wrong signature.
  62.  */
  63. #define ACPI_SIG_BERT           "BERT"  /* Boot Error Record Table */
  64. #define ACPI_SIG_CPEP           "CPEP"  /* Corrected Platform Error Polling table */
  65. #define ACPI_SIG_ECDT           "ECDT"  /* Embedded Controller Boot Resources Table */
  66. #define ACPI_SIG_EINJ           "EINJ"  /* Error Injection table */
  67. #define ACPI_SIG_ERST           "ERST"  /* Error Record Serialization Table */
  68. #define ACPI_SIG_HEST           "HEST"  /* Hardware Error Source Table */
  69. #define ACPI_SIG_MADT           "APIC"  /* Multiple APIC Description Table */
  70. #define ACPI_SIG_MSCT           "MSCT"  /* Maximum System Characteristics Table */
  71. #define ACPI_SIG_SBST           "SBST"  /* Smart Battery Specification Table */
  72. #define ACPI_SIG_SLIT           "SLIT"  /* System Locality Distance Information Table */
  73. #define ACPI_SIG_SRAT           "SRAT"  /* System Resource Affinity Table */
  74. #define ACPI_SIG_NFIT           "NFIT"  /* NVDIMM Firmware Interface Table */
  75.  
  76. /*
  77.  * All tables must be byte-packed to match the ACPI specification, since
  78.  * the tables are provided by the system BIOS.
  79.  */
  80. #pragma pack(1)
  81.  
  82. /*
  83.  * Note: C bitfields are not used for this reason:
  84.  *
  85.  * "Bitfields are great and easy to read, but unfortunately the C language
  86.  * does not specify the layout of bitfields in memory, which means they are
  87.  * essentially useless for dealing with packed data in on-disk formats or
  88.  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
  89.  * this decision was a design error in C. Ritchie could have picked an order
  90.  * and stuck with it." Norman Ramsey.
  91.  * See http://stackoverflow.com/a/1053662/41661
  92.  */
  93.  
  94. /*******************************************************************************
  95.  *
  96.  * Common subtable headers
  97.  *
  98.  ******************************************************************************/
  99.  
  100. /* Generic subtable header (used in MADT, SRAT, etc.) */
  101.  
  102. struct acpi_subtable_header {
  103.         u8 type;
  104.         u8 length;
  105. };
  106.  
  107. /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
  108.  
  109. struct acpi_whea_header {
  110.         u8 action;
  111.         u8 instruction;
  112.         u8 flags;
  113.         u8 reserved;
  114.         struct acpi_generic_address register_region;
  115.         u64 value;              /* Value used with Read/Write register */
  116.         u64 mask;               /* Bitmask required for this register instruction */
  117. };
  118.  
  119. /*******************************************************************************
  120.  *
  121.  * BERT - Boot Error Record Table (ACPI 4.0)
  122.  *        Version 1
  123.  *
  124.  ******************************************************************************/
  125.  
  126. struct acpi_table_bert {
  127.         struct acpi_table_header header;        /* Common ACPI table header */
  128.         u32 region_length;      /* Length of the boot error region */
  129.         u64 address;            /* Physical address of the error region */
  130. };
  131.  
  132. /* Boot Error Region (not a subtable, pointed to by Address field above) */
  133.  
  134. struct acpi_bert_region {
  135.         u32 block_status;       /* Type of error information */
  136.         u32 raw_data_offset;    /* Offset to raw error data */
  137.         u32 raw_data_length;    /* Length of raw error data */
  138.         u32 data_length;        /* Length of generic error data */
  139.         u32 error_severity;     /* Severity code */
  140. };
  141.  
  142. /* Values for block_status flags above */
  143.  
  144. #define ACPI_BERT_UNCORRECTABLE             (1)
  145. #define ACPI_BERT_CORRECTABLE               (1<<1)
  146. #define ACPI_BERT_MULTIPLE_UNCORRECTABLE    (1<<2)
  147. #define ACPI_BERT_MULTIPLE_CORRECTABLE      (1<<3)
  148. #define ACPI_BERT_ERROR_ENTRY_COUNT         (0xFF<<4)   /* 8 bits, error count */
  149.  
  150. /* Values for error_severity above */
  151.  
  152. enum acpi_bert_error_severity {
  153.         ACPI_BERT_ERROR_CORRECTABLE = 0,
  154.         ACPI_BERT_ERROR_FATAL = 1,
  155.         ACPI_BERT_ERROR_CORRECTED = 2,
  156.         ACPI_BERT_ERROR_NONE = 3,
  157.         ACPI_BERT_ERROR_RESERVED = 4    /* 4 and greater are reserved */
  158. };
  159.  
  160. /*
  161.  * Note: The generic error data that follows the error_severity field above
  162.  * uses the struct acpi_hest_generic_data defined under the HEST table below
  163.  */
  164.  
  165. /*******************************************************************************
  166.  *
  167.  * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
  168.  *        Version 1
  169.  *
  170.  ******************************************************************************/
  171.  
  172. struct acpi_table_cpep {
  173.         struct acpi_table_header header;        /* Common ACPI table header */
  174.         u64 reserved;
  175. };
  176.  
  177. /* Subtable */
  178.  
  179. struct acpi_cpep_polling {
  180.         struct acpi_subtable_header header;
  181.         u8 id;                  /* Processor ID */
  182.         u8 eid;                 /* Processor EID */
  183.         u32 interval;           /* Polling interval (msec) */
  184. };
  185.  
  186. /*******************************************************************************
  187.  *
  188.  * ECDT - Embedded Controller Boot Resources Table
  189.  *        Version 1
  190.  *
  191.  ******************************************************************************/
  192.  
  193. struct acpi_table_ecdt {
  194.         struct acpi_table_header header;        /* Common ACPI table header */
  195.         struct acpi_generic_address control;    /* Address of EC command/status register */
  196.         struct acpi_generic_address data;       /* Address of EC data register */
  197.         u32 uid;                /* Unique ID - must be same as the EC _UID method */
  198.         u8 gpe;                 /* The GPE for the EC */
  199.         u8 id[1];               /* Full namepath of the EC in the ACPI namespace */
  200. };
  201.  
  202. /*******************************************************************************
  203.  *
  204.  * EINJ - Error Injection Table (ACPI 4.0)
  205.  *        Version 1
  206.  *
  207.  ******************************************************************************/
  208.  
  209. struct acpi_table_einj {
  210.         struct acpi_table_header header;        /* Common ACPI table header */
  211.         u32 header_length;
  212.         u8 flags;
  213.         u8 reserved[3];
  214.         u32 entries;
  215. };
  216.  
  217. /* EINJ Injection Instruction Entries (actions) */
  218.  
  219. struct acpi_einj_entry {
  220.         struct acpi_whea_header whea_header;    /* Common header for WHEA tables */
  221. };
  222.  
  223. /* Masks for Flags field above */
  224.  
  225. #define ACPI_EINJ_PRESERVE          (1)
  226.  
  227. /* Values for Action field above */
  228.  
  229. enum acpi_einj_actions {
  230.         ACPI_EINJ_BEGIN_OPERATION = 0,
  231.         ACPI_EINJ_GET_TRIGGER_TABLE = 1,
  232.         ACPI_EINJ_SET_ERROR_TYPE = 2,
  233.         ACPI_EINJ_GET_ERROR_TYPE = 3,
  234.         ACPI_EINJ_END_OPERATION = 4,
  235.         ACPI_EINJ_EXECUTE_OPERATION = 5,
  236.         ACPI_EINJ_CHECK_BUSY_STATUS = 6,
  237.         ACPI_EINJ_GET_COMMAND_STATUS = 7,
  238.         ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
  239.         ACPI_EINJ_ACTION_RESERVED = 9/* 9 and greater are reserved */
  240.         ACPI_EINJ_TRIGGER_ERROR = 0xFF  /* Except for this value */
  241. };
  242.  
  243. /* Values for Instruction field above */
  244.  
  245. enum acpi_einj_instructions {
  246.         ACPI_EINJ_READ_REGISTER = 0,
  247.         ACPI_EINJ_READ_REGISTER_VALUE = 1,
  248.         ACPI_EINJ_WRITE_REGISTER = 2,
  249.         ACPI_EINJ_WRITE_REGISTER_VALUE = 3,
  250.         ACPI_EINJ_NOOP = 4,
  251.         ACPI_EINJ_FLUSH_CACHELINE = 5,
  252.         ACPI_EINJ_INSTRUCTION_RESERVED = 6      /* 6 and greater are reserved */
  253. };
  254.  
  255. struct acpi_einj_error_type_with_addr {
  256.         u32 error_type;
  257.         u32 vendor_struct_offset;
  258.         u32 flags;
  259.         u32 apic_id;
  260.         u64 address;
  261.         u64 range;
  262.         u32 pcie_id;
  263. };
  264.  
  265. struct acpi_einj_vendor {
  266.         u32 length;
  267.         u32 pcie_id;
  268.         u16 vendor_id;
  269.         u16 device_id;
  270.         u8 revision_id;
  271.         u8 reserved[3];
  272. };
  273.  
  274. /* EINJ Trigger Error Action Table */
  275.  
  276. struct acpi_einj_trigger {
  277.         u32 header_size;
  278.         u32 revision;
  279.         u32 table_size;
  280.         u32 entry_count;
  281. };
  282.  
  283. /* Command status return values */
  284.  
  285. enum acpi_einj_command_status {
  286.         ACPI_EINJ_SUCCESS = 0,
  287.         ACPI_EINJ_FAILURE = 1,
  288.         ACPI_EINJ_INVALID_ACCESS = 2,
  289.         ACPI_EINJ_STATUS_RESERVED = 3   /* 3 and greater are reserved */
  290. };
  291.  
  292. /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
  293.  
  294. #define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
  295. #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
  296. #define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
  297. #define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
  298. #define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
  299. #define ACPI_EINJ_MEMORY_FATAL              (1<<5)
  300. #define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
  301. #define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
  302. #define ACPI_EINJ_PCIX_FATAL                (1<<8)
  303. #define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
  304. #define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
  305. #define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
  306. #define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
  307.  
  308. /*******************************************************************************
  309.  *
  310.  * ERST - Error Record Serialization Table (ACPI 4.0)
  311.  *        Version 1
  312.  *
  313.  ******************************************************************************/
  314.  
  315. struct acpi_table_erst {
  316.         struct acpi_table_header header;        /* Common ACPI table header */
  317.         u32 header_length;
  318.         u32 reserved;
  319.         u32 entries;
  320. };
  321.  
  322. /* ERST Serialization Entries (actions) */
  323.  
  324. struct acpi_erst_entry {
  325.         struct acpi_whea_header whea_header;    /* Common header for WHEA tables */
  326. };
  327.  
  328. /* Masks for Flags field above */
  329.  
  330. #define ACPI_ERST_PRESERVE          (1)
  331.  
  332. /* Values for Action field above */
  333.  
  334. enum acpi_erst_actions {
  335.         ACPI_ERST_BEGIN_WRITE = 0,
  336.         ACPI_ERST_BEGIN_READ = 1,
  337.         ACPI_ERST_BEGIN_CLEAR = 2,
  338.         ACPI_ERST_END = 3,
  339.         ACPI_ERST_SET_RECORD_OFFSET = 4,
  340.         ACPI_ERST_EXECUTE_OPERATION = 5,
  341.         ACPI_ERST_CHECK_BUSY_STATUS = 6,
  342.         ACPI_ERST_GET_COMMAND_STATUS = 7,
  343.         ACPI_ERST_GET_RECORD_ID = 8,
  344.         ACPI_ERST_SET_RECORD_ID = 9,
  345.         ACPI_ERST_GET_RECORD_COUNT = 10,
  346.         ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
  347.         ACPI_ERST_NOT_USED = 12,
  348.         ACPI_ERST_GET_ERROR_RANGE = 13,
  349.         ACPI_ERST_GET_ERROR_LENGTH = 14,
  350.         ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
  351.         ACPI_ERST_ACTION_RESERVED = 16  /* 16 and greater are reserved */
  352. };
  353.  
  354. /* Values for Instruction field above */
  355.  
  356. enum acpi_erst_instructions {
  357.         ACPI_ERST_READ_REGISTER = 0,
  358.         ACPI_ERST_READ_REGISTER_VALUE = 1,
  359.         ACPI_ERST_WRITE_REGISTER = 2,
  360.         ACPI_ERST_WRITE_REGISTER_VALUE = 3,
  361.         ACPI_ERST_NOOP = 4,
  362.         ACPI_ERST_LOAD_VAR1 = 5,
  363.         ACPI_ERST_LOAD_VAR2 = 6,
  364.         ACPI_ERST_STORE_VAR1 = 7,
  365.         ACPI_ERST_ADD = 8,
  366.         ACPI_ERST_SUBTRACT = 9,
  367.         ACPI_ERST_ADD_VALUE = 10,
  368.         ACPI_ERST_SUBTRACT_VALUE = 11,
  369.         ACPI_ERST_STALL = 12,
  370.         ACPI_ERST_STALL_WHILE_TRUE = 13,
  371.         ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
  372.         ACPI_ERST_GOTO = 15,
  373.         ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
  374.         ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
  375.         ACPI_ERST_MOVE_DATA = 18,
  376.         ACPI_ERST_INSTRUCTION_RESERVED = 19     /* 19 and greater are reserved */
  377. };
  378.  
  379. /* Command status return values */
  380.  
  381. enum acpi_erst_command_status {
  382.         ACPI_ERST_SUCESS = 0,
  383.         ACPI_ERST_NO_SPACE = 1,
  384.         ACPI_ERST_NOT_AVAILABLE = 2,
  385.         ACPI_ERST_FAILURE = 3,
  386.         ACPI_ERST_RECORD_EMPTY = 4,
  387.         ACPI_ERST_NOT_FOUND = 5,
  388.         ACPI_ERST_STATUS_RESERVED = 6   /* 6 and greater are reserved */
  389. };
  390.  
  391. /* Error Record Serialization Information */
  392.  
  393. struct acpi_erst_info {
  394.         u16 signature;          /* Should be "ER" */
  395.         u8 data[48];
  396. };
  397.  
  398. /*******************************************************************************
  399.  *
  400.  * HEST - Hardware Error Source Table (ACPI 4.0)
  401.  *        Version 1
  402.  *
  403.  ******************************************************************************/
  404.  
  405. struct acpi_table_hest {
  406.         struct acpi_table_header header;        /* Common ACPI table header */
  407.         u32 error_source_count;
  408. };
  409.  
  410. /* HEST subtable header */
  411.  
  412. struct acpi_hest_header {
  413.         u16 type;
  414.         u16 source_id;
  415. };
  416.  
  417. /* Values for Type field above for subtables */
  418.  
  419. enum acpi_hest_types {
  420.         ACPI_HEST_TYPE_IA32_CHECK = 0,
  421.         ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
  422.         ACPI_HEST_TYPE_IA32_NMI = 2,
  423.         ACPI_HEST_TYPE_NOT_USED3 = 3,
  424.         ACPI_HEST_TYPE_NOT_USED4 = 4,
  425.         ACPI_HEST_TYPE_NOT_USED5 = 5,
  426.         ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
  427.         ACPI_HEST_TYPE_AER_ENDPOINT = 7,
  428.         ACPI_HEST_TYPE_AER_BRIDGE = 8,
  429.         ACPI_HEST_TYPE_GENERIC_ERROR = 9,
  430.         ACPI_HEST_TYPE_RESERVED = 10    /* 10 and greater are reserved */
  431. };
  432.  
  433. /*
  434.  * HEST substructures contained in subtables
  435.  */
  436.  
  437. /*
  438.  * IA32 Error Bank(s) - Follows the struct acpi_hest_ia_machine_check and
  439.  * struct acpi_hest_ia_corrected structures.
  440.  */
  441. struct acpi_hest_ia_error_bank {
  442.         u8 bank_number;
  443.         u8 clear_status_on_init;
  444.         u8 status_format;
  445.         u8 reserved;
  446.         u32 control_register;
  447.         u64 control_data;
  448.         u32 status_register;
  449.         u32 address_register;
  450.         u32 misc_register;
  451. };
  452.  
  453. /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
  454.  
  455. struct acpi_hest_aer_common {
  456.         u16 reserved1;
  457.         u8 flags;
  458.         u8 enabled;
  459.         u32 records_to_preallocate;
  460.         u32 max_sections_per_record;
  461.         u32 bus;                /* Bus and Segment numbers */
  462.         u16 device;
  463.         u16 function;
  464.         u16 device_control;
  465.         u16 reserved2;
  466.         u32 uncorrectable_mask;
  467.         u32 uncorrectable_severity;
  468.         u32 correctable_mask;
  469.         u32 advanced_capabilities;
  470. };
  471.  
  472. /* Masks for HEST Flags fields */
  473.  
  474. #define ACPI_HEST_FIRMWARE_FIRST        (1)
  475. #define ACPI_HEST_GLOBAL                (1<<1)
  476.  
  477. /*
  478.  * Macros to access the bus/segment numbers in Bus field above:
  479.  *  Bus number is encoded in bits 7:0
  480.  *  Segment number is encoded in bits 23:8
  481.  */
  482. #define ACPI_HEST_BUS(bus)              ((bus) & 0xFF)
  483. #define ACPI_HEST_SEGMENT(bus)          (((bus) >> 8) & 0xFFFF)
  484.  
  485. /* Hardware Error Notification */
  486.  
  487. struct acpi_hest_notify {
  488.         u8 type;
  489.         u8 length;
  490.         u16 config_write_enable;
  491.         u32 poll_interval;
  492.         u32 vector;
  493.         u32 polling_threshold_value;
  494.         u32 polling_threshold_window;
  495.         u32 error_threshold_value;
  496.         u32 error_threshold_window;
  497. };
  498.  
  499. /* Values for Notify Type field above */
  500.  
  501. enum acpi_hest_notify_types {
  502.         ACPI_HEST_NOTIFY_POLLED = 0,
  503.         ACPI_HEST_NOTIFY_EXTERNAL = 1,
  504.         ACPI_HEST_NOTIFY_LOCAL = 2,
  505.         ACPI_HEST_NOTIFY_SCI = 3,
  506.         ACPI_HEST_NOTIFY_NMI = 4,
  507.         ACPI_HEST_NOTIFY_CMCI = 5,      /* ACPI 5.0 */
  508.         ACPI_HEST_NOTIFY_MCE = 6,       /* ACPI 5.0 */
  509.         ACPI_HEST_NOTIFY_RESERVED = 7   /* 7 and greater are reserved */
  510. };
  511.  
  512. /* Values for config_write_enable bitfield above */
  513.  
  514. #define ACPI_HEST_TYPE                  (1)
  515. #define ACPI_HEST_POLL_INTERVAL         (1<<1)
  516. #define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
  517. #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
  518. #define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
  519. #define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
  520.  
  521. /*
  522.  * HEST subtables
  523.  */
  524.  
  525. /* 0: IA32 Machine Check Exception */
  526.  
  527. struct acpi_hest_ia_machine_check {
  528.         struct acpi_hest_header header;
  529.         u16 reserved1;
  530.         u8 flags;
  531.         u8 enabled;
  532.         u32 records_to_preallocate;
  533.         u32 max_sections_per_record;
  534.         u64 global_capability_data;
  535.         u64 global_control_data;
  536.         u8 num_hardware_banks;
  537.         u8 reserved3[7];
  538. };
  539.  
  540. /* 1: IA32 Corrected Machine Check */
  541.  
  542. struct acpi_hest_ia_corrected {
  543.         struct acpi_hest_header header;
  544.         u16 reserved1;
  545.         u8 flags;
  546.         u8 enabled;
  547.         u32 records_to_preallocate;
  548.         u32 max_sections_per_record;
  549.         struct acpi_hest_notify notify;
  550.         u8 num_hardware_banks;
  551.         u8 reserved2[3];
  552. };
  553.  
  554. /* 2: IA32 Non-Maskable Interrupt */
  555.  
  556. struct acpi_hest_ia_nmi {
  557.         struct acpi_hest_header header;
  558.         u32 reserved;
  559.         u32 records_to_preallocate;
  560.         u32 max_sections_per_record;
  561.         u32 max_raw_data_length;
  562. };
  563.  
  564. /* 3,4,5: Not used */
  565.  
  566. /* 6: PCI Express Root Port AER */
  567.  
  568. struct acpi_hest_aer_root {
  569.         struct acpi_hest_header header;
  570.         struct acpi_hest_aer_common aer;
  571.         u32 root_error_command;
  572. };
  573.  
  574. /* 7: PCI Express AER (AER Endpoint) */
  575.  
  576. struct acpi_hest_aer {
  577.         struct acpi_hest_header header;
  578.         struct acpi_hest_aer_common aer;
  579. };
  580.  
  581. /* 8: PCI Express/PCI-X Bridge AER */
  582.  
  583. struct acpi_hest_aer_bridge {
  584.         struct acpi_hest_header header;
  585.         struct acpi_hest_aer_common aer;
  586.         u32 uncorrectable_mask2;
  587.         u32 uncorrectable_severity2;
  588.         u32 advanced_capabilities2;
  589. };
  590.  
  591. /* 9: Generic Hardware Error Source */
  592.  
  593. struct acpi_hest_generic {
  594.         struct acpi_hest_header header;
  595.         u16 related_source_id;
  596.         u8 reserved;
  597.         u8 enabled;
  598.         u32 records_to_preallocate;
  599.         u32 max_sections_per_record;
  600.         u32 max_raw_data_length;
  601.         struct acpi_generic_address error_status_address;
  602.         struct acpi_hest_notify notify;
  603.         u32 error_block_length;
  604. };
  605.  
  606. /* Generic Error Status block */
  607.  
  608. struct acpi_hest_generic_status {
  609.         u32 block_status;
  610.         u32 raw_data_offset;
  611.         u32 raw_data_length;
  612.         u32 data_length;
  613.         u32 error_severity;
  614. };
  615.  
  616. /* Values for block_status flags above */
  617.  
  618. #define ACPI_HEST_UNCORRECTABLE             (1)
  619. #define ACPI_HEST_CORRECTABLE               (1<<1)
  620. #define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
  621. #define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
  622. #define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4)   /* 8 bits, error count */
  623.  
  624. /* Generic Error Data entry */
  625.  
  626. struct acpi_hest_generic_data {
  627.         u8 section_type[16];
  628.         u32 error_severity;
  629.         u16 revision;
  630.         u8 validation_bits;
  631.         u8 flags;
  632.         u32 error_data_length;
  633.         u8 fru_id[16];
  634.         u8 fru_text[20];
  635. };
  636.  
  637. /*******************************************************************************
  638.  *
  639.  * MADT - Multiple APIC Description Table
  640.  *        Version 3
  641.  *
  642.  ******************************************************************************/
  643.  
  644. struct acpi_table_madt {
  645.         struct acpi_table_header header;        /* Common ACPI table header */
  646.         u32 address;            /* Physical address of local APIC */
  647.         u32 flags;
  648. };
  649.  
  650. /* Masks for Flags field above */
  651.  
  652. #define ACPI_MADT_PCAT_COMPAT       (1) /* 00: System also has dual 8259s */
  653.  
  654. /* Values for PCATCompat flag */
  655.  
  656. #define ACPI_MADT_DUAL_PIC          0
  657. #define ACPI_MADT_MULTIPLE_APIC     1
  658.  
  659. /* Values for MADT subtable type in struct acpi_subtable_header */
  660.  
  661. enum acpi_madt_type {
  662.         ACPI_MADT_TYPE_LOCAL_APIC = 0,
  663.         ACPI_MADT_TYPE_IO_APIC = 1,
  664.         ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
  665.         ACPI_MADT_TYPE_NMI_SOURCE = 3,
  666.         ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
  667.         ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
  668.         ACPI_MADT_TYPE_IO_SAPIC = 6,
  669.         ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
  670.         ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
  671.         ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
  672.         ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
  673.         ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
  674.         ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
  675.         ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
  676.         ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
  677.         ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
  678.         ACPI_MADT_TYPE_RESERVED = 16    /* 16 and greater are reserved */
  679. };
  680.  
  681. /*
  682.  * MADT Subtables, correspond to Type in struct acpi_subtable_header
  683.  */
  684.  
  685. /* 0: Processor Local APIC */
  686.  
  687. struct acpi_madt_local_apic {
  688.         struct acpi_subtable_header header;
  689.         u8 processor_id;        /* ACPI processor id */
  690.         u8 id;                  /* Processor's local APIC id */
  691.         u32 lapic_flags;
  692. };
  693.  
  694. /* 1: IO APIC */
  695.  
  696. struct acpi_madt_io_apic {
  697.         struct acpi_subtable_header header;
  698.         u8 id;                  /* I/O APIC ID */
  699.         u8 reserved;            /* reserved - must be zero */
  700.         u32 address;            /* APIC physical address */
  701.         u32 global_irq_base;    /* Global system interrupt where INTI lines start */
  702. };
  703.  
  704. /* 2: Interrupt Override */
  705.  
  706. struct acpi_madt_interrupt_override {
  707.         struct acpi_subtable_header header;
  708.         u8 bus;                 /* 0 - ISA */
  709.         u8 source_irq;          /* Interrupt source (IRQ) */
  710.         u32 global_irq;         /* Global system interrupt */
  711.         u16 inti_flags;
  712. };
  713.  
  714. /* 3: NMI Source */
  715.  
  716. struct acpi_madt_nmi_source {
  717.         struct acpi_subtable_header header;
  718.         u16 inti_flags;
  719.         u32 global_irq;         /* Global system interrupt */
  720. };
  721.  
  722. /* 4: Local APIC NMI */
  723.  
  724. struct acpi_madt_local_apic_nmi {
  725.         struct acpi_subtable_header header;
  726.         u8 processor_id;        /* ACPI processor id */
  727.         u16 inti_flags;
  728.         u8 lint;                /* LINTn to which NMI is connected */
  729. };
  730.  
  731. /* 5: Address Override */
  732.  
  733. struct acpi_madt_local_apic_override {
  734.         struct acpi_subtable_header header;
  735.         u16 reserved;           /* Reserved, must be zero */
  736.         u64 address;            /* APIC physical address */
  737. };
  738.  
  739. /* 6: I/O Sapic */
  740.  
  741. struct acpi_madt_io_sapic {
  742.         struct acpi_subtable_header header;
  743.         u8 id;                  /* I/O SAPIC ID */
  744.         u8 reserved;            /* Reserved, must be zero */
  745.         u32 global_irq_base;    /* Global interrupt for SAPIC start */
  746.         u64 address;            /* SAPIC physical address */
  747. };
  748.  
  749. /* 7: Local Sapic */
  750.  
  751. struct acpi_madt_local_sapic {
  752.         struct acpi_subtable_header header;
  753.         u8 processor_id;        /* ACPI processor id */
  754.         u8 id;                  /* SAPIC ID */
  755.         u8 eid;                 /* SAPIC EID */
  756.         u8 reserved[3];         /* Reserved, must be zero */
  757.         u32 lapic_flags;
  758.         u32 uid;                /* Numeric UID - ACPI 3.0 */
  759.         char uid_string[1];     /* String UID  - ACPI 3.0 */
  760. };
  761.  
  762. /* 8: Platform Interrupt Source */
  763.  
  764. struct acpi_madt_interrupt_source {
  765.         struct acpi_subtable_header header;
  766.         u16 inti_flags;
  767.         u8 type;                /* 1=PMI, 2=INIT, 3=corrected */
  768.         u8 id;                  /* Processor ID */
  769.         u8 eid;                 /* Processor EID */
  770.         u8 io_sapic_vector;     /* Vector value for PMI interrupts */
  771.         u32 global_irq;         /* Global system interrupt */
  772.         u32 flags;              /* Interrupt Source Flags */
  773. };
  774.  
  775. /* Masks for Flags field above */
  776.  
  777. #define ACPI_MADT_CPEI_OVERRIDE     (1)
  778.  
  779. /* 9: Processor Local X2APIC (ACPI 4.0) */
  780.  
  781. struct acpi_madt_local_x2apic {
  782.         struct acpi_subtable_header header;
  783.         u16 reserved;           /* reserved - must be zero */
  784.         u32 local_apic_id;      /* Processor x2APIC ID  */
  785.         u32 lapic_flags;
  786.         u32 uid;                /* ACPI processor UID */
  787. };
  788.  
  789. /* 10: Local X2APIC NMI (ACPI 4.0) */
  790.  
  791. struct acpi_madt_local_x2apic_nmi {
  792.         struct acpi_subtable_header header;
  793.         u16 inti_flags;
  794.         u32 uid;                /* ACPI processor UID */
  795.         u8 lint;                /* LINTn to which NMI is connected */
  796.         u8 reserved[3];         /* reserved - must be zero */
  797. };
  798.  
  799. /* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */
  800.  
  801. struct acpi_madt_generic_interrupt {
  802.         struct acpi_subtable_header header;
  803.         u16 reserved;           /* reserved - must be zero */
  804.         u32 cpu_interface_number;
  805.         u32 uid;
  806.         u32 flags;
  807.         u32 parking_version;
  808.         u32 performance_interrupt;
  809.         u64 parked_address;
  810.         u64 base_address;
  811.         u64 gicv_base_address;
  812.         u64 gich_base_address;
  813.         u32 vgic_interrupt;
  814.         u64 gicr_base_address;
  815.         u64 arm_mpidr;
  816.         u8 efficiency_class;
  817.         u8 reserved2[3];
  818. };
  819.  
  820. /* Masks for Flags field above */
  821.  
  822. /* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
  823. #define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
  824. #define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
  825.  
  826. /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
  827.  
  828. struct acpi_madt_generic_distributor {
  829.         struct acpi_subtable_header header;
  830.         u16 reserved;           /* reserved - must be zero */
  831.         u32 gic_id;
  832.         u64 base_address;
  833.         u32 global_irq_base;
  834.         u8 version;
  835.         u8 reserved2[3];        /* reserved - must be zero */
  836. };
  837.  
  838. /* Values for Version field above */
  839.  
  840. enum acpi_madt_gic_version {
  841.         ACPI_MADT_GIC_VERSION_NONE = 0,
  842.         ACPI_MADT_GIC_VERSION_V1 = 1,
  843.         ACPI_MADT_GIC_VERSION_V2 = 2,
  844.         ACPI_MADT_GIC_VERSION_V3 = 3,
  845.         ACPI_MADT_GIC_VERSION_V4 = 4,
  846.         ACPI_MADT_GIC_VERSION_RESERVED = 5      /* 5 and greater are reserved */
  847. };
  848.  
  849. /* 13: Generic MSI Frame (ACPI 5.1) */
  850.  
  851. struct acpi_madt_generic_msi_frame {
  852.         struct acpi_subtable_header header;
  853.         u16 reserved;           /* reserved - must be zero */
  854.         u32 msi_frame_id;
  855.         u64 base_address;
  856.         u32 flags;
  857.         u16 spi_count;
  858.         u16 spi_base;
  859. };
  860.  
  861. /* Masks for Flags field above */
  862.  
  863. #define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
  864.  
  865. /* 14: Generic Redistributor (ACPI 5.1) */
  866.  
  867. struct acpi_madt_generic_redistributor {
  868.         struct acpi_subtable_header header;
  869.         u16 reserved;           /* reserved - must be zero */
  870.         u64 base_address;
  871.         u32 length;
  872. };
  873.  
  874. /* 15: Generic Translator (ACPI 6.0) */
  875.  
  876. struct acpi_madt_generic_translator {
  877.         struct acpi_subtable_header header;
  878.         u16 reserved;           /* reserved - must be zero */
  879.         u32 translation_id;
  880.         u64 base_address;
  881.         u32 reserved2;
  882. };
  883.  
  884. /*
  885.  * Common flags fields for MADT subtables
  886.  */
  887.  
  888. /* MADT Local APIC flags */
  889.  
  890. #define ACPI_MADT_ENABLED           (1) /* 00: Processor is usable if set */
  891.  
  892. /* MADT MPS INTI flags (inti_flags) */
  893.  
  894. #define ACPI_MADT_POLARITY_MASK     (3) /* 00-01: Polarity of APIC I/O input signals */
  895. #define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
  896.  
  897. /* Values for MPS INTI flags */
  898.  
  899. #define ACPI_MADT_POLARITY_CONFORMS       0
  900. #define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
  901. #define ACPI_MADT_POLARITY_RESERVED       2
  902. #define ACPI_MADT_POLARITY_ACTIVE_LOW     3
  903.  
  904. #define ACPI_MADT_TRIGGER_CONFORMS        (0)
  905. #define ACPI_MADT_TRIGGER_EDGE            (1<<2)
  906. #define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
  907. #define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
  908.  
  909. /*******************************************************************************
  910.  *
  911.  * MSCT - Maximum System Characteristics Table (ACPI 4.0)
  912.  *        Version 1
  913.  *
  914.  ******************************************************************************/
  915.  
  916. struct acpi_table_msct {
  917.         struct acpi_table_header header;        /* Common ACPI table header */
  918.         u32 proximity_offset;   /* Location of proximity info struct(s) */
  919.         u32 max_proximity_domains;      /* Max number of proximity domains */
  920.         u32 max_clock_domains;  /* Max number of clock domains */
  921.         u64 max_address;        /* Max physical address in system */
  922. };
  923.  
  924. /* subtable - Maximum Proximity Domain Information. Version 1 */
  925.  
  926. struct acpi_msct_proximity {
  927.         u8 revision;
  928.         u8 length;
  929.         u32 range_start;        /* Start of domain range */
  930.         u32 range_end;          /* End of domain range */
  931.         u32 processor_capacity;
  932.         u64 memory_capacity;    /* In bytes */
  933. };
  934.  
  935. /*******************************************************************************
  936.  *
  937.  * NFIT - NVDIMM Interface Table (ACPI 6.0)
  938.  *        Version 1
  939.  *
  940.  ******************************************************************************/
  941.  
  942. struct acpi_table_nfit {
  943.         struct acpi_table_header header;        /* Common ACPI table header */
  944.         u32 reserved;           /* Reserved, must be zero */
  945. };
  946.  
  947. /* Subtable header for NFIT */
  948.  
  949. struct acpi_nfit_header {
  950.         u16 type;
  951.         u16 length;
  952. };
  953.  
  954. /* Values for subtable type in struct acpi_nfit_header */
  955.  
  956. enum acpi_nfit_type {
  957.         ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
  958.         ACPI_NFIT_TYPE_MEMORY_MAP = 1,
  959.         ACPI_NFIT_TYPE_INTERLEAVE = 2,
  960.         ACPI_NFIT_TYPE_SMBIOS = 3,
  961.         ACPI_NFIT_TYPE_CONTROL_REGION = 4,
  962.         ACPI_NFIT_TYPE_DATA_REGION = 5,
  963.         ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
  964.         ACPI_NFIT_TYPE_RESERVED = 7     /* 7 and greater are reserved */
  965. };
  966.  
  967. /*
  968.  * NFIT Subtables
  969.  */
  970.  
  971. /* 0: System Physical Address Range Structure */
  972.  
  973. struct acpi_nfit_system_address {
  974.         struct acpi_nfit_header header;
  975.         u16 range_index;
  976.         u16 flags;
  977.         u32 reserved;           /* Reseved, must be zero */
  978.         u32 proximity_domain;
  979.         u8 range_guid[16];
  980.         u64 address;
  981.         u64 length;
  982.         u64 memory_mapping;
  983. };
  984.  
  985. /* Flags */
  986.  
  987. #define ACPI_NFIT_ADD_ONLINE_ONLY       (1)     /* 00: Add/Online Operation Only */
  988. #define ACPI_NFIT_PROXIMITY_VALID       (1<<1)  /* 01: Proximity Domain Valid */
  989.  
  990. /* Range Type GUIDs appear in the include/acuuid.h file */
  991.  
  992. /* 1: Memory Device to System Address Range Map Structure */
  993.  
  994. struct acpi_nfit_memory_map {
  995.         struct acpi_nfit_header header;
  996.         u32 device_handle;
  997.         u16 physical_id;
  998.         u16 region_id;
  999.         u16 range_index;
  1000.         u16 region_index;
  1001.         u64 region_size;
  1002.         u64 region_offset;
  1003.         u64 address;
  1004.         u16 interleave_index;
  1005.         u16 interleave_ways;
  1006.         u16 flags;
  1007.         u16 reserved;           /* Reserved, must be zero */
  1008. };
  1009.  
  1010. /* Flags */
  1011.  
  1012. #define ACPI_NFIT_MEM_SAVE_FAILED       (1)     /* 00: Last SAVE to Memory Device failed */
  1013. #define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)  /* 01: Last RESTORE from Memory Device failed */
  1014. #define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)  /* 02: Platform flush failed */
  1015. #define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)  /* 03: Memory Device is not armed */
  1016. #define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)  /* 04: Memory Device observed SMART/health events */
  1017. #define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)  /* 05: SMART/health events enabled */
  1018.  
  1019. /* 2: Interleave Structure */
  1020.  
  1021. struct acpi_nfit_interleave {
  1022.         struct acpi_nfit_header header;
  1023.         u16 interleave_index;
  1024.         u16 reserved;           /* Reserved, must be zero */
  1025.         u32 line_count;
  1026.         u32 line_size;
  1027.         u32 line_offset[1];     /* Variable length */
  1028. };
  1029.  
  1030. /* 3: SMBIOS Management Information Structure */
  1031.  
  1032. struct acpi_nfit_smbios {
  1033.         struct acpi_nfit_header header;
  1034.         u32 reserved;           /* Reserved, must be zero */
  1035.         u8 data[1];             /* Variable length */
  1036. };
  1037.  
  1038. /* 4: NVDIMM Control Region Structure */
  1039.  
  1040. struct acpi_nfit_control_region {
  1041.         struct acpi_nfit_header header;
  1042.         u16 region_index;
  1043.         u16 vendor_id;
  1044.         u16 device_id;
  1045.         u16 revision_id;
  1046.         u16 subsystem_vendor_id;
  1047.         u16 subsystem_device_id;
  1048.         u16 subsystem_revision_id;
  1049.         u8 reserved[6];         /* Reserved, must be zero */
  1050.         u32 serial_number;
  1051.         u16 code;
  1052.         u16 windows;
  1053.         u64 window_size;
  1054.         u64 command_offset;
  1055.         u64 command_size;
  1056.         u64 status_offset;
  1057.         u64 status_size;
  1058.         u16 flags;
  1059.         u8 reserved1[6];        /* Reserved, must be zero */
  1060. };
  1061.  
  1062. /* Flags */
  1063.  
  1064. #define ACPI_NFIT_CONTROL_BUFFERED      (1)     /* Block Data Windows implementation is buffered */
  1065.  
  1066. /* 5: NVDIMM Block Data Window Region Structure */
  1067.  
  1068. struct acpi_nfit_data_region {
  1069.         struct acpi_nfit_header header;
  1070.         u16 region_index;
  1071.         u16 windows;
  1072.         u64 offset;
  1073.         u64 size;
  1074.         u64 capacity;
  1075.         u64 start_address;
  1076. };
  1077.  
  1078. /* 6: Flush Hint Address Structure */
  1079.  
  1080. struct acpi_nfit_flush_address {
  1081.         struct acpi_nfit_header header;
  1082.         u32 device_handle;
  1083.         u16 hint_count;
  1084.         u8 reserved[6];         /* Reserved, must be zero */
  1085.         u64 hint_address[1];    /* Variable length */
  1086. };
  1087.  
  1088. /*******************************************************************************
  1089.  *
  1090.  * SBST - Smart Battery Specification Table
  1091.  *        Version 1
  1092.  *
  1093.  ******************************************************************************/
  1094.  
  1095. struct acpi_table_sbst {
  1096.         struct acpi_table_header header;        /* Common ACPI table header */
  1097.         u32 warning_level;
  1098.         u32 low_level;
  1099.         u32 critical_level;
  1100. };
  1101.  
  1102. /*******************************************************************************
  1103.  *
  1104.  * SLIT - System Locality Distance Information Table
  1105.  *        Version 1
  1106.  *
  1107.  ******************************************************************************/
  1108.  
  1109. struct acpi_table_slit {
  1110.         struct acpi_table_header header;        /* Common ACPI table header */
  1111.         u64 locality_count;
  1112.         u8 entry[1];            /* Real size = localities^2 */
  1113. };
  1114.  
  1115. /*******************************************************************************
  1116.  *
  1117.  * SRAT - System Resource Affinity Table
  1118.  *        Version 3
  1119.  *
  1120.  ******************************************************************************/
  1121.  
  1122. struct acpi_table_srat {
  1123.         struct acpi_table_header header;        /* Common ACPI table header */
  1124.         u32 table_revision;     /* Must be value '1' */
  1125.         u64 reserved;           /* Reserved, must be zero */
  1126. };
  1127.  
  1128. /* Values for subtable type in struct acpi_subtable_header */
  1129.  
  1130. enum acpi_srat_type {
  1131.         ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
  1132.         ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
  1133.         ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
  1134.         ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
  1135.         ACPI_SRAT_TYPE_RESERVED = 4     /* 4 and greater are reserved */
  1136. };
  1137.  
  1138. /*
  1139.  * SRAT Subtables, correspond to Type in struct acpi_subtable_header
  1140.  */
  1141.  
  1142. /* 0: Processor Local APIC/SAPIC Affinity */
  1143.  
  1144. struct acpi_srat_cpu_affinity {
  1145.         struct acpi_subtable_header header;
  1146.         u8 proximity_domain_lo;
  1147.         u8 apic_id;
  1148.         u32 flags;
  1149.         u8 local_sapic_eid;
  1150.         u8 proximity_domain_hi[3];
  1151.         u32 clock_domain;
  1152. };
  1153.  
  1154. /* Flags */
  1155.  
  1156. #define ACPI_SRAT_CPU_USE_AFFINITY  (1) /* 00: Use affinity structure */
  1157.  
  1158. /* 1: Memory Affinity */
  1159.  
  1160. struct acpi_srat_mem_affinity {
  1161.         struct acpi_subtable_header header;
  1162.         u32 proximity_domain;
  1163.         u16 reserved;           /* Reserved, must be zero */
  1164.         u64 base_address;
  1165.         u64 length;
  1166.        u32 reserved1;
  1167.         u32 flags;
  1168.        u64 reserved2;          /* Reserved, must be zero */
  1169. };
  1170.  
  1171. /* Flags */
  1172.  
  1173. #define ACPI_SRAT_MEM_ENABLED       (1) /* 00: Use affinity structure */
  1174. #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)      /* 01: Memory region is hot pluggable */
  1175. #define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)      /* 02: Memory region is non-volatile */
  1176.  
  1177. /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
  1178.  
  1179. struct acpi_srat_x2apic_cpu_affinity {
  1180.         struct acpi_subtable_header header;
  1181.         u16 reserved;           /* Reserved, must be zero */
  1182.         u32 proximity_domain;
  1183.         u32 apic_id;
  1184.         u32 flags;
  1185.         u32 clock_domain;
  1186.         u32 reserved2;
  1187. };
  1188.  
  1189. /* Flags for struct acpi_srat_cpu_affinity and struct acpi_srat_x2apic_cpu_affinity */
  1190.  
  1191. #define ACPI_SRAT_CPU_ENABLED       (1) /* 00: Use affinity structure */
  1192.  
  1193. /* 3: GICC Affinity (ACPI 5.1) */
  1194.  
  1195. struct acpi_srat_gicc_affinity {
  1196.         struct acpi_subtable_header header;
  1197.         u32 proximity_domain;
  1198.         u32 acpi_processor_uid;
  1199.         u32 flags;
  1200.         u32 clock_domain;
  1201. };
  1202.  
  1203. /* Flags for struct acpi_srat_gicc_affinity */
  1204.  
  1205. #define ACPI_SRAT_GICC_ENABLED     (1)  /* 00: Use affinity structure */
  1206.  
  1207. /* Reset to default packing */
  1208.  
  1209. #pragma pack()
  1210.  
  1211. #endif                          /* __ACTBL1_H__ */
  1212.