xref: /dflybsd-src/sys/contrib/dev/acpica/source/common/dmtable.c (revision aab122a655a344f78225be7816e4d6f856867832)
10d02842fSSascha Wildner /******************************************************************************
20d02842fSSascha Wildner  *
30d02842fSSascha Wildner  * Module Name: dmtable - Support for ACPI tables that contain no AML code
40d02842fSSascha Wildner  *
50d02842fSSascha Wildner  *****************************************************************************/
60d02842fSSascha Wildner 
7b4315fc7SSascha Wildner /******************************************************************************
8b4315fc7SSascha Wildner  *
9b4315fc7SSascha Wildner  * 1. Copyright Notice
10b4315fc7SSascha Wildner  *
11383048acSSascha Wildner  * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
120d02842fSSascha Wildner  * All rights reserved.
130d02842fSSascha Wildner  *
14b4315fc7SSascha Wildner  * 2. License
15b4315fc7SSascha Wildner  *
16b4315fc7SSascha Wildner  * 2.1. This is your license from Intel Corp. under its intellectual property
17b4315fc7SSascha Wildner  * rights. You may have additional license terms from the party that provided
18b4315fc7SSascha Wildner  * you this software, covering your right to use that party's intellectual
19b4315fc7SSascha Wildner  * property rights.
20b4315fc7SSascha Wildner  *
21b4315fc7SSascha Wildner  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22b4315fc7SSascha Wildner  * copy of the source code appearing in this file ("Covered Code") an
23b4315fc7SSascha Wildner  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24b4315fc7SSascha Wildner  * base code distributed originally by Intel ("Original Intel Code") to copy,
25b4315fc7SSascha Wildner  * make derivatives, distribute, use and display any portion of the Covered
26b4315fc7SSascha Wildner  * Code in any form, with the right to sublicense such rights; and
27b4315fc7SSascha Wildner  *
28b4315fc7SSascha Wildner  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29b4315fc7SSascha Wildner  * license (with the right to sublicense), under only those claims of Intel
30b4315fc7SSascha Wildner  * patents that are infringed by the Original Intel Code, to make, use, sell,
31b4315fc7SSascha Wildner  * offer to sell, and import the Covered Code and derivative works thereof
32b4315fc7SSascha Wildner  * solely to the minimum extent necessary to exercise the above copyright
33b4315fc7SSascha Wildner  * license, and in no event shall the patent license extend to any additions
34b4315fc7SSascha Wildner  * to or modifications of the Original Intel Code. No other license or right
35b4315fc7SSascha Wildner  * is granted directly or by implication, estoppel or otherwise;
36b4315fc7SSascha Wildner  *
37b4315fc7SSascha Wildner  * The above copyright and patent license is granted only if the following
38b4315fc7SSascha Wildner  * conditions are met:
39b4315fc7SSascha Wildner  *
40b4315fc7SSascha Wildner  * 3. Conditions
41b4315fc7SSascha Wildner  *
42b4315fc7SSascha Wildner  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43b4315fc7SSascha Wildner  * Redistribution of source code of any substantial portion of the Covered
44b4315fc7SSascha Wildner  * Code or modification with rights to further distribute source must include
45b4315fc7SSascha Wildner  * the above Copyright Notice, the above License, this list of Conditions,
46b4315fc7SSascha Wildner  * and the following Disclaimer and Export Compliance provision. In addition,
47b4315fc7SSascha Wildner  * Licensee must cause all Covered Code to which Licensee contributes to
48b4315fc7SSascha Wildner  * contain a file documenting the changes Licensee made to create that Covered
49b4315fc7SSascha Wildner  * Code and the date of any change. Licensee must include in that file the
50b4315fc7SSascha Wildner  * documentation of any changes made by any predecessor Licensee. Licensee
51b4315fc7SSascha Wildner  * must include a prominent statement that the modification is derived,
52b4315fc7SSascha Wildner  * directly or indirectly, from Original Intel Code.
53b4315fc7SSascha Wildner  *
54b4315fc7SSascha Wildner  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55b4315fc7SSascha Wildner  * Redistribution of source code of any substantial portion of the Covered
56b4315fc7SSascha Wildner  * Code or modification without rights to further distribute source must
57b4315fc7SSascha Wildner  * include the following Disclaimer and Export Compliance provision in the
58b4315fc7SSascha Wildner  * documentation and/or other materials provided with distribution. In
59b4315fc7SSascha Wildner  * addition, Licensee may not authorize further sublicense of source of any
60b4315fc7SSascha Wildner  * portion of the Covered Code, and must include terms to the effect that the
61b4315fc7SSascha Wildner  * license from Licensee to its licensee is limited to the intellectual
62b4315fc7SSascha Wildner  * property embodied in the software Licensee provides to its licensee, and
63b4315fc7SSascha Wildner  * not to intellectual property embodied in modifications its licensee may
64b4315fc7SSascha Wildner  * make.
65b4315fc7SSascha Wildner  *
66b4315fc7SSascha Wildner  * 3.3. Redistribution of Executable. Redistribution in executable form of any
67b4315fc7SSascha Wildner  * substantial portion of the Covered Code or modification must reproduce the
68b4315fc7SSascha Wildner  * above Copyright Notice, and the following Disclaimer and Export Compliance
69b4315fc7SSascha Wildner  * provision in the documentation and/or other materials provided with the
70b4315fc7SSascha Wildner  * distribution.
71b4315fc7SSascha Wildner  *
72b4315fc7SSascha Wildner  * 3.4. Intel retains all right, title, and interest in and to the Original
73b4315fc7SSascha Wildner  * Intel Code.
74b4315fc7SSascha Wildner  *
75b4315fc7SSascha Wildner  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76b4315fc7SSascha Wildner  * Intel shall be used in advertising or otherwise to promote the sale, use or
77b4315fc7SSascha Wildner  * other dealings in products derived from or relating to the Covered Code
78b4315fc7SSascha Wildner  * without prior written authorization from Intel.
79b4315fc7SSascha Wildner  *
80b4315fc7SSascha Wildner  * 4. Disclaimer and Export Compliance
81b4315fc7SSascha Wildner  *
82b4315fc7SSascha Wildner  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83b4315fc7SSascha Wildner  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84b4315fc7SSascha Wildner  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85b4315fc7SSascha Wildner  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86b4315fc7SSascha Wildner  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87b4315fc7SSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88b4315fc7SSascha Wildner  * PARTICULAR PURPOSE.
89b4315fc7SSascha Wildner  *
90b4315fc7SSascha Wildner  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91b4315fc7SSascha Wildner  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92b4315fc7SSascha Wildner  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93b4315fc7SSascha Wildner  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94b4315fc7SSascha Wildner  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95b4315fc7SSascha Wildner  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96b4315fc7SSascha Wildner  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97b4315fc7SSascha Wildner  * LIMITED REMEDY.
98b4315fc7SSascha Wildner  *
99b4315fc7SSascha Wildner  * 4.3. Licensee shall not export, either directly or indirectly, any of this
100b4315fc7SSascha Wildner  * software or system incorporating such software without first obtaining any
101b4315fc7SSascha Wildner  * required license or other approval from the U. S. Department of Commerce or
102b4315fc7SSascha Wildner  * any other agency or department of the United States Government. In the
103b4315fc7SSascha Wildner  * event Licensee exports any such software from the United States or
104b4315fc7SSascha Wildner  * re-exports any such software from a foreign destination, Licensee shall
105b4315fc7SSascha Wildner  * ensure that the distribution and export/re-export of the software is in
106b4315fc7SSascha Wildner  * compliance with all laws, regulations, orders, or other restrictions of the
107b4315fc7SSascha Wildner  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108b4315fc7SSascha Wildner  * any of its subsidiaries will export/re-export any technical data, process,
109b4315fc7SSascha Wildner  * software, or service, directly or indirectly, to any country for which the
110b4315fc7SSascha Wildner  * United States government or any agency thereof requires an export license,
111b4315fc7SSascha Wildner  * other governmental approval, or letter of assurance, without first obtaining
112b4315fc7SSascha Wildner  * such license, approval or letter.
113b4315fc7SSascha Wildner  *
114b4315fc7SSascha Wildner  *****************************************************************************
115b4315fc7SSascha Wildner  *
116b4315fc7SSascha Wildner  * Alternatively, you may choose to be licensed under the terms of the
117b4315fc7SSascha Wildner  * following license:
118b4315fc7SSascha Wildner  *
1190d02842fSSascha Wildner  * Redistribution and use in source and binary forms, with or without
1200d02842fSSascha Wildner  * modification, are permitted provided that the following conditions
1210d02842fSSascha Wildner  * are met:
1220d02842fSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
1230d02842fSSascha Wildner  *    notice, this list of conditions, and the following disclaimer,
1240d02842fSSascha Wildner  *    without modification.
1250d02842fSSascha Wildner  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1260d02842fSSascha Wildner  *    substantially similar to the "NO WARRANTY" disclaimer below
1270d02842fSSascha Wildner  *    ("Disclaimer") and any redistribution must be conditioned upon
1280d02842fSSascha Wildner  *    including a substantially similar Disclaimer requirement for further
1290d02842fSSascha Wildner  *    binary redistribution.
1300d02842fSSascha Wildner  * 3. Neither the names of the above-listed copyright holders nor the names
1310d02842fSSascha Wildner  *    of any contributors may be used to endorse or promote products derived
1320d02842fSSascha Wildner  *    from this software without specific prior written permission.
1330d02842fSSascha Wildner  *
134b4315fc7SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135b4315fc7SSascha Wildner  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136b4315fc7SSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137b4315fc7SSascha Wildner  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138b4315fc7SSascha Wildner  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139b4315fc7SSascha Wildner  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140b4315fc7SSascha Wildner  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141b4315fc7SSascha Wildner  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142b4315fc7SSascha Wildner  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143b4315fc7SSascha Wildner  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144b4315fc7SSascha Wildner  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145b4315fc7SSascha Wildner  *
146b4315fc7SSascha Wildner  * Alternatively, you may choose to be licensed under the terms of the
1470d02842fSSascha Wildner  * GNU General Public License ("GPL") version 2 as published by the Free
1480d02842fSSascha Wildner  * Software Foundation.
1490d02842fSSascha Wildner  *
150b4315fc7SSascha Wildner  *****************************************************************************/
1510d02842fSSascha Wildner 
1520d02842fSSascha Wildner #include "acpi.h"
1530d02842fSSascha Wildner #include "accommon.h"
1540d02842fSSascha Wildner #include "acdisasm.h"
1550d02842fSSascha Wildner #include "actables.h"
1560d02842fSSascha Wildner #include "aslcompiler.h"
1570d02842fSSascha Wildner 
1580d02842fSSascha Wildner /* This module used for application-level code only */
1590d02842fSSascha Wildner 
1600d02842fSSascha Wildner #define _COMPONENT          ACPI_CA_DISASSEMBLER
1610d02842fSSascha Wildner         ACPI_MODULE_NAME    ("dmtable")
1620d02842fSSascha Wildner 
163896f2e3aSSascha Wildner const AH_TABLE *
164896f2e3aSSascha Wildner AcpiAhGetTableInfo (
165896f2e3aSSascha Wildner     char                    *Signature);
166896f2e3aSSascha Wildner 
167896f2e3aSSascha Wildner 
1680d02842fSSascha Wildner /* Common format strings for commented values */
1690d02842fSSascha Wildner 
1700d02842fSSascha Wildner #define UINT8_FORMAT            "%2.2X [%s]\n"
171*aab122a6SSascha Wildner #define UINT8_FORMAT_NO_NEWLINE "%2.2X [%s]"
1720d02842fSSascha Wildner #define UINT16_FORMAT           "%4.4X [%s]\n"
1730d02842fSSascha Wildner #define UINT32_FORMAT           "%8.8X [%s]\n"
1740d02842fSSascha Wildner #define STRING_FORMAT           "[%s]\n"
1750d02842fSSascha Wildner 
1760d02842fSSascha Wildner /* These tables map a subtable type to a description string */
1770d02842fSSascha Wildner 
1780672a19bSSascha Wildner static const char           *AcpiDmAestResourceNames[] =
1790672a19bSSascha Wildner {
1800672a19bSSascha Wildner     "Cache Resource",
1810672a19bSSascha Wildner     "TLB Resource",
1820672a19bSSascha Wildner     "Generic Resource",
1830672a19bSSascha Wildner     "Unknown Resource Type"         /* Reserved */
1840672a19bSSascha Wildner };
1850672a19bSSascha Wildner 
1860672a19bSSascha Wildner static const char           *AcpiDmAestSubnames[] =
1870672a19bSSascha Wildner {
1880672a19bSSascha Wildner     "Processor Error Node",
1890672a19bSSascha Wildner     "Memory Error Node",
1900672a19bSSascha Wildner     "SMMU Error Node",
1910672a19bSSascha Wildner     "Vendor-defined Error Node",
1920672a19bSSascha Wildner     "GIC Error Node",
1930672a19bSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
1940672a19bSSascha Wildner };
1950672a19bSSascha Wildner 
1960672a19bSSascha Wildner static const char           *AcpiDmAestCacheNames[] =
1970672a19bSSascha Wildner {
1980672a19bSSascha Wildner     "Data Cache",
1990672a19bSSascha Wildner     "Instruction Cache",
2000672a19bSSascha Wildner     "Unified Cache",
2010672a19bSSascha Wildner     "Unknown Cache Type"            /* Reserved */
2020672a19bSSascha Wildner };
2030672a19bSSascha Wildner 
2040672a19bSSascha Wildner static const char           *AcpiDmAestGicNames[] =
2050672a19bSSascha Wildner {
2060672a19bSSascha Wildner     "GIC CPU",
2070672a19bSSascha Wildner     "GIC Distributor",
2080672a19bSSascha Wildner     "GIC Redistributor",
2090672a19bSSascha Wildner     "GIC ITS",
2100672a19bSSascha Wildner     "Unknown GIC Interface Type"    /* Reserved */
2110672a19bSSascha Wildner };
2120672a19bSSascha Wildner 
2130672a19bSSascha Wildner static const char           *AcpiDmAestXfaceNames[] =
2140672a19bSSascha Wildner {
2150672a19bSSascha Wildner     "System Register Interface",
2160672a19bSSascha Wildner     "Memory Mapped Interface",
2170672a19bSSascha Wildner     "Unknown Interface Type"        /* Reserved */
2180672a19bSSascha Wildner };
2190672a19bSSascha Wildner 
2200672a19bSSascha Wildner static const char           *AcpiDmAestXruptNames[] =
2210672a19bSSascha Wildner {
2220672a19bSSascha Wildner     "Fault Handling Interrupt",
2230672a19bSSascha Wildner     "Error Recovery Interrupt",
2240672a19bSSascha Wildner     "Unknown Interrupt Type"        /* Reserved */
2250672a19bSSascha Wildner };
2260672a19bSSascha Wildner 
2270d02842fSSascha Wildner static const char           *AcpiDmAsfSubnames[] =
2280d02842fSSascha Wildner {
2290d02842fSSascha Wildner     "ASF Information",
2300d02842fSSascha Wildner     "ASF Alerts",
2310d02842fSSascha Wildner     "ASF Remote Control",
2320d02842fSSascha Wildner     "ASF RMCP Boot Options",
2330d02842fSSascha Wildner     "ASF Address",
234896f2e3aSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
2350d02842fSSascha Wildner };
2360d02842fSSascha Wildner 
23701d5d5dfSSascha Wildner static const char           *AcpiDmCedtSubnames[] =
23801d5d5dfSSascha Wildner {
23901d5d5dfSSascha Wildner     "CXL Host Bridge Structure",
2404898bea4SSascha Wildner     "CXL Fixed Memory Window Structure",
24101d5d5dfSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
24201d5d5dfSSascha Wildner };
24301d5d5dfSSascha Wildner 
2440d02842fSSascha Wildner static const char           *AcpiDmDmarSubnames[] =
2450d02842fSSascha Wildner {
2460d02842fSSascha Wildner     "Hardware Unit Definition",
2470d02842fSSascha Wildner     "Reserved Memory Region",
2480d02842fSSascha Wildner     "Root Port ATS Capability",
2490d02842fSSascha Wildner     "Remapping Hardware Static Affinity",
250066b6da2SSascha Wildner     "ACPI Namespace Device Declaration",
251896f2e3aSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
2520d02842fSSascha Wildner };
2530d02842fSSascha Wildner 
254066b6da2SSascha Wildner static const char           *AcpiDmDmarScope[] =
255066b6da2SSascha Wildner {
256066b6da2SSascha Wildner     "Reserved value",
257066b6da2SSascha Wildner     "PCI Endpoint Device",
258066b6da2SSascha Wildner     "PCI Bridge Device",
259066b6da2SSascha Wildner     "IOAPIC Device",
260066b6da2SSascha Wildner     "Message-capable HPET Device",
261066b6da2SSascha Wildner     "Namespace Device",
262066b6da2SSascha Wildner     "Unknown Scope Type"            /* Reserved */
263066b6da2SSascha Wildner };
264066b6da2SSascha Wildner 
2650d02842fSSascha Wildner static const char           *AcpiDmEinjActions[] =
2660d02842fSSascha Wildner {
2670d02842fSSascha Wildner     "Begin Operation",
2680d02842fSSascha Wildner     "Get Trigger Table",
2690d02842fSSascha Wildner     "Set Error Type",
2700d02842fSSascha Wildner     "Get Error Type",
2710d02842fSSascha Wildner     "End Operation",
2720d02842fSSascha Wildner     "Execute Operation",
2730d02842fSSascha Wildner     "Check Busy Status",
2740d02842fSSascha Wildner     "Get Command Status",
2750d02842fSSascha Wildner     "Set Error Type With Address",
2762ffe9f16SSascha Wildner     "Get Execute Timings",
2770d02842fSSascha Wildner     "Unknown Action"
2780d02842fSSascha Wildner };
2790d02842fSSascha Wildner 
2800d02842fSSascha Wildner static const char           *AcpiDmEinjInstructions[] =
2810d02842fSSascha Wildner {
2820d02842fSSascha Wildner     "Read Register",
2830d02842fSSascha Wildner     "Read Register Value",
2840d02842fSSascha Wildner     "Write Register",
2850d02842fSSascha Wildner     "Write Register Value",
2860d02842fSSascha Wildner     "Noop",
2870d02842fSSascha Wildner     "Flush Cacheline",
2880d02842fSSascha Wildner     "Unknown Instruction"
2890d02842fSSascha Wildner };
2900d02842fSSascha Wildner 
2910d02842fSSascha Wildner static const char           *AcpiDmErstActions[] =
2920d02842fSSascha Wildner {
2930d02842fSSascha Wildner     "Begin Write Operation",
2940d02842fSSascha Wildner     "Begin Read Operation",
2950d02842fSSascha Wildner     "Begin Clear Operation",
2960d02842fSSascha Wildner     "End Operation",
2970d02842fSSascha Wildner     "Set Record Offset",
2980d02842fSSascha Wildner     "Execute Operation",
2990d02842fSSascha Wildner     "Check Busy Status",
3000d02842fSSascha Wildner     "Get Command Status",
3010d02842fSSascha Wildner     "Get Record Identifier",
3020d02842fSSascha Wildner     "Set Record Identifier",
3030d02842fSSascha Wildner     "Get Record Count",
3040d02842fSSascha Wildner     "Begin Dummy Write",
3050d02842fSSascha Wildner     "Unused/Unknown Action",
3060d02842fSSascha Wildner     "Get Error Address Range",
3070d02842fSSascha Wildner     "Get Error Address Length",
3080d02842fSSascha Wildner     "Get Error Attributes",
3092ffe9f16SSascha Wildner     "Execute Timings",
3100d02842fSSascha Wildner     "Unknown Action"
3110d02842fSSascha Wildner };
3120d02842fSSascha Wildner 
3130d02842fSSascha Wildner static const char           *AcpiDmErstInstructions[] =
3140d02842fSSascha Wildner {
3150d02842fSSascha Wildner     "Read Register",
3160d02842fSSascha Wildner     "Read Register Value",
3170d02842fSSascha Wildner     "Write Register",
3180d02842fSSascha Wildner     "Write Register Value",
3190d02842fSSascha Wildner     "Noop",
3200d02842fSSascha Wildner     "Load Var1",
3210d02842fSSascha Wildner     "Load Var2",
3220d02842fSSascha Wildner     "Store Var1",
3230d02842fSSascha Wildner     "Add",
3240d02842fSSascha Wildner     "Subtract",
3250d02842fSSascha Wildner     "Add Value",
3260d02842fSSascha Wildner     "Subtract Value",
3270d02842fSSascha Wildner     "Stall",
3280d02842fSSascha Wildner     "Stall While True",
3290d02842fSSascha Wildner     "Skip Next If True",
3300d02842fSSascha Wildner     "GoTo",
3310d02842fSSascha Wildner     "Set Source Address",
3320d02842fSSascha Wildner     "Set Destination Address",
3330d02842fSSascha Wildner     "Move Data",
3340d02842fSSascha Wildner     "Unknown Instruction"
3350d02842fSSascha Wildner };
3360d02842fSSascha Wildner 
337066b6da2SSascha Wildner static const char           *AcpiDmGtdtSubnames[] =
338066b6da2SSascha Wildner {
339066b6da2SSascha Wildner     "Generic Timer Block",
340066b6da2SSascha Wildner     "Generic Watchdog Timer",
341896f2e3aSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
342066b6da2SSascha Wildner };
343066b6da2SSascha Wildner 
3440d02842fSSascha Wildner static const char           *AcpiDmHestSubnames[] =
3450d02842fSSascha Wildner {
3460d02842fSSascha Wildner     "IA-32 Machine Check Exception",
3470d02842fSSascha Wildner     "IA-32 Corrected Machine Check",
3480d02842fSSascha Wildner     "IA-32 Non-Maskable Interrupt",
3497bcb6cafSSascha Wildner     "Unknown Subtable Type",        /* 3 - Reserved */
3507bcb6cafSSascha Wildner     "Unknown Subtable Type",        /* 4 - Reserved */
3517bcb6cafSSascha Wildner     "Unknown Subtable Type",        /* 5 - Reserved */
3520d02842fSSascha Wildner     "PCI Express Root Port AER",
3530d02842fSSascha Wildner     "PCI Express AER (AER Endpoint)",
3540d02842fSSascha Wildner     "PCI Express/PCI-X Bridge AER",
3550d02842fSSascha Wildner     "Generic Hardware Error Source",
3567c9678bcSSascha Wildner     "Generic Hardware Error Source V2",
3571093ca81SSascha Wildner     "IA-32 Deferred Machine Check",
358896f2e3aSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
3590d02842fSSascha Wildner };
3600d02842fSSascha Wildner 
3610d02842fSSascha Wildner static const char           *AcpiDmHestNotifySubnames[] =
3620d02842fSSascha Wildner {
3630d02842fSSascha Wildner     "Polled",
3640d02842fSSascha Wildner     "External Interrupt",
3650d02842fSSascha Wildner     "Local Interrupt",
3660d02842fSSascha Wildner     "SCI",
3670d02842fSSascha Wildner     "NMI",
3680d02842fSSascha Wildner     "CMCI",                         /* ACPI 5.0 */
3690d02842fSSascha Wildner     "MCE",                          /* ACPI 5.0 */
3702ffe9f16SSascha Wildner     "GPIO",                         /* ACPI 6.0 */
3712ffe9f16SSascha Wildner     "SEA",                          /* ACPI 6.1 */
3722ffe9f16SSascha Wildner     "SEI",                          /* ACPI 6.1 */
3732ffe9f16SSascha Wildner     "GSIV",                         /* ACPI 6.1 */
3741093ca81SSascha Wildner     "Software Delegated Exception", /* ACPI 6.2 */
3750d02842fSSascha Wildner     "Unknown Notify Type"           /* Reserved */
3760d02842fSSascha Wildner };
3770d02842fSSascha Wildner 
3781093ca81SSascha Wildner static const char           *AcpiDmHmatSubnames[] =
3791093ca81SSascha Wildner {
38000ffa116SSascha Wildner     "Memory Proximity Domain Attributes",
3811093ca81SSascha Wildner     "System Locality Latency and Bandwidth Information",
3821093ca81SSascha Wildner     "Memory Side Cache Information",
3831093ca81SSascha Wildner     "Unknown Structure Type"         /* Reserved */
3841093ca81SSascha Wildner };
3851093ca81SSascha Wildner 
3860d02842fSSascha Wildner static const char           *AcpiDmMadtSubnames[] =
3870d02842fSSascha Wildner {
3880d02842fSSascha Wildner     "Processor Local APIC",             /* ACPI_MADT_TYPE_LOCAL_APIC */
3890d02842fSSascha Wildner     "I/O APIC",                         /* ACPI_MADT_TYPE_IO_APIC */
3900d02842fSSascha Wildner     "Interrupt Source Override",        /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
3910d02842fSSascha Wildner     "NMI Source",                       /* ACPI_MADT_TYPE_NMI_SOURCE */
3920d02842fSSascha Wildner     "Local APIC NMI",                   /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
3930d02842fSSascha Wildner     "Local APIC Address Override",      /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
3940d02842fSSascha Wildner     "I/O SAPIC",                        /* ACPI_MADT_TYPE_IO_SAPIC */
3950d02842fSSascha Wildner     "Local SAPIC",                      /* ACPI_MADT_TYPE_LOCAL_SAPIC */
3960d02842fSSascha Wildner     "Platform Interrupt Sources",       /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
3970d02842fSSascha Wildner     "Processor Local x2APIC",           /* ACPI_MADT_TYPE_LOCAL_X2APIC */
3980d02842fSSascha Wildner     "Local x2APIC NMI",                 /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
3990d02842fSSascha Wildner     "Generic Interrupt Controller",     /* ACPI_MADT_GENERIC_INTERRUPT */
4000d02842fSSascha Wildner     "Generic Interrupt Distributor",    /* ACPI_MADT_GENERIC_DISTRIBUTOR */
401066b6da2SSascha Wildner     "Generic MSI Frame",                /* ACPI_MADT_GENERIC_MSI_FRAME */
402066b6da2SSascha Wildner     "Generic Interrupt Redistributor",  /* ACPI_MADT_GENERIC_REDISTRIBUTOR */
403896f2e3aSSascha Wildner     "Generic Interrupt Translator",     /* ACPI_MADT_GENERIC_TRANSLATOR */
4044898bea4SSascha Wildner     "Mutiprocessor Wakeup",             /* ACPI_MADT_TYPE_MULTIPROC_WAKEUP */
405896f2e3aSSascha Wildner     "Unknown Subtable Type"             /* Reserved */
406896f2e3aSSascha Wildner };
407896f2e3aSSascha Wildner 
408896f2e3aSSascha Wildner static const char           *AcpiDmNfitSubnames[] =
409896f2e3aSSascha Wildner {
410896f2e3aSSascha Wildner     "System Physical Address Range",    /* ACPI_NFIT_TYPE_SYSTEM_ADDRESS */
411896f2e3aSSascha Wildner     "Memory Range Map",                 /* ACPI_NFIT_TYPE_MEMORY_MAP */
412896f2e3aSSascha Wildner     "Interleave Info",                  /* ACPI_NFIT_TYPE_INTERLEAVE */
413896f2e3aSSascha Wildner     "SMBIOS Information",               /* ACPI_NFIT_TYPE_SMBIOS */
414896f2e3aSSascha Wildner     "NVDIMM Control Region",            /* ACPI_NFIT_TYPE_CONTROL_REGION */
415896f2e3aSSascha Wildner     "NVDIMM Block Data Window Region",  /* ACPI_NFIT_TYPE_DATA_REGION */
416896f2e3aSSascha Wildner     "Flush Hint Address",               /* ACPI_NFIT_TYPE_FLUSH_ADDRESS */
4177bcb6cafSSascha Wildner     "Platform Capabilities",            /* ACPI_NFIT_TYPE_CAPABILITIES */
418896f2e3aSSascha Wildner     "Unknown Subtable Type"             /* Reserved */
4190d02842fSSascha Wildner };
4200d02842fSSascha Wildner 
42184fe3360SSascha Wildner static const char           *AcpiDmNhltLinkTypeNames[] =
42284fe3360SSascha Wildner {
42384fe3360SSascha Wildner     "Reserved for HD-Audio",            /* ACPI_NHLT_RESERVED_HD_AUDIO */
42484fe3360SSascha Wildner     "Reserved for DSP",                 /* ACPI_NHLT_RESERVED_DSP */
42584fe3360SSascha Wildner     "Type PDM",                         /* ACPI_NHLT_PDM */
42684fe3360SSascha Wildner     "Type SSP",                         /* ACPI_NHLT_SSP */
42784fe3360SSascha Wildner     "Reserved for SlimBus",             /* ACPI_NHLT_RESERVED_SLIMBUS */
42884fe3360SSascha Wildner     "Reserved for SoundWire",           /* ACPI_NHLT_RESERVED_SOUNDWIRE */
42984fe3360SSascha Wildner     "Unknown Link Type"                 /* Reserved */
43084fe3360SSascha Wildner };
43184fe3360SSascha Wildner 
43284fe3360SSascha Wildner static const char           *AcpiDmNhltDirectionNames[] =
43384fe3360SSascha Wildner {
43484fe3360SSascha Wildner     "Render",                           /* ACPI_NHLT_DIR_RENDER */
43584fe3360SSascha Wildner     "Capture",                          /* ACPI_NHLT_DIR_CAPTURE */
43684fe3360SSascha Wildner     "Render with Loopback",             /* ACPI_NHLT_DIR_RENDER_LOOPBACK */
43784fe3360SSascha Wildner     "Feedback for Render",              /* ACPI_NHLT_DIR_RENDER_FEEDBACK */
43884fe3360SSascha Wildner     "Unknown Direction"                 /* Reserved */
43984fe3360SSascha Wildner };
44084fe3360SSascha Wildner 
441*aab122a6SSascha Wildner static const char           *AcpiDmNhltMicTypeNames[] =
442*aab122a6SSascha Wildner {
443*aab122a6SSascha Wildner     "Omnidirectional",                  /* ACPI_NHLT_MIC_OMNIDIRECTIONAL */
444*aab122a6SSascha Wildner     "Subcardioid",                      /* ACPI_NHLT_MIC_SUBCARDIOID */
445*aab122a6SSascha Wildner     "Cardioid",                         /* ACPI_NHLT_MIC_CARDIOID */
446*aab122a6SSascha Wildner     "SuperCardioid",                    /* ACPI_NHLT_MIC_SUPER_CARDIOID */
447*aab122a6SSascha Wildner     "HyperCardioid",                    /* ACPI_NHLT_MIC_HYPER_CARDIOID */
448*aab122a6SSascha Wildner     "8 Shaped",                         /* ACPI_NHLT_MIC_8_SHAPED */
449*aab122a6SSascha Wildner     "Reserved Mic Type",                /* Reserved */
450*aab122a6SSascha Wildner     "Vendor Defined",                   /* ACPI_NHLT_MIC_VENDOR_DEFINED */
451*aab122a6SSascha Wildner     "Unknown Mic Type"                  /* ACPI_NHLT_MIC_RESERVED */
452*aab122a6SSascha Wildner };
453*aab122a6SSascha Wildner 
454*aab122a6SSascha Wildner static const char           *AcpiDmNhltMicPositionNames[] =
455*aab122a6SSascha Wildner {
456*aab122a6SSascha Wildner     "Top",                              /* ACPI_NHLT_MIC_POSITION_TOP */
457*aab122a6SSascha Wildner     "Bottom",                           /* ACPI_NHLT_MIC_POSITION_BOTTOM */
458*aab122a6SSascha Wildner     "Left",                             /* ACPI_NHLT_MIC_POSITION_LEFT */
459*aab122a6SSascha Wildner     "Right",                            /* ACPI_NHLT_MIC_POSITION_RIGHT */
460*aab122a6SSascha Wildner     "Front",                            /* ACPI_NHLT_MIC_POSITION_FRONT */
461*aab122a6SSascha Wildner     "Back",                             /* ACPI_NHLT_MIC_POSITION_BACK */
462*aab122a6SSascha Wildner     "Unknown Mic Position"              /* 6 and above are reserved */
463*aab122a6SSascha Wildner };
464*aab122a6SSascha Wildner 
465*aab122a6SSascha Wildner static const char           *AcpiDmNhltMicArrayTypeNames[] =
466*aab122a6SSascha Wildner {
467*aab122a6SSascha Wildner     "Unknown Array Type",               /* ACPI_NHLT_ARRAY_TYPE_RESERVED */
468*aab122a6SSascha Wildner     "Small Linear 2-element",           /* ACPI_NHLT_SMALL_LINEAR_2ELEMENT */
469*aab122a6SSascha Wildner     "Big Linear 2-element",             /* ACPI_NHLT_BIG_LINEAR_2ELEMENT */
470*aab122a6SSascha Wildner     "Linear 4-element 1st Geometry",    /* ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT */
471*aab122a6SSascha Wildner     "Planar L-shaped 4-element",        /* ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT */
472*aab122a6SSascha Wildner     "Linear 4-element 2nd Geometry",    /* ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT */
473*aab122a6SSascha Wildner     "Vendor Defined"                    /* ACPI_NHLT_VENDOR_DEFINED */
474*aab122a6SSascha Wildner };
475*aab122a6SSascha Wildner 
476*aab122a6SSascha Wildner static const char           *AcpiDmNhltConfigTypeNames[] =
477*aab122a6SSascha Wildner {
478*aab122a6SSascha Wildner     "Generic Type",                     /* ACPI_NHLT_CONFIG_TYPE_GENERIC */
479*aab122a6SSascha Wildner     "Microphone Array",                 /* ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY */
480*aab122a6SSascha Wildner     "Reserved",                         /* ACPI_NHLT_CONFIG_TYPE_RESERVED */
481*aab122a6SSascha Wildner     "Render Feedback",                  /* ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK */
482*aab122a6SSascha Wildner     "Unknown Config Type"               /* ACPI_NHLT_CONFIG_TYPE_RESERVED */
483*aab122a6SSascha Wildner };
484*aab122a6SSascha Wildner 
4850d02842fSSascha Wildner static const char           *AcpiDmPcctSubnames[] =
4860d02842fSSascha Wildner {
4870d02842fSSascha Wildner     "Generic Communications Subspace",  /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
488896f2e3aSSascha Wildner     "HW-Reduced Comm Subspace",         /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE */
4890d27ae55SSascha Wildner     "HW-Reduced Comm Subspace Type2",   /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 */
4901093ca81SSascha Wildner     "Extended PCC Master Subspace",     /* ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE */
4911093ca81SSascha Wildner     "Extended PCC Slave Subspace",      /* ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE */
49201d5d5dfSSascha Wildner     "HW Registers based Comm Subspace", /* ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE */
49301d5d5dfSSascha Wildner     "Unknown Subtable Type"             /* Reserved */
49401d5d5dfSSascha Wildner };
49501d5d5dfSSascha Wildner 
49601d5d5dfSSascha Wildner static const char           *AcpiDmPhatSubnames[] =
49701d5d5dfSSascha Wildner {
49801d5d5dfSSascha Wildner     "Firmware Version Data",        /* ACPI_PHAT_TYPE_FW_VERSION_DATA */
49901d5d5dfSSascha Wildner     "Firmware Health Data",         /* ACPI_PHAT_TYPE_FW_HEALTH_DATA */
500896f2e3aSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
5010d02842fSSascha Wildner };
5020d02842fSSascha Wildner 
5030d02842fSSascha Wildner static const char           *AcpiDmPmttSubnames[] =
5040d02842fSSascha Wildner {
5050d02842fSSascha Wildner     "Socket",                       /* ACPI_PMTT_TYPE_SOCKET */
5060d02842fSSascha Wildner     "Memory Controller",            /* ACPI_PMTT_TYPE_CONTROLLER */
5070d02842fSSascha Wildner     "Physical Component (DIMM)",    /* ACPI_PMTT_TYPE_DIMM */
50801d5d5dfSSascha Wildner     "Unknown Subtable Type",        /* Reserved */
50901d5d5dfSSascha Wildner     "Vendor Specific"               /* ACPI_PMTT_TYPE_VENDOR */
5100d02842fSSascha Wildner };
5110d02842fSSascha Wildner 
5121093ca81SSascha Wildner static const char           *AcpiDmPpttSubnames[] =
5131093ca81SSascha Wildner {
5141093ca81SSascha Wildner     "Processor Hierarchy Node",     /* ACPI_PPTT_TYPE_PROCESSOR */
5151093ca81SSascha Wildner     "Cache Type",                   /* ACPI_PPTT_TYPE_CACHE */
5167bcb6cafSSascha Wildner     "ID",                           /* ACPI_PPTT_TYPE_ID */
5177bcb6cafSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
5187bcb6cafSSascha Wildner };
5197bcb6cafSSascha Wildner 
5204898bea4SSascha Wildner static const char           *AcpiDmRgrtSubnames[] =
5214898bea4SSascha Wildner {
5224898bea4SSascha Wildner     "Unknown/Reserved Image Type",  /* ACPI_RGRT_TYPE_RESERVED0 */
5234898bea4SSascha Wildner     "Type PNG"                      /* ACPI_RGRT_IMAGE_TYPE_PNG */
5244898bea4SSascha Wildner };
5254898bea4SSascha Wildner 
5267bcb6cafSSascha Wildner static const char           *AcpiDmSdevSubnames[] =
5277bcb6cafSSascha Wildner {
5287bcb6cafSSascha Wildner     "Namespace Device",             /* ACPI_SDEV_TYPE_NAMESPACE_DEVICE */
5297bcb6cafSSascha Wildner     "PCIe Endpoint Device",         /* ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE */
5301093ca81SSascha Wildner     "Unknown Subtable Type"         /* Reserved */
5311093ca81SSascha Wildner };
5321093ca81SSascha Wildner 
5330d02842fSSascha Wildner static const char           *AcpiDmSratSubnames[] =
5340d02842fSSascha Wildner {
5350d02842fSSascha Wildner     "Processor Local APIC/SAPIC Affinity",
5360d02842fSSascha Wildner     "Memory Affinity",
5370d02842fSSascha Wildner     "Processor Local x2APIC Affinity",
53879eafdd7SSascha Wildner     "GICC Affinity",
5391093ca81SSascha Wildner     "GIC ITS Affinity",             /* Acpi 6.2 */
54000ffa116SSascha Wildner     "Generic Initiator Affinity",   /* Acpi 6.3 */
54184fe3360SSascha Wildner     "Generic Port Affinity",        /* Acpi 6.4 */
542896f2e3aSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
5430d02842fSSascha Wildner };
5440d02842fSSascha Wildner 
5457bcb6cafSSascha Wildner static const char           *AcpiDmTpm2Subnames[] =
5467bcb6cafSSascha Wildner {
5477bcb6cafSSascha Wildner     "Illegal Start Method value",
5487bcb6cafSSascha Wildner     "Reserved",
5497bcb6cafSSascha Wildner     "ACPI Start Method",
5507bcb6cafSSascha Wildner     "Reserved",
5517bcb6cafSSascha Wildner     "Reserved",
5527bcb6cafSSascha Wildner     "Reserved",
5537bcb6cafSSascha Wildner     "Memory Mapped I/O",
5547bcb6cafSSascha Wildner     "Command Response Buffer",
5557bcb6cafSSascha Wildner     "Command Response Buffer with ACPI Start Method",
5567bcb6cafSSascha Wildner     "Reserved",
5577bcb6cafSSascha Wildner     "Reserved",
5587bcb6cafSSascha Wildner     "Command Response Buffer with ARM SMC",
5597bcb6cafSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
5607bcb6cafSSascha Wildner };
5617bcb6cafSSascha Wildner 
5620d02842fSSascha Wildner static const char           *AcpiDmIvrsSubnames[] =
5630d02842fSSascha Wildner {
5644898bea4SSascha Wildner     "Hardware Definition Block (IVHD)",
5654898bea4SSascha Wildner     "Hardware Definition Block - Mixed Format (IVHD)",
5664898bea4SSascha Wildner     "Memory Definition Block (IVMD)",
5674898bea4SSascha Wildner     "Unknown/Reserved Subtable Type"            /* Reserved */
5684898bea4SSascha Wildner };
5694898bea4SSascha Wildner 
5704898bea4SSascha Wildner static const char           *AcpiDmIvrsDevEntryNames[] =
5714898bea4SSascha Wildner {
5724898bea4SSascha Wildner     "Unknown/Reserved Device Entry Type",       /* 0- Reserved */
5734898bea4SSascha Wildner     "Device Entry: Select All Devices",         /* 1 */
5744898bea4SSascha Wildner     "Device Entry: Select One Device",          /* 2 */
5754898bea4SSascha Wildner     "Device Entry: Start of Range",             /* 3 */
5764898bea4SSascha Wildner     "Device Entry: End of Range",               /* 4 */
5774898bea4SSascha Wildner     "Device Entry: Alias Select",               /* 66 */
5784898bea4SSascha Wildner     "Device Entry: Alias Start of Range",       /* 67 */
5794898bea4SSascha Wildner     "Unknown/Reserved Device Entry Type",       /* 68- Reserved */
5804898bea4SSascha Wildner     "Unknown/Reserved Device Entry Type",       /* 69- Reserved */
5814898bea4SSascha Wildner     "Device Entry: Extended Select",            /* 70 */
5824898bea4SSascha Wildner     "Device Entry: Extended Start of Range",    /* 71 */
5834898bea4SSascha Wildner     "Device Entry: Special Device",             /* 72 */
5844898bea4SSascha Wildner     "Device Entry: ACPI HID Named Device",      /* 240 */
5854898bea4SSascha Wildner     "Unknown/Reserved Device Entry Type"        /* Reserved */
5860d02842fSSascha Wildner };
5870d02842fSSascha Wildner 
5889e1c0880SSascha Wildner static const char           *AcpiDmLpitSubnames[] =
5899e1c0880SSascha Wildner {
5909e1c0880SSascha Wildner     "Native C-state Idle Structure",
591896f2e3aSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
5929e1c0880SSascha Wildner };
5930d02842fSSascha Wildner 
59401d5d5dfSSascha Wildner static const char           *AcpiDmViotSubnames[] =
59501d5d5dfSSascha Wildner {
59601d5d5dfSSascha Wildner     "Unknown Subtable Type",        /* 0 -Reserved */
59701d5d5dfSSascha Wildner     "PCI Range",
59801d5d5dfSSascha Wildner     "MMIO Endpoint",
59901d5d5dfSSascha Wildner     "VirtIO-PCI IOMMU",
60001d5d5dfSSascha Wildner     "VirtIO-MMIO IOMMU",
60101d5d5dfSSascha Wildner     "Unknown Subtable Type"         /* Reserved */
60201d5d5dfSSascha Wildner };
60301d5d5dfSSascha Wildner 
6040d02842fSSascha Wildner #define ACPI_FADT_PM_RESERVED       9
6050d02842fSSascha Wildner 
6060d02842fSSascha Wildner static const char           *AcpiDmFadtProfiles[] =
6070d02842fSSascha Wildner {
6080d02842fSSascha Wildner     "Unspecified",
6090d02842fSSascha Wildner     "Desktop",
6100d02842fSSascha Wildner     "Mobile",
6110d02842fSSascha Wildner     "Workstation",
6120d02842fSSascha Wildner     "Enterprise Server",
6130d02842fSSascha Wildner     "SOHO Server",
6140d02842fSSascha Wildner     "Appliance PC",
6150d02842fSSascha Wildner     "Performance Server",
6160d02842fSSascha Wildner     "Tablet",
6170d02842fSSascha Wildner     "Unknown Profile Type"
6180d02842fSSascha Wildner };
6190d02842fSSascha Wildner 
6200d02842fSSascha Wildner #define ACPI_GAS_WIDTH_RESERVED     5
6210d02842fSSascha Wildner 
6220d02842fSSascha Wildner static const char           *AcpiDmGasAccessWidth[] =
6230d02842fSSascha Wildner {
6240d02842fSSascha Wildner     "Undefined/Legacy",
6250d02842fSSascha Wildner     "Byte Access:8",
6260d02842fSSascha Wildner     "Word Access:16",
6270d02842fSSascha Wildner     "DWord Access:32",
6280d02842fSSascha Wildner     "QWord Access:64",
6290d02842fSSascha Wildner     "Unknown Width Encoding"
6300d02842fSSascha Wildner };
6310d02842fSSascha Wildner 
6320d02842fSSascha Wildner 
6330d02842fSSascha Wildner /*******************************************************************************
6340d02842fSSascha Wildner  *
6350d02842fSSascha Wildner  * ACPI Table Data, indexed by signature.
6360d02842fSSascha Wildner  *
6370d02842fSSascha Wildner  * Each entry contains: Signature, Table Info, Handler, DtHandler,
6380d02842fSSascha Wildner  *  Template, Description
6390d02842fSSascha Wildner  *
6400d02842fSSascha Wildner  * Simple tables have only a TableInfo structure, complex tables have a
6410d02842fSSascha Wildner  * handler. This table must be NULL terminated. RSDP and FACS are
6420d02842fSSascha Wildner  * special-cased elsewhere.
6430d02842fSSascha Wildner  *
64401d5d5dfSSascha Wildner  * Note: Any tables added here should be duplicated within
64501d5d5dfSSascha Wildner  * AcpiGbl_SupportedTables in the file common/ahtable.c
646896f2e3aSSascha Wildner  *
6470d02842fSSascha Wildner  ******************************************************************************/
6480d02842fSSascha Wildner 
649896f2e3aSSascha Wildner const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
6500d02842fSSascha Wildner {
6510672a19bSSascha Wildner     {ACPI_SIG_AEST, NULL,                   AcpiDmDumpAest, DtCompileAest,  TemplateAest},
652*aab122a6SSascha Wildner     {ACPI_SIG_AGDI, AcpiDmTableInfoAgdi,    NULL,           NULL,           TemplateAgdi},
653896f2e3aSSascha Wildner     {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf},
6544898bea4SSascha Wildner     {ACPI_SIG_BDAT, AcpiDmTableInfoBdat,    NULL,           NULL,           TemplateBdat},
655896f2e3aSSascha Wildner     {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert},
656896f2e3aSSascha Wildner     {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           TemplateBgrt},
657896f2e3aSSascha Wildner     {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot},
65801d5d5dfSSascha Wildner     {ACPI_SIG_CEDT, NULL,                   AcpiDmDumpCedt, DtCompileCedt,  TemplateCedt},
659896f2e3aSSascha Wildner     {ACPI_SIG_CPEP, NULL,                   AcpiDmDumpCpep, DtCompileCpep,  TemplateCpep},
660896f2e3aSSascha Wildner     {ACPI_SIG_CSRT, NULL,                   AcpiDmDumpCsrt, DtCompileCsrt,  TemplateCsrt},
661896f2e3aSSascha Wildner     {ACPI_SIG_DBG2, AcpiDmTableInfoDbg2,    AcpiDmDumpDbg2, DtCompileDbg2,  TemplateDbg2},
662896f2e3aSSascha Wildner     {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp,    NULL,           NULL,           TemplateDbgp},
663896f2e3aSSascha Wildner     {ACPI_SIG_DMAR, NULL,                   AcpiDmDumpDmar, DtCompileDmar,  TemplateDmar},
664896f2e3aSSascha Wildner     {ACPI_SIG_DRTM, NULL,                   AcpiDmDumpDrtm, DtCompileDrtm,  TemplateDrtm},
665896f2e3aSSascha Wildner     {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt,    NULL,           NULL,           TemplateEcdt},
666896f2e3aSSascha Wildner     {ACPI_SIG_EINJ, NULL,                   AcpiDmDumpEinj, DtCompileEinj,  TemplateEinj},
667896f2e3aSSascha Wildner     {ACPI_SIG_ERST, NULL,                   AcpiDmDumpErst, DtCompileErst,  TemplateErst},
668896f2e3aSSascha Wildner     {ACPI_SIG_FADT, NULL,                   AcpiDmDumpFadt, DtCompileFadt,  TemplateFadt},
669896f2e3aSSascha Wildner     {ACPI_SIG_FPDT, NULL,                   AcpiDmDumpFpdt, DtCompileFpdt,  TemplateFpdt},
670896f2e3aSSascha Wildner     {ACPI_SIG_GTDT, NULL,                   AcpiDmDumpGtdt, DtCompileGtdt,  TemplateGtdt},
671896f2e3aSSascha Wildner     {ACPI_SIG_HEST, NULL,                   AcpiDmDumpHest, DtCompileHest,  TemplateHest},
6721093ca81SSascha Wildner     {ACPI_SIG_HMAT, NULL,                   AcpiDmDumpHmat, DtCompileHmat,  TemplateHmat},
673896f2e3aSSascha Wildner     {ACPI_SIG_HPET, AcpiDmTableInfoHpet,    NULL,           NULL,           TemplateHpet},
674896f2e3aSSascha Wildner     {ACPI_SIG_IORT, NULL,                   AcpiDmDumpIort, DtCompileIort,  TemplateIort},
675896f2e3aSSascha Wildner     {ACPI_SIG_IVRS, NULL,                   AcpiDmDumpIvrs, DtCompileIvrs,  TemplateIvrs},
676896f2e3aSSascha Wildner     {ACPI_SIG_LPIT, NULL,                   AcpiDmDumpLpit, DtCompileLpit,  TemplateLpit},
677896f2e3aSSascha Wildner     {ACPI_SIG_MADT, NULL,                   AcpiDmDumpMadt, DtCompileMadt,  TemplateMadt},
678896f2e3aSSascha Wildner     {ACPI_SIG_MCFG, NULL,                   AcpiDmDumpMcfg, DtCompileMcfg,  TemplateMcfg},
679896f2e3aSSascha Wildner     {ACPI_SIG_MCHI, AcpiDmTableInfoMchi,    NULL,           NULL,           TemplateMchi},
680896f2e3aSSascha Wildner     {ACPI_SIG_MPST, AcpiDmTableInfoMpst,    AcpiDmDumpMpst, DtCompileMpst,  TemplateMpst},
681896f2e3aSSascha Wildner     {ACPI_SIG_MSCT, NULL,                   AcpiDmDumpMsct, DtCompileMsct,  TemplateMsct},
682896f2e3aSSascha Wildner     {ACPI_SIG_MSDM, NULL,                   AcpiDmDumpSlic, DtCompileSlic,  TemplateMsdm},
683896f2e3aSSascha Wildner     {ACPI_SIG_NFIT, AcpiDmTableInfoNfit,    AcpiDmDumpNfit, DtCompileNfit,  TemplateNfit},
684*aab122a6SSascha Wildner     {ACPI_SIG_NHLT, AcpiDmTableInfoNhlt,    AcpiDmDumpNhlt, DtCompileNhlt,  TemplateNhlt},
685896f2e3aSSascha Wildner     {ACPI_SIG_PCCT, AcpiDmTableInfoPcct,    AcpiDmDumpPcct, DtCompilePcct,  TemplatePcct},
6867bcb6cafSSascha Wildner     {ACPI_SIG_PDTT, AcpiDmTableInfoPdtt,    AcpiDmDumpPdtt, DtCompilePdtt,  TemplatePdtt},
68701d5d5dfSSascha Wildner     {ACPI_SIG_PHAT, NULL,                   AcpiDmDumpPhat, DtCompilePhat,  TemplatePhat},
688896f2e3aSSascha Wildner     {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt},
6891093ca81SSascha Wildner     {ACPI_SIG_PPTT, NULL,                   AcpiDmDumpPptt, DtCompilePptt,  TemplatePptt},
6904898bea4SSascha Wildner     {ACPI_SIG_PRMT, NULL,                   AcpiDmDumpPrmt, DtCompilePrmt,  TemplatePrmt},
691277350a0SSascha Wildner     {ACPI_SIG_RASF, AcpiDmTableInfoRasf,    NULL,           NULL,           TemplateRasf},
6924898bea4SSascha Wildner     {ACPI_SIG_RGRT, NULL,                   AcpiDmDumpRgrt, DtCompileRgrt,  TemplateRgrt},
693896f2e3aSSascha Wildner     {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  TemplateRsdt},
694896f2e3aSSascha Wildner     {ACPI_SIG_S3PT, NULL,                   NULL,           NULL,           TemplateS3pt},
695896f2e3aSSascha Wildner     {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst},
6963c639e0cSSascha Wildner     {ACPI_SIG_SDEI, AcpiDmTableInfoSdei,    NULL,           NULL,           TemplateSdei},
6977bcb6cafSSascha Wildner     {ACPI_SIG_SDEV, AcpiDmTableInfoSdev,    AcpiDmDumpSdev, DtCompileSdev,  TemplateSdev},
698896f2e3aSSascha Wildner     {ACPI_SIG_SLIC, NULL,                   AcpiDmDumpSlic, DtCompileSlic,  TemplateSlic},
699896f2e3aSSascha Wildner     {ACPI_SIG_SLIT, NULL,                   AcpiDmDumpSlit, DtCompileSlit,  TemplateSlit},
700896f2e3aSSascha Wildner     {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr,    NULL,           NULL,           TemplateSpcr},
701896f2e3aSSascha Wildner     {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           NULL,           TemplateSpmi},
702896f2e3aSSascha Wildner     {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  TemplateSrat},
703896f2e3aSSascha Wildner     {ACPI_SIG_STAO, NULL,                   AcpiDmDumpStao, DtCompileStao,  TemplateStao},
7044898bea4SSascha Wildner     {ACPI_SIG_SVKL, AcpiDmTableInfoSvkl,    AcpiDmDumpSvkl, DtCompileSvkl,  TemplateSvkl},
705267c04fdSSascha Wildner     {ACPI_SIG_TCPA, NULL,                   AcpiDmDumpTcpa, DtCompileTcpa,  TemplateTcpa},
706*aab122a6SSascha Wildner     {ACPI_SIG_TDEL, AcpiDmTableInfoTdel,    NULL,           NULL,           TemplateTdel},
7077bcb6cafSSascha Wildner     {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    AcpiDmDumpTpm2, DtCompileTpm2,  TemplateTpm2},
708896f2e3aSSascha Wildner     {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi},
70901d5d5dfSSascha Wildner     {ACPI_SIG_VIOT, AcpiDmTableInfoViot,    AcpiDmDumpViot, DtCompileViot,  TemplateViot},
710896f2e3aSSascha Wildner     {ACPI_SIG_WAET, AcpiDmTableInfoWaet,    NULL,           NULL,           TemplateWaet},
711896f2e3aSSascha Wildner     {ACPI_SIG_WDAT, NULL,                   AcpiDmDumpWdat, DtCompileWdat,  TemplateWdat},
712896f2e3aSSascha Wildner     {ACPI_SIG_WDDT, AcpiDmTableInfoWddt,    NULL,           NULL,           TemplateWddt},
713896f2e3aSSascha Wildner     {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt,    NULL,           NULL,           TemplateWdrt},
714896f2e3aSSascha Wildner     {ACPI_SIG_WPBT, NULL,                   AcpiDmDumpWpbt, DtCompileWpbt,  TemplateWpbt},
7151093ca81SSascha Wildner     {ACPI_SIG_WSMT, AcpiDmTableInfoWsmt,    NULL,           NULL,           TemplateWsmt},
716896f2e3aSSascha Wildner     {ACPI_SIG_XENV, AcpiDmTableInfoXenv,    NULL,           NULL,           TemplateXenv},
717896f2e3aSSascha Wildner     {ACPI_SIG_XSDT, NULL,                   AcpiDmDumpXsdt, DtCompileXsdt,  TemplateXsdt},
718896f2e3aSSascha Wildner     {NULL,          NULL,                   NULL,           NULL,           NULL}
7190d02842fSSascha Wildner };
7200d02842fSSascha Wildner 
7210d02842fSSascha Wildner 
7220d02842fSSascha Wildner /*******************************************************************************
7230d02842fSSascha Wildner  *
7240d02842fSSascha Wildner  * FUNCTION:    AcpiDmGenerateChecksum
7250d02842fSSascha Wildner  *
7260d02842fSSascha Wildner  * PARAMETERS:  Table               - Pointer to table to be checksummed
7270d02842fSSascha Wildner  *              Length              - Length of the table
7280d02842fSSascha Wildner  *              OriginalChecksum    - Value of the checksum field
7290d02842fSSascha Wildner  *
7300d02842fSSascha Wildner  * RETURN:      8 bit checksum of buffer
7310d02842fSSascha Wildner  *
7320d02842fSSascha Wildner  * DESCRIPTION: Computes an 8 bit checksum of the table.
7330d02842fSSascha Wildner  *
7340d02842fSSascha Wildner  ******************************************************************************/
7350d02842fSSascha Wildner 
7360d02842fSSascha Wildner UINT8
AcpiDmGenerateChecksum(void * Table,UINT32 Length,UINT8 OriginalChecksum)7370d02842fSSascha Wildner AcpiDmGenerateChecksum (
7380d02842fSSascha Wildner     void                    *Table,
7390d02842fSSascha Wildner     UINT32                  Length,
7400d02842fSSascha Wildner     UINT8                   OriginalChecksum)
7410d02842fSSascha Wildner {
7420d02842fSSascha Wildner     UINT8                   Checksum;
7430d02842fSSascha Wildner 
7440d02842fSSascha Wildner 
7450d02842fSSascha Wildner     /* Sum the entire table as-is */
7460d02842fSSascha Wildner 
7470d02842fSSascha Wildner     Checksum = AcpiTbChecksum ((UINT8 *) Table, Length);
7480d02842fSSascha Wildner 
7490d02842fSSascha Wildner     /* Subtract off the existing checksum value in the table */
7500d02842fSSascha Wildner 
7510d02842fSSascha Wildner     Checksum = (UINT8) (Checksum - OriginalChecksum);
7520d02842fSSascha Wildner 
7530d02842fSSascha Wildner     /* Compute the final checksum */
7540d02842fSSascha Wildner 
7550d02842fSSascha Wildner     Checksum = (UINT8) (0 - Checksum);
7560d02842fSSascha Wildner     return (Checksum);
7570d02842fSSascha Wildner }
7580d02842fSSascha Wildner 
7590d02842fSSascha Wildner 
7600d02842fSSascha Wildner /*******************************************************************************
7610d02842fSSascha Wildner  *
7620d02842fSSascha Wildner  * FUNCTION:    AcpiDmGetTableData
7630d02842fSSascha Wildner  *
7640d02842fSSascha Wildner  * PARAMETERS:  Signature           - ACPI signature (4 chars) to match
7650d02842fSSascha Wildner  *
7660d02842fSSascha Wildner  * RETURN:      Pointer to a valid ACPI_DMTABLE_DATA. Null if no match found.
7670d02842fSSascha Wildner  *
7680d02842fSSascha Wildner  * DESCRIPTION: Find a match in the global table of supported ACPI tables
7690d02842fSSascha Wildner  *
7700d02842fSSascha Wildner  ******************************************************************************/
7710d02842fSSascha Wildner 
772896f2e3aSSascha Wildner const ACPI_DMTABLE_DATA *
AcpiDmGetTableData(char * Signature)7730d02842fSSascha Wildner AcpiDmGetTableData (
7740d02842fSSascha Wildner     char                    *Signature)
7750d02842fSSascha Wildner {
776896f2e3aSSascha Wildner     const ACPI_DMTABLE_DATA *Info;
7770d02842fSSascha Wildner 
7780d02842fSSascha Wildner 
779896f2e3aSSascha Wildner     for (Info = AcpiDmTableData; Info->Signature; Info++)
7800d02842fSSascha Wildner     {
781c1776041SSascha Wildner         if (ACPI_COMPARE_NAMESEG (Signature, Info->Signature))
7820d02842fSSascha Wildner         {
783896f2e3aSSascha Wildner             return (Info);
7840d02842fSSascha Wildner         }
7850d02842fSSascha Wildner     }
7860d02842fSSascha Wildner 
7870d02842fSSascha Wildner     return (NULL);
7880d02842fSSascha Wildner }
7890d02842fSSascha Wildner 
7900d02842fSSascha Wildner 
7910d02842fSSascha Wildner /*******************************************************************************
7920d02842fSSascha Wildner  *
7930d02842fSSascha Wildner  * FUNCTION:    AcpiDmDumpDataTable
7940d02842fSSascha Wildner  *
7950d02842fSSascha Wildner  * PARAMETERS:  Table               - An ACPI table
7960d02842fSSascha Wildner  *
7970d02842fSSascha Wildner  * RETURN:      None.
7980d02842fSSascha Wildner  *
7990d02842fSSascha Wildner  * DESCRIPTION: Format the contents of an ACPI data table (any table other
8000d02842fSSascha Wildner  *              than an SSDT or DSDT that does not contain executable AML code)
8010d02842fSSascha Wildner  *
8020d02842fSSascha Wildner  ******************************************************************************/
8030d02842fSSascha Wildner 
8040d02842fSSascha Wildner void
AcpiDmDumpDataTable(ACPI_TABLE_HEADER * Table)8050d02842fSSascha Wildner AcpiDmDumpDataTable (
8060d02842fSSascha Wildner     ACPI_TABLE_HEADER       *Table)
8070d02842fSSascha Wildner {
8080d02842fSSascha Wildner     ACPI_STATUS             Status;
809896f2e3aSSascha Wildner     const ACPI_DMTABLE_DATA *TableData;
8100d02842fSSascha Wildner     UINT32                  Length;
8110d02842fSSascha Wildner 
8120d02842fSSascha Wildner 
8130d02842fSSascha Wildner     /* Ignore tables that contain AML */
8140d02842fSSascha Wildner 
8150d02842fSSascha Wildner     if (AcpiUtIsAmlTable (Table))
8160d02842fSSascha Wildner     {
817806343b9SSascha Wildner         if (AslGbl_VerboseTemplates)
8180d02842fSSascha Wildner         {
8190d02842fSSascha Wildner             /* Dump the raw table data */
8200d02842fSSascha Wildner 
8210d02842fSSascha Wildner             Length = Table->Length;
8220d02842fSSascha Wildner 
8230d02842fSSascha Wildner             AcpiOsPrintf ("\n/*\n%s: Length %d (0x%X)\n\n",
8240d02842fSSascha Wildner                 ACPI_RAW_TABLE_DATA_HEADER, Length, Length);
8250d02842fSSascha Wildner             AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table),
8260d02842fSSascha Wildner                 Length, DB_BYTE_DISPLAY, 0);
8270d02842fSSascha Wildner             AcpiOsPrintf (" */\n");
8280d02842fSSascha Wildner         }
8290d02842fSSascha Wildner         return;
8300d02842fSSascha Wildner     }
8310d02842fSSascha Wildner 
8320d02842fSSascha Wildner     /*
8330d02842fSSascha Wildner      * Handle tables that don't use the common ACPI table header structure.
8340d02842fSSascha Wildner      * Currently, these are the FACS, RSDP, and S3PT.
8350d02842fSSascha Wildner      */
836c1776041SSascha Wildner     if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_FACS))
8370d02842fSSascha Wildner     {
8380d02842fSSascha Wildner         Length = Table->Length;
839267c04fdSSascha Wildner         Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
840267c04fdSSascha Wildner         if (ACPI_FAILURE (Status))
841267c04fdSSascha Wildner         {
842267c04fdSSascha Wildner             return;
843267c04fdSSascha Wildner         }
8440d02842fSSascha Wildner     }
845*aab122a6SSascha Wildner     else if (ACPI_VALIDATE_RSDP_SIG (ACPI_CAST_PTR (ACPI_TABLE_RSDP,
846*aab122a6SSascha Wildner         Table)->Signature))
8470d02842fSSascha Wildner     {
8480d02842fSSascha Wildner         Length = AcpiDmDumpRsdp (Table);
8490d02842fSSascha Wildner     }
850c1776041SSascha Wildner     else if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_S3PT))
8510d02842fSSascha Wildner     {
8520d02842fSSascha Wildner         Length = AcpiDmDumpS3pt (Table);
8530d02842fSSascha Wildner     }
8540d02842fSSascha Wildner     else
8550d02842fSSascha Wildner     {
8560d02842fSSascha Wildner         /*
8570d02842fSSascha Wildner          * All other tables must use the common ACPI table header, dump it now
8580d02842fSSascha Wildner          */
8590d02842fSSascha Wildner         Length = Table->Length;
8600d02842fSSascha Wildner         Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader);
8610d02842fSSascha Wildner         if (ACPI_FAILURE (Status))
8620d02842fSSascha Wildner         {
8630d02842fSSascha Wildner             return;
8640d02842fSSascha Wildner         }
8650d02842fSSascha Wildner         AcpiOsPrintf ("\n");
8660d02842fSSascha Wildner 
8670d02842fSSascha Wildner         /* Match signature and dispatch appropriately */
8680d02842fSSascha Wildner 
8690d02842fSSascha Wildner         TableData = AcpiDmGetTableData (Table->Signature);
8700d02842fSSascha Wildner         if (!TableData)
8710d02842fSSascha Wildner         {
87225ca8c79SSascha Wildner             if (!strncmp (Table->Signature, "OEM", 3))
8730d02842fSSascha Wildner             {
8740d02842fSSascha Wildner                 AcpiOsPrintf ("\n**** OEM-defined ACPI table [%4.4s], unknown contents\n\n",
8750d02842fSSascha Wildner                     Table->Signature);
8760d02842fSSascha Wildner             }
8770d02842fSSascha Wildner             else
8780d02842fSSascha Wildner             {
8795943f66cSSascha Wildner                 AcpiOsPrintf ("\n**** Unknown ACPI table signature [%4.4s]\n\n",
8800d02842fSSascha Wildner                     Table->Signature);
8815943f66cSSascha Wildner 
8825943f66cSSascha Wildner                 fprintf (stderr, "Unknown ACPI table signature [%4.4s], ",
8830d02842fSSascha Wildner                     Table->Signature);
8845943f66cSSascha Wildner 
8855943f66cSSascha Wildner                 if (!AcpiGbl_ForceAmlDisassembly)
8865943f66cSSascha Wildner                 {
8875943f66cSSascha Wildner                     fprintf (stderr, "decoding ACPI table header only\n");
8885943f66cSSascha Wildner                 }
8895943f66cSSascha Wildner                 else
8905943f66cSSascha Wildner                 {
8915943f66cSSascha Wildner                     fprintf (stderr, "assuming table contains valid AML code\n");
8925943f66cSSascha Wildner                 }
8930d02842fSSascha Wildner             }
8940d02842fSSascha Wildner         }
8950d02842fSSascha Wildner         else if (TableData->TableHandler)
8960d02842fSSascha Wildner         {
8970d02842fSSascha Wildner             /* Complex table, has a handler */
8980d02842fSSascha Wildner 
8990d02842fSSascha Wildner             TableData->TableHandler (Table);
9000d02842fSSascha Wildner         }
9010d02842fSSascha Wildner         else if (TableData->TableInfo)
9020d02842fSSascha Wildner         {
9030d02842fSSascha Wildner             /* Simple table, just walk the info table */
9040d02842fSSascha Wildner 
905267c04fdSSascha Wildner             Status = AcpiDmDumpTable (Length, 0, Table, 0, TableData->TableInfo);
906267c04fdSSascha Wildner             if (ACPI_FAILURE (Status))
907267c04fdSSascha Wildner             {
908267c04fdSSascha Wildner                 return;
909267c04fdSSascha Wildner             }
9100d02842fSSascha Wildner         }
9110d02842fSSascha Wildner     }
9120d02842fSSascha Wildner 
913806343b9SSascha Wildner     if (!AslGbl_DoTemplates || AslGbl_VerboseTemplates)
9140d02842fSSascha Wildner     {
9150d02842fSSascha Wildner         /* Dump the raw table data */
9160d02842fSSascha Wildner 
9170d02842fSSascha Wildner         AcpiOsPrintf ("\n%s: Length %d (0x%X)\n\n",
9180d02842fSSascha Wildner             ACPI_RAW_TABLE_DATA_HEADER, Length, Length);
9190d02842fSSascha Wildner         AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table),
9200d02842fSSascha Wildner             Length, DB_BYTE_DISPLAY, 0);
9210d02842fSSascha Wildner     }
9220d02842fSSascha Wildner }
9230d02842fSSascha Wildner 
9240d02842fSSascha Wildner 
9250d02842fSSascha Wildner /*******************************************************************************
9260d02842fSSascha Wildner  *
9270d02842fSSascha Wildner  * FUNCTION:    AcpiDmLineHeader
9280d02842fSSascha Wildner  *
9290d02842fSSascha Wildner  * PARAMETERS:  Offset              - Current byte offset, from table start
9300d02842fSSascha Wildner  *              ByteLength          - Length of the field in bytes, 0 for flags
9310d02842fSSascha Wildner  *              Name                - Name of this field
9320d02842fSSascha Wildner  *
9330d02842fSSascha Wildner  * RETURN:      None
9340d02842fSSascha Wildner  *
9350d02842fSSascha Wildner  * DESCRIPTION: Utility routines for formatting output lines. Displays the
9360d02842fSSascha Wildner  *              current table offset in hex and decimal, the field length,
9370d02842fSSascha Wildner  *              and the field name.
9380d02842fSSascha Wildner  *
9390d02842fSSascha Wildner  ******************************************************************************/
9400d02842fSSascha Wildner 
9410d02842fSSascha Wildner void
AcpiDmLineHeader(UINT32 Offset,UINT32 ByteLength,char * Name)9420d02842fSSascha Wildner AcpiDmLineHeader (
9430d02842fSSascha Wildner     UINT32                  Offset,
9440d02842fSSascha Wildner     UINT32                  ByteLength,
9450d02842fSSascha Wildner     char                    *Name)
9460d02842fSSascha Wildner {
9470d02842fSSascha Wildner 
9480d02842fSSascha Wildner     /* Allow a null name for fields that span multiple lines (large buffers) */
9490d02842fSSascha Wildner 
9500d02842fSSascha Wildner     if (!Name)
9510d02842fSSascha Wildner     {
9520d02842fSSascha Wildner         Name = "";
9530d02842fSSascha Wildner     }
9540d02842fSSascha Wildner 
955806343b9SSascha Wildner     if (AslGbl_DoTemplates && !AslGbl_VerboseTemplates) /* Terse template */
9560d02842fSSascha Wildner     {
9570d02842fSSascha Wildner         if (ByteLength)
9580d02842fSSascha Wildner         {
9590d02842fSSascha Wildner             AcpiOsPrintf ("[%.4d] %34s : ", ByteLength, Name);
9600d02842fSSascha Wildner         }
9610d02842fSSascha Wildner         else
9620d02842fSSascha Wildner         {
9630d02842fSSascha Wildner             if (*Name)
9640d02842fSSascha Wildner             {
9650d02842fSSascha Wildner                 AcpiOsPrintf ("%41s : ", Name);
9660d02842fSSascha Wildner             }
9670d02842fSSascha Wildner             else
9680d02842fSSascha Wildner             {
9690d02842fSSascha Wildner                 AcpiOsPrintf ("%41s   ", Name);
9700d02842fSSascha Wildner             }
9710d02842fSSascha Wildner         }
9720d02842fSSascha Wildner     }
9730d02842fSSascha Wildner     else /* Normal disassembler or verbose template */
9740d02842fSSascha Wildner     {
9750d02842fSSascha Wildner         if (ByteLength)
9760d02842fSSascha Wildner         {
9770d02842fSSascha Wildner             AcpiOsPrintf ("[%3.3Xh %4.4d% 4d] %28s : ",
9780d02842fSSascha Wildner                 Offset, Offset, ByteLength, Name);
9790d02842fSSascha Wildner         }
9800d02842fSSascha Wildner         else
9810d02842fSSascha Wildner         {
9820d02842fSSascha Wildner             if (*Name)
9830d02842fSSascha Wildner             {
9840d02842fSSascha Wildner                 AcpiOsPrintf ("%44s : ", Name);
9850d02842fSSascha Wildner             }
9860d02842fSSascha Wildner             else
9870d02842fSSascha Wildner             {
9880d02842fSSascha Wildner                 AcpiOsPrintf ("%44s   ", Name);
9890d02842fSSascha Wildner             }
9900d02842fSSascha Wildner         }
9910d02842fSSascha Wildner     }
9920d02842fSSascha Wildner }
9930d02842fSSascha Wildner 
9940d02842fSSascha Wildner void
AcpiDmLineHeader2(UINT32 Offset,UINT32 ByteLength,char * Name,UINT32 Value)9950d02842fSSascha Wildner AcpiDmLineHeader2 (
9960d02842fSSascha Wildner     UINT32                  Offset,
9970d02842fSSascha Wildner     UINT32                  ByteLength,
9980d02842fSSascha Wildner     char                    *Name,
9990d02842fSSascha Wildner     UINT32                  Value)
10000d02842fSSascha Wildner {
10010d02842fSSascha Wildner 
1002806343b9SSascha Wildner     if (AslGbl_DoTemplates && !AslGbl_VerboseTemplates) /* Terse template */
10030d02842fSSascha Wildner     {
10040d02842fSSascha Wildner         if (ByteLength)
10050d02842fSSascha Wildner         {
10060d02842fSSascha Wildner             AcpiOsPrintf ("[%.4d] %30s %3d : ",
10070d02842fSSascha Wildner                 ByteLength, Name, Value);
10080d02842fSSascha Wildner         }
10090d02842fSSascha Wildner         else
10100d02842fSSascha Wildner         {
10110d02842fSSascha Wildner             AcpiOsPrintf ("%36s % 3d : ",
10120d02842fSSascha Wildner                 Name, Value);
10130d02842fSSascha Wildner         }
10140d02842fSSascha Wildner     }
10150d02842fSSascha Wildner     else /* Normal disassembler or verbose template */
10160d02842fSSascha Wildner     {
10170d02842fSSascha Wildner         if (ByteLength)
10180d02842fSSascha Wildner         {
10190d02842fSSascha Wildner             AcpiOsPrintf ("[%3.3Xh %4.4d %3d] %24s %3d : ",
10200d02842fSSascha Wildner                 Offset, Offset, ByteLength, Name, Value);
10210d02842fSSascha Wildner         }
10220d02842fSSascha Wildner         else
10230d02842fSSascha Wildner         {
10240d02842fSSascha Wildner             AcpiOsPrintf ("[%3.3Xh %4.4d   ] %24s %3d : ",
10250d02842fSSascha Wildner                 Offset, Offset, Name, Value);
10260d02842fSSascha Wildner         }
10270d02842fSSascha Wildner     }
10280d02842fSSascha Wildner }
10290d02842fSSascha Wildner 
10300d02842fSSascha Wildner 
10310d02842fSSascha Wildner /*******************************************************************************
10320d02842fSSascha Wildner  *
10330d02842fSSascha Wildner  * FUNCTION:    AcpiDmDumpTable
10340d02842fSSascha Wildner  *
10350d02842fSSascha Wildner  * PARAMETERS:  TableLength         - Length of the entire ACPI table
10360d02842fSSascha Wildner  *              TableOffset         - Starting offset within the table for this
10370d02842fSSascha Wildner  *                                    sub-descriptor (0 if main table)
10380d02842fSSascha Wildner  *              Table               - The ACPI table
10390d02842fSSascha Wildner  *              SubtableLength      - Length of this sub-descriptor
10400d02842fSSascha Wildner  *              Info                - Info table for this ACPI table
10410d02842fSSascha Wildner  *
10423cc0afc6SSascha Wildner  * RETURN:      Status
10430d02842fSSascha Wildner  *
10440d02842fSSascha Wildner  * DESCRIPTION: Display ACPI table contents by walking the Info table.
10450d02842fSSascha Wildner  *
10460d02842fSSascha Wildner  * Note: This function must remain in sync with DtGetFieldLength.
10470d02842fSSascha Wildner  *
10480d02842fSSascha Wildner  ******************************************************************************/
10490d02842fSSascha Wildner 
10500d02842fSSascha Wildner ACPI_STATUS
AcpiDmDumpTable(UINT32 TableLength,UINT32 TableOffset,void * Table,UINT32 SubtableLength,ACPI_DMTABLE_INFO * Info)10510d02842fSSascha Wildner AcpiDmDumpTable (
10520d02842fSSascha Wildner     UINT32                  TableLength,
10530d02842fSSascha Wildner     UINT32                  TableOffset,
10540d02842fSSascha Wildner     void                    *Table,
10550d02842fSSascha Wildner     UINT32                  SubtableLength,
10560d02842fSSascha Wildner     ACPI_DMTABLE_INFO       *Info)
10570d02842fSSascha Wildner {
10580d02842fSSascha Wildner     UINT8                   *Target;
10590d02842fSSascha Wildner     UINT32                  CurrentOffset;
10600d02842fSSascha Wildner     UINT32                  ByteLength;
10610d02842fSSascha Wildner     UINT8                   Temp8;
10620d02842fSSascha Wildner     UINT16                  Temp16;
10635943f66cSSascha Wildner     UINT32                  Temp32;
10640d02842fSSascha Wildner     UINT64                  Value;
1065896f2e3aSSascha Wildner     const AH_TABLE          *TableData;
10660d02842fSSascha Wildner     const char              *Name;
10670d02842fSSascha Wildner     BOOLEAN                 LastOutputBlankLine = FALSE;
1068267c04fdSSascha Wildner     ACPI_STATUS             Status;
10690d02842fSSascha Wildner     char                    RepairedName[8];
10700d02842fSSascha Wildner 
10710d02842fSSascha Wildner 
10720d02842fSSascha Wildner     if (!Info)
10730d02842fSSascha Wildner     {
10740d02842fSSascha Wildner         AcpiOsPrintf ("Display not implemented\n");
10750d02842fSSascha Wildner         return (AE_NOT_IMPLEMENTED);
10760d02842fSSascha Wildner     }
10770d02842fSSascha Wildner 
10780d02842fSSascha Wildner     /* Walk entire Info table; Null name terminates */
10790d02842fSSascha Wildner 
10800d02842fSSascha Wildner     for (; Info->Name; Info++)
10810d02842fSSascha Wildner     {
10820d02842fSSascha Wildner         /*
10830d02842fSSascha Wildner          * Target points to the field within the ACPI Table. CurrentOffset is
10840d02842fSSascha Wildner          * the offset of the field from the start of the main table.
10850d02842fSSascha Wildner          */
10860d02842fSSascha Wildner         Target = ACPI_ADD_PTR (UINT8, Table, Info->Offset);
10870d02842fSSascha Wildner         CurrentOffset = TableOffset + Info->Offset;
10880d02842fSSascha Wildner 
1089896f2e3aSSascha Wildner         /* Check for beyond subtable end or (worse) beyond EOT */
10900d02842fSSascha Wildner 
1091*aab122a6SSascha Wildner         if (SubtableLength && (Info->Offset > SubtableLength))
10920d02842fSSascha Wildner         {
10935943f66cSSascha Wildner             AcpiOsPrintf (
10944898bea4SSascha Wildner                 "/**** ACPI subtable terminates early (Len %u) - "
10954898bea4SSascha Wildner                 "may be older version (dump table) */\n", SubtableLength);
1096896f2e3aSSascha Wildner 
1097896f2e3aSSascha Wildner             /* Move on to next subtable */
1098896f2e3aSSascha Wildner 
1099896f2e3aSSascha Wildner             return (AE_OK);
1100896f2e3aSSascha Wildner         }
1101896f2e3aSSascha Wildner 
1102896f2e3aSSascha Wildner         if (CurrentOffset >= TableLength)
1103896f2e3aSSascha Wildner         {
1104896f2e3aSSascha Wildner             AcpiOsPrintf (
1105896f2e3aSSascha Wildner                 "/**** ACPI table terminates "
1106896f2e3aSSascha Wildner                 "in the middle of a data structure! (dump table) */\n");
11070d02842fSSascha Wildner             return (AE_BAD_DATA);
11080d02842fSSascha Wildner         }
11090d02842fSSascha Wildner 
11100d02842fSSascha Wildner         /* Generate the byte length for this field */
11110d02842fSSascha Wildner 
11120d02842fSSascha Wildner         switch (Info->Opcode)
11130d02842fSSascha Wildner         {
11140d02842fSSascha Wildner         case ACPI_DMT_UINT8:
11150d02842fSSascha Wildner         case ACPI_DMT_CHKSUM:
11160d02842fSSascha Wildner         case ACPI_DMT_SPACEID:
11170d02842fSSascha Wildner         case ACPI_DMT_ACCWIDTH:
111801d5d5dfSSascha Wildner         case ACPI_DMT_CEDT:
11190d02842fSSascha Wildner         case ACPI_DMT_IVRS:
11204898bea4SSascha Wildner         case ACPI_DMT_IVRS_DE:
1121066b6da2SSascha Wildner         case ACPI_DMT_GTDT:
11220d02842fSSascha Wildner         case ACPI_DMT_MADT:
112384fe3360SSascha Wildner         case ACPI_DMT_NHLT1:
112484fe3360SSascha Wildner         case ACPI_DMT_NHLT1a:
1125*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1b:
1126*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1c:
1127*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1d:
1128*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1f:
11290d02842fSSascha Wildner         case ACPI_DMT_PCCT:
11300d02842fSSascha Wildner         case ACPI_DMT_PMTT:
11311093ca81SSascha Wildner         case ACPI_DMT_PPTT:
11324898bea4SSascha Wildner         case ACPI_DMT_RGRT:
11337bcb6cafSSascha Wildner         case ACPI_DMT_SDEV:
11340d02842fSSascha Wildner         case ACPI_DMT_SRAT:
11350672a19bSSascha Wildner         case ACPI_DMT_AEST:
11360672a19bSSascha Wildner         case ACPI_DMT_AEST_RES:
11370672a19bSSascha Wildner         case ACPI_DMT_AEST_XFACE:
11380672a19bSSascha Wildner         case ACPI_DMT_AEST_XRUPT:
11390d02842fSSascha Wildner         case ACPI_DMT_ASF:
11400d02842fSSascha Wildner         case ACPI_DMT_HESTNTYP:
11410d02842fSSascha Wildner         case ACPI_DMT_FADTPM:
11420d02842fSSascha Wildner         case ACPI_DMT_EINJACT:
11430d02842fSSascha Wildner         case ACPI_DMT_EINJINST:
11440d02842fSSascha Wildner         case ACPI_DMT_ERSTACT:
11450d02842fSSascha Wildner         case ACPI_DMT_ERSTINST:
1146066b6da2SSascha Wildner         case ACPI_DMT_DMAR_SCOPE:
114701d5d5dfSSascha Wildner         case ACPI_DMT_VIOT:
11480d02842fSSascha Wildner 
11490d02842fSSascha Wildner             ByteLength = 1;
11500d02842fSSascha Wildner             break;
11510d02842fSSascha Wildner 
11520d02842fSSascha Wildner         case ACPI_DMT_UINT16:
11530d02842fSSascha Wildner         case ACPI_DMT_DMAR:
11540d02842fSSascha Wildner         case ACPI_DMT_HEST:
11551093ca81SSascha Wildner         case ACPI_DMT_HMAT:
1156896f2e3aSSascha Wildner         case ACPI_DMT_NFIT:
1157*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1e:
115801d5d5dfSSascha Wildner         case ACPI_DMT_PHAT:
11590d02842fSSascha Wildner 
11600d02842fSSascha Wildner             ByteLength = 2;
11610d02842fSSascha Wildner             break;
11620d02842fSSascha Wildner 
11630d02842fSSascha Wildner         case ACPI_DMT_UINT24:
11640d02842fSSascha Wildner 
11650d02842fSSascha Wildner             ByteLength = 3;
11660d02842fSSascha Wildner             break;
11670d02842fSSascha Wildner 
11680d02842fSSascha Wildner         case ACPI_DMT_UINT32:
11690672a19bSSascha Wildner         case ACPI_DMT_AEST_CACHE:
11700672a19bSSascha Wildner         case ACPI_DMT_AEST_GIC:
11710d02842fSSascha Wildner         case ACPI_DMT_NAME4:
11720d02842fSSascha Wildner         case ACPI_DMT_SIG:
11739e1c0880SSascha Wildner         case ACPI_DMT_LPIT:
11747bcb6cafSSascha Wildner         case ACPI_DMT_TPM2:
11750d02842fSSascha Wildner 
11760d02842fSSascha Wildner             ByteLength = 4;
11770d02842fSSascha Wildner             break;
11780d02842fSSascha Wildner 
11790d02842fSSascha Wildner         case ACPI_DMT_UINT40:
11800d02842fSSascha Wildner 
11810d02842fSSascha Wildner             ByteLength = 5;
11820d02842fSSascha Wildner             break;
11830d02842fSSascha Wildner 
11840d02842fSSascha Wildner         case ACPI_DMT_UINT48:
11850d02842fSSascha Wildner         case ACPI_DMT_NAME6:
11860d02842fSSascha Wildner 
11870d02842fSSascha Wildner             ByteLength = 6;
11880d02842fSSascha Wildner             break;
11890d02842fSSascha Wildner 
11900d02842fSSascha Wildner         case ACPI_DMT_UINT56:
11910d02842fSSascha Wildner         case ACPI_DMT_BUF7:
11920d02842fSSascha Wildner 
11930d02842fSSascha Wildner             ByteLength = 7;
11940d02842fSSascha Wildner             break;
11950d02842fSSascha Wildner 
11960d02842fSSascha Wildner         case ACPI_DMT_UINT64:
11970d02842fSSascha Wildner         case ACPI_DMT_NAME8:
11980d02842fSSascha Wildner 
11990d02842fSSascha Wildner             ByteLength = 8;
12000d02842fSSascha Wildner             break;
12010d02842fSSascha Wildner 
12020d02842fSSascha Wildner         case ACPI_DMT_BUF10:
12030d02842fSSascha Wildner 
12040d02842fSSascha Wildner             ByteLength = 10;
12050d02842fSSascha Wildner             break;
12060d02842fSSascha Wildner 
1207277350a0SSascha Wildner         case ACPI_DMT_BUF12:
1208277350a0SSascha Wildner 
1209277350a0SSascha Wildner             ByteLength = 12;
1210277350a0SSascha Wildner             break;
1211277350a0SSascha Wildner 
12120d02842fSSascha Wildner         case ACPI_DMT_BUF16:
12130d02842fSSascha Wildner         case ACPI_DMT_UUID:
12140d02842fSSascha Wildner 
12150d02842fSSascha Wildner             ByteLength = 16;
12160d02842fSSascha Wildner             break;
12170d02842fSSascha Wildner 
121884fe3360SSascha Wildner         case ACPI_DMT_BUF18:
121984fe3360SSascha Wildner 
122084fe3360SSascha Wildner             ByteLength = 18;
122184fe3360SSascha Wildner             break;
122284fe3360SSascha Wildner 
12230d02842fSSascha Wildner         case ACPI_DMT_BUF128:
12240d02842fSSascha Wildner 
12250d02842fSSascha Wildner             ByteLength = 128;
12260d02842fSSascha Wildner             break;
12270d02842fSSascha Wildner 
12280672a19bSSascha Wildner         case ACPI_DMT_WPBT_UNICODE:
12290672a19bSSascha Wildner 
12300672a19bSSascha Wildner             ByteLength = SubtableLength;
12310672a19bSSascha Wildner             CurrentOffset = sizeof (ACPI_TABLE_WPBT);
12320672a19bSSascha Wildner             break;
12330672a19bSSascha Wildner 
1234896f2e3aSSascha Wildner         case ACPI_DMT_UNICODE:
12355943f66cSSascha Wildner         case ACPI_DMT_BUFFER:
12365943f66cSSascha Wildner         case ACPI_DMT_RAW_BUFFER:
12375943f66cSSascha Wildner 
12385943f66cSSascha Wildner             ByteLength = SubtableLength;
12395943f66cSSascha Wildner             break;
12405943f66cSSascha Wildner 
124101d5d5dfSSascha Wildner         case ACPI_DMT_PMTT_VENDOR:
124201d5d5dfSSascha Wildner             /*
124301d5d5dfSSascha Wildner              * Calculate the length of the vendor data for the PMTT table:
124401d5d5dfSSascha Wildner              * Length = (Current Subtable ptr + Subtable length) -
124501d5d5dfSSascha Wildner              *          Start of the vendor data (Target)
124601d5d5dfSSascha Wildner              */
124701d5d5dfSSascha Wildner             ByteLength = ((ACPI_CAST_PTR (char, Table) +
124801d5d5dfSSascha Wildner                             (ACPI_CAST_PTR (ACPI_PMTT_HEADER, Table)->Length)) -
124901d5d5dfSSascha Wildner                             ACPI_CAST_PTR (char, Target));
125001d5d5dfSSascha Wildner             break;
125101d5d5dfSSascha Wildner 
12520d02842fSSascha Wildner         case ACPI_DMT_STRING:
12530d02842fSSascha Wildner 
125425ca8c79SSascha Wildner             ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1;
12550d02842fSSascha Wildner             break;
12560d02842fSSascha Wildner 
12574898bea4SSascha Wildner         case ACPI_DMT_IVRS_UNTERMINATED_STRING:
12584898bea4SSascha Wildner 
12594898bea4SSascha Wildner             ByteLength = ((ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, Target) -1)->UidLength);
12604898bea4SSascha Wildner             break;
12614898bea4SSascha Wildner 
12620d02842fSSascha Wildner         case ACPI_DMT_GAS:
12630d02842fSSascha Wildner 
12640d02842fSSascha Wildner             if (!LastOutputBlankLine)
12650d02842fSSascha Wildner             {
12660d02842fSSascha Wildner                 AcpiOsPrintf ("\n");
12670d02842fSSascha Wildner                 LastOutputBlankLine = TRUE;
12680d02842fSSascha Wildner             }
1269820c5b08SSascha Wildner 
12700d02842fSSascha Wildner             ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
12710d02842fSSascha Wildner             break;
12720d02842fSSascha Wildner 
12730d02842fSSascha Wildner         case ACPI_DMT_HESTNTFY:
12740d02842fSSascha Wildner 
12750d02842fSSascha Wildner             if (!LastOutputBlankLine)
12760d02842fSSascha Wildner             {
12770d02842fSSascha Wildner                 AcpiOsPrintf ("\n");
12780d02842fSSascha Wildner                 LastOutputBlankLine = TRUE;
12790d02842fSSascha Wildner             }
1280820c5b08SSascha Wildner 
12810d02842fSSascha Wildner             ByteLength = sizeof (ACPI_HEST_NOTIFY);
12820d02842fSSascha Wildner             break;
12830d02842fSSascha Wildner 
1284896f2e3aSSascha Wildner         case ACPI_DMT_IORTMEM:
1285896f2e3aSSascha Wildner 
1286896f2e3aSSascha Wildner             if (!LastOutputBlankLine)
1287896f2e3aSSascha Wildner             {
1288896f2e3aSSascha Wildner                 LastOutputBlankLine = FALSE;
1289896f2e3aSSascha Wildner             }
1290820c5b08SSascha Wildner 
1291896f2e3aSSascha Wildner             ByteLength = sizeof (ACPI_IORT_MEMORY_ACCESS);
1292896f2e3aSSascha Wildner             break;
1293896f2e3aSSascha Wildner 
12940d02842fSSascha Wildner         default:
12950d02842fSSascha Wildner 
12960d02842fSSascha Wildner             ByteLength = 0;
12970d02842fSSascha Wildner             break;
12980d02842fSSascha Wildner         }
12990d02842fSSascha Wildner 
1300896f2e3aSSascha Wildner         /* Check if we are beyond a subtable, or (worse) beyond EOT */
1301896f2e3aSSascha Wildner 
13020d02842fSSascha Wildner         if (CurrentOffset + ByteLength > TableLength)
13030d02842fSSascha Wildner         {
1304896f2e3aSSascha Wildner             if (SubtableLength)
1305896f2e3aSSascha Wildner             {
13065943f66cSSascha Wildner                 AcpiOsPrintf (
1307896f2e3aSSascha Wildner                     "/**** ACPI subtable terminates early - "
1308896f2e3aSSascha Wildner                     "may be older version (dump table) */\n");
1309896f2e3aSSascha Wildner 
1310896f2e3aSSascha Wildner                 /* Move on to next subtable */
1311896f2e3aSSascha Wildner 
1312896f2e3aSSascha Wildner                 return (AE_OK);
1313896f2e3aSSascha Wildner             }
1314896f2e3aSSascha Wildner 
1315896f2e3aSSascha Wildner             AcpiOsPrintf (
1316896f2e3aSSascha Wildner                 "/**** ACPI table terminates "
1317896f2e3aSSascha Wildner                 "in the middle of a data structure! */\n");
13180d02842fSSascha Wildner             return (AE_BAD_DATA);
13190d02842fSSascha Wildner         }
13200d02842fSSascha Wildner 
13210d02842fSSascha Wildner         if (Info->Opcode == ACPI_DMT_EXTRA_TEXT)
13220d02842fSSascha Wildner         {
13230d02842fSSascha Wildner             AcpiOsPrintf ("%s", Info->Name);
13240d02842fSSascha Wildner             continue;
13250d02842fSSascha Wildner         }
13260d02842fSSascha Wildner 
13270d02842fSSascha Wildner         /* Start a new line and decode the opcode */
13280d02842fSSascha Wildner 
13290d02842fSSascha Wildner         AcpiDmLineHeader (CurrentOffset, ByteLength, Info->Name);
13300d02842fSSascha Wildner 
13310d02842fSSascha Wildner         switch (Info->Opcode)
13320d02842fSSascha Wildner         {
13330d02842fSSascha Wildner         /* Single-bit Flag fields. Note: Opcode is the bit position */
13340d02842fSSascha Wildner 
13350d02842fSSascha Wildner         case ACPI_DMT_FLAG0:
13360d02842fSSascha Wildner         case ACPI_DMT_FLAG1:
13370d02842fSSascha Wildner         case ACPI_DMT_FLAG2:
13380d02842fSSascha Wildner         case ACPI_DMT_FLAG3:
13390d02842fSSascha Wildner         case ACPI_DMT_FLAG4:
13400d02842fSSascha Wildner         case ACPI_DMT_FLAG5:
13410d02842fSSascha Wildner         case ACPI_DMT_FLAG6:
13420d02842fSSascha Wildner         case ACPI_DMT_FLAG7:
13430d02842fSSascha Wildner 
13440d02842fSSascha Wildner             AcpiOsPrintf ("%1.1X\n", (*Target >> Info->Opcode) & 0x01);
13450d02842fSSascha Wildner             break;
13460d02842fSSascha Wildner 
13470d02842fSSascha Wildner         /* 2-bit Flag fields */
13480d02842fSSascha Wildner 
13490d02842fSSascha Wildner         case ACPI_DMT_FLAGS0:
13500d02842fSSascha Wildner 
13510d02842fSSascha Wildner             AcpiOsPrintf ("%1.1X\n", *Target & 0x03);
13520d02842fSSascha Wildner             break;
13530d02842fSSascha Wildner 
13540d02842fSSascha Wildner         case ACPI_DMT_FLAGS1:
13550d02842fSSascha Wildner 
13560d02842fSSascha Wildner             AcpiOsPrintf ("%1.1X\n", (*Target >> 1) & 0x03);
13570d02842fSSascha Wildner             break;
13580d02842fSSascha Wildner 
13590d02842fSSascha Wildner         case ACPI_DMT_FLAGS2:
13600d02842fSSascha Wildner 
13610d02842fSSascha Wildner             AcpiOsPrintf ("%1.1X\n", (*Target >> 2) & 0x03);
13620d02842fSSascha Wildner             break;
13630d02842fSSascha Wildner 
13640d02842fSSascha Wildner         case ACPI_DMT_FLAGS4:
13650d02842fSSascha Wildner 
13660d02842fSSascha Wildner             AcpiOsPrintf ("%1.1X\n", (*Target >> 4) & 0x03);
13670d02842fSSascha Wildner             break;
13680d02842fSSascha Wildner 
13691093ca81SSascha Wildner         case ACPI_DMT_FLAGS4_0:
13701093ca81SSascha Wildner 
13711093ca81SSascha Wildner             AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target) & 0x0F);
13721093ca81SSascha Wildner             break;
13731093ca81SSascha Wildner 
13741093ca81SSascha Wildner         case ACPI_DMT_FLAGS4_4:
13751093ca81SSascha Wildner 
13761093ca81SSascha Wildner             AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 4) & 0x0F);
13771093ca81SSascha Wildner             break;
13781093ca81SSascha Wildner 
13791093ca81SSascha Wildner         case ACPI_DMT_FLAGS4_8:
13801093ca81SSascha Wildner 
13811093ca81SSascha Wildner             AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 8) & 0x0F);
13821093ca81SSascha Wildner             break;
13831093ca81SSascha Wildner 
13841093ca81SSascha Wildner         case ACPI_DMT_FLAGS4_12:
13851093ca81SSascha Wildner 
13861093ca81SSascha Wildner             AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 12) & 0x0F);
13871093ca81SSascha Wildner             break;
13881093ca81SSascha Wildner 
13891093ca81SSascha Wildner         case ACPI_DMT_FLAGS16_16:
13901093ca81SSascha Wildner 
13911093ca81SSascha Wildner             AcpiOsPrintf ("%4.4X\n", (*(UINT32 *)Target >> 16) & 0xFFFF);
13921093ca81SSascha Wildner             break;
13931093ca81SSascha Wildner 
13940d02842fSSascha Wildner         /* Integer Data Types */
13950d02842fSSascha Wildner 
13960d02842fSSascha Wildner         case ACPI_DMT_UINT8:
13970d02842fSSascha Wildner         case ACPI_DMT_UINT16:
13980d02842fSSascha Wildner         case ACPI_DMT_UINT24:
13990d02842fSSascha Wildner         case ACPI_DMT_UINT32:
14000d02842fSSascha Wildner         case ACPI_DMT_UINT40:
14010d02842fSSascha Wildner         case ACPI_DMT_UINT48:
14020d02842fSSascha Wildner         case ACPI_DMT_UINT56:
14030d02842fSSascha Wildner         case ACPI_DMT_UINT64:
14040d02842fSSascha Wildner             /*
14050d02842fSSascha Wildner              * Dump bytes - high byte first, low byte last.
14060d02842fSSascha Wildner              * Note: All ACPI tables are little-endian.
14070d02842fSSascha Wildner              */
14080d02842fSSascha Wildner             Value = 0;
14090d02842fSSascha Wildner             for (Temp8 = (UINT8) ByteLength; Temp8 > 0; Temp8--)
14100d02842fSSascha Wildner             {
14110d02842fSSascha Wildner                 AcpiOsPrintf ("%2.2X", Target[Temp8 - 1]);
14120d02842fSSascha Wildner                 Value |= Target[Temp8 - 1];
14130d02842fSSascha Wildner                 Value <<= 8;
14140d02842fSSascha Wildner             }
14150d02842fSSascha Wildner 
14160d02842fSSascha Wildner             if (!Value && (Info->Flags & DT_DESCRIBES_OPTIONAL))
14170d02842fSSascha Wildner             {
14180d02842fSSascha Wildner                 AcpiOsPrintf (" [Optional field not present]");
14190d02842fSSascha Wildner             }
14200d02842fSSascha Wildner 
14210d02842fSSascha Wildner             AcpiOsPrintf ("\n");
14220d02842fSSascha Wildner             break;
14230d02842fSSascha Wildner 
14240d02842fSSascha Wildner         case ACPI_DMT_BUF7:
14250d02842fSSascha Wildner         case ACPI_DMT_BUF10:
1426277350a0SSascha Wildner         case ACPI_DMT_BUF12:
14270d02842fSSascha Wildner         case ACPI_DMT_BUF16:
142884fe3360SSascha Wildner         case ACPI_DMT_BUF18:
14290d02842fSSascha Wildner         case ACPI_DMT_BUF128:
14300d02842fSSascha Wildner             /*
14310d02842fSSascha Wildner              * Buffer: Size depends on the opcode and was set above.
14320d02842fSSascha Wildner              * Each hex byte is separated with a space.
14330d02842fSSascha Wildner              * Multiple lines are separated by line continuation char.
14340d02842fSSascha Wildner              */
14350d02842fSSascha Wildner             for (Temp16 = 0; Temp16 < ByteLength; Temp16++)
14360d02842fSSascha Wildner             {
14370d02842fSSascha Wildner                 AcpiOsPrintf ("%2.2X", Target[Temp16]);
14380d02842fSSascha Wildner                 if ((UINT32) (Temp16 + 1) < ByteLength)
14390d02842fSSascha Wildner                 {
14400d02842fSSascha Wildner                     if ((Temp16 > 0) && (!((Temp16+1) % 16)))
14410d02842fSSascha Wildner                     {
14420d02842fSSascha Wildner                         AcpiOsPrintf (" \\\n"); /* Line continuation */
14430d02842fSSascha Wildner                         AcpiDmLineHeader (0, 0, NULL);
14440d02842fSSascha Wildner                     }
14450d02842fSSascha Wildner                     else
14460d02842fSSascha Wildner                     {
14470d02842fSSascha Wildner                         AcpiOsPrintf (" ");
14480d02842fSSascha Wildner                     }
14490d02842fSSascha Wildner                 }
14500d02842fSSascha Wildner             }
1451820c5b08SSascha Wildner 
14520d02842fSSascha Wildner             AcpiOsPrintf ("\n");
14530d02842fSSascha Wildner             break;
14540d02842fSSascha Wildner 
14550d02842fSSascha Wildner         case ACPI_DMT_UUID:
14560d02842fSSascha Wildner 
14570d02842fSSascha Wildner             /* Convert 16-byte UUID buffer to 36-byte formatted UUID string */
14580d02842fSSascha Wildner 
14594898bea4SSascha Wildner             (void) AcpiUtConvertUuidToString ((char *) Target, AslGbl_MsgBuffer);
14600d02842fSSascha Wildner 
1461806343b9SSascha Wildner             AcpiOsPrintf ("%s\n", AslGbl_MsgBuffer);
14620d02842fSSascha Wildner             break;
14630d02842fSSascha Wildner 
14640d02842fSSascha Wildner         case ACPI_DMT_STRING:
14650d02842fSSascha Wildner 
14660d02842fSSascha Wildner             AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target));
14670d02842fSSascha Wildner             break;
14680d02842fSSascha Wildner 
14694898bea4SSascha Wildner         case ACPI_DMT_IVRS_UNTERMINATED_STRING:
14704898bea4SSascha Wildner 
14714898bea4SSascha Wildner             AcpiOsPrintf ("\"%.*s\"\n", ByteLength, ACPI_CAST_PTR (char, Target));
14724898bea4SSascha Wildner             break;
14734898bea4SSascha Wildner 
14740d02842fSSascha Wildner         /* Fixed length ASCII name fields */
14750d02842fSSascha Wildner 
14760d02842fSSascha Wildner         case ACPI_DMT_SIG:
14770d02842fSSascha Wildner 
14780d27ae55SSascha Wildner             AcpiUtCheckAndRepairAscii (Target, RepairedName, 4);
14790d02842fSSascha Wildner             AcpiOsPrintf ("\"%.4s\"    ", RepairedName);
1480820c5b08SSascha Wildner 
1481896f2e3aSSascha Wildner             TableData = AcpiAhGetTableInfo (ACPI_CAST_PTR (char, Target));
14820d02842fSSascha Wildner             if (TableData)
14830d02842fSSascha Wildner             {
1484896f2e3aSSascha Wildner                 AcpiOsPrintf (STRING_FORMAT, TableData->Description);
14850d02842fSSascha Wildner             }
14860d02842fSSascha Wildner             else
14870d02842fSSascha Wildner             {
14880d02842fSSascha Wildner                 AcpiOsPrintf ("\n");
14890d02842fSSascha Wildner             }
14900d02842fSSascha Wildner             break;
14910d02842fSSascha Wildner 
14920d02842fSSascha Wildner         case ACPI_DMT_NAME4:
14930d02842fSSascha Wildner 
14940d27ae55SSascha Wildner             AcpiUtCheckAndRepairAscii (Target, RepairedName, 4);
14950d02842fSSascha Wildner             AcpiOsPrintf ("\"%.4s\"\n", RepairedName);
14960d02842fSSascha Wildner             break;
14970d02842fSSascha Wildner 
14980d02842fSSascha Wildner         case ACPI_DMT_NAME6:
14990d02842fSSascha Wildner 
15000d27ae55SSascha Wildner             AcpiUtCheckAndRepairAscii (Target, RepairedName, 6);
15010d02842fSSascha Wildner             AcpiOsPrintf ("\"%.6s\"\n", RepairedName);
15020d02842fSSascha Wildner             break;
15030d02842fSSascha Wildner 
15040d02842fSSascha Wildner         case ACPI_DMT_NAME8:
15050d02842fSSascha Wildner 
15060d27ae55SSascha Wildner             AcpiUtCheckAndRepairAscii (Target, RepairedName, 8);
15070d02842fSSascha Wildner             AcpiOsPrintf ("\"%.8s\"\n", RepairedName);
15080d02842fSSascha Wildner             break;
15090d02842fSSascha Wildner 
15100d02842fSSascha Wildner         /* Special Data Types */
15110d02842fSSascha Wildner 
15120d02842fSSascha Wildner         case ACPI_DMT_CHKSUM:
15130d02842fSSascha Wildner 
15140d02842fSSascha Wildner             /* Checksum, display and validate */
15150d02842fSSascha Wildner 
15160d02842fSSascha Wildner             AcpiOsPrintf ("%2.2X", *Target);
15170d02842fSSascha Wildner             Temp8 = AcpiDmGenerateChecksum (Table,
15180d02842fSSascha Wildner                 ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
15190d02842fSSascha Wildner                 ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum);
15205943f66cSSascha Wildner 
15210d02842fSSascha Wildner             if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)
15220d02842fSSascha Wildner             {
15230d02842fSSascha Wildner                 AcpiOsPrintf (
15240d02842fSSascha Wildner                     "     /* Incorrect checksum, should be %2.2X */", Temp8);
15250d02842fSSascha Wildner             }
1526820c5b08SSascha Wildner 
15270d02842fSSascha Wildner             AcpiOsPrintf ("\n");
15280d02842fSSascha Wildner             break;
15290d02842fSSascha Wildner 
15300d02842fSSascha Wildner         case ACPI_DMT_SPACEID:
15310d02842fSSascha Wildner 
15320d02842fSSascha Wildner             /* Address Space ID */
15330d02842fSSascha Wildner 
15340d02842fSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiUtGetRegionName (*Target));
15350d02842fSSascha Wildner             break;
15360d02842fSSascha Wildner 
15370d02842fSSascha Wildner         case ACPI_DMT_ACCWIDTH:
15380d02842fSSascha Wildner 
15390d02842fSSascha Wildner             /* Encoded Access Width */
15400d02842fSSascha Wildner 
15410d02842fSSascha Wildner             Temp8 = *Target;
15420d02842fSSascha Wildner             if (Temp8 > ACPI_GAS_WIDTH_RESERVED)
15430d02842fSSascha Wildner             {
15440d02842fSSascha Wildner                 Temp8 = ACPI_GAS_WIDTH_RESERVED;
15450d02842fSSascha Wildner             }
15460d02842fSSascha Wildner 
15475943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGasAccessWidth[Temp8]);
15480d02842fSSascha Wildner             break;
15490d02842fSSascha Wildner 
15500d02842fSSascha Wildner         case ACPI_DMT_GAS:
15510d02842fSSascha Wildner 
15520d02842fSSascha Wildner             /* Generic Address Structure */
15530d02842fSSascha Wildner 
15540d02842fSSascha Wildner             AcpiOsPrintf (STRING_FORMAT, "Generic Address Structure");
1555267c04fdSSascha Wildner             Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
15560d02842fSSascha Wildner                 sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas);
1557267c04fdSSascha Wildner             if (ACPI_FAILURE (Status))
1558267c04fdSSascha Wildner             {
1559267c04fdSSascha Wildner                 return (Status);
1560267c04fdSSascha Wildner             }
1561267c04fdSSascha Wildner 
15620d02842fSSascha Wildner             AcpiOsPrintf ("\n");
15630d02842fSSascha Wildner             LastOutputBlankLine = TRUE;
15640d02842fSSascha Wildner             break;
15650d02842fSSascha Wildner 
15660672a19bSSascha Wildner         case ACPI_DMT_AEST:
15670672a19bSSascha Wildner 
15680672a19bSSascha Wildner             /* AEST subtable types */
15690672a19bSSascha Wildner 
15700672a19bSSascha Wildner             Temp8 = *Target;
15710672a19bSSascha Wildner             if (Temp8 > ACPI_AEST_NODE_TYPE_RESERVED)
15720672a19bSSascha Wildner             {
15730672a19bSSascha Wildner                 Temp8 = ACPI_AEST_NODE_TYPE_RESERVED;
15740672a19bSSascha Wildner             }
15750672a19bSSascha Wildner 
15760672a19bSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
15770672a19bSSascha Wildner                 AcpiDmAestSubnames[Temp8]);
15780672a19bSSascha Wildner             break;
15790672a19bSSascha Wildner 
15800672a19bSSascha Wildner         case ACPI_DMT_AEST_CACHE:
15810672a19bSSascha Wildner 
15820672a19bSSascha Wildner             /* AEST cache resource subtable */
15830672a19bSSascha Wildner 
15840672a19bSSascha Wildner             Temp32 = *Target;
15850672a19bSSascha Wildner             if (Temp32 > ACPI_AEST_CACHE_RESERVED)
15860672a19bSSascha Wildner             {
15870672a19bSSascha Wildner                 Temp32 = ACPI_AEST_CACHE_RESERVED;
15880672a19bSSascha Wildner             }
15890672a19bSSascha Wildner 
15900672a19bSSascha Wildner             AcpiOsPrintf (UINT32_FORMAT, *Target,
15910672a19bSSascha Wildner                 AcpiDmAestCacheNames[Temp32]);
15920672a19bSSascha Wildner             break;
15930672a19bSSascha Wildner 
15940672a19bSSascha Wildner         case ACPI_DMT_AEST_GIC:
15950672a19bSSascha Wildner 
15960672a19bSSascha Wildner             /* AEST GIC error subtable */
15970672a19bSSascha Wildner 
15980672a19bSSascha Wildner             Temp32 = *Target;
15990672a19bSSascha Wildner             if (Temp32 > ACPI_AEST_GIC_RESERVED)
16000672a19bSSascha Wildner             {
16010672a19bSSascha Wildner                 Temp32 = ACPI_AEST_GIC_RESERVED;
16020672a19bSSascha Wildner             }
16030672a19bSSascha Wildner 
16040672a19bSSascha Wildner             AcpiOsPrintf (UINT32_FORMAT, *Target,
16050672a19bSSascha Wildner                 AcpiDmAestGicNames[Temp32]);
16060672a19bSSascha Wildner             break;
16070672a19bSSascha Wildner 
16080672a19bSSascha Wildner         case ACPI_DMT_AEST_RES:
16090672a19bSSascha Wildner 
16100672a19bSSascha Wildner             /* AEST resource type subtable */
16110672a19bSSascha Wildner 
16120672a19bSSascha Wildner             Temp8 = *Target;
16130672a19bSSascha Wildner             if (Temp8 > ACPI_AEST_RESOURCE_RESERVED)
16140672a19bSSascha Wildner             {
16150672a19bSSascha Wildner                 Temp8 = ACPI_AEST_RESOURCE_RESERVED;
16160672a19bSSascha Wildner             }
16170672a19bSSascha Wildner 
16180672a19bSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
16190672a19bSSascha Wildner                 AcpiDmAestResourceNames[Temp8]);
16200672a19bSSascha Wildner             break;
16210672a19bSSascha Wildner 
16220672a19bSSascha Wildner         case ACPI_DMT_AEST_XFACE:
16230672a19bSSascha Wildner 
16240672a19bSSascha Wildner             /* AEST interface structure types */
16250672a19bSSascha Wildner 
16260672a19bSSascha Wildner             Temp8 = *Target;
16270672a19bSSascha Wildner             if (Temp8 > ACPI_AEST_XFACE_RESERVED)
16280672a19bSSascha Wildner             {
16290672a19bSSascha Wildner                 Temp8 = ACPI_AEST_XFACE_RESERVED;
16300672a19bSSascha Wildner             }
16310672a19bSSascha Wildner 
16320672a19bSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
16330672a19bSSascha Wildner                 AcpiDmAestXfaceNames[Temp8]);
16340672a19bSSascha Wildner             break;
16350672a19bSSascha Wildner 
16360672a19bSSascha Wildner         case ACPI_DMT_AEST_XRUPT:
16370672a19bSSascha Wildner 
16380672a19bSSascha Wildner             /* AEST interrupt structure types */
16390672a19bSSascha Wildner 
16400672a19bSSascha Wildner             Temp8 = *Target;
16410672a19bSSascha Wildner             if (Temp8 > ACPI_AEST_XRUPT_RESERVED)
16420672a19bSSascha Wildner             {
16430672a19bSSascha Wildner                 Temp8 = ACPI_AEST_XRUPT_RESERVED;
16440672a19bSSascha Wildner             }
16450672a19bSSascha Wildner 
16460672a19bSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
16470672a19bSSascha Wildner                 AcpiDmAestXruptNames[Temp8]);
16480672a19bSSascha Wildner             break;
16490672a19bSSascha Wildner 
16500d02842fSSascha Wildner         case ACPI_DMT_ASF:
16510d02842fSSascha Wildner 
16520d02842fSSascha Wildner             /* ASF subtable types */
16530d02842fSSascha Wildner 
16540d02842fSSascha Wildner             Temp16 = (UINT16) ((*Target) & 0x7F);  /* Top bit can be zero or one */
16550d02842fSSascha Wildner             if (Temp16 > ACPI_ASF_TYPE_RESERVED)
16560d02842fSSascha Wildner             {
16570d02842fSSascha Wildner                 Temp16 = ACPI_ASF_TYPE_RESERVED;
16580d02842fSSascha Wildner             }
16590d02842fSSascha Wildner 
16600d02842fSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAsfSubnames[Temp16]);
16610d02842fSSascha Wildner             break;
16620d02842fSSascha Wildner 
166301d5d5dfSSascha Wildner         case ACPI_DMT_CEDT:
166401d5d5dfSSascha Wildner 
166501d5d5dfSSascha Wildner             /* CEDT subtable types */
166601d5d5dfSSascha Wildner 
166701d5d5dfSSascha Wildner             Temp8 = *Target;
166801d5d5dfSSascha Wildner             if (Temp8 > ACPI_CEDT_TYPE_RESERVED)
166901d5d5dfSSascha Wildner             {
167001d5d5dfSSascha Wildner                 Temp8 = ACPI_CEDT_TYPE_RESERVED;
167101d5d5dfSSascha Wildner             }
167201d5d5dfSSascha Wildner 
167301d5d5dfSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
167401d5d5dfSSascha Wildner                 AcpiDmCedtSubnames[Temp8]);
167501d5d5dfSSascha Wildner             break;
167601d5d5dfSSascha Wildner 
16770d02842fSSascha Wildner         case ACPI_DMT_DMAR:
16780d02842fSSascha Wildner 
16790d02842fSSascha Wildner             /* DMAR subtable types */
16800d02842fSSascha Wildner 
16810d02842fSSascha Wildner             Temp16 = ACPI_GET16 (Target);
16820d02842fSSascha Wildner             if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
16830d02842fSSascha Wildner             {
16840d02842fSSascha Wildner                 Temp16 = ACPI_DMAR_TYPE_RESERVED;
16850d02842fSSascha Wildner             }
16860d02842fSSascha Wildner 
16875943f66cSSascha Wildner             AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
16885943f66cSSascha Wildner                 AcpiDmDmarSubnames[Temp16]);
16890d02842fSSascha Wildner             break;
16900d02842fSSascha Wildner 
1691066b6da2SSascha Wildner         case ACPI_DMT_DMAR_SCOPE:
1692066b6da2SSascha Wildner 
1693066b6da2SSascha Wildner             /* DMAR device scope types */
1694066b6da2SSascha Wildner 
1695066b6da2SSascha Wildner             Temp8 = *Target;
1696066b6da2SSascha Wildner             if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED)
1697066b6da2SSascha Wildner             {
1698066b6da2SSascha Wildner                 Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED;
1699066b6da2SSascha Wildner             }
1700066b6da2SSascha Wildner 
17015943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
17025943f66cSSascha Wildner                 AcpiDmDmarScope[Temp8]);
1703066b6da2SSascha Wildner             break;
1704066b6da2SSascha Wildner 
17050d02842fSSascha Wildner         case ACPI_DMT_EINJACT:
17060d02842fSSascha Wildner 
17070d02842fSSascha Wildner             /* EINJ Action types */
17080d02842fSSascha Wildner 
17090d02842fSSascha Wildner             Temp8 = *Target;
17100d02842fSSascha Wildner             if (Temp8 > ACPI_EINJ_ACTION_RESERVED)
17110d02842fSSascha Wildner             {
17120d02842fSSascha Wildner                 Temp8 = ACPI_EINJ_ACTION_RESERVED;
17130d02842fSSascha Wildner             }
17140d02842fSSascha Wildner 
17155943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
17165943f66cSSascha Wildner                 AcpiDmEinjActions[Temp8]);
17170d02842fSSascha Wildner             break;
17180d02842fSSascha Wildner 
17190d02842fSSascha Wildner         case ACPI_DMT_EINJINST:
17200d02842fSSascha Wildner 
17210d02842fSSascha Wildner             /* EINJ Instruction types */
17220d02842fSSascha Wildner 
17230d02842fSSascha Wildner             Temp8 = *Target;
17240d02842fSSascha Wildner             if (Temp8 > ACPI_EINJ_INSTRUCTION_RESERVED)
17250d02842fSSascha Wildner             {
17260d02842fSSascha Wildner                 Temp8 = ACPI_EINJ_INSTRUCTION_RESERVED;
17270d02842fSSascha Wildner             }
17280d02842fSSascha Wildner 
17295943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
17305943f66cSSascha Wildner                 AcpiDmEinjInstructions[Temp8]);
17310d02842fSSascha Wildner             break;
17320d02842fSSascha Wildner 
17330d02842fSSascha Wildner         case ACPI_DMT_ERSTACT:
17340d02842fSSascha Wildner 
17350d02842fSSascha Wildner             /* ERST Action types */
17360d02842fSSascha Wildner 
17370d02842fSSascha Wildner             Temp8 = *Target;
17380d02842fSSascha Wildner             if (Temp8 > ACPI_ERST_ACTION_RESERVED)
17390d02842fSSascha Wildner             {
17400d02842fSSascha Wildner                 Temp8 = ACPI_ERST_ACTION_RESERVED;
17410d02842fSSascha Wildner             }
17420d02842fSSascha Wildner 
17435943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
17445943f66cSSascha Wildner                 AcpiDmErstActions[Temp8]);
17450d02842fSSascha Wildner             break;
17460d02842fSSascha Wildner 
17470d02842fSSascha Wildner         case ACPI_DMT_ERSTINST:
17480d02842fSSascha Wildner 
17490d02842fSSascha Wildner             /* ERST Instruction types */
17500d02842fSSascha Wildner 
17510d02842fSSascha Wildner             Temp8 = *Target;
17520d02842fSSascha Wildner             if (Temp8 > ACPI_ERST_INSTRUCTION_RESERVED)
17530d02842fSSascha Wildner             {
17540d02842fSSascha Wildner                 Temp8 = ACPI_ERST_INSTRUCTION_RESERVED;
17550d02842fSSascha Wildner             }
17560d02842fSSascha Wildner 
17575943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
17585943f66cSSascha Wildner                 AcpiDmErstInstructions[Temp8]);
17590d02842fSSascha Wildner             break;
17600d02842fSSascha Wildner 
1761066b6da2SSascha Wildner         case ACPI_DMT_GTDT:
1762066b6da2SSascha Wildner 
1763066b6da2SSascha Wildner             /* GTDT subtable types */
1764066b6da2SSascha Wildner 
1765066b6da2SSascha Wildner             Temp8 = *Target;
1766066b6da2SSascha Wildner             if (Temp8 > ACPI_GTDT_TYPE_RESERVED)
1767066b6da2SSascha Wildner             {
1768066b6da2SSascha Wildner                 Temp8 = ACPI_GTDT_TYPE_RESERVED;
1769066b6da2SSascha Wildner             }
1770066b6da2SSascha Wildner 
17715943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
17725943f66cSSascha Wildner                 AcpiDmGtdtSubnames[Temp8]);
1773066b6da2SSascha Wildner             break;
1774066b6da2SSascha Wildner 
17750d02842fSSascha Wildner         case ACPI_DMT_HEST:
17760d02842fSSascha Wildner 
17770d02842fSSascha Wildner             /* HEST subtable types */
17780d02842fSSascha Wildner 
17790d02842fSSascha Wildner             Temp16 = ACPI_GET16 (Target);
17800d02842fSSascha Wildner             if (Temp16 > ACPI_HEST_TYPE_RESERVED)
17810d02842fSSascha Wildner             {
17820d02842fSSascha Wildner                 Temp16 = ACPI_HEST_TYPE_RESERVED;
17830d02842fSSascha Wildner             }
17840d02842fSSascha Wildner 
17855943f66cSSascha Wildner             AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
17865943f66cSSascha Wildner                 AcpiDmHestSubnames[Temp16]);
17870d02842fSSascha Wildner             break;
17880d02842fSSascha Wildner 
17890d02842fSSascha Wildner         case ACPI_DMT_HESTNTFY:
17900d02842fSSascha Wildner 
17915943f66cSSascha Wildner             AcpiOsPrintf (STRING_FORMAT,
17925943f66cSSascha Wildner                 "Hardware Error Notification Structure");
17935943f66cSSascha Wildner 
1794267c04fdSSascha Wildner             Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
17950d02842fSSascha Wildner                 sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify);
1796267c04fdSSascha Wildner             if (ACPI_FAILURE (Status))
1797267c04fdSSascha Wildner             {
1798267c04fdSSascha Wildner                 return (Status);
1799267c04fdSSascha Wildner             }
1800267c04fdSSascha Wildner 
18010d02842fSSascha Wildner             AcpiOsPrintf ("\n");
18020d02842fSSascha Wildner             LastOutputBlankLine = TRUE;
18030d02842fSSascha Wildner             break;
18040d02842fSSascha Wildner 
18050d02842fSSascha Wildner         case ACPI_DMT_HESTNTYP:
18060d02842fSSascha Wildner 
18070d02842fSSascha Wildner             /* HEST Notify types */
18080d02842fSSascha Wildner 
18090d02842fSSascha Wildner             Temp8 = *Target;
18100d02842fSSascha Wildner             if (Temp8 > ACPI_HEST_NOTIFY_RESERVED)
18110d02842fSSascha Wildner             {
18120d02842fSSascha Wildner                 Temp8 = ACPI_HEST_NOTIFY_RESERVED;
18130d02842fSSascha Wildner             }
18140d02842fSSascha Wildner 
18155943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
18165943f66cSSascha Wildner                 AcpiDmHestNotifySubnames[Temp8]);
18170d02842fSSascha Wildner             break;
18180d02842fSSascha Wildner 
18191093ca81SSascha Wildner         case ACPI_DMT_HMAT:
18201093ca81SSascha Wildner 
18211093ca81SSascha Wildner             /* HMAT subtable types */
18221093ca81SSascha Wildner 
18231093ca81SSascha Wildner             Temp16 = *Target;
18241093ca81SSascha Wildner             if (Temp16 > ACPI_HMAT_TYPE_RESERVED)
18251093ca81SSascha Wildner             {
18261093ca81SSascha Wildner                 Temp16 = ACPI_HMAT_TYPE_RESERVED;
18271093ca81SSascha Wildner             }
18281093ca81SSascha Wildner 
18291093ca81SSascha Wildner             AcpiOsPrintf (UINT16_FORMAT, *Target,
18301093ca81SSascha Wildner                 AcpiDmHmatSubnames[Temp16]);
18311093ca81SSascha Wildner             break;
18321093ca81SSascha Wildner 
1833896f2e3aSSascha Wildner         case ACPI_DMT_IORTMEM:
1834896f2e3aSSascha Wildner 
1835896f2e3aSSascha Wildner             AcpiOsPrintf (STRING_FORMAT,
1836896f2e3aSSascha Wildner                 "IORT Memory Access Properties");
1837896f2e3aSSascha Wildner 
1838267c04fdSSascha Wildner             Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
1839896f2e3aSSascha Wildner                 sizeof (ACPI_IORT_MEMORY_ACCESS), AcpiDmTableInfoIortAcc);
1840267c04fdSSascha Wildner             if (ACPI_FAILURE (Status))
1841267c04fdSSascha Wildner             {
1842267c04fdSSascha Wildner                 return (Status);
1843267c04fdSSascha Wildner             }
1844267c04fdSSascha Wildner 
1845896f2e3aSSascha Wildner             LastOutputBlankLine = TRUE;
1846896f2e3aSSascha Wildner             break;
1847896f2e3aSSascha Wildner 
18480d02842fSSascha Wildner         case ACPI_DMT_MADT:
18490d02842fSSascha Wildner 
18500d02842fSSascha Wildner             /* MADT subtable types */
18510d02842fSSascha Wildner 
18520d02842fSSascha Wildner             Temp8 = *Target;
18530d02842fSSascha Wildner             if (Temp8 > ACPI_MADT_TYPE_RESERVED)
18540d02842fSSascha Wildner             {
18550d02842fSSascha Wildner                 Temp8 = ACPI_MADT_TYPE_RESERVED;
18560d02842fSSascha Wildner             }
18570d02842fSSascha Wildner 
18585943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
18595943f66cSSascha Wildner                 AcpiDmMadtSubnames[Temp8]);
18600d02842fSSascha Wildner             break;
18610d02842fSSascha Wildner 
1862896f2e3aSSascha Wildner         case ACPI_DMT_NFIT:
1863896f2e3aSSascha Wildner 
1864896f2e3aSSascha Wildner             /* NFIT subtable types */
1865896f2e3aSSascha Wildner 
1866896f2e3aSSascha Wildner             Temp16 = ACPI_GET16 (Target);
1867896f2e3aSSascha Wildner             if (Temp16 > ACPI_NFIT_TYPE_RESERVED)
1868896f2e3aSSascha Wildner             {
1869896f2e3aSSascha Wildner                 Temp16 = ACPI_NFIT_TYPE_RESERVED;
1870896f2e3aSSascha Wildner             }
1871896f2e3aSSascha Wildner 
1872896f2e3aSSascha Wildner             AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
1873896f2e3aSSascha Wildner                 AcpiDmNfitSubnames[Temp16]);
1874896f2e3aSSascha Wildner             break;
1875896f2e3aSSascha Wildner 
187684fe3360SSascha Wildner         case ACPI_DMT_NHLT1:
187784fe3360SSascha Wildner 
187884fe3360SSascha Wildner             /* NHLT link types */
187984fe3360SSascha Wildner 
188084fe3360SSascha Wildner             Temp8 = *Target;
188184fe3360SSascha Wildner             if (Temp8 > ACPI_NHLT_TYPE_RESERVED)
188284fe3360SSascha Wildner             {
188384fe3360SSascha Wildner                 Temp8 = ACPI_NHLT_TYPE_RESERVED;
188484fe3360SSascha Wildner             }
188584fe3360SSascha Wildner 
188684fe3360SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
188784fe3360SSascha Wildner                 AcpiDmNhltLinkTypeNames[Temp8]);
188884fe3360SSascha Wildner             break;
188984fe3360SSascha Wildner 
189084fe3360SSascha Wildner         case ACPI_DMT_NHLT1a:
189184fe3360SSascha Wildner 
189284fe3360SSascha Wildner             /* NHLT direction */
189384fe3360SSascha Wildner 
189484fe3360SSascha Wildner             Temp8 = *Target;
189584fe3360SSascha Wildner             if (Temp8 > ACPI_NHLT_DIR_RESERVED)
189684fe3360SSascha Wildner             {
189784fe3360SSascha Wildner                 Temp8 = ACPI_NHLT_DIR_RESERVED;
189884fe3360SSascha Wildner             }
189984fe3360SSascha Wildner 
190084fe3360SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
190184fe3360SSascha Wildner                 AcpiDmNhltDirectionNames[Temp8]);
190284fe3360SSascha Wildner             break;
190384fe3360SSascha Wildner 
1904*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1b:
1905*aab122a6SSascha Wildner 
1906*aab122a6SSascha Wildner             /* NHLT microphone type */
1907*aab122a6SSascha Wildner 
1908*aab122a6SSascha Wildner             Temp8 = *Target;
1909*aab122a6SSascha Wildner             if (Temp8 > ACPI_NHLT_MIC_RESERVED)
1910*aab122a6SSascha Wildner             {
1911*aab122a6SSascha Wildner                 Temp8 = ACPI_NHLT_MIC_RESERVED;
1912*aab122a6SSascha Wildner             }
1913*aab122a6SSascha Wildner 
1914*aab122a6SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
1915*aab122a6SSascha Wildner                 AcpiDmNhltMicTypeNames[Temp8]);
1916*aab122a6SSascha Wildner             break;
1917*aab122a6SSascha Wildner 
1918*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1c:
1919*aab122a6SSascha Wildner 
1920*aab122a6SSascha Wildner             /* NHLT microphone position */
1921*aab122a6SSascha Wildner 
1922*aab122a6SSascha Wildner             Temp8 = *Target;
1923*aab122a6SSascha Wildner             if (Temp8 > ACPI_NHLT_MIC_POSITION_RESERVED)
1924*aab122a6SSascha Wildner             {
1925*aab122a6SSascha Wildner                 Temp8 = ACPI_NHLT_MIC_POSITION_RESERVED;
1926*aab122a6SSascha Wildner             }
1927*aab122a6SSascha Wildner 
1928*aab122a6SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
1929*aab122a6SSascha Wildner                 AcpiDmNhltMicPositionNames[Temp8]);
1930*aab122a6SSascha Wildner             break;
1931*aab122a6SSascha Wildner 
1932*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1d:
1933*aab122a6SSascha Wildner 
1934*aab122a6SSascha Wildner             /* NHLT microphone array type */
1935*aab122a6SSascha Wildner 
1936*aab122a6SSascha Wildner             Temp8 = *Target & ACPI_NHLT_ARRAY_TYPE_MASK;
1937*aab122a6SSascha Wildner             if (Temp8 < ACPI_NHLT_ARRAY_TYPE_RESERVED)
1938*aab122a6SSascha Wildner             {
1939*aab122a6SSascha Wildner                 Temp8 = ACPI_NHLT_ARRAY_TYPE_RESERVED;
1940*aab122a6SSascha Wildner             }
1941*aab122a6SSascha Wildner 
1942*aab122a6SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT_NO_NEWLINE, *Target,
1943*aab122a6SSascha Wildner                 AcpiDmNhltMicArrayTypeNames[Temp8 - ACPI_NHLT_ARRAY_TYPE_RESERVED]);
1944*aab122a6SSascha Wildner 
1945*aab122a6SSascha Wildner             Temp8 = *Target;
1946*aab122a6SSascha Wildner             if (Temp8 & ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT)
1947*aab122a6SSascha Wildner             {
1948*aab122a6SSascha Wildner                 AcpiOsPrintf (" [%s]", "SNR and Sensitivity");
1949*aab122a6SSascha Wildner             }
1950*aab122a6SSascha Wildner 
1951*aab122a6SSascha Wildner             AcpiOsPrintf ("\n");
1952*aab122a6SSascha Wildner             break;
1953*aab122a6SSascha Wildner 
1954*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1e:
1955*aab122a6SSascha Wildner 
1956*aab122a6SSascha Wildner             /* NHLT Endpoint Device ID */
1957*aab122a6SSascha Wildner 
1958*aab122a6SSascha Wildner             Temp16 = ACPI_GET16 (Target);
1959*aab122a6SSascha Wildner             if (Temp16 == 0xAE20)
1960*aab122a6SSascha Wildner             {
1961*aab122a6SSascha Wildner                 Name = "PDM DMIC";
1962*aab122a6SSascha Wildner             }
1963*aab122a6SSascha Wildner             else if (Temp16 == 0xAE30)
1964*aab122a6SSascha Wildner             {
1965*aab122a6SSascha Wildner                 Name = "BT Sideband";
1966*aab122a6SSascha Wildner             }
1967*aab122a6SSascha Wildner             else if (Temp16 == 0xAE34)
1968*aab122a6SSascha Wildner             {
1969*aab122a6SSascha Wildner                 Name = "I2S/TDM Codecs";
1970*aab122a6SSascha Wildner             }
1971*aab122a6SSascha Wildner             else
1972*aab122a6SSascha Wildner             {
1973*aab122a6SSascha Wildner                 Name = "Unknown Device ID";
1974*aab122a6SSascha Wildner             }
1975*aab122a6SSascha Wildner 
1976*aab122a6SSascha Wildner             AcpiOsPrintf (UINT16_FORMAT, Temp16, Name);
1977*aab122a6SSascha Wildner             break;
1978*aab122a6SSascha Wildner 
1979*aab122a6SSascha Wildner         case ACPI_DMT_NHLT1f:
1980*aab122a6SSascha Wildner 
1981*aab122a6SSascha Wildner             /* NHLT ConfigType field */
1982*aab122a6SSascha Wildner 
1983*aab122a6SSascha Wildner             Temp8 = *Target;
1984*aab122a6SSascha Wildner             if (Temp8 > ACPI_NHLT_CONFIG_TYPE_RESERVED)
1985*aab122a6SSascha Wildner             {
1986*aab122a6SSascha Wildner                 Temp8 = ACPI_NHLT_CONFIG_TYPE_RESERVED;
1987*aab122a6SSascha Wildner             }
1988*aab122a6SSascha Wildner 
1989*aab122a6SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
1990*aab122a6SSascha Wildner                 AcpiDmNhltConfigTypeNames[Temp8]);
1991*aab122a6SSascha Wildner             break;
1992*aab122a6SSascha Wildner 
19930d02842fSSascha Wildner         case ACPI_DMT_PCCT:
19940d02842fSSascha Wildner 
19950d02842fSSascha Wildner             /* PCCT subtable types */
19960d02842fSSascha Wildner 
19970d02842fSSascha Wildner             Temp8 = *Target;
19980d02842fSSascha Wildner             if (Temp8 > ACPI_PCCT_TYPE_RESERVED)
19990d02842fSSascha Wildner             {
20000d02842fSSascha Wildner                 Temp8 = ACPI_PCCT_TYPE_RESERVED;
20010d02842fSSascha Wildner             }
20020d02842fSSascha Wildner 
20035943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
20045943f66cSSascha Wildner                 AcpiDmPcctSubnames[Temp8]);
20050d02842fSSascha Wildner             break;
20060d02842fSSascha Wildner 
200701d5d5dfSSascha Wildner         case ACPI_DMT_PHAT:
200801d5d5dfSSascha Wildner 
200901d5d5dfSSascha Wildner             /* PMTT subtable types */
201001d5d5dfSSascha Wildner 
201101d5d5dfSSascha Wildner             Temp16 = *Target;
201201d5d5dfSSascha Wildner             if (Temp16 > ACPI_PHAT_TYPE_RESERVED)
201301d5d5dfSSascha Wildner             {
201401d5d5dfSSascha Wildner                 Temp16 = ACPI_PHAT_TYPE_RESERVED;
201501d5d5dfSSascha Wildner             }
201601d5d5dfSSascha Wildner 
201701d5d5dfSSascha Wildner             AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16(Target),
201801d5d5dfSSascha Wildner                 AcpiDmPhatSubnames[Temp16]);
201901d5d5dfSSascha Wildner             break;
202001d5d5dfSSascha Wildner 
20210d02842fSSascha Wildner         case ACPI_DMT_PMTT:
20220d02842fSSascha Wildner 
20230d02842fSSascha Wildner             /* PMTT subtable types */
20240d02842fSSascha Wildner 
20250d02842fSSascha Wildner             Temp8 = *Target;
202601d5d5dfSSascha Wildner             if (Temp8 == ACPI_PMTT_TYPE_VENDOR)
202701d5d5dfSSascha Wildner             {
202801d5d5dfSSascha Wildner                 Temp8 = ACPI_PMTT_TYPE_RESERVED + 1;
202901d5d5dfSSascha Wildner             }
203001d5d5dfSSascha Wildner             else if (Temp8 > ACPI_PMTT_TYPE_RESERVED)
20310d02842fSSascha Wildner             {
20320d02842fSSascha Wildner                 Temp8 = ACPI_PMTT_TYPE_RESERVED;
20330d02842fSSascha Wildner             }
20345943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
20355943f66cSSascha Wildner                 AcpiDmPmttSubnames[Temp8]);
20360d02842fSSascha Wildner             break;
20370d02842fSSascha Wildner 
20381093ca81SSascha Wildner         case ACPI_DMT_PPTT:
20391093ca81SSascha Wildner 
20401093ca81SSascha Wildner             /* PPTT subtable types */
20411093ca81SSascha Wildner 
20421093ca81SSascha Wildner             Temp8 = *Target;
20431093ca81SSascha Wildner             if (Temp8 > ACPI_PPTT_TYPE_RESERVED)
20441093ca81SSascha Wildner             {
20451093ca81SSascha Wildner                 Temp8 = ACPI_PPTT_TYPE_RESERVED;
20461093ca81SSascha Wildner             }
20471093ca81SSascha Wildner 
20481093ca81SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
20491093ca81SSascha Wildner                 AcpiDmPpttSubnames[Temp8]);
20501093ca81SSascha Wildner             break;
20511093ca81SSascha Wildner 
2052896f2e3aSSascha Wildner         case ACPI_DMT_UNICODE:
20530672a19bSSascha Wildner         case ACPI_DMT_WPBT_UNICODE:
20540d02842fSSascha Wildner 
2055896f2e3aSSascha Wildner             if (ByteLength == 0)
2056896f2e3aSSascha Wildner             {
2057896f2e3aSSascha Wildner                 AcpiOsPrintf ("/* Zero-length Data */\n");
2058896f2e3aSSascha Wildner                 break;
2059896f2e3aSSascha Wildner             }
2060896f2e3aSSascha Wildner 
2061896f2e3aSSascha Wildner             AcpiDmDumpUnicode (Table, CurrentOffset, ByteLength);
2062896f2e3aSSascha Wildner             break;
2063896f2e3aSSascha Wildner 
2064896f2e3aSSascha Wildner         case ACPI_DMT_RAW_BUFFER:
206501d5d5dfSSascha Wildner         case ACPI_DMT_BUFFER:
206601d5d5dfSSascha Wildner         case ACPI_DMT_PMTT_VENDOR:
2067896f2e3aSSascha Wildner 
2068896f2e3aSSascha Wildner             if (ByteLength == 0)
2069896f2e3aSSascha Wildner             {
2070896f2e3aSSascha Wildner                 AcpiOsPrintf ("/* Zero-length Data */\n");
2071896f2e3aSSascha Wildner                 break;
2072896f2e3aSSascha Wildner             }
2073896f2e3aSSascha Wildner 
2074*aab122a6SSascha Wildner             AcpiDmDumpBuffer (Target, 0, ByteLength, CurrentOffset, NULL);
20750d02842fSSascha Wildner             break;
20760d02842fSSascha Wildner 
20774898bea4SSascha Wildner         case ACPI_DMT_RGRT:
20784898bea4SSascha Wildner 
20794898bea4SSascha Wildner             /* RGRT subtable types */
20804898bea4SSascha Wildner 
20814898bea4SSascha Wildner             Temp8 = *Target;
20824898bea4SSascha Wildner             if (Temp8 >= ACPI_RGRT_TYPE_RESERVED)
20834898bea4SSascha Wildner             {
20844898bea4SSascha Wildner                 Temp8 = ACPI_RGRT_TYPE_RESERVED0;
20854898bea4SSascha Wildner             }
20864898bea4SSascha Wildner 
20874898bea4SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
20884898bea4SSascha Wildner                 AcpiDmRgrtSubnames[Temp8]);
20894898bea4SSascha Wildner             break;
20904898bea4SSascha Wildner 
20917bcb6cafSSascha Wildner         case ACPI_DMT_SDEV:
20927bcb6cafSSascha Wildner 
20937bcb6cafSSascha Wildner             /* SDEV subtable types */
20947bcb6cafSSascha Wildner 
20957bcb6cafSSascha Wildner             Temp8 = *Target;
20967bcb6cafSSascha Wildner             if (Temp8 > ACPI_SDEV_TYPE_RESERVED)
20977bcb6cafSSascha Wildner             {
20987bcb6cafSSascha Wildner                 Temp8 = ACPI_SDEV_TYPE_RESERVED;
20997bcb6cafSSascha Wildner             }
21007bcb6cafSSascha Wildner 
21017bcb6cafSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
21027bcb6cafSSascha Wildner                 AcpiDmSdevSubnames[Temp8]);
21037bcb6cafSSascha Wildner             break;
21047bcb6cafSSascha Wildner 
21050d02842fSSascha Wildner         case ACPI_DMT_SRAT:
21060d02842fSSascha Wildner 
21070d02842fSSascha Wildner             /* SRAT subtable types */
21080d02842fSSascha Wildner 
21090d02842fSSascha Wildner             Temp8 = *Target;
21100d02842fSSascha Wildner             if (Temp8 > ACPI_SRAT_TYPE_RESERVED)
21110d02842fSSascha Wildner             {
21120d02842fSSascha Wildner                 Temp8 = ACPI_SRAT_TYPE_RESERVED;
21130d02842fSSascha Wildner             }
21140d02842fSSascha Wildner 
21155943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
21165943f66cSSascha Wildner                 AcpiDmSratSubnames[Temp8]);
21170d02842fSSascha Wildner             break;
21180d02842fSSascha Wildner 
21197bcb6cafSSascha Wildner         case ACPI_DMT_TPM2:
21207bcb6cafSSascha Wildner 
21217bcb6cafSSascha Wildner             /* TPM2 Start Method types */
21227bcb6cafSSascha Wildner 
21237bcb6cafSSascha Wildner             Temp8 = *Target;
21247bcb6cafSSascha Wildner             if (Temp8 > ACPI_TPM2_RESERVED)
21257bcb6cafSSascha Wildner             {
21267bcb6cafSSascha Wildner                 Temp8 = ACPI_TPM2_RESERVED;
21277bcb6cafSSascha Wildner             }
21287bcb6cafSSascha Wildner 
21297bcb6cafSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
21307bcb6cafSSascha Wildner                 AcpiDmTpm2Subnames[Temp8]);
21317bcb6cafSSascha Wildner             break;
21327bcb6cafSSascha Wildner 
21337bcb6cafSSascha Wildner 
21340d02842fSSascha Wildner         case ACPI_DMT_FADTPM:
21350d02842fSSascha Wildner 
21360d02842fSSascha Wildner             /* FADT Preferred PM Profile names */
21370d02842fSSascha Wildner 
21380d02842fSSascha Wildner             Temp8 = *Target;
21390d02842fSSascha Wildner             if (Temp8 > ACPI_FADT_PM_RESERVED)
21400d02842fSSascha Wildner             {
21410d02842fSSascha Wildner                 Temp8 = ACPI_FADT_PM_RESERVED;
21420d02842fSSascha Wildner             }
21430d02842fSSascha Wildner 
21445943f66cSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
21455943f66cSSascha Wildner                 AcpiDmFadtProfiles[Temp8]);
21460d02842fSSascha Wildner             break;
21470d02842fSSascha Wildner 
21480d02842fSSascha Wildner         case ACPI_DMT_IVRS:
21490d02842fSSascha Wildner 
21500d02842fSSascha Wildner             /* IVRS subtable types */
21510d02842fSSascha Wildner 
21520d02842fSSascha Wildner             Temp8 = *Target;
21530d02842fSSascha Wildner             switch (Temp8)
21540d02842fSSascha Wildner             {
215571c97a3cSSascha Wildner             case ACPI_IVRS_TYPE_HARDWARE1:
215671c97a3cSSascha Wildner             case ACPI_IVRS_TYPE_HARDWARE2:
21570d02842fSSascha Wildner 
21580d02842fSSascha Wildner                 Name = AcpiDmIvrsSubnames[0];
21590d02842fSSascha Wildner                 break;
21600d02842fSSascha Wildner 
21614898bea4SSascha Wildner             case ACPI_IVRS_TYPE_HARDWARE3:
21624898bea4SSascha Wildner 
21634898bea4SSascha Wildner                 Name = AcpiDmIvrsSubnames[1];
21644898bea4SSascha Wildner                 break;
21654898bea4SSascha Wildner 
21660d02842fSSascha Wildner             case ACPI_IVRS_TYPE_MEMORY1:
21670d02842fSSascha Wildner             case ACPI_IVRS_TYPE_MEMORY2:
21680d02842fSSascha Wildner             case ACPI_IVRS_TYPE_MEMORY3:
21690d02842fSSascha Wildner 
21704898bea4SSascha Wildner                 Name = AcpiDmIvrsSubnames[2];
21710d02842fSSascha Wildner                 break;
21720d02842fSSascha Wildner 
21730d02842fSSascha Wildner             default:
21740d02842fSSascha Wildner 
21754898bea4SSascha Wildner                 Name = AcpiDmIvrsSubnames[3];
21764898bea4SSascha Wildner                 break;
21774898bea4SSascha Wildner             }
21784898bea4SSascha Wildner 
21794898bea4SSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target, Name);
21804898bea4SSascha Wildner             break;
21814898bea4SSascha Wildner 
21824898bea4SSascha Wildner         case ACPI_DMT_IVRS_DE:
21834898bea4SSascha Wildner 
21844898bea4SSascha Wildner             /* IVRS device entry types */
21854898bea4SSascha Wildner 
21864898bea4SSascha Wildner             Temp8 = *Target;
21874898bea4SSascha Wildner             switch (Temp8)
21884898bea4SSascha Wildner             {
21894898bea4SSascha Wildner             case ACPI_IVRS_TYPE_ALL:
21904898bea4SSascha Wildner             case ACPI_IVRS_TYPE_SELECT:
21914898bea4SSascha Wildner             case ACPI_IVRS_TYPE_START:
21924898bea4SSascha Wildner             case ACPI_IVRS_TYPE_END:
21934898bea4SSascha Wildner 
21944898bea4SSascha Wildner                 Name = AcpiDmIvrsDevEntryNames[Temp8];
21954898bea4SSascha Wildner                 break;
21964898bea4SSascha Wildner 
21974898bea4SSascha Wildner             case ACPI_IVRS_TYPE_ALIAS_SELECT:
21984898bea4SSascha Wildner             case ACPI_IVRS_TYPE_ALIAS_START:
21994898bea4SSascha Wildner             case ACPI_IVRS_TYPE_EXT_SELECT:
22004898bea4SSascha Wildner             case ACPI_IVRS_TYPE_EXT_START:
22014898bea4SSascha Wildner             case ACPI_IVRS_TYPE_SPECIAL:
22024898bea4SSascha Wildner 
22034898bea4SSascha Wildner                 Name = AcpiDmIvrsDevEntryNames[Temp8 - 61];
22044898bea4SSascha Wildner                 break;
22054898bea4SSascha Wildner 
22064898bea4SSascha Wildner             case ACPI_IVRS_TYPE_HID:
22074898bea4SSascha Wildner 
22084898bea4SSascha Wildner                 Name = AcpiDmIvrsDevEntryNames[Temp8 - 228];
22094898bea4SSascha Wildner                 break;
22104898bea4SSascha Wildner 
22114898bea4SSascha Wildner             default:
22124898bea4SSascha Wildner                 Name = AcpiDmIvrsDevEntryNames[0];  /* Unknown/Reserved */
22130d02842fSSascha Wildner                 break;
22140d02842fSSascha Wildner             }
22150d02842fSSascha Wildner 
22160d02842fSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target, Name);
22170d02842fSSascha Wildner             break;
22180d02842fSSascha Wildner 
22199e1c0880SSascha Wildner         case ACPI_DMT_LPIT:
22209e1c0880SSascha Wildner 
22219e1c0880SSascha Wildner             /* LPIT subtable types */
22229e1c0880SSascha Wildner 
22235943f66cSSascha Wildner             Temp32 = ACPI_GET32 (Target);
22245943f66cSSascha Wildner             if (Temp32 > ACPI_LPIT_TYPE_RESERVED)
22259e1c0880SSascha Wildner             {
22265943f66cSSascha Wildner                 Temp32 = ACPI_LPIT_TYPE_RESERVED;
22279e1c0880SSascha Wildner             }
22289e1c0880SSascha Wildner 
22295943f66cSSascha Wildner             AcpiOsPrintf (UINT32_FORMAT, ACPI_GET32 (Target),
22305943f66cSSascha Wildner                 AcpiDmLpitSubnames[Temp32]);
22319e1c0880SSascha Wildner             break;
22329e1c0880SSascha Wildner 
223301d5d5dfSSascha Wildner         case ACPI_DMT_VIOT:
223401d5d5dfSSascha Wildner 
223501d5d5dfSSascha Wildner             /* VIOT subtable types */
223601d5d5dfSSascha Wildner 
223701d5d5dfSSascha Wildner             Temp8 = *Target;
223801d5d5dfSSascha Wildner             if (Temp8 > ACPI_VIOT_RESERVED)
223901d5d5dfSSascha Wildner             {
224001d5d5dfSSascha Wildner                 Temp8 = ACPI_VIOT_RESERVED;
224101d5d5dfSSascha Wildner             }
224201d5d5dfSSascha Wildner 
224301d5d5dfSSascha Wildner             AcpiOsPrintf (UINT8_FORMAT, *Target,
224401d5d5dfSSascha Wildner                 AcpiDmViotSubnames[Temp8]);
224501d5d5dfSSascha Wildner             break;
224601d5d5dfSSascha Wildner 
22470d02842fSSascha Wildner         case ACPI_DMT_EXIT:
22480d02842fSSascha Wildner 
22490d02842fSSascha Wildner             return (AE_OK);
22500d02842fSSascha Wildner 
22510d02842fSSascha Wildner         default:
22520d02842fSSascha Wildner 
22530d02842fSSascha Wildner             ACPI_ERROR ((AE_INFO,
22540d02842fSSascha Wildner                 "**** Invalid table opcode [0x%X] ****\n", Info->Opcode));
22550d02842fSSascha Wildner             return (AE_SUPPORT);
22560d02842fSSascha Wildner         }
22570d02842fSSascha Wildner     }
22580d02842fSSascha Wildner 
22590d02842fSSascha Wildner     if (TableOffset && !SubtableLength)
22600d02842fSSascha Wildner     {
22615943f66cSSascha Wildner         /*
22625943f66cSSascha Wildner          * If this table is not the main table, the subtable must have a
22635943f66cSSascha Wildner          * valid length
22645943f66cSSascha Wildner          */
22650d02842fSSascha Wildner         AcpiOsPrintf ("Invalid zero length subtable\n");
22660d02842fSSascha Wildner         return (AE_BAD_DATA);
22670d02842fSSascha Wildner     }
22680d02842fSSascha Wildner 
22690d02842fSSascha Wildner     return (AE_OK);
22700d02842fSSascha Wildner }
2271