Subversion Repositories Kolibri OS

Rev

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

  1. /******************************************************************************
  2.  *
  3.  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
  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 __ACTBL2_H__
  45. #define __ACTBL2_H__
  46.  
  47. /*******************************************************************************
  48.  *
  49.  * Additional ACPI Tables (2)
  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.  * Generally, the tables in this file are defined by third-party specifications,
  55.  * and are not defined directly by the ACPI specification itself.
  56.  *
  57.  ******************************************************************************/
  58.  
  59. /*
  60.  * Values for description table header signatures for tables defined in this
  61.  * file. Useful because they make it more difficult to inadvertently type in
  62.  * the wrong signature.
  63.  */
  64. #define ACPI_SIG_ASF            "ASF!"  /* Alert Standard Format table */
  65. #define ACPI_SIG_BOOT           "BOOT"  /* Simple Boot Flag Table */
  66. #define ACPI_SIG_CSRT           "CSRT"  /* Core System Resource Table */
  67. #define ACPI_SIG_DBG2           "DBG2"  /* Debug Port table type 2 */
  68. #define ACPI_SIG_DBGP           "DBGP"  /* Debug Port table */
  69. #define ACPI_SIG_DMAR           "DMAR"  /* DMA Remapping table */
  70. #define ACPI_SIG_HPET           "HPET"  /* High Precision Event Timer table */
  71. #define ACPI_SIG_IBFT           "IBFT"  /* iSCSI Boot Firmware Table */
  72. #define ACPI_SIG_IORT           "IORT"  /* IO Remapping Table */
  73. #define ACPI_SIG_IVRS           "IVRS"  /* I/O Virtualization Reporting Structure */
  74. #define ACPI_SIG_LPIT           "LPIT"  /* Low Power Idle Table */
  75. #define ACPI_SIG_MCFG           "MCFG"  /* PCI Memory Mapped Configuration table */
  76. #define ACPI_SIG_MCHI           "MCHI"  /* Management Controller Host Interface table */
  77. #define ACPI_SIG_MSDM           "MSDM"  /* Microsoft Data Management Table */
  78. #define ACPI_SIG_MTMR           "MTMR"  /* MID Timer table */
  79. #define ACPI_SIG_SLIC           "SLIC"  /* Software Licensing Description Table */
  80. #define ACPI_SIG_SPCR           "SPCR"  /* Serial Port Console Redirection table */
  81. #define ACPI_SIG_SPMI           "SPMI"  /* Server Platform Management Interface table */
  82. #define ACPI_SIG_TCPA           "TCPA"  /* Trusted Computing Platform Alliance table */
  83. #define ACPI_SIG_TPM2           "TPM2"  /* Trusted Platform Module 2.0 H/W interface table */
  84. #define ACPI_SIG_UEFI           "UEFI"  /* Uefi Boot Optimization Table */
  85. #define ACPI_SIG_VRTC           "VRTC"  /* Virtual Real Time Clock Table */
  86. #define ACPI_SIG_WAET           "WAET"  /* Windows ACPI Emulated devices Table */
  87. #define ACPI_SIG_WDAT           "WDAT"  /* Watchdog Action Table */
  88. #define ACPI_SIG_WDDT           "WDDT"  /* Watchdog Timer Description Table */
  89. #define ACPI_SIG_WDRT           "WDRT"  /* Watchdog Resource Table */
  90.  
  91. #ifdef ACPI_UNDEFINED_TABLES
  92. /*
  93.  * These tables have been seen in the field, but no definition has been found
  94.  */
  95. #define ACPI_SIG_ATKG           "ATKG"
  96. #define ACPI_SIG_GSCI           "GSCI"  /* GMCH SCI table */
  97. #define ACPI_SIG_IEIT           "IEIT"
  98. #endif
  99.  
  100. /*
  101.  * All tables must be byte-packed to match the ACPI specification, since
  102.  * the tables are provided by the system BIOS.
  103.  */
  104. #pragma pack(1)
  105.  
  106. /*
  107.  * Note: C bitfields are not used for this reason:
  108.  *
  109.  * "Bitfields are great and easy to read, but unfortunately the C language
  110.  * does not specify the layout of bitfields in memory, which means they are
  111.  * essentially useless for dealing with packed data in on-disk formats or
  112.  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
  113.  * this decision was a design error in C. Ritchie could have picked an order
  114.  * and stuck with it." Norman Ramsey.
  115.  * See http://stackoverflow.com/a/1053662/41661
  116.  */
  117.  
  118. /*******************************************************************************
  119.  *
  120.  * ASF - Alert Standard Format table (Signature "ASF!")
  121.  *       Revision 0x10
  122.  *
  123.  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
  124.  *
  125.  ******************************************************************************/
  126.  
  127. struct acpi_table_asf {
  128.         struct acpi_table_header header;        /* Common ACPI table header */
  129. };
  130.  
  131. /* ASF subtable header */
  132.  
  133. struct acpi_asf_header {
  134.         u8 type;
  135.         u8 reserved;
  136.         u16 length;
  137. };
  138.  
  139. /* Values for Type field above */
  140.  
  141. enum acpi_asf_type {
  142.         ACPI_ASF_TYPE_INFO = 0,
  143.         ACPI_ASF_TYPE_ALERT = 1,
  144.         ACPI_ASF_TYPE_CONTROL = 2,
  145.         ACPI_ASF_TYPE_BOOT = 3,
  146.         ACPI_ASF_TYPE_ADDRESS = 4,
  147.         ACPI_ASF_TYPE_RESERVED = 5
  148. };
  149.  
  150. /*
  151.  * ASF subtables
  152.  */
  153.  
  154. /* 0: ASF Information */
  155.  
  156. struct acpi_asf_info {
  157.         struct acpi_asf_header header;
  158.         u8 min_reset_value;
  159.         u8 min_poll_interval;
  160.         u16 system_id;
  161.         u32 mfg_id;
  162.         u8 flags;
  163.         u8 reserved2[3];
  164. };
  165.  
  166. /* Masks for Flags field above */
  167.  
  168. #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
  169.  
  170. /* 1: ASF Alerts */
  171.  
  172. struct acpi_asf_alert {
  173.         struct acpi_asf_header header;
  174.         u8 assert_mask;
  175.         u8 deassert_mask;
  176.         u8 alerts;
  177.         u8 data_length;
  178. };
  179.  
  180. struct acpi_asf_alert_data {
  181.         u8 address;
  182.         u8 command;
  183.         u8 mask;
  184.         u8 value;
  185.         u8 sensor_type;
  186.         u8 type;
  187.         u8 offset;
  188.         u8 source_type;
  189.         u8 severity;
  190.         u8 sensor_number;
  191.         u8 entity;
  192.         u8 instance;
  193. };
  194.  
  195. /* 2: ASF Remote Control */
  196.  
  197. struct acpi_asf_remote {
  198.         struct acpi_asf_header header;
  199.         u8 controls;
  200.         u8 data_length;
  201.         u16 reserved2;
  202. };
  203.  
  204. struct acpi_asf_control_data {
  205.         u8 function;
  206.         u8 address;
  207.         u8 command;
  208.         u8 value;
  209. };
  210.  
  211. /* 3: ASF RMCP Boot Options */
  212.  
  213. struct acpi_asf_rmcp {
  214.         struct acpi_asf_header header;
  215.         u8 capabilities[7];
  216.         u8 completion_code;
  217.         u32 enterprise_id;
  218.         u8 command;
  219.         u16 parameter;
  220.         u16 boot_options;
  221.         u16 oem_parameters;
  222. };
  223.  
  224. /* 4: ASF Address */
  225.  
  226. struct acpi_asf_address {
  227.         struct acpi_asf_header header;
  228.         u8 eprom_address;
  229.         u8 devices;
  230. };
  231.  
  232. /*******************************************************************************
  233.  *
  234.  * BOOT - Simple Boot Flag Table
  235.  *        Version 1
  236.  *
  237.  * Conforms to the "Simple Boot Flag Specification", Version 2.1
  238.  *
  239.  ******************************************************************************/
  240.  
  241. struct acpi_table_boot {
  242.         struct acpi_table_header header;        /* Common ACPI table header */
  243.         u8 cmos_index;          /* Index in CMOS RAM for the boot register */
  244.         u8 reserved[3];
  245. };
  246.  
  247. /*******************************************************************************
  248.  *
  249.  * CSRT - Core System Resource Table
  250.  *        Version 0
  251.  *
  252.  * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
  253.  *
  254.  ******************************************************************************/
  255.  
  256. struct acpi_table_csrt {
  257.         struct acpi_table_header header;        /* Common ACPI table header */
  258. };
  259.  
  260. /* Resource Group subtable */
  261.  
  262. struct acpi_csrt_group {
  263.         u32 length;
  264.         u32 vendor_id;
  265.         u32 subvendor_id;
  266.         u16 device_id;
  267.         u16 subdevice_id;
  268.         u16 revision;
  269.         u16 reserved;
  270.         u32 shared_info_length;
  271.  
  272.         /* Shared data immediately follows (Length = shared_info_length) */
  273. };
  274.  
  275. /* Shared Info subtable */
  276.  
  277. struct acpi_csrt_shared_info {
  278.         u16 major_version;
  279.         u16 minor_version;
  280.         u32 mmio_base_low;
  281.         u32 mmio_base_high;
  282.         u32 gsi_interrupt;
  283.         u8 interrupt_polarity;
  284.         u8 interrupt_mode;
  285.         u8 num_channels;
  286.         u8 dma_address_width;
  287.         u16 base_request_line;
  288.         u16 num_handshake_signals;
  289.         u32 max_block_size;
  290.  
  291.         /* Resource descriptors immediately follow (Length = Group length - shared_info_length) */
  292. };
  293.  
  294. /* Resource Descriptor subtable */
  295.  
  296. struct acpi_csrt_descriptor {
  297.         u32 length;
  298.         u16 type;
  299.         u16 subtype;
  300.         u32 uid;
  301.  
  302.         /* Resource-specific information immediately follows */
  303. };
  304.  
  305. /* Resource Types */
  306.  
  307. #define ACPI_CSRT_TYPE_INTERRUPT    0x0001
  308. #define ACPI_CSRT_TYPE_TIMER        0x0002
  309. #define ACPI_CSRT_TYPE_DMA          0x0003
  310.  
  311. /* Resource Subtypes */
  312.  
  313. #define ACPI_CSRT_XRUPT_LINE        0x0000
  314. #define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
  315. #define ACPI_CSRT_TIMER             0x0000
  316. #define ACPI_CSRT_DMA_CHANNEL       0x0000
  317. #define ACPI_CSRT_DMA_CONTROLLER    0x0001
  318.  
  319. /*******************************************************************************
  320.  *
  321.  * DBG2 - Debug Port Table 2
  322.  *        Version 0 (Both main table and subtables)
  323.  *
  324.  * Conforms to "Microsoft Debug Port Table 2 (DBG2)", May 22 2012.
  325.  *
  326.  ******************************************************************************/
  327.  
  328. struct acpi_table_dbg2 {
  329.         struct acpi_table_header header;        /* Common ACPI table header */
  330.         u32 info_offset;
  331.         u32 info_count;
  332. };
  333.  
  334. struct acpi_dbg2_header {
  335.         u32 info_offset;
  336.         u32 info_count;
  337. };
  338.  
  339. /* Debug Device Information Subtable */
  340.  
  341. struct acpi_dbg2_device {
  342.         u8 revision;
  343.         u16 length;
  344.         u8 register_count;      /* Number of base_address registers */
  345.         u16 namepath_length;
  346.         u16 namepath_offset;
  347.         u16 oem_data_length;
  348.         u16 oem_data_offset;
  349.         u16 port_type;
  350.         u16 port_subtype;
  351.         u16 reserved;
  352.         u16 base_address_offset;
  353.         u16 address_size_offset;
  354.         /*
  355.          * Data that follows:
  356.          *    base_address (required) - Each in 12-byte Generic Address Structure format.
  357.          *    address_size (required) - Array of u32 sizes corresponding to each base_address register.
  358.          *    Namepath    (required) - Null terminated string. Single dot if not supported.
  359.          *    oem_data    (optional) - Length is oem_data_length.
  360.          */
  361. };
  362.  
  363. /* Types for port_type field above */
  364.  
  365. #define ACPI_DBG2_SERIAL_PORT       0x8000
  366. #define ACPI_DBG2_1394_PORT         0x8001
  367. #define ACPI_DBG2_USB_PORT          0x8002
  368. #define ACPI_DBG2_NET_PORT          0x8003
  369.  
  370. /* Subtypes for port_subtype field above */
  371.  
  372. #define ACPI_DBG2_16550_COMPATIBLE  0x0000
  373. #define ACPI_DBG2_16550_SUBSET      0x0001
  374.  
  375. #define ACPI_DBG2_1394_STANDARD     0x0000
  376.  
  377. #define ACPI_DBG2_USB_XHCI          0x0000
  378. #define ACPI_DBG2_USB_EHCI          0x0001
  379.  
  380. /*******************************************************************************
  381.  *
  382.  * DBGP - Debug Port table
  383.  *        Version 1
  384.  *
  385.  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
  386.  *
  387.  ******************************************************************************/
  388.  
  389. struct acpi_table_dbgp {
  390.         struct acpi_table_header header;        /* Common ACPI table header */
  391.         u8 type;                /* 0=full 16550, 1=subset of 16550 */
  392.         u8 reserved[3];
  393.         struct acpi_generic_address debug_port;
  394. };
  395.  
  396. /*******************************************************************************
  397.  *
  398.  * DMAR - DMA Remapping table
  399.  *        Version 1
  400.  *
  401.  * Conforms to "Intel Virtualization Technology for Directed I/O",
  402.  * Version 2.2, Sept. 2013
  403.  *
  404.  ******************************************************************************/
  405.  
  406. struct acpi_table_dmar {
  407.         struct acpi_table_header header;        /* Common ACPI table header */
  408.         u8 width;               /* Host Address Width */
  409.         u8 flags;
  410.         u8 reserved[10];
  411. };
  412.  
  413. /* Masks for Flags field above */
  414.  
  415. #define ACPI_DMAR_INTR_REMAP        (1)
  416.  
  417. /* DMAR subtable header */
  418.  
  419. struct acpi_dmar_header {
  420.         u16 type;
  421.         u16 length;
  422. };
  423.  
  424. /* Values for subtable type in struct acpi_dmar_header */
  425.  
  426. enum acpi_dmar_type {
  427.         ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
  428.         ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
  429.         ACPI_DMAR_TYPE_ROOT_ATS = 2,
  430.         ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3,
  431.         ACPI_DMAR_TYPE_NAMESPACE = 4,
  432.         ACPI_DMAR_TYPE_RESERVED = 5     /* 5 and greater are reserved */
  433. };
  434.  
  435. /* DMAR Device Scope structure */
  436.  
  437. struct acpi_dmar_device_scope {
  438.         u8 entry_type;
  439.         u8 length;
  440.         u16 reserved;
  441.         u8 enumeration_id;
  442.         u8 bus;
  443. };
  444.  
  445. /* Values for entry_type in struct acpi_dmar_device_scope - device types */
  446.  
  447. enum acpi_dmar_scope_type {
  448.         ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
  449.         ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
  450.         ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
  451.         ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
  452.         ACPI_DMAR_SCOPE_TYPE_HPET = 4,
  453.         ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5,
  454.         ACPI_DMAR_SCOPE_TYPE_RESERVED = 6       /* 6 and greater are reserved */
  455. };
  456.  
  457. struct acpi_dmar_pci_path {
  458.         u8 device;
  459.         u8 function;
  460. };
  461.  
  462. /*
  463.  * DMAR Subtables, correspond to Type in struct acpi_dmar_header
  464.  */
  465.  
  466. /* 0: Hardware Unit Definition */
  467.  
  468. struct acpi_dmar_hardware_unit {
  469.         struct acpi_dmar_header header;
  470.         u8 flags;
  471.         u8 reserved;
  472.         u16 segment;
  473.         u64 address;            /* Register Base Address */
  474. };
  475.  
  476. /* Masks for Flags field above */
  477.  
  478. #define ACPI_DMAR_INCLUDE_ALL       (1)
  479.  
  480. /* 1: Reserved Memory Defininition */
  481.  
  482. struct acpi_dmar_reserved_memory {
  483.         struct acpi_dmar_header header;
  484.         u16 reserved;
  485.         u16 segment;
  486.         u64 base_address;       /* 4K aligned base address */
  487.         u64 end_address;        /* 4K aligned limit address */
  488. };
  489.  
  490. /* Masks for Flags field above */
  491.  
  492. #define ACPI_DMAR_ALLOW_ALL         (1)
  493.  
  494. /* 2: Root Port ATS Capability Reporting Structure */
  495.  
  496. struct acpi_dmar_atsr {
  497.         struct acpi_dmar_header header;
  498.         u8 flags;
  499.         u8 reserved;
  500.         u16 segment;
  501. };
  502.  
  503. /* Masks for Flags field above */
  504.  
  505. #define ACPI_DMAR_ALL_PORTS         (1)
  506.  
  507. /* 3: Remapping Hardware Static Affinity Structure */
  508.  
  509. struct acpi_dmar_rhsa {
  510.         struct acpi_dmar_header header;
  511.         u32 reserved;
  512.         u64 base_address;
  513.         u32 proximity_domain;
  514. };
  515.  
  516. /* 4: ACPI Namespace Device Declaration Structure */
  517.  
  518. struct acpi_dmar_andd {
  519.         struct acpi_dmar_header header;
  520.         u8 reserved[3];
  521.         u8 device_number;
  522.         char device_name[1];
  523. };
  524.  
  525. /*******************************************************************************
  526.  *
  527.  * HPET - High Precision Event Timer table
  528.  *        Version 1
  529.  *
  530.  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
  531.  * Version 1.0a, October 2004
  532.  *
  533.  ******************************************************************************/
  534.  
  535. struct acpi_table_hpet {
  536.         struct acpi_table_header header;        /* Common ACPI table header */
  537.         u32 id;                 /* Hardware ID of event timer block */
  538.         struct acpi_generic_address address;    /* Address of event timer block */
  539.         u8 sequence;            /* HPET sequence number */
  540.         u16 minimum_tick;       /* Main counter min tick, periodic mode */
  541.         u8 flags;
  542. };
  543.  
  544. /* Masks for Flags field above */
  545.  
  546. #define ACPI_HPET_PAGE_PROTECT_MASK (3)
  547.  
  548. /* Values for Page Protect flags */
  549.  
  550. enum acpi_hpet_page_protect {
  551.         ACPI_HPET_NO_PAGE_PROTECT = 0,
  552.         ACPI_HPET_PAGE_PROTECT4 = 1,
  553.         ACPI_HPET_PAGE_PROTECT64 = 2
  554. };
  555.  
  556. /*******************************************************************************
  557.  *
  558.  * IBFT - Boot Firmware Table
  559.  *        Version 1
  560.  *
  561.  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
  562.  * Specification", Version 1.01, March 1, 2007
  563.  *
  564.  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
  565.  * Therefore, it is not currently supported by the disassembler.
  566.  *
  567.  ******************************************************************************/
  568.  
  569. struct acpi_table_ibft {
  570.         struct acpi_table_header header;        /* Common ACPI table header */
  571.         u8 reserved[12];
  572. };
  573.  
  574. /* IBFT common subtable header */
  575.  
  576. struct acpi_ibft_header {
  577.         u8 type;
  578.         u8 version;
  579.         u16 length;
  580.         u8 index;
  581.         u8 flags;
  582. };
  583.  
  584. /* Values for Type field above */
  585.  
  586. enum acpi_ibft_type {
  587.         ACPI_IBFT_TYPE_NOT_USED = 0,
  588.         ACPI_IBFT_TYPE_CONTROL = 1,
  589.         ACPI_IBFT_TYPE_INITIATOR = 2,
  590.         ACPI_IBFT_TYPE_NIC = 3,
  591.         ACPI_IBFT_TYPE_TARGET = 4,
  592.         ACPI_IBFT_TYPE_EXTENSIONS = 5,
  593.         ACPI_IBFT_TYPE_RESERVED = 6     /* 6 and greater are reserved */
  594. };
  595.  
  596. /* IBFT subtables */
  597.  
  598. struct acpi_ibft_control {
  599.         struct acpi_ibft_header header;
  600.         u16 extensions;
  601.         u16 initiator_offset;
  602.         u16 nic0_offset;
  603.         u16 target0_offset;
  604.         u16 nic1_offset;
  605.         u16 target1_offset;
  606. };
  607.  
  608. struct acpi_ibft_initiator {
  609.         struct acpi_ibft_header header;
  610.         u8 sns_server[16];
  611.         u8 slp_server[16];
  612.         u8 primary_server[16];
  613.         u8 secondary_server[16];
  614.         u16 name_length;
  615.         u16 name_offset;
  616. };
  617.  
  618. struct acpi_ibft_nic {
  619.         struct acpi_ibft_header header;
  620.         u8 ip_address[16];
  621.         u8 subnet_mask_prefix;
  622.         u8 origin;
  623.         u8 gateway[16];
  624.         u8 primary_dns[16];
  625.         u8 secondary_dns[16];
  626.         u8 dhcp[16];
  627.         u16 vlan;
  628.         u8 mac_address[6];
  629.         u16 pci_address;
  630.         u16 name_length;
  631.         u16 name_offset;
  632. };
  633.  
  634. struct acpi_ibft_target {
  635.         struct acpi_ibft_header header;
  636.         u8 target_ip_address[16];
  637.         u16 target_ip_socket;
  638.         u8 target_boot_lun[8];
  639.         u8 chap_type;
  640.         u8 nic_association;
  641.         u16 target_name_length;
  642.         u16 target_name_offset;
  643.         u16 chap_name_length;
  644.         u16 chap_name_offset;
  645.         u16 chap_secret_length;
  646.         u16 chap_secret_offset;
  647.         u16 reverse_chap_name_length;
  648.         u16 reverse_chap_name_offset;
  649.         u16 reverse_chap_secret_length;
  650.         u16 reverse_chap_secret_offset;
  651. };
  652.  
  653. /*******************************************************************************
  654.  *
  655.  * IORT - IO Remapping Table
  656.  *
  657.  * Conforms to "IO Remapping Table System Software on ARM Platforms",
  658.  * Document number: ARM DEN 0049A, 2015
  659.  *
  660.  ******************************************************************************/
  661.  
  662. struct acpi_table_iort {
  663.         struct acpi_table_header header;
  664.         u32 node_count;
  665.         u32 node_offset;
  666.         u32 reserved;
  667. };
  668.  
  669. /*
  670.  * IORT subtables
  671.  */
  672. struct acpi_iort_node {
  673.         u8 type;
  674.         u16 length;
  675.         u8 revision;
  676.         u32 reserved;
  677.         u32 mapping_count;
  678.         u32 mapping_offset;
  679.         char node_data[1];
  680. };
  681.  
  682. /* Values for subtable Type above */
  683.  
  684. enum acpi_iort_node_type {
  685.         ACPI_IORT_NODE_ITS_GROUP = 0x00,
  686.         ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
  687.         ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
  688.         ACPI_IORT_NODE_SMMU = 0x03
  689. };
  690.  
  691. struct acpi_iort_id_mapping {
  692.         u32 input_base;         /* Lowest value in input range */
  693.         u32 id_count;           /* Number of IDs */
  694.         u32 output_base;        /* Lowest value in output range */
  695.         u32 output_reference;   /* A reference to the output node */
  696.         u32 flags;
  697. };
  698.  
  699. /* Masks for Flags field above for IORT subtable */
  700.  
  701. #define ACPI_IORT_ID_SINGLE_MAPPING (1)
  702.  
  703. struct acpi_iort_memory_access {
  704.         u32 cache_coherency;
  705.         u8 hints;
  706.         u16 reserved;
  707.         u8 memory_flags;
  708. };
  709.  
  710. /* Values for cache_coherency field above */
  711.  
  712. #define ACPI_IORT_NODE_COHERENT         0x00000001      /* The device node is fully coherent */
  713. #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000      /* The device node is not coherent */
  714.  
  715. /* Masks for Hints field above */
  716.  
  717. #define ACPI_IORT_HT_TRANSIENT          (1)
  718. #define ACPI_IORT_HT_WRITE              (1<<1)
  719. #define ACPI_IORT_HT_READ               (1<<2)
  720. #define ACPI_IORT_HT_OVERRIDE           (1<<3)
  721.  
  722. /* Masks for memory_flags field above */
  723.  
  724. #define ACPI_IORT_MF_COHERENCY          (1)
  725. #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
  726.  
  727. /*
  728.  * IORT node specific subtables
  729.  */
  730. struct acpi_iort_its_group {
  731.         u32 its_count;
  732.         u32 identifiers[1];     /* GIC ITS identifier arrary */
  733. };
  734.  
  735. struct acpi_iort_named_component {
  736.         u32 node_flags;
  737.         u64 memory_properties;  /* Memory access properties */
  738.         u8 memory_address_limit;        /* Memory address size limit */
  739.         char device_name[1];    /* Path of namespace object */
  740. };
  741.  
  742. struct acpi_iort_root_complex {
  743.         u64 memory_properties;  /* Memory access properties */
  744.         u32 ats_attribute;
  745.         u32 pci_segment_number;
  746. };
  747.  
  748. /* Values for ats_attribute field above */
  749.  
  750. #define ACPI_IORT_ATS_SUPPORTED         0x00000001      /* The root complex supports ATS */
  751. #define ACPI_IORT_ATS_UNSUPPORTED       0x00000000      /* The root complex doesn't support ATS */
  752.  
  753. struct acpi_iort_smmu {
  754.         u64 base_address;       /* SMMU base address */
  755.         u64 span;               /* Length of memory range */
  756.         u32 model;
  757.         u32 flags;
  758.         u32 global_interrupt_offset;
  759.         u32 context_interrupt_count;
  760.         u32 context_interrupt_offset;
  761.         u32 pmu_interrupt_count;
  762.         u32 pmu_interrupt_offset;
  763.         u64 interrupts[1];      /* Interrupt array */
  764. };
  765.  
  766. /* Values for Model field above */
  767.  
  768. #define ACPI_IORT_SMMU_V1               0x00000000      /* Generic SMMUv1 */
  769. #define ACPI_IORT_SMMU_V2               0x00000001      /* Generic SMMUv2 */
  770. #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002      /* ARM Corelink MMU-400 */
  771. #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003      /* ARM Corelink MMU-500 */
  772.  
  773. /* Masks for Flags field above */
  774.  
  775. #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
  776. #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
  777.  
  778. /*******************************************************************************
  779.  *
  780.  * IVRS - I/O Virtualization Reporting Structure
  781.  *        Version 1
  782.  *
  783.  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
  784.  * Revision 1.26, February 2009.
  785.  *
  786.  ******************************************************************************/
  787.  
  788. struct acpi_table_ivrs {
  789.         struct acpi_table_header header;        /* Common ACPI table header */
  790.         u32 info;               /* Common virtualization info */
  791.         u64 reserved;
  792. };
  793.  
  794. /* Values for Info field above */
  795.  
  796. #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
  797. #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
  798. #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
  799.  
  800. /* IVRS subtable header */
  801.  
  802. struct acpi_ivrs_header {
  803.         u8 type;                /* Subtable type */
  804.         u8 flags;
  805.         u16 length;             /* Subtable length */
  806.         u16 device_id;          /* ID of IOMMU */
  807. };
  808.  
  809. /* Values for subtable Type above */
  810.  
  811. enum acpi_ivrs_type {
  812.         ACPI_IVRS_TYPE_HARDWARE = 0x10,
  813.         ACPI_IVRS_TYPE_MEMORY1 = 0x20,
  814.         ACPI_IVRS_TYPE_MEMORY2 = 0x21,
  815.         ACPI_IVRS_TYPE_MEMORY3 = 0x22
  816. };
  817.  
  818. /* Masks for Flags field above for IVHD subtable */
  819.  
  820. #define ACPI_IVHD_TT_ENABLE         (1)
  821. #define ACPI_IVHD_PASS_PW           (1<<1)
  822. #define ACPI_IVHD_RES_PASS_PW       (1<<2)
  823. #define ACPI_IVHD_ISOC              (1<<3)
  824. #define ACPI_IVHD_IOTLB             (1<<4)
  825.  
  826. /* Masks for Flags field above for IVMD subtable */
  827.  
  828. #define ACPI_IVMD_UNITY             (1)
  829. #define ACPI_IVMD_READ              (1<<1)
  830. #define ACPI_IVMD_WRITE             (1<<2)
  831. #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
  832.  
  833. /*
  834.  * IVRS subtables, correspond to Type in struct acpi_ivrs_header
  835.  */
  836.  
  837. /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
  838.  
  839. struct acpi_ivrs_hardware {
  840.         struct acpi_ivrs_header header;
  841.         u16 capability_offset;  /* Offset for IOMMU control fields */
  842.         u64 base_address;       /* IOMMU control registers */
  843.         u16 pci_segment_group;
  844.         u16 info;               /* MSI number and unit ID */
  845.         u32 reserved;
  846. };
  847.  
  848. /* Masks for Info field above */
  849.  
  850. #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
  851. #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, unit_ID */
  852.  
  853. /*
  854.  * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
  855.  * Upper two bits of the Type field are the (encoded) length of the structure.
  856.  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
  857.  * are reserved for future use but not defined.
  858.  */
  859. struct acpi_ivrs_de_header {
  860.         u8 type;
  861.         u16 id;
  862.         u8 data_setting;
  863. };
  864.  
  865. /* Length of device entry is in the top two bits of Type field above */
  866.  
  867. #define ACPI_IVHD_ENTRY_LENGTH      0xC0
  868.  
  869. /* Values for device entry Type field above */
  870.  
  871. enum acpi_ivrs_device_entry_type {
  872.         /* 4-byte device entries, all use struct acpi_ivrs_device4 */
  873.  
  874.         ACPI_IVRS_TYPE_PAD4 = 0,
  875.         ACPI_IVRS_TYPE_ALL = 1,
  876.         ACPI_IVRS_TYPE_SELECT = 2,
  877.         ACPI_IVRS_TYPE_START = 3,
  878.         ACPI_IVRS_TYPE_END = 4,
  879.  
  880.         /* 8-byte device entries */
  881.  
  882.         ACPI_IVRS_TYPE_PAD8 = 64,
  883.         ACPI_IVRS_TYPE_NOT_USED = 65,
  884.         ACPI_IVRS_TYPE_ALIAS_SELECT = 66,       /* Uses struct acpi_ivrs_device8a */
  885.         ACPI_IVRS_TYPE_ALIAS_START = 67,        /* Uses struct acpi_ivrs_device8a */
  886.         ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */
  887.         ACPI_IVRS_TYPE_EXT_START = 71/* Uses struct acpi_ivrs_device8b */
  888.         ACPI_IVRS_TYPE_SPECIAL = 72     /* Uses struct acpi_ivrs_device8c */
  889. };
  890.  
  891. /* Values for Data field above */
  892.  
  893. #define ACPI_IVHD_INIT_PASS         (1)
  894. #define ACPI_IVHD_EINT_PASS         (1<<1)
  895. #define ACPI_IVHD_NMI_PASS          (1<<2)
  896. #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
  897. #define ACPI_IVHD_LINT0_PASS        (1<<6)
  898. #define ACPI_IVHD_LINT1_PASS        (1<<7)
  899.  
  900. /* Types 0-4: 4-byte device entry */
  901.  
  902. struct acpi_ivrs_device4 {
  903.         struct acpi_ivrs_de_header header;
  904. };
  905.  
  906. /* Types 66-67: 8-byte device entry */
  907.  
  908. struct acpi_ivrs_device8a {
  909.         struct acpi_ivrs_de_header header;
  910.         u8 reserved1;
  911.         u16 used_id;
  912.         u8 reserved2;
  913. };
  914.  
  915. /* Types 70-71: 8-byte device entry */
  916.  
  917. struct acpi_ivrs_device8b {
  918.         struct acpi_ivrs_de_header header;
  919.         u32 extended_data;
  920. };
  921.  
  922. /* Values for extended_data above */
  923.  
  924. #define ACPI_IVHD_ATS_DISABLED      (1<<31)
  925.  
  926. /* Type 72: 8-byte device entry */
  927.  
  928. struct acpi_ivrs_device8c {
  929.         struct acpi_ivrs_de_header header;
  930.         u8 handle;
  931.         u16 used_id;
  932.         u8 variety;
  933. };
  934.  
  935. /* Values for Variety field above */
  936.  
  937. #define ACPI_IVHD_IOAPIC            1
  938. #define ACPI_IVHD_HPET              2
  939.  
  940. /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
  941.  
  942. struct acpi_ivrs_memory {
  943.         struct acpi_ivrs_header header;
  944.         u16 aux_data;
  945.         u64 reserved;
  946.         u64 start_address;
  947.         u64 memory_length;
  948. };
  949.  
  950. /*******************************************************************************
  951.  *
  952.  * LPIT - Low Power Idle Table
  953.  *
  954.  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
  955.  *
  956.  ******************************************************************************/
  957.  
  958. struct acpi_table_lpit {
  959.         struct acpi_table_header header;        /* Common ACPI table header */
  960. };
  961.  
  962. /* LPIT subtable header */
  963.  
  964. struct acpi_lpit_header {
  965.         u32 type;               /* Subtable type */
  966.         u32 length;             /* Subtable length */
  967.         u16 unique_id;
  968.         u16 reserved;
  969.         u32 flags;
  970. };
  971.  
  972. /* Values for subtable Type above */
  973.  
  974. enum acpi_lpit_type {
  975.         ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,
  976.         ACPI_LPIT_TYPE_RESERVED = 0x01  /* 1 and above are reserved */
  977. };
  978.  
  979. /* Masks for Flags field above  */
  980.  
  981. #define ACPI_LPIT_STATE_DISABLED    (1)
  982. #define ACPI_LPIT_NO_COUNTER        (1<<1)
  983.  
  984. /*
  985.  * LPIT subtables, correspond to Type in struct acpi_lpit_header
  986.  */
  987.  
  988. /* 0x00: Native C-state instruction based LPI structure */
  989.  
  990. struct acpi_lpit_native {
  991.         struct acpi_lpit_header header;
  992.         struct acpi_generic_address entry_trigger;
  993.         u32 residency;
  994.         u32 latency;
  995.         struct acpi_generic_address residency_counter;
  996.         u64 counter_frequency;
  997. };
  998.  
  999. /*******************************************************************************
  1000.  *
  1001.  * MCFG - PCI Memory Mapped Configuration table and subtable
  1002.  *        Version 1
  1003.  *
  1004.  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
  1005.  *
  1006.  ******************************************************************************/
  1007.  
  1008. struct acpi_table_mcfg {
  1009.         struct acpi_table_header header;        /* Common ACPI table header */
  1010.         u8 reserved[8];
  1011. };
  1012.  
  1013. /* Subtable */
  1014.  
  1015. struct acpi_mcfg_allocation {
  1016.         u64 address;            /* Base address, processor-relative */
  1017.         u16 pci_segment;        /* PCI segment group number */
  1018.         u8 start_bus_number;    /* Starting PCI Bus number */
  1019.         u8 end_bus_number;      /* Final PCI Bus number */
  1020.         u32 reserved;
  1021. };
  1022.  
  1023. /*******************************************************************************
  1024.  *
  1025.  * MCHI - Management Controller Host Interface Table
  1026.  *        Version 1
  1027.  *
  1028.  * Conforms to "Management Component Transport Protocol (MCTP) Host
  1029.  * Interface Specification", Revision 1.0.0a, October 13, 2009
  1030.  *
  1031.  ******************************************************************************/
  1032.  
  1033. struct acpi_table_mchi {
  1034.         struct acpi_table_header header;        /* Common ACPI table header */
  1035.         u8 interface_type;
  1036.         u8 protocol;
  1037.         u64 protocol_data;
  1038.         u8 interrupt_type;
  1039.         u8 gpe;
  1040.         u8 pci_device_flag;
  1041.         u32 global_interrupt;
  1042.         struct acpi_generic_address control_register;
  1043.         u8 pci_segment;
  1044.         u8 pci_bus;
  1045.         u8 pci_device;
  1046.         u8 pci_function;
  1047. };
  1048.  
  1049. /*******************************************************************************
  1050.  *
  1051.  * MSDM - Microsoft Data Management table
  1052.  *
  1053.  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
  1054.  * November 29, 2011. Copyright 2011 Microsoft
  1055.  *
  1056.  ******************************************************************************/
  1057.  
  1058. /* Basic MSDM table is only the common ACPI header */
  1059.  
  1060. struct acpi_table_msdm {
  1061.         struct acpi_table_header header;        /* Common ACPI table header */
  1062. };
  1063.  
  1064. /*******************************************************************************
  1065.  *
  1066.  * MTMR - MID Timer Table
  1067.  *        Version 1
  1068.  *
  1069.  * Conforms to "Simple Firmware Interface Specification",
  1070.  * Draft 0.8.2, Oct 19, 2010
  1071.  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
  1072.  *
  1073.  ******************************************************************************/
  1074.  
  1075. struct acpi_table_mtmr {
  1076.         struct acpi_table_header header;        /* Common ACPI table header */
  1077. };
  1078.  
  1079. /* MTMR entry */
  1080.  
  1081. struct acpi_mtmr_entry {
  1082.         struct acpi_generic_address physical_address;
  1083.         u32 frequency;
  1084.         u32 irq;
  1085. };
  1086.  
  1087. /*******************************************************************************
  1088.  *
  1089.  * SLIC - Software Licensing Description Table
  1090.  *
  1091.  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
  1092.  * November 29, 2011. Copyright 2011 Microsoft
  1093.  *
  1094.  ******************************************************************************/
  1095.  
  1096. /* Basic SLIC table is only the common ACPI header */
  1097.  
  1098. struct acpi_table_slic {
  1099.         struct acpi_table_header header;        /* Common ACPI table header */
  1100. };
  1101.  
  1102. /*******************************************************************************
  1103.  *
  1104.  * SPCR - Serial Port Console Redirection table
  1105.  *        Version 1
  1106.  *
  1107.  * Conforms to "Serial Port Console Redirection Table",
  1108.  * Version 1.00, January 11, 2002
  1109.  *
  1110.  ******************************************************************************/
  1111.  
  1112. struct acpi_table_spcr {
  1113.         struct acpi_table_header header;        /* Common ACPI table header */
  1114.         u8 interface_type;      /* 0=full 16550, 1=subset of 16550 */
  1115.         u8 reserved[3];
  1116.         struct acpi_generic_address serial_port;
  1117.         u8 interrupt_type;
  1118.         u8 pc_interrupt;
  1119.         u32 interrupt;
  1120.         u8 baud_rate;
  1121.         u8 parity;
  1122.         u8 stop_bits;
  1123.         u8 flow_control;
  1124.         u8 terminal_type;
  1125.         u8 reserved1;
  1126.         u16 pci_device_id;
  1127.         u16 pci_vendor_id;
  1128.         u8 pci_bus;
  1129.         u8 pci_device;
  1130.         u8 pci_function;
  1131.         u32 pci_flags;
  1132.         u8 pci_segment;
  1133.         u32 reserved2;
  1134. };
  1135.  
  1136. /* Masks for pci_flags field above */
  1137.  
  1138. #define ACPI_SPCR_DO_NOT_DISABLE    (1)
  1139.  
  1140. /*******************************************************************************
  1141.  *
  1142.  * SPMI - Server Platform Management Interface table
  1143.  *        Version 5
  1144.  *
  1145.  * Conforms to "Intelligent Platform Management Interface Specification
  1146.  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
  1147.  * June 12, 2009 markup.
  1148.  *
  1149.  ******************************************************************************/
  1150.  
  1151. struct acpi_table_spmi {
  1152.         struct acpi_table_header header;        /* Common ACPI table header */
  1153.         u8 interface_type;
  1154.         u8 reserved;            /* Must be 1 */
  1155.         u16 spec_revision;      /* Version of IPMI */
  1156.         u8 interrupt_type;
  1157.         u8 gpe_number;          /* GPE assigned */
  1158.         u8 reserved1;
  1159.         u8 pci_device_flag;
  1160.         u32 interrupt;
  1161.         struct acpi_generic_address ipmi_register;
  1162.         u8 pci_segment;
  1163.         u8 pci_bus;
  1164.         u8 pci_device;
  1165.         u8 pci_function;
  1166.         u8 reserved2;
  1167. };
  1168.  
  1169. /* Values for interface_type above */
  1170.  
  1171. enum acpi_spmi_interface_types {
  1172.         ACPI_SPMI_NOT_USED = 0,
  1173.         ACPI_SPMI_KEYBOARD = 1,
  1174.         ACPI_SPMI_SMI = 2,
  1175.         ACPI_SPMI_BLOCK_TRANSFER = 3,
  1176.         ACPI_SPMI_SMBUS = 4,
  1177.         ACPI_SPMI_RESERVED = 5  /* 5 and above are reserved */
  1178. };
  1179.  
  1180. /*******************************************************************************
  1181.  *
  1182.  * TCPA - Trusted Computing Platform Alliance table
  1183.  *        Version 2
  1184.  *
  1185.  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
  1186.  * December 19, 2014
  1187.  *
  1188.  * NOTE: There are two versions of the table with the same signature --
  1189.  * the client version and the server version. The common platform_class
  1190.  * field is used to differentiate the two types of tables.
  1191.  *
  1192.  ******************************************************************************/
  1193.  
  1194. struct acpi_table_tcpa_hdr {
  1195.         struct acpi_table_header header;        /* Common ACPI table header */
  1196.         u16 platform_class;
  1197. };
  1198.  
  1199. /*
  1200.  * Values for platform_class above.
  1201.  * This is how the client and server subtables are differentiated
  1202.  */
  1203. #define ACPI_TCPA_CLIENT_TABLE          0
  1204. #define ACPI_TCPA_SERVER_TABLE          1
  1205.  
  1206. struct acpi_table_tcpa_client {
  1207.         u32 minimum_log_length; /* Minimum length for the event log area */
  1208.         u64 log_address;        /* Address of the event log area */
  1209. };
  1210.  
  1211. struct acpi_table_tcpa_server {
  1212.         u16 reserved;
  1213.         u64 minimum_log_length; /* Minimum length for the event log area */
  1214.         u64 log_address;        /* Address of the event log area */
  1215.         u16 spec_revision;
  1216.         u8 device_flags;
  1217.         u8 interrupt_flags;
  1218.         u8 gpe_number;
  1219.         u8 reserved2[3];
  1220.         u32 global_interrupt;
  1221.         struct acpi_generic_address address;
  1222.         u32 reserved3;
  1223.         struct acpi_generic_address config_address;
  1224.         u8 group;
  1225.         u8 bus;                 /* PCI Bus/Segment/Function numbers */
  1226.         u8 device;
  1227.         u8 function;
  1228. };
  1229.  
  1230. /* Values for device_flags above */
  1231.  
  1232. #define ACPI_TCPA_PCI_DEVICE            (1)
  1233. #define ACPI_TCPA_BUS_PNP               (1<<1)
  1234. #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
  1235.  
  1236. /* Values for interrupt_flags above */
  1237.  
  1238. #define ACPI_TCPA_INTERRUPT_MODE        (1)
  1239. #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
  1240. #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
  1241. #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
  1242.  
  1243. /*******************************************************************************
  1244.  *
  1245.  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
  1246.  *        Version 4
  1247.  *
  1248.  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
  1249.  * December 19, 2014
  1250.  *
  1251.  ******************************************************************************/
  1252.  
  1253. struct acpi_table_tpm2 {
  1254.         struct acpi_table_header header;        /* Common ACPI table header */
  1255.         u16 platform_class;
  1256.         u16 reserved;
  1257.         u64 control_address;
  1258.         u32 start_method;
  1259.  
  1260.         /* Platform-specific data follows */
  1261. };
  1262.  
  1263. /* Values for start_method above */
  1264.  
  1265. #define ACPI_TPM2_NOT_ALLOWED                       0
  1266. #define ACPI_TPM2_START_METHOD                      2
  1267. #define ACPI_TPM2_MEMORY_MAPPED                     6
  1268. #define ACPI_TPM2_COMMAND_BUFFER                    7
  1269. #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
  1270.  
  1271. /*******************************************************************************
  1272.  *
  1273.  * UEFI - UEFI Boot optimization Table
  1274.  *        Version 1
  1275.  *
  1276.  * Conforms to "Unified Extensible Firmware Interface Specification",
  1277.  * Version 2.3, May 8, 2009
  1278.  *
  1279.  ******************************************************************************/
  1280.  
  1281. struct acpi_table_uefi {
  1282.         struct acpi_table_header header;        /* Common ACPI table header */
  1283.         u8 identifier[16];      /* UUID identifier */
  1284.         u16 data_offset;        /* Offset of remaining data in table */
  1285. };
  1286.  
  1287. /*******************************************************************************
  1288.  *
  1289.  * VRTC - Virtual Real Time Clock Table
  1290.  *        Version 1
  1291.  *
  1292.  * Conforms to "Simple Firmware Interface Specification",
  1293.  * Draft 0.8.2, Oct 19, 2010
  1294.  * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
  1295.  *
  1296.  ******************************************************************************/
  1297.  
  1298. struct acpi_table_vrtc {
  1299.         struct acpi_table_header header;        /* Common ACPI table header */
  1300. };
  1301.  
  1302. /* VRTC entry */
  1303.  
  1304. struct acpi_vrtc_entry {
  1305.         struct acpi_generic_address physical_address;
  1306.         u32 irq;
  1307. };
  1308.  
  1309. /*******************************************************************************
  1310.  *
  1311.  * WAET - Windows ACPI Emulated devices Table
  1312.  *        Version 1
  1313.  *
  1314.  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
  1315.  *
  1316.  ******************************************************************************/
  1317.  
  1318. struct acpi_table_waet {
  1319.         struct acpi_table_header header;        /* Common ACPI table header */
  1320.         u32 flags;
  1321. };
  1322.  
  1323. /* Masks for Flags field above */
  1324.  
  1325. #define ACPI_WAET_RTC_NO_ACK        (1) /* RTC requires no int acknowledge */
  1326. #define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
  1327.  
  1328. /*******************************************************************************
  1329.  *
  1330.  * WDAT - Watchdog Action Table
  1331.  *        Version 1
  1332.  *
  1333.  * Conforms to "Hardware Watchdog Timers Design Specification",
  1334.  * Copyright 2006 Microsoft Corporation.
  1335.  *
  1336.  ******************************************************************************/
  1337.  
  1338. struct acpi_table_wdat {
  1339.         struct acpi_table_header header;        /* Common ACPI table header */
  1340.         u32 header_length;      /* Watchdog Header Length */
  1341.         u16 pci_segment;        /* PCI Segment number */
  1342.         u8 pci_bus;             /* PCI Bus number */
  1343.         u8 pci_device;          /* PCI Device number */
  1344.         u8 pci_function;        /* PCI Function number */
  1345.         u8 reserved[3];
  1346.         u32 timer_period;       /* Period of one timer count (msec) */
  1347.         u32 max_count;          /* Maximum counter value supported */
  1348.         u32 min_count;          /* Minimum counter value */
  1349.         u8 flags;
  1350.         u8 reserved2[3];
  1351.         u32 entries;            /* Number of watchdog entries that follow */
  1352. };
  1353.  
  1354. /* Masks for Flags field above */
  1355.  
  1356. #define ACPI_WDAT_ENABLED           (1)
  1357. #define ACPI_WDAT_STOPPED           0x80
  1358.  
  1359. /* WDAT Instruction Entries (actions) */
  1360.  
  1361. struct acpi_wdat_entry {
  1362.         u8 action;
  1363.         u8 instruction;
  1364.         u16 reserved;
  1365.         struct acpi_generic_address register_region;
  1366.         u32 value;              /* Value used with Read/Write register */
  1367.         u32 mask;               /* Bitmask required for this register instruction */
  1368. };
  1369.  
  1370. /* Values for Action field above */
  1371.  
  1372. enum acpi_wdat_actions {
  1373.         ACPI_WDAT_RESET = 1,
  1374.         ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
  1375.         ACPI_WDAT_GET_COUNTDOWN = 5,
  1376.         ACPI_WDAT_SET_COUNTDOWN = 6,
  1377.         ACPI_WDAT_GET_RUNNING_STATE = 8,
  1378.         ACPI_WDAT_SET_RUNNING_STATE = 9,
  1379.         ACPI_WDAT_GET_STOPPED_STATE = 10,
  1380.         ACPI_WDAT_SET_STOPPED_STATE = 11,
  1381.         ACPI_WDAT_GET_REBOOT = 16,
  1382.         ACPI_WDAT_SET_REBOOT = 17,
  1383.         ACPI_WDAT_GET_SHUTDOWN = 18,
  1384.         ACPI_WDAT_SET_SHUTDOWN = 19,
  1385.         ACPI_WDAT_GET_STATUS = 32,
  1386.         ACPI_WDAT_SET_STATUS = 33,
  1387.         ACPI_WDAT_ACTION_RESERVED = 34  /* 34 and greater are reserved */
  1388. };
  1389.  
  1390. /* Values for Instruction field above */
  1391.  
  1392. enum acpi_wdat_instructions {
  1393.         ACPI_WDAT_READ_VALUE = 0,
  1394.         ACPI_WDAT_READ_COUNTDOWN = 1,
  1395.         ACPI_WDAT_WRITE_VALUE = 2,
  1396.         ACPI_WDAT_WRITE_COUNTDOWN = 3,
  1397.         ACPI_WDAT_INSTRUCTION_RESERVED = 4,     /* 4 and greater are reserved */
  1398.         ACPI_WDAT_PRESERVE_REGISTER = 0x80      /* Except for this value */
  1399. };
  1400.  
  1401. /*******************************************************************************
  1402.  *
  1403.  * WDDT - Watchdog Descriptor Table
  1404.  *        Version 1
  1405.  *
  1406.  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
  1407.  * Version 001, September 2002
  1408.  *
  1409.  ******************************************************************************/
  1410.  
  1411. struct acpi_table_wddt {
  1412.         struct acpi_table_header header;        /* Common ACPI table header */
  1413.         u16 spec_version;
  1414.         u16 table_version;
  1415.         u16 pci_vendor_id;
  1416.         struct acpi_generic_address address;
  1417.         u16 max_count;          /* Maximum counter value supported */
  1418.         u16 min_count;          /* Minimum counter value supported */
  1419.         u16 period;
  1420.         u16 status;
  1421.         u16 capability;
  1422. };
  1423.  
  1424. /* Flags for Status field above */
  1425.  
  1426. #define ACPI_WDDT_AVAILABLE     (1)
  1427. #define ACPI_WDDT_ACTIVE        (1<<1)
  1428. #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
  1429. #define ACPI_WDDT_USER_RESET    (1<<11)
  1430. #define ACPI_WDDT_WDT_RESET     (1<<12)
  1431. #define ACPI_WDDT_POWER_FAIL    (1<<13)
  1432. #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
  1433.  
  1434. /* Flags for Capability field above */
  1435.  
  1436. #define ACPI_WDDT_AUTO_RESET    (1)
  1437. #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
  1438.  
  1439. /*******************************************************************************
  1440.  *
  1441.  * WDRT - Watchdog Resource Table
  1442.  *        Version 1
  1443.  *
  1444.  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
  1445.  * Version 1.01, August 28, 2006
  1446.  *
  1447.  ******************************************************************************/
  1448.  
  1449. struct acpi_table_wdrt {
  1450.         struct acpi_table_header header;        /* Common ACPI table header */
  1451.         struct acpi_generic_address control_register;
  1452.         struct acpi_generic_address count_register;
  1453.         u16 pci_device_id;
  1454.         u16 pci_vendor_id;
  1455.         u8 pci_bus;             /* PCI Bus number */
  1456.         u8 pci_device;          /* PCI Device number */
  1457.         u8 pci_function;        /* PCI Function number */
  1458.         u8 pci_segment;         /* PCI Segment number */
  1459.         u16 max_count;          /* Maximum counter value supported */
  1460.         u8 units;
  1461. };
  1462.  
  1463. /* Reset to default packing */
  1464.  
  1465. #pragma pack()
  1466.  
  1467. #endif                          /* __ACTBL2_H__ */
  1468.