xref: /haiku/src/add-ons/kernel/bus_managers/acpi/acpica/include/actbl2.h (revision b08627f310bb2e80bca50176e7a758182384735a)
1 /******************************************************************************
2  *
3  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4  *
5  *****************************************************************************/
6 
7 /******************************************************************************
8  *
9  * 1. Copyright Notice
10  *
11  * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp.
12  * All rights reserved.
13  *
14  * 2. License
15  *
16  * 2.1. This is your license from Intel Corp. under its intellectual property
17  * rights. You may have additional license terms from the party that provided
18  * you this software, covering your right to use that party's intellectual
19  * property rights.
20  *
21  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22  * copy of the source code appearing in this file ("Covered Code") an
23  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24  * base code distributed originally by Intel ("Original Intel Code") to copy,
25  * make derivatives, distribute, use and display any portion of the Covered
26  * Code in any form, with the right to sublicense such rights; and
27  *
28  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29  * license (with the right to sublicense), under only those claims of Intel
30  * patents that are infringed by the Original Intel Code, to make, use, sell,
31  * offer to sell, and import the Covered Code and derivative works thereof
32  * solely to the minimum extent necessary to exercise the above copyright
33  * license, and in no event shall the patent license extend to any additions
34  * to or modifications of the Original Intel Code. No other license or right
35  * is granted directly or by implication, estoppel or otherwise;
36  *
37  * The above copyright and patent license is granted only if the following
38  * conditions are met:
39  *
40  * 3. Conditions
41  *
42  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43  * Redistribution of source code of any substantial portion of the Covered
44  * Code or modification with rights to further distribute source must include
45  * the above Copyright Notice, the above License, this list of Conditions,
46  * and the following Disclaimer and Export Compliance provision. In addition,
47  * Licensee must cause all Covered Code to which Licensee contributes to
48  * contain a file documenting the changes Licensee made to create that Covered
49  * Code and the date of any change. Licensee must include in that file the
50  * documentation of any changes made by any predecessor Licensee. Licensee
51  * must include a prominent statement that the modification is derived,
52  * directly or indirectly, from Original Intel Code.
53  *
54  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55  * Redistribution of source code of any substantial portion of the Covered
56  * Code or modification without rights to further distribute source must
57  * include the following Disclaimer and Export Compliance provision in the
58  * documentation and/or other materials provided with distribution. In
59  * addition, Licensee may not authorize further sublicense of source of any
60  * portion of the Covered Code, and must include terms to the effect that the
61  * license from Licensee to its licensee is limited to the intellectual
62  * property embodied in the software Licensee provides to its licensee, and
63  * not to intellectual property embodied in modifications its licensee may
64  * make.
65  *
66  * 3.3. Redistribution of Executable. Redistribution in executable form of any
67  * substantial portion of the Covered Code or modification must reproduce the
68  * above Copyright Notice, and the following Disclaimer and Export Compliance
69  * provision in the documentation and/or other materials provided with the
70  * distribution.
71  *
72  * 3.4. Intel retains all right, title, and interest in and to the Original
73  * Intel Code.
74  *
75  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76  * Intel shall be used in advertising or otherwise to promote the sale, use or
77  * other dealings in products derived from or relating to the Covered Code
78  * without prior written authorization from Intel.
79  *
80  * 4. Disclaimer and Export Compliance
81  *
82  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88  * PARTICULAR PURPOSE.
89  *
90  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97  * LIMITED REMEDY.
98  *
99  * 4.3. Licensee shall not export, either directly or indirectly, any of this
100  * software or system incorporating such software without first obtaining any
101  * required license or other approval from the U. S. Department of Commerce or
102  * any other agency or department of the United States Government. In the
103  * event Licensee exports any such software from the United States or
104  * re-exports any such software from a foreign destination, Licensee shall
105  * ensure that the distribution and export/re-export of the software is in
106  * compliance with all laws, regulations, orders, or other restrictions of the
107  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108  * any of its subsidiaries will export/re-export any technical data, process,
109  * software, or service, directly or indirectly, to any country for which the
110  * United States government or any agency thereof requires an export license,
111  * other governmental approval, or letter of assurance, without first obtaining
112  * such license, approval or letter.
113  *
114  *****************************************************************************
115  *
116  * Alternatively, you may choose to be licensed under the terms of the
117  * following license:
118  *
119  * Redistribution and use in source and binary forms, with or without
120  * modification, are permitted provided that the following conditions
121  * are met:
122  * 1. Redistributions of source code must retain the above copyright
123  *    notice, this list of conditions, and the following disclaimer,
124  *    without modification.
125  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126  *    substantially similar to the "NO WARRANTY" disclaimer below
127  *    ("Disclaimer") and any redistribution must be conditioned upon
128  *    including a substantially similar Disclaimer requirement for further
129  *    binary redistribution.
130  * 3. Neither the names of the above-listed copyright holders nor the names
131  *    of any contributors may be used to endorse or promote products derived
132  *    from this software without specific prior written permission.
133  *
134  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145  *
146  * Alternatively, you may choose to be licensed under the terms of the
147  * GNU General Public License ("GPL") version 2 as published by the Free
148  * Software Foundation.
149  *
150  *****************************************************************************/
151 
152 #ifndef __ACTBL2_H__
153 #define __ACTBL2_H__
154 
155 
156 /*******************************************************************************
157  *
158  * Additional ACPI Tables (2)
159  *
160  * These tables are not consumed directly by the ACPICA subsystem, but are
161  * included here to support device drivers and the AML disassembler.
162  *
163  * Generally, the tables in this file are defined by third-party specifications,
164  * and are not defined directly by the ACPI specification itself.
165  *
166  ******************************************************************************/
167 
168 
169 /*
170  * Values for description table header signatures for tables defined in this
171  * file. Useful because they make it more difficult to inadvertently type in
172  * the wrong signature.
173  */
174 #define ACPI_SIG_ASF            "ASF!"      /* Alert Standard Format table */
175 #define ACPI_SIG_BOOT           "BOOT"      /* Simple Boot Flag Table */
176 #define ACPI_SIG_CSRT           "CSRT"      /* Core System Resource Table */
177 #define ACPI_SIG_DBG2           "DBG2"      /* Debug Port table type 2 */
178 #define ACPI_SIG_DBGP           "DBGP"      /* Debug Port table */
179 #define ACPI_SIG_DMAR           "DMAR"      /* DMA Remapping table */
180 #define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
181 #define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
182 #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
183 #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
184 #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
185 #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
186 #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
187 #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
188 #define ACPI_SIG_MTMR           "MTMR"      /* MID Timer table */
189 #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated Exception Interface Table */
190 #define ACPI_SIG_SLIC           "SLIC"      /* Software Licensing Description Table */
191 #define ACPI_SIG_SPCR           "SPCR"      /* Serial Port Console Redirection table */
192 #define ACPI_SIG_SPMI           "SPMI"      /* Server Platform Management Interface table */
193 #define ACPI_SIG_TCPA           "TCPA"      /* Trusted Computing Platform Alliance table */
194 #define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
195 #define ACPI_SIG_UEFI           "UEFI"      /* Uefi Boot Optimization Table */
196 #define ACPI_SIG_VRTC           "VRTC"      /* Virtual Real Time Clock Table */
197 #define ACPI_SIG_WAET           "WAET"      /* Windows ACPI Emulated devices Table */
198 #define ACPI_SIG_WDAT           "WDAT"      /* Watchdog Action Table */
199 #define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
200 #define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
201 #define ACPI_SIG_WSMT           "WSMT"      /* Windows SMM Security Migrations Table */
202 #define ACPI_SIG_XXXX           "XXXX"      /* Intermediate AML header for ASL/ASL+ converter */
203 
204 #ifdef ACPI_UNDEFINED_TABLES
205 /*
206  * These tables have been seen in the field, but no definition has been found
207  */
208 #define ACPI_SIG_ATKG           "ATKG"
209 #define ACPI_SIG_GSCI           "GSCI"      /* GMCH SCI table */
210 #define ACPI_SIG_IEIT           "IEIT"
211 #endif
212 
213 /*
214  * All tables must be byte-packed to match the ACPI specification, since
215  * the tables are provided by the system BIOS.
216  */
217 #pragma pack(1)
218 
219 /*
220  * Note: C bitfields are not used for this reason:
221  *
222  * "Bitfields are great and easy to read, but unfortunately the C language
223  * does not specify the layout of bitfields in memory, which means they are
224  * essentially useless for dealing with packed data in on-disk formats or
225  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
226  * this decision was a design error in C. Ritchie could have picked an order
227  * and stuck with it." Norman Ramsey.
228  * See http://stackoverflow.com/a/1053662/41661
229  */
230 
231 
232 /*******************************************************************************
233  *
234  * ASF - Alert Standard Format table (Signature "ASF!")
235  *       Revision 0x10
236  *
237  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
238  *
239  ******************************************************************************/
240 
241 typedef struct acpi_table_asf
242 {
243     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
244 
245 } ACPI_TABLE_ASF;
246 
247 
248 /* ASF subtable header */
249 
250 typedef struct acpi_asf_header
251 {
252     UINT8                   Type;
253     UINT8                   Reserved;
254     UINT16                  Length;
255 
256 } ACPI_ASF_HEADER;
257 
258 
259 /* Values for Type field above */
260 
261 enum AcpiAsfType
262 {
263     ACPI_ASF_TYPE_INFO          = 0,
264     ACPI_ASF_TYPE_ALERT         = 1,
265     ACPI_ASF_TYPE_CONTROL       = 2,
266     ACPI_ASF_TYPE_BOOT          = 3,
267     ACPI_ASF_TYPE_ADDRESS       = 4,
268     ACPI_ASF_TYPE_RESERVED      = 5
269 };
270 
271 /*
272  * ASF subtables
273  */
274 
275 /* 0: ASF Information */
276 
277 typedef struct acpi_asf_info
278 {
279     ACPI_ASF_HEADER         Header;
280     UINT8                   MinResetValue;
281     UINT8                   MinPollInterval;
282     UINT16                  SystemId;
283     UINT32                  MfgId;
284     UINT8                   Flags;
285     UINT8                   Reserved2[3];
286 
287 } ACPI_ASF_INFO;
288 
289 /* Masks for Flags field above */
290 
291 #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
292 
293 
294 /* 1: ASF Alerts */
295 
296 typedef struct acpi_asf_alert
297 {
298     ACPI_ASF_HEADER         Header;
299     UINT8                   AssertMask;
300     UINT8                   DeassertMask;
301     UINT8                   Alerts;
302     UINT8                   DataLength;
303 
304 } ACPI_ASF_ALERT;
305 
306 typedef struct acpi_asf_alert_data
307 {
308     UINT8                   Address;
309     UINT8                   Command;
310     UINT8                   Mask;
311     UINT8                   Value;
312     UINT8                   SensorType;
313     UINT8                   Type;
314     UINT8                   Offset;
315     UINT8                   SourceType;
316     UINT8                   Severity;
317     UINT8                   SensorNumber;
318     UINT8                   Entity;
319     UINT8                   Instance;
320 
321 } ACPI_ASF_ALERT_DATA;
322 
323 
324 /* 2: ASF Remote Control */
325 
326 typedef struct acpi_asf_remote
327 {
328     ACPI_ASF_HEADER         Header;
329     UINT8                   Controls;
330     UINT8                   DataLength;
331     UINT16                  Reserved2;
332 
333 } ACPI_ASF_REMOTE;
334 
335 typedef struct acpi_asf_control_data
336 {
337     UINT8                   Function;
338     UINT8                   Address;
339     UINT8                   Command;
340     UINT8                   Value;
341 
342 } ACPI_ASF_CONTROL_DATA;
343 
344 
345 /* 3: ASF RMCP Boot Options */
346 
347 typedef struct acpi_asf_rmcp
348 {
349     ACPI_ASF_HEADER         Header;
350     UINT8                   Capabilities[7];
351     UINT8                   CompletionCode;
352     UINT32                  EnterpriseId;
353     UINT8                   Command;
354     UINT16                  Parameter;
355     UINT16                  BootOptions;
356     UINT16                  OemParameters;
357 
358 } ACPI_ASF_RMCP;
359 
360 
361 /* 4: ASF Address */
362 
363 typedef struct acpi_asf_address
364 {
365     ACPI_ASF_HEADER         Header;
366     UINT8                   EpromAddress;
367     UINT8                   Devices;
368 
369 } ACPI_ASF_ADDRESS;
370 
371 
372 /*******************************************************************************
373  *
374  * BOOT - Simple Boot Flag Table
375  *        Version 1
376  *
377  * Conforms to the "Simple Boot Flag Specification", Version 2.1
378  *
379  ******************************************************************************/
380 
381 typedef struct acpi_table_boot
382 {
383     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
384     UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
385     UINT8                   Reserved[3];
386 
387 } ACPI_TABLE_BOOT;
388 
389 
390 /*******************************************************************************
391  *
392  * CSRT - Core System Resource Table
393  *        Version 0
394  *
395  * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
396  *
397  ******************************************************************************/
398 
399 typedef struct acpi_table_csrt
400 {
401     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
402 
403 } ACPI_TABLE_CSRT;
404 
405 
406 /* Resource Group subtable */
407 
408 typedef struct acpi_csrt_group
409 {
410     UINT32                  Length;
411     UINT32                  VendorId;
412     UINT32                  SubvendorId;
413     UINT16                  DeviceId;
414     UINT16                  SubdeviceId;
415     UINT16                  Revision;
416     UINT16                  Reserved;
417     UINT32                  SharedInfoLength;
418 
419     /* Shared data immediately follows (Length = SharedInfoLength) */
420 
421 } ACPI_CSRT_GROUP;
422 
423 /* Shared Info subtable */
424 
425 typedef struct acpi_csrt_shared_info
426 {
427     UINT16                  MajorVersion;
428     UINT16                  MinorVersion;
429     UINT32                  MmioBaseLow;
430     UINT32                  MmioBaseHigh;
431     UINT32                  GsiInterrupt;
432     UINT8                   InterruptPolarity;
433     UINT8                   InterruptMode;
434     UINT8                   NumChannels;
435     UINT8                   DmaAddressWidth;
436     UINT16                  BaseRequestLine;
437     UINT16                  NumHandshakeSignals;
438     UINT32                  MaxBlockSize;
439 
440     /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */
441 
442 } ACPI_CSRT_SHARED_INFO;
443 
444 /* Resource Descriptor subtable */
445 
446 typedef struct acpi_csrt_descriptor
447 {
448     UINT32                  Length;
449     UINT16                  Type;
450     UINT16                  Subtype;
451     UINT32                  Uid;
452 
453     /* Resource-specific information immediately follows */
454 
455 } ACPI_CSRT_DESCRIPTOR;
456 
457 
458 /* Resource Types */
459 
460 #define ACPI_CSRT_TYPE_INTERRUPT    0x0001
461 #define ACPI_CSRT_TYPE_TIMER        0x0002
462 #define ACPI_CSRT_TYPE_DMA          0x0003
463 
464 /* Resource Subtypes */
465 
466 #define ACPI_CSRT_XRUPT_LINE        0x0000
467 #define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
468 #define ACPI_CSRT_TIMER             0x0000
469 #define ACPI_CSRT_DMA_CHANNEL       0x0000
470 #define ACPI_CSRT_DMA_CONTROLLER    0x0001
471 
472 
473 /*******************************************************************************
474  *
475  * DBG2 - Debug Port Table 2
476  *        Version 0 (Both main table and subtables)
477  *
478  * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015
479  *
480  ******************************************************************************/
481 
482 typedef struct acpi_table_dbg2
483 {
484     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
485     UINT32                  InfoOffset;
486     UINT32                  InfoCount;
487 
488 } ACPI_TABLE_DBG2;
489 
490 
491 typedef struct acpi_dbg2_header
492 {
493     UINT32                  InfoOffset;
494     UINT32                  InfoCount;
495 
496 } ACPI_DBG2_HEADER;
497 
498 
499 /* Debug Device Information Subtable */
500 
501 typedef struct acpi_dbg2_device
502 {
503     UINT8                   Revision;
504     UINT16                  Length;
505     UINT8                   RegisterCount;      /* Number of BaseAddress registers */
506     UINT16                  NamepathLength;
507     UINT16                  NamepathOffset;
508     UINT16                  OemDataLength;
509     UINT16                  OemDataOffset;
510     UINT16                  PortType;
511     UINT16                  PortSubtype;
512     UINT16                  Reserved;
513     UINT16                  BaseAddressOffset;
514     UINT16                  AddressSizeOffset;
515     /*
516      * Data that follows:
517      *    BaseAddress (required) - Each in 12-byte Generic Address Structure format.
518      *    AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register.
519      *    Namepath    (required) - Null terminated string. Single dot if not supported.
520      *    OemData     (optional) - Length is OemDataLength.
521      */
522 } ACPI_DBG2_DEVICE;
523 
524 /* Types for PortType field above */
525 
526 #define ACPI_DBG2_SERIAL_PORT       0x8000
527 #define ACPI_DBG2_1394_PORT         0x8001
528 #define ACPI_DBG2_USB_PORT          0x8002
529 #define ACPI_DBG2_NET_PORT          0x8003
530 
531 /* Subtypes for PortSubtype field above */
532 
533 #define ACPI_DBG2_16550_COMPATIBLE  0x0000
534 #define ACPI_DBG2_16550_SUBSET      0x0001
535 #define ACPI_DBG2_ARM_PL011         0x0003
536 #define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
537 #define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
538 #define ACPI_DBG2_ARM_DCC           0x000F
539 #define ACPI_DBG2_BCM2835           0x0010
540 
541 #define ACPI_DBG2_1394_STANDARD     0x0000
542 
543 #define ACPI_DBG2_USB_XHCI          0x0000
544 #define ACPI_DBG2_USB_EHCI          0x0001
545 
546 
547 /*******************************************************************************
548  *
549  * DBGP - Debug Port table
550  *        Version 1
551  *
552  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
553  *
554  ******************************************************************************/
555 
556 typedef struct acpi_table_dbgp
557 {
558     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
559     UINT8                   Type;               /* 0=full 16550, 1=subset of 16550 */
560     UINT8                   Reserved[3];
561     ACPI_GENERIC_ADDRESS    DebugPort;
562 
563 } ACPI_TABLE_DBGP;
564 
565 
566 /*******************************************************************************
567  *
568  * DMAR - DMA Remapping table
569  *        Version 1
570  *
571  * Conforms to "Intel Virtualization Technology for Directed I/O",
572  * Version 2.3, October 2014
573  *
574  ******************************************************************************/
575 
576 typedef struct acpi_table_dmar
577 {
578     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
579     UINT8                   Width;              /* Host Address Width */
580     UINT8                   Flags;
581     UINT8                   Reserved[10];
582 
583 } ACPI_TABLE_DMAR;
584 
585 /* Masks for Flags field above */
586 
587 #define ACPI_DMAR_INTR_REMAP        (1)
588 #define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
589 #define ACPI_DMAR_X2APIC_MODE       (1<<2)
590 
591 
592 /* DMAR subtable header */
593 
594 typedef struct acpi_dmar_header
595 {
596     UINT16                  Type;
597     UINT16                  Length;
598 
599 } ACPI_DMAR_HEADER;
600 
601 /* Values for subtable type in ACPI_DMAR_HEADER */
602 
603 enum AcpiDmarType
604 {
605     ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
606     ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
607     ACPI_DMAR_TYPE_ROOT_ATS             = 2,
608     ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
609     ACPI_DMAR_TYPE_NAMESPACE            = 4,
610     ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
611 };
612 
613 
614 /* DMAR Device Scope structure */
615 
616 typedef struct acpi_dmar_device_scope
617 {
618     UINT8                   EntryType;
619     UINT8                   Length;
620     UINT16                  Reserved;
621     UINT8                   EnumerationId;
622     UINT8                   Bus;
623 
624 } ACPI_DMAR_DEVICE_SCOPE;
625 
626 /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
627 
628 enum AcpiDmarScopeType
629 {
630     ACPI_DMAR_SCOPE_TYPE_NOT_USED       = 0,
631     ACPI_DMAR_SCOPE_TYPE_ENDPOINT       = 1,
632     ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
633     ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
634     ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
635     ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
636     ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
637 };
638 
639 typedef struct acpi_dmar_pci_path
640 {
641     UINT8                   Device;
642     UINT8                   Function;
643 
644 } ACPI_DMAR_PCI_PATH;
645 
646 
647 /*
648  * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER
649  */
650 
651 /* 0: Hardware Unit Definition */
652 
653 typedef struct acpi_dmar_hardware_unit
654 {
655     ACPI_DMAR_HEADER        Header;
656     UINT8                   Flags;
657     UINT8                   Reserved;
658     UINT16                  Segment;
659     UINT64                  Address;            /* Register Base Address */
660 
661 } ACPI_DMAR_HARDWARE_UNIT;
662 
663 /* Masks for Flags field above */
664 
665 #define ACPI_DMAR_INCLUDE_ALL       (1)
666 
667 
668 /* 1: Reserved Memory Defininition */
669 
670 typedef struct acpi_dmar_reserved_memory
671 {
672     ACPI_DMAR_HEADER        Header;
673     UINT16                  Reserved;
674     UINT16                  Segment;
675     UINT64                  BaseAddress;        /* 4K aligned base address */
676     UINT64                  EndAddress;         /* 4K aligned limit address */
677 
678 } ACPI_DMAR_RESERVED_MEMORY;
679 
680 /* Masks for Flags field above */
681 
682 #define ACPI_DMAR_ALLOW_ALL         (1)
683 
684 
685 /* 2: Root Port ATS Capability Reporting Structure */
686 
687 typedef struct acpi_dmar_atsr
688 {
689     ACPI_DMAR_HEADER        Header;
690     UINT8                   Flags;
691     UINT8                   Reserved;
692     UINT16                  Segment;
693 
694 } ACPI_DMAR_ATSR;
695 
696 /* Masks for Flags field above */
697 
698 #define ACPI_DMAR_ALL_PORTS         (1)
699 
700 
701 /* 3: Remapping Hardware Static Affinity Structure */
702 
703 typedef struct acpi_dmar_rhsa
704 {
705     ACPI_DMAR_HEADER        Header;
706     UINT32                  Reserved;
707     UINT64                  BaseAddress;
708     UINT32                  ProximityDomain;
709 
710 } ACPI_DMAR_RHSA;
711 
712 
713 /* 4: ACPI Namespace Device Declaration Structure */
714 
715 typedef struct acpi_dmar_andd
716 {
717     ACPI_DMAR_HEADER        Header;
718     UINT8                   Reserved[3];
719     UINT8                   DeviceNumber;
720     char                    DeviceName[1];
721 
722 } ACPI_DMAR_ANDD;
723 
724 
725 /*******************************************************************************
726  *
727  * HPET - High Precision Event Timer table
728  *        Version 1
729  *
730  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
731  * Version 1.0a, October 2004
732  *
733  ******************************************************************************/
734 
735 typedef struct acpi_table_hpet
736 {
737     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
738     UINT32                  Id;                 /* Hardware ID of event timer block */
739     ACPI_GENERIC_ADDRESS    Address;            /* Address of event timer block */
740     UINT8                   Sequence;           /* HPET sequence number */
741     UINT16                  MinimumTick;        /* Main counter min tick, periodic mode */
742     UINT8                   Flags;
743 
744 } ACPI_TABLE_HPET;
745 
746 /* Masks for Flags field above */
747 
748 #define ACPI_HPET_PAGE_PROTECT_MASK (3)
749 
750 /* Values for Page Protect flags */
751 
752 enum AcpiHpetPageProtect
753 {
754     ACPI_HPET_NO_PAGE_PROTECT       = 0,
755     ACPI_HPET_PAGE_PROTECT4         = 1,
756     ACPI_HPET_PAGE_PROTECT64        = 2
757 };
758 
759 
760 /*******************************************************************************
761  *
762  * IBFT - Boot Firmware Table
763  *        Version 1
764  *
765  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
766  * Specification", Version 1.01, March 1, 2007
767  *
768  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
769  * Therefore, it is not currently supported by the disassembler.
770  *
771  ******************************************************************************/
772 
773 typedef struct acpi_table_ibft
774 {
775     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
776     UINT8                   Reserved[12];
777 
778 } ACPI_TABLE_IBFT;
779 
780 
781 /* IBFT common subtable header */
782 
783 typedef struct acpi_ibft_header
784 {
785     UINT8                   Type;
786     UINT8                   Version;
787     UINT16                  Length;
788     UINT8                   Index;
789     UINT8                   Flags;
790 
791 } ACPI_IBFT_HEADER;
792 
793 /* Values for Type field above */
794 
795 enum AcpiIbftType
796 {
797     ACPI_IBFT_TYPE_NOT_USED         = 0,
798     ACPI_IBFT_TYPE_CONTROL          = 1,
799     ACPI_IBFT_TYPE_INITIATOR        = 2,
800     ACPI_IBFT_TYPE_NIC              = 3,
801     ACPI_IBFT_TYPE_TARGET           = 4,
802     ACPI_IBFT_TYPE_EXTENSIONS       = 5,
803     ACPI_IBFT_TYPE_RESERVED         = 6     /* 6 and greater are reserved */
804 };
805 
806 
807 /* IBFT subtables */
808 
809 typedef struct acpi_ibft_control
810 {
811     ACPI_IBFT_HEADER        Header;
812     UINT16                  Extensions;
813     UINT16                  InitiatorOffset;
814     UINT16                  Nic0Offset;
815     UINT16                  Target0Offset;
816     UINT16                  Nic1Offset;
817     UINT16                  Target1Offset;
818 
819 } ACPI_IBFT_CONTROL;
820 
821 typedef struct acpi_ibft_initiator
822 {
823     ACPI_IBFT_HEADER        Header;
824     UINT8                   SnsServer[16];
825     UINT8                   SlpServer[16];
826     UINT8                   PrimaryServer[16];
827     UINT8                   SecondaryServer[16];
828     UINT16                  NameLength;
829     UINT16                  NameOffset;
830 
831 } ACPI_IBFT_INITIATOR;
832 
833 typedef struct acpi_ibft_nic
834 {
835     ACPI_IBFT_HEADER        Header;
836     UINT8                   IpAddress[16];
837     UINT8                   SubnetMaskPrefix;
838     UINT8                   Origin;
839     UINT8                   Gateway[16];
840     UINT8                   PrimaryDns[16];
841     UINT8                   SecondaryDns[16];
842     UINT8                   Dhcp[16];
843     UINT16                  Vlan;
844     UINT8                   MacAddress[6];
845     UINT16                  PciAddress;
846     UINT16                  NameLength;
847     UINT16                  NameOffset;
848 
849 } ACPI_IBFT_NIC;
850 
851 typedef struct acpi_ibft_target
852 {
853     ACPI_IBFT_HEADER        Header;
854     UINT8                   TargetIpAddress[16];
855     UINT16                  TargetIpSocket;
856     UINT8                   TargetBootLun[8];
857     UINT8                   ChapType;
858     UINT8                   NicAssociation;
859     UINT16                  TargetNameLength;
860     UINT16                  TargetNameOffset;
861     UINT16                  ChapNameLength;
862     UINT16                  ChapNameOffset;
863     UINT16                  ChapSecretLength;
864     UINT16                  ChapSecretOffset;
865     UINT16                  ReverseChapNameLength;
866     UINT16                  ReverseChapNameOffset;
867     UINT16                  ReverseChapSecretLength;
868     UINT16                  ReverseChapSecretOffset;
869 
870 } ACPI_IBFT_TARGET;
871 
872 
873 /*******************************************************************************
874  *
875  * IORT - IO Remapping Table
876  *
877  * Conforms to "IO Remapping Table System Software on ARM Platforms",
878  * Document number: ARM DEN 0049C, May 2017
879  *
880  ******************************************************************************/
881 
882 typedef struct acpi_table_iort
883 {
884     ACPI_TABLE_HEADER       Header;
885     UINT32                  NodeCount;
886     UINT32                  NodeOffset;
887     UINT32                  Reserved;
888 
889 } ACPI_TABLE_IORT;
890 
891 
892 /*
893  * IORT subtables
894  */
895 typedef struct acpi_iort_node
896 {
897     UINT8                   Type;
898     UINT16                  Length;
899     UINT8                   Revision;
900     UINT32                  Reserved;
901     UINT32                  MappingCount;
902     UINT32                  MappingOffset;
903     char                    NodeData[1];
904 
905 } ACPI_IORT_NODE;
906 
907 /* Values for subtable Type above */
908 
909 enum AcpiIortNodeType
910 {
911     ACPI_IORT_NODE_ITS_GROUP            = 0x00,
912     ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
913     ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
914     ACPI_IORT_NODE_SMMU                 = 0x03,
915     ACPI_IORT_NODE_SMMU_V3              = 0x04
916 };
917 
918 
919 typedef struct acpi_iort_id_mapping
920 {
921     UINT32                  InputBase;          /* Lowest value in input range */
922     UINT32                  IdCount;            /* Number of IDs */
923     UINT32                  OutputBase;         /* Lowest value in output range */
924     UINT32                  OutputReference;    /* A reference to the output node */
925     UINT32                  Flags;
926 
927 } ACPI_IORT_ID_MAPPING;
928 
929 /* Masks for Flags field above for IORT subtable */
930 
931 #define ACPI_IORT_ID_SINGLE_MAPPING (1)
932 
933 
934 typedef struct acpi_iort_memory_access
935 {
936     UINT32                  CacheCoherency;
937     UINT8                   Hints;
938     UINT16                  Reserved;
939     UINT8                   MemoryFlags;
940 
941 } ACPI_IORT_MEMORY_ACCESS;
942 
943 /* Values for CacheCoherency field above */
944 
945 #define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
946 #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
947 
948 /* Masks for Hints field above */
949 
950 #define ACPI_IORT_HT_TRANSIENT          (1)
951 #define ACPI_IORT_HT_WRITE              (1<<1)
952 #define ACPI_IORT_HT_READ               (1<<2)
953 #define ACPI_IORT_HT_OVERRIDE           (1<<3)
954 
955 /* Masks for MemoryFlags field above */
956 
957 #define ACPI_IORT_MF_COHERENCY          (1)
958 #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
959 
960 
961 /*
962  * IORT node specific subtables
963  */
964 typedef struct acpi_iort_its_group
965 {
966     UINT32                  ItsCount;
967     UINT32                  Identifiers[1];         /* GIC ITS identifier arrary */
968 
969 } ACPI_IORT_ITS_GROUP;
970 
971 
972 typedef struct acpi_iort_named_component
973 {
974     UINT32                  NodeFlags;
975     UINT64                  MemoryProperties;       /* Memory access properties */
976     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
977     char                    DeviceName[1];          /* Path of namespace object */
978 
979 } ACPI_IORT_NAMED_COMPONENT;
980 
981 
982 typedef struct acpi_iort_root_complex
983 {
984     UINT64                  MemoryProperties;       /* Memory access properties */
985     UINT32                  AtsAttribute;
986     UINT32                  PciSegmentNumber;
987 
988 } ACPI_IORT_ROOT_COMPLEX;
989 
990 /* Values for AtsAttribute field above */
991 
992 #define ACPI_IORT_ATS_SUPPORTED         0x00000001  /* The root complex supports ATS */
993 #define ACPI_IORT_ATS_UNSUPPORTED       0x00000000  /* The root complex doesn't support ATS */
994 
995 
996 typedef struct acpi_iort_smmu
997 {
998     UINT64                  BaseAddress;            /* SMMU base address */
999     UINT64                  Span;                   /* Length of memory range */
1000     UINT32                  Model;
1001     UINT32                  Flags;
1002     UINT32                  GlobalInterruptOffset;
1003     UINT32                  ContextInterruptCount;
1004     UINT32                  ContextInterruptOffset;
1005     UINT32                  PmuInterruptCount;
1006     UINT32                  PmuInterruptOffset;
1007     UINT64                  Interrupts[1];          /* Interrupt array */
1008 
1009 } ACPI_IORT_SMMU;
1010 
1011 /* Values for Model field above */
1012 
1013 #define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
1014 #define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
1015 #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
1016 #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
1017 #define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004  /* ARM Corelink MMU-401 */
1018 #define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005  /* Cavium ThunderX SMMUv2 */
1019 
1020 /* Masks for Flags field above */
1021 
1022 #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
1023 #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
1024 
1025 /* Global interrupt format */
1026 
1027 typedef struct acpi_iort_smmu_gsi
1028 {
1029     UINT32                  NSgIrpt;
1030     UINT32                  NSgIrptFlags;
1031     UINT32                  NSgCfgIrpt;
1032     UINT32                  NSgCfgIrptFlags;
1033 
1034 } ACPI_IORT_SMMU_GSI;
1035 
1036 
1037 typedef struct acpi_iort_smmu_v3
1038 {
1039     UINT64                  BaseAddress;            /* SMMUv3 base address */
1040     UINT32                  Flags;
1041     UINT32                  Reserved;
1042     UINT64                  VatosAddress;
1043     UINT32                  Model;
1044     UINT32                  EventGsiv;
1045     UINT32                  PriGsiv;
1046     UINT32                  GerrGsiv;
1047     UINT32                  SyncGsiv;
1048     UINT8                   Pxm;
1049     UINT8                   Reserved1;
1050     UINT16                  Reserved2;
1051     UINT32                  IdMappingIndex;
1052 
1053 } ACPI_IORT_SMMU_V3;
1054 
1055 /* Values for Model field above */
1056 
1057 #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000  /* Generic SMMUv3 */
1058 #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001  /* HiSilicon Hi161x SMMUv3 */
1059 #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002  /* Cavium CN99xx SMMUv3 */
1060 
1061 /* Masks for Flags field above */
1062 
1063 #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
1064 #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
1065 #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
1066 
1067 
1068 /*******************************************************************************
1069  *
1070  * IVRS - I/O Virtualization Reporting Structure
1071  *        Version 1
1072  *
1073  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
1074  * Revision 1.26, February 2009.
1075  *
1076  ******************************************************************************/
1077 
1078 typedef struct acpi_table_ivrs
1079 {
1080     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1081     UINT32                  Info;               /* Common virtualization info */
1082     UINT64                  Reserved;
1083 
1084 } ACPI_TABLE_IVRS;
1085 
1086 /* Values for Info field above */
1087 
1088 #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
1089 #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
1090 #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
1091 
1092 
1093 /* IVRS subtable header */
1094 
1095 typedef struct acpi_ivrs_header
1096 {
1097     UINT8                   Type;               /* Subtable type */
1098     UINT8                   Flags;
1099     UINT16                  Length;             /* Subtable length */
1100     UINT16                  DeviceId;           /* ID of IOMMU */
1101 
1102 } ACPI_IVRS_HEADER;
1103 
1104 /* Values for subtable Type above */
1105 
1106 enum AcpiIvrsType
1107 {
1108     ACPI_IVRS_TYPE_HARDWARE         = 0x10,
1109     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
1110     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
1111     ACPI_IVRS_TYPE_MEMORY3          = 0x22
1112 };
1113 
1114 /* Masks for Flags field above for IVHD subtable */
1115 
1116 #define ACPI_IVHD_TT_ENABLE         (1)
1117 #define ACPI_IVHD_PASS_PW           (1<<1)
1118 #define ACPI_IVHD_RES_PASS_PW       (1<<2)
1119 #define ACPI_IVHD_ISOC              (1<<3)
1120 #define ACPI_IVHD_IOTLB             (1<<4)
1121 
1122 /* Masks for Flags field above for IVMD subtable */
1123 
1124 #define ACPI_IVMD_UNITY             (1)
1125 #define ACPI_IVMD_READ              (1<<1)
1126 #define ACPI_IVMD_WRITE             (1<<2)
1127 #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
1128 
1129 
1130 /*
1131  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
1132  */
1133 
1134 /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
1135 
1136 typedef struct acpi_ivrs_hardware
1137 {
1138     ACPI_IVRS_HEADER        Header;
1139     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
1140     UINT64                  BaseAddress;        /* IOMMU control registers */
1141     UINT16                  PciSegmentGroup;
1142     UINT16                  Info;               /* MSI number and unit ID */
1143     UINT32                  Reserved;
1144 
1145 } ACPI_IVRS_HARDWARE;
1146 
1147 /* Masks for Info field above */
1148 
1149 #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
1150 #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
1151 
1152 
1153 /*
1154  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
1155  * Upper two bits of the Type field are the (encoded) length of the structure.
1156  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
1157  * are reserved for future use but not defined.
1158  */
1159 typedef struct acpi_ivrs_de_header
1160 {
1161     UINT8                   Type;
1162     UINT16                  Id;
1163     UINT8                   DataSetting;
1164 
1165 } ACPI_IVRS_DE_HEADER;
1166 
1167 /* Length of device entry is in the top two bits of Type field above */
1168 
1169 #define ACPI_IVHD_ENTRY_LENGTH      0xC0
1170 
1171 /* Values for device entry Type field above */
1172 
1173 enum AcpiIvrsDeviceEntryType
1174 {
1175     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
1176 
1177     ACPI_IVRS_TYPE_PAD4             = 0,
1178     ACPI_IVRS_TYPE_ALL              = 1,
1179     ACPI_IVRS_TYPE_SELECT           = 2,
1180     ACPI_IVRS_TYPE_START            = 3,
1181     ACPI_IVRS_TYPE_END              = 4,
1182 
1183     /* 8-byte device entries */
1184 
1185     ACPI_IVRS_TYPE_PAD8             = 64,
1186     ACPI_IVRS_TYPE_NOT_USED         = 65,
1187     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
1188     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
1189     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
1190     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
1191     ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
1192 };
1193 
1194 /* Values for Data field above */
1195 
1196 #define ACPI_IVHD_INIT_PASS         (1)
1197 #define ACPI_IVHD_EINT_PASS         (1<<1)
1198 #define ACPI_IVHD_NMI_PASS          (1<<2)
1199 #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
1200 #define ACPI_IVHD_LINT0_PASS        (1<<6)
1201 #define ACPI_IVHD_LINT1_PASS        (1<<7)
1202 
1203 
1204 /* Types 0-4: 4-byte device entry */
1205 
1206 typedef struct acpi_ivrs_device4
1207 {
1208     ACPI_IVRS_DE_HEADER     Header;
1209 
1210 } ACPI_IVRS_DEVICE4;
1211 
1212 /* Types 66-67: 8-byte device entry */
1213 
1214 typedef struct acpi_ivrs_device8a
1215 {
1216     ACPI_IVRS_DE_HEADER     Header;
1217     UINT8                   Reserved1;
1218     UINT16                  UsedId;
1219     UINT8                   Reserved2;
1220 
1221 } ACPI_IVRS_DEVICE8A;
1222 
1223 /* Types 70-71: 8-byte device entry */
1224 
1225 typedef struct acpi_ivrs_device8b
1226 {
1227     ACPI_IVRS_DE_HEADER     Header;
1228     UINT32                  ExtendedData;
1229 
1230 } ACPI_IVRS_DEVICE8B;
1231 
1232 /* Values for ExtendedData above */
1233 
1234 #define ACPI_IVHD_ATS_DISABLED      (1<<31)
1235 
1236 /* Type 72: 8-byte device entry */
1237 
1238 typedef struct acpi_ivrs_device8c
1239 {
1240     ACPI_IVRS_DE_HEADER     Header;
1241     UINT8                   Handle;
1242     UINT16                  UsedId;
1243     UINT8                   Variety;
1244 
1245 } ACPI_IVRS_DEVICE8C;
1246 
1247 /* Values for Variety field above */
1248 
1249 #define ACPI_IVHD_IOAPIC            1
1250 #define ACPI_IVHD_HPET              2
1251 
1252 
1253 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
1254 
1255 typedef struct acpi_ivrs_memory
1256 {
1257     ACPI_IVRS_HEADER        Header;
1258     UINT16                  AuxData;
1259     UINT64                  Reserved;
1260     UINT64                  StartAddress;
1261     UINT64                  MemoryLength;
1262 
1263 } ACPI_IVRS_MEMORY;
1264 
1265 
1266 /*******************************************************************************
1267  *
1268  * LPIT - Low Power Idle Table
1269  *
1270  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1271  *
1272  ******************************************************************************/
1273 
1274 typedef struct acpi_table_lpit
1275 {
1276     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1277 
1278 } ACPI_TABLE_LPIT;
1279 
1280 
1281 /* LPIT subtable header */
1282 
1283 typedef struct acpi_lpit_header
1284 {
1285     UINT32                  Type;               /* Subtable type */
1286     UINT32                  Length;             /* Subtable length */
1287     UINT16                  UniqueId;
1288     UINT16                  Reserved;
1289     UINT32                  Flags;
1290 
1291 } ACPI_LPIT_HEADER;
1292 
1293 /* Values for subtable Type above */
1294 
1295 enum AcpiLpitType
1296 {
1297     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
1298     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
1299 };
1300 
1301 /* Masks for Flags field above  */
1302 
1303 #define ACPI_LPIT_STATE_DISABLED    (1)
1304 #define ACPI_LPIT_NO_COUNTER        (1<<1)
1305 
1306 /*
1307  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
1308  */
1309 
1310 /* 0x00: Native C-state instruction based LPI structure */
1311 
1312 typedef struct acpi_lpit_native
1313 {
1314     ACPI_LPIT_HEADER        Header;
1315     ACPI_GENERIC_ADDRESS    EntryTrigger;
1316     UINT32                  Residency;
1317     UINT32                  Latency;
1318     ACPI_GENERIC_ADDRESS    ResidencyCounter;
1319     UINT64                  CounterFrequency;
1320 
1321 } ACPI_LPIT_NATIVE;
1322 
1323 
1324 /*******************************************************************************
1325  *
1326  * MCFG - PCI Memory Mapped Configuration table and subtable
1327  *        Version 1
1328  *
1329  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1330  *
1331  ******************************************************************************/
1332 
1333 typedef struct acpi_table_mcfg
1334 {
1335     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1336     UINT8                   Reserved[8];
1337 
1338 } ACPI_TABLE_MCFG;
1339 
1340 
1341 /* Subtable */
1342 
1343 typedef struct acpi_mcfg_allocation
1344 {
1345     UINT64                  Address;            /* Base address, processor-relative */
1346     UINT16                  PciSegment;         /* PCI segment group number */
1347     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1348     UINT8                   EndBusNumber;       /* Final PCI Bus number */
1349     UINT32                  Reserved;
1350 
1351 } ACPI_MCFG_ALLOCATION;
1352 
1353 
1354 /*******************************************************************************
1355  *
1356  * MCHI - Management Controller Host Interface Table
1357  *        Version 1
1358  *
1359  * Conforms to "Management Component Transport Protocol (MCTP) Host
1360  * Interface Specification", Revision 1.0.0a, October 13, 2009
1361  *
1362  ******************************************************************************/
1363 
1364 typedef struct acpi_table_mchi
1365 {
1366     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1367     UINT8                   InterfaceType;
1368     UINT8                   Protocol;
1369     UINT64                  ProtocolData;
1370     UINT8                   InterruptType;
1371     UINT8                   Gpe;
1372     UINT8                   PciDeviceFlag;
1373     UINT32                  GlobalInterrupt;
1374     ACPI_GENERIC_ADDRESS    ControlRegister;
1375     UINT8                   PciSegment;
1376     UINT8                   PciBus;
1377     UINT8                   PciDevice;
1378     UINT8                   PciFunction;
1379 
1380 } ACPI_TABLE_MCHI;
1381 
1382 
1383 /*******************************************************************************
1384  *
1385  * MSDM - Microsoft Data Management table
1386  *
1387  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1388  * November 29, 2011. Copyright 2011 Microsoft
1389  *
1390  ******************************************************************************/
1391 
1392 /* Basic MSDM table is only the common ACPI header */
1393 
1394 typedef struct acpi_table_msdm
1395 {
1396     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1397 
1398 } ACPI_TABLE_MSDM;
1399 
1400 
1401 /*******************************************************************************
1402  *
1403  * MTMR - MID Timer Table
1404  *        Version 1
1405  *
1406  * Conforms to "Simple Firmware Interface Specification",
1407  * Draft 0.8.2, Oct 19, 2010
1408  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
1409  *
1410  ******************************************************************************/
1411 
1412 typedef struct acpi_table_mtmr
1413 {
1414     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1415 
1416 } ACPI_TABLE_MTMR;
1417 
1418 /* MTMR entry */
1419 
1420 typedef struct acpi_mtmr_entry
1421 {
1422     ACPI_GENERIC_ADDRESS    PhysicalAddress;
1423     UINT32                  Frequency;
1424     UINT32                  Irq;
1425 
1426 } ACPI_MTMR_ENTRY;
1427 
1428 /*******************************************************************************
1429  *
1430  * SDEI - Software Delegated Exception Interface Descriptor Table
1431  *
1432  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
1433  * May 8th, 2017. Copyright 2017 ARM Ltd.
1434  *
1435  ******************************************************************************/
1436 
1437 typedef struct acpi_table_sdei
1438 {
1439     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1440 
1441 } ACPI_TABLE_SDEI;
1442 
1443 
1444 /*******************************************************************************
1445  *
1446  * SLIC - Software Licensing Description Table
1447  *
1448  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1449  * November 29, 2011. Copyright 2011 Microsoft
1450  *
1451  ******************************************************************************/
1452 
1453 /* Basic SLIC table is only the common ACPI header */
1454 
1455 typedef struct acpi_table_slic
1456 {
1457     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1458 
1459 } ACPI_TABLE_SLIC;
1460 
1461 
1462 /*******************************************************************************
1463  *
1464  * SPCR - Serial Port Console Redirection table
1465  *        Version 2
1466  *
1467  * Conforms to "Serial Port Console Redirection Table",
1468  * Version 1.03, August 10, 2015
1469  *
1470  ******************************************************************************/
1471 
1472 typedef struct acpi_table_spcr
1473 {
1474     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1475     UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
1476     UINT8                   Reserved[3];
1477     ACPI_GENERIC_ADDRESS    SerialPort;
1478     UINT8                   InterruptType;
1479     UINT8                   PcInterrupt;
1480     UINT32                  Interrupt;
1481     UINT8                   BaudRate;
1482     UINT8                   Parity;
1483     UINT8                   StopBits;
1484     UINT8                   FlowControl;
1485     UINT8                   TerminalType;
1486     UINT8                   Reserved1;
1487     UINT16                  PciDeviceId;
1488     UINT16                  PciVendorId;
1489     UINT8                   PciBus;
1490     UINT8                   PciDevice;
1491     UINT8                   PciFunction;
1492     UINT32                  PciFlags;
1493     UINT8                   PciSegment;
1494     UINT32                  Reserved2;
1495 
1496 } ACPI_TABLE_SPCR;
1497 
1498 /* Masks for PciFlags field above */
1499 
1500 #define ACPI_SPCR_DO_NOT_DISABLE    (1)
1501 
1502 /* Values for Interface Type: See the definition of the DBG2 table */
1503 
1504 
1505 /*******************************************************************************
1506  *
1507  * SPMI - Server Platform Management Interface table
1508  *        Version 5
1509  *
1510  * Conforms to "Intelligent Platform Management Interface Specification
1511  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
1512  * June 12, 2009 markup.
1513  *
1514  ******************************************************************************/
1515 
1516 typedef struct acpi_table_spmi
1517 {
1518     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1519     UINT8                   InterfaceType;
1520     UINT8                   Reserved;           /* Must be 1 */
1521     UINT16                  SpecRevision;       /* Version of IPMI */
1522     UINT8                   InterruptType;
1523     UINT8                   GpeNumber;          /* GPE assigned */
1524     UINT8                   Reserved1;
1525     UINT8                   PciDeviceFlag;
1526     UINT32                  Interrupt;
1527     ACPI_GENERIC_ADDRESS    IpmiRegister;
1528     UINT8                   PciSegment;
1529     UINT8                   PciBus;
1530     UINT8                   PciDevice;
1531     UINT8                   PciFunction;
1532     UINT8                   Reserved2;
1533 
1534 } ACPI_TABLE_SPMI;
1535 
1536 /* Values for InterfaceType above */
1537 
1538 enum AcpiSpmiInterfaceTypes
1539 {
1540     ACPI_SPMI_NOT_USED              = 0,
1541     ACPI_SPMI_KEYBOARD              = 1,
1542     ACPI_SPMI_SMI                   = 2,
1543     ACPI_SPMI_BLOCK_TRANSFER        = 3,
1544     ACPI_SPMI_SMBUS                 = 4,
1545     ACPI_SPMI_RESERVED              = 5         /* 5 and above are reserved */
1546 };
1547 
1548 
1549 /*******************************************************************************
1550  *
1551  * TCPA - Trusted Computing Platform Alliance table
1552  *        Version 2
1553  *
1554  * TCG Hardware Interface Table for TPM 1.2 Clients and Servers
1555  *
1556  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1557  * Version 1.2, Revision 8
1558  * February 27, 2017
1559  *
1560  * NOTE: There are two versions of the table with the same signature --
1561  * the client version and the server version. The common PlatformClass
1562  * field is used to differentiate the two types of tables.
1563  *
1564  ******************************************************************************/
1565 
1566 typedef struct acpi_table_tcpa_hdr
1567 {
1568     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1569     UINT16                  PlatformClass;
1570 
1571 } ACPI_TABLE_TCPA_HDR;
1572 
1573 /*
1574  * Values for PlatformClass above.
1575  * This is how the client and server subtables are differentiated
1576  */
1577 #define ACPI_TCPA_CLIENT_TABLE          0
1578 #define ACPI_TCPA_SERVER_TABLE          1
1579 
1580 
1581 typedef struct acpi_table_tcpa_client
1582 {
1583     UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
1584     UINT64                  LogAddress;         /* Address of the event log area */
1585 
1586 } ACPI_TABLE_TCPA_CLIENT;
1587 
1588 typedef struct acpi_table_tcpa_server
1589 {
1590     UINT16                  Reserved;
1591     UINT64                  MinimumLogLength;   /* Minimum length for the event log area */
1592     UINT64                  LogAddress;         /* Address of the event log area */
1593     UINT16                  SpecRevision;
1594     UINT8                   DeviceFlags;
1595     UINT8                   InterruptFlags;
1596     UINT8                   GpeNumber;
1597     UINT8                   Reserved2[3];
1598     UINT32                  GlobalInterrupt;
1599     ACPI_GENERIC_ADDRESS    Address;
1600     UINT32                  Reserved3;
1601     ACPI_GENERIC_ADDRESS    ConfigAddress;
1602     UINT8                   Group;
1603     UINT8                   Bus;                /* PCI Bus/Segment/Function numbers */
1604     UINT8                   Device;
1605     UINT8                   Function;
1606 
1607 } ACPI_TABLE_TCPA_SERVER;
1608 
1609 /* Values for DeviceFlags above */
1610 
1611 #define ACPI_TCPA_PCI_DEVICE            (1)
1612 #define ACPI_TCPA_BUS_PNP               (1<<1)
1613 #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
1614 
1615 /* Values for InterruptFlags above */
1616 
1617 #define ACPI_TCPA_INTERRUPT_MODE        (1)
1618 #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
1619 #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
1620 #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
1621 
1622 
1623 /*******************************************************************************
1624  *
1625  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
1626  *        Version 4
1627  *
1628  * TCG Hardware Interface Table for TPM 2.0 Clients and Servers
1629  *
1630  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1631  * Version 1.2, Revision 8
1632  * February 27, 2017
1633  *
1634  ******************************************************************************/
1635 
1636 typedef struct acpi_table_tpm2
1637 {
1638     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1639     UINT16                  PlatformClass;
1640     UINT16                  Reserved;
1641     UINT64                  ControlAddress;
1642     UINT32                  StartMethod;
1643 
1644     /* Platform-specific data follows */
1645 
1646 } ACPI_TABLE_TPM2;
1647 
1648 /* Values for StartMethod above */
1649 
1650 #define ACPI_TPM2_NOT_ALLOWED                       0
1651 #define ACPI_TPM2_RESERVED1                         1
1652 #define ACPI_TPM2_START_METHOD                      2
1653 #define ACPI_TPM2_RESERVED3                         3
1654 #define ACPI_TPM2_RESERVED4                         4
1655 #define ACPI_TPM2_RESERVED5                         5
1656 #define ACPI_TPM2_MEMORY_MAPPED                     6
1657 #define ACPI_TPM2_COMMAND_BUFFER                    7
1658 #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
1659 #define ACPI_TPM2_RESERVED9                         9
1660 #define ACPI_TPM2_RESERVED10                        10
1661 #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11  /* V1.2 Rev 8 */
1662 #define ACPI_TPM2_RESERVED                          12
1663 
1664 
1665 /* Optional trailer appears after any StartMethod subtables */
1666 
1667 typedef struct acpi_tpm2_trailer
1668 {
1669     UINT8                   MethodParameters[12];
1670     UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
1671     UINT64                  LogAddress;         /* Address of the event log area */
1672 
1673 } ACPI_TPM2_TRAILER;
1674 
1675 
1676 /*
1677  * Subtables (StartMethod-specific)
1678  */
1679 
1680 /* 11: Start Method for ARM SMC (V1.2 Rev 8) */
1681 
1682 typedef struct acpi_tpm2_arm_smc
1683 {
1684     UINT32                  GlobalInterrupt;
1685     UINT8                   InterruptFlags;
1686     UINT8                   OperationFlags;
1687     UINT16                  Reserved;
1688     UINT32                  FunctionId;
1689 
1690 } ACPI_TPM2_ARM_SMC;
1691 
1692 /* Values for InterruptFlags above */
1693 
1694 #define ACPI_TPM2_INTERRUPT_SUPPORT     (1)
1695 
1696 /* Values for OperationFlags above */
1697 
1698 #define ACPI_TPM2_IDLE_SUPPORT          (1)
1699 
1700 
1701 /*******************************************************************************
1702  *
1703  * UEFI - UEFI Boot optimization Table
1704  *        Version 1
1705  *
1706  * Conforms to "Unified Extensible Firmware Interface Specification",
1707  * Version 2.3, May 8, 2009
1708  *
1709  ******************************************************************************/
1710 
1711 typedef struct acpi_table_uefi
1712 {
1713     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1714     UINT8                   Identifier[16];     /* UUID identifier */
1715     UINT16                  DataOffset;         /* Offset of remaining data in table */
1716 
1717 } ACPI_TABLE_UEFI;
1718 
1719 
1720 /*******************************************************************************
1721  *
1722  * VRTC - Virtual Real Time Clock Table
1723  *        Version 1
1724  *
1725  * Conforms to "Simple Firmware Interface Specification",
1726  * Draft 0.8.2, Oct 19, 2010
1727  * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
1728  *
1729  ******************************************************************************/
1730 
1731 typedef struct acpi_table_vrtc
1732 {
1733     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1734 
1735 } ACPI_TABLE_VRTC;
1736 
1737 /* VRTC entry */
1738 
1739 typedef struct acpi_vrtc_entry
1740 {
1741     ACPI_GENERIC_ADDRESS    PhysicalAddress;
1742     UINT32                  Irq;
1743 
1744 } ACPI_VRTC_ENTRY;
1745 
1746 
1747 /*******************************************************************************
1748  *
1749  * WAET - Windows ACPI Emulated devices Table
1750  *        Version 1
1751  *
1752  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
1753  *
1754  ******************************************************************************/
1755 
1756 typedef struct acpi_table_waet
1757 {
1758     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1759     UINT32                  Flags;
1760 
1761 } ACPI_TABLE_WAET;
1762 
1763 /* Masks for Flags field above */
1764 
1765 #define ACPI_WAET_RTC_NO_ACK        (1)         /* RTC requires no int acknowledge */
1766 #define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
1767 
1768 
1769 /*******************************************************************************
1770  *
1771  * WDAT - Watchdog Action Table
1772  *        Version 1
1773  *
1774  * Conforms to "Hardware Watchdog Timers Design Specification",
1775  * Copyright 2006 Microsoft Corporation.
1776  *
1777  ******************************************************************************/
1778 
1779 typedef struct acpi_table_wdat
1780 {
1781     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1782     UINT32                  HeaderLength;       /* Watchdog Header Length */
1783     UINT16                  PciSegment;         /* PCI Segment number */
1784     UINT8                   PciBus;             /* PCI Bus number */
1785     UINT8                   PciDevice;          /* PCI Device number */
1786     UINT8                   PciFunction;        /* PCI Function number */
1787     UINT8                   Reserved[3];
1788     UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
1789     UINT32                  MaxCount;           /* Maximum counter value supported */
1790     UINT32                  MinCount;           /* Minimum counter value */
1791     UINT8                   Flags;
1792     UINT8                   Reserved2[3];
1793     UINT32                  Entries;            /* Number of watchdog entries that follow */
1794 
1795 } ACPI_TABLE_WDAT;
1796 
1797 /* Masks for Flags field above */
1798 
1799 #define ACPI_WDAT_ENABLED           (1)
1800 #define ACPI_WDAT_STOPPED           0x80
1801 
1802 
1803 /* WDAT Instruction Entries (actions) */
1804 
1805 typedef struct acpi_wdat_entry
1806 {
1807     UINT8                   Action;
1808     UINT8                   Instruction;
1809     UINT16                  Reserved;
1810     ACPI_GENERIC_ADDRESS    RegisterRegion;
1811     UINT32                  Value;              /* Value used with Read/Write register */
1812     UINT32                  Mask;               /* Bitmask required for this register instruction */
1813 
1814 } ACPI_WDAT_ENTRY;
1815 
1816 /* Values for Action field above */
1817 
1818 enum AcpiWdatActions
1819 {
1820     ACPI_WDAT_RESET                 = 1,
1821     ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1822     ACPI_WDAT_GET_COUNTDOWN         = 5,
1823     ACPI_WDAT_SET_COUNTDOWN         = 6,
1824     ACPI_WDAT_GET_RUNNING_STATE     = 8,
1825     ACPI_WDAT_SET_RUNNING_STATE     = 9,
1826     ACPI_WDAT_GET_STOPPED_STATE     = 10,
1827     ACPI_WDAT_SET_STOPPED_STATE     = 11,
1828     ACPI_WDAT_GET_REBOOT            = 16,
1829     ACPI_WDAT_SET_REBOOT            = 17,
1830     ACPI_WDAT_GET_SHUTDOWN          = 18,
1831     ACPI_WDAT_SET_SHUTDOWN          = 19,
1832     ACPI_WDAT_GET_STATUS            = 32,
1833     ACPI_WDAT_SET_STATUS            = 33,
1834     ACPI_WDAT_ACTION_RESERVED       = 34    /* 34 and greater are reserved */
1835 };
1836 
1837 /* Values for Instruction field above */
1838 
1839 enum AcpiWdatInstructions
1840 {
1841     ACPI_WDAT_READ_VALUE            = 0,
1842     ACPI_WDAT_READ_COUNTDOWN        = 1,
1843     ACPI_WDAT_WRITE_VALUE           = 2,
1844     ACPI_WDAT_WRITE_COUNTDOWN       = 3,
1845     ACPI_WDAT_INSTRUCTION_RESERVED  = 4,    /* 4 and greater are reserved */
1846     ACPI_WDAT_PRESERVE_REGISTER     = 0x80  /* Except for this value */
1847 };
1848 
1849 
1850 /*******************************************************************************
1851  *
1852  * WDDT - Watchdog Descriptor Table
1853  *        Version 1
1854  *
1855  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
1856  * Version 001, September 2002
1857  *
1858  ******************************************************************************/
1859 
1860 typedef struct acpi_table_wddt
1861 {
1862     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1863     UINT16                  SpecVersion;
1864     UINT16                  TableVersion;
1865     UINT16                  PciVendorId;
1866     ACPI_GENERIC_ADDRESS    Address;
1867     UINT16                  MaxCount;           /* Maximum counter value supported */
1868     UINT16                  MinCount;           /* Minimum counter value supported */
1869     UINT16                  Period;
1870     UINT16                  Status;
1871     UINT16                  Capability;
1872 
1873 } ACPI_TABLE_WDDT;
1874 
1875 /* Flags for Status field above */
1876 
1877 #define ACPI_WDDT_AVAILABLE     (1)
1878 #define ACPI_WDDT_ACTIVE        (1<<1)
1879 #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
1880 #define ACPI_WDDT_USER_RESET    (1<<11)
1881 #define ACPI_WDDT_WDT_RESET     (1<<12)
1882 #define ACPI_WDDT_POWER_FAIL    (1<<13)
1883 #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
1884 
1885 /* Flags for Capability field above */
1886 
1887 #define ACPI_WDDT_AUTO_RESET    (1)
1888 #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
1889 
1890 
1891 /*******************************************************************************
1892  *
1893  * WDRT - Watchdog Resource Table
1894  *        Version 1
1895  *
1896  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
1897  * Version 1.01, August 28, 2006
1898  *
1899  ******************************************************************************/
1900 
1901 typedef struct acpi_table_wdrt
1902 {
1903     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1904     ACPI_GENERIC_ADDRESS    ControlRegister;
1905     ACPI_GENERIC_ADDRESS    CountRegister;
1906     UINT16                  PciDeviceId;
1907     UINT16                  PciVendorId;
1908     UINT8                   PciBus;             /* PCI Bus number */
1909     UINT8                   PciDevice;          /* PCI Device number */
1910     UINT8                   PciFunction;        /* PCI Function number */
1911     UINT8                   PciSegment;         /* PCI Segment number */
1912     UINT16                  MaxCount;           /* Maximum counter value supported */
1913     UINT8                   Units;
1914 
1915 } ACPI_TABLE_WDRT;
1916 
1917 
1918 /*******************************************************************************
1919  *
1920  * WSMT - Windows SMM Security Migrations Table
1921  *        Version 1
1922  *
1923  * Conforms to "Windows SMM Security Migrations Table",
1924  * Version 1.0, April 18, 2016
1925  *
1926  ******************************************************************************/
1927 
1928 typedef struct acpi_table_wsmt
1929 {
1930     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1931     UINT32                  ProtectionFlags;
1932 
1933 } ACPI_TABLE_WSMT;
1934 
1935 /* Flags for ProtectionFlags field above */
1936 
1937 #define ACPI_WSMT_FIXED_COMM_BUFFERS                (1)
1938 #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
1939 #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION        (4)
1940 
1941 
1942 /* Reset to default packing */
1943 
1944 #pragma pack()
1945 
1946 #endif /* __ACTBL2_H__ */
1947