xref: /freebsd/sys/contrib/dev/acpica/include/actbl2.h (revision ff879b07996ba2a08ddcc37091c2636f1be8354c)
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  *
1132ac4016SJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2018, 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  */
171a371a5fdSJung-uk Kim #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
172d6dd1baeSJung-uk Kim #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
173313a0c13SJung-uk Kim #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
174*ff879b07SJung-uk Kim #define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
175d6dd1baeSJung-uk Kim #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
176ca3cf4faSJung-uk Kim #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
177*ff879b07SJung-uk Kim #define ACPI_SIG_MPST           "MPST"      /* Memory Power State Table */
178*ff879b07SJung-uk Kim #define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table */
1797cf3e94aSJung-uk Kim #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
1809c48c75eSJung-uk Kim #define ACPI_SIG_MTMR           "MTMR"      /* MID Timer table */
181*ff879b07SJung-uk Kim #define ACPI_SIG_NFIT           "NFIT"      /* NVDIMM Firmware Interface Table */
182*ff879b07SJung-uk Kim #define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
183*ff879b07SJung-uk Kim #define ACPI_SIG_PDTT           "PDTT"      /* Platform Debug Trigger Table */
184*ff879b07SJung-uk Kim #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
185*ff879b07SJung-uk Kim #define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
186*ff879b07SJung-uk Kim #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
187*ff879b07SJung-uk Kim #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
1885f9b24faSJung-uk Kim #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated Exception Interface Table */
189*ff879b07SJung-uk Kim #define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
190d6dd1baeSJung-uk Kim 
191d6dd1baeSJung-uk Kim 
192d6dd1baeSJung-uk Kim /*
193d6dd1baeSJung-uk Kim  * All tables must be byte-packed to match the ACPI specification, since
194d6dd1baeSJung-uk Kim  * the tables are provided by the system BIOS.
195d6dd1baeSJung-uk Kim  */
196d6dd1baeSJung-uk Kim #pragma pack(1)
197d6dd1baeSJung-uk Kim 
198d6dd1baeSJung-uk Kim /*
1991df130f1SJung-uk Kim  * Note: C bitfields are not used for this reason:
2001df130f1SJung-uk Kim  *
2011df130f1SJung-uk Kim  * "Bitfields are great and easy to read, but unfortunately the C language
2021df130f1SJung-uk Kim  * does not specify the layout of bitfields in memory, which means they are
2031df130f1SJung-uk Kim  * essentially useless for dealing with packed data in on-disk formats or
2041df130f1SJung-uk Kim  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
2051df130f1SJung-uk Kim  * this decision was a design error in C. Ritchie could have picked an order
2061df130f1SJung-uk Kim  * and stuck with it." Norman Ramsey.
2071df130f1SJung-uk Kim  * See http://stackoverflow.com/a/1053662/41661
208d6dd1baeSJung-uk Kim  */
209d6dd1baeSJung-uk Kim 
210d6dd1baeSJung-uk Kim 
211d6dd1baeSJung-uk Kim /*******************************************************************************
212d6dd1baeSJung-uk Kim  *
213a371a5fdSJung-uk Kim  * IORT - IO Remapping Table
214a371a5fdSJung-uk Kim  *
215a371a5fdSJung-uk Kim  * Conforms to "IO Remapping Table System Software on ARM Platforms",
2165f9b24faSJung-uk Kim  * Document number: ARM DEN 0049C, May 2017
217a371a5fdSJung-uk Kim  *
218a371a5fdSJung-uk Kim  ******************************************************************************/
219a371a5fdSJung-uk Kim 
220a371a5fdSJung-uk Kim typedef struct acpi_table_iort
221a371a5fdSJung-uk Kim {
222a371a5fdSJung-uk Kim     ACPI_TABLE_HEADER       Header;
223a371a5fdSJung-uk Kim     UINT32                  NodeCount;
224a371a5fdSJung-uk Kim     UINT32                  NodeOffset;
225a371a5fdSJung-uk Kim     UINT32                  Reserved;
226a371a5fdSJung-uk Kim 
227a371a5fdSJung-uk Kim } ACPI_TABLE_IORT;
228a371a5fdSJung-uk Kim 
229a371a5fdSJung-uk Kim 
230a371a5fdSJung-uk Kim /*
231a371a5fdSJung-uk Kim  * IORT subtables
232a371a5fdSJung-uk Kim  */
233a371a5fdSJung-uk Kim typedef struct acpi_iort_node
234a371a5fdSJung-uk Kim {
235a371a5fdSJung-uk Kim     UINT8                   Type;
236a371a5fdSJung-uk Kim     UINT16                  Length;
237a371a5fdSJung-uk Kim     UINT8                   Revision;
238a371a5fdSJung-uk Kim     UINT32                  Reserved;
239a371a5fdSJung-uk Kim     UINT32                  MappingCount;
240a371a5fdSJung-uk Kim     UINT32                  MappingOffset;
241a371a5fdSJung-uk Kim     char                    NodeData[1];
242a371a5fdSJung-uk Kim 
243a371a5fdSJung-uk Kim } ACPI_IORT_NODE;
244a371a5fdSJung-uk Kim 
245a371a5fdSJung-uk Kim /* Values for subtable Type above */
246a371a5fdSJung-uk Kim 
247a371a5fdSJung-uk Kim enum AcpiIortNodeType
248a371a5fdSJung-uk Kim {
249a371a5fdSJung-uk Kim     ACPI_IORT_NODE_ITS_GROUP            = 0x00,
250a371a5fdSJung-uk Kim     ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
251a371a5fdSJung-uk Kim     ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
252f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU                 = 0x03,
253f8146b88SJung-uk Kim     ACPI_IORT_NODE_SMMU_V3              = 0x04
254a371a5fdSJung-uk Kim };
255a371a5fdSJung-uk Kim 
256a371a5fdSJung-uk Kim 
257a371a5fdSJung-uk Kim typedef struct acpi_iort_id_mapping
258a371a5fdSJung-uk Kim {
259a371a5fdSJung-uk Kim     UINT32                  InputBase;          /* Lowest value in input range */
260a371a5fdSJung-uk Kim     UINT32                  IdCount;            /* Number of IDs */
261a371a5fdSJung-uk Kim     UINT32                  OutputBase;         /* Lowest value in output range */
262a371a5fdSJung-uk Kim     UINT32                  OutputReference;    /* A reference to the output node */
263a371a5fdSJung-uk Kim     UINT32                  Flags;
264a371a5fdSJung-uk Kim 
265a371a5fdSJung-uk Kim } ACPI_IORT_ID_MAPPING;
266a371a5fdSJung-uk Kim 
267a371a5fdSJung-uk Kim /* Masks for Flags field above for IORT subtable */
268a371a5fdSJung-uk Kim 
269a371a5fdSJung-uk Kim #define ACPI_IORT_ID_SINGLE_MAPPING (1)
270a371a5fdSJung-uk Kim 
271a371a5fdSJung-uk Kim 
272a371a5fdSJung-uk Kim typedef struct acpi_iort_memory_access
273a371a5fdSJung-uk Kim {
274a371a5fdSJung-uk Kim     UINT32                  CacheCoherency;
275a371a5fdSJung-uk Kim     UINT8                   Hints;
276a371a5fdSJung-uk Kim     UINT16                  Reserved;
277a371a5fdSJung-uk Kim     UINT8                   MemoryFlags;
278a371a5fdSJung-uk Kim 
279a371a5fdSJung-uk Kim } ACPI_IORT_MEMORY_ACCESS;
280a371a5fdSJung-uk Kim 
281a371a5fdSJung-uk Kim /* Values for CacheCoherency field above */
282a371a5fdSJung-uk Kim 
283a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
284a371a5fdSJung-uk Kim #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
285a371a5fdSJung-uk Kim 
286a371a5fdSJung-uk Kim /* Masks for Hints field above */
287a371a5fdSJung-uk Kim 
288a371a5fdSJung-uk Kim #define ACPI_IORT_HT_TRANSIENT          (1)
289a371a5fdSJung-uk Kim #define ACPI_IORT_HT_WRITE              (1<<1)
290a371a5fdSJung-uk Kim #define ACPI_IORT_HT_READ               (1<<2)
291a371a5fdSJung-uk Kim #define ACPI_IORT_HT_OVERRIDE           (1<<3)
292a371a5fdSJung-uk Kim 
293a371a5fdSJung-uk Kim /* Masks for MemoryFlags field above */
294a371a5fdSJung-uk Kim 
295a371a5fdSJung-uk Kim #define ACPI_IORT_MF_COHERENCY          (1)
296a371a5fdSJung-uk Kim #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
297a371a5fdSJung-uk Kim 
298a371a5fdSJung-uk Kim 
299a371a5fdSJung-uk Kim /*
300a371a5fdSJung-uk Kim  * IORT node specific subtables
301a371a5fdSJung-uk Kim  */
302a371a5fdSJung-uk Kim typedef struct acpi_iort_its_group
303a371a5fdSJung-uk Kim {
304a371a5fdSJung-uk Kim     UINT32                  ItsCount;
305a371a5fdSJung-uk Kim     UINT32                  Identifiers[1];         /* GIC ITS identifier arrary */
306a371a5fdSJung-uk Kim 
307a371a5fdSJung-uk Kim } ACPI_IORT_ITS_GROUP;
308a371a5fdSJung-uk Kim 
309a371a5fdSJung-uk Kim 
310a371a5fdSJung-uk Kim typedef struct acpi_iort_named_component
311a371a5fdSJung-uk Kim {
312a371a5fdSJung-uk Kim     UINT32                  NodeFlags;
313a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
314a371a5fdSJung-uk Kim     UINT8                   MemoryAddressLimit;     /* Memory address size limit */
315a371a5fdSJung-uk Kim     char                    DeviceName[1];          /* Path of namespace object */
316a371a5fdSJung-uk Kim 
317a371a5fdSJung-uk Kim } ACPI_IORT_NAMED_COMPONENT;
318a371a5fdSJung-uk Kim 
319a371a5fdSJung-uk Kim 
320a371a5fdSJung-uk Kim typedef struct acpi_iort_root_complex
321a371a5fdSJung-uk Kim {
322a371a5fdSJung-uk Kim     UINT64                  MemoryProperties;       /* Memory access properties */
323a371a5fdSJung-uk Kim     UINT32                  AtsAttribute;
324a371a5fdSJung-uk Kim     UINT32                  PciSegmentNumber;
325a371a5fdSJung-uk Kim 
326a371a5fdSJung-uk Kim } ACPI_IORT_ROOT_COMPLEX;
327a371a5fdSJung-uk Kim 
328a371a5fdSJung-uk Kim /* Values for AtsAttribute field above */
329a371a5fdSJung-uk Kim 
330a371a5fdSJung-uk Kim #define ACPI_IORT_ATS_SUPPORTED         0x00000001  /* The root complex supports ATS */
331a371a5fdSJung-uk Kim #define ACPI_IORT_ATS_UNSUPPORTED       0x00000000  /* The root complex doesn't support ATS */
332a371a5fdSJung-uk Kim 
333a371a5fdSJung-uk Kim 
334a371a5fdSJung-uk Kim typedef struct acpi_iort_smmu
335a371a5fdSJung-uk Kim {
336a371a5fdSJung-uk Kim     UINT64                  BaseAddress;            /* SMMU base address */
337a371a5fdSJung-uk Kim     UINT64                  Span;                   /* Length of memory range */
338a371a5fdSJung-uk Kim     UINT32                  Model;
339a371a5fdSJung-uk Kim     UINT32                  Flags;
340a371a5fdSJung-uk Kim     UINT32                  GlobalInterruptOffset;
341a371a5fdSJung-uk Kim     UINT32                  ContextInterruptCount;
342a371a5fdSJung-uk Kim     UINT32                  ContextInterruptOffset;
343a371a5fdSJung-uk Kim     UINT32                  PmuInterruptCount;
344a371a5fdSJung-uk Kim     UINT32                  PmuInterruptOffset;
345a371a5fdSJung-uk Kim     UINT64                  Interrupts[1];          /* Interrupt array */
346a371a5fdSJung-uk Kim 
347a371a5fdSJung-uk Kim } ACPI_IORT_SMMU;
348a371a5fdSJung-uk Kim 
349a371a5fdSJung-uk Kim /* Values for Model field above */
350a371a5fdSJung-uk Kim 
351a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
352a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
353a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
354a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
3555f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004  /* ARM Corelink MMU-401 */
3565f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005  /* Cavium ThunderX SMMUv2 */
357a371a5fdSJung-uk Kim 
358a371a5fdSJung-uk Kim /* Masks for Flags field above */
359a371a5fdSJung-uk Kim 
360a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
361a371a5fdSJung-uk Kim #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
362a371a5fdSJung-uk Kim 
3630d84335fSJung-uk Kim /* Global interrupt format */
3640d84335fSJung-uk Kim 
3650d84335fSJung-uk Kim typedef struct acpi_iort_smmu_gsi
3660d84335fSJung-uk Kim {
3670d84335fSJung-uk Kim     UINT32                  NSgIrpt;
3680d84335fSJung-uk Kim     UINT32                  NSgIrptFlags;
3690d84335fSJung-uk Kim     UINT32                  NSgCfgIrpt;
3700d84335fSJung-uk Kim     UINT32                  NSgCfgIrptFlags;
3712f6a1a81SJung-uk Kim 
3720d84335fSJung-uk Kim } ACPI_IORT_SMMU_GSI;
3730d84335fSJung-uk Kim 
374a371a5fdSJung-uk Kim 
375f8146b88SJung-uk Kim typedef struct acpi_iort_smmu_v3
376f8146b88SJung-uk Kim {
377f8146b88SJung-uk Kim     UINT64                  BaseAddress;            /* SMMUv3 base address */
378f8146b88SJung-uk Kim     UINT32                  Flags;
379f8146b88SJung-uk Kim     UINT32                  Reserved;
380f8146b88SJung-uk Kim     UINT64                  VatosAddress;
3815f9b24faSJung-uk Kim     UINT32                  Model;
382f8146b88SJung-uk Kim     UINT32                  EventGsiv;
383f8146b88SJung-uk Kim     UINT32                  PriGsiv;
384f8146b88SJung-uk Kim     UINT32                  GerrGsiv;
385f8146b88SJung-uk Kim     UINT32                  SyncGsiv;
3865f9b24faSJung-uk Kim     UINT8                   Pxm;
3875f9b24faSJung-uk Kim     UINT8                   Reserved1;
3885f9b24faSJung-uk Kim     UINT16                  Reserved2;
389b7b7e711SJung-uk Kim     UINT32                  IdMappingIndex;
390f8146b88SJung-uk Kim 
391f8146b88SJung-uk Kim } ACPI_IORT_SMMU_V3;
392f8146b88SJung-uk Kim 
3935f9b24faSJung-uk Kim /* Values for Model field above */
3945f9b24faSJung-uk Kim 
3955f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000  /* Generic SMMUv3 */
3965f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001  /* HiSilicon Hi161x SMMUv3 */
3975f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002  /* Cavium CN99xx SMMUv3 */
3985f9b24faSJung-uk Kim 
399f8146b88SJung-uk Kim /* Masks for Flags field above */
400f8146b88SJung-uk Kim 
401f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
402f8146b88SJung-uk Kim #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
4035f9b24faSJung-uk Kim #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
404f8146b88SJung-uk Kim 
405f8146b88SJung-uk Kim 
406a371a5fdSJung-uk Kim /*******************************************************************************
407a371a5fdSJung-uk Kim  *
408d6dd1baeSJung-uk Kim  * IVRS - I/O Virtualization Reporting Structure
409d6dd1baeSJung-uk Kim  *        Version 1
410d6dd1baeSJung-uk Kim  *
411d6dd1baeSJung-uk Kim  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
412d6dd1baeSJung-uk Kim  * Revision 1.26, February 2009.
413d6dd1baeSJung-uk Kim  *
414d6dd1baeSJung-uk Kim  ******************************************************************************/
415d6dd1baeSJung-uk Kim 
416d6dd1baeSJung-uk Kim typedef struct acpi_table_ivrs
417d6dd1baeSJung-uk Kim {
418d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
419d6dd1baeSJung-uk Kim     UINT32                  Info;               /* Common virtualization info */
420d6dd1baeSJung-uk Kim     UINT64                  Reserved;
421d6dd1baeSJung-uk Kim 
422d6dd1baeSJung-uk Kim } ACPI_TABLE_IVRS;
423d6dd1baeSJung-uk Kim 
424d6dd1baeSJung-uk Kim /* Values for Info field above */
425d6dd1baeSJung-uk Kim 
426d6dd1baeSJung-uk Kim #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
427d6dd1baeSJung-uk Kim #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
428d6dd1baeSJung-uk Kim #define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
429d6dd1baeSJung-uk Kim 
430d6dd1baeSJung-uk Kim 
431d6dd1baeSJung-uk Kim /* IVRS subtable header */
432d6dd1baeSJung-uk Kim 
433d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_header
434d6dd1baeSJung-uk Kim {
435d6dd1baeSJung-uk Kim     UINT8                   Type;               /* Subtable type */
436d6dd1baeSJung-uk Kim     UINT8                   Flags;
437d6dd1baeSJung-uk Kim     UINT16                  Length;             /* Subtable length */
438d6dd1baeSJung-uk Kim     UINT16                  DeviceId;           /* ID of IOMMU */
439d6dd1baeSJung-uk Kim 
440d6dd1baeSJung-uk Kim } ACPI_IVRS_HEADER;
441d6dd1baeSJung-uk Kim 
442d6dd1baeSJung-uk Kim /* Values for subtable Type above */
443d6dd1baeSJung-uk Kim 
444d6dd1baeSJung-uk Kim enum AcpiIvrsType
445d6dd1baeSJung-uk Kim {
446d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_HARDWARE         = 0x10,
447d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
448d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
449d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_MEMORY3          = 0x22
450d6dd1baeSJung-uk Kim };
451d6dd1baeSJung-uk Kim 
452d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVHD subtable */
453d6dd1baeSJung-uk Kim 
454d6dd1baeSJung-uk Kim #define ACPI_IVHD_TT_ENABLE         (1)
455d6dd1baeSJung-uk Kim #define ACPI_IVHD_PASS_PW           (1<<1)
456d6dd1baeSJung-uk Kim #define ACPI_IVHD_RES_PASS_PW       (1<<2)
457d6dd1baeSJung-uk Kim #define ACPI_IVHD_ISOC              (1<<3)
458d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOTLB             (1<<4)
459d6dd1baeSJung-uk Kim 
460d6dd1baeSJung-uk Kim /* Masks for Flags field above for IVMD subtable */
461d6dd1baeSJung-uk Kim 
462d6dd1baeSJung-uk Kim #define ACPI_IVMD_UNITY             (1)
463d6dd1baeSJung-uk Kim #define ACPI_IVMD_READ              (1<<1)
464d6dd1baeSJung-uk Kim #define ACPI_IVMD_WRITE             (1<<2)
465d6dd1baeSJung-uk Kim #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
466d6dd1baeSJung-uk Kim 
467d6dd1baeSJung-uk Kim 
468d6dd1baeSJung-uk Kim /*
469d6dd1baeSJung-uk Kim  * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER
470d6dd1baeSJung-uk Kim  */
471d6dd1baeSJung-uk Kim 
472d6dd1baeSJung-uk Kim /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
473d6dd1baeSJung-uk Kim 
474d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_hardware
475d6dd1baeSJung-uk Kim {
476d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
477d6dd1baeSJung-uk Kim     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
478d6dd1baeSJung-uk Kim     UINT64                  BaseAddress;        /* IOMMU control registers */
479d6dd1baeSJung-uk Kim     UINT16                  PciSegmentGroup;
480d6dd1baeSJung-uk Kim     UINT16                  Info;               /* MSI number and unit ID */
481d6dd1baeSJung-uk Kim     UINT32                  Reserved;
482d6dd1baeSJung-uk Kim 
483d6dd1baeSJung-uk Kim } ACPI_IVRS_HARDWARE;
484d6dd1baeSJung-uk Kim 
485d6dd1baeSJung-uk Kim /* Masks for Info field above */
486d6dd1baeSJung-uk Kim 
487d6dd1baeSJung-uk Kim #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F      /* 5 bits, MSI message number */
488d6dd1baeSJung-uk Kim #define ACPI_IVHD_UNIT_ID_MASK      0x1F00      /* 5 bits, UnitID */
489d6dd1baeSJung-uk Kim 
490d6dd1baeSJung-uk Kim 
491d6dd1baeSJung-uk Kim /*
492d6dd1baeSJung-uk Kim  * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.
493d6dd1baeSJung-uk Kim  * Upper two bits of the Type field are the (encoded) length of the structure.
494d6dd1baeSJung-uk Kim  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
495d6dd1baeSJung-uk Kim  * are reserved for future use but not defined.
496d6dd1baeSJung-uk Kim  */
497d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_de_header
498d6dd1baeSJung-uk Kim {
499d6dd1baeSJung-uk Kim     UINT8                   Type;
500d6dd1baeSJung-uk Kim     UINT16                  Id;
501d6dd1baeSJung-uk Kim     UINT8                   DataSetting;
502d6dd1baeSJung-uk Kim 
503d6dd1baeSJung-uk Kim } ACPI_IVRS_DE_HEADER;
504d6dd1baeSJung-uk Kim 
505d6dd1baeSJung-uk Kim /* Length of device entry is in the top two bits of Type field above */
506d6dd1baeSJung-uk Kim 
507d6dd1baeSJung-uk Kim #define ACPI_IVHD_ENTRY_LENGTH      0xC0
508d6dd1baeSJung-uk Kim 
509d6dd1baeSJung-uk Kim /* Values for device entry Type field above */
510d6dd1baeSJung-uk Kim 
511d6dd1baeSJung-uk Kim enum AcpiIvrsDeviceEntryType
512d6dd1baeSJung-uk Kim {
513d6dd1baeSJung-uk Kim     /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */
514d6dd1baeSJung-uk Kim 
515d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD4             = 0,
516d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALL              = 1,
517d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SELECT           = 2,
518d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_START            = 3,
519d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_END              = 4,
520d6dd1baeSJung-uk Kim 
521d6dd1baeSJung-uk Kim     /* 8-byte device entries */
522d6dd1baeSJung-uk Kim 
523d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_PAD8             = 64,
524d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_NOT_USED         = 65,
525d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_SELECT     = 66, /* Uses ACPI_IVRS_DEVICE8A */
526d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_ALIAS_START      = 67, /* Uses ACPI_IVRS_DEVICE8A */
527d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_SELECT       = 70, /* Uses ACPI_IVRS_DEVICE8B */
528d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_EXT_START        = 71, /* Uses ACPI_IVRS_DEVICE8B */
529d6dd1baeSJung-uk Kim     ACPI_IVRS_TYPE_SPECIAL          = 72  /* Uses ACPI_IVRS_DEVICE8C */
530d6dd1baeSJung-uk Kim };
531d6dd1baeSJung-uk Kim 
532d6dd1baeSJung-uk Kim /* Values for Data field above */
533d6dd1baeSJung-uk Kim 
534d6dd1baeSJung-uk Kim #define ACPI_IVHD_INIT_PASS         (1)
535d6dd1baeSJung-uk Kim #define ACPI_IVHD_EINT_PASS         (1<<1)
536d6dd1baeSJung-uk Kim #define ACPI_IVHD_NMI_PASS          (1<<2)
537d6dd1baeSJung-uk Kim #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
538d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT0_PASS        (1<<6)
539d6dd1baeSJung-uk Kim #define ACPI_IVHD_LINT1_PASS        (1<<7)
540d6dd1baeSJung-uk Kim 
541d6dd1baeSJung-uk Kim 
542d6dd1baeSJung-uk Kim /* Types 0-4: 4-byte device entry */
543d6dd1baeSJung-uk Kim 
544d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device4
545d6dd1baeSJung-uk Kim {
546d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
547d6dd1baeSJung-uk Kim 
548d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE4;
549d6dd1baeSJung-uk Kim 
550d6dd1baeSJung-uk Kim /* Types 66-67: 8-byte device entry */
551d6dd1baeSJung-uk Kim 
552d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8a
553d6dd1baeSJung-uk Kim {
554d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
555d6dd1baeSJung-uk Kim     UINT8                   Reserved1;
556d6dd1baeSJung-uk Kim     UINT16                  UsedId;
557d6dd1baeSJung-uk Kim     UINT8                   Reserved2;
558d6dd1baeSJung-uk Kim 
559d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8A;
560d6dd1baeSJung-uk Kim 
561d6dd1baeSJung-uk Kim /* Types 70-71: 8-byte device entry */
562d6dd1baeSJung-uk Kim 
563d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8b
564d6dd1baeSJung-uk Kim {
565d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
566d6dd1baeSJung-uk Kim     UINT32                  ExtendedData;
567d6dd1baeSJung-uk Kim 
568d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8B;
569d6dd1baeSJung-uk Kim 
570d6dd1baeSJung-uk Kim /* Values for ExtendedData above */
571d6dd1baeSJung-uk Kim 
572d6dd1baeSJung-uk Kim #define ACPI_IVHD_ATS_DISABLED      (1<<31)
573d6dd1baeSJung-uk Kim 
574d6dd1baeSJung-uk Kim /* Type 72: 8-byte device entry */
575d6dd1baeSJung-uk Kim 
576d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_device8c
577d6dd1baeSJung-uk Kim {
578d6dd1baeSJung-uk Kim     ACPI_IVRS_DE_HEADER     Header;
579d6dd1baeSJung-uk Kim     UINT8                   Handle;
580d6dd1baeSJung-uk Kim     UINT16                  UsedId;
581d6dd1baeSJung-uk Kim     UINT8                   Variety;
582d6dd1baeSJung-uk Kim 
583d6dd1baeSJung-uk Kim } ACPI_IVRS_DEVICE8C;
584d6dd1baeSJung-uk Kim 
585d6dd1baeSJung-uk Kim /* Values for Variety field above */
586d6dd1baeSJung-uk Kim 
587d6dd1baeSJung-uk Kim #define ACPI_IVHD_IOAPIC            1
588d6dd1baeSJung-uk Kim #define ACPI_IVHD_HPET              2
589d6dd1baeSJung-uk Kim 
590d6dd1baeSJung-uk Kim 
591d6dd1baeSJung-uk Kim /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
592d6dd1baeSJung-uk Kim 
593d6dd1baeSJung-uk Kim typedef struct acpi_ivrs_memory
594d6dd1baeSJung-uk Kim {
595d6dd1baeSJung-uk Kim     ACPI_IVRS_HEADER        Header;
596d6dd1baeSJung-uk Kim     UINT16                  AuxData;
597d6dd1baeSJung-uk Kim     UINT64                  Reserved;
598d6dd1baeSJung-uk Kim     UINT64                  StartAddress;
599d6dd1baeSJung-uk Kim     UINT64                  MemoryLength;
600d6dd1baeSJung-uk Kim 
601d6dd1baeSJung-uk Kim } ACPI_IVRS_MEMORY;
602d6dd1baeSJung-uk Kim 
603d6dd1baeSJung-uk Kim 
604d6dd1baeSJung-uk Kim /*******************************************************************************
605d6dd1baeSJung-uk Kim  *
606313a0c13SJung-uk Kim  * LPIT - Low Power Idle Table
607313a0c13SJung-uk Kim  *
608a371a5fdSJung-uk Kim  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
609313a0c13SJung-uk Kim  *
610313a0c13SJung-uk Kim  ******************************************************************************/
611313a0c13SJung-uk Kim 
612313a0c13SJung-uk Kim typedef struct acpi_table_lpit
613313a0c13SJung-uk Kim {
614313a0c13SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
615313a0c13SJung-uk Kim 
616313a0c13SJung-uk Kim } ACPI_TABLE_LPIT;
617313a0c13SJung-uk Kim 
618313a0c13SJung-uk Kim 
619313a0c13SJung-uk Kim /* LPIT subtable header */
620313a0c13SJung-uk Kim 
621313a0c13SJung-uk Kim typedef struct acpi_lpit_header
622313a0c13SJung-uk Kim {
623313a0c13SJung-uk Kim     UINT32                  Type;               /* Subtable type */
624313a0c13SJung-uk Kim     UINT32                  Length;             /* Subtable length */
625313a0c13SJung-uk Kim     UINT16                  UniqueId;
626313a0c13SJung-uk Kim     UINT16                  Reserved;
627313a0c13SJung-uk Kim     UINT32                  Flags;
628313a0c13SJung-uk Kim 
629313a0c13SJung-uk Kim } ACPI_LPIT_HEADER;
630313a0c13SJung-uk Kim 
631313a0c13SJung-uk Kim /* Values for subtable Type above */
632313a0c13SJung-uk Kim 
633313a0c13SJung-uk Kim enum AcpiLpitType
634313a0c13SJung-uk Kim {
635313a0c13SJung-uk Kim     ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
636a371a5fdSJung-uk Kim     ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
637313a0c13SJung-uk Kim };
638313a0c13SJung-uk Kim 
639313a0c13SJung-uk Kim /* Masks for Flags field above  */
640313a0c13SJung-uk Kim 
641313a0c13SJung-uk Kim #define ACPI_LPIT_STATE_DISABLED    (1)
642313a0c13SJung-uk Kim #define ACPI_LPIT_NO_COUNTER        (1<<1)
643313a0c13SJung-uk Kim 
644313a0c13SJung-uk Kim /*
645313a0c13SJung-uk Kim  * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
646313a0c13SJung-uk Kim  */
647313a0c13SJung-uk Kim 
648313a0c13SJung-uk Kim /* 0x00: Native C-state instruction based LPI structure */
649313a0c13SJung-uk Kim 
650313a0c13SJung-uk Kim typedef struct acpi_lpit_native
651313a0c13SJung-uk Kim {
652313a0c13SJung-uk Kim     ACPI_LPIT_HEADER        Header;
653313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    EntryTrigger;
654313a0c13SJung-uk Kim     UINT32                  Residency;
655313a0c13SJung-uk Kim     UINT32                  Latency;
656313a0c13SJung-uk Kim     ACPI_GENERIC_ADDRESS    ResidencyCounter;
657313a0c13SJung-uk Kim     UINT64                  CounterFrequency;
658313a0c13SJung-uk Kim 
659313a0c13SJung-uk Kim } ACPI_LPIT_NATIVE;
660313a0c13SJung-uk Kim 
661313a0c13SJung-uk Kim 
662313a0c13SJung-uk Kim /*******************************************************************************
663313a0c13SJung-uk Kim  *
664*ff879b07SJung-uk Kim  * MADT - Multiple APIC Description Table
665*ff879b07SJung-uk Kim  *        Version 3
666*ff879b07SJung-uk Kim  *
667*ff879b07SJung-uk Kim  ******************************************************************************/
668*ff879b07SJung-uk Kim 
669*ff879b07SJung-uk Kim typedef struct acpi_table_madt
670*ff879b07SJung-uk Kim {
671*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
672*ff879b07SJung-uk Kim     UINT32                  Address;            /* Physical address of local APIC */
673*ff879b07SJung-uk Kim     UINT32                  Flags;
674*ff879b07SJung-uk Kim 
675*ff879b07SJung-uk Kim } ACPI_TABLE_MADT;
676*ff879b07SJung-uk Kim 
677*ff879b07SJung-uk Kim /* Masks for Flags field above */
678*ff879b07SJung-uk Kim 
679*ff879b07SJung-uk Kim #define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
680*ff879b07SJung-uk Kim 
681*ff879b07SJung-uk Kim /* Values for PCATCompat flag */
682*ff879b07SJung-uk Kim 
683*ff879b07SJung-uk Kim #define ACPI_MADT_DUAL_PIC          1
684*ff879b07SJung-uk Kim #define ACPI_MADT_MULTIPLE_APIC     0
685*ff879b07SJung-uk Kim 
686*ff879b07SJung-uk Kim 
687*ff879b07SJung-uk Kim /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
688*ff879b07SJung-uk Kim 
689*ff879b07SJung-uk Kim enum AcpiMadtType
690*ff879b07SJung-uk Kim {
691*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC               = 0,
692*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_IO_APIC                  = 1,
693*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
694*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_NMI_SOURCE               = 3,
695*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
696*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
697*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_IO_SAPIC                 = 6,
698*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
699*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
700*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
701*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
702*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
703*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR      = 12,
704*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_MSI_FRAME        = 13,
705*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR    = 14,
706*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_GENERIC_TRANSLATOR       = 15,
707*ff879b07SJung-uk Kim     ACPI_MADT_TYPE_RESERVED                 = 16    /* 16 and greater are reserved */
708*ff879b07SJung-uk Kim };
709*ff879b07SJung-uk Kim 
710*ff879b07SJung-uk Kim 
711*ff879b07SJung-uk Kim /*
712*ff879b07SJung-uk Kim  * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
713*ff879b07SJung-uk Kim  */
714*ff879b07SJung-uk Kim 
715*ff879b07SJung-uk Kim /* 0: Processor Local APIC */
716*ff879b07SJung-uk Kim 
717*ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic
718*ff879b07SJung-uk Kim {
719*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
720*ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
721*ff879b07SJung-uk Kim     UINT8                   Id;                 /* Processor's local APIC id */
722*ff879b07SJung-uk Kim     UINT32                  LapicFlags;
723*ff879b07SJung-uk Kim 
724*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC;
725*ff879b07SJung-uk Kim 
726*ff879b07SJung-uk Kim 
727*ff879b07SJung-uk Kim /* 1: IO APIC */
728*ff879b07SJung-uk Kim 
729*ff879b07SJung-uk Kim typedef struct acpi_madt_io_apic
730*ff879b07SJung-uk Kim {
731*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
732*ff879b07SJung-uk Kim     UINT8                   Id;                 /* I/O APIC ID */
733*ff879b07SJung-uk Kim     UINT8                   Reserved;           /* Reserved - must be zero */
734*ff879b07SJung-uk Kim     UINT32                  Address;            /* APIC physical address */
735*ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
736*ff879b07SJung-uk Kim 
737*ff879b07SJung-uk Kim } ACPI_MADT_IO_APIC;
738*ff879b07SJung-uk Kim 
739*ff879b07SJung-uk Kim 
740*ff879b07SJung-uk Kim /* 2: Interrupt Override */
741*ff879b07SJung-uk Kim 
742*ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_override
743*ff879b07SJung-uk Kim {
744*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
745*ff879b07SJung-uk Kim     UINT8                   Bus;                /* 0 - ISA */
746*ff879b07SJung-uk Kim     UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
747*ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
748*ff879b07SJung-uk Kim     UINT16                  IntiFlags;
749*ff879b07SJung-uk Kim 
750*ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_OVERRIDE;
751*ff879b07SJung-uk Kim 
752*ff879b07SJung-uk Kim 
753*ff879b07SJung-uk Kim /* 3: NMI Source */
754*ff879b07SJung-uk Kim 
755*ff879b07SJung-uk Kim typedef struct acpi_madt_nmi_source
756*ff879b07SJung-uk Kim {
757*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
758*ff879b07SJung-uk Kim     UINT16                  IntiFlags;
759*ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
760*ff879b07SJung-uk Kim 
761*ff879b07SJung-uk Kim } ACPI_MADT_NMI_SOURCE;
762*ff879b07SJung-uk Kim 
763*ff879b07SJung-uk Kim 
764*ff879b07SJung-uk Kim /* 4: Local APIC NMI */
765*ff879b07SJung-uk Kim 
766*ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_nmi
767*ff879b07SJung-uk Kim {
768*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
769*ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
770*ff879b07SJung-uk Kim     UINT16                  IntiFlags;
771*ff879b07SJung-uk Kim     UINT8                   Lint;               /* LINTn to which NMI is connected */
772*ff879b07SJung-uk Kim 
773*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_NMI;
774*ff879b07SJung-uk Kim 
775*ff879b07SJung-uk Kim 
776*ff879b07SJung-uk Kim /* 5: Address Override */
777*ff879b07SJung-uk Kim 
778*ff879b07SJung-uk Kim typedef struct acpi_madt_local_apic_override
779*ff879b07SJung-uk Kim {
780*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
781*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
782*ff879b07SJung-uk Kim     UINT64                  Address;            /* APIC physical address */
783*ff879b07SJung-uk Kim 
784*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_APIC_OVERRIDE;
785*ff879b07SJung-uk Kim 
786*ff879b07SJung-uk Kim 
787*ff879b07SJung-uk Kim /* 6: I/O Sapic */
788*ff879b07SJung-uk Kim 
789*ff879b07SJung-uk Kim typedef struct acpi_madt_io_sapic
790*ff879b07SJung-uk Kim {
791*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
792*ff879b07SJung-uk Kim     UINT8                   Id;                 /* I/O SAPIC ID */
793*ff879b07SJung-uk Kim     UINT8                   Reserved;           /* Reserved, must be zero */
794*ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
795*ff879b07SJung-uk Kim     UINT64                  Address;            /* SAPIC physical address */
796*ff879b07SJung-uk Kim 
797*ff879b07SJung-uk Kim } ACPI_MADT_IO_SAPIC;
798*ff879b07SJung-uk Kim 
799*ff879b07SJung-uk Kim 
800*ff879b07SJung-uk Kim /* 7: Local Sapic */
801*ff879b07SJung-uk Kim 
802*ff879b07SJung-uk Kim typedef struct acpi_madt_local_sapic
803*ff879b07SJung-uk Kim {
804*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
805*ff879b07SJung-uk Kim     UINT8                   ProcessorId;        /* ACPI processor id */
806*ff879b07SJung-uk Kim     UINT8                   Id;                 /* SAPIC ID */
807*ff879b07SJung-uk Kim     UINT8                   Eid;                /* SAPIC EID */
808*ff879b07SJung-uk Kim     UINT8                   Reserved[3];        /* Reserved, must be zero */
809*ff879b07SJung-uk Kim     UINT32                  LapicFlags;
810*ff879b07SJung-uk Kim     UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
811*ff879b07SJung-uk Kim     char                    UidString[1];       /* String UID  - ACPI 3.0 */
812*ff879b07SJung-uk Kim 
813*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_SAPIC;
814*ff879b07SJung-uk Kim 
815*ff879b07SJung-uk Kim 
816*ff879b07SJung-uk Kim /* 8: Platform Interrupt Source */
817*ff879b07SJung-uk Kim 
818*ff879b07SJung-uk Kim typedef struct acpi_madt_interrupt_source
819*ff879b07SJung-uk Kim {
820*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
821*ff879b07SJung-uk Kim     UINT16                  IntiFlags;
822*ff879b07SJung-uk Kim     UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
823*ff879b07SJung-uk Kim     UINT8                   Id;                 /* Processor ID */
824*ff879b07SJung-uk Kim     UINT8                   Eid;                /* Processor EID */
825*ff879b07SJung-uk Kim     UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
826*ff879b07SJung-uk Kim     UINT32                  GlobalIrq;          /* Global system interrupt */
827*ff879b07SJung-uk Kim     UINT32                  Flags;              /* Interrupt Source Flags */
828*ff879b07SJung-uk Kim 
829*ff879b07SJung-uk Kim } ACPI_MADT_INTERRUPT_SOURCE;
830*ff879b07SJung-uk Kim 
831*ff879b07SJung-uk Kim /* Masks for Flags field above */
832*ff879b07SJung-uk Kim 
833*ff879b07SJung-uk Kim #define ACPI_MADT_CPEI_OVERRIDE     (1)
834*ff879b07SJung-uk Kim 
835*ff879b07SJung-uk Kim 
836*ff879b07SJung-uk Kim /* 9: Processor Local X2APIC (ACPI 4.0) */
837*ff879b07SJung-uk Kim 
838*ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic
839*ff879b07SJung-uk Kim {
840*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
841*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
842*ff879b07SJung-uk Kim     UINT32                  LocalApicId;        /* Processor x2APIC ID  */
843*ff879b07SJung-uk Kim     UINT32                  LapicFlags;
844*ff879b07SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
845*ff879b07SJung-uk Kim 
846*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC;
847*ff879b07SJung-uk Kim 
848*ff879b07SJung-uk Kim 
849*ff879b07SJung-uk Kim /* 10: Local X2APIC NMI (ACPI 4.0) */
850*ff879b07SJung-uk Kim 
851*ff879b07SJung-uk Kim typedef struct acpi_madt_local_x2apic_nmi
852*ff879b07SJung-uk Kim {
853*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
854*ff879b07SJung-uk Kim     UINT16                  IntiFlags;
855*ff879b07SJung-uk Kim     UINT32                  Uid;                /* ACPI processor UID */
856*ff879b07SJung-uk Kim     UINT8                   Lint;               /* LINTn to which NMI is connected */
857*ff879b07SJung-uk Kim     UINT8                   Reserved[3];        /* Reserved - must be zero */
858*ff879b07SJung-uk Kim 
859*ff879b07SJung-uk Kim } ACPI_MADT_LOCAL_X2APIC_NMI;
860*ff879b07SJung-uk Kim 
861*ff879b07SJung-uk Kim 
862*ff879b07SJung-uk Kim /* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */
863*ff879b07SJung-uk Kim 
864*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_interrupt
865*ff879b07SJung-uk Kim {
866*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
867*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
868*ff879b07SJung-uk Kim     UINT32                  CpuInterfaceNumber;
869*ff879b07SJung-uk Kim     UINT32                  Uid;
870*ff879b07SJung-uk Kim     UINT32                  Flags;
871*ff879b07SJung-uk Kim     UINT32                  ParkingVersion;
872*ff879b07SJung-uk Kim     UINT32                  PerformanceInterrupt;
873*ff879b07SJung-uk Kim     UINT64                  ParkedAddress;
874*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
875*ff879b07SJung-uk Kim     UINT64                  GicvBaseAddress;
876*ff879b07SJung-uk Kim     UINT64                  GichBaseAddress;
877*ff879b07SJung-uk Kim     UINT32                  VgicInterrupt;
878*ff879b07SJung-uk Kim     UINT64                  GicrBaseAddress;
879*ff879b07SJung-uk Kim     UINT64                  ArmMpidr;
880*ff879b07SJung-uk Kim     UINT8                   EfficiencyClass;
881*ff879b07SJung-uk Kim     UINT8                   Reserved2[3];
882*ff879b07SJung-uk Kim 
883*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_INTERRUPT;
884*ff879b07SJung-uk Kim 
885*ff879b07SJung-uk Kim /* Masks for Flags field above */
886*ff879b07SJung-uk Kim 
887*ff879b07SJung-uk Kim /* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
888*ff879b07SJung-uk Kim #define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
889*ff879b07SJung-uk Kim #define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
890*ff879b07SJung-uk Kim 
891*ff879b07SJung-uk Kim 
892*ff879b07SJung-uk Kim /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
893*ff879b07SJung-uk Kim 
894*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_distributor
895*ff879b07SJung-uk Kim {
896*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
897*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
898*ff879b07SJung-uk Kim     UINT32                  GicId;
899*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
900*ff879b07SJung-uk Kim     UINT32                  GlobalIrqBase;
901*ff879b07SJung-uk Kim     UINT8                   Version;
902*ff879b07SJung-uk Kim     UINT8                   Reserved2[3];       /* Reserved - must be zero */
903*ff879b07SJung-uk Kim 
904*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_DISTRIBUTOR;
905*ff879b07SJung-uk Kim 
906*ff879b07SJung-uk Kim /* Values for Version field above */
907*ff879b07SJung-uk Kim 
908*ff879b07SJung-uk Kim enum AcpiMadtGicVersion
909*ff879b07SJung-uk Kim {
910*ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_NONE          = 0,
911*ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V1            = 1,
912*ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V2            = 2,
913*ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V3            = 3,
914*ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_V4            = 4,
915*ff879b07SJung-uk Kim     ACPI_MADT_GIC_VERSION_RESERVED      = 5     /* 5 and greater are reserved */
916*ff879b07SJung-uk Kim };
917*ff879b07SJung-uk Kim 
918*ff879b07SJung-uk Kim 
919*ff879b07SJung-uk Kim /* 13: Generic MSI Frame (ACPI 5.1) */
920*ff879b07SJung-uk Kim 
921*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_msi_frame
922*ff879b07SJung-uk Kim {
923*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
924*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved - must be zero */
925*ff879b07SJung-uk Kim     UINT32                  MsiFrameId;
926*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
927*ff879b07SJung-uk Kim     UINT32                  Flags;
928*ff879b07SJung-uk Kim     UINT16                  SpiCount;
929*ff879b07SJung-uk Kim     UINT16                  SpiBase;
930*ff879b07SJung-uk Kim 
931*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_MSI_FRAME;
932*ff879b07SJung-uk Kim 
933*ff879b07SJung-uk Kim /* Masks for Flags field above */
934*ff879b07SJung-uk Kim 
935*ff879b07SJung-uk Kim #define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
936*ff879b07SJung-uk Kim 
937*ff879b07SJung-uk Kim 
938*ff879b07SJung-uk Kim /* 14: Generic Redistributor (ACPI 5.1) */
939*ff879b07SJung-uk Kim 
940*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_redistributor
941*ff879b07SJung-uk Kim {
942*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
943*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* reserved - must be zero */
944*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
945*ff879b07SJung-uk Kim     UINT32                  Length;
946*ff879b07SJung-uk Kim 
947*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_REDISTRIBUTOR;
948*ff879b07SJung-uk Kim 
949*ff879b07SJung-uk Kim 
950*ff879b07SJung-uk Kim /* 15: Generic Translator (ACPI 6.0) */
951*ff879b07SJung-uk Kim 
952*ff879b07SJung-uk Kim typedef struct acpi_madt_generic_translator
953*ff879b07SJung-uk Kim {
954*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
955*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* reserved - must be zero */
956*ff879b07SJung-uk Kim     UINT32                  TranslationId;
957*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
958*ff879b07SJung-uk Kim     UINT32                  Reserved2;
959*ff879b07SJung-uk Kim 
960*ff879b07SJung-uk Kim } ACPI_MADT_GENERIC_TRANSLATOR;
961*ff879b07SJung-uk Kim 
962*ff879b07SJung-uk Kim 
963*ff879b07SJung-uk Kim /*
964*ff879b07SJung-uk Kim  * Common flags fields for MADT subtables
965*ff879b07SJung-uk Kim  */
966*ff879b07SJung-uk Kim 
967*ff879b07SJung-uk Kim /* MADT Local APIC flags */
968*ff879b07SJung-uk Kim 
969*ff879b07SJung-uk Kim #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
970*ff879b07SJung-uk Kim 
971*ff879b07SJung-uk Kim /* MADT MPS INTI flags (IntiFlags) */
972*ff879b07SJung-uk Kim 
973*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
974*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
975*ff879b07SJung-uk Kim 
976*ff879b07SJung-uk Kim /* Values for MPS INTI flags */
977*ff879b07SJung-uk Kim 
978*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_CONFORMS       0
979*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
980*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_RESERVED       2
981*ff879b07SJung-uk Kim #define ACPI_MADT_POLARITY_ACTIVE_LOW     3
982*ff879b07SJung-uk Kim 
983*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_CONFORMS        (0)
984*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_EDGE            (1<<2)
985*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
986*ff879b07SJung-uk Kim #define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
987*ff879b07SJung-uk Kim 
988*ff879b07SJung-uk Kim 
989*ff879b07SJung-uk Kim /*******************************************************************************
990*ff879b07SJung-uk Kim  *
991313a0c13SJung-uk Kim  * MCFG - PCI Memory Mapped Configuration table and subtable
992d6dd1baeSJung-uk Kim  *        Version 1
993d6dd1baeSJung-uk Kim  *
994d6dd1baeSJung-uk Kim  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
995d6dd1baeSJung-uk Kim  *
996d6dd1baeSJung-uk Kim  ******************************************************************************/
997d6dd1baeSJung-uk Kim 
998d6dd1baeSJung-uk Kim typedef struct acpi_table_mcfg
999d6dd1baeSJung-uk Kim {
1000d6dd1baeSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1001d6dd1baeSJung-uk Kim     UINT8                   Reserved[8];
1002d6dd1baeSJung-uk Kim 
1003d6dd1baeSJung-uk Kim } ACPI_TABLE_MCFG;
1004d6dd1baeSJung-uk Kim 
1005d6dd1baeSJung-uk Kim 
1006d6dd1baeSJung-uk Kim /* Subtable */
1007d6dd1baeSJung-uk Kim 
1008d6dd1baeSJung-uk Kim typedef struct acpi_mcfg_allocation
1009d6dd1baeSJung-uk Kim {
1010d6dd1baeSJung-uk Kim     UINT64                  Address;            /* Base address, processor-relative */
1011d6dd1baeSJung-uk Kim     UINT16                  PciSegment;         /* PCI segment group number */
1012d6dd1baeSJung-uk Kim     UINT8                   StartBusNumber;     /* Starting PCI Bus number */
1013d6dd1baeSJung-uk Kim     UINT8                   EndBusNumber;       /* Final PCI Bus number */
1014d6dd1baeSJung-uk Kim     UINT32                  Reserved;
1015d6dd1baeSJung-uk Kim 
1016d6dd1baeSJung-uk Kim } ACPI_MCFG_ALLOCATION;
1017d6dd1baeSJung-uk Kim 
1018d6dd1baeSJung-uk Kim 
1019d6dd1baeSJung-uk Kim /*******************************************************************************
1020d6dd1baeSJung-uk Kim  *
1021ca3cf4faSJung-uk Kim  * MCHI - Management Controller Host Interface Table
1022ca3cf4faSJung-uk Kim  *        Version 1
1023ca3cf4faSJung-uk Kim  *
1024ca3cf4faSJung-uk Kim  * Conforms to "Management Component Transport Protocol (MCTP) Host
1025ca3cf4faSJung-uk Kim  * Interface Specification", Revision 1.0.0a, October 13, 2009
1026ca3cf4faSJung-uk Kim  *
1027ca3cf4faSJung-uk Kim  ******************************************************************************/
1028ca3cf4faSJung-uk Kim 
1029ca3cf4faSJung-uk Kim typedef struct acpi_table_mchi
1030ca3cf4faSJung-uk Kim {
1031ca3cf4faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1032ca3cf4faSJung-uk Kim     UINT8                   InterfaceType;
1033ca3cf4faSJung-uk Kim     UINT8                   Protocol;
1034ca3cf4faSJung-uk Kim     UINT64                  ProtocolData;
1035ca3cf4faSJung-uk Kim     UINT8                   InterruptType;
1036ca3cf4faSJung-uk Kim     UINT8                   Gpe;
1037ca3cf4faSJung-uk Kim     UINT8                   PciDeviceFlag;
1038ca3cf4faSJung-uk Kim     UINT32                  GlobalInterrupt;
1039ca3cf4faSJung-uk Kim     ACPI_GENERIC_ADDRESS    ControlRegister;
1040ca3cf4faSJung-uk Kim     UINT8                   PciSegment;
1041ca3cf4faSJung-uk Kim     UINT8                   PciBus;
1042ca3cf4faSJung-uk Kim     UINT8                   PciDevice;
1043ca3cf4faSJung-uk Kim     UINT8                   PciFunction;
1044ca3cf4faSJung-uk Kim 
1045ca3cf4faSJung-uk Kim } ACPI_TABLE_MCHI;
1046ca3cf4faSJung-uk Kim 
1047ca3cf4faSJung-uk Kim 
1048ca3cf4faSJung-uk Kim /*******************************************************************************
1049ca3cf4faSJung-uk Kim  *
1050*ff879b07SJung-uk Kim  * MPST - Memory Power State Table (ACPI 5.0)
1051*ff879b07SJung-uk Kim  *        Version 1
1052*ff879b07SJung-uk Kim  *
1053*ff879b07SJung-uk Kim  ******************************************************************************/
1054*ff879b07SJung-uk Kim 
1055*ff879b07SJung-uk Kim #define ACPI_MPST_CHANNEL_INFO \
1056*ff879b07SJung-uk Kim     UINT8                   ChannelId; \
1057*ff879b07SJung-uk Kim     UINT8                   Reserved1[3]; \
1058*ff879b07SJung-uk Kim     UINT16                  PowerNodeCount; \
1059*ff879b07SJung-uk Kim     UINT16                  Reserved2;
1060*ff879b07SJung-uk Kim 
1061*ff879b07SJung-uk Kim /* Main table */
1062*ff879b07SJung-uk Kim 
1063*ff879b07SJung-uk Kim typedef struct acpi_table_mpst
1064*ff879b07SJung-uk Kim {
1065*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1066*ff879b07SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
1067*ff879b07SJung-uk Kim 
1068*ff879b07SJung-uk Kim } ACPI_TABLE_MPST;
1069*ff879b07SJung-uk Kim 
1070*ff879b07SJung-uk Kim 
1071*ff879b07SJung-uk Kim /* Memory Platform Communication Channel Info */
1072*ff879b07SJung-uk Kim 
1073*ff879b07SJung-uk Kim typedef struct acpi_mpst_channel
1074*ff879b07SJung-uk Kim {
1075*ff879b07SJung-uk Kim     ACPI_MPST_CHANNEL_INFO                      /* Platform Communication Channel */
1076*ff879b07SJung-uk Kim 
1077*ff879b07SJung-uk Kim } ACPI_MPST_CHANNEL;
1078*ff879b07SJung-uk Kim 
1079*ff879b07SJung-uk Kim 
1080*ff879b07SJung-uk Kim /* Memory Power Node Structure */
1081*ff879b07SJung-uk Kim 
1082*ff879b07SJung-uk Kim typedef struct acpi_mpst_power_node
1083*ff879b07SJung-uk Kim {
1084*ff879b07SJung-uk Kim     UINT8                   Flags;
1085*ff879b07SJung-uk Kim     UINT8                   Reserved1;
1086*ff879b07SJung-uk Kim     UINT16                  NodeId;
1087*ff879b07SJung-uk Kim     UINT32                  Length;
1088*ff879b07SJung-uk Kim     UINT64                  RangeAddress;
1089*ff879b07SJung-uk Kim     UINT64                  RangeLength;
1090*ff879b07SJung-uk Kim     UINT32                  NumPowerStates;
1091*ff879b07SJung-uk Kim     UINT32                  NumPhysicalComponents;
1092*ff879b07SJung-uk Kim 
1093*ff879b07SJung-uk Kim } ACPI_MPST_POWER_NODE;
1094*ff879b07SJung-uk Kim 
1095*ff879b07SJung-uk Kim /* Values for Flags field above */
1096*ff879b07SJung-uk Kim 
1097*ff879b07SJung-uk Kim #define ACPI_MPST_ENABLED               1
1098*ff879b07SJung-uk Kim #define ACPI_MPST_POWER_MANAGED         2
1099*ff879b07SJung-uk Kim #define ACPI_MPST_HOT_PLUG_CAPABLE      4
1100*ff879b07SJung-uk Kim 
1101*ff879b07SJung-uk Kim 
1102*ff879b07SJung-uk Kim /* Memory Power State Structure (follows POWER_NODE above) */
1103*ff879b07SJung-uk Kim 
1104*ff879b07SJung-uk Kim typedef struct acpi_mpst_power_state
1105*ff879b07SJung-uk Kim {
1106*ff879b07SJung-uk Kim     UINT8                   PowerState;
1107*ff879b07SJung-uk Kim     UINT8                   InfoIndex;
1108*ff879b07SJung-uk Kim 
1109*ff879b07SJung-uk Kim } ACPI_MPST_POWER_STATE;
1110*ff879b07SJung-uk Kim 
1111*ff879b07SJung-uk Kim 
1112*ff879b07SJung-uk Kim /* Physical Component ID Structure (follows POWER_STATE above) */
1113*ff879b07SJung-uk Kim 
1114*ff879b07SJung-uk Kim typedef struct acpi_mpst_component
1115*ff879b07SJung-uk Kim {
1116*ff879b07SJung-uk Kim     UINT16                  ComponentId;
1117*ff879b07SJung-uk Kim 
1118*ff879b07SJung-uk Kim } ACPI_MPST_COMPONENT;
1119*ff879b07SJung-uk Kim 
1120*ff879b07SJung-uk Kim 
1121*ff879b07SJung-uk Kim /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
1122*ff879b07SJung-uk Kim 
1123*ff879b07SJung-uk Kim typedef struct acpi_mpst_data_hdr
1124*ff879b07SJung-uk Kim {
1125*ff879b07SJung-uk Kim     UINT16                  CharacteristicsCount;
1126*ff879b07SJung-uk Kim     UINT16                  Reserved;
1127*ff879b07SJung-uk Kim 
1128*ff879b07SJung-uk Kim } ACPI_MPST_DATA_HDR;
1129*ff879b07SJung-uk Kim 
1130*ff879b07SJung-uk Kim typedef struct acpi_mpst_power_data
1131*ff879b07SJung-uk Kim {
1132*ff879b07SJung-uk Kim     UINT8                   StructureId;
1133*ff879b07SJung-uk Kim     UINT8                   Flags;
1134*ff879b07SJung-uk Kim     UINT16                  Reserved1;
1135*ff879b07SJung-uk Kim     UINT32                  AveragePower;
1136*ff879b07SJung-uk Kim     UINT32                  PowerSaving;
1137*ff879b07SJung-uk Kim     UINT64                  ExitLatency;
1138*ff879b07SJung-uk Kim     UINT64                  Reserved2;
1139*ff879b07SJung-uk Kim 
1140*ff879b07SJung-uk Kim } ACPI_MPST_POWER_DATA;
1141*ff879b07SJung-uk Kim 
1142*ff879b07SJung-uk Kim /* Values for Flags field above */
1143*ff879b07SJung-uk Kim 
1144*ff879b07SJung-uk Kim #define ACPI_MPST_PRESERVE              1
1145*ff879b07SJung-uk Kim #define ACPI_MPST_AUTOENTRY             2
1146*ff879b07SJung-uk Kim #define ACPI_MPST_AUTOEXIT              4
1147*ff879b07SJung-uk Kim 
1148*ff879b07SJung-uk Kim 
1149*ff879b07SJung-uk Kim /* Shared Memory Region (not part of an ACPI table) */
1150*ff879b07SJung-uk Kim 
1151*ff879b07SJung-uk Kim typedef struct acpi_mpst_shared
1152*ff879b07SJung-uk Kim {
1153*ff879b07SJung-uk Kim     UINT32                  Signature;
1154*ff879b07SJung-uk Kim     UINT16                  PccCommand;
1155*ff879b07SJung-uk Kim     UINT16                  PccStatus;
1156*ff879b07SJung-uk Kim     UINT32                  CommandRegister;
1157*ff879b07SJung-uk Kim     UINT32                  StatusRegister;
1158*ff879b07SJung-uk Kim     UINT32                  PowerStateId;
1159*ff879b07SJung-uk Kim     UINT32                  PowerNodeId;
1160*ff879b07SJung-uk Kim     UINT64                  EnergyConsumed;
1161*ff879b07SJung-uk Kim     UINT64                  AveragePower;
1162*ff879b07SJung-uk Kim 
1163*ff879b07SJung-uk Kim } ACPI_MPST_SHARED;
1164*ff879b07SJung-uk Kim 
1165*ff879b07SJung-uk Kim 
1166*ff879b07SJung-uk Kim /*******************************************************************************
1167*ff879b07SJung-uk Kim  *
1168*ff879b07SJung-uk Kim  * MSCT - Maximum System Characteristics Table (ACPI 4.0)
1169*ff879b07SJung-uk Kim  *        Version 1
1170*ff879b07SJung-uk Kim  *
1171*ff879b07SJung-uk Kim  ******************************************************************************/
1172*ff879b07SJung-uk Kim 
1173*ff879b07SJung-uk Kim typedef struct acpi_table_msct
1174*ff879b07SJung-uk Kim {
1175*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1176*ff879b07SJung-uk Kim     UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
1177*ff879b07SJung-uk Kim     UINT32                  MaxProximityDomains;/* Max number of proximity domains */
1178*ff879b07SJung-uk Kim     UINT32                  MaxClockDomains;    /* Max number of clock domains */
1179*ff879b07SJung-uk Kim     UINT64                  MaxAddress;         /* Max physical address in system */
1180*ff879b07SJung-uk Kim 
1181*ff879b07SJung-uk Kim } ACPI_TABLE_MSCT;
1182*ff879b07SJung-uk Kim 
1183*ff879b07SJung-uk Kim 
1184*ff879b07SJung-uk Kim /* Subtable - Maximum Proximity Domain Information. Version 1 */
1185*ff879b07SJung-uk Kim 
1186*ff879b07SJung-uk Kim typedef struct acpi_msct_proximity
1187*ff879b07SJung-uk Kim {
1188*ff879b07SJung-uk Kim     UINT8                   Revision;
1189*ff879b07SJung-uk Kim     UINT8                   Length;
1190*ff879b07SJung-uk Kim     UINT32                  RangeStart;         /* Start of domain range */
1191*ff879b07SJung-uk Kim     UINT32                  RangeEnd;           /* End of domain range */
1192*ff879b07SJung-uk Kim     UINT32                  ProcessorCapacity;
1193*ff879b07SJung-uk Kim     UINT64                  MemoryCapacity;     /* In bytes */
1194*ff879b07SJung-uk Kim 
1195*ff879b07SJung-uk Kim } ACPI_MSCT_PROXIMITY;
1196*ff879b07SJung-uk Kim 
1197*ff879b07SJung-uk Kim 
1198*ff879b07SJung-uk Kim /*******************************************************************************
1199*ff879b07SJung-uk Kim  *
12007cf3e94aSJung-uk Kim  * MSDM - Microsoft Data Management table
12017cf3e94aSJung-uk Kim  *
12027cf3e94aSJung-uk Kim  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
12037cf3e94aSJung-uk Kim  * November 29, 2011. Copyright 2011 Microsoft
12047cf3e94aSJung-uk Kim  *
12057cf3e94aSJung-uk Kim  ******************************************************************************/
12067cf3e94aSJung-uk Kim 
12077cf3e94aSJung-uk Kim /* Basic MSDM table is only the common ACPI header */
12087cf3e94aSJung-uk Kim 
12097cf3e94aSJung-uk Kim typedef struct acpi_table_msdm
12107cf3e94aSJung-uk Kim {
12117cf3e94aSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
12127cf3e94aSJung-uk Kim 
12137cf3e94aSJung-uk Kim } ACPI_TABLE_MSDM;
12147cf3e94aSJung-uk Kim 
12157cf3e94aSJung-uk Kim 
12167cf3e94aSJung-uk Kim /*******************************************************************************
12177cf3e94aSJung-uk Kim  *
12189c48c75eSJung-uk Kim  * MTMR - MID Timer Table
12199c48c75eSJung-uk Kim  *        Version 1
12209c48c75eSJung-uk Kim  *
12219c48c75eSJung-uk Kim  * Conforms to "Simple Firmware Interface Specification",
12229c48c75eSJung-uk Kim  * Draft 0.8.2, Oct 19, 2010
12239c48c75eSJung-uk Kim  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
12249c48c75eSJung-uk Kim  *
12259c48c75eSJung-uk Kim  ******************************************************************************/
12269c48c75eSJung-uk Kim 
12279c48c75eSJung-uk Kim typedef struct acpi_table_mtmr
12289c48c75eSJung-uk Kim {
12299c48c75eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
12309c48c75eSJung-uk Kim 
12319c48c75eSJung-uk Kim } ACPI_TABLE_MTMR;
12329c48c75eSJung-uk Kim 
12339c48c75eSJung-uk Kim /* MTMR entry */
12349c48c75eSJung-uk Kim 
12359c48c75eSJung-uk Kim typedef struct acpi_mtmr_entry
12369c48c75eSJung-uk Kim {
12379c48c75eSJung-uk Kim     ACPI_GENERIC_ADDRESS    PhysicalAddress;
12389c48c75eSJung-uk Kim     UINT32                  Frequency;
12399c48c75eSJung-uk Kim     UINT32                  Irq;
12409c48c75eSJung-uk Kim 
12419c48c75eSJung-uk Kim } ACPI_MTMR_ENTRY;
12429c48c75eSJung-uk Kim 
1243*ff879b07SJung-uk Kim 
1244*ff879b07SJung-uk Kim /*******************************************************************************
1245*ff879b07SJung-uk Kim  *
1246*ff879b07SJung-uk Kim  * NFIT - NVDIMM Interface Table (ACPI 6.0+)
1247*ff879b07SJung-uk Kim  *        Version 1
1248*ff879b07SJung-uk Kim  *
1249*ff879b07SJung-uk Kim  ******************************************************************************/
1250*ff879b07SJung-uk Kim 
1251*ff879b07SJung-uk Kim typedef struct acpi_table_nfit
1252*ff879b07SJung-uk Kim {
1253*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1254*ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
1255*ff879b07SJung-uk Kim 
1256*ff879b07SJung-uk Kim } ACPI_TABLE_NFIT;
1257*ff879b07SJung-uk Kim 
1258*ff879b07SJung-uk Kim /* Subtable header for NFIT */
1259*ff879b07SJung-uk Kim 
1260*ff879b07SJung-uk Kim typedef struct acpi_nfit_header
1261*ff879b07SJung-uk Kim {
1262*ff879b07SJung-uk Kim     UINT16                   Type;
1263*ff879b07SJung-uk Kim     UINT16                   Length;
1264*ff879b07SJung-uk Kim 
1265*ff879b07SJung-uk Kim } ACPI_NFIT_HEADER;
1266*ff879b07SJung-uk Kim 
1267*ff879b07SJung-uk Kim 
1268*ff879b07SJung-uk Kim /* Values for subtable type in ACPI_NFIT_HEADER */
1269*ff879b07SJung-uk Kim 
1270*ff879b07SJung-uk Kim enum AcpiNfitType
1271*ff879b07SJung-uk Kim {
1272*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_SYSTEM_ADDRESS       = 0,
1273*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_MEMORY_MAP           = 1,
1274*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_INTERLEAVE           = 2,
1275*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_SMBIOS               = 3,
1276*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_CONTROL_REGION       = 4,
1277*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_DATA_REGION          = 5,
1278*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_FLUSH_ADDRESS        = 6,
1279*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_CAPABILITIES         = 7,
1280*ff879b07SJung-uk Kim     ACPI_NFIT_TYPE_RESERVED             = 8     /* 8 and greater are reserved */
1281*ff879b07SJung-uk Kim };
1282*ff879b07SJung-uk Kim 
1283*ff879b07SJung-uk Kim /*
1284*ff879b07SJung-uk Kim  * NFIT Subtables
1285*ff879b07SJung-uk Kim  */
1286*ff879b07SJung-uk Kim 
1287*ff879b07SJung-uk Kim /* 0: System Physical Address Range Structure */
1288*ff879b07SJung-uk Kim 
1289*ff879b07SJung-uk Kim typedef struct acpi_nfit_system_address
1290*ff879b07SJung-uk Kim {
1291*ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1292*ff879b07SJung-uk Kim     UINT16                  RangeIndex;
1293*ff879b07SJung-uk Kim     UINT16                  Flags;
1294*ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
1295*ff879b07SJung-uk Kim     UINT32                  ProximityDomain;
1296*ff879b07SJung-uk Kim     UINT8                   RangeGuid[16];
1297*ff879b07SJung-uk Kim     UINT64                  Address;
1298*ff879b07SJung-uk Kim     UINT64                  Length;
1299*ff879b07SJung-uk Kim     UINT64                  MemoryMapping;
1300*ff879b07SJung-uk Kim 
1301*ff879b07SJung-uk Kim } ACPI_NFIT_SYSTEM_ADDRESS;
1302*ff879b07SJung-uk Kim 
1303*ff879b07SJung-uk Kim /* Flags */
1304*ff879b07SJung-uk Kim 
1305*ff879b07SJung-uk Kim #define ACPI_NFIT_ADD_ONLINE_ONLY       (1)     /* 00: Add/Online Operation Only */
1306*ff879b07SJung-uk Kim #define ACPI_NFIT_PROXIMITY_VALID       (1<<1)  /* 01: Proximity Domain Valid */
1307*ff879b07SJung-uk Kim 
1308*ff879b07SJung-uk Kim /* Range Type GUIDs appear in the include/acuuid.h file */
1309*ff879b07SJung-uk Kim 
1310*ff879b07SJung-uk Kim 
1311*ff879b07SJung-uk Kim /* 1: Memory Device to System Address Range Map Structure */
1312*ff879b07SJung-uk Kim 
1313*ff879b07SJung-uk Kim typedef struct acpi_nfit_memory_map
1314*ff879b07SJung-uk Kim {
1315*ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1316*ff879b07SJung-uk Kim     UINT32                  DeviceHandle;
1317*ff879b07SJung-uk Kim     UINT16                  PhysicalId;
1318*ff879b07SJung-uk Kim     UINT16                  RegionId;
1319*ff879b07SJung-uk Kim     UINT16                  RangeIndex;
1320*ff879b07SJung-uk Kim     UINT16                  RegionIndex;
1321*ff879b07SJung-uk Kim     UINT64                  RegionSize;
1322*ff879b07SJung-uk Kim     UINT64                  RegionOffset;
1323*ff879b07SJung-uk Kim     UINT64                  Address;
1324*ff879b07SJung-uk Kim     UINT16                  InterleaveIndex;
1325*ff879b07SJung-uk Kim     UINT16                  InterleaveWays;
1326*ff879b07SJung-uk Kim     UINT16                  Flags;
1327*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
1328*ff879b07SJung-uk Kim 
1329*ff879b07SJung-uk Kim } ACPI_NFIT_MEMORY_MAP;
1330*ff879b07SJung-uk Kim 
1331*ff879b07SJung-uk Kim /* Flags */
1332*ff879b07SJung-uk Kim 
1333*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_SAVE_FAILED       (1)     /* 00: Last SAVE to Memory Device failed */
1334*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)  /* 01: Last RESTORE from Memory Device failed */
1335*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)  /* 02: Platform flush failed */
1336*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)  /* 03: Memory Device is not armed */
1337*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)  /* 04: Memory Device observed SMART/health events */
1338*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)  /* 05: SMART/health events enabled */
1339*ff879b07SJung-uk Kim #define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)  /* 06: Mapping to SPA failed */
1340*ff879b07SJung-uk Kim 
1341*ff879b07SJung-uk Kim 
1342*ff879b07SJung-uk Kim /* 2: Interleave Structure */
1343*ff879b07SJung-uk Kim 
1344*ff879b07SJung-uk Kim typedef struct acpi_nfit_interleave
1345*ff879b07SJung-uk Kim {
1346*ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1347*ff879b07SJung-uk Kim     UINT16                  InterleaveIndex;
1348*ff879b07SJung-uk Kim     UINT16                  Reserved;           /* Reserved, must be zero */
1349*ff879b07SJung-uk Kim     UINT32                  LineCount;
1350*ff879b07SJung-uk Kim     UINT32                  LineSize;
1351*ff879b07SJung-uk Kim     UINT32                  LineOffset[1];      /* Variable length */
1352*ff879b07SJung-uk Kim 
1353*ff879b07SJung-uk Kim } ACPI_NFIT_INTERLEAVE;
1354*ff879b07SJung-uk Kim 
1355*ff879b07SJung-uk Kim 
1356*ff879b07SJung-uk Kim /* 3: SMBIOS Management Information Structure */
1357*ff879b07SJung-uk Kim 
1358*ff879b07SJung-uk Kim typedef struct acpi_nfit_smbios
1359*ff879b07SJung-uk Kim {
1360*ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1361*ff879b07SJung-uk Kim     UINT32                  Reserved;           /* Reserved, must be zero */
1362*ff879b07SJung-uk Kim     UINT8                   Data[1];            /* Variable length */
1363*ff879b07SJung-uk Kim 
1364*ff879b07SJung-uk Kim } ACPI_NFIT_SMBIOS;
1365*ff879b07SJung-uk Kim 
1366*ff879b07SJung-uk Kim 
1367*ff879b07SJung-uk Kim /* 4: NVDIMM Control Region Structure */
1368*ff879b07SJung-uk Kim 
1369*ff879b07SJung-uk Kim typedef struct acpi_nfit_control_region
1370*ff879b07SJung-uk Kim {
1371*ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1372*ff879b07SJung-uk Kim     UINT16                  RegionIndex;
1373*ff879b07SJung-uk Kim     UINT16                  VendorId;
1374*ff879b07SJung-uk Kim     UINT16                  DeviceId;
1375*ff879b07SJung-uk Kim     UINT16                  RevisionId;
1376*ff879b07SJung-uk Kim     UINT16                  SubsystemVendorId;
1377*ff879b07SJung-uk Kim     UINT16                  SubsystemDeviceId;
1378*ff879b07SJung-uk Kim     UINT16                  SubsystemRevisionId;
1379*ff879b07SJung-uk Kim     UINT8                   ValidFields;
1380*ff879b07SJung-uk Kim     UINT8                   ManufacturingLocation;
1381*ff879b07SJung-uk Kim     UINT16                  ManufacturingDate;
1382*ff879b07SJung-uk Kim     UINT8                   Reserved[2];        /* Reserved, must be zero */
1383*ff879b07SJung-uk Kim     UINT32                  SerialNumber;
1384*ff879b07SJung-uk Kim     UINT16                  Code;
1385*ff879b07SJung-uk Kim     UINT16                  Windows;
1386*ff879b07SJung-uk Kim     UINT64                  WindowSize;
1387*ff879b07SJung-uk Kim     UINT64                  CommandOffset;
1388*ff879b07SJung-uk Kim     UINT64                  CommandSize;
1389*ff879b07SJung-uk Kim     UINT64                  StatusOffset;
1390*ff879b07SJung-uk Kim     UINT64                  StatusSize;
1391*ff879b07SJung-uk Kim     UINT16                  Flags;
1392*ff879b07SJung-uk Kim     UINT8                   Reserved1[6];       /* Reserved, must be zero */
1393*ff879b07SJung-uk Kim 
1394*ff879b07SJung-uk Kim } ACPI_NFIT_CONTROL_REGION;
1395*ff879b07SJung-uk Kim 
1396*ff879b07SJung-uk Kim /* Flags */
1397*ff879b07SJung-uk Kim 
1398*ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_BUFFERED          (1)     /* Block Data Windows implementation is buffered */
1399*ff879b07SJung-uk Kim 
1400*ff879b07SJung-uk Kim /* ValidFields bits */
1401*ff879b07SJung-uk Kim 
1402*ff879b07SJung-uk Kim #define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)     /* Manufacturing fields are valid */
1403*ff879b07SJung-uk Kim 
1404*ff879b07SJung-uk Kim 
1405*ff879b07SJung-uk Kim /* 5: NVDIMM Block Data Window Region Structure */
1406*ff879b07SJung-uk Kim 
1407*ff879b07SJung-uk Kim typedef struct acpi_nfit_data_region
1408*ff879b07SJung-uk Kim {
1409*ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1410*ff879b07SJung-uk Kim     UINT16                  RegionIndex;
1411*ff879b07SJung-uk Kim     UINT16                  Windows;
1412*ff879b07SJung-uk Kim     UINT64                  Offset;
1413*ff879b07SJung-uk Kim     UINT64                  Size;
1414*ff879b07SJung-uk Kim     UINT64                  Capacity;
1415*ff879b07SJung-uk Kim     UINT64                  StartAddress;
1416*ff879b07SJung-uk Kim 
1417*ff879b07SJung-uk Kim } ACPI_NFIT_DATA_REGION;
1418*ff879b07SJung-uk Kim 
1419*ff879b07SJung-uk Kim 
1420*ff879b07SJung-uk Kim /* 6: Flush Hint Address Structure */
1421*ff879b07SJung-uk Kim 
1422*ff879b07SJung-uk Kim typedef struct acpi_nfit_flush_address
1423*ff879b07SJung-uk Kim {
1424*ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1425*ff879b07SJung-uk Kim     UINT32                  DeviceHandle;
1426*ff879b07SJung-uk Kim     UINT16                  HintCount;
1427*ff879b07SJung-uk Kim     UINT8                   Reserved[6];        /* Reserved, must be zero */
1428*ff879b07SJung-uk Kim     UINT64                  HintAddress[1];     /* Variable length */
1429*ff879b07SJung-uk Kim 
1430*ff879b07SJung-uk Kim } ACPI_NFIT_FLUSH_ADDRESS;
1431*ff879b07SJung-uk Kim 
1432*ff879b07SJung-uk Kim 
1433*ff879b07SJung-uk Kim /* 7: Platform Capabilities Structure */
1434*ff879b07SJung-uk Kim 
1435*ff879b07SJung-uk Kim typedef struct acpi_nfit_capabilities
1436*ff879b07SJung-uk Kim {
1437*ff879b07SJung-uk Kim     ACPI_NFIT_HEADER        Header;
1438*ff879b07SJung-uk Kim     UINT8                   HighestCapability;
1439*ff879b07SJung-uk Kim     UINT8                   Reserved[3];       /* Reserved, must be zero */
1440*ff879b07SJung-uk Kim     UINT32                  Capabilities;
1441*ff879b07SJung-uk Kim     UINT32                  Reserved2;
1442*ff879b07SJung-uk Kim 
1443*ff879b07SJung-uk Kim } ACPI_NFIT_CAPABILITIES;
1444*ff879b07SJung-uk Kim 
1445*ff879b07SJung-uk Kim /* Capabilities Flags */
1446*ff879b07SJung-uk Kim 
1447*ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)     /* 00: Cache Flush to NVDIMM capable */
1448*ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)  /* 01: Memory Flush to NVDIMM capable */
1449*ff879b07SJung-uk Kim #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)  /* 02: Memory Mirroring capable */
1450*ff879b07SJung-uk Kim 
1451*ff879b07SJung-uk Kim 
1452*ff879b07SJung-uk Kim /*
1453*ff879b07SJung-uk Kim  * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
1454*ff879b07SJung-uk Kim  */
1455*ff879b07SJung-uk Kim typedef struct nfit_device_handle
1456*ff879b07SJung-uk Kim {
1457*ff879b07SJung-uk Kim     UINT32                  Handle;
1458*ff879b07SJung-uk Kim 
1459*ff879b07SJung-uk Kim } NFIT_DEVICE_HANDLE;
1460*ff879b07SJung-uk Kim 
1461*ff879b07SJung-uk Kim /* Device handle construction and extraction macros */
1462*ff879b07SJung-uk Kim 
1463*ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
1464*ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
1465*ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
1466*ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
1467*ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
1468*ff879b07SJung-uk Kim 
1469*ff879b07SJung-uk Kim #define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
1470*ff879b07SJung-uk Kim #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
1471*ff879b07SJung-uk Kim #define ACPI_NFIT_MEMORY_ID_OFFSET              8
1472*ff879b07SJung-uk Kim #define ACPI_NFIT_SOCKET_ID_OFFSET              12
1473*ff879b07SJung-uk Kim #define ACPI_NFIT_NODE_ID_OFFSET                16
1474*ff879b07SJung-uk Kim 
1475*ff879b07SJung-uk Kim /* Macro to construct a NFIT/NVDIMM device handle */
1476*ff879b07SJung-uk Kim 
1477*ff879b07SJung-uk Kim #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
1478*ff879b07SJung-uk Kim     ((dimm)                                         | \
1479*ff879b07SJung-uk Kim     ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
1480*ff879b07SJung-uk Kim     ((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
1481*ff879b07SJung-uk Kim     ((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
1482*ff879b07SJung-uk Kim     ((node)    << ACPI_NFIT_NODE_ID_OFFSET))
1483*ff879b07SJung-uk Kim 
1484*ff879b07SJung-uk Kim /* Macros to extract individual fields from a NFIT/NVDIMM device handle */
1485*ff879b07SJung-uk Kim 
1486*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
1487*ff879b07SJung-uk Kim     ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
1488*ff879b07SJung-uk Kim 
1489*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
1490*ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
1491*ff879b07SJung-uk Kim 
1492*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_MEMORY_ID(handle) \
1493*ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
1494*ff879b07SJung-uk Kim 
1495*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_SOCKET_ID(handle) \
1496*ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
1497*ff879b07SJung-uk Kim 
1498*ff879b07SJung-uk Kim #define ACPI_NFIT_GET_NODE_ID(handle) \
1499*ff879b07SJung-uk Kim     (((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
1500*ff879b07SJung-uk Kim 
1501*ff879b07SJung-uk Kim 
1502*ff879b07SJung-uk Kim /*******************************************************************************
1503*ff879b07SJung-uk Kim  *
1504*ff879b07SJung-uk Kim  * PCCT - Platform Communications Channel Table (ACPI 5.0)
1505*ff879b07SJung-uk Kim  *        Version 2 (ACPI 6.2)
1506*ff879b07SJung-uk Kim  *
1507*ff879b07SJung-uk Kim  ******************************************************************************/
1508*ff879b07SJung-uk Kim 
1509*ff879b07SJung-uk Kim typedef struct acpi_table_pcct
1510*ff879b07SJung-uk Kim {
1511*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1512*ff879b07SJung-uk Kim     UINT32                  Flags;
1513*ff879b07SJung-uk Kim     UINT64                  Reserved;
1514*ff879b07SJung-uk Kim 
1515*ff879b07SJung-uk Kim } ACPI_TABLE_PCCT;
1516*ff879b07SJung-uk Kim 
1517*ff879b07SJung-uk Kim /* Values for Flags field above */
1518*ff879b07SJung-uk Kim 
1519*ff879b07SJung-uk Kim #define ACPI_PCCT_DOORBELL              1
1520*ff879b07SJung-uk Kim 
1521*ff879b07SJung-uk Kim /* Values for subtable type in ACPI_SUBTABLE_HEADER */
1522*ff879b07SJung-uk Kim 
1523*ff879b07SJung-uk Kim enum AcpiPcctType
1524*ff879b07SJung-uk Kim {
1525*ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_GENERIC_SUBSPACE             = 0,
1526*ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE          = 1,
1527*ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2    = 2,    /* ACPI 6.1 */
1528*ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE      = 3,    /* ACPI 6.2 */
1529*ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE       = 4,    /* ACPI 6.2 */
1530*ff879b07SJung-uk Kim     ACPI_PCCT_TYPE_RESERVED                     = 5     /* 5 and greater are reserved */
1531*ff879b07SJung-uk Kim };
1532*ff879b07SJung-uk Kim 
1533*ff879b07SJung-uk Kim /*
1534*ff879b07SJung-uk Kim  * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
1535*ff879b07SJung-uk Kim  */
1536*ff879b07SJung-uk Kim 
1537*ff879b07SJung-uk Kim /* 0: Generic Communications Subspace */
1538*ff879b07SJung-uk Kim 
1539*ff879b07SJung-uk Kim typedef struct acpi_pcct_subspace
1540*ff879b07SJung-uk Kim {
1541*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1542*ff879b07SJung-uk Kim     UINT8                   Reserved[6];
1543*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1544*ff879b07SJung-uk Kim     UINT64                  Length;
1545*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1546*ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1547*ff879b07SJung-uk Kim     UINT64                  WriteMask;
1548*ff879b07SJung-uk Kim     UINT32                  Latency;
1549*ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1550*ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
1551*ff879b07SJung-uk Kim 
1552*ff879b07SJung-uk Kim } ACPI_PCCT_SUBSPACE;
1553*ff879b07SJung-uk Kim 
1554*ff879b07SJung-uk Kim 
1555*ff879b07SJung-uk Kim /* 1: HW-reduced Communications Subspace (ACPI 5.1) */
1556*ff879b07SJung-uk Kim 
1557*ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced
1558*ff879b07SJung-uk Kim {
1559*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1560*ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
1561*ff879b07SJung-uk Kim     UINT8                   Flags;
1562*ff879b07SJung-uk Kim     UINT8                   Reserved;
1563*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1564*ff879b07SJung-uk Kim     UINT64                  Length;
1565*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1566*ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1567*ff879b07SJung-uk Kim     UINT64                  WriteMask;
1568*ff879b07SJung-uk Kim     UINT32                  Latency;
1569*ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1570*ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
1571*ff879b07SJung-uk Kim 
1572*ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED;
1573*ff879b07SJung-uk Kim 
1574*ff879b07SJung-uk Kim 
1575*ff879b07SJung-uk Kim /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
1576*ff879b07SJung-uk Kim 
1577*ff879b07SJung-uk Kim typedef struct acpi_pcct_hw_reduced_type2
1578*ff879b07SJung-uk Kim {
1579*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1580*ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
1581*ff879b07SJung-uk Kim     UINT8                   Flags;
1582*ff879b07SJung-uk Kim     UINT8                   Reserved;
1583*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1584*ff879b07SJung-uk Kim     UINT64                  Length;
1585*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1586*ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1587*ff879b07SJung-uk Kim     UINT64                  WriteMask;
1588*ff879b07SJung-uk Kim     UINT32                  Latency;
1589*ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1590*ff879b07SJung-uk Kim     UINT16                  MinTurnaroundTime;
1591*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
1592*ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
1593*ff879b07SJung-uk Kim     UINT64                  AckWriteMask;
1594*ff879b07SJung-uk Kim 
1595*ff879b07SJung-uk Kim } ACPI_PCCT_HW_REDUCED_TYPE2;
1596*ff879b07SJung-uk Kim 
1597*ff879b07SJung-uk Kim 
1598*ff879b07SJung-uk Kim /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
1599*ff879b07SJung-uk Kim 
1600*ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_master
1601*ff879b07SJung-uk Kim {
1602*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1603*ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
1604*ff879b07SJung-uk Kim     UINT8                   Flags;
1605*ff879b07SJung-uk Kim     UINT8                   Reserved1;
1606*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1607*ff879b07SJung-uk Kim     UINT32                  Length;
1608*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1609*ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1610*ff879b07SJung-uk Kim     UINT64                  WriteMask;
1611*ff879b07SJung-uk Kim     UINT32                  Latency;
1612*ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1613*ff879b07SJung-uk Kim     UINT32                  MinTurnaroundTime;
1614*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
1615*ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
1616*ff879b07SJung-uk Kim     UINT64                  AckSetMask;
1617*ff879b07SJung-uk Kim     UINT64                  Reserved2;
1618*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
1619*ff879b07SJung-uk Kim     UINT64                  CmdCompleteMask;
1620*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
1621*ff879b07SJung-uk Kim     UINT64                  CmdUpdatePreserveMask;
1622*ff879b07SJung-uk Kim     UINT64                  CmdUpdateSetMask;
1623*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
1624*ff879b07SJung-uk Kim     UINT64                  ErrorStatusMask;
1625*ff879b07SJung-uk Kim 
1626*ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_MASTER;
1627*ff879b07SJung-uk Kim 
1628*ff879b07SJung-uk Kim 
1629*ff879b07SJung-uk Kim /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
1630*ff879b07SJung-uk Kim 
1631*ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_slave
1632*ff879b07SJung-uk Kim {
1633*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1634*ff879b07SJung-uk Kim     UINT32                  PlatformInterrupt;
1635*ff879b07SJung-uk Kim     UINT8                   Flags;
1636*ff879b07SJung-uk Kim     UINT8                   Reserved1;
1637*ff879b07SJung-uk Kim     UINT64                  BaseAddress;
1638*ff879b07SJung-uk Kim     UINT32                  Length;
1639*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    DoorbellRegister;
1640*ff879b07SJung-uk Kim     UINT64                  PreserveMask;
1641*ff879b07SJung-uk Kim     UINT64                  WriteMask;
1642*ff879b07SJung-uk Kim     UINT32                  Latency;
1643*ff879b07SJung-uk Kim     UINT32                  MaxAccessRate;
1644*ff879b07SJung-uk Kim     UINT32                  MinTurnaroundTime;
1645*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    PlatformAckRegister;
1646*ff879b07SJung-uk Kim     UINT64                  AckPreserveMask;
1647*ff879b07SJung-uk Kim     UINT64                  AckSetMask;
1648*ff879b07SJung-uk Kim     UINT64                  Reserved2;
1649*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdCompleteRegister;
1650*ff879b07SJung-uk Kim     UINT64                  CmdCompleteMask;
1651*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    CmdUpdateRegister;
1652*ff879b07SJung-uk Kim     UINT64                  CmdUpdatePreserveMask;
1653*ff879b07SJung-uk Kim     UINT64                  CmdUpdateSetMask;
1654*ff879b07SJung-uk Kim     ACPI_GENERIC_ADDRESS    ErrorStatusRegister;
1655*ff879b07SJung-uk Kim     UINT64                  ErrorStatusMask;
1656*ff879b07SJung-uk Kim 
1657*ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SLAVE;
1658*ff879b07SJung-uk Kim 
1659*ff879b07SJung-uk Kim 
1660*ff879b07SJung-uk Kim /* Values for doorbell flags above */
1661*ff879b07SJung-uk Kim 
1662*ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_POLARITY    (1)
1663*ff879b07SJung-uk Kim #define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
1664*ff879b07SJung-uk Kim 
1665*ff879b07SJung-uk Kim 
1666*ff879b07SJung-uk Kim /*
1667*ff879b07SJung-uk Kim  * PCC memory structures (not part of the ACPI table)
1668*ff879b07SJung-uk Kim  */
1669*ff879b07SJung-uk Kim 
1670*ff879b07SJung-uk Kim /* Shared Memory Region */
1671*ff879b07SJung-uk Kim 
1672*ff879b07SJung-uk Kim typedef struct acpi_pcct_shared_memory
1673*ff879b07SJung-uk Kim {
1674*ff879b07SJung-uk Kim     UINT32                  Signature;
1675*ff879b07SJung-uk Kim     UINT16                  Command;
1676*ff879b07SJung-uk Kim     UINT16                  Status;
1677*ff879b07SJung-uk Kim 
1678*ff879b07SJung-uk Kim } ACPI_PCCT_SHARED_MEMORY;
1679*ff879b07SJung-uk Kim 
1680*ff879b07SJung-uk Kim 
1681*ff879b07SJung-uk Kim /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
1682*ff879b07SJung-uk Kim 
1683*ff879b07SJung-uk Kim typedef struct acpi_pcct_ext_pcc_shared_memory
1684*ff879b07SJung-uk Kim {
1685*ff879b07SJung-uk Kim     UINT32                  Signature;
1686*ff879b07SJung-uk Kim     UINT32                  Flags;
1687*ff879b07SJung-uk Kim     UINT32                  Length;
1688*ff879b07SJung-uk Kim     UINT32                  Command;
1689*ff879b07SJung-uk Kim 
1690*ff879b07SJung-uk Kim } ACPI_PCCT_EXT_PCC_SHARED_MEMORY;
1691*ff879b07SJung-uk Kim 
1692*ff879b07SJung-uk Kim 
1693*ff879b07SJung-uk Kim /*******************************************************************************
1694*ff879b07SJung-uk Kim  *
1695*ff879b07SJung-uk Kim  * PDTT - Platform Debug Trigger Table (ACPI 6.2)
1696*ff879b07SJung-uk Kim  *        Version 0
1697*ff879b07SJung-uk Kim  *
1698*ff879b07SJung-uk Kim  ******************************************************************************/
1699*ff879b07SJung-uk Kim 
1700*ff879b07SJung-uk Kim typedef struct acpi_table_pdtt
1701*ff879b07SJung-uk Kim {
1702*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1703*ff879b07SJung-uk Kim     UINT8                   TriggerCount;
1704*ff879b07SJung-uk Kim     UINT8                   Reserved[3];
1705*ff879b07SJung-uk Kim     UINT32                  ArrayOffset;
1706*ff879b07SJung-uk Kim 
1707*ff879b07SJung-uk Kim } ACPI_TABLE_PDTT;
1708*ff879b07SJung-uk Kim 
1709*ff879b07SJung-uk Kim 
1710*ff879b07SJung-uk Kim /*
1711*ff879b07SJung-uk Kim  * PDTT Communication Channel Identifier Structure.
1712*ff879b07SJung-uk Kim  * The number of these structures is defined by TriggerCount above,
1713*ff879b07SJung-uk Kim  * starting at ArrayOffset.
1714*ff879b07SJung-uk Kim  */
1715*ff879b07SJung-uk Kim typedef struct acpi_pdtt_channel
1716*ff879b07SJung-uk Kim {
1717*ff879b07SJung-uk Kim     UINT8                   SubchannelId;
1718*ff879b07SJung-uk Kim     UINT8                   Flags;
1719*ff879b07SJung-uk Kim 
1720*ff879b07SJung-uk Kim } ACPI_PDTT_CHANNEL;
1721*ff879b07SJung-uk Kim 
1722*ff879b07SJung-uk Kim /* Flags for above */
1723*ff879b07SJung-uk Kim 
1724*ff879b07SJung-uk Kim #define ACPI_PDTT_RUNTIME_TRIGGER           (1)
1725*ff879b07SJung-uk Kim #define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
1726*ff879b07SJung-uk Kim 
1727*ff879b07SJung-uk Kim 
1728*ff879b07SJung-uk Kim /*******************************************************************************
1729*ff879b07SJung-uk Kim  *
1730*ff879b07SJung-uk Kim  * PMTT - Platform Memory Topology Table (ACPI 5.0)
1731*ff879b07SJung-uk Kim  *        Version 1
1732*ff879b07SJung-uk Kim  *
1733*ff879b07SJung-uk Kim  ******************************************************************************/
1734*ff879b07SJung-uk Kim 
1735*ff879b07SJung-uk Kim typedef struct acpi_table_pmtt
1736*ff879b07SJung-uk Kim {
1737*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1738*ff879b07SJung-uk Kim     UINT32                  Reserved;
1739*ff879b07SJung-uk Kim 
1740*ff879b07SJung-uk Kim } ACPI_TABLE_PMTT;
1741*ff879b07SJung-uk Kim 
1742*ff879b07SJung-uk Kim 
1743*ff879b07SJung-uk Kim /* Common header for PMTT subtables that follow main table */
1744*ff879b07SJung-uk Kim 
1745*ff879b07SJung-uk Kim typedef struct acpi_pmtt_header
1746*ff879b07SJung-uk Kim {
1747*ff879b07SJung-uk Kim     UINT8                   Type;
1748*ff879b07SJung-uk Kim     UINT8                   Reserved1;
1749*ff879b07SJung-uk Kim     UINT16                  Length;
1750*ff879b07SJung-uk Kim     UINT16                  Flags;
1751*ff879b07SJung-uk Kim     UINT16                  Reserved2;
1752*ff879b07SJung-uk Kim 
1753*ff879b07SJung-uk Kim } ACPI_PMTT_HEADER;
1754*ff879b07SJung-uk Kim 
1755*ff879b07SJung-uk Kim /* Values for Type field above */
1756*ff879b07SJung-uk Kim 
1757*ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_SOCKET           0
1758*ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_CONTROLLER       1
1759*ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_DIMM             2
1760*ff879b07SJung-uk Kim #define ACPI_PMTT_TYPE_RESERVED         3 /* 0x03-0xFF are reserved */
1761*ff879b07SJung-uk Kim 
1762*ff879b07SJung-uk Kim /* Values for Flags field above */
1763*ff879b07SJung-uk Kim 
1764*ff879b07SJung-uk Kim #define ACPI_PMTT_TOP_LEVEL             0x0001
1765*ff879b07SJung-uk Kim #define ACPI_PMTT_PHYSICAL              0x0002
1766*ff879b07SJung-uk Kim #define ACPI_PMTT_MEMORY_TYPE           0x000C
1767*ff879b07SJung-uk Kim 
1768*ff879b07SJung-uk Kim 
1769*ff879b07SJung-uk Kim /*
1770*ff879b07SJung-uk Kim  * PMTT subtables, correspond to Type in acpi_pmtt_header
1771*ff879b07SJung-uk Kim  */
1772*ff879b07SJung-uk Kim 
1773*ff879b07SJung-uk Kim 
1774*ff879b07SJung-uk Kim /* 0: Socket Structure */
1775*ff879b07SJung-uk Kim 
1776*ff879b07SJung-uk Kim typedef struct acpi_pmtt_socket
1777*ff879b07SJung-uk Kim {
1778*ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
1779*ff879b07SJung-uk Kim     UINT16                  SocketId;
1780*ff879b07SJung-uk Kim     UINT16                  Reserved;
1781*ff879b07SJung-uk Kim 
1782*ff879b07SJung-uk Kim } ACPI_PMTT_SOCKET;
1783*ff879b07SJung-uk Kim 
1784*ff879b07SJung-uk Kim 
1785*ff879b07SJung-uk Kim /* 1: Memory Controller subtable */
1786*ff879b07SJung-uk Kim 
1787*ff879b07SJung-uk Kim typedef struct acpi_pmtt_controller
1788*ff879b07SJung-uk Kim {
1789*ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
1790*ff879b07SJung-uk Kim     UINT32                  ReadLatency;
1791*ff879b07SJung-uk Kim     UINT32                  WriteLatency;
1792*ff879b07SJung-uk Kim     UINT32                  ReadBandwidth;
1793*ff879b07SJung-uk Kim     UINT32                  WriteBandwidth;
1794*ff879b07SJung-uk Kim     UINT16                  AccessWidth;
1795*ff879b07SJung-uk Kim     UINT16                  Alignment;
1796*ff879b07SJung-uk Kim     UINT16                  Reserved;
1797*ff879b07SJung-uk Kim     UINT16                  DomainCount;
1798*ff879b07SJung-uk Kim 
1799*ff879b07SJung-uk Kim } ACPI_PMTT_CONTROLLER;
1800*ff879b07SJung-uk Kim 
1801*ff879b07SJung-uk Kim /* 1a: Proximity Domain substructure */
1802*ff879b07SJung-uk Kim 
1803*ff879b07SJung-uk Kim typedef struct acpi_pmtt_domain
1804*ff879b07SJung-uk Kim {
1805*ff879b07SJung-uk Kim     UINT32                  ProximityDomain;
1806*ff879b07SJung-uk Kim 
1807*ff879b07SJung-uk Kim } ACPI_PMTT_DOMAIN;
1808*ff879b07SJung-uk Kim 
1809*ff879b07SJung-uk Kim 
1810*ff879b07SJung-uk Kim /* 2: Physical Component Identifier (DIMM) */
1811*ff879b07SJung-uk Kim 
1812*ff879b07SJung-uk Kim typedef struct acpi_pmtt_physical_component
1813*ff879b07SJung-uk Kim {
1814*ff879b07SJung-uk Kim     ACPI_PMTT_HEADER        Header;
1815*ff879b07SJung-uk Kim     UINT16                  ComponentId;
1816*ff879b07SJung-uk Kim     UINT16                  Reserved;
1817*ff879b07SJung-uk Kim     UINT32                  MemorySize;
1818*ff879b07SJung-uk Kim     UINT32                  BiosHandle;
1819*ff879b07SJung-uk Kim 
1820*ff879b07SJung-uk Kim } ACPI_PMTT_PHYSICAL_COMPONENT;
1821*ff879b07SJung-uk Kim 
1822*ff879b07SJung-uk Kim 
1823*ff879b07SJung-uk Kim /*******************************************************************************
1824*ff879b07SJung-uk Kim  *
1825*ff879b07SJung-uk Kim  * PPTT - Processor Properties Topology Table (ACPI 6.2)
1826*ff879b07SJung-uk Kim  *        Version 1
1827*ff879b07SJung-uk Kim  *
1828*ff879b07SJung-uk Kim  ******************************************************************************/
1829*ff879b07SJung-uk Kim 
1830*ff879b07SJung-uk Kim typedef struct acpi_table_pptt
1831*ff879b07SJung-uk Kim {
1832*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1833*ff879b07SJung-uk Kim 
1834*ff879b07SJung-uk Kim } ACPI_TABLE_PPTT;
1835*ff879b07SJung-uk Kim 
1836*ff879b07SJung-uk Kim /* Values for Type field above */
1837*ff879b07SJung-uk Kim 
1838*ff879b07SJung-uk Kim enum AcpiPpttType
1839*ff879b07SJung-uk Kim {
1840*ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_PROCESSOR            = 0,
1841*ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_CACHE                = 1,
1842*ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_ID                   = 2,
1843*ff879b07SJung-uk Kim     ACPI_PPTT_TYPE_RESERVED             = 3
1844*ff879b07SJung-uk Kim };
1845*ff879b07SJung-uk Kim 
1846*ff879b07SJung-uk Kim 
1847*ff879b07SJung-uk Kim /* 0: Processor Hierarchy Node Structure */
1848*ff879b07SJung-uk Kim 
1849*ff879b07SJung-uk Kim typedef struct acpi_pptt_processor
1850*ff879b07SJung-uk Kim {
1851*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1852*ff879b07SJung-uk Kim     UINT16                  Reserved;
1853*ff879b07SJung-uk Kim     UINT32                  Flags;
1854*ff879b07SJung-uk Kim     UINT32                  Parent;
1855*ff879b07SJung-uk Kim     UINT32                  AcpiProcessorId;
1856*ff879b07SJung-uk Kim     UINT32                  NumberOfPrivResources;
1857*ff879b07SJung-uk Kim 
1858*ff879b07SJung-uk Kim } ACPI_PPTT_PROCESSOR;
1859*ff879b07SJung-uk Kim 
1860*ff879b07SJung-uk Kim /* Flags */
1861*ff879b07SJung-uk Kim 
1862*ff879b07SJung-uk Kim #define ACPI_PPTT_PHYSICAL_PACKAGE          (1)     /* Physical package */
1863*ff879b07SJung-uk Kim #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (2)     /* ACPI Processor ID valid */
1864*ff879b07SJung-uk Kim 
1865*ff879b07SJung-uk Kim 
1866*ff879b07SJung-uk Kim /* 1: Cache Type Structure */
1867*ff879b07SJung-uk Kim 
1868*ff879b07SJung-uk Kim typedef struct acpi_pptt_cache
1869*ff879b07SJung-uk Kim {
1870*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1871*ff879b07SJung-uk Kim     UINT16                  Reserved;
1872*ff879b07SJung-uk Kim     UINT32                  Flags;
1873*ff879b07SJung-uk Kim     UINT32                  NextLevelOfCache;
1874*ff879b07SJung-uk Kim     UINT32                  Size;
1875*ff879b07SJung-uk Kim     UINT32                  NumberOfSets;
1876*ff879b07SJung-uk Kim     UINT8                   Associativity;
1877*ff879b07SJung-uk Kim     UINT8                   Attributes;
1878*ff879b07SJung-uk Kim     UINT16                  LineSize;
1879*ff879b07SJung-uk Kim 
1880*ff879b07SJung-uk Kim } ACPI_PPTT_CACHE;
1881*ff879b07SJung-uk Kim 
1882*ff879b07SJung-uk Kim /* Flags */
1883*ff879b07SJung-uk Kim 
1884*ff879b07SJung-uk Kim #define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)     /* Physical property valid */
1885*ff879b07SJung-uk Kim #define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)  /* Number of sets valid */
1886*ff879b07SJung-uk Kim #define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)  /* Associativity valid */
1887*ff879b07SJung-uk Kim #define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)  /* Allocation type valid */
1888*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)  /* Cache type valid */
1889*ff879b07SJung-uk Kim #define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)  /* Write policy valid */
1890*ff879b07SJung-uk Kim #define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)  /* Line size valid */
1891*ff879b07SJung-uk Kim 
1892*ff879b07SJung-uk Kim /* Masks for Attributes */
1893*ff879b07SJung-uk Kim 
1894*ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)  /* Allocation type */
1895*ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)  /* Cache type */
1896*ff879b07SJung-uk Kim #define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)  /* Write policy */
1897*ff879b07SJung-uk Kim 
1898*ff879b07SJung-uk Kim /* Attributes describing cache */
1899*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)   /* Cache line is allocated on read */
1900*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)  /* Cache line is allocated on write */
1901*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)  /* Cache line is allocated on read and write */
1902*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)  /* Alternate representation of above */
1903*ff879b07SJung-uk Kim 
1904*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)   /* Data cache */
1905*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)  /* Instruction cache */
1906*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)  /* Unified I & D cache */
1907*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)  /* Alternate representation of above */
1908*ff879b07SJung-uk Kim 
1909*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WB           (0x0)   /* Cache is write back */
1910*ff879b07SJung-uk Kim #define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)  /* Cache is write through */
1911*ff879b07SJung-uk Kim 
1912*ff879b07SJung-uk Kim /* 2: ID Structure */
1913*ff879b07SJung-uk Kim 
1914*ff879b07SJung-uk Kim typedef struct acpi_pptt_id
1915*ff879b07SJung-uk Kim {
1916*ff879b07SJung-uk Kim     ACPI_SUBTABLE_HEADER    Header;
1917*ff879b07SJung-uk Kim     UINT16                  Reserved;
1918*ff879b07SJung-uk Kim     UINT32                  VendorId;
1919*ff879b07SJung-uk Kim     UINT64                  Level1Id;
1920*ff879b07SJung-uk Kim     UINT64                  Level2Id;
1921*ff879b07SJung-uk Kim     UINT16                  MajorRev;
1922*ff879b07SJung-uk Kim     UINT16                  MinorRev;
1923*ff879b07SJung-uk Kim     UINT16                  SpinRev;
1924*ff879b07SJung-uk Kim 
1925*ff879b07SJung-uk Kim } ACPI_PPTT_ID;
1926*ff879b07SJung-uk Kim 
1927*ff879b07SJung-uk Kim 
1928*ff879b07SJung-uk Kim /*******************************************************************************
1929*ff879b07SJung-uk Kim  *
1930*ff879b07SJung-uk Kim  * RASF - RAS Feature Table (ACPI 5.0)
1931*ff879b07SJung-uk Kim  *        Version 1
1932*ff879b07SJung-uk Kim  *
1933*ff879b07SJung-uk Kim  ******************************************************************************/
1934*ff879b07SJung-uk Kim 
1935*ff879b07SJung-uk Kim typedef struct acpi_table_rasf
1936*ff879b07SJung-uk Kim {
1937*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
1938*ff879b07SJung-uk Kim     UINT8                   ChannelId[12];
1939*ff879b07SJung-uk Kim 
1940*ff879b07SJung-uk Kim } ACPI_TABLE_RASF;
1941*ff879b07SJung-uk Kim 
1942*ff879b07SJung-uk Kim /* RASF Platform Communication Channel Shared Memory Region */
1943*ff879b07SJung-uk Kim 
1944*ff879b07SJung-uk Kim typedef struct acpi_rasf_shared_memory
1945*ff879b07SJung-uk Kim {
1946*ff879b07SJung-uk Kim     UINT32                  Signature;
1947*ff879b07SJung-uk Kim     UINT16                  Command;
1948*ff879b07SJung-uk Kim     UINT16                  Status;
1949*ff879b07SJung-uk Kim     UINT16                  Version;
1950*ff879b07SJung-uk Kim     UINT8                   Capabilities[16];
1951*ff879b07SJung-uk Kim     UINT8                   SetCapabilities[16];
1952*ff879b07SJung-uk Kim     UINT16                  NumParameterBlocks;
1953*ff879b07SJung-uk Kim     UINT32                  SetCapabilitiesStatus;
1954*ff879b07SJung-uk Kim 
1955*ff879b07SJung-uk Kim } ACPI_RASF_SHARED_MEMORY;
1956*ff879b07SJung-uk Kim 
1957*ff879b07SJung-uk Kim /* RASF Parameter Block Structure Header */
1958*ff879b07SJung-uk Kim 
1959*ff879b07SJung-uk Kim typedef struct acpi_rasf_parameter_block
1960*ff879b07SJung-uk Kim {
1961*ff879b07SJung-uk Kim     UINT16                  Type;
1962*ff879b07SJung-uk Kim     UINT16                  Version;
1963*ff879b07SJung-uk Kim     UINT16                  Length;
1964*ff879b07SJung-uk Kim 
1965*ff879b07SJung-uk Kim } ACPI_RASF_PARAMETER_BLOCK;
1966*ff879b07SJung-uk Kim 
1967*ff879b07SJung-uk Kim /* RASF Parameter Block Structure for PATROL_SCRUB */
1968*ff879b07SJung-uk Kim 
1969*ff879b07SJung-uk Kim typedef struct acpi_rasf_patrol_scrub_parameter
1970*ff879b07SJung-uk Kim {
1971*ff879b07SJung-uk Kim     ACPI_RASF_PARAMETER_BLOCK   Header;
1972*ff879b07SJung-uk Kim     UINT16                      PatrolScrubCommand;
1973*ff879b07SJung-uk Kim     UINT64                      RequestedAddressRange[2];
1974*ff879b07SJung-uk Kim     UINT64                      ActualAddressRange[2];
1975*ff879b07SJung-uk Kim     UINT16                      Flags;
1976*ff879b07SJung-uk Kim     UINT8                       RequestedSpeed;
1977*ff879b07SJung-uk Kim 
1978*ff879b07SJung-uk Kim } ACPI_RASF_PATROL_SCRUB_PARAMETER;
1979*ff879b07SJung-uk Kim 
1980*ff879b07SJung-uk Kim /* Masks for Flags and Speed fields above */
1981*ff879b07SJung-uk Kim 
1982*ff879b07SJung-uk Kim #define ACPI_RASF_SCRUBBER_RUNNING      1
1983*ff879b07SJung-uk Kim #define ACPI_RASF_SPEED                 (7<<1)
1984*ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_SLOW            (0<<1)
1985*ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_MEDIUM          (4<<1)
1986*ff879b07SJung-uk Kim #define ACPI_RASF_SPEED_FAST            (7<<1)
1987*ff879b07SJung-uk Kim 
1988*ff879b07SJung-uk Kim /* Channel Commands */
1989*ff879b07SJung-uk Kim 
1990*ff879b07SJung-uk Kim enum AcpiRasfCommands
1991*ff879b07SJung-uk Kim {
1992*ff879b07SJung-uk Kim     ACPI_RASF_EXECUTE_RASF_COMMAND      = 1
1993*ff879b07SJung-uk Kim };
1994*ff879b07SJung-uk Kim 
1995*ff879b07SJung-uk Kim /* Platform RAS Capabilities */
1996*ff879b07SJung-uk Kim 
1997*ff879b07SJung-uk Kim enum AcpiRasfCapabiliities
1998*ff879b07SJung-uk Kim {
1999*ff879b07SJung-uk Kim     ACPI_HW_PATROL_SCRUB_SUPPORTED      = 0,
2000*ff879b07SJung-uk Kim     ACPI_SW_PATROL_SCRUB_EXPOSED        = 1
2001*ff879b07SJung-uk Kim };
2002*ff879b07SJung-uk Kim 
2003*ff879b07SJung-uk Kim /* Patrol Scrub Commands */
2004*ff879b07SJung-uk Kim 
2005*ff879b07SJung-uk Kim enum AcpiRasfPatrolScrubCommands
2006*ff879b07SJung-uk Kim {
2007*ff879b07SJung-uk Kim     ACPI_RASF_GET_PATROL_PARAMETERS     = 1,
2008*ff879b07SJung-uk Kim     ACPI_RASF_START_PATROL_SCRUBBER     = 2,
2009*ff879b07SJung-uk Kim     ACPI_RASF_STOP_PATROL_SCRUBBER      = 3
2010*ff879b07SJung-uk Kim };
2011*ff879b07SJung-uk Kim 
2012*ff879b07SJung-uk Kim /* Channel Command flags */
2013*ff879b07SJung-uk Kim 
2014*ff879b07SJung-uk Kim #define ACPI_RASF_GENERATE_SCI          (1<<15)
2015*ff879b07SJung-uk Kim 
2016*ff879b07SJung-uk Kim /* Status values */
2017*ff879b07SJung-uk Kim 
2018*ff879b07SJung-uk Kim enum AcpiRasfStatus
2019*ff879b07SJung-uk Kim {
2020*ff879b07SJung-uk Kim     ACPI_RASF_SUCCESS                   = 0,
2021*ff879b07SJung-uk Kim     ACPI_RASF_NOT_VALID                 = 1,
2022*ff879b07SJung-uk Kim     ACPI_RASF_NOT_SUPPORTED             = 2,
2023*ff879b07SJung-uk Kim     ACPI_RASF_BUSY                      = 3,
2024*ff879b07SJung-uk Kim     ACPI_RASF_FAILED                    = 4,
2025*ff879b07SJung-uk Kim     ACPI_RASF_ABORTED                   = 5,
2026*ff879b07SJung-uk Kim     ACPI_RASF_INVALID_DATA              = 6
2027*ff879b07SJung-uk Kim };
2028*ff879b07SJung-uk Kim 
2029*ff879b07SJung-uk Kim /* Status flags */
2030*ff879b07SJung-uk Kim 
2031*ff879b07SJung-uk Kim #define ACPI_RASF_COMMAND_COMPLETE      (1)
2032*ff879b07SJung-uk Kim #define ACPI_RASF_SCI_DOORBELL          (1<<1)
2033*ff879b07SJung-uk Kim #define ACPI_RASF_ERROR                 (1<<2)
2034*ff879b07SJung-uk Kim #define ACPI_RASF_STATUS                (0x1F<<3)
2035*ff879b07SJung-uk Kim 
2036*ff879b07SJung-uk Kim 
2037*ff879b07SJung-uk Kim /*******************************************************************************
2038*ff879b07SJung-uk Kim  *
2039*ff879b07SJung-uk Kim  * SBST - Smart Battery Specification Table
2040*ff879b07SJung-uk Kim  *        Version 1
2041*ff879b07SJung-uk Kim  *
2042*ff879b07SJung-uk Kim  ******************************************************************************/
2043*ff879b07SJung-uk Kim 
2044*ff879b07SJung-uk Kim typedef struct acpi_table_sbst
2045*ff879b07SJung-uk Kim {
2046*ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2047*ff879b07SJung-uk Kim     UINT32                  WarningLevel;
2048*ff879b07SJung-uk Kim     UINT32                  LowLevel;
2049*ff879b07SJung-uk Kim     UINT32                  CriticalLevel;
2050*ff879b07SJung-uk Kim 
2051*ff879b07SJung-uk Kim } ACPI_TABLE_SBST;
2052*ff879b07SJung-uk Kim 
2053*ff879b07SJung-uk Kim 
20545f9b24faSJung-uk Kim /*******************************************************************************
20555f9b24faSJung-uk Kim  *
20565f9b24faSJung-uk Kim  * SDEI - Software Delegated Exception Interface Descriptor Table
20575f9b24faSJung-uk Kim  *
20585f9b24faSJung-uk Kim  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
20595f9b24faSJung-uk Kim  * May 8th, 2017. Copyright 2017 ARM Ltd.
20605f9b24faSJung-uk Kim  *
20615f9b24faSJung-uk Kim  ******************************************************************************/
20625f9b24faSJung-uk Kim 
20635f9b24faSJung-uk Kim typedef struct acpi_table_sdei
20645f9b24faSJung-uk Kim {
20655f9b24faSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
20665f9b24faSJung-uk Kim 
20675f9b24faSJung-uk Kim } ACPI_TABLE_SDEI;
20685f9b24faSJung-uk Kim 
20699c48c75eSJung-uk Kim 
20709c48c75eSJung-uk Kim /*******************************************************************************
20719c48c75eSJung-uk Kim  *
2072*ff879b07SJung-uk Kim  * SDEV - Secure Devices Table (ACPI 6.2)
2073*ff879b07SJung-uk Kim  *        Version 1
2074dcbce41eSJung-uk Kim  *
2075dcbce41eSJung-uk Kim  ******************************************************************************/
2076dcbce41eSJung-uk Kim 
2077*ff879b07SJung-uk Kim typedef struct acpi_table_sdev
2078dcbce41eSJung-uk Kim {
2079dcbce41eSJung-uk Kim     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
2080dcbce41eSJung-uk Kim 
2081*ff879b07SJung-uk Kim } ACPI_TABLE_SDEV;
2082dcbce41eSJung-uk Kim 
2083dcbce41eSJung-uk Kim 
2084*ff879b07SJung-uk Kim typedef struct acpi_sdev_header
2085d6dd1baeSJung-uk Kim {
2086*ff879b07SJung-uk Kim     UINT8                   Type;
2087*ff879b07SJung-uk Kim     UINT8                   Flags;
2088*ff879b07SJung-uk Kim     UINT16                  Length;
2089d6dd1baeSJung-uk Kim 
2090*ff879b07SJung-uk Kim } ACPI_SDEV_HEADER;
2091f8146b88SJung-uk Kim 
2092d6dd1baeSJung-uk Kim 
2093*ff879b07SJung-uk Kim /* Values for subtable type above */
2094d6dd1baeSJung-uk Kim 
2095*ff879b07SJung-uk Kim enum AcpiSdevType
2096d6dd1baeSJung-uk Kim {
2097*ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_NAMESPACE_DEVICE     = 0,
2098*ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
2099*ff879b07SJung-uk Kim     ACPI_SDEV_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
2100d6dd1baeSJung-uk Kim };
2101d6dd1baeSJung-uk Kim 
2102*ff879b07SJung-uk Kim /* Values for flags above */
2103d6dd1baeSJung-uk Kim 
2104*ff879b07SJung-uk Kim #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
2105fe0f0bbbSJung-uk Kim 
2106fe0f0bbbSJung-uk Kim /*
2107*ff879b07SJung-uk Kim  * SDEV subtables
2108fe0f0bbbSJung-uk Kim  */
2109fe0f0bbbSJung-uk Kim 
2110*ff879b07SJung-uk Kim /* 0: Namespace Device Based Secure Device Structure */
2111fe0f0bbbSJung-uk Kim 
2112*ff879b07SJung-uk Kim typedef struct acpi_sdev_namespace
2113fe0f0bbbSJung-uk Kim {
2114*ff879b07SJung-uk Kim     ACPI_SDEV_HEADER        Header;
2115*ff879b07SJung-uk Kim     UINT16                  DeviceIdOffset;
2116*ff879b07SJung-uk Kim     UINT16                  DeviceIdLength;
2117*ff879b07SJung-uk Kim     UINT16                  VendorDataOffset;
2118*ff879b07SJung-uk Kim     UINT16                  VendorDataLength;
2119d6dd1baeSJung-uk Kim 
2120*ff879b07SJung-uk Kim } ACPI_SDEV_NAMESPACE;
21215ef50723SJung-uk Kim 
2122*ff879b07SJung-uk Kim /* 1: PCIe Endpoint Device Based Device Structure */
2123*ff879b07SJung-uk Kim 
2124*ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie
21255ef50723SJung-uk Kim {
2126*ff879b07SJung-uk Kim     ACPI_SDEV_HEADER        Header;
2127*ff879b07SJung-uk Kim     UINT16                  Segment;
2128*ff879b07SJung-uk Kim     UINT16                  StartBus;
2129*ff879b07SJung-uk Kim     UINT16                  PathOffset;
2130*ff879b07SJung-uk Kim     UINT16                  PathLength;
2131*ff879b07SJung-uk Kim     UINT16                  VendorDataOffset;
2132*ff879b07SJung-uk Kim     UINT16                  VendorDataLength;
2133*ff879b07SJung-uk Kim 
2134*ff879b07SJung-uk Kim } ACPI_SDEV_PCIE;
2135*ff879b07SJung-uk Kim 
2136*ff879b07SJung-uk Kim /* 1a: PCIe Endpoint path entry */
2137*ff879b07SJung-uk Kim 
2138*ff879b07SJung-uk Kim typedef struct acpi_sdev_pcie_path
2139*ff879b07SJung-uk Kim {
21405ef50723SJung-uk Kim     UINT8                   Device;
21415ef50723SJung-uk Kim     UINT8                   Function;
21425ef50723SJung-uk Kim 
2143*ff879b07SJung-uk Kim } ACPI_SDEV_PCIE_PATH;
2144af051161SJung-uk Kim 
2145af051161SJung-uk Kim 
2146d6dd1baeSJung-uk Kim /* Reset to default packing */
2147d6dd1baeSJung-uk Kim 
2148d6dd1baeSJung-uk Kim #pragma pack()
2149d6dd1baeSJung-uk Kim 
2150d6dd1baeSJung-uk Kim #endif /* __ACTBL2_H__ */
2151