blob: 159070edd031bedcf15d359e09fc90fd985673f3 [file] [log] [blame]
Erik Schmauss95857632018-03-14 16:13:07 -07001/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002/******************************************************************************
3 *
Bob Moore793c2382006-03-31 00:00:00 -05004 * Name: actbl1.h - Additional ACPI table definitions
Linus Torvalds1da177e2005-04-16 15:20:36 -07005 *
Bob Moore4441e552021-01-15 10:48:25 -08006 * Copyright (C) 2000 - 2021, Intel Corp.
Linus Torvalds1da177e2005-04-16 15:20:36 -07007 *
Erik Schmauss95857632018-03-14 16:13:07 -07008 *****************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -07009
10#ifndef __ACTBL1_H__
11#define __ACTBL1_H__
12
Bob Moore793c2382006-03-31 00:00:00 -050013/*******************************************************************************
14 *
Erik Schmausse62f8222018-02-15 13:09:26 -080015 * Additional ACPI Tables
Bob Moore793c2382006-03-31 00:00:00 -050016 *
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/*
Bob Moore6e2d5eb2009-07-27 10:53:00 +080023 * 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.
Bob Moore793c2382006-03-31 00:00:00 -050026 */
Bob Mooree692fa12021-08-03 20:07:53 +020027#define ACPI_SIG_AEST "AEST" /* Arm Error Source Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080028#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */
Bob Moore970d9c92008-04-10 19:06:42 +040029#define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080030#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */
31#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */
Ben Widawsky7c5eab72021-04-06 14:30:20 -070032#define ACPI_SIG_CEDT "CEDT" /* CXL Early Discovery Table */
Bob Moore793c2382006-03-31 00:00:00 -050033#define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */
Erik Schmausse62f8222018-02-15 13:09:26 -080034#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 */
Bob Moore793c2382006-03-31 00:00:00 -050039#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
Bob Moore970d9c92008-04-10 19:06:42 +040040#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
41#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080042#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */
43#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */
Bob Moore970d9c92008-04-10 19:06:42 +040044#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080045#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
Bob Moore793c2382006-03-31 00:00:00 -050065
Bob Moore793c2382006-03-31 00:00:00 -050066/*
67 * All tables must be byte-packed to match the ACPI specification, since
68 * the tables are provided by the system BIOS.
69 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070070#pragma pack(1)
71
72/*
Bob Moorebe030a52012-08-17 13:07:54 +080073 * 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
Linus Torvalds1da177e2005-04-16 15:20:36 -070082 */
Bob Moore793c2382006-03-31 00:00:00 -050083
Bob Moore6e2d5eb2009-07-27 10:53:00 +080084/*******************************************************************************
85 *
86 * Common subtable headers
87 *
88 ******************************************************************************/
89
90/* Generic subtable header (used in MADT, SRAT, etc.) */
Bob Mooref3d2e782007-02-02 19:48:18 +030091
92struct acpi_subtable_header {
93 u8 type;
94 u8 length;
95};
96
Bob Moore6e2d5eb2009-07-27 10:53:00 +080097/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
Bob Moore970d9c92008-04-10 19:06:42 +040098
99struct acpi_whea_header {
100 u8 action;
101 u8 instruction;
102 u8 flags;
103 u8 reserved;
104 struct acpi_generic_address register_region;
Bob Moore3fa34772008-04-10 19:06:43 +0400105 u64 value; /* Value used with Read/Write register */
106 u64 mask; /* Bitmask required for this register instruction */
Bob Moore970d9c92008-04-10 19:06:42 +0400107};
108
Bob Moore793c2382006-03-31 00:00:00 -0500109/*******************************************************************************
110 *
Erik Schmausse62f8222018-02-15 13:09:26 -0800111 * 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
223/*******************************************************************************
224 *
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800225 * BERT - Boot Error Record Table (ACPI 4.0)
226 * Version 1
Bob Moore970d9c92008-04-10 19:06:42 +0400227 *
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 */
Uwe Kleine-Königb5950762010-11-01 15:38:34 -0400233 u64 address; /* Physical address of the error region */
Bob Moore970d9c92008-04-10 19:06:42 +0400234};
235
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800236/* Boot Error Region (not a subtable, pointed to by Address field above) */
Bob Moore3fa34772008-04-10 19:06:43 +0400237
Bob Moore970d9c92008-04-10 19:06:42 +0400238struct acpi_bert_region {
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800239 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 */
Bob Moore970d9c92008-04-10 19:06:42 +0400244};
245
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800246/* Values for block_status flags above */
Bob Moore970d9c92008-04-10 19:06:42 +0400247
248#define ACPI_BERT_UNCORRECTABLE (1)
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800249#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 */
Bob Moore970d9c92008-04-10 19:06:42 +0400268
269/*******************************************************************************
270 *
Erik Schmausse62f8222018-02-15 13:09:26 -0800271 * 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
306/*******************************************************************************
307 *
Ben Widawsky7c5eab72021-04-06 14:30:20 -0700308 * 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,
Alison Schofield4a2c1dc2021-06-04 14:26:05 -0700331 ACPI_CEDT_TYPE_CFMWS = 1,
332 ACPI_CEDT_TYPE_RESERVED = 2,
Ben Widawsky7c5eab72021-04-06 14:30:20 -0700333};
334
Alison Schofield160c7682021-06-04 14:26:04 -0700335/* 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
Ben Widawsky7c5eab72021-04-06 14:30:20 -0700345/*
346 * CEDT subtables
347 */
348
349/* 0: CXL Host Bridge Structure */
350
351struct acpi_cedt_chbs {
Bob Moore519c8092021-04-06 14:30:24 -0700352 struct acpi_cedt_header header;
Ben Widawsky7c5eab72021-04-06 14:30:20 -0700353 u32 uid;
354 u32 cxl_version;
355 u32 reserved;
356 u64 base;
357 u64 length;
358};
359
Alison Schofield4a2c1dc2021-06-04 14:26:05 -0700360/* 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
Ben Widawsky7c5eab72021-04-06 14:30:20 -0700388/*******************************************************************************
389 *
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800390 * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
391 * Version 1
Bob Moore793c2382006-03-31 00:00:00 -0500392 *
393 ******************************************************************************/
394
395struct acpi_table_cpep {
Bob Mooref3d2e782007-02-02 19:48:18 +0300396 struct acpi_table_header header; /* Common ACPI table header */
397 u64 reserved;
Bob Moore793c2382006-03-31 00:00:00 -0500398};
399
400/* Subtable */
401
402struct acpi_cpep_polling {
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800403 struct acpi_subtable_header header;
Bob Mooref3d2e782007-02-02 19:48:18 +0300404 u8 id; /* Processor ID */
405 u8 eid; /* Processor EID */
406 u32 interval; /* Polling interval (msec) */
Bob Moore793c2382006-03-31 00:00:00 -0500407};
408
409/*******************************************************************************
410 *
Erik Schmausse62f8222018-02-15 13:09:26 -0800411 * 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 *
Marcin Wojtas200950b2021-08-03 20:10:02 +0200486 * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020
Erik Schmausse62f8222018-02-15 13:09:26 -0800487 *
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
Marcin Wojtas200950b2021-08-03 20:10:02 +0200536#define ACPI_DBG2_MAX311XE_SPI 0x0002
Erik Schmausse62f8222018-02-15 13:09:26 -0800537#define ACPI_DBG2_ARM_PL011 0x0003
Marcin Wojtas200950b2021-08-03 20:10:02 +0200538#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
Erik Schmausse62f8222018-02-15 13:09:26 -0800546#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
Marcin Wojtas200950b2021-08-03 20:10:02 +0200550#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
Erik Schmausse62f8222018-02-15 13:09:26 -0800554
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,
Yian Chen81d3c752021-02-04 09:43:59 +0800614 ACPI_DMAR_TYPE_SATC = 5,
615 ACPI_DMAR_TYPE_RESERVED = 6 /* 6 and greater are reserved */
Erik Schmausse62f8222018-02-15 13:09:26 -0800616};
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
Erik Schmaussc163f90c2019-02-15 13:36:19 -0800663/* 1: Reserved Memory Definition */
Erik Schmausse62f8222018-02-15 13:09:26 -0800664
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
Yian Chen81d3c752021-02-04 09:43:59 +0800708/* 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};
Erik Schmausse62f8222018-02-15 13:09:26 -0800716/*******************************************************************************
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
773/*******************************************************************************
774 *
Bob Moore793c2382006-03-31 00:00:00 -0500775 * ECDT - Embedded Controller Boot Resources Table
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800776 * Version 1
Bob Moore793c2382006-03-31 00:00:00 -0500777 *
778 ******************************************************************************/
779
Bob Mooref3d2e782007-02-02 19:48:18 +0300780struct 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 */
Bob Moore793c2382006-03-31 00:00:00 -0500784 u32 uid; /* Unique ID - must be same as the EC _UID method */
Bob Mooref3d2e782007-02-02 19:48:18 +0300785 u8 gpe; /* The GPE for the EC */
786 u8 id[1]; /* Full namepath of the EC in the ACPI namespace */
Bob Moore793c2382006-03-31 00:00:00 -0500787};
788
789/*******************************************************************************
790 *
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800791 * EINJ - Error Injection Table (ACPI 4.0)
792 * Version 1
Bob Moore970d9c92008-04-10 19:06:42 +0400793 *
794 ******************************************************************************/
795
796struct acpi_table_einj {
797 struct acpi_table_header header; /* Common ACPI table header */
798 u32 header_length;
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800799 u8 flags;
800 u8 reserved[3];
Bob Moore970d9c92008-04-10 19:06:42 +0400801 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
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800810/* Masks for Flags field above */
811
812#define ACPI_EINJ_PRESERVE (1)
813
Bob Moore970d9c92008-04-10 19:06:42 +0400814/* 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,
Bob Moorec5bd6532011-11-16 11:04:00 +0800825 ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
Bob Moorea88e0ce2016-03-24 09:39:36 +0800826 ACPI_EINJ_GET_EXECUTE_TIMINGS = 9,
827 ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */
Bob Moore970d9c92008-04-10 19:06:42 +0400828 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,
Bob Moorec5bd6532011-11-16 11:04:00 +0800839 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];
Bob Moore970d9c92008-04-10 19:06:42 +0400860};
861
Bob Moore3fa34772008-04-10 19:06:43 +0400862/* 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
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800871/* 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)
Bob Moorec5bd6532011-11-16 11:04:00 +0800894#define ACPI_EINJ_VENDOR_DEFINED (1<<31)
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800895
Bob Moore970d9c92008-04-10 19:06:42 +0400896/*******************************************************************************
897 *
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800898 * ERST - Error Record Serialization Table (ACPI 4.0)
899 * Version 1
Bob Moore970d9c92008-04-10 19:06:42 +0400900 *
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
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800916/* Masks for Flags field above */
917
918#define ACPI_ERST_PRESERVE (1)
919
Bob Moore970d9c92008-04-10 19:06:42 +0400920/* Values for Action field above */
921
922enum acpi_erst_actions {
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800923 ACPI_ERST_BEGIN_WRITE = 0,
924 ACPI_ERST_BEGIN_READ = 1,
925 ACPI_ERST_BEGIN_CLEAR = 2,
926 ACPI_ERST_END = 3,
Bob Moore970d9c92008-04-10 19:06:42 +0400927 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,
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800931 ACPI_ERST_GET_RECORD_ID = 8,
932 ACPI_ERST_SET_RECORD_ID = 9,
Bob Moore970d9c92008-04-10 19:06:42 +0400933 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,
Bob Moorea88e0ce2016-03-24 09:39:36 +0800939 ACPI_ERST_EXECUTE_TIMINGS = 16,
940 ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */
Bob Moore970d9c92008-04-10 19:06:42 +0400941};
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
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800968/* Command status return values */
969
970enum acpi_erst_command_status {
Bob Moore54a2a152020-02-14 10:48:03 -0800971 ACPI_ERST_SUCCESS = 0,
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800972 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
Bob Moore970d9c92008-04-10 19:06:42 +0400987/*******************************************************************************
988 *
Erik Schmausse62f8222018-02-15 13:09:26 -0800989 * FPDT - Firmware Performance Data Table (ACPI 5.0)
990 * Version 1
991 *
992 ******************************************************************************/
993
994struct acpi_table_fpdt {
995 struct acpi_table_header header; /* Common ACPI table header */
996};
997
998/* FPDT subtable header (Performance Record Structure) */
999
1000struct acpi_fpdt_header {
1001 u16 type;
1002 u8 length;
1003 u8 revision;
1004};
1005
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
Erik Schmauss8f5a14d2019-02-15 13:36:18 -08001110struct acpi_gtdt_el2 {
1111 u32 virtual_el2_timer_gsiv;
1112 u32 virtual_el2_timer_flags;
1113};
1114
Erik Schmausse62f8222018-02-15 13:09:26 -08001115/* 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 *
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001185 * HEST - Hardware Error Source Table (ACPI 4.0)
1186 * Version 1
Bob Moore970d9c92008-04-10 19:06:42 +04001187 *
1188 ******************************************************************************/
1189
1190struct acpi_table_hest {
1191 struct acpi_table_header header; /* Common ACPI table header */
1192 u32 error_source_count;
1193};
1194
Bob Moore3fa34772008-04-10 19:06:43 +04001195/* HEST subtable header */
1196
1197struct acpi_hest_header {
1198 u16 type;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001199 u16 source_id;
Bob Moore3fa34772008-04-10 19:06:43 +04001200};
1201
1202/* Values for Type field above for subtables */
1203
1204enum acpi_hest_types {
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001205 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,
Bob Moore3fa34772008-04-10 19:06:43 +04001211 ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
1212 ACPI_HEST_TYPE_AER_ENDPOINT = 7,
1213 ACPI_HEST_TYPE_AER_BRIDGE = 8,
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001214 ACPI_HEST_TYPE_GENERIC_ERROR = 9,
Bob Moore7cd55c72016-03-24 09:38:57 +08001215 ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
Bob Moorec0429332017-06-05 16:38:41 +08001216 ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
1217 ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */
Bob Moore3fa34772008-04-10 19:06:43 +04001218};
1219
1220/*
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001221 * HEST substructures contained in subtables
Bob Moore3fa34772008-04-10 19:06:43 +04001222 */
1223
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001224/*
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 {
Bob Moore3fa34772008-04-10 19:06:43 +04001229 u8 bank_number;
1230 u8 clear_status_on_init;
1231 u8 status_format;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001232 u8 reserved;
Bob Moore3fa34772008-04-10 19:06:43 +04001233 u32 control_register;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001234 u64 control_data;
Bob Moore3fa34772008-04-10 19:06:43 +04001235 u32 status_register;
1236 u32 address_register;
1237 u32 misc_register;
1238};
1239
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001240/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
Bob Moore3fa34772008-04-10 19:06:43 +04001241
1242struct acpi_hest_aer_common {
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001243 u16 reserved1;
Bob Moore3fa34772008-04-10 19:06:43 +04001244 u8 flags;
1245 u8 enabled;
Bob Moorec276e382009-07-27 14:55:02 +08001246 u32 records_to_preallocate;
Bob Moore3fa34772008-04-10 19:06:43 +04001247 u32 max_sections_per_record;
Betty Dall4059a312014-01-13 12:17:47 -07001248 u32 bus; /* Bus and Segment numbers */
Bob Moore3fa34772008-04-10 19:06:43 +04001249 u16 device;
1250 u16 function;
1251 u16 device_control;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001252 u16 reserved2;
Bob Moorec276e382009-07-27 14:55:02 +08001253 u32 uncorrectable_mask;
1254 u32 uncorrectable_severity;
1255 u32 correctable_mask;
1256 u32 advanced_capabilities;
Bob Moore3fa34772008-04-10 19:06:43 +04001257};
1258
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001259/* Masks for HEST Flags fields */
1260
1261#define ACPI_HEST_FIRMWARE_FIRST (1)
1262#define ACPI_HEST_GLOBAL (1<<1)
Bob Moore2e166c732017-06-05 16:38:32 +08001263#define ACPI_HEST_GHES_ASSIST (1<<2)
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001264
Betty Dall4059a312014-01-13 12:17:47 -07001265/*
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
Bob Moore3fa34772008-04-10 19:06:43 +04001273/* 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,
Bob Mooreca4a03142012-08-24 10:25:12 -07001295 ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
1296 ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
Bob Moore7cd55c72016-03-24 09:38:57 +08001297 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 */
Bob Moore4a8a6052017-06-05 16:38:20 +08001301 ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */
1302 ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */
Bob Moore3fa34772008-04-10 19:06:43 +04001303};
1304
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001305/* 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
Bob Moore3fa34772008-04-10 19:06:43 +04001314/*
1315 * HEST subtables
Bob Moore3fa34772008-04-10 19:06:43 +04001316 */
1317
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001318/* 0: IA32 Machine Check Exception */
Bob Moore3fa34772008-04-10 19:06:43 +04001319
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001320struct acpi_hest_ia_machine_check {
Bob Moore3fa34772008-04-10 19:06:43 +04001321 struct acpi_hest_header header;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001322 u16 reserved1;
Bob Moorec0429332017-06-05 16:38:41 +08001323 u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001324 u8 enabled;
Bob Moorec276e382009-07-27 14:55:02 +08001325 u32 records_to_preallocate;
Bob Moore3fa34772008-04-10 19:06:43 +04001326 u32 max_sections_per_record;
1327 u64 global_capability_data;
1328 u64 global_control_data;
1329 u8 num_hardware_banks;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001330 u8 reserved3[7];
Bob Moore3fa34772008-04-10 19:06:43 +04001331};
1332
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001333/* 1: IA32 Corrected Machine Check */
Bob Moore3fa34772008-04-10 19:06:43 +04001334
Bob Moore1872bbc2009-08-13 13:31:00 +08001335struct acpi_hest_ia_corrected {
Bob Moore3fa34772008-04-10 19:06:43 +04001336 struct acpi_hest_header header;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001337 u16 reserved1;
Bob Moorec0429332017-06-05 16:38:41 +08001338 u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
Bob Moore3fa34772008-04-10 19:06:43 +04001339 u8 enabled;
Bob Moorec276e382009-07-27 14:55:02 +08001340 u32 records_to_preallocate;
Bob Moore3fa34772008-04-10 19:06:43 +04001341 u32 max_sections_per_record;
1342 struct acpi_hest_notify notify;
1343 u8 num_hardware_banks;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001344 u8 reserved2[3];
Bob Moore3fa34772008-04-10 19:06:43 +04001345};
1346
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001347/* 2: IA32 Non-Maskable Interrupt */
Bob Moore3fa34772008-04-10 19:06:43 +04001348
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001349struct acpi_hest_ia_nmi {
Bob Moore3fa34772008-04-10 19:06:43 +04001350 struct acpi_hest_header header;
Bob Moore3fa34772008-04-10 19:06:43 +04001351 u32 reserved;
Bob Moorec276e382009-07-27 14:55:02 +08001352 u32 records_to_preallocate;
Bob Moore3fa34772008-04-10 19:06:43 +04001353 u32 max_sections_per_record;
1354 u32 max_raw_data_length;
1355};
1356
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001357/* 3,4,5: Not used */
Bob Moore3fa34772008-04-10 19:06:43 +04001358
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;
Bob Moorec276e382009-07-27 14:55:02 +08001379 u32 uncorrectable_mask2;
1380 u32 uncorrectable_severity2;
1381 u32 advanced_capabilities2;
Bob Moore3fa34772008-04-10 19:06:43 +04001382};
1383
1384/* 9: Generic Hardware Error Source */
1385
1386struct acpi_hest_generic {
1387 struct acpi_hest_header header;
Bob Moore3fa34772008-04-10 19:06:43 +04001388 u16 related_source_id;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001389 u8 reserved;
Bob Moore3fa34772008-04-10 19:06:43 +04001390 u8 enabled;
Bob Moorec276e382009-07-27 14:55:02 +08001391 u32 records_to_preallocate;
Bob Moore3fa34772008-04-10 19:06:43 +04001392 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;
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001396 u32 error_block_length;
1397};
1398
Bob Moore7cd55c72016-03-24 09:38:57 +08001399/* 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
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001417/* Generic Error Status block */
1418
Lv Zheng0a00fd52014-06-03 16:32:53 +08001419struct acpi_hest_generic_status {
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001420 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
Lv Zheng0a00fd52014-06-03 16:32:53 +08001429#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 */
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001434
1435/* Generic Error Data entry */
1436
Lv Zheng0a00fd52014-06-03 16:32:53 +08001437struct acpi_hest_generic_data {
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001438 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];
Bob Moore3fa34772008-04-10 19:06:43 +04001446};
Bob Moore970d9c92008-04-10 19:06:42 +04001447
Bob Moore7cd55c72016-03-24 09:38:57 +08001448/* 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
Bob Moorec0429332017-06-05 16:38:41 +08001475/* 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
Bob Moore970d9c92008-04-10 19:06:42 +04001489/*******************************************************************************
1490 *
Lv Zhengfa418dd2017-06-05 16:37:16 +08001491 * 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 {
Alison Schofield57f5cf62019-04-17 11:13:10 -07001504 ACPI_HMAT_TYPE_PROXIMITY = 0, /* Memory proximity domain attributes */
Lv Zhengfa418dd2017-06-05 16:37:16 +08001505 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
Erik Schmauss9a8d9612019-02-15 13:36:17 -08001520/* 0: Memory proximity domain attributes */
Lv Zhengfa418dd2017-06-05 16:37:16 +08001521
Erik Schmauss9a8d9612019-02-15 13:36:17 -08001522struct acpi_hmat_proximity_domain {
Lv Zhengfa418dd2017-06-05 16:37:16 +08001523 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;
Erik Schmauss9a8d9612019-02-15 13:36:17 -08001529 u64 reserved3;
1530 u64 reserved4;
Lv Zhengfa418dd2017-06-05 16:37:16 +08001531};
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;
Bob Mooref1489db2021-04-06 14:30:16 -07001545 u8 min_transfer_size;
1546 u8 reserved1;
Lv Zhengfa418dd2017-06-05 16:37:16 +08001547 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
Bob Mooref1489db2021-04-06 14:30:16 -07001555#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) /* Bits 0-3 */
Lv Zhengfa418dd2017-06-05 16:37:16 +08001556
Bob Mooref1489db2021-04-06 14:30:16 -07001557/* Values for Memory Hierarchy flags */
Lv Zhengfa418dd2017-06-05 16:37:16 +08001558
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
Bob Mooref1489db2021-04-06 14:30:16 -07001564#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
Lv Zhengfa418dd2017-06-05 16:37:16 +08001567
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
1609/*******************************************************************************
1610 *
Erik Schmausse62f8222018-02-15 13:09:26 -08001611 * HPET - High Precision Event Timer table
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001612 * Version 1
1613 *
Erik Schmausse62f8222018-02-15 13:09:26 -08001614 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
1615 * Version 1.0a, October 2004
Bob Moore04f8e382015-05-21 10:31:58 +08001616 *
1617 ******************************************************************************/
1618
Erik Schmausse62f8222018-02-15 13:09:26 -08001619struct acpi_table_hpet {
Bob Moore04f8e382015-05-21 10:31:58 +08001620 struct acpi_table_header header; /* Common ACPI table header */
Erik Schmausse62f8222018-02-15 13:09:26 -08001621 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 */
Bob Moore4c189c92017-11-17 15:40:22 -08001625 u8 flags;
Bob Moore81b7cb92017-09-20 10:00:30 +08001626};
1627
Erik Schmausse62f8222018-02-15 13:09:26 -08001628/* Masks for Flags field above */
Bob Moore81b7cb92017-09-20 10:00:30 +08001629
Erik Schmausse62f8222018-02-15 13:09:26 -08001630#define ACPI_HPET_PAGE_PROTECT_MASK (3)
1631
1632/* Values for Page Protect flags */
1633
1634enum acpi_hpet_page_protect {
1635 ACPI_HPET_NO_PAGE_PROTECT = 0,
1636 ACPI_HPET_PAGE_PROTECT4 = 1,
1637 ACPI_HPET_PAGE_PROTECT64 = 2
1638};
Bob Moore81b7cb92017-09-20 10:00:30 +08001639
1640/*******************************************************************************
1641 *
Erik Schmausse62f8222018-02-15 13:09:26 -08001642 * IBFT - Boot Firmware Table
Lv Zhengb8355bc2017-06-05 16:38:26 +08001643 * Version 1
1644 *
Erik Schmausse62f8222018-02-15 13:09:26 -08001645 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
1646 * Specification", Version 1.01, March 1, 2007
1647 *
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.
1650 *
Lv Zhengb8355bc2017-06-05 16:38:26 +08001651 ******************************************************************************/
1652
Erik Schmausse62f8222018-02-15 13:09:26 -08001653struct acpi_table_ibft {
Lv Zhengb8355bc2017-06-05 16:38:26 +08001654 struct acpi_table_header header; /* Common ACPI table header */
Erik Schmausse62f8222018-02-15 13:09:26 -08001655 u8 reserved[12];
1656};
1657
1658/* IBFT common subtable header */
1659
1660struct acpi_ibft_header {
1661 u8 type;
1662 u8 version;
1663 u16 length;
1664 u8 index;
1665 u8 flags;
Lv Zhengb8355bc2017-06-05 16:38:26 +08001666};
1667
1668/* Values for Type field above */
1669
Erik Schmausse62f8222018-02-15 13:09:26 -08001670enum 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 */
Lv Zhengb8355bc2017-06-05 16:38:26 +08001678};
1679
Erik Schmausse62f8222018-02-15 13:09:26 -08001680/* IBFT subtables */
Lv Zhengb8355bc2017-06-05 16:38:26 +08001681
Erik Schmausse62f8222018-02-15 13:09:26 -08001682struct 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;
Lv Zhengb8355bc2017-06-05 16:38:26 +08001690};
1691
Erik Schmausse62f8222018-02-15 13:09:26 -08001692struct 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;
Lv Zhengb8355bc2017-06-05 16:38:26 +08001700};
1701
Erik Schmausse62f8222018-02-15 13:09:26 -08001702struct 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;
Lv Zhengb8355bc2017-06-05 16:38:26 +08001716};
1717
Erik Schmausse62f8222018-02-15 13:09:26 -08001718struct 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;
Bob Moorea618c7f2017-06-05 16:38:47 +08001735};
1736
Robert Moore6e596082014-03-05 14:12:01 +08001737/* Reset to default packing */
1738
1739#pragma pack()
Linus Torvalds1da177e2005-04-16 15:20:36 -07001740
Len Brown4be44fc2005-08-05 00:44:28 -04001741#endif /* __ACTBL1_H__ */