xref: /titanic_44/usr/src/uts/intel/sys/acpi/actbl2.h (revision cb56572868bfc488bbd3ab847b09db2a25554d44)
17c478bd9Sstevel@tonic-gate /******************************************************************************
27c478bd9Sstevel@tonic-gate  *
326f3cdf0SGordon Ross  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
47c478bd9Sstevel@tonic-gate  *
57c478bd9Sstevel@tonic-gate  *****************************************************************************/
67c478bd9Sstevel@tonic-gate 
726f3cdf0SGordon Ross /*
8*cb565728SJerry Jelinek  * Copyright (C) 2000 - 2016, Intel Corp.
97c478bd9Sstevel@tonic-gate  * All rights reserved.
107c478bd9Sstevel@tonic-gate  *
1126f3cdf0SGordon Ross  * Redistribution and use in source and binary forms, with or without
1226f3cdf0SGordon Ross  * modification, are permitted provided that the following conditions
1326f3cdf0SGordon Ross  * are met:
1426f3cdf0SGordon Ross  * 1. Redistributions of source code must retain the above copyright
1526f3cdf0SGordon Ross  *    notice, this list of conditions, and the following disclaimer,
1626f3cdf0SGordon Ross  *    without modification.
1726f3cdf0SGordon Ross  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1826f3cdf0SGordon Ross  *    substantially similar to the "NO WARRANTY" disclaimer below
1926f3cdf0SGordon Ross  *    ("Disclaimer") and any redistribution must be conditioned upon
2026f3cdf0SGordon Ross  *    including a substantially similar Disclaimer requirement for further
2126f3cdf0SGordon Ross  *    binary redistribution.
2226f3cdf0SGordon Ross  * 3. Neither the names of the above-listed copyright holders nor the names
2326f3cdf0SGordon Ross  *    of any contributors may be used to endorse or promote products derived
2426f3cdf0SGordon Ross  *    from this software without specific prior written permission.
257c478bd9Sstevel@tonic-gate  *
2626f3cdf0SGordon Ross  * Alternatively, this software may be distributed under the terms of the
2726f3cdf0SGordon Ross  * GNU General Public License ("GPL") version 2 as published by the Free
2826f3cdf0SGordon Ross  * Software Foundation.
297c478bd9Sstevel@tonic-gate  *
3026f3cdf0SGordon Ross  * NO WARRANTY
3126f3cdf0SGordon Ross  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
3226f3cdf0SGordon Ross  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3326f3cdf0SGordon Ross  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
3426f3cdf0SGordon Ross  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3526f3cdf0SGordon Ross  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3626f3cdf0SGordon Ross  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3726f3cdf0SGordon Ross  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3826f3cdf0SGordon Ross  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3926f3cdf0SGordon Ross  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
4026f3cdf0SGordon Ross  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
4126f3cdf0SGordon Ross  * POSSIBILITY OF SUCH DAMAGES.
4226f3cdf0SGordon Ross  */
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate #ifndef __ACTBL2_H__
457c478bd9Sstevel@tonic-gate #define __ACTBL2_H__
467c478bd9Sstevel@tonic-gate 
4757190917SDana Myers 
4857190917SDana Myers /*******************************************************************************
4957190917SDana Myers  *
5057190917SDana Myers  * Additional ACPI Tables (2)
5157190917SDana Myers  *
5257190917SDana Myers  * These tables are not consumed directly by the ACPICA subsystem, but are
5357190917SDana Myers  * included here to support device drivers and the AML disassembler.
5457190917SDana Myers  *
55*cb565728SJerry Jelinek  * Generally, the tables in this file are defined by third-party specifications,
56*cb565728SJerry Jelinek  * and are not defined directly by the ACPI specification itself.
5757190917SDana Myers  *
5857190917SDana Myers  ******************************************************************************/
5957190917SDana Myers 
6057190917SDana Myers 
6157190917SDana Myers /*
6257190917SDana Myers  * Values for description table header signatures for tables defined in this
6357190917SDana Myers  * file. Useful because they make it more difficult to inadvertently type in
6457190917SDana Myers  * the wrong signature.
6557190917SDana Myers  */
6657190917SDana Myers #define ACPI_SIG_ASF            "ASF!"      /* Alert Standard Format table */
6757190917SDana Myers #define ACPI_SIG_BOOT           "BOOT"      /* Simple Boot Flag Table */
68*cb565728SJerry Jelinek #define ACPI_SIG_CSRT           "CSRT"      /* Core System Resource Table */
69*cb565728SJerry Jelinek #define ACPI_SIG_DBG2           "DBG2"      /* Debug Port table type 2 */
7057190917SDana Myers #define ACPI_SIG_DBGP           "DBGP"      /* Debug Port table */
7157190917SDana Myers #define ACPI_SIG_DMAR           "DMAR"      /* DMA Remapping table */
7257190917SDana Myers #define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
7357190917SDana Myers #define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
74*cb565728SJerry Jelinek #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
7557190917SDana Myers #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
76*cb565728SJerry Jelinek #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
7757190917SDana Myers #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
7826f3cdf0SGordon Ross #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
79*cb565728SJerry Jelinek #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
80*cb565728SJerry Jelinek #define ACPI_SIG_MTMR           "MTMR"      /* MID Timer table */
8157190917SDana Myers #define ACPI_SIG_SLIC           "SLIC"      /* Software Licensing Description Table */
8257190917SDana Myers #define ACPI_SIG_SPCR           "SPCR"      /* Serial Port Console Redirection table */
8357190917SDana Myers #define ACPI_SIG_SPMI           "SPMI"      /* Server Platform Management Interface table */
8457190917SDana Myers #define ACPI_SIG_TCPA           "TCPA"      /* Trusted Computing Platform Alliance table */
85*cb565728SJerry Jelinek #define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
8657190917SDana Myers #define ACPI_SIG_UEFI           "UEFI"      /* Uefi Boot Optimization Table */
87*cb565728SJerry Jelinek #define ACPI_SIG_VRTC           "VRTC"      /* Virtual Real Time Clock Table */
8857190917SDana Myers #define ACPI_SIG_WAET           "WAET"      /* Windows ACPI Emulated devices Table */
8957190917SDana Myers #define ACPI_SIG_WDAT           "WDAT"      /* Watchdog Action Table */
9026f3cdf0SGordon Ross #define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
9157190917SDana Myers #define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
9257190917SDana Myers 
9326f3cdf0SGordon Ross #ifdef ACPI_UNDEFINED_TABLES
9426f3cdf0SGordon Ross /*
9526f3cdf0SGordon Ross  * These tables have been seen in the field, but no definition has been found
9626f3cdf0SGordon Ross  */
9726f3cdf0SGordon Ross #define ACPI_SIG_ATKG           "ATKG"
9826f3cdf0SGordon Ross #define ACPI_SIG_GSCI           "GSCI"      /* GMCH SCI table */
9926f3cdf0SGordon Ross #define ACPI_SIG_IEIT           "IEIT"
10026f3cdf0SGordon Ross #endif
10157190917SDana Myers 
10257190917SDana Myers /*
10357190917SDana Myers  * All tables must be byte-packed to match the ACPI specification, since
10457190917SDana Myers  * the tables are provided by the system BIOS.
10557190917SDana Myers  */
10657190917SDana Myers #pragma pack(1)
10757190917SDana Myers 
10857190917SDana Myers /*
109*cb565728SJerry Jelinek  * Note: C bitfields are not used for this reason:
110*cb565728SJerry Jelinek  *
111*cb565728SJerry Jelinek  * "Bitfields are great and easy to read, but unfortunately the C language
112*cb565728SJerry Jelinek  * does not specify the layout of bitfields in memory, which means they are
113*cb565728SJerry Jelinek  * essentially useless for dealing with packed data in on-disk formats or
114*cb565728SJerry Jelinek  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
115*cb565728SJerry Jelinek  * this decision was a design error in C. Ritchie could have picked an order
116*cb565728SJerry Jelinek  * and stuck with it." Norman Ramsey.
117*cb565728SJerry Jelinek  * See http://stackoverflow.com/a/1053662/41661
11857190917SDana Myers  */
11957190917SDana Myers 
12057190917SDana Myers 
12157190917SDana Myers /*******************************************************************************
12257190917SDana Myers  *
12357190917SDana Myers  * ASF - Alert Standard Format table (Signature "ASF!")
12457190917SDana Myers  *       Revision 0x10
12557190917SDana Myers  *
12657190917SDana Myers  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
12757190917SDana Myers  *
12857190917SDana Myers  ******************************************************************************/
12957190917SDana Myers 
13057190917SDana Myers typedef struct acpi_table_asf
13157190917SDana Myers {
13257190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
13357190917SDana Myers 
13457190917SDana Myers } ACPI_TABLE_ASF;
13557190917SDana Myers 
13657190917SDana Myers 
13757190917SDana Myers /* ASF subtable header */
13857190917SDana Myers 
13957190917SDana Myers typedef struct acpi_asf_header
14057190917SDana Myers {
14157190917SDana Myers     UINT8                   Type;
14257190917SDana Myers     UINT8                   Reserved;
14357190917SDana Myers     UINT16                  Length;
14457190917SDana Myers 
14557190917SDana Myers } ACPI_ASF_HEADER;
14657190917SDana Myers 
14757190917SDana Myers 
14857190917SDana Myers /* Values for Type field above */
14957190917SDana Myers 
15057190917SDana Myers enum AcpiAsfType
15157190917SDana Myers {
15257190917SDana Myers     ACPI_ASF_TYPE_INFO          = 0,
15357190917SDana Myers     ACPI_ASF_TYPE_ALERT         = 1,
15457190917SDana Myers     ACPI_ASF_TYPE_CONTROL       = 2,
15557190917SDana Myers     ACPI_ASF_TYPE_BOOT          = 3,
15657190917SDana Myers     ACPI_ASF_TYPE_ADDRESS       = 4,
15757190917SDana Myers     ACPI_ASF_TYPE_RESERVED      = 5
15857190917SDana Myers };
15957190917SDana Myers 
16057190917SDana Myers /*
16157190917SDana Myers  * ASF subtables
16257190917SDana Myers  */
16357190917SDana Myers 
16457190917SDana Myers /* 0: ASF Information */
16557190917SDana Myers 
16657190917SDana Myers typedef struct acpi_asf_info
16757190917SDana Myers {
16857190917SDana Myers     ACPI_ASF_HEADER         Header;
16957190917SDana Myers     UINT8                   MinResetValue;
17057190917SDana Myers     UINT8                   MinPollInterval;
17157190917SDana Myers     UINT16                  SystemId;
17257190917SDana Myers     UINT32                  MfgId;
17357190917SDana Myers     UINT8                   Flags;
17457190917SDana Myers     UINT8                   Reserved2[3];
17557190917SDana Myers 
17657190917SDana Myers } ACPI_ASF_INFO;
17757190917SDana Myers 
17857190917SDana Myers /* Masks for Flags field above */
17957190917SDana Myers 
18057190917SDana Myers #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
18157190917SDana Myers 
18257190917SDana Myers 
18357190917SDana Myers /* 1: ASF Alerts */
18457190917SDana Myers 
18557190917SDana Myers typedef struct acpi_asf_alert
18657190917SDana Myers {
18757190917SDana Myers     ACPI_ASF_HEADER         Header;
18857190917SDana Myers     UINT8                   AssertMask;
18957190917SDana Myers     UINT8                   DeassertMask;
19057190917SDana Myers     UINT8                   Alerts;
19157190917SDana Myers     UINT8                   DataLength;
19257190917SDana Myers 
19357190917SDana Myers } ACPI_ASF_ALERT;
19457190917SDana Myers 
19557190917SDana Myers typedef struct acpi_asf_alert_data
19657190917SDana Myers {
19757190917SDana Myers     UINT8                   Address;
19857190917SDana Myers     UINT8                   Command;
19957190917SDana Myers     UINT8                   Mask;
20057190917SDana Myers     UINT8                   Value;
20157190917SDana Myers     UINT8                   SensorType;
20257190917SDana Myers     UINT8                   Type;
20357190917SDana Myers     UINT8                   Offset;
20457190917SDana Myers     UINT8                   SourceType;
20557190917SDana Myers     UINT8                   Severity;
20657190917SDana Myers     UINT8                   SensorNumber;
20757190917SDana Myers     UINT8                   Entity;
20857190917SDana Myers     UINT8                   Instance;
20957190917SDana Myers 
21057190917SDana Myers } ACPI_ASF_ALERT_DATA;
21157190917SDana Myers 
21257190917SDana Myers 
21357190917SDana Myers /* 2: ASF Remote Control */
21457190917SDana Myers 
21557190917SDana Myers typedef struct acpi_asf_remote
21657190917SDana Myers {
21757190917SDana Myers     ACPI_ASF_HEADER         Header;
21857190917SDana Myers     UINT8                   Controls;
21957190917SDana Myers     UINT8                   DataLength;
22057190917SDana Myers     UINT16                  Reserved2;
22157190917SDana Myers 
22257190917SDana Myers } ACPI_ASF_REMOTE;
22357190917SDana Myers 
22457190917SDana Myers typedef struct acpi_asf_control_data
22557190917SDana Myers {
22657190917SDana Myers     UINT8                   Function;
22757190917SDana Myers     UINT8                   Address;
22857190917SDana Myers     UINT8                   Command;
22957190917SDana Myers     UINT8                   Value;
23057190917SDana Myers 
23157190917SDana Myers } ACPI_ASF_CONTROL_DATA;
23257190917SDana Myers 
23357190917SDana Myers 
23457190917SDana Myers /* 3: ASF RMCP Boot Options */
23557190917SDana Myers 
23657190917SDana Myers typedef struct acpi_asf_rmcp
23757190917SDana Myers {
23857190917SDana Myers     ACPI_ASF_HEADER         Header;
23957190917SDana Myers     UINT8                   Capabilities[7];
24057190917SDana Myers     UINT8                   CompletionCode;
24157190917SDana Myers     UINT32                  EnterpriseId;
24257190917SDana Myers     UINT8                   Command;
24357190917SDana Myers     UINT16                  Parameter;
24457190917SDana Myers     UINT16                  BootOptions;
24557190917SDana Myers     UINT16                  OemParameters;
24657190917SDana Myers 
24757190917SDana Myers } ACPI_ASF_RMCP;
24857190917SDana Myers 
24957190917SDana Myers 
25057190917SDana Myers /* 4: ASF Address */
25157190917SDana Myers 
25257190917SDana Myers typedef struct acpi_asf_address
25357190917SDana Myers {
25457190917SDana Myers     ACPI_ASF_HEADER         Header;
25557190917SDana Myers     UINT8                   EpromAddress;
25657190917SDana Myers     UINT8                   Devices;
25757190917SDana Myers 
25857190917SDana Myers } ACPI_ASF_ADDRESS;
25957190917SDana Myers 
26057190917SDana Myers 
26157190917SDana Myers /*******************************************************************************
26257190917SDana Myers  *
26357190917SDana Myers  * BOOT - Simple Boot Flag Table
26457190917SDana Myers  *        Version 1
26557190917SDana Myers  *
26657190917SDana Myers  * Conforms to the "Simple Boot Flag Specification", Version 2.1
26757190917SDana Myers  *
26857190917SDana Myers  ******************************************************************************/
26957190917SDana Myers 
27057190917SDana Myers typedef struct acpi_table_boot
27157190917SDana Myers {
27257190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
27357190917SDana Myers     UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
27457190917SDana Myers     UINT8                   Reserved[3];
27557190917SDana Myers 
27657190917SDana Myers } ACPI_TABLE_BOOT;
27757190917SDana Myers 
27857190917SDana Myers 
27957190917SDana Myers /*******************************************************************************
28057190917SDana Myers  *
281*cb565728SJerry Jelinek  * CSRT - Core System Resource Table
282*cb565728SJerry Jelinek  *        Version 0
283*cb565728SJerry Jelinek  *
284*cb565728SJerry Jelinek  * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
285*cb565728SJerry Jelinek  *
286*cb565728SJerry Jelinek  ******************************************************************************/
287*cb565728SJerry Jelinek 
288*cb565728SJerry Jelinek typedef struct acpi_table_csrt
289*cb565728SJerry Jelinek {
290*cb565728SJerry Jelinek     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
291*cb565728SJerry Jelinek 
292*cb565728SJerry Jelinek } ACPI_TABLE_CSRT;
293*cb565728SJerry Jelinek 
294*cb565728SJerry Jelinek 
295*cb565728SJerry Jelinek /* Resource Group subtable */
296*cb565728SJerry Jelinek 
297*cb565728SJerry Jelinek typedef struct acpi_csrt_group
298*cb565728SJerry Jelinek {
299*cb565728SJerry Jelinek     UINT32                  Length;
300*cb565728SJerry Jelinek     UINT32                  VendorId;
301*cb565728SJerry Jelinek     UINT32                  SubvendorId;
302*cb565728SJerry Jelinek     UINT16                  DeviceId;
303*cb565728SJerry Jelinek     UINT16                  SubdeviceId;
304*cb565728SJerry Jelinek     UINT16                  Revision;
305*cb565728SJerry Jelinek     UINT16                  Reserved;
306*cb565728SJerry Jelinek     UINT32                  SharedInfoLength;
307*cb565728SJerry Jelinek 
308*cb565728SJerry Jelinek     /* Shared data immediately follows (Length = SharedInfoLength) */
309*cb565728SJerry Jelinek 
310*cb565728SJerry Jelinek } ACPI_CSRT_GROUP;
311*cb565728SJerry Jelinek 
312*cb565728SJerry Jelinek /* Shared Info subtable */
313*cb565728SJerry Jelinek 
314*cb565728SJerry Jelinek typedef struct acpi_csrt_shared_info
315*cb565728SJerry Jelinek {
316*cb565728SJerry Jelinek     UINT16                  MajorVersion;
317*cb565728SJerry Jelinek     UINT16                  MinorVersion;
318*cb565728SJerry Jelinek     UINT32                  MmioBaseLow;
319*cb565728SJerry Jelinek     UINT32                  MmioBaseHigh;
320*cb565728SJerry Jelinek     UINT32                  GsiInterrupt;
321*cb565728SJerry Jelinek     UINT8                   InterruptPolarity;
322*cb565728SJerry Jelinek     UINT8                   InterruptMode;
323*cb565728SJerry Jelinek     UINT8                   NumChannels;
324*cb565728SJerry Jelinek     UINT8                   DmaAddressWidth;
325*cb565728SJerry Jelinek     UINT16                  BaseRequestLine;
326*cb565728SJerry Jelinek     UINT16                  NumHandshakeSignals;
327*cb565728SJerry Jelinek     UINT32                  MaxBlockSize;
328*cb565728SJerry Jelinek 
329*cb565728SJerry Jelinek     /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */
330*cb565728SJerry Jelinek 
331*cb565728SJerry Jelinek } ACPI_CSRT_SHARED_INFO;
332*cb565728SJerry Jelinek 
333*cb565728SJerry Jelinek /* Resource Descriptor subtable */
334*cb565728SJerry Jelinek 
335*cb565728SJerry Jelinek typedef struct acpi_csrt_descriptor
336*cb565728SJerry Jelinek {
337*cb565728SJerry Jelinek     UINT32                  Length;
338*cb565728SJerry Jelinek     UINT16                  Type;
339*cb565728SJerry Jelinek     UINT16                  Subtype;
340*cb565728SJerry Jelinek     UINT32                  Uid;
341*cb565728SJerry Jelinek 
342*cb565728SJerry Jelinek     /* Resource-specific information immediately follows */
343*cb565728SJerry Jelinek 
344*cb565728SJerry Jelinek } ACPI_CSRT_DESCRIPTOR;
345*cb565728SJerry Jelinek 
346*cb565728SJerry Jelinek 
347*cb565728SJerry Jelinek /* Resource Types */
348*cb565728SJerry Jelinek 
349*cb565728SJerry Jelinek #define ACPI_CSRT_TYPE_INTERRUPT    0x0001
350*cb565728SJerry Jelinek #define ACPI_CSRT_TYPE_TIMER        0x0002
351*cb565728SJerry Jelinek #define ACPI_CSRT_TYPE_DMA          0x0003
352*cb565728SJerry Jelinek 
353*cb565728SJerry Jelinek /* Resource Subtypes */
354*cb565728SJerry Jelinek 
355*cb565728SJerry Jelinek #define ACPI_CSRT_XRUPT_LINE        0x0000
356*cb565728SJerry Jelinek #define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
357*cb565728SJerry Jelinek #define ACPI_CSRT_TIMER             0x0000
358*cb565728SJerry Jelinek #define ACPI_CSRT_DMA_CHANNEL       0x0000
359*cb565728SJerry Jelinek #define ACPI_CSRT_DMA_CONTROLLER    0x0001
360*cb565728SJerry Jelinek 
361*cb565728SJerry Jelinek 
362*cb565728SJerry Jelinek /*******************************************************************************
363*cb565728SJerry Jelinek  *
364*cb565728SJerry Jelinek  * DBG2 - Debug Port Table 2
365*cb565728SJerry Jelinek  *        Version 0 (Both main table and subtables)
366*cb565728SJerry Jelinek  *
367*cb565728SJerry Jelinek  * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015
368*cb565728SJerry Jelinek  *
369*cb565728SJerry Jelinek  ******************************************************************************/
370*cb565728SJerry Jelinek 
371*cb565728SJerry Jelinek typedef struct acpi_table_dbg2
372*cb565728SJerry Jelinek {
373*cb565728SJerry Jelinek     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
374*cb565728SJerry Jelinek     UINT32                  InfoOffset;
375*cb565728SJerry Jelinek     UINT32                  InfoCount;
376*cb565728SJerry Jelinek 
377*cb565728SJerry Jelinek } ACPI_TABLE_DBG2;
378*cb565728SJerry Jelinek 
379*cb565728SJerry Jelinek 
380*cb565728SJerry Jelinek typedef struct acpi_dbg2_header
381*cb565728SJerry Jelinek {
382*cb565728SJerry Jelinek     UINT32                  InfoOffset;
383*cb565728SJerry Jelinek     UINT32                  InfoCount;
384*cb565728SJerry Jelinek 
385*cb565728SJerry Jelinek } ACPI_DBG2_HEADER;
386*cb565728SJerry Jelinek 
387*cb565728SJerry Jelinek 
388*cb565728SJerry Jelinek /* Debug Device Information Subtable */
389*cb565728SJerry Jelinek 
390*cb565728SJerry Jelinek typedef struct acpi_dbg2_device
391*cb565728SJerry Jelinek {
392*cb565728SJerry Jelinek     UINT8                   Revision;
393*cb565728SJerry Jelinek     UINT16                  Length;
394*cb565728SJerry Jelinek     UINT8                   RegisterCount;      /* Number of BaseAddress registers */
395*cb565728SJerry Jelinek     UINT16                  NamepathLength;
396*cb565728SJerry Jelinek     UINT16                  NamepathOffset;
397*cb565728SJerry Jelinek     UINT16                  OemDataLength;
398*cb565728SJerry Jelinek     UINT16                  OemDataOffset;
399*cb565728SJerry Jelinek     UINT16                  PortType;
400*cb565728SJerry Jelinek     UINT16                  PortSubtype;
401*cb565728SJerry Jelinek     UINT16                  Reserved;
402*cb565728SJerry Jelinek     UINT16                  BaseAddressOffset;
403*cb565728SJerry Jelinek     UINT16                  AddressSizeOffset;
404*cb565728SJerry Jelinek     /*
405*cb565728SJerry Jelinek      * Data that follows:
406*cb565728SJerry Jelinek      *    BaseAddress (required) - Each in 12-byte Generic Address Structure format.
407*cb565728SJerry Jelinek      *    AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register.
408*cb565728SJerry Jelinek      *    Namepath    (required) - Null terminated string. Single dot if not supported.
409*cb565728SJerry Jelinek      *    OemData     (optional) - Length is OemDataLength.
410*cb565728SJerry Jelinek      */
411*cb565728SJerry Jelinek } ACPI_DBG2_DEVICE;
412*cb565728SJerry Jelinek 
413*cb565728SJerry Jelinek /* Types for PortType field above */
414*cb565728SJerry Jelinek 
415*cb565728SJerry Jelinek #define ACPI_DBG2_SERIAL_PORT       0x8000
416*cb565728SJerry Jelinek #define ACPI_DBG2_1394_PORT         0x8001
417*cb565728SJerry Jelinek #define ACPI_DBG2_USB_PORT          0x8002
418*cb565728SJerry Jelinek #define ACPI_DBG2_NET_PORT          0x8003
419*cb565728SJerry Jelinek 
420*cb565728SJerry Jelinek /* Subtypes for PortSubtype field above */
421*cb565728SJerry Jelinek 
422*cb565728SJerry Jelinek #define ACPI_DBG2_16550_COMPATIBLE  0x0000
423*cb565728SJerry Jelinek #define ACPI_DBG2_16550_SUBSET      0x0001
424*cb565728SJerry Jelinek #define ACPI_DBG2_ARM_PL011         0x0003
425*cb565728SJerry Jelinek #define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
426*cb565728SJerry Jelinek #define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
427*cb565728SJerry Jelinek #define ACPI_DBG2_ARM_DCC           0x000F
428*cb565728SJerry Jelinek #define ACPI_DBG2_BCM2835           0x0010
429*cb565728SJerry Jelinek 
430*cb565728SJerry Jelinek #define ACPI_DBG2_1394_STANDARD     0x0000
431*cb565728SJerry Jelinek 
432*cb565728SJerry Jelinek #define ACPI_DBG2_USB_XHCI          0x0000
433*cb565728SJerry Jelinek #define ACPI_DBG2_USB_EHCI          0x0001
434*cb565728SJerry Jelinek 
435*cb565728SJerry Jelinek 
436*cb565728SJerry Jelinek /*******************************************************************************
437*cb565728SJerry Jelinek  *
43857190917SDana Myers  * DBGP - Debug Port table
43957190917SDana Myers  *        Version 1
44057190917SDana Myers  *
44157190917SDana Myers  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
44257190917SDana Myers  *
44357190917SDana Myers  ******************************************************************************/
44457190917SDana Myers 
44557190917SDana Myers typedef struct acpi_table_dbgp
44657190917SDana Myers {
44757190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
44857190917SDana Myers     UINT8                   Type;               /* 0=full 16550, 1=subset of 16550 */
44957190917SDana Myers     UINT8                   Reserved[3];
45057190917SDana Myers     ACPI_GENERIC_ADDRESS    DebugPort;
45157190917SDana Myers 
45257190917SDana Myers } ACPI_TABLE_DBGP;
45357190917SDana Myers 
45457190917SDana Myers 
45557190917SDana Myers /*******************************************************************************
45657190917SDana Myers  *
45757190917SDana Myers  * DMAR - DMA Remapping table
45857190917SDana Myers  *        Version 1
45957190917SDana Myers  *
46057190917SDana Myers  * Conforms to "Intel Virtualization Technology for Directed I/O",
461*cb565728SJerry Jelinek  * Version 2.3, October 2014
46257190917SDana Myers  *
46357190917SDana Myers  ******************************************************************************/
46457190917SDana Myers 
46557190917SDana Myers typedef struct acpi_table_dmar
46657190917SDana Myers {
46757190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
46857190917SDana Myers     UINT8                   Width;              /* Host Address Width */
46957190917SDana Myers     UINT8                   Flags;
47057190917SDana Myers     UINT8                   Reserved[10];
47157190917SDana Myers 
47257190917SDana Myers } ACPI_TABLE_DMAR;
47357190917SDana Myers 
47457190917SDana Myers /* Masks for Flags field above */
47557190917SDana Myers 
47657190917SDana Myers #define ACPI_DMAR_INTR_REMAP        (1)
477*cb565728SJerry Jelinek #define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
478*cb565728SJerry Jelinek #define ACPI_DMAR_X2APIC_MODE       (1<<2)
47957190917SDana Myers 
48057190917SDana Myers 
48157190917SDana Myers /* DMAR subtable header */
48257190917SDana Myers 
48357190917SDana Myers typedef struct acpi_dmar_header
48457190917SDana Myers {
48557190917SDana Myers     UINT16                  Type;
48657190917SDana Myers     UINT16                  Length;
48757190917SDana Myers 
48857190917SDana Myers } ACPI_DMAR_HEADER;
48957190917SDana Myers 
49057190917SDana Myers /* Values for subtable type in ACPI_DMAR_HEADER */
49157190917SDana Myers 
49257190917SDana Myers enum AcpiDmarType
49357190917SDana Myers {
49457190917SDana Myers     ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
49557190917SDana Myers     ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
496*cb565728SJerry Jelinek     ACPI_DMAR_TYPE_ROOT_ATS             = 2,
497*cb565728SJerry Jelinek     ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
498*cb565728SJerry Jelinek     ACPI_DMAR_TYPE_NAMESPACE            = 4,
499*cb565728SJerry Jelinek     ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
50057190917SDana Myers };
50157190917SDana Myers 
50257190917SDana Myers 
50357190917SDana Myers /* DMAR Device Scope structure */
50457190917SDana Myers 
50557190917SDana Myers typedef struct acpi_dmar_device_scope
50657190917SDana Myers {
50757190917SDana Myers     UINT8                   EntryType;
50857190917SDana Myers     UINT8                   Length;
50957190917SDana Myers     UINT16                  Reserved;
51057190917SDana Myers     UINT8                   EnumerationId;
51157190917SDana Myers     UINT8                   Bus;
51257190917SDana Myers 
51357190917SDana Myers } ACPI_DMAR_DEVICE_SCOPE;
51457190917SDana Myers 
515*cb565728SJerry Jelinek /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
51657190917SDana Myers 
51757190917SDana Myers enum AcpiDmarScopeType
51857190917SDana Myers {
51957190917SDana Myers     ACPI_DMAR_SCOPE_TYPE_NOT_USED       = 0,
52057190917SDana Myers     ACPI_DMAR_SCOPE_TYPE_ENDPOINT       = 1,
52157190917SDana Myers     ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
52257190917SDana Myers     ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
52357190917SDana Myers     ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
524*cb565728SJerry Jelinek     ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
525*cb565728SJerry Jelinek     ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
52657190917SDana Myers };
52757190917SDana Myers 
52857190917SDana Myers typedef struct acpi_dmar_pci_path
52957190917SDana Myers {
53057190917SDana Myers     UINT8                   Device;
53157190917SDana Myers     UINT8                   Function;
53257190917SDana Myers 
53357190917SDana Myers } ACPI_DMAR_PCI_PATH;
53457190917SDana Myers 
53557190917SDana Myers 
53657190917SDana Myers /*
537*cb565728SJerry Jelinek  * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER
53857190917SDana Myers  */
53957190917SDana Myers 
54057190917SDana Myers /* 0: Hardware Unit Definition */
54157190917SDana Myers 
54257190917SDana Myers typedef struct acpi_dmar_hardware_unit
54357190917SDana Myers {
54457190917SDana Myers     ACPI_DMAR_HEADER        Header;
54557190917SDana Myers     UINT8                   Flags;
54657190917SDana Myers     UINT8                   Reserved;
54757190917SDana Myers     UINT16                  Segment;
54857190917SDana Myers     UINT64                  Address;            /* Register Base Address */
54957190917SDana Myers 
55057190917SDana Myers } ACPI_DMAR_HARDWARE_UNIT;
55157190917SDana Myers 
55257190917SDana Myers /* Masks for Flags field above */
55357190917SDana Myers 
55457190917SDana Myers #define ACPI_DMAR_INCLUDE_ALL       (1)
55557190917SDana Myers 
55657190917SDana Myers 
55757190917SDana Myers /* 1: Reserved Memory Defininition */
55857190917SDana Myers 
55957190917SDana Myers typedef struct acpi_dmar_reserved_memory
56057190917SDana Myers {
56157190917SDana Myers     ACPI_DMAR_HEADER        Header;
56257190917SDana Myers     UINT16                  Reserved;
56357190917SDana Myers     UINT16                  Segment;
56457190917SDana Myers     UINT64                  BaseAddress;        /* 4K aligned base address */
56557190917SDana Myers     UINT64                  EndAddress;         /* 4K aligned limit address */
56657190917SDana Myers 
56757190917SDana Myers } ACPI_DMAR_RESERVED_MEMORY;
56857190917SDana Myers 
56957190917SDana Myers /* Masks for Flags field above */
57057190917SDana Myers 
57157190917SDana Myers #define ACPI_DMAR_ALLOW_ALL         (1)
57257190917SDana Myers 
57357190917SDana Myers 
57457190917SDana Myers /* 2: Root Port ATS Capability Reporting Structure */
57557190917SDana Myers 
57657190917SDana Myers typedef struct acpi_dmar_atsr
57757190917SDana Myers {
57857190917SDana Myers     ACPI_DMAR_HEADER        Header;
57957190917SDana Myers     UINT8                   Flags;
58057190917SDana Myers     UINT8                   Reserved;
58157190917SDana Myers     UINT16                  Segment;
58257190917SDana Myers 
58357190917SDana Myers } ACPI_DMAR_ATSR;
58457190917SDana Myers 
58557190917SDana Myers /* Masks for Flags field above */
58657190917SDana Myers 
58757190917SDana Myers #define ACPI_DMAR_ALL_PORTS         (1)
58857190917SDana Myers 
58957190917SDana Myers 
59057190917SDana Myers /* 3: Remapping Hardware Static Affinity Structure */
59157190917SDana Myers 
59257190917SDana Myers typedef struct acpi_dmar_rhsa
59357190917SDana Myers {
59457190917SDana Myers     ACPI_DMAR_HEADER        Header;
59557190917SDana Myers     UINT32                  Reserved;
59657190917SDana Myers     UINT64                  BaseAddress;
59757190917SDana Myers     UINT32                  ProximityDomain;
59857190917SDana Myers 
59957190917SDana Myers } ACPI_DMAR_RHSA;
60057190917SDana Myers 
60157190917SDana Myers 
602*cb565728SJerry Jelinek /* 4: ACPI Namespace Device Declaration Structure */
603*cb565728SJerry Jelinek 
604*cb565728SJerry Jelinek typedef struct acpi_dmar_andd
605*cb565728SJerry Jelinek {
606*cb565728SJerry Jelinek     ACPI_DMAR_HEADER        Header;
607*cb565728SJerry Jelinek     UINT8                   Reserved[3];
608*cb565728SJerry Jelinek     UINT8                   DeviceNumber;
609*cb565728SJerry Jelinek     char                    DeviceName[1];
610*cb565728SJerry Jelinek 
611*cb565728SJerry Jelinek } ACPI_DMAR_ANDD;
612*cb565728SJerry Jelinek 
613*cb565728SJerry Jelinek 
61457190917SDana Myers /*******************************************************************************
61557190917SDana Myers  *
61657190917SDana Myers  * HPET - High Precision Event Timer table
61757190917SDana Myers  *        Version 1
61857190917SDana Myers  *
61957190917SDana Myers  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
62057190917SDana Myers  * Version 1.0a, October 2004
62157190917SDana Myers  *
62257190917SDana Myers  ******************************************************************************/
62357190917SDana Myers 
62457190917SDana Myers typedef struct acpi_table_hpet
62557190917SDana Myers {
62657190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
62757190917SDana Myers     UINT32                  Id;                 /* Hardware ID of event timer block */
62857190917SDana Myers     ACPI_GENERIC_ADDRESS    Address;            /* Address of event timer block */
62957190917SDana Myers     UINT8                   Sequence;           /* HPET sequence number */
63057190917SDana Myers     UINT16                  MinimumTick;        /* Main counter min tick, periodic mode */
63157190917SDana Myers     UINT8                   Flags;
63257190917SDana Myers 
63357190917SDana Myers } ACPI_TABLE_HPET;
63457190917SDana Myers 
63557190917SDana Myers /* Masks for Flags field above */
63657190917SDana Myers 
63757190917SDana Myers #define ACPI_HPET_PAGE_PROTECT_MASK (3)
63857190917SDana Myers 
63957190917SDana Myers /* Values for Page Protect flags */
64057190917SDana Myers 
64157190917SDana Myers enum AcpiHpetPageProtect
64257190917SDana Myers {
64357190917SDana Myers     ACPI_HPET_NO_PAGE_PROTECT       = 0,
64457190917SDana Myers     ACPI_HPET_PAGE_PROTECT4         = 1,
64557190917SDana Myers     ACPI_HPET_PAGE_PROTECT64        = 2
64657190917SDana Myers };
64757190917SDana Myers 
64857190917SDana Myers 
64957190917SDana Myers /*******************************************************************************
65057190917SDana Myers  *
65157190917SDana Myers  * IBFT - Boot Firmware Table
65257190917SDana Myers  *        Version 1
65357190917SDana Myers  *
65457190917SDana Myers  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
65557190917SDana Myers  * Specification", Version 1.01, March 1, 2007
65657190917SDana Myers  *
65757190917SDana Myers  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
65857190917SDana Myers  * Therefore, it is not currently supported by the disassembler.
65957190917SDana Myers  *
66057190917SDana Myers  ******************************************************************************/
66157190917SDana Myers 
66257190917SDana Myers typedef struct acpi_table_ibft
66357190917SDana Myers {
66457190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
66557190917SDana Myers     UINT8                   Reserved[12];
66657190917SDana Myers 
66757190917SDana Myers } ACPI_TABLE_IBFT;
66857190917SDana Myers 
66957190917SDana Myers 
67057190917SDana Myers /* IBFT common subtable header */
67157190917SDana Myers 
67257190917SDana Myers typedef struct acpi_ibft_header
67357190917SDana Myers {
67457190917SDana Myers     UINT8                   Type;
67557190917SDana Myers     UINT8                   Version;
67657190917SDana Myers     UINT16                  Length;
67757190917SDana Myers     UINT8                   Index;
67857190917SDana Myers     UINT8                   Flags;
67957190917SDana Myers 
68057190917SDana Myers } ACPI_IBFT_HEADER;
68157190917SDana Myers 
68257190917SDana Myers /* Values for Type field above */
68357190917SDana Myers 
68457190917SDana Myers enum AcpiIbftType
68557190917SDana Myers {
68657190917SDana Myers     ACPI_IBFT_TYPE_NOT_USED         = 0,
68757190917SDana Myers     ACPI_IBFT_TYPE_CONTROL          = 1,
68857190917SDana Myers     ACPI_IBFT_TYPE_INITIATOR        = 2,
68957190917SDana Myers     ACPI_IBFT_TYPE_NIC              = 3,
69057190917SDana Myers     ACPI_IBFT_TYPE_TARGET           = 4,
69157190917SDana Myers     ACPI_IBFT_TYPE_EXTENSIONS       = 5,
69257190917SDana Myers     ACPI_IBFT_TYPE_RESERVED         = 6     /* 6 and greater are reserved */
69357190917SDana Myers };
69457190917SDana Myers 
69557190917SDana Myers 
69657190917SDana Myers /* IBFT subtables */
69757190917SDana Myers 
69857190917SDana Myers typedef struct acpi_ibft_control
69957190917SDana Myers {
70057190917SDana Myers     ACPI_IBFT_HEADER        Header;
70157190917SDana Myers     UINT16                  Extensions;
70257190917SDana Myers     UINT16                  InitiatorOffset;
70357190917SDana Myers     UINT16                  Nic0Offset;
70457190917SDana Myers     UINT16                  Target0Offset;
70557190917SDana Myers     UINT16                  Nic1Offset;
70657190917SDana Myers     UINT16                  Target1Offset;
70757190917SDana Myers 
70857190917SDana Myers } ACPI_IBFT_CONTROL;
70957190917SDana Myers 
71057190917SDana Myers typedef struct acpi_ibft_initiator
71157190917SDana Myers {
71257190917SDana Myers     ACPI_IBFT_HEADER        Header;
71357190917SDana Myers     UINT8                   SnsServer[16];
71457190917SDana Myers     UINT8                   SlpServer[16];
71557190917SDana Myers     UINT8                   PrimaryServer[16];
71657190917SDana Myers     UINT8                   SecondaryServer[16];
71757190917SDana Myers     UINT16                  NameLength;
71857190917SDana Myers     UINT16                  NameOffset;
71957190917SDana Myers 
72057190917SDana Myers } ACPI_IBFT_INITIATOR;
72157190917SDana Myers 
72257190917SDana Myers typedef struct acpi_ibft_nic
72357190917SDana Myers {
72457190917SDana Myers     ACPI_IBFT_HEADER        Header;
72557190917SDana Myers     UINT8                   IpAddress[16];
72657190917SDana Myers     UINT8                   SubnetMaskPrefix;
72757190917SDana Myers     UINT8                   Origin;
72857190917SDana Myers     UINT8                   Gateway[16];
72957190917SDana Myers     UINT8                   PrimaryDns[16];
73057190917SDana Myers     UINT8                   SecondaryDns[16];
73157190917SDana Myers     UINT8                   Dhcp[16];
73257190917SDana Myers     UINT16                  Vlan;
73357190917SDana Myers     UINT8                   MacAddress[6];
73457190917SDana Myers     UINT16                  PciAddress;
73557190917SDana Myers     UINT16                  NameLength;
73657190917SDana Myers     UINT16                  NameOffset;
73757190917SDana Myers 
73857190917SDana Myers } ACPI_IBFT_NIC;
73957190917SDana Myers 
74057190917SDana Myers typedef struct acpi_ibft_target
74157190917SDana Myers {
74257190917SDana Myers     ACPI_IBFT_HEADER        Header;
74357190917SDana Myers     UINT8                   TargetIpAddress[16];
74457190917SDana Myers     UINT16                  TargetIpSocket;
74557190917SDana Myers     UINT8                   TargetBootLun[8];
74657190917SDana Myers     UINT8                   ChapType;
74757190917SDana Myers     UINT8                   NicAssociation;
74857190917SDana Myers     UINT16                  TargetNameLength;
74957190917SDana Myers     UINT16                  TargetNameOffset;
75057190917SDana Myers     UINT16                  ChapNameLength;
75157190917SDana Myers     UINT16                  ChapNameOffset;
75257190917SDana Myers     UINT16                  ChapSecretLength;
75357190917SDana Myers     UINT16                  ChapSecretOffset;
75457190917SDana Myers     UINT16                  ReverseChapNameLength;
75557190917SDana Myers     UINT16                  ReverseChapNameOffset;
75657190917SDana Myers     UINT16                  ReverseChapSecretLength;
75757190917SDana Myers     UINT16                  ReverseChapSecretOffset;
75857190917SDana Myers 
75957190917SDana Myers } ACPI_IBFT_TARGET;
76057190917SDana Myers 
76157190917SDana Myers 
76257190917SDana Myers /*******************************************************************************
76357190917SDana Myers  *
764*cb565728SJerry Jelinek  * IORT - IO Remapping Table
765*cb565728SJerry Jelinek  *
766*cb565728SJerry Jelinek  * Conforms to "IO Remapping Table System Software on ARM Platforms",
767*cb565728SJerry Jelinek  * Document number: ARM DEN 0049B, October 2015
768*cb565728SJerry Jelinek  *
769*cb565728SJerry Jelinek  ******************************************************************************/
770*cb565728SJerry Jelinek 
771*cb565728SJerry Jelinek typedef struct acpi_table_iort
772*cb565728SJerry Jelinek {
773*cb565728SJerry Jelinek     ACPI_TABLE_HEADER       Header;
774*cb565728SJerry Jelinek     UINT32                  NodeCount;
775*cb565728SJerry Jelinek     UINT32                  NodeOffset;
776*cb565728SJerry Jelinek     UINT32                  Reserved;
777*cb565728SJerry Jelinek 
778*cb565728SJerry Jelinek } ACPI_TABLE_IORT;
779*cb565728SJerry Jelinek 
780*cb565728SJerry Jelinek 
781*cb565728SJerry Jelinek /*
782*cb565728SJerry Jelinek  * IORT subtables
783*cb565728SJerry Jelinek  */
784*cb565728SJerry Jelinek typedef struct acpi_iort_node
785*cb565728SJerry Jelinek {
786*cb565728SJerry Jelinek     UINT8                   Type;
787*cb565728SJerry Jelinek     UINT16                  Length;
788*cb565728SJerry Jelinek     UINT8                   Revision;
789*cb565728SJerry Jelinek     UINT32                  Reserved;
790*cb565728SJerry Jelinek     UINT32                  MappingCount;
791*cb565728SJerry Jelinek     UINT32                  MappingOffset;
792*cb565728SJerry Jelinek     char                    NodeData[1];
793*cb565728SJerry Jelinek 
794*cb565728SJerry Jelinek } ACPI_IORT_NODE;
795*cb565728SJerry Jelinek 
796*cb565728SJerry Jelinek /* Values for subtable Type above */
797*cb565728SJerry Jelinek 
798*cb565728SJerry Jelinek enum AcpiIortNodeType
799*cb565728SJerry Jelinek {
800*cb565728SJerry Jelinek     ACPI_IORT_NODE_ITS_GROUP            = 0x00,
801*cb565728SJerry Jelinek     ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
802*cb565728SJerry Jelinek     ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
803*cb565728SJerry Jelinek     ACPI_IORT_NODE_SMMU                 = 0x03,
804*cb565728SJerry Jelinek     ACPI_IORT_NODE_SMMU_V3              = 0x04
805*cb565728SJerry Jelinek };
806*cb565728SJerry Jelinek 
807*cb565728SJerry Jelinek 
808*cb565728SJerry Jelinek typedef struct acpi_iort_id_mapping
809*cb565728SJerry Jelinek {
810*cb565728SJerry Jelinek     UINT32                  InputBase;          /* Lowest value in input range */
811*cb565728SJerry Jelinek     UINT32                  IdCount;            /* Number of IDs */
812*cb565728SJerry Jelinek     UINT32                  OutputBase;         /* Lowest value in output range */
813*cb565728SJerry Jelinek     UINT32                  OutputReference;    /* A reference to the output node */
814*cb565728SJerry Jelinek     UINT32                  Flags;
815*cb565728SJerry Jelinek 
816*cb565728SJerry Jelinek } ACPI_IORT_ID_MAPPING;
817*cb565728SJerry Jelinek 
818*cb565728SJerry Jelinek /* Masks for Flags field above for IORT subtable */
819*cb565728SJerry Jelinek 
820*cb565728SJerry Jelinek #define ACPI_IORT_ID_SINGLE_MAPPING (1)
821*cb565728SJerry Jelinek 
822*cb565728SJerry Jelinek 
823*cb565728SJerry Jelinek typedef struct acpi_iort_memory_access
824*cb565728SJerry Jelinek {
825*cb565728SJerry Jelinek     UINT32                  CacheCoherency;
826*cb565728SJerry Jelinek     UINT8                   Hints;
827*cb565728SJerry Jelinek     UINT16                  Reserved;
828*cb565728SJerry Jelinek     UINT8                   MemoryFlags;
829*cb565728SJerry Jelinek 
830*cb565728SJerry Jelinek } ACPI_IORT_MEMORY_ACCESS;
831*cb565728SJerry Jelinek 
832*cb565728SJerry Jelinek /* Values for CacheCoherency field above */
833*cb565728SJerry Jelinek 
834*cb565728SJerry Jelinek #define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
835*cb565728SJerry Jelinek #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
836*cb565728SJerry Jelinek 
837*cb565728SJerry Jelinek /* Masks for Hints field above */
838*cb565728SJerry Jelinek 
839*cb565728SJerry Jelinek #define ACPI_IORT_HT_TRANSIENT          (1)
840*cb565728SJerry Jelinek #define ACPI_IORT_HT_WRITE              (1<<1)
841*cb565728SJerry Jelinek #define ACPI_IORT_HT_READ               (1<<2)
842*cb565728SJerry Jelinek #define ACPI_IORT_HT_OVERRIDE           (1<<3)
843*cb565728SJerry Jelinek 
844*cb565728SJerry Jelinek /* Masks for MemoryFlags field above */
845*cb565728SJerry Jelinek 
846*cb565728SJerry Jelinek #define ACPI_IORT_MF_COHERENCY          (1)
847*cb565728SJerry Jelinek #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
848*cb565728SJerry Jelinek 
849*cb565728SJerry Jelinek 
850*cb565728SJerry Jelinek /*
851*cb565728SJerry Jelinek  * IORT node specific subtables
852*cb565728SJerry Jelinek  */
853*cb565728SJerry Jelinek typedef struct acpi_iort_its_group
854*cb565728SJerry Jelinek {
855*cb565728SJerry Jelinek     UINT32                  ItsCount;
856*cb565728SJerry Jelinek     UINT32                  Identifiers[1];         /* GIC ITS identifier arrary */
857*cb565728SJerry Jelinek 
858*cb565728SJerry Jelinek } ACPI_IORT_ITS_GROUP;
859*cb565728SJerry Jelinek 
860*cb565728SJerry Jelinek 
861*cb565728SJerry Jelinek typedef struct acpi_iort_named_component
862*cb565728SJerry Jelinek {
863*cb565728SJerry Jelinek     UINT32                  NodeFlags;
864*cb565728SJerry Jelinek     UINT64                  MemoryProperties;       /* Memory access properties */
865*cb565728SJerry Jelinek     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
866*cb565728SJerry Jelinek     char                    DeviceName[1];          /* Path of namespace object */
867*cb565728SJerry Jelinek 
868*cb565728SJerry Jelinek } ACPI_IORT_NAMED_COMPONENT;
869*cb565728SJerry Jelinek 
870*cb565728SJerry Jelinek 
871*cb565728SJerry Jelinek typedef struct acpi_iort_root_complex
872*cb565728SJerry Jelinek {
873*cb565728SJerry Jelinek     UINT64                  MemoryProperties;       /* Memory access properties */
874*cb565728SJerry Jelinek     UINT32                  AtsAttribute;
875*cb565728SJerry Jelinek     UINT32                  PciSegmentNumber;
876*cb565728SJerry Jelinek 
877*cb565728SJerry Jelinek } ACPI_IORT_ROOT_COMPLEX;
878*cb565728SJerry Jelinek 
879*cb565728SJerry Jelinek /* Values for AtsAttribute field above */
880*cb565728SJerry Jelinek 
881*cb565728SJerry Jelinek #define ACPI_IORT_ATS_SUPPORTED         0x00000001  /* The root complex supports ATS */
882*cb565728SJerry Jelinek #define ACPI_IORT_ATS_UNSUPPORTED       0x00000000  /* The root complex doesn't support ATS */
883*cb565728SJerry Jelinek 
884*cb565728SJerry Jelinek 
885*cb565728SJerry Jelinek typedef struct acpi_iort_smmu
886*cb565728SJerry Jelinek {
887*cb565728SJerry Jelinek     UINT64                  BaseAddress;            /* SMMU base address */
888*cb565728SJerry Jelinek     UINT64                  Span;                   /* Length of memory range */
889*cb565728SJerry Jelinek     UINT32                  Model;
890*cb565728SJerry Jelinek     UINT32                  Flags;
891*cb565728SJerry Jelinek     UINT32                  GlobalInterruptOffset;
892*cb565728SJerry Jelinek     UINT32                  ContextInterruptCount;
893*cb565728SJerry Jelinek     UINT32                  ContextInterruptOffset;
894*cb565728SJerry Jelinek     UINT32                  PmuInterruptCount;
895*cb565728SJerry Jelinek     UINT32                  PmuInterruptOffset;
896*cb565728SJerry Jelinek     UINT64                  Interrupts[1];          /* Interrupt array */
897*cb565728SJerry Jelinek 
898*cb565728SJerry Jelinek } ACPI_IORT_SMMU;
899*cb565728SJerry Jelinek 
900*cb565728SJerry Jelinek /* Values for Model field above */
901*cb565728SJerry Jelinek 
902*cb565728SJerry Jelinek #define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
903*cb565728SJerry Jelinek #define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
904*cb565728SJerry Jelinek #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
905*cb565728SJerry Jelinek #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
906*cb565728SJerry Jelinek 
907*cb565728SJerry Jelinek /* Masks for Flags field above */
908*cb565728SJerry Jelinek 
909*cb565728SJerry Jelinek #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
910*cb565728SJerry Jelinek #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
911*cb565728SJerry Jelinek 
912*cb565728SJerry Jelinek 
913*cb565728SJerry Jelinek typedef struct acpi_iort_smmu_v3
914*cb565728SJerry Jelinek {
915*cb565728SJerry Jelinek     UINT64                  BaseAddress;            /* SMMUv3 base address */
916*cb565728SJerry Jelinek     UINT32                  Flags;
917*cb565728SJerry Jelinek     UINT32                  Reserved;
918*cb565728SJerry Jelinek     UINT64                  VatosAddress;
919*cb565728SJerry Jelinek     UINT32                  Model;                 /* O: generic SMMUv3 */
920*cb565728SJerry Jelinek     UINT32                  EventGsiv;
921*cb565728SJerry Jelinek     UINT32                  PriGsiv;
922*cb565728SJerry Jelinek     UINT32                  GerrGsiv;
923*cb565728SJerry Jelinek     UINT32                  SyncGsiv;
924*cb565728SJerry Jelinek 
925*cb565728SJerry Jelinek } ACPI_IORT_SMMU_V3;
926*cb565728SJerry Jelinek 
927*cb565728SJerry Jelinek /* Masks for Flags field above */
928*cb565728SJerry Jelinek 
929*cb565728SJerry Jelinek #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
930*cb565728SJerry Jelinek #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
931*cb565728SJerry Jelinek 
932*cb565728SJerry Jelinek 
933*cb565728SJerry Jelinek /*******************************************************************************
934*cb565728SJerry Jelinek  *
93557190917SDana Myers  * IVRS - I/O Virtualization Reporting Structure
93657190917SDana Myers  *        Version 1
93757190917SDana Myers  *
93857190917SDana Myers  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
93957190917SDana Myers  * Revision 1.26, February 2009.
94057190917SDana Myers  *
94157190917SDana Myers  ******************************************************************************/
94257190917SDana Myers 
94357190917SDana Myers typedef struct acpi_table_ivrs
94457190917SDana Myers {
94557190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
94657190917SDana Myers     UINT32                  Info;               /* Common virtualization info */
94757190917SDana Myers     UINT64                  Reserved;
94857190917SDana Myers 
94957190917SDana Myers } ACPI_TABLE_IVRS;
95057190917SDana Myers 
95157190917SDana Myers /* Values for Info field above */
95257190917SDana Myers 
95357190917SDana Myers #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
95457190917SDana Myers #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
95557190917SDana Myers #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
95657190917SDana Myers 
95757190917SDana Myers 
95857190917SDana Myers /* IVRS subtable header */
95957190917SDana Myers 
96057190917SDana Myers typedef struct acpi_ivrs_header
96157190917SDana Myers {
96257190917SDana Myers     UINT8                   Type;               /* Subtable type */
96357190917SDana Myers     UINT8                   Flags;
96457190917SDana Myers     UINT16                  Length;             /* Subtable length */
96557190917SDana Myers     UINT16                  DeviceId;           /* ID of IOMMU */
96657190917SDana Myers 
96757190917SDana Myers } ACPI_IVRS_HEADER;
96857190917SDana Myers 
96957190917SDana Myers /* Values for subtable Type above */
97057190917SDana Myers 
97157190917SDana Myers enum AcpiIvrsType
97257190917SDana Myers {
97357190917SDana Myers     ACPI_IVRS_TYPE_HARDWARE         = 0x10,
97457190917SDana Myers     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
97557190917SDana Myers     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
97657190917SDana Myers     ACPI_IVRS_TYPE_MEMORY3          = 0x22
97757190917SDana Myers };
97857190917SDana Myers 
97957190917SDana Myers /* Masks for Flags field above for IVHD subtable */
98057190917SDana Myers 
98157190917SDana Myers #define ACPI_IVHD_TT_ENABLE         (1)
98257190917SDana Myers #define ACPI_IVHD_PASS_PW           (1<<1)
98357190917SDana Myers #define ACPI_IVHD_RES_PASS_PW       (1<<2)
98457190917SDana Myers #define ACPI_IVHD_ISOC              (1<<3)
98557190917SDana Myers #define ACPI_IVHD_IOTLB             (1<<4)
98657190917SDana Myers 
98757190917SDana Myers /* Masks for Flags field above for IVMD subtable */
98857190917SDana Myers 
98957190917SDana Myers #define ACPI_IVMD_UNITY             (1)
99057190917SDana Myers #define ACPI_IVMD_READ              (1<<1)
99157190917SDana Myers #define ACPI_IVMD_WRITE             (1<<2)
99257190917SDana Myers #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
99357190917SDana Myers 
99457190917SDana Myers 
99557190917SDana Myers /*
99657190917SDana Myers  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
99757190917SDana Myers  */
99857190917SDana Myers 
99957190917SDana Myers /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
100057190917SDana Myers 
100157190917SDana Myers typedef struct acpi_ivrs_hardware
100257190917SDana Myers {
100357190917SDana Myers     ACPI_IVRS_HEADER        Header;
100457190917SDana Myers     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
100557190917SDana Myers     UINT64                  BaseAddress;        /* IOMMU control registers */
100657190917SDana Myers     UINT16                  PciSegmentGroup;
100757190917SDana Myers     UINT16                  Info;               /* MSI number and unit ID */
100857190917SDana Myers     UINT32                  Reserved;
100957190917SDana Myers 
101057190917SDana Myers } ACPI_IVRS_HARDWARE;
101157190917SDana Myers 
101257190917SDana Myers /* Masks for Info field above */
101357190917SDana Myers 
101457190917SDana Myers #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
101557190917SDana Myers #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
101657190917SDana Myers 
101757190917SDana Myers 
101857190917SDana Myers /*
101957190917SDana Myers  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
102057190917SDana Myers  * Upper two bits of the Type field are the (encoded) length of the structure.
102157190917SDana Myers  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
102257190917SDana Myers  * are reserved for future use but not defined.
102357190917SDana Myers  */
102457190917SDana Myers typedef struct acpi_ivrs_de_header
102557190917SDana Myers {
102657190917SDana Myers     UINT8                   Type;
102757190917SDana Myers     UINT16                  Id;
102857190917SDana Myers     UINT8                   DataSetting;
102957190917SDana Myers 
103057190917SDana Myers } ACPI_IVRS_DE_HEADER;
103157190917SDana Myers 
103257190917SDana Myers /* Length of device entry is in the top two bits of Type field above */
103357190917SDana Myers 
103457190917SDana Myers #define ACPI_IVHD_ENTRY_LENGTH      0xC0
103557190917SDana Myers 
103657190917SDana Myers /* Values for device entry Type field above */
103757190917SDana Myers 
103857190917SDana Myers enum AcpiIvrsDeviceEntryType
103957190917SDana Myers {
104057190917SDana Myers     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
104157190917SDana Myers 
104257190917SDana Myers     ACPI_IVRS_TYPE_PAD4             = 0,
104357190917SDana Myers     ACPI_IVRS_TYPE_ALL              = 1,
104457190917SDana Myers     ACPI_IVRS_TYPE_SELECT           = 2,
104557190917SDana Myers     ACPI_IVRS_TYPE_START            = 3,
104657190917SDana Myers     ACPI_IVRS_TYPE_END              = 4,
104757190917SDana Myers 
104857190917SDana Myers     /* 8-byte device entries */
104957190917SDana Myers 
105057190917SDana Myers     ACPI_IVRS_TYPE_PAD8             = 64,
105157190917SDana Myers     ACPI_IVRS_TYPE_NOT_USED         = 65,
105257190917SDana Myers     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
105357190917SDana Myers     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
105457190917SDana Myers     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
105557190917SDana Myers     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
105657190917SDana Myers     ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
105757190917SDana Myers };
105857190917SDana Myers 
105957190917SDana Myers /* Values for Data field above */
106057190917SDana Myers 
106157190917SDana Myers #define ACPI_IVHD_INIT_PASS         (1)
106257190917SDana Myers #define ACPI_IVHD_EINT_PASS         (1<<1)
106357190917SDana Myers #define ACPI_IVHD_NMI_PASS          (1<<2)
106457190917SDana Myers #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
106557190917SDana Myers #define ACPI_IVHD_LINT0_PASS        (1<<6)
106657190917SDana Myers #define ACPI_IVHD_LINT1_PASS        (1<<7)
106757190917SDana Myers 
106857190917SDana Myers 
106957190917SDana Myers /* Types 0-4: 4-byte device entry */
107057190917SDana Myers 
107157190917SDana Myers typedef struct acpi_ivrs_device4
107257190917SDana Myers {
107357190917SDana Myers     ACPI_IVRS_DE_HEADER     Header;
107457190917SDana Myers 
107557190917SDana Myers } ACPI_IVRS_DEVICE4;
107657190917SDana Myers 
107757190917SDana Myers /* Types 66-67: 8-byte device entry */
107857190917SDana Myers 
107957190917SDana Myers typedef struct acpi_ivrs_device8a
108057190917SDana Myers {
108157190917SDana Myers     ACPI_IVRS_DE_HEADER     Header;
108257190917SDana Myers     UINT8                   Reserved1;
108357190917SDana Myers     UINT16                  UsedId;
108457190917SDana Myers     UINT8                   Reserved2;
108557190917SDana Myers 
108657190917SDana Myers } ACPI_IVRS_DEVICE8A;
108757190917SDana Myers 
108857190917SDana Myers /* Types 70-71: 8-byte device entry */
108957190917SDana Myers 
109057190917SDana Myers typedef struct acpi_ivrs_device8b
109157190917SDana Myers {
109257190917SDana Myers     ACPI_IVRS_DE_HEADER     Header;
109357190917SDana Myers     UINT32                  ExtendedData;
109457190917SDana Myers 
109557190917SDana Myers } ACPI_IVRS_DEVICE8B;
109657190917SDana Myers 
109757190917SDana Myers /* Values for ExtendedData above */
109857190917SDana Myers 
109957190917SDana Myers #define ACPI_IVHD_ATS_DISABLED      (1<<31)
110057190917SDana Myers 
110157190917SDana Myers /* Type 72: 8-byte device entry */
110257190917SDana Myers 
110357190917SDana Myers typedef struct acpi_ivrs_device8c
110457190917SDana Myers {
110557190917SDana Myers     ACPI_IVRS_DE_HEADER     Header;
110657190917SDana Myers     UINT8                   Handle;
110757190917SDana Myers     UINT16                  UsedId;
110857190917SDana Myers     UINT8                   Variety;
110957190917SDana Myers 
111057190917SDana Myers } ACPI_IVRS_DEVICE8C;
111157190917SDana Myers 
111257190917SDana Myers /* Values for Variety field above */
111357190917SDana Myers 
111457190917SDana Myers #define ACPI_IVHD_IOAPIC            1
111557190917SDana Myers #define ACPI_IVHD_HPET              2
111657190917SDana Myers 
111757190917SDana Myers 
111857190917SDana Myers /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
111957190917SDana Myers 
112057190917SDana Myers typedef struct acpi_ivrs_memory
112157190917SDana Myers {
112257190917SDana Myers     ACPI_IVRS_HEADER        Header;
112357190917SDana Myers     UINT16                  AuxData;
112457190917SDana Myers     UINT64                  Reserved;
112557190917SDana Myers     UINT64                  StartAddress;
112657190917SDana Myers     UINT64                  MemoryLength;
112757190917SDana Myers 
112857190917SDana Myers } ACPI_IVRS_MEMORY;
112957190917SDana Myers 
113057190917SDana Myers 
113157190917SDana Myers /*******************************************************************************
113257190917SDana Myers  *
1133*cb565728SJerry Jelinek  * LPIT - Low Power Idle Table
1134*cb565728SJerry Jelinek  *
1135*cb565728SJerry Jelinek  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1136*cb565728SJerry Jelinek  *
1137*cb565728SJerry Jelinek  ******************************************************************************/
1138*cb565728SJerry Jelinek 
1139*cb565728SJerry Jelinek typedef struct acpi_table_lpit
1140*cb565728SJerry Jelinek {
1141*cb565728SJerry Jelinek     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1142*cb565728SJerry Jelinek 
1143*cb565728SJerry Jelinek } ACPI_TABLE_LPIT;
1144*cb565728SJerry Jelinek 
1145*cb565728SJerry Jelinek 
1146*cb565728SJerry Jelinek /* LPIT subtable header */
1147*cb565728SJerry Jelinek 
1148*cb565728SJerry Jelinek typedef struct acpi_lpit_header
1149*cb565728SJerry Jelinek {
1150*cb565728SJerry Jelinek     UINT32                  Type;               /* Subtable type */
1151*cb565728SJerry Jelinek     UINT32                  Length;             /* Subtable length */
1152*cb565728SJerry Jelinek     UINT16                  UniqueId;
1153*cb565728SJerry Jelinek     UINT16                  Reserved;
1154*cb565728SJerry Jelinek     UINT32                  Flags;
1155*cb565728SJerry Jelinek 
1156*cb565728SJerry Jelinek } ACPI_LPIT_HEADER;
1157*cb565728SJerry Jelinek 
1158*cb565728SJerry Jelinek /* Values for subtable Type above */
1159*cb565728SJerry Jelinek 
1160*cb565728SJerry Jelinek enum AcpiLpitType
1161*cb565728SJerry Jelinek {
1162*cb565728SJerry Jelinek     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
1163*cb565728SJerry Jelinek     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
1164*cb565728SJerry Jelinek };
1165*cb565728SJerry Jelinek 
1166*cb565728SJerry Jelinek /* Masks for Flags field above  */
1167*cb565728SJerry Jelinek 
1168*cb565728SJerry Jelinek #define ACPI_LPIT_STATE_DISABLED    (1)
1169*cb565728SJerry Jelinek #define ACPI_LPIT_NO_COUNTER        (1<<1)
1170*cb565728SJerry Jelinek 
1171*cb565728SJerry Jelinek /*
1172*cb565728SJerry Jelinek  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
1173*cb565728SJerry Jelinek  */
1174*cb565728SJerry Jelinek 
1175*cb565728SJerry Jelinek /* 0x00: Native C-state instruction based LPI structure */
1176*cb565728SJerry Jelinek 
1177*cb565728SJerry Jelinek typedef struct acpi_lpit_native
1178*cb565728SJerry Jelinek {
1179*cb565728SJerry Jelinek     ACPI_LPIT_HEADER        Header;
1180*cb565728SJerry Jelinek     ACPI_GENERIC_ADDRESS    EntryTrigger;
1181*cb565728SJerry Jelinek     UINT32                  Residency;
1182*cb565728SJerry Jelinek     UINT32                  Latency;
1183*cb565728SJerry Jelinek     ACPI_GENERIC_ADDRESS    ResidencyCounter;
1184*cb565728SJerry Jelinek     UINT64                  CounterFrequency;
1185*cb565728SJerry Jelinek 
1186*cb565728SJerry Jelinek } ACPI_LPIT_NATIVE;
1187*cb565728SJerry Jelinek 
1188*cb565728SJerry Jelinek 
1189*cb565728SJerry Jelinek /*******************************************************************************
1190*cb565728SJerry Jelinek  *
1191*cb565728SJerry Jelinek  * MCFG - PCI Memory Mapped Configuration table and subtable
119257190917SDana Myers  *        Version 1
119357190917SDana Myers  *
119457190917SDana Myers  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
119557190917SDana Myers  *
119657190917SDana Myers  ******************************************************************************/
119757190917SDana Myers 
119857190917SDana Myers typedef struct acpi_table_mcfg
119957190917SDana Myers {
120057190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
120157190917SDana Myers     UINT8                   Reserved[8];
120257190917SDana Myers 
120357190917SDana Myers } ACPI_TABLE_MCFG;
120457190917SDana Myers 
120557190917SDana Myers 
120657190917SDana Myers /* Subtable */
120757190917SDana Myers 
120857190917SDana Myers typedef struct acpi_mcfg_allocation
120957190917SDana Myers {
121057190917SDana Myers     UINT64                  Address;            /* Base address, processor-relative */
121157190917SDana Myers     UINT16                  PciSegment;         /* PCI segment group number */
121257190917SDana Myers     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
121357190917SDana Myers     UINT8                   EndBusNumber;       /* Final PCI Bus number */
121457190917SDana Myers     UINT32                  Reserved;
121557190917SDana Myers 
121657190917SDana Myers } ACPI_MCFG_ALLOCATION;
121757190917SDana Myers 
121857190917SDana Myers 
121957190917SDana Myers /*******************************************************************************
122057190917SDana Myers  *
122126f3cdf0SGordon Ross  * MCHI - Management Controller Host Interface Table
122226f3cdf0SGordon Ross  *        Version 1
122326f3cdf0SGordon Ross  *
122426f3cdf0SGordon Ross  * Conforms to "Management Component Transport Protocol (MCTP) Host
122526f3cdf0SGordon Ross  * Interface Specification", Revision 1.0.0a, October 13, 2009
122626f3cdf0SGordon Ross  *
122726f3cdf0SGordon Ross  ******************************************************************************/
122826f3cdf0SGordon Ross 
122926f3cdf0SGordon Ross typedef struct acpi_table_mchi
123026f3cdf0SGordon Ross {
123126f3cdf0SGordon Ross     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
123226f3cdf0SGordon Ross     UINT8                   InterfaceType;
123326f3cdf0SGordon Ross     UINT8                   Protocol;
123426f3cdf0SGordon Ross     UINT64                  ProtocolData;
123526f3cdf0SGordon Ross     UINT8                   InterruptType;
123626f3cdf0SGordon Ross     UINT8                   Gpe;
123726f3cdf0SGordon Ross     UINT8                   PciDeviceFlag;
123826f3cdf0SGordon Ross     UINT32                  GlobalInterrupt;
123926f3cdf0SGordon Ross     ACPI_GENERIC_ADDRESS    ControlRegister;
124026f3cdf0SGordon Ross     UINT8                   PciSegment;
124126f3cdf0SGordon Ross     UINT8                   PciBus;
124226f3cdf0SGordon Ross     UINT8                   PciDevice;
124326f3cdf0SGordon Ross     UINT8                   PciFunction;
124426f3cdf0SGordon Ross 
124526f3cdf0SGordon Ross } ACPI_TABLE_MCHI;
124626f3cdf0SGordon Ross 
124726f3cdf0SGordon Ross 
124826f3cdf0SGordon Ross /*******************************************************************************
124926f3cdf0SGordon Ross  *
1250*cb565728SJerry Jelinek  * MSDM - Microsoft Data Management table
1251*cb565728SJerry Jelinek  *
1252*cb565728SJerry Jelinek  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1253*cb565728SJerry Jelinek  * November 29, 2011. Copyright 2011 Microsoft
1254*cb565728SJerry Jelinek  *
1255*cb565728SJerry Jelinek  ******************************************************************************/
1256*cb565728SJerry Jelinek 
1257*cb565728SJerry Jelinek /* Basic MSDM table is only the common ACPI header */
1258*cb565728SJerry Jelinek 
1259*cb565728SJerry Jelinek typedef struct acpi_table_msdm
1260*cb565728SJerry Jelinek {
1261*cb565728SJerry Jelinek     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1262*cb565728SJerry Jelinek 
1263*cb565728SJerry Jelinek } ACPI_TABLE_MSDM;
1264*cb565728SJerry Jelinek 
1265*cb565728SJerry Jelinek 
1266*cb565728SJerry Jelinek /*******************************************************************************
1267*cb565728SJerry Jelinek  *
1268*cb565728SJerry Jelinek  * MTMR - MID Timer Table
126926f3cdf0SGordon Ross  *        Version 1
127026f3cdf0SGordon Ross  *
1271*cb565728SJerry Jelinek  * Conforms to "Simple Firmware Interface Specification",
1272*cb565728SJerry Jelinek  * Draft 0.8.2, Oct 19, 2010
1273*cb565728SJerry Jelinek  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
1274*cb565728SJerry Jelinek  *
1275*cb565728SJerry Jelinek  ******************************************************************************/
1276*cb565728SJerry Jelinek 
1277*cb565728SJerry Jelinek typedef struct acpi_table_mtmr
1278*cb565728SJerry Jelinek {
1279*cb565728SJerry Jelinek     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1280*cb565728SJerry Jelinek 
1281*cb565728SJerry Jelinek } ACPI_TABLE_MTMR;
1282*cb565728SJerry Jelinek 
1283*cb565728SJerry Jelinek /* MTMR entry */
1284*cb565728SJerry Jelinek 
1285*cb565728SJerry Jelinek typedef struct acpi_mtmr_entry
1286*cb565728SJerry Jelinek {
1287*cb565728SJerry Jelinek     ACPI_GENERIC_ADDRESS    PhysicalAddress;
1288*cb565728SJerry Jelinek     UINT32                  Frequency;
1289*cb565728SJerry Jelinek     UINT32                  Irq;
1290*cb565728SJerry Jelinek 
1291*cb565728SJerry Jelinek } ACPI_MTMR_ENTRY;
1292*cb565728SJerry Jelinek 
1293*cb565728SJerry Jelinek 
1294*cb565728SJerry Jelinek /*******************************************************************************
1295*cb565728SJerry Jelinek  *
1296*cb565728SJerry Jelinek  * SLIC - Software Licensing Description Table
1297*cb565728SJerry Jelinek  *
1298*cb565728SJerry Jelinek  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1299*cb565728SJerry Jelinek  * November 29, 2011. Copyright 2011 Microsoft
130026f3cdf0SGordon Ross  *
130126f3cdf0SGordon Ross  ******************************************************************************/
130226f3cdf0SGordon Ross 
130326f3cdf0SGordon Ross /* Basic SLIC table is only the common ACPI header */
130426f3cdf0SGordon Ross 
130526f3cdf0SGordon Ross typedef struct acpi_table_slic
130626f3cdf0SGordon Ross {
130726f3cdf0SGordon Ross     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
130826f3cdf0SGordon Ross 
130926f3cdf0SGordon Ross } ACPI_TABLE_SLIC;
131026f3cdf0SGordon Ross 
131126f3cdf0SGordon Ross 
131226f3cdf0SGordon Ross /*******************************************************************************
131326f3cdf0SGordon Ross  *
131457190917SDana Myers  * SPCR - Serial Port Console Redirection table
1315*cb565728SJerry Jelinek  *        Version 2
131657190917SDana Myers  *
131757190917SDana Myers  * Conforms to "Serial Port Console Redirection Table",
1318*cb565728SJerry Jelinek  * Version 1.03, August 10, 2015
131957190917SDana Myers  *
132057190917SDana Myers  ******************************************************************************/
132157190917SDana Myers 
132257190917SDana Myers typedef struct acpi_table_spcr
132357190917SDana Myers {
132457190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
132557190917SDana Myers     UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
132657190917SDana Myers     UINT8                   Reserved[3];
132757190917SDana Myers     ACPI_GENERIC_ADDRESS    SerialPort;
132857190917SDana Myers     UINT8                   InterruptType;
132957190917SDana Myers     UINT8                   PcInterrupt;
133057190917SDana Myers     UINT32                  Interrupt;
133157190917SDana Myers     UINT8                   BaudRate;
133257190917SDana Myers     UINT8                   Parity;
133357190917SDana Myers     UINT8                   StopBits;
133457190917SDana Myers     UINT8                   FlowControl;
133557190917SDana Myers     UINT8                   TerminalType;
133657190917SDana Myers     UINT8                   Reserved1;
133757190917SDana Myers     UINT16                  PciDeviceId;
133857190917SDana Myers     UINT16                  PciVendorId;
133957190917SDana Myers     UINT8                   PciBus;
134057190917SDana Myers     UINT8                   PciDevice;
134157190917SDana Myers     UINT8                   PciFunction;
134257190917SDana Myers     UINT32                  PciFlags;
134357190917SDana Myers     UINT8                   PciSegment;
134457190917SDana Myers     UINT32                  Reserved2;
134557190917SDana Myers 
134657190917SDana Myers } ACPI_TABLE_SPCR;
134757190917SDana Myers 
134857190917SDana Myers /* Masks for PciFlags field above */
134957190917SDana Myers 
135057190917SDana Myers #define ACPI_SPCR_DO_NOT_DISABLE    (1)
135157190917SDana Myers 
1352*cb565728SJerry Jelinek /* Values for Interface Type: See the definition of the DBG2 table */
1353*cb565728SJerry Jelinek 
135457190917SDana Myers 
135557190917SDana Myers /*******************************************************************************
135657190917SDana Myers  *
135757190917SDana Myers  * SPMI - Server Platform Management Interface table
135857190917SDana Myers  *        Version 5
135957190917SDana Myers  *
136057190917SDana Myers  * Conforms to "Intelligent Platform Management Interface Specification
136157190917SDana Myers  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
136257190917SDana Myers  * June 12, 2009 markup.
136357190917SDana Myers  *
136457190917SDana Myers  ******************************************************************************/
136557190917SDana Myers 
136657190917SDana Myers typedef struct acpi_table_spmi
136757190917SDana Myers {
136857190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
136957190917SDana Myers     UINT8                   InterfaceType;
137057190917SDana Myers     UINT8                   Reserved;           /* Must be 1 */
137157190917SDana Myers     UINT16                  SpecRevision;       /* Version of IPMI */
137257190917SDana Myers     UINT8                   InterruptType;
137357190917SDana Myers     UINT8                   GpeNumber;          /* GPE assigned */
137457190917SDana Myers     UINT8                   Reserved1;
137557190917SDana Myers     UINT8                   PciDeviceFlag;
137657190917SDana Myers     UINT32                  Interrupt;
137757190917SDana Myers     ACPI_GENERIC_ADDRESS    IpmiRegister;
137857190917SDana Myers     UINT8                   PciSegment;
137957190917SDana Myers     UINT8                   PciBus;
138057190917SDana Myers     UINT8                   PciDevice;
138157190917SDana Myers     UINT8                   PciFunction;
138257190917SDana Myers     UINT8                   Reserved2;
138357190917SDana Myers 
138457190917SDana Myers } ACPI_TABLE_SPMI;
138557190917SDana Myers 
138657190917SDana Myers /* Values for InterfaceType above */
138757190917SDana Myers 
138857190917SDana Myers enum AcpiSpmiInterfaceTypes
138957190917SDana Myers {
139057190917SDana Myers     ACPI_SPMI_NOT_USED              = 0,
139157190917SDana Myers     ACPI_SPMI_KEYBOARD              = 1,
139257190917SDana Myers     ACPI_SPMI_SMI                   = 2,
139357190917SDana Myers     ACPI_SPMI_BLOCK_TRANSFER        = 3,
139457190917SDana Myers     ACPI_SPMI_SMBUS                 = 4,
139557190917SDana Myers     ACPI_SPMI_RESERVED              = 5         /* 5 and above are reserved */
139657190917SDana Myers };
139757190917SDana Myers 
139857190917SDana Myers 
139957190917SDana Myers /*******************************************************************************
140057190917SDana Myers  *
140157190917SDana Myers  * TCPA - Trusted Computing Platform Alliance table
1402*cb565728SJerry Jelinek  *        Version 2
140357190917SDana Myers  *
1404*cb565728SJerry Jelinek  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1405*cb565728SJerry Jelinek  * December 19, 2014
1406*cb565728SJerry Jelinek  *
1407*cb565728SJerry Jelinek  * NOTE: There are two versions of the table with the same signature --
1408*cb565728SJerry Jelinek  * the client version and the server version. The common PlatformClass
1409*cb565728SJerry Jelinek  * field is used to differentiate the two types of tables.
141057190917SDana Myers  *
141157190917SDana Myers  ******************************************************************************/
141257190917SDana Myers 
1413*cb565728SJerry Jelinek typedef struct acpi_table_tcpa_hdr
141457190917SDana Myers {
141557190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1416*cb565728SJerry Jelinek     UINT16                  PlatformClass;
1417*cb565728SJerry Jelinek 
1418*cb565728SJerry Jelinek } ACPI_TABLE_TCPA_HDR;
1419*cb565728SJerry Jelinek 
1420*cb565728SJerry Jelinek /*
1421*cb565728SJerry Jelinek  * Values for PlatformClass above.
1422*cb565728SJerry Jelinek  * This is how the client and server subtables are differentiated
1423*cb565728SJerry Jelinek  */
1424*cb565728SJerry Jelinek #define ACPI_TCPA_CLIENT_TABLE          0
1425*cb565728SJerry Jelinek #define ACPI_TCPA_SERVER_TABLE          1
1426*cb565728SJerry Jelinek 
1427*cb565728SJerry Jelinek 
1428*cb565728SJerry Jelinek typedef struct acpi_table_tcpa_client
1429*cb565728SJerry Jelinek {
1430*cb565728SJerry Jelinek     UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
143157190917SDana Myers     UINT64                  LogAddress;         /* Address of the event log area */
143257190917SDana Myers 
1433*cb565728SJerry Jelinek } ACPI_TABLE_TCPA_CLIENT;
1434*cb565728SJerry Jelinek 
1435*cb565728SJerry Jelinek typedef struct acpi_table_tcpa_server
1436*cb565728SJerry Jelinek {
1437*cb565728SJerry Jelinek     UINT16                  Reserved;
1438*cb565728SJerry Jelinek     UINT64                  MinimumLogLength;   /* Minimum length for the event log area */
1439*cb565728SJerry Jelinek     UINT64                  LogAddress;         /* Address of the event log area */
1440*cb565728SJerry Jelinek     UINT16                  SpecRevision;
1441*cb565728SJerry Jelinek     UINT8                   DeviceFlags;
1442*cb565728SJerry Jelinek     UINT8                   InterruptFlags;
1443*cb565728SJerry Jelinek     UINT8                   GpeNumber;
1444*cb565728SJerry Jelinek     UINT8                   Reserved2[3];
1445*cb565728SJerry Jelinek     UINT32                  GlobalInterrupt;
1446*cb565728SJerry Jelinek     ACPI_GENERIC_ADDRESS    Address;
1447*cb565728SJerry Jelinek     UINT32                  Reserved3;
1448*cb565728SJerry Jelinek     ACPI_GENERIC_ADDRESS    ConfigAddress;
1449*cb565728SJerry Jelinek     UINT8                   Group;
1450*cb565728SJerry Jelinek     UINT8                   Bus;                /* PCI Bus/Segment/Function numbers */
1451*cb565728SJerry Jelinek     UINT8                   Device;
1452*cb565728SJerry Jelinek     UINT8                   Function;
1453*cb565728SJerry Jelinek 
1454*cb565728SJerry Jelinek } ACPI_TABLE_TCPA_SERVER;
1455*cb565728SJerry Jelinek 
1456*cb565728SJerry Jelinek /* Values for DeviceFlags above */
1457*cb565728SJerry Jelinek 
1458*cb565728SJerry Jelinek #define ACPI_TCPA_PCI_DEVICE            (1)
1459*cb565728SJerry Jelinek #define ACPI_TCPA_BUS_PNP               (1<<1)
1460*cb565728SJerry Jelinek #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
1461*cb565728SJerry Jelinek 
1462*cb565728SJerry Jelinek /* Values for InterruptFlags above */
1463*cb565728SJerry Jelinek 
1464*cb565728SJerry Jelinek #define ACPI_TCPA_INTERRUPT_MODE        (1)
1465*cb565728SJerry Jelinek #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
1466*cb565728SJerry Jelinek #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
1467*cb565728SJerry Jelinek #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
1468*cb565728SJerry Jelinek 
1469*cb565728SJerry Jelinek 
1470*cb565728SJerry Jelinek /*******************************************************************************
1471*cb565728SJerry Jelinek  *
1472*cb565728SJerry Jelinek  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
1473*cb565728SJerry Jelinek  *        Version 4
1474*cb565728SJerry Jelinek  *
1475*cb565728SJerry Jelinek  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1476*cb565728SJerry Jelinek  * December 19, 2014
1477*cb565728SJerry Jelinek  *
1478*cb565728SJerry Jelinek  ******************************************************************************/
1479*cb565728SJerry Jelinek 
1480*cb565728SJerry Jelinek typedef struct acpi_table_tpm2
1481*cb565728SJerry Jelinek {
1482*cb565728SJerry Jelinek     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1483*cb565728SJerry Jelinek     UINT16                  PlatformClass;
1484*cb565728SJerry Jelinek     UINT16                  Reserved;
1485*cb565728SJerry Jelinek     UINT64                  ControlAddress;
1486*cb565728SJerry Jelinek     UINT32                  StartMethod;
1487*cb565728SJerry Jelinek 
1488*cb565728SJerry Jelinek     /* Platform-specific data follows */
1489*cb565728SJerry Jelinek 
1490*cb565728SJerry Jelinek } ACPI_TABLE_TPM2;
1491*cb565728SJerry Jelinek 
1492*cb565728SJerry Jelinek /* Values for StartMethod above */
1493*cb565728SJerry Jelinek 
1494*cb565728SJerry Jelinek #define ACPI_TPM2_NOT_ALLOWED                       0
1495*cb565728SJerry Jelinek #define ACPI_TPM2_START_METHOD                      2
1496*cb565728SJerry Jelinek #define ACPI_TPM2_MEMORY_MAPPED                     6
1497*cb565728SJerry Jelinek #define ACPI_TPM2_COMMAND_BUFFER                    7
1498*cb565728SJerry Jelinek #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
149957190917SDana Myers 
150057190917SDana Myers 
150157190917SDana Myers /*******************************************************************************
150257190917SDana Myers  *
150357190917SDana Myers  * UEFI - UEFI Boot optimization Table
150457190917SDana Myers  *        Version 1
150557190917SDana Myers  *
150657190917SDana Myers  * Conforms to "Unified Extensible Firmware Interface Specification",
150757190917SDana Myers  * Version 2.3, May 8, 2009
150857190917SDana Myers  *
150957190917SDana Myers  ******************************************************************************/
151057190917SDana Myers 
151157190917SDana Myers typedef struct acpi_table_uefi
151257190917SDana Myers {
151357190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
151457190917SDana Myers     UINT8                   Identifier[16];     /* UUID identifier */
151557190917SDana Myers     UINT16                  DataOffset;         /* Offset of remaining data in table */
151657190917SDana Myers 
151757190917SDana Myers } ACPI_TABLE_UEFI;
151857190917SDana Myers 
151957190917SDana Myers 
152057190917SDana Myers /*******************************************************************************
152157190917SDana Myers  *
1522*cb565728SJerry Jelinek  * VRTC - Virtual Real Time Clock Table
1523*cb565728SJerry Jelinek  *        Version 1
1524*cb565728SJerry Jelinek  *
1525*cb565728SJerry Jelinek  * Conforms to "Simple Firmware Interface Specification",
1526*cb565728SJerry Jelinek  * Draft 0.8.2, Oct 19, 2010
1527*cb565728SJerry Jelinek  * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
1528*cb565728SJerry Jelinek  *
1529*cb565728SJerry Jelinek  ******************************************************************************/
1530*cb565728SJerry Jelinek 
1531*cb565728SJerry Jelinek typedef struct acpi_table_vrtc
1532*cb565728SJerry Jelinek {
1533*cb565728SJerry Jelinek     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1534*cb565728SJerry Jelinek 
1535*cb565728SJerry Jelinek } ACPI_TABLE_VRTC;
1536*cb565728SJerry Jelinek 
1537*cb565728SJerry Jelinek /* VRTC entry */
1538*cb565728SJerry Jelinek 
1539*cb565728SJerry Jelinek typedef struct acpi_vrtc_entry
1540*cb565728SJerry Jelinek {
1541*cb565728SJerry Jelinek     ACPI_GENERIC_ADDRESS    PhysicalAddress;
1542*cb565728SJerry Jelinek     UINT32                  Irq;
1543*cb565728SJerry Jelinek 
1544*cb565728SJerry Jelinek } ACPI_VRTC_ENTRY;
1545*cb565728SJerry Jelinek 
1546*cb565728SJerry Jelinek 
1547*cb565728SJerry Jelinek /*******************************************************************************
1548*cb565728SJerry Jelinek  *
154957190917SDana Myers  * WAET - Windows ACPI Emulated devices Table
155057190917SDana Myers  *        Version 1
155157190917SDana Myers  *
155257190917SDana Myers  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
155357190917SDana Myers  *
155457190917SDana Myers  ******************************************************************************/
155557190917SDana Myers 
155657190917SDana Myers typedef struct acpi_table_waet
155757190917SDana Myers {
155857190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
155957190917SDana Myers     UINT32                  Flags;
156057190917SDana Myers 
156157190917SDana Myers } ACPI_TABLE_WAET;
156257190917SDana Myers 
156357190917SDana Myers /* Masks for Flags field above */
156457190917SDana Myers 
156557190917SDana Myers #define ACPI_WAET_RTC_NO_ACK        (1)         /* RTC requires no int acknowledge */
156657190917SDana Myers #define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
156757190917SDana Myers 
156857190917SDana Myers 
156957190917SDana Myers /*******************************************************************************
157057190917SDana Myers  *
157157190917SDana Myers  * WDAT - Watchdog Action Table
157257190917SDana Myers  *        Version 1
157357190917SDana Myers  *
157457190917SDana Myers  * Conforms to "Hardware Watchdog Timers Design Specification",
157557190917SDana Myers  * Copyright 2006 Microsoft Corporation.
157657190917SDana Myers  *
157757190917SDana Myers  ******************************************************************************/
157857190917SDana Myers 
157957190917SDana Myers typedef struct acpi_table_wdat
158057190917SDana Myers {
158157190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
158257190917SDana Myers     UINT32                  HeaderLength;       /* Watchdog Header Length */
158357190917SDana Myers     UINT16                  PciSegment;         /* PCI Segment number */
158457190917SDana Myers     UINT8                   PciBus;             /* PCI Bus number */
158557190917SDana Myers     UINT8                   PciDevice;          /* PCI Device number */
158657190917SDana Myers     UINT8                   PciFunction;        /* PCI Function number */
158757190917SDana Myers     UINT8                   Reserved[3];
158857190917SDana Myers     UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
158957190917SDana Myers     UINT32                  MaxCount;           /* Maximum counter value supported */
159057190917SDana Myers     UINT32                  MinCount;           /* Minimum counter value */
159157190917SDana Myers     UINT8                   Flags;
159257190917SDana Myers     UINT8                   Reserved2[3];
159357190917SDana Myers     UINT32                  Entries;            /* Number of watchdog entries that follow */
159457190917SDana Myers 
159557190917SDana Myers } ACPI_TABLE_WDAT;
159657190917SDana Myers 
159757190917SDana Myers /* Masks for Flags field above */
159857190917SDana Myers 
159957190917SDana Myers #define ACPI_WDAT_ENABLED           (1)
160057190917SDana Myers #define ACPI_WDAT_STOPPED           0x80
160157190917SDana Myers 
160257190917SDana Myers 
160357190917SDana Myers /* WDAT Instruction Entries (actions) */
160457190917SDana Myers 
160557190917SDana Myers typedef struct acpi_wdat_entry
160657190917SDana Myers {
160757190917SDana Myers     UINT8                   Action;
160857190917SDana Myers     UINT8                   Instruction;
160957190917SDana Myers     UINT16                  Reserved;
161057190917SDana Myers     ACPI_GENERIC_ADDRESS    RegisterRegion;
161157190917SDana Myers     UINT32                  Value;              /* Value used with Read/Write register */
161257190917SDana Myers     UINT32                  Mask;               /* Bitmask required for this register instruction */
161357190917SDana Myers 
161457190917SDana Myers } ACPI_WDAT_ENTRY;
161557190917SDana Myers 
161657190917SDana Myers /* Values for Action field above */
161757190917SDana Myers 
161857190917SDana Myers enum AcpiWdatActions
161957190917SDana Myers {
162057190917SDana Myers     ACPI_WDAT_RESET                 = 1,
162157190917SDana Myers     ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
162257190917SDana Myers     ACPI_WDAT_GET_COUNTDOWN         = 5,
162357190917SDana Myers     ACPI_WDAT_SET_COUNTDOWN         = 6,
162457190917SDana Myers     ACPI_WDAT_GET_RUNNING_STATE     = 8,
162557190917SDana Myers     ACPI_WDAT_SET_RUNNING_STATE     = 9,
162657190917SDana Myers     ACPI_WDAT_GET_STOPPED_STATE     = 10,
162757190917SDana Myers     ACPI_WDAT_SET_STOPPED_STATE     = 11,
162857190917SDana Myers     ACPI_WDAT_GET_REBOOT            = 16,
162957190917SDana Myers     ACPI_WDAT_SET_REBOOT            = 17,
163057190917SDana Myers     ACPI_WDAT_GET_SHUTDOWN          = 18,
163157190917SDana Myers     ACPI_WDAT_SET_SHUTDOWN          = 19,
163257190917SDana Myers     ACPI_WDAT_GET_STATUS            = 32,
163357190917SDana Myers     ACPI_WDAT_SET_STATUS            = 33,
163457190917SDana Myers     ACPI_WDAT_ACTION_RESERVED       = 34    /* 34 and greater are reserved */
163557190917SDana Myers };
163657190917SDana Myers 
163757190917SDana Myers /* Values for Instruction field above */
163857190917SDana Myers 
163957190917SDana Myers enum AcpiWdatInstructions
164057190917SDana Myers {
164157190917SDana Myers     ACPI_WDAT_READ_VALUE            = 0,
164257190917SDana Myers     ACPI_WDAT_READ_COUNTDOWN        = 1,
164357190917SDana Myers     ACPI_WDAT_WRITE_VALUE           = 2,
164457190917SDana Myers     ACPI_WDAT_WRITE_COUNTDOWN       = 3,
164557190917SDana Myers     ACPI_WDAT_INSTRUCTION_RESERVED  = 4,    /* 4 and greater are reserved */
164657190917SDana Myers     ACPI_WDAT_PRESERVE_REGISTER     = 0x80  /* Except for this value */
164757190917SDana Myers };
164857190917SDana Myers 
164957190917SDana Myers 
165057190917SDana Myers /*******************************************************************************
165157190917SDana Myers  *
165226f3cdf0SGordon Ross  * WDDT - Watchdog Descriptor Table
165326f3cdf0SGordon Ross  *        Version 1
165426f3cdf0SGordon Ross  *
165526f3cdf0SGordon Ross  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
165626f3cdf0SGordon Ross  * Version 001, September 2002
165726f3cdf0SGordon Ross  *
165826f3cdf0SGordon Ross  ******************************************************************************/
165926f3cdf0SGordon Ross 
166026f3cdf0SGordon Ross typedef struct acpi_table_wddt
166126f3cdf0SGordon Ross {
166226f3cdf0SGordon Ross     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
166326f3cdf0SGordon Ross     UINT16                  SpecVersion;
166426f3cdf0SGordon Ross     UINT16                  TableVersion;
166526f3cdf0SGordon Ross     UINT16                  PciVendorId;
166626f3cdf0SGordon Ross     ACPI_GENERIC_ADDRESS    Address;
166726f3cdf0SGordon Ross     UINT16                  MaxCount;           /* Maximum counter value supported */
166826f3cdf0SGordon Ross     UINT16                  MinCount;           /* Minimum counter value supported */
166926f3cdf0SGordon Ross     UINT16                  Period;
167026f3cdf0SGordon Ross     UINT16                  Status;
167126f3cdf0SGordon Ross     UINT16                  Capability;
167226f3cdf0SGordon Ross 
167326f3cdf0SGordon Ross } ACPI_TABLE_WDDT;
167426f3cdf0SGordon Ross 
167526f3cdf0SGordon Ross /* Flags for Status field above */
167626f3cdf0SGordon Ross 
167726f3cdf0SGordon Ross #define ACPI_WDDT_AVAILABLE     (1)
167826f3cdf0SGordon Ross #define ACPI_WDDT_ACTIVE        (1<<1)
167926f3cdf0SGordon Ross #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
168026f3cdf0SGordon Ross #define ACPI_WDDT_USER_RESET    (1<<11)
168126f3cdf0SGordon Ross #define ACPI_WDDT_WDT_RESET     (1<<12)
168226f3cdf0SGordon Ross #define ACPI_WDDT_POWER_FAIL    (1<<13)
168326f3cdf0SGordon Ross #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
168426f3cdf0SGordon Ross 
168526f3cdf0SGordon Ross /* Flags for Capability field above */
168626f3cdf0SGordon Ross 
168726f3cdf0SGordon Ross #define ACPI_WDDT_AUTO_RESET    (1)
168826f3cdf0SGordon Ross #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
168926f3cdf0SGordon Ross 
169026f3cdf0SGordon Ross 
169126f3cdf0SGordon Ross /*******************************************************************************
169226f3cdf0SGordon Ross  *
169357190917SDana Myers  * WDRT - Watchdog Resource Table
169457190917SDana Myers  *        Version 1
169557190917SDana Myers  *
169657190917SDana Myers  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
169757190917SDana Myers  * Version 1.01, August 28, 2006
169857190917SDana Myers  *
169957190917SDana Myers  ******************************************************************************/
170057190917SDana Myers 
170157190917SDana Myers typedef struct acpi_table_wdrt
170257190917SDana Myers {
170357190917SDana Myers     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
170457190917SDana Myers     ACPI_GENERIC_ADDRESS    ControlRegister;
170557190917SDana Myers     ACPI_GENERIC_ADDRESS    CountRegister;
170657190917SDana Myers     UINT16                  PciDeviceId;
170757190917SDana Myers     UINT16                  PciVendorId;
170857190917SDana Myers     UINT8                   PciBus;             /* PCI Bus number */
170957190917SDana Myers     UINT8                   PciDevice;          /* PCI Device number */
171057190917SDana Myers     UINT8                   PciFunction;        /* PCI Function number */
171157190917SDana Myers     UINT8                   PciSegment;         /* PCI Segment number */
171257190917SDana Myers     UINT16                  MaxCount;           /* Maximum counter value supported */
171357190917SDana Myers     UINT8                   Units;
171457190917SDana Myers 
171557190917SDana Myers } ACPI_TABLE_WDRT;
171657190917SDana Myers 
171757190917SDana Myers 
171857190917SDana Myers /* Reset to default packing */
171957190917SDana Myers 
172057190917SDana Myers #pragma pack()
17217c478bd9Sstevel@tonic-gate 
17227c478bd9Sstevel@tonic-gate #endif /* __ACTBL2_H__ */
1723