Rev 6588 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6588 | serge | 1 | /****************************************************************************** |
2 | * |
||
3 | * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) |
||
4 | * |
||
5 | *****************************************************************************/ |
||
6 | |||
7 | /* |
||
7143 | serge | 8 | * Copyright (C) 2000 - 2016, Intel Corp. |
6588 | serge | 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 | * Generally, the tables in this file are defined by third-party specifications, |
||
55 | * and are 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_CSRT "CSRT" /* Core System Resource Table */ |
||
67 | #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ |
||
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_IORT "IORT" /* IO Remapping Table */ |
||
73 | #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ |
||
74 | #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ |
||
75 | #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ |
||
76 | #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ |
||
77 | #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ |
||
78 | #define ACPI_SIG_MTMR "MTMR" /* MID Timer table */ |
||
79 | #define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ |
||
80 | #define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ |
||
81 | #define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ |
||
82 | #define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ |
||
83 | #define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ |
||
84 | #define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ |
||
85 | #define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ |
||
86 | #define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ |
||
87 | #define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ |
||
88 | #define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ |
||
89 | #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ |
||
90 | |||
91 | #ifdef ACPI_UNDEFINED_TABLES |
||
92 | /* |
||
93 | * These tables have been seen in the field, but no definition has been found |
||
94 | */ |
||
95 | #define ACPI_SIG_ATKG "ATKG" |
||
96 | #define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ |
||
97 | #define ACPI_SIG_IEIT "IEIT" |
||
98 | #endif |
||
99 | |||
100 | /* |
||
101 | * All tables must be byte-packed to match the ACPI specification, since |
||
102 | * the tables are provided by the system BIOS. |
||
103 | */ |
||
104 | #pragma pack(1) |
||
105 | |||
106 | /* |
||
107 | * Note: C bitfields are not used for this reason: |
||
108 | * |
||
109 | * "Bitfields are great and easy to read, but unfortunately the C language |
||
110 | * does not specify the layout of bitfields in memory, which means they are |
||
111 | * essentially useless for dealing with packed data in on-disk formats or |
||
112 | * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, |
||
113 | * this decision was a design error in C. Ritchie could have picked an order |
||
114 | * and stuck with it." Norman Ramsey. |
||
115 | * See http://stackoverflow.com/a/1053662/41661 |
||
116 | */ |
||
117 | |||
118 | /******************************************************************************* |
||
119 | * |
||
120 | * ASF - Alert Standard Format table (Signature "ASF!") |
||
121 | * Revision 0x10 |
||
122 | * |
||
123 | * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 |
||
124 | * |
||
125 | ******************************************************************************/ |
||
126 | |||
127 | struct acpi_table_asf { |
||
128 | struct acpi_table_header header; /* Common ACPI table header */ |
||
129 | }; |
||
130 | |||
131 | /* ASF subtable header */ |
||
132 | |||
133 | struct acpi_asf_header { |
||
134 | u8 type; |
||
135 | u8 reserved; |
||
136 | u16 length; |
||
137 | }; |
||
138 | |||
139 | /* Values for Type field above */ |
||
140 | |||
141 | enum acpi_asf_type { |
||
142 | ACPI_ASF_TYPE_INFO = 0, |
||
143 | ACPI_ASF_TYPE_ALERT = 1, |
||
144 | ACPI_ASF_TYPE_CONTROL = 2, |
||
145 | ACPI_ASF_TYPE_BOOT = 3, |
||
146 | ACPI_ASF_TYPE_ADDRESS = 4, |
||
147 | ACPI_ASF_TYPE_RESERVED = 5 |
||
148 | }; |
||
149 | |||
150 | /* |
||
151 | * ASF subtables |
||
152 | */ |
||
153 | |||
154 | /* 0: ASF Information */ |
||
155 | |||
156 | struct acpi_asf_info { |
||
157 | struct acpi_asf_header header; |
||
158 | u8 min_reset_value; |
||
159 | u8 min_poll_interval; |
||
160 | u16 system_id; |
||
161 | u32 mfg_id; |
||
162 | u8 flags; |
||
163 | u8 reserved2[3]; |
||
164 | }; |
||
165 | |||
166 | /* Masks for Flags field above */ |
||
167 | |||
168 | #define ACPI_ASF_SMBUS_PROTOCOLS (1) |
||
169 | |||
170 | /* 1: ASF Alerts */ |
||
171 | |||
172 | struct acpi_asf_alert { |
||
173 | struct acpi_asf_header header; |
||
174 | u8 assert_mask; |
||
175 | u8 deassert_mask; |
||
176 | u8 alerts; |
||
177 | u8 data_length; |
||
178 | }; |
||
179 | |||
180 | struct acpi_asf_alert_data { |
||
181 | u8 address; |
||
182 | u8 command; |
||
183 | u8 mask; |
||
184 | u8 value; |
||
185 | u8 sensor_type; |
||
186 | u8 type; |
||
187 | u8 offset; |
||
188 | u8 source_type; |
||
189 | u8 severity; |
||
190 | u8 sensor_number; |
||
191 | u8 entity; |
||
192 | u8 instance; |
||
193 | }; |
||
194 | |||
195 | /* 2: ASF Remote Control */ |
||
196 | |||
197 | struct acpi_asf_remote { |
||
198 | struct acpi_asf_header header; |
||
199 | u8 controls; |
||
200 | u8 data_length; |
||
201 | u16 reserved2; |
||
202 | }; |
||
203 | |||
204 | struct acpi_asf_control_data { |
||
205 | u8 function; |
||
206 | u8 address; |
||
207 | u8 command; |
||
208 | u8 value; |
||
209 | }; |
||
210 | |||
211 | /* 3: ASF RMCP Boot Options */ |
||
212 | |||
213 | struct acpi_asf_rmcp { |
||
214 | struct acpi_asf_header header; |
||
215 | u8 capabilities[7]; |
||
216 | u8 completion_code; |
||
217 | u32 enterprise_id; |
||
218 | u8 command; |
||
219 | u16 parameter; |
||
220 | u16 boot_options; |
||
221 | u16 oem_parameters; |
||
222 | }; |
||
223 | |||
224 | /* 4: ASF Address */ |
||
225 | |||
226 | struct acpi_asf_address { |
||
227 | struct acpi_asf_header header; |
||
228 | u8 eprom_address; |
||
229 | u8 devices; |
||
230 | }; |
||
231 | |||
232 | /******************************************************************************* |
||
233 | * |
||
234 | * BOOT - Simple Boot Flag Table |
||
235 | * Version 1 |
||
236 | * |
||
237 | * Conforms to the "Simple Boot Flag Specification", Version 2.1 |
||
238 | * |
||
239 | ******************************************************************************/ |
||
240 | |||
241 | struct acpi_table_boot { |
||
242 | struct acpi_table_header header; /* Common ACPI table header */ |
||
243 | u8 cmos_index; /* Index in CMOS RAM for the boot register */ |
||
244 | u8 reserved[3]; |
||
245 | }; |
||
246 | |||
247 | /******************************************************************************* |
||
248 | * |
||
249 | * CSRT - Core System Resource Table |
||
250 | * Version 0 |
||
251 | * |
||
252 | * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 |
||
253 | * |
||
254 | ******************************************************************************/ |
||
255 | |||
256 | struct acpi_table_csrt { |
||
257 | struct acpi_table_header header; /* Common ACPI table header */ |
||
258 | }; |
||
259 | |||
260 | /* Resource Group subtable */ |
||
261 | |||
262 | struct acpi_csrt_group { |
||
263 | u32 length; |
||
264 | u32 vendor_id; |
||
265 | u32 subvendor_id; |
||
266 | u16 device_id; |
||
267 | u16 subdevice_id; |
||
268 | u16 revision; |
||
269 | u16 reserved; |
||
270 | u32 shared_info_length; |
||
271 | |||
272 | /* Shared data immediately follows (Length = shared_info_length) */ |
||
273 | }; |
||
274 | |||
275 | /* Shared Info subtable */ |
||
276 | |||
277 | struct acpi_csrt_shared_info { |
||
278 | u16 major_version; |
||
279 | u16 minor_version; |
||
280 | u32 mmio_base_low; |
||
281 | u32 mmio_base_high; |
||
282 | u32 gsi_interrupt; |
||
283 | u8 interrupt_polarity; |
||
284 | u8 interrupt_mode; |
||
285 | u8 num_channels; |
||
286 | u8 dma_address_width; |
||
287 | u16 base_request_line; |
||
288 | u16 num_handshake_signals; |
||
289 | u32 max_block_size; |
||
290 | |||
291 | /* Resource descriptors immediately follow (Length = Group length - shared_info_length) */ |
||
292 | }; |
||
293 | |||
294 | /* Resource Descriptor subtable */ |
||
295 | |||
296 | struct acpi_csrt_descriptor { |
||
297 | u32 length; |
||
298 | u16 type; |
||
299 | u16 subtype; |
||
300 | u32 uid; |
||
301 | |||
302 | /* Resource-specific information immediately follows */ |
||
303 | }; |
||
304 | |||
305 | /* Resource Types */ |
||
306 | |||
307 | #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 |
||
308 | #define ACPI_CSRT_TYPE_TIMER 0x0002 |
||
309 | #define ACPI_CSRT_TYPE_DMA 0x0003 |
||
310 | |||
311 | /* Resource Subtypes */ |
||
312 | |||
313 | #define ACPI_CSRT_XRUPT_LINE 0x0000 |
||
314 | #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 |
||
315 | #define ACPI_CSRT_TIMER 0x0000 |
||
316 | #define ACPI_CSRT_DMA_CHANNEL 0x0000 |
||
317 | #define ACPI_CSRT_DMA_CONTROLLER 0x0001 |
||
318 | |||
319 | /******************************************************************************* |
||
320 | * |
||
321 | * DBG2 - Debug Port Table 2 |
||
322 | * Version 0 (Both main table and subtables) |
||
323 | * |
||
324 | * Conforms to "Microsoft Debug Port Table 2 (DBG2)", May 22 2012. |
||
325 | * |
||
326 | ******************************************************************************/ |
||
327 | |||
328 | struct acpi_table_dbg2 { |
||
329 | struct acpi_table_header header; /* Common ACPI table header */ |
||
330 | u32 info_offset; |
||
331 | u32 info_count; |
||
332 | }; |
||
333 | |||
334 | struct acpi_dbg2_header { |
||
335 | u32 info_offset; |
||
336 | u32 info_count; |
||
337 | }; |
||
338 | |||
339 | /* Debug Device Information Subtable */ |
||
340 | |||
341 | struct acpi_dbg2_device { |
||
342 | u8 revision; |
||
343 | u16 length; |
||
344 | u8 register_count; /* Number of base_address registers */ |
||
345 | u16 namepath_length; |
||
346 | u16 namepath_offset; |
||
347 | u16 oem_data_length; |
||
348 | u16 oem_data_offset; |
||
349 | u16 port_type; |
||
350 | u16 port_subtype; |
||
351 | u16 reserved; |
||
352 | u16 base_address_offset; |
||
353 | u16 address_size_offset; |
||
354 | /* |
||
355 | * Data that follows: |
||
356 | * base_address (required) - Each in 12-byte Generic Address Structure format. |
||
357 | * address_size (required) - Array of u32 sizes corresponding to each base_address register. |
||
358 | * Namepath (required) - Null terminated string. Single dot if not supported. |
||
359 | * oem_data (optional) - Length is oem_data_length. |
||
360 | */ |
||
361 | }; |
||
362 | |||
363 | /* Types for port_type field above */ |
||
364 | |||
365 | #define ACPI_DBG2_SERIAL_PORT 0x8000 |
||
366 | #define ACPI_DBG2_1394_PORT 0x8001 |
||
367 | #define ACPI_DBG2_USB_PORT 0x8002 |
||
368 | #define ACPI_DBG2_NET_PORT 0x8003 |
||
369 | |||
370 | /* Subtypes for port_subtype field above */ |
||
371 | |||
372 | #define ACPI_DBG2_16550_COMPATIBLE 0x0000 |
||
373 | #define ACPI_DBG2_16550_SUBSET 0x0001 |
||
374 | |||
375 | #define ACPI_DBG2_1394_STANDARD 0x0000 |
||
376 | |||
377 | #define ACPI_DBG2_USB_XHCI 0x0000 |
||
378 | #define ACPI_DBG2_USB_EHCI 0x0001 |
||
379 | |||
380 | /******************************************************************************* |
||
381 | * |
||
382 | * DBGP - Debug Port table |
||
383 | * Version 1 |
||
384 | * |
||
385 | * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 |
||
386 | * |
||
387 | ******************************************************************************/ |
||
388 | |||
389 | struct acpi_table_dbgp { |
||
390 | struct acpi_table_header header; /* Common ACPI table header */ |
||
391 | u8 type; /* 0=full 16550, 1=subset of 16550 */ |
||
392 | u8 reserved[3]; |
||
393 | struct acpi_generic_address debug_port; |
||
394 | }; |
||
395 | |||
396 | /******************************************************************************* |
||
397 | * |
||
398 | * DMAR - DMA Remapping table |
||
399 | * Version 1 |
||
400 | * |
||
401 | * Conforms to "Intel Virtualization Technology for Directed I/O", |
||
402 | * Version 2.2, Sept. 2013 |
||
403 | * |
||
404 | ******************************************************************************/ |
||
405 | |||
406 | struct acpi_table_dmar { |
||
407 | struct acpi_table_header header; /* Common ACPI table header */ |
||
408 | u8 width; /* Host Address Width */ |
||
409 | u8 flags; |
||
410 | u8 reserved[10]; |
||
411 | }; |
||
412 | |||
413 | /* Masks for Flags field above */ |
||
414 | |||
415 | #define ACPI_DMAR_INTR_REMAP (1) |
||
416 | |||
417 | /* DMAR subtable header */ |
||
418 | |||
419 | struct acpi_dmar_header { |
||
420 | u16 type; |
||
421 | u16 length; |
||
422 | }; |
||
423 | |||
424 | /* Values for subtable type in struct acpi_dmar_header */ |
||
425 | |||
426 | enum acpi_dmar_type { |
||
427 | ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, |
||
428 | ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, |
||
429 | ACPI_DMAR_TYPE_ROOT_ATS = 2, |
||
430 | ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, |
||
431 | ACPI_DMAR_TYPE_NAMESPACE = 4, |
||
432 | ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ |
||
433 | }; |
||
434 | |||
435 | /* DMAR Device Scope structure */ |
||
436 | |||
437 | struct acpi_dmar_device_scope { |
||
438 | u8 entry_type; |
||
439 | u8 length; |
||
440 | u16 reserved; |
||
441 | u8 enumeration_id; |
||
442 | u8 bus; |
||
443 | }; |
||
444 | |||
445 | /* Values for entry_type in struct acpi_dmar_device_scope - device types */ |
||
446 | |||
447 | enum acpi_dmar_scope_type { |
||
448 | ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, |
||
449 | ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, |
||
450 | ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, |
||
451 | ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, |
||
452 | ACPI_DMAR_SCOPE_TYPE_HPET = 4, |
||
453 | ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, |
||
454 | ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ |
||
455 | }; |
||
456 | |||
457 | struct acpi_dmar_pci_path { |
||
458 | u8 device; |
||
459 | u8 function; |
||
460 | }; |
||
461 | |||
462 | /* |
||
463 | * DMAR Subtables, correspond to Type in struct acpi_dmar_header |
||
464 | */ |
||
465 | |||
466 | /* 0: Hardware Unit Definition */ |
||
467 | |||
468 | struct acpi_dmar_hardware_unit { |
||
469 | struct acpi_dmar_header header; |
||
470 | u8 flags; |
||
471 | u8 reserved; |
||
472 | u16 segment; |
||
473 | u64 address; /* Register Base Address */ |
||
474 | }; |
||
475 | |||
476 | /* Masks for Flags field above */ |
||
477 | |||
478 | #define ACPI_DMAR_INCLUDE_ALL (1) |
||
479 | |||
480 | /* 1: Reserved Memory Defininition */ |
||
481 | |||
482 | struct acpi_dmar_reserved_memory { |
||
483 | struct acpi_dmar_header header; |
||
484 | u16 reserved; |
||
485 | u16 segment; |
||
486 | u64 base_address; /* 4K aligned base address */ |
||
487 | u64 end_address; /* 4K aligned limit address */ |
||
488 | }; |
||
489 | |||
490 | /* Masks for Flags field above */ |
||
491 | |||
492 | #define ACPI_DMAR_ALLOW_ALL (1) |
||
493 | |||
494 | /* 2: Root Port ATS Capability Reporting Structure */ |
||
495 | |||
496 | struct acpi_dmar_atsr { |
||
497 | struct acpi_dmar_header header; |
||
498 | u8 flags; |
||
499 | u8 reserved; |
||
500 | u16 segment; |
||
501 | }; |
||
502 | |||
503 | /* Masks for Flags field above */ |
||
504 | |||
505 | #define ACPI_DMAR_ALL_PORTS (1) |
||
506 | |||
507 | /* 3: Remapping Hardware Static Affinity Structure */ |
||
508 | |||
509 | struct acpi_dmar_rhsa { |
||
510 | struct acpi_dmar_header header; |
||
511 | u32 reserved; |
||
512 | u64 base_address; |
||
513 | u32 proximity_domain; |
||
514 | }; |
||
515 | |||
516 | /* 4: ACPI Namespace Device Declaration Structure */ |
||
517 | |||
518 | struct acpi_dmar_andd { |
||
519 | struct acpi_dmar_header header; |
||
520 | u8 reserved[3]; |
||
521 | u8 device_number; |
||
522 | char device_name[1]; |
||
523 | }; |
||
524 | |||
525 | /******************************************************************************* |
||
526 | * |
||
527 | * HPET - High Precision Event Timer table |
||
528 | * Version 1 |
||
529 | * |
||
530 | * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", |
||
531 | * Version 1.0a, October 2004 |
||
532 | * |
||
533 | ******************************************************************************/ |
||
534 | |||
535 | struct acpi_table_hpet { |
||
536 | struct acpi_table_header header; /* Common ACPI table header */ |
||
537 | u32 id; /* Hardware ID of event timer block */ |
||
538 | struct acpi_generic_address address; /* Address of event timer block */ |
||
539 | u8 sequence; /* HPET sequence number */ |
||
540 | u16 minimum_tick; /* Main counter min tick, periodic mode */ |
||
541 | u8 flags; |
||
542 | }; |
||
543 | |||
544 | /* Masks for Flags field above */ |
||
545 | |||
546 | #define ACPI_HPET_PAGE_PROTECT_MASK (3) |
||
547 | |||
548 | /* Values for Page Protect flags */ |
||
549 | |||
550 | enum acpi_hpet_page_protect { |
||
551 | ACPI_HPET_NO_PAGE_PROTECT = 0, |
||
552 | ACPI_HPET_PAGE_PROTECT4 = 1, |
||
553 | ACPI_HPET_PAGE_PROTECT64 = 2 |
||
554 | }; |
||
555 | |||
556 | /******************************************************************************* |
||
557 | * |
||
558 | * IBFT - Boot Firmware Table |
||
559 | * Version 1 |
||
560 | * |
||
561 | * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b |
||
562 | * Specification", Version 1.01, March 1, 2007 |
||
563 | * |
||
564 | * Note: It appears that this table is not intended to appear in the RSDT/XSDT. |
||
565 | * Therefore, it is not currently supported by the disassembler. |
||
566 | * |
||
567 | ******************************************************************************/ |
||
568 | |||
569 | struct acpi_table_ibft { |
||
570 | struct acpi_table_header header; /* Common ACPI table header */ |
||
571 | u8 reserved[12]; |
||
572 | }; |
||
573 | |||
574 | /* IBFT common subtable header */ |
||
575 | |||
576 | struct acpi_ibft_header { |
||
577 | u8 type; |
||
578 | u8 version; |
||
579 | u16 length; |
||
580 | u8 index; |
||
581 | u8 flags; |
||
582 | }; |
||
583 | |||
584 | /* Values for Type field above */ |
||
585 | |||
586 | enum acpi_ibft_type { |
||
587 | ACPI_IBFT_TYPE_NOT_USED = 0, |
||
588 | ACPI_IBFT_TYPE_CONTROL = 1, |
||
589 | ACPI_IBFT_TYPE_INITIATOR = 2, |
||
590 | ACPI_IBFT_TYPE_NIC = 3, |
||
591 | ACPI_IBFT_TYPE_TARGET = 4, |
||
592 | ACPI_IBFT_TYPE_EXTENSIONS = 5, |
||
593 | ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ |
||
594 | }; |
||
595 | |||
596 | /* IBFT subtables */ |
||
597 | |||
598 | struct acpi_ibft_control { |
||
599 | struct acpi_ibft_header header; |
||
600 | u16 extensions; |
||
601 | u16 initiator_offset; |
||
602 | u16 nic0_offset; |
||
603 | u16 target0_offset; |
||
604 | u16 nic1_offset; |
||
605 | u16 target1_offset; |
||
606 | }; |
||
607 | |||
608 | struct acpi_ibft_initiator { |
||
609 | struct acpi_ibft_header header; |
||
610 | u8 sns_server[16]; |
||
611 | u8 slp_server[16]; |
||
612 | u8 primary_server[16]; |
||
613 | u8 secondary_server[16]; |
||
614 | u16 name_length; |
||
615 | u16 name_offset; |
||
616 | }; |
||
617 | |||
618 | struct acpi_ibft_nic { |
||
619 | struct acpi_ibft_header header; |
||
620 | u8 ip_address[16]; |
||
621 | u8 subnet_mask_prefix; |
||
622 | u8 origin; |
||
623 | u8 gateway[16]; |
||
624 | u8 primary_dns[16]; |
||
625 | u8 secondary_dns[16]; |
||
626 | u8 dhcp[16]; |
||
627 | u16 vlan; |
||
628 | u8 mac_address[6]; |
||
629 | u16 pci_address; |
||
630 | u16 name_length; |
||
631 | u16 name_offset; |
||
632 | }; |
||
633 | |||
634 | struct acpi_ibft_target { |
||
635 | struct acpi_ibft_header header; |
||
636 | u8 target_ip_address[16]; |
||
637 | u16 target_ip_socket; |
||
638 | u8 target_boot_lun[8]; |
||
639 | u8 chap_type; |
||
640 | u8 nic_association; |
||
641 | u16 target_name_length; |
||
642 | u16 target_name_offset; |
||
643 | u16 chap_name_length; |
||
644 | u16 chap_name_offset; |
||
645 | u16 chap_secret_length; |
||
646 | u16 chap_secret_offset; |
||
647 | u16 reverse_chap_name_length; |
||
648 | u16 reverse_chap_name_offset; |
||
649 | u16 reverse_chap_secret_length; |
||
650 | u16 reverse_chap_secret_offset; |
||
651 | }; |
||
652 | |||
653 | /******************************************************************************* |
||
654 | * |
||
655 | * IORT - IO Remapping Table |
||
656 | * |
||
657 | * Conforms to "IO Remapping Table System Software on ARM Platforms", |
||
658 | * Document number: ARM DEN 0049A, 2015 |
||
659 | * |
||
660 | ******************************************************************************/ |
||
661 | |||
662 | struct acpi_table_iort { |
||
663 | struct acpi_table_header header; |
||
664 | u32 node_count; |
||
665 | u32 node_offset; |
||
666 | u32 reserved; |
||
667 | }; |
||
668 | |||
669 | /* |
||
670 | * IORT subtables |
||
671 | */ |
||
672 | struct acpi_iort_node { |
||
673 | u8 type; |
||
674 | u16 length; |
||
675 | u8 revision; |
||
676 | u32 reserved; |
||
677 | u32 mapping_count; |
||
678 | u32 mapping_offset; |
||
679 | char node_data[1]; |
||
680 | }; |
||
681 | |||
682 | /* Values for subtable Type above */ |
||
683 | |||
684 | enum acpi_iort_node_type { |
||
685 | ACPI_IORT_NODE_ITS_GROUP = 0x00, |
||
686 | ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, |
||
687 | ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, |
||
688 | ACPI_IORT_NODE_SMMU = 0x03 |
||
689 | }; |
||
690 | |||
691 | struct acpi_iort_id_mapping { |
||
692 | u32 input_base; /* Lowest value in input range */ |
||
693 | u32 id_count; /* Number of IDs */ |
||
694 | u32 output_base; /* Lowest value in output range */ |
||
695 | u32 output_reference; /* A reference to the output node */ |
||
696 | u32 flags; |
||
697 | }; |
||
698 | |||
699 | /* Masks for Flags field above for IORT subtable */ |
||
700 | |||
701 | #define ACPI_IORT_ID_SINGLE_MAPPING (1) |
||
702 | |||
703 | struct acpi_iort_memory_access { |
||
704 | u32 cache_coherency; |
||
705 | u8 hints; |
||
706 | u16 reserved; |
||
707 | u8 memory_flags; |
||
708 | }; |
||
709 | |||
710 | /* Values for cache_coherency field above */ |
||
711 | |||
712 | #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ |
||
713 | #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ |
||
714 | |||
715 | /* Masks for Hints field above */ |
||
716 | |||
717 | #define ACPI_IORT_HT_TRANSIENT (1) |
||
718 | #define ACPI_IORT_HT_WRITE (1<<1) |
||
719 | #define ACPI_IORT_HT_READ (1<<2) |
||
720 | #define ACPI_IORT_HT_OVERRIDE (1<<3) |
||
721 | |||
722 | /* Masks for memory_flags field above */ |
||
723 | |||
724 | #define ACPI_IORT_MF_COHERENCY (1) |
||
725 | #define ACPI_IORT_MF_ATTRIBUTES (1<<1) |
||
726 | |||
727 | /* |
||
728 | * IORT node specific subtables |
||
729 | */ |
||
730 | struct acpi_iort_its_group { |
||
731 | u32 its_count; |
||
732 | u32 identifiers[1]; /* GIC ITS identifier arrary */ |
||
733 | }; |
||
734 | |||
735 | struct acpi_iort_named_component { |
||
736 | u32 node_flags; |
||
737 | u64 memory_properties; /* Memory access properties */ |
||
738 | u8 memory_address_limit; /* Memory address size limit */ |
||
739 | char device_name[1]; /* Path of namespace object */ |
||
740 | }; |
||
741 | |||
742 | struct acpi_iort_root_complex { |
||
743 | u64 memory_properties; /* Memory access properties */ |
||
744 | u32 ats_attribute; |
||
745 | u32 pci_segment_number; |
||
746 | }; |
||
747 | |||
748 | /* Values for ats_attribute field above */ |
||
749 | |||
750 | #define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ |
||
751 | #define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ |
||
752 | |||
753 | struct acpi_iort_smmu { |
||
754 | u64 base_address; /* SMMU base address */ |
||
755 | u64 span; /* Length of memory range */ |
||
756 | u32 model; |
||
757 | u32 flags; |
||
758 | u32 global_interrupt_offset; |
||
759 | u32 context_interrupt_count; |
||
760 | u32 context_interrupt_offset; |
||
761 | u32 pmu_interrupt_count; |
||
762 | u32 pmu_interrupt_offset; |
||
763 | u64 interrupts[1]; /* Interrupt array */ |
||
764 | }; |
||
765 | |||
766 | /* Values for Model field above */ |
||
767 | |||
768 | #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ |
||
769 | #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ |
||
770 | #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ |
||
771 | #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ |
||
772 | |||
773 | /* Masks for Flags field above */ |
||
774 | |||
775 | #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) |
||
776 | #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) |
||
777 | |||
778 | /******************************************************************************* |
||
779 | * |
||
780 | * IVRS - I/O Virtualization Reporting Structure |
||
781 | * Version 1 |
||
782 | * |
||
783 | * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", |
||
784 | * Revision 1.26, February 2009. |
||
785 | * |
||
786 | ******************************************************************************/ |
||
787 | |||
788 | struct acpi_table_ivrs { |
||
789 | struct acpi_table_header header; /* Common ACPI table header */ |
||
790 | u32 info; /* Common virtualization info */ |
||
791 | u64 reserved; |
||
792 | }; |
||
793 | |||
794 | /* Values for Info field above */ |
||
795 | |||
796 | #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ |
||
797 | #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ |
||
798 | #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ |
||
799 | |||
800 | /* IVRS subtable header */ |
||
801 | |||
802 | struct acpi_ivrs_header { |
||
803 | u8 type; /* Subtable type */ |
||
804 | u8 flags; |
||
805 | u16 length; /* Subtable length */ |
||
806 | u16 device_id; /* ID of IOMMU */ |
||
807 | }; |
||
808 | |||
809 | /* Values for subtable Type above */ |
||
810 | |||
811 | enum acpi_ivrs_type { |
||
812 | ACPI_IVRS_TYPE_HARDWARE = 0x10, |
||
813 | ACPI_IVRS_TYPE_MEMORY1 = 0x20, |
||
814 | ACPI_IVRS_TYPE_MEMORY2 = 0x21, |
||
815 | ACPI_IVRS_TYPE_MEMORY3 = 0x22 |
||
816 | }; |
||
817 | |||
818 | /* Masks for Flags field above for IVHD subtable */ |
||
819 | |||
820 | #define ACPI_IVHD_TT_ENABLE (1) |
||
821 | #define ACPI_IVHD_PASS_PW (1<<1) |
||
822 | #define ACPI_IVHD_RES_PASS_PW (1<<2) |
||
823 | #define ACPI_IVHD_ISOC (1<<3) |
||
824 | #define ACPI_IVHD_IOTLB (1<<4) |
||
825 | |||
826 | /* Masks for Flags field above for IVMD subtable */ |
||
827 | |||
828 | #define ACPI_IVMD_UNITY (1) |
||
829 | #define ACPI_IVMD_READ (1<<1) |
||
830 | #define ACPI_IVMD_WRITE (1<<2) |
||
831 | #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) |
||
832 | |||
833 | /* |
||
834 | * IVRS subtables, correspond to Type in struct acpi_ivrs_header |
||
835 | */ |
||
836 | |||
837 | /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ |
||
838 | |||
839 | struct acpi_ivrs_hardware { |
||
840 | struct acpi_ivrs_header header; |
||
841 | u16 capability_offset; /* Offset for IOMMU control fields */ |
||
842 | u64 base_address; /* IOMMU control registers */ |
||
843 | u16 pci_segment_group; |
||
844 | u16 info; /* MSI number and unit ID */ |
||
845 | u32 reserved; |
||
846 | }; |
||
847 | |||
848 | /* Masks for Info field above */ |
||
849 | |||
850 | #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ |
||
851 | #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, unit_ID */ |
||
852 | |||
853 | /* |
||
854 | * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure. |
||
855 | * Upper two bits of the Type field are the (encoded) length of the structure. |
||
856 | * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries |
||
857 | * are reserved for future use but not defined. |
||
858 | */ |
||
859 | struct acpi_ivrs_de_header { |
||
860 | u8 type; |
||
861 | u16 id; |
||
862 | u8 data_setting; |
||
863 | }; |
||
864 | |||
865 | /* Length of device entry is in the top two bits of Type field above */ |
||
866 | |||
867 | #define ACPI_IVHD_ENTRY_LENGTH 0xC0 |
||
868 | |||
869 | /* Values for device entry Type field above */ |
||
870 | |||
871 | enum acpi_ivrs_device_entry_type { |
||
872 | /* 4-byte device entries, all use struct acpi_ivrs_device4 */ |
||
873 | |||
874 | ACPI_IVRS_TYPE_PAD4 = 0, |
||
875 | ACPI_IVRS_TYPE_ALL = 1, |
||
876 | ACPI_IVRS_TYPE_SELECT = 2, |
||
877 | ACPI_IVRS_TYPE_START = 3, |
||
878 | ACPI_IVRS_TYPE_END = 4, |
||
879 | |||
880 | /* 8-byte device entries */ |
||
881 | |||
882 | ACPI_IVRS_TYPE_PAD8 = 64, |
||
883 | ACPI_IVRS_TYPE_NOT_USED = 65, |
||
884 | ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses struct acpi_ivrs_device8a */ |
||
885 | ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses struct acpi_ivrs_device8a */ |
||
886 | ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */ |
||
887 | ACPI_IVRS_TYPE_EXT_START = 71, /* Uses struct acpi_ivrs_device8b */ |
||
888 | ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses struct acpi_ivrs_device8c */ |
||
889 | }; |
||
890 | |||
891 | /* Values for Data field above */ |
||
892 | |||
893 | #define ACPI_IVHD_INIT_PASS (1) |
||
894 | #define ACPI_IVHD_EINT_PASS (1<<1) |
||
895 | #define ACPI_IVHD_NMI_PASS (1<<2) |
||
896 | #define ACPI_IVHD_SYSTEM_MGMT (3<<4) |
||
897 | #define ACPI_IVHD_LINT0_PASS (1<<6) |
||
898 | #define ACPI_IVHD_LINT1_PASS (1<<7) |
||
899 | |||
900 | /* Types 0-4: 4-byte device entry */ |
||
901 | |||
902 | struct acpi_ivrs_device4 { |
||
903 | struct acpi_ivrs_de_header header; |
||
904 | }; |
||
905 | |||
906 | /* Types 66-67: 8-byte device entry */ |
||
907 | |||
908 | struct acpi_ivrs_device8a { |
||
909 | struct acpi_ivrs_de_header header; |
||
910 | u8 reserved1; |
||
911 | u16 used_id; |
||
912 | u8 reserved2; |
||
913 | }; |
||
914 | |||
915 | /* Types 70-71: 8-byte device entry */ |
||
916 | |||
917 | struct acpi_ivrs_device8b { |
||
918 | struct acpi_ivrs_de_header header; |
||
919 | u32 extended_data; |
||
920 | }; |
||
921 | |||
922 | /* Values for extended_data above */ |
||
923 | |||
924 | #define ACPI_IVHD_ATS_DISABLED (1<<31) |
||
925 | |||
926 | /* Type 72: 8-byte device entry */ |
||
927 | |||
928 | struct acpi_ivrs_device8c { |
||
929 | struct acpi_ivrs_de_header header; |
||
930 | u8 handle; |
||
931 | u16 used_id; |
||
932 | u8 variety; |
||
933 | }; |
||
934 | |||
935 | /* Values for Variety field above */ |
||
936 | |||
937 | #define ACPI_IVHD_IOAPIC 1 |
||
938 | #define ACPI_IVHD_HPET 2 |
||
939 | |||
940 | /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ |
||
941 | |||
942 | struct acpi_ivrs_memory { |
||
943 | struct acpi_ivrs_header header; |
||
944 | u16 aux_data; |
||
945 | u64 reserved; |
||
946 | u64 start_address; |
||
947 | u64 memory_length; |
||
948 | }; |
||
949 | |||
950 | /******************************************************************************* |
||
951 | * |
||
952 | * LPIT - Low Power Idle Table |
||
953 | * |
||
954 | * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. |
||
955 | * |
||
956 | ******************************************************************************/ |
||
957 | |||
958 | struct acpi_table_lpit { |
||
959 | struct acpi_table_header header; /* Common ACPI table header */ |
||
960 | }; |
||
961 | |||
962 | /* LPIT subtable header */ |
||
963 | |||
964 | struct acpi_lpit_header { |
||
965 | u32 type; /* Subtable type */ |
||
966 | u32 length; /* Subtable length */ |
||
967 | u16 unique_id; |
||
968 | u16 reserved; |
||
969 | u32 flags; |
||
970 | }; |
||
971 | |||
972 | /* Values for subtable Type above */ |
||
973 | |||
974 | enum acpi_lpit_type { |
||
975 | ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, |
||
976 | ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ |
||
977 | }; |
||
978 | |||
979 | /* Masks for Flags field above */ |
||
980 | |||
981 | #define ACPI_LPIT_STATE_DISABLED (1) |
||
982 | #define ACPI_LPIT_NO_COUNTER (1<<1) |
||
983 | |||
984 | /* |
||
985 | * LPIT subtables, correspond to Type in struct acpi_lpit_header |
||
986 | */ |
||
987 | |||
988 | /* 0x00: Native C-state instruction based LPI structure */ |
||
989 | |||
990 | struct acpi_lpit_native { |
||
991 | struct acpi_lpit_header header; |
||
992 | struct acpi_generic_address entry_trigger; |
||
993 | u32 residency; |
||
994 | u32 latency; |
||
995 | struct acpi_generic_address residency_counter; |
||
996 | u64 counter_frequency; |
||
997 | }; |
||
998 | |||
999 | /******************************************************************************* |
||
1000 | * |
||
1001 | * MCFG - PCI Memory Mapped Configuration table and subtable |
||
1002 | * Version 1 |
||
1003 | * |
||
1004 | * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 |
||
1005 | * |
||
1006 | ******************************************************************************/ |
||
1007 | |||
1008 | struct acpi_table_mcfg { |
||
1009 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1010 | u8 reserved[8]; |
||
1011 | }; |
||
1012 | |||
1013 | /* Subtable */ |
||
1014 | |||
1015 | struct acpi_mcfg_allocation { |
||
1016 | u64 address; /* Base address, processor-relative */ |
||
1017 | u16 pci_segment; /* PCI segment group number */ |
||
1018 | u8 start_bus_number; /* Starting PCI Bus number */ |
||
1019 | u8 end_bus_number; /* Final PCI Bus number */ |
||
1020 | u32 reserved; |
||
1021 | }; |
||
1022 | |||
1023 | /******************************************************************************* |
||
1024 | * |
||
1025 | * MCHI - Management Controller Host Interface Table |
||
1026 | * Version 1 |
||
1027 | * |
||
1028 | * Conforms to "Management Component Transport Protocol (MCTP) Host |
||
1029 | * Interface Specification", Revision 1.0.0a, October 13, 2009 |
||
1030 | * |
||
1031 | ******************************************************************************/ |
||
1032 | |||
1033 | struct acpi_table_mchi { |
||
1034 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1035 | u8 interface_type; |
||
1036 | u8 protocol; |
||
1037 | u64 protocol_data; |
||
1038 | u8 interrupt_type; |
||
1039 | u8 gpe; |
||
1040 | u8 pci_device_flag; |
||
1041 | u32 global_interrupt; |
||
1042 | struct acpi_generic_address control_register; |
||
1043 | u8 pci_segment; |
||
1044 | u8 pci_bus; |
||
1045 | u8 pci_device; |
||
1046 | u8 pci_function; |
||
1047 | }; |
||
1048 | |||
1049 | /******************************************************************************* |
||
1050 | * |
||
1051 | * MSDM - Microsoft Data Management table |
||
1052 | * |
||
1053 | * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", |
||
1054 | * November 29, 2011. Copyright 2011 Microsoft |
||
1055 | * |
||
1056 | ******************************************************************************/ |
||
1057 | |||
1058 | /* Basic MSDM table is only the common ACPI header */ |
||
1059 | |||
1060 | struct acpi_table_msdm { |
||
1061 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1062 | }; |
||
1063 | |||
1064 | /******************************************************************************* |
||
1065 | * |
||
1066 | * MTMR - MID Timer Table |
||
1067 | * Version 1 |
||
1068 | * |
||
1069 | * Conforms to "Simple Firmware Interface Specification", |
||
1070 | * Draft 0.8.2, Oct 19, 2010 |
||
1071 | * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. |
||
1072 | * |
||
1073 | ******************************************************************************/ |
||
1074 | |||
1075 | struct acpi_table_mtmr { |
||
1076 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1077 | }; |
||
1078 | |||
1079 | /* MTMR entry */ |
||
1080 | |||
1081 | struct acpi_mtmr_entry { |
||
1082 | struct acpi_generic_address physical_address; |
||
1083 | u32 frequency; |
||
1084 | u32 irq; |
||
1085 | }; |
||
1086 | |||
1087 | /******************************************************************************* |
||
1088 | * |
||
1089 | * SLIC - Software Licensing Description Table |
||
1090 | * |
||
1091 | * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", |
||
1092 | * November 29, 2011. Copyright 2011 Microsoft |
||
1093 | * |
||
1094 | ******************************************************************************/ |
||
1095 | |||
1096 | /* Basic SLIC table is only the common ACPI header */ |
||
1097 | |||
1098 | struct acpi_table_slic { |
||
1099 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1100 | }; |
||
1101 | |||
1102 | /******************************************************************************* |
||
1103 | * |
||
1104 | * SPCR - Serial Port Console Redirection table |
||
1105 | * Version 1 |
||
1106 | * |
||
1107 | * Conforms to "Serial Port Console Redirection Table", |
||
1108 | * Version 1.00, January 11, 2002 |
||
1109 | * |
||
1110 | ******************************************************************************/ |
||
1111 | |||
1112 | struct acpi_table_spcr { |
||
1113 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1114 | u8 interface_type; /* 0=full 16550, 1=subset of 16550 */ |
||
1115 | u8 reserved[3]; |
||
1116 | struct acpi_generic_address serial_port; |
||
1117 | u8 interrupt_type; |
||
1118 | u8 pc_interrupt; |
||
1119 | u32 interrupt; |
||
1120 | u8 baud_rate; |
||
1121 | u8 parity; |
||
1122 | u8 stop_bits; |
||
1123 | u8 flow_control; |
||
1124 | u8 terminal_type; |
||
1125 | u8 reserved1; |
||
1126 | u16 pci_device_id; |
||
1127 | u16 pci_vendor_id; |
||
1128 | u8 pci_bus; |
||
1129 | u8 pci_device; |
||
1130 | u8 pci_function; |
||
1131 | u32 pci_flags; |
||
1132 | u8 pci_segment; |
||
1133 | u32 reserved2; |
||
1134 | }; |
||
1135 | |||
1136 | /* Masks for pci_flags field above */ |
||
1137 | |||
1138 | #define ACPI_SPCR_DO_NOT_DISABLE (1) |
||
1139 | |||
1140 | /******************************************************************************* |
||
1141 | * |
||
1142 | * SPMI - Server Platform Management Interface table |
||
1143 | * Version 5 |
||
1144 | * |
||
1145 | * Conforms to "Intelligent Platform Management Interface Specification |
||
1146 | * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with |
||
1147 | * June 12, 2009 markup. |
||
1148 | * |
||
1149 | ******************************************************************************/ |
||
1150 | |||
1151 | struct acpi_table_spmi { |
||
1152 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1153 | u8 interface_type; |
||
1154 | u8 reserved; /* Must be 1 */ |
||
1155 | u16 spec_revision; /* Version of IPMI */ |
||
1156 | u8 interrupt_type; |
||
1157 | u8 gpe_number; /* GPE assigned */ |
||
1158 | u8 reserved1; |
||
1159 | u8 pci_device_flag; |
||
1160 | u32 interrupt; |
||
1161 | struct acpi_generic_address ipmi_register; |
||
1162 | u8 pci_segment; |
||
1163 | u8 pci_bus; |
||
1164 | u8 pci_device; |
||
1165 | u8 pci_function; |
||
1166 | u8 reserved2; |
||
1167 | }; |
||
1168 | |||
1169 | /* Values for interface_type above */ |
||
1170 | |||
1171 | enum acpi_spmi_interface_types { |
||
1172 | ACPI_SPMI_NOT_USED = 0, |
||
1173 | ACPI_SPMI_KEYBOARD = 1, |
||
1174 | ACPI_SPMI_SMI = 2, |
||
1175 | ACPI_SPMI_BLOCK_TRANSFER = 3, |
||
1176 | ACPI_SPMI_SMBUS = 4, |
||
1177 | ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ |
||
1178 | }; |
||
1179 | |||
1180 | /******************************************************************************* |
||
1181 | * |
||
1182 | * TCPA - Trusted Computing Platform Alliance table |
||
1183 | * Version 2 |
||
1184 | * |
||
1185 | * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", |
||
1186 | * December 19, 2014 |
||
1187 | * |
||
1188 | * NOTE: There are two versions of the table with the same signature -- |
||
1189 | * the client version and the server version. The common platform_class |
||
1190 | * field is used to differentiate the two types of tables. |
||
1191 | * |
||
1192 | ******************************************************************************/ |
||
1193 | |||
1194 | struct acpi_table_tcpa_hdr { |
||
1195 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1196 | u16 platform_class; |
||
1197 | }; |
||
1198 | |||
1199 | /* |
||
1200 | * Values for platform_class above. |
||
1201 | * This is how the client and server subtables are differentiated |
||
1202 | */ |
||
1203 | #define ACPI_TCPA_CLIENT_TABLE 0 |
||
1204 | #define ACPI_TCPA_SERVER_TABLE 1 |
||
1205 | |||
1206 | struct acpi_table_tcpa_client { |
||
1207 | u32 minimum_log_length; /* Minimum length for the event log area */ |
||
1208 | u64 log_address; /* Address of the event log area */ |
||
1209 | }; |
||
1210 | |||
1211 | struct acpi_table_tcpa_server { |
||
1212 | u16 reserved; |
||
1213 | u64 minimum_log_length; /* Minimum length for the event log area */ |
||
1214 | u64 log_address; /* Address of the event log area */ |
||
1215 | u16 spec_revision; |
||
1216 | u8 device_flags; |
||
1217 | u8 interrupt_flags; |
||
1218 | u8 gpe_number; |
||
1219 | u8 reserved2[3]; |
||
1220 | u32 global_interrupt; |
||
1221 | struct acpi_generic_address address; |
||
1222 | u32 reserved3; |
||
1223 | struct acpi_generic_address config_address; |
||
1224 | u8 group; |
||
1225 | u8 bus; /* PCI Bus/Segment/Function numbers */ |
||
1226 | u8 device; |
||
1227 | u8 function; |
||
1228 | }; |
||
1229 | |||
1230 | /* Values for device_flags above */ |
||
1231 | |||
1232 | #define ACPI_TCPA_PCI_DEVICE (1) |
||
1233 | #define ACPI_TCPA_BUS_PNP (1<<1) |
||
1234 | #define ACPI_TCPA_ADDRESS_VALID (1<<2) |
||
1235 | |||
1236 | /* Values for interrupt_flags above */ |
||
1237 | |||
1238 | #define ACPI_TCPA_INTERRUPT_MODE (1) |
||
1239 | #define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) |
||
1240 | #define ACPI_TCPA_SCI_VIA_GPE (1<<2) |
||
1241 | #define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) |
||
1242 | |||
1243 | /******************************************************************************* |
||
1244 | * |
||
1245 | * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table |
||
1246 | * Version 4 |
||
1247 | * |
||
1248 | * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", |
||
1249 | * December 19, 2014 |
||
1250 | * |
||
1251 | ******************************************************************************/ |
||
1252 | |||
1253 | struct acpi_table_tpm2 { |
||
1254 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1255 | u16 platform_class; |
||
1256 | u16 reserved; |
||
1257 | u64 control_address; |
||
1258 | u32 start_method; |
||
1259 | |||
1260 | /* Platform-specific data follows */ |
||
1261 | }; |
||
1262 | |||
1263 | /* Values for start_method above */ |
||
1264 | |||
1265 | #define ACPI_TPM2_NOT_ALLOWED 0 |
||
1266 | #define ACPI_TPM2_START_METHOD 2 |
||
1267 | #define ACPI_TPM2_MEMORY_MAPPED 6 |
||
1268 | #define ACPI_TPM2_COMMAND_BUFFER 7 |
||
1269 | #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 |
||
1270 | |||
1271 | /******************************************************************************* |
||
1272 | * |
||
1273 | * UEFI - UEFI Boot optimization Table |
||
1274 | * Version 1 |
||
1275 | * |
||
1276 | * Conforms to "Unified Extensible Firmware Interface Specification", |
||
1277 | * Version 2.3, May 8, 2009 |
||
1278 | * |
||
1279 | ******************************************************************************/ |
||
1280 | |||
1281 | struct acpi_table_uefi { |
||
1282 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1283 | u8 identifier[16]; /* UUID identifier */ |
||
1284 | u16 data_offset; /* Offset of remaining data in table */ |
||
1285 | }; |
||
1286 | |||
1287 | /******************************************************************************* |
||
1288 | * |
||
1289 | * VRTC - Virtual Real Time Clock Table |
||
1290 | * Version 1 |
||
1291 | * |
||
1292 | * Conforms to "Simple Firmware Interface Specification", |
||
1293 | * Draft 0.8.2, Oct 19, 2010 |
||
1294 | * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. |
||
1295 | * |
||
1296 | ******************************************************************************/ |
||
1297 | |||
1298 | struct acpi_table_vrtc { |
||
1299 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1300 | }; |
||
1301 | |||
1302 | /* VRTC entry */ |
||
1303 | |||
1304 | struct acpi_vrtc_entry { |
||
1305 | struct acpi_generic_address physical_address; |
||
1306 | u32 irq; |
||
1307 | }; |
||
1308 | |||
1309 | /******************************************************************************* |
||
1310 | * |
||
1311 | * WAET - Windows ACPI Emulated devices Table |
||
1312 | * Version 1 |
||
1313 | * |
||
1314 | * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 |
||
1315 | * |
||
1316 | ******************************************************************************/ |
||
1317 | |||
1318 | struct acpi_table_waet { |
||
1319 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1320 | u32 flags; |
||
1321 | }; |
||
1322 | |||
1323 | /* Masks for Flags field above */ |
||
1324 | |||
1325 | #define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ |
||
1326 | #define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ |
||
1327 | |||
1328 | /******************************************************************************* |
||
1329 | * |
||
1330 | * WDAT - Watchdog Action Table |
||
1331 | * Version 1 |
||
1332 | * |
||
1333 | * Conforms to "Hardware Watchdog Timers Design Specification", |
||
1334 | * Copyright 2006 Microsoft Corporation. |
||
1335 | * |
||
1336 | ******************************************************************************/ |
||
1337 | |||
1338 | struct acpi_table_wdat { |
||
1339 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1340 | u32 header_length; /* Watchdog Header Length */ |
||
1341 | u16 pci_segment; /* PCI Segment number */ |
||
1342 | u8 pci_bus; /* PCI Bus number */ |
||
1343 | u8 pci_device; /* PCI Device number */ |
||
1344 | u8 pci_function; /* PCI Function number */ |
||
1345 | u8 reserved[3]; |
||
1346 | u32 timer_period; /* Period of one timer count (msec) */ |
||
1347 | u32 max_count; /* Maximum counter value supported */ |
||
1348 | u32 min_count; /* Minimum counter value */ |
||
1349 | u8 flags; |
||
1350 | u8 reserved2[3]; |
||
1351 | u32 entries; /* Number of watchdog entries that follow */ |
||
1352 | }; |
||
1353 | |||
1354 | /* Masks for Flags field above */ |
||
1355 | |||
1356 | #define ACPI_WDAT_ENABLED (1) |
||
1357 | #define ACPI_WDAT_STOPPED 0x80 |
||
1358 | |||
1359 | /* WDAT Instruction Entries (actions) */ |
||
1360 | |||
1361 | struct acpi_wdat_entry { |
||
1362 | u8 action; |
||
1363 | u8 instruction; |
||
1364 | u16 reserved; |
||
1365 | struct acpi_generic_address register_region; |
||
1366 | u32 value; /* Value used with Read/Write register */ |
||
1367 | u32 mask; /* Bitmask required for this register instruction */ |
||
1368 | }; |
||
1369 | |||
1370 | /* Values for Action field above */ |
||
1371 | |||
1372 | enum acpi_wdat_actions { |
||
1373 | ACPI_WDAT_RESET = 1, |
||
1374 | ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, |
||
1375 | ACPI_WDAT_GET_COUNTDOWN = 5, |
||
1376 | ACPI_WDAT_SET_COUNTDOWN = 6, |
||
1377 | ACPI_WDAT_GET_RUNNING_STATE = 8, |
||
1378 | ACPI_WDAT_SET_RUNNING_STATE = 9, |
||
1379 | ACPI_WDAT_GET_STOPPED_STATE = 10, |
||
1380 | ACPI_WDAT_SET_STOPPED_STATE = 11, |
||
1381 | ACPI_WDAT_GET_REBOOT = 16, |
||
1382 | ACPI_WDAT_SET_REBOOT = 17, |
||
1383 | ACPI_WDAT_GET_SHUTDOWN = 18, |
||
1384 | ACPI_WDAT_SET_SHUTDOWN = 19, |
||
1385 | ACPI_WDAT_GET_STATUS = 32, |
||
1386 | ACPI_WDAT_SET_STATUS = 33, |
||
1387 | ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ |
||
1388 | }; |
||
1389 | |||
1390 | /* Values for Instruction field above */ |
||
1391 | |||
1392 | enum acpi_wdat_instructions { |
||
1393 | ACPI_WDAT_READ_VALUE = 0, |
||
1394 | ACPI_WDAT_READ_COUNTDOWN = 1, |
||
1395 | ACPI_WDAT_WRITE_VALUE = 2, |
||
1396 | ACPI_WDAT_WRITE_COUNTDOWN = 3, |
||
1397 | ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ |
||
1398 | ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ |
||
1399 | }; |
||
1400 | |||
1401 | /******************************************************************************* |
||
1402 | * |
||
1403 | * WDDT - Watchdog Descriptor Table |
||
1404 | * Version 1 |
||
1405 | * |
||
1406 | * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", |
||
1407 | * Version 001, September 2002 |
||
1408 | * |
||
1409 | ******************************************************************************/ |
||
1410 | |||
1411 | struct acpi_table_wddt { |
||
1412 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1413 | u16 spec_version; |
||
1414 | u16 table_version; |
||
1415 | u16 pci_vendor_id; |
||
1416 | struct acpi_generic_address address; |
||
1417 | u16 max_count; /* Maximum counter value supported */ |
||
1418 | u16 min_count; /* Minimum counter value supported */ |
||
1419 | u16 period; |
||
1420 | u16 status; |
||
1421 | u16 capability; |
||
1422 | }; |
||
1423 | |||
1424 | /* Flags for Status field above */ |
||
1425 | |||
1426 | #define ACPI_WDDT_AVAILABLE (1) |
||
1427 | #define ACPI_WDDT_ACTIVE (1<<1) |
||
1428 | #define ACPI_WDDT_TCO_OS_OWNED (1<<2) |
||
1429 | #define ACPI_WDDT_USER_RESET (1<<11) |
||
1430 | #define ACPI_WDDT_WDT_RESET (1<<12) |
||
1431 | #define ACPI_WDDT_POWER_FAIL (1<<13) |
||
1432 | #define ACPI_WDDT_UNKNOWN_RESET (1<<14) |
||
1433 | |||
1434 | /* Flags for Capability field above */ |
||
1435 | |||
1436 | #define ACPI_WDDT_AUTO_RESET (1) |
||
1437 | #define ACPI_WDDT_ALERT_SUPPORT (1<<1) |
||
1438 | |||
1439 | /******************************************************************************* |
||
1440 | * |
||
1441 | * WDRT - Watchdog Resource Table |
||
1442 | * Version 1 |
||
1443 | * |
||
1444 | * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", |
||
1445 | * Version 1.01, August 28, 2006 |
||
1446 | * |
||
1447 | ******************************************************************************/ |
||
1448 | |||
1449 | struct acpi_table_wdrt { |
||
1450 | struct acpi_table_header header; /* Common ACPI table header */ |
||
1451 | struct acpi_generic_address control_register; |
||
1452 | struct acpi_generic_address count_register; |
||
1453 | u16 pci_device_id; |
||
1454 | u16 pci_vendor_id; |
||
1455 | u8 pci_bus; /* PCI Bus number */ |
||
1456 | u8 pci_device; /* PCI Device number */ |
||
1457 | u8 pci_function; /* PCI Function number */ |
||
1458 | u8 pci_segment; /* PCI Segment number */ |
||
1459 | u16 max_count; /* Maximum counter value supported */ |
||
1460 | u8 units; |
||
1461 | }; |
||
1462 | |||
1463 | /* Reset to default packing */ |
||
1464 | |||
1465 | #pragma pack() |
||
1466 | |||
1467 | #endif /* __ACTBL2_H__ */1) |