xref: /linux/include/acpi/actbl2.h (revision a33f32244d8550da8b4a26e277ce07d5c6d158b5)
1 /******************************************************************************
2  *
3  * Name: actbl2.h - ACPI Specification Revision 2.0 Tables
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2010, 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  * Additional ACPI Tables (2)
50  *
51  * These tables are not consumed directly by the ACPICA subsystem, but are
52  * included here to support device drivers and the AML disassembler.
53  *
54  * The tables in this file are defined by third-party specifications, and are
55  * not defined directly by the ACPI specification itself.
56  *
57  ******************************************************************************/
58 
59 /*
60  * Values for description table header signatures for tables defined in this
61  * file. Useful because they make it more difficult to inadvertently type in
62  * the wrong signature.
63  */
64 #define ACPI_SIG_ASF            "ASF!"	/* Alert Standard Format table */
65 #define ACPI_SIG_BOOT           "BOOT"	/* Simple Boot Flag Table */
66 #define ACPI_SIG_DBGP           "DBGP"	/* Debug Port table */
67 #define ACPI_SIG_DMAR           "DMAR"	/* DMA Remapping table */
68 #define ACPI_SIG_HPET           "HPET"	/* High Precision Event Timer table */
69 #define ACPI_SIG_IBFT           "IBFT"	/* i_sCSI Boot Firmware Table */
70 #define ACPI_SIG_IVRS           "IVRS"	/* I/O Virtualization Reporting Structure */
71 #define ACPI_SIG_MCFG           "MCFG"	/* PCI Memory Mapped Configuration table */
72 #define ACPI_SIG_SLIC           "SLIC"	/* Software Licensing Description Table */
73 #define ACPI_SIG_SPCR           "SPCR"	/* Serial Port Console Redirection table */
74 #define ACPI_SIG_SPMI           "SPMI"	/* Server Platform Management Interface table */
75 #define ACPI_SIG_TCPA           "TCPA"	/* Trusted Computing Platform Alliance table */
76 #define ACPI_SIG_UEFI           "UEFI"	/* Uefi Boot Optimization Table */
77 #define ACPI_SIG_WAET           "WAET"	/* Windows ACPI Emulated devices Table */
78 #define ACPI_SIG_WDAT           "WDAT"	/* Watchdog Action Table */
79 #define ACPI_SIG_WDRT           "WDRT"	/* Watchdog Resource Table */
80 
81 /*
82  * All tables must be byte-packed to match the ACPI specification, since
83  * the tables are provided by the system BIOS.
84  */
85 #pragma pack(1)
86 
87 /*
88  * Note about bitfields: The u8 type is used for bitfields in ACPI tables.
89  * This is the only type that is even remotely portable. Anything else is not
90  * portable, so do not use any other bitfield types.
91  */
92 
93 /*******************************************************************************
94  *
95  * ASF - Alert Standard Format table (Signature "ASF!")
96  *       Revision 0x10
97  *
98  * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
99  *
100  ******************************************************************************/
101 
102 struct acpi_table_asf {
103 	struct acpi_table_header header;	/* Common ACPI table header */
104 };
105 
106 /* ASF subtable header */
107 
108 struct acpi_asf_header {
109 	u8 type;
110 	u8 reserved;
111 	u16 length;
112 };
113 
114 /* Values for Type field above */
115 
116 enum acpi_asf_type {
117 	ACPI_ASF_TYPE_INFO = 0,
118 	ACPI_ASF_TYPE_ALERT = 1,
119 	ACPI_ASF_TYPE_CONTROL = 2,
120 	ACPI_ASF_TYPE_BOOT = 3,
121 	ACPI_ASF_TYPE_ADDRESS = 4,
122 	ACPI_ASF_TYPE_RESERVED = 5
123 };
124 
125 /*
126  * ASF subtables
127  */
128 
129 /* 0: ASF Information */
130 
131 struct acpi_asf_info {
132 	struct acpi_asf_header header;
133 	u8 min_reset_value;
134 	u8 min_poll_interval;
135 	u16 system_id;
136 	u32 mfg_id;
137 	u8 flags;
138 	u8 reserved2[3];
139 };
140 
141 /* Masks for Flags field above */
142 
143 #define ACPI_ASF_SMBUS_PROTOCOLS    (1)
144 
145 /* 1: ASF Alerts */
146 
147 struct acpi_asf_alert {
148 	struct acpi_asf_header header;
149 	u8 assert_mask;
150 	u8 deassert_mask;
151 	u8 alerts;
152 	u8 data_length;
153 };
154 
155 struct acpi_asf_alert_data {
156 	u8 address;
157 	u8 command;
158 	u8 mask;
159 	u8 value;
160 	u8 sensor_type;
161 	u8 type;
162 	u8 offset;
163 	u8 source_type;
164 	u8 severity;
165 	u8 sensor_number;
166 	u8 entity;
167 	u8 instance;
168 };
169 
170 /* 2: ASF Remote Control */
171 
172 struct acpi_asf_remote {
173 	struct acpi_asf_header header;
174 	u8 controls;
175 	u8 data_length;
176 	u16 reserved2;
177 };
178 
179 struct acpi_asf_control_data {
180 	u8 function;
181 	u8 address;
182 	u8 command;
183 	u8 value;
184 };
185 
186 /* 3: ASF RMCP Boot Options */
187 
188 struct acpi_asf_rmcp {
189 	struct acpi_asf_header header;
190 	u8 capabilities[7];
191 	u8 completion_code;
192 	u32 enterprise_id;
193 	u8 command;
194 	u16 parameter;
195 	u16 boot_options;
196 	u16 oem_parameters;
197 };
198 
199 /* 4: ASF Address */
200 
201 struct acpi_asf_address {
202 	struct acpi_asf_header header;
203 	u8 eprom_address;
204 	u8 devices;
205 };
206 
207 /*******************************************************************************
208  *
209  * BOOT - Simple Boot Flag Table
210  *        Version 1
211  *
212  * Conforms to the "Simple Boot Flag Specification", Version 2.1
213  *
214  ******************************************************************************/
215 
216 struct acpi_table_boot {
217 	struct acpi_table_header header;	/* Common ACPI table header */
218 	u8 cmos_index;		/* Index in CMOS RAM for the boot register */
219 	u8 reserved[3];
220 };
221 
222 /*******************************************************************************
223  *
224  * DBGP - Debug Port table
225  *        Version 1
226  *
227  * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
228  *
229  ******************************************************************************/
230 
231 struct acpi_table_dbgp {
232 	struct acpi_table_header header;	/* Common ACPI table header */
233 	u8 type;		/* 0=full 16550, 1=subset of 16550 */
234 	u8 reserved[3];
235 	struct acpi_generic_address debug_port;
236 };
237 
238 /*******************************************************************************
239  *
240  * DMAR - DMA Remapping table
241  *        Version 1
242  *
243  * Conforms to "Intel Virtualization Technology for Directed I/O",
244  * Version 1.2, Sept. 2008
245  *
246  ******************************************************************************/
247 
248 struct acpi_table_dmar {
249 	struct acpi_table_header header;	/* Common ACPI table header */
250 	u8 width;		/* Host Address Width */
251 	u8 flags;
252 	u8 reserved[10];
253 };
254 
255 /* Masks for Flags field above */
256 
257 #define ACPI_DMAR_INTR_REMAP        (1)
258 
259 /* DMAR subtable header */
260 
261 struct acpi_dmar_header {
262 	u16 type;
263 	u16 length;
264 };
265 
266 /* Values for subtable type in struct acpi_dmar_header */
267 
268 enum acpi_dmar_type {
269 	ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
270 	ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
271 	ACPI_DMAR_TYPE_ATSR = 2,
272 	ACPI_DMAR_HARDWARE_AFFINITY = 3,
273 	ACPI_DMAR_TYPE_RESERVED = 4	/* 4 and greater are reserved */
274 };
275 
276 /* DMAR Device Scope structure */
277 
278 struct acpi_dmar_device_scope {
279 	u8 entry_type;
280 	u8 length;
281 	u16 reserved;
282 	u8 enumeration_id;
283 	u8 bus;
284 };
285 
286 /* Values for entry_type in struct acpi_dmar_device_scope */
287 
288 enum acpi_dmar_scope_type {
289 	ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
290 	ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
291 	ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
292 	ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
293 	ACPI_DMAR_SCOPE_TYPE_HPET = 4,
294 	ACPI_DMAR_SCOPE_TYPE_RESERVED = 5	/* 5 and greater are reserved */
295 };
296 
297 struct acpi_dmar_pci_path {
298 	u8 dev;
299 	u8 fn;
300 };
301 
302 /*
303  * DMAR Sub-tables, correspond to Type in struct acpi_dmar_header
304  */
305 
306 /* 0: Hardware Unit Definition */
307 
308 struct acpi_dmar_hardware_unit {
309 	struct acpi_dmar_header header;
310 	u8 flags;
311 	u8 reserved;
312 	u16 segment;
313 	u64 address;		/* Register Base Address */
314 };
315 
316 /* Masks for Flags field above */
317 
318 #define ACPI_DMAR_INCLUDE_ALL       (1)
319 
320 /* 1: Reserved Memory Defininition */
321 
322 struct acpi_dmar_reserved_memory {
323 	struct acpi_dmar_header header;
324 	u16 reserved;
325 	u16 segment;
326 	u64 base_address;	/* 4_k aligned base address */
327 	u64 end_address;	/* 4_k aligned limit address */
328 };
329 
330 /* Masks for Flags field above */
331 
332 #define ACPI_DMAR_ALLOW_ALL         (1)
333 
334 /* 2: Root Port ATS Capability Reporting Structure */
335 
336 struct acpi_dmar_atsr {
337 	struct acpi_dmar_header header;
338 	u8 flags;
339 	u8 reserved;
340 	u16 segment;
341 };
342 
343 /* Masks for Flags field above */
344 
345 #define ACPI_DMAR_ALL_PORTS         (1)
346 
347 /* 3: Remapping Hardware Static Affinity Structure */
348 
349 struct acpi_dmar_rhsa {
350 	struct acpi_dmar_header header;
351 	u32 reserved;
352 	u64 base_address;
353 	u32 proximity_domain;
354 };
355 
356 /*******************************************************************************
357  *
358  * HPET - High Precision Event Timer table
359  *        Version 1
360  *
361  * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
362  * Version 1.0a, October 2004
363  *
364  ******************************************************************************/
365 
366 struct acpi_table_hpet {
367 	struct acpi_table_header header;	/* Common ACPI table header */
368 	u32 id;			/* Hardware ID of event timer block */
369 	struct acpi_generic_address address;	/* Address of event timer block */
370 	u8 sequence;		/* HPET sequence number */
371 	u16 minimum_tick;	/* Main counter min tick, periodic mode */
372 	u8 flags;
373 };
374 
375 /* Masks for Flags field above */
376 
377 #define ACPI_HPET_PAGE_PROTECT_MASK (3)
378 
379 /* Values for Page Protect flags */
380 
381 enum acpi_hpet_page_protect {
382 	ACPI_HPET_NO_PAGE_PROTECT = 0,
383 	ACPI_HPET_PAGE_PROTECT4 = 1,
384 	ACPI_HPET_PAGE_PROTECT64 = 2
385 };
386 
387 /*******************************************************************************
388  *
389  * IBFT - Boot Firmware Table
390  *        Version 1
391  *
392  * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
393  * Specification", Version 1.01, March 1, 2007
394  *
395  * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
396  * Therefore, it is not currently supported by the disassembler.
397  *
398  ******************************************************************************/
399 
400 struct acpi_table_ibft {
401 	struct acpi_table_header header;	/* Common ACPI table header */
402 	u8 reserved[12];
403 };
404 
405 /* IBFT common subtable header */
406 
407 struct acpi_ibft_header {
408 	u8 type;
409 	u8 version;
410 	u16 length;
411 	u8 index;
412 	u8 flags;
413 };
414 
415 /* Values for Type field above */
416 
417 enum acpi_ibft_type {
418 	ACPI_IBFT_TYPE_NOT_USED = 0,
419 	ACPI_IBFT_TYPE_CONTROL = 1,
420 	ACPI_IBFT_TYPE_INITIATOR = 2,
421 	ACPI_IBFT_TYPE_NIC = 3,
422 	ACPI_IBFT_TYPE_TARGET = 4,
423 	ACPI_IBFT_TYPE_EXTENSIONS = 5,
424 	ACPI_IBFT_TYPE_RESERVED = 6	/* 6 and greater are reserved */
425 };
426 
427 /* IBFT subtables */
428 
429 struct acpi_ibft_control {
430 	struct acpi_ibft_header header;
431 	u16 extensions;
432 	u16 initiator_offset;
433 	u16 nic0_offset;
434 	u16 target0_offset;
435 	u16 nic1_offset;
436 	u16 target1_offset;
437 };
438 
439 struct acpi_ibft_initiator {
440 	struct acpi_ibft_header header;
441 	u8 sns_server[16];
442 	u8 slp_server[16];
443 	u8 primary_server[16];
444 	u8 secondary_server[16];
445 	u16 name_length;
446 	u16 name_offset;
447 };
448 
449 struct acpi_ibft_nic {
450 	struct acpi_ibft_header header;
451 	u8 ip_address[16];
452 	u8 subnet_mask_prefix;
453 	u8 origin;
454 	u8 gateway[16];
455 	u8 primary_dns[16];
456 	u8 secondary_dns[16];
457 	u8 dhcp[16];
458 	u16 vlan;
459 	u8 mac_address[6];
460 	u16 pci_address;
461 	u16 name_length;
462 	u16 name_offset;
463 };
464 
465 struct acpi_ibft_target {
466 	struct acpi_ibft_header header;
467 	u8 target_ip_address[16];
468 	u16 target_ip_socket;
469 	u8 target_boot_lun[8];
470 	u8 chap_type;
471 	u8 nic_association;
472 	u16 target_name_length;
473 	u16 target_name_offset;
474 	u16 chap_name_length;
475 	u16 chap_name_offset;
476 	u16 chap_secret_length;
477 	u16 chap_secret_offset;
478 	u16 reverse_chap_name_length;
479 	u16 reverse_chap_name_offset;
480 	u16 reverse_chap_secret_length;
481 	u16 reverse_chap_secret_offset;
482 };
483 
484 /*******************************************************************************
485  *
486  * IVRS - I/O Virtualization Reporting Structure
487  *        Version 1
488  *
489  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
490  * Revision 1.26, February 2009.
491  *
492  ******************************************************************************/
493 
494 struct acpi_table_ivrs {
495 	struct acpi_table_header header;	/* Common ACPI table header */
496 	u32 info;		/* Common virtualization info */
497 	u64 reserved;
498 };
499 
500 /* Values for Info field above */
501 
502 #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00	/* 7 bits, physical address size */
503 #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000	/* 7 bits, virtual address size */
504 #define ACPI_IVRS_ATS_RESERVED      0x00400000	/* ATS address translation range reserved */
505 
506 /* IVRS subtable header */
507 
508 struct acpi_ivrs_header {
509 	u8 type;		/* Subtable type */
510 	u8 flags;
511 	u16 length;		/* Subtable length */
512 	u16 device_id;		/* ID of IOMMU */
513 };
514 
515 /* Values for subtable Type above */
516 
517 enum acpi_ivrs_type {
518 	ACPI_IVRS_TYPE_HARDWARE = 0x10,
519 	ACPI_IVRS_TYPE_MEMORY1 = 0x20,
520 	ACPI_IVRS_TYPE_MEMORY2 = 0x21,
521 	ACPI_IVRS_TYPE_MEMORY3 = 0x22
522 };
523 
524 /* Masks for Flags field above for IVHD subtable */
525 
526 #define ACPI_IVHD_TT_ENABLE         (1)
527 #define ACPI_IVHD_PASS_PW           (1<<1)
528 #define ACPI_IVHD_RES_PASS_PW       (1<<2)
529 #define ACPI_IVHD_ISOC              (1<<3)
530 #define ACPI_IVHD_IOTLB             (1<<4)
531 
532 /* Masks for Flags field above for IVMD subtable */
533 
534 #define ACPI_IVMD_UNITY             (1)
535 #define ACPI_IVMD_READ              (1<<1)
536 #define ACPI_IVMD_WRITE             (1<<2)
537 #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
538 
539 /*
540  * IVRS subtables, correspond to Type in struct acpi_ivrs_header
541  */
542 
543 /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
544 
545 struct acpi_ivrs_hardware {
546 	struct acpi_ivrs_header header;
547 	u16 capability_offset;	/* Offset for IOMMU control fields */
548 	u64 base_address;	/* IOMMU control registers */
549 	u16 pci_segment_group;
550 	u16 info;		/* MSI number and unit ID */
551 	u32 reserved;
552 };
553 
554 /* Masks for Info field above */
555 
556 #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F	/* 5 bits, MSI message number */
557 #define ACPI_IVHD_UNIT_ID_MASK      0x1F00	/* 5 bits, unit_iD */
558 
559 /*
560  * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
561  * Upper two bits of the Type field are the (encoded) length of the structure.
562  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
563  * are reserved for future use but not defined.
564  */
565 struct acpi_ivrs_de_header {
566 	u8 type;
567 	u16 id;
568 	u8 data_setting;
569 };
570 
571 /* Length of device entry is in the top two bits of Type field above */
572 
573 #define ACPI_IVHD_ENTRY_LENGTH      0xC0
574 
575 /* Values for device entry Type field above */
576 
577 enum acpi_ivrs_device_entry_type {
578 	/* 4-byte device entries, all use struct acpi_ivrs_device4 */
579 
580 	ACPI_IVRS_TYPE_PAD4 = 0,
581 	ACPI_IVRS_TYPE_ALL = 1,
582 	ACPI_IVRS_TYPE_SELECT = 2,
583 	ACPI_IVRS_TYPE_START = 3,
584 	ACPI_IVRS_TYPE_END = 4,
585 
586 	/* 8-byte device entries */
587 
588 	ACPI_IVRS_TYPE_PAD8 = 64,
589 	ACPI_IVRS_TYPE_NOT_USED = 65,
590 	ACPI_IVRS_TYPE_ALIAS_SELECT = 66,	/* Uses struct acpi_ivrs_device8a */
591 	ACPI_IVRS_TYPE_ALIAS_START = 67,	/* Uses struct acpi_ivrs_device8a */
592 	ACPI_IVRS_TYPE_EXT_SELECT = 70,	/* Uses struct acpi_ivrs_device8b */
593 	ACPI_IVRS_TYPE_EXT_START = 71,	/* Uses struct acpi_ivrs_device8b */
594 	ACPI_IVRS_TYPE_SPECIAL = 72	/* Uses struct acpi_ivrs_device8c */
595 };
596 
597 /* Values for Data field above */
598 
599 #define ACPI_IVHD_INIT_PASS         (1)
600 #define ACPI_IVHD_EINT_PASS         (1<<1)
601 #define ACPI_IVHD_NMI_PASS          (1<<2)
602 #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
603 #define ACPI_IVHD_LINT0_PASS        (1<<6)
604 #define ACPI_IVHD_LINT1_PASS        (1<<7)
605 
606 /* Types 0-4: 4-byte device entry */
607 
608 struct acpi_ivrs_device4 {
609 	struct acpi_ivrs_de_header header;
610 };
611 
612 /* Types 66-67: 8-byte device entry */
613 
614 struct acpi_ivrs_device8a {
615 	struct acpi_ivrs_de_header header;
616 	u8 reserved1;
617 	u16 used_id;
618 	u8 reserved2;
619 };
620 
621 /* Types 70-71: 8-byte device entry */
622 
623 struct acpi_ivrs_device8b {
624 	struct acpi_ivrs_de_header header;
625 	u32 extended_data;
626 };
627 
628 /* Values for extended_data above */
629 
630 #define ACPI_IVHD_ATS_DISABLED      (1<<31)
631 
632 /* Type 72: 8-byte device entry */
633 
634 struct acpi_ivrs_device8c {
635 	struct acpi_ivrs_de_header header;
636 	u8 handle;
637 	u16 used_id;
638 	u8 variety;
639 };
640 
641 /* Values for Variety field above */
642 
643 #define ACPI_IVHD_IOAPIC            1
644 #define ACPI_IVHD_HPET              2
645 
646 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
647 
648 struct acpi_ivrs_memory {
649 	struct acpi_ivrs_header header;
650 	u16 aux_data;
651 	u64 reserved;
652 	u64 start_address;
653 	u64 memory_length;
654 };
655 
656 /*******************************************************************************
657  *
658  * MCFG - PCI Memory Mapped Configuration table and sub-table
659  *        Version 1
660  *
661  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
662  *
663  ******************************************************************************/
664 
665 struct acpi_table_mcfg {
666 	struct acpi_table_header header;	/* Common ACPI table header */
667 	u8 reserved[8];
668 };
669 
670 /* Subtable */
671 
672 struct acpi_mcfg_allocation {
673 	u64 address;		/* Base address, processor-relative */
674 	u16 pci_segment;	/* PCI segment group number */
675 	u8 start_bus_number;	/* Starting PCI Bus number */
676 	u8 end_bus_number;	/* Final PCI Bus number */
677 	u32 reserved;
678 };
679 
680 /*******************************************************************************
681  *
682  * SPCR - Serial Port Console Redirection table
683  *        Version 1
684  *
685  * Conforms to "Serial Port Console Redirection Table",
686  * Version 1.00, January 11, 2002
687  *
688  ******************************************************************************/
689 
690 struct acpi_table_spcr {
691 	struct acpi_table_header header;	/* Common ACPI table header */
692 	u8 interface_type;	/* 0=full 16550, 1=subset of 16550 */
693 	u8 reserved[3];
694 	struct acpi_generic_address serial_port;
695 	u8 interrupt_type;
696 	u8 pc_interrupt;
697 	u32 interrupt;
698 	u8 baud_rate;
699 	u8 parity;
700 	u8 stop_bits;
701 	u8 flow_control;
702 	u8 terminal_type;
703 	u8 reserved1;
704 	u16 pci_device_id;
705 	u16 pci_vendor_id;
706 	u8 pci_bus;
707 	u8 pci_device;
708 	u8 pci_function;
709 	u32 pci_flags;
710 	u8 pci_segment;
711 	u32 reserved2;
712 };
713 
714 /* Masks for pci_flags field above */
715 
716 #define ACPI_SPCR_DO_NOT_DISABLE    (1)
717 
718 /*******************************************************************************
719  *
720  * SPMI - Server Platform Management Interface table
721  *        Version 5
722  *
723  * Conforms to "Intelligent Platform Management Interface Specification
724  * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
725  * June 12, 2009 markup.
726  *
727  ******************************************************************************/
728 
729 struct acpi_table_spmi {
730 	struct acpi_table_header header;	/* Common ACPI table header */
731 	u8 interface_type;
732 	u8 reserved;		/* Must be 1 */
733 	u16 spec_revision;	/* Version of IPMI */
734 	u8 interrupt_type;
735 	u8 gpe_number;		/* GPE assigned */
736 	u8 reserved1;
737 	u8 pci_device_flag;
738 	u32 interrupt;
739 	struct acpi_generic_address ipmi_register;
740 	u8 pci_segment;
741 	u8 pci_bus;
742 	u8 pci_device;
743 	u8 pci_function;
744 	u8 reserved2;
745 };
746 
747 /* Values for interface_type above */
748 
749 enum acpi_spmi_interface_types {
750 	ACPI_SPMI_NOT_USED = 0,
751 	ACPI_SPMI_KEYBOARD = 1,
752 	ACPI_SPMI_SMI = 2,
753 	ACPI_SPMI_BLOCK_TRANSFER = 3,
754 	ACPI_SPMI_SMBUS = 4,
755 	ACPI_SPMI_RESERVED = 5	/* 5 and above are reserved */
756 };
757 
758 /*******************************************************************************
759  *
760  * TCPA - Trusted Computing Platform Alliance table
761  *        Version 1
762  *
763  * Conforms to "TCG PC Specific Implementation Specification",
764  * Version 1.1, August 18, 2003
765  *
766  ******************************************************************************/
767 
768 struct acpi_table_tcpa {
769 	struct acpi_table_header header;	/* Common ACPI table header */
770 	u16 reserved;
771 	u32 max_log_length;	/* Maximum length for the event log area */
772 	u64 log_address;	/* Address of the event log area */
773 };
774 
775 /*******************************************************************************
776  *
777  * UEFI - UEFI Boot optimization Table
778  *        Version 1
779  *
780  * Conforms to "Unified Extensible Firmware Interface Specification",
781  * Version 2.3, May 8, 2009
782  *
783  ******************************************************************************/
784 
785 struct acpi_table_uefi {
786 	struct acpi_table_header header;	/* Common ACPI table header */
787 	u8 identifier[16];	/* UUID identifier */
788 	u16 data_offset;	/* Offset of remaining data in table */
789 };
790 
791 /*******************************************************************************
792  *
793  * WAET - Windows ACPI Emulated devices Table
794  *        Version 1
795  *
796  * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
797  *
798  ******************************************************************************/
799 
800 struct acpi_table_waet {
801 	struct acpi_table_header header;	/* Common ACPI table header */
802 	u32 flags;
803 };
804 
805 /* Masks for Flags field above */
806 
807 #define ACPI_WAET_RTC_NO_ACK        (1)	/* RTC requires no int acknowledge */
808 #define ACPI_WAET_TIMER_ONE_READ    (1<<1)	/* PM timer requires only one read */
809 
810 /*******************************************************************************
811  *
812  * WDAT - Watchdog Action Table
813  *        Version 1
814  *
815  * Conforms to "Hardware Watchdog Timers Design Specification",
816  * Copyright 2006 Microsoft Corporation.
817  *
818  ******************************************************************************/
819 
820 struct acpi_table_wdat {
821 	struct acpi_table_header header;	/* Common ACPI table header */
822 	u32 header_length;	/* Watchdog Header Length */
823 	u16 pci_segment;	/* PCI Segment number */
824 	u8 pci_bus;		/* PCI Bus number */
825 	u8 pci_device;		/* PCI Device number */
826 	u8 pci_function;	/* PCI Function number */
827 	u8 reserved[3];
828 	u32 timer_period;	/* Period of one timer count (msec) */
829 	u32 max_count;		/* Maximum counter value supported */
830 	u32 min_count;		/* Minimum counter value */
831 	u8 flags;
832 	u8 reserved2[3];
833 	u32 entries;		/* Number of watchdog entries that follow */
834 };
835 
836 /* Masks for Flags field above */
837 
838 #define ACPI_WDAT_ENABLED           (1)
839 #define ACPI_WDAT_STOPPED           0x80
840 
841 /* WDAT Instruction Entries (actions) */
842 
843 struct acpi_wdat_entry {
844 	u8 action;
845 	u8 instruction;
846 	u16 reserved;
847 	struct acpi_generic_address register_region;
848 	u32 value;		/* Value used with Read/Write register */
849 	u32 mask;		/* Bitmask required for this register instruction */
850 };
851 
852 /* Values for Action field above */
853 
854 enum acpi_wdat_actions {
855 	ACPI_WDAT_RESET = 1,
856 	ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
857 	ACPI_WDAT_GET_COUNTDOWN = 5,
858 	ACPI_WDAT_SET_COUNTDOWN = 6,
859 	ACPI_WDAT_GET_RUNNING_STATE = 8,
860 	ACPI_WDAT_SET_RUNNING_STATE = 9,
861 	ACPI_WDAT_GET_STOPPED_STATE = 10,
862 	ACPI_WDAT_SET_STOPPED_STATE = 11,
863 	ACPI_WDAT_GET_REBOOT = 16,
864 	ACPI_WDAT_SET_REBOOT = 17,
865 	ACPI_WDAT_GET_SHUTDOWN = 18,
866 	ACPI_WDAT_SET_SHUTDOWN = 19,
867 	ACPI_WDAT_GET_STATUS = 32,
868 	ACPI_WDAT_SET_STATUS = 33,
869 	ACPI_WDAT_ACTION_RESERVED = 34	/* 34 and greater are reserved */
870 };
871 
872 /* Values for Instruction field above */
873 
874 enum acpi_wdat_instructions {
875 	ACPI_WDAT_READ_VALUE = 0,
876 	ACPI_WDAT_READ_COUNTDOWN = 1,
877 	ACPI_WDAT_WRITE_VALUE = 2,
878 	ACPI_WDAT_WRITE_COUNTDOWN = 3,
879 	ACPI_WDAT_INSTRUCTION_RESERVED = 4,	/* 4 and greater are reserved */
880 	ACPI_WDAT_PRESERVE_REGISTER = 0x80	/* Except for this value */
881 };
882 
883 /*******************************************************************************
884  *
885  * WDRT - Watchdog Resource Table
886  *        Version 1
887  *
888  * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
889  * Version 1.01, August 28, 2006
890  *
891  ******************************************************************************/
892 
893 struct acpi_table_wdrt {
894 	struct acpi_table_header header;	/* Common ACPI table header */
895 	struct acpi_generic_address control_register;
896 	struct acpi_generic_address count_register;
897 	u16 pci_device_id;
898 	u16 pci_vendor_id;
899 	u8 pci_bus;		/* PCI Bus number */
900 	u8 pci_device;		/* PCI Device number */
901 	u8 pci_function;	/* PCI Function number */
902 	u8 pci_segment;		/* PCI Segment number */
903 	u16 max_count;		/* Maximum counter value supported */
904 	u8 units;
905 };
906 
907 /* Reset to default packing */
908 
909 #pragma pack()
910 
911 #endif				/* __ACTBL2_H__ */
912