1197104Sjkim/******************************************************************************
2197104Sjkim *
3219707Sjkim * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4197104Sjkim *
5197104Sjkim *****************************************************************************/
6197104Sjkim
7217365Sjkim/*
8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp.
9197104Sjkim * All rights reserved.
10197104Sjkim *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
25197104Sjkim *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
29197104Sjkim *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
43197104Sjkim
44197104Sjkim#ifndef __ACTBL2_H__
45197104Sjkim#define __ACTBL2_H__
46197104Sjkim
47197104Sjkim
48197104Sjkim/*******************************************************************************
49197104Sjkim *
50197104Sjkim * Additional ACPI Tables (2)
51197104Sjkim *
52197104Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are
53197104Sjkim * included here to support device drivers and the AML disassembler.
54197104Sjkim *
55306536Sjkim * Generally, the tables in this file are defined by third-party specifications,
56306536Sjkim * and are not defined directly by the ACPI specification itself.
57197104Sjkim *
58197104Sjkim ******************************************************************************/
59197104Sjkim
60197104Sjkim
61197104Sjkim/*
62197104Sjkim * Values for description table header signatures for tables defined in this
63197104Sjkim * file. Useful because they make it more difficult to inadvertently type in
64197104Sjkim * the wrong signature.
65197104Sjkim */
66197104Sjkim#define ACPI_SIG_ASF            "ASF!"      /* Alert Standard Format table */
67197104Sjkim#define ACPI_SIG_BOOT           "BOOT"      /* Simple Boot Flag Table */
68239340Sjkim#define ACPI_SIG_CSRT           "CSRT"      /* Core System Resource Table */
69239340Sjkim#define ACPI_SIG_DBG2           "DBG2"      /* Debug Port table type 2 */
70197104Sjkim#define ACPI_SIG_DBGP           "DBGP"      /* Debug Port table */
71197104Sjkim#define ACPI_SIG_DMAR           "DMAR"      /* DMA Remapping table */
72197104Sjkim#define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
73197104Sjkim#define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
74284460Sjkim#define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
75197104Sjkim#define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
76281075Sdim#define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
77197104Sjkim#define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
78204773Sjkim#define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
79281687Sjkim#define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
80246849Sjkim#define ACPI_SIG_MTMR           "MTMR"      /* MID Timer table */
81197104Sjkim#define ACPI_SIG_SLIC           "SLIC"      /* Software Licensing Description Table */
82197104Sjkim#define ACPI_SIG_SPCR           "SPCR"      /* Serial Port Console Redirection table */
83197104Sjkim#define ACPI_SIG_SPMI           "SPMI"      /* Server Platform Management Interface table */
84197104Sjkim#define ACPI_SIG_TCPA           "TCPA"      /* Trusted Computing Platform Alliance table */
85306536Sjkim#define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
86197104Sjkim#define ACPI_SIG_UEFI           "UEFI"      /* Uefi Boot Optimization Table */
87246849Sjkim#define ACPI_SIG_VRTC           "VRTC"      /* Virtual Real Time Clock Table */
88197104Sjkim#define ACPI_SIG_WAET           "WAET"      /* Windows ACPI Emulated devices Table */
89197104Sjkim#define ACPI_SIG_WDAT           "WDAT"      /* Watchdog Action Table */
90209746Sjkim#define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
91197104Sjkim#define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
92197104Sjkim
93209746Sjkim#ifdef ACPI_UNDEFINED_TABLES
94209746Sjkim/*
95209746Sjkim * These tables have been seen in the field, but no definition has been found
96209746Sjkim */
97209746Sjkim#define ACPI_SIG_ATKG           "ATKG"
98209746Sjkim#define ACPI_SIG_GSCI           "GSCI"      /* GMCH SCI table */
99209746Sjkim#define ACPI_SIG_IEIT           "IEIT"
100209746Sjkim#endif
101197104Sjkim
102197104Sjkim/*
103197104Sjkim * All tables must be byte-packed to match the ACPI specification, since
104197104Sjkim * the tables are provided by the system BIOS.
105197104Sjkim */
106197104Sjkim#pragma pack(1)
107197104Sjkim
108197104Sjkim/*
109239340Sjkim * Note: C bitfields are not used for this reason:
110239340Sjkim *
111239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language
112239340Sjkim * does not specify the layout of bitfields in memory, which means they are
113239340Sjkim * essentially useless for dealing with packed data in on-disk formats or
114239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
115239340Sjkim * this decision was a design error in C. Ritchie could have picked an order
116239340Sjkim * and stuck with it." Norman Ramsey.
117239340Sjkim * See http://stackoverflow.com/a/1053662/41661
118197104Sjkim */
119197104Sjkim
120197104Sjkim
121197104Sjkim/*******************************************************************************
122197104Sjkim *
123197104Sjkim * ASF - Alert Standard Format table (Signature "ASF!")
124197104Sjkim *       Revision 0x10
125197104Sjkim *
126197104Sjkim * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
127197104Sjkim *
128197104Sjkim ******************************************************************************/
129197104Sjkim
130197104Sjkimtypedef struct acpi_table_asf
131197104Sjkim{
132197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
133197104Sjkim
134197104Sjkim} ACPI_TABLE_ASF;
135197104Sjkim
136197104Sjkim
137197104Sjkim/* ASF subtable header */
138197104Sjkim
139197104Sjkimtypedef struct acpi_asf_header
140197104Sjkim{
141197104Sjkim    UINT8                   Type;
142197104Sjkim    UINT8                   Reserved;
143197104Sjkim    UINT16                  Length;
144197104Sjkim
145197104Sjkim} ACPI_ASF_HEADER;
146197104Sjkim
147197104Sjkim
148197104Sjkim/* Values for Type field above */
149197104Sjkim
150197104Sjkimenum AcpiAsfType
151197104Sjkim{
152197104Sjkim    ACPI_ASF_TYPE_INFO          = 0,
153197104Sjkim    ACPI_ASF_TYPE_ALERT         = 1,
154197104Sjkim    ACPI_ASF_TYPE_CONTROL       = 2,
155197104Sjkim    ACPI_ASF_TYPE_BOOT          = 3,
156197104Sjkim    ACPI_ASF_TYPE_ADDRESS       = 4,
157197104Sjkim    ACPI_ASF_TYPE_RESERVED      = 5
158197104Sjkim};
159197104Sjkim
160197104Sjkim/*
161197104Sjkim * ASF subtables
162197104Sjkim */
163197104Sjkim
164197104Sjkim/* 0: ASF Information */
165197104Sjkim
166197104Sjkimtypedef struct acpi_asf_info
167197104Sjkim{
168197104Sjkim    ACPI_ASF_HEADER         Header;
169197104Sjkim    UINT8                   MinResetValue;
170197104Sjkim    UINT8                   MinPollInterval;
171197104Sjkim    UINT16                  SystemId;
172197104Sjkim    UINT32                  MfgId;
173197104Sjkim    UINT8                   Flags;
174197104Sjkim    UINT8                   Reserved2[3];
175197104Sjkim
176197104Sjkim} ACPI_ASF_INFO;
177197104Sjkim
178197104Sjkim/* Masks for Flags field above */
179197104Sjkim
180197104Sjkim#define ACPI_ASF_SMBUS_PROTOCOLS    (1)
181197104Sjkim
182197104Sjkim
183197104Sjkim/* 1: ASF Alerts */
184197104Sjkim
185197104Sjkimtypedef struct acpi_asf_alert
186197104Sjkim{
187197104Sjkim    ACPI_ASF_HEADER         Header;
188197104Sjkim    UINT8                   AssertMask;
189197104Sjkim    UINT8                   DeassertMask;
190197104Sjkim    UINT8                   Alerts;
191197104Sjkim    UINT8                   DataLength;
192197104Sjkim
193197104Sjkim} ACPI_ASF_ALERT;
194197104Sjkim
195197104Sjkimtypedef struct acpi_asf_alert_data
196197104Sjkim{
197197104Sjkim    UINT8                   Address;
198197104Sjkim    UINT8                   Command;
199197104Sjkim    UINT8                   Mask;
200197104Sjkim    UINT8                   Value;
201197104Sjkim    UINT8                   SensorType;
202197104Sjkim    UINT8                   Type;
203197104Sjkim    UINT8                   Offset;
204197104Sjkim    UINT8                   SourceType;
205197104Sjkim    UINT8                   Severity;
206197104Sjkim    UINT8                   SensorNumber;
207197104Sjkim    UINT8                   Entity;
208197104Sjkim    UINT8                   Instance;
209197104Sjkim
210197104Sjkim} ACPI_ASF_ALERT_DATA;
211197104Sjkim
212197104Sjkim
213197104Sjkim/* 2: ASF Remote Control */
214197104Sjkim
215197104Sjkimtypedef struct acpi_asf_remote
216197104Sjkim{
217197104Sjkim    ACPI_ASF_HEADER         Header;
218197104Sjkim    UINT8                   Controls;
219197104Sjkim    UINT8                   DataLength;
220197104Sjkim    UINT16                  Reserved2;
221197104Sjkim
222197104Sjkim} ACPI_ASF_REMOTE;
223197104Sjkim
224197104Sjkimtypedef struct acpi_asf_control_data
225197104Sjkim{
226197104Sjkim    UINT8                   Function;
227197104Sjkim    UINT8                   Address;
228197104Sjkim    UINT8                   Command;
229197104Sjkim    UINT8                   Value;
230197104Sjkim
231197104Sjkim} ACPI_ASF_CONTROL_DATA;
232197104Sjkim
233197104Sjkim
234197104Sjkim/* 3: ASF RMCP Boot Options */
235197104Sjkim
236197104Sjkimtypedef struct acpi_asf_rmcp
237197104Sjkim{
238197104Sjkim    ACPI_ASF_HEADER         Header;
239197104Sjkim    UINT8                   Capabilities[7];
240197104Sjkim    UINT8                   CompletionCode;
241197104Sjkim    UINT32                  EnterpriseId;
242197104Sjkim    UINT8                   Command;
243197104Sjkim    UINT16                  Parameter;
244197104Sjkim    UINT16                  BootOptions;
245197104Sjkim    UINT16                  OemParameters;
246197104Sjkim
247197104Sjkim} ACPI_ASF_RMCP;
248197104Sjkim
249197104Sjkim
250197104Sjkim/* 4: ASF Address */
251197104Sjkim
252197104Sjkimtypedef struct acpi_asf_address
253197104Sjkim{
254197104Sjkim    ACPI_ASF_HEADER         Header;
255197104Sjkim    UINT8                   EpromAddress;
256197104Sjkim    UINT8                   Devices;
257197104Sjkim
258197104Sjkim} ACPI_ASF_ADDRESS;
259197104Sjkim
260197104Sjkim
261197104Sjkim/*******************************************************************************
262197104Sjkim *
263197104Sjkim * BOOT - Simple Boot Flag Table
264197104Sjkim *        Version 1
265197104Sjkim *
266197104Sjkim * Conforms to the "Simple Boot Flag Specification", Version 2.1
267197104Sjkim *
268197104Sjkim ******************************************************************************/
269197104Sjkim
270197104Sjkimtypedef struct acpi_table_boot
271197104Sjkim{
272197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
273197104Sjkim    UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
274197104Sjkim    UINT8                   Reserved[3];
275197104Sjkim
276197104Sjkim} ACPI_TABLE_BOOT;
277197104Sjkim
278197104Sjkim
279197104Sjkim/*******************************************************************************
280197104Sjkim *
281239340Sjkim * CSRT - Core System Resource Table
282239340Sjkim *        Version 0
283239340Sjkim *
284239340Sjkim * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
285239340Sjkim *
286239340Sjkim ******************************************************************************/
287239340Sjkim
288239340Sjkimtypedef struct acpi_table_csrt
289239340Sjkim{
290239340Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
291239340Sjkim
292239340Sjkim} ACPI_TABLE_CSRT;
293239340Sjkim
294245582Sjkim
295239340Sjkim/* Resource Group subtable */
296239340Sjkim
297239340Sjkimtypedef struct acpi_csrt_group
298239340Sjkim{
299239340Sjkim    UINT32                  Length;
300239340Sjkim    UINT32                  VendorId;
301239340Sjkim    UINT32                  SubvendorId;
302239340Sjkim    UINT16                  DeviceId;
303239340Sjkim    UINT16                  SubdeviceId;
304239340Sjkim    UINT16                  Revision;
305239340Sjkim    UINT16                  Reserved;
306245582Sjkim    UINT32                  SharedInfoLength;
307239340Sjkim
308245582Sjkim    /* Shared data immediately follows (Length = SharedInfoLength) */
309239340Sjkim
310239340Sjkim} ACPI_CSRT_GROUP;
311239340Sjkim
312245582Sjkim/* Shared Info subtable */
313245582Sjkim
314245582Sjkimtypedef struct acpi_csrt_shared_info
315245582Sjkim{
316245582Sjkim    UINT16                  MajorVersion;
317245582Sjkim    UINT16                  MinorVersion;
318245582Sjkim    UINT32                  MmioBaseLow;
319245582Sjkim    UINT32                  MmioBaseHigh;
320245582Sjkim    UINT32                  GsiInterrupt;
321245582Sjkim    UINT8                   InterruptPolarity;
322245582Sjkim    UINT8                   InterruptMode;
323245582Sjkim    UINT8                   NumChannels;
324245582Sjkim    UINT8                   DmaAddressWidth;
325245582Sjkim    UINT16                  BaseRequestLine;
326245582Sjkim    UINT16                  NumHandshakeSignals;
327245582Sjkim    UINT32                  MaxBlockSize;
328245582Sjkim
329245582Sjkim    /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */
330245582Sjkim
331245582Sjkim} ACPI_CSRT_SHARED_INFO;
332245582Sjkim
333239340Sjkim/* Resource Descriptor subtable */
334239340Sjkim
335239340Sjkimtypedef struct acpi_csrt_descriptor
336239340Sjkim{
337239340Sjkim    UINT32                  Length;
338239340Sjkim    UINT16                  Type;
339239340Sjkim    UINT16                  Subtype;
340239340Sjkim    UINT32                  Uid;
341239340Sjkim
342239340Sjkim    /* Resource-specific information immediately follows */
343239340Sjkim
344239340Sjkim} ACPI_CSRT_DESCRIPTOR;
345239340Sjkim
346239340Sjkim
347239340Sjkim/* Resource Types */
348239340Sjkim
349239340Sjkim#define ACPI_CSRT_TYPE_INTERRUPT    0x0001
350239340Sjkim#define ACPI_CSRT_TYPE_TIMER        0x0002
351239340Sjkim#define ACPI_CSRT_TYPE_DMA          0x0003
352239340Sjkim
353239340Sjkim/* Resource Subtypes */
354239340Sjkim
355239340Sjkim#define ACPI_CSRT_XRUPT_LINE        0x0000
356239340Sjkim#define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
357239340Sjkim#define ACPI_CSRT_TIMER             0x0000
358239340Sjkim#define ACPI_CSRT_DMA_CHANNEL       0x0000
359239340Sjkim#define ACPI_CSRT_DMA_CONTROLLER    0x0001
360239340Sjkim
361239340Sjkim
362239340Sjkim/*******************************************************************************
363239340Sjkim *
364239340Sjkim * DBG2 - Debug Port Table 2
365239340Sjkim *        Version 0 (Both main table and subtables)
366239340Sjkim *
367306536Sjkim * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015
368239340Sjkim *
369239340Sjkim ******************************************************************************/
370239340Sjkim
371239340Sjkimtypedef struct acpi_table_dbg2
372239340Sjkim{
373239340Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
374239340Sjkim    UINT32                  InfoOffset;
375239340Sjkim    UINT32                  InfoCount;
376239340Sjkim
377239340Sjkim} ACPI_TABLE_DBG2;
378239340Sjkim
379239340Sjkim
380281075Sdimtypedef struct acpi_dbg2_header
381281075Sdim{
382281075Sdim    UINT32                  InfoOffset;
383281075Sdim    UINT32                  InfoCount;
384281075Sdim
385281075Sdim} ACPI_DBG2_HEADER;
386281075Sdim
387281075Sdim
388239340Sjkim/* Debug Device Information Subtable */
389239340Sjkim
390239340Sjkimtypedef struct acpi_dbg2_device
391239340Sjkim{
392239340Sjkim    UINT8                   Revision;
393239340Sjkim    UINT16                  Length;
394239340Sjkim    UINT8                   RegisterCount;      /* Number of BaseAddress registers */
395239340Sjkim    UINT16                  NamepathLength;
396239340Sjkim    UINT16                  NamepathOffset;
397239340Sjkim    UINT16                  OemDataLength;
398239340Sjkim    UINT16                  OemDataOffset;
399239340Sjkim    UINT16                  PortType;
400239340Sjkim    UINT16                  PortSubtype;
401239340Sjkim    UINT16                  Reserved;
402239340Sjkim    UINT16                  BaseAddressOffset;
403239340Sjkim    UINT16                  AddressSizeOffset;
404239340Sjkim    /*
405239340Sjkim     * Data that follows:
406239340Sjkim     *    BaseAddress (required) - Each in 12-byte Generic Address Structure format.
407239340Sjkim     *    AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register.
408239340Sjkim     *    Namepath    (required) - Null terminated string. Single dot if not supported.
409239340Sjkim     *    OemData     (optional) - Length is OemDataLength.
410239340Sjkim     */
411239340Sjkim} ACPI_DBG2_DEVICE;
412239340Sjkim
413239340Sjkim/* Types for PortType field above */
414239340Sjkim
415239340Sjkim#define ACPI_DBG2_SERIAL_PORT       0x8000
416239340Sjkim#define ACPI_DBG2_1394_PORT         0x8001
417239340Sjkim#define ACPI_DBG2_USB_PORT          0x8002
418239340Sjkim#define ACPI_DBG2_NET_PORT          0x8003
419239340Sjkim
420239340Sjkim/* Subtypes for PortSubtype field above */
421239340Sjkim
422239340Sjkim#define ACPI_DBG2_16550_COMPATIBLE  0x0000
423239340Sjkim#define ACPI_DBG2_16550_SUBSET      0x0001
424306536Sjkim#define ACPI_DBG2_ARM_PL011         0x0003
425306536Sjkim#define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
426306536Sjkim#define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
427306536Sjkim#define ACPI_DBG2_ARM_DCC           0x000F
428306536Sjkim#define ACPI_DBG2_BCM2835           0x0010
429239340Sjkim
430239340Sjkim#define ACPI_DBG2_1394_STANDARD     0x0000
431239340Sjkim
432239340Sjkim#define ACPI_DBG2_USB_XHCI          0x0000
433239340Sjkim#define ACPI_DBG2_USB_EHCI          0x0001
434239340Sjkim
435239340Sjkim
436239340Sjkim/*******************************************************************************
437239340Sjkim *
438197104Sjkim * DBGP - Debug Port table
439197104Sjkim *        Version 1
440197104Sjkim *
441197104Sjkim * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
442197104Sjkim *
443197104Sjkim ******************************************************************************/
444197104Sjkim
445197104Sjkimtypedef struct acpi_table_dbgp
446197104Sjkim{
447197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
448197104Sjkim    UINT8                   Type;               /* 0=full 16550, 1=subset of 16550 */
449197104Sjkim    UINT8                   Reserved[3];
450197104Sjkim    ACPI_GENERIC_ADDRESS    DebugPort;
451197104Sjkim
452197104Sjkim} ACPI_TABLE_DBGP;
453197104Sjkim
454197104Sjkim
455197104Sjkim/*******************************************************************************
456197104Sjkim *
457197104Sjkim * DMAR - DMA Remapping table
458197104Sjkim *        Version 1
459197104Sjkim *
460197104Sjkim * Conforms to "Intel Virtualization Technology for Directed I/O",
461306536Sjkim * Version 2.3, October 2014
462197104Sjkim *
463197104Sjkim ******************************************************************************/
464197104Sjkim
465197104Sjkimtypedef struct acpi_table_dmar
466197104Sjkim{
467197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
468197104Sjkim    UINT8                   Width;              /* Host Address Width */
469197104Sjkim    UINT8                   Flags;
470197104Sjkim    UINT8                   Reserved[10];
471197104Sjkim
472197104Sjkim} ACPI_TABLE_DMAR;
473197104Sjkim
474197104Sjkim/* Masks for Flags field above */
475197104Sjkim
476197104Sjkim#define ACPI_DMAR_INTR_REMAP        (1)
477306536Sjkim#define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
478306536Sjkim#define ACPI_DMAR_X2APIC_MODE       (1<<2)
479197104Sjkim
480197104Sjkim
481197104Sjkim/* DMAR subtable header */
482197104Sjkim
483197104Sjkimtypedef struct acpi_dmar_header
484197104Sjkim{
485197104Sjkim    UINT16                  Type;
486197104Sjkim    UINT16                  Length;
487197104Sjkim
488197104Sjkim} ACPI_DMAR_HEADER;
489197104Sjkim
490197104Sjkim/* Values for subtable type in ACPI_DMAR_HEADER */
491197104Sjkim
492197104Sjkimenum AcpiDmarType
493197104Sjkim{
494197104Sjkim    ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
495197104Sjkim    ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
496281075Sdim    ACPI_DMAR_TYPE_ROOT_ATS             = 2,
497281075Sdim    ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
498281075Sdim    ACPI_DMAR_TYPE_NAMESPACE            = 4,
499281075Sdim    ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
500197104Sjkim};
501197104Sjkim
502197104Sjkim
503197104Sjkim/* DMAR Device Scope structure */
504197104Sjkim
505197104Sjkimtypedef struct acpi_dmar_device_scope
506197104Sjkim{
507197104Sjkim    UINT8                   EntryType;
508197104Sjkim    UINT8                   Length;
509197104Sjkim    UINT16                  Reserved;
510197104Sjkim    UINT8                   EnumerationId;
511197104Sjkim    UINT8                   Bus;
512197104Sjkim
513197104Sjkim} ACPI_DMAR_DEVICE_SCOPE;
514197104Sjkim
515281075Sdim/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
516197104Sjkim
517197104Sjkimenum AcpiDmarScopeType
518197104Sjkim{
519197104Sjkim    ACPI_DMAR_SCOPE_TYPE_NOT_USED       = 0,
520197104Sjkim    ACPI_DMAR_SCOPE_TYPE_ENDPOINT       = 1,
521197104Sjkim    ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
522197104Sjkim    ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
523197104Sjkim    ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
524281075Sdim    ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
525281075Sdim    ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
526197104Sjkim};
527197104Sjkim
528197104Sjkimtypedef struct acpi_dmar_pci_path
529197104Sjkim{
530197104Sjkim    UINT8                   Device;
531197104Sjkim    UINT8                   Function;
532197104Sjkim
533197104Sjkim} ACPI_DMAR_PCI_PATH;
534197104Sjkim
535197104Sjkim
536197104Sjkim/*
537281075Sdim * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER
538197104Sjkim */
539197104Sjkim
540197104Sjkim/* 0: Hardware Unit Definition */
541197104Sjkim
542197104Sjkimtypedef struct acpi_dmar_hardware_unit
543197104Sjkim{
544197104Sjkim    ACPI_DMAR_HEADER        Header;
545197104Sjkim    UINT8                   Flags;
546197104Sjkim    UINT8                   Reserved;
547197104Sjkim    UINT16                  Segment;
548197104Sjkim    UINT64                  Address;            /* Register Base Address */
549197104Sjkim
550197104Sjkim} ACPI_DMAR_HARDWARE_UNIT;
551197104Sjkim
552197104Sjkim/* Masks for Flags field above */
553197104Sjkim
554197104Sjkim#define ACPI_DMAR_INCLUDE_ALL       (1)
555197104Sjkim
556197104Sjkim
557197104Sjkim/* 1: Reserved Memory Defininition */
558197104Sjkim
559197104Sjkimtypedef struct acpi_dmar_reserved_memory
560197104Sjkim{
561197104Sjkim    ACPI_DMAR_HEADER        Header;
562197104Sjkim    UINT16                  Reserved;
563197104Sjkim    UINT16                  Segment;
564197104Sjkim    UINT64                  BaseAddress;        /* 4K aligned base address */
565197104Sjkim    UINT64                  EndAddress;         /* 4K aligned limit address */
566197104Sjkim
567197104Sjkim} ACPI_DMAR_RESERVED_MEMORY;
568197104Sjkim
569197104Sjkim/* Masks for Flags field above */
570197104Sjkim
571197104Sjkim#define ACPI_DMAR_ALLOW_ALL         (1)
572197104Sjkim
573197104Sjkim
574197104Sjkim/* 2: Root Port ATS Capability Reporting Structure */
575197104Sjkim
576197104Sjkimtypedef struct acpi_dmar_atsr
577197104Sjkim{
578197104Sjkim    ACPI_DMAR_HEADER        Header;
579197104Sjkim    UINT8                   Flags;
580197104Sjkim    UINT8                   Reserved;
581197104Sjkim    UINT16                  Segment;
582197104Sjkim
583197104Sjkim} ACPI_DMAR_ATSR;
584197104Sjkim
585197104Sjkim/* Masks for Flags field above */
586197104Sjkim
587197104Sjkim#define ACPI_DMAR_ALL_PORTS         (1)
588197104Sjkim
589197104Sjkim
590197104Sjkim/* 3: Remapping Hardware Static Affinity Structure */
591197104Sjkim
592197104Sjkimtypedef struct acpi_dmar_rhsa
593197104Sjkim{
594197104Sjkim    ACPI_DMAR_HEADER        Header;
595197104Sjkim    UINT32                  Reserved;
596197104Sjkim    UINT64                  BaseAddress;
597197104Sjkim    UINT32                  ProximityDomain;
598197104Sjkim
599197104Sjkim} ACPI_DMAR_RHSA;
600197104Sjkim
601197104Sjkim
602281075Sdim/* 4: ACPI Namespace Device Declaration Structure */
603281075Sdim
604281075Sdimtypedef struct acpi_dmar_andd
605281075Sdim{
606281075Sdim    ACPI_DMAR_HEADER        Header;
607281075Sdim    UINT8                   Reserved[3];
608281075Sdim    UINT8                   DeviceNumber;
609281075Sdim    char                    DeviceName[1];
610281075Sdim
611281075Sdim} ACPI_DMAR_ANDD;
612281075Sdim
613281075Sdim
614197104Sjkim/*******************************************************************************
615197104Sjkim *
616197104Sjkim * HPET - High Precision Event Timer table
617197104Sjkim *        Version 1
618197104Sjkim *
619197104Sjkim * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
620197104Sjkim * Version 1.0a, October 2004
621197104Sjkim *
622197104Sjkim ******************************************************************************/
623197104Sjkim
624197104Sjkimtypedef struct acpi_table_hpet
625197104Sjkim{
626197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
627197104Sjkim    UINT32                  Id;                 /* Hardware ID of event timer block */
628197104Sjkim    ACPI_GENERIC_ADDRESS    Address;            /* Address of event timer block */
629197104Sjkim    UINT8                   Sequence;           /* HPET sequence number */
630197104Sjkim    UINT16                  MinimumTick;        /* Main counter min tick, periodic mode */
631197104Sjkim    UINT8                   Flags;
632197104Sjkim
633197104Sjkim} ACPI_TABLE_HPET;
634197104Sjkim
635197104Sjkim/* Masks for Flags field above */
636197104Sjkim
637197104Sjkim#define ACPI_HPET_PAGE_PROTECT_MASK (3)
638197104Sjkim
639197104Sjkim/* Values for Page Protect flags */
640197104Sjkim
641197104Sjkimenum AcpiHpetPageProtect
642197104Sjkim{
643197104Sjkim    ACPI_HPET_NO_PAGE_PROTECT       = 0,
644197104Sjkim    ACPI_HPET_PAGE_PROTECT4         = 1,
645197104Sjkim    ACPI_HPET_PAGE_PROTECT64        = 2
646197104Sjkim};
647197104Sjkim
648197104Sjkim
649197104Sjkim/*******************************************************************************
650197104Sjkim *
651197104Sjkim * IBFT - Boot Firmware Table
652197104Sjkim *        Version 1
653197104Sjkim *
654197104Sjkim * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
655197104Sjkim * Specification", Version 1.01, March 1, 2007
656197104Sjkim *
657197104Sjkim * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
658197104Sjkim * Therefore, it is not currently supported by the disassembler.
659197104Sjkim *
660197104Sjkim ******************************************************************************/
661197104Sjkim
662197104Sjkimtypedef struct acpi_table_ibft
663197104Sjkim{
664197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
665197104Sjkim    UINT8                   Reserved[12];
666197104Sjkim
667197104Sjkim} ACPI_TABLE_IBFT;
668197104Sjkim
669197104Sjkim
670197104Sjkim/* IBFT common subtable header */
671197104Sjkim
672197104Sjkimtypedef struct acpi_ibft_header
673197104Sjkim{
674197104Sjkim    UINT8                   Type;
675197104Sjkim    UINT8                   Version;
676197104Sjkim    UINT16                  Length;
677197104Sjkim    UINT8                   Index;
678197104Sjkim    UINT8                   Flags;
679197104Sjkim
680197104Sjkim} ACPI_IBFT_HEADER;
681197104Sjkim
682197104Sjkim/* Values for Type field above */
683197104Sjkim
684197104Sjkimenum AcpiIbftType
685197104Sjkim{
686197104Sjkim    ACPI_IBFT_TYPE_NOT_USED         = 0,
687197104Sjkim    ACPI_IBFT_TYPE_CONTROL          = 1,
688197104Sjkim    ACPI_IBFT_TYPE_INITIATOR        = 2,
689197104Sjkim    ACPI_IBFT_TYPE_NIC              = 3,
690197104Sjkim    ACPI_IBFT_TYPE_TARGET           = 4,
691197104Sjkim    ACPI_IBFT_TYPE_EXTENSIONS       = 5,
692197104Sjkim    ACPI_IBFT_TYPE_RESERVED         = 6     /* 6 and greater are reserved */
693197104Sjkim};
694197104Sjkim
695197104Sjkim
696197104Sjkim/* IBFT subtables */
697197104Sjkim
698197104Sjkimtypedef struct acpi_ibft_control
699197104Sjkim{
700197104Sjkim    ACPI_IBFT_HEADER        Header;
701197104Sjkim    UINT16                  Extensions;
702197104Sjkim    UINT16                  InitiatorOffset;
703197104Sjkim    UINT16                  Nic0Offset;
704197104Sjkim    UINT16                  Target0Offset;
705197104Sjkim    UINT16                  Nic1Offset;
706197104Sjkim    UINT16                  Target1Offset;
707197104Sjkim
708197104Sjkim} ACPI_IBFT_CONTROL;
709197104Sjkim
710197104Sjkimtypedef struct acpi_ibft_initiator
711197104Sjkim{
712197104Sjkim    ACPI_IBFT_HEADER        Header;
713197104Sjkim    UINT8                   SnsServer[16];
714197104Sjkim    UINT8                   SlpServer[16];
715197104Sjkim    UINT8                   PrimaryServer[16];
716197104Sjkim    UINT8                   SecondaryServer[16];
717197104Sjkim    UINT16                  NameLength;
718197104Sjkim    UINT16                  NameOffset;
719197104Sjkim
720197104Sjkim} ACPI_IBFT_INITIATOR;
721197104Sjkim
722197104Sjkimtypedef struct acpi_ibft_nic
723197104Sjkim{
724197104Sjkim    ACPI_IBFT_HEADER        Header;
725197104Sjkim    UINT8                   IpAddress[16];
726197104Sjkim    UINT8                   SubnetMaskPrefix;
727197104Sjkim    UINT8                   Origin;
728197104Sjkim    UINT8                   Gateway[16];
729197104Sjkim    UINT8                   PrimaryDns[16];
730197104Sjkim    UINT8                   SecondaryDns[16];
731197104Sjkim    UINT8                   Dhcp[16];
732197104Sjkim    UINT16                  Vlan;
733197104Sjkim    UINT8                   MacAddress[6];
734197104Sjkim    UINT16                  PciAddress;
735197104Sjkim    UINT16                  NameLength;
736197104Sjkim    UINT16                  NameOffset;
737197104Sjkim
738197104Sjkim} ACPI_IBFT_NIC;
739197104Sjkim
740197104Sjkimtypedef struct acpi_ibft_target
741197104Sjkim{
742197104Sjkim    ACPI_IBFT_HEADER        Header;
743197104Sjkim    UINT8                   TargetIpAddress[16];
744197104Sjkim    UINT16                  TargetIpSocket;
745197104Sjkim    UINT8                   TargetBootLun[8];
746197104Sjkim    UINT8                   ChapType;
747197104Sjkim    UINT8                   NicAssociation;
748197104Sjkim    UINT16                  TargetNameLength;
749197104Sjkim    UINT16                  TargetNameOffset;
750197104Sjkim    UINT16                  ChapNameLength;
751197104Sjkim    UINT16                  ChapNameOffset;
752197104Sjkim    UINT16                  ChapSecretLength;
753197104Sjkim    UINT16                  ChapSecretOffset;
754197104Sjkim    UINT16                  ReverseChapNameLength;
755197104Sjkim    UINT16                  ReverseChapNameOffset;
756197104Sjkim    UINT16                  ReverseChapSecretLength;
757197104Sjkim    UINT16                  ReverseChapSecretOffset;
758197104Sjkim
759197104Sjkim} ACPI_IBFT_TARGET;
760197104Sjkim
761197104Sjkim
762197104Sjkim/*******************************************************************************
763197104Sjkim *
764284460Sjkim * IORT - IO Remapping Table
765284460Sjkim *
766284460Sjkim * Conforms to "IO Remapping Table System Software on ARM Platforms",
767306536Sjkim * Document number: ARM DEN 0049B, October 2015
768284460Sjkim *
769284460Sjkim ******************************************************************************/
770284460Sjkim
771284460Sjkimtypedef struct acpi_table_iort
772284460Sjkim{
773284460Sjkim    ACPI_TABLE_HEADER       Header;
774284460Sjkim    UINT32                  NodeCount;
775284460Sjkim    UINT32                  NodeOffset;
776284460Sjkim    UINT32                  Reserved;
777284460Sjkim
778284460Sjkim} ACPI_TABLE_IORT;
779284460Sjkim
780284460Sjkim
781284460Sjkim/*
782284460Sjkim * IORT subtables
783284460Sjkim */
784284460Sjkimtypedef struct acpi_iort_node
785284460Sjkim{
786284460Sjkim    UINT8                   Type;
787284460Sjkim    UINT16                  Length;
788284460Sjkim    UINT8                   Revision;
789284460Sjkim    UINT32                  Reserved;
790284460Sjkim    UINT32                  MappingCount;
791284460Sjkim    UINT32                  MappingOffset;
792284460Sjkim    char                    NodeData[1];
793284460Sjkim
794284460Sjkim} ACPI_IORT_NODE;
795284460Sjkim
796284460Sjkim/* Values for subtable Type above */
797284460Sjkim
798284460Sjkimenum AcpiIortNodeType
799284460Sjkim{
800284460Sjkim    ACPI_IORT_NODE_ITS_GROUP            = 0x00,
801284460Sjkim    ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
802284460Sjkim    ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
803306536Sjkim    ACPI_IORT_NODE_SMMU                 = 0x03,
804306536Sjkim    ACPI_IORT_NODE_SMMU_V3              = 0x04
805284460Sjkim};
806284460Sjkim
807284460Sjkim
808284460Sjkimtypedef struct acpi_iort_id_mapping
809284460Sjkim{
810284460Sjkim    UINT32                  InputBase;          /* Lowest value in input range */
811284460Sjkim    UINT32                  IdCount;            /* Number of IDs */
812284460Sjkim    UINT32                  OutputBase;         /* Lowest value in output range */
813284460Sjkim    UINT32                  OutputReference;    /* A reference to the output node */
814284460Sjkim    UINT32                  Flags;
815284460Sjkim
816284460Sjkim} ACPI_IORT_ID_MAPPING;
817284460Sjkim
818284460Sjkim/* Masks for Flags field above for IORT subtable */
819284460Sjkim
820284460Sjkim#define ACPI_IORT_ID_SINGLE_MAPPING (1)
821284460Sjkim
822284460Sjkim
823284460Sjkimtypedef struct acpi_iort_memory_access
824284460Sjkim{
825284460Sjkim    UINT32                  CacheCoherency;
826284460Sjkim    UINT8                   Hints;
827284460Sjkim    UINT16                  Reserved;
828284460Sjkim    UINT8                   MemoryFlags;
829284460Sjkim
830284460Sjkim} ACPI_IORT_MEMORY_ACCESS;
831284460Sjkim
832284460Sjkim/* Values for CacheCoherency field above */
833284460Sjkim
834284460Sjkim#define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
835284460Sjkim#define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
836284460Sjkim
837284460Sjkim/* Masks for Hints field above */
838284460Sjkim
839284460Sjkim#define ACPI_IORT_HT_TRANSIENT          (1)
840284460Sjkim#define ACPI_IORT_HT_WRITE              (1<<1)
841284460Sjkim#define ACPI_IORT_HT_READ               (1<<2)
842284460Sjkim#define ACPI_IORT_HT_OVERRIDE           (1<<3)
843284460Sjkim
844284460Sjkim/* Masks for MemoryFlags field above */
845284460Sjkim
846284460Sjkim#define ACPI_IORT_MF_COHERENCY          (1)
847284460Sjkim#define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
848284460Sjkim
849284460Sjkim
850284460Sjkim/*
851284460Sjkim * IORT node specific subtables
852284460Sjkim */
853284460Sjkimtypedef struct acpi_iort_its_group
854284460Sjkim{
855284460Sjkim    UINT32                  ItsCount;
856284460Sjkim    UINT32                  Identifiers[1];         /* GIC ITS identifier arrary */
857284460Sjkim
858284460Sjkim} ACPI_IORT_ITS_GROUP;
859284460Sjkim
860284460Sjkim
861284460Sjkimtypedef struct acpi_iort_named_component
862284460Sjkim{
863284460Sjkim    UINT32                  NodeFlags;
864284460Sjkim    UINT64                  MemoryProperties;       /* Memory access properties */
865284460Sjkim    UINT8                   MemoryAddressLimit;     /* Memory address size limit */
866284460Sjkim    char                    DeviceName[1];          /* Path of namespace object */
867284460Sjkim
868284460Sjkim} ACPI_IORT_NAMED_COMPONENT;
869284460Sjkim
870284460Sjkim
871284460Sjkimtypedef struct acpi_iort_root_complex
872284460Sjkim{
873284460Sjkim    UINT64                  MemoryProperties;       /* Memory access properties */
874284460Sjkim    UINT32                  AtsAttribute;
875284460Sjkim    UINT32                  PciSegmentNumber;
876284460Sjkim
877284460Sjkim} ACPI_IORT_ROOT_COMPLEX;
878284460Sjkim
879284460Sjkim/* Values for AtsAttribute field above */
880284460Sjkim
881284460Sjkim#define ACPI_IORT_ATS_SUPPORTED         0x00000001  /* The root complex supports ATS */
882284460Sjkim#define ACPI_IORT_ATS_UNSUPPORTED       0x00000000  /* The root complex doesn't support ATS */
883284460Sjkim
884284460Sjkim
885284460Sjkimtypedef struct acpi_iort_smmu
886284460Sjkim{
887284460Sjkim    UINT64                  BaseAddress;            /* SMMU base address */
888284460Sjkim    UINT64                  Span;                   /* Length of memory range */
889284460Sjkim    UINT32                  Model;
890284460Sjkim    UINT32                  Flags;
891284460Sjkim    UINT32                  GlobalInterruptOffset;
892284460Sjkim    UINT32                  ContextInterruptCount;
893284460Sjkim    UINT32                  ContextInterruptOffset;
894284460Sjkim    UINT32                  PmuInterruptCount;
895284460Sjkim    UINT32                  PmuInterruptOffset;
896284460Sjkim    UINT64                  Interrupts[1];          /* Interrupt array */
897284460Sjkim
898284460Sjkim} ACPI_IORT_SMMU;
899284460Sjkim
900284460Sjkim/* Values for Model field above */
901284460Sjkim
902284460Sjkim#define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
903284460Sjkim#define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
904284460Sjkim#define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
905284460Sjkim#define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
906284460Sjkim
907284460Sjkim/* Masks for Flags field above */
908284460Sjkim
909284460Sjkim#define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
910284460Sjkim#define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
911284460Sjkim
912284460Sjkim
913306536Sjkimtypedef struct acpi_iort_smmu_v3
914306536Sjkim{
915306536Sjkim    UINT64                  BaseAddress;            /* SMMUv3 base address */
916306536Sjkim    UINT32                  Flags;
917306536Sjkim    UINT32                  Reserved;
918306536Sjkim    UINT64                  VatosAddress;
919306536Sjkim    UINT32                  Model;                 /* O: generic SMMUv3 */
920306536Sjkim    UINT32                  EventGsiv;
921306536Sjkim    UINT32                  PriGsiv;
922306536Sjkim    UINT32                  GerrGsiv;
923306536Sjkim    UINT32                  SyncGsiv;
924306536Sjkim
925306536Sjkim} ACPI_IORT_SMMU_V3;
926306536Sjkim
927306536Sjkim/* Masks for Flags field above */
928306536Sjkim
929306536Sjkim#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
930306536Sjkim#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
931306536Sjkim
932306536Sjkim
933284460Sjkim/*******************************************************************************
934284460Sjkim *
935197104Sjkim * IVRS - I/O Virtualization Reporting Structure
936197104Sjkim *        Version 1
937197104Sjkim *
938197104Sjkim * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
939197104Sjkim * Revision 1.26, February 2009.
940197104Sjkim *
941197104Sjkim ******************************************************************************/
942197104Sjkim
943197104Sjkimtypedef struct acpi_table_ivrs
944197104Sjkim{
945197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
946197104Sjkim    UINT32                  Info;               /* Common virtualization info */
947197104Sjkim    UINT64                  Reserved;
948197104Sjkim
949197104Sjkim} ACPI_TABLE_IVRS;
950197104Sjkim
951197104Sjkim/* Values for Info field above */
952197104Sjkim
953197104Sjkim#define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
954197104Sjkim#define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
955197104Sjkim#define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
956197104Sjkim
957197104Sjkim
958197104Sjkim/* IVRS subtable header */
959197104Sjkim
960197104Sjkimtypedef struct acpi_ivrs_header
961197104Sjkim{
962197104Sjkim    UINT8                   Type;               /* Subtable type */
963197104Sjkim    UINT8                   Flags;
964197104Sjkim    UINT16                  Length;             /* Subtable length */
965197104Sjkim    UINT16                  DeviceId;           /* ID of IOMMU */
966197104Sjkim
967197104Sjkim} ACPI_IVRS_HEADER;
968197104Sjkim
969197104Sjkim/* Values for subtable Type above */
970197104Sjkim
971197104Sjkimenum AcpiIvrsType
972197104Sjkim{
973197104Sjkim    ACPI_IVRS_TYPE_HARDWARE         = 0x10,
974197104Sjkim    ACPI_IVRS_TYPE_MEMORY1          = 0x20,
975197104Sjkim    ACPI_IVRS_TYPE_MEMORY2          = 0x21,
976197104Sjkim    ACPI_IVRS_TYPE_MEMORY3          = 0x22
977197104Sjkim};
978197104Sjkim
979197104Sjkim/* Masks for Flags field above for IVHD subtable */
980197104Sjkim
981197104Sjkim#define ACPI_IVHD_TT_ENABLE         (1)
982197104Sjkim#define ACPI_IVHD_PASS_PW           (1<<1)
983197104Sjkim#define ACPI_IVHD_RES_PASS_PW       (1<<2)
984197104Sjkim#define ACPI_IVHD_ISOC              (1<<3)
985197104Sjkim#define ACPI_IVHD_IOTLB             (1<<4)
986197104Sjkim
987197104Sjkim/* Masks for Flags field above for IVMD subtable */
988197104Sjkim
989197104Sjkim#define ACPI_IVMD_UNITY             (1)
990197104Sjkim#define ACPI_IVMD_READ              (1<<1)
991197104Sjkim#define ACPI_IVMD_WRITE             (1<<2)
992197104Sjkim#define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
993197104Sjkim
994197104Sjkim
995197104Sjkim/*
996197104Sjkim * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
997197104Sjkim */
998197104Sjkim
999197104Sjkim/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
1000197104Sjkim
1001197104Sjkimtypedef struct acpi_ivrs_hardware
1002197104Sjkim{
1003197104Sjkim    ACPI_IVRS_HEADER        Header;
1004197104Sjkim    UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
1005197104Sjkim    UINT64                  BaseAddress;        /* IOMMU control registers */
1006197104Sjkim    UINT16                  PciSegmentGroup;
1007197104Sjkim    UINT16                  Info;               /* MSI number and unit ID */
1008197104Sjkim    UINT32                  Reserved;
1009197104Sjkim
1010197104Sjkim} ACPI_IVRS_HARDWARE;
1011197104Sjkim
1012197104Sjkim/* Masks for Info field above */
1013197104Sjkim
1014197104Sjkim#define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
1015197104Sjkim#define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
1016197104Sjkim
1017197104Sjkim
1018197104Sjkim/*
1019197104Sjkim * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
1020197104Sjkim * Upper two bits of the Type field are the (encoded) length of the structure.
1021197104Sjkim * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
1022197104Sjkim * are reserved for future use but not defined.
1023197104Sjkim */
1024197104Sjkimtypedef struct acpi_ivrs_de_header
1025197104Sjkim{
1026197104Sjkim    UINT8                   Type;
1027197104Sjkim    UINT16                  Id;
1028197104Sjkim    UINT8                   DataSetting;
1029197104Sjkim
1030197104Sjkim} ACPI_IVRS_DE_HEADER;
1031197104Sjkim
1032197104Sjkim/* Length of device entry is in the top two bits of Type field above */
1033197104Sjkim
1034197104Sjkim#define ACPI_IVHD_ENTRY_LENGTH      0xC0
1035197104Sjkim
1036197104Sjkim/* Values for device entry Type field above */
1037197104Sjkim
1038197104Sjkimenum AcpiIvrsDeviceEntryType
1039197104Sjkim{
1040197104Sjkim    /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
1041197104Sjkim
1042197104Sjkim    ACPI_IVRS_TYPE_PAD4             = 0,
1043197104Sjkim    ACPI_IVRS_TYPE_ALL              = 1,
1044197104Sjkim    ACPI_IVRS_TYPE_SELECT           = 2,
1045197104Sjkim    ACPI_IVRS_TYPE_START            = 3,
1046197104Sjkim    ACPI_IVRS_TYPE_END              = 4,
1047197104Sjkim
1048197104Sjkim    /* 8-byte device entries */
1049197104Sjkim
1050197104Sjkim    ACPI_IVRS_TYPE_PAD8             = 64,
1051197104Sjkim    ACPI_IVRS_TYPE_NOT_USED         = 65,
1052197104Sjkim    ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
1053197104Sjkim    ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
1054197104Sjkim    ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
1055197104Sjkim    ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
1056197104Sjkim    ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
1057197104Sjkim};
1058197104Sjkim
1059197104Sjkim/* Values for Data field above */
1060197104Sjkim
1061197104Sjkim#define ACPI_IVHD_INIT_PASS         (1)
1062197104Sjkim#define ACPI_IVHD_EINT_PASS         (1<<1)
1063197104Sjkim#define ACPI_IVHD_NMI_PASS          (1<<2)
1064197104Sjkim#define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
1065197104Sjkim#define ACPI_IVHD_LINT0_PASS        (1<<6)
1066197104Sjkim#define ACPI_IVHD_LINT1_PASS        (1<<7)
1067197104Sjkim
1068197104Sjkim
1069197104Sjkim/* Types 0-4: 4-byte device entry */
1070197104Sjkim
1071197104Sjkimtypedef struct acpi_ivrs_device4
1072197104Sjkim{
1073197104Sjkim    ACPI_IVRS_DE_HEADER     Header;
1074197104Sjkim
1075197104Sjkim} ACPI_IVRS_DEVICE4;
1076197104Sjkim
1077197104Sjkim/* Types 66-67: 8-byte device entry */
1078197104Sjkim
1079197104Sjkimtypedef struct acpi_ivrs_device8a
1080197104Sjkim{
1081197104Sjkim    ACPI_IVRS_DE_HEADER     Header;
1082197104Sjkim    UINT8                   Reserved1;
1083197104Sjkim    UINT16                  UsedId;
1084197104Sjkim    UINT8                   Reserved2;
1085197104Sjkim
1086197104Sjkim} ACPI_IVRS_DEVICE8A;
1087197104Sjkim
1088197104Sjkim/* Types 70-71: 8-byte device entry */
1089197104Sjkim
1090197104Sjkimtypedef struct acpi_ivrs_device8b
1091197104Sjkim{
1092197104Sjkim    ACPI_IVRS_DE_HEADER     Header;
1093197104Sjkim    UINT32                  ExtendedData;
1094197104Sjkim
1095197104Sjkim} ACPI_IVRS_DEVICE8B;
1096197104Sjkim
1097197104Sjkim/* Values for ExtendedData above */
1098197104Sjkim
1099197104Sjkim#define ACPI_IVHD_ATS_DISABLED      (1<<31)
1100197104Sjkim
1101197104Sjkim/* Type 72: 8-byte device entry */
1102197104Sjkim
1103197104Sjkimtypedef struct acpi_ivrs_device8c
1104197104Sjkim{
1105197104Sjkim    ACPI_IVRS_DE_HEADER     Header;
1106197104Sjkim    UINT8                   Handle;
1107197104Sjkim    UINT16                  UsedId;
1108197104Sjkim    UINT8                   Variety;
1109197104Sjkim
1110197104Sjkim} ACPI_IVRS_DEVICE8C;
1111197104Sjkim
1112197104Sjkim/* Values for Variety field above */
1113197104Sjkim
1114197104Sjkim#define ACPI_IVHD_IOAPIC            1
1115197104Sjkim#define ACPI_IVHD_HPET              2
1116197104Sjkim
1117197104Sjkim
1118197104Sjkim/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
1119197104Sjkim
1120197104Sjkimtypedef struct acpi_ivrs_memory
1121197104Sjkim{
1122197104Sjkim    ACPI_IVRS_HEADER        Header;
1123197104Sjkim    UINT16                  AuxData;
1124197104Sjkim    UINT64                  Reserved;
1125197104Sjkim    UINT64                  StartAddress;
1126197104Sjkim    UINT64                  MemoryLength;
1127197104Sjkim
1128197104Sjkim} ACPI_IVRS_MEMORY;
1129197104Sjkim
1130197104Sjkim
1131197104Sjkim/*******************************************************************************
1132197104Sjkim *
1133281075Sdim * LPIT - Low Power Idle Table
1134281075Sdim *
1135284460Sjkim * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1136281075Sdim *
1137281075Sdim ******************************************************************************/
1138281075Sdim
1139281075Sdimtypedef struct acpi_table_lpit
1140281075Sdim{
1141281075Sdim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1142281075Sdim
1143281075Sdim} ACPI_TABLE_LPIT;
1144281075Sdim
1145281075Sdim
1146281075Sdim/* LPIT subtable header */
1147281075Sdim
1148281075Sdimtypedef struct acpi_lpit_header
1149281075Sdim{
1150281075Sdim    UINT32                  Type;               /* Subtable type */
1151281075Sdim    UINT32                  Length;             /* Subtable length */
1152281075Sdim    UINT16                  UniqueId;
1153281075Sdim    UINT16                  Reserved;
1154281075Sdim    UINT32                  Flags;
1155281075Sdim
1156281075Sdim} ACPI_LPIT_HEADER;
1157281075Sdim
1158281075Sdim/* Values for subtable Type above */
1159281075Sdim
1160281075Sdimenum AcpiLpitType
1161281075Sdim{
1162281075Sdim    ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
1163284460Sjkim    ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
1164281075Sdim};
1165281075Sdim
1166281075Sdim/* Masks for Flags field above  */
1167281075Sdim
1168281075Sdim#define ACPI_LPIT_STATE_DISABLED    (1)
1169281075Sdim#define ACPI_LPIT_NO_COUNTER        (1<<1)
1170281075Sdim
1171281075Sdim/*
1172281075Sdim * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
1173281075Sdim */
1174281075Sdim
1175281075Sdim/* 0x00: Native C-state instruction based LPI structure */
1176281075Sdim
1177281075Sdimtypedef struct acpi_lpit_native
1178281075Sdim{
1179281075Sdim    ACPI_LPIT_HEADER        Header;
1180281075Sdim    ACPI_GENERIC_ADDRESS    EntryTrigger;
1181281075Sdim    UINT32                  Residency;
1182281075Sdim    UINT32                  Latency;
1183281075Sdim    ACPI_GENERIC_ADDRESS    ResidencyCounter;
1184281075Sdim    UINT64                  CounterFrequency;
1185281075Sdim
1186281075Sdim} ACPI_LPIT_NATIVE;
1187281075Sdim
1188281075Sdim
1189281075Sdim/*******************************************************************************
1190281075Sdim *
1191281075Sdim * MCFG - PCI Memory Mapped Configuration table and subtable
1192197104Sjkim *        Version 1
1193197104Sjkim *
1194197104Sjkim * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1195197104Sjkim *
1196197104Sjkim ******************************************************************************/
1197197104Sjkim
1198197104Sjkimtypedef struct acpi_table_mcfg
1199197104Sjkim{
1200197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1201197104Sjkim    UINT8                   Reserved[8];
1202197104Sjkim
1203197104Sjkim} ACPI_TABLE_MCFG;
1204197104Sjkim
1205197104Sjkim
1206197104Sjkim/* Subtable */
1207197104Sjkim
1208197104Sjkimtypedef struct acpi_mcfg_allocation
1209197104Sjkim{
1210197104Sjkim    UINT64                  Address;            /* Base address, processor-relative */
1211197104Sjkim    UINT16                  PciSegment;         /* PCI segment group number */
1212197104Sjkim    UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1213197104Sjkim    UINT8                   EndBusNumber;       /* Final PCI Bus number */
1214197104Sjkim    UINT32                  Reserved;
1215197104Sjkim
1216197104Sjkim} ACPI_MCFG_ALLOCATION;
1217197104Sjkim
1218197104Sjkim
1219197104Sjkim/*******************************************************************************
1220197104Sjkim *
1221204773Sjkim * MCHI - Management Controller Host Interface Table
1222204773Sjkim *        Version 1
1223204773Sjkim *
1224204773Sjkim * Conforms to "Management Component Transport Protocol (MCTP) Host
1225204773Sjkim * Interface Specification", Revision 1.0.0a, October 13, 2009
1226204773Sjkim *
1227204773Sjkim ******************************************************************************/
1228204773Sjkim
1229204773Sjkimtypedef struct acpi_table_mchi
1230204773Sjkim{
1231204773Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1232204773Sjkim    UINT8                   InterfaceType;
1233204773Sjkim    UINT8                   Protocol;
1234204773Sjkim    UINT64                  ProtocolData;
1235204773Sjkim    UINT8                   InterruptType;
1236204773Sjkim    UINT8                   Gpe;
1237204773Sjkim    UINT8                   PciDeviceFlag;
1238204773Sjkim    UINT32                  GlobalInterrupt;
1239204773Sjkim    ACPI_GENERIC_ADDRESS    ControlRegister;
1240204773Sjkim    UINT8                   PciSegment;
1241204773Sjkim    UINT8                   PciBus;
1242204773Sjkim    UINT8                   PciDevice;
1243204773Sjkim    UINT8                   PciFunction;
1244204773Sjkim
1245204773Sjkim} ACPI_TABLE_MCHI;
1246204773Sjkim
1247204773Sjkim
1248204773Sjkim/*******************************************************************************
1249204773Sjkim *
1250281687Sjkim * MSDM - Microsoft Data Management table
1251281687Sjkim *
1252281687Sjkim * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1253281687Sjkim * November 29, 2011. Copyright 2011 Microsoft
1254281687Sjkim *
1255281687Sjkim ******************************************************************************/
1256281687Sjkim
1257281687Sjkim/* Basic MSDM table is only the common ACPI header */
1258281687Sjkim
1259281687Sjkimtypedef struct acpi_table_msdm
1260281687Sjkim{
1261281687Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1262281687Sjkim
1263281687Sjkim} ACPI_TABLE_MSDM;
1264281687Sjkim
1265281687Sjkim
1266281687Sjkim/*******************************************************************************
1267281687Sjkim *
1268246849Sjkim * MTMR - MID Timer Table
1269246849Sjkim *        Version 1
1270246849Sjkim *
1271246849Sjkim * Conforms to "Simple Firmware Interface Specification",
1272246849Sjkim * Draft 0.8.2, Oct 19, 2010
1273246849Sjkim * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
1274246849Sjkim *
1275246849Sjkim ******************************************************************************/
1276246849Sjkim
1277246849Sjkimtypedef struct acpi_table_mtmr
1278246849Sjkim{
1279246849Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1280246849Sjkim
1281246849Sjkim} ACPI_TABLE_MTMR;
1282246849Sjkim
1283246849Sjkim/* MTMR entry */
1284246849Sjkim
1285246849Sjkimtypedef struct acpi_mtmr_entry
1286246849Sjkim{
1287246849Sjkim    ACPI_GENERIC_ADDRESS    PhysicalAddress;
1288246849Sjkim    UINT32                  Frequency;
1289246849Sjkim    UINT32                  Irq;
1290246849Sjkim
1291246849Sjkim} ACPI_MTMR_ENTRY;
1292246849Sjkim
1293246849Sjkim
1294246849Sjkim/*******************************************************************************
1295246849Sjkim *
1296219707Sjkim * SLIC - Software Licensing Description Table
1297219707Sjkim *
1298281687Sjkim * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1299281687Sjkim * November 29, 2011. Copyright 2011 Microsoft
1300219707Sjkim *
1301219707Sjkim ******************************************************************************/
1302219707Sjkim
1303219707Sjkim/* Basic SLIC table is only the common ACPI header */
1304219707Sjkim
1305219707Sjkimtypedef struct acpi_table_slic
1306219707Sjkim{
1307219707Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1308219707Sjkim
1309219707Sjkim} ACPI_TABLE_SLIC;
1310219707Sjkim
1311219707Sjkim
1312219707Sjkim/*******************************************************************************
1313219707Sjkim *
1314197104Sjkim * SPCR - Serial Port Console Redirection table
1315306536Sjkim *        Version 2
1316197104Sjkim *
1317197104Sjkim * Conforms to "Serial Port Console Redirection Table",
1318306536Sjkim * Version 1.03, August 10, 2015
1319197104Sjkim *
1320197104Sjkim ******************************************************************************/
1321197104Sjkim
1322197104Sjkimtypedef struct acpi_table_spcr
1323197104Sjkim{
1324197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1325197104Sjkim    UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
1326197104Sjkim    UINT8                   Reserved[3];
1327197104Sjkim    ACPI_GENERIC_ADDRESS    SerialPort;
1328197104Sjkim    UINT8                   InterruptType;
1329197104Sjkim    UINT8                   PcInterrupt;
1330197104Sjkim    UINT32                  Interrupt;
1331197104Sjkim    UINT8                   BaudRate;
1332197104Sjkim    UINT8                   Parity;
1333197104Sjkim    UINT8                   StopBits;
1334197104Sjkim    UINT8                   FlowControl;
1335197104Sjkim    UINT8                   TerminalType;
1336197104Sjkim    UINT8                   Reserved1;
1337197104Sjkim    UINT16                  PciDeviceId;
1338197104Sjkim    UINT16                  PciVendorId;
1339197104Sjkim    UINT8                   PciBus;
1340197104Sjkim    UINT8                   PciDevice;
1341197104Sjkim    UINT8                   PciFunction;
1342197104Sjkim    UINT32                  PciFlags;
1343197104Sjkim    UINT8                   PciSegment;
1344197104Sjkim    UINT32                  Reserved2;
1345197104Sjkim
1346197104Sjkim} ACPI_TABLE_SPCR;
1347197104Sjkim
1348197104Sjkim/* Masks for PciFlags field above */
1349197104Sjkim
1350197104Sjkim#define ACPI_SPCR_DO_NOT_DISABLE    (1)
1351197104Sjkim
1352306536Sjkim/* Values for Interface Type: See the definition of the DBG2 table */
1353197104Sjkim
1354306536Sjkim
1355197104Sjkim/*******************************************************************************
1356197104Sjkim *
1357197104Sjkim * SPMI - Server Platform Management Interface table
1358197104Sjkim *        Version 5
1359197104Sjkim *
1360197104Sjkim * Conforms to "Intelligent Platform Management Interface Specification
1361197104Sjkim * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
1362197104Sjkim * June 12, 2009 markup.
1363197104Sjkim *
1364197104Sjkim ******************************************************************************/
1365197104Sjkim
1366197104Sjkimtypedef struct acpi_table_spmi
1367197104Sjkim{
1368197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1369197104Sjkim    UINT8                   InterfaceType;
1370197104Sjkim    UINT8                   Reserved;           /* Must be 1 */
1371197104Sjkim    UINT16                  SpecRevision;       /* Version of IPMI */
1372197104Sjkim    UINT8                   InterruptType;
1373197104Sjkim    UINT8                   GpeNumber;          /* GPE assigned */
1374197104Sjkim    UINT8                   Reserved1;
1375197104Sjkim    UINT8                   PciDeviceFlag;
1376197104Sjkim    UINT32                  Interrupt;
1377197104Sjkim    ACPI_GENERIC_ADDRESS    IpmiRegister;
1378197104Sjkim    UINT8                   PciSegment;
1379197104Sjkim    UINT8                   PciBus;
1380197104Sjkim    UINT8                   PciDevice;
1381197104Sjkim    UINT8                   PciFunction;
1382197104Sjkim    UINT8                   Reserved2;
1383197104Sjkim
1384197104Sjkim} ACPI_TABLE_SPMI;
1385197104Sjkim
1386197104Sjkim/* Values for InterfaceType above */
1387197104Sjkim
1388197104Sjkimenum AcpiSpmiInterfaceTypes
1389197104Sjkim{
1390197104Sjkim    ACPI_SPMI_NOT_USED              = 0,
1391197104Sjkim    ACPI_SPMI_KEYBOARD              = 1,
1392197104Sjkim    ACPI_SPMI_SMI                   = 2,
1393197104Sjkim    ACPI_SPMI_BLOCK_TRANSFER        = 3,
1394197104Sjkim    ACPI_SPMI_SMBUS                 = 4,
1395197104Sjkim    ACPI_SPMI_RESERVED              = 5         /* 5 and above are reserved */
1396197104Sjkim};
1397197104Sjkim
1398197104Sjkim
1399197104Sjkim/*******************************************************************************
1400197104Sjkim *
1401197104Sjkim * TCPA - Trusted Computing Platform Alliance table
1402306536Sjkim *        Version 2
1403197104Sjkim *
1404306536Sjkim * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1405306536Sjkim * December 19, 2014
1406197104Sjkim *
1407306536Sjkim * NOTE: There are two versions of the table with the same signature --
1408306536Sjkim * the client version and the server version. The common PlatformClass
1409306536Sjkim * field is used to differentiate the two types of tables.
1410306536Sjkim *
1411197104Sjkim ******************************************************************************/
1412197104Sjkim
1413306536Sjkimtypedef struct acpi_table_tcpa_hdr
1414197104Sjkim{
1415197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1416306536Sjkim    UINT16                  PlatformClass;
1417306536Sjkim
1418306536Sjkim} ACPI_TABLE_TCPA_HDR;
1419306536Sjkim
1420306536Sjkim/*
1421306536Sjkim * Values for PlatformClass above.
1422306536Sjkim * This is how the client and server subtables are differentiated
1423306536Sjkim */
1424306536Sjkim#define ACPI_TCPA_CLIENT_TABLE          0
1425306536Sjkim#define ACPI_TCPA_SERVER_TABLE          1
1426306536Sjkim
1427306536Sjkim
1428306536Sjkimtypedef struct acpi_table_tcpa_client
1429306536Sjkim{
1430306536Sjkim    UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
1431306536Sjkim    UINT64                  LogAddress;         /* Address of the event log area */
1432306536Sjkim
1433306536Sjkim} ACPI_TABLE_TCPA_CLIENT;
1434306536Sjkim
1435306536Sjkimtypedef struct acpi_table_tcpa_server
1436306536Sjkim{
1437197104Sjkim    UINT16                  Reserved;
1438306536Sjkim    UINT64                  MinimumLogLength;   /* Minimum length for the event log area */
1439197104Sjkim    UINT64                  LogAddress;         /* Address of the event log area */
1440306536Sjkim    UINT16                  SpecRevision;
1441306536Sjkim    UINT8                   DeviceFlags;
1442306536Sjkim    UINT8                   InterruptFlags;
1443306536Sjkim    UINT8                   GpeNumber;
1444306536Sjkim    UINT8                   Reserved2[3];
1445306536Sjkim    UINT32                  GlobalInterrupt;
1446306536Sjkim    ACPI_GENERIC_ADDRESS    Address;
1447306536Sjkim    UINT32                  Reserved3;
1448306536Sjkim    ACPI_GENERIC_ADDRESS    ConfigAddress;
1449306536Sjkim    UINT8                   Group;
1450306536Sjkim    UINT8                   Bus;                /* PCI Bus/Segment/Function numbers */
1451306536Sjkim    UINT8                   Device;
1452306536Sjkim    UINT8                   Function;
1453197104Sjkim
1454306536Sjkim} ACPI_TABLE_TCPA_SERVER;
1455197104Sjkim
1456306536Sjkim/* Values for DeviceFlags above */
1457197104Sjkim
1458306536Sjkim#define ACPI_TCPA_PCI_DEVICE            (1)
1459306536Sjkim#define ACPI_TCPA_BUS_PNP               (1<<1)
1460306536Sjkim#define ACPI_TCPA_ADDRESS_VALID         (1<<2)
1461306536Sjkim
1462306536Sjkim/* Values for InterruptFlags above */
1463306536Sjkim
1464306536Sjkim#define ACPI_TCPA_INTERRUPT_MODE        (1)
1465306536Sjkim#define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
1466306536Sjkim#define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
1467306536Sjkim#define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
1468306536Sjkim
1469306536Sjkim
1470197104Sjkim/*******************************************************************************
1471197104Sjkim *
1472306536Sjkim * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
1473306536Sjkim *        Version 4
1474306536Sjkim *
1475306536Sjkim * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1476306536Sjkim * December 19, 2014
1477306536Sjkim *
1478306536Sjkim ******************************************************************************/
1479306536Sjkim
1480306536Sjkimtypedef struct acpi_table_tpm2
1481306536Sjkim{
1482306536Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1483306536Sjkim    UINT16                  PlatformClass;
1484306536Sjkim    UINT16                  Reserved;
1485306536Sjkim    UINT64                  ControlAddress;
1486306536Sjkim    UINT32                  StartMethod;
1487306536Sjkim
1488306536Sjkim    /* Platform-specific data follows */
1489306536Sjkim
1490306536Sjkim} ACPI_TABLE_TPM2;
1491306536Sjkim
1492306536Sjkim/* Values for StartMethod above */
1493306536Sjkim
1494306536Sjkim#define ACPI_TPM2_NOT_ALLOWED                       0
1495306536Sjkim#define ACPI_TPM2_START_METHOD                      2
1496306536Sjkim#define ACPI_TPM2_MEMORY_MAPPED                     6
1497306536Sjkim#define ACPI_TPM2_COMMAND_BUFFER                    7
1498306536Sjkim#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
1499306536Sjkim
1500306536Sjkim
1501306536Sjkim/*******************************************************************************
1502306536Sjkim *
1503197104Sjkim * UEFI - UEFI Boot optimization Table
1504197104Sjkim *        Version 1
1505197104Sjkim *
1506197104Sjkim * Conforms to "Unified Extensible Firmware Interface Specification",
1507197104Sjkim * Version 2.3, May 8, 2009
1508197104Sjkim *
1509197104Sjkim ******************************************************************************/
1510197104Sjkim
1511197104Sjkimtypedef struct acpi_table_uefi
1512197104Sjkim{
1513197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1514197104Sjkim    UINT8                   Identifier[16];     /* UUID identifier */
1515197104Sjkim    UINT16                  DataOffset;         /* Offset of remaining data in table */
1516197104Sjkim
1517197104Sjkim} ACPI_TABLE_UEFI;
1518197104Sjkim
1519197104Sjkim
1520197104Sjkim/*******************************************************************************
1521197104Sjkim *
1522246849Sjkim * VRTC - Virtual Real Time Clock Table
1523246849Sjkim *        Version 1
1524246849Sjkim *
1525246849Sjkim * Conforms to "Simple Firmware Interface Specification",
1526246849Sjkim * Draft 0.8.2, Oct 19, 2010
1527246849Sjkim * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
1528246849Sjkim *
1529246849Sjkim ******************************************************************************/
1530246849Sjkim
1531246849Sjkimtypedef struct acpi_table_vrtc
1532246849Sjkim{
1533246849Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1534246849Sjkim
1535246849Sjkim} ACPI_TABLE_VRTC;
1536246849Sjkim
1537246849Sjkim/* VRTC entry */
1538246849Sjkim
1539246849Sjkimtypedef struct acpi_vrtc_entry
1540246849Sjkim{
1541246849Sjkim    ACPI_GENERIC_ADDRESS    PhysicalAddress;
1542246849Sjkim    UINT32                  Irq;
1543246849Sjkim
1544246849Sjkim} ACPI_VRTC_ENTRY;
1545246849Sjkim
1546246849Sjkim
1547246849Sjkim/*******************************************************************************
1548246849Sjkim *
1549197104Sjkim * WAET - Windows ACPI Emulated devices Table
1550197104Sjkim *        Version 1
1551197104Sjkim *
1552197104Sjkim * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
1553197104Sjkim *
1554197104Sjkim ******************************************************************************/
1555197104Sjkim
1556197104Sjkimtypedef struct acpi_table_waet
1557197104Sjkim{
1558197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1559197104Sjkim    UINT32                  Flags;
1560197104Sjkim
1561197104Sjkim} ACPI_TABLE_WAET;
1562197104Sjkim
1563197104Sjkim/* Masks for Flags field above */
1564197104Sjkim
1565197104Sjkim#define ACPI_WAET_RTC_NO_ACK        (1)         /* RTC requires no int acknowledge */
1566197104Sjkim#define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
1567197104Sjkim
1568197104Sjkim
1569197104Sjkim/*******************************************************************************
1570197104Sjkim *
1571197104Sjkim * WDAT - Watchdog Action Table
1572197104Sjkim *        Version 1
1573197104Sjkim *
1574197104Sjkim * Conforms to "Hardware Watchdog Timers Design Specification",
1575197104Sjkim * Copyright 2006 Microsoft Corporation.
1576197104Sjkim *
1577197104Sjkim ******************************************************************************/
1578197104Sjkim
1579197104Sjkimtypedef struct acpi_table_wdat
1580197104Sjkim{
1581197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1582197104Sjkim    UINT32                  HeaderLength;       /* Watchdog Header Length */
1583197104Sjkim    UINT16                  PciSegment;         /* PCI Segment number */
1584197104Sjkim    UINT8                   PciBus;             /* PCI Bus number */
1585197104Sjkim    UINT8                   PciDevice;          /* PCI Device number */
1586197104Sjkim    UINT8                   PciFunction;        /* PCI Function number */
1587197104Sjkim    UINT8                   Reserved[3];
1588197104Sjkim    UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
1589197104Sjkim    UINT32                  MaxCount;           /* Maximum counter value supported */
1590197104Sjkim    UINT32                  MinCount;           /* Minimum counter value */
1591197104Sjkim    UINT8                   Flags;
1592197104Sjkim    UINT8                   Reserved2[3];
1593197104Sjkim    UINT32                  Entries;            /* Number of watchdog entries that follow */
1594197104Sjkim
1595197104Sjkim} ACPI_TABLE_WDAT;
1596197104Sjkim
1597197104Sjkim/* Masks for Flags field above */
1598197104Sjkim
1599197104Sjkim#define ACPI_WDAT_ENABLED           (1)
1600197104Sjkim#define ACPI_WDAT_STOPPED           0x80
1601197104Sjkim
1602197104Sjkim
1603197104Sjkim/* WDAT Instruction Entries (actions) */
1604197104Sjkim
1605197104Sjkimtypedef struct acpi_wdat_entry
1606197104Sjkim{
1607197104Sjkim    UINT8                   Action;
1608197104Sjkim    UINT8                   Instruction;
1609197104Sjkim    UINT16                  Reserved;
1610197104Sjkim    ACPI_GENERIC_ADDRESS    RegisterRegion;
1611197104Sjkim    UINT32                  Value;              /* Value used with Read/Write register */
1612197104Sjkim    UINT32                  Mask;               /* Bitmask required for this register instruction */
1613197104Sjkim
1614197104Sjkim} ACPI_WDAT_ENTRY;
1615197104Sjkim
1616197104Sjkim/* Values for Action field above */
1617197104Sjkim
1618197104Sjkimenum AcpiWdatActions
1619197104Sjkim{
1620197104Sjkim    ACPI_WDAT_RESET                 = 1,
1621197104Sjkim    ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1622197104Sjkim    ACPI_WDAT_GET_COUNTDOWN         = 5,
1623197104Sjkim    ACPI_WDAT_SET_COUNTDOWN         = 6,
1624197104Sjkim    ACPI_WDAT_GET_RUNNING_STATE     = 8,
1625197104Sjkim    ACPI_WDAT_SET_RUNNING_STATE     = 9,
1626197104Sjkim    ACPI_WDAT_GET_STOPPED_STATE     = 10,
1627197104Sjkim    ACPI_WDAT_SET_STOPPED_STATE     = 11,
1628197104Sjkim    ACPI_WDAT_GET_REBOOT            = 16,
1629197104Sjkim    ACPI_WDAT_SET_REBOOT            = 17,
1630197104Sjkim    ACPI_WDAT_GET_SHUTDOWN          = 18,
1631197104Sjkim    ACPI_WDAT_SET_SHUTDOWN          = 19,
1632197104Sjkim    ACPI_WDAT_GET_STATUS            = 32,
1633197104Sjkim    ACPI_WDAT_SET_STATUS            = 33,
1634197104Sjkim    ACPI_WDAT_ACTION_RESERVED       = 34    /* 34 and greater are reserved */
1635197104Sjkim};
1636197104Sjkim
1637197104Sjkim/* Values for Instruction field above */
1638197104Sjkim
1639197104Sjkimenum AcpiWdatInstructions
1640197104Sjkim{
1641197104Sjkim    ACPI_WDAT_READ_VALUE            = 0,
1642197104Sjkim    ACPI_WDAT_READ_COUNTDOWN        = 1,
1643197104Sjkim    ACPI_WDAT_WRITE_VALUE           = 2,
1644197104Sjkim    ACPI_WDAT_WRITE_COUNTDOWN       = 3,
1645197104Sjkim    ACPI_WDAT_INSTRUCTION_RESERVED  = 4,    /* 4 and greater are reserved */
1646197104Sjkim    ACPI_WDAT_PRESERVE_REGISTER     = 0x80  /* Except for this value */
1647197104Sjkim};
1648197104Sjkim
1649197104Sjkim
1650197104Sjkim/*******************************************************************************
1651197104Sjkim *
1652209746Sjkim * WDDT - Watchdog Descriptor Table
1653209746Sjkim *        Version 1
1654209746Sjkim *
1655209746Sjkim * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
1656209746Sjkim * Version 001, September 2002
1657209746Sjkim *
1658209746Sjkim ******************************************************************************/
1659209746Sjkim
1660209746Sjkimtypedef struct acpi_table_wddt
1661209746Sjkim{
1662209746Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1663209746Sjkim    UINT16                  SpecVersion;
1664209746Sjkim    UINT16                  TableVersion;
1665209746Sjkim    UINT16                  PciVendorId;
1666209746Sjkim    ACPI_GENERIC_ADDRESS    Address;
1667209746Sjkim    UINT16                  MaxCount;           /* Maximum counter value supported */
1668209746Sjkim    UINT16                  MinCount;           /* Minimum counter value supported */
1669209746Sjkim    UINT16                  Period;
1670209746Sjkim    UINT16                  Status;
1671209746Sjkim    UINT16                  Capability;
1672209746Sjkim
1673209746Sjkim} ACPI_TABLE_WDDT;
1674209746Sjkim
1675209746Sjkim/* Flags for Status field above */
1676209746Sjkim
1677209746Sjkim#define ACPI_WDDT_AVAILABLE     (1)
1678209746Sjkim#define ACPI_WDDT_ACTIVE        (1<<1)
1679209746Sjkim#define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
1680209746Sjkim#define ACPI_WDDT_USER_RESET    (1<<11)
1681209746Sjkim#define ACPI_WDDT_WDT_RESET     (1<<12)
1682209746Sjkim#define ACPI_WDDT_POWER_FAIL    (1<<13)
1683209746Sjkim#define ACPI_WDDT_UNKNOWN_RESET (1<<14)
1684209746Sjkim
1685209746Sjkim/* Flags for Capability field above */
1686209746Sjkim
1687209746Sjkim#define ACPI_WDDT_AUTO_RESET    (1)
1688209746Sjkim#define ACPI_WDDT_ALERT_SUPPORT (1<<1)
1689209746Sjkim
1690209746Sjkim
1691209746Sjkim/*******************************************************************************
1692209746Sjkim *
1693197104Sjkim * WDRT - Watchdog Resource Table
1694197104Sjkim *        Version 1
1695197104Sjkim *
1696197104Sjkim * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
1697197104Sjkim * Version 1.01, August 28, 2006
1698197104Sjkim *
1699197104Sjkim ******************************************************************************/
1700197104Sjkim
1701197104Sjkimtypedef struct acpi_table_wdrt
1702197104Sjkim{
1703197104Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1704197104Sjkim    ACPI_GENERIC_ADDRESS    ControlRegister;
1705197104Sjkim    ACPI_GENERIC_ADDRESS    CountRegister;
1706197104Sjkim    UINT16                  PciDeviceId;
1707197104Sjkim    UINT16                  PciVendorId;
1708197104Sjkim    UINT8                   PciBus;             /* PCI Bus number */
1709197104Sjkim    UINT8                   PciDevice;          /* PCI Device number */
1710197104Sjkim    UINT8                   PciFunction;        /* PCI Function number */
1711197104Sjkim    UINT8                   PciSegment;         /* PCI Segment number */
1712197104Sjkim    UINT16                  MaxCount;           /* Maximum counter value supported */
1713197104Sjkim    UINT8                   Units;
1714197104Sjkim
1715197104Sjkim} ACPI_TABLE_WDRT;
1716197104Sjkim
1717197104Sjkim
1718197104Sjkim/* Reset to default packing */
1719197104Sjkim
1720197104Sjkim#pragma pack()
1721197104Sjkim
1722197104Sjkim#endif /* __ACTBL2_H__ */
1723