actbl2.h revision 281687
1/******************************************************************************
2 *
3 * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2015, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions, and the following disclaimer,
16 *    without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 *    substantially similar to the "NO WARRANTY" disclaimer below
19 *    ("Disclaimer") and any redistribution must be conditioned upon
20 *    including a substantially similar Disclaimer requirement for further
21 *    binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 *    of any contributors may be used to endorse or promote products derived
24 *    from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACTBL2_H__
45#define __ACTBL2_H__
46
47
48/*******************************************************************************
49 *
50 * Additional ACPI Tables (2)
51 *
52 * These tables are not consumed directly by the ACPICA subsystem, but are
53 * included here to support device drivers and the AML disassembler.
54 *
55 * The tables in this file are defined by third-party specifications, and are
56 * not defined directly by the ACPI specification itself.
57 *
58 ******************************************************************************/
59
60
61/*
62 * Values for description table header signatures for tables defined in this
63 * file. Useful because they make it more difficult to inadvertently type in
64 * the wrong signature.
65 */
66#define ACPI_SIG_ASF            "ASF!"      /* Alert Standard Format table */
67#define ACPI_SIG_BOOT           "BOOT"      /* Simple Boot Flag Table */
68#define ACPI_SIG_CSRT           "CSRT"      /* Core System Resource Table */
69#define ACPI_SIG_DBG2           "DBG2"      /* Debug Port table type 2 */
70#define ACPI_SIG_DBGP           "DBGP"      /* Debug Port table */
71#define ACPI_SIG_DMAR           "DMAR"      /* DMA Remapping table */
72#define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
73#define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
74#define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
75#define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
76#define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
77#define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
78#define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
79#define ACPI_SIG_MTMR           "MTMR"      /* MID Timer table */
80#define ACPI_SIG_SLIC           "SLIC"      /* Software Licensing Description Table */
81#define ACPI_SIG_SPCR           "SPCR"      /* Serial Port Console Redirection table */
82#define ACPI_SIG_SPMI           "SPMI"      /* Server Platform Management Interface table */
83#define ACPI_SIG_TCPA           "TCPA"      /* Trusted Computing Platform Alliance table */
84#define ACPI_SIG_UEFI           "UEFI"      /* Uefi Boot Optimization Table */
85#define ACPI_SIG_VRTC           "VRTC"      /* Virtual Real Time Clock Table */
86#define ACPI_SIG_WAET           "WAET"      /* Windows ACPI Emulated devices Table */
87#define ACPI_SIG_WDAT           "WDAT"      /* Watchdog Action Table */
88#define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
89#define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
90
91#ifdef ACPI_UNDEFINED_TABLES
92/*
93 * These tables have been seen in the field, but no definition has been found
94 */
95#define ACPI_SIG_ATKG           "ATKG"
96#define ACPI_SIG_GSCI           "GSCI"      /* GMCH SCI table */
97#define ACPI_SIG_IEIT           "IEIT"
98#endif
99
100/*
101 * All tables must be byte-packed to match the ACPI specification, since
102 * the tables are provided by the system BIOS.
103 */
104#pragma pack(1)
105
106/*
107 * Note: C bitfields are not used for this reason:
108 *
109 * "Bitfields are great and easy to read, but unfortunately the C language
110 * does not specify the layout of bitfields in memory, which means they are
111 * essentially useless for dealing with packed data in on-disk formats or
112 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
113 * this decision was a design error in C. Ritchie could have picked an order
114 * and stuck with it." Norman Ramsey.
115 * See http://stackoverflow.com/a/1053662/41661
116 */
117
118
119/*******************************************************************************
120 *
121 * ASF - Alert Standard Format table (Signature "ASF!")
122 *       Revision 0x10
123 *
124 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
125 *
126 ******************************************************************************/
127
128typedef struct acpi_table_asf
129{
130    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
131
132} ACPI_TABLE_ASF;
133
134
135/* ASF subtable header */
136
137typedef struct acpi_asf_header
138{
139    UINT8                   Type;
140    UINT8                   Reserved;
141    UINT16                  Length;
142
143} ACPI_ASF_HEADER;
144
145
146/* Values for Type field above */
147
148enum AcpiAsfType
149{
150    ACPI_ASF_TYPE_INFO          = 0,
151    ACPI_ASF_TYPE_ALERT         = 1,
152    ACPI_ASF_TYPE_CONTROL       = 2,
153    ACPI_ASF_TYPE_BOOT          = 3,
154    ACPI_ASF_TYPE_ADDRESS       = 4,
155    ACPI_ASF_TYPE_RESERVED      = 5
156};
157
158/*
159 * ASF subtables
160 */
161
162/* 0: ASF Information */
163
164typedef struct acpi_asf_info
165{
166    ACPI_ASF_HEADER         Header;
167    UINT8                   MinResetValue;
168    UINT8                   MinPollInterval;
169    UINT16                  SystemId;
170    UINT32                  MfgId;
171    UINT8                   Flags;
172    UINT8                   Reserved2[3];
173
174} ACPI_ASF_INFO;
175
176/* Masks for Flags field above */
177
178#define ACPI_ASF_SMBUS_PROTOCOLS    (1)
179
180
181/* 1: ASF Alerts */
182
183typedef struct acpi_asf_alert
184{
185    ACPI_ASF_HEADER         Header;
186    UINT8                   AssertMask;
187    UINT8                   DeassertMask;
188    UINT8                   Alerts;
189    UINT8                   DataLength;
190
191} ACPI_ASF_ALERT;
192
193typedef struct acpi_asf_alert_data
194{
195    UINT8                   Address;
196    UINT8                   Command;
197    UINT8                   Mask;
198    UINT8                   Value;
199    UINT8                   SensorType;
200    UINT8                   Type;
201    UINT8                   Offset;
202    UINT8                   SourceType;
203    UINT8                   Severity;
204    UINT8                   SensorNumber;
205    UINT8                   Entity;
206    UINT8                   Instance;
207
208} ACPI_ASF_ALERT_DATA;
209
210
211/* 2: ASF Remote Control */
212
213typedef struct acpi_asf_remote
214{
215    ACPI_ASF_HEADER         Header;
216    UINT8                   Controls;
217    UINT8                   DataLength;
218    UINT16                  Reserved2;
219
220} ACPI_ASF_REMOTE;
221
222typedef struct acpi_asf_control_data
223{
224    UINT8                   Function;
225    UINT8                   Address;
226    UINT8                   Command;
227    UINT8                   Value;
228
229} ACPI_ASF_CONTROL_DATA;
230
231
232/* 3: ASF RMCP Boot Options */
233
234typedef struct acpi_asf_rmcp
235{
236    ACPI_ASF_HEADER         Header;
237    UINT8                   Capabilities[7];
238    UINT8                   CompletionCode;
239    UINT32                  EnterpriseId;
240    UINT8                   Command;
241    UINT16                  Parameter;
242    UINT16                  BootOptions;
243    UINT16                  OemParameters;
244
245} ACPI_ASF_RMCP;
246
247
248/* 4: ASF Address */
249
250typedef struct acpi_asf_address
251{
252    ACPI_ASF_HEADER         Header;
253    UINT8                   EpromAddress;
254    UINT8                   Devices;
255
256} ACPI_ASF_ADDRESS;
257
258
259/*******************************************************************************
260 *
261 * BOOT - Simple Boot Flag Table
262 *        Version 1
263 *
264 * Conforms to the "Simple Boot Flag Specification", Version 2.1
265 *
266 ******************************************************************************/
267
268typedef struct acpi_table_boot
269{
270    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
271    UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
272    UINT8                   Reserved[3];
273
274} ACPI_TABLE_BOOT;
275
276
277/*******************************************************************************
278 *
279 * CSRT - Core System Resource Table
280 *        Version 0
281 *
282 * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
283 *
284 ******************************************************************************/
285
286typedef struct acpi_table_csrt
287{
288    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
289
290} ACPI_TABLE_CSRT;
291
292
293/* Resource Group subtable */
294
295typedef struct acpi_csrt_group
296{
297    UINT32                  Length;
298    UINT32                  VendorId;
299    UINT32                  SubvendorId;
300    UINT16                  DeviceId;
301    UINT16                  SubdeviceId;
302    UINT16                  Revision;
303    UINT16                  Reserved;
304    UINT32                  SharedInfoLength;
305
306    /* Shared data immediately follows (Length = SharedInfoLength) */
307
308} ACPI_CSRT_GROUP;
309
310/* Shared Info subtable */
311
312typedef struct acpi_csrt_shared_info
313{
314    UINT16                  MajorVersion;
315    UINT16                  MinorVersion;
316    UINT32                  MmioBaseLow;
317    UINT32                  MmioBaseHigh;
318    UINT32                  GsiInterrupt;
319    UINT8                   InterruptPolarity;
320    UINT8                   InterruptMode;
321    UINT8                   NumChannels;
322    UINT8                   DmaAddressWidth;
323    UINT16                  BaseRequestLine;
324    UINT16                  NumHandshakeSignals;
325    UINT32                  MaxBlockSize;
326
327    /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */
328
329} ACPI_CSRT_SHARED_INFO;
330
331/* Resource Descriptor subtable */
332
333typedef struct acpi_csrt_descriptor
334{
335    UINT32                  Length;
336    UINT16                  Type;
337    UINT16                  Subtype;
338    UINT32                  Uid;
339
340    /* Resource-specific information immediately follows */
341
342} ACPI_CSRT_DESCRIPTOR;
343
344
345/* Resource Types */
346
347#define ACPI_CSRT_TYPE_INTERRUPT    0x0001
348#define ACPI_CSRT_TYPE_TIMER        0x0002
349#define ACPI_CSRT_TYPE_DMA          0x0003
350
351/* Resource Subtypes */
352
353#define ACPI_CSRT_XRUPT_LINE        0x0000
354#define ACPI_CSRT_XRUPT_CONTROLLER  0x0001
355#define ACPI_CSRT_TIMER             0x0000
356#define ACPI_CSRT_DMA_CHANNEL       0x0000
357#define ACPI_CSRT_DMA_CONTROLLER    0x0001
358
359
360/*******************************************************************************
361 *
362 * DBG2 - Debug Port Table 2
363 *        Version 0 (Both main table and subtables)
364 *
365 * Conforms to "Microsoft Debug Port Table 2 (DBG2)", May 22 2012.
366 *
367 ******************************************************************************/
368
369typedef struct acpi_table_dbg2
370{
371    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
372    UINT32                  InfoOffset;
373    UINT32                  InfoCount;
374
375} ACPI_TABLE_DBG2;
376
377
378typedef struct acpi_dbg2_header
379{
380    UINT32                  InfoOffset;
381    UINT32                  InfoCount;
382
383} ACPI_DBG2_HEADER;
384
385
386/* Debug Device Information Subtable */
387
388typedef struct acpi_dbg2_device
389{
390    UINT8                   Revision;
391    UINT16                  Length;
392    UINT8                   RegisterCount;      /* Number of BaseAddress registers */
393    UINT16                  NamepathLength;
394    UINT16                  NamepathOffset;
395    UINT16                  OemDataLength;
396    UINT16                  OemDataOffset;
397    UINT16                  PortType;
398    UINT16                  PortSubtype;
399    UINT16                  Reserved;
400    UINT16                  BaseAddressOffset;
401    UINT16                  AddressSizeOffset;
402    /*
403     * Data that follows:
404     *    BaseAddress (required) - Each in 12-byte Generic Address Structure format.
405     *    AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register.
406     *    Namepath    (required) - Null terminated string. Single dot if not supported.
407     *    OemData     (optional) - Length is OemDataLength.
408     */
409} ACPI_DBG2_DEVICE;
410
411/* Types for PortType field above */
412
413#define ACPI_DBG2_SERIAL_PORT       0x8000
414#define ACPI_DBG2_1394_PORT         0x8001
415#define ACPI_DBG2_USB_PORT          0x8002
416#define ACPI_DBG2_NET_PORT          0x8003
417
418/* Subtypes for PortSubtype field above */
419
420#define ACPI_DBG2_16550_COMPATIBLE  0x0000
421#define ACPI_DBG2_16550_SUBSET      0x0001
422
423#define ACPI_DBG2_1394_STANDARD     0x0000
424
425#define ACPI_DBG2_USB_XHCI          0x0000
426#define ACPI_DBG2_USB_EHCI          0x0001
427
428
429/*******************************************************************************
430 *
431 * DBGP - Debug Port table
432 *        Version 1
433 *
434 * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
435 *
436 ******************************************************************************/
437
438typedef struct acpi_table_dbgp
439{
440    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
441    UINT8                   Type;               /* 0=full 16550, 1=subset of 16550 */
442    UINT8                   Reserved[3];
443    ACPI_GENERIC_ADDRESS    DebugPort;
444
445} ACPI_TABLE_DBGP;
446
447
448/*******************************************************************************
449 *
450 * DMAR - DMA Remapping table
451 *        Version 1
452 *
453 * Conforms to "Intel Virtualization Technology for Directed I/O",
454 * Version 2.2, Sept. 2013
455 *
456 ******************************************************************************/
457
458typedef struct acpi_table_dmar
459{
460    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
461    UINT8                   Width;              /* Host Address Width */
462    UINT8                   Flags;
463    UINT8                   Reserved[10];
464
465} ACPI_TABLE_DMAR;
466
467/* Masks for Flags field above */
468
469#define ACPI_DMAR_INTR_REMAP        (1)
470
471
472/* DMAR subtable header */
473
474typedef struct acpi_dmar_header
475{
476    UINT16                  Type;
477    UINT16                  Length;
478
479} ACPI_DMAR_HEADER;
480
481/* Values for subtable type in ACPI_DMAR_HEADER */
482
483enum AcpiDmarType
484{
485    ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
486    ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
487    ACPI_DMAR_TYPE_ROOT_ATS             = 2,
488    ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
489    ACPI_DMAR_TYPE_NAMESPACE            = 4,
490    ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
491};
492
493
494/* DMAR Device Scope structure */
495
496typedef struct acpi_dmar_device_scope
497{
498    UINT8                   EntryType;
499    UINT8                   Length;
500    UINT16                  Reserved;
501    UINT8                   EnumerationId;
502    UINT8                   Bus;
503
504} ACPI_DMAR_DEVICE_SCOPE;
505
506/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
507
508enum AcpiDmarScopeType
509{
510    ACPI_DMAR_SCOPE_TYPE_NOT_USED       = 0,
511    ACPI_DMAR_SCOPE_TYPE_ENDPOINT       = 1,
512    ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
513    ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
514    ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
515    ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
516    ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
517};
518
519typedef struct acpi_dmar_pci_path
520{
521    UINT8                   Device;
522    UINT8                   Function;
523
524} ACPI_DMAR_PCI_PATH;
525
526
527/*
528 * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER
529 */
530
531/* 0: Hardware Unit Definition */
532
533typedef struct acpi_dmar_hardware_unit
534{
535    ACPI_DMAR_HEADER        Header;
536    UINT8                   Flags;
537    UINT8                   Reserved;
538    UINT16                  Segment;
539    UINT64                  Address;            /* Register Base Address */
540
541} ACPI_DMAR_HARDWARE_UNIT;
542
543/* Masks for Flags field above */
544
545#define ACPI_DMAR_INCLUDE_ALL       (1)
546
547
548/* 1: Reserved Memory Defininition */
549
550typedef struct acpi_dmar_reserved_memory
551{
552    ACPI_DMAR_HEADER        Header;
553    UINT16                  Reserved;
554    UINT16                  Segment;
555    UINT64                  BaseAddress;        /* 4K aligned base address */
556    UINT64                  EndAddress;         /* 4K aligned limit address */
557
558} ACPI_DMAR_RESERVED_MEMORY;
559
560/* Masks for Flags field above */
561
562#define ACPI_DMAR_ALLOW_ALL         (1)
563
564
565/* 2: Root Port ATS Capability Reporting Structure */
566
567typedef struct acpi_dmar_atsr
568{
569    ACPI_DMAR_HEADER        Header;
570    UINT8                   Flags;
571    UINT8                   Reserved;
572    UINT16                  Segment;
573
574} ACPI_DMAR_ATSR;
575
576/* Masks for Flags field above */
577
578#define ACPI_DMAR_ALL_PORTS         (1)
579
580
581/* 3: Remapping Hardware Static Affinity Structure */
582
583typedef struct acpi_dmar_rhsa
584{
585    ACPI_DMAR_HEADER        Header;
586    UINT32                  Reserved;
587    UINT64                  BaseAddress;
588    UINT32                  ProximityDomain;
589
590} ACPI_DMAR_RHSA;
591
592
593/* 4: ACPI Namespace Device Declaration Structure */
594
595typedef struct acpi_dmar_andd
596{
597    ACPI_DMAR_HEADER        Header;
598    UINT8                   Reserved[3];
599    UINT8                   DeviceNumber;
600    char                    DeviceName[1];
601
602} ACPI_DMAR_ANDD;
603
604
605/*******************************************************************************
606 *
607 * HPET - High Precision Event Timer table
608 *        Version 1
609 *
610 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
611 * Version 1.0a, October 2004
612 *
613 ******************************************************************************/
614
615typedef struct acpi_table_hpet
616{
617    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
618    UINT32                  Id;                 /* Hardware ID of event timer block */
619    ACPI_GENERIC_ADDRESS    Address;            /* Address of event timer block */
620    UINT8                   Sequence;           /* HPET sequence number */
621    UINT16                  MinimumTick;        /* Main counter min tick, periodic mode */
622    UINT8                   Flags;
623
624} ACPI_TABLE_HPET;
625
626/* Masks for Flags field above */
627
628#define ACPI_HPET_PAGE_PROTECT_MASK (3)
629
630/* Values for Page Protect flags */
631
632enum AcpiHpetPageProtect
633{
634    ACPI_HPET_NO_PAGE_PROTECT       = 0,
635    ACPI_HPET_PAGE_PROTECT4         = 1,
636    ACPI_HPET_PAGE_PROTECT64        = 2
637};
638
639
640/*******************************************************************************
641 *
642 * IBFT - Boot Firmware Table
643 *        Version 1
644 *
645 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
646 * Specification", Version 1.01, March 1, 2007
647 *
648 * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
649 * Therefore, it is not currently supported by the disassembler.
650 *
651 ******************************************************************************/
652
653typedef struct acpi_table_ibft
654{
655    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
656    UINT8                   Reserved[12];
657
658} ACPI_TABLE_IBFT;
659
660
661/* IBFT common subtable header */
662
663typedef struct acpi_ibft_header
664{
665    UINT8                   Type;
666    UINT8                   Version;
667    UINT16                  Length;
668    UINT8                   Index;
669    UINT8                   Flags;
670
671} ACPI_IBFT_HEADER;
672
673/* Values for Type field above */
674
675enum AcpiIbftType
676{
677    ACPI_IBFT_TYPE_NOT_USED         = 0,
678    ACPI_IBFT_TYPE_CONTROL          = 1,
679    ACPI_IBFT_TYPE_INITIATOR        = 2,
680    ACPI_IBFT_TYPE_NIC              = 3,
681    ACPI_IBFT_TYPE_TARGET           = 4,
682    ACPI_IBFT_TYPE_EXTENSIONS       = 5,
683    ACPI_IBFT_TYPE_RESERVED         = 6     /* 6 and greater are reserved */
684};
685
686
687/* IBFT subtables */
688
689typedef struct acpi_ibft_control
690{
691    ACPI_IBFT_HEADER        Header;
692    UINT16                  Extensions;
693    UINT16                  InitiatorOffset;
694    UINT16                  Nic0Offset;
695    UINT16                  Target0Offset;
696    UINT16                  Nic1Offset;
697    UINT16                  Target1Offset;
698
699} ACPI_IBFT_CONTROL;
700
701typedef struct acpi_ibft_initiator
702{
703    ACPI_IBFT_HEADER        Header;
704    UINT8                   SnsServer[16];
705    UINT8                   SlpServer[16];
706    UINT8                   PrimaryServer[16];
707    UINT8                   SecondaryServer[16];
708    UINT16                  NameLength;
709    UINT16                  NameOffset;
710
711} ACPI_IBFT_INITIATOR;
712
713typedef struct acpi_ibft_nic
714{
715    ACPI_IBFT_HEADER        Header;
716    UINT8                   IpAddress[16];
717    UINT8                   SubnetMaskPrefix;
718    UINT8                   Origin;
719    UINT8                   Gateway[16];
720    UINT8                   PrimaryDns[16];
721    UINT8                   SecondaryDns[16];
722    UINT8                   Dhcp[16];
723    UINT16                  Vlan;
724    UINT8                   MacAddress[6];
725    UINT16                  PciAddress;
726    UINT16                  NameLength;
727    UINT16                  NameOffset;
728
729} ACPI_IBFT_NIC;
730
731typedef struct acpi_ibft_target
732{
733    ACPI_IBFT_HEADER        Header;
734    UINT8                   TargetIpAddress[16];
735    UINT16                  TargetIpSocket;
736    UINT8                   TargetBootLun[8];
737    UINT8                   ChapType;
738    UINT8                   NicAssociation;
739    UINT16                  TargetNameLength;
740    UINT16                  TargetNameOffset;
741    UINT16                  ChapNameLength;
742    UINT16                  ChapNameOffset;
743    UINT16                  ChapSecretLength;
744    UINT16                  ChapSecretOffset;
745    UINT16                  ReverseChapNameLength;
746    UINT16                  ReverseChapNameOffset;
747    UINT16                  ReverseChapSecretLength;
748    UINT16                  ReverseChapSecretOffset;
749
750} ACPI_IBFT_TARGET;
751
752
753/*******************************************************************************
754 *
755 * IVRS - I/O Virtualization Reporting Structure
756 *        Version 1
757 *
758 * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
759 * Revision 1.26, February 2009.
760 *
761 ******************************************************************************/
762
763typedef struct acpi_table_ivrs
764{
765    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
766    UINT32                  Info;               /* Common virtualization info */
767    UINT64                  Reserved;
768
769} ACPI_TABLE_IVRS;
770
771/* Values for Info field above */
772
773#define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
774#define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
775#define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
776
777
778/* IVRS subtable header */
779
780typedef struct acpi_ivrs_header
781{
782    UINT8                   Type;               /* Subtable type */
783    UINT8                   Flags;
784    UINT16                  Length;             /* Subtable length */
785    UINT16                  DeviceId;           /* ID of IOMMU */
786
787} ACPI_IVRS_HEADER;
788
789/* Values for subtable Type above */
790
791enum AcpiIvrsType
792{
793    ACPI_IVRS_TYPE_HARDWARE         = 0x10,
794    ACPI_IVRS_TYPE_MEMORY1          = 0x20,
795    ACPI_IVRS_TYPE_MEMORY2          = 0x21,
796    ACPI_IVRS_TYPE_MEMORY3          = 0x22
797};
798
799/* Masks for Flags field above for IVHD subtable */
800
801#define ACPI_IVHD_TT_ENABLE         (1)
802#define ACPI_IVHD_PASS_PW           (1<<1)
803#define ACPI_IVHD_RES_PASS_PW       (1<<2)
804#define ACPI_IVHD_ISOC              (1<<3)
805#define ACPI_IVHD_IOTLB             (1<<4)
806
807/* Masks for Flags field above for IVMD subtable */
808
809#define ACPI_IVMD_UNITY             (1)
810#define ACPI_IVMD_READ              (1<<1)
811#define ACPI_IVMD_WRITE             (1<<2)
812#define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
813
814
815/*
816 * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
817 */
818
819/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
820
821typedef struct acpi_ivrs_hardware
822{
823    ACPI_IVRS_HEADER        Header;
824    UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
825    UINT64                  BaseAddress;        /* IOMMU control registers */
826    UINT16                  PciSegmentGroup;
827    UINT16                  Info;               /* MSI number and unit ID */
828    UINT32                  Reserved;
829
830} ACPI_IVRS_HARDWARE;
831
832/* Masks for Info field above */
833
834#define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
835#define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
836
837
838/*
839 * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
840 * Upper two bits of the Type field are the (encoded) length of the structure.
841 * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
842 * are reserved for future use but not defined.
843 */
844typedef struct acpi_ivrs_de_header
845{
846    UINT8                   Type;
847    UINT16                  Id;
848    UINT8                   DataSetting;
849
850} ACPI_IVRS_DE_HEADER;
851
852/* Length of device entry is in the top two bits of Type field above */
853
854#define ACPI_IVHD_ENTRY_LENGTH      0xC0
855
856/* Values for device entry Type field above */
857
858enum AcpiIvrsDeviceEntryType
859{
860    /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
861
862    ACPI_IVRS_TYPE_PAD4             = 0,
863    ACPI_IVRS_TYPE_ALL              = 1,
864    ACPI_IVRS_TYPE_SELECT           = 2,
865    ACPI_IVRS_TYPE_START            = 3,
866    ACPI_IVRS_TYPE_END              = 4,
867
868    /* 8-byte device entries */
869
870    ACPI_IVRS_TYPE_PAD8             = 64,
871    ACPI_IVRS_TYPE_NOT_USED         = 65,
872    ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
873    ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
874    ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
875    ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
876    ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
877};
878
879/* Values for Data field above */
880
881#define ACPI_IVHD_INIT_PASS         (1)
882#define ACPI_IVHD_EINT_PASS         (1<<1)
883#define ACPI_IVHD_NMI_PASS          (1<<2)
884#define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
885#define ACPI_IVHD_LINT0_PASS        (1<<6)
886#define ACPI_IVHD_LINT1_PASS        (1<<7)
887
888
889/* Types 0-4: 4-byte device entry */
890
891typedef struct acpi_ivrs_device4
892{
893    ACPI_IVRS_DE_HEADER     Header;
894
895} ACPI_IVRS_DEVICE4;
896
897/* Types 66-67: 8-byte device entry */
898
899typedef struct acpi_ivrs_device8a
900{
901    ACPI_IVRS_DE_HEADER     Header;
902    UINT8                   Reserved1;
903    UINT16                  UsedId;
904    UINT8                   Reserved2;
905
906} ACPI_IVRS_DEVICE8A;
907
908/* Types 70-71: 8-byte device entry */
909
910typedef struct acpi_ivrs_device8b
911{
912    ACPI_IVRS_DE_HEADER     Header;
913    UINT32                  ExtendedData;
914
915} ACPI_IVRS_DEVICE8B;
916
917/* Values for ExtendedData above */
918
919#define ACPI_IVHD_ATS_DISABLED      (1<<31)
920
921/* Type 72: 8-byte device entry */
922
923typedef struct acpi_ivrs_device8c
924{
925    ACPI_IVRS_DE_HEADER     Header;
926    UINT8                   Handle;
927    UINT16                  UsedId;
928    UINT8                   Variety;
929
930} ACPI_IVRS_DEVICE8C;
931
932/* Values for Variety field above */
933
934#define ACPI_IVHD_IOAPIC            1
935#define ACPI_IVHD_HPET              2
936
937
938/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
939
940typedef struct acpi_ivrs_memory
941{
942    ACPI_IVRS_HEADER        Header;
943    UINT16                  AuxData;
944    UINT64                  Reserved;
945    UINT64                  StartAddress;
946    UINT64                  MemoryLength;
947
948} ACPI_IVRS_MEMORY;
949
950
951/*******************************************************************************
952 *
953 * LPIT - Low Power Idle Table
954 *
955 * Conforms to "ACPI Low Power Idle Table (LPIT) and _LPD Proposal (DRAFT)"
956 *
957 ******************************************************************************/
958
959typedef struct acpi_table_lpit
960{
961    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
962
963} ACPI_TABLE_LPIT;
964
965
966/* LPIT subtable header */
967
968typedef struct acpi_lpit_header
969{
970    UINT32                  Type;               /* Subtable type */
971    UINT32                  Length;             /* Subtable length */
972    UINT16                  UniqueId;
973    UINT16                  Reserved;
974    UINT32                  Flags;
975
976} ACPI_LPIT_HEADER;
977
978/* Values for subtable Type above */
979
980enum AcpiLpitType
981{
982    ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
983    ACPI_LPIT_TYPE_SIMPLE_IO        = 0x01,
984    ACPI_LPIT_TYPE_RESERVED         = 0x02      /* 2 and above are reserved */
985};
986
987/* Masks for Flags field above  */
988
989#define ACPI_LPIT_STATE_DISABLED    (1)
990#define ACPI_LPIT_NO_COUNTER        (1<<1)
991
992/*
993 * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
994 */
995
996/* 0x00: Native C-state instruction based LPI structure */
997
998typedef struct acpi_lpit_native
999{
1000    ACPI_LPIT_HEADER        Header;
1001    ACPI_GENERIC_ADDRESS    EntryTrigger;
1002    UINT32                  Residency;
1003    UINT32                  Latency;
1004    ACPI_GENERIC_ADDRESS    ResidencyCounter;
1005    UINT64                  CounterFrequency;
1006
1007} ACPI_LPIT_NATIVE;
1008
1009
1010/* 0x01: Simple I/O based LPI structure */
1011
1012typedef struct acpi_lpit_io
1013{
1014    ACPI_LPIT_HEADER        Header;
1015    ACPI_GENERIC_ADDRESS    EntryTrigger;
1016    UINT32                  TriggerAction;
1017    UINT64                  TriggerValue;
1018    UINT64                  TriggerMask;
1019    ACPI_GENERIC_ADDRESS    MinimumIdleState;
1020    UINT32                  Residency;
1021    UINT32                  Latency;
1022    ACPI_GENERIC_ADDRESS    ResidencyCounter;
1023    UINT64                  CounterFrequency;
1024
1025} ACPI_LPIT_IO;
1026
1027
1028/*******************************************************************************
1029 *
1030 * MCFG - PCI Memory Mapped Configuration table and subtable
1031 *        Version 1
1032 *
1033 * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1034 *
1035 ******************************************************************************/
1036
1037typedef struct acpi_table_mcfg
1038{
1039    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1040    UINT8                   Reserved[8];
1041
1042} ACPI_TABLE_MCFG;
1043
1044
1045/* Subtable */
1046
1047typedef struct acpi_mcfg_allocation
1048{
1049    UINT64                  Address;            /* Base address, processor-relative */
1050    UINT16                  PciSegment;         /* PCI segment group number */
1051    UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1052    UINT8                   EndBusNumber;       /* Final PCI Bus number */
1053    UINT32                  Reserved;
1054
1055} ACPI_MCFG_ALLOCATION;
1056
1057
1058/*******************************************************************************
1059 *
1060 * MCHI - Management Controller Host Interface Table
1061 *        Version 1
1062 *
1063 * Conforms to "Management Component Transport Protocol (MCTP) Host
1064 * Interface Specification", Revision 1.0.0a, October 13, 2009
1065 *
1066 ******************************************************************************/
1067
1068typedef struct acpi_table_mchi
1069{
1070    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1071    UINT8                   InterfaceType;
1072    UINT8                   Protocol;
1073    UINT64                  ProtocolData;
1074    UINT8                   InterruptType;
1075    UINT8                   Gpe;
1076    UINT8                   PciDeviceFlag;
1077    UINT32                  GlobalInterrupt;
1078    ACPI_GENERIC_ADDRESS    ControlRegister;
1079    UINT8                   PciSegment;
1080    UINT8                   PciBus;
1081    UINT8                   PciDevice;
1082    UINT8                   PciFunction;
1083
1084} ACPI_TABLE_MCHI;
1085
1086
1087/*******************************************************************************
1088 *
1089 * MSDM - Microsoft Data Management table
1090 *
1091 * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1092 * November 29, 2011. Copyright 2011 Microsoft
1093 *
1094 ******************************************************************************/
1095
1096/* Basic MSDM table is only the common ACPI header */
1097
1098typedef struct acpi_table_msdm
1099{
1100    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1101
1102} ACPI_TABLE_MSDM;
1103
1104
1105/*******************************************************************************
1106 *
1107 * MTMR - MID Timer Table
1108 *        Version 1
1109 *
1110 * Conforms to "Simple Firmware Interface Specification",
1111 * Draft 0.8.2, Oct 19, 2010
1112 * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
1113 *
1114 ******************************************************************************/
1115
1116typedef struct acpi_table_mtmr
1117{
1118    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1119
1120} ACPI_TABLE_MTMR;
1121
1122/* MTMR entry */
1123
1124typedef struct acpi_mtmr_entry
1125{
1126    ACPI_GENERIC_ADDRESS    PhysicalAddress;
1127    UINT32                  Frequency;
1128    UINT32                  Irq;
1129
1130} ACPI_MTMR_ENTRY;
1131
1132
1133/*******************************************************************************
1134 *
1135 * SLIC - Software Licensing Description Table
1136 *
1137 * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1138 * November 29, 2011. Copyright 2011 Microsoft
1139 *
1140 ******************************************************************************/
1141
1142/* Basic SLIC table is only the common ACPI header */
1143
1144typedef struct acpi_table_slic
1145{
1146    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1147
1148} ACPI_TABLE_SLIC;
1149
1150
1151/*******************************************************************************
1152 *
1153 * SPCR - Serial Port Console Redirection table
1154 *        Version 1
1155 *
1156 * Conforms to "Serial Port Console Redirection Table",
1157 * Version 1.00, January 11, 2002
1158 *
1159 ******************************************************************************/
1160
1161typedef struct acpi_table_spcr
1162{
1163    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1164    UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
1165    UINT8                   Reserved[3];
1166    ACPI_GENERIC_ADDRESS    SerialPort;
1167    UINT8                   InterruptType;
1168    UINT8                   PcInterrupt;
1169    UINT32                  Interrupt;
1170    UINT8                   BaudRate;
1171    UINT8                   Parity;
1172    UINT8                   StopBits;
1173    UINT8                   FlowControl;
1174    UINT8                   TerminalType;
1175    UINT8                   Reserved1;
1176    UINT16                  PciDeviceId;
1177    UINT16                  PciVendorId;
1178    UINT8                   PciBus;
1179    UINT8                   PciDevice;
1180    UINT8                   PciFunction;
1181    UINT32                  PciFlags;
1182    UINT8                   PciSegment;
1183    UINT32                  Reserved2;
1184
1185} ACPI_TABLE_SPCR;
1186
1187/* Masks for PciFlags field above */
1188
1189#define ACPI_SPCR_DO_NOT_DISABLE    (1)
1190
1191
1192/*******************************************************************************
1193 *
1194 * SPMI - Server Platform Management Interface table
1195 *        Version 5
1196 *
1197 * Conforms to "Intelligent Platform Management Interface Specification
1198 * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
1199 * June 12, 2009 markup.
1200 *
1201 ******************************************************************************/
1202
1203typedef struct acpi_table_spmi
1204{
1205    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1206    UINT8                   InterfaceType;
1207    UINT8                   Reserved;           /* Must be 1 */
1208    UINT16                  SpecRevision;       /* Version of IPMI */
1209    UINT8                   InterruptType;
1210    UINT8                   GpeNumber;          /* GPE assigned */
1211    UINT8                   Reserved1;
1212    UINT8                   PciDeviceFlag;
1213    UINT32                  Interrupt;
1214    ACPI_GENERIC_ADDRESS    IpmiRegister;
1215    UINT8                   PciSegment;
1216    UINT8                   PciBus;
1217    UINT8                   PciDevice;
1218    UINT8                   PciFunction;
1219    UINT8                   Reserved2;
1220
1221} ACPI_TABLE_SPMI;
1222
1223/* Values for InterfaceType above */
1224
1225enum AcpiSpmiInterfaceTypes
1226{
1227    ACPI_SPMI_NOT_USED              = 0,
1228    ACPI_SPMI_KEYBOARD              = 1,
1229    ACPI_SPMI_SMI                   = 2,
1230    ACPI_SPMI_BLOCK_TRANSFER        = 3,
1231    ACPI_SPMI_SMBUS                 = 4,
1232    ACPI_SPMI_RESERVED              = 5         /* 5 and above are reserved */
1233};
1234
1235
1236/*******************************************************************************
1237 *
1238 * TCPA - Trusted Computing Platform Alliance table
1239 *        Version 1
1240 *
1241 * Conforms to "TCG PC Specific Implementation Specification",
1242 * Version 1.1, August 18, 2003
1243 *
1244 ******************************************************************************/
1245
1246typedef struct acpi_table_tcpa
1247{
1248    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1249    UINT16                  Reserved;
1250    UINT32                  MaxLogLength;       /* Maximum length for the event log area */
1251    UINT64                  LogAddress;         /* Address of the event log area */
1252
1253} ACPI_TABLE_TCPA;
1254
1255
1256/*******************************************************************************
1257 *
1258 * UEFI - UEFI Boot optimization Table
1259 *        Version 1
1260 *
1261 * Conforms to "Unified Extensible Firmware Interface Specification",
1262 * Version 2.3, May 8, 2009
1263 *
1264 ******************************************************************************/
1265
1266typedef struct acpi_table_uefi
1267{
1268    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1269    UINT8                   Identifier[16];     /* UUID identifier */
1270    UINT16                  DataOffset;         /* Offset of remaining data in table */
1271
1272} ACPI_TABLE_UEFI;
1273
1274
1275/*******************************************************************************
1276 *
1277 * VRTC - Virtual Real Time Clock Table
1278 *        Version 1
1279 *
1280 * Conforms to "Simple Firmware Interface Specification",
1281 * Draft 0.8.2, Oct 19, 2010
1282 * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table.
1283 *
1284 ******************************************************************************/
1285
1286typedef struct acpi_table_vrtc
1287{
1288    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1289
1290} ACPI_TABLE_VRTC;
1291
1292/* VRTC entry */
1293
1294typedef struct acpi_vrtc_entry
1295{
1296    ACPI_GENERIC_ADDRESS    PhysicalAddress;
1297    UINT32                  Irq;
1298
1299} ACPI_VRTC_ENTRY;
1300
1301
1302/*******************************************************************************
1303 *
1304 * WAET - Windows ACPI Emulated devices Table
1305 *        Version 1
1306 *
1307 * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
1308 *
1309 ******************************************************************************/
1310
1311typedef struct acpi_table_waet
1312{
1313    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1314    UINT32                  Flags;
1315
1316} ACPI_TABLE_WAET;
1317
1318/* Masks for Flags field above */
1319
1320#define ACPI_WAET_RTC_NO_ACK        (1)         /* RTC requires no int acknowledge */
1321#define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
1322
1323
1324/*******************************************************************************
1325 *
1326 * WDAT - Watchdog Action Table
1327 *        Version 1
1328 *
1329 * Conforms to "Hardware Watchdog Timers Design Specification",
1330 * Copyright 2006 Microsoft Corporation.
1331 *
1332 ******************************************************************************/
1333
1334typedef struct acpi_table_wdat
1335{
1336    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1337    UINT32                  HeaderLength;       /* Watchdog Header Length */
1338    UINT16                  PciSegment;         /* PCI Segment number */
1339    UINT8                   PciBus;             /* PCI Bus number */
1340    UINT8                   PciDevice;          /* PCI Device number */
1341    UINT8                   PciFunction;        /* PCI Function number */
1342    UINT8                   Reserved[3];
1343    UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
1344    UINT32                  MaxCount;           /* Maximum counter value supported */
1345    UINT32                  MinCount;           /* Minimum counter value */
1346    UINT8                   Flags;
1347    UINT8                   Reserved2[3];
1348    UINT32                  Entries;            /* Number of watchdog entries that follow */
1349
1350} ACPI_TABLE_WDAT;
1351
1352/* Masks for Flags field above */
1353
1354#define ACPI_WDAT_ENABLED           (1)
1355#define ACPI_WDAT_STOPPED           0x80
1356
1357
1358/* WDAT Instruction Entries (actions) */
1359
1360typedef struct acpi_wdat_entry
1361{
1362    UINT8                   Action;
1363    UINT8                   Instruction;
1364    UINT16                  Reserved;
1365    ACPI_GENERIC_ADDRESS    RegisterRegion;
1366    UINT32                  Value;              /* Value used with Read/Write register */
1367    UINT32                  Mask;               /* Bitmask required for this register instruction */
1368
1369} ACPI_WDAT_ENTRY;
1370
1371/* Values for Action field above */
1372
1373enum AcpiWdatActions
1374{
1375    ACPI_WDAT_RESET                 = 1,
1376    ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1377    ACPI_WDAT_GET_COUNTDOWN         = 5,
1378    ACPI_WDAT_SET_COUNTDOWN         = 6,
1379    ACPI_WDAT_GET_RUNNING_STATE     = 8,
1380    ACPI_WDAT_SET_RUNNING_STATE     = 9,
1381    ACPI_WDAT_GET_STOPPED_STATE     = 10,
1382    ACPI_WDAT_SET_STOPPED_STATE     = 11,
1383    ACPI_WDAT_GET_REBOOT            = 16,
1384    ACPI_WDAT_SET_REBOOT            = 17,
1385    ACPI_WDAT_GET_SHUTDOWN          = 18,
1386    ACPI_WDAT_SET_SHUTDOWN          = 19,
1387    ACPI_WDAT_GET_STATUS            = 32,
1388    ACPI_WDAT_SET_STATUS            = 33,
1389    ACPI_WDAT_ACTION_RESERVED       = 34    /* 34 and greater are reserved */
1390};
1391
1392/* Values for Instruction field above */
1393
1394enum AcpiWdatInstructions
1395{
1396    ACPI_WDAT_READ_VALUE            = 0,
1397    ACPI_WDAT_READ_COUNTDOWN        = 1,
1398    ACPI_WDAT_WRITE_VALUE           = 2,
1399    ACPI_WDAT_WRITE_COUNTDOWN       = 3,
1400    ACPI_WDAT_INSTRUCTION_RESERVED  = 4,    /* 4 and greater are reserved */
1401    ACPI_WDAT_PRESERVE_REGISTER     = 0x80  /* Except for this value */
1402};
1403
1404
1405/*******************************************************************************
1406 *
1407 * WDDT - Watchdog Descriptor Table
1408 *        Version 1
1409 *
1410 * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
1411 * Version 001, September 2002
1412 *
1413 ******************************************************************************/
1414
1415typedef struct acpi_table_wddt
1416{
1417    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1418    UINT16                  SpecVersion;
1419    UINT16                  TableVersion;
1420    UINT16                  PciVendorId;
1421    ACPI_GENERIC_ADDRESS    Address;
1422    UINT16                  MaxCount;           /* Maximum counter value supported */
1423    UINT16                  MinCount;           /* Minimum counter value supported */
1424    UINT16                  Period;
1425    UINT16                  Status;
1426    UINT16                  Capability;
1427
1428} ACPI_TABLE_WDDT;
1429
1430/* Flags for Status field above */
1431
1432#define ACPI_WDDT_AVAILABLE     (1)
1433#define ACPI_WDDT_ACTIVE        (1<<1)
1434#define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
1435#define ACPI_WDDT_USER_RESET    (1<<11)
1436#define ACPI_WDDT_WDT_RESET     (1<<12)
1437#define ACPI_WDDT_POWER_FAIL    (1<<13)
1438#define ACPI_WDDT_UNKNOWN_RESET (1<<14)
1439
1440/* Flags for Capability field above */
1441
1442#define ACPI_WDDT_AUTO_RESET    (1)
1443#define ACPI_WDDT_ALERT_SUPPORT (1<<1)
1444
1445
1446/*******************************************************************************
1447 *
1448 * WDRT - Watchdog Resource Table
1449 *        Version 1
1450 *
1451 * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
1452 * Version 1.01, August 28, 2006
1453 *
1454 ******************************************************************************/
1455
1456typedef struct acpi_table_wdrt
1457{
1458    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1459    ACPI_GENERIC_ADDRESS    ControlRegister;
1460    ACPI_GENERIC_ADDRESS    CountRegister;
1461    UINT16                  PciDeviceId;
1462    UINT16                  PciVendorId;
1463    UINT8                   PciBus;             /* PCI Bus number */
1464    UINT8                   PciDevice;          /* PCI Device number */
1465    UINT8                   PciFunction;        /* PCI Function number */
1466    UINT8                   PciSegment;         /* PCI Segment number */
1467    UINT16                  MaxCount;           /* Maximum counter value supported */
1468    UINT8                   Units;
1469
1470} ACPI_TABLE_WDRT;
1471
1472
1473/* Reset to default packing */
1474
1475#pragma pack()
1476
1477#endif /* __ACTBL2_H__ */
1478