]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blame - include/acpi/actbl2.h
ACPICA: Split large ACPI table header
[mirror_ubuntu-zesty-kernel.git] / include / acpi / actbl2.h
CommitLineData
b24aad44
BM
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__ */