actbl2.h revision 267654
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
116typedef 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
125typedef 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
136enum 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
152typedef 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
171typedef 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
181typedef 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
201typedef 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
210typedef 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
222typedef 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
238typedef 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
256typedef 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
274typedef 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
294typedef 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
310typedef 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
319enum 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
331typedef 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
343enum 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
353typedef 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
367typedef 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
384typedef 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
401typedef 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
417typedef 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
437typedef 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
454enum 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
475typedef 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
485typedef 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
497enum 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
511typedef 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
523typedef 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
535typedef 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
553typedef 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
585typedef 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
602typedef 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
613enum 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
643typedef 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 */
666typedef 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
680enum 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
713typedef 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
721typedef 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
732typedef 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
745typedef 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
762typedef 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
782typedef 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
792typedef 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
813typedef 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
844typedef 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
853typedef struct acpi_slic_header
854{
855    UINT32                  Type;
856    UINT32                  Length;
857
858} ACPI_SLIC_HEADER;
859
860/* Values for Type field above */
861
862enum 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
876typedef 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
893typedef 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
917typedef 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
959typedef 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
981enum 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
1002typedef 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
1022typedef 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
1040typedef 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
1063typedef 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
1089typedef 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
1102enum 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
1123enum 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
1144typedef 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
1185typedef 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