]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/dev/acpica/include/actbl2.h
Merge ACPICA 20170728.
[FreeBSD/FreeBSD.git] / sys / contrib / dev / acpica / include / actbl2.h
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__ */