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 */
178322877Sjkim#define ACPI_SIG_HMAT           "HMAT"      /* Heterogeneous Memory Attributes Table */
179193267Sjkim#define ACPI_SIG_HEST           "HEST"      /* Hardware Error Source Table */
180167802Sjkim#define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
181197104Sjkim#define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table */
182327557Sjkim#define ACPI_SIG_PDTT           "PDTT"      /* Platform Debug Trigger Table */
183322877Sjkim#define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
184167802Sjkim#define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
185327557Sjkim#define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
186167802Sjkim#define ACPI_SIG_SLIT           "SLIT"      /* System Locality Distance Information Table */
187167802Sjkim#define ACPI_SIG_SRAT           "SRAT"      /* System Resource Affinity Table */
188283092Sjkim#define ACPI_SIG_NFIT           "NFIT"      /* NVDIMM Firmware Interface Table */
189167802Sjkim
190167802Sjkim
191167802Sjkim/*
192167802Sjkim * All tables must be byte-packed to match the ACPI specification, since
193167802Sjkim * the tables are provided by the system BIOS.
194167802Sjkim */
19569450Smsmith#pragma pack(1)
19669450Smsmith
19791116Smsmith/*
198239340Sjkim * Note: C bitfields are not used for this reason:
199239340Sjkim *
200239340Sjkim * "Bitfields are great and easy to read, but unfortunately the C language
201239340Sjkim * does not specify the layout of bitfields in memory, which means they are
202239340Sjkim * essentially useless for dealing with packed data in on-disk formats or
203239340Sjkim * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
204239340Sjkim * this decision was a design error in C. Ritchie could have picked an order
205239340Sjkim * and stuck with it." Norman Ramsey.
206239340Sjkim * See http://stackoverflow.com/a/1053662/41661
20791116Smsmith */
208167802Sjkim
209167802Sjkim
210197104Sjkim/*******************************************************************************
211197104Sjkim *
212197104Sjkim * Common subtable headers
213197104Sjkim *
214197104Sjkim ******************************************************************************/
215167802Sjkim
216197104Sjkim/* Generic subtable header (used in MADT, SRAT, etc.) */
217197104Sjkim
218167802Sjkimtypedef struct acpi_subtable_header
21969450Smsmith{
220167802Sjkim    UINT8                   Type;
221167802Sjkim    UINT8                   Length;
222151937Sjkim
223167802Sjkim} ACPI_SUBTABLE_HEADER;
22469450Smsmith
22569450Smsmith
226197104Sjkim/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
227193267Sjkim
228193267Sjkimtypedef struct acpi_whea_header
229193267Sjkim{
230193267Sjkim    UINT8                   Action;
231193267Sjkim    UINT8                   Instruction;
232193267Sjkim    UINT8                   Flags;
233193267Sjkim    UINT8                   Reserved;
234193267Sjkim    ACPI_GENERIC_ADDRESS    RegisterRegion;
235193267Sjkim    UINT64                  Value;              /* Value used with Read/Write register */
236193267Sjkim    UINT64                  Mask;               /* Bitmask required for this register instruction */
237193267Sjkim
238193267Sjkim} ACPI_WHEA_HEADER;
239193267Sjkim
240193267Sjkim
241167802Sjkim/*******************************************************************************
242167802Sjkim *
243197104Sjkim * BERT - Boot Error Record Table (ACPI 4.0)
244197104Sjkim *        Version 1
245167802Sjkim *
246167802Sjkim ******************************************************************************/
247167802Sjkim
248193267Sjkimtypedef struct acpi_table_bert
249193267Sjkim{
250193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
251193267Sjkim    UINT32                  RegionLength;       /* Length of the boot error region */
252238381Sjkim    UINT64                  Address;            /* Physical address of the error region */
253193267Sjkim
254193267Sjkim} ACPI_TABLE_BERT;
255193267Sjkim
256193267Sjkim
257197104Sjkim/* Boot Error Region (not a subtable, pointed to by Address field above) */
258193267Sjkim
259193267Sjkimtypedef struct acpi_bert_region
260193267Sjkim{
261197104Sjkim    UINT32                  BlockStatus;        /* Type of error information */
262197104Sjkim    UINT32                  RawDataOffset;      /* Offset to raw error data */
263197104Sjkim    UINT32                  RawDataLength;      /* Length of raw error data */
264197104Sjkim    UINT32                  DataLength;         /* Length of generic error data */
265197104Sjkim    UINT32                  ErrorSeverity;      /* Severity code */
266193267Sjkim
267193267Sjkim} ACPI_BERT_REGION;
268193267Sjkim
269197104Sjkim/* Values for BlockStatus flags above */
270193267Sjkim
271193267Sjkim#define ACPI_BERT_UNCORRECTABLE             (1)
272197104Sjkim#define ACPI_BERT_CORRECTABLE               (1<<1)
273197104Sjkim#define ACPI_BERT_MULTIPLE_UNCORRECTABLE    (1<<2)
274197104Sjkim#define ACPI_BERT_MULTIPLE_CORRECTABLE      (1<<3)
275197104Sjkim#define ACPI_BERT_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
276193267Sjkim
277197104Sjkim/* Values for ErrorSeverity above */
278193267Sjkim
279197104Sjkimenum AcpiBertErrorSeverity
280167802Sjkim{
281197104Sjkim    ACPI_BERT_ERROR_CORRECTABLE     = 0,
282197104Sjkim    ACPI_BERT_ERROR_FATAL           = 1,
283197104Sjkim    ACPI_BERT_ERROR_CORRECTED       = 2,
284197104Sjkim    ACPI_BERT_ERROR_NONE            = 3,
285197104Sjkim    ACPI_BERT_ERROR_RESERVED        = 4     /* 4 and greater are reserved */
286197104Sjkim};
287167802Sjkim
288197104Sjkim/*
289197104Sjkim * Note: The generic error data that follows the ErrorSeverity field above
290197104Sjkim * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below
291197104Sjkim */
292167802Sjkim
293167802Sjkim
294167802Sjkim/*******************************************************************************
295167802Sjkim *
296197104Sjkim * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
297197104Sjkim *        Version 1
298167802Sjkim *
299167802Sjkim ******************************************************************************/
300167802Sjkim
301167802Sjkimtypedef struct acpi_table_cpep
302167802Sjkim{
303167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
304167802Sjkim    UINT64                  Reserved;
305167802Sjkim
306167802Sjkim} ACPI_TABLE_CPEP;
307167802Sjkim
308167802Sjkim
309167802Sjkim/* Subtable */
310167802Sjkim
311167802Sjkimtypedef struct acpi_cpep_polling
312167802Sjkim{
313197104Sjkim    ACPI_SUBTABLE_HEADER    Header;
314167802Sjkim    UINT8                   Id;                 /* Processor ID */
315167802Sjkim    UINT8                   Eid;                /* Processor EID */
316167802Sjkim    UINT32                  Interval;           /* Polling interval (msec) */
317167802Sjkim
318167802Sjkim} ACPI_CPEP_POLLING;
319167802Sjkim
320167802Sjkim
321167802Sjkim/*******************************************************************************
322167802Sjkim *
323167802Sjkim * ECDT - Embedded Controller Boot Resources Table
324197104Sjkim *        Version 1
325167802Sjkim *
326167802Sjkim ******************************************************************************/
327167802Sjkim
328167802Sjkimtypedef struct acpi_table_ecdt
329167802Sjkim{
330167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
331167802Sjkim    ACPI_GENERIC_ADDRESS    Control;            /* Address of EC command/status register */
332167802Sjkim    ACPI_GENERIC_ADDRESS    Data;               /* Address of EC data register */
333167802Sjkim    UINT32                  Uid;                /* Unique ID - must be same as the EC _UID method */
334167802Sjkim    UINT8                   Gpe;                /* The GPE for the EC */
335167802Sjkim    UINT8                   Id[1];              /* Full namepath of the EC in the ACPI namespace */
336167802Sjkim
337167802Sjkim} ACPI_TABLE_ECDT;
338167802Sjkim
339167802Sjkim
340167802Sjkim/*******************************************************************************
341167802Sjkim *
342197104Sjkim * EINJ - Error Injection Table (ACPI 4.0)
343197104Sjkim *        Version 1
344193267Sjkim *
345193267Sjkim ******************************************************************************/
346193267Sjkim
347193267Sjkimtypedef struct acpi_table_einj
348193267Sjkim{
349193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
350193267Sjkim    UINT32                  HeaderLength;
351197104Sjkim    UINT8                   Flags;
352197104Sjkim    UINT8                   Reserved[3];
353193267Sjkim    UINT32                  Entries;
354193267Sjkim
355193267Sjkim} ACPI_TABLE_EINJ;
356193267Sjkim
357197104Sjkim
358193267Sjkim/* EINJ Injection Instruction Entries (actions) */
359193267Sjkim
360193267Sjkimtypedef struct acpi_einj_entry
361193267Sjkim{
362193267Sjkim    ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
363193267Sjkim
364193267Sjkim} ACPI_EINJ_ENTRY;
365193267Sjkim
366197104Sjkim/* Masks for Flags field above */
367197104Sjkim
368197104Sjkim#define ACPI_EINJ_PRESERVE          (1)
369197104Sjkim
370193267Sjkim/* Values for Action field above */
371193267Sjkim
372193267Sjkimenum AcpiEinjActions
373193267Sjkim{
374228110Sjkim    ACPI_EINJ_BEGIN_OPERATION               = 0,
375228110Sjkim    ACPI_EINJ_GET_TRIGGER_TABLE             = 1,
376228110Sjkim    ACPI_EINJ_SET_ERROR_TYPE                = 2,
377228110Sjkim    ACPI_EINJ_GET_ERROR_TYPE                = 3,
378228110Sjkim    ACPI_EINJ_END_OPERATION                 = 4,
379228110Sjkim    ACPI_EINJ_EXECUTE_OPERATION             = 5,
380228110Sjkim    ACPI_EINJ_CHECK_BUSY_STATUS             = 6,
381228110Sjkim    ACPI_EINJ_GET_COMMAND_STATUS            = 7,
382228110Sjkim    ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS   = 8,
383298714Sjkim    ACPI_EINJ_GET_EXECUTE_TIMINGS           = 9,
384298714Sjkim    ACPI_EINJ_ACTION_RESERVED               = 10,    /* 10 and greater are reserved */
385228110Sjkim    ACPI_EINJ_TRIGGER_ERROR                 = 0xFF   /* Except for this value */
386193267Sjkim};
387193267Sjkim
388193267Sjkim/* Values for Instruction field above */
389193267Sjkim
390193267Sjkimenum AcpiEinjInstructions
391193267Sjkim{
392193267Sjkim    ACPI_EINJ_READ_REGISTER         = 0,
393193267Sjkim    ACPI_EINJ_READ_REGISTER_VALUE   = 1,
394193267Sjkim    ACPI_EINJ_WRITE_REGISTER        = 2,
395193267Sjkim    ACPI_EINJ_WRITE_REGISTER_VALUE  = 3,
396193267Sjkim    ACPI_EINJ_NOOP                  = 4,
397228110Sjkim    ACPI_EINJ_FLUSH_CACHELINE       = 5,
398228110Sjkim    ACPI_EINJ_INSTRUCTION_RESERVED  = 6     /* 6 and greater are reserved */
399193267Sjkim};
400193267Sjkim
401228110Sjkimtypedef struct acpi_einj_error_type_with_addr
402228110Sjkim{
403228110Sjkim    UINT32                  ErrorType;
404228110Sjkim    UINT32                  VendorStructOffset;
405228110Sjkim    UINT32                  Flags;
406228110Sjkim    UINT32                  ApicId;
407228110Sjkim    UINT64                  Address;
408228110Sjkim    UINT64                  Range;
409228110Sjkim    UINT32                  PcieId;
410197104Sjkim
411228110Sjkim} ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
412228110Sjkim
413228110Sjkimtypedef struct acpi_einj_vendor
414228110Sjkim{
415228110Sjkim    UINT32                  Length;
416228110Sjkim    UINT32                  PcieId;
417228110Sjkim    UINT16                  VendorId;
418228110Sjkim    UINT16                  DeviceId;
419228110Sjkim    UINT8                   RevisionId;
420228110Sjkim    UINT8                   Reserved[3];
421228110Sjkim
422228110Sjkim} ACPI_EINJ_VENDOR;
423228110Sjkim
424228110Sjkim
425193267Sjkim/* EINJ Trigger Error Action Table */
426193267Sjkim
427193267Sjkimtypedef struct acpi_einj_trigger
428193267Sjkim{
429193267Sjkim    UINT32                  HeaderSize;
430193267Sjkim    UINT32                  Revision;
431193267Sjkim    UINT32                  TableSize;
432193267Sjkim    UINT32                  EntryCount;
433193267Sjkim
434193267Sjkim} ACPI_EINJ_TRIGGER;
435193267Sjkim
436197104Sjkim/* Command status return values */
437193267Sjkim
438197104Sjkimenum AcpiEinjCommandStatus
439197104Sjkim{
440197104Sjkim    ACPI_EINJ_SUCCESS               = 0,
441197104Sjkim    ACPI_EINJ_FAILURE               = 1,
442197104Sjkim    ACPI_EINJ_INVALID_ACCESS        = 2,
443197104Sjkim    ACPI_EINJ_STATUS_RESERVED       = 3     /* 3 and greater are reserved */
444197104Sjkim};
445197104Sjkim
446197104Sjkim
447197104Sjkim/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
448197104Sjkim
449197104Sjkim#define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
450197104Sjkim#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
451197104Sjkim#define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
452197104Sjkim#define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
453197104Sjkim#define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
454197104Sjkim#define ACPI_EINJ_MEMORY_FATAL              (1<<5)
455197104Sjkim#define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
456197104Sjkim#define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
457197104Sjkim#define ACPI_EINJ_PCIX_FATAL                (1<<8)
458197104Sjkim#define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
459197104Sjkim#define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
460197104Sjkim#define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
461228110Sjkim#define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
462197104Sjkim
463197104Sjkim
464193267Sjkim/*******************************************************************************
465193267Sjkim *
466197104Sjkim * ERST - Error Record Serialization Table (ACPI 4.0)
467197104Sjkim *        Version 1
468193267Sjkim *
469193267Sjkim ******************************************************************************/
470193267Sjkim
471193267Sjkimtypedef struct acpi_table_erst
472193267Sjkim{
473193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
474193267Sjkim    UINT32                  HeaderLength;
475193267Sjkim    UINT32                  Reserved;
476193267Sjkim    UINT32                  Entries;
477193267Sjkim
478193267Sjkim} ACPI_TABLE_ERST;
479193267Sjkim
480197104Sjkim
481193267Sjkim/* ERST Serialization Entries (actions) */
482193267Sjkim
483193267Sjkimtypedef struct acpi_erst_entry
484193267Sjkim{
485193267Sjkim    ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
486193267Sjkim
487193267Sjkim} ACPI_ERST_ENTRY;
488193267Sjkim
489197104Sjkim/* Masks for Flags field above */
490197104Sjkim
491197104Sjkim#define ACPI_ERST_PRESERVE          (1)
492197104Sjkim
493193267Sjkim/* Values for Action field above */
494193267Sjkim
495193267Sjkimenum AcpiErstActions
496193267Sjkim{
497197104Sjkim    ACPI_ERST_BEGIN_WRITE           = 0,
498197104Sjkim    ACPI_ERST_BEGIN_READ            = 1,
499197104Sjkim    ACPI_ERST_BEGIN_CLEAR           = 2,
500197104Sjkim    ACPI_ERST_END                   = 3,
501193267Sjkim    ACPI_ERST_SET_RECORD_OFFSET     = 4,
502193267Sjkim    ACPI_ERST_EXECUTE_OPERATION     = 5,
503193267Sjkim    ACPI_ERST_CHECK_BUSY_STATUS     = 6,
504193267Sjkim    ACPI_ERST_GET_COMMAND_STATUS    = 7,
505197104Sjkim    ACPI_ERST_GET_RECORD_ID         = 8,
506197104Sjkim    ACPI_ERST_SET_RECORD_ID         = 9,
507193267Sjkim    ACPI_ERST_GET_RECORD_COUNT      = 10,
508193267Sjkim    ACPI_ERST_BEGIN_DUMMY_WRIITE    = 11,
509193267Sjkim    ACPI_ERST_NOT_USED              = 12,
510193267Sjkim    ACPI_ERST_GET_ERROR_RANGE       = 13,
511193267Sjkim    ACPI_ERST_GET_ERROR_LENGTH      = 14,
512193267Sjkim    ACPI_ERST_GET_ERROR_ATTRIBUTES  = 15,
513298714Sjkim    ACPI_ERST_EXECUTE_TIMINGS       = 16,
514298714Sjkim    ACPI_ERST_ACTION_RESERVED       = 17    /* 17 and greater are reserved */
515193267Sjkim};
516193267Sjkim
517193267Sjkim/* Values for Instruction field above */
518193267Sjkim
519193267Sjkimenum AcpiErstInstructions
520193267Sjkim{
521193267Sjkim    ACPI_ERST_READ_REGISTER         = 0,
522193267Sjkim    ACPI_ERST_READ_REGISTER_VALUE   = 1,
523193267Sjkim    ACPI_ERST_WRITE_REGISTER        = 2,
524193267Sjkim    ACPI_ERST_WRITE_REGISTER_VALUE  = 3,
525193267Sjkim    ACPI_ERST_NOOP                  = 4,
526193267Sjkim    ACPI_ERST_LOAD_VAR1             = 5,
527193267Sjkim    ACPI_ERST_LOAD_VAR2             = 6,
528193267Sjkim    ACPI_ERST_STORE_VAR1            = 7,
529193267Sjkim    ACPI_ERST_ADD                   = 8,
530193267Sjkim    ACPI_ERST_SUBTRACT              = 9,
531193267Sjkim    ACPI_ERST_ADD_VALUE             = 10,
532193267Sjkim    ACPI_ERST_SUBTRACT_VALUE        = 11,
533193267Sjkim    ACPI_ERST_STALL                 = 12,
534193267Sjkim    ACPI_ERST_STALL_WHILE_TRUE      = 13,
535193267Sjkim    ACPI_ERST_SKIP_NEXT_IF_TRUE     = 14,
536193267Sjkim    ACPI_ERST_GOTO                  = 15,
537193267Sjkim    ACPI_ERST_SET_SRC_ADDRESS_BASE  = 16,
538193267Sjkim    ACPI_ERST_SET_DST_ADDRESS_BASE  = 17,
539193267Sjkim    ACPI_ERST_MOVE_DATA             = 18,
540193267Sjkim    ACPI_ERST_INSTRUCTION_RESERVED  = 19    /* 19 and greater are reserved */
541193267Sjkim};
542193267Sjkim
543197104Sjkim/* Command status return values */
544193267Sjkim
545197104Sjkimenum AcpiErstCommandStatus
546197104Sjkim{
547197104Sjkim    ACPI_ERST_SUCESS                = 0,
548197104Sjkim    ACPI_ERST_NO_SPACE              = 1,
549197104Sjkim    ACPI_ERST_NOT_AVAILABLE         = 2,
550197104Sjkim    ACPI_ERST_FAILURE               = 3,
551197104Sjkim    ACPI_ERST_RECORD_EMPTY          = 4,
552197104Sjkim    ACPI_ERST_NOT_FOUND             = 5,
553197104Sjkim    ACPI_ERST_STATUS_RESERVED       = 6     /* 6 and greater are reserved */
554197104Sjkim};
555197104Sjkim
556197104Sjkim
557197104Sjkim/* Error Record Serialization Information */
558197104Sjkim
559197104Sjkimtypedef struct acpi_erst_info
560197104Sjkim{
561197104Sjkim    UINT16                  Signature;          /* Should be "ER" */
562197104Sjkim    UINT8                   Data[48];
563197104Sjkim
564197104Sjkim} ACPI_ERST_INFO;
565197104Sjkim
566197104Sjkim
567193267Sjkim/*******************************************************************************
568193267Sjkim *
569197104Sjkim * HEST - Hardware Error Source Table (ACPI 4.0)
570197104Sjkim *        Version 1
571193267Sjkim *
572193267Sjkim ******************************************************************************/
573193267Sjkim
574193267Sjkimtypedef struct acpi_table_hest
575193267Sjkim{
576193267Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
577193267Sjkim    UINT32                  ErrorSourceCount;
578193267Sjkim
579193267Sjkim} ACPI_TABLE_HEST;
580193267Sjkim
581193267Sjkim
582193267Sjkim/* HEST subtable header */
583193267Sjkim
584193267Sjkimtypedef struct acpi_hest_header
585193267Sjkim{
586193267Sjkim    UINT16                  Type;
587197104Sjkim    UINT16                  SourceId;
588193267Sjkim
589193267Sjkim} ACPI_HEST_HEADER;
590193267Sjkim
591193267Sjkim
592193267Sjkim/* Values for Type field above for subtables */
593193267Sjkim
594193267Sjkimenum AcpiHestTypes
595193267Sjkim{
596197104Sjkim    ACPI_HEST_TYPE_IA32_CHECK           = 0,
597197104Sjkim    ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
598197104Sjkim    ACPI_HEST_TYPE_IA32_NMI             = 2,
599197104Sjkim    ACPI_HEST_TYPE_NOT_USED3            = 3,
600197104Sjkim    ACPI_HEST_TYPE_NOT_USED4            = 4,
601197104Sjkim    ACPI_HEST_TYPE_NOT_USED5            = 5,
602197104Sjkim    ACPI_HEST_TYPE_AER_ROOT_PORT        = 6,
603197104Sjkim    ACPI_HEST_TYPE_AER_ENDPOINT         = 7,
604197104Sjkim    ACPI_HEST_TYPE_AER_BRIDGE           = 8,
605197104Sjkim    ACPI_HEST_TYPE_GENERIC_ERROR        = 9,
606298714Sjkim    ACPI_HEST_TYPE_GENERIC_ERROR_V2     = 10,
607322877Sjkim    ACPI_HEST_TYPE_IA32_DEFERRED_CHECK  = 11,
608322877Sjkim    ACPI_HEST_TYPE_RESERVED             = 12    /* 12 and greater are reserved */
609193267Sjkim};
610193267Sjkim
611193267Sjkim
612193267Sjkim/*
613197104Sjkim * HEST substructures contained in subtables
614193267Sjkim */
615193267Sjkim
616197104Sjkim/*
617197104Sjkim * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
618197104Sjkim * ACPI_HEST_IA_CORRECTED structures.
619197104Sjkim */
620197104Sjkimtypedef struct acpi_hest_ia_error_bank
621193267Sjkim{
622193267Sjkim    UINT8                   BankNumber;
623193267Sjkim    UINT8                   ClearStatusOnInit;
624193267Sjkim    UINT8                   StatusFormat;
625197104Sjkim    UINT8                   Reserved;
626193267Sjkim    UINT32                  ControlRegister;
627197104Sjkim    UINT64                  ControlData;
628193267Sjkim    UINT32                  StatusRegister;
629193267Sjkim    UINT32                  AddressRegister;
630193267Sjkim    UINT32                  MiscRegister;
631193267Sjkim
632197104Sjkim} ACPI_HEST_IA_ERROR_BANK;
633193267Sjkim
634193267Sjkim
635197104Sjkim/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
636193267Sjkim
637193267Sjkimtypedef struct acpi_hest_aer_common
638193267Sjkim{
639197104Sjkim    UINT16                  Reserved1;
640193267Sjkim    UINT8                   Flags;
641193267Sjkim    UINT8                   Enabled;
642197104Sjkim    UINT32                  RecordsToPreallocate;
643193267Sjkim    UINT32                  MaxSectionsPerRecord;
644272444Sjkim    UINT32                  Bus;                    /* Bus and Segment numbers */
645193267Sjkim    UINT16                  Device;
646193267Sjkim    UINT16                  Function;
647193267Sjkim    UINT16                  DeviceControl;
648197104Sjkim    UINT16                  Reserved2;
649197104Sjkim    UINT32                  UncorrectableMask;
650197104Sjkim    UINT32                  UncorrectableSeverity;
651197104Sjkim    UINT32                  CorrectableMask;
652197104Sjkim    UINT32                  AdvancedCapabilities;
653193267Sjkim
654193267Sjkim} ACPI_HEST_AER_COMMON;
655193267Sjkim
656197104Sjkim/* Masks for HEST Flags fields */
657193267Sjkim
658197104Sjkim#define ACPI_HEST_FIRMWARE_FIRST        (1)
659197104Sjkim#define ACPI_HEST_GLOBAL                (1<<1)
660322877Sjkim#define ACPI_HEST_GHES_ASSIST           (1<<2)
661197104Sjkim
662272444Sjkim/*
663272444Sjkim * Macros to access the bus/segment numbers in Bus field above:
664272444Sjkim *  Bus number is encoded in bits 7:0
665272444Sjkim *  Segment number is encoded in bits 23:8
666272444Sjkim */
667272444Sjkim#define ACPI_HEST_BUS(Bus)              ((Bus) & 0xFF)
668272444Sjkim#define ACPI_HEST_SEGMENT(Bus)          (((Bus) >> 8) & 0xFFFF)
669197104Sjkim
670272444Sjkim
671193267Sjkim/* Hardware Error Notification */
672193267Sjkim
673193267Sjkimtypedef struct acpi_hest_notify
674193267Sjkim{
675193267Sjkim    UINT8                   Type;
676193267Sjkim    UINT8                   Length;
677193267Sjkim    UINT16                  ConfigWriteEnable;
678193267Sjkim    UINT32                  PollInterval;
679193267Sjkim    UINT32                  Vector;
680193267Sjkim    UINT32                  PollingThresholdValue;
681193267Sjkim    UINT32                  PollingThresholdWindow;
682193267Sjkim    UINT32                  ErrorThresholdValue;
683193267Sjkim    UINT32                  ErrorThresholdWindow;
684193267Sjkim
685193267Sjkim} ACPI_HEST_NOTIFY;
686193267Sjkim
687193267Sjkim/* Values for Notify Type field above */
688193267Sjkim
689193267Sjkimenum AcpiHestNotifyTypes
690193267Sjkim{
691322877Sjkim    ACPI_HEST_NOTIFY_POLLED             = 0,
692322877Sjkim    ACPI_HEST_NOTIFY_EXTERNAL           = 1,
693322877Sjkim    ACPI_HEST_NOTIFY_LOCAL              = 2,
694322877Sjkim    ACPI_HEST_NOTIFY_SCI                = 3,
695322877Sjkim    ACPI_HEST_NOTIFY_NMI                = 4,
696322877Sjkim    ACPI_HEST_NOTIFY_CMCI               = 5,    /* ACPI 5.0 */
697322877Sjkim    ACPI_HEST_NOTIFY_MCE                = 6,    /* ACPI 5.0 */
698322877Sjkim    ACPI_HEST_NOTIFY_GPIO               = 7,    /* ACPI 6.0 */
699322877Sjkim    ACPI_HEST_NOTIFY_SEA                = 8,    /* ACPI 6.1 */
700322877Sjkim    ACPI_HEST_NOTIFY_SEI                = 9,    /* ACPI 6.1 */
701322877Sjkim    ACPI_HEST_NOTIFY_GSIV               = 10,   /* ACPI 6.1 */
702322877Sjkim    ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11,   /* ACPI 6.2 */
703322877Sjkim    ACPI_HEST_NOTIFY_RESERVED           = 12    /* 12 and greater are reserved */
704193267Sjkim};
705193267Sjkim
706197104Sjkim/* Values for ConfigWriteEnable bitfield above */
707193267Sjkim
708197104Sjkim#define ACPI_HEST_TYPE                  (1)
709197104Sjkim#define ACPI_HEST_POLL_INTERVAL         (1<<1)
710197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
711197104Sjkim#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
712197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
713197104Sjkim#define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
714197104Sjkim
715197104Sjkim
716193267Sjkim/*
717193267Sjkim * HEST subtables
718193267Sjkim */
719193267Sjkim
720197104Sjkim/* 0: IA32 Machine Check Exception */
721193267Sjkim
722197104Sjkimtypedef struct acpi_hest_ia_machine_check
723193267Sjkim{
724193267Sjkim    ACPI_HEST_HEADER        Header;
725197104Sjkim    UINT16                  Reserved1;
726322877Sjkim    UINT8                   Flags;              /* See flags ACPI_HEST_GLOBAL, etc. above */
727197104Sjkim    UINT8                   Enabled;
728197104Sjkim    UINT32                  RecordsToPreallocate;
729193267Sjkim    UINT32                  MaxSectionsPerRecord;
730193267Sjkim    UINT64                  GlobalCapabilityData;
731193267Sjkim    UINT64                  GlobalControlData;
732193267Sjkim    UINT8                   NumHardwareBanks;
733197104Sjkim    UINT8                   Reserved3[7];
734193267Sjkim
735197104Sjkim} ACPI_HEST_IA_MACHINE_CHECK;
736193267Sjkim
737193267Sjkim
738197104Sjkim/* 1: IA32 Corrected Machine Check */
739193267Sjkim
740197104Sjkimtypedef struct acpi_hest_ia_corrected
741193267Sjkim{
742193267Sjkim    ACPI_HEST_HEADER        Header;
743197104Sjkim    UINT16                  Reserved1;
744322877Sjkim    UINT8                   Flags;              /* See flags ACPI_HEST_GLOBAL, etc. above */
745193267Sjkim    UINT8                   Enabled;
746197104Sjkim    UINT32                  RecordsToPreallocate;
747193267Sjkim    UINT32                  MaxSectionsPerRecord;
748193267Sjkim    ACPI_HEST_NOTIFY        Notify;
749193267Sjkim    UINT8                   NumHardwareBanks;
750197104Sjkim    UINT8                   Reserved2[3];
751193267Sjkim
752197104Sjkim} ACPI_HEST_IA_CORRECTED;
753193267Sjkim
754193267Sjkim
755197104Sjkim/* 2: IA32 Non-Maskable Interrupt */
756193267Sjkim
757197104Sjkimtypedef struct acpi_hest_ia_nmi
758193267Sjkim{
759193267Sjkim    ACPI_HEST_HEADER        Header;
760193267Sjkim    UINT32                  Reserved;
761197104Sjkim    UINT32                  RecordsToPreallocate;
762193267Sjkim    UINT32                  MaxSectionsPerRecord;
763193267Sjkim    UINT32                  MaxRawDataLength;
764193267Sjkim
765197104Sjkim} ACPI_HEST_IA_NMI;
766193267Sjkim
767193267Sjkim
768197104Sjkim/* 3,4,5: Not used */
769193267Sjkim
770193267Sjkim/* 6: PCI Express Root Port AER */
771193267Sjkim
772193267Sjkimtypedef struct acpi_hest_aer_root
773193267Sjkim{
774193267Sjkim    ACPI_HEST_HEADER        Header;
775193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
776193267Sjkim    UINT32                  RootErrorCommand;
777193267Sjkim
778193267Sjkim} ACPI_HEST_AER_ROOT;
779193267Sjkim
780193267Sjkim
781193267Sjkim/* 7: PCI Express AER (AER Endpoint) */
782193267Sjkim
783193267Sjkimtypedef struct acpi_hest_aer
784193267Sjkim{
785193267Sjkim    ACPI_HEST_HEADER        Header;
786193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
787193267Sjkim
788193267Sjkim} ACPI_HEST_AER;
789193267Sjkim
790193267Sjkim
791193267Sjkim/* 8: PCI Express/PCI-X Bridge AER */
792193267Sjkim
793193267Sjkimtypedef struct acpi_hest_aer_bridge
794193267Sjkim{
795193267Sjkim    ACPI_HEST_HEADER        Header;
796193267Sjkim    ACPI_HEST_AER_COMMON    Aer;
797197104Sjkim    UINT32                  UncorrectableMask2;
798197104Sjkim    UINT32                  UncorrectableSeverity2;
799197104Sjkim    UINT32                  AdvancedCapabilities2;
800193267Sjkim
801193267Sjkim} ACPI_HEST_AER_BRIDGE;
802193267Sjkim
803193267Sjkim
804193267Sjkim/* 9: Generic Hardware Error Source */
805193267Sjkim
806193267Sjkimtypedef struct acpi_hest_generic
807193267Sjkim{
808193267Sjkim    ACPI_HEST_HEADER        Header;
809193267Sjkim    UINT16                  RelatedSourceId;
810197104Sjkim    UINT8                   Reserved;
811193267Sjkim    UINT8                   Enabled;
812197104Sjkim    UINT32                  RecordsToPreallocate;
813193267Sjkim    UINT32                  MaxSectionsPerRecord;
814193267Sjkim    UINT32                  MaxRawDataLength;
815193267Sjkim    ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
816193267Sjkim    ACPI_HEST_NOTIFY        Notify;
817197104Sjkim    UINT32                  ErrorBlockLength;
818193267Sjkim
819193267Sjkim} ACPI_HEST_GENERIC;
820193267Sjkim
821193267Sjkim
822298714Sjkim/* 10: Generic Hardware Error Source, version 2 */
823298714Sjkim
824298714Sjkimtypedef struct acpi_hest_generic_v2
825298714Sjkim{
826298714Sjkim    ACPI_HEST_HEADER        Header;
827298714Sjkim    UINT16                  RelatedSourceId;
828298714Sjkim    UINT8                   Reserved;
829298714Sjkim    UINT8                   Enabled;
830298714Sjkim    UINT32                  RecordsToPreallocate;
831298714Sjkim    UINT32                  MaxSectionsPerRecord;
832298714Sjkim    UINT32                  MaxRawDataLength;
833298714Sjkim    ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
834298714Sjkim    ACPI_HEST_NOTIFY        Notify;
835298714Sjkim    UINT32                  ErrorBlockLength;
836298714Sjkim    ACPI_GENERIC_ADDRESS    ReadAckRegister;
837298714Sjkim    UINT64                  ReadAckPreserve;
838298714Sjkim    UINT64                  ReadAckWrite;
839298714Sjkim
840298714Sjkim} ACPI_HEST_GENERIC_V2;
841298714Sjkim
842298714Sjkim
843197104Sjkim/* Generic Error Status block */
844167802Sjkim
845197104Sjkimtypedef struct acpi_hest_generic_status
846167802Sjkim{
847197104Sjkim    UINT32                  BlockStatus;
848197104Sjkim    UINT32                  RawDataOffset;
849197104Sjkim    UINT32                  RawDataLength;
850197104Sjkim    UINT32                  DataLength;
851197104Sjkim    UINT32                  ErrorSeverity;
852167802Sjkim
853197104Sjkim} ACPI_HEST_GENERIC_STATUS;
854167802Sjkim
855197104Sjkim/* Values for BlockStatus flags above */
856167802Sjkim
857197104Sjkim#define ACPI_HEST_UNCORRECTABLE             (1)
858197104Sjkim#define ACPI_HEST_CORRECTABLE               (1<<1)
859197104Sjkim#define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
860197104Sjkim#define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
861197104Sjkim#define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
862167802Sjkim
863167802Sjkim
864197104Sjkim/* Generic Error Data entry */
865167802Sjkim
866197104Sjkimtypedef struct acpi_hest_generic_data
867193267Sjkim{
868197104Sjkim    UINT8                   SectionType[16];
869197104Sjkim    UINT32                  ErrorSeverity;
870197104Sjkim    UINT16                  Revision;
871197104Sjkim    UINT8                   ValidationBits;
872193267Sjkim    UINT8                   Flags;
873197104Sjkim    UINT32                  ErrorDataLength;
874197104Sjkim    UINT8                   FruId[16];
875197104Sjkim    UINT8                   FruText[20];
876193267Sjkim
877197104Sjkim} ACPI_HEST_GENERIC_DATA;
878193267Sjkim
879298714Sjkim/* Extension for revision 0x0300 */
880193267Sjkim
881298714Sjkimtypedef struct acpi_hest_generic_data_v300
882298714Sjkim{
883298714Sjkim    UINT8                   SectionType[16];
884298714Sjkim    UINT32                  ErrorSeverity;
885298714Sjkim    UINT16                  Revision;
886298714Sjkim    UINT8                   ValidationBits;
887298714Sjkim    UINT8                   Flags;
888298714Sjkim    UINT32                  ErrorDataLength;
889298714Sjkim    UINT8                   FruId[16];
890298714Sjkim    UINT8                   FruText[20];
891298714Sjkim    UINT64                  TimeStamp;
892298714Sjkim
893298714Sjkim} ACPI_HEST_GENERIC_DATA_V300;
894298714Sjkim
895298714Sjkim/* Values for ErrorSeverity above */
896298714Sjkim
897298714Sjkim#define ACPI_HEST_GEN_ERROR_RECOVERABLE     0
898298714Sjkim#define ACPI_HEST_GEN_ERROR_FATAL           1
899298714Sjkim#define ACPI_HEST_GEN_ERROR_CORRECTED       2
900298714Sjkim#define ACPI_HEST_GEN_ERROR_NONE            3
901298714Sjkim
902298714Sjkim/* Flags for ValidationBits above */
903298714Sjkim
904298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_ID          (1)
905298714Sjkim#define ACPI_HEST_GEN_VALID_FRU_STRING      (1<<1)
906298714Sjkim#define ACPI_HEST_GEN_VALID_TIMESTAMP       (1<<2)
907298714Sjkim
908298714Sjkim
909322877Sjkim/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
910322877Sjkim
911322877Sjkimtypedef struct acpi_hest_ia_deferred_check
912322877Sjkim{
913322877Sjkim    ACPI_HEST_HEADER        Header;
914322877Sjkim    UINT16                  Reserved1;
915322877Sjkim    UINT8                   Flags;              /* See flags ACPI_HEST_GLOBAL, etc. above */
916322877Sjkim    UINT8                   Enabled;
917322877Sjkim    UINT32                  RecordsToPreallocate;
918322877Sjkim    UINT32                  MaxSectionsPerRecord;
919322877Sjkim    ACPI_HEST_NOTIFY        Notify;
920322877Sjkim    UINT8                   NumHardwareBanks;
921322877Sjkim    UINT8                   Reserved2[3];
922322877Sjkim
923322877Sjkim} ACPI_HEST_IA_DEFERRED_CHECK;
924322877Sjkim
925322877Sjkim
926193267Sjkim/*******************************************************************************
927193267Sjkim *
928322877Sjkim * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
929322877Sjkim *        Version 1
930322877Sjkim *
931322877Sjkim ******************************************************************************/
932322877Sjkim
933322877Sjkimtypedef struct acpi_table_hmat
934322877Sjkim{
935322877Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
936322877Sjkim    UINT32                  Reserved;
937322877Sjkim
938322877Sjkim} ACPI_TABLE_HMAT;
939322877Sjkim
940322877Sjkim
941322877Sjkim/* Values for HMAT structure types */
942322877Sjkim
943322877Sjkimenum AcpiHmatType
944322877Sjkim{
945322877Sjkim    ACPI_HMAT_TYPE_ADDRESS_RANGE        = 0,   /* Memory subystem address range */
946322877Sjkim    ACPI_HMAT_TYPE_LOCALITY             = 1,   /* System locality latency and bandwidth information */
947322877Sjkim    ACPI_HMAT_TYPE_CACHE                = 2,   /* Memory side cache information */
948322877Sjkim    ACPI_HMAT_TYPE_RESERVED             = 3    /* 3 and greater are reserved */
949322877Sjkim};
950322877Sjkim
951322877Sjkimtypedef struct acpi_hmat_structure
952322877Sjkim{
953322877Sjkim    UINT16                  Type;
954322877Sjkim    UINT16                  Reserved;
955322877Sjkim    UINT32                  Length;
956322877Sjkim
957322877Sjkim} ACPI_HMAT_STRUCTURE;
958322877Sjkim
959322877Sjkim
960322877Sjkim/*
961322877Sjkim * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE
962322877Sjkim */
963322877Sjkim
964322877Sjkim/* 0: Memory subystem address range */
965322877Sjkim
966322877Sjkimtypedef struct acpi_hmat_address_range
967322877Sjkim{
968322877Sjkim    ACPI_HMAT_STRUCTURE     Header;
969322877Sjkim    UINT16                  Flags;
970322877Sjkim    UINT16                  Reserved1;
971322877Sjkim    UINT32                  ProcessorPD;            /* Processor proximity domain */
972322877Sjkim    UINT32                  MemoryPD;               /* Memory proximity domain */
973322877Sjkim    UINT32                  Reserved2;
974322877Sjkim    UINT64                  PhysicalAddressBase;    /* Physical address range base */
975322877Sjkim    UINT64                  PhysicalAddressLength;  /* Physical address range length */
976322877Sjkim
977322877Sjkim} ACPI_HMAT_ADDRESS_RANGE;
978322877Sjkim
979322877Sjkim/* Masks for Flags field above */
980322877Sjkim
981322877Sjkim#define ACPI_HMAT_PROCESSOR_PD_VALID    (1)     /* 1: ProcessorPD field is valid */
982322877Sjkim#define ACPI_HMAT_MEMORY_PD_VALID       (1<<1)  /* 1: MemoryPD field is valid */
983322877Sjkim#define ACPI_HMAT_RESERVATION_HINT      (1<<2)  /* 1: Reservation hint */
984322877Sjkim
985322877Sjkim
986322877Sjkim/* 1: System locality latency and bandwidth information */
987322877Sjkim
988322877Sjkimtypedef struct acpi_hmat_locality
989322877Sjkim{
990322877Sjkim    ACPI_HMAT_STRUCTURE     Header;
991322877Sjkim    UINT8                   Flags;
992322877Sjkim    UINT8                   DataType;
993322877Sjkim    UINT16                  Reserved1;
994322877Sjkim    UINT32                  NumberOfInitiatorPDs;
995322877Sjkim    UINT32                  NumberOfTargetPDs;
996322877Sjkim    UINT32                  Reserved2;
997322877Sjkim    UINT64                  EntryBaseUnit;
998322877Sjkim
999322877Sjkim} ACPI_HMAT_LOCALITY;
1000322877Sjkim
1001322877Sjkim/* Masks for Flags field above */
1002322877Sjkim
1003322877Sjkim#define ACPI_HMAT_MEMORY_HIERARCHY  (0x0F)
1004322877Sjkim
1005322877Sjkim/* Values for Memory Hierarchy flag */
1006322877Sjkim
1007322877Sjkim#define ACPI_HMAT_MEMORY            0
1008322877Sjkim#define ACPI_HMAT_LAST_LEVEL_CACHE  1
1009322877Sjkim#define ACPI_HMAT_1ST_LEVEL_CACHE   2
1010322877Sjkim#define ACPI_HMAT_2ND_LEVEL_CACHE   3
1011322877Sjkim#define ACPI_HMAT_3RD_LEVEL_CACHE   4
1012322877Sjkim
1013322877Sjkim/* Values for DataType field above */
1014322877Sjkim
1015322877Sjkim#define ACPI_HMAT_ACCESS_LATENCY    0
1016322877Sjkim#define ACPI_HMAT_READ_LATENCY      1
1017322877Sjkim#define ACPI_HMAT_WRITE_LATENCY     2
1018322877Sjkim#define ACPI_HMAT_ACCESS_BANDWIDTH  3
1019322877Sjkim#define ACPI_HMAT_READ_BANDWIDTH    4
1020322877Sjkim#define ACPI_HMAT_WRITE_BANDWIDTH   5
1021322877Sjkim
1022322877Sjkim
1023322877Sjkim/* 2: Memory side cache information */
1024322877Sjkim
1025322877Sjkimtypedef struct acpi_hmat_cache
1026322877Sjkim{
1027322877Sjkim    ACPI_HMAT_STRUCTURE     Header;
1028322877Sjkim    UINT32                  MemoryPD;
1029322877Sjkim    UINT32                  Reserved1;
1030322877Sjkim    UINT64                  CacheSize;
1031322877Sjkim    UINT32                  CacheAttributes;
1032322877Sjkim    UINT16                  Reserved2;
1033322877Sjkim    UINT16                  NumberOfSMBIOSHandles;
1034322877Sjkim
1035322877Sjkim} ACPI_HMAT_CACHE;
1036322877Sjkim
1037322877Sjkim/* Masks for CacheAttributes field above */
1038322877Sjkim
1039322877Sjkim#define ACPI_HMAT_TOTAL_CACHE_LEVEL     (0x0000000F)
1040322877Sjkim#define ACPI_HMAT_CACHE_LEVEL           (0x000000F0)
1041322877Sjkim#define ACPI_HMAT_CACHE_ASSOCIATIVITY   (0x00000F00)
1042322877Sjkim#define ACPI_HMAT_WRITE_POLICY          (0x0000F000)
1043322877Sjkim#define ACPI_HMAT_CACHE_LINE_SIZE       (0xFFFF0000)
1044322877Sjkim
1045322877Sjkim/* Values for cache associativity flag */
1046322877Sjkim
1047322877Sjkim#define ACPI_HMAT_CA_NONE                     (0)
1048322877Sjkim#define ACPI_HMAT_CA_DIRECT_MAPPED            (1)
1049322877Sjkim#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING   (2)
1050322877Sjkim
1051322877Sjkim/* Values for write policy flag */
1052322877Sjkim
1053322877Sjkim#define ACPI_HMAT_CP_NONE   (0)
1054322877Sjkim#define ACPI_HMAT_CP_WB     (1)
1055322877Sjkim#define ACPI_HMAT_CP_WT     (2)
1056322877Sjkim
1057322877Sjkim
1058322877Sjkim/*******************************************************************************
1059322877Sjkim *
1060167802Sjkim * MADT - Multiple APIC Description Table
1061197104Sjkim *        Version 3
1062167802Sjkim *
1063167802Sjkim ******************************************************************************/
1064167802Sjkim
1065167802Sjkimtypedef struct acpi_table_madt
1066167802Sjkim{
1067167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1068167802Sjkim    UINT32                  Address;            /* Physical address of local APIC */
1069167802Sjkim    UINT32                  Flags;
1070167802Sjkim
1071167802Sjkim} ACPI_TABLE_MADT;
1072167802Sjkim
1073197104Sjkim/* Masks for Flags field above */
1074167802Sjkim
1075197104Sjkim#define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
1076167802Sjkim
1077167802Sjkim/* Values for PCATCompat flag */
1078167802Sjkim
1079322877Sjkim#define ACPI_MADT_DUAL_PIC          1
1080322877Sjkim#define ACPI_MADT_MULTIPLE_APIC     0
1081167802Sjkim
1082167802Sjkim
1083197104Sjkim/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
1084167802Sjkim
1085167802Sjkimenum AcpiMadtType
1086167802Sjkim{
1087272444Sjkim    ACPI_MADT_TYPE_LOCAL_APIC               = 0,
1088272444Sjkim    ACPI_MADT_TYPE_IO_APIC                  = 1,
1089272444Sjkim    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
1090272444Sjkim    ACPI_MADT_TYPE_NMI_SOURCE               = 3,
1091272444Sjkim    ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
1092272444Sjkim    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
1093272444Sjkim    ACPI_MADT_TYPE_IO_SAPIC                 = 6,
1094272444Sjkim    ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
1095272444Sjkim    ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
1096272444Sjkim    ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
1097272444Sjkim    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
1098272444Sjkim    ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
1099272444Sjkim    ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR      = 12,
1100272444Sjkim    ACPI_MADT_TYPE_GENERIC_MSI_FRAME        = 13,
1101272444Sjkim    ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR    = 14,
1102283092Sjkim    ACPI_MADT_TYPE_GENERIC_TRANSLATOR       = 15,
1103283092Sjkim    ACPI_MADT_TYPE_RESERVED                 = 16    /* 16 and greater are reserved */
1104167802Sjkim};
1105167802Sjkim
1106167802Sjkim
1107167802Sjkim/*
1108272444Sjkim * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
1109167802Sjkim */
1110167802Sjkim
1111167802Sjkim/* 0: Processor Local APIC */
1112167802Sjkim
1113167802Sjkimtypedef struct acpi_madt_local_apic
1114167802Sjkim{
1115167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1116167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
1117167802Sjkim    UINT8                   Id;                 /* Processor's local APIC id */
1118167802Sjkim    UINT32                  LapicFlags;
1119167802Sjkim
1120167802Sjkim} ACPI_MADT_LOCAL_APIC;
1121167802Sjkim
1122197104Sjkim
1123167802Sjkim/* 1: IO APIC */
1124167802Sjkim
1125167802Sjkimtypedef struct acpi_madt_io_apic
1126167802Sjkim{
1127167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1128167802Sjkim    UINT8                   Id;                 /* I/O APIC ID */
1129167802Sjkim    UINT8                   Reserved;           /* Reserved - must be zero */
1130167802Sjkim    UINT32                  Address;            /* APIC physical address */
1131167802Sjkim    UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
1132167802Sjkim
1133167802Sjkim} ACPI_MADT_IO_APIC;
1134167802Sjkim
1135197104Sjkim
1136167802Sjkim/* 2: Interrupt Override */
1137167802Sjkim
1138167802Sjkimtypedef struct acpi_madt_interrupt_override
1139167802Sjkim{
1140167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1141167802Sjkim    UINT8                   Bus;                /* 0 - ISA */
1142167802Sjkim    UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
1143167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
1144167802Sjkim    UINT16                  IntiFlags;
1145167802Sjkim
1146167802Sjkim} ACPI_MADT_INTERRUPT_OVERRIDE;
1147167802Sjkim
1148197104Sjkim
1149167802Sjkim/* 3: NMI Source */
1150167802Sjkim
1151167802Sjkimtypedef struct acpi_madt_nmi_source
1152167802Sjkim{
1153167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1154167802Sjkim    UINT16                  IntiFlags;
1155167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
1156167802Sjkim
1157167802Sjkim} ACPI_MADT_NMI_SOURCE;
1158167802Sjkim
1159197104Sjkim
1160167802Sjkim/* 4: Local APIC NMI */
1161167802Sjkim
1162167802Sjkimtypedef struct acpi_madt_local_apic_nmi
1163167802Sjkim{
1164167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1165167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
1166167802Sjkim    UINT16                  IntiFlags;
1167167802Sjkim    UINT8                   Lint;               /* LINTn to which NMI is connected */
1168167802Sjkim
1169167802Sjkim} ACPI_MADT_LOCAL_APIC_NMI;
1170167802Sjkim
1171197104Sjkim
1172167802Sjkim/* 5: Address Override */
1173167802Sjkim
1174167802Sjkimtypedef struct acpi_madt_local_apic_override
1175167802Sjkim{
1176167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1177167802Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1178167802Sjkim    UINT64                  Address;            /* APIC physical address */
1179167802Sjkim
1180167802Sjkim} ACPI_MADT_LOCAL_APIC_OVERRIDE;
1181167802Sjkim
1182197104Sjkim
1183167802Sjkim/* 6: I/O Sapic */
1184167802Sjkim
1185167802Sjkimtypedef struct acpi_madt_io_sapic
1186167802Sjkim{
1187167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1188167802Sjkim    UINT8                   Id;                 /* I/O SAPIC ID */
1189167802Sjkim    UINT8                   Reserved;           /* Reserved, must be zero */
1190167802Sjkim    UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
1191167802Sjkim    UINT64                  Address;            /* SAPIC physical address */
1192167802Sjkim
1193167802Sjkim} ACPI_MADT_IO_SAPIC;
1194167802Sjkim
1195197104Sjkim
1196167802Sjkim/* 7: Local Sapic */
1197167802Sjkim
1198167802Sjkimtypedef struct acpi_madt_local_sapic
1199167802Sjkim{
1200167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1201167802Sjkim    UINT8                   ProcessorId;        /* ACPI processor id */
1202167802Sjkim    UINT8                   Id;                 /* SAPIC ID */
1203167802Sjkim    UINT8                   Eid;                /* SAPIC EID */
1204167802Sjkim    UINT8                   Reserved[3];        /* Reserved, must be zero */
1205167802Sjkim    UINT32                  LapicFlags;
1206167802Sjkim    UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
1207167802Sjkim    char                    UidString[1];       /* String UID  - ACPI 3.0 */
1208167802Sjkim
1209167802Sjkim} ACPI_MADT_LOCAL_SAPIC;
1210167802Sjkim
1211197104Sjkim
1212167802Sjkim/* 8: Platform Interrupt Source */
1213167802Sjkim
1214167802Sjkimtypedef struct acpi_madt_interrupt_source
1215167802Sjkim{
1216167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1217167802Sjkim    UINT16                  IntiFlags;
1218167802Sjkim    UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
1219167802Sjkim    UINT8                   Id;                 /* Processor ID */
1220167802Sjkim    UINT8                   Eid;                /* Processor EID */
1221167802Sjkim    UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
1222167802Sjkim    UINT32                  GlobalIrq;          /* Global system interrupt */
1223167802Sjkim    UINT32                  Flags;              /* Interrupt Source Flags */
1224167802Sjkim
1225167802Sjkim} ACPI_MADT_INTERRUPT_SOURCE;
1226167802Sjkim
1227197104Sjkim/* Masks for Flags field above */
1228167802Sjkim
1229167802Sjkim#define ACPI_MADT_CPEI_OVERRIDE     (1)
1230167802Sjkim
1231167802Sjkim
1232197104Sjkim/* 9: Processor Local X2APIC (ACPI 4.0) */
1233197104Sjkim
1234193267Sjkimtypedef struct acpi_madt_local_x2apic
1235193267Sjkim{
1236193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
1237193267Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
1238193267Sjkim    UINT32                  LocalApicId;        /* Processor x2APIC ID  */
1239193267Sjkim    UINT32                  LapicFlags;
1240193267Sjkim    UINT32                  Uid;                /* ACPI processor UID */
1241193267Sjkim
1242193267Sjkim} ACPI_MADT_LOCAL_X2APIC;
1243193267Sjkim
1244193267Sjkim
1245197104Sjkim/* 10: Local X2APIC NMI (ACPI 4.0) */
1246197104Sjkim
1247193267Sjkimtypedef struct acpi_madt_local_x2apic_nmi
1248193267Sjkim{
1249193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
1250193267Sjkim    UINT16                  IntiFlags;
1251193267Sjkim    UINT32                  Uid;                /* ACPI processor UID */
1252193267Sjkim    UINT8                   Lint;               /* LINTn to which NMI is connected */
1253193267Sjkim    UINT8                   Reserved[3];        /* Reserved - must be zero */
1254193267Sjkim
1255193267Sjkim} ACPI_MADT_LOCAL_X2APIC_NMI;
1256193267Sjkim
1257193267Sjkim
1258283092Sjkim/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */
1259228110Sjkim
1260228110Sjkimtypedef struct acpi_madt_generic_interrupt
1261228110Sjkim{
1262228110Sjkim    ACPI_SUBTABLE_HEADER    Header;
1263228110Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
1264272444Sjkim    UINT32                  CpuInterfaceNumber;
1265228110Sjkim    UINT32                  Uid;
1266228110Sjkim    UINT32                  Flags;
1267228110Sjkim    UINT32                  ParkingVersion;
1268228110Sjkim    UINT32                  PerformanceInterrupt;
1269228110Sjkim    UINT64                  ParkedAddress;
1270228110Sjkim    UINT64                  BaseAddress;
1271272444Sjkim    UINT64                  GicvBaseAddress;
1272272444Sjkim    UINT64                  GichBaseAddress;
1273272444Sjkim    UINT32                  VgicInterrupt;
1274272444Sjkim    UINT64                  GicrBaseAddress;
1275272444Sjkim    UINT64                  ArmMpidr;
1276283092Sjkim    UINT8                   EfficiencyClass;
1277283092Sjkim    UINT8                   Reserved2[3];
1278228110Sjkim
1279228110Sjkim} ACPI_MADT_GENERIC_INTERRUPT;
1280228110Sjkim
1281272444Sjkim/* Masks for Flags field above */
1282228110Sjkim
1283272444Sjkim/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
1284272444Sjkim#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
1285272444Sjkim#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
1286272444Sjkim
1287272444Sjkim
1288283092Sjkim/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
1289228110Sjkim
1290228110Sjkimtypedef struct acpi_madt_generic_distributor
1291228110Sjkim{
1292228110Sjkim    ACPI_SUBTABLE_HEADER    Header;
1293228110Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
1294228110Sjkim    UINT32                  GicId;
1295228110Sjkim    UINT64                  BaseAddress;
1296228110Sjkim    UINT32                  GlobalIrqBase;
1297283092Sjkim    UINT8                   Version;
1298284583Sjkim    UINT8                   Reserved2[3];       /* Reserved - must be zero */
1299228110Sjkim
1300228110Sjkim} ACPI_MADT_GENERIC_DISTRIBUTOR;
1301228110Sjkim
1302284583Sjkim/* Values for Version field above */
1303228110Sjkim
1304284583Sjkimenum AcpiMadtGicVersion
1305284583Sjkim{
1306284583Sjkim    ACPI_MADT_GIC_VERSION_NONE          = 0,
1307284583Sjkim    ACPI_MADT_GIC_VERSION_V1            = 1,
1308284583Sjkim    ACPI_MADT_GIC_VERSION_V2            = 2,
1309284583Sjkim    ACPI_MADT_GIC_VERSION_V3            = 3,
1310284583Sjkim    ACPI_MADT_GIC_VERSION_V4            = 4,
1311284583Sjkim    ACPI_MADT_GIC_VERSION_RESERVED      = 5     /* 5 and greater are reserved */
1312284583Sjkim};
1313284583Sjkim
1314284583Sjkim
1315272444Sjkim/* 13: Generic MSI Frame (ACPI 5.1) */
1316272444Sjkim
1317272444Sjkimtypedef struct acpi_madt_generic_msi_frame
1318272444Sjkim{
1319272444Sjkim    ACPI_SUBTABLE_HEADER    Header;
1320272444Sjkim    UINT16                  Reserved;           /* Reserved - must be zero */
1321272444Sjkim    UINT32                  MsiFrameId;
1322272444Sjkim    UINT64                  BaseAddress;
1323272444Sjkim    UINT32                  Flags;
1324272444Sjkim    UINT16                  SpiCount;
1325272444Sjkim    UINT16                  SpiBase;
1326272444Sjkim
1327272444Sjkim} ACPI_MADT_GENERIC_MSI_FRAME;
1328272444Sjkim
1329272444Sjkim/* Masks for Flags field above */
1330272444Sjkim
1331272444Sjkim#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
1332272444Sjkim
1333272444Sjkim
1334272444Sjkim/* 14: Generic Redistributor (ACPI 5.1) */
1335272444Sjkim
1336272444Sjkimtypedef struct acpi_madt_generic_redistributor
1337272444Sjkim{
1338272444Sjkim    ACPI_SUBTABLE_HEADER    Header;
1339272444Sjkim    UINT16                  Reserved;           /* reserved - must be zero */
1340272444Sjkim    UINT64                  BaseAddress;
1341272444Sjkim    UINT32                  Length;
1342272444Sjkim
1343272444Sjkim} ACPI_MADT_GENERIC_REDISTRIBUTOR;
1344272444Sjkim
1345272444Sjkim
1346283092Sjkim/* 15: Generic Translator (ACPI 6.0) */
1347283092Sjkim
1348283092Sjkimtypedef struct acpi_madt_generic_translator
1349283092Sjkim{
1350283092Sjkim    ACPI_SUBTABLE_HEADER    Header;
1351283092Sjkim    UINT16                  Reserved;           /* reserved - must be zero */
1352283092Sjkim    UINT32                  TranslationId;
1353283092Sjkim    UINT64                  BaseAddress;
1354283092Sjkim    UINT32                  Reserved2;
1355283092Sjkim
1356283092Sjkim} ACPI_MADT_GENERIC_TRANSLATOR;
1357283092Sjkim
1358283092Sjkim
1359167802Sjkim/*
1360167802Sjkim * Common flags fields for MADT subtables
1361167802Sjkim */
1362167802Sjkim
1363272444Sjkim/* MADT Local APIC flags */
1364167802Sjkim
1365167802Sjkim#define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
1366167802Sjkim
1367167802Sjkim/* MADT MPS INTI flags (IntiFlags) */
1368167802Sjkim
1369167802Sjkim#define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
1370167802Sjkim#define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
1371167802Sjkim
1372167802Sjkim/* Values for MPS INTI flags */
1373167802Sjkim
1374167802Sjkim#define ACPI_MADT_POLARITY_CONFORMS       0
1375167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
1376167802Sjkim#define ACPI_MADT_POLARITY_RESERVED       2
1377167802Sjkim#define ACPI_MADT_POLARITY_ACTIVE_LOW     3
1378167802Sjkim
1379167802Sjkim#define ACPI_MADT_TRIGGER_CONFORMS        (0)
1380167802Sjkim#define ACPI_MADT_TRIGGER_EDGE            (1<<2)
1381167802Sjkim#define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
1382167802Sjkim#define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
1383167802Sjkim
1384167802Sjkim
1385167802Sjkim/*******************************************************************************
1386167802Sjkim *
1387197104Sjkim * MSCT - Maximum System Characteristics Table (ACPI 4.0)
1388197104Sjkim *        Version 1
1389167802Sjkim *
1390167802Sjkim ******************************************************************************/
1391167802Sjkim
1392197104Sjkimtypedef struct acpi_table_msct
1393167802Sjkim{
1394167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1395197104Sjkim    UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
1396197104Sjkim    UINT32                  MaxProximityDomains;/* Max number of proximity domains */
1397197104Sjkim    UINT32                  MaxClockDomains;    /* Max number of clock domains */
1398197104Sjkim    UINT64                  MaxAddress;         /* Max physical address in system */
1399167802Sjkim
1400197104Sjkim} ACPI_TABLE_MSCT;
1401167802Sjkim
1402167802Sjkim
1403197104Sjkim/* Subtable - Maximum Proximity Domain Information. Version 1 */
1404167802Sjkim
1405197104Sjkimtypedef struct acpi_msct_proximity
1406167802Sjkim{
1407197104Sjkim    UINT8                   Revision;
1408197104Sjkim    UINT8                   Length;
1409197104Sjkim    UINT32                  RangeStart;         /* Start of domain range */
1410197104Sjkim    UINT32                  RangeEnd;           /* End of domain range */
1411197104Sjkim    UINT32                  ProcessorCapacity;
1412197104Sjkim    UINT64                  MemoryCapacity;     /* In bytes */
1413167802Sjkim
1414197104Sjkim} ACPI_MSCT_PROXIMITY;
1415167802Sjkim
1416167802Sjkim
1417167802Sjkim/*******************************************************************************
1418167802Sjkim *
1419298714Sjkim * NFIT - NVDIMM Interface Table (ACPI 6.0+)
1420283092Sjkim *        Version 1
1421283092Sjkim *
1422283092Sjkim ******************************************************************************/
1423283092Sjkim
1424283092Sjkimtypedef struct acpi_table_nfit
1425283092Sjkim{
1426283092Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1427283092Sjkim    UINT32                  Reserved;           /* Reserved, must be zero */
1428283092Sjkim
1429283092Sjkim} ACPI_TABLE_NFIT;
1430283092Sjkim
1431283092Sjkim/* Subtable header for NFIT */
1432283092Sjkim
1433283092Sjkimtypedef struct acpi_nfit_header
1434283092Sjkim{
1435283092Sjkim    UINT16                   Type;
1436283092Sjkim    UINT16                   Length;
1437283092Sjkim
1438283092Sjkim} ACPI_NFIT_HEADER;
1439283092Sjkim
1440283092Sjkim
1441283092Sjkim/* Values for subtable type in ACPI_NFIT_HEADER */
1442283092Sjkim
1443283092Sjkimenum AcpiNfitType
1444283092Sjkim{
1445283092Sjkim    ACPI_NFIT_TYPE_SYSTEM_ADDRESS       = 0,
1446283092Sjkim    ACPI_NFIT_TYPE_MEMORY_MAP           = 1,
1447283092Sjkim    ACPI_NFIT_TYPE_INTERLEAVE           = 2,
1448283092Sjkim    ACPI_NFIT_TYPE_SMBIOS               = 3,
1449283092Sjkim    ACPI_NFIT_TYPE_CONTROL_REGION       = 4,
1450283092Sjkim    ACPI_NFIT_TYPE_DATA_REGION          = 5,
1451283092Sjkim    ACPI_NFIT_TYPE_FLUSH_ADDRESS        = 6,
1452327557Sjkim    ACPI_NFIT_TYPE_CAPABILITIES         = 7,
1453327557Sjkim    ACPI_NFIT_TYPE_RESERVED             = 8     /* 8 and greater are reserved */
1454283092Sjkim};
1455283092Sjkim
1456283092Sjkim/*
1457283092Sjkim * NFIT Subtables
1458283092Sjkim */
1459283092Sjkim
1460283092Sjkim/* 0: System Physical Address Range Structure */
1461283092Sjkim
1462283092Sjkimtypedef struct acpi_nfit_system_address
1463283092Sjkim{
1464283092Sjkim    ACPI_NFIT_HEADER        Header;
1465283092Sjkim    UINT16                  RangeIndex;
1466283092Sjkim    UINT16                  Flags;
1467327557Sjkim    UINT32                  Reserved;           /* Reserved, must be zero */
1468283092Sjkim    UINT32                  ProximityDomain;
1469283092Sjkim    UINT8                   RangeGuid[16];
1470283092Sjkim    UINT64                  Address;
1471283092Sjkim    UINT64                  Length;
1472283092Sjkim    UINT64                  MemoryMapping;
1473283092Sjkim
1474283092Sjkim} ACPI_NFIT_SYSTEM_ADDRESS;
1475283092Sjkim
1476283092Sjkim/* Flags */
1477283092Sjkim
1478283092Sjkim#define ACPI_NFIT_ADD_ONLINE_ONLY       (1)     /* 00: Add/Online Operation Only */
1479283092Sjkim#define ACPI_NFIT_PROXIMITY_VALID       (1<<1)  /* 01: Proximity Domain Valid */
1480283092Sjkim
1481283092Sjkim/* Range Type GUIDs appear in the include/acuuid.h file */
1482283092Sjkim
1483283092Sjkim
1484283092Sjkim/* 1: Memory Device to System Address Range Map Structure */
1485283092Sjkim
1486283092Sjkimtypedef struct acpi_nfit_memory_map
1487283092Sjkim{
1488283092Sjkim    ACPI_NFIT_HEADER        Header;
1489283092Sjkim    UINT32                  DeviceHandle;
1490283092Sjkim    UINT16                  PhysicalId;
1491283092Sjkim    UINT16                  RegionId;
1492283092Sjkim    UINT16                  RangeIndex;
1493283092Sjkim    UINT16                  RegionIndex;
1494283092Sjkim    UINT64                  RegionSize;
1495283092Sjkim    UINT64                  RegionOffset;
1496283092Sjkim    UINT64                  Address;
1497283092Sjkim    UINT16                  InterleaveIndex;
1498283092Sjkim    UINT16                  InterleaveWays;
1499283092Sjkim    UINT16                  Flags;
1500283092Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1501283092Sjkim
1502283092Sjkim} ACPI_NFIT_MEMORY_MAP;
1503283092Sjkim
1504283092Sjkim/* Flags */
1505283092Sjkim
1506283092Sjkim#define ACPI_NFIT_MEM_SAVE_FAILED       (1)     /* 00: Last SAVE to Memory Device failed */
1507283092Sjkim#define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)  /* 01: Last RESTORE from Memory Device failed */
1508283092Sjkim#define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)  /* 02: Platform flush failed */
1509298714Sjkim#define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)  /* 03: Memory Device is not armed */
1510283092Sjkim#define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)  /* 04: Memory Device observed SMART/health events */
1511283092Sjkim#define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)  /* 05: SMART/health events enabled */
1512298714Sjkim#define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)  /* 06: Mapping to SPA failed */
1513283092Sjkim
1514283092Sjkim
1515283092Sjkim/* 2: Interleave Structure */
1516283092Sjkim
1517283092Sjkimtypedef struct acpi_nfit_interleave
1518283092Sjkim{
1519283092Sjkim    ACPI_NFIT_HEADER        Header;
1520283092Sjkim    UINT16                  InterleaveIndex;
1521283092Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1522283092Sjkim    UINT32                  LineCount;
1523283092Sjkim    UINT32                  LineSize;
1524283092Sjkim    UINT32                  LineOffset[1];      /* Variable length */
1525283092Sjkim
1526283092Sjkim} ACPI_NFIT_INTERLEAVE;
1527283092Sjkim
1528283092Sjkim
1529283092Sjkim/* 3: SMBIOS Management Information Structure */
1530283092Sjkim
1531283092Sjkimtypedef struct acpi_nfit_smbios
1532283092Sjkim{
1533283092Sjkim    ACPI_NFIT_HEADER        Header;
1534283092Sjkim    UINT32                  Reserved;           /* Reserved, must be zero */
1535283092Sjkim    UINT8                   Data[1];            /* Variable length */
1536283092Sjkim
1537283092Sjkim} ACPI_NFIT_SMBIOS;
1538283092Sjkim
1539283092Sjkim
1540283092Sjkim/* 4: NVDIMM Control Region Structure */
1541283092Sjkim
1542283092Sjkimtypedef struct acpi_nfit_control_region
1543283092Sjkim{
1544283092Sjkim    ACPI_NFIT_HEADER        Header;
1545283092Sjkim    UINT16                  RegionIndex;
1546283092Sjkim    UINT16                  VendorId;
1547283092Sjkim    UINT16                  DeviceId;
1548283092Sjkim    UINT16                  RevisionId;
1549283092Sjkim    UINT16                  SubsystemVendorId;
1550283092Sjkim    UINT16                  SubsystemDeviceId;
1551283092Sjkim    UINT16                  SubsystemRevisionId;
1552298714Sjkim    UINT8                   ValidFields;
1553298714Sjkim    UINT8                   ManufacturingLocation;
1554298714Sjkim    UINT16                  ManufacturingDate;
1555298714Sjkim    UINT8                   Reserved[2];        /* Reserved, must be zero */
1556283092Sjkim    UINT32                  SerialNumber;
1557283092Sjkim    UINT16                  Code;
1558283092Sjkim    UINT16                  Windows;
1559283092Sjkim    UINT64                  WindowSize;
1560283092Sjkim    UINT64                  CommandOffset;
1561283092Sjkim    UINT64                  CommandSize;
1562283092Sjkim    UINT64                  StatusOffset;
1563283092Sjkim    UINT64                  StatusSize;
1564283092Sjkim    UINT16                  Flags;
1565283092Sjkim    UINT8                   Reserved1[6];       /* Reserved, must be zero */
1566283092Sjkim
1567283092Sjkim} ACPI_NFIT_CONTROL_REGION;
1568283092Sjkim
1569283092Sjkim/* Flags */
1570283092Sjkim
1571298714Sjkim#define ACPI_NFIT_CONTROL_BUFFERED          (1)     /* Block Data Windows implementation is buffered */
1572283092Sjkim
1573298714Sjkim/* ValidFields bits */
1574283092Sjkim
1575298714Sjkim#define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)     /* Manufacturing fields are valid */
1576298714Sjkim
1577298714Sjkim
1578283092Sjkim/* 5: NVDIMM Block Data Window Region Structure */
1579283092Sjkim
1580283092Sjkimtypedef struct acpi_nfit_data_region
1581283092Sjkim{
1582283092Sjkim    ACPI_NFIT_HEADER        Header;
1583283092Sjkim    UINT16                  RegionIndex;
1584283092Sjkim    UINT16                  Windows;
1585283092Sjkim    UINT64                  Offset;
1586283092Sjkim    UINT64                  Size;
1587283092Sjkim    UINT64                  Capacity;
1588283092Sjkim    UINT64                  StartAddress;
1589283092Sjkim
1590283092Sjkim} ACPI_NFIT_DATA_REGION;
1591283092Sjkim
1592283092Sjkim
1593283092Sjkim/* 6: Flush Hint Address Structure */
1594283092Sjkim
1595283092Sjkimtypedef struct acpi_nfit_flush_address
1596283092Sjkim{
1597283092Sjkim    ACPI_NFIT_HEADER        Header;
1598283092Sjkim    UINT32                  DeviceHandle;
1599283092Sjkim    UINT16                  HintCount;
1600283092Sjkim    UINT8                   Reserved[6];        /* Reserved, must be zero */
1601283092Sjkim    UINT64                  HintAddress[1];     /* Variable length */
1602283092Sjkim
1603283092Sjkim} ACPI_NFIT_FLUSH_ADDRESS;
1604283092Sjkim
1605283092Sjkim
1606327557Sjkim/* 7: Platform Capabilities Structure */
1607327557Sjkim
1608327557Sjkimtypedef struct acpi_nfit_capabilities
1609327557Sjkim{
1610327557Sjkim    ACPI_NFIT_HEADER        Header;
1611327557Sjkim    UINT8                   HighestCapability;
1612327557Sjkim    UINT8                   Reserved[3];       /* Reserved, must be zero */
1613327557Sjkim    UINT32                  Capabilities;
1614327557Sjkim    UINT32                  Reserved2;
1615327557Sjkim
1616327557Sjkim} ACPI_NFIT_CAPABILITIES;
1617327557Sjkim
1618327557Sjkim/* Capabilities Flags */
1619327557Sjkim
1620327557Sjkim#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)     /* 00: Cache Flush to NVDIMM capable */
1621327557Sjkim#define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)  /* 01: Memory Flush to NVDIMM capable */
1622327557Sjkim#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)  /* 02: Memory Mirroring capable */
1623327557Sjkim
1624327557Sjkim
1625327557Sjkim/*
1626327557Sjkim * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
1627327557Sjkim */
1628327557Sjkimtypedef struct nfit_device_handle
1629327557Sjkim{
1630327557Sjkim    UINT32                  Handle;
1631327557Sjkim
1632327557Sjkim} NFIT_DEVICE_HANDLE;
1633327557Sjkim
1634327557Sjkim/* Device handle construction and extraction macros */
1635327557Sjkim
1636327557Sjkim#define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
1637327557Sjkim#define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
1638327557Sjkim#define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
1639327557Sjkim#define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
1640327557Sjkim#define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
1641327557Sjkim
1642327557Sjkim#define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
1643327557Sjkim#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
1644327557Sjkim#define ACPI_NFIT_MEMORY_ID_OFFSET              8
1645327557Sjkim#define ACPI_NFIT_SOCKET_ID_OFFSET              12
1646327557Sjkim#define ACPI_NFIT_NODE_ID_OFFSET                16
1647327557Sjkim
1648327557Sjkim/* Macro to construct a NFIT/NVDIMM device handle */
1649327557Sjkim
1650327557Sjkim#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
1651327557Sjkim    ((dimm)                                         | \
1652327557Sjkim    ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
1653327557Sjkim    ((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
1654327557Sjkim    ((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
1655327557Sjkim    ((node)    << ACPI_NFIT_NODE_ID_OFFSET))
1656327557Sjkim
1657327557Sjkim/* Macros to extract individual fields from a NFIT/NVDIMM device handle */
1658327557Sjkim
1659327557Sjkim#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
1660327557Sjkim    ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
1661327557Sjkim
1662327557Sjkim#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
1663327557Sjkim    (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
1664327557Sjkim
1665327557Sjkim#define ACPI_NFIT_GET_MEMORY_ID(handle) \
1666327557Sjkim    (((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
1667327557Sjkim
1668327557Sjkim#define ACPI_NFIT_GET_SOCKET_ID(handle) \
1669327557Sjkim    (((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
1670327557Sjkim
1671327557Sjkim#define ACPI_NFIT_GET_NODE_ID(handle) \
1672327557Sjkim    (((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
1673327557Sjkim
1674327557Sjkim
1675283092Sjkim/*******************************************************************************
1676283092Sjkim *
1677327557Sjkim * PDTT - Platform Debug Trigger Table (ACPI 6.2)
1678327557Sjkim *        Version 0
1679327557Sjkim *
1680327557Sjkim ******************************************************************************/
1681327557Sjkim
1682327557Sjkimtypedef struct acpi_table_pdtt
1683327557Sjkim{
1684327557Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1685327557Sjkim    UINT8                   TriggerCount;
1686327557Sjkim    UINT8                   Reserved[3];
1687327557Sjkim    UINT32                  ArrayOffset;
1688327557Sjkim
1689327557Sjkim} ACPI_TABLE_PDTT;
1690327557Sjkim
1691327557Sjkim
1692327557Sjkim/*
1693327557Sjkim * PDTT Communication Channel Identifier Structure.
1694327557Sjkim * The number of these structures is defined by TriggerCount above,
1695327557Sjkim * starting at ArrayOffset.
1696327557Sjkim */
1697327557Sjkimtypedef struct acpi_pdtt_channel
1698327557Sjkim{
1699327557Sjkim    UINT8                   SubchannelId;
1700327557Sjkim    UINT8                   Flags;
1701327557Sjkim
1702327557Sjkim} ACPI_PDTT_CHANNEL;
1703327557Sjkim
1704327557Sjkim/* Flags for above */
1705327557Sjkim
1706327557Sjkim#define ACPI_PDTT_RUNTIME_TRIGGER           (1)
1707327557Sjkim#define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
1708327557Sjkim
1709327557Sjkim
1710327557Sjkim/*******************************************************************************
1711327557Sjkim *
1712322877Sjkim * PPTT - Processor Properties Topology Table (ACPI 6.2)
1713322877Sjkim *        Version 1
1714322877Sjkim *
1715322877Sjkim ******************************************************************************/
1716322877Sjkim
1717322877Sjkimtypedef struct acpi_table_pptt
1718322877Sjkim{
1719322877Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1720322877Sjkim
1721322877Sjkim} ACPI_TABLE_PPTT;
1722322877Sjkim
1723322877Sjkim/* Values for Type field above */
1724322877Sjkim
1725322877Sjkimenum AcpiPpttType
1726322877Sjkim{
1727322877Sjkim    ACPI_PPTT_TYPE_PROCESSOR            = 0,
1728322877Sjkim    ACPI_PPTT_TYPE_CACHE                = 1,
1729322877Sjkim    ACPI_PPTT_TYPE_ID                   = 2,
1730322877Sjkim    ACPI_PPTT_TYPE_RESERVED             = 3
1731322877Sjkim};
1732322877Sjkim
1733322877Sjkim
1734322877Sjkim/* 0: Processor Hierarchy Node Structure */
1735322877Sjkim
1736327557Sjkimtypedef struct acpi_pptt_processor
1737327557Sjkim{
1738322877Sjkim    ACPI_SUBTABLE_HEADER    Header;
1739322877Sjkim    UINT16                  Reserved;
1740322877Sjkim    UINT32                  Flags;
1741322877Sjkim    UINT32                  Parent;
1742322877Sjkim    UINT32                  AcpiProcessorId;
1743322877Sjkim    UINT32                  NumberOfPrivResources;
1744322877Sjkim
1745322877Sjkim} ACPI_PPTT_PROCESSOR;
1746322877Sjkim
1747322877Sjkim/* Flags */
1748322877Sjkim
1749322877Sjkim#define ACPI_PPTT_PHYSICAL_PACKAGE          (1)     /* Physical package */
1750322877Sjkim#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (2)     /* ACPI Processor ID valid */
1751322877Sjkim
1752322877Sjkim
1753322877Sjkim/* 1: Cache Type Structure */
1754322877Sjkim
1755327557Sjkimtypedef struct acpi_pptt_cache
1756327557Sjkim{
1757322877Sjkim    ACPI_SUBTABLE_HEADER    Header;
1758322877Sjkim    UINT16                  Reserved;
1759322877Sjkim    UINT32                  Flags;
1760322877Sjkim    UINT32                  NextLevelOfCache;
1761322877Sjkim    UINT32                  Size;
1762322877Sjkim    UINT32                  NumberOfSets;
1763322877Sjkim    UINT8                   Associativity;
1764322877Sjkim    UINT8                   Attributes;
1765322877Sjkim    UINT16                  LineSize;
1766322877Sjkim
1767322877Sjkim} ACPI_PPTT_CACHE;
1768322877Sjkim
1769322877Sjkim/* Flags */
1770322877Sjkim
1771322877Sjkim#define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)     /* Physical property valid */
1772322877Sjkim#define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)  /* Number of sets valid */
1773322877Sjkim#define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)  /* Associativity valid */
1774322877Sjkim#define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)  /* Allocation type valid */
1775322877Sjkim#define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)  /* Cache type valid */
1776322877Sjkim#define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)  /* Write policy valid */
1777322877Sjkim#define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)  /* Line size valid */
1778322877Sjkim
1779322877Sjkim/* Masks for Attributes */
1780322877Sjkim
1781322877Sjkim#define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)  /* Allocation type */
1782322877Sjkim#define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)  /* Cache type */
1783322877Sjkim#define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)  /* Write policy */
1784322877Sjkim
1785327557Sjkim/* Attributes describing cache */
1786327557Sjkim#define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)   /* Cache line is allocated on read */
1787327557Sjkim#define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)  /* Cache line is allocated on write */
1788327557Sjkim#define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)  /* Cache line is allocated on read and write */
1789327557Sjkim#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)  /* Alternate representation of above */
1790322877Sjkim
1791327557Sjkim#define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)   /* Data cache */
1792327557Sjkim#define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)  /* Instruction cache */
1793327557Sjkim#define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)  /* Unified I & D cache */
1794327557Sjkim#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)  /* Alternate representation of above */
1795327557Sjkim
1796327557Sjkim#define ACPI_PPTT_CACHE_POLICY_WB           (0x0)   /* Cache is write back */
1797327557Sjkim#define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)  /* Cache is write through */
1798327557Sjkim
1799322877Sjkim/* 2: ID Structure */
1800322877Sjkim
1801327557Sjkimtypedef struct acpi_pptt_id
1802327557Sjkim{
1803322877Sjkim    ACPI_SUBTABLE_HEADER    Header;
1804322877Sjkim    UINT16                  Reserved;
1805322877Sjkim    UINT32                  VendorId;
1806322877Sjkim    UINT64                  Level1Id;
1807322877Sjkim    UINT64                  Level2Id;
1808322877Sjkim    UINT16                  MajorRev;
1809322877Sjkim    UINT16                  MinorRev;
1810322877Sjkim    UINT16                  SpinRev;
1811322877Sjkim
1812322877Sjkim} ACPI_PPTT_ID;
1813322877Sjkim
1814322877Sjkim
1815322877Sjkim/*******************************************************************************
1816322877Sjkim *
1817167802Sjkim * SBST - Smart Battery Specification Table
1818197104Sjkim *        Version 1
1819167802Sjkim *
1820167802Sjkim ******************************************************************************/
1821167802Sjkim
1822167802Sjkimtypedef struct acpi_table_sbst
1823167802Sjkim{
1824167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1825167802Sjkim    UINT32                  WarningLevel;
1826167802Sjkim    UINT32                  LowLevel;
1827167802Sjkim    UINT32                  CriticalLevel;
1828167802Sjkim
1829167802Sjkim} ACPI_TABLE_SBST;
1830167802Sjkim
1831167802Sjkim
1832167802Sjkim/*******************************************************************************
1833167802Sjkim *
1834327557Sjkim * SDEV - Secure Devices Table (ACPI 6.2)
1835327557Sjkim *        Version 1
1836327557Sjkim *
1837327557Sjkim ******************************************************************************/
1838327557Sjkim
1839327557Sjkimtypedef struct acpi_table_sdev
1840327557Sjkim{
1841327557Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1842327557Sjkim
1843327557Sjkim} ACPI_TABLE_SDEV;
1844327557Sjkim
1845327557Sjkim
1846327557Sjkimtypedef struct acpi_sdev_header
1847327557Sjkim{
1848327557Sjkim    UINT8                   Type;
1849327557Sjkim    UINT8                   Flags;
1850327557Sjkim    UINT16                  Length;
1851327557Sjkim
1852327557Sjkim} ACPI_SDEV_HEADER;
1853327557Sjkim
1854327557Sjkim
1855327557Sjkim/* Values for subtable type above */
1856327557Sjkim
1857327557Sjkimenum AcpiSdevType
1858327557Sjkim{
1859327557Sjkim    ACPI_SDEV_TYPE_NAMESPACE_DEVICE     = 0,
1860327557Sjkim    ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
1861327557Sjkim    ACPI_SDEV_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
1862327557Sjkim};
1863327557Sjkim
1864327557Sjkim/* Values for flags above */
1865327557Sjkim
1866327557Sjkim#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
1867327557Sjkim
1868327557Sjkim/*
1869327557Sjkim * SDEV subtables
1870327557Sjkim */
1871327557Sjkim
1872327557Sjkim/* 0: Namespace Device Based Secure Device Structure */
1873327557Sjkim
1874327557Sjkimtypedef struct acpi_sdev_namespace
1875327557Sjkim{
1876327557Sjkim    ACPI_SDEV_HEADER        Header;
1877327557Sjkim    UINT16                  DeviceIdOffset;
1878327557Sjkim    UINT16                  DeviceIdLength;
1879327557Sjkim    UINT16                  VendorDataOffset;
1880327557Sjkim    UINT16                  VendorDataLength;
1881327557Sjkim
1882327557Sjkim} ACPI_SDEV_NAMESPACE;
1883327557Sjkim
1884327557Sjkim/* 1: PCIe Endpoint Device Based Device Structure */
1885327557Sjkim
1886327557Sjkimtypedef struct acpi_sdev_pcie
1887327557Sjkim{
1888327557Sjkim    ACPI_SDEV_HEADER        Header;
1889327557Sjkim    UINT16                  Segment;
1890327557Sjkim    UINT16                  StartBus;
1891327557Sjkim    UINT16                  PathOffset;
1892327557Sjkim    UINT16                  PathLength;
1893327557Sjkim    UINT16                  VendorDataOffset;
1894327557Sjkim    UINT16                  VendorDataLength;
1895327557Sjkim
1896327557Sjkim} ACPI_SDEV_PCIE;
1897327557Sjkim
1898327557Sjkim/* 1a: PCIe Endpoint path entry */
1899327557Sjkim
1900327557Sjkimtypedef struct acpi_sdev_pcie_path
1901327557Sjkim{
1902327557Sjkim    UINT8                   Device;
1903327557Sjkim    UINT8                   Function;
1904327557Sjkim
1905327557Sjkim} ACPI_SDEV_PCIE_PATH;
1906327557Sjkim
1907327557Sjkim
1908327557Sjkim/*******************************************************************************
1909327557Sjkim *
1910167802Sjkim * SLIT - System Locality Distance Information Table
1911197104Sjkim *        Version 1
1912167802Sjkim *
1913167802Sjkim ******************************************************************************/
1914167802Sjkim
1915167802Sjkimtypedef struct acpi_table_slit
1916167802Sjkim{
1917167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1918167802Sjkim    UINT64                  LocalityCount;
1919167802Sjkim    UINT8                   Entry[1];           /* Real size = localities^2 */
1920167802Sjkim
1921167802Sjkim} ACPI_TABLE_SLIT;
1922167802Sjkim
1923167802Sjkim
1924167802Sjkim/*******************************************************************************
1925167802Sjkim *
1926167802Sjkim * SRAT - System Resource Affinity Table
1927197104Sjkim *        Version 3
1928167802Sjkim *
1929167802Sjkim ******************************************************************************/
1930167802Sjkim
1931167802Sjkimtypedef struct acpi_table_srat
1932167802Sjkim{
1933167802Sjkim    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1934167802Sjkim    UINT32                  TableRevision;      /* Must be value '1' */
1935167802Sjkim    UINT64                  Reserved;           /* Reserved, must be zero */
1936167802Sjkim
1937167802Sjkim} ACPI_TABLE_SRAT;
1938167802Sjkim
1939167802Sjkim/* Values for subtable type in ACPI_SUBTABLE_HEADER */
1940167802Sjkim
1941167802Sjkimenum AcpiSratType
1942167802Sjkim{
1943193267Sjkim    ACPI_SRAT_TYPE_CPU_AFFINITY         = 0,
1944193267Sjkim    ACPI_SRAT_TYPE_MEMORY_AFFINITY      = 1,
1945193267Sjkim    ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY  = 2,
1946272444Sjkim    ACPI_SRAT_TYPE_GICC_AFFINITY        = 3,
1947322877Sjkim    ACPI_SRAT_TYPE_GIC_ITS_AFFINITY     = 4,    /* ACPI 6.2 */
1948322877Sjkim    ACPI_SRAT_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
1949167802Sjkim};
1950167802Sjkim
1951193267Sjkim/*
1952272444Sjkim * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
1953193267Sjkim */
1954167802Sjkim
1955193267Sjkim/* 0: Processor Local APIC/SAPIC Affinity */
1956193267Sjkim
1957167802Sjkimtypedef struct acpi_srat_cpu_affinity
1958167802Sjkim{
1959167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1960167802Sjkim    UINT8                   ProximityDomainLo;
1961167802Sjkim    UINT8                   ApicId;
1962167802Sjkim    UINT32                  Flags;
1963167802Sjkim    UINT8                   LocalSapicEid;
1964167802Sjkim    UINT8                   ProximityDomainHi[3];
1965272444Sjkim    UINT32                  ClockDomain;
1966167802Sjkim
1967167802Sjkim} ACPI_SRAT_CPU_AFFINITY;
1968167802Sjkim
1969197104Sjkim/* Flags */
1970197104Sjkim
1971197104Sjkim#define ACPI_SRAT_CPU_USE_AFFINITY  (1)         /* 00: Use affinity structure */
1972197104Sjkim
1973197104Sjkim
1974193267Sjkim/* 1: Memory Affinity */
1975167802Sjkim
1976167802Sjkimtypedef struct acpi_srat_mem_affinity
1977167802Sjkim{
1978167802Sjkim    ACPI_SUBTABLE_HEADER    Header;
1979167802Sjkim    UINT32                  ProximityDomain;
1980167802Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
1981167802Sjkim    UINT64                  BaseAddress;
1982167802Sjkim    UINT64                  Length;
1983193267Sjkim    UINT32                  Reserved1;
1984167802Sjkim    UINT32                  Flags;
1985193267Sjkim    UINT64                  Reserved2;          /* Reserved, must be zero */
1986167802Sjkim
1987167802Sjkim} ACPI_SRAT_MEM_AFFINITY;
1988167802Sjkim
1989167802Sjkim/* Flags */
1990167802Sjkim
1991167802Sjkim#define ACPI_SRAT_MEM_ENABLED       (1)         /* 00: Use affinity structure */
1992167802Sjkim#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)      /* 01: Memory region is hot pluggable */
1993167802Sjkim#define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)      /* 02: Memory region is non-volatile */
1994167802Sjkim
1995167802Sjkim
1996197104Sjkim/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
1997197104Sjkim
1998193267Sjkimtypedef struct acpi_srat_x2apic_cpu_affinity
1999167802Sjkim{
2000193267Sjkim    ACPI_SUBTABLE_HEADER    Header;
2001193267Sjkim    UINT16                  Reserved;           /* Reserved, must be zero */
2002193267Sjkim    UINT32                  ProximityDomain;
2003193267Sjkim    UINT32                  ApicId;
2004193267Sjkim    UINT32                  Flags;
2005197104Sjkim    UINT32                  ClockDomain;
2006197104Sjkim    UINT32                  Reserved2;
2007167802Sjkim
2008193267Sjkim} ACPI_SRAT_X2APIC_CPU_AFFINITY;
2009167802Sjkim
2010193267Sjkim/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
2011193267Sjkim
2012193267Sjkim#define ACPI_SRAT_CPU_ENABLED       (1)         /* 00: Use affinity structure */
2013193267Sjkim
2014193267Sjkim
2015272444Sjkim/* 3: GICC Affinity (ACPI 5.1) */
2016272444Sjkim
2017272444Sjkimtypedef struct acpi_srat_gicc_affinity
2018272444Sjkim{
2019272444Sjkim    ACPI_SUBTABLE_HEADER    Header;
2020272444Sjkim    UINT32                  ProximityDomain;
2021272444Sjkim    UINT32                  AcpiProcessorUid;
2022272444Sjkim    UINT32                  Flags;
2023272444Sjkim    UINT32                  ClockDomain;
2024272444Sjkim
2025272444Sjkim} ACPI_SRAT_GICC_AFFINITY;
2026272444Sjkim
2027272444Sjkim/* Flags for ACPI_SRAT_GICC_AFFINITY */
2028272444Sjkim
2029272444Sjkim#define ACPI_SRAT_GICC_ENABLED     (1)         /* 00: Use affinity structure */
2030272444Sjkim
2031283092Sjkim
2032322877Sjkim/* 4: GCC ITS Affinity (ACPI 6.2) */
2033322877Sjkim
2034322877Sjkimtypedef struct acpi_srat_gic_its_affinity
2035322877Sjkim{
2036322877Sjkim    ACPI_SUBTABLE_HEADER    Header;
2037322877Sjkim    UINT32                  ProximityDomain;
2038322877Sjkim    UINT16                  Reserved;
2039322877Sjkim    UINT32                  ItsId;
2040322877Sjkim
2041322877Sjkim} ACPI_SRAT_GIC_ITS_AFFINITY;
2042322877Sjkim
2043322877Sjkim
2044167802Sjkim/* Reset to default packing */
2045167802Sjkim
204669450Smsmith#pragma pack()
204769450Smsmith
204869450Smsmith#endif /* __ACTBL1_H__ */
2049