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