1/******************************************************************************
2 *
3 * Name: actbl1.h - Additional ACPI table definitions
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2019, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACTBL1_H__
45#define __ACTBL1_H__
46
47
48/*******************************************************************************
49 *
50 * Additional ACPI Tables
51 *
52 * These tables are not consumed directly by the ACPICA subsystem, but are
53 * included here to support device drivers and the AML disassembler.
54 *
55 ******************************************************************************/
56
57
58/*
59 * Values for description table header signatures for tables defined in this
60 * file. Useful because they make it more difficult to inadvertently type in
61 * the wrong signature.
62 */
63#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */
64#define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */
65#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */
66#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */
67#define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */
68#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */
69#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */
70#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */
71#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */
72#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */
73#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
74#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
75#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
76#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */
77#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */
78#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
79#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */
80#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */
81#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */
82
83#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */
84#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */
85
86
87/* Reserved table signatures */
88
89#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */
90#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */
91
92/*
93 * These tables have been seen in the field, but no definition has been found
94 */
95#ifdef ACPI_UNDEFINED_TABLES
96#define ACPI_SIG_ATKG "ATKG"
97#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */
98#define ACPI_SIG_IEIT "IEIT"
99#endif
100
101/*
102 * All tables must be byte-packed to match the ACPI specification, since
103 * the tables are provided by the system BIOS.
104 */
105#pragma pack(1)
106
107/*
108 * Note: C bitfields are not used for this reason:
109 *
110 * "Bitfields are great and easy to read, but unfortunately the C language
111 * does not specify the layout of bitfields in memory, which means they are
112 * essentially useless for dealing with packed data in on-disk formats or
113 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
114 * this decision was a design error in C. Ritchie could have picked an order
115 * and stuck with it." Norman Ramsey.
116 * See http://stackoverflow.com/a/1053662/41661
117 */
118
119
120/*******************************************************************************
121 *
122 * Common subtable headers
123 *
124 ******************************************************************************/
125
126/* Generic subtable header (used in MADT, SRAT, etc.) */
127
128typedef 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
138typedef 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
160typedef 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
169typedef 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
180enum 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
196typedef 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
215typedef 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
225typedef 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
245typedef 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
254typedef 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
266typedef 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
282typedef 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
298typedef 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
309typedef 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
329enum 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
351typedef 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
378typedef 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
394typedef 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
404typedef 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
423typedef 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
432typedef 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
449typedef 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
470typedef 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
506typedef 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
515typedef struct acpi_dbg2_header
516{
517 UINT32 InfoOffset;
518 UINT32 InfoCount;
519
520} ACPI_DBG2_HEADER;
521
522
523/* Debug Device Information Subtable */
524
525typedef 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
580typedef 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
600typedef 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
618typedef 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
627enum 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
640typedef 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
652enum 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
663typedef 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
677typedef 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 Definition */
693
694typedef 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
711typedef 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
727typedef 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
739typedef 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
757typedef 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
782typedef 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
793typedef struct acpi_drtm_resource
794{
795 UINT8 Size[7];
796 UINT8 Type;
797 UINT64 Address;
798
799} ACPI_DRTM_RESOURCE;
800
801typedef 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
810typedef 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
825typedef 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
844typedef 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
857typedef 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
869enum 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
887enum 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
898typedef 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
910typedef 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
924typedef 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
935enum 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
968typedef 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
980typedef 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
992enum 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
1016enum 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
1042enum 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
1056typedef 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
1071typedef 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
1080typedef 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
1090enum 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
1103typedef 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
1114typedef 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 */
1127typedef 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
1141enum AcpiS3ptType
1142{
1143 ACPI_S3PT_TYPE_RESUME = 0,
1144 ACPI_S3PT_TYPE_SUSPEND = 1,
1145 ACPI_FPDT_BOOT_PERFORMANCE = 2
1146};
1147
1148typedef 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
1157typedef 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 */
1169typedef 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
1189typedef 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
1214typedef struct acpi_gtdt_el2
1215{
1216 UINT32 VirtualEL2TimerGsiv;
1217 UINT32 VirtualEL2TimerFlags;
1218} ACPI_GTDT_EL2;
1219
1220
1221/* Common GTDT subtable header */
1222
1223typedef struct acpi_gtdt_header
1224{
1225 UINT8 Type;
1226 UINT16 Length;
1227
1228} ACPI_GTDT_HEADER;
1229
1230/* Values for GTDT subtable type above */
1231
1232enum AcpiGtdtType
1233{
1234 ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
1235 ACPI_GTDT_TYPE_WATCHDOG = 1,
1236 ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */
1237};
1238
1239
1240/* GTDT Subtables, correspond to Type in acpi_gtdt_header */
1241
1242/* 0: Generic Timer Block */
1243
1244typedef struct acpi_gtdt_timer_block
1245{
1246 ACPI_GTDT_HEADER Header;
1247 UINT8 Reserved;
1248 UINT64 BlockAddress;
1249 UINT32 TimerCount;
1250 UINT32 TimerOffset;
1251
1252} ACPI_GTDT_TIMER_BLOCK;
1253
1254/* Timer Sub-Structure, one per timer */
1255
1256typedef struct acpi_gtdt_timer_entry
1257{
1258 UINT8 FrameNumber;
1259 UINT8 Reserved[3];
1260 UINT64 BaseAddress;
1261 UINT64 El0BaseAddress;
1262 UINT32 TimerInterrupt;
1263 UINT32 TimerFlags;
1264 UINT32 VirtualTimerInterrupt;
1265 UINT32 VirtualTimerFlags;
1266 UINT32 CommonFlags;
1267
1268} ACPI_GTDT_TIMER_ENTRY;
1269
1270/* Flag Definitions: TimerFlags and VirtualTimerFlags above */
1271
1272#define ACPI_GTDT_GT_IRQ_MODE (1)
1273#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1)
1274
1275/* Flag Definitions: CommonFlags above */
1276
1277#define ACPI_GTDT_GT_IS_SECURE_TIMER (1)
1278#define ACPI_GTDT_GT_ALWAYS_ON (1<<1)
1279
1280
1281/* 1: SBSA Generic Watchdog Structure */
1282
1283typedef struct acpi_gtdt_watchdog
1284{
1285 ACPI_GTDT_HEADER Header;
1286 UINT8 Reserved;
1287 UINT64 RefreshFrameAddress;
1288 UINT64 ControlFrameAddress;
1289 UINT32 TimerInterrupt;
1290 UINT32 TimerFlags;
1291
1292} ACPI_GTDT_WATCHDOG;
1293
1294/* Flag Definitions: TimerFlags above */
1295
1296#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1)
1297#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1)
1298#define ACPI_GTDT_WATCHDOG_SECURE (1<<2)
1299
1300
1301/*******************************************************************************
1302 *
1303 * HEST - Hardware Error Source Table (ACPI 4.0)
1304 * Version 1
1305 *
1306 ******************************************************************************/
1307
1308typedef struct acpi_table_hest
1309{
1310 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1311 UINT32 ErrorSourceCount;
1312
1313} ACPI_TABLE_HEST;
1314
1315
1316/* HEST subtable header */
1317
1318typedef struct acpi_hest_header
1319{
1320 UINT16 Type;
1321 UINT16 SourceId;
1322
1323} ACPI_HEST_HEADER;
1324
1325
1326/* Values for Type field above for subtables */
1327
1328enum AcpiHestTypes
1329{
1330 ACPI_HEST_TYPE_IA32_CHECK = 0,
1331 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
1332 ACPI_HEST_TYPE_IA32_NMI = 2,
1333 ACPI_HEST_TYPE_NOT_USED3 = 3,
1334 ACPI_HEST_TYPE_NOT_USED4 = 4,
1335 ACPI_HEST_TYPE_NOT_USED5 = 5,
1336 ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
1337 ACPI_HEST_TYPE_AER_ENDPOINT = 7,
1338 ACPI_HEST_TYPE_AER_BRIDGE = 8,
1339 ACPI_HEST_TYPE_GENERIC_ERROR = 9,
1340 ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
1341 ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
1342 ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */
1343};
1344
1345
1346/*
1347 * HEST substructures contained in subtables
1348 */
1349
1350/*
1351 * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
1352 * ACPI_HEST_IA_CORRECTED structures.
1353 */
1354typedef struct acpi_hest_ia_error_bank
1355{
1356 UINT8 BankNumber;
1357 UINT8 ClearStatusOnInit;
1358 UINT8 StatusFormat;
1359 UINT8 Reserved;
1360 UINT32 ControlRegister;
1361 UINT64 ControlData;
1362 UINT32 StatusRegister;
1363 UINT32 AddressRegister;
1364 UINT32 MiscRegister;
1365
1366} ACPI_HEST_IA_ERROR_BANK;
1367
1368
1369/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
1370
1371typedef struct acpi_hest_aer_common
1372{
1373 UINT16 Reserved1;
1374 UINT8 Flags;
1375 UINT8 Enabled;
1376 UINT32 RecordsToPreallocate;
1377 UINT32 MaxSectionsPerRecord;
1378 UINT32 Bus; /* Bus and Segment numbers */
1379 UINT16 Device;
1380 UINT16 Function;
1381 UINT16 DeviceControl;
1382 UINT16 Reserved2;
1383 UINT32 UncorrectableMask;
1384 UINT32 UncorrectableSeverity;
1385 UINT32 CorrectableMask;
1386 UINT32 AdvancedCapabilities;
1387
1388} ACPI_HEST_AER_COMMON;
1389
1390/* Masks for HEST Flags fields */
1391
1392#define ACPI_HEST_FIRMWARE_FIRST (1)
1393#define ACPI_HEST_GLOBAL (1<<1)
1394#define ACPI_HEST_GHES_ASSIST (1<<2)
1395
1396/*
1397 * Macros to access the bus/segment numbers in Bus field above:
1398 * Bus number is encoded in bits 7:0
1399 * Segment number is encoded in bits 23:8
1400 */
1401#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF)
1402#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF)
1403
1404
1405/* Hardware Error Notification */
1406
1407typedef struct acpi_hest_notify
1408{
1409 UINT8 Type;
1410 UINT8 Length;
1411 UINT16 ConfigWriteEnable;
1412 UINT32 PollInterval;
1413 UINT32 Vector;
1414 UINT32 PollingThresholdValue;
1415 UINT32 PollingThresholdWindow;
1416 UINT32 ErrorThresholdValue;
1417 UINT32 ErrorThresholdWindow;
1418
1419} ACPI_HEST_NOTIFY;
1420
1421/* Values for Notify Type field above */
1422
1423enum AcpiHestNotifyTypes
1424{
1425 ACPI_HEST_NOTIFY_POLLED = 0,
1426 ACPI_HEST_NOTIFY_EXTERNAL = 1,
1427 ACPI_HEST_NOTIFY_LOCAL = 2,
1428 ACPI_HEST_NOTIFY_SCI = 3,
1429 ACPI_HEST_NOTIFY_NMI = 4,
1430 ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
1431 ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
1432 ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */
1433 ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
1434 ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
1435 ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
1436 ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */
1437 ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */
1438};
1439
1440/* Values for ConfigWriteEnable bitfield above */
1441
1442#define ACPI_HEST_TYPE (1)
1443#define ACPI_HEST_POLL_INTERVAL (1<<1)
1444#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2)
1445#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
1446#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4)
1447#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5)
1448
1449
1450/*
1451 * HEST subtables
1452 */
1453
1454/* 0: IA32 Machine Check Exception */
1455
1456typedef struct acpi_hest_ia_machine_check
1457{
1458 ACPI_HEST_HEADER Header;
1459 UINT16 Reserved1;
1460 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
1461 UINT8 Enabled;
1462 UINT32 RecordsToPreallocate;
1463 UINT32 MaxSectionsPerRecord;
1464 UINT64 GlobalCapabilityData;
1465 UINT64 GlobalControlData;
1466 UINT8 NumHardwareBanks;
1467 UINT8 Reserved3[7];
1468
1469} ACPI_HEST_IA_MACHINE_CHECK;
1470
1471
1472/* 1: IA32 Corrected Machine Check */
1473
1474typedef struct acpi_hest_ia_corrected
1475{
1476 ACPI_HEST_HEADER Header;
1477 UINT16 Reserved1;
1478 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
1479 UINT8 Enabled;
1480 UINT32 RecordsToPreallocate;
1481 UINT32 MaxSectionsPerRecord;
1482 ACPI_HEST_NOTIFY Notify;
1483 UINT8 NumHardwareBanks;
1484 UINT8 Reserved2[3];
1485
1486} ACPI_HEST_IA_CORRECTED;
1487
1488
1489/* 2: IA32 Non-Maskable Interrupt */
1490
1491typedef struct acpi_hest_ia_nmi
1492{
1493 ACPI_HEST_HEADER Header;
1494 UINT32 Reserved;
1495 UINT32 RecordsToPreallocate;
1496 UINT32 MaxSectionsPerRecord;
1497 UINT32 MaxRawDataLength;
1498
1499} ACPI_HEST_IA_NMI;
1500
1501
1502/* 3,4,5: Not used */
1503
1504/* 6: PCI Express Root Port AER */
1505
1506typedef struct acpi_hest_aer_root
1507{
1508 ACPI_HEST_HEADER Header;
1509 ACPI_HEST_AER_COMMON Aer;
1510 UINT32 RootErrorCommand;
1511
1512} ACPI_HEST_AER_ROOT;
1513
1514
1515/* 7: PCI Express AER (AER Endpoint) */
1516
1517typedef struct acpi_hest_aer
1518{
1519 ACPI_HEST_HEADER Header;
1520 ACPI_HEST_AER_COMMON Aer;
1521
1522} ACPI_HEST_AER;
1523
1524
1525/* 8: PCI Express/PCI-X Bridge AER */
1526
1527typedef struct acpi_hest_aer_bridge
1528{
1529 ACPI_HEST_HEADER Header;
1530 ACPI_HEST_AER_COMMON Aer;
1531 UINT32 UncorrectableMask2;
1532 UINT32 UncorrectableSeverity2;
1533 UINT32 AdvancedCapabilities2;
1534
1535} ACPI_HEST_AER_BRIDGE;
1536
1537
1538/* 9: Generic Hardware Error Source */
1539
1540typedef struct acpi_hest_generic
1541{
1542 ACPI_HEST_HEADER Header;
1543 UINT16 RelatedSourceId;
1544 UINT8 Reserved;
1545 UINT8 Enabled;
1546 UINT32 RecordsToPreallocate;
1547 UINT32 MaxSectionsPerRecord;
1548 UINT32 MaxRawDataLength;
1549 ACPI_GENERIC_ADDRESS ErrorStatusAddress;
1550 ACPI_HEST_NOTIFY Notify;
1551 UINT32 ErrorBlockLength;
1552
1553} ACPI_HEST_GENERIC;
1554
1555
1556/* 10: Generic Hardware Error Source, version 2 */
1557
1558typedef struct acpi_hest_generic_v2
1559{
1560 ACPI_HEST_HEADER Header;
1561 UINT16 RelatedSourceId;
1562 UINT8 Reserved;
1563 UINT8 Enabled;
1564 UINT32 RecordsToPreallocate;
1565 UINT32 MaxSectionsPerRecord;
1566 UINT32 MaxRawDataLength;
1567 ACPI_GENERIC_ADDRESS ErrorStatusAddress;
1568 ACPI_HEST_NOTIFY Notify;
1569 UINT32 ErrorBlockLength;
1570 ACPI_GENERIC_ADDRESS ReadAckRegister;
1571 UINT64 ReadAckPreserve;
1572 UINT64 ReadAckWrite;
1573
1574} ACPI_HEST_GENERIC_V2;
1575
1576
1577/* Generic Error Status block */
1578
1579typedef struct acpi_hest_generic_status
1580{
1581 UINT32 BlockStatus;
1582 UINT32 RawDataOffset;
1583 UINT32 RawDataLength;
1584 UINT32 DataLength;
1585 UINT32 ErrorSeverity;
1586
1587} ACPI_HEST_GENERIC_STATUS;
1588
1589/* Values for BlockStatus flags above */
1590
1591#define ACPI_HEST_UNCORRECTABLE (1)
1592#define ACPI_HEST_CORRECTABLE (1<<1)
1593#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2)
1594#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3)
1595#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */
1596
1597
1598/* Generic Error Data entry */
1599
1600typedef struct acpi_hest_generic_data
1601{
1602 UINT8 SectionType[16];
1603 UINT32 ErrorSeverity;
1604 UINT16 Revision;
1605 UINT8 ValidationBits;
1606 UINT8 Flags;
1607 UINT32 ErrorDataLength;
1608 UINT8 FruId[16];
1609 UINT8 FruText[20];
1610
1611} ACPI_HEST_GENERIC_DATA;
1612
1613/* Extension for revision 0x0300 */
1614
1615typedef struct acpi_hest_generic_data_v300
1616{
1617 UINT8 SectionType[16];
1618 UINT32 ErrorSeverity;
1619 UINT16 Revision;
1620 UINT8 ValidationBits;
1621 UINT8 Flags;
1622 UINT32 ErrorDataLength;
1623 UINT8 FruId[16];
1624 UINT8 FruText[20];
1625 UINT64 TimeStamp;
1626
1627} ACPI_HEST_GENERIC_DATA_V300;
1628
1629/* Values for ErrorSeverity above */
1630
1631#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0
1632#define ACPI_HEST_GEN_ERROR_FATAL 1
1633#define ACPI_HEST_GEN_ERROR_CORRECTED 2
1634#define ACPI_HEST_GEN_ERROR_NONE 3
1635
1636/* Flags for ValidationBits above */
1637
1638#define ACPI_HEST_GEN_VALID_FRU_ID (1)
1639#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1)
1640#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2)
1641
1642
1643/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
1644
1645typedef struct acpi_hest_ia_deferred_check
1646{
1647 ACPI_HEST_HEADER Header;
1648 UINT16 Reserved1;
1649 UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
1650 UINT8 Enabled;
1651 UINT32 RecordsToPreallocate;
1652 UINT32 MaxSectionsPerRecord;
1653 ACPI_HEST_NOTIFY Notify;
1654 UINT8 NumHardwareBanks;
1655 UINT8 Reserved2[3];
1656
1657} ACPI_HEST_IA_DEFERRED_CHECK;
1658
1659
1660/*******************************************************************************
1661 *
1662 * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
1663 * Version 1
1664 *
1665 ******************************************************************************/
1666
1667typedef struct acpi_table_hmat
1668{
1669 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1670 UINT32 Reserved;
1671
1672} ACPI_TABLE_HMAT;
1673
1674
1675/* Values for HMAT structure types */
1676
1677enum AcpiHmatType
1678{
1679 ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subsystem address range */
1680 ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */
1681 ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */
1682 ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
1683};
1684
1685typedef struct acpi_hmat_structure
1686{
1687 UINT16 Type;
1688 UINT16 Reserved;
1689 UINT32 Length;
1690
1691} ACPI_HMAT_STRUCTURE;
1692
1693
1694/*
1695 * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE
1696 */
1697
1698/* 0: Memory proximity domain attributes */
1699
1700typedef struct acpi_hmat_proximity_domain
1701{
1702 ACPI_HMAT_STRUCTURE Header;
1703 UINT16 Flags;
1704 UINT16 Reserved1;
1705 UINT32 ProcessorPD; /* Processor proximity domain */
1706 UINT32 MemoryPD; /* Memory proximity domain */
1707 UINT32 Reserved2;
1708 UINT64 Reserved3;
1709 UINT64 Reserved4;
1710
1711} ACPI_HMAT_PROXIMITY_DOMAIN;
1712
1713/* Masks for Flags field above */
1714
1715#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */
1716#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */
1717#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */
1718
1719
1720/* 1: System locality latency and bandwidth information */
1721
1722typedef struct acpi_hmat_locality
1723{
1724 ACPI_HMAT_STRUCTURE Header;
1725 UINT8 Flags;
1726 UINT8 DataType;
1727 UINT16 Reserved1;
1728 UINT32 NumberOfInitiatorPDs;
1729 UINT32 NumberOfTargetPDs;
1730 UINT32 Reserved2;
1731 UINT64 EntryBaseUnit;
1732
1733} ACPI_HMAT_LOCALITY;
1734
1735/* Masks for Flags field above */
1736
1737#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F)
1738
1739/* Values for Memory Hierarchy flag */
1740
1741#define ACPI_HMAT_MEMORY 0
1742#define ACPI_HMAT_LAST_LEVEL_CACHE 1
1743#define ACPI_HMAT_1ST_LEVEL_CACHE 2
1744#define ACPI_HMAT_2ND_LEVEL_CACHE 3
1745#define ACPI_HMAT_3RD_LEVEL_CACHE 4
1746
1747/* Values for DataType field above */
1748
1749#define ACPI_HMAT_ACCESS_LATENCY 0
1750#define ACPI_HMAT_READ_LATENCY 1
1751#define ACPI_HMAT_WRITE_LATENCY 2
1752#define ACPI_HMAT_ACCESS_BANDWIDTH 3
1753#define ACPI_HMAT_READ_BANDWIDTH 4
1754#define ACPI_HMAT_WRITE_BANDWIDTH 5
1755
1756
1757/* 2: Memory side cache information */
1758
1759typedef struct acpi_hmat_cache
1760{
1761 ACPI_HMAT_STRUCTURE Header;
1762 UINT32 MemoryPD;
1763 UINT32 Reserved1;
1764 UINT64 CacheSize;
1765 UINT32 CacheAttributes;
1766 UINT16 Reserved2;
1767 UINT16 NumberOfSMBIOSHandles;
1768
1769} ACPI_HMAT_CACHE;
1770
1771/* Masks for CacheAttributes field above */
1772
1773#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F)
1774#define ACPI_HMAT_CACHE_LEVEL (0x000000F0)
1775#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00)
1776#define ACPI_HMAT_WRITE_POLICY (0x0000F000)
1777#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000)
1778
1779/* Values for cache associativity flag */
1780
1781#define ACPI_HMAT_CA_NONE (0)
1782#define ACPI_HMAT_CA_DIRECT_MAPPED (1)
1783#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2)
1784
1785/* Values for write policy flag */
1786
1787#define ACPI_HMAT_CP_NONE (0)
1788#define ACPI_HMAT_CP_WB (1)
1789#define ACPI_HMAT_CP_WT (2)
1790
1791
1792/*******************************************************************************
1793 *
1794 * HPET - High Precision Event Timer table
1795 * Version 1
1796 *
1797 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
1798 * Version 1.0a, October 2004
1799 *
1800 ******************************************************************************/
1801
1802typedef struct acpi_table_hpet
1803{
1804 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1805 UINT32 Id; /* Hardware ID of event timer block */
1806 ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */
1807 UINT8 Sequence; /* HPET sequence number */
1808 UINT16 MinimumTick; /* Main counter min tick, periodic mode */
1809 UINT8 Flags;
1810
1811} ACPI_TABLE_HPET;
1812
1813/* Masks for Flags field above */
1814
1815#define ACPI_HPET_PAGE_PROTECT_MASK (3)
1816
1817/* Values for Page Protect flags */
1818
1819enum AcpiHpetPageProtect
1820{
1821 ACPI_HPET_NO_PAGE_PROTECT = 0,
1822 ACPI_HPET_PAGE_PROTECT4 = 1,
1823 ACPI_HPET_PAGE_PROTECT64 = 2
1824};
1825
1826
1827/*******************************************************************************
1828 *
1829 * IBFT - Boot Firmware Table
1830 * Version 1
1831 *
1832 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
1833 * Specification", Version 1.01, March 1, 2007
1834 *
1835 * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
1836 * Therefore, it is not currently supported by the disassembler.
1837 *
1838 ******************************************************************************/
1839
1840typedef struct acpi_table_ibft
1841{
1842 ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1843 UINT8 Reserved[12];
1844
1845} ACPI_TABLE_IBFT;
1846
1847
1848/* IBFT common subtable header */
1849
1850typedef struct acpi_ibft_header
1851{
1852 UINT8 Type;
1853 UINT8 Version;
1854 UINT16 Length;
1855 UINT8 Index;
1856 UINT8 Flags;
1857
1858} ACPI_IBFT_HEADER;
1859
1860/* Values for Type field above */
1861
1862enum AcpiIbftType
1863{
1864 ACPI_IBFT_TYPE_NOT_USED = 0,
1865 ACPI_IBFT_TYPE_CONTROL = 1,
1866 ACPI_IBFT_TYPE_INITIATOR = 2,
1867 ACPI_IBFT_TYPE_NIC = 3,
1868 ACPI_IBFT_TYPE_TARGET = 4,
1869 ACPI_IBFT_TYPE_EXTENSIONS = 5,
1870 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */
1871};
1872
1873
1874/* IBFT subtables */
1875
1876typedef struct acpi_ibft_control
1877{
1878 ACPI_IBFT_HEADER Header;
1879 UINT16 Extensions;
1880 UINT16 InitiatorOffset;
1881 UINT16 Nic0Offset;
1882 UINT16 Target0Offset;
1883 UINT16 Nic1Offset;
1884 UINT16 Target1Offset;
1885
1886} ACPI_IBFT_CONTROL;
1887
1888typedef struct acpi_ibft_initiator
1889{
1890 ACPI_IBFT_HEADER Header;
1891 UINT8 SnsServer[16];
1892 UINT8 SlpServer[16];
1893 UINT8 PrimaryServer[16];
1894 UINT8 SecondaryServer[16];
1895 UINT16 NameLength;
1896 UINT16 NameOffset;
1897
1898} ACPI_IBFT_INITIATOR;
1899
1900typedef struct acpi_ibft_nic
1901{
1902 ACPI_IBFT_HEADER Header;
1903 UINT8 IpAddress[16];
1904 UINT8 SubnetMaskPrefix;
1905 UINT8 Origin;
1906 UINT8 Gateway[16];
1907 UINT8 PrimaryDns[16];
1908 UINT8 SecondaryDns[16];
1909 UINT8 Dhcp[16];
1910 UINT16 Vlan;
1911 UINT8 MacAddress[6];
1912 UINT16 PciAddress;
1913 UINT16 NameLength;
1914 UINT16 NameOffset;
1915
1916} ACPI_IBFT_NIC;
1917
1918typedef struct acpi_ibft_target
1919{
1920 ACPI_IBFT_HEADER Header;
1921 UINT8 TargetIpAddress[16];
1922 UINT16 TargetIpSocket;
1923 UINT8 TargetBootLun[8];
1924 UINT8 ChapType;
1925 UINT8 NicAssociation;
1926 UINT16 TargetNameLength;
1927 UINT16 TargetNameOffset;
1928 UINT16 ChapNameLength;
1929 UINT16 ChapNameOffset;
1930 UINT16 ChapSecretLength;
1931 UINT16 ChapSecretOffset;
1932 UINT16 ReverseChapNameLength;
1933 UINT16 ReverseChapNameOffset;
1934 UINT16 ReverseChapSecretLength;
1935 UINT16 ReverseChapSecretOffset;
1936
1937} ACPI_IBFT_TARGET;
1938
1939
1940/* Reset to default packing */
1941
1942#pragma pack()
1943
1944#endif /* __ACTBL1_H__ */
1945