actbl2.h revision b24aad44438d5bc21cbbfb94a99d9bf710d8295b
1#ifndef __ACTBL2_H__
2#define __ACTBL2_H__
3
4/*******************************************************************************
5 *
6 * Additional ACPI Tables (2)
7 *
8 * These tables are not consumed directly by the ACPICA subsystem, but are
9 * included here to support device drivers and the AML disassembler.
10 *
11 * The tables in this file are defined by third-party specifications, and are
12 * not defined directly by the ACPI specification itself.
13 *
14 ******************************************************************************/
15
16/*
17 * Values for description table header signatures. Useful because they make
18 * it more difficult to inadvertently type in the wrong signature.
19 */
20#define ACPI_SIG_ASF            "ASF!"	/* Alert Standard Format table */
21#define ACPI_SIG_BOOT           "BOOT"	/* Simple Boot Flag Table */
22#define ACPI_SIG_DBGP           "DBGP"	/* Debug Port table */
23#define ACPI_SIG_DMAR           "DMAR"	/* DMA Remapping table */
24#define ACPI_SIG_HPET           "HPET"	/* High Precision Event Timer table */
25#define ACPI_SIG_IBFT           "IBFT"	/* i_sCSI Boot Firmware Table */
26#define ACPI_SIG_MCFG           "MCFG"	/* PCI Memory Mapped Configuration table */
27#define ACPI_SIG_SLIC           "SLIC"	/* Software Licensing Description Table */
28#define ACPI_SIG_SPCR           "SPCR"	/* Serial Port Console Redirection table */
29#define ACPI_SIG_SPMI           "SPMI"	/* Server Platform Management Interface table */
30#define ACPI_SIG_TCPA           "TCPA"	/* Trusted Computing Platform Alliance table */
31#define ACPI_SIG_UEFI           "UEFI"	/* Uefi Boot Optimization Table */
32#define ACPI_SIG_WDAT           "WDAT"	/* Watchdog Action Table */
33#define ACPI_SIG_WDRT           "WDRT"	/* Watchdog Resource Table */
34
35/*
36 * All tables must be byte-packed to match the ACPI specification, since
37 * the tables are provided by the system BIOS.
38 */
39#pragma pack(1)
40
41/*
42 * Note about bitfields: The u8 type is used for bitfields in ACPI tables.
43 * This is the only type that is even remotely portable. Anything else is not
44 * portable, so do not use any other bitfield types.
45 */
46
47/*******************************************************************************
48 *
49 * ASF - Alert Standard Format table (Signature "ASF!")
50 *
51 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
52 *
53 ******************************************************************************/
54
55struct acpi_table_asf {
56	struct acpi_table_header header;	/* Common ACPI table header */
57};
58
59/* ASF subtable header */
60
61struct acpi_asf_header {
62	u8 type;
63	u8 reserved;
64	u16 length;
65};
66
67/* Values for Type field above */
68
69enum acpi_asf_type {
70	ACPI_ASF_TYPE_INFO = 0,
71	ACPI_ASF_TYPE_ALERT = 1,
72	ACPI_ASF_TYPE_CONTROL = 2,
73	ACPI_ASF_TYPE_BOOT = 3,
74	ACPI_ASF_TYPE_ADDRESS = 4,
75	ACPI_ASF_TYPE_RESERVED = 5
76};
77
78/*
79 * ASF subtables
80 */
81
82/* 0: ASF Information */
83
84struct acpi_asf_info {
85	struct acpi_asf_header header;
86	u8 min_reset_value;
87	u8 min_poll_interval;
88	u16 system_id;
89	u32 mfg_id;
90	u8 flags;
91	u8 reserved2[3];
92};
93
94/* 1: ASF Alerts */
95
96struct acpi_asf_alert {
97	struct acpi_asf_header header;
98	u8 assert_mask;
99	u8 deassert_mask;
100	u8 alerts;
101	u8 data_length;
102};
103
104struct acpi_asf_alert_data {
105	u8 address;
106	u8 command;
107	u8 mask;
108	u8 value;
109	u8 sensor_type;
110	u8 type;
111	u8 offset;
112	u8 source_type;
113	u8 severity;
114	u8 sensor_number;
115	u8 entity;
116	u8 instance;
117};
118
119/* 2: ASF Remote Control */
120
121struct acpi_asf_remote {
122	struct acpi_asf_header header;
123	u8 controls;
124	u8 data_length;
125	u16 reserved2;
126};
127
128struct acpi_asf_control_data {
129	u8 function;
130	u8 address;
131	u8 command;
132	u8 value;
133};
134
135/* 3: ASF RMCP Boot Options */
136
137struct acpi_asf_rmcp {
138	struct acpi_asf_header header;
139	u8 capabilities[7];
140	u8 completion_code;
141	u32 enterprise_id;
142	u8 command;
143	u16 parameter;
144	u16 boot_options;
145	u16 oem_parameters;
146};
147
148/* 4: ASF Address */
149
150struct acpi_asf_address {
151	struct acpi_asf_header header;
152	u8 eprom_address;
153	u8 devices;
154};
155
156/*******************************************************************************
157 *
158 * BOOT - Simple Boot Flag Table
159 *
160 ******************************************************************************/
161
162struct acpi_table_boot {
163	struct acpi_table_header header;	/* Common ACPI table header */
164	u8 cmos_index;		/* Index in CMOS RAM for the boot register */
165	u8 reserved[3];
166};
167
168/*******************************************************************************
169 *
170 * DBGP - Debug Port table
171 *
172 ******************************************************************************/
173
174struct acpi_table_dbgp {
175	struct acpi_table_header header;	/* Common ACPI table header */
176	u8 type;		/* 0=full 16550, 1=subset of 16550 */
177	u8 reserved[3];
178	struct acpi_generic_address debug_port;
179};
180
181/*******************************************************************************
182 *
183 * DMAR - DMA Remapping table
184 *        From "Intel Virtualization Technology for Directed I/O", Sept. 2007
185 *
186 ******************************************************************************/
187
188struct acpi_table_dmar {
189	struct acpi_table_header header;	/* Common ACPI table header */
190	u8 width;		/* Host Address Width */
191	u8 flags;
192	u8 reserved[10];
193};
194
195/* Flags */
196
197#define ACPI_DMAR_INTR_REMAP        (1)
198
199/* DMAR subtable header */
200
201struct acpi_dmar_header {
202	u16 type;
203	u16 length;
204};
205
206/* Values for subtable type in struct acpi_dmar_header */
207
208enum acpi_dmar_type {
209	ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
210	ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
211	ACPI_DMAR_TYPE_ATSR = 2,
212	ACPI_DMAR_TYPE_RESERVED = 3	/* 3 and greater are reserved */
213};
214
215struct acpi_dmar_device_scope {
216	u8 entry_type;
217	u8 length;
218	u16 reserved;
219	u8 enumeration_id;
220	u8 bus;
221};
222
223/* Values for entry_type in struct acpi_dmar_device_scope */
224
225enum acpi_dmar_scope_type {
226	ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
227	ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
228	ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
229	ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
230	ACPI_DMAR_SCOPE_TYPE_HPET = 4,
231	ACPI_DMAR_SCOPE_TYPE_RESERVED = 5	/* 5 and greater are reserved */
232};
233
234struct acpi_dmar_pci_path {
235	u8 dev;
236	u8 fn;
237};
238
239/*
240 * DMAR Sub-tables, correspond to Type in struct acpi_dmar_header
241 */
242
243/* 0: Hardware Unit Definition */
244
245struct acpi_dmar_hardware_unit {
246	struct acpi_dmar_header header;
247	u8 flags;
248	u8 reserved;
249	u16 segment;
250	u64 address;		/* Register Base Address */
251};
252
253/* Flags */
254
255#define ACPI_DMAR_INCLUDE_ALL       (1)
256
257/* 1: Reserved Memory Defininition */
258
259struct acpi_dmar_reserved_memory {
260	struct acpi_dmar_header header;
261	u16 reserved;
262	u16 segment;
263	u64 base_address;	/* 4_k aligned base address */
264	u64 end_address;	/* 4_k aligned limit address */
265};
266
267/* Flags */
268
269#define ACPI_DMAR_ALLOW_ALL         (1)
270
271/* 2: Root Port ATS Capability Reporting Structure */
272
273struct acpi_dmar_atsr {
274	struct acpi_dmar_header header;
275	u8 flags;
276	u8 reserved;
277	u16 segment;
278};
279
280/* Flags */
281
282#define ACPI_DMAR_ALL_PORTS         (1)
283
284/*******************************************************************************
285 *
286 * HPET - High Precision Event Timer table
287 *
288 ******************************************************************************/
289
290struct acpi_table_hpet {
291	struct acpi_table_header header;	/* Common ACPI table header */
292	u32 id;			/* Hardware ID of event timer block */
293	struct acpi_generic_address address;	/* Address of event timer block */
294	u8 sequence;		/* HPET sequence number */
295	u16 minimum_tick;	/* Main counter min tick, periodic mode */
296	u8 flags;
297};
298
299/*! Flags */
300
301#define ACPI_HPET_PAGE_PROTECT      (1)	/* 00: No page protection */
302#define ACPI_HPET_PAGE_PROTECT_4    (1<<1)	/* 01: 4KB page protected */
303#define ACPI_HPET_PAGE_PROTECT_64   (1<<2)	/* 02: 64KB page protected */
304
305/*! [End] no source code translation !*/
306
307/*******************************************************************************
308 *
309 * IBFT - Boot Firmware Table
310 *
311 ******************************************************************************/
312
313struct acpi_table_ibft {
314	struct acpi_table_header header;	/* Common ACPI table header */
315	u8 reserved[12];
316};
317
318/* IBFT common subtable header */
319
320struct acpi_ibft_header {
321	u8 type;
322	u8 version;
323	u16 length;
324	u8 index;
325	u8 flags;
326};
327
328/* Values for Type field above */
329
330enum acpi_ibft_type {
331	ACPI_IBFT_TYPE_NOT_USED = 0,
332	ACPI_IBFT_TYPE_CONTROL = 1,
333	ACPI_IBFT_TYPE_INITIATOR = 2,
334	ACPI_IBFT_TYPE_NIC = 3,
335	ACPI_IBFT_TYPE_TARGET = 4,
336	ACPI_IBFT_TYPE_EXTENSIONS = 5,
337	ACPI_IBFT_TYPE_RESERVED = 6	/* 6 and greater are reserved */
338};
339
340/* IBFT subtables */
341
342struct acpi_ibft_control {
343	struct acpi_ibft_header header;
344	u16 extensions;
345	u16 initiator_offset;
346	u16 nic0_offset;
347	u16 target0_offset;
348	u16 nic1_offset;
349	u16 target1_offset;
350};
351
352struct acpi_ibft_initiator {
353	struct acpi_ibft_header header;
354	u8 sns_server[16];
355	u8 slp_server[16];
356	u8 primary_server[16];
357	u8 secondary_server[16];
358	u16 name_length;
359	u16 name_offset;
360};
361
362struct acpi_ibft_nic {
363	struct acpi_ibft_header header;
364	u8 ip_address[16];
365	u8 subnet_mask_prefix;
366	u8 origin;
367	u8 gateway[16];
368	u8 primary_dns[16];
369	u8 secondary_dns[16];
370	u8 dhcp[16];
371	u16 vlan;
372	u8 mac_address[6];
373	u16 pci_address;
374	u16 name_length;
375	u16 name_offset;
376};
377
378struct acpi_ibft_target {
379	struct acpi_ibft_header header;
380	u8 target_ip_address[16];
381	u16 target_ip_socket;
382	u8 target_boot_lun[8];
383	u8 chap_type;
384	u8 nic_association;
385	u16 target_name_length;
386	u16 target_name_offset;
387	u16 chap_name_length;
388	u16 chap_name_offset;
389	u16 chap_secret_length;
390	u16 chap_secret_offset;
391	u16 reverse_chap_name_length;
392	u16 reverse_chap_name_offset;
393	u16 reverse_chap_secret_length;
394	u16 reverse_chap_secret_offset;
395};
396
397/*******************************************************************************
398 *
399 * MCFG - PCI Memory Mapped Configuration table and sub-table
400 *
401 ******************************************************************************/
402
403struct acpi_table_mcfg {
404	struct acpi_table_header header;	/* Common ACPI table header */
405	u8 reserved[8];
406};
407
408/* Subtable */
409
410struct acpi_mcfg_allocation {
411	u64 address;		/* Base address, processor-relative */
412	u16 pci_segment;	/* PCI segment group number */
413	u8 start_bus_number;	/* Starting PCI Bus number */
414	u8 end_bus_number;	/* Final PCI Bus number */
415	u32 reserved;
416};
417
418/*******************************************************************************
419 *
420 * SPCR - Serial Port Console Redirection table
421 *
422 ******************************************************************************/
423
424struct acpi_table_spcr {
425	struct acpi_table_header header;	/* Common ACPI table header */
426	u8 interface_type;	/* 0=full 16550, 1=subset of 16550 */
427	u8 reserved[3];
428	struct acpi_generic_address serial_port;
429	u8 interrupt_type;
430	u8 pc_interrupt;
431	u32 interrupt;
432	u8 baud_rate;
433	u8 parity;
434	u8 stop_bits;
435	u8 flow_control;
436	u8 terminal_type;
437	u8 reserved1;
438	u16 pci_device_id;
439	u16 pci_vendor_id;
440	u8 pci_bus;
441	u8 pci_device;
442	u8 pci_function;
443	u32 pci_flags;
444	u8 pci_segment;
445	u32 reserved2;
446};
447
448/*******************************************************************************
449 *
450 * SPMI - Server Platform Management Interface table
451 *
452 ******************************************************************************/
453
454struct acpi_table_spmi {
455	struct acpi_table_header header;	/* Common ACPI table header */
456	u8 reserved;
457	u8 interface_type;
458	u16 spec_revision;	/* Version of IPMI */
459	u8 interrupt_type;
460	u8 gpe_number;		/* GPE assigned */
461	u8 reserved1;
462	u8 pci_device_flag;
463	u32 interrupt;
464	struct acpi_generic_address ipmi_register;
465	u8 pci_segment;
466	u8 pci_bus;
467	u8 pci_device;
468	u8 pci_function;
469};
470
471/*******************************************************************************
472 *
473 * TCPA - Trusted Computing Platform Alliance table
474 *
475 ******************************************************************************/
476
477struct acpi_table_tcpa {
478	struct acpi_table_header header;	/* Common ACPI table header */
479	u16 reserved;
480	u32 max_log_length;	/* Maximum length for the event log area */
481	u64 log_address;	/* Address of the event log area */
482};
483
484/*******************************************************************************
485 *
486 * UEFI - UEFI Boot optimization Table
487 *
488 ******************************************************************************/
489
490struct acpi_table_uefi {
491	struct acpi_table_header header;	/* Common ACPI table header */
492	u8 identifier[16];	/* UUID identifier */
493	u16 data_offset;	/* Offset of remaining data in table */
494	u8 data;
495};
496
497/*******************************************************************************
498 *
499 * WDAT - Watchdog Action Table
500 *
501 ******************************************************************************/
502
503struct acpi_table_wdat {
504	struct acpi_table_header header;	/* Common ACPI table header */
505	u32 header_length;	/* Watchdog Header Length */
506	u16 pci_segment;	/* PCI Segment number */
507	u8 pci_bus;		/* PCI Bus number */
508	u8 pci_device;		/* PCI Device number */
509	u8 pci_function;	/* PCI Function number */
510	u8 reserved[3];
511	u32 timer_period;	/* Period of one timer count (msec) */
512	u32 max_count;		/* Maximum counter value supported */
513	u32 min_count;		/* Minimum counter value */
514	u8 flags;
515	u8 reserved2[3];
516	u32 entries;		/* Number of watchdog entries that follow */
517};
518
519/* WDAT Instruction Entries (actions) */
520
521struct acpi_wdat_entry {
522	struct acpi_whea_header whea_header;	/* Common header for WHEA tables */
523};
524
525/* Values for Action field above */
526
527enum acpi_wdat_actions {
528	ACPI_WDAT_RESET = 1,
529	ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
530	ACPI_WDAT_GET_COUNTDOWN = 5,
531	ACPI_WDAT_SET_COUNTDOWN = 6,
532	ACPI_WDAT_GET_RUNNING_STATE = 8,
533	ACPI_WDAT_SET_RUNNING_STATE = 9,
534	ACPI_WDAT_GET_STOPPED_STATE = 10,
535	ACPI_WDAT_SET_STOPPED_STATE = 11,
536	ACPI_WDAT_GET_REBOOT = 16,
537	ACPI_WDAT_SET_REBOOT = 17,
538	ACPI_WDAT_GET_SHUTDOWN = 18,
539	ACPI_WDAT_SET_SHUTDOWN = 19,
540	ACPI_WDAT_GET_STATUS = 32,
541	ACPI_WDAT_SET_STATUS = 33,
542	ACPI_WDAT_ACTION_RESERVED = 34	/* 34 and greater are reserved */
543};
544
545/* Values for Instruction field above */
546
547enum acpi_wdat_instructions {
548	ACPI_WDAT_READ_VALUE = 0,
549	ACPI_WDAT_READ_COUNTDOWN = 1,
550	ACPI_WDAT_WRITE_VALUE = 2,
551	ACPI_WDAT_WRITE_COUNTDOWN = 3,
552	ACPI_WDAT_INSTRUCTION_RESERVED = 4,	/* 4 and greater are reserved */
553	ACPI_WDAT_PRESERVE_REGISTER = 0x80	/* Except for this value */
554};
555
556/*******************************************************************************
557 *
558 * WDRT - Watchdog Resource Table
559 *
560 ******************************************************************************/
561
562struct acpi_table_wdrt {
563	struct acpi_table_header header;	/* Common ACPI table header */
564	u32 header_length;	/* Watchdog Header Length */
565	u8 pci_segment;		/* PCI Segment number */
566	u8 pci_bus;		/* PCI Bus number */
567	u8 pci_device;		/* PCI Device number */
568	u8 pci_function;	/* PCI Function number */
569	u32 timer_period;	/* Period of one timer count (msec) */
570	u32 max_count;		/* Maximum counter value supported */
571	u32 min_count;		/* Minimum counter value */
572	u8 flags;
573	u8 reserved[3];
574	u32 entries;		/* Number of watchdog entries that follow */
575};
576
577/* Flags */
578
579#define ACPI_WDRT_TIMER_ENABLED     (1)	/* 00: Timer enabled */
580
581/* Reset to default packing */
582
583#pragma pack()
584
585#endif				/* __ACTBL2_H__ */
586