1 | /****************************************************************************** |
2 | * |
3 | * Name: actbl1.h - Additional ACPI table definitions |
4 | * |
5 | *****************************************************************************/ |
6 | |
7 | /* |
8 | * Copyright (C) 2000 - 2019, 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 __ACTBL1_H__ |
45 | #define __ACTBL1_H__ |
46 | |
47 | |
48 | /******************************************************************************* |
49 | * |
50 | * Additional ACPI Tables |
51 | * |
52 | * These tables are not consumed directly by the ACPICA subsystem, but are |
53 | * included here to support device drivers and the AML disassembler. |
54 | * |
55 | ******************************************************************************/ |
56 | |
57 | |
58 | /* |
59 | * Values for description table header signatures for tables defined in this |
60 | * file. Useful because they make it more difficult to inadvertently type in |
61 | * the wrong signature. |
62 | */ |
63 | #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ |
64 | #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ |
65 | #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ |
66 | #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ |
67 | #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ |
68 | #define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ |
69 | #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ |
70 | #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ |
71 | #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ |
72 | #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ |
73 | #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ |
74 | #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ |
75 | #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ |
76 | #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ |
77 | #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ |
78 | #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ |
79 | #define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ |
80 | #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ |
81 | #define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ |
82 | |
83 | #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ |
84 | #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ |
85 | |
86 | |
87 | /* Reserved table signatures */ |
88 | |
89 | #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ |
90 | #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ |
91 | |
92 | /* |
93 | * These tables have been seen in the field, but no definition has been found |
94 | */ |
95 | #ifdef ACPI_UNDEFINED_TABLES |
96 | #define ACPI_SIG_ATKG "ATKG" |
97 | #define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ |
98 | #define ACPI_SIG_IEIT "IEIT" |
99 | #endif |
100 | |
101 | /* |
102 | * All tables must be byte-packed to match the ACPI specification, since |
103 | * the tables are provided by the system BIOS. |
104 | */ |
105 | #pragma pack(1) |
106 | |
107 | /* |
108 | * Note: C bitfields are not used for this reason: |
109 | * |
110 | * "Bitfields are great and easy to read, but unfortunately the C language |
111 | * does not specify the layout of bitfields in memory, which means they are |
112 | * essentially useless for dealing with packed data in on-disk formats or |
113 | * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, |
114 | * this decision was a design error in C. Ritchie could have picked an order |
115 | * and stuck with it." Norman Ramsey. |
116 | * See http://stackoverflow.com/a/1053662/41661 |
117 | */ |
118 | |
119 | |
120 | /******************************************************************************* |
121 | * |
122 | * Common subtable headers |
123 | * |
124 | ******************************************************************************/ |
125 | |
126 | /* Generic subtable header (used in MADT, SRAT, etc.) */ |
127 | |
128 | typedef struct |
129 | { |
130 | UINT8 ; |
131 | UINT8 ; |
132 | |
133 | } ; |
134 | |
135 | |
136 | /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ |
137 | |
138 | typedef struct |
139 | { |
140 | UINT8 ; |
141 | UINT8 ; |
142 | UINT8 ; |
143 | UINT8 ; |
144 | ACPI_GENERIC_ADDRESS ; |
145 | UINT64 ; /* Value used with Read/Write register */ |
146 | UINT64 ; /* Bitmask required for this register instruction */ |
147 | |
148 | } ; |
149 | |
150 | |
151 | /******************************************************************************* |
152 | * |
153 | * ASF - Alert Standard Format table (Signature "ASF!") |
154 | * Revision 0x10 |
155 | * |
156 | * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 |
157 | * |
158 | ******************************************************************************/ |
159 | |
160 | typedef struct acpi_table_asf |
161 | { |
162 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
163 | |
164 | } ACPI_TABLE_ASF; |
165 | |
166 | |
167 | /* ASF subtable header */ |
168 | |
169 | typedef struct |
170 | { |
171 | UINT8 ; |
172 | UINT8 ; |
173 | UINT16 ; |
174 | |
175 | } ; |
176 | |
177 | |
178 | /* Values for Type field above */ |
179 | |
180 | enum AcpiAsfType |
181 | { |
182 | ACPI_ASF_TYPE_INFO = 0, |
183 | ACPI_ASF_TYPE_ALERT = 1, |
184 | ACPI_ASF_TYPE_CONTROL = 2, |
185 | ACPI_ASF_TYPE_BOOT = 3, |
186 | ACPI_ASF_TYPE_ADDRESS = 4, |
187 | ACPI_ASF_TYPE_RESERVED = 5 |
188 | }; |
189 | |
190 | /* |
191 | * ASF subtables |
192 | */ |
193 | |
194 | /* 0: ASF Information */ |
195 | |
196 | typedef struct acpi_asf_info |
197 | { |
198 | ACPI_ASF_HEADER ; |
199 | UINT8 MinResetValue; |
200 | UINT8 MinPollInterval; |
201 | UINT16 SystemId; |
202 | UINT32 MfgId; |
203 | UINT8 Flags; |
204 | UINT8 Reserved2[3]; |
205 | |
206 | } ACPI_ASF_INFO; |
207 | |
208 | /* Masks for Flags field above */ |
209 | |
210 | #define ACPI_ASF_SMBUS_PROTOCOLS (1) |
211 | |
212 | |
213 | /* 1: ASF Alerts */ |
214 | |
215 | typedef struct acpi_asf_alert |
216 | { |
217 | ACPI_ASF_HEADER ; |
218 | UINT8 AssertMask; |
219 | UINT8 DeassertMask; |
220 | UINT8 Alerts; |
221 | UINT8 DataLength; |
222 | |
223 | } ACPI_ASF_ALERT; |
224 | |
225 | typedef struct acpi_asf_alert_data |
226 | { |
227 | UINT8 Address; |
228 | UINT8 Command; |
229 | UINT8 Mask; |
230 | UINT8 Value; |
231 | UINT8 SensorType; |
232 | UINT8 Type; |
233 | UINT8 Offset; |
234 | UINT8 SourceType; |
235 | UINT8 Severity; |
236 | UINT8 SensorNumber; |
237 | UINT8 Entity; |
238 | UINT8 Instance; |
239 | |
240 | } ACPI_ASF_ALERT_DATA; |
241 | |
242 | |
243 | /* 2: ASF Remote Control */ |
244 | |
245 | typedef struct acpi_asf_remote |
246 | { |
247 | ACPI_ASF_HEADER ; |
248 | UINT8 Controls; |
249 | UINT8 DataLength; |
250 | UINT16 Reserved2; |
251 | |
252 | } ACPI_ASF_REMOTE; |
253 | |
254 | typedef struct acpi_asf_control_data |
255 | { |
256 | UINT8 Function; |
257 | UINT8 Address; |
258 | UINT8 Command; |
259 | UINT8 Value; |
260 | |
261 | } ACPI_ASF_CONTROL_DATA; |
262 | |
263 | |
264 | /* 3: ASF RMCP Boot Options */ |
265 | |
266 | typedef struct acpi_asf_rmcp |
267 | { |
268 | ACPI_ASF_HEADER ; |
269 | UINT8 Capabilities[7]; |
270 | UINT8 CompletionCode; |
271 | UINT32 EnterpriseId; |
272 | UINT8 Command; |
273 | UINT16 Parameter; |
274 | UINT16 BootOptions; |
275 | UINT16 OemParameters; |
276 | |
277 | } ACPI_ASF_RMCP; |
278 | |
279 | |
280 | /* 4: ASF Address */ |
281 | |
282 | typedef struct acpi_asf_address |
283 | { |
284 | ACPI_ASF_HEADER ; |
285 | UINT8 EpromAddress; |
286 | UINT8 Devices; |
287 | |
288 | } ACPI_ASF_ADDRESS; |
289 | |
290 | |
291 | /******************************************************************************* |
292 | * |
293 | * BERT - Boot Error Record Table (ACPI 4.0) |
294 | * Version 1 |
295 | * |
296 | ******************************************************************************/ |
297 | |
298 | typedef struct acpi_table_bert |
299 | { |
300 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
301 | UINT32 RegionLength; /* Length of the boot error region */ |
302 | UINT64 Address; /* Physical address of the error region */ |
303 | |
304 | } ACPI_TABLE_BERT; |
305 | |
306 | |
307 | /* Boot Error Region (not a subtable, pointed to by Address field above) */ |
308 | |
309 | typedef struct acpi_bert_region |
310 | { |
311 | UINT32 BlockStatus; /* Type of error information */ |
312 | UINT32 RawDataOffset; /* Offset to raw error data */ |
313 | UINT32 RawDataLength; /* Length of raw error data */ |
314 | UINT32 DataLength; /* Length of generic error data */ |
315 | UINT32 ErrorSeverity; /* Severity code */ |
316 | |
317 | } ACPI_BERT_REGION; |
318 | |
319 | /* Values for BlockStatus flags above */ |
320 | |
321 | #define ACPI_BERT_UNCORRECTABLE (1) |
322 | #define ACPI_BERT_CORRECTABLE (1<<1) |
323 | #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) |
324 | #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) |
325 | #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ |
326 | |
327 | /* Values for ErrorSeverity above */ |
328 | |
329 | enum AcpiBertErrorSeverity |
330 | { |
331 | ACPI_BERT_ERROR_CORRECTABLE = 0, |
332 | ACPI_BERT_ERROR_FATAL = 1, |
333 | ACPI_BERT_ERROR_CORRECTED = 2, |
334 | ACPI_BERT_ERROR_NONE = 3, |
335 | ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ |
336 | }; |
337 | |
338 | /* |
339 | * Note: The generic error data that follows the ErrorSeverity field above |
340 | * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below |
341 | */ |
342 | |
343 | |
344 | /******************************************************************************* |
345 | * |
346 | * BGRT - Boot Graphics Resource Table (ACPI 5.0) |
347 | * Version 1 |
348 | * |
349 | ******************************************************************************/ |
350 | |
351 | typedef struct acpi_table_bgrt |
352 | { |
353 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
354 | UINT16 Version; |
355 | UINT8 Status; |
356 | UINT8 ImageType; |
357 | UINT64 ImageAddress; |
358 | UINT32 ImageOffsetX; |
359 | UINT32 ImageOffsetY; |
360 | |
361 | } ACPI_TABLE_BGRT; |
362 | |
363 | /* Flags for Status field above */ |
364 | |
365 | #define ACPI_BGRT_DISPLAYED (1) |
366 | #define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) |
367 | |
368 | |
369 | /******************************************************************************* |
370 | * |
371 | * BOOT - Simple Boot Flag Table |
372 | * Version 1 |
373 | * |
374 | * Conforms to the "Simple Boot Flag Specification", Version 2.1 |
375 | * |
376 | ******************************************************************************/ |
377 | |
378 | typedef struct acpi_table_boot |
379 | { |
380 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
381 | UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ |
382 | UINT8 Reserved[3]; |
383 | |
384 | } ACPI_TABLE_BOOT; |
385 | |
386 | |
387 | /******************************************************************************* |
388 | * |
389 | * CPEP - Corrected Platform Error Polling table (ACPI 4.0) |
390 | * Version 1 |
391 | * |
392 | ******************************************************************************/ |
393 | |
394 | typedef struct acpi_table_cpep |
395 | { |
396 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
397 | UINT64 Reserved; |
398 | |
399 | } ACPI_TABLE_CPEP; |
400 | |
401 | |
402 | /* Subtable */ |
403 | |
404 | typedef struct acpi_cpep_polling |
405 | { |
406 | ACPI_SUBTABLE_HEADER ; |
407 | UINT8 Id; /* Processor ID */ |
408 | UINT8 Eid; /* Processor EID */ |
409 | UINT32 Interval; /* Polling interval (msec) */ |
410 | |
411 | } ACPI_CPEP_POLLING; |
412 | |
413 | |
414 | /******************************************************************************* |
415 | * |
416 | * CSRT - Core System Resource Table |
417 | * Version 0 |
418 | * |
419 | * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 |
420 | * |
421 | ******************************************************************************/ |
422 | |
423 | typedef struct acpi_table_csrt |
424 | { |
425 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
426 | |
427 | } ACPI_TABLE_CSRT; |
428 | |
429 | |
430 | /* Resource Group subtable */ |
431 | |
432 | typedef struct acpi_csrt_group |
433 | { |
434 | UINT32 Length; |
435 | UINT32 VendorId; |
436 | UINT32 SubvendorId; |
437 | UINT16 DeviceId; |
438 | UINT16 SubdeviceId; |
439 | UINT16 Revision; |
440 | UINT16 Reserved; |
441 | UINT32 SharedInfoLength; |
442 | |
443 | /* Shared data immediately follows (Length = SharedInfoLength) */ |
444 | |
445 | } ACPI_CSRT_GROUP; |
446 | |
447 | /* Shared Info subtable */ |
448 | |
449 | typedef struct acpi_csrt_shared_info |
450 | { |
451 | UINT16 MajorVersion; |
452 | UINT16 MinorVersion; |
453 | UINT32 MmioBaseLow; |
454 | UINT32 MmioBaseHigh; |
455 | UINT32 GsiInterrupt; |
456 | UINT8 InterruptPolarity; |
457 | UINT8 InterruptMode; |
458 | UINT8 NumChannels; |
459 | UINT8 DmaAddressWidth; |
460 | UINT16 BaseRequestLine; |
461 | UINT16 NumHandshakeSignals; |
462 | UINT32 MaxBlockSize; |
463 | |
464 | /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ |
465 | |
466 | } ACPI_CSRT_SHARED_INFO; |
467 | |
468 | /* Resource Descriptor subtable */ |
469 | |
470 | typedef struct acpi_csrt_descriptor |
471 | { |
472 | UINT32 Length; |
473 | UINT16 Type; |
474 | UINT16 Subtype; |
475 | UINT32 Uid; |
476 | |
477 | /* Resource-specific information immediately follows */ |
478 | |
479 | } ACPI_CSRT_DESCRIPTOR; |
480 | |
481 | |
482 | /* Resource Types */ |
483 | |
484 | #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 |
485 | #define ACPI_CSRT_TYPE_TIMER 0x0002 |
486 | #define ACPI_CSRT_TYPE_DMA 0x0003 |
487 | |
488 | /* Resource Subtypes */ |
489 | |
490 | #define ACPI_CSRT_XRUPT_LINE 0x0000 |
491 | #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 |
492 | #define ACPI_CSRT_TIMER 0x0000 |
493 | #define ACPI_CSRT_DMA_CHANNEL 0x0000 |
494 | #define ACPI_CSRT_DMA_CONTROLLER 0x0001 |
495 | |
496 | |
497 | /******************************************************************************* |
498 | * |
499 | * DBG2 - Debug Port Table 2 |
500 | * Version 0 (Both main table and subtables) |
501 | * |
502 | * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 |
503 | * |
504 | ******************************************************************************/ |
505 | |
506 | typedef struct acpi_table_dbg2 |
507 | { |
508 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
509 | UINT32 InfoOffset; |
510 | UINT32 InfoCount; |
511 | |
512 | } ACPI_TABLE_DBG2; |
513 | |
514 | |
515 | typedef struct |
516 | { |
517 | UINT32 ; |
518 | UINT32 ; |
519 | |
520 | } ; |
521 | |
522 | |
523 | /* Debug Device Information Subtable */ |
524 | |
525 | typedef struct acpi_dbg2_device |
526 | { |
527 | UINT8 Revision; |
528 | UINT16 Length; |
529 | UINT8 RegisterCount; /* Number of BaseAddress registers */ |
530 | UINT16 NamepathLength; |
531 | UINT16 NamepathOffset; |
532 | UINT16 OemDataLength; |
533 | UINT16 OemDataOffset; |
534 | UINT16 PortType; |
535 | UINT16 PortSubtype; |
536 | UINT16 Reserved; |
537 | UINT16 BaseAddressOffset; |
538 | UINT16 AddressSizeOffset; |
539 | /* |
540 | * Data that follows: |
541 | * BaseAddress (required) - Each in 12-byte Generic Address Structure format. |
542 | * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. |
543 | * Namepath (required) - Null terminated string. Single dot if not supported. |
544 | * OemData (optional) - Length is OemDataLength. |
545 | */ |
546 | } ACPI_DBG2_DEVICE; |
547 | |
548 | /* Types for PortType field above */ |
549 | |
550 | #define ACPI_DBG2_SERIAL_PORT 0x8000 |
551 | #define ACPI_DBG2_1394_PORT 0x8001 |
552 | #define ACPI_DBG2_USB_PORT 0x8002 |
553 | #define ACPI_DBG2_NET_PORT 0x8003 |
554 | |
555 | /* Subtypes for PortSubtype field above */ |
556 | |
557 | #define ACPI_DBG2_16550_COMPATIBLE 0x0000 |
558 | #define ACPI_DBG2_16550_SUBSET 0x0001 |
559 | #define ACPI_DBG2_ARM_PL011 0x0003 |
560 | #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D |
561 | #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E |
562 | #define ACPI_DBG2_ARM_DCC 0x000F |
563 | #define ACPI_DBG2_BCM2835 0x0010 |
564 | |
565 | #define ACPI_DBG2_1394_STANDARD 0x0000 |
566 | |
567 | #define ACPI_DBG2_USB_XHCI 0x0000 |
568 | #define ACPI_DBG2_USB_EHCI 0x0001 |
569 | |
570 | |
571 | /******************************************************************************* |
572 | * |
573 | * DBGP - Debug Port table |
574 | * Version 1 |
575 | * |
576 | * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 |
577 | * |
578 | ******************************************************************************/ |
579 | |
580 | typedef struct acpi_table_dbgp |
581 | { |
582 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
583 | UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ |
584 | UINT8 Reserved[3]; |
585 | ACPI_GENERIC_ADDRESS DebugPort; |
586 | |
587 | } ACPI_TABLE_DBGP; |
588 | |
589 | |
590 | /******************************************************************************* |
591 | * |
592 | * DMAR - DMA Remapping table |
593 | * Version 1 |
594 | * |
595 | * Conforms to "Intel Virtualization Technology for Directed I/O", |
596 | * Version 2.3, October 2014 |
597 | * |
598 | ******************************************************************************/ |
599 | |
600 | typedef struct acpi_table_dmar |
601 | { |
602 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
603 | UINT8 Width; /* Host Address Width */ |
604 | UINT8 Flags; |
605 | UINT8 Reserved[10]; |
606 | |
607 | } ACPI_TABLE_DMAR; |
608 | |
609 | /* Masks for Flags field above */ |
610 | |
611 | #define ACPI_DMAR_INTR_REMAP (1) |
612 | #define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) |
613 | #define ACPI_DMAR_X2APIC_MODE (1<<2) |
614 | |
615 | |
616 | /* DMAR subtable header */ |
617 | |
618 | typedef struct |
619 | { |
620 | UINT16 ; |
621 | UINT16 ; |
622 | |
623 | } ; |
624 | |
625 | /* Values for subtable type in ACPI_DMAR_HEADER */ |
626 | |
627 | enum AcpiDmarType |
628 | { |
629 | ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, |
630 | ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, |
631 | ACPI_DMAR_TYPE_ROOT_ATS = 2, |
632 | ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, |
633 | ACPI_DMAR_TYPE_NAMESPACE = 4, |
634 | ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ |
635 | }; |
636 | |
637 | |
638 | /* DMAR Device Scope structure */ |
639 | |
640 | typedef struct acpi_dmar_device_scope |
641 | { |
642 | UINT8 EntryType; |
643 | UINT8 Length; |
644 | UINT16 Reserved; |
645 | UINT8 EnumerationId; |
646 | UINT8 Bus; |
647 | |
648 | } ACPI_DMAR_DEVICE_SCOPE; |
649 | |
650 | /* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ |
651 | |
652 | enum AcpiDmarScopeType |
653 | { |
654 | ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, |
655 | ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, |
656 | ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, |
657 | ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, |
658 | ACPI_DMAR_SCOPE_TYPE_HPET = 4, |
659 | ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, |
660 | ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ |
661 | }; |
662 | |
663 | typedef struct acpi_dmar_pci_path |
664 | { |
665 | UINT8 Device; |
666 | UINT8 Function; |
667 | |
668 | } ACPI_DMAR_PCI_PATH; |
669 | |
670 | |
671 | /* |
672 | * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER |
673 | */ |
674 | |
675 | /* 0: Hardware Unit Definition */ |
676 | |
677 | typedef struct acpi_dmar_hardware_unit |
678 | { |
679 | ACPI_DMAR_HEADER ; |
680 | UINT8 Flags; |
681 | UINT8 Reserved; |
682 | UINT16 Segment; |
683 | UINT64 Address; /* Register Base Address */ |
684 | |
685 | } ACPI_DMAR_HARDWARE_UNIT; |
686 | |
687 | /* Masks for Flags field above */ |
688 | |
689 | #define ACPI_DMAR_INCLUDE_ALL (1) |
690 | |
691 | |
692 | /* 1: Reserved Memory Definition */ |
693 | |
694 | typedef struct acpi_dmar_reserved_memory |
695 | { |
696 | ACPI_DMAR_HEADER ; |
697 | UINT16 Reserved; |
698 | UINT16 Segment; |
699 | UINT64 BaseAddress; /* 4K aligned base address */ |
700 | UINT64 EndAddress; /* 4K aligned limit address */ |
701 | |
702 | } ACPI_DMAR_RESERVED_MEMORY; |
703 | |
704 | /* Masks for Flags field above */ |
705 | |
706 | #define ACPI_DMAR_ALLOW_ALL (1) |
707 | |
708 | |
709 | /* 2: Root Port ATS Capability Reporting Structure */ |
710 | |
711 | typedef struct acpi_dmar_atsr |
712 | { |
713 | ACPI_DMAR_HEADER ; |
714 | UINT8 Flags; |
715 | UINT8 Reserved; |
716 | UINT16 Segment; |
717 | |
718 | } ACPI_DMAR_ATSR; |
719 | |
720 | /* Masks for Flags field above */ |
721 | |
722 | #define ACPI_DMAR_ALL_PORTS (1) |
723 | |
724 | |
725 | /* 3: Remapping Hardware Static Affinity Structure */ |
726 | |
727 | typedef struct acpi_dmar_rhsa |
728 | { |
729 | ACPI_DMAR_HEADER ; |
730 | UINT32 Reserved; |
731 | UINT64 BaseAddress; |
732 | UINT32 ProximityDomain; |
733 | |
734 | } ACPI_DMAR_RHSA; |
735 | |
736 | |
737 | /* 4: ACPI Namespace Device Declaration Structure */ |
738 | |
739 | typedef struct acpi_dmar_andd |
740 | { |
741 | ACPI_DMAR_HEADER Header; |
742 | UINT8 Reserved[3]; |
743 | UINT8 DeviceNumber; |
744 | char DeviceName[1]; |
745 | |
746 | } ACPI_DMAR_ANDD; |
747 | |
748 | |
749 | /******************************************************************************* |
750 | * |
751 | * DRTM - Dynamic Root of Trust for Measurement table |
752 | * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 |
753 | * Table version 1 |
754 | * |
755 | ******************************************************************************/ |
756 | |
757 | typedef struct acpi_table_drtm |
758 | { |
759 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
760 | UINT64 EntryBaseAddress; |
761 | UINT64 EntryLength; |
762 | UINT32 EntryAddress32; |
763 | UINT64 EntryAddress64; |
764 | UINT64 ExitAddress; |
765 | UINT64 LogAreaAddress; |
766 | UINT32 LogAreaLength; |
767 | UINT64 ArchDependentAddress; |
768 | UINT32 Flags; |
769 | |
770 | } ACPI_TABLE_DRTM; |
771 | |
772 | /* Flag Definitions for above */ |
773 | |
774 | #define ACPI_DRTM_ACCESS_ALLOWED (1) |
775 | #define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) |
776 | #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) |
777 | #define ACPI_DRTM_AUTHORITY_ORDER (1<<3) |
778 | |
779 | |
780 | /* 1) Validated Tables List (64-bit addresses) */ |
781 | |
782 | typedef struct acpi_drtm_vtable_list |
783 | { |
784 | UINT32 ValidatedTableCount; |
785 | UINT64 ValidatedTables[1]; |
786 | |
787 | } ACPI_DRTM_VTABLE_LIST; |
788 | |
789 | /* 2) Resources List (of Resource Descriptors) */ |
790 | |
791 | /* Resource Descriptor */ |
792 | |
793 | typedef struct acpi_drtm_resource |
794 | { |
795 | UINT8 Size[7]; |
796 | UINT8 Type; |
797 | UINT64 Address; |
798 | |
799 | } ACPI_DRTM_RESOURCE; |
800 | |
801 | typedef struct acpi_drtm_resource_list |
802 | { |
803 | UINT32 ResourceCount; |
804 | ACPI_DRTM_RESOURCE Resources[1]; |
805 | |
806 | } ACPI_DRTM_RESOURCE_LIST; |
807 | |
808 | /* 3) Platform-specific Identifiers List */ |
809 | |
810 | typedef struct acpi_drtm_dps_id |
811 | { |
812 | UINT32 DpsIdLength; |
813 | UINT8 DpsId[16]; |
814 | |
815 | } ACPI_DRTM_DPS_ID; |
816 | |
817 | |
818 | /******************************************************************************* |
819 | * |
820 | * ECDT - Embedded Controller Boot Resources Table |
821 | * Version 1 |
822 | * |
823 | ******************************************************************************/ |
824 | |
825 | typedef struct acpi_table_ecdt |
826 | { |
827 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
828 | ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ |
829 | ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ |
830 | UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ |
831 | UINT8 Gpe; /* The GPE for the EC */ |
832 | UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ |
833 | |
834 | } ACPI_TABLE_ECDT; |
835 | |
836 | |
837 | /******************************************************************************* |
838 | * |
839 | * EINJ - Error Injection Table (ACPI 4.0) |
840 | * Version 1 |
841 | * |
842 | ******************************************************************************/ |
843 | |
844 | typedef struct acpi_table_einj |
845 | { |
846 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
847 | UINT32 ; |
848 | UINT8 Flags; |
849 | UINT8 Reserved[3]; |
850 | UINT32 Entries; |
851 | |
852 | } ACPI_TABLE_EINJ; |
853 | |
854 | |
855 | /* EINJ Injection Instruction Entries (actions) */ |
856 | |
857 | typedef struct acpi_einj_entry |
858 | { |
859 | ACPI_WHEA_HEADER ; /* Common header for WHEA tables */ |
860 | |
861 | } ACPI_EINJ_ENTRY; |
862 | |
863 | /* Masks for Flags field above */ |
864 | |
865 | #define ACPI_EINJ_PRESERVE (1) |
866 | |
867 | /* Values for Action field above */ |
868 | |
869 | enum AcpiEinjActions |
870 | { |
871 | ACPI_EINJ_BEGIN_OPERATION = 0, |
872 | ACPI_EINJ_GET_TRIGGER_TABLE = 1, |
873 | ACPI_EINJ_SET_ERROR_TYPE = 2, |
874 | ACPI_EINJ_GET_ERROR_TYPE = 3, |
875 | ACPI_EINJ_END_OPERATION = 4, |
876 | ACPI_EINJ_EXECUTE_OPERATION = 5, |
877 | ACPI_EINJ_CHECK_BUSY_STATUS = 6, |
878 | ACPI_EINJ_GET_COMMAND_STATUS = 7, |
879 | ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, |
880 | ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, |
881 | ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ |
882 | ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ |
883 | }; |
884 | |
885 | /* Values for Instruction field above */ |
886 | |
887 | enum AcpiEinjInstructions |
888 | { |
889 | ACPI_EINJ_READ_REGISTER = 0, |
890 | ACPI_EINJ_READ_REGISTER_VALUE = 1, |
891 | ACPI_EINJ_WRITE_REGISTER = 2, |
892 | ACPI_EINJ_WRITE_REGISTER_VALUE = 3, |
893 | ACPI_EINJ_NOOP = 4, |
894 | ACPI_EINJ_FLUSH_CACHELINE = 5, |
895 | ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ |
896 | }; |
897 | |
898 | typedef struct acpi_einj_error_type_with_addr |
899 | { |
900 | UINT32 ErrorType; |
901 | UINT32 VendorStructOffset; |
902 | UINT32 Flags; |
903 | UINT32 ApicId; |
904 | UINT64 Address; |
905 | UINT64 Range; |
906 | UINT32 PcieId; |
907 | |
908 | } ACPI_EINJ_ERROR_TYPE_WITH_ADDR; |
909 | |
910 | typedef struct acpi_einj_vendor |
911 | { |
912 | UINT32 Length; |
913 | UINT32 PcieId; |
914 | UINT16 VendorId; |
915 | UINT16 DeviceId; |
916 | UINT8 RevisionId; |
917 | UINT8 Reserved[3]; |
918 | |
919 | } ACPI_EINJ_VENDOR; |
920 | |
921 | |
922 | /* EINJ Trigger Error Action Table */ |
923 | |
924 | typedef struct acpi_einj_trigger |
925 | { |
926 | UINT32 ; |
927 | UINT32 Revision; |
928 | UINT32 TableSize; |
929 | UINT32 EntryCount; |
930 | |
931 | } ACPI_EINJ_TRIGGER; |
932 | |
933 | /* Command status return values */ |
934 | |
935 | enum AcpiEinjCommandStatus |
936 | { |
937 | ACPI_EINJ_SUCCESS = 0, |
938 | ACPI_EINJ_FAILURE = 1, |
939 | ACPI_EINJ_INVALID_ACCESS = 2, |
940 | ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ |
941 | }; |
942 | |
943 | |
944 | /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ |
945 | |
946 | #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) |
947 | #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) |
948 | #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) |
949 | #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) |
950 | #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) |
951 | #define ACPI_EINJ_MEMORY_FATAL (1<<5) |
952 | #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) |
953 | #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) |
954 | #define ACPI_EINJ_PCIX_FATAL (1<<8) |
955 | #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) |
956 | #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) |
957 | #define ACPI_EINJ_PLATFORM_FATAL (1<<11) |
958 | #define ACPI_EINJ_VENDOR_DEFINED (1<<31) |
959 | |
960 | |
961 | /******************************************************************************* |
962 | * |
963 | * ERST - Error Record Serialization Table (ACPI 4.0) |
964 | * Version 1 |
965 | * |
966 | ******************************************************************************/ |
967 | |
968 | typedef struct acpi_table_erst |
969 | { |
970 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
971 | UINT32 ; |
972 | UINT32 Reserved; |
973 | UINT32 Entries; |
974 | |
975 | } ACPI_TABLE_ERST; |
976 | |
977 | |
978 | /* ERST Serialization Entries (actions) */ |
979 | |
980 | typedef struct acpi_erst_entry |
981 | { |
982 | ACPI_WHEA_HEADER ; /* Common header for WHEA tables */ |
983 | |
984 | } ACPI_ERST_ENTRY; |
985 | |
986 | /* Masks for Flags field above */ |
987 | |
988 | #define ACPI_ERST_PRESERVE (1) |
989 | |
990 | /* Values for Action field above */ |
991 | |
992 | enum AcpiErstActions |
993 | { |
994 | ACPI_ERST_BEGIN_WRITE = 0, |
995 | ACPI_ERST_BEGIN_READ = 1, |
996 | ACPI_ERST_BEGIN_CLEAR = 2, |
997 | ACPI_ERST_END = 3, |
998 | ACPI_ERST_SET_RECORD_OFFSET = 4, |
999 | ACPI_ERST_EXECUTE_OPERATION = 5, |
1000 | ACPI_ERST_CHECK_BUSY_STATUS = 6, |
1001 | ACPI_ERST_GET_COMMAND_STATUS = 7, |
1002 | ACPI_ERST_GET_RECORD_ID = 8, |
1003 | ACPI_ERST_SET_RECORD_ID = 9, |
1004 | ACPI_ERST_GET_RECORD_COUNT = 10, |
1005 | ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, |
1006 | ACPI_ERST_NOT_USED = 12, |
1007 | ACPI_ERST_GET_ERROR_RANGE = 13, |
1008 | ACPI_ERST_GET_ERROR_LENGTH = 14, |
1009 | ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, |
1010 | ACPI_ERST_EXECUTE_TIMINGS = 16, |
1011 | ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ |
1012 | }; |
1013 | |
1014 | /* Values for Instruction field above */ |
1015 | |
1016 | enum AcpiErstInstructions |
1017 | { |
1018 | ACPI_ERST_READ_REGISTER = 0, |
1019 | ACPI_ERST_READ_REGISTER_VALUE = 1, |
1020 | ACPI_ERST_WRITE_REGISTER = 2, |
1021 | ACPI_ERST_WRITE_REGISTER_VALUE = 3, |
1022 | ACPI_ERST_NOOP = 4, |
1023 | ACPI_ERST_LOAD_VAR1 = 5, |
1024 | ACPI_ERST_LOAD_VAR2 = 6, |
1025 | ACPI_ERST_STORE_VAR1 = 7, |
1026 | ACPI_ERST_ADD = 8, |
1027 | ACPI_ERST_SUBTRACT = 9, |
1028 | ACPI_ERST_ADD_VALUE = 10, |
1029 | ACPI_ERST_SUBTRACT_VALUE = 11, |
1030 | ACPI_ERST_STALL = 12, |
1031 | ACPI_ERST_STALL_WHILE_TRUE = 13, |
1032 | ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, |
1033 | ACPI_ERST_GOTO = 15, |
1034 | ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, |
1035 | ACPI_ERST_SET_DST_ADDRESS_BASE = 17, |
1036 | ACPI_ERST_MOVE_DATA = 18, |
1037 | ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ |
1038 | }; |
1039 | |
1040 | /* Command status return values */ |
1041 | |
1042 | enum AcpiErstCommandStatus |
1043 | { |
1044 | ACPI_ERST_SUCESS = 0, |
1045 | ACPI_ERST_NO_SPACE = 1, |
1046 | ACPI_ERST_NOT_AVAILABLE = 2, |
1047 | ACPI_ERST_FAILURE = 3, |
1048 | ACPI_ERST_RECORD_EMPTY = 4, |
1049 | ACPI_ERST_NOT_FOUND = 5, |
1050 | ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ |
1051 | }; |
1052 | |
1053 | |
1054 | /* Error Record Serialization Information */ |
1055 | |
1056 | typedef struct acpi_erst_info |
1057 | { |
1058 | UINT16 Signature; /* Should be "ER" */ |
1059 | UINT8 Data[48]; |
1060 | |
1061 | } ACPI_ERST_INFO; |
1062 | |
1063 | |
1064 | /******************************************************************************* |
1065 | * |
1066 | * FPDT - Firmware Performance Data Table (ACPI 5.0) |
1067 | * Version 1 |
1068 | * |
1069 | ******************************************************************************/ |
1070 | |
1071 | typedef struct acpi_table_fpdt |
1072 | { |
1073 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
1074 | |
1075 | } ACPI_TABLE_FPDT; |
1076 | |
1077 | |
1078 | /* FPDT subtable header (Performance Record Structure) */ |
1079 | |
1080 | typedef struct |
1081 | { |
1082 | UINT16 ; |
1083 | UINT8 ; |
1084 | UINT8 ; |
1085 | |
1086 | } ; |
1087 | |
1088 | /* Values for Type field above */ |
1089 | |
1090 | enum AcpiFpdtType |
1091 | { |
1092 | ACPI_FPDT_TYPE_BOOT = 0, |
1093 | ACPI_FPDT_TYPE_S3PERF = 1 |
1094 | }; |
1095 | |
1096 | |
1097 | /* |
1098 | * FPDT subtables |
1099 | */ |
1100 | |
1101 | /* 0: Firmware Basic Boot Performance Record */ |
1102 | |
1103 | typedef struct acpi_fpdt_boot_pointer |
1104 | { |
1105 | ACPI_FPDT_HEADER ; |
1106 | UINT8 Reserved[4]; |
1107 | UINT64 Address; |
1108 | |
1109 | } ACPI_FPDT_BOOT_POINTER; |
1110 | |
1111 | |
1112 | /* 1: S3 Performance Table Pointer Record */ |
1113 | |
1114 | typedef struct acpi_fpdt_s3pt_pointer |
1115 | { |
1116 | ACPI_FPDT_HEADER ; |
1117 | UINT8 Reserved[4]; |
1118 | UINT64 Address; |
1119 | |
1120 | } ACPI_FPDT_S3PT_POINTER; |
1121 | |
1122 | |
1123 | /* |
1124 | * S3PT - S3 Performance Table. This table is pointed to by the |
1125 | * S3 Pointer Record above. |
1126 | */ |
1127 | typedef struct acpi_table_s3pt |
1128 | { |
1129 | UINT8 Signature[4]; /* "S3PT" */ |
1130 | UINT32 Length; |
1131 | |
1132 | } ACPI_TABLE_S3PT; |
1133 | |
1134 | |
1135 | /* |
1136 | * S3PT Subtables (Not part of the actual FPDT) |
1137 | */ |
1138 | |
1139 | /* Values for Type field in S3PT header */ |
1140 | |
1141 | enum AcpiS3ptType |
1142 | { |
1143 | ACPI_S3PT_TYPE_RESUME = 0, |
1144 | ACPI_S3PT_TYPE_SUSPEND = 1, |
1145 | ACPI_FPDT_BOOT_PERFORMANCE = 2 |
1146 | }; |
1147 | |
1148 | typedef struct acpi_s3pt_resume |
1149 | { |
1150 | ACPI_FPDT_HEADER ; |
1151 | UINT32 ResumeCount; |
1152 | UINT64 FullResume; |
1153 | UINT64 AverageResume; |
1154 | |
1155 | } ACPI_S3PT_RESUME; |
1156 | |
1157 | typedef struct acpi_s3pt_suspend |
1158 | { |
1159 | ACPI_FPDT_HEADER ; |
1160 | UINT64 SuspendStart; |
1161 | UINT64 SuspendEnd; |
1162 | |
1163 | } ACPI_S3PT_SUSPEND; |
1164 | |
1165 | |
1166 | /* |
1167 | * FPDT Boot Performance Record (Not part of the actual FPDT) |
1168 | */ |
1169 | typedef struct acpi_fpdt_boot |
1170 | { |
1171 | ACPI_FPDT_HEADER ; |
1172 | UINT8 Reserved[4]; |
1173 | UINT64 ResetEnd; |
1174 | UINT64 LoadStart; |
1175 | UINT64 StartupStart; |
1176 | UINT64 ExitServicesEntry; |
1177 | UINT64 ExitServicesExit; |
1178 | |
1179 | } ACPI_FPDT_BOOT; |
1180 | |
1181 | |
1182 | /******************************************************************************* |
1183 | * |
1184 | * GTDT - Generic Timer Description Table (ACPI 5.1) |
1185 | * Version 2 |
1186 | * |
1187 | ******************************************************************************/ |
1188 | |
1189 | typedef struct acpi_table_gtdt |
1190 | { |
1191 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
1192 | UINT64 CounterBlockAddresss; |
1193 | UINT32 Reserved; |
1194 | UINT32 SecureEl1Interrupt; |
1195 | UINT32 SecureEl1Flags; |
1196 | UINT32 NonSecureEl1Interrupt; |
1197 | UINT32 NonSecureEl1Flags; |
1198 | UINT32 VirtualTimerInterrupt; |
1199 | UINT32 VirtualTimerFlags; |
1200 | UINT32 NonSecureEl2Interrupt; |
1201 | UINT32 NonSecureEl2Flags; |
1202 | UINT64 CounterReadBlockAddress; |
1203 | UINT32 PlatformTimerCount; |
1204 | UINT32 PlatformTimerOffset; |
1205 | |
1206 | } ACPI_TABLE_GTDT; |
1207 | |
1208 | /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ |
1209 | |
1210 | #define ACPI_GTDT_INTERRUPT_MODE (1) |
1211 | #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) |
1212 | #define ACPI_GTDT_ALWAYS_ON (1<<2) |
1213 | |
1214 | typedef struct acpi_gtdt_el2 |
1215 | { |
1216 | UINT32 VirtualEL2TimerGsiv; |
1217 | UINT32 VirtualEL2TimerFlags; |
1218 | } ACPI_GTDT_EL2; |
1219 | |
1220 | |
1221 | /* Common GTDT subtable header */ |
1222 | |
1223 | typedef struct |
1224 | { |
1225 | UINT8 ; |
1226 | UINT16 ; |
1227 | |
1228 | } ; |
1229 | |
1230 | /* Values for GTDT subtable type above */ |
1231 | |
1232 | enum AcpiGtdtType |
1233 | { |
1234 | ACPI_GTDT_TYPE_TIMER_BLOCK = 0, |
1235 | ACPI_GTDT_TYPE_WATCHDOG = 1, |
1236 | ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ |
1237 | }; |
1238 | |
1239 | |
1240 | /* GTDT Subtables, correspond to Type in acpi_gtdt_header */ |
1241 | |
1242 | /* 0: Generic Timer Block */ |
1243 | |
1244 | typedef struct acpi_gtdt_timer_block |
1245 | { |
1246 | ACPI_GTDT_HEADER ; |
1247 | UINT8 Reserved; |
1248 | UINT64 BlockAddress; |
1249 | UINT32 TimerCount; |
1250 | UINT32 TimerOffset; |
1251 | |
1252 | } ACPI_GTDT_TIMER_BLOCK; |
1253 | |
1254 | /* Timer Sub-Structure, one per timer */ |
1255 | |
1256 | typedef struct acpi_gtdt_timer_entry |
1257 | { |
1258 | UINT8 ; |
1259 | UINT8 Reserved[3]; |
1260 | UINT64 BaseAddress; |
1261 | UINT64 El0BaseAddress; |
1262 | UINT32 TimerInterrupt; |
1263 | UINT32 TimerFlags; |
1264 | UINT32 VirtualTimerInterrupt; |
1265 | UINT32 VirtualTimerFlags; |
1266 | UINT32 CommonFlags; |
1267 | |
1268 | } ACPI_GTDT_TIMER_ENTRY; |
1269 | |
1270 | /* Flag Definitions: TimerFlags and VirtualTimerFlags above */ |
1271 | |
1272 | #define ACPI_GTDT_GT_IRQ_MODE (1) |
1273 | #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) |
1274 | |
1275 | /* Flag Definitions: CommonFlags above */ |
1276 | |
1277 | #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) |
1278 | #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) |
1279 | |
1280 | |
1281 | /* 1: SBSA Generic Watchdog Structure */ |
1282 | |
1283 | typedef struct acpi_gtdt_watchdog |
1284 | { |
1285 | ACPI_GTDT_HEADER ; |
1286 | UINT8 Reserved; |
1287 | UINT64 RefreshFrameAddress; |
1288 | UINT64 ControlFrameAddress; |
1289 | UINT32 TimerInterrupt; |
1290 | UINT32 TimerFlags; |
1291 | |
1292 | } ACPI_GTDT_WATCHDOG; |
1293 | |
1294 | /* Flag Definitions: TimerFlags above */ |
1295 | |
1296 | #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) |
1297 | #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) |
1298 | #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) |
1299 | |
1300 | |
1301 | /******************************************************************************* |
1302 | * |
1303 | * HEST - Hardware Error Source Table (ACPI 4.0) |
1304 | * Version 1 |
1305 | * |
1306 | ******************************************************************************/ |
1307 | |
1308 | typedef struct acpi_table_hest |
1309 | { |
1310 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
1311 | UINT32 ErrorSourceCount; |
1312 | |
1313 | } ACPI_TABLE_HEST; |
1314 | |
1315 | |
1316 | /* HEST subtable header */ |
1317 | |
1318 | typedef struct |
1319 | { |
1320 | UINT16 ; |
1321 | UINT16 ; |
1322 | |
1323 | } ; |
1324 | |
1325 | |
1326 | /* Values for Type field above for subtables */ |
1327 | |
1328 | enum AcpiHestTypes |
1329 | { |
1330 | ACPI_HEST_TYPE_IA32_CHECK = 0, |
1331 | ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, |
1332 | ACPI_HEST_TYPE_IA32_NMI = 2, |
1333 | ACPI_HEST_TYPE_NOT_USED3 = 3, |
1334 | ACPI_HEST_TYPE_NOT_USED4 = 4, |
1335 | ACPI_HEST_TYPE_NOT_USED5 = 5, |
1336 | ACPI_HEST_TYPE_AER_ROOT_PORT = 6, |
1337 | ACPI_HEST_TYPE_AER_ENDPOINT = 7, |
1338 | ACPI_HEST_TYPE_AER_BRIDGE = 8, |
1339 | ACPI_HEST_TYPE_GENERIC_ERROR = 9, |
1340 | ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, |
1341 | ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, |
1342 | ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ |
1343 | }; |
1344 | |
1345 | |
1346 | /* |
1347 | * HEST substructures contained in subtables |
1348 | */ |
1349 | |
1350 | /* |
1351 | * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and |
1352 | * ACPI_HEST_IA_CORRECTED structures. |
1353 | */ |
1354 | typedef struct acpi_hest_ia_error_bank |
1355 | { |
1356 | UINT8 BankNumber; |
1357 | UINT8 ClearStatusOnInit; |
1358 | UINT8 StatusFormat; |
1359 | UINT8 Reserved; |
1360 | UINT32 ControlRegister; |
1361 | UINT64 ControlData; |
1362 | UINT32 StatusRegister; |
1363 | UINT32 AddressRegister; |
1364 | UINT32 MiscRegister; |
1365 | |
1366 | } ACPI_HEST_IA_ERROR_BANK; |
1367 | |
1368 | |
1369 | /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ |
1370 | |
1371 | typedef struct acpi_hest_aer_common |
1372 | { |
1373 | UINT16 Reserved1; |
1374 | UINT8 Flags; |
1375 | UINT8 Enabled; |
1376 | UINT32 RecordsToPreallocate; |
1377 | UINT32 MaxSectionsPerRecord; |
1378 | UINT32 Bus; /* Bus and Segment numbers */ |
1379 | UINT16 Device; |
1380 | UINT16 Function; |
1381 | UINT16 DeviceControl; |
1382 | UINT16 Reserved2; |
1383 | UINT32 UncorrectableMask; |
1384 | UINT32 UncorrectableSeverity; |
1385 | UINT32 CorrectableMask; |
1386 | UINT32 AdvancedCapabilities; |
1387 | |
1388 | } ACPI_HEST_AER_COMMON; |
1389 | |
1390 | /* Masks for HEST Flags fields */ |
1391 | |
1392 | #define ACPI_HEST_FIRMWARE_FIRST (1) |
1393 | #define ACPI_HEST_GLOBAL (1<<1) |
1394 | #define ACPI_HEST_GHES_ASSIST (1<<2) |
1395 | |
1396 | /* |
1397 | * Macros to access the bus/segment numbers in Bus field above: |
1398 | * Bus number is encoded in bits 7:0 |
1399 | * Segment number is encoded in bits 23:8 |
1400 | */ |
1401 | #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) |
1402 | #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) |
1403 | |
1404 | |
1405 | /* Hardware Error Notification */ |
1406 | |
1407 | typedef struct acpi_hest_notify |
1408 | { |
1409 | UINT8 Type; |
1410 | UINT8 Length; |
1411 | UINT16 ConfigWriteEnable; |
1412 | UINT32 PollInterval; |
1413 | UINT32 Vector; |
1414 | UINT32 PollingThresholdValue; |
1415 | UINT32 PollingThresholdWindow; |
1416 | UINT32 ErrorThresholdValue; |
1417 | UINT32 ErrorThresholdWindow; |
1418 | |
1419 | } ACPI_HEST_NOTIFY; |
1420 | |
1421 | /* Values for Notify Type field above */ |
1422 | |
1423 | enum AcpiHestNotifyTypes |
1424 | { |
1425 | ACPI_HEST_NOTIFY_POLLED = 0, |
1426 | ACPI_HEST_NOTIFY_EXTERNAL = 1, |
1427 | ACPI_HEST_NOTIFY_LOCAL = 2, |
1428 | ACPI_HEST_NOTIFY_SCI = 3, |
1429 | ACPI_HEST_NOTIFY_NMI = 4, |
1430 | ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ |
1431 | ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ |
1432 | ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ |
1433 | ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ |
1434 | ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ |
1435 | ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ |
1436 | ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ |
1437 | ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ |
1438 | }; |
1439 | |
1440 | /* Values for ConfigWriteEnable bitfield above */ |
1441 | |
1442 | #define ACPI_HEST_TYPE (1) |
1443 | #define ACPI_HEST_POLL_INTERVAL (1<<1) |
1444 | #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) |
1445 | #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) |
1446 | #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) |
1447 | #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) |
1448 | |
1449 | |
1450 | /* |
1451 | * HEST subtables |
1452 | */ |
1453 | |
1454 | /* 0: IA32 Machine Check Exception */ |
1455 | |
1456 | typedef struct acpi_hest_ia_machine_check |
1457 | { |
1458 | ACPI_HEST_HEADER ; |
1459 | UINT16 Reserved1; |
1460 | UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ |
1461 | UINT8 Enabled; |
1462 | UINT32 RecordsToPreallocate; |
1463 | UINT32 MaxSectionsPerRecord; |
1464 | UINT64 GlobalCapabilityData; |
1465 | UINT64 GlobalControlData; |
1466 | UINT8 NumHardwareBanks; |
1467 | UINT8 Reserved3[7]; |
1468 | |
1469 | } ACPI_HEST_IA_MACHINE_CHECK; |
1470 | |
1471 | |
1472 | /* 1: IA32 Corrected Machine Check */ |
1473 | |
1474 | typedef struct acpi_hest_ia_corrected |
1475 | { |
1476 | ACPI_HEST_HEADER ; |
1477 | UINT16 Reserved1; |
1478 | UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ |
1479 | UINT8 Enabled; |
1480 | UINT32 RecordsToPreallocate; |
1481 | UINT32 MaxSectionsPerRecord; |
1482 | ACPI_HEST_NOTIFY Notify; |
1483 | UINT8 NumHardwareBanks; |
1484 | UINT8 Reserved2[3]; |
1485 | |
1486 | } ACPI_HEST_IA_CORRECTED; |
1487 | |
1488 | |
1489 | /* 2: IA32 Non-Maskable Interrupt */ |
1490 | |
1491 | typedef struct acpi_hest_ia_nmi |
1492 | { |
1493 | ACPI_HEST_HEADER ; |
1494 | UINT32 Reserved; |
1495 | UINT32 RecordsToPreallocate; |
1496 | UINT32 MaxSectionsPerRecord; |
1497 | UINT32 MaxRawDataLength; |
1498 | |
1499 | } ACPI_HEST_IA_NMI; |
1500 | |
1501 | |
1502 | /* 3,4,5: Not used */ |
1503 | |
1504 | /* 6: PCI Express Root Port AER */ |
1505 | |
1506 | typedef struct acpi_hest_aer_root |
1507 | { |
1508 | ACPI_HEST_HEADER ; |
1509 | ACPI_HEST_AER_COMMON Aer; |
1510 | UINT32 RootErrorCommand; |
1511 | |
1512 | } ACPI_HEST_AER_ROOT; |
1513 | |
1514 | |
1515 | /* 7: PCI Express AER (AER Endpoint) */ |
1516 | |
1517 | typedef struct acpi_hest_aer |
1518 | { |
1519 | ACPI_HEST_HEADER ; |
1520 | ACPI_HEST_AER_COMMON Aer; |
1521 | |
1522 | } ACPI_HEST_AER; |
1523 | |
1524 | |
1525 | /* 8: PCI Express/PCI-X Bridge AER */ |
1526 | |
1527 | typedef struct acpi_hest_aer_bridge |
1528 | { |
1529 | ACPI_HEST_HEADER ; |
1530 | ACPI_HEST_AER_COMMON Aer; |
1531 | UINT32 UncorrectableMask2; |
1532 | UINT32 UncorrectableSeverity2; |
1533 | UINT32 AdvancedCapabilities2; |
1534 | |
1535 | } ACPI_HEST_AER_BRIDGE; |
1536 | |
1537 | |
1538 | /* 9: Generic Hardware Error Source */ |
1539 | |
1540 | typedef struct acpi_hest_generic |
1541 | { |
1542 | ACPI_HEST_HEADER ; |
1543 | UINT16 RelatedSourceId; |
1544 | UINT8 Reserved; |
1545 | UINT8 Enabled; |
1546 | UINT32 RecordsToPreallocate; |
1547 | UINT32 MaxSectionsPerRecord; |
1548 | UINT32 MaxRawDataLength; |
1549 | ACPI_GENERIC_ADDRESS ErrorStatusAddress; |
1550 | ACPI_HEST_NOTIFY Notify; |
1551 | UINT32 ErrorBlockLength; |
1552 | |
1553 | } ACPI_HEST_GENERIC; |
1554 | |
1555 | |
1556 | /* 10: Generic Hardware Error Source, version 2 */ |
1557 | |
1558 | typedef struct acpi_hest_generic_v2 |
1559 | { |
1560 | ACPI_HEST_HEADER ; |
1561 | UINT16 RelatedSourceId; |
1562 | UINT8 Reserved; |
1563 | UINT8 Enabled; |
1564 | UINT32 RecordsToPreallocate; |
1565 | UINT32 MaxSectionsPerRecord; |
1566 | UINT32 MaxRawDataLength; |
1567 | ACPI_GENERIC_ADDRESS ErrorStatusAddress; |
1568 | ACPI_HEST_NOTIFY Notify; |
1569 | UINT32 ErrorBlockLength; |
1570 | ACPI_GENERIC_ADDRESS ReadAckRegister; |
1571 | UINT64 ReadAckPreserve; |
1572 | UINT64 ReadAckWrite; |
1573 | |
1574 | } ACPI_HEST_GENERIC_V2; |
1575 | |
1576 | |
1577 | /* Generic Error Status block */ |
1578 | |
1579 | typedef struct acpi_hest_generic_status |
1580 | { |
1581 | UINT32 BlockStatus; |
1582 | UINT32 RawDataOffset; |
1583 | UINT32 RawDataLength; |
1584 | UINT32 DataLength; |
1585 | UINT32 ErrorSeverity; |
1586 | |
1587 | } ACPI_HEST_GENERIC_STATUS; |
1588 | |
1589 | /* Values for BlockStatus flags above */ |
1590 | |
1591 | #define ACPI_HEST_UNCORRECTABLE (1) |
1592 | #define ACPI_HEST_CORRECTABLE (1<<1) |
1593 | #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) |
1594 | #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) |
1595 | #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ |
1596 | |
1597 | |
1598 | /* Generic Error Data entry */ |
1599 | |
1600 | typedef struct acpi_hest_generic_data |
1601 | { |
1602 | UINT8 SectionType[16]; |
1603 | UINT32 ErrorSeverity; |
1604 | UINT16 Revision; |
1605 | UINT8 ValidationBits; |
1606 | UINT8 Flags; |
1607 | UINT32 ErrorDataLength; |
1608 | UINT8 FruId[16]; |
1609 | UINT8 FruText[20]; |
1610 | |
1611 | } ACPI_HEST_GENERIC_DATA; |
1612 | |
1613 | /* Extension for revision 0x0300 */ |
1614 | |
1615 | typedef struct acpi_hest_generic_data_v300 |
1616 | { |
1617 | UINT8 SectionType[16]; |
1618 | UINT32 ErrorSeverity; |
1619 | UINT16 Revision; |
1620 | UINT8 ValidationBits; |
1621 | UINT8 Flags; |
1622 | UINT32 ErrorDataLength; |
1623 | UINT8 FruId[16]; |
1624 | UINT8 FruText[20]; |
1625 | UINT64 TimeStamp; |
1626 | |
1627 | } ACPI_HEST_GENERIC_DATA_V300; |
1628 | |
1629 | /* Values for ErrorSeverity above */ |
1630 | |
1631 | #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 |
1632 | #define ACPI_HEST_GEN_ERROR_FATAL 1 |
1633 | #define ACPI_HEST_GEN_ERROR_CORRECTED 2 |
1634 | #define ACPI_HEST_GEN_ERROR_NONE 3 |
1635 | |
1636 | /* Flags for ValidationBits above */ |
1637 | |
1638 | #define ACPI_HEST_GEN_VALID_FRU_ID (1) |
1639 | #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) |
1640 | #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) |
1641 | |
1642 | |
1643 | /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ |
1644 | |
1645 | typedef struct acpi_hest_ia_deferred_check |
1646 | { |
1647 | ACPI_HEST_HEADER ; |
1648 | UINT16 Reserved1; |
1649 | UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ |
1650 | UINT8 Enabled; |
1651 | UINT32 RecordsToPreallocate; |
1652 | UINT32 MaxSectionsPerRecord; |
1653 | ACPI_HEST_NOTIFY Notify; |
1654 | UINT8 NumHardwareBanks; |
1655 | UINT8 Reserved2[3]; |
1656 | |
1657 | } ACPI_HEST_IA_DEFERRED_CHECK; |
1658 | |
1659 | |
1660 | /******************************************************************************* |
1661 | * |
1662 | * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) |
1663 | * Version 1 |
1664 | * |
1665 | ******************************************************************************/ |
1666 | |
1667 | typedef struct acpi_table_hmat |
1668 | { |
1669 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
1670 | UINT32 Reserved; |
1671 | |
1672 | } ACPI_TABLE_HMAT; |
1673 | |
1674 | |
1675 | /* Values for HMAT structure types */ |
1676 | |
1677 | enum AcpiHmatType |
1678 | { |
1679 | ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subsystem address range */ |
1680 | ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ |
1681 | ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ |
1682 | ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ |
1683 | }; |
1684 | |
1685 | typedef struct acpi_hmat_structure |
1686 | { |
1687 | UINT16 Type; |
1688 | UINT16 Reserved; |
1689 | UINT32 Length; |
1690 | |
1691 | } ACPI_HMAT_STRUCTURE; |
1692 | |
1693 | |
1694 | /* |
1695 | * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE |
1696 | */ |
1697 | |
1698 | /* 0: Memory proximity domain attributes */ |
1699 | |
1700 | typedef struct acpi_hmat_proximity_domain |
1701 | { |
1702 | ACPI_HMAT_STRUCTURE Header; |
1703 | UINT16 Flags; |
1704 | UINT16 Reserved1; |
1705 | UINT32 ProcessorPD; /* Processor proximity domain */ |
1706 | UINT32 MemoryPD; /* Memory proximity domain */ |
1707 | UINT32 Reserved2; |
1708 | UINT64 Reserved3; |
1709 | UINT64 Reserved4; |
1710 | |
1711 | } ACPI_HMAT_PROXIMITY_DOMAIN; |
1712 | |
1713 | /* Masks for Flags field above */ |
1714 | |
1715 | #define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ |
1716 | #define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ |
1717 | #define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ |
1718 | |
1719 | |
1720 | /* 1: System locality latency and bandwidth information */ |
1721 | |
1722 | typedef struct acpi_hmat_locality |
1723 | { |
1724 | ACPI_HMAT_STRUCTURE ; |
1725 | UINT8 Flags; |
1726 | UINT8 DataType; |
1727 | UINT16 Reserved1; |
1728 | UINT32 NumberOfInitiatorPDs; |
1729 | UINT32 NumberOfTargetPDs; |
1730 | UINT32 Reserved2; |
1731 | UINT64 EntryBaseUnit; |
1732 | |
1733 | } ACPI_HMAT_LOCALITY; |
1734 | |
1735 | /* Masks for Flags field above */ |
1736 | |
1737 | #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) |
1738 | |
1739 | /* Values for Memory Hierarchy flag */ |
1740 | |
1741 | #define ACPI_HMAT_MEMORY 0 |
1742 | #define ACPI_HMAT_LAST_LEVEL_CACHE 1 |
1743 | #define ACPI_HMAT_1ST_LEVEL_CACHE 2 |
1744 | #define ACPI_HMAT_2ND_LEVEL_CACHE 3 |
1745 | #define ACPI_HMAT_3RD_LEVEL_CACHE 4 |
1746 | |
1747 | /* Values for DataType field above */ |
1748 | |
1749 | #define ACPI_HMAT_ACCESS_LATENCY 0 |
1750 | #define ACPI_HMAT_READ_LATENCY 1 |
1751 | #define ACPI_HMAT_WRITE_LATENCY 2 |
1752 | #define ACPI_HMAT_ACCESS_BANDWIDTH 3 |
1753 | #define ACPI_HMAT_READ_BANDWIDTH 4 |
1754 | #define ACPI_HMAT_WRITE_BANDWIDTH 5 |
1755 | |
1756 | |
1757 | /* 2: Memory side cache information */ |
1758 | |
1759 | typedef struct acpi_hmat_cache |
1760 | { |
1761 | ACPI_HMAT_STRUCTURE ; |
1762 | UINT32 MemoryPD; |
1763 | UINT32 Reserved1; |
1764 | UINT64 CacheSize; |
1765 | UINT32 CacheAttributes; |
1766 | UINT16 Reserved2; |
1767 | UINT16 NumberOfSMBIOSHandles; |
1768 | |
1769 | } ACPI_HMAT_CACHE; |
1770 | |
1771 | /* Masks for CacheAttributes field above */ |
1772 | |
1773 | #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) |
1774 | #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) |
1775 | #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) |
1776 | #define ACPI_HMAT_WRITE_POLICY (0x0000F000) |
1777 | #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) |
1778 | |
1779 | /* Values for cache associativity flag */ |
1780 | |
1781 | #define ACPI_HMAT_CA_NONE (0) |
1782 | #define ACPI_HMAT_CA_DIRECT_MAPPED (1) |
1783 | #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) |
1784 | |
1785 | /* Values for write policy flag */ |
1786 | |
1787 | #define ACPI_HMAT_CP_NONE (0) |
1788 | #define ACPI_HMAT_CP_WB (1) |
1789 | #define ACPI_HMAT_CP_WT (2) |
1790 | |
1791 | |
1792 | /******************************************************************************* |
1793 | * |
1794 | * HPET - High Precision Event Timer table |
1795 | * Version 1 |
1796 | * |
1797 | * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", |
1798 | * Version 1.0a, October 2004 |
1799 | * |
1800 | ******************************************************************************/ |
1801 | |
1802 | typedef struct acpi_table_hpet |
1803 | { |
1804 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
1805 | UINT32 Id; /* Hardware ID of event timer block */ |
1806 | ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ |
1807 | UINT8 Sequence; /* HPET sequence number */ |
1808 | UINT16 MinimumTick; /* Main counter min tick, periodic mode */ |
1809 | UINT8 Flags; |
1810 | |
1811 | } ACPI_TABLE_HPET; |
1812 | |
1813 | /* Masks for Flags field above */ |
1814 | |
1815 | #define ACPI_HPET_PAGE_PROTECT_MASK (3) |
1816 | |
1817 | /* Values for Page Protect flags */ |
1818 | |
1819 | enum AcpiHpetPageProtect |
1820 | { |
1821 | ACPI_HPET_NO_PAGE_PROTECT = 0, |
1822 | ACPI_HPET_PAGE_PROTECT4 = 1, |
1823 | ACPI_HPET_PAGE_PROTECT64 = 2 |
1824 | }; |
1825 | |
1826 | |
1827 | /******************************************************************************* |
1828 | * |
1829 | * IBFT - Boot Firmware Table |
1830 | * Version 1 |
1831 | * |
1832 | * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b |
1833 | * Specification", Version 1.01, March 1, 2007 |
1834 | * |
1835 | * Note: It appears that this table is not intended to appear in the RSDT/XSDT. |
1836 | * Therefore, it is not currently supported by the disassembler. |
1837 | * |
1838 | ******************************************************************************/ |
1839 | |
1840 | typedef struct acpi_table_ibft |
1841 | { |
1842 | ACPI_TABLE_HEADER ; /* Common ACPI table header */ |
1843 | UINT8 Reserved[12]; |
1844 | |
1845 | } ACPI_TABLE_IBFT; |
1846 | |
1847 | |
1848 | /* IBFT common subtable header */ |
1849 | |
1850 | typedef struct |
1851 | { |
1852 | UINT8 ; |
1853 | UINT8 ; |
1854 | UINT16 ; |
1855 | UINT8 ; |
1856 | UINT8 ; |
1857 | |
1858 | } ; |
1859 | |
1860 | /* Values for Type field above */ |
1861 | |
1862 | enum AcpiIbftType |
1863 | { |
1864 | ACPI_IBFT_TYPE_NOT_USED = 0, |
1865 | ACPI_IBFT_TYPE_CONTROL = 1, |
1866 | ACPI_IBFT_TYPE_INITIATOR = 2, |
1867 | ACPI_IBFT_TYPE_NIC = 3, |
1868 | ACPI_IBFT_TYPE_TARGET = 4, |
1869 | ACPI_IBFT_TYPE_EXTENSIONS = 5, |
1870 | ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ |
1871 | }; |
1872 | |
1873 | |
1874 | /* IBFT subtables */ |
1875 | |
1876 | typedef struct acpi_ibft_control |
1877 | { |
1878 | ACPI_IBFT_HEADER ; |
1879 | UINT16 Extensions; |
1880 | UINT16 InitiatorOffset; |
1881 | UINT16 Nic0Offset; |
1882 | UINT16 Target0Offset; |
1883 | UINT16 Nic1Offset; |
1884 | UINT16 Target1Offset; |
1885 | |
1886 | } ACPI_IBFT_CONTROL; |
1887 | |
1888 | typedef struct acpi_ibft_initiator |
1889 | { |
1890 | ACPI_IBFT_HEADER ; |
1891 | UINT8 SnsServer[16]; |
1892 | UINT8 SlpServer[16]; |
1893 | UINT8 PrimaryServer[16]; |
1894 | UINT8 SecondaryServer[16]; |
1895 | UINT16 NameLength; |
1896 | UINT16 NameOffset; |
1897 | |
1898 | } ACPI_IBFT_INITIATOR; |
1899 | |
1900 | typedef struct acpi_ibft_nic |
1901 | { |
1902 | ACPI_IBFT_HEADER ; |
1903 | UINT8 IpAddress[16]; |
1904 | UINT8 SubnetMaskPrefix; |
1905 | UINT8 Origin; |
1906 | UINT8 Gateway[16]; |
1907 | UINT8 PrimaryDns[16]; |
1908 | UINT8 SecondaryDns[16]; |
1909 | UINT8 Dhcp[16]; |
1910 | UINT16 Vlan; |
1911 | UINT8 MacAddress[6]; |
1912 | UINT16 PciAddress; |
1913 | UINT16 NameLength; |
1914 | UINT16 NameOffset; |
1915 | |
1916 | } ACPI_IBFT_NIC; |
1917 | |
1918 | typedef struct acpi_ibft_target |
1919 | { |
1920 | ACPI_IBFT_HEADER ; |
1921 | UINT8 TargetIpAddress[16]; |
1922 | UINT16 TargetIpSocket; |
1923 | UINT8 TargetBootLun[8]; |
1924 | UINT8 ChapType; |
1925 | UINT8 NicAssociation; |
1926 | UINT16 TargetNameLength; |
1927 | UINT16 TargetNameOffset; |
1928 | UINT16 ChapNameLength; |
1929 | UINT16 ChapNameOffset; |
1930 | UINT16 ChapSecretLength; |
1931 | UINT16 ChapSecretOffset; |
1932 | UINT16 ReverseChapNameLength; |
1933 | UINT16 ReverseChapNameOffset; |
1934 | UINT16 ReverseChapSecretLength; |
1935 | UINT16 ReverseChapSecretOffset; |
1936 | |
1937 | } ACPI_IBFT_TARGET; |
1938 | |
1939 | |
1940 | /* Reset to default packing */ |
1941 | |
1942 | #pragma pack() |
1943 | |
1944 | #endif /* __ACTBL1_H__ */ |
1945 | |