xref: /freebsd/sys/contrib/dev/acpica/include/actbl2.h (revision 1970d69303946116e6c88ab5b903ae4b65efddc5)
1d6dd1baeSJung-uk Kim /******************************************************************************
2d6dd1baeSJung-uk Kim  *
3dcbce41eSJung-uk Kim  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4d6dd1baeSJung-uk Kim  *
5d6dd1baeSJung-uk Kim  *****************************************************************************/
6d6dd1baeSJung-uk Kim 
70d84335fSJung-uk Kim /******************************************************************************
80d84335fSJung-uk Kim  *
90d84335fSJung-uk Kim  * 1. Copyright Notice
100d84335fSJung-uk Kim  *
1129f37e9bSJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
12d6dd1baeSJung-uk Kim  * All rights reserved.
13d6dd1baeSJung-uk Kim  *
140d84335fSJung-uk Kim  * 2. License
150d84335fSJung-uk Kim  *
160d84335fSJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
170d84335fSJung-uk Kim  * rights. You may have additional license terms from the party that provided
180d84335fSJung-uk Kim  * you this software, covering your right to use that party's intellectual
190d84335fSJung-uk Kim  * property rights.
200d84335fSJung-uk Kim  *
210d84335fSJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
220d84335fSJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
230d84335fSJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
240d84335fSJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
250d84335fSJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
260d84335fSJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
270d84335fSJung-uk Kim  *
280d84335fSJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
290d84335fSJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
300d84335fSJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
310d84335fSJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
320d84335fSJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
330d84335fSJung-uk Kim  * license, and in no event shall the patent license extend to any additions
340d84335fSJung-uk Kim  * to or modifications of the Original Intel Code. No other license or right
350d84335fSJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
360d84335fSJung-uk Kim  *
370d84335fSJung-uk Kim  * The above copyright and patent license is granted only if the following
380d84335fSJung-uk Kim  * conditions are met:
390d84335fSJung-uk Kim  *
400d84335fSJung-uk Kim  * 3. Conditions
410d84335fSJung-uk Kim  *
420d84335fSJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
430d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
440d84335fSJung-uk Kim  * Code or modification with rights to further distribute source must include
450d84335fSJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
460d84335fSJung-uk Kim  * and the following Disclaimer and Export Compliance provision. In addition,
470d84335fSJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
480d84335fSJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
490d84335fSJung-uk Kim  * Code and the date of any change. Licensee must include in that file the
500d84335fSJung-uk Kim  * documentation of any changes made by any predecessor Licensee. Licensee
510d84335fSJung-uk Kim  * must include a prominent statement that the modification is derived,
520d84335fSJung-uk Kim  * directly or indirectly, from Original Intel Code.
530d84335fSJung-uk Kim  *
540d84335fSJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
550d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
560d84335fSJung-uk Kim  * Code or modification without rights to further distribute source must
570d84335fSJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
580d84335fSJung-uk Kim  * documentation and/or other materials provided with distribution. In
590d84335fSJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
600d84335fSJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
610d84335fSJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
620d84335fSJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
630d84335fSJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
640d84335fSJung-uk Kim  * make.
650d84335fSJung-uk Kim  *
660d84335fSJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
670d84335fSJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
680d84335fSJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
690d84335fSJung-uk Kim  * provision in the documentation and/or other materials provided with the
700d84335fSJung-uk Kim  * distribution.
710d84335fSJung-uk Kim  *
720d84335fSJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
730d84335fSJung-uk Kim  * Intel Code.
740d84335fSJung-uk Kim  *
750d84335fSJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
760d84335fSJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
770d84335fSJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
780d84335fSJung-uk Kim  * without prior written authorization from Intel.
790d84335fSJung-uk Kim  *
800d84335fSJung-uk Kim  * 4. Disclaimer and Export Compliance
810d84335fSJung-uk Kim  *
820d84335fSJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
830d84335fSJung-uk Kim  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
840d84335fSJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
850d84335fSJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
860d84335fSJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
870d84335fSJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
880d84335fSJung-uk Kim  * PARTICULAR PURPOSE.
890d84335fSJung-uk Kim  *
900d84335fSJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
910d84335fSJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
920d84335fSJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
930d84335fSJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
940d84335fSJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
950d84335fSJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
960d84335fSJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
970d84335fSJung-uk Kim  * LIMITED REMEDY.
980d84335fSJung-uk Kim  *
990d84335fSJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1000d84335fSJung-uk Kim  * software or system incorporating such software without first obtaining any
1010d84335fSJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
1020d84335fSJung-uk Kim  * any other agency or department of the United States Government. In the
1030d84335fSJung-uk Kim  * event Licensee exports any such software from the United States or
1040d84335fSJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
1050d84335fSJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
1060d84335fSJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
1070d84335fSJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1080d84335fSJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
1090d84335fSJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
1100d84335fSJung-uk Kim  * United States government or any agency thereof requires an export license,
1110d84335fSJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
1120d84335fSJung-uk Kim  * such license, approval or letter.
1130d84335fSJung-uk Kim  *
1140d84335fSJung-uk Kim  *****************************************************************************
1150d84335fSJung-uk Kim  *
1160d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
1170d84335fSJung-uk Kim  * following license:
1180d84335fSJung-uk Kim  *
119d244b227SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
120d244b227SJung-uk Kim  * modification, are permitted provided that the following conditions
121d244b227SJung-uk Kim  * are met:
122d244b227SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
123d244b227SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
124d244b227SJung-uk Kim  *    without modification.
125d244b227SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126d244b227SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
127d244b227SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
128d244b227SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
129d244b227SJung-uk Kim  *    binary redistribution.
130d244b227SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
131d244b227SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
132d244b227SJung-uk Kim  *    from this software without specific prior written permission.
133d6dd1baeSJung-uk Kim  *
1340d84335fSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1350d84335fSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1360d84335fSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1370d84335fSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1380d84335fSJung-uk Kim  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1390d84335fSJung-uk Kim  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1400d84335fSJung-uk Kim  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1410d84335fSJung-uk Kim  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1420d84335fSJung-uk Kim  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1430d84335fSJung-uk Kim  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1440d84335fSJung-uk Kim  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1450d84335fSJung-uk Kim  *
1460d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
147d244b227SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
148d244b227SJung-uk Kim  * Software Foundation.
149d6dd1baeSJung-uk Kim  *
1500d84335fSJung-uk Kim  *****************************************************************************/
151d6dd1baeSJung-uk Kim 
152d6dd1baeSJung-uk Kim #ifndef __ACTBL2_H__
153d6dd1baeSJung-uk Kim #define __ACTBL2_H__
154d6dd1baeSJung-uk Kim 
155d6dd1baeSJung-uk Kim 
156d6dd1baeSJung-uk Kim /*******************************************************************************
157d6dd1baeSJung-uk Kim  *
158d6dd1baeSJung-uk Kim  * Additional ACPI Tables (2)
159d6dd1baeSJung-uk Kim  *
160d6dd1baeSJung-uk Kim  * These tables are not consumed directly by the ACPICA subsystem, but are
161d6dd1baeSJung-uk Kim  * included here to support device drivers and the AML disassembler.
162d6dd1baeSJung-uk Kim  *
163d6dd1baeSJung-uk Kim  ******************************************************************************/
164d6dd1baeSJung-uk Kim 
165d6dd1baeSJung-uk Kim 
166d6dd1baeSJung-uk Kim /*
167d6dd1baeSJung-uk Kim  * Values for description table header signatures for tables defined in this
168d6dd1baeSJung-uk Kim  * file. Useful because they make it more difficult to inadvertently type in
169d6dd1baeSJung-uk Kim  * the wrong signature.
170d6dd1baeSJung-uk Kim  */
171*1970d693SJung-uk Kim #define ACPI_SIG_BDAT           "BDAT"      /* BIOS Data ACPI Table */
172a371a5fdSJung-uk Kim #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
173d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
174313a0c13SJung-uk Kim #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
175ff879b07SJung-uk Kim #define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
176d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
177ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
178ff879b07SJung-uk Kim #define ACPI_SIG_MPST           "MPST"      /* Memory Power State Table */
179ff879b07SJung-uk Kim #define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table */
1807cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
181ff879b07SJung-uk Kim #define ACPI_SIG_NFIT           "NFIT"      /* NVDIMM Firmware Interface Table */
182ff879b07SJung-uk Kim #define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
183ff879b07SJung-uk Kim #define ACPI_SIG_PDTT           "PDTT"      /* Platform Debug Trigger Table */
184cfd1ed46SJung-uk Kim #define ACPI_SIG_PHAT           "PHAT"      /* Platform Health Assessment Table */
185ff879b07SJung-uk Kim #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
186ff879b07SJung-uk Kim #define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
187*1970d693SJung-uk Kim #define ACPI_SIG_PRMT           "PRMT"      /* Platform Runtime Mechanism Table */
188ff879b07SJung-uk Kim #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
189*1970d693SJung-uk Kim #define ACPI_SIG_RGRT           "RGRT"      /* Regulatory Graphics Resource Table */
190ff879b07SJung-uk Kim #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
1915f9b24faSJung-uk Kim #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated Exception Interface Table */
192ff879b07SJung-uk Kim #define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
1933ee58df5SJung-uk Kim #define ACPI_SIG_NHLT           "NHLT"      /* Non-HDAudio Link Table */
194*1970d693SJung-uk Kim #define ACPI_SIG_SVKL           "SVKL"      /* Storage Volume Key Location Table */
195d6dd1baeSJung-uk Kim 
196d6dd1baeSJung-uk Kim 
197d6dd1baeSJung-uk Kim /*
198d6dd1baeSJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
199d6dd1baeSJung-uk Kim  * the tables are provided by the system BIOS.
200d6dd1baeSJung-uk Kim  */
201d6dd1baeSJung-uk Kim #pragma pack(1)
202d6dd1baeSJung-uk Kim 
203d6dd1baeSJung-uk Kim /*
2041df130f1SJung-uk Kim  * Note: C bitfields are not used for this reason:
2051df130f1SJung-uk Kim  *
2061df130f1SJung-uk Kim  * "Bitfields are great and easy to read, but unfortunately the C language
2071df130f1SJung-uk Kim  * does not specify the layout of bitfields in memory, which means they are
2081df130f1SJung-uk Kim  * essentially useless for dealing with packed data in on-disk formats or
2091df130f1SJung-uk Kim  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
2101df130f1SJung-uk Kim  * this decision was a design error in C. Ritchie could have picked an order
2111df130f1SJung-uk Kim  * and stuck with it." Norman Ramsey.
2121df130f1SJung-uk Kim  * See http://stackoverflow.com/a/1053662/41661
213d6dd1baeSJung-uk Kim  */
214d6dd1baeSJung-uk Kim 
215d6dd1baeSJung-uk Kim 
216d6dd1baeSJung-uk Kim /*******************************************************************************
217d6dd1baeSJung-uk Kim  *
218*1970d693SJung-uk Kim  * BDAT - BIOS Data ACPI Table
219*1970d693SJung-uk Kim  *
220*1970d693SJung-uk Kim  * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
221*1970d693SJung-uk Kim  * Nov 2020
222*1970d693SJung-uk Kim  *
223*1970d693SJung-uk Kim  ******************************************************************************/
224*1970d693SJung-uk Kim 
225*1970d693SJung-uk Kim typedef struct acpi_table_bdat
226*1970d693SJung-uk Kim {
227*1970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;
228*1970d693SJung-uk Kim     ACPI_GENERIC_ADDRESS    Gas;
229*1970d693SJung-uk Kim 
230*1970d693SJung-uk Kim } ACPI_TABLE_BDAT;
231*1970d693SJung-uk Kim 
232*1970d693SJung-uk Kim 
233*1970d693SJung-uk Kim /*******************************************************************************
234*1970d693SJung-uk Kim  *
235a371a5fdSJung-uk Kim  * IORT - IO Remapping Table
236a371a5fdSJung-uk Kim  *
237a371a5fdSJung-uk Kim  * Conforms to "IO Remapping Table System Software on ARM Platforms",
238cfd1ed46SJung-uk Kim  * Document number: ARM DEN 0049E.b, Feb 2021
239a371a5fdSJung-uk Kim  *
240a371a5fdSJung-uk Kim  ******************************************************************************/
241a371a5fdSJung-uk Kim 
242a371a5fdSJung-uk Kim typedef struct acpi_table_iort
243a371a5fdSJung-uk Kim {
244a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;
245a371a5fdSJung-uk Kim     UINT32                  NodeCount;
246a371a5fdSJung-uk Kim     UINT32                  NodeOffset;
247a371a5fdSJung-uk Kim     UINT32                  Reserved;
248a371a5fdSJung-uk Kim 
249a371a5fdSJung-uk Kim } ACPI_TABLE_IORT;
250a371a5fdSJung-uk Kim 
251a371a5fdSJung-uk Kim 
252a371a5fdSJung-uk Kim /*
253a371a5fdSJung-uk Kim  * IORT subtables
254a371a5fdSJung-uk Kim  */
255a371a5fdSJung-uk Kim typedef struct acpi_iort_node
256a371a5fdSJung-uk Kim {
257a371a5fdSJung-uk Kim     UINT8                   Type;
258a371a5fdSJung-uk Kim     UINT16                  Length;
259a371a5fdSJung-uk Kim     UINT8                   Revision;
260cfd1ed46SJung-uk Kim     UINT32                  Identifier;
261a371a5fdSJung-uk Kim     UINT32                  MappingCount;
262a371a5fdSJung-uk Kim     UINT32                  MappingOffset;
263a371a5fdSJung-uk Kim     char                    NodeData[1];
264a371a5fdSJung-uk Kim 
265a371a5fdSJung-uk Kim } ACPI_IORT_NODE;
266a371a5fdSJung-uk Kim 
267a371a5fdSJung-uk Kim /* Values for subtable Type above */
268a371a5fdSJung-uk Kim 
269a371a5fdSJung-uk Kim enum AcpiIortNodeType
270a371a5fdSJung-uk Kim {
271a371a5fdSJung-uk Kim     ACPI_IORT_NODE_ITS_GROUP            = 0x00,
272a371a5fdSJung-uk Kim     ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
273a371a5fdSJung-uk Kim     ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
274f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU                 = 0x03,
2753d90091dSJung-uk Kim     ACPI_IORT_NODE_SMMU_V3              = 0x04,
276cfd1ed46SJung-uk Kim     ACPI_IORT_NODE_PMCG                 = 0x05,
277cfd1ed46SJung-uk Kim     ACPI_IORT_NODE_RMR                  = 0x06,
278a371a5fdSJung-uk Kim };
279a371a5fdSJung-uk Kim 
280a371a5fdSJung-uk Kim 
281a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping
282a371a5fdSJung-uk Kim {
283a371a5fdSJung-uk Kim     UINT32                  InputBase;          /* Lowest value in input range */
284a371a5fdSJung-uk Kim     UINT32                  IdCount;            /* Number of IDs */
285a371a5fdSJung-uk Kim     UINT32                  OutputBase;         /* Lowest value in output range */
286a371a5fdSJung-uk Kim     UINT32                  OutputReference;    /* A reference to the output node */
287a371a5fdSJung-uk Kim     UINT32                  Flags;
288a371a5fdSJung-uk Kim 
289a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING;
290a371a5fdSJung-uk Kim 
291a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */
292a371a5fdSJung-uk Kim 
293a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1)
294a371a5fdSJung-uk Kim 
295a371a5fdSJung-uk Kim 
296a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access
297a371a5fdSJung-uk Kim {
298a371a5fdSJung-uk Kim     UINT32                  CacheCoherency;
299a371a5fdSJung-uk Kim     UINT8                   Hints;
300a371a5fdSJung-uk Kim     UINT16                  Reserved;
301a371a5fdSJung-uk Kim     UINT8                   MemoryFlags;
302a371a5fdSJung-uk Kim 
303a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS;
304a371a5fdSJung-uk Kim 
305a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */
306a371a5fdSJung-uk Kim 
307a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
308a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
309a371a5fdSJung-uk Kim 
310a371a5fdSJung-uk Kim /* Masks for Hints field above */
311a371a5fdSJung-uk Kim 
312a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT          (1)
313a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE              (1<<1)
314a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ               (1<<2)
315a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE           (1<<3)
316a371a5fdSJung-uk Kim 
317a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */
318a371a5fdSJung-uk Kim 
319a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY          (1)
320a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
321a371a5fdSJung-uk Kim 
322a371a5fdSJung-uk Kim 
323a371a5fdSJung-uk Kim /*
324a371a5fdSJung-uk Kim  * IORT node specific subtables
325a371a5fdSJung-uk Kim  */
326a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group
327a371a5fdSJung-uk Kim {
328a371a5fdSJung-uk Kim     UINT32                  ItsCount;
329cd6518c7SJung-uk Kim     UINT32                  Identifiers[1];         /* GIC ITS identifier array */
330a371a5fdSJung-uk Kim 
331a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP;
332a371a5fdSJung-uk Kim 
333a371a5fdSJung-uk Kim 
334a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component
335a371a5fdSJung-uk Kim {
336a371a5fdSJung-uk Kim     UINT32                  NodeFlags;
337a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
338a371a5fdSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
339a371a5fdSJung-uk Kim     char                    DeviceName[1];          /* Path of namespace object */
340a371a5fdSJung-uk Kim 
341a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT;
342a371a5fdSJung-uk Kim 
3433d90091dSJung-uk Kim /* Masks for Flags field above */
3443d90091dSJung-uk Kim 
3453d90091dSJung-uk Kim #define ACPI_IORT_NC_STALL_SUPPORTED    (1)
3463d90091dSJung-uk Kim #define ACPI_IORT_NC_PASID_BITS         (31<<1)
347a371a5fdSJung-uk Kim 
348a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex
349a371a5fdSJung-uk Kim {
350a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
351a371a5fdSJung-uk Kim     UINT32                  AtsAttribute;
352a371a5fdSJung-uk Kim     UINT32                  PciSegmentNumber;
3533d90091dSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
3543d90091dSJung-uk Kim     UINT8                   Reserved[3];            /* Reserved, must be zero */
355a371a5fdSJung-uk Kim 
356a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX;
357a371a5fdSJung-uk Kim 
358cfd1ed46SJung-uk Kim /* Masks for AtsAttribute field above */
359a371a5fdSJung-uk Kim 
360cfd1ed46SJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED         (1)     /* The root complex ATS support */
361cfd1ed46SJung-uk Kim #define ACPI_IORT_PRI_SUPPORTED         (1<<1)  /* The root complex PRI support */
362cfd1ed46SJung-uk Kim #define ACPI_IORT_PASID_FWD_SUPPORTED   (1<<2)  /* The root complex PASID forward support */
363a371a5fdSJung-uk Kim 
364a371a5fdSJung-uk Kim 
365a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu
366a371a5fdSJung-uk Kim {
367a371a5fdSJung-uk Kim     UINT64                  BaseAddress;            /* SMMU base address */
368a371a5fdSJung-uk Kim     UINT64                  Span;                   /* Length of memory range */
369a371a5fdSJung-uk Kim     UINT32                  Model;
370a371a5fdSJung-uk Kim     UINT32                  Flags;
371a371a5fdSJung-uk Kim     UINT32                  GlobalInterruptOffset;
372a371a5fdSJung-uk Kim     UINT32                  ContextInterruptCount;
373a371a5fdSJung-uk Kim     UINT32                  ContextInterruptOffset;
374a371a5fdSJung-uk Kim     UINT32                  PmuInterruptCount;
375a371a5fdSJung-uk Kim     UINT32                  PmuInterruptOffset;
376a371a5fdSJung-uk Kim     UINT64                  Interrupts[1];          /* Interrupt array */
377a371a5fdSJung-uk Kim 
378a371a5fdSJung-uk Kim } ACPI_IORT_SMMU;
379a371a5fdSJung-uk Kim 
380a371a5fdSJung-uk Kim /* Values for Model field above */
381a371a5fdSJung-uk Kim 
382a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
383a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
384a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
385a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
3865f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004  /* ARM Corelink MMU-401 */
3875f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005  /* Cavium ThunderX SMMUv2 */
388a371a5fdSJung-uk Kim 
389a371a5fdSJung-uk Kim /* Masks for Flags field above */
390a371a5fdSJung-uk Kim 
391a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
392a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
393a371a5fdSJung-uk Kim 
3940d84335fSJung-uk Kim /* Global interrupt format */
3950d84335fSJung-uk Kim 
3960d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi
3970d84335fSJung-uk Kim {
3980d84335fSJung-uk Kim     UINT32                  NSgIrpt;
3990d84335fSJung-uk Kim     UINT32                  NSgIrptFlags;
4000d84335fSJung-uk Kim     UINT32                  NSgCfgIrpt;
4010d84335fSJung-uk Kim     UINT32                  NSgCfgIrptFlags;
4022f6a1a81SJung-uk Kim 
4030d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI;
4040d84335fSJung-uk Kim 
405a371a5fdSJung-uk Kim 
406f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3
407f8146b88SJung-uk Kim {
408f8146b88SJung-uk Kim     UINT64                  BaseAddress;            /* SMMUv3 base address */
409f8146b88SJung-uk Kim     UINT32                  Flags;
410f8146b88SJung-uk Kim     UINT32                  Reserved;
411f8146b88SJung-uk Kim     UINT64                  VatosAddress;
4125f9b24faSJung-uk Kim     UINT32                  Model;
413f8146b88SJung-uk Kim     UINT32                  EventGsiv;
414f8146b88SJung-uk Kim     UINT32                  PriGsiv;
415f8146b88SJung-uk Kim     UINT32                  GerrGsiv;
416f8146b88SJung-uk Kim     UINT32                  SyncGsiv;
4173d90091dSJung-uk Kim     UINT32                  Pxm;
418b7b7e711SJung-uk Kim     UINT32                  IdMappingIndex;
419f8146b88SJung-uk Kim 
420f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3;
421f8146b88SJung-uk Kim 
4225f9b24faSJung-uk Kim /* Values for Model field above */
4235f9b24faSJung-uk Kim 
4245f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000  /* Generic SMMUv3 */
4255f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001  /* HiSilicon Hi161x SMMUv3 */
4265f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002  /* Cavium CN99xx SMMUv3 */
4275f9b24faSJung-uk Kim 
428f8146b88SJung-uk Kim /* Masks for Flags field above */
429f8146b88SJung-uk Kim 
430f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
4313d90091dSJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (3<<1)
4325f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
433f8146b88SJung-uk Kim 
4343d90091dSJung-uk Kim typedef struct acpi_iort_pmcg
4353d90091dSJung-uk Kim {
4363d90091dSJung-uk Kim     UINT64                  Page0BaseAddress;
4373d90091dSJung-uk Kim     UINT32                  OverflowGsiv;
4383d90091dSJung-uk Kim     UINT32                  NodeReference;
4393d90091dSJung-uk Kim     UINT64                  Page1BaseAddress;
4403d90091dSJung-uk Kim 
4413d90091dSJung-uk Kim } ACPI_IORT_PMCG;
4423d90091dSJung-uk Kim 
443cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr {
444cfd1ed46SJung-uk Kim     UINT32 Flags;
445cfd1ed46SJung-uk Kim     UINT32 RmrCount;
446cfd1ed46SJung-uk Kim     UINT32 RmrOffset;
447cfd1ed46SJung-uk Kim 
448cfd1ed46SJung-uk Kim } ACPI_IORT_RMR;
449cfd1ed46SJung-uk Kim 
450cfd1ed46SJung-uk Kim typedef struct acpi_iort_rmr_desc {
451cfd1ed46SJung-uk Kim     UINT64 BaseAddress;
452cfd1ed46SJung-uk Kim     UINT64 Length;
453cfd1ed46SJung-uk Kim     UINT32 Reserved;
454cfd1ed46SJung-uk Kim 
455cfd1ed46SJung-uk Kim } ACPI_IORT_RMR_DESC;
456f8146b88SJung-uk Kim 
457a371a5fdSJung-uk Kim /*******************************************************************************
458a371a5fdSJung-uk Kim  *
459d6dd1baeSJung-uk Kim  * IVRS - I/O Virtualization Reporting Structure
460d6dd1baeSJung-uk Kim  *        Version 1
461d6dd1baeSJung-uk Kim  *
462d6dd1baeSJung-uk Kim  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
463d6dd1baeSJung-uk Kim  * Revision 1.26, February 2009.
464d6dd1baeSJung-uk Kim  *
465d6dd1baeSJung-uk Kim  ******************************************************************************/
466d6dd1baeSJung-uk Kim 
467d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs
468d6dd1baeSJung-uk Kim {
469d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
470d6dd1baeSJung-uk Kim     UINT32                  Info;               /* Common virtualization info */
471d6dd1baeSJung-uk Kim     UINT64                  Reserved;
472d6dd1baeSJung-uk Kim 
473d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS;
474d6dd1baeSJung-uk Kim 
475d6dd1baeSJung-uk Kim /* Values for Info field above */
476d6dd1baeSJung-uk Kim 
477d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
478d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
479d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
480d6dd1baeSJung-uk Kim 
481d6dd1baeSJung-uk Kim 
482d6dd1baeSJung-uk Kim /* IVRS subtable header */
483d6dd1baeSJung-uk Kim 
484d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header
485d6dd1baeSJung-uk Kim {
486d6dd1baeSJung-uk Kim     UINT8                   Type;               /* Subtable type */
487d6dd1baeSJung-uk Kim     UINT8                   Flags;
488d6dd1baeSJung-uk Kim     UINT16                  Length;             /* Subtable length */
489d6dd1baeSJung-uk Kim     UINT16                  DeviceId;           /* ID of IOMMU */
490d6dd1baeSJung-uk Kim 
491d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER;
492d6dd1baeSJung-uk Kim 
493d6dd1baeSJung-uk Kim /* Values for subtable Type above */
494d6dd1baeSJung-uk Kim 
495d6dd1baeSJung-uk Kim enum AcpiIvrsType
496d6dd1baeSJung-uk Kim {
4973ee58df5SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE1        = 0x10,
4983ee58df5SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE2        = 0x11,
499cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE3        = 0x40,
500d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
501d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
502d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY3          = 0x22
503d6dd1baeSJung-uk Kim };
504d6dd1baeSJung-uk Kim 
505d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */
506d6dd1baeSJung-uk Kim 
507d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE         (1)
508d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW           (1<<1)
509d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW       (1<<2)
510d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC              (1<<3)
511d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB             (1<<4)
512d6dd1baeSJung-uk Kim 
513d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */
514d6dd1baeSJung-uk Kim 
515d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY             (1)
516d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ              (1<<1)
517d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE             (1<<2)
518d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
519d6dd1baeSJung-uk Kim 
520d6dd1baeSJung-uk Kim 
521d6dd1baeSJung-uk Kim /*
522d6dd1baeSJung-uk Kim  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
523d6dd1baeSJung-uk Kim  */
524d6dd1baeSJung-uk Kim 
525d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
526d6dd1baeSJung-uk Kim 
5273ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_10
528d6dd1baeSJung-uk Kim {
529d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
530d6dd1baeSJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
531d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
532d6dd1baeSJung-uk Kim     UINT16                  PciSegmentGroup;
533d6dd1baeSJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
5343ee58df5SJung-uk Kim     UINT32                  FeatureReporting;
535d6dd1baeSJung-uk Kim 
5363ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE1;
5373ee58df5SJung-uk Kim 
5383ee58df5SJung-uk Kim /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
5393ee58df5SJung-uk Kim 
5403ee58df5SJung-uk Kim typedef struct acpi_ivrs_hardware_11
5413ee58df5SJung-uk Kim {
5423ee58df5SJung-uk Kim     ACPI_IVRS_HEADER        Header;
5433ee58df5SJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
5443ee58df5SJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
5453ee58df5SJung-uk Kim     UINT16                  PciSegmentGroup;
5463ee58df5SJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
5473ee58df5SJung-uk Kim     UINT32                  Attributes;
5483ee58df5SJung-uk Kim     UINT64                  EfrRegisterImage;
5493ee58df5SJung-uk Kim     UINT64                  Reserved;
5503ee58df5SJung-uk Kim } ACPI_IVRS_HARDWARE2;
551d6dd1baeSJung-uk Kim 
552d6dd1baeSJung-uk Kim /* Masks for Info field above */
553d6dd1baeSJung-uk Kim 
554d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
555d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
556d6dd1baeSJung-uk Kim 
557d6dd1baeSJung-uk Kim 
558d6dd1baeSJung-uk Kim /*
559d6dd1baeSJung-uk Kim  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
560d6dd1baeSJung-uk Kim  * Upper two bits of the Type field are the (encoded) length of the structure.
561d6dd1baeSJung-uk Kim  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
562d6dd1baeSJung-uk Kim  * are reserved for future use but not defined.
563d6dd1baeSJung-uk Kim  */
564d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header
565d6dd1baeSJung-uk Kim {
566d6dd1baeSJung-uk Kim     UINT8                   Type;
567d6dd1baeSJung-uk Kim     UINT16                  Id;
568d6dd1baeSJung-uk Kim     UINT8                   DataSetting;
569d6dd1baeSJung-uk Kim 
570d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER;
571d6dd1baeSJung-uk Kim 
572d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */
573d6dd1baeSJung-uk Kim 
574d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH      0xC0
575d6dd1baeSJung-uk Kim 
576d6dd1baeSJung-uk Kim /* Values for device entry Type field above */
577d6dd1baeSJung-uk Kim 
578d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType
579d6dd1baeSJung-uk Kim {
580d6dd1baeSJung-uk Kim     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
581d6dd1baeSJung-uk Kim 
582d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD4             = 0,
583d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALL              = 1,
584d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SELECT           = 2,
585d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_START            = 3,
586d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_END              = 4,
587d6dd1baeSJung-uk Kim 
588d6dd1baeSJung-uk Kim     /* 8-byte device entries */
589d6dd1baeSJung-uk Kim 
590d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD8             = 64,
591d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_NOT_USED         = 65,
592d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
593d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
594d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
595d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
596cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_SPECIAL          = 72, /* Uses ACPI_IVRS_DEVICE8C */
597cfd1ed46SJung-uk Kim 
598cfd1ed46SJung-uk Kim     /* Variable-length device entries */
599cfd1ed46SJung-uk Kim 
600cfd1ed46SJung-uk Kim     ACPI_IVRS_TYPE_HID              = 240 /* Uses ACPI_IVRS_DEVICE_HID */
601d6dd1baeSJung-uk Kim };
602d6dd1baeSJung-uk Kim 
603d6dd1baeSJung-uk Kim /* Values for Data field above */
604d6dd1baeSJung-uk Kim 
605d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS         (1)
606d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS         (1<<1)
607d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS          (1<<2)
608d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
609d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS        (1<<6)
610d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS        (1<<7)
611d6dd1baeSJung-uk Kim 
612d6dd1baeSJung-uk Kim 
613d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */
614d6dd1baeSJung-uk Kim 
615d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4
616d6dd1baeSJung-uk Kim {
617d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
618d6dd1baeSJung-uk Kim 
619d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4;
620d6dd1baeSJung-uk Kim 
621d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */
622d6dd1baeSJung-uk Kim 
623d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a
624d6dd1baeSJung-uk Kim {
625d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
626d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
627d6dd1baeSJung-uk Kim     UINT16                  UsedId;
628d6dd1baeSJung-uk Kim     UINT8                   Reserved2;
629d6dd1baeSJung-uk Kim 
630d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A;
631d6dd1baeSJung-uk Kim 
632d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */
633d6dd1baeSJung-uk Kim 
634d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b
635d6dd1baeSJung-uk Kim {
636d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
637d6dd1baeSJung-uk Kim     UINT32                  ExtendedData;
638d6dd1baeSJung-uk Kim 
639d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B;
640d6dd1baeSJung-uk Kim 
641d6dd1baeSJung-uk Kim /* Values for ExtendedData above */
642d6dd1baeSJung-uk Kim 
643d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED      (1<<31)
644d6dd1baeSJung-uk Kim 
645d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */
646d6dd1baeSJung-uk Kim 
647d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c
648d6dd1baeSJung-uk Kim {
649d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
650d6dd1baeSJung-uk Kim     UINT8                   Handle;
651d6dd1baeSJung-uk Kim     UINT16                  UsedId;
652d6dd1baeSJung-uk Kim     UINT8                   Variety;
653d6dd1baeSJung-uk Kim 
654d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C;
655d6dd1baeSJung-uk Kim 
656d6dd1baeSJung-uk Kim /* Values for Variety field above */
657d6dd1baeSJung-uk Kim 
658d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC            1
659d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET              2
660d6dd1baeSJung-uk Kim 
661cfd1ed46SJung-uk Kim /* Type 240: variable-length device entry */
662cfd1ed46SJung-uk Kim 
663cfd1ed46SJung-uk Kim typedef struct acpi_ivrs_device_hid
664cfd1ed46SJung-uk Kim {
665cfd1ed46SJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
666cfd1ed46SJung-uk Kim     UINT64                  AcpiHid;
667cfd1ed46SJung-uk Kim     UINT64                  AcpiCid;
668cfd1ed46SJung-uk Kim     UINT8                   UidType;
669cfd1ed46SJung-uk Kim     UINT8                   UidLength;
670cfd1ed46SJung-uk Kim 
671cfd1ed46SJung-uk Kim } ACPI_IVRS_DEVICE_HID;
672cfd1ed46SJung-uk Kim 
673*1970d693SJung-uk Kim /* Values for UidType above */
674*1970d693SJung-uk Kim 
675*1970d693SJung-uk Kim #define ACPI_IVRS_UID_NOT_PRESENT   0
676*1970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_INTEGER    1
677*1970d693SJung-uk Kim #define ACPI_IVRS_UID_IS_STRING     2
678d6dd1baeSJung-uk Kim 
679d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
680d6dd1baeSJung-uk Kim 
681d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory
682d6dd1baeSJung-uk Kim {
683d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
684d6dd1baeSJung-uk Kim     UINT16                  AuxData;
685d6dd1baeSJung-uk Kim     UINT64                  Reserved;
686d6dd1baeSJung-uk Kim     UINT64                  StartAddress;
687d6dd1baeSJung-uk Kim     UINT64                  MemoryLength;
688d6dd1baeSJung-uk Kim 
689d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY;
690d6dd1baeSJung-uk Kim 
691d6dd1baeSJung-uk Kim 
692d6dd1baeSJung-uk Kim /*******************************************************************************
693d6dd1baeSJung-uk Kim  *
694313a0c13SJung-uk Kim  * LPIT - Low Power Idle Table
695313a0c13SJung-uk Kim  *
696a371a5fdSJung-uk Kim  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
697313a0c13SJung-uk Kim  *
698313a0c13SJung-uk Kim  ******************************************************************************/
699313a0c13SJung-uk Kim 
700313a0c13SJung-uk Kim typedef struct acpi_table_lpit
701313a0c13SJung-uk Kim {
702313a0c13SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
703313a0c13SJung-uk Kim 
704313a0c13SJung-uk Kim } ACPI_TABLE_LPIT;
705313a0c13SJung-uk Kim 
706313a0c13SJung-uk Kim 
707313a0c13SJung-uk Kim /* LPIT subtable header */
708313a0c13SJung-uk Kim 
709313a0c13SJung-uk Kim typedef struct acpi_lpit_header
710313a0c13SJung-uk Kim {
711313a0c13SJung-uk Kim     UINT32                  Type;               /* Subtable type */
712313a0c13SJung-uk Kim     UINT32                  Length;             /* Subtable length */
713313a0c13SJung-uk Kim     UINT16                  UniqueId;
714313a0c13SJung-uk Kim     UINT16                  Reserved;
715313a0c13SJung-uk Kim     UINT32                  Flags;
716313a0c13SJung-uk Kim 
717313a0c13SJung-uk Kim } ACPI_LPIT_HEADER;
718313a0c13SJung-uk Kim 
719313a0c13SJung-uk Kim /* Values for subtable Type above */
720313a0c13SJung-uk Kim 
721313a0c13SJung-uk Kim enum AcpiLpitType
722313a0c13SJung-uk Kim {
723313a0c13SJung-uk Kim     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
724a371a5fdSJung-uk Kim     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
725313a0c13SJung-uk Kim };
726313a0c13SJung-uk Kim 
727313a0c13SJung-uk Kim /* Masks for Flags field above  */
728313a0c13SJung-uk Kim 
729313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED    (1)
730313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER        (1<<1)
731313a0c13SJung-uk Kim 
732313a0c13SJung-uk Kim /*
733313a0c13SJung-uk Kim  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
734313a0c13SJung-uk Kim  */
735313a0c13SJung-uk Kim 
736313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */
737313a0c13SJung-uk Kim 
738313a0c13SJung-uk Kim typedef struct acpi_lpit_native
739313a0c13SJung-uk Kim {
740313a0c13SJung-uk Kim     ACPI_LPIT_HEADER        Header;
741313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    EntryTrigger;
742313a0c13SJung-uk Kim     UINT32                  Residency;
743313a0c13SJung-uk Kim     UINT32                  Latency;
744313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    ResidencyCounter;
745313a0c13SJung-uk Kim     UINT64                  CounterFrequency;
746313a0c13SJung-uk Kim 
747313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE;
748313a0c13SJung-uk Kim 
749313a0c13SJung-uk Kim 
750313a0c13SJung-uk Kim /*******************************************************************************
751313a0c13SJung-uk Kim  *
752ff879b07SJung-uk Kim  * MADT - Multiple APIC Description Table
753ff879b07SJung-uk Kim  *        Version 3
754ff879b07SJung-uk Kim  *
755ff879b07SJung-uk Kim  ******************************************************************************/
756ff879b07SJung-uk Kim 
757ff879b07SJung-uk Kim typedef struct acpi_table_madt
758ff879b07SJung-uk Kim {
759ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
760ff879b07SJung-uk Kim     UINT32                  Address;            /* Physical address of local APIC */
761ff879b07SJung-uk Kim     UINT32                  Flags;
762ff879b07SJung-uk Kim 
763ff879b07SJung-uk Kim } ACPI_TABLE_MADT;
764ff879b07SJung-uk Kim 
765ff879b07SJung-uk Kim /* Masks for Flags field above */
766ff879b07SJung-uk Kim 
767ff879b07SJung-uk Kim #define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
768ff879b07SJung-uk Kim 
769ff879b07SJung-uk Kim /* Values for PCATCompat flag */
770ff879b07SJung-uk Kim 
771ff879b07SJung-uk Kim #define ACPI_MADT_DUAL_PIC          1
772ff879b07SJung-uk Kim #define ACPI_MADT_MULTIPLE_APIC     0
773ff879b07SJung-uk Kim 
774ff879b07SJung-uk Kim 
775ff879b07SJung-uk Kim /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
776ff879b07SJung-uk Kim 
777ff879b07SJung-uk Kim enum AcpiMadtType
778ff879b07SJung-uk Kim {
779ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC               = 0,
780ff879b07SJung-uk Kim     ACPI_MADT_TYPE_IO_APIC                  = 1,
781ff879b07SJung-uk Kim     ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
782ff879b07SJung-uk Kim     ACPI_MADT_TYPE_NMI_SOURCE               = 3,
783ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
784ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
785ff879b07SJung-uk Kim     ACPI_MADT_TYPE_IO_SAPIC                 = 6,
786ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
787ff879b07SJung-uk Kim     ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
788ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
789ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
790ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
791ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR      = 12,
792ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_MSI_FRAME        = 13,
793ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR    = 14,
794ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_TRANSLATOR       = 15,
795cfd1ed46SJung-uk Kim     ACPI_MADT_TYPE_MULTIPROC_WAKEUP         = 16,
796cfd1ed46SJung-uk Kim     ACPI_MADT_TYPE_RESERVED                 = 17    /* 17 and greater are reserved */
797ff879b07SJung-uk Kim };
798ff879b07SJung-uk Kim 
799ff879b07SJung-uk Kim 
800ff879b07SJung-uk Kim /*
801ff879b07SJung-uk Kim  * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
802ff879b07SJung-uk Kim  */
803ff879b07SJung-uk Kim 
804ff879b07SJung-uk Kim /* 0: Processor Local APIC */
805ff879b07SJung-uk Kim 
806ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic
807ff879b07SJung-uk Kim {
808ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
809ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
810ff879b07SJung-uk Kim     UINT8                   Id;                 /* Processor's local APIC id */
811ff879b07SJung-uk Kim     UINT32                  LapicFlags;
812ff879b07SJung-uk Kim 
813ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC;
814ff879b07SJung-uk Kim 
815ff879b07SJung-uk Kim 
816ff879b07SJung-uk Kim /* 1: IO APIC */
817ff879b07SJung-uk Kim 
818ff879b07SJung-uk Kim typedef struct acpi_madt_io_apic
819ff879b07SJung-uk Kim {
820ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
821ff879b07SJung-uk Kim     UINT8                   Id;                 /* I/O APIC ID */
822ff879b07SJung-uk Kim     UINT8                   Reserved;           /* Reserved - must be zero */
823ff879b07SJung-uk Kim     UINT32                  Address;            /* APIC physical address */
824ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
825ff879b07SJung-uk Kim 
826ff879b07SJung-uk Kim } ACPI_MADT_IO_APIC;
827ff879b07SJung-uk Kim 
828ff879b07SJung-uk Kim 
829ff879b07SJung-uk Kim /* 2: Interrupt Override */
830ff879b07SJung-uk Kim 
831ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_override
832ff879b07SJung-uk Kim {
833ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
834ff879b07SJung-uk Kim     UINT8                   Bus;                /* 0 - ISA */
835ff879b07SJung-uk Kim     UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
836ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
837ff879b07SJung-uk Kim     UINT16                  IntiFlags;
838ff879b07SJung-uk Kim 
839ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_OVERRIDE;
840ff879b07SJung-uk Kim 
841ff879b07SJung-uk Kim 
842ff879b07SJung-uk Kim /* 3: NMI Source */
843ff879b07SJung-uk Kim 
844ff879b07SJung-uk Kim typedef struct acpi_madt_nmi_source
845ff879b07SJung-uk Kim {
846ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
847ff879b07SJung-uk Kim     UINT16                  IntiFlags;
848ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
849ff879b07SJung-uk Kim 
850ff879b07SJung-uk Kim } ACPI_MADT_NMI_SOURCE;
851ff879b07SJung-uk Kim 
852ff879b07SJung-uk Kim 
853ff879b07SJung-uk Kim /* 4: Local APIC NMI */
854ff879b07SJung-uk Kim 
855ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_nmi
856ff879b07SJung-uk Kim {
857ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
858ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
859ff879b07SJung-uk Kim     UINT16                  IntiFlags;
860ff879b07SJung-uk Kim     UINT8                   Lint;               /* LINTn to which NMI is connected */
861ff879b07SJung-uk Kim 
862ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_NMI;
863ff879b07SJung-uk Kim 
864ff879b07SJung-uk Kim 
865ff879b07SJung-uk Kim /* 5: Address Override */
866ff879b07SJung-uk Kim 
867ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_override
868ff879b07SJung-uk Kim {
869ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
870ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
871ff879b07SJung-uk Kim     UINT64                  Address;            /* APIC physical address */
872ff879b07SJung-uk Kim 
873ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_OVERRIDE;
874ff879b07SJung-uk Kim 
875ff879b07SJung-uk Kim 
876ff879b07SJung-uk Kim /* 6: I/O Sapic */
877ff879b07SJung-uk Kim 
878ff879b07SJung-uk Kim typedef struct acpi_madt_io_sapic
879ff879b07SJung-uk Kim {
880ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
881ff879b07SJung-uk Kim     UINT8                   Id;                 /* I/O SAPIC ID */
882ff879b07SJung-uk Kim     UINT8                   Reserved;           /* Reserved, must be zero */
883ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
884ff879b07SJung-uk Kim     UINT64                  Address;            /* SAPIC physical address */
885ff879b07SJung-uk Kim 
886ff879b07SJung-uk Kim } ACPI_MADT_IO_SAPIC;
887ff879b07SJung-uk Kim 
888ff879b07SJung-uk Kim 
889ff879b07SJung-uk Kim /* 7: Local Sapic */
890ff879b07SJung-uk Kim 
891ff879b07SJung-uk Kim typedef struct acpi_madt_local_sapic
892ff879b07SJung-uk Kim {
893ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
894ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
895ff879b07SJung-uk Kim     UINT8                   Id;                 /* SAPIC ID */
896ff879b07SJung-uk Kim     UINT8                   Eid;                /* SAPIC EID */
897ff879b07SJung-uk Kim     UINT8                   Reserved[3];        /* Reserved, must be zero */
898ff879b07SJung-uk Kim     UINT32                  LapicFlags;
899ff879b07SJung-uk Kim     UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
900ff879b07SJung-uk Kim     char                    UidString[1];       /* String UID  - ACPI 3.0 */
901ff879b07SJung-uk Kim 
902ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_SAPIC;
903ff879b07SJung-uk Kim 
904ff879b07SJung-uk Kim 
905ff879b07SJung-uk Kim /* 8: Platform Interrupt Source */
906ff879b07SJung-uk Kim 
907ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_source
908ff879b07SJung-uk Kim {
909ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
910ff879b07SJung-uk Kim     UINT16                  IntiFlags;
911ff879b07SJung-uk Kim     UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
912ff879b07SJung-uk Kim     UINT8                   Id;                 /* Processor ID */
913ff879b07SJung-uk Kim     UINT8                   Eid;                /* Processor EID */
914ff879b07SJung-uk Kim     UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
915ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
916ff879b07SJung-uk Kim     UINT32                  Flags;              /* Interrupt Source Flags */
917ff879b07SJung-uk Kim 
918ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_SOURCE;
919ff879b07SJung-uk Kim 
920ff879b07SJung-uk Kim /* Masks for Flags field above */
921ff879b07SJung-uk Kim 
922ff879b07SJung-uk Kim #define ACPI_MADT_CPEI_OVERRIDE     (1)
923ff879b07SJung-uk Kim 
924ff879b07SJung-uk Kim 
925ff879b07SJung-uk Kim /* 9: Processor Local X2APIC (ACPI 4.0) */
926ff879b07SJung-uk Kim 
927ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic
928ff879b07SJung-uk Kim {
929ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
930ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
931ff879b07SJung-uk Kim     UINT32                  LocalApicId;        /* Processor x2APIC ID  */
932ff879b07SJung-uk Kim     UINT32                  LapicFlags;
933ff879b07SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
934ff879b07SJung-uk Kim 
935ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC;
936ff879b07SJung-uk Kim 
937ff879b07SJung-uk Kim 
938ff879b07SJung-uk Kim /* 10: Local X2APIC NMI (ACPI 4.0) */
939ff879b07SJung-uk Kim 
940ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic_nmi
941ff879b07SJung-uk Kim {
942ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
943ff879b07SJung-uk Kim     UINT16                  IntiFlags;
944ff879b07SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
945ff879b07SJung-uk Kim     UINT8                   Lint;               /* LINTn to which NMI is connected */
946ff879b07SJung-uk Kim     UINT8                   Reserved[3];        /* Reserved - must be zero */
947ff879b07SJung-uk Kim 
948ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC_NMI;
949ff879b07SJung-uk Kim 
950ff879b07SJung-uk Kim 
951cd6518c7SJung-uk Kim /* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 changes) */
952ff879b07SJung-uk Kim 
953ff879b07SJung-uk Kim typedef struct acpi_madt_generic_interrupt
954ff879b07SJung-uk Kim {
955ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
956ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
957ff879b07SJung-uk Kim     UINT32                  CpuInterfaceNumber;
958ff879b07SJung-uk Kim     UINT32                  Uid;
959ff879b07SJung-uk Kim     UINT32                  Flags;
960ff879b07SJung-uk Kim     UINT32                  ParkingVersion;
961ff879b07SJung-uk Kim     UINT32                  PerformanceInterrupt;
962ff879b07SJung-uk Kim     UINT64                  ParkedAddress;
963ff879b07SJung-uk Kim     UINT64                  BaseAddress;
964ff879b07SJung-uk Kim     UINT64                  GicvBaseAddress;
965ff879b07SJung-uk Kim     UINT64                  GichBaseAddress;
966ff879b07SJung-uk Kim     UINT32                  VgicInterrupt;
967ff879b07SJung-uk Kim     UINT64                  GicrBaseAddress;
968ff879b07SJung-uk Kim     UINT64                  ArmMpidr;
969ff879b07SJung-uk Kim     UINT8                   EfficiencyClass;
970cd6518c7SJung-uk Kim     UINT8                   Reserved2[1];
971cd6518c7SJung-uk Kim     UINT16                  SpeInterrupt;       /* ACPI 6.3 */
972ff879b07SJung-uk Kim 
973ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_INTERRUPT;
974ff879b07SJung-uk Kim 
975ff879b07SJung-uk Kim /* Masks for Flags field above */
976ff879b07SJung-uk Kim 
977ff879b07SJung-uk Kim /* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
978ff879b07SJung-uk Kim #define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
979ff879b07SJung-uk Kim #define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
980ff879b07SJung-uk Kim 
981ff879b07SJung-uk Kim 
982ff879b07SJung-uk Kim /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
983ff879b07SJung-uk Kim 
984ff879b07SJung-uk Kim typedef struct acpi_madt_generic_distributor
985ff879b07SJung-uk Kim {
986ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
987ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
988ff879b07SJung-uk Kim     UINT32                  GicId;
989ff879b07SJung-uk Kim     UINT64                  BaseAddress;
990ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;
991ff879b07SJung-uk Kim     UINT8                   Version;
992ff879b07SJung-uk Kim     UINT8                   Reserved2[3];       /* Reserved - must be zero */
993ff879b07SJung-uk Kim 
994ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_DISTRIBUTOR;
995ff879b07SJung-uk Kim 
996ff879b07SJung-uk Kim /* Values for Version field above */
997ff879b07SJung-uk Kim 
998ff879b07SJung-uk Kim enum AcpiMadtGicVersion
999ff879b07SJung-uk Kim {
1000ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_NONE          = 0,
1001ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V1            = 1,
1002ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V2            = 2,
1003ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V3            = 3,
1004ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V4            = 4,
1005ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_RESERVED      = 5     /* 5 and greater are reserved */
1006ff879b07SJung-uk Kim };
1007ff879b07SJung-uk Kim 
1008ff879b07SJung-uk Kim 
1009ff879b07SJung-uk Kim /* 13: Generic MSI Frame (ACPI 5.1) */
1010ff879b07SJung-uk Kim 
1011ff879b07SJung-uk Kim typedef struct acpi_madt_generic_msi_frame
1012ff879b07SJung-uk Kim {
1013ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1014ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
1015ff879b07SJung-uk Kim     UINT32                  MsiFrameId;
1016ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1017ff879b07SJung-uk Kim     UINT32                  Flags;
1018ff879b07SJung-uk Kim     UINT16                  SpiCount;
1019ff879b07SJung-uk Kim     UINT16                  SpiBase;
1020ff879b07SJung-uk Kim 
1021ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_MSI_FRAME;
1022ff879b07SJung-uk Kim 
1023ff879b07SJung-uk Kim /* Masks for Flags field above */
1024ff879b07SJung-uk Kim 
1025ff879b07SJung-uk Kim #define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
1026ff879b07SJung-uk Kim 
1027ff879b07SJung-uk Kim 
1028ff879b07SJung-uk Kim /* 14: Generic Redistributor (ACPI 5.1) */
1029ff879b07SJung-uk Kim 
1030ff879b07SJung-uk Kim typedef struct acpi_madt_generic_redistributor
1031ff879b07SJung-uk Kim {
1032ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1033ff879b07SJung-uk Kim     UINT16                  Reserved;           /* reserved - must be zero */
1034ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1035ff879b07SJung-uk Kim     UINT32                  Length;
1036ff879b07SJung-uk Kim 
1037ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_REDISTRIBUTOR;
1038ff879b07SJung-uk Kim 
1039ff879b07SJung-uk Kim 
1040ff879b07SJung-uk Kim /* 15: Generic Translator (ACPI 6.0) */
1041ff879b07SJung-uk Kim 
1042ff879b07SJung-uk Kim typedef struct acpi_madt_generic_translator
1043ff879b07SJung-uk Kim {
1044ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1045ff879b07SJung-uk Kim     UINT16                  Reserved;           /* reserved - must be zero */
1046ff879b07SJung-uk Kim     UINT32                  TranslationId;
1047ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1048ff879b07SJung-uk Kim     UINT32                  Reserved2;
1049ff879b07SJung-uk Kim 
1050ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_TRANSLATOR;
1051ff879b07SJung-uk Kim 
1052cfd1ed46SJung-uk Kim /* 16: Multiprocessor wakeup (ACPI 6.4) */
1053cfd1ed46SJung-uk Kim 
1054cfd1ed46SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup
1055cfd1ed46SJung-uk Kim {
1056cfd1ed46SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1057cfd1ed46SJung-uk Kim     UINT16                  MailboxVersion;
1058cfd1ed46SJung-uk Kim     UINT32                  Reserved;           /* reserved - must be zero */
1059cfd1ed46SJung-uk Kim     UINT64                  BaseAddress;
1060cfd1ed46SJung-uk Kim 
1061cfd1ed46SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP;
1062cfd1ed46SJung-uk Kim 
1063*1970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE	2032
1064*1970d693SJung-uk Kim #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE	2048
1065*1970d693SJung-uk Kim 
1066*1970d693SJung-uk Kim typedef struct acpi_madt_multiproc_wakeup_mailbox
1067*1970d693SJung-uk Kim {
1068*1970d693SJung-uk Kim     UINT16                  Command;
1069*1970d693SJung-uk Kim     UINT16                  Reserved; /* reserved - must be zero */
1070*1970d693SJung-uk Kim     UINT32                  ApicId;
1071*1970d693SJung-uk Kim     UINT64                  WakeupVector;
1072*1970d693SJung-uk Kim     UINT8                   ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */
1073*1970d693SJung-uk Kim     UINT8                   ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */
1074*1970d693SJung-uk Kim 
1075*1970d693SJung-uk Kim } ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;
1076*1970d693SJung-uk Kim 
1077*1970d693SJung-uk Kim #define ACPI_MP_WAKE_COMMAND_WAKEUP    1
1078*1970d693SJung-uk Kim 
1079ff879b07SJung-uk Kim 
1080ff879b07SJung-uk Kim /*
1081ff879b07SJung-uk Kim  * Common flags fields for MADT subtables
1082ff879b07SJung-uk Kim  */
1083ff879b07SJung-uk Kim 
1084ff879b07SJung-uk Kim /* MADT Local APIC flags */
1085ff879b07SJung-uk Kim 
1086ff879b07SJung-uk Kim #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
1087ff879b07SJung-uk Kim 
1088ff879b07SJung-uk Kim /* MADT MPS INTI flags (IntiFlags) */
1089ff879b07SJung-uk Kim 
1090ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
1091ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
1092ff879b07SJung-uk Kim 
1093ff879b07SJung-uk Kim /* Values for MPS INTI flags */
1094ff879b07SJung-uk Kim 
1095ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_CONFORMS       0
1096ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
1097ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_RESERVED       2
1098ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_LOW     3
1099ff879b07SJung-uk Kim 
1100ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_CONFORMS        (0)
1101ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_EDGE            (1<<2)
1102ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
1103ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
1104ff879b07SJung-uk Kim 
1105ff879b07SJung-uk Kim 
1106ff879b07SJung-uk Kim /*******************************************************************************
1107ff879b07SJung-uk Kim  *
1108313a0c13SJung-uk Kim  * MCFG - PCI Memory Mapped Configuration table and subtable
1109d6dd1baeSJung-uk Kim  *        Version 1
1110d6dd1baeSJung-uk Kim  *
1111d6dd1baeSJung-uk Kim  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
1112d6dd1baeSJung-uk Kim  *
1113d6dd1baeSJung-uk Kim  ******************************************************************************/
1114d6dd1baeSJung-uk Kim 
1115d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg
1116d6dd1baeSJung-uk Kim {
1117d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1118d6dd1baeSJung-uk Kim     UINT8                   Reserved[8];
1119d6dd1baeSJung-uk Kim 
1120d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG;
1121d6dd1baeSJung-uk Kim 
1122d6dd1baeSJung-uk Kim 
1123d6dd1baeSJung-uk Kim /* Subtable */
1124d6dd1baeSJung-uk Kim 
1125d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation
1126d6dd1baeSJung-uk Kim {
1127d6dd1baeSJung-uk Kim     UINT64                  Address;            /* Base address, processor-relative */
1128d6dd1baeSJung-uk Kim     UINT16                  PciSegment;         /* PCI segment group number */
1129d6dd1baeSJung-uk Kim     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1130d6dd1baeSJung-uk Kim     UINT8                   EndBusNumber;       /* Final PCI Bus number */
1131d6dd1baeSJung-uk Kim     UINT32                  Reserved;
1132d6dd1baeSJung-uk Kim 
1133d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION;
1134d6dd1baeSJung-uk Kim 
1135d6dd1baeSJung-uk Kim 
1136d6dd1baeSJung-uk Kim /*******************************************************************************
1137d6dd1baeSJung-uk Kim  *
1138ca3cf4faSJung-uk Kim  * MCHI - Management Controller Host Interface Table
1139ca3cf4faSJung-uk Kim  *        Version 1
1140ca3cf4faSJung-uk Kim  *
1141ca3cf4faSJung-uk Kim  * Conforms to "Management Component Transport Protocol (MCTP) Host
1142ca3cf4faSJung-uk Kim  * Interface Specification", Revision 1.0.0a, October 13, 2009
1143ca3cf4faSJung-uk Kim  *
1144ca3cf4faSJung-uk Kim  ******************************************************************************/
1145ca3cf4faSJung-uk Kim 
1146ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi
1147ca3cf4faSJung-uk Kim {
1148ca3cf4faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1149ca3cf4faSJung-uk Kim     UINT8                   InterfaceType;
1150ca3cf4faSJung-uk Kim     UINT8                   Protocol;
1151ca3cf4faSJung-uk Kim     UINT64                  ProtocolData;
1152ca3cf4faSJung-uk Kim     UINT8                   InterruptType;
1153ca3cf4faSJung-uk Kim     UINT8                   Gpe;
1154ca3cf4faSJung-uk Kim     UINT8                   PciDeviceFlag;
1155ca3cf4faSJung-uk Kim     UINT32                  GlobalInterrupt;
1156ca3cf4faSJung-uk Kim     ACPI_GENERIC_ADDRESS    ControlRegister;
1157ca3cf4faSJung-uk Kim     UINT8                   PciSegment;
1158ca3cf4faSJung-uk Kim     UINT8                   PciBus;
1159ca3cf4faSJung-uk Kim     UINT8                   PciDevice;
1160ca3cf4faSJung-uk Kim     UINT8                   PciFunction;
1161ca3cf4faSJung-uk Kim 
1162ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI;
1163ca3cf4faSJung-uk Kim 
1164ca3cf4faSJung-uk Kim 
1165ca3cf4faSJung-uk Kim /*******************************************************************************
1166ca3cf4faSJung-uk Kim  *
1167ff879b07SJung-uk Kim  * MPST - Memory Power State Table (ACPI 5.0)
1168ff879b07SJung-uk Kim  *        Version 1
1169ff879b07SJung-uk Kim  *
1170ff879b07SJung-uk Kim  ******************************************************************************/
1171ff879b07SJung-uk Kim 
1172ff879b07SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \
1173ff879b07SJung-uk Kim     UINT8                   ChannelId; \
1174ff879b07SJung-uk Kim     UINT8                   Reserved1[3]; \
1175ff879b07SJung-uk Kim     UINT16                  PowerNodeCount; \
1176ff879b07SJung-uk Kim     UINT16                  Reserved2;
1177ff879b07SJung-uk Kim 
1178ff879b07SJung-uk Kim /* Main table */
1179ff879b07SJung-uk Kim 
1180ff879b07SJung-uk Kim typedef struct acpi_table_mpst
1181ff879b07SJung-uk Kim {
1182ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1183ff879b07SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
1184ff879b07SJung-uk Kim 
1185ff879b07SJung-uk Kim } ACPI_TABLE_MPST;
1186ff879b07SJung-uk Kim 
1187ff879b07SJung-uk Kim 
1188ff879b07SJung-uk Kim /* Memory Platform Communication Channel Info */
1189ff879b07SJung-uk Kim 
1190ff879b07SJung-uk Kim typedef struct acpi_mpst_channel
1191ff879b07SJung-uk Kim {
1192ff879b07SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
1193ff879b07SJung-uk Kim 
1194ff879b07SJung-uk Kim } ACPI_MPST_CHANNEL;
1195ff879b07SJung-uk Kim 
1196ff879b07SJung-uk Kim 
1197ff879b07SJung-uk Kim /* Memory Power Node Structure */
1198ff879b07SJung-uk Kim 
1199ff879b07SJung-uk Kim typedef struct acpi_mpst_power_node
1200ff879b07SJung-uk Kim {
1201ff879b07SJung-uk Kim     UINT8                   Flags;
1202ff879b07SJung-uk Kim     UINT8                   Reserved1;
1203ff879b07SJung-uk Kim     UINT16                  NodeId;
1204ff879b07SJung-uk Kim     UINT32                  Length;
1205ff879b07SJung-uk Kim     UINT64                  RangeAddress;
1206ff879b07SJung-uk Kim     UINT64                  RangeLength;
1207ff879b07SJung-uk Kim     UINT32                  NumPowerStates;
1208ff879b07SJung-uk Kim     UINT32                  NumPhysicalComponents;
1209ff879b07SJung-uk Kim 
1210ff879b07SJung-uk Kim } ACPI_MPST_POWER_NODE;
1211ff879b07SJung-uk Kim 
1212ff879b07SJung-uk Kim /* Values for Flags field above */
1213ff879b07SJung-uk Kim 
1214ff879b07SJung-uk Kim #define ACPI_MPST_ENABLED               1
1215ff879b07SJung-uk Kim #define ACPI_MPST_POWER_MANAGED         2
1216ff879b07SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE      4
1217ff879b07SJung-uk Kim 
1218ff879b07SJung-uk Kim 
1219ff879b07SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */
1220ff879b07SJung-uk Kim 
1221ff879b07SJung-uk Kim typedef struct acpi_mpst_power_state
1222ff879b07SJung-uk Kim {
1223ff879b07SJung-uk Kim     UINT8                   PowerState;
1224ff879b07SJung-uk Kim     UINT8                   InfoIndex;
1225ff879b07SJung-uk Kim 
1226ff879b07SJung-uk Kim } ACPI_MPST_POWER_STATE;
1227ff879b07SJung-uk Kim 
1228ff879b07SJung-uk Kim 
1229ff879b07SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */
1230ff879b07SJung-uk Kim 
1231ff879b07SJung-uk Kim typedef struct acpi_mpst_component
1232ff879b07SJung-uk Kim {
1233ff879b07SJung-uk Kim     UINT16                  ComponentId;
1234ff879b07SJung-uk Kim 
1235ff879b07SJung-uk Kim } ACPI_MPST_COMPONENT;
1236ff879b07SJung-uk Kim 
1237ff879b07SJung-uk Kim 
1238ff879b07SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
1239ff879b07SJung-uk Kim 
1240ff879b07SJung-uk Kim typedef struct acpi_mpst_data_hdr
1241ff879b07SJung-uk Kim {
1242ff879b07SJung-uk Kim     UINT16                  CharacteristicsCount;
1243ff879b07SJung-uk Kim     UINT16                  Reserved;
1244ff879b07SJung-uk Kim 
1245ff879b07SJung-uk Kim } ACPI_MPST_DATA_HDR;
1246ff879b07SJung-uk Kim 
1247ff879b07SJung-uk Kim typedef struct acpi_mpst_power_data
1248ff879b07SJung-uk Kim {
1249ff879b07SJung-uk Kim     UINT8                   StructureId;
1250ff879b07SJung-uk Kim     UINT8                   Flags;
1251ff879b07SJung-uk Kim     UINT16                  Reserved1;
1252ff879b07SJung-uk Kim     UINT32                  AveragePower;
1253ff879b07SJung-uk Kim     UINT32                  PowerSaving;
1254ff879b07SJung-uk Kim     UINT64                  ExitLatency;
1255ff879b07SJung-uk Kim     UINT64                  Reserved2;
1256ff879b07SJung-uk Kim 
1257ff879b07SJung-uk Kim } ACPI_MPST_POWER_DATA;
1258ff879b07SJung-uk Kim 
1259ff879b07SJung-uk Kim /* Values for Flags field above */
1260ff879b07SJung-uk Kim 
1261ff879b07SJung-uk Kim #define ACPI_MPST_PRESERVE              1
1262ff879b07SJung-uk Kim #define ACPI_MPST_AUTOENTRY             2
1263ff879b07SJung-uk Kim #define ACPI_MPST_AUTOEXIT              4
1264ff879b07SJung-uk Kim 
1265ff879b07SJung-uk Kim 
1266ff879b07SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */
1267ff879b07SJung-uk Kim 
1268ff879b07SJung-uk Kim typedef struct acpi_mpst_shared
1269ff879b07SJung-uk Kim {
1270ff879b07SJung-uk Kim     UINT32                  Signature;
1271ff879b07SJung-uk Kim     UINT16                  PccCommand;
1272ff879b07SJung-uk Kim     UINT16                  PccStatus;
1273ff879b07SJung-uk Kim     UINT32                  CommandRegister;
1274ff879b07SJung-uk Kim     UINT32                  StatusRegister;
1275ff879b07SJung-uk Kim     UINT32                  PowerStateId;
1276ff879b07SJung-uk Kim     UINT32                  PowerNodeId;
1277ff879b07SJung-uk Kim     UINT64                  EnergyConsumed;
1278ff879b07SJung-uk Kim     UINT64                  AveragePower;
1279ff879b07SJung-uk Kim 
1280ff879b07SJung-uk Kim } ACPI_MPST_SHARED;
1281ff879b07SJung-uk Kim 
1282ff879b07SJung-uk Kim 
1283ff879b07SJung-uk Kim /*******************************************************************************
1284ff879b07SJung-uk Kim  *
1285ff879b07SJung-uk Kim  * MSCT - Maximum System Characteristics Table (ACPI 4.0)
1286ff879b07SJung-uk Kim  *        Version 1
1287ff879b07SJung-uk Kim  *
1288ff879b07SJung-uk Kim  ******************************************************************************/
1289ff879b07SJung-uk Kim 
1290ff879b07SJung-uk Kim typedef struct acpi_table_msct
1291ff879b07SJung-uk Kim {
1292ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1293ff879b07SJung-uk Kim     UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
1294ff879b07SJung-uk Kim     UINT32                  MaxProximityDomains;/* Max number of proximity domains */
1295ff879b07SJung-uk Kim     UINT32                  MaxClockDomains;    /* Max number of clock domains */
1296ff879b07SJung-uk Kim     UINT64                  MaxAddress;         /* Max physical address in system */
1297ff879b07SJung-uk Kim 
1298ff879b07SJung-uk Kim } ACPI_TABLE_MSCT;
1299ff879b07SJung-uk Kim 
1300ff879b07SJung-uk Kim 
1301ff879b07SJung-uk Kim /* Subtable - Maximum Proximity Domain Information. Version 1 */
1302ff879b07SJung-uk Kim 
1303ff879b07SJung-uk Kim typedef struct acpi_msct_proximity
1304ff879b07SJung-uk Kim {
1305ff879b07SJung-uk Kim     UINT8                   Revision;
1306ff879b07SJung-uk Kim     UINT8                   Length;
1307ff879b07SJung-uk Kim     UINT32                  RangeStart;         /* Start of domain range */
1308ff879b07SJung-uk Kim     UINT32                  RangeEnd;           /* End of domain range */
1309ff879b07SJung-uk Kim     UINT32                  ProcessorCapacity;
1310ff879b07SJung-uk Kim     UINT64                  MemoryCapacity;     /* In bytes */
1311ff879b07SJung-uk Kim 
1312ff879b07SJung-uk Kim } ACPI_MSCT_PROXIMITY;
1313ff879b07SJung-uk Kim 
1314ff879b07SJung-uk Kim 
1315ff879b07SJung-uk Kim /*******************************************************************************
1316ff879b07SJung-uk Kim  *
13177cf3e94aSJung-uk Kim  * MSDM - Microsoft Data Management table
13187cf3e94aSJung-uk Kim  *
13197cf3e94aSJung-uk Kim  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
13207cf3e94aSJung-uk Kim  * November 29, 2011. Copyright 2011 Microsoft
13217cf3e94aSJung-uk Kim  *
13227cf3e94aSJung-uk Kim  ******************************************************************************/
13237cf3e94aSJung-uk Kim 
13247cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */
13257cf3e94aSJung-uk Kim 
13267cf3e94aSJung-uk Kim typedef struct acpi_table_msdm
13277cf3e94aSJung-uk Kim {
13287cf3e94aSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
13297cf3e94aSJung-uk Kim 
13307cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM;
13317cf3e94aSJung-uk Kim 
13327cf3e94aSJung-uk Kim 
13337cf3e94aSJung-uk Kim /*******************************************************************************
13347cf3e94aSJung-uk Kim  *
1335ff879b07SJung-uk Kim  * NFIT - NVDIMM Interface Table (ACPI 6.0+)
1336ff879b07SJung-uk Kim  *        Version 1
1337ff879b07SJung-uk Kim  *
1338ff879b07SJung-uk Kim  ******************************************************************************/
1339ff879b07SJung-uk Kim 
1340ff879b07SJung-uk Kim typedef struct acpi_table_nfit
1341ff879b07SJung-uk Kim {
1342ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1343ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
1344ff879b07SJung-uk Kim 
1345ff879b07SJung-uk Kim } ACPI_TABLE_NFIT;
1346ff879b07SJung-uk Kim 
1347ff879b07SJung-uk Kim /* Subtable header for NFIT */
1348ff879b07SJung-uk Kim 
1349ff879b07SJung-uk Kim typedef struct acpi_nfit_header
1350ff879b07SJung-uk Kim {
1351ff879b07SJung-uk Kim     UINT16                   Type;
1352ff879b07SJung-uk Kim     UINT16                   Length;
1353ff879b07SJung-uk Kim 
1354ff879b07SJung-uk Kim } ACPI_NFIT_HEADER;
1355ff879b07SJung-uk Kim 
1356ff879b07SJung-uk Kim 
1357ff879b07SJung-uk Kim /* Values for subtable type in ACPI_NFIT_HEADER */
1358ff879b07SJung-uk Kim 
1359ff879b07SJung-uk Kim enum AcpiNfitType
1360ff879b07SJung-uk Kim {
1361ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_SYSTEM_ADDRESS       = 0,
1362ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_MEMORY_MAP           = 1,
1363ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_INTERLEAVE           = 2,
1364ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_SMBIOS               = 3,
1365ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_CONTROL_REGION       = 4,
1366ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_DATA_REGION          = 5,
1367ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_FLUSH_ADDRESS        = 6,
1368ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_CAPABILITIES         = 7,
1369ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_RESERVED             = 8     /* 8 and greater are reserved */
1370ff879b07SJung-uk Kim };
1371ff879b07SJung-uk Kim 
1372ff879b07SJung-uk Kim /*
1373ff879b07SJung-uk Kim  * NFIT Subtables
1374ff879b07SJung-uk Kim  */
1375ff879b07SJung-uk Kim 
1376ff879b07SJung-uk Kim /* 0: System Physical Address Range Structure */
1377ff879b07SJung-uk Kim 
1378ff879b07SJung-uk Kim typedef struct acpi_nfit_system_address
1379ff879b07SJung-uk Kim {
1380ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1381ff879b07SJung-uk Kim     UINT16                  RangeIndex;
1382ff879b07SJung-uk Kim     UINT16                  Flags;
1383ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
1384ff879b07SJung-uk Kim     UINT32                  ProximityDomain;
1385ff879b07SJung-uk Kim     UINT8                   RangeGuid[16];
1386ff879b07SJung-uk Kim     UINT64                  Address;
1387ff879b07SJung-uk Kim     UINT64                  Length;
1388ff879b07SJung-uk Kim     UINT64                  MemoryMapping;
1389cfd1ed46SJung-uk Kim     UINT64                  LocationCookie;     /* ACPI 6.4 */
1390ff879b07SJung-uk Kim 
1391ff879b07SJung-uk Kim } ACPI_NFIT_SYSTEM_ADDRESS;
1392ff879b07SJung-uk Kim 
1393ff879b07SJung-uk Kim /* Flags */
1394ff879b07SJung-uk Kim 
1395ff879b07SJung-uk Kim #define ACPI_NFIT_ADD_ONLINE_ONLY       (1)     /* 00: Add/Online Operation Only */
1396ff879b07SJung-uk Kim #define ACPI_NFIT_PROXIMITY_VALID       (1<<1)  /* 01: Proximity Domain Valid */
1397cfd1ed46SJung-uk Kim #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2)  /* 02: SPA location cookie valid (ACPI 6.4) */
1398ff879b07SJung-uk Kim 
1399ff879b07SJung-uk Kim /* Range Type GUIDs appear in the include/acuuid.h file */
1400ff879b07SJung-uk Kim 
1401ff879b07SJung-uk Kim 
1402ff879b07SJung-uk Kim /* 1: Memory Device to System Address Range Map Structure */
1403ff879b07SJung-uk Kim 
1404ff879b07SJung-uk Kim typedef struct acpi_nfit_memory_map
1405ff879b07SJung-uk Kim {
1406ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1407ff879b07SJung-uk Kim     UINT32                  DeviceHandle;
1408ff879b07SJung-uk Kim     UINT16                  PhysicalId;
1409ff879b07SJung-uk Kim     UINT16                  RegionId;
1410ff879b07SJung-uk Kim     UINT16                  RangeIndex;
1411ff879b07SJung-uk Kim     UINT16                  RegionIndex;
1412ff879b07SJung-uk Kim     UINT64                  RegionSize;
1413ff879b07SJung-uk Kim     UINT64                  RegionOffset;
1414ff879b07SJung-uk Kim     UINT64                  Address;
1415ff879b07SJung-uk Kim     UINT16                  InterleaveIndex;
1416ff879b07SJung-uk Kim     UINT16                  InterleaveWays;
1417ff879b07SJung-uk Kim     UINT16                  Flags;
1418ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
1419ff879b07SJung-uk Kim 
1420ff879b07SJung-uk Kim } ACPI_NFIT_MEMORY_MAP;
1421ff879b07SJung-uk Kim 
1422ff879b07SJung-uk Kim /* Flags */
1423ff879b07SJung-uk Kim 
1424ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_SAVE_FAILED       (1)     /* 00: Last SAVE to Memory Device failed */
1425ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)  /* 01: Last RESTORE from Memory Device failed */
1426ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)  /* 02: Platform flush failed */
1427ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)  /* 03: Memory Device is not armed */
1428ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)  /* 04: Memory Device observed SMART/health events */
1429ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)  /* 05: SMART/health events enabled */
1430ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)  /* 06: Mapping to SPA failed */
1431ff879b07SJung-uk Kim 
1432ff879b07SJung-uk Kim 
1433ff879b07SJung-uk Kim /* 2: Interleave Structure */
1434ff879b07SJung-uk Kim 
1435ff879b07SJung-uk Kim typedef struct acpi_nfit_interleave
1436ff879b07SJung-uk Kim {
1437ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1438ff879b07SJung-uk Kim     UINT16                  InterleaveIndex;
1439ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
1440ff879b07SJung-uk Kim     UINT32                  LineCount;
1441ff879b07SJung-uk Kim     UINT32                  LineSize;
1442ff879b07SJung-uk Kim     UINT32                  LineOffset[1];      /* Variable length */
1443ff879b07SJung-uk Kim 
1444ff879b07SJung-uk Kim } ACPI_NFIT_INTERLEAVE;
1445ff879b07SJung-uk Kim 
1446ff879b07SJung-uk Kim 
1447ff879b07SJung-uk Kim /* 3: SMBIOS Management Information Structure */
1448ff879b07SJung-uk Kim 
1449ff879b07SJung-uk Kim typedef struct acpi_nfit_smbios
1450ff879b07SJung-uk Kim {
1451ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1452ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
1453ff879b07SJung-uk Kim     UINT8                   Data[1];            /* Variable length */
1454ff879b07SJung-uk Kim 
1455ff879b07SJung-uk Kim } ACPI_NFIT_SMBIOS;
1456ff879b07SJung-uk Kim 
1457ff879b07SJung-uk Kim 
1458ff879b07SJung-uk Kim /* 4: NVDIMM Control Region Structure */
1459ff879b07SJung-uk Kim 
1460ff879b07SJung-uk Kim typedef struct acpi_nfit_control_region
1461ff879b07SJung-uk Kim {
1462ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1463ff879b07SJung-uk Kim     UINT16                  RegionIndex;
1464ff879b07SJung-uk Kim     UINT16                  VendorId;
1465ff879b07SJung-uk Kim     UINT16                  DeviceId;
1466ff879b07SJung-uk Kim     UINT16                  RevisionId;
1467ff879b07SJung-uk Kim     UINT16                  SubsystemVendorId;
1468ff879b07SJung-uk Kim     UINT16                  SubsystemDeviceId;
1469ff879b07SJung-uk Kim     UINT16                  SubsystemRevisionId;
1470ff879b07SJung-uk Kim     UINT8                   ValidFields;
1471ff879b07SJung-uk Kim     UINT8                   ManufacturingLocation;
1472ff879b07SJung-uk Kim     UINT16                  ManufacturingDate;
1473ff879b07SJung-uk Kim     UINT8                   Reserved[2];        /* Reserved, must be zero */
1474ff879b07SJung-uk Kim     UINT32                  SerialNumber;
1475ff879b07SJung-uk Kim     UINT16                  Code;
1476ff879b07SJung-uk Kim     UINT16                  Windows;
1477ff879b07SJung-uk Kim     UINT64                  WindowSize;
1478ff879b07SJung-uk Kim     UINT64                  CommandOffset;
1479ff879b07SJung-uk Kim     UINT64                  CommandSize;
1480ff879b07SJung-uk Kim     UINT64                  StatusOffset;
1481ff879b07SJung-uk Kim     UINT64                  StatusSize;
1482ff879b07SJung-uk Kim     UINT16                  Flags;
1483ff879b07SJung-uk Kim     UINT8                   Reserved1[6];       /* Reserved, must be zero */
1484ff879b07SJung-uk Kim 
1485ff879b07SJung-uk Kim } ACPI_NFIT_CONTROL_REGION;
1486ff879b07SJung-uk Kim 
1487ff879b07SJung-uk Kim /* Flags */
1488ff879b07SJung-uk Kim 
1489ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_BUFFERED          (1)     /* Block Data Windows implementation is buffered */
1490ff879b07SJung-uk Kim 
1491ff879b07SJung-uk Kim /* ValidFields bits */
1492ff879b07SJung-uk Kim 
1493ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)     /* Manufacturing fields are valid */
1494ff879b07SJung-uk Kim 
1495ff879b07SJung-uk Kim 
1496ff879b07SJung-uk Kim /* 5: NVDIMM Block Data Window Region Structure */
1497ff879b07SJung-uk Kim 
1498ff879b07SJung-uk Kim typedef struct acpi_nfit_data_region
1499ff879b07SJung-uk Kim {
1500ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1501ff879b07SJung-uk Kim     UINT16                  RegionIndex;
1502ff879b07SJung-uk Kim     UINT16                  Windows;
1503ff879b07SJung-uk Kim     UINT64                  Offset;
1504ff879b07SJung-uk Kim     UINT64                  Size;
1505ff879b07SJung-uk Kim     UINT64                  Capacity;
1506ff879b07SJung-uk Kim     UINT64                  StartAddress;
1507ff879b07SJung-uk Kim 
1508ff879b07SJung-uk Kim } ACPI_NFIT_DATA_REGION;
1509ff879b07SJung-uk Kim 
1510ff879b07SJung-uk Kim 
1511ff879b07SJung-uk Kim /* 6: Flush Hint Address Structure */
1512ff879b07SJung-uk Kim 
1513ff879b07SJung-uk Kim typedef struct acpi_nfit_flush_address
1514ff879b07SJung-uk Kim {
1515ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1516ff879b07SJung-uk Kim     UINT32                  DeviceHandle;
1517ff879b07SJung-uk Kim     UINT16                  HintCount;
1518ff879b07SJung-uk Kim     UINT8                   Reserved[6];        /* Reserved, must be zero */
1519ff879b07SJung-uk Kim     UINT64                  HintAddress[1];     /* Variable length */
1520ff879b07SJung-uk Kim 
1521ff879b07SJung-uk Kim } ACPI_NFIT_FLUSH_ADDRESS;
1522ff879b07SJung-uk Kim 
1523ff879b07SJung-uk Kim 
1524ff879b07SJung-uk Kim /* 7: Platform Capabilities Structure */
1525ff879b07SJung-uk Kim 
1526ff879b07SJung-uk Kim typedef struct acpi_nfit_capabilities
1527ff879b07SJung-uk Kim {
1528ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1529ff879b07SJung-uk Kim     UINT8                   HighestCapability;
1530ff879b07SJung-uk Kim     UINT8                   Reserved[3];       /* Reserved, must be zero */
1531ff879b07SJung-uk Kim     UINT32                  Capabilities;
1532ff879b07SJung-uk Kim     UINT32                  Reserved2;
1533ff879b07SJung-uk Kim 
1534ff879b07SJung-uk Kim } ACPI_NFIT_CAPABILITIES;
1535ff879b07SJung-uk Kim 
1536ff879b07SJung-uk Kim /* Capabilities Flags */
1537ff879b07SJung-uk Kim 
1538ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)     /* 00: Cache Flush to NVDIMM capable */
1539ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)  /* 01: Memory Flush to NVDIMM capable */
1540ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)  /* 02: Memory Mirroring capable */
1541ff879b07SJung-uk Kim 
1542ff879b07SJung-uk Kim 
1543ff879b07SJung-uk Kim /*
1544ff879b07SJung-uk Kim  * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
1545ff879b07SJung-uk Kim  */
1546ff879b07SJung-uk Kim typedef struct nfit_device_handle
1547ff879b07SJung-uk Kim {
1548ff879b07SJung-uk Kim     UINT32                  Handle;
1549ff879b07SJung-uk Kim 
1550ff879b07SJung-uk Kim } NFIT_DEVICE_HANDLE;
1551ff879b07SJung-uk Kim 
1552ff879b07SJung-uk Kim /* Device handle construction and extraction macros */
1553ff879b07SJung-uk Kim 
1554ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
1555ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
1556ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
1557ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
1558ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
1559ff879b07SJung-uk Kim 
1560ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
1561ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
1562ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_OFFSET              8
1563ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_OFFSET              12
1564ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_OFFSET                16
1565ff879b07SJung-uk Kim 
1566ff879b07SJung-uk Kim /* Macro to construct a NFIT/NVDIMM device handle */
1567ff879b07SJung-uk Kim 
1568ff879b07SJung-uk Kim #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
1569ff879b07SJung-uk Kim     ((dimm)                                         | \
1570ff879b07SJung-uk Kim     ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
1571ff879b07SJung-uk Kim     ((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
1572ff879b07SJung-uk Kim     ((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
1573ff879b07SJung-uk Kim     ((node)    << ACPI_NFIT_NODE_ID_OFFSET))
1574ff879b07SJung-uk Kim 
1575ff879b07SJung-uk Kim /* Macros to extract individual fields from a NFIT/NVDIMM device handle */
1576ff879b07SJung-uk Kim 
1577ff879b07SJung-uk Kim #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
1578ff879b07SJung-uk Kim     ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
1579ff879b07SJung-uk Kim 
1580ff879b07SJung-uk Kim #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
1581ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
1582ff879b07SJung-uk Kim 
1583ff879b07SJung-uk Kim #define ACPI_NFIT_GET_MEMORY_ID(handle) \
1584ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
1585ff879b07SJung-uk Kim 
1586ff879b07SJung-uk Kim #define ACPI_NFIT_GET_SOCKET_ID(handle) \
1587ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
1588ff879b07SJung-uk Kim 
1589ff879b07SJung-uk Kim #define ACPI_NFIT_GET_NODE_ID(handle) \
1590ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
1591ff879b07SJung-uk Kim 
1592ff879b07SJung-uk Kim 
1593ff879b07SJung-uk Kim /*******************************************************************************
1594ff879b07SJung-uk Kim  *
1595ff879b07SJung-uk Kim  * PCCT - Platform Communications Channel Table (ACPI 5.0)
1596ff879b07SJung-uk Kim  *        Version 2 (ACPI 6.2)
1597ff879b07SJung-uk Kim  *
1598ff879b07SJung-uk Kim  ******************************************************************************/
1599ff879b07SJung-uk Kim 
1600ff879b07SJung-uk Kim typedef struct acpi_table_pcct
1601ff879b07SJung-uk Kim {
1602ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1603ff879b07SJung-uk Kim     UINT32                  Flags;
1604ff879b07SJung-uk Kim     UINT64                  Reserved;
1605ff879b07SJung-uk Kim 
1606ff879b07SJung-uk Kim } ACPI_TABLE_PCCT;
1607ff879b07SJung-uk Kim 
1608ff879b07SJung-uk Kim /* Values for Flags field above */
1609ff879b07SJung-uk Kim 
1610ff879b07SJung-uk Kim #define ACPI_PCCT_DOORBELL              1
1611ff879b07SJung-uk Kim 
1612ff879b07SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */
1613ff879b07SJung-uk Kim 
1614ff879b07SJung-uk Kim enum AcpiPcctType
1615ff879b07SJung-uk Kim {
1616ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_GENERIC_SUBSPACE             = 0,
1617ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE          = 1,
1618ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2    = 2,    /* ACPI 6.1 */
1619ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE      = 3,    /* ACPI 6.2 */
1620ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE       = 4,    /* ACPI 6.2 */
1621cfd1ed46SJung-uk Kim     ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE         = 5,    /* ACPI 6.4 */
1622cfd1ed46SJung-uk Kim     ACPI_PCCT_TYPE_RESERVED                     = 6     /* 6 and greater are reserved */
1623ff879b07SJung-uk Kim };
1624ff879b07SJung-uk Kim 
1625ff879b07SJung-uk Kim /*
1626ff879b07SJung-uk Kim  * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
1627ff879b07SJung-uk Kim  */
1628ff879b07SJung-uk Kim 
1629ff879b07SJung-uk Kim /* 0: Generic Communications Subspace */
1630ff879b07SJung-uk Kim 
1631ff879b07SJung-uk Kim typedef struct acpi_pcct_subspace
1632ff879b07SJung-uk Kim {
1633ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1634ff879b07SJung-uk Kim     UINT8                   Reserved[6];
1635ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1636ff879b07SJung-uk Kim     UINT64                  Length;
1637ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1638ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1639ff879b07SJung-uk Kim     UINT64                  WriteMask;
1640ff879b07SJung-uk Kim     UINT32                  Latency;
1641ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1642ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
1643ff879b07SJung-uk Kim 
1644ff879b07SJung-uk Kim } ACPI_PCCT_SUBSPACE;
1645ff879b07SJung-uk Kim 
1646ff879b07SJung-uk Kim 
1647ff879b07SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */
1648ff879b07SJung-uk Kim 
1649ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced
1650ff879b07SJung-uk Kim {
1651ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1652ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
1653ff879b07SJung-uk Kim     UINT8                   Flags;
1654ff879b07SJung-uk Kim     UINT8                   Reserved;
1655ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1656ff879b07SJung-uk Kim     UINT64                  Length;
1657ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1658ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1659ff879b07SJung-uk Kim     UINT64                  WriteMask;
1660ff879b07SJung-uk Kim     UINT32                  Latency;
1661ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1662ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
1663ff879b07SJung-uk Kim 
1664ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED;
1665ff879b07SJung-uk Kim 
1666ff879b07SJung-uk Kim 
1667ff879b07SJung-uk Kim /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
1668ff879b07SJung-uk Kim 
1669ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced_type2
1670ff879b07SJung-uk Kim {
1671ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1672ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
1673ff879b07SJung-uk Kim     UINT8                   Flags;
1674ff879b07SJung-uk Kim     UINT8                   Reserved;
1675ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1676ff879b07SJung-uk Kim     UINT64                  Length;
1677ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1678ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1679ff879b07SJung-uk Kim     UINT64                  WriteMask;
1680ff879b07SJung-uk Kim     UINT32                  Latency;
1681ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1682ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
1683ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
1684ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
1685ff879b07SJung-uk Kim     UINT64                  AckWriteMask;
1686ff879b07SJung-uk Kim 
1687ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED_TYPE2;
1688ff879b07SJung-uk Kim 
1689ff879b07SJung-uk Kim 
1690ff879b07SJung-uk Kim /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
1691ff879b07SJung-uk Kim 
1692ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_master
1693ff879b07SJung-uk Kim {
1694ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1695ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
1696ff879b07SJung-uk Kim     UINT8                   Flags;
1697ff879b07SJung-uk Kim     UINT8                   Reserved1;
1698ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1699ff879b07SJung-uk Kim     UINT32                  Length;
1700ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1701ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1702ff879b07SJung-uk Kim     UINT64                  WriteMask;
1703ff879b07SJung-uk Kim     UINT32                  Latency;
1704ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1705ff879b07SJung-uk Kim     UINT32                  MinTurnaroundTime;
1706ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
1707ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
1708ff879b07SJung-uk Kim     UINT64                  AckSetMask;
1709ff879b07SJung-uk Kim     UINT64                  Reserved2;
1710ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
1711ff879b07SJung-uk Kim     UINT64                  CmdCompleteMask;
1712ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
1713ff879b07SJung-uk Kim     UINT64                  CmdUpdatePreserveMask;
1714ff879b07SJung-uk Kim     UINT64                  CmdUpdateSetMask;
1715ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
1716ff879b07SJung-uk Kim     UINT64                  ErrorStatusMask;
1717ff879b07SJung-uk Kim 
1718ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_MASTER;
1719ff879b07SJung-uk Kim 
1720ff879b07SJung-uk Kim 
1721ff879b07SJung-uk Kim /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
1722ff879b07SJung-uk Kim 
1723ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_slave
1724ff879b07SJung-uk Kim {
1725ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1726ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
1727ff879b07SJung-uk Kim     UINT8                   Flags;
1728ff879b07SJung-uk Kim     UINT8                   Reserved1;
1729ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1730ff879b07SJung-uk Kim     UINT32                  Length;
1731ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1732ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1733ff879b07SJung-uk Kim     UINT64                  WriteMask;
1734ff879b07SJung-uk Kim     UINT32                  Latency;
1735ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1736ff879b07SJung-uk Kim     UINT32                  MinTurnaroundTime;
1737ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
1738ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
1739ff879b07SJung-uk Kim     UINT64                  AckSetMask;
1740ff879b07SJung-uk Kim     UINT64                  Reserved2;
1741ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
1742ff879b07SJung-uk Kim     UINT64                  CmdCompleteMask;
1743ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
1744ff879b07SJung-uk Kim     UINT64                  CmdUpdatePreserveMask;
1745ff879b07SJung-uk Kim     UINT64                  CmdUpdateSetMask;
1746ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
1747ff879b07SJung-uk Kim     UINT64                  ErrorStatusMask;
1748ff879b07SJung-uk Kim 
1749ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SLAVE;
1750ff879b07SJung-uk Kim 
1751cfd1ed46SJung-uk Kim /* 5: HW Registers based Communications Subspace */
1752cfd1ed46SJung-uk Kim 
1753cfd1ed46SJung-uk Kim typedef struct acpi_pcct_hw_reg
1754cfd1ed46SJung-uk Kim {
1755cfd1ed46SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1756cfd1ed46SJung-uk Kim     UINT16                  Version;
1757cfd1ed46SJung-uk Kim     UINT64                  BaseAddress;
1758cfd1ed46SJung-uk Kim     UINT64                  Length;
1759cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1760cfd1ed46SJung-uk Kim     UINT64                  DoorbellPreserve;
1761cfd1ed46SJung-uk Kim     UINT64                  DoorbellWrite;
1762cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
1763cfd1ed46SJung-uk Kim     UINT64                  CmdCompleteMask;
1764cfd1ed46SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
1765cfd1ed46SJung-uk Kim     UINT64                  ErrorStatusMask;
1766cfd1ed46SJung-uk Kim     UINT32                  NominalLatency;
1767cfd1ed46SJung-uk Kim     UINT32                  MinTurnaroundTime;
1768cfd1ed46SJung-uk Kim 
1769cfd1ed46SJung-uk Kim } ACPI_PCCT_HW_REG;
1770cfd1ed46SJung-uk Kim 
1771ff879b07SJung-uk Kim 
1772ff879b07SJung-uk Kim /* Values for doorbell flags above */
1773ff879b07SJung-uk Kim 
1774ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY    (1)
1775ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
1776ff879b07SJung-uk Kim 
1777ff879b07SJung-uk Kim 
1778ff879b07SJung-uk Kim /*
1779ff879b07SJung-uk Kim  * PCC memory structures (not part of the ACPI table)
1780ff879b07SJung-uk Kim  */
1781ff879b07SJung-uk Kim 
1782ff879b07SJung-uk Kim /* Shared Memory Region */
1783ff879b07SJung-uk Kim 
1784ff879b07SJung-uk Kim typedef struct acpi_pcct_shared_memory
1785ff879b07SJung-uk Kim {
1786ff879b07SJung-uk Kim     UINT32                  Signature;
1787ff879b07SJung-uk Kim     UINT16                  Command;
1788ff879b07SJung-uk Kim     UINT16                  Status;
1789ff879b07SJung-uk Kim 
1790ff879b07SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY;
1791ff879b07SJung-uk Kim 
1792ff879b07SJung-uk Kim 
1793ff879b07SJung-uk Kim /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
1794ff879b07SJung-uk Kim 
1795ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_shared_memory
1796ff879b07SJung-uk Kim {
1797ff879b07SJung-uk Kim     UINT32                  Signature;
1798ff879b07SJung-uk Kim     UINT32                  Flags;
1799ff879b07SJung-uk Kim     UINT32                  Length;
1800ff879b07SJung-uk Kim     UINT32                  Command;
1801ff879b07SJung-uk Kim 
1802ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SHARED_MEMORY;
1803ff879b07SJung-uk Kim 
1804ff879b07SJung-uk Kim 
1805ff879b07SJung-uk Kim /*******************************************************************************
1806ff879b07SJung-uk Kim  *
1807ff879b07SJung-uk Kim  * PDTT - Platform Debug Trigger Table (ACPI 6.2)
1808ff879b07SJung-uk Kim  *        Version 0
1809ff879b07SJung-uk Kim  *
1810ff879b07SJung-uk Kim  ******************************************************************************/
1811ff879b07SJung-uk Kim 
1812ff879b07SJung-uk Kim typedef struct acpi_table_pdtt
1813ff879b07SJung-uk Kim {
1814ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1815ff879b07SJung-uk Kim     UINT8                   TriggerCount;
1816ff879b07SJung-uk Kim     UINT8                   Reserved[3];
1817ff879b07SJung-uk Kim     UINT32                  ArrayOffset;
1818ff879b07SJung-uk Kim 
1819ff879b07SJung-uk Kim } ACPI_TABLE_PDTT;
1820ff879b07SJung-uk Kim 
1821ff879b07SJung-uk Kim 
1822ff879b07SJung-uk Kim /*
1823ff879b07SJung-uk Kim  * PDTT Communication Channel Identifier Structure.
1824ff879b07SJung-uk Kim  * The number of these structures is defined by TriggerCount above,
1825ff879b07SJung-uk Kim  * starting at ArrayOffset.
1826ff879b07SJung-uk Kim  */
1827ff879b07SJung-uk Kim typedef struct acpi_pdtt_channel
1828ff879b07SJung-uk Kim {
1829ff879b07SJung-uk Kim     UINT8                   SubchannelId;
1830ff879b07SJung-uk Kim     UINT8                   Flags;
1831ff879b07SJung-uk Kim 
1832ff879b07SJung-uk Kim } ACPI_PDTT_CHANNEL;
1833ff879b07SJung-uk Kim 
1834ff879b07SJung-uk Kim /* Flags for above */
1835ff879b07SJung-uk Kim 
1836ff879b07SJung-uk Kim #define ACPI_PDTT_RUNTIME_TRIGGER           (1)
1837ff879b07SJung-uk Kim #define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
1838cd6518c7SJung-uk Kim #define ACPI_PDTT_TRIGGER_ORDER             (1<<2)
1839ff879b07SJung-uk Kim 
1840ff879b07SJung-uk Kim 
1841ff879b07SJung-uk Kim /*******************************************************************************
1842ff879b07SJung-uk Kim  *
1843cfd1ed46SJung-uk Kim  * PHAT - Platform Health Assessment Table (ACPI 6.4)
1844cfd1ed46SJung-uk Kim  *        Version 1
1845cfd1ed46SJung-uk Kim  *
1846cfd1ed46SJung-uk Kim  ******************************************************************************/
1847cfd1ed46SJung-uk Kim 
1848cfd1ed46SJung-uk Kim typedef struct acpi_table_phat
1849cfd1ed46SJung-uk Kim {
1850cfd1ed46SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1851cfd1ed46SJung-uk Kim 
1852cfd1ed46SJung-uk Kim } ACPI_TABLE_PHAT;
1853cfd1ed46SJung-uk Kim 
1854cfd1ed46SJung-uk Kim /* Common header for PHAT subtables that follow main table */
1855cfd1ed46SJung-uk Kim 
1856cfd1ed46SJung-uk Kim typedef struct acpi_phat_header
1857cfd1ed46SJung-uk Kim {
1858cfd1ed46SJung-uk Kim     UINT16                  Type;
1859cfd1ed46SJung-uk Kim     UINT16                  Length;
1860cfd1ed46SJung-uk Kim     UINT8                   Revision;
1861cfd1ed46SJung-uk Kim 
1862cfd1ed46SJung-uk Kim } ACPI_PHAT_HEADER;
1863cfd1ed46SJung-uk Kim 
1864cfd1ed46SJung-uk Kim 
1865cfd1ed46SJung-uk Kim /* Values for Type field above */
1866cfd1ed46SJung-uk Kim 
1867cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_VERSION_DATA  0
1868cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_FW_HEALTH_DATA   1
1869cfd1ed46SJung-uk Kim #define ACPI_PHAT_TYPE_RESERVED         2 /* 0x02-0xFFFF are reserved */
1870cfd1ed46SJung-uk Kim 
1871cfd1ed46SJung-uk Kim /*
1872cfd1ed46SJung-uk Kim  * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER
1873cfd1ed46SJung-uk Kim  */
1874cfd1ed46SJung-uk Kim 
1875cfd1ed46SJung-uk Kim /* 0: Firmware Version Data Record */
1876cfd1ed46SJung-uk Kim 
1877cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_data
1878cfd1ed46SJung-uk Kim {
1879cfd1ed46SJung-uk Kim     ACPI_PHAT_HEADER        Header;
1880cfd1ed46SJung-uk Kim     UINT8                   Reserved[3];
1881cfd1ed46SJung-uk Kim     UINT32                  ElementCount;
1882cfd1ed46SJung-uk Kim 
1883cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_DATA;
1884cfd1ed46SJung-uk Kim 
1885cfd1ed46SJung-uk Kim typedef struct acpi_phat_version_element
1886cfd1ed46SJung-uk Kim {
1887cfd1ed46SJung-uk Kim     UINT8                   Guid[16];
1888cfd1ed46SJung-uk Kim     UINT64                  VersionValue;
1889cfd1ed46SJung-uk Kim     UINT32                  ProducerId;
1890cfd1ed46SJung-uk Kim 
1891cfd1ed46SJung-uk Kim } ACPI_PHAT_VERSION_ELEMENT;
1892cfd1ed46SJung-uk Kim 
1893cfd1ed46SJung-uk Kim 
1894cfd1ed46SJung-uk Kim /* 1: Firmware Health Data Record */
1895cfd1ed46SJung-uk Kim 
1896cfd1ed46SJung-uk Kim typedef struct acpi_phat_health_data
1897cfd1ed46SJung-uk Kim {
1898cfd1ed46SJung-uk Kim     ACPI_PHAT_HEADER        Header;
1899cfd1ed46SJung-uk Kim     UINT8                   Reserved[2];
1900cfd1ed46SJung-uk Kim     UINT8                   Health;
1901cfd1ed46SJung-uk Kim     UINT8                   DeviceGuid[16];
1902cfd1ed46SJung-uk Kim     UINT32                  DeviceSpecificOffset; /* Zero if no Device-specific data */
1903cfd1ed46SJung-uk Kim 
1904cfd1ed46SJung-uk Kim } ACPI_PHAT_HEALTH_DATA;
1905cfd1ed46SJung-uk Kim 
1906cfd1ed46SJung-uk Kim /* Values for Health field above */
1907cfd1ed46SJung-uk Kim 
1908cfd1ed46SJung-uk Kim #define ACPI_PHAT_ERRORS_FOUND          0
1909cfd1ed46SJung-uk Kim #define ACPI_PHAT_NO_ERRORS             1
1910cfd1ed46SJung-uk Kim #define ACPI_PHAT_UNKNOWN_ERRORS        2
1911cfd1ed46SJung-uk Kim #define ACPI_PHAT_ADVISORY              3
1912cfd1ed46SJung-uk Kim 
1913cfd1ed46SJung-uk Kim 
1914cfd1ed46SJung-uk Kim /*******************************************************************************
1915cfd1ed46SJung-uk Kim  *
1916ff879b07SJung-uk Kim  * PMTT - Platform Memory Topology Table (ACPI 5.0)
1917ff879b07SJung-uk Kim  *        Version 1
1918ff879b07SJung-uk Kim  *
1919ff879b07SJung-uk Kim  ******************************************************************************/
1920ff879b07SJung-uk Kim 
1921ff879b07SJung-uk Kim typedef struct acpi_table_pmtt
1922ff879b07SJung-uk Kim {
1923ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1924cfd1ed46SJung-uk Kim     UINT32                  MemoryDeviceCount;
1925cfd1ed46SJung-uk Kim     /*
1926cfd1ed46SJung-uk Kim      * Immediately followed by:
1927cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
1928cfd1ed46SJung-uk Kim      */
1929ff879b07SJung-uk Kim 
1930ff879b07SJung-uk Kim } ACPI_TABLE_PMTT;
1931ff879b07SJung-uk Kim 
1932ff879b07SJung-uk Kim 
1933ff879b07SJung-uk Kim /* Common header for PMTT subtables that follow main table */
1934ff879b07SJung-uk Kim 
1935ff879b07SJung-uk Kim typedef struct acpi_pmtt_header
1936ff879b07SJung-uk Kim {
1937ff879b07SJung-uk Kim     UINT8                   Type;
1938ff879b07SJung-uk Kim     UINT8                   Reserved1;
1939ff879b07SJung-uk Kim     UINT16                  Length;
1940ff879b07SJung-uk Kim     UINT16                  Flags;
1941ff879b07SJung-uk Kim     UINT16                  Reserved2;
1942cfd1ed46SJung-uk Kim     UINT32                  MemoryDeviceCount;  /* Zero means no memory device structs follow */
1943cfd1ed46SJung-uk Kim     /*
1944cfd1ed46SJung-uk Kim      * Immediately followed by:
1945cfd1ed46SJung-uk Kim      * UINT8 TypeSpecificData[]
1946cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
1947cfd1ed46SJung-uk Kim      */
1948ff879b07SJung-uk Kim 
1949ff879b07SJung-uk Kim } ACPI_PMTT_HEADER;
1950ff879b07SJung-uk Kim 
1951ff879b07SJung-uk Kim /* Values for Type field above */
1952ff879b07SJung-uk Kim 
1953ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET           0
1954ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER       1
1955ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM             2
1956cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFE are reserved */
1957cfd1ed46SJung-uk Kim #define ACPI_PMTT_TYPE_VENDOR           0xFF
1958ff879b07SJung-uk Kim 
1959ff879b07SJung-uk Kim /* Values for Flags field above */
1960ff879b07SJung-uk Kim 
1961ff879b07SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL             0x0001
1962ff879b07SJung-uk Kim #define ACPI_PMTT_PHYSICAL              0x0002
1963ff879b07SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE           0x000C
1964ff879b07SJung-uk Kim 
1965ff879b07SJung-uk Kim 
1966ff879b07SJung-uk Kim /*
1967ff879b07SJung-uk Kim  * PMTT subtables, correspond to Type in acpi_pmtt_header
1968ff879b07SJung-uk Kim  */
1969ff879b07SJung-uk Kim 
1970ff879b07SJung-uk Kim 
1971ff879b07SJung-uk Kim /* 0: Socket Structure */
1972ff879b07SJung-uk Kim 
1973ff879b07SJung-uk Kim typedef struct acpi_pmtt_socket
1974ff879b07SJung-uk Kim {
1975ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
1976ff879b07SJung-uk Kim     UINT16                  SocketId;
1977ff879b07SJung-uk Kim     UINT16                  Reserved;
1978ff879b07SJung-uk Kim 
1979ff879b07SJung-uk Kim } ACPI_PMTT_SOCKET;
1980cfd1ed46SJung-uk Kim     /*
1981cfd1ed46SJung-uk Kim      * Immediately followed by:
1982cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
1983cfd1ed46SJung-uk Kim      */
1984ff879b07SJung-uk Kim 
1985ff879b07SJung-uk Kim 
1986ff879b07SJung-uk Kim /* 1: Memory Controller subtable */
1987ff879b07SJung-uk Kim 
1988ff879b07SJung-uk Kim typedef struct acpi_pmtt_controller
1989ff879b07SJung-uk Kim {
1990ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
1991cfd1ed46SJung-uk Kim     UINT16                  ControllerId;
1992ff879b07SJung-uk Kim     UINT16                  Reserved;
1993ff879b07SJung-uk Kim 
1994ff879b07SJung-uk Kim } ACPI_PMTT_CONTROLLER;
1995cfd1ed46SJung-uk Kim     /*
1996cfd1ed46SJung-uk Kim      * Immediately followed by:
1997cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
1998cfd1ed46SJung-uk Kim      */
1999ff879b07SJung-uk Kim 
2000ff879b07SJung-uk Kim 
2001ff879b07SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */
2002ff879b07SJung-uk Kim 
2003ff879b07SJung-uk Kim typedef struct acpi_pmtt_physical_component
2004ff879b07SJung-uk Kim {
2005ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
2006ff879b07SJung-uk Kim     UINT32                  BiosHandle;
2007ff879b07SJung-uk Kim 
2008ff879b07SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT;
2009ff879b07SJung-uk Kim 
2010ff879b07SJung-uk Kim 
2011cfd1ed46SJung-uk Kim /* 0xFF: Vendor Specific Data */
2012cfd1ed46SJung-uk Kim 
2013cfd1ed46SJung-uk Kim typedef struct acpi_pmtt_vendor_specific
2014cfd1ed46SJung-uk Kim {
2015cfd1ed46SJung-uk Kim     ACPI_PMTT_HEADER        Header;
2016cfd1ed46SJung-uk Kim     UINT8                   TypeUuid[16];
2017cfd1ed46SJung-uk Kim     UINT8                   Specific[];
2018cfd1ed46SJung-uk Kim     /*
2019cfd1ed46SJung-uk Kim      * Immediately followed by:
2020cfd1ed46SJung-uk Kim      * UINT8 VendorSpecificData[];
2021cfd1ed46SJung-uk Kim      * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];
2022cfd1ed46SJung-uk Kim      */
2023cfd1ed46SJung-uk Kim 
2024cfd1ed46SJung-uk Kim } ACPI_PMTT_VENDOR_SPECIFIC;
2025cfd1ed46SJung-uk Kim 
2026cfd1ed46SJung-uk Kim 
2027ff879b07SJung-uk Kim /*******************************************************************************
2028ff879b07SJung-uk Kim  *
2029ff879b07SJung-uk Kim  * PPTT - Processor Properties Topology Table (ACPI 6.2)
2030ff879b07SJung-uk Kim  *        Version 1
2031ff879b07SJung-uk Kim  *
2032ff879b07SJung-uk Kim  ******************************************************************************/
2033ff879b07SJung-uk Kim 
2034ff879b07SJung-uk Kim typedef struct acpi_table_pptt
2035ff879b07SJung-uk Kim {
2036ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2037ff879b07SJung-uk Kim 
2038ff879b07SJung-uk Kim } ACPI_TABLE_PPTT;
2039ff879b07SJung-uk Kim 
2040ff879b07SJung-uk Kim /* Values for Type field above */
2041ff879b07SJung-uk Kim 
2042ff879b07SJung-uk Kim enum AcpiPpttType
2043ff879b07SJung-uk Kim {
2044ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_PROCESSOR            = 0,
2045ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_CACHE                = 1,
2046ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_ID                   = 2,
2047ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_RESERVED             = 3
2048ff879b07SJung-uk Kim };
2049ff879b07SJung-uk Kim 
2050ff879b07SJung-uk Kim 
2051ff879b07SJung-uk Kim /* 0: Processor Hierarchy Node Structure */
2052ff879b07SJung-uk Kim 
2053ff879b07SJung-uk Kim typedef struct acpi_pptt_processor
2054ff879b07SJung-uk Kim {
2055ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2056ff879b07SJung-uk Kim     UINT16                  Reserved;
2057ff879b07SJung-uk Kim     UINT32                  Flags;
2058ff879b07SJung-uk Kim     UINT32                  Parent;
2059ff879b07SJung-uk Kim     UINT32                  AcpiProcessorId;
2060ff879b07SJung-uk Kim     UINT32                  NumberOfPrivResources;
2061ff879b07SJung-uk Kim 
2062ff879b07SJung-uk Kim } ACPI_PPTT_PROCESSOR;
2063ff879b07SJung-uk Kim 
2064ff879b07SJung-uk Kim /* Flags */
2065ff879b07SJung-uk Kim 
2066cd6518c7SJung-uk Kim #define ACPI_PPTT_PHYSICAL_PACKAGE          (1)
2067cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (1<<1)
2068cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD  (1<<2)  /* ACPI 6.3 */
2069cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_LEAF_NODE            (1<<3)  /* ACPI 6.3 */
2070cd6518c7SJung-uk Kim #define ACPI_PPTT_ACPI_IDENTICAL            (1<<4)  /* ACPI 6.3 */
2071ff879b07SJung-uk Kim 
2072ff879b07SJung-uk Kim 
2073ff879b07SJung-uk Kim /* 1: Cache Type Structure */
2074ff879b07SJung-uk Kim 
2075ff879b07SJung-uk Kim typedef struct acpi_pptt_cache
2076ff879b07SJung-uk Kim {
2077ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2078ff879b07SJung-uk Kim     UINT16                  Reserved;
2079ff879b07SJung-uk Kim     UINT32                  Flags;
2080ff879b07SJung-uk Kim     UINT32                  NextLevelOfCache;
2081ff879b07SJung-uk Kim     UINT32                  Size;
2082ff879b07SJung-uk Kim     UINT32                  NumberOfSets;
2083ff879b07SJung-uk Kim     UINT8                   Associativity;
2084ff879b07SJung-uk Kim     UINT8                   Attributes;
2085ff879b07SJung-uk Kim     UINT16                  LineSize;
2086ff879b07SJung-uk Kim 
2087ff879b07SJung-uk Kim } ACPI_PPTT_CACHE;
2088ff879b07SJung-uk Kim 
2089cfd1ed46SJung-uk Kim /* 1: Cache Type Structure for PPTT version 3 */
2090cfd1ed46SJung-uk Kim 
2091cfd1ed46SJung-uk Kim typedef struct acpi_pptt_cache_v1
2092cfd1ed46SJung-uk Kim {
2093cfd1ed46SJung-uk Kim     UINT32                  CacheId;
2094cfd1ed46SJung-uk Kim 
2095cfd1ed46SJung-uk Kim } ACPI_PPTT_CACHE_V1;
2096cfd1ed46SJung-uk Kim 
2097cfd1ed46SJung-uk Kim 
2098ff879b07SJung-uk Kim /* Flags */
2099ff879b07SJung-uk Kim 
2100ff879b07SJung-uk Kim #define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)     /* Physical property valid */
2101ff879b07SJung-uk Kim #define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)  /* Number of sets valid */
2102ff879b07SJung-uk Kim #define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)  /* Associativity valid */
2103ff879b07SJung-uk Kim #define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)  /* Allocation type valid */
2104ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)  /* Cache type valid */
2105ff879b07SJung-uk Kim #define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)  /* Write policy valid */
2106ff879b07SJung-uk Kim #define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)  /* Line size valid */
2107cfd1ed46SJung-uk Kim #define ACPI_PPTT_CACHE_ID_VALID            (1<<7)  /* Cache ID valid */
2108ff879b07SJung-uk Kim 
2109ff879b07SJung-uk Kim /* Masks for Attributes */
2110ff879b07SJung-uk Kim 
2111ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)  /* Allocation type */
2112ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)  /* Cache type */
2113ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)  /* Write policy */
2114ff879b07SJung-uk Kim 
2115ff879b07SJung-uk Kim /* Attributes describing cache */
2116ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)   /* Cache line is allocated on read */
2117ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)  /* Cache line is allocated on write */
2118ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)  /* Cache line is allocated on read and write */
2119ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)  /* Alternate representation of above */
2120ff879b07SJung-uk Kim 
2121ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)   /* Data cache */
2122ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)  /* Instruction cache */
2123ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)  /* Unified I & D cache */
2124ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)  /* Alternate representation of above */
2125ff879b07SJung-uk Kim 
2126ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WB           (0x0)   /* Cache is write back */
2127ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)  /* Cache is write through */
2128ff879b07SJung-uk Kim 
2129ff879b07SJung-uk Kim /* 2: ID Structure */
2130ff879b07SJung-uk Kim 
2131ff879b07SJung-uk Kim typedef struct acpi_pptt_id
2132ff879b07SJung-uk Kim {
2133ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
2134ff879b07SJung-uk Kim     UINT16                  Reserved;
2135ff879b07SJung-uk Kim     UINT32                  VendorId;
2136ff879b07SJung-uk Kim     UINT64                  Level1Id;
2137ff879b07SJung-uk Kim     UINT64                  Level2Id;
2138ff879b07SJung-uk Kim     UINT16                  MajorRev;
2139ff879b07SJung-uk Kim     UINT16                  MinorRev;
2140ff879b07SJung-uk Kim     UINT16                  SpinRev;
2141ff879b07SJung-uk Kim 
2142ff879b07SJung-uk Kim } ACPI_PPTT_ID;
2143ff879b07SJung-uk Kim 
2144ff879b07SJung-uk Kim 
2145ff879b07SJung-uk Kim /*******************************************************************************
2146ff879b07SJung-uk Kim  *
2147*1970d693SJung-uk Kim  * PRMT - Platform Runtime Mechanism Table
2148*1970d693SJung-uk Kim  *        Version 1
2149*1970d693SJung-uk Kim  *
2150*1970d693SJung-uk Kim  ******************************************************************************/
2151*1970d693SJung-uk Kim 
2152*1970d693SJung-uk Kim typedef struct acpi_table_prmt
2153*1970d693SJung-uk Kim {
2154*1970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2155*1970d693SJung-uk Kim 
2156*1970d693SJung-uk Kim } ACPI_TABLE_PRMT;
2157*1970d693SJung-uk Kim 
2158*1970d693SJung-uk Kim typedef struct acpi_table_prmt_header
2159*1970d693SJung-uk Kim {
2160*1970d693SJung-uk Kim     UINT8                   PlatformGuid[16];
2161*1970d693SJung-uk Kim     UINT32                  ModuleInfoOffset;
2162*1970d693SJung-uk Kim     UINT32                  ModuleInfoCount;
2163*1970d693SJung-uk Kim 
2164*1970d693SJung-uk Kim } ACPI_TABLE_PRMT_HEADER;
2165*1970d693SJung-uk Kim 
2166*1970d693SJung-uk Kim typedef struct acpi_prmt_module_info
2167*1970d693SJung-uk Kim {
2168*1970d693SJung-uk Kim     UINT16                  Revision;
2169*1970d693SJung-uk Kim     UINT16                  Length;
2170*1970d693SJung-uk Kim     UINT8                   ModuleGuid[16];
2171*1970d693SJung-uk Kim     UINT16                  MajorRev;
2172*1970d693SJung-uk Kim     UINT16                  MinorRev;
2173*1970d693SJung-uk Kim     UINT16                  HandlerInfoCount;
2174*1970d693SJung-uk Kim     UINT32                  HandlerInfoOffset;
2175*1970d693SJung-uk Kim     UINT64                  MmioListPointer;
2176*1970d693SJung-uk Kim 
2177*1970d693SJung-uk Kim } ACPI_PRMT_MODULE_INFO;
2178*1970d693SJung-uk Kim 
2179*1970d693SJung-uk Kim typedef struct acpi_prmt_handler_info
2180*1970d693SJung-uk Kim {
2181*1970d693SJung-uk Kim     UINT16                  Revision;
2182*1970d693SJung-uk Kim     UINT16                  Length;
2183*1970d693SJung-uk Kim     UINT8                   HandlerGuid[16];
2184*1970d693SJung-uk Kim     UINT64                  HandlerAddress;
2185*1970d693SJung-uk Kim     UINT64                  StaticDataBufferAddress;
2186*1970d693SJung-uk Kim     UINT64                  AcpiParamBufferAddress;
2187*1970d693SJung-uk Kim 
2188*1970d693SJung-uk Kim } ACPI_PRMT_HANDLER_INFO;
2189*1970d693SJung-uk Kim 
2190*1970d693SJung-uk Kim 
2191*1970d693SJung-uk Kim /*******************************************************************************
2192*1970d693SJung-uk Kim  *
2193ff879b07SJung-uk Kim  * RASF - RAS Feature Table (ACPI 5.0)
2194ff879b07SJung-uk Kim  *        Version 1
2195ff879b07SJung-uk Kim  *
2196ff879b07SJung-uk Kim  ******************************************************************************/
2197ff879b07SJung-uk Kim 
2198ff879b07SJung-uk Kim typedef struct acpi_table_rasf
2199ff879b07SJung-uk Kim {
2200ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2201ff879b07SJung-uk Kim     UINT8                   ChannelId[12];
2202ff879b07SJung-uk Kim 
2203ff879b07SJung-uk Kim } ACPI_TABLE_RASF;
2204ff879b07SJung-uk Kim 
2205ff879b07SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */
2206ff879b07SJung-uk Kim 
2207ff879b07SJung-uk Kim typedef struct acpi_rasf_shared_memory
2208ff879b07SJung-uk Kim {
2209ff879b07SJung-uk Kim     UINT32                  Signature;
2210ff879b07SJung-uk Kim     UINT16                  Command;
2211ff879b07SJung-uk Kim     UINT16                  Status;
2212ff879b07SJung-uk Kim     UINT16                  Version;
2213ff879b07SJung-uk Kim     UINT8                   Capabilities[16];
2214ff879b07SJung-uk Kim     UINT8                   SetCapabilities[16];
2215ff879b07SJung-uk Kim     UINT16                  NumParameterBlocks;
2216ff879b07SJung-uk Kim     UINT32                  SetCapabilitiesStatus;
2217ff879b07SJung-uk Kim 
2218ff879b07SJung-uk Kim } ACPI_RASF_SHARED_MEMORY;
2219ff879b07SJung-uk Kim 
2220ff879b07SJung-uk Kim /* RASF Parameter Block Structure Header */
2221ff879b07SJung-uk Kim 
2222ff879b07SJung-uk Kim typedef struct acpi_rasf_parameter_block
2223ff879b07SJung-uk Kim {
2224ff879b07SJung-uk Kim     UINT16                  Type;
2225ff879b07SJung-uk Kim     UINT16                  Version;
2226ff879b07SJung-uk Kim     UINT16                  Length;
2227ff879b07SJung-uk Kim 
2228ff879b07SJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK;
2229ff879b07SJung-uk Kim 
2230ff879b07SJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */
2231ff879b07SJung-uk Kim 
2232ff879b07SJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter
2233ff879b07SJung-uk Kim {
2234ff879b07SJung-uk Kim     ACPI_RASF_PARAMETER_BLOCK   Header;
2235ff879b07SJung-uk Kim     UINT16                      PatrolScrubCommand;
2236ff879b07SJung-uk Kim     UINT64                      RequestedAddressRange[2];
2237ff879b07SJung-uk Kim     UINT64                      ActualAddressRange[2];
2238ff879b07SJung-uk Kim     UINT16                      Flags;
2239ff879b07SJung-uk Kim     UINT8                       RequestedSpeed;
2240ff879b07SJung-uk Kim 
2241ff879b07SJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER;
2242ff879b07SJung-uk Kim 
2243ff879b07SJung-uk Kim /* Masks for Flags and Speed fields above */
2244ff879b07SJung-uk Kim 
2245ff879b07SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING      1
2246ff879b07SJung-uk Kim #define ACPI_RASF_SPEED                 (7<<1)
2247ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_SLOW            (0<<1)
2248ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM          (4<<1)
2249ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_FAST            (7<<1)
2250ff879b07SJung-uk Kim 
2251ff879b07SJung-uk Kim /* Channel Commands */
2252ff879b07SJung-uk Kim 
2253ff879b07SJung-uk Kim enum AcpiRasfCommands
2254ff879b07SJung-uk Kim {
2255ff879b07SJung-uk Kim     ACPI_RASF_EXECUTE_RASF_COMMAND      = 1
2256ff879b07SJung-uk Kim };
2257ff879b07SJung-uk Kim 
2258ff879b07SJung-uk Kim /* Platform RAS Capabilities */
2259ff879b07SJung-uk Kim 
2260ff879b07SJung-uk Kim enum AcpiRasfCapabiliities
2261ff879b07SJung-uk Kim {
2262ff879b07SJung-uk Kim     ACPI_HW_PATROL_SCRUB_SUPPORTED      = 0,
2263ff879b07SJung-uk Kim     ACPI_SW_PATROL_SCRUB_EXPOSED        = 1
2264ff879b07SJung-uk Kim };
2265ff879b07SJung-uk Kim 
2266ff879b07SJung-uk Kim /* Patrol Scrub Commands */
2267ff879b07SJung-uk Kim 
2268ff879b07SJung-uk Kim enum AcpiRasfPatrolScrubCommands
2269ff879b07SJung-uk Kim {
2270ff879b07SJung-uk Kim     ACPI_RASF_GET_PATROL_PARAMETERS     = 1,
2271ff879b07SJung-uk Kim     ACPI_RASF_START_PATROL_SCRUBBER     = 2,
2272ff879b07SJung-uk Kim     ACPI_RASF_STOP_PATROL_SCRUBBER      = 3
2273ff879b07SJung-uk Kim };
2274ff879b07SJung-uk Kim 
2275ff879b07SJung-uk Kim /* Channel Command flags */
2276ff879b07SJung-uk Kim 
2277ff879b07SJung-uk Kim #define ACPI_RASF_GENERATE_SCI          (1<<15)
2278ff879b07SJung-uk Kim 
2279ff879b07SJung-uk Kim /* Status values */
2280ff879b07SJung-uk Kim 
2281ff879b07SJung-uk Kim enum AcpiRasfStatus
2282ff879b07SJung-uk Kim {
2283ff879b07SJung-uk Kim     ACPI_RASF_SUCCESS                   = 0,
2284ff879b07SJung-uk Kim     ACPI_RASF_NOT_VALID                 = 1,
2285ff879b07SJung-uk Kim     ACPI_RASF_NOT_SUPPORTED             = 2,
2286ff879b07SJung-uk Kim     ACPI_RASF_BUSY                      = 3,
2287ff879b07SJung-uk Kim     ACPI_RASF_FAILED                    = 4,
2288ff879b07SJung-uk Kim     ACPI_RASF_ABORTED                   = 5,
2289ff879b07SJung-uk Kim     ACPI_RASF_INVALID_DATA              = 6
2290ff879b07SJung-uk Kim };
2291ff879b07SJung-uk Kim 
2292ff879b07SJung-uk Kim /* Status flags */
2293ff879b07SJung-uk Kim 
2294ff879b07SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE      (1)
2295ff879b07SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL          (1<<1)
2296ff879b07SJung-uk Kim #define ACPI_RASF_ERROR                 (1<<2)
2297ff879b07SJung-uk Kim #define ACPI_RASF_STATUS                (0x1F<<3)
2298ff879b07SJung-uk Kim 
2299ff879b07SJung-uk Kim 
2300ff879b07SJung-uk Kim /*******************************************************************************
2301ff879b07SJung-uk Kim  *
2302*1970d693SJung-uk Kim  * RGRT - Regulatory Graphics Resource Table
2303*1970d693SJung-uk Kim  *        Version 1
2304*1970d693SJung-uk Kim  *
2305*1970d693SJung-uk Kim  * Conforms to "ACPI RGRT" available at:
2306*1970d693SJung-uk Kim  * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/
2307*1970d693SJung-uk Kim  *
2308*1970d693SJung-uk Kim  ******************************************************************************/
2309*1970d693SJung-uk Kim 
2310*1970d693SJung-uk Kim typedef struct acpi_table_rgrt
2311*1970d693SJung-uk Kim {
2312*1970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2313*1970d693SJung-uk Kim     UINT16                  Version;
2314*1970d693SJung-uk Kim     UINT8                   ImageType;
2315*1970d693SJung-uk Kim     UINT8                   Reserved;
2316*1970d693SJung-uk Kim     UINT8                   Image[0];
2317*1970d693SJung-uk Kim 
2318*1970d693SJung-uk Kim } ACPI_TABLE_RGRT;
2319*1970d693SJung-uk Kim 
2320*1970d693SJung-uk Kim /* ImageType values */
2321*1970d693SJung-uk Kim 
2322*1970d693SJung-uk Kim enum AcpiRgrtImageType
2323*1970d693SJung-uk Kim {
2324*1970d693SJung-uk Kim     ACPI_RGRT_TYPE_RESERVED0            = 0,
2325*1970d693SJung-uk Kim     ACPI_RGRT_IMAGE_TYPE_PNG            = 1,
2326*1970d693SJung-uk Kim     ACPI_RGRT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
2327*1970d693SJung-uk Kim };
2328*1970d693SJung-uk Kim 
2329*1970d693SJung-uk Kim 
2330*1970d693SJung-uk Kim /*******************************************************************************
2331*1970d693SJung-uk Kim  *
2332ff879b07SJung-uk Kim  * SBST - Smart Battery Specification Table
2333ff879b07SJung-uk Kim  *        Version 1
2334ff879b07SJung-uk Kim  *
2335ff879b07SJung-uk Kim  ******************************************************************************/
2336ff879b07SJung-uk Kim 
2337ff879b07SJung-uk Kim typedef struct acpi_table_sbst
2338ff879b07SJung-uk Kim {
2339ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2340ff879b07SJung-uk Kim     UINT32                  WarningLevel;
2341ff879b07SJung-uk Kim     UINT32                  LowLevel;
2342ff879b07SJung-uk Kim     UINT32                  CriticalLevel;
2343ff879b07SJung-uk Kim 
2344ff879b07SJung-uk Kim } ACPI_TABLE_SBST;
2345ff879b07SJung-uk Kim 
2346ff879b07SJung-uk Kim 
23475f9b24faSJung-uk Kim /*******************************************************************************
23485f9b24faSJung-uk Kim  *
23495f9b24faSJung-uk Kim  * SDEI - Software Delegated Exception Interface Descriptor Table
23505f9b24faSJung-uk Kim  *
23515f9b24faSJung-uk Kim  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
23525f9b24faSJung-uk Kim  * May 8th, 2017. Copyright 2017 ARM Ltd.
23535f9b24faSJung-uk Kim  *
23545f9b24faSJung-uk Kim  ******************************************************************************/
23555f9b24faSJung-uk Kim 
23565f9b24faSJung-uk Kim typedef struct acpi_table_sdei
23575f9b24faSJung-uk Kim {
23585f9b24faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
23595f9b24faSJung-uk Kim 
23605f9b24faSJung-uk Kim } ACPI_TABLE_SDEI;
23615f9b24faSJung-uk Kim 
23629c48c75eSJung-uk Kim 
23639c48c75eSJung-uk Kim /*******************************************************************************
23649c48c75eSJung-uk Kim  *
2365ff879b07SJung-uk Kim  * SDEV - Secure Devices Table (ACPI 6.2)
2366ff879b07SJung-uk Kim  *        Version 1
2367dcbce41eSJung-uk Kim  *
2368dcbce41eSJung-uk Kim  ******************************************************************************/
2369dcbce41eSJung-uk Kim 
2370ff879b07SJung-uk Kim typedef struct acpi_table_sdev
2371dcbce41eSJung-uk Kim {
2372dcbce41eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2373dcbce41eSJung-uk Kim 
2374ff879b07SJung-uk Kim } ACPI_TABLE_SDEV;
2375dcbce41eSJung-uk Kim 
2376dcbce41eSJung-uk Kim 
2377ff879b07SJung-uk Kim typedef struct acpi_sdev_header
2378d6dd1baeSJung-uk Kim {
2379ff879b07SJung-uk Kim     UINT8                   Type;
2380ff879b07SJung-uk Kim     UINT8                   Flags;
2381ff879b07SJung-uk Kim     UINT16                  Length;
2382d6dd1baeSJung-uk Kim 
2383ff879b07SJung-uk Kim } ACPI_SDEV_HEADER;
2384f8146b88SJung-uk Kim 
2385d6dd1baeSJung-uk Kim 
2386ff879b07SJung-uk Kim /* Values for subtable type above */
2387d6dd1baeSJung-uk Kim 
2388ff879b07SJung-uk Kim enum AcpiSdevType
2389d6dd1baeSJung-uk Kim {
2390ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_NAMESPACE_DEVICE     = 0,
2391ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
2392ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
2393d6dd1baeSJung-uk Kim };
2394d6dd1baeSJung-uk Kim 
2395ff879b07SJung-uk Kim /* Values for flags above */
2396d6dd1baeSJung-uk Kim 
2397ff879b07SJung-uk Kim #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
2398cfd1ed46SJung-uk Kim #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)
2399fe0f0bbbSJung-uk Kim 
2400fe0f0bbbSJung-uk Kim /*
2401ff879b07SJung-uk Kim  * SDEV subtables
2402fe0f0bbbSJung-uk Kim  */
2403fe0f0bbbSJung-uk Kim 
2404ff879b07SJung-uk Kim /* 0: Namespace Device Based Secure Device Structure */
2405fe0f0bbbSJung-uk Kim 
2406ff879b07SJung-uk Kim typedef struct acpi_sdev_namespace
2407fe0f0bbbSJung-uk Kim {
2408ff879b07SJung-uk Kim     ACPI_SDEV_HEADER        Header;
2409ff879b07SJung-uk Kim     UINT16                  DeviceIdOffset;
2410ff879b07SJung-uk Kim     UINT16                  DeviceIdLength;
2411ff879b07SJung-uk Kim     UINT16                  VendorDataOffset;
2412ff879b07SJung-uk Kim     UINT16                  VendorDataLength;
2413d6dd1baeSJung-uk Kim 
2414ff879b07SJung-uk Kim } ACPI_SDEV_NAMESPACE;
24155ef50723SJung-uk Kim 
2416cfd1ed46SJung-uk Kim typedef struct acpi_sdev_secure_component
2417cfd1ed46SJung-uk Kim {
2418cfd1ed46SJung-uk Kim     UINT16                  SecureComponentOffset;
2419cfd1ed46SJung-uk Kim     UINT16                  SecureComponentLength;
2420cfd1ed46SJung-uk Kim 
2421cfd1ed46SJung-uk Kim } ACPI_SDEV_SECURE_COMPONENT;
2422cfd1ed46SJung-uk Kim 
2423cfd1ed46SJung-uk Kim 
2424cfd1ed46SJung-uk Kim /*
2425cfd1ed46SJung-uk Kim  * SDEV sub-subtables ("Components") for above
2426cfd1ed46SJung-uk Kim  */
2427cfd1ed46SJung-uk Kim typedef struct acpi_sdev_component
2428cfd1ed46SJung-uk Kim {
2429cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
2430cfd1ed46SJung-uk Kim 
2431cfd1ed46SJung-uk Kim } ACPI_SDEV_COMPONENT;
2432cfd1ed46SJung-uk Kim 
2433cfd1ed46SJung-uk Kim 
2434cfd1ed46SJung-uk Kim /* Values for sub-subtable type above */
2435cfd1ed46SJung-uk Kim 
2436cfd1ed46SJung-uk Kim enum AcpiSacType
2437cfd1ed46SJung-uk Kim {
2438cfd1ed46SJung-uk Kim     ACPI_SDEV_TYPE_ID_COMPONENT     = 0,
2439cfd1ed46SJung-uk Kim     ACPI_SDEV_TYPE_MEM_COMPONENT    = 1
2440cfd1ed46SJung-uk Kim };
2441cfd1ed46SJung-uk Kim 
2442cfd1ed46SJung-uk Kim typedef struct acpi_sdev_id_component
2443cfd1ed46SJung-uk Kim {
2444cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
2445cfd1ed46SJung-uk Kim     UINT16                  HardwareIdOffset;
2446cfd1ed46SJung-uk Kim     UINT16                  HardwareIdLength;
2447cfd1ed46SJung-uk Kim     UINT16                  SubsystemIdOffset;
2448cfd1ed46SJung-uk Kim     UINT16                  SubsystemIdLength;
2449cfd1ed46SJung-uk Kim     UINT16                  HardwareRevision;
2450cfd1ed46SJung-uk Kim     UINT8                   HardwareRevPresent;
2451cfd1ed46SJung-uk Kim     UINT8                   ClassCodePresent;
2452cfd1ed46SJung-uk Kim     UINT8                   PciBaseClass;
2453cfd1ed46SJung-uk Kim     UINT8                   PciSubClass;
2454cfd1ed46SJung-uk Kim     UINT8                   PciProgrammingXface;
2455cfd1ed46SJung-uk Kim 
2456cfd1ed46SJung-uk Kim } ACPI_SDEV_ID_COMPONENT;
2457cfd1ed46SJung-uk Kim 
2458cfd1ed46SJung-uk Kim typedef struct acpi_sdev_mem_component
2459cfd1ed46SJung-uk Kim {
2460cfd1ed46SJung-uk Kim     ACPI_SDEV_HEADER        Header;
2461cfd1ed46SJung-uk Kim     UINT32                  Reserved;
2462cfd1ed46SJung-uk Kim     UINT64                  MemoryBaseAddress;
2463cfd1ed46SJung-uk Kim     UINT64                  MemoryLength;
2464cfd1ed46SJung-uk Kim 
2465cfd1ed46SJung-uk Kim } ACPI_SDEV_MEM_COMPONENT;
2466cfd1ed46SJung-uk Kim 
2467cfd1ed46SJung-uk Kim 
2468ff879b07SJung-uk Kim /* 1: PCIe Endpoint Device Based Device Structure */
2469ff879b07SJung-uk Kim 
2470ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie
24715ef50723SJung-uk Kim {
2472ff879b07SJung-uk Kim     ACPI_SDEV_HEADER        Header;
2473ff879b07SJung-uk Kim     UINT16                  Segment;
2474ff879b07SJung-uk Kim     UINT16                  StartBus;
2475ff879b07SJung-uk Kim     UINT16                  PathOffset;
2476ff879b07SJung-uk Kim     UINT16                  PathLength;
2477ff879b07SJung-uk Kim     UINT16                  VendorDataOffset;
2478ff879b07SJung-uk Kim     UINT16                  VendorDataLength;
2479ff879b07SJung-uk Kim 
2480ff879b07SJung-uk Kim } ACPI_SDEV_PCIE;
2481ff879b07SJung-uk Kim 
2482ff879b07SJung-uk Kim /* 1a: PCIe Endpoint path entry */
2483ff879b07SJung-uk Kim 
2484ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie_path
2485ff879b07SJung-uk Kim {
24865ef50723SJung-uk Kim     UINT8                   Device;
24875ef50723SJung-uk Kim     UINT8                   Function;
24885ef50723SJung-uk Kim 
2489ff879b07SJung-uk Kim } ACPI_SDEV_PCIE_PATH;
2490af051161SJung-uk Kim 
2491af051161SJung-uk Kim 
2492*1970d693SJung-uk Kim /*******************************************************************************
2493*1970d693SJung-uk Kim  *
2494*1970d693SJung-uk Kim  * SVKL - Storage Volume Key Location Table (ACPI 6.4)
2495*1970d693SJung-uk Kim  *        From: "Guest-Host-Communication Interface (GHCI) for Intel
2496*1970d693SJung-uk Kim  *        Trust Domain Extensions (Intel TDX)".
2497*1970d693SJung-uk Kim  *        Version 1
2498*1970d693SJung-uk Kim  *
2499*1970d693SJung-uk Kim  ******************************************************************************/
2500*1970d693SJung-uk Kim 
2501*1970d693SJung-uk Kim typedef struct acpi_table_svkl
2502*1970d693SJung-uk Kim {
2503*1970d693SJung-uk Kim     ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
2504*1970d693SJung-uk Kim     UINT32                  Count;
2505*1970d693SJung-uk Kim 
2506*1970d693SJung-uk Kim } ACPI_TABLE_SVKL;
2507*1970d693SJung-uk Kim 
2508*1970d693SJung-uk Kim typedef struct acpi_svkl_key
2509*1970d693SJung-uk Kim {
2510*1970d693SJung-uk Kim     UINT16                  Type;
2511*1970d693SJung-uk Kim     UINT16                  Format;
2512*1970d693SJung-uk Kim     UINT32                  Size;
2513*1970d693SJung-uk Kim     UINT64                  Address;
2514*1970d693SJung-uk Kim 
2515*1970d693SJung-uk Kim } ACPI_SVKL_KEY;
2516*1970d693SJung-uk Kim 
2517*1970d693SJung-uk Kim enum acpi_svkl_type
2518*1970d693SJung-uk Kim {
2519*1970d693SJung-uk Kim     ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
2520*1970d693SJung-uk Kim     ACPI_SVKL_TYPE_RESERVED     = 1 /* 1 and greater are reserved */
2521*1970d693SJung-uk Kim };
2522*1970d693SJung-uk Kim 
2523*1970d693SJung-uk Kim enum acpi_svkl_format
2524*1970d693SJung-uk Kim {
2525*1970d693SJung-uk Kim     ACPI_SVKL_FORMAT_RAW_BINARY = 0,
2526*1970d693SJung-uk Kim     ACPI_SVKL_FORMAT_RESERVED   = 1 /* 1 and greater are reserved */
2527*1970d693SJung-uk Kim };
2528*1970d693SJung-uk Kim 
2529*1970d693SJung-uk Kim 
2530d6dd1baeSJung-uk Kim /* Reset to default packing */
2531d6dd1baeSJung-uk Kim 
2532d6dd1baeSJung-uk Kim #pragma pack()
2533d6dd1baeSJung-uk Kim 
2534d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */
2535