actbl1.h revision 238381
169450Smsmith/******************************************************************************
269450Smsmith *
3167802Sjkim * Name: actbl1.h - Additional ACPI table definitions
469450Smsmith *
569450Smsmith *****************************************************************************/
669450Smsmith
7217365Sjkim/*
8229989Sjkim * Copyright (C) 2000 - 2012, Intel Corp.
970243Smsmith * All rights reserved.
1069450Smsmith *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
2569450Smsmith *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
2969450Smsmith *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
4369450Smsmith
4469450Smsmith#ifndef __ACTBL1_H__
4569450Smsmith#define __ACTBL1_H__
4669450Smsmith
47167802Sjkim
48167802Sjkim/*******************************************************************************
49167802Sjkim *
50197104Sjkim * Additional ACPI Tables (1)
51167802Sjkim *
52167802Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are
53167802Sjkim * included here to support device drivers and the AML disassembler.
54167802Sjkim *
55197104Sjkim * The tables in this file are fully defined within the ACPI specification.
56197104Sjkim *
57167802Sjkim ******************************************************************************/
58167802Sjkim
59167802Sjkim
60167802Sjkim/*
61197104Sjkim * Values for description table header signatures for tables defined in this
62197104Sjkim * file. Useful because they make it more difficult to inadvertently type in
63197104Sjkim * the wrong signature.
64167802Sjkim */
65193267Sjkim#define ACPI_SIG_BERT           "BERT"      /* Boot Error Record Table */
66167802Sjkim#define ACPI_SIG_CPEP           "CPEP"      /* Corrected Platform Error Polling table */
67167802Sjkim#define ACPI_SIG_ECDT           "ECDT"      /* Embedded Controller Boot Resources Table */
68193267Sjkim#define ACPI_SIG_EINJ           "EINJ"      /* Error Injection table */
69193267Sjkim#define ACPI_SIG_ERST           "ERST"      /* Error Record Serialization Table */
70193267Sjkim#define ACPI_SIG_HEST           "HEST"      /* Hardware Error Source Table */
71167802Sjkim#define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
72197104Sjkim#define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table */
73167802Sjkim#define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
74167802Sjkim#define ACPI_SIG_SLIT           "SLIT"      /* System Locality Distance Information Table */
75167802Sjkim#define ACPI_SIG_SRAT           "SRAT"      /* System Resource Affinity Table */
76167802Sjkim
77167802Sjkim
78167802Sjkim/*
79167802Sjkim * All tables must be byte-packed to match the ACPI specification, since
80167802Sjkim * the tables are provided by the system BIOS.
81167802Sjkim */
8269450Smsmith#pragma pack(1)
8369450Smsmith
8491116Smsmith/*
85167802Sjkim * Note about bitfields: The UINT8 type is used for bitfields in ACPI tables.
86167802Sjkim * This is the only type that is even remotely portable. Anything else is not
87167802Sjkim * portable, so do not use any other bitfield types.
8891116Smsmith */
89167802Sjkim
90167802Sjkim
91197104Sjkim/*******************************************************************************
92197104Sjkim *
93197104Sjkim * Common subtable headers
94197104Sjkim *
95197104Sjkim ******************************************************************************/
96167802Sjkim
97197104Sjkim/* Generic subtable header (used in MADT, SRAT, etc.) */
98197104Sjkim
99167802Sjkimtypedef struct acpi_subtable_header
10069450Smsmith{
101167802Sjkim    UINT8                   Type;
102167802Sjkim    UINT8                   Length;
103151937Sjkim
104167802Sjkim} ACPI_SUBTABLE_HEADER;
10569450Smsmith
10669450Smsmith
107197104Sjkim/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
108193267Sjkim
109193267Sjkimtypedef struct acpi_whea_header
110193267Sjkim{
111193267Sjkim    UINT8                   Action;
112193267Sjkim    UINT8                   Instruction;
113193267Sjkim    UINT8                   Flags;
114193267Sjkim    UINT8                   Reserved;
115193267Sjkim    ACPI_GENERIC_ADDRESS    RegisterRegion;
116193267Sjkim    UINT64                  Value;              /* Value used with Read/Write register */
117193267Sjkim    UINT64                  Mask;               /* Bitmask required for this register instruction */
118193267Sjkim
119193267Sjkim} ACPI_WHEA_HEADER;
120193267Sjkim
121193267Sjkim
122167802Sjkim/*******************************************************************************
123167802Sjkim *
124197104Sjkim * BERT - Boot Error Record Table (ACPI 4.0)
125197104Sjkim *        Version 1
126167802Sjkim *
127167802Sjkim ******************************************************************************/
128167802Sjkim
129193267Sjkimtypedef struct acpi_table_bert
130193267Sjkim{
131193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
132193267Sjkim    UINT32                  RegionLength;       /* Length of the boot error region */
133238381Sjkim    UINT64                  Address;            /* Physical address of the error region */
134193267Sjkim
135193267Sjkim} ACPI_TABLE_BERT;
136193267Sjkim
137193267Sjkim
138197104Sjkim/* Boot Error Region (not a subtable, pointed to by Address field above) */
139193267Sjkim
140193267Sjkimtypedef struct acpi_bert_region
141193267Sjkim{
142197104Sjkim    UINT32                  BlockStatus;        /* Type of error information */
143197104Sjkim    UINT32                  RawDataOffset;      /* Offset to raw error data */
144197104Sjkim    UINT32                  RawDataLength;      /* Length of raw error data */
145197104Sjkim    UINT32                  DataLength;         /* Length of generic error data */
146197104Sjkim    UINT32                  ErrorSeverity;      /* Severity code */
147193267Sjkim
148193267Sjkim} ACPI_BERT_REGION;
149193267Sjkim
150197104Sjkim/* Values for BlockStatus flags above */
151193267Sjkim
152193267Sjkim#define ACPI_BERT_UNCORRECTABLE             (1)
153197104Sjkim#define ACPI_BERT_CORRECTABLE               (1<<1)
154197104Sjkim#define ACPI_BERT_MULTIPLE_UNCORRECTABLE    (1<<2)
155197104Sjkim#define ACPI_BERT_MULTIPLE_CORRECTABLE      (1<<3)
156197104Sjkim#define ACPI_BERT_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
157193267Sjkim
158197104Sjkim/* Values for ErrorSeverity above */
159193267Sjkim
160197104Sjkimenum AcpiBertErrorSeverity
161167802Sjkim{
162197104Sjkim    ACPI_BERT_ERROR_CORRECTABLE     = 0,
163197104Sjkim    ACPI_BERT_ERROR_FATAL           = 1,
164197104Sjkim    ACPI_BERT_ERROR_CORRECTED       = 2,
165197104Sjkim    ACPI_BERT_ERROR_NONE            = 3,
166197104Sjkim    ACPI_BERT_ERROR_RESERVED        = 4     /* 4 and greater are reserved */
167197104Sjkim};
168167802Sjkim
169197104Sjkim/*
170197104Sjkim * Note: The generic error data that follows the ErrorSeverity field above
171197104Sjkim * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below
172197104Sjkim */
173167802Sjkim
174167802Sjkim
175167802Sjkim/*******************************************************************************
176167802Sjkim *
177197104Sjkim * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
178197104Sjkim *        Version 1
179167802Sjkim *
180167802Sjkim ******************************************************************************/
181167802Sjkim
182167802Sjkimtypedef struct acpi_table_cpep
183167802Sjkim{
184167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
185167802Sjkim    UINT64                  Reserved;
186167802Sjkim
187167802Sjkim} ACPI_TABLE_CPEP;
188167802Sjkim
189167802Sjkim
190167802Sjkim/* Subtable */
191167802Sjkim
192167802Sjkimtypedef struct acpi_cpep_polling
193167802Sjkim{
194197104Sjkim    ACPI_SUBTABLE_HEADER    Header;
195167802Sjkim    UINT8                   Id;                 /* Processor ID */
196167802Sjkim    UINT8                   Eid;                /* Processor EID */
197167802Sjkim    UINT32                  Interval;           /* Polling interval (msec) */
198167802Sjkim
199167802Sjkim} ACPI_CPEP_POLLING;
200167802Sjkim
201167802Sjkim
202167802Sjkim/*******************************************************************************
203167802Sjkim *
204167802Sjkim * ECDT - Embedded Controller Boot Resources Table
205197104Sjkim *        Version 1
206167802Sjkim *
207167802Sjkim ******************************************************************************/
208167802Sjkim
209167802Sjkimtypedef struct acpi_table_ecdt
210167802Sjkim{
211167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
212167802Sjkim    ACPI_GENERIC_ADDRESS    Control;            /* Address of EC command/status register */
213167802Sjkim    ACPI_GENERIC_ADDRESS    Data;               /* Address of EC data register */
214167802Sjkim    UINT32                  Uid;                /* Unique ID - must be same as the EC _UID method */
215167802Sjkim    UINT8                   Gpe;                /* The GPE for the EC */
216167802Sjkim    UINT8                   Id[1];              /* Full namepath of the EC in the ACPI namespace */
217167802Sjkim
218167802Sjkim} ACPI_TABLE_ECDT;
219167802Sjkim
220167802Sjkim
221167802Sjkim/*******************************************************************************
222167802Sjkim *
223197104Sjkim * EINJ - Error Injection Table (ACPI 4.0)
224197104Sjkim *        Version 1
225193267Sjkim *
226193267Sjkim ******************************************************************************/
227193267Sjkim
228193267Sjkimtypedef struct acpi_table_einj
229193267Sjkim{
230193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
231193267Sjkim    UINT32                  HeaderLength;
232197104Sjkim    UINT8                   Flags;
233197104Sjkim    UINT8                   Reserved[3];
234193267Sjkim    UINT32                  Entries;
235193267Sjkim
236193267Sjkim} ACPI_TABLE_EINJ;
237193267Sjkim
238197104Sjkim
239193267Sjkim/* EINJ Injection Instruction Entries (actions) */
240193267Sjkim
241193267Sjkimtypedef struct acpi_einj_entry
242193267Sjkim{
243193267Sjkim    ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
244193267Sjkim
245193267Sjkim} ACPI_EINJ_ENTRY;
246193267Sjkim
247197104Sjkim/* Masks for Flags field above */
248197104Sjkim
249197104Sjkim#define ACPI_EINJ_PRESERVE          (1)
250197104Sjkim
251193267Sjkim/* Values for Action field above */
252193267Sjkim
253193267Sjkimenum AcpiEinjActions
254193267Sjkim{
255228110Sjkim    ACPI_EINJ_BEGIN_OPERATION               = 0,
256228110Sjkim    ACPI_EINJ_GET_TRIGGER_TABLE             = 1,
257228110Sjkim    ACPI_EINJ_SET_ERROR_TYPE                = 2,
258228110Sjkim    ACPI_EINJ_GET_ERROR_TYPE                = 3,
259228110Sjkim    ACPI_EINJ_END_OPERATION                 = 4,
260228110Sjkim    ACPI_EINJ_EXECUTE_OPERATION             = 5,
261228110Sjkim    ACPI_EINJ_CHECK_BUSY_STATUS             = 6,
262228110Sjkim    ACPI_EINJ_GET_COMMAND_STATUS            = 7,
263228110Sjkim    ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS   = 8,
264228110Sjkim    ACPI_EINJ_ACTION_RESERVED               = 9,     /* 9 and greater are reserved */
265228110Sjkim    ACPI_EINJ_TRIGGER_ERROR                 = 0xFF   /* Except for this value */
266193267Sjkim};
267193267Sjkim
268193267Sjkim/* Values for Instruction field above */
269193267Sjkim
270193267Sjkimenum AcpiEinjInstructions
271193267Sjkim{
272193267Sjkim    ACPI_EINJ_READ_REGISTER         = 0,
273193267Sjkim    ACPI_EINJ_READ_REGISTER_VALUE   = 1,
274193267Sjkim    ACPI_EINJ_WRITE_REGISTER        = 2,
275193267Sjkim    ACPI_EINJ_WRITE_REGISTER_VALUE  = 3,
276193267Sjkim    ACPI_EINJ_NOOP                  = 4,
277228110Sjkim    ACPI_EINJ_FLUSH_CACHELINE       = 5,
278228110Sjkim    ACPI_EINJ_INSTRUCTION_RESERVED  = 6     /* 6 and greater are reserved */
279193267Sjkim};
280193267Sjkim
281228110Sjkimtypedef struct acpi_einj_error_type_with_addr
282228110Sjkim{
283228110Sjkim    UINT32                  ErrorType;
284228110Sjkim    UINT32                  VendorStructOffset;
285228110Sjkim    UINT32                  Flags;
286228110Sjkim    UINT32                  ApicId;
287228110Sjkim    UINT64                  Address;
288228110Sjkim    UINT64                  Range;
289228110Sjkim    UINT32                  PcieId;
290197104Sjkim
291228110Sjkim} ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
292228110Sjkim
293228110Sjkimtypedef struct acpi_einj_vendor
294228110Sjkim{
295228110Sjkim    UINT32                  Length;
296228110Sjkim    UINT32                  PcieId;
297228110Sjkim    UINT16                  VendorId;
298228110Sjkim    UINT16                  DeviceId;
299228110Sjkim    UINT8                   RevisionId;
300228110Sjkim    UINT8                   Reserved[3];
301228110Sjkim
302228110Sjkim} ACPI_EINJ_VENDOR;
303228110Sjkim
304228110Sjkim
305193267Sjkim/* EINJ Trigger Error Action Table */
306193267Sjkim
307193267Sjkimtypedef struct acpi_einj_trigger
308193267Sjkim{
309193267Sjkim    UINT32                  HeaderSize;
310193267Sjkim    UINT32                  Revision;
311193267Sjkim    UINT32                  TableSize;
312193267Sjkim    UINT32                  EntryCount;
313193267Sjkim
314193267Sjkim} ACPI_EINJ_TRIGGER;
315193267Sjkim
316197104Sjkim/* Command status return values */
317193267Sjkim
318197104Sjkimenum AcpiEinjCommandStatus
319197104Sjkim{
320197104Sjkim    ACPI_EINJ_SUCCESS               = 0,
321197104Sjkim    ACPI_EINJ_FAILURE               = 1,
322197104Sjkim    ACPI_EINJ_INVALID_ACCESS        = 2,
323197104Sjkim    ACPI_EINJ_STATUS_RESERVED       = 3     /* 3 and greater are reserved */
324197104Sjkim};
325197104Sjkim
326197104Sjkim
327197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
328197104Sjkim
329197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
330197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
331197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
332197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
333197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
334197104Sjkim#define ACPI_EINJ_MEMORY_FATAL              (1<<5)
335197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
336197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
337197104Sjkim#define ACPI_EINJ_PCIX_FATAL                (1<<8)
338197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
339197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
340197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
341228110Sjkim#define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
342197104Sjkim
343197104Sjkim
344193267Sjkim/*******************************************************************************
345193267Sjkim *
346197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0)
347197104Sjkim *        Version 1
348193267Sjkim *
349193267Sjkim ******************************************************************************/
350193267Sjkim
351193267Sjkimtypedef struct acpi_table_erst
352193267Sjkim{
353193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
354193267Sjkim    UINT32                  HeaderLength;
355193267Sjkim    UINT32                  Reserved;
356193267Sjkim    UINT32                  Entries;
357193267Sjkim
358193267Sjkim} ACPI_TABLE_ERST;
359193267Sjkim
360197104Sjkim
361193267Sjkim/* ERST Serialization Entries (actions) */
362193267Sjkim
363193267Sjkimtypedef struct acpi_erst_entry
364193267Sjkim{
365193267Sjkim    ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
366193267Sjkim
367193267Sjkim} ACPI_ERST_ENTRY;
368193267Sjkim
369197104Sjkim/* Masks for Flags field above */
370197104Sjkim
371197104Sjkim#define ACPI_ERST_PRESERVE          (1)
372197104Sjkim
373193267Sjkim/* Values for Action field above */
374193267Sjkim
375193267Sjkimenum AcpiErstActions
376193267Sjkim{
377197104Sjkim    ACPI_ERST_BEGIN_WRITE           = 0,
378197104Sjkim    ACPI_ERST_BEGIN_READ            = 1,
379197104Sjkim    ACPI_ERST_BEGIN_CLEAR           = 2,
380197104Sjkim    ACPI_ERST_END                   = 3,
381193267Sjkim    ACPI_ERST_SET_RECORD_OFFSET     = 4,
382193267Sjkim    ACPI_ERST_EXECUTE_OPERATION     = 5,
383193267Sjkim    ACPI_ERST_CHECK_BUSY_STATUS     = 6,
384193267Sjkim    ACPI_ERST_GET_COMMAND_STATUS    = 7,
385197104Sjkim    ACPI_ERST_GET_RECORD_ID         = 8,
386197104Sjkim    ACPI_ERST_SET_RECORD_ID         = 9,
387193267Sjkim    ACPI_ERST_GET_RECORD_COUNT      = 10,
388193267Sjkim    ACPI_ERST_BEGIN_DUMMY_WRIITE    = 11,
389193267Sjkim    ACPI_ERST_NOT_USED              = 12,
390193267Sjkim    ACPI_ERST_GET_ERROR_RANGE       = 13,
391193267Sjkim    ACPI_ERST_GET_ERROR_LENGTH      = 14,
392193267Sjkim    ACPI_ERST_GET_ERROR_ATTRIBUTES  = 15,
393193267Sjkim    ACPI_ERST_ACTION_RESERVED       = 16    /* 16 and greater are reserved */
394193267Sjkim};
395193267Sjkim
396193267Sjkim/* Values for Instruction field above */
397193267Sjkim
398193267Sjkimenum AcpiErstInstructions
399193267Sjkim{
400193267Sjkim    ACPI_ERST_READ_REGISTER         = 0,
401193267Sjkim    ACPI_ERST_READ_REGISTER_VALUE   = 1,
402193267Sjkim    ACPI_ERST_WRITE_REGISTER        = 2,
403193267Sjkim    ACPI_ERST_WRITE_REGISTER_VALUE  = 3,
404193267Sjkim    ACPI_ERST_NOOP                  = 4,
405193267Sjkim    ACPI_ERST_LOAD_VAR1             = 5,
406193267Sjkim    ACPI_ERST_LOAD_VAR2             = 6,
407193267Sjkim    ACPI_ERST_STORE_VAR1            = 7,
408193267Sjkim    ACPI_ERST_ADD                   = 8,
409193267Sjkim    ACPI_ERST_SUBTRACT              = 9,
410193267Sjkim    ACPI_ERST_ADD_VALUE             = 10,
411193267Sjkim    ACPI_ERST_SUBTRACT_VALUE        = 11,
412193267Sjkim    ACPI_ERST_STALL                 = 12,
413193267Sjkim    ACPI_ERST_STALL_WHILE_TRUE      = 13,
414193267Sjkim    ACPI_ERST_SKIP_NEXT_IF_TRUE     = 14,
415193267Sjkim    ACPI_ERST_GOTO                  = 15,
416193267Sjkim    ACPI_ERST_SET_SRC_ADDRESS_BASE  = 16,
417193267Sjkim    ACPI_ERST_SET_DST_ADDRESS_BASE  = 17,
418193267Sjkim    ACPI_ERST_MOVE_DATA             = 18,
419193267Sjkim    ACPI_ERST_INSTRUCTION_RESERVED  = 19    /* 19 and greater are reserved */
420193267Sjkim};
421193267Sjkim
422197104Sjkim/* Command status return values */
423193267Sjkim
424197104Sjkimenum AcpiErstCommandStatus
425197104Sjkim{
426197104Sjkim    ACPI_ERST_SUCESS                = 0,
427197104Sjkim    ACPI_ERST_NO_SPACE              = 1,
428197104Sjkim    ACPI_ERST_NOT_AVAILABLE         = 2,
429197104Sjkim    ACPI_ERST_FAILURE               = 3,
430197104Sjkim    ACPI_ERST_RECORD_EMPTY          = 4,
431197104Sjkim    ACPI_ERST_NOT_FOUND             = 5,
432197104Sjkim    ACPI_ERST_STATUS_RESERVED       = 6     /* 6 and greater are reserved */
433197104Sjkim};
434197104Sjkim
435197104Sjkim
436197104Sjkim/* Error Record Serialization Information */
437197104Sjkim
438197104Sjkimtypedef struct acpi_erst_info
439197104Sjkim{
440197104Sjkim    UINT16                  Signature;          /* Should be "ER" */
441197104Sjkim    UINT8                   Data[48];
442197104Sjkim
443197104Sjkim} ACPI_ERST_INFO;
444197104Sjkim
445197104Sjkim
446193267Sjkim/*******************************************************************************
447193267Sjkim *
448197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0)
449197104Sjkim *        Version 1
450193267Sjkim *
451193267Sjkim ******************************************************************************/
452193267Sjkim
453193267Sjkimtypedef struct acpi_table_hest
454193267Sjkim{
455193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
456193267Sjkim    UINT32                  ErrorSourceCount;
457193267Sjkim
458193267Sjkim} ACPI_TABLE_HEST;
459193267Sjkim
460193267Sjkim
461193267Sjkim/* HEST subtable header */
462193267Sjkim
463193267Sjkimtypedef struct acpi_hest_header
464193267Sjkim{
465193267Sjkim    UINT16                  Type;
466197104Sjkim    UINT16                  SourceId;
467193267Sjkim
468193267Sjkim} ACPI_HEST_HEADER;
469193267Sjkim
470193267Sjkim
471193267Sjkim/* Values for Type field above for subtables */
472193267Sjkim
473193267Sjkimenum AcpiHestTypes
474193267Sjkim{
475197104Sjkim    ACPI_HEST_TYPE_IA32_CHECK           = 0,
476197104Sjkim    ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
477197104Sjkim    ACPI_HEST_TYPE_IA32_NMI             = 2,
478197104Sjkim    ACPI_HEST_TYPE_NOT_USED3            = 3,
479197104Sjkim    ACPI_HEST_TYPE_NOT_USED4            = 4,
480197104Sjkim    ACPI_HEST_TYPE_NOT_USED5            = 5,
481197104Sjkim    ACPI_HEST_TYPE_AER_ROOT_PORT        = 6,
482197104Sjkim    ACPI_HEST_TYPE_AER_ENDPOINT         = 7,
483197104Sjkim    ACPI_HEST_TYPE_AER_BRIDGE           = 8,
484197104Sjkim    ACPI_HEST_TYPE_GENERIC_ERROR        = 9,
485197104Sjkim    ACPI_HEST_TYPE_RESERVED             = 10    /* 10 and greater are reserved */
486193267Sjkim};
487193267Sjkim
488193267Sjkim
489193267Sjkim/*
490197104Sjkim * HEST substructures contained in subtables
491193267Sjkim */
492193267Sjkim
493197104Sjkim/*
494197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
495197104Sjkim * ACPI_HEST_IA_CORRECTED structures.
496197104Sjkim */
497197104Sjkimtypedef struct acpi_hest_ia_error_bank
498193267Sjkim{
499193267Sjkim    UINT8                   BankNumber;
500193267Sjkim    UINT8                   ClearStatusOnInit;
501193267Sjkim    UINT8                   StatusFormat;
502197104Sjkim    UINT8                   Reserved;
503193267Sjkim    UINT32                  ControlRegister;
504197104Sjkim    UINT64                  ControlData;
505193267Sjkim    UINT32                  StatusRegister;
506193267Sjkim    UINT32                  AddressRegister;
507193267Sjkim    UINT32                  MiscRegister;
508193267Sjkim
509197104Sjkim} ACPI_HEST_IA_ERROR_BANK;
510193267Sjkim
511193267Sjkim
512197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
513193267Sjkim
514193267Sjkimtypedef struct acpi_hest_aer_common
515193267Sjkim{
516197104Sjkim    UINT16                  Reserved1;
517193267Sjkim    UINT8                   Flags;
518193267Sjkim    UINT8                   Enabled;
519197104Sjkim    UINT32                  RecordsToPreallocate;
520193267Sjkim    UINT32                  MaxSectionsPerRecord;
521193267Sjkim    UINT32                  Bus;
522193267Sjkim    UINT16                  Device;
523193267Sjkim    UINT16                  Function;
524193267Sjkim    UINT16                  DeviceControl;
525197104Sjkim    UINT16                  Reserved2;
526197104Sjkim    UINT32                  UncorrectableMask;
527197104Sjkim    UINT32                  UncorrectableSeverity;
528197104Sjkim    UINT32                  CorrectableMask;
529197104Sjkim    UINT32                  AdvancedCapabilities;
530193267Sjkim
531193267Sjkim} ACPI_HEST_AER_COMMON;
532193267Sjkim
533197104Sjkim/* Masks for HEST Flags fields */
534193267Sjkim
535197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST        (1)
536197104Sjkim#define ACPI_HEST_GLOBAL                (1<<1)
537197104Sjkim
538197104Sjkim
539193267Sjkim/* Hardware Error Notification */
540193267Sjkim
541193267Sjkimtypedef struct acpi_hest_notify
542193267Sjkim{
543193267Sjkim    UINT8                   Type;
544193267Sjkim    UINT8                   Length;
545193267Sjkim    UINT16                  ConfigWriteEnable;
546193267Sjkim    UINT32                  PollInterval;
547193267Sjkim    UINT32                  Vector;
548193267Sjkim    UINT32                  PollingThresholdValue;
549193267Sjkim    UINT32                  PollingThresholdWindow;
550193267Sjkim    UINT32                  ErrorThresholdValue;
551193267Sjkim    UINT32                  ErrorThresholdWindow;
552193267Sjkim
553193267Sjkim} ACPI_HEST_NOTIFY;
554193267Sjkim
555193267Sjkim/* Values for Notify Type field above */
556193267Sjkim
557193267Sjkimenum AcpiHestNotifyTypes
558193267Sjkim{
559193267Sjkim    ACPI_HEST_NOTIFY_POLLED     = 0,
560193267Sjkim    ACPI_HEST_NOTIFY_EXTERNAL   = 1,
561193267Sjkim    ACPI_HEST_NOTIFY_LOCAL      = 2,
562193267Sjkim    ACPI_HEST_NOTIFY_SCI        = 3,
563193267Sjkim    ACPI_HEST_NOTIFY_NMI        = 4,
564193267Sjkim    ACPI_HEST_NOTIFY_RESERVED   = 5     /* 5 and greater are reserved */
565193267Sjkim};
566193267Sjkim
567197104Sjkim/* Values for ConfigWriteEnable bitfield above */
568193267Sjkim
569197104Sjkim#define ACPI_HEST_TYPE                  (1)
570197104Sjkim#define ACPI_HEST_POLL_INTERVAL         (1<<1)
571197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
572197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
573197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
574197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
575197104Sjkim
576197104Sjkim
577193267Sjkim/*
578193267Sjkim * HEST subtables
579193267Sjkim */
580193267Sjkim
581197104Sjkim/* 0: IA32 Machine Check Exception */
582193267Sjkim
583197104Sjkimtypedef struct acpi_hest_ia_machine_check
584193267Sjkim{
585193267Sjkim    ACPI_HEST_HEADER        Header;
586197104Sjkim    UINT16                  Reserved1;
587193267Sjkim    UINT8                   Flags;
588197104Sjkim    UINT8                   Enabled;
589197104Sjkim    UINT32                  RecordsToPreallocate;
590193267Sjkim    UINT32                  MaxSectionsPerRecord;
591193267Sjkim    UINT64                  GlobalCapabilityData;
592193267Sjkim    UINT64                  GlobalControlData;
593193267Sjkim    UINT8                   NumHardwareBanks;
594197104Sjkim    UINT8                   Reserved3[7];
595193267Sjkim
596197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK;
597193267Sjkim
598193267Sjkim
599197104Sjkim/* 1: IA32 Corrected Machine Check */
600193267Sjkim
601197104Sjkimtypedef struct acpi_hest_ia_corrected
602193267Sjkim{
603193267Sjkim    ACPI_HEST_HEADER        Header;
604197104Sjkim    UINT16                  Reserved1;
605193267Sjkim    UINT8                   Flags;
606193267Sjkim    UINT8                   Enabled;
607197104Sjkim    UINT32                  RecordsToPreallocate;
608193267Sjkim    UINT32                  MaxSectionsPerRecord;
609193267Sjkim    ACPI_HEST_NOTIFY        Notify;
610193267Sjkim    UINT8                   NumHardwareBanks;
611197104Sjkim    UINT8                   Reserved2[3];
612193267Sjkim
613197104Sjkim} ACPI_HEST_IA_CORRECTED;
614193267Sjkim
615193267Sjkim
616197104Sjkim/* 2: IA32 Non-Maskable Interrupt */
617193267Sjkim
618197104Sjkimtypedef struct acpi_hest_ia_nmi
619193267Sjkim{
620193267Sjkim    ACPI_HEST_HEADER        Header;
621193267Sjkim    UINT32                  Reserved;
622197104Sjkim    UINT32                  RecordsToPreallocate;
623193267Sjkim    UINT32                  MaxSectionsPerRecord;
624193267Sjkim    UINT32                  MaxRawDataLength;
625193267Sjkim
626197104Sjkim} ACPI_HEST_IA_NMI;
627193267Sjkim
628193267Sjkim
629197104Sjkim/* 3,4,5: Not used */
630193267Sjkim
631193267Sjkim/* 6: PCI Express Root Port AER */
632193267Sjkim
633193267Sjkimtypedef struct acpi_hest_aer_root
634193267Sjkim{
635193267Sjkim    ACPI_HEST_HEADER        Header;
636193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
637193267Sjkim    UINT32                  RootErrorCommand;
638193267Sjkim
639193267Sjkim} ACPI_HEST_AER_ROOT;
640193267Sjkim
641193267Sjkim
642193267Sjkim/* 7: PCI Express AER (AER Endpoint) */
643193267Sjkim
644193267Sjkimtypedef struct acpi_hest_aer
645193267Sjkim{
646193267Sjkim    ACPI_HEST_HEADER        Header;
647193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
648193267Sjkim
649193267Sjkim} ACPI_HEST_AER;
650193267Sjkim
651193267Sjkim
652193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */
653193267Sjkim
654193267Sjkimtypedef struct acpi_hest_aer_bridge
655193267Sjkim{
656193267Sjkim    ACPI_HEST_HEADER        Header;
657193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
658197104Sjkim    UINT32                  UncorrectableMask2;
659197104Sjkim    UINT32                  UncorrectableSeverity2;
660197104Sjkim    UINT32                  AdvancedCapabilities2;
661193267Sjkim
662193267Sjkim} ACPI_HEST_AER_BRIDGE;
663193267Sjkim
664193267Sjkim
665193267Sjkim/* 9: Generic Hardware Error Source */
666193267Sjkim
667193267Sjkimtypedef struct acpi_hest_generic
668193267Sjkim{
669193267Sjkim    ACPI_HEST_HEADER        Header;
670193267Sjkim    UINT16                  RelatedSourceId;
671197104Sjkim    UINT8                   Reserved;
672193267Sjkim    UINT8                   Enabled;
673197104Sjkim    UINT32                  RecordsToPreallocate;
674193267Sjkim    UINT32                  MaxSectionsPerRecord;
675193267Sjkim    UINT32                  MaxRawDataLength;
676193267Sjkim    ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
677193267Sjkim    ACPI_HEST_NOTIFY        Notify;
678197104Sjkim    UINT32                  ErrorBlockLength;
679193267Sjkim
680193267Sjkim} ACPI_HEST_GENERIC;
681193267Sjkim
682193267Sjkim
683197104Sjkim/* Generic Error Status block */
684167802Sjkim
685197104Sjkimtypedef struct acpi_hest_generic_status
686167802Sjkim{
687197104Sjkim    UINT32                  BlockStatus;
688197104Sjkim    UINT32                  RawDataOffset;
689197104Sjkim    UINT32                  RawDataLength;
690197104Sjkim    UINT32                  DataLength;
691197104Sjkim    UINT32                  ErrorSeverity;
692167802Sjkim
693197104Sjkim} ACPI_HEST_GENERIC_STATUS;
694167802Sjkim
695197104Sjkim/* Values for BlockStatus flags above */
696167802Sjkim
697197104Sjkim#define ACPI_HEST_UNCORRECTABLE             (1)
698197104Sjkim#define ACPI_HEST_CORRECTABLE               (1<<1)
699197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
700197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
701197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
702167802Sjkim
703167802Sjkim
704197104Sjkim/* Generic Error Data entry */
705167802Sjkim
706197104Sjkimtypedef struct acpi_hest_generic_data
707193267Sjkim{
708197104Sjkim    UINT8                   SectionType[16];
709197104Sjkim    UINT32                  ErrorSeverity;
710197104Sjkim    UINT16                  Revision;
711197104Sjkim    UINT8                   ValidationBits;
712193267Sjkim    UINT8                   Flags;
713197104Sjkim    UINT32                  ErrorDataLength;
714197104Sjkim    UINT8                   FruId[16];
715197104Sjkim    UINT8                   FruText[20];
716193267Sjkim
717197104Sjkim} ACPI_HEST_GENERIC_DATA;
718193267Sjkim
719193267Sjkim
720193267Sjkim/*******************************************************************************
721193267Sjkim *
722167802Sjkim * MADT - Multiple APIC Description Table
723197104Sjkim *        Version 3
724167802Sjkim *
725167802Sjkim ******************************************************************************/
726167802Sjkim
727167802Sjkimtypedef struct acpi_table_madt
728167802Sjkim{
729167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
730167802Sjkim    UINT32                  Address;            /* Physical address of local APIC */
731167802Sjkim    UINT32                  Flags;
732167802Sjkim
733167802Sjkim} ACPI_TABLE_MADT;
734167802Sjkim
735197104Sjkim/* Masks for Flags field above */
736167802Sjkim
737197104Sjkim#define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
738167802Sjkim
739167802Sjkim/* Values for PCATCompat flag */
740167802Sjkim
741167802Sjkim#define ACPI_MADT_DUAL_PIC          0
742167802Sjkim#define ACPI_MADT_MULTIPLE_APIC     1
743167802Sjkim
744167802Sjkim
745197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
746167802Sjkim
747167802Sjkimenum AcpiMadtType
748167802Sjkim{
749167802Sjkim    ACPI_MADT_TYPE_LOCAL_APIC           = 0,
750167802Sjkim    ACPI_MADT_TYPE_IO_APIC              = 1,
751167802Sjkim    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE   = 2,
752167802Sjkim    ACPI_MADT_TYPE_NMI_SOURCE           = 3,
753167802Sjkim    ACPI_MADT_TYPE_LOCAL_APIC_NMI       = 4,
754167802Sjkim    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE  = 5,
755167802Sjkim    ACPI_MADT_TYPE_IO_SAPIC             = 6,
756167802Sjkim    ACPI_MADT_TYPE_LOCAL_SAPIC          = 7,
757167802Sjkim    ACPI_MADT_TYPE_INTERRUPT_SOURCE     = 8,
758193267Sjkim    ACPI_MADT_TYPE_LOCAL_X2APIC         = 9,
759193267Sjkim    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI     = 10,
760228110Sjkim    ACPI_MADT_TYPE_GENERIC_INTERRUPT    = 11,
761228110Sjkim    ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR  = 12,
762228110Sjkim    ACPI_MADT_TYPE_RESERVED             = 13    /* 13 and greater are reserved */
763167802Sjkim};
764167802Sjkim
765167802Sjkim
766167802Sjkim/*
767167802Sjkim * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
768167802Sjkim */
769167802Sjkim
770167802Sjkim/* 0: Processor Local APIC */
771167802Sjkim
772167802Sjkimtypedef struct acpi_madt_local_apic
773167802Sjkim{
774167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
775167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
776167802Sjkim    UINT8                   Id;                 /* Processor's local APIC id */
777167802Sjkim    UINT32                  LapicFlags;
778167802Sjkim
779167802Sjkim} ACPI_MADT_LOCAL_APIC;
780167802Sjkim
781197104Sjkim
782167802Sjkim/* 1: IO APIC */
783167802Sjkim
784167802Sjkimtypedef struct acpi_madt_io_apic
785167802Sjkim{
786167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
787167802Sjkim    UINT8                   Id;                 /* I/O APIC ID */
788167802Sjkim    UINT8                   Reserved;           /* Reserved - must be zero */
789167802Sjkim    UINT32                  Address;            /* APIC physical address */
790167802Sjkim    UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
791167802Sjkim
792167802Sjkim} ACPI_MADT_IO_APIC;
793167802Sjkim
794197104Sjkim
795167802Sjkim/* 2: Interrupt Override */
796167802Sjkim
797167802Sjkimtypedef struct acpi_madt_interrupt_override
798167802Sjkim{
799167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
800167802Sjkim    UINT8                   Bus;                /* 0 - ISA */
801167802Sjkim    UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
802167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
803167802Sjkim    UINT16                  IntiFlags;
804167802Sjkim
805167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE;
806167802Sjkim
807197104Sjkim
808167802Sjkim/* 3: NMI Source */
809167802Sjkim
810167802Sjkimtypedef struct acpi_madt_nmi_source
811167802Sjkim{
812167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
813167802Sjkim    UINT16                  IntiFlags;
814167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
815167802Sjkim
816167802Sjkim} ACPI_MADT_NMI_SOURCE;
817167802Sjkim
818197104Sjkim
819167802Sjkim/* 4: Local APIC NMI */
820167802Sjkim
821167802Sjkimtypedef struct acpi_madt_local_apic_nmi
822167802Sjkim{
823167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
824167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
825167802Sjkim    UINT16                  IntiFlags;
826167802Sjkim    UINT8                   Lint;               /* LINTn to which NMI is connected */
827167802Sjkim
828167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI;
829167802Sjkim
830197104Sjkim
831167802Sjkim/* 5: Address Override */
832167802Sjkim
833167802Sjkimtypedef struct acpi_madt_local_apic_override
834167802Sjkim{
835167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
836167802Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
837167802Sjkim    UINT64                  Address;            /* APIC physical address */
838167802Sjkim
839167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE;
840167802Sjkim
841197104Sjkim
842167802Sjkim/* 6: I/O Sapic */
843167802Sjkim
844167802Sjkimtypedef struct acpi_madt_io_sapic
845167802Sjkim{
846167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
847167802Sjkim    UINT8                   Id;                 /* I/O SAPIC ID */
848167802Sjkim    UINT8                   Reserved;           /* Reserved, must be zero */
849167802Sjkim    UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
850167802Sjkim    UINT64                  Address;            /* SAPIC physical address */
851167802Sjkim
852167802Sjkim} ACPI_MADT_IO_SAPIC;
853167802Sjkim
854197104Sjkim
855167802Sjkim/* 7: Local Sapic */
856167802Sjkim
857167802Sjkimtypedef struct acpi_madt_local_sapic
858167802Sjkim{
859167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
860167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
861167802Sjkim    UINT8                   Id;                 /* SAPIC ID */
862167802Sjkim    UINT8                   Eid;                /* SAPIC EID */
863167802Sjkim    UINT8                   Reserved[3];        /* Reserved, must be zero */
864167802Sjkim    UINT32                  LapicFlags;
865167802Sjkim    UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
866167802Sjkim    char                    UidString[1];       /* String UID  - ACPI 3.0 */
867167802Sjkim
868167802Sjkim} ACPI_MADT_LOCAL_SAPIC;
869167802Sjkim
870197104Sjkim
871167802Sjkim/* 8: Platform Interrupt Source */
872167802Sjkim
873167802Sjkimtypedef struct acpi_madt_interrupt_source
874167802Sjkim{
875167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
876167802Sjkim    UINT16                  IntiFlags;
877167802Sjkim    UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
878167802Sjkim    UINT8                   Id;                 /* Processor ID */
879167802Sjkim    UINT8                   Eid;                /* Processor EID */
880167802Sjkim    UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
881167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
882167802Sjkim    UINT32                  Flags;              /* Interrupt Source Flags */
883167802Sjkim
884167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE;
885167802Sjkim
886197104Sjkim/* Masks for Flags field above */
887167802Sjkim
888167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE     (1)
889167802Sjkim
890167802Sjkim
891197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */
892197104Sjkim
893193267Sjkimtypedef struct acpi_madt_local_x2apic
894193267Sjkim{
895193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
896193267Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
897193267Sjkim    UINT32                  LocalApicId;        /* Processor x2APIC ID  */
898193267Sjkim    UINT32                  LapicFlags;
899193267Sjkim    UINT32                  Uid;                /* ACPI processor UID */
900193267Sjkim
901193267Sjkim} ACPI_MADT_LOCAL_X2APIC;
902193267Sjkim
903193267Sjkim
904197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */
905197104Sjkim
906193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi
907193267Sjkim{
908193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
909193267Sjkim    UINT16                  IntiFlags;
910193267Sjkim    UINT32                  Uid;                /* ACPI processor UID */
911193267Sjkim    UINT8                   Lint;               /* LINTn to which NMI is connected */
912193267Sjkim    UINT8                   Reserved[3];        /* Reserved - must be zero */
913193267Sjkim
914193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI;
915193267Sjkim
916193267Sjkim
917228110Sjkim/* 11: Generic Interrupt (ACPI 5.0) */
918228110Sjkim
919228110Sjkimtypedef struct acpi_madt_generic_interrupt
920228110Sjkim{
921228110Sjkim    ACPI_SUBTABLE_HEADER    Header;
922228110Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
923228110Sjkim    UINT32                  GicId;
924228110Sjkim    UINT32                  Uid;
925228110Sjkim    UINT32                  Flags;
926228110Sjkim    UINT32                  ParkingVersion;
927228110Sjkim    UINT32                  PerformanceInterrupt;
928228110Sjkim    UINT64                  ParkedAddress;
929228110Sjkim    UINT64                  BaseAddress;
930228110Sjkim
931228110Sjkim} ACPI_MADT_GENERIC_INTERRUPT;
932228110Sjkim
933228110Sjkim
934228110Sjkim/* 12: Generic Distributor (ACPI 5.0) */
935228110Sjkim
936228110Sjkimtypedef struct acpi_madt_generic_distributor
937228110Sjkim{
938228110Sjkim    ACPI_SUBTABLE_HEADER    Header;
939228110Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
940228110Sjkim    UINT32                  GicId;
941228110Sjkim    UINT64                  BaseAddress;
942228110Sjkim    UINT32                  GlobalIrqBase;
943228110Sjkim    UINT32                  Reserved2;          /* Reserved - must be zero */
944228110Sjkim
945228110Sjkim} ACPI_MADT_GENERIC_DISTRIBUTOR;
946228110Sjkim
947228110Sjkim
948167802Sjkim/*
949167802Sjkim * Common flags fields for MADT subtables
950167802Sjkim */
951167802Sjkim
952228110Sjkim/* MADT Local APIC flags (LapicFlags) and GIC flags */
953167802Sjkim
954167802Sjkim#define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
955167802Sjkim
956167802Sjkim/* MADT MPS INTI flags (IntiFlags) */
957167802Sjkim
958167802Sjkim#define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
959167802Sjkim#define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
960167802Sjkim
961167802Sjkim/* Values for MPS INTI flags */
962167802Sjkim
963167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS       0
964167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
965167802Sjkim#define ACPI_MADT_POLARITY_RESERVED       2
966167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW     3
967167802Sjkim
968167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS        (0)
969167802Sjkim#define ACPI_MADT_TRIGGER_EDGE            (1<<2)
970167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
971167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
972167802Sjkim
973167802Sjkim
974167802Sjkim/*******************************************************************************
975167802Sjkim *
976197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0)
977197104Sjkim *        Version 1
978167802Sjkim *
979167802Sjkim ******************************************************************************/
980167802Sjkim
981197104Sjkimtypedef struct acpi_table_msct
982167802Sjkim{
983167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
984197104Sjkim    UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
985197104Sjkim    UINT32                  MaxProximityDomains;/* Max number of proximity domains */
986197104Sjkim    UINT32                  MaxClockDomains;    /* Max number of clock domains */
987197104Sjkim    UINT64                  MaxAddress;         /* Max physical address in system */
988167802Sjkim
989197104Sjkim} ACPI_TABLE_MSCT;
990167802Sjkim
991167802Sjkim
992197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */
993167802Sjkim
994197104Sjkimtypedef struct acpi_msct_proximity
995167802Sjkim{
996197104Sjkim    UINT8                   Revision;
997197104Sjkim    UINT8                   Length;
998197104Sjkim    UINT32                  RangeStart;         /* Start of domain range */
999197104Sjkim    UINT32                  RangeEnd;           /* End of domain range */
1000197104Sjkim    UINT32                  ProcessorCapacity;
1001197104Sjkim    UINT64                  MemoryCapacity;     /* In bytes */
1002167802Sjkim
1003197104Sjkim} ACPI_MSCT_PROXIMITY;
1004167802Sjkim
1005167802Sjkim
1006167802Sjkim/*******************************************************************************
1007167802Sjkim *
1008167802Sjkim * SBST - Smart Battery Specification Table
1009197104Sjkim *        Version 1
1010167802Sjkim *
1011167802Sjkim ******************************************************************************/
1012167802Sjkim
1013167802Sjkimtypedef struct acpi_table_sbst
1014167802Sjkim{
1015167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1016167802Sjkim    UINT32                  WarningLevel;
1017167802Sjkim    UINT32                  LowLevel;
1018167802Sjkim    UINT32                  CriticalLevel;
1019167802Sjkim
1020167802Sjkim} ACPI_TABLE_SBST;
1021167802Sjkim
1022167802Sjkim
1023167802Sjkim/*******************************************************************************
1024167802Sjkim *
1025167802Sjkim * SLIT - System Locality Distance Information Table
1026197104Sjkim *        Version 1
1027167802Sjkim *
1028167802Sjkim ******************************************************************************/
1029167802Sjkim
1030167802Sjkimtypedef struct acpi_table_slit
1031167802Sjkim{
1032167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1033167802Sjkim    UINT64                  LocalityCount;
1034167802Sjkim    UINT8                   Entry[1];           /* Real size = localities^2 */
1035167802Sjkim
1036167802Sjkim} ACPI_TABLE_SLIT;
1037167802Sjkim
1038167802Sjkim
1039167802Sjkim/*******************************************************************************
1040167802Sjkim *
1041167802Sjkim * SRAT - System Resource Affinity Table
1042197104Sjkim *        Version 3
1043167802Sjkim *
1044167802Sjkim ******************************************************************************/
1045167802Sjkim
1046167802Sjkimtypedef struct acpi_table_srat
1047167802Sjkim{
1048167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1049167802Sjkim    UINT32                  TableRevision;      /* Must be value '1' */
1050167802Sjkim    UINT64                  Reserved;           /* Reserved, must be zero */
1051167802Sjkim
1052167802Sjkim} ACPI_TABLE_SRAT;
1053167802Sjkim
1054167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */
1055167802Sjkim
1056167802Sjkimenum AcpiSratType
1057167802Sjkim{
1058193267Sjkim    ACPI_SRAT_TYPE_CPU_AFFINITY         = 0,
1059193267Sjkim    ACPI_SRAT_TYPE_MEMORY_AFFINITY      = 1,
1060193267Sjkim    ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY  = 2,
1061193267Sjkim    ACPI_SRAT_TYPE_RESERVED             = 3     /* 3 and greater are reserved */
1062167802Sjkim};
1063167802Sjkim
1064193267Sjkim/*
1065193267Sjkim * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
1066193267Sjkim */
1067167802Sjkim
1068193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */
1069193267Sjkim
1070167802Sjkimtypedef struct acpi_srat_cpu_affinity
1071167802Sjkim{
1072167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1073167802Sjkim    UINT8                   ProximityDomainLo;
1074167802Sjkim    UINT8                   ApicId;
1075167802Sjkim    UINT32                  Flags;
1076167802Sjkim    UINT8                   LocalSapicEid;
1077167802Sjkim    UINT8                   ProximityDomainHi[3];
1078167802Sjkim    UINT32                  Reserved;           /* Reserved, must be zero */
1079167802Sjkim
1080167802Sjkim} ACPI_SRAT_CPU_AFFINITY;
1081167802Sjkim
1082197104Sjkim/* Flags */
1083197104Sjkim
1084197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY  (1)         /* 00: Use affinity structure */
1085197104Sjkim
1086197104Sjkim
1087193267Sjkim/* 1: Memory Affinity */
1088167802Sjkim
1089167802Sjkimtypedef struct acpi_srat_mem_affinity
1090167802Sjkim{
1091167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1092167802Sjkim    UINT32                  ProximityDomain;
1093167802Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1094167802Sjkim    UINT64                  BaseAddress;
1095167802Sjkim    UINT64                  Length;
1096193267Sjkim    UINT32                  Reserved1;
1097167802Sjkim    UINT32                  Flags;
1098193267Sjkim    UINT64                  Reserved2;          /* Reserved, must be zero */
1099167802Sjkim
1100167802Sjkim} ACPI_SRAT_MEM_AFFINITY;
1101167802Sjkim
1102167802Sjkim/* Flags */
1103167802Sjkim
1104167802Sjkim#define ACPI_SRAT_MEM_ENABLED       (1)         /* 00: Use affinity structure */
1105167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)      /* 01: Memory region is hot pluggable */
1106167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)      /* 02: Memory region is non-volatile */
1107167802Sjkim
1108167802Sjkim
1109197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
1110197104Sjkim
1111193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity
1112167802Sjkim{
1113193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
1114193267Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1115193267Sjkim    UINT32                  ProximityDomain;
1116193267Sjkim    UINT32                  ApicId;
1117193267Sjkim    UINT32                  Flags;
1118197104Sjkim    UINT32                  ClockDomain;
1119197104Sjkim    UINT32                  Reserved2;
1120167802Sjkim
1121193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY;
1122167802Sjkim
1123193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
1124193267Sjkim
1125193267Sjkim#define ACPI_SRAT_CPU_ENABLED       (1)         /* 00: Use affinity structure */
1126193267Sjkim
1127193267Sjkim
1128167802Sjkim/* Reset to default packing */
1129167802Sjkim
113069450Smsmith#pragma pack()
113169450Smsmith
113269450Smsmith#endif /* __ACTBL1_H__ */
1133