xref: /illumos-gate/usr/src/uts/intel/sys/acpi/actbl2.h (revision 28e4da25922bdfc5cba7ab29f47de911bbd78009)
1 /******************************************************************************
2  *
3  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2011, 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_DBGP           "DBGP"      /* Debug Port table */
69 #define ACPI_SIG_DMAR           "DMAR"      /* DMA Remapping table */
70 #define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
71 #define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
72 #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
73 #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
74 #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
75 #define ACPI_SIG_SLIC           "SLIC"      /* Software Licensing Description Table */
76 #define ACPI_SIG_SPCR           "SPCR"      /* Serial Port Console Redirection table */
77 #define ACPI_SIG_SPMI           "SPMI"      /* Server Platform Management Interface table */
78 #define ACPI_SIG_TCPA           "TCPA"      /* Trusted Computing Platform Alliance table */
79 #define ACPI_SIG_UEFI           "UEFI"      /* Uefi Boot Optimization Table */
80 #define ACPI_SIG_WAET           "WAET"      /* Windows ACPI Emulated devices Table */
81 #define ACPI_SIG_WDAT           "WDAT"      /* Watchdog Action Table */
82 #define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
83 #define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
84 
85 #ifdef ACPI_UNDEFINED_TABLES
86 /*
87  * These tables have been seen in the field, but no definition has been found
88  */
89 #define ACPI_SIG_ATKG           "ATKG"
90 #define ACPI_SIG_GSCI           "GSCI"      /* GMCH SCI table */
91 #define ACPI_SIG_IEIT           "IEIT"
92 #endif
93 
94 /*
95  * All tables must be byte-packed to match the ACPI specification, since
96  * the tables are provided by the system BIOS.
97  */
98 #pragma pack(1)
99 
100 /*
101  * Note about bitfields: The UINT8 type is used for bitfields in ACPI tables.
102  * This is the only type that is even remotely portable. Anything else is not
103  * portable, so do not use any other bitfield types.
104  */
105 
106 
107 /*******************************************************************************
108  *
109  * ASF - Alert Standard Format table (Signature "ASF!")
110  *       Revision 0x10
111  *
112  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
113  *
114  ******************************************************************************/
115 
116 typedef struct acpi_table_asf
117 {
118     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
119 
120 } ACPI_TABLE_ASF;
121 
122 
123 /* ASF subtable header */
124 
125 typedef struct acpi_asf_header
126 {
127     UINT8                   Type;
128     UINT8                   Reserved;
129     UINT16                  Length;
130 
131 } ACPI_ASF_HEADER;
132 
133 
134 /* Values for Type field above */
135 
136 enum AcpiAsfType
137 {
138     ACPI_ASF_TYPE_INFO          = 0,
139     ACPI_ASF_TYPE_ALERT         = 1,
140     ACPI_ASF_TYPE_CONTROL       = 2,
141     ACPI_ASF_TYPE_BOOT          = 3,
142     ACPI_ASF_TYPE_ADDRESS       = 4,
143     ACPI_ASF_TYPE_RESERVED      = 5
144 };
145 
146 /*
147  * ASF subtables
148  */
149 
150 /* 0: ASF Information */
151 
152 typedef struct acpi_asf_info
153 {
154     ACPI_ASF_HEADER         Header;
155     UINT8                   MinResetValue;
156     UINT8                   MinPollInterval;
157     UINT16                  SystemId;
158     UINT32                  MfgId;
159     UINT8                   Flags;
160     UINT8                   Reserved2[3];
161 
162 } ACPI_ASF_INFO;
163 
164 /* Masks for Flags field above */
165 
166 #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
167 
168 
169 /* 1: ASF Alerts */
170 
171 typedef struct acpi_asf_alert
172 {
173     ACPI_ASF_HEADER         Header;
174     UINT8                   AssertMask;
175     UINT8                   DeassertMask;
176     UINT8                   Alerts;
177     UINT8                   DataLength;
178 
179 } ACPI_ASF_ALERT;
180 
181 typedef struct acpi_asf_alert_data
182 {
183     UINT8                   Address;
184     UINT8                   Command;
185     UINT8                   Mask;
186     UINT8                   Value;
187     UINT8                   SensorType;
188     UINT8                   Type;
189     UINT8                   Offset;
190     UINT8                   SourceType;
191     UINT8                   Severity;
192     UINT8                   SensorNumber;
193     UINT8                   Entity;
194     UINT8                   Instance;
195 
196 } ACPI_ASF_ALERT_DATA;
197 
198 
199 /* 2: ASF Remote Control */
200 
201 typedef struct acpi_asf_remote
202 {
203     ACPI_ASF_HEADER         Header;
204     UINT8                   Controls;
205     UINT8                   DataLength;
206     UINT16                  Reserved2;
207 
208 } ACPI_ASF_REMOTE;
209 
210 typedef struct acpi_asf_control_data
211 {
212     UINT8                   Function;
213     UINT8                   Address;
214     UINT8                   Command;
215     UINT8                   Value;
216 
217 } ACPI_ASF_CONTROL_DATA;
218 
219 
220 /* 3: ASF RMCP Boot Options */
221 
222 typedef struct acpi_asf_rmcp
223 {
224     ACPI_ASF_HEADER         Header;
225     UINT8                   Capabilities[7];
226     UINT8                   CompletionCode;
227     UINT32                  EnterpriseId;
228     UINT8                   Command;
229     UINT16                  Parameter;
230     UINT16                  BootOptions;
231     UINT16                  OemParameters;
232 
233 } ACPI_ASF_RMCP;
234 
235 
236 /* 4: ASF Address */
237 
238 typedef struct acpi_asf_address
239 {
240     ACPI_ASF_HEADER         Header;
241     UINT8                   EpromAddress;
242     UINT8                   Devices;
243 
244 } ACPI_ASF_ADDRESS;
245 
246 
247 /*******************************************************************************
248  *
249  * BOOT - Simple Boot Flag Table
250  *        Version 1
251  *
252  * Conforms to the "Simple Boot Flag Specification", Version 2.1
253  *
254  ******************************************************************************/
255 
256 typedef struct acpi_table_boot
257 {
258     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
259     UINT8                   CmosIndex;          /* Index in CMOS RAM for the boot register */
260     UINT8                   Reserved[3];
261 
262 } ACPI_TABLE_BOOT;
263 
264 
265 /*******************************************************************************
266  *
267  * DBGP - Debug Port table
268  *        Version 1
269  *
270  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
271  *
272  ******************************************************************************/
273 
274 typedef struct acpi_table_dbgp
275 {
276     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
277     UINT8                   Type;               /* 0=full 16550, 1=subset of 16550 */
278     UINT8                   Reserved[3];
279     ACPI_GENERIC_ADDRESS    DebugPort;
280 
281 } ACPI_TABLE_DBGP;
282 
283 
284 /*******************************************************************************
285  *
286  * DMAR - DMA Remapping table
287  *        Version 1
288  *
289  * Conforms to "Intel Virtualization Technology for Directed I/O",
290  * Version 1.2, Sept. 2008
291  *
292  ******************************************************************************/
293 
294 typedef struct acpi_table_dmar
295 {
296     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
297     UINT8                   Width;              /* Host Address Width */
298     UINT8                   Flags;
299     UINT8                   Reserved[10];
300 
301 } ACPI_TABLE_DMAR;
302 
303 /* Masks for Flags field above */
304 
305 #define ACPI_DMAR_INTR_REMAP        (1)
306 
307 
308 /* DMAR subtable header */
309 
310 typedef struct acpi_dmar_header
311 {
312     UINT16                  Type;
313     UINT16                  Length;
314 
315 } ACPI_DMAR_HEADER;
316 
317 /* Values for subtable type in ACPI_DMAR_HEADER */
318 
319 enum AcpiDmarType
320 {
321     ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
322     ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
323     ACPI_DMAR_TYPE_ATSR                 = 2,
324     ACPI_DMAR_HARDWARE_AFFINITY         = 3,
325     ACPI_DMAR_TYPE_RESERVED             = 4     /* 4 and greater are reserved */
326 };
327 
328 
329 /* DMAR Device Scope structure */
330 
331 typedef struct acpi_dmar_device_scope
332 {
333     UINT8                   EntryType;
334     UINT8                   Length;
335     UINT16                  Reserved;
336     UINT8                   EnumerationId;
337     UINT8                   Bus;
338 
339 } ACPI_DMAR_DEVICE_SCOPE;
340 
341 /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE */
342 
343 enum AcpiDmarScopeType
344 {
345     ACPI_DMAR_SCOPE_TYPE_NOT_USED       = 0,
346     ACPI_DMAR_SCOPE_TYPE_ENDPOINT       = 1,
347     ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
348     ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
349     ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
350     ACPI_DMAR_SCOPE_TYPE_RESERVED       = 5     /* 5 and greater are reserved */
351 };
352 
353 typedef struct acpi_dmar_pci_path
354 {
355     UINT8                   Device;
356     UINT8                   Function;
357 
358 } ACPI_DMAR_PCI_PATH;
359 
360 
361 /*
362  * DMAR Sub-tables, correspond to Type in ACPI_DMAR_HEADER
363  */
364 
365 /* 0: Hardware Unit Definition */
366 
367 typedef struct acpi_dmar_hardware_unit
368 {
369     ACPI_DMAR_HEADER        Header;
370     UINT8                   Flags;
371     UINT8                   Reserved;
372     UINT16                  Segment;
373     UINT64                  Address;            /* Register Base Address */
374 
375 } ACPI_DMAR_HARDWARE_UNIT;
376 
377 /* Masks for Flags field above */
378 
379 #define ACPI_DMAR_INCLUDE_ALL       (1)
380 
381 
382 /* 1: Reserved Memory Defininition */
383 
384 typedef struct acpi_dmar_reserved_memory
385 {
386     ACPI_DMAR_HEADER        Header;
387     UINT16                  Reserved;
388     UINT16                  Segment;
389     UINT64                  BaseAddress;        /* 4K aligned base address */
390     UINT64                  EndAddress;         /* 4K aligned limit address */
391 
392 } ACPI_DMAR_RESERVED_MEMORY;
393 
394 /* Masks for Flags field above */
395 
396 #define ACPI_DMAR_ALLOW_ALL         (1)
397 
398 
399 /* 2: Root Port ATS Capability Reporting Structure */
400 
401 typedef struct acpi_dmar_atsr
402 {
403     ACPI_DMAR_HEADER        Header;
404     UINT8                   Flags;
405     UINT8                   Reserved;
406     UINT16                  Segment;
407 
408 } ACPI_DMAR_ATSR;
409 
410 /* Masks for Flags field above */
411 
412 #define ACPI_DMAR_ALL_PORTS         (1)
413 
414 
415 /* 3: Remapping Hardware Static Affinity Structure */
416 
417 typedef struct acpi_dmar_rhsa
418 {
419     ACPI_DMAR_HEADER        Header;
420     UINT32                  Reserved;
421     UINT64                  BaseAddress;
422     UINT32                  ProximityDomain;
423 
424 } ACPI_DMAR_RHSA;
425 
426 
427 /*******************************************************************************
428  *
429  * HPET - High Precision Event Timer table
430  *        Version 1
431  *
432  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
433  * Version 1.0a, October 2004
434  *
435  ******************************************************************************/
436 
437 typedef struct acpi_table_hpet
438 {
439     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
440     UINT32                  Id;                 /* Hardware ID of event timer block */
441     ACPI_GENERIC_ADDRESS    Address;            /* Address of event timer block */
442     UINT8                   Sequence;           /* HPET sequence number */
443     UINT16                  MinimumTick;        /* Main counter min tick, periodic mode */
444     UINT8                   Flags;
445 
446 } ACPI_TABLE_HPET;
447 
448 /* Masks for Flags field above */
449 
450 #define ACPI_HPET_PAGE_PROTECT_MASK (3)
451 
452 /* Values for Page Protect flags */
453 
454 enum AcpiHpetPageProtect
455 {
456     ACPI_HPET_NO_PAGE_PROTECT       = 0,
457     ACPI_HPET_PAGE_PROTECT4         = 1,
458     ACPI_HPET_PAGE_PROTECT64        = 2
459 };
460 
461 
462 /*******************************************************************************
463  *
464  * IBFT - Boot Firmware Table
465  *        Version 1
466  *
467  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
468  * Specification", Version 1.01, March 1, 2007
469  *
470  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
471  * Therefore, it is not currently supported by the disassembler.
472  *
473  ******************************************************************************/
474 
475 typedef struct acpi_table_ibft
476 {
477     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
478     UINT8                   Reserved[12];
479 
480 } ACPI_TABLE_IBFT;
481 
482 
483 /* IBFT common subtable header */
484 
485 typedef struct acpi_ibft_header
486 {
487     UINT8                   Type;
488     UINT8                   Version;
489     UINT16                  Length;
490     UINT8                   Index;
491     UINT8                   Flags;
492 
493 } ACPI_IBFT_HEADER;
494 
495 /* Values for Type field above */
496 
497 enum AcpiIbftType
498 {
499     ACPI_IBFT_TYPE_NOT_USED         = 0,
500     ACPI_IBFT_TYPE_CONTROL          = 1,
501     ACPI_IBFT_TYPE_INITIATOR        = 2,
502     ACPI_IBFT_TYPE_NIC              = 3,
503     ACPI_IBFT_TYPE_TARGET           = 4,
504     ACPI_IBFT_TYPE_EXTENSIONS       = 5,
505     ACPI_IBFT_TYPE_RESERVED         = 6     /* 6 and greater are reserved */
506 };
507 
508 
509 /* IBFT subtables */
510 
511 typedef struct acpi_ibft_control
512 {
513     ACPI_IBFT_HEADER        Header;
514     UINT16                  Extensions;
515     UINT16                  InitiatorOffset;
516     UINT16                  Nic0Offset;
517     UINT16                  Target0Offset;
518     UINT16                  Nic1Offset;
519     UINT16                  Target1Offset;
520 
521 } ACPI_IBFT_CONTROL;
522 
523 typedef struct acpi_ibft_initiator
524 {
525     ACPI_IBFT_HEADER        Header;
526     UINT8                   SnsServer[16];
527     UINT8                   SlpServer[16];
528     UINT8                   PrimaryServer[16];
529     UINT8                   SecondaryServer[16];
530     UINT16                  NameLength;
531     UINT16                  NameOffset;
532 
533 } ACPI_IBFT_INITIATOR;
534 
535 typedef struct acpi_ibft_nic
536 {
537     ACPI_IBFT_HEADER        Header;
538     UINT8                   IpAddress[16];
539     UINT8                   SubnetMaskPrefix;
540     UINT8                   Origin;
541     UINT8                   Gateway[16];
542     UINT8                   PrimaryDns[16];
543     UINT8                   SecondaryDns[16];
544     UINT8                   Dhcp[16];
545     UINT16                  Vlan;
546     UINT8                   MacAddress[6];
547     UINT16                  PciAddress;
548     UINT16                  NameLength;
549     UINT16                  NameOffset;
550 
551 } ACPI_IBFT_NIC;
552 
553 typedef struct acpi_ibft_target
554 {
555     ACPI_IBFT_HEADER        Header;
556     UINT8                   TargetIpAddress[16];
557     UINT16                  TargetIpSocket;
558     UINT8                   TargetBootLun[8];
559     UINT8                   ChapType;
560     UINT8                   NicAssociation;
561     UINT16                  TargetNameLength;
562     UINT16                  TargetNameOffset;
563     UINT16                  ChapNameLength;
564     UINT16                  ChapNameOffset;
565     UINT16                  ChapSecretLength;
566     UINT16                  ChapSecretOffset;
567     UINT16                  ReverseChapNameLength;
568     UINT16                  ReverseChapNameOffset;
569     UINT16                  ReverseChapSecretLength;
570     UINT16                  ReverseChapSecretOffset;
571 
572 } ACPI_IBFT_TARGET;
573 
574 
575 /*******************************************************************************
576  *
577  * IVRS - I/O Virtualization Reporting Structure
578  *        Version 1
579  *
580  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
581  * Revision 1.26, February 2009.
582  *
583  ******************************************************************************/
584 
585 typedef struct acpi_table_ivrs
586 {
587     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
588     UINT32                  Info;               /* Common virtualization info */
589     UINT64                  Reserved;
590 
591 } ACPI_TABLE_IVRS;
592 
593 /* Values for Info field above */
594 
595 #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
596 #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
597 #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
598 
599 
600 /* IVRS subtable header */
601 
602 typedef struct acpi_ivrs_header
603 {
604     UINT8                   Type;               /* Subtable type */
605     UINT8                   Flags;
606     UINT16                  Length;             /* Subtable length */
607     UINT16                  DeviceId;           /* ID of IOMMU */
608 
609 } ACPI_IVRS_HEADER;
610 
611 /* Values for subtable Type above */
612 
613 enum AcpiIvrsType
614 {
615     ACPI_IVRS_TYPE_HARDWARE         = 0x10,
616     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
617     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
618     ACPI_IVRS_TYPE_MEMORY3          = 0x22
619 };
620 
621 /* Masks for Flags field above for IVHD subtable */
622 
623 #define ACPI_IVHD_TT_ENABLE         (1)
624 #define ACPI_IVHD_PASS_PW           (1<<1)
625 #define ACPI_IVHD_RES_PASS_PW       (1<<2)
626 #define ACPI_IVHD_ISOC              (1<<3)
627 #define ACPI_IVHD_IOTLB             (1<<4)
628 
629 /* Masks for Flags field above for IVMD subtable */
630 
631 #define ACPI_IVMD_UNITY             (1)
632 #define ACPI_IVMD_READ              (1<<1)
633 #define ACPI_IVMD_WRITE             (1<<2)
634 #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
635 
636 
637 /*
638  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
639  */
640 
641 /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
642 
643 typedef struct acpi_ivrs_hardware
644 {
645     ACPI_IVRS_HEADER        Header;
646     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
647     UINT64                  BaseAddress;        /* IOMMU control registers */
648     UINT16                  PciSegmentGroup;
649     UINT16                  Info;               /* MSI number and unit ID */
650     UINT32                  Reserved;
651 
652 } ACPI_IVRS_HARDWARE;
653 
654 /* Masks for Info field above */
655 
656 #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
657 #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
658 
659 
660 /*
661  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
662  * Upper two bits of the Type field are the (encoded) length of the structure.
663  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
664  * are reserved for future use but not defined.
665  */
666 typedef struct acpi_ivrs_de_header
667 {
668     UINT8                   Type;
669     UINT16                  Id;
670     UINT8                   DataSetting;
671 
672 } ACPI_IVRS_DE_HEADER;
673 
674 /* Length of device entry is in the top two bits of Type field above */
675 
676 #define ACPI_IVHD_ENTRY_LENGTH      0xC0
677 
678 /* Values for device entry Type field above */
679 
680 enum AcpiIvrsDeviceEntryType
681 {
682     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
683 
684     ACPI_IVRS_TYPE_PAD4             = 0,
685     ACPI_IVRS_TYPE_ALL              = 1,
686     ACPI_IVRS_TYPE_SELECT           = 2,
687     ACPI_IVRS_TYPE_START            = 3,
688     ACPI_IVRS_TYPE_END              = 4,
689 
690     /* 8-byte device entries */
691 
692     ACPI_IVRS_TYPE_PAD8             = 64,
693     ACPI_IVRS_TYPE_NOT_USED         = 65,
694     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
695     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
696     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
697     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
698     ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
699 };
700 
701 /* Values for Data field above */
702 
703 #define ACPI_IVHD_INIT_PASS         (1)
704 #define ACPI_IVHD_EINT_PASS         (1<<1)
705 #define ACPI_IVHD_NMI_PASS          (1<<2)
706 #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
707 #define ACPI_IVHD_LINT0_PASS        (1<<6)
708 #define ACPI_IVHD_LINT1_PASS        (1<<7)
709 
710 
711 /* Types 0-4: 4-byte device entry */
712 
713 typedef struct acpi_ivrs_device4
714 {
715     ACPI_IVRS_DE_HEADER     Header;
716 
717 } ACPI_IVRS_DEVICE4;
718 
719 /* Types 66-67: 8-byte device entry */
720 
721 typedef struct acpi_ivrs_device8a
722 {
723     ACPI_IVRS_DE_HEADER     Header;
724     UINT8                   Reserved1;
725     UINT16                  UsedId;
726     UINT8                   Reserved2;
727 
728 } ACPI_IVRS_DEVICE8A;
729 
730 /* Types 70-71: 8-byte device entry */
731 
732 typedef struct acpi_ivrs_device8b
733 {
734     ACPI_IVRS_DE_HEADER     Header;
735     UINT32                  ExtendedData;
736 
737 } ACPI_IVRS_DEVICE8B;
738 
739 /* Values for ExtendedData above */
740 
741 #define ACPI_IVHD_ATS_DISABLED      (1<<31)
742 
743 /* Type 72: 8-byte device entry */
744 
745 typedef struct acpi_ivrs_device8c
746 {
747     ACPI_IVRS_DE_HEADER     Header;
748     UINT8                   Handle;
749     UINT16                  UsedId;
750     UINT8                   Variety;
751 
752 } ACPI_IVRS_DEVICE8C;
753 
754 /* Values for Variety field above */
755 
756 #define ACPI_IVHD_IOAPIC            1
757 #define ACPI_IVHD_HPET              2
758 
759 
760 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
761 
762 typedef struct acpi_ivrs_memory
763 {
764     ACPI_IVRS_HEADER        Header;
765     UINT16                  AuxData;
766     UINT64                  Reserved;
767     UINT64                  StartAddress;
768     UINT64                  MemoryLength;
769 
770 } ACPI_IVRS_MEMORY;
771 
772 
773 /*******************************************************************************
774  *
775  * MCFG - PCI Memory Mapped Configuration table and sub-table
776  *        Version 1
777  *
778  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
779  *
780  ******************************************************************************/
781 
782 typedef struct acpi_table_mcfg
783 {
784     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
785     UINT8                   Reserved[8];
786 
787 } ACPI_TABLE_MCFG;
788 
789 
790 /* Subtable */
791 
792 typedef struct acpi_mcfg_allocation
793 {
794     UINT64                  Address;            /* Base address, processor-relative */
795     UINT16                  PciSegment;         /* PCI segment group number */
796     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
797     UINT8                   EndBusNumber;       /* Final PCI Bus number */
798     UINT32                  Reserved;
799 
800 } ACPI_MCFG_ALLOCATION;
801 
802 
803 /*******************************************************************************
804  *
805  * MCHI - Management Controller Host Interface Table
806  *        Version 1
807  *
808  * Conforms to "Management Component Transport Protocol (MCTP) Host
809  * Interface Specification", Revision 1.0.0a, October 13, 2009
810  *
811  ******************************************************************************/
812 
813 typedef struct acpi_table_mchi
814 {
815     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
816     UINT8                   InterfaceType;
817     UINT8                   Protocol;
818     UINT64                  ProtocolData;
819     UINT8                   InterruptType;
820     UINT8                   Gpe;
821     UINT8                   PciDeviceFlag;
822     UINT32                  GlobalInterrupt;
823     ACPI_GENERIC_ADDRESS    ControlRegister;
824     UINT8                   PciSegment;
825     UINT8                   PciBus;
826     UINT8                   PciDevice;
827     UINT8                   PciFunction;
828 
829 } ACPI_TABLE_MCHI;
830 
831 
832 /*******************************************************************************
833  *
834  * SLIC - Software Licensing Description Table
835  *        Version 1
836  *
837  * Conforms to "OEM Activation 2.0 for Windows Vista Operating Systems",
838  * Copyright 2006
839  *
840  ******************************************************************************/
841 
842 /* Basic SLIC table is only the common ACPI header */
843 
844 typedef struct acpi_table_slic
845 {
846     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
847 
848 } ACPI_TABLE_SLIC;
849 
850 
851 /* Common SLIC subtable header */
852 
853 typedef struct acpi_slic_header
854 {
855     UINT32                  Type;
856     UINT32                  Length;
857 
858 } ACPI_SLIC_HEADER;
859 
860 /* Values for Type field above */
861 
862 enum AcpiSlicType
863 {
864     ACPI_SLIC_TYPE_PUBLIC_KEY           = 0,
865     ACPI_SLIC_TYPE_WINDOWS_MARKER       = 1,
866     ACPI_SLIC_TYPE_RESERVED             = 2    /* 2 and greater are reserved */
867 };
868 
869 
870 /*
871  * SLIC Sub-tables, correspond to Type in ACPI_SLIC_HEADER
872  */
873 
874 /* 0: Public Key Structure */
875 
876 typedef struct acpi_slic_key
877 {
878     ACPI_SLIC_HEADER        Header;
879     UINT8                   KeyType;
880     UINT8                   Version;
881     UINT16                  Reserved;
882     UINT32                  Algorithm;
883     char                    Magic[4];
884     UINT32                  BitLength;
885     UINT32                  Exponent;
886     UINT8                   Modulus[128];
887 
888 } ACPI_SLIC_KEY;
889 
890 
891 /* 1: Windows Marker Structure */
892 
893 typedef struct acpi_slic_marker
894 {
895     ACPI_SLIC_HEADER        Header;
896     UINT32                  Version;
897     char                    OemId[ACPI_OEM_ID_SIZE];            /* ASCII OEM identification */
898     char                    OemTableId[ACPI_OEM_TABLE_ID_SIZE]; /* ASCII OEM table identification */
899     char                    WindowsFlag[8];
900     UINT32                  SlicVersion;
901     UINT8                   Reserved[16];
902     UINT8                   Signature[128];
903 
904 } ACPI_SLIC_MARKER;
905 
906 
907 /*******************************************************************************
908  *
909  * SPCR - Serial Port Console Redirection table
910  *        Version 1
911  *
912  * Conforms to "Serial Port Console Redirection Table",
913  * Version 1.00, January 11, 2002
914  *
915  ******************************************************************************/
916 
917 typedef struct acpi_table_spcr
918 {
919     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
920     UINT8                   InterfaceType;      /* 0=full 16550, 1=subset of 16550 */
921     UINT8                   Reserved[3];
922     ACPI_GENERIC_ADDRESS    SerialPort;
923     UINT8                   InterruptType;
924     UINT8                   PcInterrupt;
925     UINT32                  Interrupt;
926     UINT8                   BaudRate;
927     UINT8                   Parity;
928     UINT8                   StopBits;
929     UINT8                   FlowControl;
930     UINT8                   TerminalType;
931     UINT8                   Reserved1;
932     UINT16                  PciDeviceId;
933     UINT16                  PciVendorId;
934     UINT8                   PciBus;
935     UINT8                   PciDevice;
936     UINT8                   PciFunction;
937     UINT32                  PciFlags;
938     UINT8                   PciSegment;
939     UINT32                  Reserved2;
940 
941 } ACPI_TABLE_SPCR;
942 
943 /* Masks for PciFlags field above */
944 
945 #define ACPI_SPCR_DO_NOT_DISABLE    (1)
946 
947 
948 /*******************************************************************************
949  *
950  * SPMI - Server Platform Management Interface table
951  *        Version 5
952  *
953  * Conforms to "Intelligent Platform Management Interface Specification
954  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
955  * June 12, 2009 markup.
956  *
957  ******************************************************************************/
958 
959 typedef struct acpi_table_spmi
960 {
961     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
962     UINT8                   InterfaceType;
963     UINT8                   Reserved;           /* Must be 1 */
964     UINT16                  SpecRevision;       /* Version of IPMI */
965     UINT8                   InterruptType;
966     UINT8                   GpeNumber;          /* GPE assigned */
967     UINT8                   Reserved1;
968     UINT8                   PciDeviceFlag;
969     UINT32                  Interrupt;
970     ACPI_GENERIC_ADDRESS    IpmiRegister;
971     UINT8                   PciSegment;
972     UINT8                   PciBus;
973     UINT8                   PciDevice;
974     UINT8                   PciFunction;
975     UINT8                   Reserved2;
976 
977 } ACPI_TABLE_SPMI;
978 
979 /* Values for InterfaceType above */
980 
981 enum AcpiSpmiInterfaceTypes
982 {
983     ACPI_SPMI_NOT_USED              = 0,
984     ACPI_SPMI_KEYBOARD              = 1,
985     ACPI_SPMI_SMI                   = 2,
986     ACPI_SPMI_BLOCK_TRANSFER        = 3,
987     ACPI_SPMI_SMBUS                 = 4,
988     ACPI_SPMI_RESERVED              = 5         /* 5 and above are reserved */
989 };
990 
991 
992 /*******************************************************************************
993  *
994  * TCPA - Trusted Computing Platform Alliance table
995  *        Version 1
996  *
997  * Conforms to "TCG PC Specific Implementation Specification",
998  * Version 1.1, August 18, 2003
999  *
1000  ******************************************************************************/
1001 
1002 typedef struct acpi_table_tcpa
1003 {
1004     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1005     UINT16                  Reserved;
1006     UINT32                  MaxLogLength;       /* Maximum length for the event log area */
1007     UINT64                  LogAddress;         /* Address of the event log area */
1008 
1009 } ACPI_TABLE_TCPA;
1010 
1011 
1012 /*******************************************************************************
1013  *
1014  * UEFI - UEFI Boot optimization Table
1015  *        Version 1
1016  *
1017  * Conforms to "Unified Extensible Firmware Interface Specification",
1018  * Version 2.3, May 8, 2009
1019  *
1020  ******************************************************************************/
1021 
1022 typedef struct acpi_table_uefi
1023 {
1024     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1025     UINT8                   Identifier[16];     /* UUID identifier */
1026     UINT16                  DataOffset;         /* Offset of remaining data in table */
1027 
1028 } ACPI_TABLE_UEFI;
1029 
1030 
1031 /*******************************************************************************
1032  *
1033  * WAET - Windows ACPI Emulated devices Table
1034  *        Version 1
1035  *
1036  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
1037  *
1038  ******************************************************************************/
1039 
1040 typedef struct acpi_table_waet
1041 {
1042     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1043     UINT32                  Flags;
1044 
1045 } ACPI_TABLE_WAET;
1046 
1047 /* Masks for Flags field above */
1048 
1049 #define ACPI_WAET_RTC_NO_ACK        (1)         /* RTC requires no int acknowledge */
1050 #define ACPI_WAET_TIMER_ONE_READ    (1<<1)      /* PM timer requires only one read */
1051 
1052 
1053 /*******************************************************************************
1054  *
1055  * WDAT - Watchdog Action Table
1056  *        Version 1
1057  *
1058  * Conforms to "Hardware Watchdog Timers Design Specification",
1059  * Copyright 2006 Microsoft Corporation.
1060  *
1061  ******************************************************************************/
1062 
1063 typedef struct acpi_table_wdat
1064 {
1065     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1066     UINT32                  HeaderLength;       /* Watchdog Header Length */
1067     UINT16                  PciSegment;         /* PCI Segment number */
1068     UINT8                   PciBus;             /* PCI Bus number */
1069     UINT8                   PciDevice;          /* PCI Device number */
1070     UINT8                   PciFunction;        /* PCI Function number */
1071     UINT8                   Reserved[3];
1072     UINT32                  TimerPeriod;        /* Period of one timer count (msec) */
1073     UINT32                  MaxCount;           /* Maximum counter value supported */
1074     UINT32                  MinCount;           /* Minimum counter value */
1075     UINT8                   Flags;
1076     UINT8                   Reserved2[3];
1077     UINT32                  Entries;            /* Number of watchdog entries that follow */
1078 
1079 } ACPI_TABLE_WDAT;
1080 
1081 /* Masks for Flags field above */
1082 
1083 #define ACPI_WDAT_ENABLED           (1)
1084 #define ACPI_WDAT_STOPPED           0x80
1085 
1086 
1087 /* WDAT Instruction Entries (actions) */
1088 
1089 typedef struct acpi_wdat_entry
1090 {
1091     UINT8                   Action;
1092     UINT8                   Instruction;
1093     UINT16                  Reserved;
1094     ACPI_GENERIC_ADDRESS    RegisterRegion;
1095     UINT32                  Value;              /* Value used with Read/Write register */
1096     UINT32                  Mask;               /* Bitmask required for this register instruction */
1097 
1098 } ACPI_WDAT_ENTRY;
1099 
1100 /* Values for Action field above */
1101 
1102 enum AcpiWdatActions
1103 {
1104     ACPI_WDAT_RESET                 = 1,
1105     ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1106     ACPI_WDAT_GET_COUNTDOWN         = 5,
1107     ACPI_WDAT_SET_COUNTDOWN         = 6,
1108     ACPI_WDAT_GET_RUNNING_STATE     = 8,
1109     ACPI_WDAT_SET_RUNNING_STATE     = 9,
1110     ACPI_WDAT_GET_STOPPED_STATE     = 10,
1111     ACPI_WDAT_SET_STOPPED_STATE     = 11,
1112     ACPI_WDAT_GET_REBOOT            = 16,
1113     ACPI_WDAT_SET_REBOOT            = 17,
1114     ACPI_WDAT_GET_SHUTDOWN          = 18,
1115     ACPI_WDAT_SET_SHUTDOWN          = 19,
1116     ACPI_WDAT_GET_STATUS            = 32,
1117     ACPI_WDAT_SET_STATUS            = 33,
1118     ACPI_WDAT_ACTION_RESERVED       = 34    /* 34 and greater are reserved */
1119 };
1120 
1121 /* Values for Instruction field above */
1122 
1123 enum AcpiWdatInstructions
1124 {
1125     ACPI_WDAT_READ_VALUE            = 0,
1126     ACPI_WDAT_READ_COUNTDOWN        = 1,
1127     ACPI_WDAT_WRITE_VALUE           = 2,
1128     ACPI_WDAT_WRITE_COUNTDOWN       = 3,
1129     ACPI_WDAT_INSTRUCTION_RESERVED  = 4,    /* 4 and greater are reserved */
1130     ACPI_WDAT_PRESERVE_REGISTER     = 0x80  /* Except for this value */
1131 };
1132 
1133 
1134 /*******************************************************************************
1135  *
1136  * WDDT - Watchdog Descriptor Table
1137  *        Version 1
1138  *
1139  * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
1140  * Version 001, September 2002
1141  *
1142  ******************************************************************************/
1143 
1144 typedef struct acpi_table_wddt
1145 {
1146     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1147     UINT16                  SpecVersion;
1148     UINT16                  TableVersion;
1149     UINT16                  PciVendorId;
1150     ACPI_GENERIC_ADDRESS    Address;
1151     UINT16                  MaxCount;           /* Maximum counter value supported */
1152     UINT16                  MinCount;           /* Minimum counter value supported */
1153     UINT16                  Period;
1154     UINT16                  Status;
1155     UINT16                  Capability;
1156 
1157 } ACPI_TABLE_WDDT;
1158 
1159 /* Flags for Status field above */
1160 
1161 #define ACPI_WDDT_AVAILABLE     (1)
1162 #define ACPI_WDDT_ACTIVE        (1<<1)
1163 #define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
1164 #define ACPI_WDDT_USER_RESET    (1<<11)
1165 #define ACPI_WDDT_WDT_RESET     (1<<12)
1166 #define ACPI_WDDT_POWER_FAIL    (1<<13)
1167 #define ACPI_WDDT_UNKNOWN_RESET (1<<14)
1168 
1169 /* Flags for Capability field above */
1170 
1171 #define ACPI_WDDT_AUTO_RESET    (1)
1172 #define ACPI_WDDT_ALERT_SUPPORT (1<<1)
1173 
1174 
1175 /*******************************************************************************
1176  *
1177  * WDRT - Watchdog Resource Table
1178  *        Version 1
1179  *
1180  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
1181  * Version 1.01, August 28, 2006
1182  *
1183  ******************************************************************************/
1184 
1185 typedef struct acpi_table_wdrt
1186 {
1187     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1188     ACPI_GENERIC_ADDRESS    ControlRegister;
1189     ACPI_GENERIC_ADDRESS    CountRegister;
1190     UINT16                  PciDeviceId;
1191     UINT16                  PciVendorId;
1192     UINT8                   PciBus;             /* PCI Bus number */
1193     UINT8                   PciDevice;          /* PCI Device number */
1194     UINT8                   PciFunction;        /* PCI Function number */
1195     UINT8                   PciSegment;         /* PCI Segment number */
1196     UINT16                  MaxCount;           /* Maximum counter value supported */
1197     UINT8                   Units;
1198 
1199 } ACPI_TABLE_WDRT;
1200 
1201 
1202 /* Reset to default packing */
1203 
1204 #pragma pack()
1205 
1206 #endif /* __ACTBL2_H__ */
1207 
1208