]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - include/acpi/actbl1.h
Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[mirror_ubuntu-jammy-kernel.git] / include / acpi / actbl1.h
CommitLineData
95857638 1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
1da177e4
LT
2/******************************************************************************
3 *
793c2388 4 * Name: actbl1.h - Additional ACPI table definitions
1da177e4 5 *
4441e55d 6 * Copyright (C) 2000 - 2021, Intel Corp.
1da177e4 7 *
95857638 8 *****************************************************************************/
1da177e4
LT
9
10#ifndef __ACTBL1_H__
11#define __ACTBL1_H__
12
793c2388
BM
13/*******************************************************************************
14 *
e62f8227 15 * Additional ACPI Tables
793c2388
BM
16 *
17 * These tables are not consumed directly by the ACPICA subsystem, but are
18 * included here to support device drivers and the AML disassembler.
19 *
20 ******************************************************************************/
21
22/*
6e2d5ebd
BM
23 * Values for description table header signatures for tables defined in this
24 * file. Useful because they make it more difficult to inadvertently type in
25 * the wrong signature.
793c2388 26 */
e692fa13 27#define ACPI_SIG_AEST "AEST" /* Arm Error Source Table */
e62f8227 28#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */
970d9c9e 29#define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */
e62f8227
EK
30#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */
31#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */
7c5eab72 32#define ACPI_SIG_CEDT "CEDT" /* CXL Early Discovery Table */
793c2388 33#define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */
e62f8227
EK
34#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */
35#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */
36#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */
37#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */
38#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */
793c2388 39#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
970d9c9e
BM
40#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
41#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
e62f8227
EK
42#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */
43#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */
970d9c9e 44#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
e62f8227
EK
45#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */
46#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */
47#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */
48
49#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */
50#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */
51
52/* Reserved table signatures */
53
54#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */
55#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */
56
57/*
58 * These tables have been seen in the field, but no definition has been found
59 */
60#ifdef ACPI_UNDEFINED_TABLES
61#define ACPI_SIG_ATKG "ATKG"
62#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */
63#define ACPI_SIG_IEIT "IEIT"
64#endif
793c2388 65
793c2388
BM
66/*
67 * All tables must be byte-packed to match the ACPI specification, since
68 * the tables are provided by the system BIOS.
69 */
1da177e4
LT
70#pragma pack(1)
71
72/*
be030a57
BM
73 * Note: C bitfields are not used for this reason:
74 *
75 * "Bitfields are great and easy to read, but unfortunately the C language
76 * does not specify the layout of bitfields in memory, which means they are
77 * essentially useless for dealing with packed data in on-disk formats or
78 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
79 * this decision was a design error in C. Ritchie could have picked an order
80 * and stuck with it." Norman Ramsey.
81 * See http://stackoverflow.com/a/1053662/41661
1da177e4 82 */
793c2388 83
6e2d5ebd
BM
84/*******************************************************************************
85 *
86 * Common subtable headers
87 *
88 ******************************************************************************/
89
90/* Generic subtable header (used in MADT, SRAT, etc.) */
f3d2e786
BM
91
92struct acpi_subtable_header {
93 u8 type;
94 u8 length;
95};
96
6e2d5ebd 97/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
970d9c9e
BM
98
99struct acpi_whea_header {
100 u8 action;
101 u8 instruction;
102 u8 flags;
103 u8 reserved;
104 struct acpi_generic_address register_region;
3fa34777
BM
105 u64 value; /* Value used with Read/Write register */
106 u64 mask; /* Bitmask required for this register instruction */
970d9c9e
BM
107};
108
e62f8227
EK
109/*******************************************************************************
110 *
111 * ASF - Alert Standard Format table (Signature "ASF!")
112 * Revision 0x10
113 *
114 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
115 *
116 ******************************************************************************/
117
118struct acpi_table_asf {
119 struct acpi_table_header header; /* Common ACPI table header */
120};
121
122/* ASF subtable header */
123
124struct acpi_asf_header {
125 u8 type;
126 u8 reserved;
127 u16 length;
128};
129
130/* Values for Type field above */
131
132enum acpi_asf_type {
133 ACPI_ASF_TYPE_INFO = 0,
134 ACPI_ASF_TYPE_ALERT = 1,
135 ACPI_ASF_TYPE_CONTROL = 2,
136 ACPI_ASF_TYPE_BOOT = 3,
137 ACPI_ASF_TYPE_ADDRESS = 4,
138 ACPI_ASF_TYPE_RESERVED = 5
139};
140
141/*
142 * ASF subtables
143 */
144
145/* 0: ASF Information */
146
147struct acpi_asf_info {
148 struct acpi_asf_header header;
149 u8 min_reset_value;
150 u8 min_poll_interval;
151 u16 system_id;
152 u32 mfg_id;
153 u8 flags;
154 u8 reserved2[3];
155};
156
157/* Masks for Flags field above */
158
159#define ACPI_ASF_SMBUS_PROTOCOLS (1)
160
161/* 1: ASF Alerts */
162
163struct acpi_asf_alert {
164 struct acpi_asf_header header;
165 u8 assert_mask;
166 u8 deassert_mask;
167 u8 alerts;
168 u8 data_length;
169};
170
171struct acpi_asf_alert_data {
172 u8 address;
173 u8 command;
174 u8 mask;
175 u8 value;
176 u8 sensor_type;
177 u8 type;
178 u8 offset;
179 u8 source_type;
180 u8 severity;
181 u8 sensor_number;
182 u8 entity;
183 u8 instance;
184};
185
186/* 2: ASF Remote Control */
187
188struct acpi_asf_remote {
189 struct acpi_asf_header header;
190 u8 controls;
191 u8 data_length;
192 u16 reserved2;
193};
194
195struct acpi_asf_control_data {
196 u8 function;
197 u8 address;
198 u8 command;
199 u8 value;
200};
201
202/* 3: ASF RMCP Boot Options */
203
204struct acpi_asf_rmcp {
205 struct acpi_asf_header header;
206 u8 capabilities[7];
207 u8 completion_code;
208 u32 enterprise_id;
209 u8 command;
210 u16 parameter;
211 u16 boot_options;
212 u16 oem_parameters;
213};
214
215/* 4: ASF Address */
216
217struct acpi_asf_address {
218 struct acpi_asf_header header;
219 u8 eprom_address;
220 u8 devices;
221};
222
970d9c9e
BM
223/*******************************************************************************
224 *
6e2d5ebd
BM
225 * BERT - Boot Error Record Table (ACPI 4.0)
226 * Version 1
970d9c9e
BM
227 *
228 ******************************************************************************/
229
230struct acpi_table_bert {
231 struct acpi_table_header header; /* Common ACPI table header */
232 u32 region_length; /* Length of the boot error region */
b595076a 233 u64 address; /* Physical address of the error region */
970d9c9e
BM
234};
235
6e2d5ebd 236/* Boot Error Region (not a subtable, pointed to by Address field above) */
3fa34777 237
970d9c9e 238struct acpi_bert_region {
6e2d5ebd
BM
239 u32 block_status; /* Type of error information */
240 u32 raw_data_offset; /* Offset to raw error data */
241 u32 raw_data_length; /* Length of raw error data */
242 u32 data_length; /* Length of generic error data */
243 u32 error_severity; /* Severity code */
970d9c9e
BM
244};
245
6e2d5ebd 246/* Values for block_status flags above */
970d9c9e
BM
247
248#define ACPI_BERT_UNCORRECTABLE (1)
6e2d5ebd
BM
249#define ACPI_BERT_CORRECTABLE (1<<1)
250#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2)
251#define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3)
252#define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */
253
254/* Values for error_severity above */
255
256enum acpi_bert_error_severity {
257 ACPI_BERT_ERROR_CORRECTABLE = 0,
258 ACPI_BERT_ERROR_FATAL = 1,
259 ACPI_BERT_ERROR_CORRECTED = 2,
260 ACPI_BERT_ERROR_NONE = 3,
261 ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */
262};
263
264/*
265 * Note: The generic error data that follows the error_severity field above
266 * uses the struct acpi_hest_generic_data defined under the HEST table below
267 */
970d9c9e 268
e62f8227
EK
269/*******************************************************************************
270 *
271 * BGRT - Boot Graphics Resource Table (ACPI 5.0)
272 * Version 1
273 *
274 ******************************************************************************/
275
276struct acpi_table_bgrt {
277 struct acpi_table_header header; /* Common ACPI table header */
278 u16 version;
279 u8 status;
280 u8 image_type;
281 u64 image_address;
282 u32 image_offset_x;
283 u32 image_offset_y;
284};
285
286/* Flags for Status field above */
287
288#define ACPI_BGRT_DISPLAYED (1)
289#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1)
290
291/*******************************************************************************
292 *
293 * BOOT - Simple Boot Flag Table
294 * Version 1
295 *
296 * Conforms to the "Simple Boot Flag Specification", Version 2.1
297 *
298 ******************************************************************************/
299
300struct acpi_table_boot {
301 struct acpi_table_header header; /* Common ACPI table header */
302 u8 cmos_index; /* Index in CMOS RAM for the boot register */
303 u8 reserved[3];
304};
305
7c5eab72
BW
306/*******************************************************************************
307 *
308 * CEDT - CXL Early Discovery Table
309 * Version 1
310 *
311 * Conforms to the "CXL Early Discovery Table" (CXL 2.0)
312 *
313 ******************************************************************************/
314
315struct acpi_table_cedt {
316 struct acpi_table_header header; /* Common ACPI table header */
317};
318
319/* CEDT subtable header (Performance Record Structure) */
320
321struct acpi_cedt_header {
322 u8 type;
323 u8 reserved;
324 u16 length;
325};
326
327/* Values for Type field above */
328
329enum acpi_cedt_type {
330 ACPI_CEDT_TYPE_CHBS = 0,
4a2c1dcf
AS
331 ACPI_CEDT_TYPE_CFMWS = 1,
332 ACPI_CEDT_TYPE_RESERVED = 2,
7c5eab72
BW
333};
334
160c768e
AS
335/* Values for version field above */
336
337#define ACPI_CEDT_CHBS_VERSION_CXL11 (0)
338#define ACPI_CEDT_CHBS_VERSION_CXL20 (1)
339
340/* Values for length field above */
341
342#define ACPI_CEDT_CHBS_LENGTH_CXL11 (0x2000)
343#define ACPI_CEDT_CHBS_LENGTH_CXL20 (0x10000)
344
7c5eab72
BW
345/*
346 * CEDT subtables
347 */
348
349/* 0: CXL Host Bridge Structure */
350
351struct acpi_cedt_chbs {
519c8090 352 struct acpi_cedt_header header;
7c5eab72
BW
353 u32 uid;
354 u32 cxl_version;
355 u32 reserved;
356 u64 base;
357 u64 length;
358};
359
4a2c1dcf
AS
360/* 1: CXL Fixed Memory Window Structure */
361
362struct acpi_cedt_cfmws {
363 struct acpi_cedt_header header;
364 u32 reserved1;
365 u64 base_hpa;
366 u64 window_size;
367 u8 interleave_ways;
368 u8 interleave_arithmetic;
369 u16 reserved2;
370 u32 granularity;
371 u16 restrictions;
372 u16 qtg_id;
373 u32 interleave_targets[];
374};
375
376/* Values for Interleave Arithmetic field above */
377
378#define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO (0)
379
380/* Values for Restrictions field above */
381
382#define ACPI_CEDT_CFMWS_RESTRICT_TYPE2 (1)
383#define ACPI_CEDT_CFMWS_RESTRICT_TYPE3 (1<<1)
384#define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE (1<<2)
385#define ACPI_CEDT_CFMWS_RESTRICT_PMEM (1<<3)
386#define ACPI_CEDT_CFMWS_RESTRICT_FIXED (1<<4)
387
793c2388
BM
388/*******************************************************************************
389 *
6e2d5ebd
BM
390 * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
391 * Version 1
793c2388
BM
392 *
393 ******************************************************************************/
394
395struct acpi_table_cpep {
f3d2e786
BM
396 struct acpi_table_header header; /* Common ACPI table header */
397 u64 reserved;
793c2388
BM
398};
399
400/* Subtable */
401
402struct acpi_cpep_polling {
6e2d5ebd 403 struct acpi_subtable_header header;
f3d2e786
BM
404 u8 id; /* Processor ID */
405 u8 eid; /* Processor EID */
406 u32 interval; /* Polling interval (msec) */
793c2388
BM
407};
408
e62f8227
EK
409/*******************************************************************************
410 *
411 * CSRT - Core System Resource Table
412 * Version 0
413 *
414 * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011
415 *
416 ******************************************************************************/
417
418struct acpi_table_csrt {
419 struct acpi_table_header header; /* Common ACPI table header */
420};
421
422/* Resource Group subtable */
423
424struct acpi_csrt_group {
425 u32 length;
426 u32 vendor_id;
427 u32 subvendor_id;
428 u16 device_id;
429 u16 subdevice_id;
430 u16 revision;
431 u16 reserved;
432 u32 shared_info_length;
433
434 /* Shared data immediately follows (Length = shared_info_length) */
435};
436
437/* Shared Info subtable */
438
439struct acpi_csrt_shared_info {
440 u16 major_version;
441 u16 minor_version;
442 u32 mmio_base_low;
443 u32 mmio_base_high;
444 u32 gsi_interrupt;
445 u8 interrupt_polarity;
446 u8 interrupt_mode;
447 u8 num_channels;
448 u8 dma_address_width;
449 u16 base_request_line;
450 u16 num_handshake_signals;
451 u32 max_block_size;
452
453 /* Resource descriptors immediately follow (Length = Group length - shared_info_length) */
454};
455
456/* Resource Descriptor subtable */
457
458struct acpi_csrt_descriptor {
459 u32 length;
460 u16 type;
461 u16 subtype;
462 u32 uid;
463
464 /* Resource-specific information immediately follows */
465};
466
467/* Resource Types */
468
469#define ACPI_CSRT_TYPE_INTERRUPT 0x0001
470#define ACPI_CSRT_TYPE_TIMER 0x0002
471#define ACPI_CSRT_TYPE_DMA 0x0003
472
473/* Resource Subtypes */
474
475#define ACPI_CSRT_XRUPT_LINE 0x0000
476#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001
477#define ACPI_CSRT_TIMER 0x0000
478#define ACPI_CSRT_DMA_CHANNEL 0x0000
479#define ACPI_CSRT_DMA_CONTROLLER 0x0001
480
481/*******************************************************************************
482 *
483 * DBG2 - Debug Port Table 2
484 * Version 0 (Both main table and subtables)
485 *
200950b6 486 * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020
e62f8227
EK
487 *
488 ******************************************************************************/
489
490struct acpi_table_dbg2 {
491 struct acpi_table_header header; /* Common ACPI table header */
492 u32 info_offset;
493 u32 info_count;
494};
495
496struct acpi_dbg2_header {
497 u32 info_offset;
498 u32 info_count;
499};
500
501/* Debug Device Information Subtable */
502
503struct acpi_dbg2_device {
504 u8 revision;
505 u16 length;
506 u8 register_count; /* Number of base_address registers */
507 u16 namepath_length;
508 u16 namepath_offset;
509 u16 oem_data_length;
510 u16 oem_data_offset;
511 u16 port_type;
512 u16 port_subtype;
513 u16 reserved;
514 u16 base_address_offset;
515 u16 address_size_offset;
516 /*
517 * Data that follows:
518 * base_address (required) - Each in 12-byte Generic Address Structure format.
519 * address_size (required) - Array of u32 sizes corresponding to each base_address register.
520 * Namepath (required) - Null terminated string. Single dot if not supported.
521 * oem_data (optional) - Length is oem_data_length.
522 */
523};
524
525/* Types for port_type field above */
526
527#define ACPI_DBG2_SERIAL_PORT 0x8000
528#define ACPI_DBG2_1394_PORT 0x8001
529#define ACPI_DBG2_USB_PORT 0x8002
530#define ACPI_DBG2_NET_PORT 0x8003
531
532/* Subtypes for port_subtype field above */
533
534#define ACPI_DBG2_16550_COMPATIBLE 0x0000
535#define ACPI_DBG2_16550_SUBSET 0x0001
200950b6 536#define ACPI_DBG2_MAX311XE_SPI 0x0002
e62f8227 537#define ACPI_DBG2_ARM_PL011 0x0003
200950b6
MW
538#define ACPI_DBG2_MSM8X60 0x0004
539#define ACPI_DBG2_16550_NVIDIA 0x0005
540#define ACPI_DBG2_TI_OMAP 0x0006
541#define ACPI_DBG2_APM88XXXX 0x0008
542#define ACPI_DBG2_MSM8974 0x0009
543#define ACPI_DBG2_SAM5250 0x000A
544#define ACPI_DBG2_INTEL_USIF 0x000B
545#define ACPI_DBG2_IMX6 0x000C
e62f8227
EK
546#define ACPI_DBG2_ARM_SBSA_32BIT 0x000D
547#define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E
548#define ACPI_DBG2_ARM_DCC 0x000F
549#define ACPI_DBG2_BCM2835 0x0010
200950b6
MW
550#define ACPI_DBG2_SDM845_1_8432MHZ 0x0011
551#define ACPI_DBG2_16550_WITH_GAS 0x0012
552#define ACPI_DBG2_SDM845_7_372MHZ 0x0013
553#define ACPI_DBG2_INTEL_LPSS 0x0014
e62f8227
EK
554
555#define ACPI_DBG2_1394_STANDARD 0x0000
556
557#define ACPI_DBG2_USB_XHCI 0x0000
558#define ACPI_DBG2_USB_EHCI 0x0001
559
560/*******************************************************************************
561 *
562 * DBGP - Debug Port table
563 * Version 1
564 *
565 * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
566 *
567 ******************************************************************************/
568
569struct acpi_table_dbgp {
570 struct acpi_table_header header; /* Common ACPI table header */
571 u8 type; /* 0=full 16550, 1=subset of 16550 */
572 u8 reserved[3];
573 struct acpi_generic_address debug_port;
574};
575
576/*******************************************************************************
577 *
578 * DMAR - DMA Remapping table
579 * Version 1
580 *
581 * Conforms to "Intel Virtualization Technology for Directed I/O",
582 * Version 2.3, October 2014
583 *
584 ******************************************************************************/
585
586struct acpi_table_dmar {
587 struct acpi_table_header header; /* Common ACPI table header */
588 u8 width; /* Host Address Width */
589 u8 flags;
590 u8 reserved[10];
591};
592
593/* Masks for Flags field above */
594
595#define ACPI_DMAR_INTR_REMAP (1)
596#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1)
597#define ACPI_DMAR_X2APIC_MODE (1<<2)
598
599/* DMAR subtable header */
600
601struct acpi_dmar_header {
602 u16 type;
603 u16 length;
604};
605
606/* Values for subtable type in struct acpi_dmar_header */
607
608enum acpi_dmar_type {
609 ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
610 ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
611 ACPI_DMAR_TYPE_ROOT_ATS = 2,
612 ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3,
613 ACPI_DMAR_TYPE_NAMESPACE = 4,
81d3c75b
YC
614 ACPI_DMAR_TYPE_SATC = 5,
615 ACPI_DMAR_TYPE_RESERVED = 6 /* 6 and greater are reserved */
e62f8227
EK
616};
617
618/* DMAR Device Scope structure */
619
620struct acpi_dmar_device_scope {
621 u8 entry_type;
622 u8 length;
623 u16 reserved;
624 u8 enumeration_id;
625 u8 bus;
626};
627
628/* Values for entry_type in struct acpi_dmar_device_scope - device types */
629
630enum acpi_dmar_scope_type {
631 ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
632 ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
633 ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
634 ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
635 ACPI_DMAR_SCOPE_TYPE_HPET = 4,
636 ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5,
637 ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */
638};
639
640struct acpi_dmar_pci_path {
641 u8 device;
642 u8 function;
643};
644
645/*
646 * DMAR Subtables, correspond to Type in struct acpi_dmar_header
647 */
648
649/* 0: Hardware Unit Definition */
650
651struct acpi_dmar_hardware_unit {
652 struct acpi_dmar_header header;
653 u8 flags;
654 u8 reserved;
655 u16 segment;
656 u64 address; /* Register Base Address */
657};
658
659/* Masks for Flags field above */
660
661#define ACPI_DMAR_INCLUDE_ALL (1)
662
c163f90c 663/* 1: Reserved Memory Definition */
e62f8227
EK
664
665struct acpi_dmar_reserved_memory {
666 struct acpi_dmar_header header;
667 u16 reserved;
668 u16 segment;
669 u64 base_address; /* 4K aligned base address */
670 u64 end_address; /* 4K aligned limit address */
671};
672
673/* Masks for Flags field above */
674
675#define ACPI_DMAR_ALLOW_ALL (1)
676
677/* 2: Root Port ATS Capability Reporting Structure */
678
679struct acpi_dmar_atsr {
680 struct acpi_dmar_header header;
681 u8 flags;
682 u8 reserved;
683 u16 segment;
684};
685
686/* Masks for Flags field above */
687
688#define ACPI_DMAR_ALL_PORTS (1)
689
690/* 3: Remapping Hardware Static Affinity Structure */
691
692struct acpi_dmar_rhsa {
693 struct acpi_dmar_header header;
694 u32 reserved;
695 u64 base_address;
696 u32 proximity_domain;
697};
698
699/* 4: ACPI Namespace Device Declaration Structure */
700
701struct acpi_dmar_andd {
702 struct acpi_dmar_header header;
703 u8 reserved[3];
704 u8 device_number;
705 char device_name[1];
706};
707
81d3c75b
YC
708/* 5: SOC Integrated Address Translation Cache Reporting Structure */
709
710struct acpi_dmar_satc {
711 struct acpi_dmar_header header;
712 u8 flags;
713 u8 reserved;
714 u16 segment;
715};
e62f8227
EK
716/*******************************************************************************
717 *
718 * DRTM - Dynamic Root of Trust for Measurement table
719 * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0
720 * Table version 1
721 *
722 ******************************************************************************/
723
724struct acpi_table_drtm {
725 struct acpi_table_header header; /* Common ACPI table header */
726 u64 entry_base_address;
727 u64 entry_length;
728 u32 entry_address32;
729 u64 entry_address64;
730 u64 exit_address;
731 u64 log_area_address;
732 u32 log_area_length;
733 u64 arch_dependent_address;
734 u32 flags;
735};
736
737/* Flag Definitions for above */
738
739#define ACPI_DRTM_ACCESS_ALLOWED (1)
740#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1)
741#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2)
742#define ACPI_DRTM_AUTHORITY_ORDER (1<<3)
743
744/* 1) Validated Tables List (64-bit addresses) */
745
746struct acpi_drtm_vtable_list {
747 u32 validated_table_count;
748 u64 validated_tables[1];
749};
750
751/* 2) Resources List (of Resource Descriptors) */
752
753/* Resource Descriptor */
754
755struct acpi_drtm_resource {
756 u8 size[7];
757 u8 type;
758 u64 address;
759};
760
761struct acpi_drtm_resource_list {
762 u32 resource_count;
763 struct acpi_drtm_resource resources[1];
764};
765
766/* 3) Platform-specific Identifiers List */
767
768struct acpi_drtm_dps_id {
769 u32 dps_id_length;
770 u8 dps_id[16];
771};
772
793c2388
BM
773/*******************************************************************************
774 *
775 * ECDT - Embedded Controller Boot Resources Table
6e2d5ebd 776 * Version 1
793c2388
BM
777 *
778 ******************************************************************************/
779
f3d2e786
BM
780struct acpi_table_ecdt {
781 struct acpi_table_header header; /* Common ACPI table header */
782 struct acpi_generic_address control; /* Address of EC command/status register */
783 struct acpi_generic_address data; /* Address of EC data register */
793c2388 784 u32 uid; /* Unique ID - must be same as the EC _UID method */
f3d2e786
BM
785 u8 gpe; /* The GPE for the EC */
786 u8 id[1]; /* Full namepath of the EC in the ACPI namespace */
793c2388
BM
787};
788
970d9c9e
BM
789/*******************************************************************************
790 *
6e2d5ebd
BM
791 * EINJ - Error Injection Table (ACPI 4.0)
792 * Version 1
970d9c9e
BM
793 *
794 ******************************************************************************/
795
796struct acpi_table_einj {
797 struct acpi_table_header header; /* Common ACPI table header */
798 u32 header_length;
6e2d5ebd
BM
799 u8 flags;
800 u8 reserved[3];
970d9c9e
BM
801 u32 entries;
802};
803
804/* EINJ Injection Instruction Entries (actions) */
805
806struct acpi_einj_entry {
807 struct acpi_whea_header whea_header; /* Common header for WHEA tables */
808};
809
6e2d5ebd
BM
810/* Masks for Flags field above */
811
812#define ACPI_EINJ_PRESERVE (1)
813
970d9c9e
BM
814/* Values for Action field above */
815
816enum acpi_einj_actions {
817 ACPI_EINJ_BEGIN_OPERATION = 0,
818 ACPI_EINJ_GET_TRIGGER_TABLE = 1,
819 ACPI_EINJ_SET_ERROR_TYPE = 2,
820 ACPI_EINJ_GET_ERROR_TYPE = 3,
821 ACPI_EINJ_END_OPERATION = 4,
822 ACPI_EINJ_EXECUTE_OPERATION = 5,
823 ACPI_EINJ_CHECK_BUSY_STATUS = 6,
824 ACPI_EINJ_GET_COMMAND_STATUS = 7,
c5bd6537 825 ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
a88e0ce6
BM
826 ACPI_EINJ_GET_EXECUTE_TIMINGS = 9,
827 ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */
970d9c9e
BM
828 ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */
829};
830
831/* Values for Instruction field above */
832
833enum acpi_einj_instructions {
834 ACPI_EINJ_READ_REGISTER = 0,
835 ACPI_EINJ_READ_REGISTER_VALUE = 1,
836 ACPI_EINJ_WRITE_REGISTER = 2,
837 ACPI_EINJ_WRITE_REGISTER_VALUE = 3,
838 ACPI_EINJ_NOOP = 4,
c5bd6537
BM
839 ACPI_EINJ_FLUSH_CACHELINE = 5,
840 ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */
841};
842
843struct acpi_einj_error_type_with_addr {
844 u32 error_type;
845 u32 vendor_struct_offset;
846 u32 flags;
847 u32 apic_id;
848 u64 address;
849 u64 range;
850 u32 pcie_id;
851};
852
853struct acpi_einj_vendor {
854 u32 length;
855 u32 pcie_id;
856 u16 vendor_id;
857 u16 device_id;
858 u8 revision_id;
859 u8 reserved[3];
970d9c9e
BM
860};
861
3fa34777
BM
862/* EINJ Trigger Error Action Table */
863
864struct acpi_einj_trigger {
865 u32 header_size;
866 u32 revision;
867 u32 table_size;
868 u32 entry_count;
869};
870
6e2d5ebd
BM
871/* Command status return values */
872
873enum acpi_einj_command_status {
874 ACPI_EINJ_SUCCESS = 0,
875 ACPI_EINJ_FAILURE = 1,
876 ACPI_EINJ_INVALID_ACCESS = 2,
877 ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */
878};
879
880/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
881
882#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1)
883#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1)
884#define ACPI_EINJ_PROCESSOR_FATAL (1<<2)
885#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3)
886#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4)
887#define ACPI_EINJ_MEMORY_FATAL (1<<5)
888#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6)
889#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7)
890#define ACPI_EINJ_PCIX_FATAL (1<<8)
891#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9)
892#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10)
893#define ACPI_EINJ_PLATFORM_FATAL (1<<11)
c5bd6537 894#define ACPI_EINJ_VENDOR_DEFINED (1<<31)
6e2d5ebd 895
970d9c9e
BM
896/*******************************************************************************
897 *
6e2d5ebd
BM
898 * ERST - Error Record Serialization Table (ACPI 4.0)
899 * Version 1
970d9c9e
BM
900 *
901 ******************************************************************************/
902
903struct acpi_table_erst {
904 struct acpi_table_header header; /* Common ACPI table header */
905 u32 header_length;
906 u32 reserved;
907 u32 entries;
908};
909
910/* ERST Serialization Entries (actions) */
911
912struct acpi_erst_entry {
913 struct acpi_whea_header whea_header; /* Common header for WHEA tables */
914};
915
6e2d5ebd
BM
916/* Masks for Flags field above */
917
918#define ACPI_ERST_PRESERVE (1)
919
970d9c9e
BM
920/* Values for Action field above */
921
922enum acpi_erst_actions {
6e2d5ebd
BM
923 ACPI_ERST_BEGIN_WRITE = 0,
924 ACPI_ERST_BEGIN_READ = 1,
925 ACPI_ERST_BEGIN_CLEAR = 2,
926 ACPI_ERST_END = 3,
970d9c9e
BM
927 ACPI_ERST_SET_RECORD_OFFSET = 4,
928 ACPI_ERST_EXECUTE_OPERATION = 5,
929 ACPI_ERST_CHECK_BUSY_STATUS = 6,
930 ACPI_ERST_GET_COMMAND_STATUS = 7,
6e2d5ebd
BM
931 ACPI_ERST_GET_RECORD_ID = 8,
932 ACPI_ERST_SET_RECORD_ID = 9,
970d9c9e
BM
933 ACPI_ERST_GET_RECORD_COUNT = 10,
934 ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
935 ACPI_ERST_NOT_USED = 12,
936 ACPI_ERST_GET_ERROR_RANGE = 13,
937 ACPI_ERST_GET_ERROR_LENGTH = 14,
938 ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
a88e0ce6
BM
939 ACPI_ERST_EXECUTE_TIMINGS = 16,
940 ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */
970d9c9e
BM
941};
942
943/* Values for Instruction field above */
944
945enum acpi_erst_instructions {
946 ACPI_ERST_READ_REGISTER = 0,
947 ACPI_ERST_READ_REGISTER_VALUE = 1,
948 ACPI_ERST_WRITE_REGISTER = 2,
949 ACPI_ERST_WRITE_REGISTER_VALUE = 3,
950 ACPI_ERST_NOOP = 4,
951 ACPI_ERST_LOAD_VAR1 = 5,
952 ACPI_ERST_LOAD_VAR2 = 6,
953 ACPI_ERST_STORE_VAR1 = 7,
954 ACPI_ERST_ADD = 8,
955 ACPI_ERST_SUBTRACT = 9,
956 ACPI_ERST_ADD_VALUE = 10,
957 ACPI_ERST_SUBTRACT_VALUE = 11,
958 ACPI_ERST_STALL = 12,
959 ACPI_ERST_STALL_WHILE_TRUE = 13,
960 ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
961 ACPI_ERST_GOTO = 15,
962 ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
963 ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
964 ACPI_ERST_MOVE_DATA = 18,
965 ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */
966};
967
6e2d5ebd
BM
968/* Command status return values */
969
970enum acpi_erst_command_status {
54a2a15a 971 ACPI_ERST_SUCCESS = 0,
6e2d5ebd
BM
972 ACPI_ERST_NO_SPACE = 1,
973 ACPI_ERST_NOT_AVAILABLE = 2,
974 ACPI_ERST_FAILURE = 3,
975 ACPI_ERST_RECORD_EMPTY = 4,
976 ACPI_ERST_NOT_FOUND = 5,
977 ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */
978};
979
980/* Error Record Serialization Information */
981
982struct acpi_erst_info {
983 u16 signature; /* Should be "ER" */
984 u8 data[48];
985};
986
970d9c9e
BM
987/*******************************************************************************
988 *
e62f8227 989 * FPDT - Firmware Performance Data Table (ACPI 5.0)
6e2d5ebd 990 * Version 1
970d9c9e
BM
991 *
992 ******************************************************************************/
993
e62f8227 994struct acpi_table_fpdt {
970d9c9e 995 struct acpi_table_header header; /* Common ACPI table header */
970d9c9e
BM
996};
997
e62f8227 998/* FPDT subtable header (Performance Record Structure) */
3fa34777 999
e62f8227 1000struct acpi_fpdt_header {
3fa34777 1001 u16 type;
e62f8227
EK
1002 u8 length;
1003 u8 revision;
3fa34777
BM
1004};
1005
e62f8227
EK
1006/* Values for Type field above */
1007
1008enum acpi_fpdt_type {
1009 ACPI_FPDT_TYPE_BOOT = 0,
1010 ACPI_FPDT_TYPE_S3PERF = 1
1011};
1012
1013/*
1014 * FPDT subtables
1015 */
1016
1017/* 0: Firmware Basic Boot Performance Record */
1018
1019struct acpi_fpdt_boot_pointer {
1020 struct acpi_fpdt_header header;
1021 u8 reserved[4];
1022 u64 address;
1023};
1024
1025/* 1: S3 Performance Table Pointer Record */
1026
1027struct acpi_fpdt_s3pt_pointer {
1028 struct acpi_fpdt_header header;
1029 u8 reserved[4];
1030 u64 address;
1031};
1032
1033/*
1034 * S3PT - S3 Performance Table. This table is pointed to by the
1035 * S3 Pointer Record above.
1036 */
1037struct acpi_table_s3pt {
1038 u8 signature[4]; /* "S3PT" */
1039 u32 length;
1040};
1041
1042/*
1043 * S3PT Subtables (Not part of the actual FPDT)
1044 */
1045
1046/* Values for Type field in S3PT header */
1047
1048enum acpi_s3pt_type {
1049 ACPI_S3PT_TYPE_RESUME = 0,
1050 ACPI_S3PT_TYPE_SUSPEND = 1,
1051 ACPI_FPDT_BOOT_PERFORMANCE = 2
1052};
1053
1054struct acpi_s3pt_resume {
1055 struct acpi_fpdt_header header;
1056 u32 resume_count;
1057 u64 full_resume;
1058 u64 average_resume;
1059};
1060
1061struct acpi_s3pt_suspend {
1062 struct acpi_fpdt_header header;
1063 u64 suspend_start;
1064 u64 suspend_end;
1065};
1066
1067/*
1068 * FPDT Boot Performance Record (Not part of the actual FPDT)
1069 */
1070struct acpi_fpdt_boot {
1071 struct acpi_fpdt_header header;
1072 u8 reserved[4];
1073 u64 reset_end;
1074 u64 load_start;
1075 u64 startup_start;
1076 u64 exit_services_entry;
1077 u64 exit_services_exit;
1078};
1079
1080/*******************************************************************************
1081 *
1082 * GTDT - Generic Timer Description Table (ACPI 5.1)
1083 * Version 2
1084 *
1085 ******************************************************************************/
1086
1087struct acpi_table_gtdt {
1088 struct acpi_table_header header; /* Common ACPI table header */
1089 u64 counter_block_addresss;
1090 u32 reserved;
1091 u32 secure_el1_interrupt;
1092 u32 secure_el1_flags;
1093 u32 non_secure_el1_interrupt;
1094 u32 non_secure_el1_flags;
1095 u32 virtual_timer_interrupt;
1096 u32 virtual_timer_flags;
1097 u32 non_secure_el2_interrupt;
1098 u32 non_secure_el2_flags;
1099 u64 counter_read_block_address;
1100 u32 platform_timer_count;
1101 u32 platform_timer_offset;
1102};
1103
1104/* Flag Definitions: Timer Block Physical Timers and Virtual timers */
1105
1106#define ACPI_GTDT_INTERRUPT_MODE (1)
1107#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1)
1108#define ACPI_GTDT_ALWAYS_ON (1<<2)
1109
8f5a14d0
EK
1110struct acpi_gtdt_el2 {
1111 u32 virtual_el2_timer_gsiv;
1112 u32 virtual_el2_timer_flags;
1113};
1114
e62f8227
EK
1115/* Common GTDT subtable header */
1116
1117struct acpi_gtdt_header {
1118 u8 type;
1119 u16 length;
1120};
1121
1122/* Values for GTDT subtable type above */
1123
1124enum acpi_gtdt_type {
1125 ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
1126 ACPI_GTDT_TYPE_WATCHDOG = 1,
1127 ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */
1128};
1129
1130/* GTDT Subtables, correspond to Type in struct acpi_gtdt_header */
1131
1132/* 0: Generic Timer Block */
1133
1134struct acpi_gtdt_timer_block {
1135 struct acpi_gtdt_header header;
1136 u8 reserved;
1137 u64 block_address;
1138 u32 timer_count;
1139 u32 timer_offset;
1140};
1141
1142/* Timer Sub-Structure, one per timer */
1143
1144struct acpi_gtdt_timer_entry {
1145 u8 frame_number;
1146 u8 reserved[3];
1147 u64 base_address;
1148 u64 el0_base_address;
1149 u32 timer_interrupt;
1150 u32 timer_flags;
1151 u32 virtual_timer_interrupt;
1152 u32 virtual_timer_flags;
1153 u32 common_flags;
1154};
1155
1156/* Flag Definitions: timer_flags and virtual_timer_flags above */
1157
1158#define ACPI_GTDT_GT_IRQ_MODE (1)
1159#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1)
1160
1161/* Flag Definitions: common_flags above */
1162
1163#define ACPI_GTDT_GT_IS_SECURE_TIMER (1)
1164#define ACPI_GTDT_GT_ALWAYS_ON (1<<1)
1165
1166/* 1: SBSA Generic Watchdog Structure */
1167
1168struct acpi_gtdt_watchdog {
1169 struct acpi_gtdt_header header;
1170 u8 reserved;
1171 u64 refresh_frame_address;
1172 u64 control_frame_address;
1173 u32 timer_interrupt;
1174 u32 timer_flags;
1175};
1176
1177/* Flag Definitions: timer_flags above */
1178
1179#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1)
1180#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1)
1181#define ACPI_GTDT_WATCHDOG_SECURE (1<<2)
1182
1183/*******************************************************************************
1184 *
1185 * HEST - Hardware Error Source Table (ACPI 4.0)
1186 * Version 1
1187 *
1188 ******************************************************************************/
1189
1190struct acpi_table_hest {
1191 struct acpi_table_header header; /* Common ACPI table header */
1192 u32 error_source_count;
1193};
1194
1195/* HEST subtable header */
1196
1197struct acpi_hest_header {
1198 u16 type;
1199 u16 source_id;
1200};
1201
1202/* Values for Type field above for subtables */
3fa34777
BM
1203
1204enum acpi_hest_types {
6e2d5ebd
BM
1205 ACPI_HEST_TYPE_IA32_CHECK = 0,
1206 ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
1207 ACPI_HEST_TYPE_IA32_NMI = 2,
1208 ACPI_HEST_TYPE_NOT_USED3 = 3,
1209 ACPI_HEST_TYPE_NOT_USED4 = 4,
1210 ACPI_HEST_TYPE_NOT_USED5 = 5,
3fa34777
BM
1211 ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
1212 ACPI_HEST_TYPE_AER_ENDPOINT = 7,
1213 ACPI_HEST_TYPE_AER_BRIDGE = 8,
6e2d5ebd 1214 ACPI_HEST_TYPE_GENERIC_ERROR = 9,
7cd55c76 1215 ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
c042933d
BM
1216 ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
1217 ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */
3fa34777
BM
1218};
1219
1220/*
6e2d5ebd 1221 * HEST substructures contained in subtables
3fa34777
BM
1222 */
1223
6e2d5ebd
BM
1224/*
1225 * IA32 Error Bank(s) - Follows the struct acpi_hest_ia_machine_check and
1226 * struct acpi_hest_ia_corrected structures.
1227 */
1228struct acpi_hest_ia_error_bank {
3fa34777
BM
1229 u8 bank_number;
1230 u8 clear_status_on_init;
1231 u8 status_format;
6e2d5ebd 1232 u8 reserved;
3fa34777 1233 u32 control_register;
6e2d5ebd 1234 u64 control_data;
3fa34777
BM
1235 u32 status_register;
1236 u32 address_register;
1237 u32 misc_register;
1238};
1239
6e2d5ebd 1240/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
3fa34777
BM
1241
1242struct acpi_hest_aer_common {
6e2d5ebd 1243 u16 reserved1;
3fa34777
BM
1244 u8 flags;
1245 u8 enabled;
c276e388 1246 u32 records_to_preallocate;
3fa34777 1247 u32 max_sections_per_record;
4059a310 1248 u32 bus; /* Bus and Segment numbers */
3fa34777
BM
1249 u16 device;
1250 u16 function;
1251 u16 device_control;
6e2d5ebd 1252 u16 reserved2;
c276e388
BM
1253 u32 uncorrectable_mask;
1254 u32 uncorrectable_severity;
1255 u32 correctable_mask;
1256 u32 advanced_capabilities;
3fa34777
BM
1257};
1258
6e2d5ebd
BM
1259/* Masks for HEST Flags fields */
1260
1261#define ACPI_HEST_FIRMWARE_FIRST (1)
1262#define ACPI_HEST_GLOBAL (1<<1)
2e166c73 1263#define ACPI_HEST_GHES_ASSIST (1<<2)
6e2d5ebd 1264
4059a310
BD
1265/*
1266 * Macros to access the bus/segment numbers in Bus field above:
1267 * Bus number is encoded in bits 7:0
1268 * Segment number is encoded in bits 23:8
1269 */
1270#define ACPI_HEST_BUS(bus) ((bus) & 0xFF)
1271#define ACPI_HEST_SEGMENT(bus) (((bus) >> 8) & 0xFFFF)
1272
3fa34777
BM
1273/* Hardware Error Notification */
1274
1275struct acpi_hest_notify {
1276 u8 type;
1277 u8 length;
1278 u16 config_write_enable;
1279 u32 poll_interval;
1280 u32 vector;
1281 u32 polling_threshold_value;
1282 u32 polling_threshold_window;
1283 u32 error_threshold_value;
1284 u32 error_threshold_window;
1285};
1286
1287/* Values for Notify Type field above */
1288
1289enum acpi_hest_notify_types {
1290 ACPI_HEST_NOTIFY_POLLED = 0,
1291 ACPI_HEST_NOTIFY_EXTERNAL = 1,
1292 ACPI_HEST_NOTIFY_LOCAL = 2,
1293 ACPI_HEST_NOTIFY_SCI = 3,
1294 ACPI_HEST_NOTIFY_NMI = 4,
ca4a0314
BM
1295 ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
1296 ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
7cd55c76
BM
1297 ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */
1298 ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
1299 ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
1300 ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
4a8a6058
BM
1301 ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */
1302 ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */
3fa34777
BM
1303};
1304
6e2d5ebd
BM
1305/* Values for config_write_enable bitfield above */
1306
1307#define ACPI_HEST_TYPE (1)
1308#define ACPI_HEST_POLL_INTERVAL (1<<1)
1309#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2)
1310#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
1311#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4)
1312#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5)
1313
3fa34777
BM
1314/*
1315 * HEST subtables
3fa34777
BM
1316 */
1317
6e2d5ebd 1318/* 0: IA32 Machine Check Exception */
3fa34777 1319
6e2d5ebd 1320struct acpi_hest_ia_machine_check {
3fa34777 1321 struct acpi_hest_header header;
6e2d5ebd 1322 u16 reserved1;
c042933d 1323 u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
6e2d5ebd 1324 u8 enabled;
c276e388 1325 u32 records_to_preallocate;
3fa34777
BM
1326 u32 max_sections_per_record;
1327 u64 global_capability_data;
1328 u64 global_control_data;
1329 u8 num_hardware_banks;
6e2d5ebd 1330 u8 reserved3[7];
3fa34777
BM
1331};
1332
6e2d5ebd 1333/* 1: IA32 Corrected Machine Check */
3fa34777 1334
1872bbc9 1335struct acpi_hest_ia_corrected {
3fa34777 1336 struct acpi_hest_header header;
6e2d5ebd 1337 u16 reserved1;
c042933d 1338 u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
3fa34777 1339 u8 enabled;
c276e388 1340 u32 records_to_preallocate;
3fa34777
BM
1341 u32 max_sections_per_record;
1342 struct acpi_hest_notify notify;
1343 u8 num_hardware_banks;
6e2d5ebd 1344 u8 reserved2[3];
3fa34777
BM
1345};
1346
6e2d5ebd 1347/* 2: IA32 Non-Maskable Interrupt */
3fa34777 1348
6e2d5ebd 1349struct acpi_hest_ia_nmi {
3fa34777 1350 struct acpi_hest_header header;
3fa34777 1351 u32 reserved;
c276e388 1352 u32 records_to_preallocate;
3fa34777
BM
1353 u32 max_sections_per_record;
1354 u32 max_raw_data_length;
1355};
1356
6e2d5ebd 1357/* 3,4,5: Not used */
3fa34777
BM
1358
1359/* 6: PCI Express Root Port AER */
1360
1361struct acpi_hest_aer_root {
1362 struct acpi_hest_header header;
1363 struct acpi_hest_aer_common aer;
1364 u32 root_error_command;
1365};
1366
1367/* 7: PCI Express AER (AER Endpoint) */
1368
1369struct acpi_hest_aer {
1370 struct acpi_hest_header header;
1371 struct acpi_hest_aer_common aer;
1372};
1373
1374/* 8: PCI Express/PCI-X Bridge AER */
1375
1376struct acpi_hest_aer_bridge {
1377 struct acpi_hest_header header;
1378 struct acpi_hest_aer_common aer;
c276e388
BM
1379 u32 uncorrectable_mask2;
1380 u32 uncorrectable_severity2;
1381 u32 advanced_capabilities2;
3fa34777
BM
1382};
1383
1384/* 9: Generic Hardware Error Source */
1385
1386struct acpi_hest_generic {
1387 struct acpi_hest_header header;
3fa34777 1388 u16 related_source_id;
6e2d5ebd 1389 u8 reserved;
3fa34777 1390 u8 enabled;
c276e388 1391 u32 records_to_preallocate;
3fa34777
BM
1392 u32 max_sections_per_record;
1393 u32 max_raw_data_length;
1394 struct acpi_generic_address error_status_address;
1395 struct acpi_hest_notify notify;
6e2d5ebd
BM
1396 u32 error_block_length;
1397};
1398
7cd55c76
BM
1399/* 10: Generic Hardware Error Source, version 2 */
1400
1401struct acpi_hest_generic_v2 {
1402 struct acpi_hest_header header;
1403 u16 related_source_id;
1404 u8 reserved;
1405 u8 enabled;
1406 u32 records_to_preallocate;
1407 u32 max_sections_per_record;
1408 u32 max_raw_data_length;
1409 struct acpi_generic_address error_status_address;
1410 struct acpi_hest_notify notify;
1411 u32 error_block_length;
1412 struct acpi_generic_address read_ack_register;
1413 u64 read_ack_preserve;
1414 u64 read_ack_write;
1415};
1416
6e2d5ebd
BM
1417/* Generic Error Status block */
1418
0a00fd5e 1419struct acpi_hest_generic_status {
6e2d5ebd
BM
1420 u32 block_status;
1421 u32 raw_data_offset;
1422 u32 raw_data_length;
1423 u32 data_length;
1424 u32 error_severity;
1425};
1426
1427/* Values for block_status flags above */
1428
0a00fd5e
LZ
1429#define ACPI_HEST_UNCORRECTABLE (1)
1430#define ACPI_HEST_CORRECTABLE (1<<1)
1431#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2)
1432#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3)
1433#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */
6e2d5ebd
BM
1434
1435/* Generic Error Data entry */
1436
0a00fd5e 1437struct acpi_hest_generic_data {
6e2d5ebd
BM
1438 u8 section_type[16];
1439 u32 error_severity;
1440 u16 revision;
1441 u8 validation_bits;
1442 u8 flags;
1443 u32 error_data_length;
1444 u8 fru_id[16];
1445 u8 fru_text[20];
3fa34777 1446};
970d9c9e 1447
7cd55c76
BM
1448/* Extension for revision 0x0300 */
1449
1450struct acpi_hest_generic_data_v300 {
1451 u8 section_type[16];
1452 u32 error_severity;
1453 u16 revision;
1454 u8 validation_bits;
1455 u8 flags;
1456 u32 error_data_length;
1457 u8 fru_id[16];
1458 u8 fru_text[20];
1459 u64 time_stamp;
1460};
1461
1462/* Values for error_severity above */
1463
1464#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0
1465#define ACPI_HEST_GEN_ERROR_FATAL 1
1466#define ACPI_HEST_GEN_ERROR_CORRECTED 2
1467#define ACPI_HEST_GEN_ERROR_NONE 3
1468
1469/* Flags for validation_bits above */
1470
1471#define ACPI_HEST_GEN_VALID_FRU_ID (1)
1472#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1)
1473#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2)
1474
c042933d
BM
1475/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
1476
1477struct acpi_hest_ia_deferred_check {
1478 struct acpi_hest_header header;
1479 u16 reserved1;
1480 u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
1481 u8 enabled;
1482 u32 records_to_preallocate;
1483 u32 max_sections_per_record;
1484 struct acpi_hest_notify notify;
1485 u8 num_hardware_banks;
1486 u8 reserved2[3];
1487};
1488
fa418ddf
LZ
1489/*******************************************************************************
1490 *
1491 * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
1492 * Version 1
1493 *
1494 ******************************************************************************/
1495
1496struct acpi_table_hmat {
1497 struct acpi_table_header header; /* Common ACPI table header */
1498 u32 reserved;
1499};
1500
1501/* Values for HMAT structure types */
1502
1503enum acpi_hmat_type {
57f5cf6e 1504 ACPI_HMAT_TYPE_PROXIMITY = 0, /* Memory proximity domain attributes */
fa418ddf
LZ
1505 ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */
1506 ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */
1507 ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
1508};
1509
1510struct acpi_hmat_structure {
1511 u16 type;
1512 u16 reserved;
1513 u32 length;
1514};
1515
1516/*
1517 * HMAT Structures, correspond to Type in struct acpi_hmat_structure
1518 */
1519
9a8d961f 1520/* 0: Memory proximity domain attributes */
fa418ddf 1521
9a8d961f 1522struct acpi_hmat_proximity_domain {
fa418ddf
LZ
1523 struct acpi_hmat_structure header;
1524 u16 flags;
1525 u16 reserved1;
1526 u32 processor_PD; /* Processor proximity domain */
1527 u32 memory_PD; /* Memory proximity domain */
1528 u32 reserved2;
9a8d961f
EK
1529 u64 reserved3;
1530 u64 reserved4;
fa418ddf
LZ
1531};
1532
1533/* Masks for Flags field above */
1534
1535#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: processor_PD field is valid */
1536#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: memory_PD field is valid */
1537#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */
1538
1539/* 1: System locality latency and bandwidth information */
1540
1541struct acpi_hmat_locality {
1542 struct acpi_hmat_structure header;
1543 u8 flags;
1544 u8 data_type;
f1489db6
BM
1545 u8 min_transfer_size;
1546 u8 reserved1;
fa418ddf
LZ
1547 u32 number_of_initiator_Pds;
1548 u32 number_of_target_Pds;
1549 u32 reserved2;
1550 u64 entry_base_unit;
1551};
1552
1553/* Masks for Flags field above */
1554
f1489db6 1555#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) /* Bits 0-3 */
fa418ddf 1556
f1489db6 1557/* Values for Memory Hierarchy flags */
fa418ddf
LZ
1558
1559#define ACPI_HMAT_MEMORY 0
1560#define ACPI_HMAT_LAST_LEVEL_CACHE 1
1561#define ACPI_HMAT_1ST_LEVEL_CACHE 2
1562#define ACPI_HMAT_2ND_LEVEL_CACHE 3
1563#define ACPI_HMAT_3RD_LEVEL_CACHE 4
f1489db6
BM
1564#define ACPI_HMAT_MINIMUM_XFER_SIZE 0x10 /* Bit 4: ACPI 6.4 */
1565#define ACPI_HMAT_NON_SEQUENTIAL_XFERS 0x20 /* Bit 5: ACPI 6.4 */
1566
fa418ddf
LZ
1567
1568/* Values for data_type field above */
1569
1570#define ACPI_HMAT_ACCESS_LATENCY 0
1571#define ACPI_HMAT_READ_LATENCY 1
1572#define ACPI_HMAT_WRITE_LATENCY 2
1573#define ACPI_HMAT_ACCESS_BANDWIDTH 3
1574#define ACPI_HMAT_READ_BANDWIDTH 4
1575#define ACPI_HMAT_WRITE_BANDWIDTH 5
1576
1577/* 2: Memory side cache information */
1578
1579struct acpi_hmat_cache {
1580 struct acpi_hmat_structure header;
1581 u32 memory_PD;
1582 u32 reserved1;
1583 u64 cache_size;
1584 u32 cache_attributes;
1585 u16 reserved2;
1586 u16 number_of_SMBIOShandles;
1587};
1588
1589/* Masks for cache_attributes field above */
1590
1591#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F)
1592#define ACPI_HMAT_CACHE_LEVEL (0x000000F0)
1593#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00)
1594#define ACPI_HMAT_WRITE_POLICY (0x0000F000)
1595#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000)
1596
1597/* Values for cache associativity flag */
1598
1599#define ACPI_HMAT_CA_NONE (0)
1600#define ACPI_HMAT_CA_DIRECT_MAPPED (1)
1601#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2)
1602
1603/* Values for write policy flag */
1604
1605#define ACPI_HMAT_CP_NONE (0)
1606#define ACPI_HMAT_CP_WB (1)
1607#define ACPI_HMAT_CP_WT (2)
1608
793c2388
BM
1609/*******************************************************************************
1610 *
e62f8227 1611 * HPET - High Precision Event Timer table
6e2d5ebd
BM
1612 * Version 1
1613 *
e62f8227
EK
1614 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
1615 * Version 1.0a, October 2004
81b7cb92
BM
1616 *
1617 ******************************************************************************/
1618
e62f8227 1619struct acpi_table_hpet {
81b7cb92 1620 struct acpi_table_header header; /* Common ACPI table header */
e62f8227
EK
1621 u32 id; /* Hardware ID of event timer block */
1622 struct acpi_generic_address address; /* Address of event timer block */
1623 u8 sequence; /* HPET sequence number */
1624 u16 minimum_tick; /* Main counter min tick, periodic mode */
4c189c9d 1625 u8 flags;
81b7cb92
BM
1626};
1627
e62f8227 1628/* Masks for Flags field above */
e3860b5e 1629
e62f8227 1630#define ACPI_HPET_PAGE_PROTECT_MASK (3)
e3860b5e 1631
e62f8227 1632/* Values for Page Protect flags */
b8355bca 1633
e62f8227
EK
1634enum acpi_hpet_page_protect {
1635 ACPI_HPET_NO_PAGE_PROTECT = 0,
1636 ACPI_HPET_PAGE_PROTECT4 = 1,
1637 ACPI_HPET_PAGE_PROTECT64 = 2
b8355bca
LZ
1638};
1639
793c2388
BM
1640/*******************************************************************************
1641 *
e62f8227 1642 * IBFT - Boot Firmware Table
6e2d5ebd 1643 * Version 1
793c2388 1644 *
e62f8227
EK
1645 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
1646 * Specification", Version 1.01, March 1, 2007
4c189c9d 1647 *
e62f8227
EK
1648 * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
1649 * Therefore, it is not currently supported by the disassembler.
4c189c9d
BM
1650 *
1651 ******************************************************************************/
1652
e62f8227 1653struct acpi_table_ibft {
4c189c9d 1654 struct acpi_table_header header; /* Common ACPI table header */
e62f8227 1655 u8 reserved[12];
4c189c9d
BM
1656};
1657
e62f8227
EK
1658/* IBFT common subtable header */
1659
1660struct acpi_ibft_header {
4c189c9d 1661 u8 type;
e62f8227 1662 u8 version;
4c189c9d 1663 u16 length;
e62f8227
EK
1664 u8 index;
1665 u8 flags;
4c189c9d
BM
1666};
1667
e62f8227 1668/* Values for Type field above */
a618c7f8 1669
e62f8227
EK
1670enum acpi_ibft_type {
1671 ACPI_IBFT_TYPE_NOT_USED = 0,
1672 ACPI_IBFT_TYPE_CONTROL = 1,
1673 ACPI_IBFT_TYPE_INITIATOR = 2,
1674 ACPI_IBFT_TYPE_NIC = 3,
1675 ACPI_IBFT_TYPE_TARGET = 4,
1676 ACPI_IBFT_TYPE_EXTENSIONS = 5,
1677 ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */
1678};
1679
1680/* IBFT subtables */
1681
1682struct acpi_ibft_control {
1683 struct acpi_ibft_header header;
1684 u16 extensions;
1685 u16 initiator_offset;
1686 u16 nic0_offset;
1687 u16 target0_offset;
1688 u16 nic1_offset;
1689 u16 target1_offset;
1690};
1691
1692struct acpi_ibft_initiator {
1693 struct acpi_ibft_header header;
1694 u8 sns_server[16];
1695 u8 slp_server[16];
1696 u8 primary_server[16];
1697 u8 secondary_server[16];
1698 u16 name_length;
1699 u16 name_offset;
1700};
1701
1702struct acpi_ibft_nic {
1703 struct acpi_ibft_header header;
1704 u8 ip_address[16];
1705 u8 subnet_mask_prefix;
1706 u8 origin;
1707 u8 gateway[16];
1708 u8 primary_dns[16];
1709 u8 secondary_dns[16];
1710 u8 dhcp[16];
1711 u16 vlan;
1712 u8 mac_address[6];
1713 u16 pci_address;
1714 u16 name_length;
1715 u16 name_offset;
1716};
1717
1718struct acpi_ibft_target {
1719 struct acpi_ibft_header header;
1720 u8 target_ip_address[16];
1721 u16 target_ip_socket;
1722 u8 target_boot_lun[8];
1723 u8 chap_type;
1724 u8 nic_association;
1725 u16 target_name_length;
1726 u16 target_name_offset;
1727 u16 chap_name_length;
1728 u16 chap_name_offset;
1729 u16 chap_secret_length;
1730 u16 chap_secret_offset;
1731 u16 reverse_chap_name_length;
1732 u16 reverse_chap_name_offset;
1733 u16 reverse_chap_secret_length;
1734 u16 reverse_chap_secret_offset;
a618c7f8
BM
1735};
1736
6e596084
RM
1737/* Reset to default packing */
1738
1739#pragma pack()
1da177e4 1740
4be44fcd 1741#endif /* __ACTBL1_H__ */