xref: /freebsd/sys/contrib/dev/acpica/include/actbl2.h (revision 8657387683946d0c03e09fe77029edfe309eeb20)
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 - 2017, 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 } ACPI_IORT_SMMU_GSI;
1034 
1035 
1036 typedef struct acpi_iort_smmu_v3
1037 {
1038     UINT64                  BaseAddress;            /* SMMUv3 base address */
1039     UINT32                  Flags;
1040     UINT32                  Reserved;
1041     UINT64                  VatosAddress;
1042     UINT32                  Model;
1043     UINT32                  EventGsiv;
1044     UINT32                  PriGsiv;
1045     UINT32                  GerrGsiv;
1046     UINT32                  SyncGsiv;
1047     UINT8                   Pxm;
1048     UINT8                   Reserved1;
1049     UINT16                  Reserved2;
1050 
1051 } ACPI_IORT_SMMU_V3;
1052 
1053 /* Values for Model field above */
1054 
1055 #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000  /* Generic SMMUv3 */
1056 #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001  /* HiSilicon Hi161x SMMUv3 */
1057 #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002  /* Cavium CN99xx SMMUv3 */
1058 
1059 /* Masks for Flags field above */
1060 
1061 #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
1062 #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
1063 #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
1064 
1065 
1066 /*******************************************************************************
1067  *
1068  * IVRS - I/O Virtualization Reporting Structure
1069  *        Version 1
1070  *
1071  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
1072  * Revision 1.26, February 2009.
1073  *
1074  ******************************************************************************/
1075 
1076 typedef struct acpi_table_ivrs
1077 {
1078     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1079     UINT32                  Info;               /* Common virtualization info */
1080     UINT64                  Reserved;
1081 
1082 } ACPI_TABLE_IVRS;
1083 
1084 /* Values for Info field above */
1085 
1086 #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
1087 #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
1088 #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
1089 
1090 
1091 /* IVRS subtable header */
1092 
1093 typedef struct acpi_ivrs_header
1094 {
1095     UINT8                   Type;               /* Subtable type */
1096     UINT8                   Flags;
1097     UINT16                  Length;             /* Subtable length */
1098     UINT16                  DeviceId;           /* ID of IOMMU */
1099 
1100 } ACPI_IVRS_HEADER;
1101 
1102 /* Values for subtable Type above */
1103 
1104 enum AcpiIvrsType
1105 {
1106     ACPI_IVRS_TYPE_HARDWARE         = 0x10,
1107     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
1108     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
1109     ACPI_IVRS_TYPE_MEMORY3          = 0x22
1110 };
1111 
1112 /* Masks for Flags field above for IVHD subtable */
1113 
1114 #define ACPI_IVHD_TT_ENABLE         (1)
1115 #define ACPI_IVHD_PASS_PW           (1<<1)
1116 #define ACPI_IVHD_RES_PASS_PW       (1<<2)
1117 #define ACPI_IVHD_ISOC              (1<<3)
1118 #define ACPI_IVHD_IOTLB             (1<<4)
1119 
1120 /* Masks for Flags field above for IVMD subtable */
1121 
1122 #define ACPI_IVMD_UNITY             (1)
1123 #define ACPI_IVMD_READ              (1<<1)
1124 #define ACPI_IVMD_WRITE             (1<<2)
1125 #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
1126 
1127 
1128 /*
1129  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
1130  */
1131 
1132 /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
1133 
1134 typedef struct acpi_ivrs_hardware
1135 {
1136     ACPI_IVRS_HEADER        Header;
1137     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
1138     UINT64                  BaseAddress;        /* IOMMU control registers */
1139     UINT16                  PciSegmentGroup;
1140     UINT16                  Info;               /* MSI number and unit ID */
1141     UINT32                  Reserved;
1142 
1143 } ACPI_IVRS_HARDWARE;
1144 
1145 /* Masks for Info field above */
1146 
1147 #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
1148 #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
1149 
1150 
1151 /*
1152  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
1153  * Upper two bits of the Type field are the (encoded) length of the structure.
1154  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
1155  * are reserved for future use but not defined.
1156  */
1157 typedef struct acpi_ivrs_de_header
1158 {
1159     UINT8                   Type;
1160     UINT16                  Id;
1161     UINT8                   DataSetting;
1162 
1163 } ACPI_IVRS_DE_HEADER;
1164 
1165 /* Length of device entry is in the top two bits of Type field above */
1166 
1167 #define ACPI_IVHD_ENTRY_LENGTH      0xC0
1168 
1169 /* Values for device entry Type field above */
1170 
1171 enum AcpiIvrsDeviceEntryType
1172 {
1173     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
1174 
1175     ACPI_IVRS_TYPE_PAD4             = 0,
1176     ACPI_IVRS_TYPE_ALL              = 1,
1177     ACPI_IVRS_TYPE_SELECT           = 2,
1178     ACPI_IVRS_TYPE_START            = 3,
1179     ACPI_IVRS_TYPE_END              = 4,
1180 
1181     /* 8-byte device entries */
1182 
1183     ACPI_IVRS_TYPE_PAD8             = 64,
1184     ACPI_IVRS_TYPE_NOT_USED         = 65,
1185     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
1186     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
1187     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
1188     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
1189     ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
1190 };
1191 
1192 /* Values for Data field above */
1193 
1194 #define ACPI_IVHD_INIT_PASS         (1)
1195 #define ACPI_IVHD_EINT_PASS         (1<<1)
1196 #define ACPI_IVHD_NMI_PASS          (1<<2)
1197 #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
1198 #define ACPI_IVHD_LINT0_PASS        (1<<6)
1199 #define ACPI_IVHD_LINT1_PASS        (1<<7)
1200 
1201 
1202 /* Types 0-4: 4-byte device entry */
1203 
1204 typedef struct acpi_ivrs_device4
1205 {
1206     ACPI_IVRS_DE_HEADER     Header;
1207 
1208 } ACPI_IVRS_DEVICE4;
1209 
1210 /* Types 66-67: 8-byte device entry */
1211 
1212 typedef struct acpi_ivrs_device8a
1213 {
1214     ACPI_IVRS_DE_HEADER     Header;
1215     UINT8                   Reserved1;
1216     UINT16                  UsedId;
1217     UINT8                   Reserved2;
1218 
1219 } ACPI_IVRS_DEVICE8A;
1220 
1221 /* Types 70-71: 8-byte device entry */
1222 
1223 typedef struct acpi_ivrs_device8b
1224 {
1225     ACPI_IVRS_DE_HEADER     Header;
1226     UINT32                  ExtendedData;
1227 
1228 } ACPI_IVRS_DEVICE8B;
1229 
1230 /* Values for ExtendedData above */
1231 
1232 #define ACPI_IVHD_ATS_DISABLED      (1<<31)
1233 
1234 /* Type 72: 8-byte device entry */
1235 
1236 typedef struct acpi_ivrs_device8c
1237 {
1238     ACPI_IVRS_DE_HEADER     Header;
1239     UINT8                   Handle;
1240     UINT16                  UsedId;
1241     UINT8                   Variety;
1242 
1243 } ACPI_IVRS_DEVICE8C;
1244 
1245 /* Values for Variety field above */
1246 
1247 #define ACPI_IVHD_IOAPIC            1
1248 #define ACPI_IVHD_HPET              2
1249 
1250 
1251 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
1252 
1253 typedef struct acpi_ivrs_memory
1254 {
1255     ACPI_IVRS_HEADER        Header;
1256     UINT16                  AuxData;
1257     UINT64                  Reserved;
1258     UINT64                  StartAddress;
1259     UINT64                  MemoryLength;
1260 
1261 } ACPI_IVRS_MEMORY;
1262 
1263 
1264 /*******************************************************************************
1265  *
1266  * LPIT - Low Power Idle Table
1267  *
1268  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
1269  *
1270  ******************************************************************************/
1271 
1272 typedef struct acpi_table_lpit
1273 {
1274     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1275 
1276 } ACPI_TABLE_LPIT;
1277 
1278 
1279 /* LPIT subtable header */
1280 
1281 typedef struct acpi_lpit_header
1282 {
1283     UINT32                  Type;               /* Subtable type */
1284     UINT32                  Length;             /* Subtable length */
1285     UINT16                  UniqueId;
1286     UINT16                  Reserved;
1287     UINT32                  Flags;
1288 
1289 } ACPI_LPIT_HEADER;
1290 
1291 /* Values for subtable Type above */
1292 
1293 enum AcpiLpitType
1294 {
1295     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
1296     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
1297 };
1298 
1299 /* Masks for Flags field above  */
1300 
1301 #define ACPI_LPIT_STATE_DISABLED    (1)
1302 #define ACPI_LPIT_NO_COUNTER        (1<<1)
1303 
1304 /*
1305  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
1306  */
1307 
1308 /* 0x00: Native C-state instruction based LPI structure */
1309 
1310 typedef struct acpi_lpit_native
1311 {
1312     ACPI_LPIT_HEADER        Header;
1313     ACPI_GENERIC_ADDRESS    EntryTrigger;
1314     UINT32                  Residency;
1315     UINT32                  Latency;
1316     ACPI_GENERIC_ADDRESS    ResidencyCounter;
1317     UINT64                  CounterFrequency;
1318 
1319 } ACPI_LPIT_NATIVE;
1320 
1321 
1322 /*******************************************************************************
1323  *
1324  * MCFG - PCI Memory Mapped Configuration table and subtable
1325  *        Version 1
1326  *
1327  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1328  *
1329  ******************************************************************************/
1330 
1331 typedef struct acpi_table_mcfg
1332 {
1333     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1334     UINT8                   Reserved[8];
1335 
1336 } ACPI_TABLE_MCFG;
1337 
1338 
1339 /* Subtable */
1340 
1341 typedef struct acpi_mcfg_allocation
1342 {
1343     UINT64                  Address;            /* Base address, processor-relative */
1344     UINT16                  PciSegment;         /* PCI segment group number */
1345     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1346     UINT8                   EndBusNumber;       /* Final PCI Bus number */
1347     UINT32                  Reserved;
1348 
1349 } ACPI_MCFG_ALLOCATION;
1350 
1351 
1352 /*******************************************************************************
1353  *
1354  * MCHI - Management Controller Host Interface Table
1355  *        Version 1
1356  *
1357  * Conforms to "Management Component Transport Protocol (MCTP) Host
1358  * Interface Specification", Revision 1.0.0a, October 13, 2009
1359  *
1360  ******************************************************************************/
1361 
1362 typedef struct acpi_table_mchi
1363 {
1364     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1365     UINT8                   InterfaceType;
1366     UINT8                   Protocol;
1367     UINT64                  ProtocolData;
1368     UINT8                   InterruptType;
1369     UINT8                   Gpe;
1370     UINT8                   PciDeviceFlag;
1371     UINT32                  GlobalInterrupt;
1372     ACPI_GENERIC_ADDRESS    ControlRegister;
1373     UINT8                   PciSegment;
1374     UINT8                   PciBus;
1375     UINT8                   PciDevice;
1376     UINT8                   PciFunction;
1377 
1378 } ACPI_TABLE_MCHI;
1379 
1380 
1381 /*******************************************************************************
1382  *
1383  * MSDM - Microsoft Data Management table
1384  *
1385  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1386  * November 29, 2011. Copyright 2011 Microsoft
1387  *
1388  ******************************************************************************/
1389 
1390 /* Basic MSDM table is only the common ACPI header */
1391 
1392 typedef struct acpi_table_msdm
1393 {
1394     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1395 
1396 } ACPI_TABLE_MSDM;
1397 
1398 
1399 /*******************************************************************************
1400  *
1401  * MTMR - MID Timer Table
1402  *        Version 1
1403  *
1404  * Conforms to "Simple Firmware Interface Specification",
1405  * Draft 0.8.2, Oct 19, 2010
1406  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
1407  *
1408  ******************************************************************************/
1409 
1410 typedef struct acpi_table_mtmr
1411 {
1412     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1413 
1414 } ACPI_TABLE_MTMR;
1415 
1416 /* MTMR entry */
1417 
1418 typedef struct acpi_mtmr_entry
1419 {
1420     ACPI_GENERIC_ADDRESS    PhysicalAddress;
1421     UINT32                  Frequency;
1422     UINT32                  Irq;
1423 
1424 } ACPI_MTMR_ENTRY;
1425 
1426 /*******************************************************************************
1427  *
1428  * SDEI - Software Delegated Exception Interface Descriptor Table
1429  *
1430  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
1431  * May 8th, 2017. Copyright 2017 ARM Ltd.
1432  *
1433  ******************************************************************************/
1434 
1435 typedef struct acpi_table_sdei
1436 {
1437     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1438 
1439 } ACPI_TABLE_SDEI;
1440 
1441 
1442 /*******************************************************************************
1443  *
1444  * SLIC - Software Licensing Description Table
1445  *
1446  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1447  * November 29, 2011. Copyright 2011 Microsoft
1448  *
1449  ******************************************************************************/
1450 
1451 /* Basic SLIC table is only the common ACPI header */
1452 
1453 typedef struct acpi_table_slic
1454 {
1455     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1456 
1457 } ACPI_TABLE_SLIC;
1458 
1459 
1460 /*******************************************************************************
1461  *
1462  * SPCR - Serial Port Console Redirection table
1463  *        Version 2
1464  *
1465  * Conforms to "Serial Port Console Redirection Table",
1466  * Version 1.03, August 10, 2015
1467  *
1468  ******************************************************************************/
1469 
1470 typedef struct acpi_table_spcr
1471 {
1472     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1473     UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
1474     UINT8                   Reserved[3];
1475     ACPI_GENERIC_ADDRESS    SerialPort;
1476     UINT8                   InterruptType;
1477     UINT8                   PcInterrupt;
1478     UINT32                  Interrupt;
1479     UINT8                   BaudRate;
1480     UINT8                   Parity;
1481     UINT8                   StopBits;
1482     UINT8                   FlowControl;
1483     UINT8                   TerminalType;
1484     UINT8                   Reserved1;
1485     UINT16                  PciDeviceId;
1486     UINT16                  PciVendorId;
1487     UINT8                   PciBus;
1488     UINT8                   PciDevice;
1489     UINT8                   PciFunction;
1490     UINT32                  PciFlags;
1491     UINT8                   PciSegment;
1492     UINT32                  Reserved2;
1493 
1494 } ACPI_TABLE_SPCR;
1495 
1496 /* Masks for PciFlags field above */
1497 
1498 #define ACPI_SPCR_DO_NOT_DISABLE    (1)
1499 
1500 /* Values for Interface Type: See the definition of the DBG2 table */
1501 
1502 
1503 /*******************************************************************************
1504  *
1505  * SPMI - Server Platform Management Interface table
1506  *        Version 5
1507  *
1508  * Conforms to "Intelligent Platform Management Interface Specification
1509  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
1510  * June 12, 2009 markup.
1511  *
1512  ******************************************************************************/
1513 
1514 typedef struct acpi_table_spmi
1515 {
1516     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1517     UINT8                   InterfaceType;
1518     UINT8                   Reserved;           /* Must be 1 */
1519     UINT16                  SpecRevision;       /* Version of IPMI */
1520     UINT8                   InterruptType;
1521     UINT8                   GpeNumber;          /* GPE assigned */
1522     UINT8                   Reserved1;
1523     UINT8                   PciDeviceFlag;
1524     UINT32                  Interrupt;
1525     ACPI_GENERIC_ADDRESS    IpmiRegister;
1526     UINT8                   PciSegment;
1527     UINT8                   PciBus;
1528     UINT8                   PciDevice;
1529     UINT8                   PciFunction;
1530     UINT8                   Reserved2;
1531 
1532 } ACPI_TABLE_SPMI;
1533 
1534 /* Values for InterfaceType above */
1535 
1536 enum AcpiSpmiInterfaceTypes
1537 {
1538     ACPI_SPMI_NOT_USED              = 0,
1539     ACPI_SPMI_KEYBOARD              = 1,
1540     ACPI_SPMI_SMI                   = 2,
1541     ACPI_SPMI_BLOCK_TRANSFER        = 3,
1542     ACPI_SPMI_SMBUS                 = 4,
1543     ACPI_SPMI_RESERVED              = 5         /* 5 and above are reserved */
1544 };
1545 
1546 
1547 /*******************************************************************************
1548  *
1549  * TCPA - Trusted Computing Platform Alliance table
1550  *        Version 2
1551  *
1552  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1553  * Version 1.2, Revision 8
1554  * February 27, 2017
1555  *
1556  * NOTE: There are two versions of the table with the same signature --
1557  * the client version and the server version. The common PlatformClass
1558  * field is used to differentiate the two types of tables.
1559  *
1560  ******************************************************************************/
1561 
1562 typedef struct acpi_table_tcpa_hdr
1563 {
1564     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1565     UINT16                  PlatformClass;
1566 
1567 } ACPI_TABLE_TCPA_HDR;
1568 
1569 /*
1570  * Values for PlatformClass above.
1571  * This is how the client and server subtables are differentiated
1572  */
1573 #define ACPI_TCPA_CLIENT_TABLE          0
1574 #define ACPI_TCPA_SERVER_TABLE          1
1575 
1576 
1577 typedef struct acpi_table_tcpa_client
1578 {
1579     UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
1580     UINT64                  LogAddress;         /* Address of the event log area */
1581 
1582 } ACPI_TABLE_TCPA_CLIENT;
1583 
1584 typedef struct acpi_table_tcpa_server
1585 {
1586     UINT16                  Reserved;
1587     UINT64                  MinimumLogLength;   /* Minimum length for the event log area */
1588     UINT64                  LogAddress;         /* Address of the event log area */
1589     UINT16                  SpecRevision;
1590     UINT8                   DeviceFlags;
1591     UINT8                   InterruptFlags;
1592     UINT8                   GpeNumber;
1593     UINT8                   Reserved2[3];
1594     UINT32                  GlobalInterrupt;
1595     ACPI_GENERIC_ADDRESS    Address;
1596     UINT32                  Reserved3;
1597     ACPI_GENERIC_ADDRESS    ConfigAddress;
1598     UINT8                   Group;
1599     UINT8                   Bus;                /* PCI Bus/Segment/Function numbers */
1600     UINT8                   Device;
1601     UINT8                   Function;
1602 
1603 } ACPI_TABLE_TCPA_SERVER;
1604 
1605 /* Values for DeviceFlags above */
1606 
1607 #define ACPI_TCPA_PCI_DEVICE            (1)
1608 #define ACPI_TCPA_BUS_PNP               (1<<1)
1609 #define ACPI_TCPA_ADDRESS_VALID         (1<<2)
1610 
1611 /* Values for InterruptFlags above */
1612 
1613 #define ACPI_TCPA_INTERRUPT_MODE        (1)
1614 #define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
1615 #define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
1616 #define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
1617 
1618 
1619 /*******************************************************************************
1620  *
1621  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
1622  *        Version 4
1623  *
1624  * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
1625  * Version 1.2, Revision 8
1626  * February 27, 2017
1627  *
1628  ******************************************************************************/
1629 
1630 typedef struct acpi_table_tpm2
1631 {
1632     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1633     UINT16                  PlatformClass;
1634     UINT16                  Reserved;
1635     UINT64                  ControlAddress;
1636     UINT32                  StartMethod;
1637 
1638     /* Platform-specific data follows */
1639 
1640 } ACPI_TABLE_TPM2;
1641 
1642 /* Values for StartMethod above */
1643 
1644 #define ACPI_TPM2_NOT_ALLOWED                       0
1645 #define ACPI_TPM2_START_METHOD                      2
1646 #define ACPI_TPM2_MEMORY_MAPPED                     6
1647 #define ACPI_TPM2_COMMAND_BUFFER                    7
1648 #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
1649 #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11  /* V1.2 Rev 8 */
1650 
1651 
1652 /* Trailer appears after any StartMethod subtables */
1653 
1654 typedef struct acpi_tpm2_trailer
1655 {
1656     UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
1657     UINT64                  LogAddress;         /* Address of the event log area */
1658 
1659 } ACPI_TPM2_TRAILER;
1660 
1661 
1662 /*
1663  * Subtables (StartMethod-specific)
1664  */
1665 
1666 /* 11: Start Method for ARM SMC (V1.2 Rev 8) */
1667 
1668 typedef struct acpi_tpm2_arm_smc
1669 {
1670     UINT32                  GlobalInterrupt;
1671     UINT8                   InterruptFlags;
1672     UINT8                   OperationFlags;
1673     UINT16                  Reserved;
1674     UINT32                  FunctionId;
1675 
1676 } ACPI_TPM2_ARM_SMC;
1677 
1678 /* Values for InterruptFlags above */
1679 
1680 #define ACPI_TPM2_INTERRUPT_SUPPORT     (1)
1681 
1682 /* Values for OperationFlags above */
1683 
1684 #define ACPI_TPM2_IDLE_SUPPORT          (1)
1685 
1686 
1687 /*******************************************************************************
1688  *
1689  * UEFI - UEFI Boot optimization Table
1690  *        Version 1
1691  *
1692  * Conforms to "Unified Extensible Firmware Interface Specification",
1693  * Version 2.3, May 8, 2009
1694  *
1695  ******************************************************************************/
1696 
1697 typedef struct acpi_table_uefi
1698 {
1699     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1700     UINT8                   Identifier[16];     /* UUID identifier */
1701     UINT16                  DataOffset;         /* Offset of remaining data in table */
1702 
1703 } ACPI_TABLE_UEFI;
1704 
1705 
1706 /*******************************************************************************
1707  *
1708  * VRTC - Virtual Real Time Clock Table
1709  *        Version 1
1710  *
1711  * Conforms to "Simple Firmware Interface Specification",
1712  * Draft 0.8.2, Oct 19, 2010
1713  * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
1714  *
1715  ******************************************************************************/
1716 
1717 typedef struct acpi_table_vrtc
1718 {
1719     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1720 
1721 } ACPI_TABLE_VRTC;
1722 
1723 /* VRTC entry */
1724 
1725 typedef struct acpi_vrtc_entry
1726 {
1727     ACPI_GENERIC_ADDRESS    PhysicalAddress;
1728     UINT32                  Irq;
1729 
1730 } ACPI_VRTC_ENTRY;
1731 
1732 
1733 /*******************************************************************************
1734  *
1735  * WAET - Windows ACPI Emulated devices Table
1736  *        Version 1
1737  *
1738  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
1739  *
1740  ******************************************************************************/
1741 
1742 typedef struct acpi_table_waet
1743 {
1744     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1745     UINT32                  Flags;
1746 
1747 } ACPI_TABLE_WAET;
1748 
1749 /* Masks for Flags field above */
1750 
1751 #define ACPI_WAET_RTC_NO_ACK        (1)         /* RTC requires no int acknowledge */
1752 #define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
1753 
1754 
1755 /*******************************************************************************
1756  *
1757  * WDAT - Watchdog Action Table
1758  *        Version 1
1759  *
1760  * Conforms to "Hardware Watchdog Timers Design Specification",
1761  * Copyright 2006 Microsoft Corporation.
1762  *
1763  ******************************************************************************/
1764 
1765 typedef struct acpi_table_wdat
1766 {
1767     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1768     UINT32                  HeaderLength;       /* Watchdog Header Length */
1769     UINT16                  PciSegment;         /* PCI Segment number */
1770     UINT8                   PciBus;             /* PCI Bus number */
1771     UINT8                   PciDevice;          /* PCI Device number */
1772     UINT8                   PciFunction;        /* PCI Function number */
1773     UINT8                   Reserved[3];
1774     UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
1775     UINT32                  MaxCount;           /* Maximum counter value supported */
1776     UINT32                  MinCount;           /* Minimum counter value */
1777     UINT8                   Flags;
1778     UINT8                   Reserved2[3];
1779     UINT32                  Entries;            /* Number of watchdog entries that follow */
1780 
1781 } ACPI_TABLE_WDAT;
1782 
1783 /* Masks for Flags field above */
1784 
1785 #define ACPI_WDAT_ENABLED           (1)
1786 #define ACPI_WDAT_STOPPED           0x80
1787 
1788 
1789 /* WDAT Instruction Entries (actions) */
1790 
1791 typedef struct acpi_wdat_entry
1792 {
1793     UINT8                   Action;
1794     UINT8                   Instruction;
1795     UINT16                  Reserved;
1796     ACPI_GENERIC_ADDRESS    RegisterRegion;
1797     UINT32                  Value;              /* Value used with Read/Write register */
1798     UINT32                  Mask;               /* Bitmask required for this register instruction */
1799 
1800 } ACPI_WDAT_ENTRY;
1801 
1802 /* Values for Action field above */
1803 
1804 enum AcpiWdatActions
1805 {
1806     ACPI_WDAT_RESET                 = 1,
1807     ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1808     ACPI_WDAT_GET_COUNTDOWN         = 5,
1809     ACPI_WDAT_SET_COUNTDOWN         = 6,
1810     ACPI_WDAT_GET_RUNNING_STATE     = 8,
1811     ACPI_WDAT_SET_RUNNING_STATE     = 9,
1812     ACPI_WDAT_GET_STOPPED_STATE     = 10,
1813     ACPI_WDAT_SET_STOPPED_STATE     = 11,
1814     ACPI_WDAT_GET_REBOOT            = 16,
1815     ACPI_WDAT_SET_REBOOT            = 17,
1816     ACPI_WDAT_GET_SHUTDOWN          = 18,
1817     ACPI_WDAT_SET_SHUTDOWN          = 19,
1818     ACPI_WDAT_GET_STATUS            = 32,
1819     ACPI_WDAT_SET_STATUS            = 33,
1820     ACPI_WDAT_ACTION_RESERVED       = 34    /* 34 and greater are reserved */
1821 };
1822 
1823 /* Values for Instruction field above */
1824 
1825 enum AcpiWdatInstructions
1826 {
1827     ACPI_WDAT_READ_VALUE            = 0,
1828     ACPI_WDAT_READ_COUNTDOWN        = 1,
1829     ACPI_WDAT_WRITE_VALUE           = 2,
1830     ACPI_WDAT_WRITE_COUNTDOWN       = 3,
1831     ACPI_WDAT_INSTRUCTION_RESERVED  = 4,    /* 4 and greater are reserved */
1832     ACPI_WDAT_PRESERVE_REGISTER     = 0x80  /* Except for this value */
1833 };
1834 
1835 
1836 /*******************************************************************************
1837  *
1838  * WDDT - Watchdog Descriptor Table
1839  *        Version 1
1840  *
1841  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
1842  * Version 001, September 2002
1843  *
1844  ******************************************************************************/
1845 
1846 typedef struct acpi_table_wddt
1847 {
1848     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1849     UINT16                  SpecVersion;
1850     UINT16                  TableVersion;
1851     UINT16                  PciVendorId;
1852     ACPI_GENERIC_ADDRESS    Address;
1853     UINT16                  MaxCount;           /* Maximum counter value supported */
1854     UINT16                  MinCount;           /* Minimum counter value supported */
1855     UINT16                  Period;
1856     UINT16                  Status;
1857     UINT16                  Capability;
1858 
1859 } ACPI_TABLE_WDDT;
1860 
1861 /* Flags for Status field above */
1862 
1863 #define ACPI_WDDT_AVAILABLE     (1)
1864 #define ACPI_WDDT_ACTIVE        (1<<1)
1865 #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
1866 #define ACPI_WDDT_USER_RESET    (1<<11)
1867 #define ACPI_WDDT_WDT_RESET     (1<<12)
1868 #define ACPI_WDDT_POWER_FAIL    (1<<13)
1869 #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
1870 
1871 /* Flags for Capability field above */
1872 
1873 #define ACPI_WDDT_AUTO_RESET    (1)
1874 #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
1875 
1876 
1877 /*******************************************************************************
1878  *
1879  * WDRT - Watchdog Resource Table
1880  *        Version 1
1881  *
1882  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
1883  * Version 1.01, August 28, 2006
1884  *
1885  ******************************************************************************/
1886 
1887 typedef struct acpi_table_wdrt
1888 {
1889     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1890     ACPI_GENERIC_ADDRESS    ControlRegister;
1891     ACPI_GENERIC_ADDRESS    CountRegister;
1892     UINT16                  PciDeviceId;
1893     UINT16                  PciVendorId;
1894     UINT8                   PciBus;             /* PCI Bus number */
1895     UINT8                   PciDevice;          /* PCI Device number */
1896     UINT8                   PciFunction;        /* PCI Function number */
1897     UINT8                   PciSegment;         /* PCI Segment number */
1898     UINT16                  MaxCount;           /* Maximum counter value supported */
1899     UINT8                   Units;
1900 
1901 } ACPI_TABLE_WDRT;
1902 
1903 
1904 /*******************************************************************************
1905  *
1906  * WSMT - Windows SMM Security Migrations Table
1907  *        Version 1
1908  *
1909  * Conforms to "Windows SMM Security Migrations Table",
1910  * Version 1.0, April 18, 2016
1911  *
1912  ******************************************************************************/
1913 
1914 typedef struct acpi_table_wsmt
1915 {
1916     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1917     UINT32                  ProtectionFlags;
1918 
1919 } ACPI_TABLE_WSMT;
1920 
1921 /* Flags for ProtectionFlags field above */
1922 
1923 #define ACPI_WSMT_FIXED_COMM_BUFFERS                (1)
1924 #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
1925 #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION        (4)
1926 
1927 
1928 /* Reset to default packing */
1929 
1930 #pragma pack()
1931 
1932 #endif /* __ACTBL2_H__ */
1933