[ACPICA] Update to version 20180531. CORE-15222
[reactos.git] / drivers / bus / acpi / acpica / include / actbl1.h
1 /******************************************************************************
2 *
3 * Name: actbl1.h - Additional ACPI table definitions
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2018, 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 acpi_subtable_header
129 {
130 UINT8 Type;
131 UINT8 Length;
132
133 } ACPI_SUBTABLE_HEADER;
134
135
136 /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
137
138 typedef struct acpi_whea_header
139 {
140 UINT8 Action;
141 UINT8 Instruction;
142 UINT8 Flags;
143 UINT8 Reserved;
144 ACPI_GENERIC_ADDRESS RegisterRegion;
145 UINT64 Value; /* Value used with Read/Write register */
146 UINT64 Mask; /* Bitmask required for this register instruction */
147
148 } ACPI_WHEA_HEADER;
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 Header; /* Common ACPI table header */
163
164 } ACPI_TABLE_ASF;
165
166
167 /* ASF subtable header */
168
169 typedef struct acpi_asf_header
170 {
171 UINT8 Type;
172 UINT8 Reserved;
173 UINT16 Length;
174
175 } ACPI_ASF_HEADER;
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 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 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 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 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 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 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 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 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 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 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 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 Header; /* Common ACPI table header */
509 UINT32 InfoOffset;
510 UINT32 InfoCount;
511
512 } ACPI_TABLE_DBG2;
513
514
515 typedef struct acpi_dbg2_header
516 {
517 UINT32 InfoOffset;
518 UINT32 InfoCount;
519
520 } ACPI_DBG2_HEADER;
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 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 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 acpi_dmar_header
619 {
620 UINT16 Type;
621 UINT16 Length;
622
623 } ACPI_DMAR_HEADER;
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 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 Defininition */
693
694 typedef struct acpi_dmar_reserved_memory
695 {
696 ACPI_DMAR_HEADER 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 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 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 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 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 Header; /* Common ACPI table header */
847 UINT32 HeaderLength;
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 WheaHeader; /* 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 HeaderSize;
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 Header; /* Common ACPI table header */
971 UINT32 HeaderLength;
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 WheaHeader; /* 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 Header; /* Common ACPI table header */
1074
1075 } ACPI_TABLE_FPDT;
1076
1077
1078 /* FPDT subtable header (Performance Record Structure) */
1079
1080 typedef struct acpi_fpdt_header
1081 {
1082 UINT16 Type;
1083 UINT8 Length;
1084 UINT8 Revision;
1085
1086 } ACPI_FPDT_HEADER;
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 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 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 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 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 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 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
1215 /* Common GTDT subtable header */
1216
1217 typedef struct acpi_gtdt_header
1218 {
1219 UINT8 Type;
1220 UINT16 Length;
1221
1222 } ACPI_GTDT_HEADER;
1223
1224 /* Values for GTDT subtable type above */
1225
1226 enum AcpiGtdtType
1227 {
1228 ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
1229 ACPI_GTDT_TYPE_WATCHDOG = 1,
1230 ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */
1231 };
1232
1233
1234 /* GTDT Subtables, correspond to Type in acpi_gtdt_header */
1235
1236 /* 0: Generic Timer Block */
1237
1238 typedef struct acpi_gtdt_timer_block
1239 {
1240 ACPI_GTDT_HEADER Header;
1241 UINT8 Reserved;
1242 UINT64 BlockAddress;
1243 UINT32 TimerCount;
1244 UINT32 TimerOffset;
1245
1246 } ACPI_GTDT_TIMER_BLOCK;
1247
1248 /* Timer Sub-Structure, one per timer */
1249
1250 typedef struct acpi_gtdt_timer_entry
1251 {
1252 UINT8 FrameNumber;
1253 UINT8 Reserved[3];
1254 UINT64 BaseAddress;
1255 UINT64 El0BaseAddress;
1256 UINT32 TimerInterrupt;
1257 UINT32 TimerFlags;
1258 UINT32 VirtualTimerInterrupt;
1259 UINT32 VirtualTimerFlags;
1260 UINT32 CommonFlags;
1261
1262 } ACPI_GTDT_TIMER_ENTRY;
1263
1264 /* Flag Definitions: TimerFlags and VirtualTimerFlags above */
1265
1266 #define ACPI_GTDT_GT_IRQ_MODE (1)
1267 #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1)
1268
1269 /* Flag Definitions: CommonFlags above */
1270
1271 #define ACPI_GTDT_GT_IS_SECURE_TIMER (1)
1272 #define ACPI_GTDT_GT_ALWAYS_ON (1<<1)
1273
1274
1275 /* 1: SBSA Generic Watchdog Structure */
1276
1277 typedef struct acpi_gtdt_watchdog
1278 {
1279 ACPI_GTDT_HEADER Header;
1280 UINT8 Reserved;
1281 UINT64 RefreshFrameAddress;
1282 UINT64 ControlFrameAddress;
1283 UINT32 TimerInterrupt;
1284 UINT32 TimerFlags;
1285
1286 } ACPI_GTDT_WATCHDOG;
1287
1288 /* Flag Definitions: TimerFlags above */
1289
1290 #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1)
1291 #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1)
1292 #define ACPI_GTDT_WATCHDOG_SECURE (1<<2)
1293
1294
1295 /*******************************************************************************
1296 *
1297 * HEST - Hardware Error Source Table (ACPI 4.0)
1298 * Version 1
1299 *
1300 ******************************************************************************/
1301
1302 typedef struct acpi_table_hest
1303 {
1304 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1305 UINT32 ErrorSourceCount;
1306
1307 } ACPI_TABLE_HEST;
1308
1309
1310 /* HEST subtable header */
1311
1312 typedef struct acpi_hest_header
1313 {
1314 UINT16 Type;
1315 UINT16 SourceId;
1316
1317 } ACPI_HEST_HEADER;
1318
1319
1320 /* Values for Type field above for subtables */
1321
1322 enum AcpiHestTypes
1323 {
1324 ACPI_HEST_TYPE_IA32_CHECK = 0,
1325 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
1326 ACPI_HEST_TYPE_IA32_NMI = 2,
1327 ACPI_HEST_TYPE_NOT_USED3 = 3,
1328 ACPI_HEST_TYPE_NOT_USED4 = 4,
1329 ACPI_HEST_TYPE_NOT_USED5 = 5,
1330 ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
1331 ACPI_HEST_TYPE_AER_ENDPOINT = 7,
1332 ACPI_HEST_TYPE_AER_BRIDGE = 8,
1333 ACPI_HEST_TYPE_GENERIC_ERROR = 9,
1334 ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
1335 ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
1336 ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */
1337 };
1338
1339
1340 /*
1341 * HEST substructures contained in subtables
1342 */
1343
1344 /*
1345 * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
1346 * ACPI_HEST_IA_CORRECTED structures.
1347 */
1348 typedef struct acpi_hest_ia_error_bank
1349 {
1350 UINT8 BankNumber;
1351 UINT8 ClearStatusOnInit;
1352 UINT8 StatusFormat;
1353 UINT8 Reserved;
1354 UINT32 ControlRegister;
1355 UINT64 ControlData;
1356 UINT32 StatusRegister;
1357 UINT32 AddressRegister;
1358 UINT32 MiscRegister;
1359
1360 } ACPI_HEST_IA_ERROR_BANK;
1361
1362
1363 /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
1364
1365 typedef struct acpi_hest_aer_common
1366 {
1367 UINT16 Reserved1;
1368 UINT8 Flags;
1369 UINT8 Enabled;
1370 UINT32 RecordsToPreallocate;
1371 UINT32 MaxSectionsPerRecord;
1372 UINT32 Bus; /* Bus and Segment numbers */
1373 UINT16 Device;
1374 UINT16 Function;
1375 UINT16 DeviceControl;
1376 UINT16 Reserved2;
1377 UINT32 UncorrectableMask;
1378 UINT32 UncorrectableSeverity;
1379 UINT32 CorrectableMask;
1380 UINT32 AdvancedCapabilities;
1381
1382 } ACPI_HEST_AER_COMMON;
1383
1384 /* Masks for HEST Flags fields */
1385
1386 #define ACPI_HEST_FIRMWARE_FIRST (1)
1387 #define ACPI_HEST_GLOBAL (1<<1)
1388 #define ACPI_HEST_GHES_ASSIST (1<<2)
1389
1390 /*
1391 * Macros to access the bus/segment numbers in Bus field above:
1392 * Bus number is encoded in bits 7:0
1393 * Segment number is encoded in bits 23:8
1394 */
1395 #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF)
1396 #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF)
1397
1398
1399 /* Hardware Error Notification */
1400
1401 typedef struct acpi_hest_notify
1402 {
1403 UINT8 Type;
1404 UINT8 Length;
1405 UINT16 ConfigWriteEnable;
1406 UINT32 PollInterval;
1407 UINT32 Vector;
1408 UINT32 PollingThresholdValue;
1409 UINT32 PollingThresholdWindow;
1410 UINT32 ErrorThresholdValue;
1411 UINT32 ErrorThresholdWindow;
1412
1413 } ACPI_HEST_NOTIFY;
1414
1415 /* Values for Notify Type field above */
1416
1417 enum AcpiHestNotifyTypes
1418 {
1419 ACPI_HEST_NOTIFY_POLLED = 0,
1420 ACPI_HEST_NOTIFY_EXTERNAL = 1,
1421 ACPI_HEST_NOTIFY_LOCAL = 2,
1422 ACPI_HEST_NOTIFY_SCI = 3,
1423 ACPI_HEST_NOTIFY_NMI = 4,
1424 ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
1425 ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
1426 ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */
1427 ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
1428 ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
1429 ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
1430 ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */
1431 ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */
1432 };
1433
1434 /* Values for ConfigWriteEnable bitfield above */
1435
1436 #define ACPI_HEST_TYPE (1)
1437 #define ACPI_HEST_POLL_INTERVAL (1<<1)
1438 #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2)
1439 #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
1440 #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4)
1441 #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5)
1442
1443
1444 /*
1445 * HEST subtables
1446 */
1447
1448 /* 0: IA32 Machine Check Exception */
1449
1450 typedef struct acpi_hest_ia_machine_check
1451 {
1452 ACPI_HEST_HEADER Header;
1453 UINT16 Reserved1;
1454 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
1455 UINT8 Enabled;
1456 UINT32 RecordsToPreallocate;
1457 UINT32 MaxSectionsPerRecord;
1458 UINT64 GlobalCapabilityData;
1459 UINT64 GlobalControlData;
1460 UINT8 NumHardwareBanks;
1461 UINT8 Reserved3[7];
1462
1463 } ACPI_HEST_IA_MACHINE_CHECK;
1464
1465
1466 /* 1: IA32 Corrected Machine Check */
1467
1468 typedef struct acpi_hest_ia_corrected
1469 {
1470 ACPI_HEST_HEADER Header;
1471 UINT16 Reserved1;
1472 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
1473 UINT8 Enabled;
1474 UINT32 RecordsToPreallocate;
1475 UINT32 MaxSectionsPerRecord;
1476 ACPI_HEST_NOTIFY Notify;
1477 UINT8 NumHardwareBanks;
1478 UINT8 Reserved2[3];
1479
1480 } ACPI_HEST_IA_CORRECTED;
1481
1482
1483 /* 2: IA32 Non-Maskable Interrupt */
1484
1485 typedef struct acpi_hest_ia_nmi
1486 {
1487 ACPI_HEST_HEADER Header;
1488 UINT32 Reserved;
1489 UINT32 RecordsToPreallocate;
1490 UINT32 MaxSectionsPerRecord;
1491 UINT32 MaxRawDataLength;
1492
1493 } ACPI_HEST_IA_NMI;
1494
1495
1496 /* 3,4,5: Not used */
1497
1498 /* 6: PCI Express Root Port AER */
1499
1500 typedef struct acpi_hest_aer_root
1501 {
1502 ACPI_HEST_HEADER Header;
1503 ACPI_HEST_AER_COMMON Aer;
1504 UINT32 RootErrorCommand;
1505
1506 } ACPI_HEST_AER_ROOT;
1507
1508
1509 /* 7: PCI Express AER (AER Endpoint) */
1510
1511 typedef struct acpi_hest_aer
1512 {
1513 ACPI_HEST_HEADER Header;
1514 ACPI_HEST_AER_COMMON Aer;
1515
1516 } ACPI_HEST_AER;
1517
1518
1519 /* 8: PCI Express/PCI-X Bridge AER */
1520
1521 typedef struct acpi_hest_aer_bridge
1522 {
1523 ACPI_HEST_HEADER Header;
1524 ACPI_HEST_AER_COMMON Aer;
1525 UINT32 UncorrectableMask2;
1526 UINT32 UncorrectableSeverity2;
1527 UINT32 AdvancedCapabilities2;
1528
1529 } ACPI_HEST_AER_BRIDGE;
1530
1531
1532 /* 9: Generic Hardware Error Source */
1533
1534 typedef struct acpi_hest_generic
1535 {
1536 ACPI_HEST_HEADER Header;
1537 UINT16 RelatedSourceId;
1538 UINT8 Reserved;
1539 UINT8 Enabled;
1540 UINT32 RecordsToPreallocate;
1541 UINT32 MaxSectionsPerRecord;
1542 UINT32 MaxRawDataLength;
1543 ACPI_GENERIC_ADDRESS ErrorStatusAddress;
1544 ACPI_HEST_NOTIFY Notify;
1545 UINT32 ErrorBlockLength;
1546
1547 } ACPI_HEST_GENERIC;
1548
1549
1550 /* 10: Generic Hardware Error Source, version 2 */
1551
1552 typedef struct acpi_hest_generic_v2
1553 {
1554 ACPI_HEST_HEADER Header;
1555 UINT16 RelatedSourceId;
1556 UINT8 Reserved;
1557 UINT8 Enabled;
1558 UINT32 RecordsToPreallocate;
1559 UINT32 MaxSectionsPerRecord;
1560 UINT32 MaxRawDataLength;
1561 ACPI_GENERIC_ADDRESS ErrorStatusAddress;
1562 ACPI_HEST_NOTIFY Notify;
1563 UINT32 ErrorBlockLength;
1564 ACPI_GENERIC_ADDRESS ReadAckRegister;
1565 UINT64 ReadAckPreserve;
1566 UINT64 ReadAckWrite;
1567
1568 } ACPI_HEST_GENERIC_V2;
1569
1570
1571 /* Generic Error Status block */
1572
1573 typedef struct acpi_hest_generic_status
1574 {
1575 UINT32 BlockStatus;
1576 UINT32 RawDataOffset;
1577 UINT32 RawDataLength;
1578 UINT32 DataLength;
1579 UINT32 ErrorSeverity;
1580
1581 } ACPI_HEST_GENERIC_STATUS;
1582
1583 /* Values for BlockStatus flags above */
1584
1585 #define ACPI_HEST_UNCORRECTABLE (1)
1586 #define ACPI_HEST_CORRECTABLE (1<<1)
1587 #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2)
1588 #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3)
1589 #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */
1590
1591
1592 /* Generic Error Data entry */
1593
1594 typedef struct acpi_hest_generic_data
1595 {
1596 UINT8 SectionType[16];
1597 UINT32 ErrorSeverity;
1598 UINT16 Revision;
1599 UINT8 ValidationBits;
1600 UINT8 Flags;
1601 UINT32 ErrorDataLength;
1602 UINT8 FruId[16];
1603 UINT8 FruText[20];
1604
1605 } ACPI_HEST_GENERIC_DATA;
1606
1607 /* Extension for revision 0x0300 */
1608
1609 typedef struct acpi_hest_generic_data_v300
1610 {
1611 UINT8 SectionType[16];
1612 UINT32 ErrorSeverity;
1613 UINT16 Revision;
1614 UINT8 ValidationBits;
1615 UINT8 Flags;
1616 UINT32 ErrorDataLength;
1617 UINT8 FruId[16];
1618 UINT8 FruText[20];
1619 UINT64 TimeStamp;
1620
1621 } ACPI_HEST_GENERIC_DATA_V300;
1622
1623 /* Values for ErrorSeverity above */
1624
1625 #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0
1626 #define ACPI_HEST_GEN_ERROR_FATAL 1
1627 #define ACPI_HEST_GEN_ERROR_CORRECTED 2
1628 #define ACPI_HEST_GEN_ERROR_NONE 3
1629
1630 /* Flags for ValidationBits above */
1631
1632 #define ACPI_HEST_GEN_VALID_FRU_ID (1)
1633 #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1)
1634 #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2)
1635
1636
1637 /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
1638
1639 typedef struct acpi_hest_ia_deferred_check
1640 {
1641 ACPI_HEST_HEADER Header;
1642 UINT16 Reserved1;
1643 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
1644 UINT8 Enabled;
1645 UINT32 RecordsToPreallocate;
1646 UINT32 MaxSectionsPerRecord;
1647 ACPI_HEST_NOTIFY Notify;
1648 UINT8 NumHardwareBanks;
1649 UINT8 Reserved2[3];
1650
1651 } ACPI_HEST_IA_DEFERRED_CHECK;
1652
1653
1654 /*******************************************************************************
1655 *
1656 * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
1657 * Version 1
1658 *
1659 ******************************************************************************/
1660
1661 typedef struct acpi_table_hmat
1662 {
1663 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1664 UINT32 Reserved;
1665
1666 } ACPI_TABLE_HMAT;
1667
1668
1669 /* Values for HMAT structure types */
1670
1671 enum AcpiHmatType
1672 {
1673 ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */
1674 ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */
1675 ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */
1676 ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
1677 };
1678
1679 typedef struct acpi_hmat_structure
1680 {
1681 UINT16 Type;
1682 UINT16 Reserved;
1683 UINT32 Length;
1684
1685 } ACPI_HMAT_STRUCTURE;
1686
1687
1688 /*
1689 * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE
1690 */
1691
1692 /* 0: Memory subystem address range */
1693
1694 typedef struct acpi_hmat_address_range
1695 {
1696 ACPI_HMAT_STRUCTURE Header;
1697 UINT16 Flags;
1698 UINT16 Reserved1;
1699 UINT32 ProcessorPD; /* Processor proximity domain */
1700 UINT32 MemoryPD; /* Memory proximity domain */
1701 UINT32 Reserved2;
1702 UINT64 PhysicalAddressBase; /* Physical address range base */
1703 UINT64 PhysicalAddressLength; /* Physical address range length */
1704
1705 } ACPI_HMAT_ADDRESS_RANGE;
1706
1707 /* Masks for Flags field above */
1708
1709 #define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */
1710 #define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */
1711 #define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */
1712
1713
1714 /* 1: System locality latency and bandwidth information */
1715
1716 typedef struct acpi_hmat_locality
1717 {
1718 ACPI_HMAT_STRUCTURE Header;
1719 UINT8 Flags;
1720 UINT8 DataType;
1721 UINT16 Reserved1;
1722 UINT32 NumberOfInitiatorPDs;
1723 UINT32 NumberOfTargetPDs;
1724 UINT32 Reserved2;
1725 UINT64 EntryBaseUnit;
1726
1727 } ACPI_HMAT_LOCALITY;
1728
1729 /* Masks for Flags field above */
1730
1731 #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F)
1732
1733 /* Values for Memory Hierarchy flag */
1734
1735 #define ACPI_HMAT_MEMORY 0
1736 #define ACPI_HMAT_LAST_LEVEL_CACHE 1
1737 #define ACPI_HMAT_1ST_LEVEL_CACHE 2
1738 #define ACPI_HMAT_2ND_LEVEL_CACHE 3
1739 #define ACPI_HMAT_3RD_LEVEL_CACHE 4
1740
1741 /* Values for DataType field above */
1742
1743 #define ACPI_HMAT_ACCESS_LATENCY 0
1744 #define ACPI_HMAT_READ_LATENCY 1
1745 #define ACPI_HMAT_WRITE_LATENCY 2
1746 #define ACPI_HMAT_ACCESS_BANDWIDTH 3
1747 #define ACPI_HMAT_READ_BANDWIDTH 4
1748 #define ACPI_HMAT_WRITE_BANDWIDTH 5
1749
1750
1751 /* 2: Memory side cache information */
1752
1753 typedef struct acpi_hmat_cache
1754 {
1755 ACPI_HMAT_STRUCTURE Header;
1756 UINT32 MemoryPD;
1757 UINT32 Reserved1;
1758 UINT64 CacheSize;
1759 UINT32 CacheAttributes;
1760 UINT16 Reserved2;
1761 UINT16 NumberOfSMBIOSHandles;
1762
1763 } ACPI_HMAT_CACHE;
1764
1765 /* Masks for CacheAttributes field above */
1766
1767 #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F)
1768 #define ACPI_HMAT_CACHE_LEVEL (0x000000F0)
1769 #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00)
1770 #define ACPI_HMAT_WRITE_POLICY (0x0000F000)
1771 #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000)
1772
1773 /* Values for cache associativity flag */
1774
1775 #define ACPI_HMAT_CA_NONE (0)
1776 #define ACPI_HMAT_CA_DIRECT_MAPPED (1)
1777 #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2)
1778
1779 /* Values for write policy flag */
1780
1781 #define ACPI_HMAT_CP_NONE (0)
1782 #define ACPI_HMAT_CP_WB (1)
1783 #define ACPI_HMAT_CP_WT (2)
1784
1785
1786 /*******************************************************************************
1787 *
1788 * HPET - High Precision Event Timer table
1789 * Version 1
1790 *
1791 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
1792 * Version 1.0a, October 2004
1793 *
1794 ******************************************************************************/
1795
1796 typedef struct acpi_table_hpet
1797 {
1798 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1799 UINT32 Id; /* Hardware ID of event timer block */
1800 ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */
1801 UINT8 Sequence; /* HPET sequence number */
1802 UINT16 MinimumTick; /* Main counter min tick, periodic mode */
1803 UINT8 Flags;
1804
1805 } ACPI_TABLE_HPET;
1806
1807 /* Masks for Flags field above */
1808
1809 #define ACPI_HPET_PAGE_PROTECT_MASK (3)
1810
1811 /* Values for Page Protect flags */
1812
1813 enum AcpiHpetPageProtect
1814 {
1815 ACPI_HPET_NO_PAGE_PROTECT = 0,
1816 ACPI_HPET_PAGE_PROTECT4 = 1,
1817 ACPI_HPET_PAGE_PROTECT64 = 2
1818 };
1819
1820
1821 /*******************************************************************************
1822 *
1823 * IBFT - Boot Firmware Table
1824 * Version 1
1825 *
1826 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
1827 * Specification", Version 1.01, March 1, 2007
1828 *
1829 * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
1830 * Therefore, it is not currently supported by the disassembler.
1831 *
1832 ******************************************************************************/
1833
1834 typedef struct acpi_table_ibft
1835 {
1836 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1837 UINT8 Reserved[12];
1838
1839 } ACPI_TABLE_IBFT;
1840
1841
1842 /* IBFT common subtable header */
1843
1844 typedef struct acpi_ibft_header
1845 {
1846 UINT8 Type;
1847 UINT8 Version;
1848 UINT16 Length;
1849 UINT8 Index;
1850 UINT8 Flags;
1851
1852 } ACPI_IBFT_HEADER;
1853
1854 /* Values for Type field above */
1855
1856 enum AcpiIbftType
1857 {
1858 ACPI_IBFT_TYPE_NOT_USED = 0,
1859 ACPI_IBFT_TYPE_CONTROL = 1,
1860 ACPI_IBFT_TYPE_INITIATOR = 2,
1861 ACPI_IBFT_TYPE_NIC = 3,
1862 ACPI_IBFT_TYPE_TARGET = 4,
1863 ACPI_IBFT_TYPE_EXTENSIONS = 5,
1864 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */
1865 };
1866
1867
1868 /* IBFT subtables */
1869
1870 typedef struct acpi_ibft_control
1871 {
1872 ACPI_IBFT_HEADER Header;
1873 UINT16 Extensions;
1874 UINT16 InitiatorOffset;
1875 UINT16 Nic0Offset;
1876 UINT16 Target0Offset;
1877 UINT16 Nic1Offset;
1878 UINT16 Target1Offset;
1879
1880 } ACPI_IBFT_CONTROL;
1881
1882 typedef struct acpi_ibft_initiator
1883 {
1884 ACPI_IBFT_HEADER Header;
1885 UINT8 SnsServer[16];
1886 UINT8 SlpServer[16];
1887 UINT8 PrimaryServer[16];
1888 UINT8 SecondaryServer[16];
1889 UINT16 NameLength;
1890 UINT16 NameOffset;
1891
1892 } ACPI_IBFT_INITIATOR;
1893
1894 typedef struct acpi_ibft_nic
1895 {
1896 ACPI_IBFT_HEADER Header;
1897 UINT8 IpAddress[16];
1898 UINT8 SubnetMaskPrefix;
1899 UINT8 Origin;
1900 UINT8 Gateway[16];
1901 UINT8 PrimaryDns[16];
1902 UINT8 SecondaryDns[16];
1903 UINT8 Dhcp[16];
1904 UINT16 Vlan;
1905 UINT8 MacAddress[6];
1906 UINT16 PciAddress;
1907 UINT16 NameLength;
1908 UINT16 NameOffset;
1909
1910 } ACPI_IBFT_NIC;
1911
1912 typedef struct acpi_ibft_target
1913 {
1914 ACPI_IBFT_HEADER Header;
1915 UINT8 TargetIpAddress[16];
1916 UINT16 TargetIpSocket;
1917 UINT8 TargetBootLun[8];
1918 UINT8 ChapType;
1919 UINT8 NicAssociation;
1920 UINT16 TargetNameLength;
1921 UINT16 TargetNameOffset;
1922 UINT16 ChapNameLength;
1923 UINT16 ChapNameOffset;
1924 UINT16 ChapSecretLength;
1925 UINT16 ChapSecretOffset;
1926 UINT16 ReverseChapNameLength;
1927 UINT16 ReverseChapNameOffset;
1928 UINT16 ReverseChapSecretLength;
1929 UINT16 ReverseChapSecretOffset;
1930
1931 } ACPI_IBFT_TARGET;
1932
1933
1934 /* Reset to default packing */
1935
1936 #pragma pack()
1937
1938 #endif /* __ACTBL1_H__ */