actbl1.h revision 1.4 1 1.1 jruoho /******************************************************************************
2 1.1 jruoho *
3 1.1 jruoho * Name: actbl1.h - Additional ACPI table definitions
4 1.1 jruoho *
5 1.1 jruoho *****************************************************************************/
6 1.1 jruoho
7 1.3 jruoho /*
8 1.4 christos * Copyright (C) 2000 - 2013, Intel Corp.
9 1.1 jruoho * All rights reserved.
10 1.1 jruoho *
11 1.3 jruoho * Redistribution and use in source and binary forms, with or without
12 1.3 jruoho * modification, are permitted provided that the following conditions
13 1.3 jruoho * are met:
14 1.3 jruoho * 1. Redistributions of source code must retain the above copyright
15 1.3 jruoho * notice, this list of conditions, and the following disclaimer,
16 1.3 jruoho * without modification.
17 1.3 jruoho * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 1.3 jruoho * substantially similar to the "NO WARRANTY" disclaimer below
19 1.3 jruoho * ("Disclaimer") and any redistribution must be conditioned upon
20 1.3 jruoho * including a substantially similar Disclaimer requirement for further
21 1.3 jruoho * binary redistribution.
22 1.3 jruoho * 3. Neither the names of the above-listed copyright holders nor the names
23 1.3 jruoho * of any contributors may be used to endorse or promote products derived
24 1.3 jruoho * from this software without specific prior written permission.
25 1.3 jruoho *
26 1.3 jruoho * Alternatively, this software may be distributed under the terms of the
27 1.3 jruoho * GNU General Public License ("GPL") version 2 as published by the Free
28 1.3 jruoho * Software Foundation.
29 1.3 jruoho *
30 1.3 jruoho * NO WARRANTY
31 1.3 jruoho * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 1.3 jruoho * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 1.3 jruoho * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 1.3 jruoho * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 1.3 jruoho * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 1.3 jruoho * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 1.3 jruoho * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 1.3 jruoho * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 1.3 jruoho * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 1.3 jruoho * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 1.3 jruoho * POSSIBILITY OF SUCH DAMAGES.
42 1.3 jruoho */
43 1.1 jruoho
44 1.1 jruoho #ifndef __ACTBL1_H__
45 1.1 jruoho #define __ACTBL1_H__
46 1.1 jruoho
47 1.1 jruoho
48 1.1 jruoho /*******************************************************************************
49 1.1 jruoho *
50 1.1 jruoho * Additional ACPI Tables (1)
51 1.1 jruoho *
52 1.1 jruoho * These tables are not consumed directly by the ACPICA subsystem, but are
53 1.1 jruoho * included here to support device drivers and the AML disassembler.
54 1.1 jruoho *
55 1.1 jruoho * The tables in this file are fully defined within the ACPI specification.
56 1.1 jruoho *
57 1.1 jruoho ******************************************************************************/
58 1.1 jruoho
59 1.1 jruoho
60 1.1 jruoho /*
61 1.1 jruoho * Values for description table header signatures for tables defined in this
62 1.1 jruoho * file. Useful because they make it more difficult to inadvertently type in
63 1.1 jruoho * the wrong signature.
64 1.1 jruoho */
65 1.1 jruoho #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */
66 1.1 jruoho #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */
67 1.1 jruoho #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
68 1.1 jruoho #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
69 1.1 jruoho #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
70 1.1 jruoho #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
71 1.1 jruoho #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
72 1.1 jruoho #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
73 1.1 jruoho #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
74 1.1 jruoho #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
75 1.1 jruoho #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
76 1.1 jruoho
77 1.1 jruoho
78 1.1 jruoho /*
79 1.1 jruoho * All tables must be byte-packed to match the ACPI specification, since
80 1.1 jruoho * the tables are provided by the system BIOS.
81 1.1 jruoho */
82 1.1 jruoho #pragma pack(1)
83 1.1 jruoho
84 1.1 jruoho /*
85 1.4 christos * Note: C bitfields are not used for this reason:
86 1.4 christos *
87 1.4 christos * "Bitfields are great and easy to read, but unfortunately the C language
88 1.4 christos * does not specify the layout of bitfields in memory, which means they are
89 1.4 christos * essentially useless for dealing with packed data in on-disk formats or
90 1.4 christos * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
91 1.4 christos * this decision was a design error in C. Ritchie could have picked an order
92 1.4 christos * and stuck with it." Norman Ramsey.
93 1.4 christos * See http://stackoverflow.com/a/1053662/41661
94 1.1 jruoho */
95 1.1 jruoho
96 1.1 jruoho
97 1.1 jruoho /*******************************************************************************
98 1.1 jruoho *
99 1.1 jruoho * Common subtable headers
100 1.1 jruoho *
101 1.1 jruoho ******************************************************************************/
102 1.1 jruoho
103 1.1 jruoho /* Generic subtable header (used in MADT, SRAT, etc.) */
104 1.1 jruoho
105 1.1 jruoho typedef struct acpi_subtable_header
106 1.1 jruoho {
107 1.1 jruoho UINT8 Type;
108 1.1 jruoho UINT8 Length;
109 1.1 jruoho
110 1.1 jruoho } ACPI_SUBTABLE_HEADER;
111 1.1 jruoho
112 1.1 jruoho
113 1.1 jruoho /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
114 1.1 jruoho
115 1.1 jruoho typedef struct acpi_whea_header
116 1.1 jruoho {
117 1.1 jruoho UINT8 Action;
118 1.1 jruoho UINT8 Instruction;
119 1.1 jruoho UINT8 Flags;
120 1.1 jruoho UINT8 Reserved;
121 1.1 jruoho ACPI_GENERIC_ADDRESS RegisterRegion;
122 1.1 jruoho UINT64 Value; /* Value used with Read/Write register */
123 1.1 jruoho UINT64 Mask; /* Bitmask required for this register instruction */
124 1.1 jruoho
125 1.1 jruoho } ACPI_WHEA_HEADER;
126 1.1 jruoho
127 1.1 jruoho
128 1.1 jruoho /*******************************************************************************
129 1.1 jruoho *
130 1.1 jruoho * BERT - Boot Error Record Table (ACPI 4.0)
131 1.1 jruoho * Version 1
132 1.1 jruoho *
133 1.1 jruoho ******************************************************************************/
134 1.1 jruoho
135 1.1 jruoho typedef struct acpi_table_bert
136 1.1 jruoho {
137 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
138 1.1 jruoho UINT32 RegionLength; /* Length of the boot error region */
139 1.4 christos UINT64 Address; /* Physical address of the error region */
140 1.1 jruoho
141 1.1 jruoho } ACPI_TABLE_BERT;
142 1.1 jruoho
143 1.1 jruoho
144 1.1 jruoho /* Boot Error Region (not a subtable, pointed to by Address field above) */
145 1.1 jruoho
146 1.1 jruoho typedef struct acpi_bert_region
147 1.1 jruoho {
148 1.1 jruoho UINT32 BlockStatus; /* Type of error information */
149 1.1 jruoho UINT32 RawDataOffset; /* Offset to raw error data */
150 1.1 jruoho UINT32 RawDataLength; /* Length of raw error data */
151 1.1 jruoho UINT32 DataLength; /* Length of generic error data */
152 1.1 jruoho UINT32 ErrorSeverity; /* Severity code */
153 1.1 jruoho
154 1.1 jruoho } ACPI_BERT_REGION;
155 1.1 jruoho
156 1.1 jruoho /* Values for BlockStatus flags above */
157 1.1 jruoho
158 1.1 jruoho #define ACPI_BERT_UNCORRECTABLE (1)
159 1.1 jruoho #define ACPI_BERT_CORRECTABLE (1<<1)
160 1.1 jruoho #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2)
161 1.1 jruoho #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3)
162 1.1 jruoho #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */
163 1.1 jruoho
164 1.1 jruoho /* Values for ErrorSeverity above */
165 1.1 jruoho
166 1.1 jruoho enum AcpiBertErrorSeverity
167 1.1 jruoho {
168 1.1 jruoho ACPI_BERT_ERROR_CORRECTABLE = 0,
169 1.1 jruoho ACPI_BERT_ERROR_FATAL = 1,
170 1.1 jruoho ACPI_BERT_ERROR_CORRECTED = 2,
171 1.1 jruoho ACPI_BERT_ERROR_NONE = 3,
172 1.1 jruoho ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */
173 1.1 jruoho };
174 1.1 jruoho
175 1.1 jruoho /*
176 1.1 jruoho * Note: The generic error data that follows the ErrorSeverity field above
177 1.1 jruoho * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below
178 1.1 jruoho */
179 1.1 jruoho
180 1.1 jruoho
181 1.1 jruoho /*******************************************************************************
182 1.1 jruoho *
183 1.1 jruoho * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
184 1.1 jruoho * Version 1
185 1.1 jruoho *
186 1.1 jruoho ******************************************************************************/
187 1.1 jruoho
188 1.1 jruoho typedef struct acpi_table_cpep
189 1.1 jruoho {
190 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
191 1.1 jruoho UINT64 Reserved;
192 1.1 jruoho
193 1.1 jruoho } ACPI_TABLE_CPEP;
194 1.1 jruoho
195 1.1 jruoho
196 1.1 jruoho /* Subtable */
197 1.1 jruoho
198 1.1 jruoho typedef struct acpi_cpep_polling
199 1.1 jruoho {
200 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
201 1.1 jruoho UINT8 Id; /* Processor ID */
202 1.1 jruoho UINT8 Eid; /* Processor EID */
203 1.1 jruoho UINT32 Interval; /* Polling interval (msec) */
204 1.1 jruoho
205 1.1 jruoho } ACPI_CPEP_POLLING;
206 1.1 jruoho
207 1.1 jruoho
208 1.1 jruoho /*******************************************************************************
209 1.1 jruoho *
210 1.1 jruoho * ECDT - Embedded Controller Boot Resources Table
211 1.1 jruoho * Version 1
212 1.1 jruoho *
213 1.1 jruoho ******************************************************************************/
214 1.1 jruoho
215 1.1 jruoho typedef struct acpi_table_ecdt
216 1.1 jruoho {
217 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
218 1.1 jruoho ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */
219 1.1 jruoho ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */
220 1.1 jruoho UINT32 Uid; /* Unique ID - must be same as the EC _UID method */
221 1.1 jruoho UINT8 Gpe; /* The GPE for the EC */
222 1.1 jruoho UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */
223 1.1 jruoho
224 1.1 jruoho } ACPI_TABLE_ECDT;
225 1.1 jruoho
226 1.1 jruoho
227 1.1 jruoho /*******************************************************************************
228 1.1 jruoho *
229 1.1 jruoho * EINJ - Error Injection Table (ACPI 4.0)
230 1.1 jruoho * Version 1
231 1.1 jruoho *
232 1.1 jruoho ******************************************************************************/
233 1.1 jruoho
234 1.1 jruoho typedef struct acpi_table_einj
235 1.1 jruoho {
236 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
237 1.1 jruoho UINT32 HeaderLength;
238 1.1 jruoho UINT8 Flags;
239 1.1 jruoho UINT8 Reserved[3];
240 1.1 jruoho UINT32 Entries;
241 1.1 jruoho
242 1.1 jruoho } ACPI_TABLE_EINJ;
243 1.1 jruoho
244 1.1 jruoho
245 1.1 jruoho /* EINJ Injection Instruction Entries (actions) */
246 1.1 jruoho
247 1.1 jruoho typedef struct acpi_einj_entry
248 1.1 jruoho {
249 1.1 jruoho ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */
250 1.1 jruoho
251 1.1 jruoho } ACPI_EINJ_ENTRY;
252 1.1 jruoho
253 1.1 jruoho /* Masks for Flags field above */
254 1.1 jruoho
255 1.1 jruoho #define ACPI_EINJ_PRESERVE (1)
256 1.1 jruoho
257 1.1 jruoho /* Values for Action field above */
258 1.1 jruoho
259 1.1 jruoho enum AcpiEinjActions
260 1.1 jruoho {
261 1.4 christos ACPI_EINJ_BEGIN_OPERATION = 0,
262 1.4 christos ACPI_EINJ_GET_TRIGGER_TABLE = 1,
263 1.4 christos ACPI_EINJ_SET_ERROR_TYPE = 2,
264 1.4 christos ACPI_EINJ_GET_ERROR_TYPE = 3,
265 1.4 christos ACPI_EINJ_END_OPERATION = 4,
266 1.4 christos ACPI_EINJ_EXECUTE_OPERATION = 5,
267 1.4 christos ACPI_EINJ_CHECK_BUSY_STATUS = 6,
268 1.4 christos ACPI_EINJ_GET_COMMAND_STATUS = 7,
269 1.4 christos ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
270 1.4 christos ACPI_EINJ_ACTION_RESERVED = 9, /* 9 and greater are reserved */
271 1.4 christos ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */
272 1.1 jruoho };
273 1.1 jruoho
274 1.1 jruoho /* Values for Instruction field above */
275 1.1 jruoho
276 1.1 jruoho enum AcpiEinjInstructions
277 1.1 jruoho {
278 1.1 jruoho ACPI_EINJ_READ_REGISTER = 0,
279 1.1 jruoho ACPI_EINJ_READ_REGISTER_VALUE = 1,
280 1.1 jruoho ACPI_EINJ_WRITE_REGISTER = 2,
281 1.1 jruoho ACPI_EINJ_WRITE_REGISTER_VALUE = 3,
282 1.1 jruoho ACPI_EINJ_NOOP = 4,
283 1.4 christos ACPI_EINJ_FLUSH_CACHELINE = 5,
284 1.4 christos ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */
285 1.1 jruoho };
286 1.1 jruoho
287 1.4 christos typedef struct acpi_einj_error_type_with_addr
288 1.4 christos {
289 1.4 christos UINT32 ErrorType;
290 1.4 christos UINT32 VendorStructOffset;
291 1.4 christos UINT32 Flags;
292 1.4 christos UINT32 ApicId;
293 1.4 christos UINT64 Address;
294 1.4 christos UINT64 Range;
295 1.4 christos UINT32 PcieId;
296 1.4 christos
297 1.4 christos } ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
298 1.4 christos
299 1.4 christos typedef struct acpi_einj_vendor
300 1.4 christos {
301 1.4 christos UINT32 Length;
302 1.4 christos UINT32 PcieId;
303 1.4 christos UINT16 VendorId;
304 1.4 christos UINT16 DeviceId;
305 1.4 christos UINT8 RevisionId;
306 1.4 christos UINT8 Reserved[3];
307 1.4 christos
308 1.4 christos } ACPI_EINJ_VENDOR;
309 1.4 christos
310 1.1 jruoho
311 1.1 jruoho /* EINJ Trigger Error Action Table */
312 1.1 jruoho
313 1.1 jruoho typedef struct acpi_einj_trigger
314 1.1 jruoho {
315 1.1 jruoho UINT32 HeaderSize;
316 1.1 jruoho UINT32 Revision;
317 1.1 jruoho UINT32 TableSize;
318 1.1 jruoho UINT32 EntryCount;
319 1.1 jruoho
320 1.1 jruoho } ACPI_EINJ_TRIGGER;
321 1.1 jruoho
322 1.1 jruoho /* Command status return values */
323 1.1 jruoho
324 1.1 jruoho enum AcpiEinjCommandStatus
325 1.1 jruoho {
326 1.1 jruoho ACPI_EINJ_SUCCESS = 0,
327 1.1 jruoho ACPI_EINJ_FAILURE = 1,
328 1.1 jruoho ACPI_EINJ_INVALID_ACCESS = 2,
329 1.1 jruoho ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */
330 1.1 jruoho };
331 1.1 jruoho
332 1.1 jruoho
333 1.1 jruoho /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
334 1.1 jruoho
335 1.1 jruoho #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1)
336 1.1 jruoho #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1)
337 1.1 jruoho #define ACPI_EINJ_PROCESSOR_FATAL (1<<2)
338 1.1 jruoho #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3)
339 1.1 jruoho #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4)
340 1.1 jruoho #define ACPI_EINJ_MEMORY_FATAL (1<<5)
341 1.1 jruoho #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6)
342 1.1 jruoho #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7)
343 1.1 jruoho #define ACPI_EINJ_PCIX_FATAL (1<<8)
344 1.1 jruoho #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9)
345 1.1 jruoho #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10)
346 1.1 jruoho #define ACPI_EINJ_PLATFORM_FATAL (1<<11)
347 1.4 christos #define ACPI_EINJ_VENDOR_DEFINED (1<<31)
348 1.1 jruoho
349 1.1 jruoho
350 1.1 jruoho /*******************************************************************************
351 1.1 jruoho *
352 1.1 jruoho * ERST - Error Record Serialization Table (ACPI 4.0)
353 1.1 jruoho * Version 1
354 1.1 jruoho *
355 1.1 jruoho ******************************************************************************/
356 1.1 jruoho
357 1.1 jruoho typedef struct acpi_table_erst
358 1.1 jruoho {
359 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
360 1.1 jruoho UINT32 HeaderLength;
361 1.1 jruoho UINT32 Reserved;
362 1.1 jruoho UINT32 Entries;
363 1.1 jruoho
364 1.1 jruoho } ACPI_TABLE_ERST;
365 1.1 jruoho
366 1.1 jruoho
367 1.1 jruoho /* ERST Serialization Entries (actions) */
368 1.1 jruoho
369 1.1 jruoho typedef struct acpi_erst_entry
370 1.1 jruoho {
371 1.1 jruoho ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */
372 1.1 jruoho
373 1.1 jruoho } ACPI_ERST_ENTRY;
374 1.1 jruoho
375 1.1 jruoho /* Masks for Flags field above */
376 1.1 jruoho
377 1.1 jruoho #define ACPI_ERST_PRESERVE (1)
378 1.1 jruoho
379 1.1 jruoho /* Values for Action field above */
380 1.1 jruoho
381 1.1 jruoho enum AcpiErstActions
382 1.1 jruoho {
383 1.1 jruoho ACPI_ERST_BEGIN_WRITE = 0,
384 1.1 jruoho ACPI_ERST_BEGIN_READ = 1,
385 1.1 jruoho ACPI_ERST_BEGIN_CLEAR = 2,
386 1.1 jruoho ACPI_ERST_END = 3,
387 1.1 jruoho ACPI_ERST_SET_RECORD_OFFSET = 4,
388 1.1 jruoho ACPI_ERST_EXECUTE_OPERATION = 5,
389 1.1 jruoho ACPI_ERST_CHECK_BUSY_STATUS = 6,
390 1.1 jruoho ACPI_ERST_GET_COMMAND_STATUS = 7,
391 1.1 jruoho ACPI_ERST_GET_RECORD_ID = 8,
392 1.1 jruoho ACPI_ERST_SET_RECORD_ID = 9,
393 1.1 jruoho ACPI_ERST_GET_RECORD_COUNT = 10,
394 1.1 jruoho ACPI_ERST_BEGIN_DUMMY_WRIITE = 11,
395 1.1 jruoho ACPI_ERST_NOT_USED = 12,
396 1.1 jruoho ACPI_ERST_GET_ERROR_RANGE = 13,
397 1.1 jruoho ACPI_ERST_GET_ERROR_LENGTH = 14,
398 1.1 jruoho ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
399 1.1 jruoho ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */
400 1.1 jruoho };
401 1.1 jruoho
402 1.1 jruoho /* Values for Instruction field above */
403 1.1 jruoho
404 1.1 jruoho enum AcpiErstInstructions
405 1.1 jruoho {
406 1.1 jruoho ACPI_ERST_READ_REGISTER = 0,
407 1.1 jruoho ACPI_ERST_READ_REGISTER_VALUE = 1,
408 1.1 jruoho ACPI_ERST_WRITE_REGISTER = 2,
409 1.1 jruoho ACPI_ERST_WRITE_REGISTER_VALUE = 3,
410 1.1 jruoho ACPI_ERST_NOOP = 4,
411 1.1 jruoho ACPI_ERST_LOAD_VAR1 = 5,
412 1.1 jruoho ACPI_ERST_LOAD_VAR2 = 6,
413 1.1 jruoho ACPI_ERST_STORE_VAR1 = 7,
414 1.1 jruoho ACPI_ERST_ADD = 8,
415 1.1 jruoho ACPI_ERST_SUBTRACT = 9,
416 1.1 jruoho ACPI_ERST_ADD_VALUE = 10,
417 1.1 jruoho ACPI_ERST_SUBTRACT_VALUE = 11,
418 1.1 jruoho ACPI_ERST_STALL = 12,
419 1.1 jruoho ACPI_ERST_STALL_WHILE_TRUE = 13,
420 1.1 jruoho ACPI_ERST_SKIP_NEXT_IF_TRUE = 14,
421 1.1 jruoho ACPI_ERST_GOTO = 15,
422 1.1 jruoho ACPI_ERST_SET_SRC_ADDRESS_BASE = 16,
423 1.1 jruoho ACPI_ERST_SET_DST_ADDRESS_BASE = 17,
424 1.1 jruoho ACPI_ERST_MOVE_DATA = 18,
425 1.1 jruoho ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */
426 1.1 jruoho };
427 1.1 jruoho
428 1.1 jruoho /* Command status return values */
429 1.1 jruoho
430 1.1 jruoho enum AcpiErstCommandStatus
431 1.1 jruoho {
432 1.1 jruoho ACPI_ERST_SUCESS = 0,
433 1.1 jruoho ACPI_ERST_NO_SPACE = 1,
434 1.1 jruoho ACPI_ERST_NOT_AVAILABLE = 2,
435 1.1 jruoho ACPI_ERST_FAILURE = 3,
436 1.1 jruoho ACPI_ERST_RECORD_EMPTY = 4,
437 1.1 jruoho ACPI_ERST_NOT_FOUND = 5,
438 1.1 jruoho ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */
439 1.1 jruoho };
440 1.1 jruoho
441 1.1 jruoho
442 1.1 jruoho /* Error Record Serialization Information */
443 1.1 jruoho
444 1.1 jruoho typedef struct acpi_erst_info
445 1.1 jruoho {
446 1.1 jruoho UINT16 Signature; /* Should be "ER" */
447 1.1 jruoho UINT8 Data[48];
448 1.1 jruoho
449 1.1 jruoho } ACPI_ERST_INFO;
450 1.1 jruoho
451 1.1 jruoho
452 1.1 jruoho /*******************************************************************************
453 1.1 jruoho *
454 1.1 jruoho * HEST - Hardware Error Source Table (ACPI 4.0)
455 1.1 jruoho * Version 1
456 1.1 jruoho *
457 1.1 jruoho ******************************************************************************/
458 1.1 jruoho
459 1.1 jruoho typedef struct acpi_table_hest
460 1.1 jruoho {
461 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
462 1.1 jruoho UINT32 ErrorSourceCount;
463 1.1 jruoho
464 1.1 jruoho } ACPI_TABLE_HEST;
465 1.1 jruoho
466 1.1 jruoho
467 1.1 jruoho /* HEST subtable header */
468 1.1 jruoho
469 1.1 jruoho typedef struct acpi_hest_header
470 1.1 jruoho {
471 1.1 jruoho UINT16 Type;
472 1.1 jruoho UINT16 SourceId;
473 1.1 jruoho
474 1.1 jruoho } ACPI_HEST_HEADER;
475 1.1 jruoho
476 1.1 jruoho
477 1.1 jruoho /* Values for Type field above for subtables */
478 1.1 jruoho
479 1.1 jruoho enum AcpiHestTypes
480 1.1 jruoho {
481 1.1 jruoho ACPI_HEST_TYPE_IA32_CHECK = 0,
482 1.1 jruoho ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
483 1.1 jruoho ACPI_HEST_TYPE_IA32_NMI = 2,
484 1.1 jruoho ACPI_HEST_TYPE_NOT_USED3 = 3,
485 1.1 jruoho ACPI_HEST_TYPE_NOT_USED4 = 4,
486 1.1 jruoho ACPI_HEST_TYPE_NOT_USED5 = 5,
487 1.1 jruoho ACPI_HEST_TYPE_AER_ROOT_PORT = 6,
488 1.1 jruoho ACPI_HEST_TYPE_AER_ENDPOINT = 7,
489 1.1 jruoho ACPI_HEST_TYPE_AER_BRIDGE = 8,
490 1.1 jruoho ACPI_HEST_TYPE_GENERIC_ERROR = 9,
491 1.1 jruoho ACPI_HEST_TYPE_RESERVED = 10 /* 10 and greater are reserved */
492 1.1 jruoho };
493 1.1 jruoho
494 1.1 jruoho
495 1.1 jruoho /*
496 1.1 jruoho * HEST substructures contained in subtables
497 1.1 jruoho */
498 1.1 jruoho
499 1.1 jruoho /*
500 1.1 jruoho * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
501 1.1 jruoho * ACPI_HEST_IA_CORRECTED structures.
502 1.1 jruoho */
503 1.1 jruoho typedef struct acpi_hest_ia_error_bank
504 1.1 jruoho {
505 1.1 jruoho UINT8 BankNumber;
506 1.1 jruoho UINT8 ClearStatusOnInit;
507 1.1 jruoho UINT8 StatusFormat;
508 1.1 jruoho UINT8 Reserved;
509 1.1 jruoho UINT32 ControlRegister;
510 1.1 jruoho UINT64 ControlData;
511 1.1 jruoho UINT32 StatusRegister;
512 1.1 jruoho UINT32 AddressRegister;
513 1.1 jruoho UINT32 MiscRegister;
514 1.1 jruoho
515 1.1 jruoho } ACPI_HEST_IA_ERROR_BANK;
516 1.1 jruoho
517 1.1 jruoho
518 1.1 jruoho /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
519 1.1 jruoho
520 1.1 jruoho typedef struct acpi_hest_aer_common
521 1.1 jruoho {
522 1.1 jruoho UINT16 Reserved1;
523 1.1 jruoho UINT8 Flags;
524 1.1 jruoho UINT8 Enabled;
525 1.1 jruoho UINT32 RecordsToPreallocate;
526 1.1 jruoho UINT32 MaxSectionsPerRecord;
527 1.4 christos UINT32 Bus; /* Bus and Segment numbers */
528 1.1 jruoho UINT16 Device;
529 1.1 jruoho UINT16 Function;
530 1.1 jruoho UINT16 DeviceControl;
531 1.1 jruoho UINT16 Reserved2;
532 1.1 jruoho UINT32 UncorrectableMask;
533 1.1 jruoho UINT32 UncorrectableSeverity;
534 1.1 jruoho UINT32 CorrectableMask;
535 1.1 jruoho UINT32 AdvancedCapabilities;
536 1.1 jruoho
537 1.1 jruoho } ACPI_HEST_AER_COMMON;
538 1.1 jruoho
539 1.1 jruoho /* Masks for HEST Flags fields */
540 1.1 jruoho
541 1.1 jruoho #define ACPI_HEST_FIRMWARE_FIRST (1)
542 1.1 jruoho #define ACPI_HEST_GLOBAL (1<<1)
543 1.1 jruoho
544 1.4 christos /*
545 1.4 christos * Macros to access the bus/segment numbers in Bus field above:
546 1.4 christos * Bus number is encoded in bits 7:0
547 1.4 christos * Segment number is encoded in bits 23:8
548 1.4 christos */
549 1.4 christos #define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF)
550 1.4 christos #define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF)
551 1.4 christos
552 1.1 jruoho
553 1.1 jruoho /* Hardware Error Notification */
554 1.1 jruoho
555 1.1 jruoho typedef struct acpi_hest_notify
556 1.1 jruoho {
557 1.1 jruoho UINT8 Type;
558 1.1 jruoho UINT8 Length;
559 1.1 jruoho UINT16 ConfigWriteEnable;
560 1.1 jruoho UINT32 PollInterval;
561 1.1 jruoho UINT32 Vector;
562 1.1 jruoho UINT32 PollingThresholdValue;
563 1.1 jruoho UINT32 PollingThresholdWindow;
564 1.1 jruoho UINT32 ErrorThresholdValue;
565 1.1 jruoho UINT32 ErrorThresholdWindow;
566 1.1 jruoho
567 1.1 jruoho } ACPI_HEST_NOTIFY;
568 1.1 jruoho
569 1.1 jruoho /* Values for Notify Type field above */
570 1.1 jruoho
571 1.1 jruoho enum AcpiHestNotifyTypes
572 1.1 jruoho {
573 1.1 jruoho ACPI_HEST_NOTIFY_POLLED = 0,
574 1.1 jruoho ACPI_HEST_NOTIFY_EXTERNAL = 1,
575 1.1 jruoho ACPI_HEST_NOTIFY_LOCAL = 2,
576 1.1 jruoho ACPI_HEST_NOTIFY_SCI = 3,
577 1.1 jruoho ACPI_HEST_NOTIFY_NMI = 4,
578 1.4 christos ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
579 1.4 christos ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
580 1.4 christos ACPI_HEST_NOTIFY_RESERVED = 7 /* 7 and greater are reserved */
581 1.1 jruoho };
582 1.1 jruoho
583 1.1 jruoho /* Values for ConfigWriteEnable bitfield above */
584 1.1 jruoho
585 1.1 jruoho #define ACPI_HEST_TYPE (1)
586 1.1 jruoho #define ACPI_HEST_POLL_INTERVAL (1<<1)
587 1.1 jruoho #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2)
588 1.1 jruoho #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
589 1.1 jruoho #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4)
590 1.1 jruoho #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5)
591 1.1 jruoho
592 1.1 jruoho
593 1.1 jruoho /*
594 1.1 jruoho * HEST subtables
595 1.1 jruoho */
596 1.1 jruoho
597 1.1 jruoho /* 0: IA32 Machine Check Exception */
598 1.1 jruoho
599 1.1 jruoho typedef struct acpi_hest_ia_machine_check
600 1.1 jruoho {
601 1.1 jruoho ACPI_HEST_HEADER Header;
602 1.1 jruoho UINT16 Reserved1;
603 1.1 jruoho UINT8 Flags;
604 1.1 jruoho UINT8 Enabled;
605 1.1 jruoho UINT32 RecordsToPreallocate;
606 1.1 jruoho UINT32 MaxSectionsPerRecord;
607 1.1 jruoho UINT64 GlobalCapabilityData;
608 1.1 jruoho UINT64 GlobalControlData;
609 1.1 jruoho UINT8 NumHardwareBanks;
610 1.1 jruoho UINT8 Reserved3[7];
611 1.1 jruoho
612 1.1 jruoho } ACPI_HEST_IA_MACHINE_CHECK;
613 1.1 jruoho
614 1.1 jruoho
615 1.1 jruoho /* 1: IA32 Corrected Machine Check */
616 1.1 jruoho
617 1.1 jruoho typedef struct acpi_hest_ia_corrected
618 1.1 jruoho {
619 1.1 jruoho ACPI_HEST_HEADER Header;
620 1.1 jruoho UINT16 Reserved1;
621 1.1 jruoho UINT8 Flags;
622 1.1 jruoho UINT8 Enabled;
623 1.1 jruoho UINT32 RecordsToPreallocate;
624 1.1 jruoho UINT32 MaxSectionsPerRecord;
625 1.1 jruoho ACPI_HEST_NOTIFY Notify;
626 1.1 jruoho UINT8 NumHardwareBanks;
627 1.1 jruoho UINT8 Reserved2[3];
628 1.1 jruoho
629 1.1 jruoho } ACPI_HEST_IA_CORRECTED;
630 1.1 jruoho
631 1.1 jruoho
632 1.1 jruoho /* 2: IA32 Non-Maskable Interrupt */
633 1.1 jruoho
634 1.1 jruoho typedef struct acpi_hest_ia_nmi
635 1.1 jruoho {
636 1.1 jruoho ACPI_HEST_HEADER Header;
637 1.1 jruoho UINT32 Reserved;
638 1.1 jruoho UINT32 RecordsToPreallocate;
639 1.1 jruoho UINT32 MaxSectionsPerRecord;
640 1.1 jruoho UINT32 MaxRawDataLength;
641 1.1 jruoho
642 1.1 jruoho } ACPI_HEST_IA_NMI;
643 1.1 jruoho
644 1.1 jruoho
645 1.1 jruoho /* 3,4,5: Not used */
646 1.1 jruoho
647 1.1 jruoho /* 6: PCI Express Root Port AER */
648 1.1 jruoho
649 1.1 jruoho typedef struct acpi_hest_aer_root
650 1.1 jruoho {
651 1.1 jruoho ACPI_HEST_HEADER Header;
652 1.1 jruoho ACPI_HEST_AER_COMMON Aer;
653 1.1 jruoho UINT32 RootErrorCommand;
654 1.1 jruoho
655 1.1 jruoho } ACPI_HEST_AER_ROOT;
656 1.1 jruoho
657 1.1 jruoho
658 1.1 jruoho /* 7: PCI Express AER (AER Endpoint) */
659 1.1 jruoho
660 1.1 jruoho typedef struct acpi_hest_aer
661 1.1 jruoho {
662 1.1 jruoho ACPI_HEST_HEADER Header;
663 1.1 jruoho ACPI_HEST_AER_COMMON Aer;
664 1.1 jruoho
665 1.1 jruoho } ACPI_HEST_AER;
666 1.1 jruoho
667 1.1 jruoho
668 1.1 jruoho /* 8: PCI Express/PCI-X Bridge AER */
669 1.1 jruoho
670 1.1 jruoho typedef struct acpi_hest_aer_bridge
671 1.1 jruoho {
672 1.1 jruoho ACPI_HEST_HEADER Header;
673 1.1 jruoho ACPI_HEST_AER_COMMON Aer;
674 1.1 jruoho UINT32 UncorrectableMask2;
675 1.1 jruoho UINT32 UncorrectableSeverity2;
676 1.1 jruoho UINT32 AdvancedCapabilities2;
677 1.1 jruoho
678 1.1 jruoho } ACPI_HEST_AER_BRIDGE;
679 1.1 jruoho
680 1.1 jruoho
681 1.1 jruoho /* 9: Generic Hardware Error Source */
682 1.1 jruoho
683 1.1 jruoho typedef struct acpi_hest_generic
684 1.1 jruoho {
685 1.1 jruoho ACPI_HEST_HEADER Header;
686 1.1 jruoho UINT16 RelatedSourceId;
687 1.1 jruoho UINT8 Reserved;
688 1.1 jruoho UINT8 Enabled;
689 1.1 jruoho UINT32 RecordsToPreallocate;
690 1.1 jruoho UINT32 MaxSectionsPerRecord;
691 1.1 jruoho UINT32 MaxRawDataLength;
692 1.1 jruoho ACPI_GENERIC_ADDRESS ErrorStatusAddress;
693 1.1 jruoho ACPI_HEST_NOTIFY Notify;
694 1.1 jruoho UINT32 ErrorBlockLength;
695 1.1 jruoho
696 1.1 jruoho } ACPI_HEST_GENERIC;
697 1.1 jruoho
698 1.1 jruoho
699 1.1 jruoho /* Generic Error Status block */
700 1.1 jruoho
701 1.1 jruoho typedef struct acpi_hest_generic_status
702 1.1 jruoho {
703 1.1 jruoho UINT32 BlockStatus;
704 1.1 jruoho UINT32 RawDataOffset;
705 1.1 jruoho UINT32 RawDataLength;
706 1.1 jruoho UINT32 DataLength;
707 1.1 jruoho UINT32 ErrorSeverity;
708 1.1 jruoho
709 1.1 jruoho } ACPI_HEST_GENERIC_STATUS;
710 1.1 jruoho
711 1.1 jruoho /* Values for BlockStatus flags above */
712 1.1 jruoho
713 1.1 jruoho #define ACPI_HEST_UNCORRECTABLE (1)
714 1.1 jruoho #define ACPI_HEST_CORRECTABLE (1<<1)
715 1.1 jruoho #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2)
716 1.1 jruoho #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3)
717 1.1 jruoho #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */
718 1.1 jruoho
719 1.1 jruoho
720 1.1 jruoho /* Generic Error Data entry */
721 1.1 jruoho
722 1.1 jruoho typedef struct acpi_hest_generic_data
723 1.1 jruoho {
724 1.1 jruoho UINT8 SectionType[16];
725 1.1 jruoho UINT32 ErrorSeverity;
726 1.1 jruoho UINT16 Revision;
727 1.1 jruoho UINT8 ValidationBits;
728 1.1 jruoho UINT8 Flags;
729 1.1 jruoho UINT32 ErrorDataLength;
730 1.1 jruoho UINT8 FruId[16];
731 1.1 jruoho UINT8 FruText[20];
732 1.1 jruoho
733 1.1 jruoho } ACPI_HEST_GENERIC_DATA;
734 1.1 jruoho
735 1.1 jruoho
736 1.1 jruoho /*******************************************************************************
737 1.1 jruoho *
738 1.1 jruoho * MADT - Multiple APIC Description Table
739 1.1 jruoho * Version 3
740 1.1 jruoho *
741 1.1 jruoho ******************************************************************************/
742 1.1 jruoho
743 1.1 jruoho typedef struct acpi_table_madt
744 1.1 jruoho {
745 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
746 1.1 jruoho UINT32 Address; /* Physical address of local APIC */
747 1.1 jruoho UINT32 Flags;
748 1.1 jruoho
749 1.1 jruoho } ACPI_TABLE_MADT;
750 1.1 jruoho
751 1.1 jruoho /* Masks for Flags field above */
752 1.1 jruoho
753 1.1 jruoho #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */
754 1.1 jruoho
755 1.1 jruoho /* Values for PCATCompat flag */
756 1.1 jruoho
757 1.1 jruoho #define ACPI_MADT_DUAL_PIC 0
758 1.1 jruoho #define ACPI_MADT_MULTIPLE_APIC 1
759 1.1 jruoho
760 1.1 jruoho
761 1.1 jruoho /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
762 1.1 jruoho
763 1.1 jruoho enum AcpiMadtType
764 1.1 jruoho {
765 1.1 jruoho ACPI_MADT_TYPE_LOCAL_APIC = 0,
766 1.1 jruoho ACPI_MADT_TYPE_IO_APIC = 1,
767 1.1 jruoho ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
768 1.1 jruoho ACPI_MADT_TYPE_NMI_SOURCE = 3,
769 1.1 jruoho ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
770 1.1 jruoho ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
771 1.1 jruoho ACPI_MADT_TYPE_IO_SAPIC = 6,
772 1.1 jruoho ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
773 1.1 jruoho ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
774 1.1 jruoho ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
775 1.1 jruoho ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
776 1.4 christos ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
777 1.4 christos ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
778 1.4 christos ACPI_MADT_TYPE_RESERVED = 13 /* 13 and greater are reserved */
779 1.1 jruoho };
780 1.1 jruoho
781 1.1 jruoho
782 1.1 jruoho /*
783 1.1 jruoho * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
784 1.1 jruoho */
785 1.1 jruoho
786 1.1 jruoho /* 0: Processor Local APIC */
787 1.1 jruoho
788 1.1 jruoho typedef struct acpi_madt_local_apic
789 1.1 jruoho {
790 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
791 1.1 jruoho UINT8 ProcessorId; /* ACPI processor id */
792 1.1 jruoho UINT8 Id; /* Processor's local APIC id */
793 1.1 jruoho UINT32 LapicFlags;
794 1.1 jruoho
795 1.1 jruoho } ACPI_MADT_LOCAL_APIC;
796 1.1 jruoho
797 1.1 jruoho
798 1.1 jruoho /* 1: IO APIC */
799 1.1 jruoho
800 1.1 jruoho typedef struct acpi_madt_io_apic
801 1.1 jruoho {
802 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
803 1.1 jruoho UINT8 Id; /* I/O APIC ID */
804 1.1 jruoho UINT8 Reserved; /* Reserved - must be zero */
805 1.1 jruoho UINT32 Address; /* APIC physical address */
806 1.1 jruoho UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */
807 1.1 jruoho
808 1.1 jruoho } ACPI_MADT_IO_APIC;
809 1.1 jruoho
810 1.1 jruoho
811 1.1 jruoho /* 2: Interrupt Override */
812 1.1 jruoho
813 1.1 jruoho typedef struct acpi_madt_interrupt_override
814 1.1 jruoho {
815 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
816 1.1 jruoho UINT8 Bus; /* 0 - ISA */
817 1.1 jruoho UINT8 SourceIrq; /* Interrupt source (IRQ) */
818 1.1 jruoho UINT32 GlobalIrq; /* Global system interrupt */
819 1.1 jruoho UINT16 IntiFlags;
820 1.1 jruoho
821 1.1 jruoho } ACPI_MADT_INTERRUPT_OVERRIDE;
822 1.1 jruoho
823 1.1 jruoho
824 1.1 jruoho /* 3: NMI Source */
825 1.1 jruoho
826 1.1 jruoho typedef struct acpi_madt_nmi_source
827 1.1 jruoho {
828 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
829 1.1 jruoho UINT16 IntiFlags;
830 1.1 jruoho UINT32 GlobalIrq; /* Global system interrupt */
831 1.1 jruoho
832 1.1 jruoho } ACPI_MADT_NMI_SOURCE;
833 1.1 jruoho
834 1.1 jruoho
835 1.1 jruoho /* 4: Local APIC NMI */
836 1.1 jruoho
837 1.1 jruoho typedef struct acpi_madt_local_apic_nmi
838 1.1 jruoho {
839 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
840 1.1 jruoho UINT8 ProcessorId; /* ACPI processor id */
841 1.1 jruoho UINT16 IntiFlags;
842 1.1 jruoho UINT8 Lint; /* LINTn to which NMI is connected */
843 1.1 jruoho
844 1.1 jruoho } ACPI_MADT_LOCAL_APIC_NMI;
845 1.1 jruoho
846 1.1 jruoho
847 1.1 jruoho /* 5: Address Override */
848 1.1 jruoho
849 1.1 jruoho typedef struct acpi_madt_local_apic_override
850 1.1 jruoho {
851 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
852 1.1 jruoho UINT16 Reserved; /* Reserved, must be zero */
853 1.1 jruoho UINT64 Address; /* APIC physical address */
854 1.1 jruoho
855 1.1 jruoho } ACPI_MADT_LOCAL_APIC_OVERRIDE;
856 1.1 jruoho
857 1.1 jruoho
858 1.1 jruoho /* 6: I/O Sapic */
859 1.1 jruoho
860 1.1 jruoho typedef struct acpi_madt_io_sapic
861 1.1 jruoho {
862 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
863 1.1 jruoho UINT8 Id; /* I/O SAPIC ID */
864 1.1 jruoho UINT8 Reserved; /* Reserved, must be zero */
865 1.1 jruoho UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */
866 1.1 jruoho UINT64 Address; /* SAPIC physical address */
867 1.1 jruoho
868 1.1 jruoho } ACPI_MADT_IO_SAPIC;
869 1.1 jruoho
870 1.1 jruoho
871 1.1 jruoho /* 7: Local Sapic */
872 1.1 jruoho
873 1.1 jruoho typedef struct acpi_madt_local_sapic
874 1.1 jruoho {
875 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
876 1.1 jruoho UINT8 ProcessorId; /* ACPI processor id */
877 1.1 jruoho UINT8 Id; /* SAPIC ID */
878 1.1 jruoho UINT8 Eid; /* SAPIC EID */
879 1.1 jruoho UINT8 Reserved[3]; /* Reserved, must be zero */
880 1.1 jruoho UINT32 LapicFlags;
881 1.1 jruoho UINT32 Uid; /* Numeric UID - ACPI 3.0 */
882 1.1 jruoho char UidString[1]; /* String UID - ACPI 3.0 */
883 1.1 jruoho
884 1.1 jruoho } ACPI_MADT_LOCAL_SAPIC;
885 1.1 jruoho
886 1.1 jruoho
887 1.1 jruoho /* 8: Platform Interrupt Source */
888 1.1 jruoho
889 1.1 jruoho typedef struct acpi_madt_interrupt_source
890 1.1 jruoho {
891 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
892 1.1 jruoho UINT16 IntiFlags;
893 1.1 jruoho UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */
894 1.1 jruoho UINT8 Id; /* Processor ID */
895 1.1 jruoho UINT8 Eid; /* Processor EID */
896 1.1 jruoho UINT8 IoSapicVector; /* Vector value for PMI interrupts */
897 1.1 jruoho UINT32 GlobalIrq; /* Global system interrupt */
898 1.1 jruoho UINT32 Flags; /* Interrupt Source Flags */
899 1.1 jruoho
900 1.1 jruoho } ACPI_MADT_INTERRUPT_SOURCE;
901 1.1 jruoho
902 1.1 jruoho /* Masks for Flags field above */
903 1.1 jruoho
904 1.1 jruoho #define ACPI_MADT_CPEI_OVERRIDE (1)
905 1.1 jruoho
906 1.1 jruoho
907 1.1 jruoho /* 9: Processor Local X2APIC (ACPI 4.0) */
908 1.1 jruoho
909 1.1 jruoho typedef struct acpi_madt_local_x2apic
910 1.1 jruoho {
911 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
912 1.1 jruoho UINT16 Reserved; /* Reserved - must be zero */
913 1.1 jruoho UINT32 LocalApicId; /* Processor x2APIC ID */
914 1.1 jruoho UINT32 LapicFlags;
915 1.1 jruoho UINT32 Uid; /* ACPI processor UID */
916 1.1 jruoho
917 1.1 jruoho } ACPI_MADT_LOCAL_X2APIC;
918 1.1 jruoho
919 1.1 jruoho
920 1.1 jruoho /* 10: Local X2APIC NMI (ACPI 4.0) */
921 1.1 jruoho
922 1.1 jruoho typedef struct acpi_madt_local_x2apic_nmi
923 1.1 jruoho {
924 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
925 1.1 jruoho UINT16 IntiFlags;
926 1.1 jruoho UINT32 Uid; /* ACPI processor UID */
927 1.1 jruoho UINT8 Lint; /* LINTn to which NMI is connected */
928 1.1 jruoho UINT8 Reserved[3]; /* Reserved - must be zero */
929 1.1 jruoho
930 1.1 jruoho } ACPI_MADT_LOCAL_X2APIC_NMI;
931 1.1 jruoho
932 1.1 jruoho
933 1.4 christos /* 11: Generic Interrupt (ACPI 5.0) */
934 1.4 christos
935 1.4 christos typedef struct acpi_madt_generic_interrupt
936 1.4 christos {
937 1.4 christos ACPI_SUBTABLE_HEADER Header;
938 1.4 christos UINT16 Reserved; /* Reserved - must be zero */
939 1.4 christos UINT32 GicId;
940 1.4 christos UINT32 Uid;
941 1.4 christos UINT32 Flags;
942 1.4 christos UINT32 ParkingVersion;
943 1.4 christos UINT32 PerformanceInterrupt;
944 1.4 christos UINT64 ParkedAddress;
945 1.4 christos UINT64 BaseAddress;
946 1.4 christos
947 1.4 christos } ACPI_MADT_GENERIC_INTERRUPT;
948 1.4 christos
949 1.4 christos
950 1.4 christos /* 12: Generic Distributor (ACPI 5.0) */
951 1.4 christos
952 1.4 christos typedef struct acpi_madt_generic_distributor
953 1.4 christos {
954 1.4 christos ACPI_SUBTABLE_HEADER Header;
955 1.4 christos UINT16 Reserved; /* Reserved - must be zero */
956 1.4 christos UINT32 GicId;
957 1.4 christos UINT64 BaseAddress;
958 1.4 christos UINT32 GlobalIrqBase;
959 1.4 christos UINT32 Reserved2; /* Reserved - must be zero */
960 1.4 christos
961 1.4 christos } ACPI_MADT_GENERIC_DISTRIBUTOR;
962 1.4 christos
963 1.4 christos
964 1.1 jruoho /*
965 1.1 jruoho * Common flags fields for MADT subtables
966 1.1 jruoho */
967 1.1 jruoho
968 1.4 christos /* MADT Local APIC flags (LapicFlags) and GIC flags */
969 1.1 jruoho
970 1.1 jruoho #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */
971 1.1 jruoho
972 1.1 jruoho /* MADT MPS INTI flags (IntiFlags) */
973 1.1 jruoho
974 1.1 jruoho #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */
975 1.1 jruoho #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */
976 1.1 jruoho
977 1.1 jruoho /* Values for MPS INTI flags */
978 1.1 jruoho
979 1.1 jruoho #define ACPI_MADT_POLARITY_CONFORMS 0
980 1.1 jruoho #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1
981 1.1 jruoho #define ACPI_MADT_POLARITY_RESERVED 2
982 1.1 jruoho #define ACPI_MADT_POLARITY_ACTIVE_LOW 3
983 1.1 jruoho
984 1.1 jruoho #define ACPI_MADT_TRIGGER_CONFORMS (0)
985 1.1 jruoho #define ACPI_MADT_TRIGGER_EDGE (1<<2)
986 1.1 jruoho #define ACPI_MADT_TRIGGER_RESERVED (2<<2)
987 1.1 jruoho #define ACPI_MADT_TRIGGER_LEVEL (3<<2)
988 1.1 jruoho
989 1.1 jruoho
990 1.1 jruoho /*******************************************************************************
991 1.1 jruoho *
992 1.1 jruoho * MSCT - Maximum System Characteristics Table (ACPI 4.0)
993 1.1 jruoho * Version 1
994 1.1 jruoho *
995 1.1 jruoho ******************************************************************************/
996 1.1 jruoho
997 1.1 jruoho typedef struct acpi_table_msct
998 1.1 jruoho {
999 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1000 1.1 jruoho UINT32 ProximityOffset; /* Location of proximity info struct(s) */
1001 1.1 jruoho UINT32 MaxProximityDomains;/* Max number of proximity domains */
1002 1.1 jruoho UINT32 MaxClockDomains; /* Max number of clock domains */
1003 1.1 jruoho UINT64 MaxAddress; /* Max physical address in system */
1004 1.1 jruoho
1005 1.1 jruoho } ACPI_TABLE_MSCT;
1006 1.1 jruoho
1007 1.1 jruoho
1008 1.1 jruoho /* Subtable - Maximum Proximity Domain Information. Version 1 */
1009 1.1 jruoho
1010 1.1 jruoho typedef struct acpi_msct_proximity
1011 1.1 jruoho {
1012 1.1 jruoho UINT8 Revision;
1013 1.1 jruoho UINT8 Length;
1014 1.1 jruoho UINT32 RangeStart; /* Start of domain range */
1015 1.1 jruoho UINT32 RangeEnd; /* End of domain range */
1016 1.1 jruoho UINT32 ProcessorCapacity;
1017 1.1 jruoho UINT64 MemoryCapacity; /* In bytes */
1018 1.1 jruoho
1019 1.1 jruoho } ACPI_MSCT_PROXIMITY;
1020 1.1 jruoho
1021 1.1 jruoho
1022 1.1 jruoho /*******************************************************************************
1023 1.1 jruoho *
1024 1.1 jruoho * SBST - Smart Battery Specification Table
1025 1.1 jruoho * Version 1
1026 1.1 jruoho *
1027 1.1 jruoho ******************************************************************************/
1028 1.1 jruoho
1029 1.1 jruoho typedef struct acpi_table_sbst
1030 1.1 jruoho {
1031 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1032 1.1 jruoho UINT32 WarningLevel;
1033 1.1 jruoho UINT32 LowLevel;
1034 1.1 jruoho UINT32 CriticalLevel;
1035 1.1 jruoho
1036 1.1 jruoho } ACPI_TABLE_SBST;
1037 1.1 jruoho
1038 1.1 jruoho
1039 1.1 jruoho /*******************************************************************************
1040 1.1 jruoho *
1041 1.1 jruoho * SLIT - System Locality Distance Information Table
1042 1.1 jruoho * Version 1
1043 1.1 jruoho *
1044 1.1 jruoho ******************************************************************************/
1045 1.1 jruoho
1046 1.1 jruoho typedef struct acpi_table_slit
1047 1.1 jruoho {
1048 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1049 1.1 jruoho UINT64 LocalityCount;
1050 1.1 jruoho UINT8 Entry[1]; /* Real size = localities^2 */
1051 1.1 jruoho
1052 1.1 jruoho } ACPI_TABLE_SLIT;
1053 1.1 jruoho
1054 1.1 jruoho
1055 1.1 jruoho /*******************************************************************************
1056 1.1 jruoho *
1057 1.1 jruoho * SRAT - System Resource Affinity Table
1058 1.1 jruoho * Version 3
1059 1.1 jruoho *
1060 1.1 jruoho ******************************************************************************/
1061 1.1 jruoho
1062 1.1 jruoho typedef struct acpi_table_srat
1063 1.1 jruoho {
1064 1.1 jruoho ACPI_TABLE_HEADER Header; /* Common ACPI table header */
1065 1.1 jruoho UINT32 TableRevision; /* Must be value '1' */
1066 1.1 jruoho UINT64 Reserved; /* Reserved, must be zero */
1067 1.1 jruoho
1068 1.1 jruoho } ACPI_TABLE_SRAT;
1069 1.1 jruoho
1070 1.1 jruoho /* Values for subtable type in ACPI_SUBTABLE_HEADER */
1071 1.1 jruoho
1072 1.1 jruoho enum AcpiSratType
1073 1.1 jruoho {
1074 1.1 jruoho ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
1075 1.1 jruoho ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
1076 1.1 jruoho ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
1077 1.1 jruoho ACPI_SRAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
1078 1.1 jruoho };
1079 1.1 jruoho
1080 1.1 jruoho /*
1081 1.1 jruoho * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
1082 1.1 jruoho */
1083 1.1 jruoho
1084 1.1 jruoho /* 0: Processor Local APIC/SAPIC Affinity */
1085 1.1 jruoho
1086 1.1 jruoho typedef struct acpi_srat_cpu_affinity
1087 1.1 jruoho {
1088 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
1089 1.1 jruoho UINT8 ProximityDomainLo;
1090 1.1 jruoho UINT8 ApicId;
1091 1.1 jruoho UINT32 Flags;
1092 1.1 jruoho UINT8 LocalSapicEid;
1093 1.1 jruoho UINT8 ProximityDomainHi[3];
1094 1.2 jruoho UINT32 ClockDomain;
1095 1.1 jruoho
1096 1.1 jruoho } ACPI_SRAT_CPU_AFFINITY;
1097 1.1 jruoho
1098 1.1 jruoho /* Flags */
1099 1.1 jruoho
1100 1.1 jruoho #define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */
1101 1.1 jruoho
1102 1.1 jruoho
1103 1.1 jruoho /* 1: Memory Affinity */
1104 1.1 jruoho
1105 1.1 jruoho typedef struct acpi_srat_mem_affinity
1106 1.1 jruoho {
1107 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
1108 1.1 jruoho UINT32 ProximityDomain;
1109 1.1 jruoho UINT16 Reserved; /* Reserved, must be zero */
1110 1.1 jruoho UINT64 BaseAddress;
1111 1.1 jruoho UINT64 Length;
1112 1.1 jruoho UINT32 Reserved1;
1113 1.1 jruoho UINT32 Flags;
1114 1.1 jruoho UINT64 Reserved2; /* Reserved, must be zero */
1115 1.1 jruoho
1116 1.1 jruoho } ACPI_SRAT_MEM_AFFINITY;
1117 1.1 jruoho
1118 1.1 jruoho /* Flags */
1119 1.1 jruoho
1120 1.1 jruoho #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */
1121 1.1 jruoho #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */
1122 1.1 jruoho #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */
1123 1.1 jruoho
1124 1.1 jruoho
1125 1.1 jruoho /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
1126 1.1 jruoho
1127 1.1 jruoho typedef struct acpi_srat_x2apic_cpu_affinity
1128 1.1 jruoho {
1129 1.1 jruoho ACPI_SUBTABLE_HEADER Header;
1130 1.1 jruoho UINT16 Reserved; /* Reserved, must be zero */
1131 1.1 jruoho UINT32 ProximityDomain;
1132 1.1 jruoho UINT32 ApicId;
1133 1.1 jruoho UINT32 Flags;
1134 1.1 jruoho UINT32 ClockDomain;
1135 1.1 jruoho UINT32 Reserved2;
1136 1.1 jruoho
1137 1.1 jruoho } ACPI_SRAT_X2APIC_CPU_AFFINITY;
1138 1.1 jruoho
1139 1.1 jruoho /* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
1140 1.1 jruoho
1141 1.1 jruoho #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */
1142 1.1 jruoho
1143 1.1 jruoho
1144 1.1 jruoho /* Reset to default packing */
1145 1.1 jruoho
1146 1.1 jruoho #pragma pack()
1147 1.1 jruoho
1148 1.1 jruoho #endif /* __ACTBL1_H__ */
1149