169450Smsmith/******************************************************************************
269450Smsmith *
3167802Sjkim * Name: actbl1.h - Additional ACPI table definitions
469450Smsmith *
569450Smsmith *****************************************************************************/
669450Smsmith
7217365Sjkim/*
8217365Sjkim * Copyright (C) 2000 - 2011, 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 */
133193267Sjkim    UINT64                  Address;            /* Physical addresss 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{
255193267Sjkim    ACPI_EINJ_BEGIN_OPERATION       = 0,
256193267Sjkim    ACPI_EINJ_GET_TRIGGER_TABLE     = 1,
257193267Sjkim    ACPI_EINJ_SET_ERROR_TYPE        = 2,
258193267Sjkim    ACPI_EINJ_GET_ERROR_TYPE        = 3,
259193267Sjkim    ACPI_EINJ_END_OPERATION         = 4,
260193267Sjkim    ACPI_EINJ_EXECUTE_OPERATION     = 5,
261193267Sjkim    ACPI_EINJ_CHECK_BUSY_STATUS     = 6,
262193267Sjkim    ACPI_EINJ_GET_COMMAND_STATUS    = 7,
263193267Sjkim    ACPI_EINJ_ACTION_RESERVED       = 8,     /* 8 and greater are reserved */
264193267Sjkim    ACPI_EINJ_TRIGGER_ERROR         = 0xFF   /* Except for this value */
265193267Sjkim};
266193267Sjkim
267193267Sjkim/* Values for Instruction field above */
268193267Sjkim
269193267Sjkimenum AcpiEinjInstructions
270193267Sjkim{
271193267Sjkim    ACPI_EINJ_READ_REGISTER         = 0,
272193267Sjkim    ACPI_EINJ_READ_REGISTER_VALUE   = 1,
273193267Sjkim    ACPI_EINJ_WRITE_REGISTER        = 2,
274193267Sjkim    ACPI_EINJ_WRITE_REGISTER_VALUE  = 3,
275193267Sjkim    ACPI_EINJ_NOOP                  = 4,
276193267Sjkim    ACPI_EINJ_INSTRUCTION_RESERVED  = 5     /* 5 and greater are reserved */
277193267Sjkim};
278193267Sjkim
279197104Sjkim
280193267Sjkim/* EINJ Trigger Error Action Table */
281193267Sjkim
282193267Sjkimtypedef struct acpi_einj_trigger
283193267Sjkim{
284193267Sjkim    UINT32                  HeaderSize;
285193267Sjkim    UINT32                  Revision;
286193267Sjkim    UINT32                  TableSize;
287193267Sjkim    UINT32                  EntryCount;
288193267Sjkim
289193267Sjkim} ACPI_EINJ_TRIGGER;
290193267Sjkim
291197104Sjkim/* Command status return values */
292193267Sjkim
293197104Sjkimenum AcpiEinjCommandStatus
294197104Sjkim{
295197104Sjkim    ACPI_EINJ_SUCCESS               = 0,
296197104Sjkim    ACPI_EINJ_FAILURE               = 1,
297197104Sjkim    ACPI_EINJ_INVALID_ACCESS        = 2,
298197104Sjkim    ACPI_EINJ_STATUS_RESERVED       = 3     /* 3 and greater are reserved */
299197104Sjkim};
300197104Sjkim
301197104Sjkim
302197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
303197104Sjkim
304197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
305197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
306197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
307197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
308197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
309197104Sjkim#define ACPI_EINJ_MEMORY_FATAL              (1<<5)
310197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
311197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
312197104Sjkim#define ACPI_EINJ_PCIX_FATAL                (1<<8)
313197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
314197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
315197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
316197104Sjkim
317197104Sjkim
318193267Sjkim/*******************************************************************************
319193267Sjkim *
320197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0)
321197104Sjkim *        Version 1
322193267Sjkim *
323193267Sjkim ******************************************************************************/
324193267Sjkim
325193267Sjkimtypedef struct acpi_table_erst
326193267Sjkim{
327193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
328193267Sjkim    UINT32                  HeaderLength;
329193267Sjkim    UINT32                  Reserved;
330193267Sjkim    UINT32                  Entries;
331193267Sjkim
332193267Sjkim} ACPI_TABLE_ERST;
333193267Sjkim
334197104Sjkim
335193267Sjkim/* ERST Serialization Entries (actions) */
336193267Sjkim
337193267Sjkimtypedef struct acpi_erst_entry
338193267Sjkim{
339193267Sjkim    ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
340193267Sjkim
341193267Sjkim} ACPI_ERST_ENTRY;
342193267Sjkim
343197104Sjkim/* Masks for Flags field above */
344197104Sjkim
345197104Sjkim#define ACPI_ERST_PRESERVE          (1)
346197104Sjkim
347193267Sjkim/* Values for Action field above */
348193267Sjkim
349193267Sjkimenum AcpiErstActions
350193267Sjkim{
351197104Sjkim    ACPI_ERST_BEGIN_WRITE           = 0,
352197104Sjkim    ACPI_ERST_BEGIN_READ            = 1,
353197104Sjkim    ACPI_ERST_BEGIN_CLEAR           = 2,
354197104Sjkim    ACPI_ERST_END                   = 3,
355193267Sjkim    ACPI_ERST_SET_RECORD_OFFSET     = 4,
356193267Sjkim    ACPI_ERST_EXECUTE_OPERATION     = 5,
357193267Sjkim    ACPI_ERST_CHECK_BUSY_STATUS     = 6,
358193267Sjkim    ACPI_ERST_GET_COMMAND_STATUS    = 7,
359197104Sjkim    ACPI_ERST_GET_RECORD_ID         = 8,
360197104Sjkim    ACPI_ERST_SET_RECORD_ID         = 9,
361193267Sjkim    ACPI_ERST_GET_RECORD_COUNT      = 10,
362193267Sjkim    ACPI_ERST_BEGIN_DUMMY_WRIITE    = 11,
363193267Sjkim    ACPI_ERST_NOT_USED              = 12,
364193267Sjkim    ACPI_ERST_GET_ERROR_RANGE       = 13,
365193267Sjkim    ACPI_ERST_GET_ERROR_LENGTH      = 14,
366193267Sjkim    ACPI_ERST_GET_ERROR_ATTRIBUTES  = 15,
367193267Sjkim    ACPI_ERST_ACTION_RESERVED       = 16    /* 16 and greater are reserved */
368193267Sjkim};
369193267Sjkim
370193267Sjkim/* Values for Instruction field above */
371193267Sjkim
372193267Sjkimenum AcpiErstInstructions
373193267Sjkim{
374193267Sjkim    ACPI_ERST_READ_REGISTER         = 0,
375193267Sjkim    ACPI_ERST_READ_REGISTER_VALUE   = 1,
376193267Sjkim    ACPI_ERST_WRITE_REGISTER        = 2,
377193267Sjkim    ACPI_ERST_WRITE_REGISTER_VALUE  = 3,
378193267Sjkim    ACPI_ERST_NOOP                  = 4,
379193267Sjkim    ACPI_ERST_LOAD_VAR1             = 5,
380193267Sjkim    ACPI_ERST_LOAD_VAR2             = 6,
381193267Sjkim    ACPI_ERST_STORE_VAR1            = 7,
382193267Sjkim    ACPI_ERST_ADD                   = 8,
383193267Sjkim    ACPI_ERST_SUBTRACT              = 9,
384193267Sjkim    ACPI_ERST_ADD_VALUE             = 10,
385193267Sjkim    ACPI_ERST_SUBTRACT_VALUE        = 11,
386193267Sjkim    ACPI_ERST_STALL                 = 12,
387193267Sjkim    ACPI_ERST_STALL_WHILE_TRUE      = 13,
388193267Sjkim    ACPI_ERST_SKIP_NEXT_IF_TRUE     = 14,
389193267Sjkim    ACPI_ERST_GOTO                  = 15,
390193267Sjkim    ACPI_ERST_SET_SRC_ADDRESS_BASE  = 16,
391193267Sjkim    ACPI_ERST_SET_DST_ADDRESS_BASE  = 17,
392193267Sjkim    ACPI_ERST_MOVE_DATA             = 18,
393193267Sjkim    ACPI_ERST_INSTRUCTION_RESERVED  = 19    /* 19 and greater are reserved */
394193267Sjkim};
395193267Sjkim
396197104Sjkim/* Command status return values */
397193267Sjkim
398197104Sjkimenum AcpiErstCommandStatus
399197104Sjkim{
400197104Sjkim    ACPI_ERST_SUCESS                = 0,
401197104Sjkim    ACPI_ERST_NO_SPACE              = 1,
402197104Sjkim    ACPI_ERST_NOT_AVAILABLE         = 2,
403197104Sjkim    ACPI_ERST_FAILURE               = 3,
404197104Sjkim    ACPI_ERST_RECORD_EMPTY          = 4,
405197104Sjkim    ACPI_ERST_NOT_FOUND             = 5,
406197104Sjkim    ACPI_ERST_STATUS_RESERVED       = 6     /* 6 and greater are reserved */
407197104Sjkim};
408197104Sjkim
409197104Sjkim
410197104Sjkim/* Error Record Serialization Information */
411197104Sjkim
412197104Sjkimtypedef struct acpi_erst_info
413197104Sjkim{
414197104Sjkim    UINT16                  Signature;          /* Should be "ER" */
415197104Sjkim    UINT8                   Data[48];
416197104Sjkim
417197104Sjkim} ACPI_ERST_INFO;
418197104Sjkim
419197104Sjkim
420193267Sjkim/*******************************************************************************
421193267Sjkim *
422197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0)
423197104Sjkim *        Version 1
424193267Sjkim *
425193267Sjkim ******************************************************************************/
426193267Sjkim
427193267Sjkimtypedef struct acpi_table_hest
428193267Sjkim{
429193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
430193267Sjkim    UINT32                  ErrorSourceCount;
431193267Sjkim
432193267Sjkim} ACPI_TABLE_HEST;
433193267Sjkim
434193267Sjkim
435193267Sjkim/* HEST subtable header */
436193267Sjkim
437193267Sjkimtypedef struct acpi_hest_header
438193267Sjkim{
439193267Sjkim    UINT16                  Type;
440197104Sjkim    UINT16                  SourceId;
441193267Sjkim
442193267Sjkim} ACPI_HEST_HEADER;
443193267Sjkim
444193267Sjkim
445193267Sjkim/* Values for Type field above for subtables */
446193267Sjkim
447193267Sjkimenum AcpiHestTypes
448193267Sjkim{
449197104Sjkim    ACPI_HEST_TYPE_IA32_CHECK           = 0,
450197104Sjkim    ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
451197104Sjkim    ACPI_HEST_TYPE_IA32_NMI             = 2,
452197104Sjkim    ACPI_HEST_TYPE_NOT_USED3            = 3,
453197104Sjkim    ACPI_HEST_TYPE_NOT_USED4            = 4,
454197104Sjkim    ACPI_HEST_TYPE_NOT_USED5            = 5,
455197104Sjkim    ACPI_HEST_TYPE_AER_ROOT_PORT        = 6,
456197104Sjkim    ACPI_HEST_TYPE_AER_ENDPOINT         = 7,
457197104Sjkim    ACPI_HEST_TYPE_AER_BRIDGE           = 8,
458197104Sjkim    ACPI_HEST_TYPE_GENERIC_ERROR        = 9,
459197104Sjkim    ACPI_HEST_TYPE_RESERVED             = 10    /* 10 and greater are reserved */
460193267Sjkim};
461193267Sjkim
462193267Sjkim
463193267Sjkim/*
464197104Sjkim * HEST substructures contained in subtables
465193267Sjkim */
466193267Sjkim
467197104Sjkim/*
468197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
469197104Sjkim * ACPI_HEST_IA_CORRECTED structures.
470197104Sjkim */
471197104Sjkimtypedef struct acpi_hest_ia_error_bank
472193267Sjkim{
473193267Sjkim    UINT8                   BankNumber;
474193267Sjkim    UINT8                   ClearStatusOnInit;
475193267Sjkim    UINT8                   StatusFormat;
476197104Sjkim    UINT8                   Reserved;
477193267Sjkim    UINT32                  ControlRegister;
478197104Sjkim    UINT64                  ControlData;
479193267Sjkim    UINT32                  StatusRegister;
480193267Sjkim    UINT32                  AddressRegister;
481193267Sjkim    UINT32                  MiscRegister;
482193267Sjkim
483197104Sjkim} ACPI_HEST_IA_ERROR_BANK;
484193267Sjkim
485193267Sjkim
486197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
487193267Sjkim
488193267Sjkimtypedef struct acpi_hest_aer_common
489193267Sjkim{
490197104Sjkim    UINT16                  Reserved1;
491193267Sjkim    UINT8                   Flags;
492193267Sjkim    UINT8                   Enabled;
493197104Sjkim    UINT32                  RecordsToPreallocate;
494193267Sjkim    UINT32                  MaxSectionsPerRecord;
495193267Sjkim    UINT32                  Bus;
496193267Sjkim    UINT16                  Device;
497193267Sjkim    UINT16                  Function;
498193267Sjkim    UINT16                  DeviceControl;
499197104Sjkim    UINT16                  Reserved2;
500197104Sjkim    UINT32                  UncorrectableMask;
501197104Sjkim    UINT32                  UncorrectableSeverity;
502197104Sjkim    UINT32                  CorrectableMask;
503197104Sjkim    UINT32                  AdvancedCapabilities;
504193267Sjkim
505193267Sjkim} ACPI_HEST_AER_COMMON;
506193267Sjkim
507197104Sjkim/* Masks for HEST Flags fields */
508193267Sjkim
509197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST        (1)
510197104Sjkim#define ACPI_HEST_GLOBAL                (1<<1)
511197104Sjkim
512197104Sjkim
513193267Sjkim/* Hardware Error Notification */
514193267Sjkim
515193267Sjkimtypedef struct acpi_hest_notify
516193267Sjkim{
517193267Sjkim    UINT8                   Type;
518193267Sjkim    UINT8                   Length;
519193267Sjkim    UINT16                  ConfigWriteEnable;
520193267Sjkim    UINT32                  PollInterval;
521193267Sjkim    UINT32                  Vector;
522193267Sjkim    UINT32                  PollingThresholdValue;
523193267Sjkim    UINT32                  PollingThresholdWindow;
524193267Sjkim    UINT32                  ErrorThresholdValue;
525193267Sjkim    UINT32                  ErrorThresholdWindow;
526193267Sjkim
527193267Sjkim} ACPI_HEST_NOTIFY;
528193267Sjkim
529193267Sjkim/* Values for Notify Type field above */
530193267Sjkim
531193267Sjkimenum AcpiHestNotifyTypes
532193267Sjkim{
533193267Sjkim    ACPI_HEST_NOTIFY_POLLED     = 0,
534193267Sjkim    ACPI_HEST_NOTIFY_EXTERNAL   = 1,
535193267Sjkim    ACPI_HEST_NOTIFY_LOCAL      = 2,
536193267Sjkim    ACPI_HEST_NOTIFY_SCI        = 3,
537193267Sjkim    ACPI_HEST_NOTIFY_NMI        = 4,
538193267Sjkim    ACPI_HEST_NOTIFY_RESERVED   = 5     /* 5 and greater are reserved */
539193267Sjkim};
540193267Sjkim
541197104Sjkim/* Values for ConfigWriteEnable bitfield above */
542193267Sjkim
543197104Sjkim#define ACPI_HEST_TYPE                  (1)
544197104Sjkim#define ACPI_HEST_POLL_INTERVAL         (1<<1)
545197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
546197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
547197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
548197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
549197104Sjkim
550197104Sjkim
551193267Sjkim/*
552193267Sjkim * HEST subtables
553193267Sjkim */
554193267Sjkim
555197104Sjkim/* 0: IA32 Machine Check Exception */
556193267Sjkim
557197104Sjkimtypedef struct acpi_hest_ia_machine_check
558193267Sjkim{
559193267Sjkim    ACPI_HEST_HEADER        Header;
560197104Sjkim    UINT16                  Reserved1;
561193267Sjkim    UINT8                   Flags;
562197104Sjkim    UINT8                   Enabled;
563197104Sjkim    UINT32                  RecordsToPreallocate;
564193267Sjkim    UINT32                  MaxSectionsPerRecord;
565193267Sjkim    UINT64                  GlobalCapabilityData;
566193267Sjkim    UINT64                  GlobalControlData;
567193267Sjkim    UINT8                   NumHardwareBanks;
568197104Sjkim    UINT8                   Reserved3[7];
569193267Sjkim
570197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK;
571193267Sjkim
572193267Sjkim
573197104Sjkim/* 1: IA32 Corrected Machine Check */
574193267Sjkim
575197104Sjkimtypedef struct acpi_hest_ia_corrected
576193267Sjkim{
577193267Sjkim    ACPI_HEST_HEADER        Header;
578197104Sjkim    UINT16                  Reserved1;
579193267Sjkim    UINT8                   Flags;
580193267Sjkim    UINT8                   Enabled;
581197104Sjkim    UINT32                  RecordsToPreallocate;
582193267Sjkim    UINT32                  MaxSectionsPerRecord;
583193267Sjkim    ACPI_HEST_NOTIFY        Notify;
584193267Sjkim    UINT8                   NumHardwareBanks;
585197104Sjkim    UINT8                   Reserved2[3];
586193267Sjkim
587197104Sjkim} ACPI_HEST_IA_CORRECTED;
588193267Sjkim
589193267Sjkim
590197104Sjkim/* 2: IA32 Non-Maskable Interrupt */
591193267Sjkim
592197104Sjkimtypedef struct acpi_hest_ia_nmi
593193267Sjkim{
594193267Sjkim    ACPI_HEST_HEADER        Header;
595193267Sjkim    UINT32                  Reserved;
596197104Sjkim    UINT32                  RecordsToPreallocate;
597193267Sjkim    UINT32                  MaxSectionsPerRecord;
598193267Sjkim    UINT32                  MaxRawDataLength;
599193267Sjkim
600197104Sjkim} ACPI_HEST_IA_NMI;
601193267Sjkim
602193267Sjkim
603197104Sjkim/* 3,4,5: Not used */
604193267Sjkim
605193267Sjkim/* 6: PCI Express Root Port AER */
606193267Sjkim
607193267Sjkimtypedef struct acpi_hest_aer_root
608193267Sjkim{
609193267Sjkim    ACPI_HEST_HEADER        Header;
610193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
611193267Sjkim    UINT32                  RootErrorCommand;
612193267Sjkim
613193267Sjkim} ACPI_HEST_AER_ROOT;
614193267Sjkim
615193267Sjkim
616193267Sjkim/* 7: PCI Express AER (AER Endpoint) */
617193267Sjkim
618193267Sjkimtypedef struct acpi_hest_aer
619193267Sjkim{
620193267Sjkim    ACPI_HEST_HEADER        Header;
621193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
622193267Sjkim
623193267Sjkim} ACPI_HEST_AER;
624193267Sjkim
625193267Sjkim
626193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */
627193267Sjkim
628193267Sjkimtypedef struct acpi_hest_aer_bridge
629193267Sjkim{
630193267Sjkim    ACPI_HEST_HEADER        Header;
631193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
632197104Sjkim    UINT32                  UncorrectableMask2;
633197104Sjkim    UINT32                  UncorrectableSeverity2;
634197104Sjkim    UINT32                  AdvancedCapabilities2;
635193267Sjkim
636193267Sjkim} ACPI_HEST_AER_BRIDGE;
637193267Sjkim
638193267Sjkim
639193267Sjkim/* 9: Generic Hardware Error Source */
640193267Sjkim
641193267Sjkimtypedef struct acpi_hest_generic
642193267Sjkim{
643193267Sjkim    ACPI_HEST_HEADER        Header;
644193267Sjkim    UINT16                  RelatedSourceId;
645197104Sjkim    UINT8                   Reserved;
646193267Sjkim    UINT8                   Enabled;
647197104Sjkim    UINT32                  RecordsToPreallocate;
648193267Sjkim    UINT32                  MaxSectionsPerRecord;
649193267Sjkim    UINT32                  MaxRawDataLength;
650193267Sjkim    ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
651193267Sjkim    ACPI_HEST_NOTIFY        Notify;
652197104Sjkim    UINT32                  ErrorBlockLength;
653193267Sjkim
654193267Sjkim} ACPI_HEST_GENERIC;
655193267Sjkim
656193267Sjkim
657197104Sjkim/* Generic Error Status block */
658167802Sjkim
659197104Sjkimtypedef struct acpi_hest_generic_status
660167802Sjkim{
661197104Sjkim    UINT32                  BlockStatus;
662197104Sjkim    UINT32                  RawDataOffset;
663197104Sjkim    UINT32                  RawDataLength;
664197104Sjkim    UINT32                  DataLength;
665197104Sjkim    UINT32                  ErrorSeverity;
666167802Sjkim
667197104Sjkim} ACPI_HEST_GENERIC_STATUS;
668167802Sjkim
669197104Sjkim/* Values for BlockStatus flags above */
670167802Sjkim
671197104Sjkim#define ACPI_HEST_UNCORRECTABLE             (1)
672197104Sjkim#define ACPI_HEST_CORRECTABLE               (1<<1)
673197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
674197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
675197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
676167802Sjkim
677167802Sjkim
678197104Sjkim/* Generic Error Data entry */
679167802Sjkim
680197104Sjkimtypedef struct acpi_hest_generic_data
681193267Sjkim{
682197104Sjkim    UINT8                   SectionType[16];
683197104Sjkim    UINT32                  ErrorSeverity;
684197104Sjkim    UINT16                  Revision;
685197104Sjkim    UINT8                   ValidationBits;
686193267Sjkim    UINT8                   Flags;
687197104Sjkim    UINT32                  ErrorDataLength;
688197104Sjkim    UINT8                   FruId[16];
689197104Sjkim    UINT8                   FruText[20];
690193267Sjkim
691197104Sjkim} ACPI_HEST_GENERIC_DATA;
692193267Sjkim
693193267Sjkim
694193267Sjkim/*******************************************************************************
695193267Sjkim *
696167802Sjkim * MADT - Multiple APIC Description Table
697197104Sjkim *        Version 3
698167802Sjkim *
699167802Sjkim ******************************************************************************/
700167802Sjkim
701167802Sjkimtypedef struct acpi_table_madt
702167802Sjkim{
703167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
704167802Sjkim    UINT32                  Address;            /* Physical address of local APIC */
705167802Sjkim    UINT32                  Flags;
706167802Sjkim
707167802Sjkim} ACPI_TABLE_MADT;
708167802Sjkim
709197104Sjkim/* Masks for Flags field above */
710167802Sjkim
711197104Sjkim#define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
712167802Sjkim
713167802Sjkim/* Values for PCATCompat flag */
714167802Sjkim
715167802Sjkim#define ACPI_MADT_DUAL_PIC          0
716167802Sjkim#define ACPI_MADT_MULTIPLE_APIC     1
717167802Sjkim
718167802Sjkim
719197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
720167802Sjkim
721167802Sjkimenum AcpiMadtType
722167802Sjkim{
723167802Sjkim    ACPI_MADT_TYPE_LOCAL_APIC           = 0,
724167802Sjkim    ACPI_MADT_TYPE_IO_APIC              = 1,
725167802Sjkim    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE   = 2,
726167802Sjkim    ACPI_MADT_TYPE_NMI_SOURCE           = 3,
727167802Sjkim    ACPI_MADT_TYPE_LOCAL_APIC_NMI       = 4,
728167802Sjkim    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE  = 5,
729167802Sjkim    ACPI_MADT_TYPE_IO_SAPIC             = 6,
730167802Sjkim    ACPI_MADT_TYPE_LOCAL_SAPIC          = 7,
731167802Sjkim    ACPI_MADT_TYPE_INTERRUPT_SOURCE     = 8,
732193267Sjkim    ACPI_MADT_TYPE_LOCAL_X2APIC         = 9,
733193267Sjkim    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI     = 10,
734193267Sjkim    ACPI_MADT_TYPE_RESERVED             = 11    /* 11 and greater are reserved */
735167802Sjkim};
736167802Sjkim
737167802Sjkim
738167802Sjkim/*
739167802Sjkim * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
740167802Sjkim */
741167802Sjkim
742167802Sjkim/* 0: Processor Local APIC */
743167802Sjkim
744167802Sjkimtypedef struct acpi_madt_local_apic
745167802Sjkim{
746167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
747167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
748167802Sjkim    UINT8                   Id;                 /* Processor's local APIC id */
749167802Sjkim    UINT32                  LapicFlags;
750167802Sjkim
751167802Sjkim} ACPI_MADT_LOCAL_APIC;
752167802Sjkim
753197104Sjkim
754167802Sjkim/* 1: IO APIC */
755167802Sjkim
756167802Sjkimtypedef struct acpi_madt_io_apic
757167802Sjkim{
758167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
759167802Sjkim    UINT8                   Id;                 /* I/O APIC ID */
760167802Sjkim    UINT8                   Reserved;           /* Reserved - must be zero */
761167802Sjkim    UINT32                  Address;            /* APIC physical address */
762167802Sjkim    UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
763167802Sjkim
764167802Sjkim} ACPI_MADT_IO_APIC;
765167802Sjkim
766197104Sjkim
767167802Sjkim/* 2: Interrupt Override */
768167802Sjkim
769167802Sjkimtypedef struct acpi_madt_interrupt_override
770167802Sjkim{
771167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
772167802Sjkim    UINT8                   Bus;                /* 0 - ISA */
773167802Sjkim    UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
774167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
775167802Sjkim    UINT16                  IntiFlags;
776167802Sjkim
777167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE;
778167802Sjkim
779197104Sjkim
780167802Sjkim/* 3: NMI Source */
781167802Sjkim
782167802Sjkimtypedef struct acpi_madt_nmi_source
783167802Sjkim{
784167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
785167802Sjkim    UINT16                  IntiFlags;
786167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
787167802Sjkim
788167802Sjkim} ACPI_MADT_NMI_SOURCE;
789167802Sjkim
790197104Sjkim
791167802Sjkim/* 4: Local APIC NMI */
792167802Sjkim
793167802Sjkimtypedef struct acpi_madt_local_apic_nmi
794167802Sjkim{
795167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
796167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
797167802Sjkim    UINT16                  IntiFlags;
798167802Sjkim    UINT8                   Lint;               /* LINTn to which NMI is connected */
799167802Sjkim
800167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI;
801167802Sjkim
802197104Sjkim
803167802Sjkim/* 5: Address Override */
804167802Sjkim
805167802Sjkimtypedef struct acpi_madt_local_apic_override
806167802Sjkim{
807167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
808167802Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
809167802Sjkim    UINT64                  Address;            /* APIC physical address */
810167802Sjkim
811167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE;
812167802Sjkim
813197104Sjkim
814167802Sjkim/* 6: I/O Sapic */
815167802Sjkim
816167802Sjkimtypedef struct acpi_madt_io_sapic
817167802Sjkim{
818167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
819167802Sjkim    UINT8                   Id;                 /* I/O SAPIC ID */
820167802Sjkim    UINT8                   Reserved;           /* Reserved, must be zero */
821167802Sjkim    UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
822167802Sjkim    UINT64                  Address;            /* SAPIC physical address */
823167802Sjkim
824167802Sjkim} ACPI_MADT_IO_SAPIC;
825167802Sjkim
826197104Sjkim
827167802Sjkim/* 7: Local Sapic */
828167802Sjkim
829167802Sjkimtypedef struct acpi_madt_local_sapic
830167802Sjkim{
831167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
832167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
833167802Sjkim    UINT8                   Id;                 /* SAPIC ID */
834167802Sjkim    UINT8                   Eid;                /* SAPIC EID */
835167802Sjkim    UINT8                   Reserved[3];        /* Reserved, must be zero */
836167802Sjkim    UINT32                  LapicFlags;
837167802Sjkim    UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
838167802Sjkim    char                    UidString[1];       /* String UID  - ACPI 3.0 */
839167802Sjkim
840167802Sjkim} ACPI_MADT_LOCAL_SAPIC;
841167802Sjkim
842197104Sjkim
843167802Sjkim/* 8: Platform Interrupt Source */
844167802Sjkim
845167802Sjkimtypedef struct acpi_madt_interrupt_source
846167802Sjkim{
847167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
848167802Sjkim    UINT16                  IntiFlags;
849167802Sjkim    UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
850167802Sjkim    UINT8                   Id;                 /* Processor ID */
851167802Sjkim    UINT8                   Eid;                /* Processor EID */
852167802Sjkim    UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
853167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
854167802Sjkim    UINT32                  Flags;              /* Interrupt Source Flags */
855167802Sjkim
856167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE;
857167802Sjkim
858197104Sjkim/* Masks for Flags field above */
859167802Sjkim
860167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE     (1)
861167802Sjkim
862167802Sjkim
863197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */
864197104Sjkim
865193267Sjkimtypedef struct acpi_madt_local_x2apic
866193267Sjkim{
867193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
868193267Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
869193267Sjkim    UINT32                  LocalApicId;        /* Processor x2APIC ID  */
870193267Sjkim    UINT32                  LapicFlags;
871193267Sjkim    UINT32                  Uid;                /* ACPI processor UID */
872193267Sjkim
873193267Sjkim} ACPI_MADT_LOCAL_X2APIC;
874193267Sjkim
875193267Sjkim
876197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */
877197104Sjkim
878193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi
879193267Sjkim{
880193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
881193267Sjkim    UINT16                  IntiFlags;
882193267Sjkim    UINT32                  Uid;                /* ACPI processor UID */
883193267Sjkim    UINT8                   Lint;               /* LINTn to which NMI is connected */
884193267Sjkim    UINT8                   Reserved[3];        /* Reserved - must be zero */
885193267Sjkim
886193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI;
887193267Sjkim
888193267Sjkim
889167802Sjkim/*
890167802Sjkim * Common flags fields for MADT subtables
891167802Sjkim */
892167802Sjkim
893167802Sjkim/* MADT Local APIC flags (LapicFlags) */
894167802Sjkim
895167802Sjkim#define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
896167802Sjkim
897167802Sjkim/* MADT MPS INTI flags (IntiFlags) */
898167802Sjkim
899167802Sjkim#define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
900167802Sjkim#define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
901167802Sjkim
902167802Sjkim/* Values for MPS INTI flags */
903167802Sjkim
904167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS       0
905167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
906167802Sjkim#define ACPI_MADT_POLARITY_RESERVED       2
907167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW     3
908167802Sjkim
909167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS        (0)
910167802Sjkim#define ACPI_MADT_TRIGGER_EDGE            (1<<2)
911167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
912167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
913167802Sjkim
914167802Sjkim
915167802Sjkim/*******************************************************************************
916167802Sjkim *
917197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0)
918197104Sjkim *        Version 1
919167802Sjkim *
920167802Sjkim ******************************************************************************/
921167802Sjkim
922197104Sjkimtypedef struct acpi_table_msct
923167802Sjkim{
924167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
925197104Sjkim    UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
926197104Sjkim    UINT32                  MaxProximityDomains;/* Max number of proximity domains */
927197104Sjkim    UINT32                  MaxClockDomains;    /* Max number of clock domains */
928197104Sjkim    UINT64                  MaxAddress;         /* Max physical address in system */
929167802Sjkim
930197104Sjkim} ACPI_TABLE_MSCT;
931167802Sjkim
932167802Sjkim
933197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */
934167802Sjkim
935197104Sjkimtypedef struct acpi_msct_proximity
936167802Sjkim{
937197104Sjkim    UINT8                   Revision;
938197104Sjkim    UINT8                   Length;
939197104Sjkim    UINT32                  RangeStart;         /* Start of domain range */
940197104Sjkim    UINT32                  RangeEnd;           /* End of domain range */
941197104Sjkim    UINT32                  ProcessorCapacity;
942197104Sjkim    UINT64                  MemoryCapacity;     /* In bytes */
943167802Sjkim
944197104Sjkim} ACPI_MSCT_PROXIMITY;
945167802Sjkim
946167802Sjkim
947167802Sjkim/*******************************************************************************
948167802Sjkim *
949167802Sjkim * SBST - Smart Battery Specification Table
950197104Sjkim *        Version 1
951167802Sjkim *
952167802Sjkim ******************************************************************************/
953167802Sjkim
954167802Sjkimtypedef struct acpi_table_sbst
955167802Sjkim{
956167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
957167802Sjkim    UINT32                  WarningLevel;
958167802Sjkim    UINT32                  LowLevel;
959167802Sjkim    UINT32                  CriticalLevel;
960167802Sjkim
961167802Sjkim} ACPI_TABLE_SBST;
962167802Sjkim
963167802Sjkim
964167802Sjkim/*******************************************************************************
965167802Sjkim *
966167802Sjkim * SLIT - System Locality Distance Information Table
967197104Sjkim *        Version 1
968167802Sjkim *
969167802Sjkim ******************************************************************************/
970167802Sjkim
971167802Sjkimtypedef struct acpi_table_slit
972167802Sjkim{
973167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
974167802Sjkim    UINT64                  LocalityCount;
975167802Sjkim    UINT8                   Entry[1];           /* Real size = localities^2 */
976167802Sjkim
977167802Sjkim} ACPI_TABLE_SLIT;
978167802Sjkim
979167802Sjkim
980167802Sjkim/*******************************************************************************
981167802Sjkim *
982167802Sjkim * SRAT - System Resource Affinity Table
983197104Sjkim *        Version 3
984167802Sjkim *
985167802Sjkim ******************************************************************************/
986167802Sjkim
987167802Sjkimtypedef struct acpi_table_srat
988167802Sjkim{
989167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
990167802Sjkim    UINT32                  TableRevision;      /* Must be value '1' */
991167802Sjkim    UINT64                  Reserved;           /* Reserved, must be zero */
992167802Sjkim
993167802Sjkim} ACPI_TABLE_SRAT;
994167802Sjkim
995167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */
996167802Sjkim
997167802Sjkimenum AcpiSratType
998167802Sjkim{
999193267Sjkim    ACPI_SRAT_TYPE_CPU_AFFINITY         = 0,
1000193267Sjkim    ACPI_SRAT_TYPE_MEMORY_AFFINITY      = 1,
1001193267Sjkim    ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY  = 2,
1002193267Sjkim    ACPI_SRAT_TYPE_RESERVED             = 3     /* 3 and greater are reserved */
1003167802Sjkim};
1004167802Sjkim
1005193267Sjkim/*
1006193267Sjkim * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
1007193267Sjkim */
1008167802Sjkim
1009193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */
1010193267Sjkim
1011167802Sjkimtypedef struct acpi_srat_cpu_affinity
1012167802Sjkim{
1013167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1014167802Sjkim    UINT8                   ProximityDomainLo;
1015167802Sjkim    UINT8                   ApicId;
1016167802Sjkim    UINT32                  Flags;
1017167802Sjkim    UINT8                   LocalSapicEid;
1018167802Sjkim    UINT8                   ProximityDomainHi[3];
1019167802Sjkim    UINT32                  Reserved;           /* Reserved, must be zero */
1020167802Sjkim
1021167802Sjkim} ACPI_SRAT_CPU_AFFINITY;
1022167802Sjkim
1023197104Sjkim/* Flags */
1024197104Sjkim
1025197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY  (1)         /* 00: Use affinity structure */
1026197104Sjkim
1027197104Sjkim
1028193267Sjkim/* 1: Memory Affinity */
1029167802Sjkim
1030167802Sjkimtypedef struct acpi_srat_mem_affinity
1031167802Sjkim{
1032167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1033167802Sjkim    UINT32                  ProximityDomain;
1034167802Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1035167802Sjkim    UINT64                  BaseAddress;
1036167802Sjkim    UINT64                  Length;
1037193267Sjkim    UINT32                  Reserved1;
1038167802Sjkim    UINT32                  Flags;
1039193267Sjkim    UINT64                  Reserved2;          /* Reserved, must be zero */
1040167802Sjkim
1041167802Sjkim} ACPI_SRAT_MEM_AFFINITY;
1042167802Sjkim
1043167802Sjkim/* Flags */
1044167802Sjkim
1045167802Sjkim#define ACPI_SRAT_MEM_ENABLED       (1)         /* 00: Use affinity structure */
1046167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)      /* 01: Memory region is hot pluggable */
1047167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)      /* 02: Memory region is non-volatile */
1048167802Sjkim
1049167802Sjkim
1050197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
1051197104Sjkim
1052193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity
1053167802Sjkim{
1054193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
1055193267Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1056193267Sjkim    UINT32                  ProximityDomain;
1057193267Sjkim    UINT32                  ApicId;
1058193267Sjkim    UINT32                  Flags;
1059197104Sjkim    UINT32                  ClockDomain;
1060197104Sjkim    UINT32                  Reserved2;
1061167802Sjkim
1062193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY;
1063167802Sjkim
1064193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
1065193267Sjkim
1066193267Sjkim#define ACPI_SRAT_CPU_ENABLED       (1)         /* 00: Use affinity structure */
1067193267Sjkim
1068193267Sjkim
1069167802Sjkim/* Reset to default packing */
1070167802Sjkim
107169450Smsmith#pragma pack()
107269450Smsmith
107369450Smsmith#endif /* __ACTBL1_H__ */
1074