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