actbl1.h revision 316303
169450Smsmith/******************************************************************************
269450Smsmith *
3167802Sjkim * Name: actbl1.h - Additional ACPI table definitions
469450Smsmith *
569450Smsmith *****************************************************************************/
669450Smsmith
7316303Sjkim/******************************************************************************
8316303Sjkim *
9316303Sjkim * 1. Copyright Notice
10316303Sjkim *
11316303Sjkim * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
1270243Smsmith * All rights reserved.
1369450Smsmith *
14316303Sjkim * 2. License
15316303Sjkim *
16316303Sjkim * 2.1. This is your license from Intel Corp. under its intellectual property
17316303Sjkim * rights. You may have additional license terms from the party that provided
18316303Sjkim * you this software, covering your right to use that party's intellectual
19316303Sjkim * property rights.
20316303Sjkim *
21316303Sjkim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22316303Sjkim * copy of the source code appearing in this file ("Covered Code") an
23316303Sjkim * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24316303Sjkim * base code distributed originally by Intel ("Original Intel Code") to copy,
25316303Sjkim * make derivatives, distribute, use and display any portion of the Covered
26316303Sjkim * Code in any form, with the right to sublicense such rights; and
27316303Sjkim *
28316303Sjkim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29316303Sjkim * license (with the right to sublicense), under only those claims of Intel
30316303Sjkim * patents that are infringed by the Original Intel Code, to make, use, sell,
31316303Sjkim * offer to sell, and import the Covered Code and derivative works thereof
32316303Sjkim * solely to the minimum extent necessary to exercise the above copyright
33316303Sjkim * license, and in no event shall the patent license extend to any additions
34316303Sjkim * to or modifications of the Original Intel Code. No other license or right
35316303Sjkim * is granted directly or by implication, estoppel or otherwise;
36316303Sjkim *
37316303Sjkim * The above copyright and patent license is granted only if the following
38316303Sjkim * conditions are met:
39316303Sjkim *
40316303Sjkim * 3. Conditions
41316303Sjkim *
42316303Sjkim * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43316303Sjkim * Redistribution of source code of any substantial portion of the Covered
44316303Sjkim * Code or modification with rights to further distribute source must include
45316303Sjkim * the above Copyright Notice, the above License, this list of Conditions,
46316303Sjkim * and the following Disclaimer and Export Compliance provision. In addition,
47316303Sjkim * Licensee must cause all Covered Code to which Licensee contributes to
48316303Sjkim * contain a file documenting the changes Licensee made to create that Covered
49316303Sjkim * Code and the date of any change. Licensee must include in that file the
50316303Sjkim * documentation of any changes made by any predecessor Licensee. Licensee
51316303Sjkim * must include a prominent statement that the modification is derived,
52316303Sjkim * directly or indirectly, from Original Intel Code.
53316303Sjkim *
54316303Sjkim * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55316303Sjkim * Redistribution of source code of any substantial portion of the Covered
56316303Sjkim * Code or modification without rights to further distribute source must
57316303Sjkim * include the following Disclaimer and Export Compliance provision in the
58316303Sjkim * documentation and/or other materials provided with distribution. In
59316303Sjkim * addition, Licensee may not authorize further sublicense of source of any
60316303Sjkim * portion of the Covered Code, and must include terms to the effect that the
61316303Sjkim * license from Licensee to its licensee is limited to the intellectual
62316303Sjkim * property embodied in the software Licensee provides to its licensee, and
63316303Sjkim * not to intellectual property embodied in modifications its licensee may
64316303Sjkim * make.
65316303Sjkim *
66316303Sjkim * 3.3. Redistribution of Executable. Redistribution in executable form of any
67316303Sjkim * substantial portion of the Covered Code or modification must reproduce the
68316303Sjkim * above Copyright Notice, and the following Disclaimer and Export Compliance
69316303Sjkim * provision in the documentation and/or other materials provided with the
70316303Sjkim * distribution.
71316303Sjkim *
72316303Sjkim * 3.4. Intel retains all right, title, and interest in and to the Original
73316303Sjkim * Intel Code.
74316303Sjkim *
75316303Sjkim * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76316303Sjkim * Intel shall be used in advertising or otherwise to promote the sale, use or
77316303Sjkim * other dealings in products derived from or relating to the Covered Code
78316303Sjkim * without prior written authorization from Intel.
79316303Sjkim *
80316303Sjkim * 4. Disclaimer and Export Compliance
81316303Sjkim *
82316303Sjkim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83316303Sjkim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84316303Sjkim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85316303Sjkim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86316303Sjkim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87316303Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88316303Sjkim * PARTICULAR PURPOSE.
89316303Sjkim *
90316303Sjkim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91316303Sjkim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92316303Sjkim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93316303Sjkim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94316303Sjkim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95316303Sjkim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96316303Sjkim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97316303Sjkim * LIMITED REMEDY.
98316303Sjkim *
99316303Sjkim * 4.3. Licensee shall not export, either directly or indirectly, any of this
100316303Sjkim * software or system incorporating such software without first obtaining any
101316303Sjkim * required license or other approval from the U. S. Department of Commerce or
102316303Sjkim * any other agency or department of the United States Government. In the
103316303Sjkim * event Licensee exports any such software from the United States or
104316303Sjkim * re-exports any such software from a foreign destination, Licensee shall
105316303Sjkim * ensure that the distribution and export/re-export of the software is in
106316303Sjkim * compliance with all laws, regulations, orders, or other restrictions of the
107316303Sjkim * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108316303Sjkim * any of its subsidiaries will export/re-export any technical data, process,
109316303Sjkim * software, or service, directly or indirectly, to any country for which the
110316303Sjkim * United States government or any agency thereof requires an export license,
111316303Sjkim * other governmental approval, or letter of assurance, without first obtaining
112316303Sjkim * such license, approval or letter.
113316303Sjkim *
114316303Sjkim *****************************************************************************
115316303Sjkim *
116316303Sjkim * Alternatively, you may choose to be licensed under the terms of the
117316303Sjkim * following license:
118316303Sjkim *
119217365Sjkim * Redistribution and use in source and binary forms, with or without
120217365Sjkim * modification, are permitted provided that the following conditions
121217365Sjkim * are met:
122217365Sjkim * 1. Redistributions of source code must retain the above copyright
123217365Sjkim *    notice, this list of conditions, and the following disclaimer,
124217365Sjkim *    without modification.
125217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
127217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
128217365Sjkim *    including a substantially similar Disclaimer requirement for further
129217365Sjkim *    binary redistribution.
130217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
131217365Sjkim *    of any contributors may be used to endorse or promote products derived
132217365Sjkim *    from this software without specific prior written permission.
13369450Smsmith *
134316303Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135316303Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136316303Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137316303Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138316303Sjkim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139316303Sjkim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140316303Sjkim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141316303Sjkim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142316303Sjkim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143316303Sjkim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144316303Sjkim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145316303Sjkim *
146316303Sjkim * Alternatively, you may choose to be licensed under the terms of the
147217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
148217365Sjkim * Software Foundation.
14969450Smsmith *
150316303Sjkim *****************************************************************************/
15169450Smsmith
15269450Smsmith#ifndef __ACTBL1_H__
15369450Smsmith#define __ACTBL1_H__
15469450Smsmith
155167802Sjkim
156167802Sjkim/*******************************************************************************
157167802Sjkim *
158197104Sjkim * Additional ACPI Tables (1)
159167802Sjkim *
160167802Sjkim * These tables are not consumed directly by the ACPICA subsystem, but are
161167802Sjkim * included here to support device drivers and the AML disassembler.
162167802Sjkim *
163197104Sjkim * The tables in this file are fully defined within the ACPI specification.
164197104Sjkim *
165167802Sjkim ******************************************************************************/
166167802Sjkim
167167802Sjkim
168167802Sjkim/*
169197104Sjkim * Values for description table header signatures for tables defined in this
170197104Sjkim * file. Useful because they make it more difficult to inadvertently type in
171197104Sjkim * the wrong signature.
172167802Sjkim */
173193267Sjkim#define ACPI_SIG_BERT           "BERT"      /* Boot Error Record Table */
174167802Sjkim#define ACPI_SIG_CPEP           "CPEP"      /* Corrected Platform Error Polling table */
175167802Sjkim#define ACPI_SIG_ECDT           "ECDT"      /* Embedded Controller Boot Resources Table */
176193267Sjkim#define ACPI_SIG_EINJ           "EINJ"      /* Error Injection table */
177193267Sjkim#define ACPI_SIG_ERST           "ERST"      /* Error Record Serialization Table */
178193267Sjkim#define ACPI_SIG_HEST           "HEST"      /* Hardware Error Source Table */
179167802Sjkim#define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
180197104Sjkim#define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table */
181167802Sjkim#define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
182167802Sjkim#define ACPI_SIG_SLIT           "SLIT"      /* System Locality Distance Information Table */
183167802Sjkim#define ACPI_SIG_SRAT           "SRAT"      /* System Resource Affinity Table */
184283092Sjkim#define ACPI_SIG_NFIT           "NFIT"      /* NVDIMM Firmware Interface Table */
185167802Sjkim
186167802Sjkim
187167802Sjkim/*
188167802Sjkim * All tables must be byte-packed to match the ACPI specification, since
189167802Sjkim * the tables are provided by the system BIOS.
190167802Sjkim */
19169450Smsmith#pragma pack(1)
19269450Smsmith
19391116Smsmith/*
194239340Sjkim * Note: C bitfields are not used for this reason:
195239340Sjkim *
196239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language
197239340Sjkim * does not specify the layout of bitfields in memory, which means they are
198239340Sjkim * essentially useless for dealing with packed data in on-disk formats or
199239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
200239340Sjkim * this decision was a design error in C. Ritchie could have picked an order
201239340Sjkim * and stuck with it." Norman Ramsey.
202239340Sjkim * See http://stackoverflow.com/a/1053662/41661
20391116Smsmith */
204167802Sjkim
205167802Sjkim
206197104Sjkim/*******************************************************************************
207197104Sjkim *
208197104Sjkim * Common subtable headers
209197104Sjkim *
210197104Sjkim ******************************************************************************/
211167802Sjkim
212197104Sjkim/* Generic subtable header (used in MADT, SRAT, etc.) */
213197104Sjkim
214167802Sjkimtypedef struct acpi_subtable_header
21569450Smsmith{
216167802Sjkim    UINT8                   Type;
217167802Sjkim    UINT8                   Length;
218151937Sjkim
219167802Sjkim} ACPI_SUBTABLE_HEADER;
22069450Smsmith
22169450Smsmith
222197104Sjkim/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
223193267Sjkim
224193267Sjkimtypedef struct acpi_whea_header
225193267Sjkim{
226193267Sjkim    UINT8                   Action;
227193267Sjkim    UINT8                   Instruction;
228193267Sjkim    UINT8                   Flags;
229193267Sjkim    UINT8                   Reserved;
230193267Sjkim    ACPI_GENERIC_ADDRESS    RegisterRegion;
231193267Sjkim    UINT64                  Value;              /* Value used with Read/Write register */
232193267Sjkim    UINT64                  Mask;               /* Bitmask required for this register instruction */
233193267Sjkim
234193267Sjkim} ACPI_WHEA_HEADER;
235193267Sjkim
236193267Sjkim
237167802Sjkim/*******************************************************************************
238167802Sjkim *
239197104Sjkim * BERT - Boot Error Record Table (ACPI 4.0)
240197104Sjkim *        Version 1
241167802Sjkim *
242167802Sjkim ******************************************************************************/
243167802Sjkim
244193267Sjkimtypedef struct acpi_table_bert
245193267Sjkim{
246193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
247193267Sjkim    UINT32                  RegionLength;       /* Length of the boot error region */
248238381Sjkim    UINT64                  Address;            /* Physical address of the error region */
249193267Sjkim
250193267Sjkim} ACPI_TABLE_BERT;
251193267Sjkim
252193267Sjkim
253197104Sjkim/* Boot Error Region (not a subtable, pointed to by Address field above) */
254193267Sjkim
255193267Sjkimtypedef struct acpi_bert_region
256193267Sjkim{
257197104Sjkim    UINT32                  BlockStatus;        /* Type of error information */
258197104Sjkim    UINT32                  RawDataOffset;      /* Offset to raw error data */
259197104Sjkim    UINT32                  RawDataLength;      /* Length of raw error data */
260197104Sjkim    UINT32                  DataLength;         /* Length of generic error data */
261197104Sjkim    UINT32                  ErrorSeverity;      /* Severity code */
262193267Sjkim
263193267Sjkim} ACPI_BERT_REGION;
264193267Sjkim
265197104Sjkim/* Values for BlockStatus flags above */
266193267Sjkim
267193267Sjkim#define ACPI_BERT_UNCORRECTABLE             (1)
268197104Sjkim#define ACPI_BERT_CORRECTABLE               (1<<1)
269197104Sjkim#define ACPI_BERT_MULTIPLE_UNCORRECTABLE    (1<<2)
270197104Sjkim#define ACPI_BERT_MULTIPLE_CORRECTABLE      (1<<3)
271197104Sjkim#define ACPI_BERT_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
272193267Sjkim
273197104Sjkim/* Values for ErrorSeverity above */
274193267Sjkim
275197104Sjkimenum AcpiBertErrorSeverity
276167802Sjkim{
277197104Sjkim    ACPI_BERT_ERROR_CORRECTABLE     = 0,
278197104Sjkim    ACPI_BERT_ERROR_FATAL           = 1,
279197104Sjkim    ACPI_BERT_ERROR_CORRECTED       = 2,
280197104Sjkim    ACPI_BERT_ERROR_NONE            = 3,
281197104Sjkim    ACPI_BERT_ERROR_RESERVED        = 4     /* 4 and greater are reserved */
282197104Sjkim};
283167802Sjkim
284197104Sjkim/*
285197104Sjkim * Note: The generic error data that follows the ErrorSeverity field above
286197104Sjkim * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below
287197104Sjkim */
288167802Sjkim
289167802Sjkim
290167802Sjkim/*******************************************************************************
291167802Sjkim *
292197104Sjkim * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
293197104Sjkim *        Version 1
294167802Sjkim *
295167802Sjkim ******************************************************************************/
296167802Sjkim
297167802Sjkimtypedef struct acpi_table_cpep
298167802Sjkim{
299167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
300167802Sjkim    UINT64                  Reserved;
301167802Sjkim
302167802Sjkim} ACPI_TABLE_CPEP;
303167802Sjkim
304167802Sjkim
305167802Sjkim/* Subtable */
306167802Sjkim
307167802Sjkimtypedef struct acpi_cpep_polling
308167802Sjkim{
309197104Sjkim    ACPI_SUBTABLE_HEADER    Header;
310167802Sjkim    UINT8                   Id;                 /* Processor ID */
311167802Sjkim    UINT8                   Eid;                /* Processor EID */
312167802Sjkim    UINT32                  Interval;           /* Polling interval (msec) */
313167802Sjkim
314167802Sjkim} ACPI_CPEP_POLLING;
315167802Sjkim
316167802Sjkim
317167802Sjkim/*******************************************************************************
318167802Sjkim *
319167802Sjkim * ECDT - Embedded Controller Boot Resources Table
320197104Sjkim *        Version 1
321167802Sjkim *
322167802Sjkim ******************************************************************************/
323167802Sjkim
324167802Sjkimtypedef struct acpi_table_ecdt
325167802Sjkim{
326167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
327167802Sjkim    ACPI_GENERIC_ADDRESS    Control;            /* Address of EC command/status register */
328167802Sjkim    ACPI_GENERIC_ADDRESS    Data;               /* Address of EC data register */
329167802Sjkim    UINT32                  Uid;                /* Unique ID - must be same as the EC _UID method */
330167802Sjkim    UINT8                   Gpe;                /* The GPE for the EC */
331167802Sjkim    UINT8                   Id[1];              /* Full namepath of the EC in the ACPI namespace */
332167802Sjkim
333167802Sjkim} ACPI_TABLE_ECDT;
334167802Sjkim
335167802Sjkim
336167802Sjkim/*******************************************************************************
337167802Sjkim *
338197104Sjkim * EINJ - Error Injection Table (ACPI 4.0)
339197104Sjkim *        Version 1
340193267Sjkim *
341193267Sjkim ******************************************************************************/
342193267Sjkim
343193267Sjkimtypedef struct acpi_table_einj
344193267Sjkim{
345193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
346193267Sjkim    UINT32                  HeaderLength;
347197104Sjkim    UINT8                   Flags;
348197104Sjkim    UINT8                   Reserved[3];
349193267Sjkim    UINT32                  Entries;
350193267Sjkim
351193267Sjkim} ACPI_TABLE_EINJ;
352193267Sjkim
353197104Sjkim
354193267Sjkim/* EINJ Injection Instruction Entries (actions) */
355193267Sjkim
356193267Sjkimtypedef struct acpi_einj_entry
357193267Sjkim{
358193267Sjkim    ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
359193267Sjkim
360193267Sjkim} ACPI_EINJ_ENTRY;
361193267Sjkim
362197104Sjkim/* Masks for Flags field above */
363197104Sjkim
364197104Sjkim#define ACPI_EINJ_PRESERVE          (1)
365197104Sjkim
366193267Sjkim/* Values for Action field above */
367193267Sjkim
368193267Sjkimenum AcpiEinjActions
369193267Sjkim{
370228110Sjkim    ACPI_EINJ_BEGIN_OPERATION               = 0,
371228110Sjkim    ACPI_EINJ_GET_TRIGGER_TABLE             = 1,
372228110Sjkim    ACPI_EINJ_SET_ERROR_TYPE                = 2,
373228110Sjkim    ACPI_EINJ_GET_ERROR_TYPE                = 3,
374228110Sjkim    ACPI_EINJ_END_OPERATION                 = 4,
375228110Sjkim    ACPI_EINJ_EXECUTE_OPERATION             = 5,
376228110Sjkim    ACPI_EINJ_CHECK_BUSY_STATUS             = 6,
377228110Sjkim    ACPI_EINJ_GET_COMMAND_STATUS            = 7,
378228110Sjkim    ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS   = 8,
379298714Sjkim    ACPI_EINJ_GET_EXECUTE_TIMINGS           = 9,
380298714Sjkim    ACPI_EINJ_ACTION_RESERVED               = 10,    /* 10 and greater are reserved */
381228110Sjkim    ACPI_EINJ_TRIGGER_ERROR                 = 0xFF   /* Except for this value */
382193267Sjkim};
383193267Sjkim
384193267Sjkim/* Values for Instruction field above */
385193267Sjkim
386193267Sjkimenum AcpiEinjInstructions
387193267Sjkim{
388193267Sjkim    ACPI_EINJ_READ_REGISTER         = 0,
389193267Sjkim    ACPI_EINJ_READ_REGISTER_VALUE   = 1,
390193267Sjkim    ACPI_EINJ_WRITE_REGISTER        = 2,
391193267Sjkim    ACPI_EINJ_WRITE_REGISTER_VALUE  = 3,
392193267Sjkim    ACPI_EINJ_NOOP                  = 4,
393228110Sjkim    ACPI_EINJ_FLUSH_CACHELINE       = 5,
394228110Sjkim    ACPI_EINJ_INSTRUCTION_RESERVED  = 6     /* 6 and greater are reserved */
395193267Sjkim};
396193267Sjkim
397228110Sjkimtypedef struct acpi_einj_error_type_with_addr
398228110Sjkim{
399228110Sjkim    UINT32                  ErrorType;
400228110Sjkim    UINT32                  VendorStructOffset;
401228110Sjkim    UINT32                  Flags;
402228110Sjkim    UINT32                  ApicId;
403228110Sjkim    UINT64                  Address;
404228110Sjkim    UINT64                  Range;
405228110Sjkim    UINT32                  PcieId;
406197104Sjkim
407228110Sjkim} ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
408228110Sjkim
409228110Sjkimtypedef struct acpi_einj_vendor
410228110Sjkim{
411228110Sjkim    UINT32                  Length;
412228110Sjkim    UINT32                  PcieId;
413228110Sjkim    UINT16                  VendorId;
414228110Sjkim    UINT16                  DeviceId;
415228110Sjkim    UINT8                   RevisionId;
416228110Sjkim    UINT8                   Reserved[3];
417228110Sjkim
418228110Sjkim} ACPI_EINJ_VENDOR;
419228110Sjkim
420228110Sjkim
421193267Sjkim/* EINJ Trigger Error Action Table */
422193267Sjkim
423193267Sjkimtypedef struct acpi_einj_trigger
424193267Sjkim{
425193267Sjkim    UINT32                  HeaderSize;
426193267Sjkim    UINT32                  Revision;
427193267Sjkim    UINT32                  TableSize;
428193267Sjkim    UINT32                  EntryCount;
429193267Sjkim
430193267Sjkim} ACPI_EINJ_TRIGGER;
431193267Sjkim
432197104Sjkim/* Command status return values */
433193267Sjkim
434197104Sjkimenum AcpiEinjCommandStatus
435197104Sjkim{
436197104Sjkim    ACPI_EINJ_SUCCESS               = 0,
437197104Sjkim    ACPI_EINJ_FAILURE               = 1,
438197104Sjkim    ACPI_EINJ_INVALID_ACCESS        = 2,
439197104Sjkim    ACPI_EINJ_STATUS_RESERVED       = 3     /* 3 and greater are reserved */
440197104Sjkim};
441197104Sjkim
442197104Sjkim
443197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
444197104Sjkim
445197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
446197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
447197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
448197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
449197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
450197104Sjkim#define ACPI_EINJ_MEMORY_FATAL              (1<<5)
451197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
452197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
453197104Sjkim#define ACPI_EINJ_PCIX_FATAL                (1<<8)
454197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
455197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
456197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
457228110Sjkim#define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
458197104Sjkim
459197104Sjkim
460193267Sjkim/*******************************************************************************
461193267Sjkim *
462197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0)
463197104Sjkim *        Version 1
464193267Sjkim *
465193267Sjkim ******************************************************************************/
466193267Sjkim
467193267Sjkimtypedef struct acpi_table_erst
468193267Sjkim{
469193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
470193267Sjkim    UINT32                  HeaderLength;
471193267Sjkim    UINT32                  Reserved;
472193267Sjkim    UINT32                  Entries;
473193267Sjkim
474193267Sjkim} ACPI_TABLE_ERST;
475193267Sjkim
476197104Sjkim
477193267Sjkim/* ERST Serialization Entries (actions) */
478193267Sjkim
479193267Sjkimtypedef struct acpi_erst_entry
480193267Sjkim{
481193267Sjkim    ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
482193267Sjkim
483193267Sjkim} ACPI_ERST_ENTRY;
484193267Sjkim
485197104Sjkim/* Masks for Flags field above */
486197104Sjkim
487197104Sjkim#define ACPI_ERST_PRESERVE          (1)
488197104Sjkim
489193267Sjkim/* Values for Action field above */
490193267Sjkim
491193267Sjkimenum AcpiErstActions
492193267Sjkim{
493197104Sjkim    ACPI_ERST_BEGIN_WRITE           = 0,
494197104Sjkim    ACPI_ERST_BEGIN_READ            = 1,
495197104Sjkim    ACPI_ERST_BEGIN_CLEAR           = 2,
496197104Sjkim    ACPI_ERST_END                   = 3,
497193267Sjkim    ACPI_ERST_SET_RECORD_OFFSET     = 4,
498193267Sjkim    ACPI_ERST_EXECUTE_OPERATION     = 5,
499193267Sjkim    ACPI_ERST_CHECK_BUSY_STATUS     = 6,
500193267Sjkim    ACPI_ERST_GET_COMMAND_STATUS    = 7,
501197104Sjkim    ACPI_ERST_GET_RECORD_ID         = 8,
502197104Sjkim    ACPI_ERST_SET_RECORD_ID         = 9,
503193267Sjkim    ACPI_ERST_GET_RECORD_COUNT      = 10,
504193267Sjkim    ACPI_ERST_BEGIN_DUMMY_WRIITE    = 11,
505193267Sjkim    ACPI_ERST_NOT_USED              = 12,
506193267Sjkim    ACPI_ERST_GET_ERROR_RANGE       = 13,
507193267Sjkim    ACPI_ERST_GET_ERROR_LENGTH      = 14,
508193267Sjkim    ACPI_ERST_GET_ERROR_ATTRIBUTES  = 15,
509298714Sjkim    ACPI_ERST_EXECUTE_TIMINGS       = 16,
510298714Sjkim    ACPI_ERST_ACTION_RESERVED       = 17    /* 17 and greater are reserved */
511193267Sjkim};
512193267Sjkim
513193267Sjkim/* Values for Instruction field above */
514193267Sjkim
515193267Sjkimenum AcpiErstInstructions
516193267Sjkim{
517193267Sjkim    ACPI_ERST_READ_REGISTER         = 0,
518193267Sjkim    ACPI_ERST_READ_REGISTER_VALUE   = 1,
519193267Sjkim    ACPI_ERST_WRITE_REGISTER        = 2,
520193267Sjkim    ACPI_ERST_WRITE_REGISTER_VALUE  = 3,
521193267Sjkim    ACPI_ERST_NOOP                  = 4,
522193267Sjkim    ACPI_ERST_LOAD_VAR1             = 5,
523193267Sjkim    ACPI_ERST_LOAD_VAR2             = 6,
524193267Sjkim    ACPI_ERST_STORE_VAR1            = 7,
525193267Sjkim    ACPI_ERST_ADD                   = 8,
526193267Sjkim    ACPI_ERST_SUBTRACT              = 9,
527193267Sjkim    ACPI_ERST_ADD_VALUE             = 10,
528193267Sjkim    ACPI_ERST_SUBTRACT_VALUE        = 11,
529193267Sjkim    ACPI_ERST_STALL                 = 12,
530193267Sjkim    ACPI_ERST_STALL_WHILE_TRUE      = 13,
531193267Sjkim    ACPI_ERST_SKIP_NEXT_IF_TRUE     = 14,
532193267Sjkim    ACPI_ERST_GOTO                  = 15,
533193267Sjkim    ACPI_ERST_SET_SRC_ADDRESS_BASE  = 16,
534193267Sjkim    ACPI_ERST_SET_DST_ADDRESS_BASE  = 17,
535193267Sjkim    ACPI_ERST_MOVE_DATA             = 18,
536193267Sjkim    ACPI_ERST_INSTRUCTION_RESERVED  = 19    /* 19 and greater are reserved */
537193267Sjkim};
538193267Sjkim
539197104Sjkim/* Command status return values */
540193267Sjkim
541197104Sjkimenum AcpiErstCommandStatus
542197104Sjkim{
543197104Sjkim    ACPI_ERST_SUCESS                = 0,
544197104Sjkim    ACPI_ERST_NO_SPACE              = 1,
545197104Sjkim    ACPI_ERST_NOT_AVAILABLE         = 2,
546197104Sjkim    ACPI_ERST_FAILURE               = 3,
547197104Sjkim    ACPI_ERST_RECORD_EMPTY          = 4,
548197104Sjkim    ACPI_ERST_NOT_FOUND             = 5,
549197104Sjkim    ACPI_ERST_STATUS_RESERVED       = 6     /* 6 and greater are reserved */
550197104Sjkim};
551197104Sjkim
552197104Sjkim
553197104Sjkim/* Error Record Serialization Information */
554197104Sjkim
555197104Sjkimtypedef struct acpi_erst_info
556197104Sjkim{
557197104Sjkim    UINT16                  Signature;          /* Should be "ER" */
558197104Sjkim    UINT8                   Data[48];
559197104Sjkim
560197104Sjkim} ACPI_ERST_INFO;
561197104Sjkim
562197104Sjkim
563193267Sjkim/*******************************************************************************
564193267Sjkim *
565197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0)
566197104Sjkim *        Version 1
567193267Sjkim *
568193267Sjkim ******************************************************************************/
569193267Sjkim
570193267Sjkimtypedef struct acpi_table_hest
571193267Sjkim{
572193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
573193267Sjkim    UINT32                  ErrorSourceCount;
574193267Sjkim
575193267Sjkim} ACPI_TABLE_HEST;
576193267Sjkim
577193267Sjkim
578193267Sjkim/* HEST subtable header */
579193267Sjkim
580193267Sjkimtypedef struct acpi_hest_header
581193267Sjkim{
582193267Sjkim    UINT16                  Type;
583197104Sjkim    UINT16                  SourceId;
584193267Sjkim
585193267Sjkim} ACPI_HEST_HEADER;
586193267Sjkim
587193267Sjkim
588193267Sjkim/* Values for Type field above for subtables */
589193267Sjkim
590193267Sjkimenum AcpiHestTypes
591193267Sjkim{
592197104Sjkim    ACPI_HEST_TYPE_IA32_CHECK           = 0,
593197104Sjkim    ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
594197104Sjkim    ACPI_HEST_TYPE_IA32_NMI             = 2,
595197104Sjkim    ACPI_HEST_TYPE_NOT_USED3            = 3,
596197104Sjkim    ACPI_HEST_TYPE_NOT_USED4            = 4,
597197104Sjkim    ACPI_HEST_TYPE_NOT_USED5            = 5,
598197104Sjkim    ACPI_HEST_TYPE_AER_ROOT_PORT        = 6,
599197104Sjkim    ACPI_HEST_TYPE_AER_ENDPOINT         = 7,
600197104Sjkim    ACPI_HEST_TYPE_AER_BRIDGE           = 8,
601197104Sjkim    ACPI_HEST_TYPE_GENERIC_ERROR        = 9,
602298714Sjkim    ACPI_HEST_TYPE_GENERIC_ERROR_V2     = 10,
603298714Sjkim    ACPI_HEST_TYPE_RESERVED             = 11    /* 11 and greater are reserved */
604193267Sjkim};
605193267Sjkim
606193267Sjkim
607193267Sjkim/*
608197104Sjkim * HEST substructures contained in subtables
609193267Sjkim */
610193267Sjkim
611197104Sjkim/*
612197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
613197104Sjkim * ACPI_HEST_IA_CORRECTED structures.
614197104Sjkim */
615197104Sjkimtypedef struct acpi_hest_ia_error_bank
616193267Sjkim{
617193267Sjkim    UINT8                   BankNumber;
618193267Sjkim    UINT8                   ClearStatusOnInit;
619193267Sjkim    UINT8                   StatusFormat;
620197104Sjkim    UINT8                   Reserved;
621193267Sjkim    UINT32                  ControlRegister;
622197104Sjkim    UINT64                  ControlData;
623193267Sjkim    UINT32                  StatusRegister;
624193267Sjkim    UINT32                  AddressRegister;
625193267Sjkim    UINT32                  MiscRegister;
626193267Sjkim
627197104Sjkim} ACPI_HEST_IA_ERROR_BANK;
628193267Sjkim
629193267Sjkim
630197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
631193267Sjkim
632193267Sjkimtypedef struct acpi_hest_aer_common
633193267Sjkim{
634197104Sjkim    UINT16                  Reserved1;
635193267Sjkim    UINT8                   Flags;
636193267Sjkim    UINT8                   Enabled;
637197104Sjkim    UINT32                  RecordsToPreallocate;
638193267Sjkim    UINT32                  MaxSectionsPerRecord;
639272444Sjkim    UINT32                  Bus;                    /* Bus and Segment numbers */
640193267Sjkim    UINT16                  Device;
641193267Sjkim    UINT16                  Function;
642193267Sjkim    UINT16                  DeviceControl;
643197104Sjkim    UINT16                  Reserved2;
644197104Sjkim    UINT32                  UncorrectableMask;
645197104Sjkim    UINT32                  UncorrectableSeverity;
646197104Sjkim    UINT32                  CorrectableMask;
647197104Sjkim    UINT32                  AdvancedCapabilities;
648193267Sjkim
649193267Sjkim} ACPI_HEST_AER_COMMON;
650193267Sjkim
651197104Sjkim/* Masks for HEST Flags fields */
652193267Sjkim
653197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST        (1)
654197104Sjkim#define ACPI_HEST_GLOBAL                (1<<1)
655197104Sjkim
656272444Sjkim/*
657272444Sjkim * Macros to access the bus/segment numbers in Bus field above:
658272444Sjkim *  Bus number is encoded in bits 7:0
659272444Sjkim *  Segment number is encoded in bits 23:8
660272444Sjkim */
661272444Sjkim#define ACPI_HEST_BUS(Bus)              ((Bus) & 0xFF)
662272444Sjkim#define ACPI_HEST_SEGMENT(Bus)          (((Bus) >> 8) & 0xFFFF)
663197104Sjkim
664272444Sjkim
665193267Sjkim/* Hardware Error Notification */
666193267Sjkim
667193267Sjkimtypedef struct acpi_hest_notify
668193267Sjkim{
669193267Sjkim    UINT8                   Type;
670193267Sjkim    UINT8                   Length;
671193267Sjkim    UINT16                  ConfigWriteEnable;
672193267Sjkim    UINT32                  PollInterval;
673193267Sjkim    UINT32                  Vector;
674193267Sjkim    UINT32                  PollingThresholdValue;
675193267Sjkim    UINT32                  PollingThresholdWindow;
676193267Sjkim    UINT32                  ErrorThresholdValue;
677193267Sjkim    UINT32                  ErrorThresholdWindow;
678193267Sjkim
679193267Sjkim} ACPI_HEST_NOTIFY;
680193267Sjkim
681193267Sjkim/* Values for Notify Type field above */
682193267Sjkim
683193267Sjkimenum AcpiHestNotifyTypes
684193267Sjkim{
685193267Sjkim    ACPI_HEST_NOTIFY_POLLED     = 0,
686193267Sjkim    ACPI_HEST_NOTIFY_EXTERNAL   = 1,
687193267Sjkim    ACPI_HEST_NOTIFY_LOCAL      = 2,
688193267Sjkim    ACPI_HEST_NOTIFY_SCI        = 3,
689193267Sjkim    ACPI_HEST_NOTIFY_NMI        = 4,
690240716Sjkim    ACPI_HEST_NOTIFY_CMCI       = 5,    /* ACPI 5.0 */
691240716Sjkim    ACPI_HEST_NOTIFY_MCE        = 6,    /* ACPI 5.0 */
692298714Sjkim    ACPI_HEST_NOTIFY_GPIO       = 7,    /* ACPI 6.0 */
693298714Sjkim    ACPI_HEST_NOTIFY_SEA        = 8,    /* ACPI 6.1 */
694298714Sjkim    ACPI_HEST_NOTIFY_SEI        = 9,    /* ACPI 6.1 */
695298714Sjkim    ACPI_HEST_NOTIFY_GSIV       = 10,   /* ACPI 6.1 */
696298714Sjkim    ACPI_HEST_NOTIFY_RESERVED   = 11    /* 11 and greater are reserved */
697193267Sjkim};
698193267Sjkim
699197104Sjkim/* Values for ConfigWriteEnable bitfield above */
700193267Sjkim
701197104Sjkim#define ACPI_HEST_TYPE                  (1)
702197104Sjkim#define ACPI_HEST_POLL_INTERVAL         (1<<1)
703197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
704197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
705197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
706197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
707197104Sjkim
708197104Sjkim
709193267Sjkim/*
710193267Sjkim * HEST subtables
711193267Sjkim */
712193267Sjkim
713197104Sjkim/* 0: IA32 Machine Check Exception */
714193267Sjkim
715197104Sjkimtypedef struct acpi_hest_ia_machine_check
716193267Sjkim{
717193267Sjkim    ACPI_HEST_HEADER        Header;
718197104Sjkim    UINT16                  Reserved1;
719193267Sjkim    UINT8                   Flags;
720197104Sjkim    UINT8                   Enabled;
721197104Sjkim    UINT32                  RecordsToPreallocate;
722193267Sjkim    UINT32                  MaxSectionsPerRecord;
723193267Sjkim    UINT64                  GlobalCapabilityData;
724193267Sjkim    UINT64                  GlobalControlData;
725193267Sjkim    UINT8                   NumHardwareBanks;
726197104Sjkim    UINT8                   Reserved3[7];
727193267Sjkim
728197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK;
729193267Sjkim
730193267Sjkim
731197104Sjkim/* 1: IA32 Corrected Machine Check */
732193267Sjkim
733197104Sjkimtypedef struct acpi_hest_ia_corrected
734193267Sjkim{
735193267Sjkim    ACPI_HEST_HEADER        Header;
736197104Sjkim    UINT16                  Reserved1;
737193267Sjkim    UINT8                   Flags;
738193267Sjkim    UINT8                   Enabled;
739197104Sjkim    UINT32                  RecordsToPreallocate;
740193267Sjkim    UINT32                  MaxSectionsPerRecord;
741193267Sjkim    ACPI_HEST_NOTIFY        Notify;
742193267Sjkim    UINT8                   NumHardwareBanks;
743197104Sjkim    UINT8                   Reserved2[3];
744193267Sjkim
745197104Sjkim} ACPI_HEST_IA_CORRECTED;
746193267Sjkim
747193267Sjkim
748197104Sjkim/* 2: IA32 Non-Maskable Interrupt */
749193267Sjkim
750197104Sjkimtypedef struct acpi_hest_ia_nmi
751193267Sjkim{
752193267Sjkim    ACPI_HEST_HEADER        Header;
753193267Sjkim    UINT32                  Reserved;
754197104Sjkim    UINT32                  RecordsToPreallocate;
755193267Sjkim    UINT32                  MaxSectionsPerRecord;
756193267Sjkim    UINT32                  MaxRawDataLength;
757193267Sjkim
758197104Sjkim} ACPI_HEST_IA_NMI;
759193267Sjkim
760193267Sjkim
761197104Sjkim/* 3,4,5: Not used */
762193267Sjkim
763193267Sjkim/* 6: PCI Express Root Port AER */
764193267Sjkim
765193267Sjkimtypedef struct acpi_hest_aer_root
766193267Sjkim{
767193267Sjkim    ACPI_HEST_HEADER        Header;
768193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
769193267Sjkim    UINT32                  RootErrorCommand;
770193267Sjkim
771193267Sjkim} ACPI_HEST_AER_ROOT;
772193267Sjkim
773193267Sjkim
774193267Sjkim/* 7: PCI Express AER (AER Endpoint) */
775193267Sjkim
776193267Sjkimtypedef struct acpi_hest_aer
777193267Sjkim{
778193267Sjkim    ACPI_HEST_HEADER        Header;
779193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
780193267Sjkim
781193267Sjkim} ACPI_HEST_AER;
782193267Sjkim
783193267Sjkim
784193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */
785193267Sjkim
786193267Sjkimtypedef struct acpi_hest_aer_bridge
787193267Sjkim{
788193267Sjkim    ACPI_HEST_HEADER        Header;
789193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
790197104Sjkim    UINT32                  UncorrectableMask2;
791197104Sjkim    UINT32                  UncorrectableSeverity2;
792197104Sjkim    UINT32                  AdvancedCapabilities2;
793193267Sjkim
794193267Sjkim} ACPI_HEST_AER_BRIDGE;
795193267Sjkim
796193267Sjkim
797193267Sjkim/* 9: Generic Hardware Error Source */
798193267Sjkim
799193267Sjkimtypedef struct acpi_hest_generic
800193267Sjkim{
801193267Sjkim    ACPI_HEST_HEADER        Header;
802193267Sjkim    UINT16                  RelatedSourceId;
803197104Sjkim    UINT8                   Reserved;
804193267Sjkim    UINT8                   Enabled;
805197104Sjkim    UINT32                  RecordsToPreallocate;
806193267Sjkim    UINT32                  MaxSectionsPerRecord;
807193267Sjkim    UINT32                  MaxRawDataLength;
808193267Sjkim    ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
809193267Sjkim    ACPI_HEST_NOTIFY        Notify;
810197104Sjkim    UINT32                  ErrorBlockLength;
811193267Sjkim
812193267Sjkim} ACPI_HEST_GENERIC;
813193267Sjkim
814193267Sjkim
815298714Sjkim/* 10: Generic Hardware Error Source, version 2 */
816298714Sjkim
817298714Sjkimtypedef struct acpi_hest_generic_v2
818298714Sjkim{
819298714Sjkim    ACPI_HEST_HEADER        Header;
820298714Sjkim    UINT16                  RelatedSourceId;
821298714Sjkim    UINT8                   Reserved;
822298714Sjkim    UINT8                   Enabled;
823298714Sjkim    UINT32                  RecordsToPreallocate;
824298714Sjkim    UINT32                  MaxSectionsPerRecord;
825298714Sjkim    UINT32                  MaxRawDataLength;
826298714Sjkim    ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
827298714Sjkim    ACPI_HEST_NOTIFY        Notify;
828298714Sjkim    UINT32                  ErrorBlockLength;
829298714Sjkim    ACPI_GENERIC_ADDRESS    ReadAckRegister;
830298714Sjkim    UINT64                  ReadAckPreserve;
831298714Sjkim    UINT64                  ReadAckWrite;
832298714Sjkim
833298714Sjkim} ACPI_HEST_GENERIC_V2;
834298714Sjkim
835298714Sjkim
836197104Sjkim/* Generic Error Status block */
837167802Sjkim
838197104Sjkimtypedef struct acpi_hest_generic_status
839167802Sjkim{
840197104Sjkim    UINT32                  BlockStatus;
841197104Sjkim    UINT32                  RawDataOffset;
842197104Sjkim    UINT32                  RawDataLength;
843197104Sjkim    UINT32                  DataLength;
844197104Sjkim    UINT32                  ErrorSeverity;
845167802Sjkim
846197104Sjkim} ACPI_HEST_GENERIC_STATUS;
847167802Sjkim
848197104Sjkim/* Values for BlockStatus flags above */
849167802Sjkim
850197104Sjkim#define ACPI_HEST_UNCORRECTABLE             (1)
851197104Sjkim#define ACPI_HEST_CORRECTABLE               (1<<1)
852197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
853197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
854197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
855167802Sjkim
856167802Sjkim
857197104Sjkim/* Generic Error Data entry */
858167802Sjkim
859197104Sjkimtypedef struct acpi_hest_generic_data
860193267Sjkim{
861197104Sjkim    UINT8                   SectionType[16];
862197104Sjkim    UINT32                  ErrorSeverity;
863197104Sjkim    UINT16                  Revision;
864197104Sjkim    UINT8                   ValidationBits;
865193267Sjkim    UINT8                   Flags;
866197104Sjkim    UINT32                  ErrorDataLength;
867197104Sjkim    UINT8                   FruId[16];
868197104Sjkim    UINT8                   FruText[20];
869193267Sjkim
870197104Sjkim} ACPI_HEST_GENERIC_DATA;
871193267Sjkim
872298714Sjkim/* Extension for revision 0x0300 */
873193267Sjkim
874298714Sjkimtypedef struct acpi_hest_generic_data_v300
875298714Sjkim{
876298714Sjkim    UINT8                   SectionType[16];
877298714Sjkim    UINT32                  ErrorSeverity;
878298714Sjkim    UINT16                  Revision;
879298714Sjkim    UINT8                   ValidationBits;
880298714Sjkim    UINT8                   Flags;
881298714Sjkim    UINT32                  ErrorDataLength;
882298714Sjkim    UINT8                   FruId[16];
883298714Sjkim    UINT8                   FruText[20];
884298714Sjkim    UINT64                  TimeStamp;
885298714Sjkim
886298714Sjkim} ACPI_HEST_GENERIC_DATA_V300;
887298714Sjkim
888298714Sjkim/* Values for ErrorSeverity above */
889298714Sjkim
890298714Sjkim#define ACPI_HEST_GEN_ERROR_RECOVERABLE     0
891298714Sjkim#define ACPI_HEST_GEN_ERROR_FATAL           1
892298714Sjkim#define ACPI_HEST_GEN_ERROR_CORRECTED       2
893298714Sjkim#define ACPI_HEST_GEN_ERROR_NONE            3
894298714Sjkim
895298714Sjkim/* Flags for ValidationBits above */
896298714Sjkim
897298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_ID          (1)
898298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_STRING      (1<<1)
899298714Sjkim#define ACPI_HEST_GEN_VALID_TIMESTAMP       (1<<2)
900298714Sjkim
901298714Sjkim
902193267Sjkim/*******************************************************************************
903193267Sjkim *
904167802Sjkim * MADT - Multiple APIC Description Table
905197104Sjkim *        Version 3
906167802Sjkim *
907167802Sjkim ******************************************************************************/
908167802Sjkim
909167802Sjkimtypedef struct acpi_table_madt
910167802Sjkim{
911167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
912167802Sjkim    UINT32                  Address;            /* Physical address of local APIC */
913167802Sjkim    UINT32                  Flags;
914167802Sjkim
915167802Sjkim} ACPI_TABLE_MADT;
916167802Sjkim
917197104Sjkim/* Masks for Flags field above */
918167802Sjkim
919197104Sjkim#define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
920167802Sjkim
921167802Sjkim/* Values for PCATCompat flag */
922167802Sjkim
923167802Sjkim#define ACPI_MADT_DUAL_PIC          0
924167802Sjkim#define ACPI_MADT_MULTIPLE_APIC     1
925167802Sjkim
926167802Sjkim
927197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
928167802Sjkim
929167802Sjkimenum AcpiMadtType
930167802Sjkim{
931272444Sjkim    ACPI_MADT_TYPE_LOCAL_APIC               = 0,
932272444Sjkim    ACPI_MADT_TYPE_IO_APIC                  = 1,
933272444Sjkim    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
934272444Sjkim    ACPI_MADT_TYPE_NMI_SOURCE               = 3,
935272444Sjkim    ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
936272444Sjkim    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
937272444Sjkim    ACPI_MADT_TYPE_IO_SAPIC                 = 6,
938272444Sjkim    ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
939272444Sjkim    ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
940272444Sjkim    ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
941272444Sjkim    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
942272444Sjkim    ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
943272444Sjkim    ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR      = 12,
944272444Sjkim    ACPI_MADT_TYPE_GENERIC_MSI_FRAME        = 13,
945272444Sjkim    ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR    = 14,
946283092Sjkim    ACPI_MADT_TYPE_GENERIC_TRANSLATOR       = 15,
947283092Sjkim    ACPI_MADT_TYPE_RESERVED                 = 16    /* 16 and greater are reserved */
948167802Sjkim};
949167802Sjkim
950167802Sjkim
951167802Sjkim/*
952272444Sjkim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
953167802Sjkim */
954167802Sjkim
955167802Sjkim/* 0: Processor Local APIC */
956167802Sjkim
957167802Sjkimtypedef struct acpi_madt_local_apic
958167802Sjkim{
959167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
960167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
961167802Sjkim    UINT8                   Id;                 /* Processor's local APIC id */
962167802Sjkim    UINT32                  LapicFlags;
963167802Sjkim
964167802Sjkim} ACPI_MADT_LOCAL_APIC;
965167802Sjkim
966197104Sjkim
967167802Sjkim/* 1: IO APIC */
968167802Sjkim
969167802Sjkimtypedef struct acpi_madt_io_apic
970167802Sjkim{
971167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
972167802Sjkim    UINT8                   Id;                 /* I/O APIC ID */
973167802Sjkim    UINT8                   Reserved;           /* Reserved - must be zero */
974167802Sjkim    UINT32                  Address;            /* APIC physical address */
975167802Sjkim    UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
976167802Sjkim
977167802Sjkim} ACPI_MADT_IO_APIC;
978167802Sjkim
979197104Sjkim
980167802Sjkim/* 2: Interrupt Override */
981167802Sjkim
982167802Sjkimtypedef struct acpi_madt_interrupt_override
983167802Sjkim{
984167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
985167802Sjkim    UINT8                   Bus;                /* 0 - ISA */
986167802Sjkim    UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
987167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
988167802Sjkim    UINT16                  IntiFlags;
989167802Sjkim
990167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE;
991167802Sjkim
992197104Sjkim
993167802Sjkim/* 3: NMI Source */
994167802Sjkim
995167802Sjkimtypedef struct acpi_madt_nmi_source
996167802Sjkim{
997167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
998167802Sjkim    UINT16                  IntiFlags;
999167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
1000167802Sjkim
1001167802Sjkim} ACPI_MADT_NMI_SOURCE;
1002167802Sjkim
1003197104Sjkim
1004167802Sjkim/* 4: Local APIC NMI */
1005167802Sjkim
1006167802Sjkimtypedef struct acpi_madt_local_apic_nmi
1007167802Sjkim{
1008167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1009167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
1010167802Sjkim    UINT16                  IntiFlags;
1011167802Sjkim    UINT8                   Lint;               /* LINTn to which NMI is connected */
1012167802Sjkim
1013167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI;
1014167802Sjkim
1015197104Sjkim
1016167802Sjkim/* 5: Address Override */
1017167802Sjkim
1018167802Sjkimtypedef struct acpi_madt_local_apic_override
1019167802Sjkim{
1020167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1021167802Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1022167802Sjkim    UINT64                  Address;            /* APIC physical address */
1023167802Sjkim
1024167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE;
1025167802Sjkim
1026197104Sjkim
1027167802Sjkim/* 6: I/O Sapic */
1028167802Sjkim
1029167802Sjkimtypedef struct acpi_madt_io_sapic
1030167802Sjkim{
1031167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1032167802Sjkim    UINT8                   Id;                 /* I/O SAPIC ID */
1033167802Sjkim    UINT8                   Reserved;           /* Reserved, must be zero */
1034167802Sjkim    UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
1035167802Sjkim    UINT64                  Address;            /* SAPIC physical address */
1036167802Sjkim
1037167802Sjkim} ACPI_MADT_IO_SAPIC;
1038167802Sjkim
1039197104Sjkim
1040167802Sjkim/* 7: Local Sapic */
1041167802Sjkim
1042167802Sjkimtypedef struct acpi_madt_local_sapic
1043167802Sjkim{
1044167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1045167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
1046167802Sjkim    UINT8                   Id;                 /* SAPIC ID */
1047167802Sjkim    UINT8                   Eid;                /* SAPIC EID */
1048167802Sjkim    UINT8                   Reserved[3];        /* Reserved, must be zero */
1049167802Sjkim    UINT32                  LapicFlags;
1050167802Sjkim    UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
1051167802Sjkim    char                    UidString[1];       /* String UID  - ACPI 3.0 */
1052167802Sjkim
1053167802Sjkim} ACPI_MADT_LOCAL_SAPIC;
1054167802Sjkim
1055197104Sjkim
1056167802Sjkim/* 8: Platform Interrupt Source */
1057167802Sjkim
1058167802Sjkimtypedef struct acpi_madt_interrupt_source
1059167802Sjkim{
1060167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1061167802Sjkim    UINT16                  IntiFlags;
1062167802Sjkim    UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
1063167802Sjkim    UINT8                   Id;                 /* Processor ID */
1064167802Sjkim    UINT8                   Eid;                /* Processor EID */
1065167802Sjkim    UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
1066167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
1067167802Sjkim    UINT32                  Flags;              /* Interrupt Source Flags */
1068167802Sjkim
1069167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE;
1070167802Sjkim
1071197104Sjkim/* Masks for Flags field above */
1072167802Sjkim
1073167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE     (1)
1074167802Sjkim
1075167802Sjkim
1076197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */
1077197104Sjkim
1078193267Sjkimtypedef struct acpi_madt_local_x2apic
1079193267Sjkim{
1080193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
1081193267Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
1082193267Sjkim    UINT32                  LocalApicId;        /* Processor x2APIC ID  */
1083193267Sjkim    UINT32                  LapicFlags;
1084193267Sjkim    UINT32                  Uid;                /* ACPI processor UID */
1085193267Sjkim
1086193267Sjkim} ACPI_MADT_LOCAL_X2APIC;
1087193267Sjkim
1088193267Sjkim
1089197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */
1090197104Sjkim
1091193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi
1092193267Sjkim{
1093193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
1094193267Sjkim    UINT16                  IntiFlags;
1095193267Sjkim    UINT32                  Uid;                /* ACPI processor UID */
1096193267Sjkim    UINT8                   Lint;               /* LINTn to which NMI is connected */
1097193267Sjkim    UINT8                   Reserved[3];        /* Reserved - must be zero */
1098193267Sjkim
1099193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI;
1100193267Sjkim
1101193267Sjkim
1102283092Sjkim/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */
1103228110Sjkim
1104228110Sjkimtypedef struct acpi_madt_generic_interrupt
1105228110Sjkim{
1106228110Sjkim    ACPI_SUBTABLE_HEADER    Header;
1107228110Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
1108272444Sjkim    UINT32                  CpuInterfaceNumber;
1109228110Sjkim    UINT32                  Uid;
1110228110Sjkim    UINT32                  Flags;
1111228110Sjkim    UINT32                  ParkingVersion;
1112228110Sjkim    UINT32                  PerformanceInterrupt;
1113228110Sjkim    UINT64                  ParkedAddress;
1114228110Sjkim    UINT64                  BaseAddress;
1115272444Sjkim    UINT64                  GicvBaseAddress;
1116272444Sjkim    UINT64                  GichBaseAddress;
1117272444Sjkim    UINT32                  VgicInterrupt;
1118272444Sjkim    UINT64                  GicrBaseAddress;
1119272444Sjkim    UINT64                  ArmMpidr;
1120283092Sjkim    UINT8                   EfficiencyClass;
1121283092Sjkim    UINT8                   Reserved2[3];
1122228110Sjkim
1123228110Sjkim} ACPI_MADT_GENERIC_INTERRUPT;
1124228110Sjkim
1125272444Sjkim/* Masks for Flags field above */
1126228110Sjkim
1127272444Sjkim/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
1128272444Sjkim#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
1129272444Sjkim#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
1130272444Sjkim
1131272444Sjkim
1132283092Sjkim/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
1133228110Sjkim
1134228110Sjkimtypedef struct acpi_madt_generic_distributor
1135228110Sjkim{
1136228110Sjkim    ACPI_SUBTABLE_HEADER    Header;
1137228110Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
1138228110Sjkim    UINT32                  GicId;
1139228110Sjkim    UINT64                  BaseAddress;
1140228110Sjkim    UINT32                  GlobalIrqBase;
1141283092Sjkim    UINT8                   Version;
1142284583Sjkim    UINT8                   Reserved2[3];       /* Reserved - must be zero */
1143228110Sjkim
1144228110Sjkim} ACPI_MADT_GENERIC_DISTRIBUTOR;
1145228110Sjkim
1146284583Sjkim/* Values for Version field above */
1147228110Sjkim
1148284583Sjkimenum AcpiMadtGicVersion
1149284583Sjkim{
1150284583Sjkim    ACPI_MADT_GIC_VERSION_NONE          = 0,
1151284583Sjkim    ACPI_MADT_GIC_VERSION_V1            = 1,
1152284583Sjkim    ACPI_MADT_GIC_VERSION_V2            = 2,
1153284583Sjkim    ACPI_MADT_GIC_VERSION_V3            = 3,
1154284583Sjkim    ACPI_MADT_GIC_VERSION_V4            = 4,
1155284583Sjkim    ACPI_MADT_GIC_VERSION_RESERVED      = 5     /* 5 and greater are reserved */
1156284583Sjkim};
1157284583Sjkim
1158284583Sjkim
1159272444Sjkim/* 13: Generic MSI Frame (ACPI 5.1) */
1160272444Sjkim
1161272444Sjkimtypedef struct acpi_madt_generic_msi_frame
1162272444Sjkim{
1163272444Sjkim    ACPI_SUBTABLE_HEADER    Header;
1164272444Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
1165272444Sjkim    UINT32                  MsiFrameId;
1166272444Sjkim    UINT64                  BaseAddress;
1167272444Sjkim    UINT32                  Flags;
1168272444Sjkim    UINT16                  SpiCount;
1169272444Sjkim    UINT16                  SpiBase;
1170272444Sjkim
1171272444Sjkim} ACPI_MADT_GENERIC_MSI_FRAME;
1172272444Sjkim
1173272444Sjkim/* Masks for Flags field above */
1174272444Sjkim
1175272444Sjkim#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
1176272444Sjkim
1177272444Sjkim
1178272444Sjkim/* 14: Generic Redistributor (ACPI 5.1) */
1179272444Sjkim
1180272444Sjkimtypedef struct acpi_madt_generic_redistributor
1181272444Sjkim{
1182272444Sjkim    ACPI_SUBTABLE_HEADER    Header;
1183272444Sjkim    UINT16                  Reserved;           /* reserved - must be zero */
1184272444Sjkim    UINT64                  BaseAddress;
1185272444Sjkim    UINT32                  Length;
1186272444Sjkim
1187272444Sjkim} ACPI_MADT_GENERIC_REDISTRIBUTOR;
1188272444Sjkim
1189272444Sjkim
1190283092Sjkim/* 15: Generic Translator (ACPI 6.0) */
1191283092Sjkim
1192283092Sjkimtypedef struct acpi_madt_generic_translator
1193283092Sjkim{
1194283092Sjkim    ACPI_SUBTABLE_HEADER    Header;
1195283092Sjkim    UINT16                  Reserved;           /* reserved - must be zero */
1196283092Sjkim    UINT32                  TranslationId;
1197283092Sjkim    UINT64                  BaseAddress;
1198283092Sjkim    UINT32                  Reserved2;
1199283092Sjkim
1200283092Sjkim} ACPI_MADT_GENERIC_TRANSLATOR;
1201283092Sjkim
1202283092Sjkim
1203167802Sjkim/*
1204167802Sjkim * Common flags fields for MADT subtables
1205167802Sjkim */
1206167802Sjkim
1207272444Sjkim/* MADT Local APIC flags */
1208167802Sjkim
1209167802Sjkim#define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
1210167802Sjkim
1211167802Sjkim/* MADT MPS INTI flags (IntiFlags) */
1212167802Sjkim
1213167802Sjkim#define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
1214167802Sjkim#define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
1215167802Sjkim
1216167802Sjkim/* Values for MPS INTI flags */
1217167802Sjkim
1218167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS       0
1219167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
1220167802Sjkim#define ACPI_MADT_POLARITY_RESERVED       2
1221167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW     3
1222167802Sjkim
1223167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS        (0)
1224167802Sjkim#define ACPI_MADT_TRIGGER_EDGE            (1<<2)
1225167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
1226167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
1227167802Sjkim
1228167802Sjkim
1229167802Sjkim/*******************************************************************************
1230167802Sjkim *
1231197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0)
1232197104Sjkim *        Version 1
1233167802Sjkim *
1234167802Sjkim ******************************************************************************/
1235167802Sjkim
1236197104Sjkimtypedef struct acpi_table_msct
1237167802Sjkim{
1238167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1239197104Sjkim    UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
1240197104Sjkim    UINT32                  MaxProximityDomains;/* Max number of proximity domains */
1241197104Sjkim    UINT32                  MaxClockDomains;    /* Max number of clock domains */
1242197104Sjkim    UINT64                  MaxAddress;         /* Max physical address in system */
1243167802Sjkim
1244197104Sjkim} ACPI_TABLE_MSCT;
1245167802Sjkim
1246167802Sjkim
1247197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */
1248167802Sjkim
1249197104Sjkimtypedef struct acpi_msct_proximity
1250167802Sjkim{
1251197104Sjkim    UINT8                   Revision;
1252197104Sjkim    UINT8                   Length;
1253197104Sjkim    UINT32                  RangeStart;         /* Start of domain range */
1254197104Sjkim    UINT32                  RangeEnd;           /* End of domain range */
1255197104Sjkim    UINT32                  ProcessorCapacity;
1256197104Sjkim    UINT64                  MemoryCapacity;     /* In bytes */
1257167802Sjkim
1258197104Sjkim} ACPI_MSCT_PROXIMITY;
1259167802Sjkim
1260167802Sjkim
1261167802Sjkim/*******************************************************************************
1262167802Sjkim *
1263298714Sjkim * NFIT - NVDIMM Interface Table (ACPI 6.0+)
1264283092Sjkim *        Version 1
1265283092Sjkim *
1266283092Sjkim ******************************************************************************/
1267283092Sjkim
1268283092Sjkimtypedef struct acpi_table_nfit
1269283092Sjkim{
1270283092Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1271283092Sjkim    UINT32                  Reserved;           /* Reserved, must be zero */
1272283092Sjkim
1273283092Sjkim} ACPI_TABLE_NFIT;
1274283092Sjkim
1275283092Sjkim/* Subtable header for NFIT */
1276283092Sjkim
1277283092Sjkimtypedef struct acpi_nfit_header
1278283092Sjkim{
1279283092Sjkim    UINT16                   Type;
1280283092Sjkim    UINT16                   Length;
1281283092Sjkim
1282283092Sjkim} ACPI_NFIT_HEADER;
1283283092Sjkim
1284283092Sjkim
1285283092Sjkim/* Values for subtable type in ACPI_NFIT_HEADER */
1286283092Sjkim
1287283092Sjkimenum AcpiNfitType
1288283092Sjkim{
1289283092Sjkim    ACPI_NFIT_TYPE_SYSTEM_ADDRESS       = 0,
1290283092Sjkim    ACPI_NFIT_TYPE_MEMORY_MAP           = 1,
1291283092Sjkim    ACPI_NFIT_TYPE_INTERLEAVE           = 2,
1292283092Sjkim    ACPI_NFIT_TYPE_SMBIOS               = 3,
1293283092Sjkim    ACPI_NFIT_TYPE_CONTROL_REGION       = 4,
1294283092Sjkim    ACPI_NFIT_TYPE_DATA_REGION          = 5,
1295283092Sjkim    ACPI_NFIT_TYPE_FLUSH_ADDRESS        = 6,
1296283092Sjkim    ACPI_NFIT_TYPE_RESERVED             = 7     /* 7 and greater are reserved */
1297283092Sjkim};
1298283092Sjkim
1299283092Sjkim/*
1300283092Sjkim * NFIT Subtables
1301283092Sjkim */
1302283092Sjkim
1303283092Sjkim/* 0: System Physical Address Range Structure */
1304283092Sjkim
1305283092Sjkimtypedef struct acpi_nfit_system_address
1306283092Sjkim{
1307283092Sjkim    ACPI_NFIT_HEADER        Header;
1308283092Sjkim    UINT16                  RangeIndex;
1309283092Sjkim    UINT16                  Flags;
1310283092Sjkim    UINT32                  Reserved;           /* Reseved, must be zero */
1311283092Sjkim    UINT32                  ProximityDomain;
1312283092Sjkim    UINT8                   RangeGuid[16];
1313283092Sjkim    UINT64                  Address;
1314283092Sjkim    UINT64                  Length;
1315283092Sjkim    UINT64                  MemoryMapping;
1316283092Sjkim
1317283092Sjkim} ACPI_NFIT_SYSTEM_ADDRESS;
1318283092Sjkim
1319283092Sjkim/* Flags */
1320283092Sjkim
1321283092Sjkim#define ACPI_NFIT_ADD_ONLINE_ONLY       (1)     /* 00: Add/Online Operation Only */
1322283092Sjkim#define ACPI_NFIT_PROXIMITY_VALID       (1<<1)  /* 01: Proximity Domain Valid */
1323283092Sjkim
1324283092Sjkim/* Range Type GUIDs appear in the include/acuuid.h file */
1325283092Sjkim
1326283092Sjkim
1327283092Sjkim/* 1: Memory Device to System Address Range Map Structure */
1328283092Sjkim
1329283092Sjkimtypedef struct acpi_nfit_memory_map
1330283092Sjkim{
1331283092Sjkim    ACPI_NFIT_HEADER        Header;
1332283092Sjkim    UINT32                  DeviceHandle;
1333283092Sjkim    UINT16                  PhysicalId;
1334283092Sjkim    UINT16                  RegionId;
1335283092Sjkim    UINT16                  RangeIndex;
1336283092Sjkim    UINT16                  RegionIndex;
1337283092Sjkim    UINT64                  RegionSize;
1338283092Sjkim    UINT64                  RegionOffset;
1339283092Sjkim    UINT64                  Address;
1340283092Sjkim    UINT16                  InterleaveIndex;
1341283092Sjkim    UINT16                  InterleaveWays;
1342283092Sjkim    UINT16                  Flags;
1343283092Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1344283092Sjkim
1345283092Sjkim} ACPI_NFIT_MEMORY_MAP;
1346283092Sjkim
1347283092Sjkim/* Flags */
1348283092Sjkim
1349283092Sjkim#define ACPI_NFIT_MEM_SAVE_FAILED       (1)     /* 00: Last SAVE to Memory Device failed */
1350283092Sjkim#define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)  /* 01: Last RESTORE from Memory Device failed */
1351283092Sjkim#define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)  /* 02: Platform flush failed */
1352298714Sjkim#define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)  /* 03: Memory Device is not armed */
1353283092Sjkim#define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)  /* 04: Memory Device observed SMART/health events */
1354283092Sjkim#define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)  /* 05: SMART/health events enabled */
1355298714Sjkim#define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)  /* 06: Mapping to SPA failed */
1356283092Sjkim
1357283092Sjkim
1358283092Sjkim/* 2: Interleave Structure */
1359283092Sjkim
1360283092Sjkimtypedef struct acpi_nfit_interleave
1361283092Sjkim{
1362283092Sjkim    ACPI_NFIT_HEADER        Header;
1363283092Sjkim    UINT16                  InterleaveIndex;
1364283092Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1365283092Sjkim    UINT32                  LineCount;
1366283092Sjkim    UINT32                  LineSize;
1367283092Sjkim    UINT32                  LineOffset[1];      /* Variable length */
1368283092Sjkim
1369283092Sjkim} ACPI_NFIT_INTERLEAVE;
1370283092Sjkim
1371283092Sjkim
1372283092Sjkim/* 3: SMBIOS Management Information Structure */
1373283092Sjkim
1374283092Sjkimtypedef struct acpi_nfit_smbios
1375283092Sjkim{
1376283092Sjkim    ACPI_NFIT_HEADER        Header;
1377283092Sjkim    UINT32                  Reserved;           /* Reserved, must be zero */
1378283092Sjkim    UINT8                   Data[1];            /* Variable length */
1379283092Sjkim
1380283092Sjkim} ACPI_NFIT_SMBIOS;
1381283092Sjkim
1382283092Sjkim
1383283092Sjkim/* 4: NVDIMM Control Region Structure */
1384283092Sjkim
1385283092Sjkimtypedef struct acpi_nfit_control_region
1386283092Sjkim{
1387283092Sjkim    ACPI_NFIT_HEADER        Header;
1388283092Sjkim    UINT16                  RegionIndex;
1389283092Sjkim    UINT16                  VendorId;
1390283092Sjkim    UINT16                  DeviceId;
1391283092Sjkim    UINT16                  RevisionId;
1392283092Sjkim    UINT16                  SubsystemVendorId;
1393283092Sjkim    UINT16                  SubsystemDeviceId;
1394283092Sjkim    UINT16                  SubsystemRevisionId;
1395298714Sjkim    UINT8                   ValidFields;
1396298714Sjkim    UINT8                   ManufacturingLocation;
1397298714Sjkim    UINT16                  ManufacturingDate;
1398298714Sjkim    UINT8                   Reserved[2];        /* Reserved, must be zero */
1399283092Sjkim    UINT32                  SerialNumber;
1400283092Sjkim    UINT16                  Code;
1401283092Sjkim    UINT16                  Windows;
1402283092Sjkim    UINT64                  WindowSize;
1403283092Sjkim    UINT64                  CommandOffset;
1404283092Sjkim    UINT64                  CommandSize;
1405283092Sjkim    UINT64                  StatusOffset;
1406283092Sjkim    UINT64                  StatusSize;
1407283092Sjkim    UINT16                  Flags;
1408283092Sjkim    UINT8                   Reserved1[6];       /* Reserved, must be zero */
1409283092Sjkim
1410283092Sjkim} ACPI_NFIT_CONTROL_REGION;
1411283092Sjkim
1412283092Sjkim/* Flags */
1413283092Sjkim
1414298714Sjkim#define ACPI_NFIT_CONTROL_BUFFERED          (1)     /* Block Data Windows implementation is buffered */
1415283092Sjkim
1416298714Sjkim/* ValidFields bits */
1417283092Sjkim
1418298714Sjkim#define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)     /* Manufacturing fields are valid */
1419298714Sjkim
1420298714Sjkim
1421283092Sjkim/* 5: NVDIMM Block Data Window Region Structure */
1422283092Sjkim
1423283092Sjkimtypedef struct acpi_nfit_data_region
1424283092Sjkim{
1425283092Sjkim    ACPI_NFIT_HEADER        Header;
1426283092Sjkim    UINT16                  RegionIndex;
1427283092Sjkim    UINT16                  Windows;
1428283092Sjkim    UINT64                  Offset;
1429283092Sjkim    UINT64                  Size;
1430283092Sjkim    UINT64                  Capacity;
1431283092Sjkim    UINT64                  StartAddress;
1432283092Sjkim
1433283092Sjkim} ACPI_NFIT_DATA_REGION;
1434283092Sjkim
1435283092Sjkim
1436283092Sjkim/* 6: Flush Hint Address Structure */
1437283092Sjkim
1438283092Sjkimtypedef struct acpi_nfit_flush_address
1439283092Sjkim{
1440283092Sjkim    ACPI_NFIT_HEADER        Header;
1441283092Sjkim    UINT32                  DeviceHandle;
1442283092Sjkim    UINT16                  HintCount;
1443283092Sjkim    UINT8                   Reserved[6];        /* Reserved, must be zero */
1444283092Sjkim    UINT64                  HintAddress[1];     /* Variable length */
1445283092Sjkim
1446283092Sjkim} ACPI_NFIT_FLUSH_ADDRESS;
1447283092Sjkim
1448283092Sjkim
1449283092Sjkim/*******************************************************************************
1450283092Sjkim *
1451167802Sjkim * SBST - Smart Battery Specification Table
1452197104Sjkim *        Version 1
1453167802Sjkim *
1454167802Sjkim ******************************************************************************/
1455167802Sjkim
1456167802Sjkimtypedef struct acpi_table_sbst
1457167802Sjkim{
1458167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1459167802Sjkim    UINT32                  WarningLevel;
1460167802Sjkim    UINT32                  LowLevel;
1461167802Sjkim    UINT32                  CriticalLevel;
1462167802Sjkim
1463167802Sjkim} ACPI_TABLE_SBST;
1464167802Sjkim
1465167802Sjkim
1466167802Sjkim/*******************************************************************************
1467167802Sjkim *
1468167802Sjkim * SLIT - System Locality Distance Information Table
1469197104Sjkim *        Version 1
1470167802Sjkim *
1471167802Sjkim ******************************************************************************/
1472167802Sjkim
1473167802Sjkimtypedef struct acpi_table_slit
1474167802Sjkim{
1475167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1476167802Sjkim    UINT64                  LocalityCount;
1477167802Sjkim    UINT8                   Entry[1];           /* Real size = localities^2 */
1478167802Sjkim
1479167802Sjkim} ACPI_TABLE_SLIT;
1480167802Sjkim
1481167802Sjkim
1482167802Sjkim/*******************************************************************************
1483167802Sjkim *
1484167802Sjkim * SRAT - System Resource Affinity Table
1485197104Sjkim *        Version 3
1486167802Sjkim *
1487167802Sjkim ******************************************************************************/
1488167802Sjkim
1489167802Sjkimtypedef struct acpi_table_srat
1490167802Sjkim{
1491167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1492167802Sjkim    UINT32                  TableRevision;      /* Must be value '1' */
1493167802Sjkim    UINT64                  Reserved;           /* Reserved, must be zero */
1494167802Sjkim
1495167802Sjkim} ACPI_TABLE_SRAT;
1496167802Sjkim
1497167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */
1498167802Sjkim
1499167802Sjkimenum AcpiSratType
1500167802Sjkim{
1501193267Sjkim    ACPI_SRAT_TYPE_CPU_AFFINITY         = 0,
1502193267Sjkim    ACPI_SRAT_TYPE_MEMORY_AFFINITY      = 1,
1503193267Sjkim    ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY  = 2,
1504272444Sjkim    ACPI_SRAT_TYPE_GICC_AFFINITY        = 3,
1505272444Sjkim    ACPI_SRAT_TYPE_RESERVED             = 4     /* 4 and greater are reserved */
1506167802Sjkim};
1507167802Sjkim
1508193267Sjkim/*
1509272444Sjkim * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
1510193267Sjkim */
1511167802Sjkim
1512193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */
1513193267Sjkim
1514167802Sjkimtypedef struct acpi_srat_cpu_affinity
1515167802Sjkim{
1516167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1517167802Sjkim    UINT8                   ProximityDomainLo;
1518167802Sjkim    UINT8                   ApicId;
1519167802Sjkim    UINT32                  Flags;
1520167802Sjkim    UINT8                   LocalSapicEid;
1521167802Sjkim    UINT8                   ProximityDomainHi[3];
1522272444Sjkim    UINT32                  ClockDomain;
1523167802Sjkim
1524167802Sjkim} ACPI_SRAT_CPU_AFFINITY;
1525167802Sjkim
1526197104Sjkim/* Flags */
1527197104Sjkim
1528197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY  (1)         /* 00: Use affinity structure */
1529197104Sjkim
1530197104Sjkim
1531193267Sjkim/* 1: Memory Affinity */
1532167802Sjkim
1533167802Sjkimtypedef struct acpi_srat_mem_affinity
1534167802Sjkim{
1535167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1536167802Sjkim    UINT32                  ProximityDomain;
1537167802Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1538167802Sjkim    UINT64                  BaseAddress;
1539167802Sjkim    UINT64                  Length;
1540193267Sjkim    UINT32                  Reserved1;
1541167802Sjkim    UINT32                  Flags;
1542193267Sjkim    UINT64                  Reserved2;          /* Reserved, must be zero */
1543167802Sjkim
1544167802Sjkim} ACPI_SRAT_MEM_AFFINITY;
1545167802Sjkim
1546167802Sjkim/* Flags */
1547167802Sjkim
1548167802Sjkim#define ACPI_SRAT_MEM_ENABLED       (1)         /* 00: Use affinity structure */
1549167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)      /* 01: Memory region is hot pluggable */
1550167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)      /* 02: Memory region is non-volatile */
1551167802Sjkim
1552167802Sjkim
1553197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
1554197104Sjkim
1555193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity
1556167802Sjkim{
1557193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
1558193267Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1559193267Sjkim    UINT32                  ProximityDomain;
1560193267Sjkim    UINT32                  ApicId;
1561193267Sjkim    UINT32                  Flags;
1562197104Sjkim    UINT32                  ClockDomain;
1563197104Sjkim    UINT32                  Reserved2;
1564167802Sjkim
1565193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY;
1566167802Sjkim
1567193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
1568193267Sjkim
1569193267Sjkim#define ACPI_SRAT_CPU_ENABLED       (1)         /* 00: Use affinity structure */
1570193267Sjkim
1571193267Sjkim
1572272444Sjkim/* 3: GICC Affinity (ACPI 5.1) */
1573272444Sjkim
1574272444Sjkimtypedef struct acpi_srat_gicc_affinity
1575272444Sjkim{
1576272444Sjkim    ACPI_SUBTABLE_HEADER    Header;
1577272444Sjkim    UINT32                  ProximityDomain;
1578272444Sjkim    UINT32                  AcpiProcessorUid;
1579272444Sjkim    UINT32                  Flags;
1580272444Sjkim    UINT32                  ClockDomain;
1581272444Sjkim
1582272444Sjkim} ACPI_SRAT_GICC_AFFINITY;
1583272444Sjkim
1584272444Sjkim/* Flags for ACPI_SRAT_GICC_AFFINITY */
1585272444Sjkim
1586272444Sjkim#define ACPI_SRAT_GICC_ENABLED     (1)         /* 00: Use affinity structure */
1587272444Sjkim
1588283092Sjkim
1589167802Sjkim/* Reset to default packing */
1590167802Sjkim
159169450Smsmith#pragma pack()
159269450Smsmith
159369450Smsmith#endif /* __ACTBL1_H__ */
1594