10d02842fSSascha Wildner /******************************************************************************
20d02842fSSascha Wildner  *
30d02842fSSascha Wildner  * Module Name: exdump - Interpreter debug output routines
40d02842fSSascha Wildner  *
50d02842fSSascha Wildner  *****************************************************************************/
60d02842fSSascha Wildner 
7b4315fc7SSascha Wildner /******************************************************************************
8b4315fc7SSascha Wildner  *
9b4315fc7SSascha Wildner  * 1. Copyright Notice
10b4315fc7SSascha Wildner  *
11*383048acSSascha 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 "acinterp.h"
1550d02842fSSascha Wildner #include "amlcode.h"
1560d02842fSSascha Wildner #include "acnamesp.h"
1570d02842fSSascha Wildner 
1580d02842fSSascha Wildner 
1590d02842fSSascha Wildner #define _COMPONENT          ACPI_EXECUTER
1600d02842fSSascha Wildner         ACPI_MODULE_NAME    ("exdump")
1610d02842fSSascha Wildner 
1620d02842fSSascha Wildner /*
1630d02842fSSascha Wildner  * The following routines are used for debug output only
1640d02842fSSascha Wildner  */
1650d02842fSSascha Wildner #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
1660d02842fSSascha Wildner 
1670d02842fSSascha Wildner /* Local prototypes */
1680d02842fSSascha Wildner 
1690d02842fSSascha Wildner static void
1700d02842fSSascha Wildner AcpiExOutString (
1712ffe9f16SSascha Wildner     const char              *Title,
1722ffe9f16SSascha Wildner     const char              *Value);
1730d02842fSSascha Wildner 
1740d02842fSSascha Wildner static void
1750d02842fSSascha Wildner AcpiExOutPointer (
1762ffe9f16SSascha Wildner     const char              *Title,
1772ffe9f16SSascha Wildner     const void              *Value);
1780d02842fSSascha Wildner 
1790d02842fSSascha Wildner static void
1800d02842fSSascha Wildner AcpiExDumpObject (
1810d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     *ObjDesc,
1820d02842fSSascha Wildner     ACPI_EXDUMP_INFO        *Info);
1830d02842fSSascha Wildner 
1840d02842fSSascha Wildner static void
1850d02842fSSascha Wildner AcpiExDumpReferenceObj (
1860d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     *ObjDesc);
1870d02842fSSascha Wildner 
1880d02842fSSascha Wildner static void
1890d02842fSSascha Wildner AcpiExDumpPackageObj (
1900d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     *ObjDesc,
1910d02842fSSascha Wildner     UINT32                  Level,
1920d02842fSSascha Wildner     UINT32                  Index);
1930d02842fSSascha Wildner 
1940d02842fSSascha Wildner 
1950d02842fSSascha Wildner /*******************************************************************************
1960d02842fSSascha Wildner  *
1970d02842fSSascha Wildner  * Object Descriptor info tables
1980d02842fSSascha Wildner  *
1990d02842fSSascha Wildner  * Note: The first table entry must be an INIT opcode and must contain
2000d02842fSSascha Wildner  * the table length (number of table entries)
2010d02842fSSascha Wildner  *
2020d02842fSSascha Wildner  ******************************************************************************/
2030d02842fSSascha Wildner 
2040d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpInteger[2] =
2050d02842fSSascha Wildner {
2060d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger),        NULL},
2070d02842fSSascha Wildner     {ACPI_EXD_UINT64,   ACPI_EXD_OFFSET (Integer.Value),                "Value"}
2080d02842fSSascha Wildner };
2090d02842fSSascha Wildner 
2100d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpString[4] =
2110d02842fSSascha Wildner {
2120d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpString),         NULL},
2130d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (String.Length),                "Length"},
2140d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (String.Pointer),               "Pointer"},
2150d02842fSSascha Wildner     {ACPI_EXD_STRING,   0,                                              NULL}
2160d02842fSSascha Wildner };
2170d02842fSSascha Wildner 
2180d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpBuffer[5] =
2190d02842fSSascha Wildner {
2200d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer),         NULL},
2210d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Buffer.Length),                "Length"},
2220d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Pointer),               "Pointer"},
2236a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
2240d02842fSSascha Wildner     {ACPI_EXD_BUFFER,   0,                                              NULL}
2250d02842fSSascha Wildner };
2260d02842fSSascha Wildner 
2276a0135c2SSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpPackage[6] =
2280d02842fSSascha Wildner {
2290d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage),        NULL},
2306a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Package.Node),                 "Parent Node"},
2310d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Package.Flags),                "Flags"},
2323c639e0cSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Package.Count),                "Element Count"},
2330d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Package.Elements),             "Element List"},
2340d02842fSSascha Wildner     {ACPI_EXD_PACKAGE,  0,                                              NULL}
2350d02842fSSascha Wildner };
2360d02842fSSascha Wildner 
2370d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
2380d02842fSSascha Wildner {
2390d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
2400d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[0]),         "System Notify"},
2416a0135c2SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[1]),         "Device Notify"},
2426a0135c2SSascha Wildner     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler),               "Handler"}
2430d02842fSSascha Wildner };
2440d02842fSSascha Wildner 
2450d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
2460d02842fSSascha Wildner {
2470d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent),          NULL},
2480d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Event.OsSemaphore),            "OsSemaphore"}
2490d02842fSSascha Wildner };
2500d02842fSSascha Wildner 
2510d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpMethod[9] =
2520d02842fSSascha Wildner {
2530d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod),         NULL},
2540d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.InfoFlags),             "Info Flags"},
2550d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ParamCount),            "Parameter Count"},
2560d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.SyncLevel),             "Sync Level"},
2570d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.Mutex),                 "Mutex"},
258e5412f1eSSascha Wildner     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Method.OwnerId),               "Owner Id"},
2590d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ThreadCount),           "Thread Count"},
2600d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Method.AmlLength),             "Aml Length"},
2610d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.AmlStart),              "Aml Start"}
2620d02842fSSascha Wildner };
2630d02842fSSascha Wildner 
264d4972a9cSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpMutex[6] =
2650d02842fSSascha Wildner {
2660d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex),          NULL},
2670d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.SyncLevel),              "Sync Level"},
268d4972a9cSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel),      "Original Sync Level"},
2690d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OwnerThread),            "Owner Thread"},
2700d02842fSSascha Wildner     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Mutex.AcquisitionDepth),       "Acquire Depth"},
2710d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OsMutex),                "OsMutex"}
2720d02842fSSascha Wildner };
2730d02842fSSascha Wildner 
2746a0135c2SSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpRegion[8] =
2750d02842fSSascha Wildner {
2760d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion),         NULL},
2770d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.SpaceId),               "Space Id"},
2780d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.Flags),                 "Flags"},
2796a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Region.Node),                  "Parent Node"},
2800d02842fSSascha Wildner     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
2810d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
2826a0135c2SSascha Wildner     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
2830d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
2840d02842fSSascha Wildner };
2850d02842fSSascha Wildner 
2866a0135c2SSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpPower[6] =
2870d02842fSSascha Wildner {
2880d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
2890d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
2900d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
2910d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[0]),  "System Notify"},
2926a0135c2SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[1]),  "Device Notify"},
2936a0135c2SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.Handler),        "Handler"}
2940d02842fSSascha Wildner };
2950d02842fSSascha Wildner 
2960d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
2970d02842fSSascha Wildner {
2980d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor),      NULL},
2990d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
3000d02842fSSascha Wildner     {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
3010d02842fSSascha Wildner     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
3020d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[0]),      "System Notify"},
3030d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[1]),      "Device Notify"},
3040d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
3050d02842fSSascha Wildner };
3060d02842fSSascha Wildner 
3070d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
3080d02842fSSascha Wildner {
3090d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
3100d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]),    "System Notify"},
3110d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]),    "Device Notify"},
3120d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
3130d02842fSSascha Wildner };
3140d02842fSSascha Wildner 
3150d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
3160d02842fSSascha Wildner {
3170d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField),    NULL},
3180d02842fSSascha Wildner     {ACPI_EXD_FIELD,    0,                                              NULL},
3190d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
3200d02842fSSascha Wildner };
3210d02842fSSascha Wildner 
3220d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpRegionField[5] =
3230d02842fSSascha Wildner {
3240d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
3250d02842fSSascha Wildner     {ACPI_EXD_FIELD,    0,                                              NULL},
3260d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Field.AccessLength),           "AccessLength"},
3270d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"},
3280d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.ResourceBuffer),         "ResourceBuffer"}
3290d02842fSSascha Wildner };
3300d02842fSSascha Wildner 
3310d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
3320d02842fSSascha Wildner {
3330d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
3340d02842fSSascha Wildner     {ACPI_EXD_FIELD,    0,                                              NULL},
3350d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (BankField.Value),              "Value"},
3360d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.RegionObj),          "Region Object"},
3370d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.BankObj),            "Bank Object"}
3380d02842fSSascha Wildner };
3390d02842fSSascha Wildner 
3400d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
3410d02842fSSascha Wildner {
3420d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
3430d02842fSSascha Wildner     {ACPI_EXD_FIELD,    0,                                              NULL},
3440d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (IndexField.Value),             "Value"},
3450d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.IndexObj),          "Index Object"},
3460d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
3470d02842fSSascha Wildner };
3480d02842fSSascha Wildner 
34925ca8c79SSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpReference[9] =
3500d02842fSSascha Wildner {
3510d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpReference),       NULL},
3520d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.Class),              "Class"},
3530d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.TargetType),         "Target Type"},
3540d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Reference.Value),              "Value"},
3550d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
3566a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Reference.Node),               "Node"},
3570d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
35825ca8c79SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.IndexPointer),       "Index Pointer"},
3590d02842fSSascha Wildner     {ACPI_EXD_REFERENCE,0,                                              NULL}
3600d02842fSSascha Wildner };
3610d02842fSSascha Wildner 
3620d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
3630d02842fSSascha Wildner {
3640d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
3650d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (AddressSpace.SpaceId),         "Space Id"},
3666a0135c2SSascha Wildner     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
3676a0135c2SSascha Wildner     {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
3686a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
3690d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
3700d02842fSSascha Wildner };
3710d02842fSSascha Wildner 
3720d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpNotify[7] =
3730d02842fSSascha Wildner {
3740d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
3756a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
3760d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Notify.HandlerType),           "Handler Type"},
3770d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Handler),               "Handler"},
3780d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"},
3790d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[0]),               "Next System Notify"},
3800d02842fSSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[1]),               "Next Device Notify"}
3810d02842fSSascha Wildner };
3820d02842fSSascha Wildner 
3836a0135c2SSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpExtra[6] =
3846a0135c2SSascha Wildner {
3856a0135c2SSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra),          NULL},
3866a0135c2SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.Method_REG),             "_REG Method"},
3876a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Extra.ScopeNode),              "Scope Node"},
3886a0135c2SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.RegionContext),          "Region Context"},
3896a0135c2SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.AmlStart),               "Aml Start"},
3906a0135c2SSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Extra.AmlLength),              "Aml Length"}
3916a0135c2SSascha Wildner };
3926a0135c2SSascha Wildner 
3936a0135c2SSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpData[3] =
3946a0135c2SSascha Wildner {
3956a0135c2SSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpData),           NULL},
3966a0135c2SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Handler),                 "Handler"},
3976a0135c2SSascha Wildner     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Pointer),                 "Raw Data"}
3986a0135c2SSascha Wildner };
3990d02842fSSascha Wildner 
4000d02842fSSascha Wildner /* Miscellaneous tables */
4010d02842fSSascha Wildner 
4026a0135c2SSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpCommon[5] =
4030d02842fSSascha Wildner {
4040d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon),         NULL},
4050d02842fSSascha Wildner     {ACPI_EXD_TYPE ,    0,                                              NULL},
4060d02842fSSascha Wildner     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Common.ReferenceCount),        "Reference Count"},
4076a0135c2SSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"},
4086a0135c2SSascha Wildner     {ACPI_EXD_LIST,     ACPI_EXD_OFFSET (Common.NextObject),            "Object List"}
4090d02842fSSascha Wildner };
4100d02842fSSascha Wildner 
4110d02842fSSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
4120d02842fSSascha Wildner {
4130d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon),    NULL},
4140d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.FieldFlags),       "Field Flags"},
4150d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.AccessByteWidth),  "Access Byte Width"},
4160d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
4170d02842fSSascha Wildner     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
4180d02842fSSascha Wildner     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
4196a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
4200d02842fSSascha Wildner };
4210d02842fSSascha Wildner 
4226a0135c2SSascha Wildner static ACPI_EXDUMP_INFO     AcpiExDumpNode[7] =
4230d02842fSSascha Wildner {
4240d02842fSSascha Wildner     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
425e5412f1eSSascha Wildner     {ACPI_EXD_UINT16,   ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
426e5412f1eSSascha Wildner     {ACPI_EXD_UINT16,   ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
4276a0135c2SSascha Wildner     {ACPI_EXD_LIST,     ACPI_EXD_NSOFFSET (Object),                     "Object List"},
4286a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Parent),                     "Parent"},
4296a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Child),                      "Child"},
4306a0135c2SSascha Wildner     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Peer),                       "Peer"}
4310d02842fSSascha Wildner };
4320d02842fSSascha Wildner 
4330d02842fSSascha Wildner 
4340d02842fSSascha Wildner /* Dispatch table, indexed by object type */
4350d02842fSSascha Wildner 
4360d02842fSSascha Wildner static ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
4370d02842fSSascha Wildner {
4380d02842fSSascha Wildner     NULL,
4390d02842fSSascha Wildner     AcpiExDumpInteger,
4400d02842fSSascha Wildner     AcpiExDumpString,
4410d02842fSSascha Wildner     AcpiExDumpBuffer,
4420d02842fSSascha Wildner     AcpiExDumpPackage,
4430d02842fSSascha Wildner     NULL,
4440d02842fSSascha Wildner     AcpiExDumpDevice,
4450d02842fSSascha Wildner     AcpiExDumpEvent,
4460d02842fSSascha Wildner     AcpiExDumpMethod,
4470d02842fSSascha Wildner     AcpiExDumpMutex,
4480d02842fSSascha Wildner     AcpiExDumpRegion,
4490d02842fSSascha Wildner     AcpiExDumpPower,
4500d02842fSSascha Wildner     AcpiExDumpProcessor,
4510d02842fSSascha Wildner     AcpiExDumpThermal,
4520d02842fSSascha Wildner     AcpiExDumpBufferField,
4530d02842fSSascha Wildner     NULL,
4540d02842fSSascha Wildner     NULL,
4550d02842fSSascha Wildner     AcpiExDumpRegionField,
4560d02842fSSascha Wildner     AcpiExDumpBankField,
4570d02842fSSascha Wildner     AcpiExDumpIndexField,
4580d02842fSSascha Wildner     AcpiExDumpReference,
4590d02842fSSascha Wildner     NULL,
4600d02842fSSascha Wildner     NULL,
4610d02842fSSascha Wildner     AcpiExDumpNotify,
4620d02842fSSascha Wildner     AcpiExDumpAddressHandler,
4630d02842fSSascha Wildner     NULL,
4640d02842fSSascha Wildner     NULL,
4656a0135c2SSascha Wildner     NULL,
4666a0135c2SSascha Wildner     AcpiExDumpExtra,
4676a0135c2SSascha Wildner     AcpiExDumpData
4680d02842fSSascha Wildner };
4690d02842fSSascha Wildner 
4700d02842fSSascha Wildner 
4710d02842fSSascha Wildner /*******************************************************************************
4720d02842fSSascha Wildner  *
4730d02842fSSascha Wildner  * FUNCTION:    AcpiExDumpObject
4740d02842fSSascha Wildner  *
4750d02842fSSascha Wildner  * PARAMETERS:  ObjDesc             - Descriptor to dump
4760d02842fSSascha Wildner  *              Info                - Info table corresponding to this object
4770d02842fSSascha Wildner  *                                    type
4780d02842fSSascha Wildner  *
4790d02842fSSascha Wildner  * RETURN:      None
4800d02842fSSascha Wildner  *
4810d02842fSSascha Wildner  * DESCRIPTION: Walk the info table for this object
4820d02842fSSascha Wildner  *
4830d02842fSSascha Wildner  ******************************************************************************/
4840d02842fSSascha Wildner 
4850d02842fSSascha Wildner static void
AcpiExDumpObject(ACPI_OPERAND_OBJECT * ObjDesc,ACPI_EXDUMP_INFO * Info)4860d02842fSSascha Wildner AcpiExDumpObject (
4870d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     *ObjDesc,
4880d02842fSSascha Wildner     ACPI_EXDUMP_INFO        *Info)
4890d02842fSSascha Wildner {
4900d02842fSSascha Wildner     UINT8                   *Target;
4912ffe9f16SSascha Wildner     const char              *Name;
4920d02842fSSascha Wildner     UINT8                   Count;
4936a0135c2SSascha Wildner     ACPI_OPERAND_OBJECT     *Start;
4946a0135c2SSascha Wildner     ACPI_OPERAND_OBJECT     *Data = NULL;
4956a0135c2SSascha Wildner     ACPI_OPERAND_OBJECT     *Next;
4966a0135c2SSascha Wildner     ACPI_NAMESPACE_NODE     *Node;
4970d02842fSSascha Wildner 
4980d02842fSSascha Wildner 
4990d02842fSSascha Wildner     if (!Info)
5000d02842fSSascha Wildner     {
5010d02842fSSascha Wildner         AcpiOsPrintf (
5020d02842fSSascha Wildner             "ExDumpObject: Display not implemented for object type %s\n",
5030d02842fSSascha Wildner             AcpiUtGetObjectTypeName (ObjDesc));
5040d02842fSSascha Wildner         return;
5050d02842fSSascha Wildner     }
5060d02842fSSascha Wildner 
5070d02842fSSascha Wildner     /* First table entry must contain the table length (# of table entries) */
5080d02842fSSascha Wildner 
5090d02842fSSascha Wildner     Count = Info->Offset;
5100d02842fSSascha Wildner 
5110d02842fSSascha Wildner     while (Count)
5120d02842fSSascha Wildner     {
5133c639e0cSSascha Wildner         if (!ObjDesc)
5143c639e0cSSascha Wildner         {
5153c639e0cSSascha Wildner             return;
5163c639e0cSSascha Wildner         }
5173c639e0cSSascha Wildner 
5180d02842fSSascha Wildner         Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
5190d02842fSSascha Wildner         Name = Info->Name;
5200d02842fSSascha Wildner 
5210d02842fSSascha Wildner         switch (Info->Opcode)
5220d02842fSSascha Wildner         {
5230d02842fSSascha Wildner         case ACPI_EXD_INIT:
5240d02842fSSascha Wildner 
5250d02842fSSascha Wildner             break;
5260d02842fSSascha Wildner 
5270d02842fSSascha Wildner         case ACPI_EXD_TYPE:
5280d02842fSSascha Wildner 
5296a0135c2SSascha Wildner             AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
5303c639e0cSSascha Wildner                 ObjDesc->Common.Type,
5313c639e0cSSascha Wildner                 AcpiUtGetObjectTypeName (ObjDesc));
5320d02842fSSascha Wildner             break;
5330d02842fSSascha Wildner 
5340d02842fSSascha Wildner         case ACPI_EXD_UINT8:
5350d02842fSSascha Wildner 
5360d02842fSSascha Wildner             AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
5370d02842fSSascha Wildner             break;
5380d02842fSSascha Wildner 
5390d02842fSSascha Wildner         case ACPI_EXD_UINT16:
5400d02842fSSascha Wildner 
5410d02842fSSascha Wildner             AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
5420d02842fSSascha Wildner             break;
5430d02842fSSascha Wildner 
5440d02842fSSascha Wildner         case ACPI_EXD_UINT32:
5450d02842fSSascha Wildner 
5460d02842fSSascha Wildner             AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
5470d02842fSSascha Wildner             break;
5480d02842fSSascha Wildner 
5490d02842fSSascha Wildner         case ACPI_EXD_UINT64:
5500d02842fSSascha Wildner 
5510d02842fSSascha Wildner             AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
5520d02842fSSascha Wildner                 ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
5530d02842fSSascha Wildner             break;
5540d02842fSSascha Wildner 
5550d02842fSSascha Wildner         case ACPI_EXD_POINTER:
5560d02842fSSascha Wildner         case ACPI_EXD_ADDRESS:
5570d02842fSSascha Wildner 
5580d02842fSSascha Wildner             AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
5590d02842fSSascha Wildner             break;
5600d02842fSSascha Wildner 
5610d02842fSSascha Wildner         case ACPI_EXD_STRING:
5620d02842fSSascha Wildner 
5630d02842fSSascha Wildner             AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
5640d02842fSSascha Wildner             AcpiOsPrintf ("\n");
5650d02842fSSascha Wildner             break;
5660d02842fSSascha Wildner 
5670d02842fSSascha Wildner         case ACPI_EXD_BUFFER:
5680d02842fSSascha Wildner 
569820c5b08SSascha Wildner             ACPI_DUMP_BUFFER (
570820c5b08SSascha Wildner                 ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
5710d02842fSSascha Wildner             break;
5720d02842fSSascha Wildner 
5730d02842fSSascha Wildner         case ACPI_EXD_PACKAGE:
5740d02842fSSascha Wildner 
5750d02842fSSascha Wildner             /* Dump the package contents */
5760d02842fSSascha Wildner 
5770d02842fSSascha Wildner             AcpiOsPrintf ("\nPackage Contents:\n");
5780d02842fSSascha Wildner             AcpiExDumpPackageObj (ObjDesc, 0, 0);
5790d02842fSSascha Wildner             break;
5800d02842fSSascha Wildner 
5810d02842fSSascha Wildner         case ACPI_EXD_FIELD:
5820d02842fSSascha Wildner 
5830d02842fSSascha Wildner             AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
5840d02842fSSascha Wildner             break;
5850d02842fSSascha Wildner 
5860d02842fSSascha Wildner         case ACPI_EXD_REFERENCE:
5870d02842fSSascha Wildner 
5882ffe9f16SSascha Wildner             AcpiExOutString ("Class Name", AcpiUtGetReferenceName (ObjDesc));
5890d02842fSSascha Wildner             AcpiExDumpReferenceObj (ObjDesc);
5900d02842fSSascha Wildner             break;
5910d02842fSSascha Wildner 
5926a0135c2SSascha Wildner         case ACPI_EXD_LIST:
5936a0135c2SSascha Wildner 
5946a0135c2SSascha Wildner             Start = *ACPI_CAST_PTR (void *, Target);
5956a0135c2SSascha Wildner             Next = Start;
5966a0135c2SSascha Wildner 
5976a0135c2SSascha Wildner             AcpiOsPrintf ("%20s : %p ", Name, Next);
5986a0135c2SSascha Wildner             if (Next)
5996a0135c2SSascha Wildner             {
6003c639e0cSSascha Wildner                 AcpiOsPrintf ("%s (Type %2.2X)",
6016a0135c2SSascha Wildner                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
6026a0135c2SSascha Wildner 
6036a0135c2SSascha Wildner                 while (Next->Common.NextObject)
6046a0135c2SSascha Wildner                 {
6056a0135c2SSascha Wildner                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
6066a0135c2SSascha Wildner                         !Data)
6076a0135c2SSascha Wildner                     {
6086a0135c2SSascha Wildner                         Data = Next;
6096a0135c2SSascha Wildner                     }
6106a0135c2SSascha Wildner 
6116a0135c2SSascha Wildner                     Next = Next->Common.NextObject;
6126a0135c2SSascha Wildner                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
6136a0135c2SSascha Wildner                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
6146a0135c2SSascha Wildner 
6156a0135c2SSascha Wildner                     if ((Next == Start) || (Next == Data))
6166a0135c2SSascha Wildner                     {
617820c5b08SSascha Wildner                         AcpiOsPrintf (
618820c5b08SSascha Wildner                             "\n**** Error: Object list appears to be circular linked");
6196a0135c2SSascha Wildner                         break;
6206a0135c2SSascha Wildner                     }
6216a0135c2SSascha Wildner                 }
6226a0135c2SSascha Wildner             }
6233c639e0cSSascha Wildner             else
6243c639e0cSSascha Wildner             {
6253c639e0cSSascha Wildner                 AcpiOsPrintf ("- No attached objects");
6263c639e0cSSascha Wildner             }
6276a0135c2SSascha Wildner 
628066b6da2SSascha Wildner             AcpiOsPrintf ("\n");
6296a0135c2SSascha Wildner             break;
6306a0135c2SSascha Wildner 
6316a0135c2SSascha Wildner         case ACPI_EXD_HDLR_LIST:
6326a0135c2SSascha Wildner 
6336a0135c2SSascha Wildner             Start = *ACPI_CAST_PTR (void *, Target);
6346a0135c2SSascha Wildner             Next = Start;
6356a0135c2SSascha Wildner 
6366a0135c2SSascha Wildner             AcpiOsPrintf ("%20s : %p", Name, Next);
6376a0135c2SSascha Wildner             if (Next)
6386a0135c2SSascha Wildner             {
6396a0135c2SSascha Wildner                 AcpiOsPrintf ("(%s %2.2X)",
640f5f76cf2SSascha Wildner                     AcpiUtGetObjectTypeName (Next),
641f5f76cf2SSascha Wildner                     Next->AddressSpace.SpaceId);
6426a0135c2SSascha Wildner 
6436a0135c2SSascha Wildner                 while (Next->AddressSpace.Next)
6446a0135c2SSascha Wildner                 {
6456a0135c2SSascha Wildner                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
6466a0135c2SSascha Wildner                         !Data)
6476a0135c2SSascha Wildner                     {
6486a0135c2SSascha Wildner                         Data = Next;
6496a0135c2SSascha Wildner                     }
6506a0135c2SSascha Wildner 
6516a0135c2SSascha Wildner                     Next = Next->AddressSpace.Next;
6526a0135c2SSascha Wildner                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
653f5f76cf2SSascha Wildner                         AcpiUtGetObjectTypeName (Next),
654f5f76cf2SSascha Wildner                         Next->AddressSpace.SpaceId);
6556a0135c2SSascha Wildner 
6566a0135c2SSascha Wildner                     if ((Next == Start) || (Next == Data))
6576a0135c2SSascha Wildner                     {
658820c5b08SSascha Wildner                         AcpiOsPrintf (
659820c5b08SSascha Wildner                             "\n**** Error: Handler list appears to be circular linked");
6606a0135c2SSascha Wildner                         break;
6616a0135c2SSascha Wildner                     }
6626a0135c2SSascha Wildner                 }
6636a0135c2SSascha Wildner             }
6646a0135c2SSascha Wildner 
665066b6da2SSascha Wildner             AcpiOsPrintf ("\n");
6666a0135c2SSascha Wildner             break;
6676a0135c2SSascha Wildner 
6686a0135c2SSascha Wildner         case ACPI_EXD_RGN_LIST:
6696a0135c2SSascha Wildner 
6706a0135c2SSascha Wildner             Start = *ACPI_CAST_PTR (void *, Target);
6716a0135c2SSascha Wildner             Next = Start;
6726a0135c2SSascha Wildner 
6736a0135c2SSascha Wildner             AcpiOsPrintf ("%20s : %p", Name, Next);
6746a0135c2SSascha Wildner             if (Next)
6756a0135c2SSascha Wildner             {
6766a0135c2SSascha Wildner                 AcpiOsPrintf ("(%s %2.2X)",
6776a0135c2SSascha Wildner                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
6786a0135c2SSascha Wildner 
6796a0135c2SSascha Wildner                 while (Next->Region.Next)
6806a0135c2SSascha Wildner                 {
6816a0135c2SSascha Wildner                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
6826a0135c2SSascha Wildner                         !Data)
6836a0135c2SSascha Wildner                     {
6846a0135c2SSascha Wildner                         Data = Next;
6856a0135c2SSascha Wildner                     }
6866a0135c2SSascha Wildner 
6876a0135c2SSascha Wildner                     Next = Next->Region.Next;
6886a0135c2SSascha Wildner                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
6896a0135c2SSascha Wildner                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
6906a0135c2SSascha Wildner 
6916a0135c2SSascha Wildner                     if ((Next == Start) || (Next == Data))
6926a0135c2SSascha Wildner                     {
693820c5b08SSascha Wildner                         AcpiOsPrintf (
694820c5b08SSascha Wildner                             "\n**** Error: Region list appears to be circular linked");
6956a0135c2SSascha Wildner                         break;
6966a0135c2SSascha Wildner                     }
6976a0135c2SSascha Wildner                 }
6986a0135c2SSascha Wildner             }
6996a0135c2SSascha Wildner 
700066b6da2SSascha Wildner             AcpiOsPrintf ("\n");
7016a0135c2SSascha Wildner             break;
7026a0135c2SSascha Wildner 
7036a0135c2SSascha Wildner         case ACPI_EXD_NODE:
7046a0135c2SSascha Wildner 
7056a0135c2SSascha Wildner             Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target);
7066a0135c2SSascha Wildner 
7076a0135c2SSascha Wildner             AcpiOsPrintf ("%20s : %p", Name, Node);
7086a0135c2SSascha Wildner             if (Node)
7096a0135c2SSascha Wildner             {
7106a0135c2SSascha Wildner                 AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii);
7116a0135c2SSascha Wildner             }
7126a0135c2SSascha Wildner             AcpiOsPrintf ("\n");
7136a0135c2SSascha Wildner             break;
7146a0135c2SSascha Wildner 
7150d02842fSSascha Wildner         default:
7160d02842fSSascha Wildner 
7170d02842fSSascha Wildner             AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
7180d02842fSSascha Wildner                 Info->Opcode);
7190d02842fSSascha Wildner             return;
7200d02842fSSascha Wildner         }
7210d02842fSSascha Wildner 
7220d02842fSSascha Wildner         Info++;
7230d02842fSSascha Wildner         Count--;
7240d02842fSSascha Wildner     }
7250d02842fSSascha Wildner }
7260d02842fSSascha Wildner 
7270d02842fSSascha Wildner 
7280d02842fSSascha Wildner /*******************************************************************************
7290d02842fSSascha Wildner  *
7300d02842fSSascha Wildner  * FUNCTION:    AcpiExDumpOperand
7310d02842fSSascha Wildner  *
7320d02842fSSascha Wildner  * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped
7330d02842fSSascha Wildner  *              Depth           - Current nesting depth
7340d02842fSSascha Wildner  *
7350d02842fSSascha Wildner  * RETURN:      None
7360d02842fSSascha Wildner  *
7370d02842fSSascha Wildner  * DESCRIPTION: Dump an operand object
7380d02842fSSascha Wildner  *
7390d02842fSSascha Wildner  ******************************************************************************/
7400d02842fSSascha Wildner 
7410d02842fSSascha Wildner void
AcpiExDumpOperand(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Depth)7420d02842fSSascha Wildner AcpiExDumpOperand (
7430d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     *ObjDesc,
7440d02842fSSascha Wildner     UINT32                  Depth)
7450d02842fSSascha Wildner {
7460d02842fSSascha Wildner     UINT32                  Length;
7470d02842fSSascha Wildner     UINT32                  Index;
7480d02842fSSascha Wildner 
7490d02842fSSascha Wildner 
7507bcb6cafSSascha Wildner     ACPI_FUNCTION_NAME (ExDumpOperand);
7510d02842fSSascha Wildner 
7520d02842fSSascha Wildner 
7530d02842fSSascha Wildner     /* Check if debug output enabled */
7540d02842fSSascha Wildner 
7550d02842fSSascha Wildner     if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT))
7560d02842fSSascha Wildner     {
7570d02842fSSascha Wildner         return;
7580d02842fSSascha Wildner     }
7590d02842fSSascha Wildner 
7600d02842fSSascha Wildner     if (!ObjDesc)
7610d02842fSSascha Wildner     {
7620d02842fSSascha Wildner         /* This could be a null element of a package */
7630d02842fSSascha Wildner 
7640d02842fSSascha Wildner         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
7650d02842fSSascha Wildner         return;
7660d02842fSSascha Wildner     }
7670d02842fSSascha Wildner 
7680d02842fSSascha Wildner     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
7690d02842fSSascha Wildner     {
7700d02842fSSascha Wildner         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
7710d02842fSSascha Wildner         ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
7720d02842fSSascha Wildner         return;
7730d02842fSSascha Wildner     }
7740d02842fSSascha Wildner 
7750d02842fSSascha Wildner     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
7760d02842fSSascha Wildner     {
7770d02842fSSascha Wildner         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
7780d02842fSSascha Wildner             "%p is not a node or operand object: [%s]\n",
7790d02842fSSascha Wildner             ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
7800d02842fSSascha Wildner         ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
7810d02842fSSascha Wildner         return;
7820d02842fSSascha Wildner     }
7830d02842fSSascha Wildner 
7840d02842fSSascha Wildner     /* ObjDesc is a valid object */
7850d02842fSSascha Wildner 
7860d02842fSSascha Wildner     if (Depth > 0)
7870d02842fSSascha Wildner     {
7881093ca81SSascha Wildner         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
7891093ca81SSascha Wildner             Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
7900d02842fSSascha Wildner     }
7910d02842fSSascha Wildner     else
7920d02842fSSascha Wildner     {
7931093ca81SSascha Wildner         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Refs=%u ",
7941093ca81SSascha Wildner             ObjDesc, ObjDesc->Common.ReferenceCount));
7950d02842fSSascha Wildner     }
7960d02842fSSascha Wildner 
7970d02842fSSascha Wildner     /* Decode object type */
7980d02842fSSascha Wildner 
7990d02842fSSascha Wildner     switch (ObjDesc->Common.Type)
8000d02842fSSascha Wildner     {
8010d02842fSSascha Wildner     case ACPI_TYPE_LOCAL_REFERENCE:
8020d02842fSSascha Wildner 
803820c5b08SSascha Wildner         AcpiOsPrintf ("Reference: [%s] ",
804820c5b08SSascha Wildner             AcpiUtGetReferenceName (ObjDesc));
8050d02842fSSascha Wildner 
8060d02842fSSascha Wildner         switch (ObjDesc->Reference.Class)
8070d02842fSSascha Wildner         {
8080d02842fSSascha Wildner         case ACPI_REFCLASS_DEBUG:
8090d02842fSSascha Wildner 
8100d02842fSSascha Wildner             AcpiOsPrintf ("\n");
8110d02842fSSascha Wildner             break;
8120d02842fSSascha Wildner 
8130d02842fSSascha Wildner         case ACPI_REFCLASS_INDEX:
8140d02842fSSascha Wildner 
8150d02842fSSascha Wildner             AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
8160d02842fSSascha Wildner             break;
8170d02842fSSascha Wildner 
8180d02842fSSascha Wildner         case ACPI_REFCLASS_TABLE:
8190d02842fSSascha Wildner 
8200d02842fSSascha Wildner             AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
8210d02842fSSascha Wildner             break;
8220d02842fSSascha Wildner 
8230d02842fSSascha Wildner         case ACPI_REFCLASS_REFOF:
8240d02842fSSascha Wildner 
8250d02842fSSascha Wildner             AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
8260d02842fSSascha Wildner                 AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
8270d02842fSSascha Wildner                     ObjDesc->Reference.Object)->Common.Type));
8280d02842fSSascha Wildner             break;
8290d02842fSSascha Wildner 
8300d02842fSSascha Wildner         case ACPI_REFCLASS_NAME:
8310d02842fSSascha Wildner 
8321093ca81SSascha Wildner             AcpiUtRepairName (ObjDesc->Reference.Node->Name.Ascii);
8331093ca81SSascha Wildner             AcpiOsPrintf ("- [%4.4s] (Node %p)\n",
8341093ca81SSascha Wildner                 ObjDesc->Reference.Node->Name.Ascii,
8351093ca81SSascha Wildner                 ObjDesc->Reference.Node);
8360d02842fSSascha Wildner             break;
8370d02842fSSascha Wildner 
8380d02842fSSascha Wildner         case ACPI_REFCLASS_ARG:
8390d02842fSSascha Wildner         case ACPI_REFCLASS_LOCAL:
8400d02842fSSascha Wildner 
8410d02842fSSascha Wildner             AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
8420d02842fSSascha Wildner             break;
8430d02842fSSascha Wildner 
8440d02842fSSascha Wildner         default:    /* Unknown reference class */
8450d02842fSSascha Wildner 
8460d02842fSSascha Wildner             AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
8470d02842fSSascha Wildner             break;
8480d02842fSSascha Wildner         }
8490d02842fSSascha Wildner         break;
8500d02842fSSascha Wildner 
8510d02842fSSascha Wildner     case ACPI_TYPE_BUFFER:
8520d02842fSSascha Wildner 
8530d02842fSSascha Wildner         AcpiOsPrintf ("Buffer length %.2X @ %p\n",
8540d02842fSSascha Wildner             ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
8550d02842fSSascha Wildner 
8560d02842fSSascha Wildner         /* Debug only -- dump the buffer contents */
8570d02842fSSascha Wildner 
8580d02842fSSascha Wildner         if (ObjDesc->Buffer.Pointer)
8590d02842fSSascha Wildner         {
8600d02842fSSascha Wildner             Length = ObjDesc->Buffer.Length;
8610d02842fSSascha Wildner             if (Length > 128)
8620d02842fSSascha Wildner             {
8630d02842fSSascha Wildner                 Length = 128;
8640d02842fSSascha Wildner             }
8650d02842fSSascha Wildner 
866820c5b08SSascha Wildner             AcpiOsPrintf (
867820c5b08SSascha Wildner                 "Buffer Contents: (displaying length 0x%.2X)\n", Length);
8680d02842fSSascha Wildner             ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
8690d02842fSSascha Wildner         }
8700d02842fSSascha Wildner         break;
8710d02842fSSascha Wildner 
8720d02842fSSascha Wildner     case ACPI_TYPE_INTEGER:
8730d02842fSSascha Wildner 
8740d02842fSSascha Wildner         AcpiOsPrintf ("Integer %8.8X%8.8X\n",
8750d02842fSSascha Wildner             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
8760d02842fSSascha Wildner         break;
8770d02842fSSascha Wildner 
8780d02842fSSascha Wildner     case ACPI_TYPE_PACKAGE:
8790d02842fSSascha Wildner 
8800d02842fSSascha Wildner         AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
8810d02842fSSascha Wildner             ObjDesc->Package.Count, ObjDesc->Package.Elements);
8820d02842fSSascha Wildner 
8830d02842fSSascha Wildner         /*
8840d02842fSSascha Wildner          * If elements exist, package element pointer is valid,
8850d02842fSSascha Wildner          * and debug_level exceeds 1, dump package's elements.
8860d02842fSSascha Wildner          */
8870d02842fSSascha Wildner         if (ObjDesc->Package.Count &&
8880d02842fSSascha Wildner             ObjDesc->Package.Elements &&
8890d02842fSSascha Wildner             AcpiDbgLevel > 1)
8900d02842fSSascha Wildner         {
8910d02842fSSascha Wildner             for (Index = 0; Index < ObjDesc->Package.Count; Index++)
8920d02842fSSascha Wildner             {
893820c5b08SSascha Wildner                 AcpiExDumpOperand (
894820c5b08SSascha Wildner                     ObjDesc->Package.Elements[Index], Depth + 1);
8950d02842fSSascha Wildner             }
8960d02842fSSascha Wildner         }
8970d02842fSSascha Wildner         break;
8980d02842fSSascha Wildner 
8990d02842fSSascha Wildner     case ACPI_TYPE_REGION:
9000d02842fSSascha Wildner 
9010d02842fSSascha Wildner         AcpiOsPrintf ("Region %s (%X)",
9020d02842fSSascha Wildner             AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
9030d02842fSSascha Wildner             ObjDesc->Region.SpaceId);
9040d02842fSSascha Wildner 
9050d02842fSSascha Wildner         /*
9060d02842fSSascha Wildner          * If the address and length have not been evaluated,
9070d02842fSSascha Wildner          * don't print them.
9080d02842fSSascha Wildner          */
9090d02842fSSascha Wildner         if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
9100d02842fSSascha Wildner         {
9110d02842fSSascha Wildner             AcpiOsPrintf ("\n");
9120d02842fSSascha Wildner         }
9130d02842fSSascha Wildner         else
9140d02842fSSascha Wildner         {
9150d02842fSSascha Wildner             AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
9165943f66cSSascha Wildner                 ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
9170d02842fSSascha Wildner                 ObjDesc->Region.Length);
9180d02842fSSascha Wildner         }
9190d02842fSSascha Wildner         break;
9200d02842fSSascha Wildner 
9210d02842fSSascha Wildner     case ACPI_TYPE_STRING:
9220d02842fSSascha Wildner 
9230d02842fSSascha Wildner         AcpiOsPrintf ("String length %X @ %p ",
9240d02842fSSascha Wildner             ObjDesc->String.Length,
9250d02842fSSascha Wildner             ObjDesc->String.Pointer);
9260d02842fSSascha Wildner 
9270d02842fSSascha Wildner         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
9280d02842fSSascha Wildner         AcpiOsPrintf ("\n");
9290d02842fSSascha Wildner         break;
9300d02842fSSascha Wildner 
9310d02842fSSascha Wildner     case ACPI_TYPE_LOCAL_BANK_FIELD:
9320d02842fSSascha Wildner 
9330d02842fSSascha Wildner         AcpiOsPrintf ("BankField\n");
9340d02842fSSascha Wildner         break;
9350d02842fSSascha Wildner 
9360d02842fSSascha Wildner     case ACPI_TYPE_LOCAL_REGION_FIELD:
9370d02842fSSascha Wildner 
9380d02842fSSascha Wildner         AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
9390d02842fSSascha Wildner             "byte=%X bit=%X of below:\n",
9400d02842fSSascha Wildner             ObjDesc->Field.BitLength,
9410d02842fSSascha Wildner             ObjDesc->Field.AccessByteWidth,
9420d02842fSSascha Wildner             ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
9430d02842fSSascha Wildner             ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
9440d02842fSSascha Wildner             ObjDesc->Field.BaseByteOffset,
9450d02842fSSascha Wildner             ObjDesc->Field.StartFieldBitOffset);
9460d02842fSSascha Wildner 
9470d02842fSSascha Wildner         AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth + 1);
9480d02842fSSascha Wildner         break;
9490d02842fSSascha Wildner 
9500d02842fSSascha Wildner     case ACPI_TYPE_LOCAL_INDEX_FIELD:
9510d02842fSSascha Wildner 
9520d02842fSSascha Wildner         AcpiOsPrintf ("IndexField\n");
9530d02842fSSascha Wildner         break;
9540d02842fSSascha Wildner 
9550d02842fSSascha Wildner     case ACPI_TYPE_BUFFER_FIELD:
9560d02842fSSascha Wildner 
9570d02842fSSascha Wildner         AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
9580d02842fSSascha Wildner             ObjDesc->BufferField.BitLength,
9590d02842fSSascha Wildner             ObjDesc->BufferField.BaseByteOffset,
9600d02842fSSascha Wildner             ObjDesc->BufferField.StartFieldBitOffset);
9610d02842fSSascha Wildner 
9620d02842fSSascha Wildner         if (!ObjDesc->BufferField.BufferObj)
9630d02842fSSascha Wildner         {
9640d02842fSSascha Wildner             ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
9650d02842fSSascha Wildner         }
9660d02842fSSascha Wildner         else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
9670d02842fSSascha Wildner             ACPI_TYPE_BUFFER)
9680d02842fSSascha Wildner         {
9690d02842fSSascha Wildner             AcpiOsPrintf ("*not a Buffer*\n");
9700d02842fSSascha Wildner         }
9710d02842fSSascha Wildner         else
9720d02842fSSascha Wildner         {
9730d02842fSSascha Wildner             AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth + 1);
9740d02842fSSascha Wildner         }
9750d02842fSSascha Wildner         break;
9760d02842fSSascha Wildner 
9770d02842fSSascha Wildner     case ACPI_TYPE_EVENT:
9780d02842fSSascha Wildner 
9790d02842fSSascha Wildner         AcpiOsPrintf ("Event\n");
9800d02842fSSascha Wildner         break;
9810d02842fSSascha Wildner 
9820d02842fSSascha Wildner     case ACPI_TYPE_METHOD:
9830d02842fSSascha Wildner 
9840d02842fSSascha Wildner         AcpiOsPrintf ("Method(%X) @ %p:%X\n",
9850d02842fSSascha Wildner             ObjDesc->Method.ParamCount,
9860d02842fSSascha Wildner             ObjDesc->Method.AmlStart,
9870d02842fSSascha Wildner             ObjDesc->Method.AmlLength);
9880d02842fSSascha Wildner         break;
9890d02842fSSascha Wildner 
9900d02842fSSascha Wildner     case ACPI_TYPE_MUTEX:
9910d02842fSSascha Wildner 
9920d02842fSSascha Wildner         AcpiOsPrintf ("Mutex\n");
9930d02842fSSascha Wildner         break;
9940d02842fSSascha Wildner 
9950d02842fSSascha Wildner     case ACPI_TYPE_DEVICE:
9960d02842fSSascha Wildner 
9970d02842fSSascha Wildner         AcpiOsPrintf ("Device\n");
9980d02842fSSascha Wildner         break;
9990d02842fSSascha Wildner 
10000d02842fSSascha Wildner     case ACPI_TYPE_POWER:
10010d02842fSSascha Wildner 
10020d02842fSSascha Wildner         AcpiOsPrintf ("Power\n");
10030d02842fSSascha Wildner         break;
10040d02842fSSascha Wildner 
10050d02842fSSascha Wildner     case ACPI_TYPE_PROCESSOR:
10060d02842fSSascha Wildner 
10070d02842fSSascha Wildner         AcpiOsPrintf ("Processor\n");
10080d02842fSSascha Wildner         break;
10090d02842fSSascha Wildner 
10100d02842fSSascha Wildner     case ACPI_TYPE_THERMAL:
10110d02842fSSascha Wildner 
10120d02842fSSascha Wildner         AcpiOsPrintf ("Thermal\n");
10130d02842fSSascha Wildner         break;
10140d02842fSSascha Wildner 
10150d02842fSSascha Wildner     default:
10160d02842fSSascha Wildner 
10170d02842fSSascha Wildner         /* Unknown Type */
10180d02842fSSascha Wildner 
10190d02842fSSascha Wildner         AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
10200d02842fSSascha Wildner         break;
10210d02842fSSascha Wildner     }
10220d02842fSSascha Wildner 
10230d02842fSSascha Wildner     return;
10240d02842fSSascha Wildner }
10250d02842fSSascha Wildner 
10260d02842fSSascha Wildner 
10270d02842fSSascha Wildner /*******************************************************************************
10280d02842fSSascha Wildner  *
10290d02842fSSascha Wildner  * FUNCTION:    AcpiExDumpOperands
10300d02842fSSascha Wildner  *
10310d02842fSSascha Wildner  * PARAMETERS:  Operands            - A list of Operand objects
10320d02842fSSascha Wildner  *              OpcodeName          - AML opcode name
10330d02842fSSascha Wildner  *              NumOperands         - Operand count for this opcode
10340d02842fSSascha Wildner  *
10350d02842fSSascha Wildner  * DESCRIPTION: Dump the operands associated with the opcode
10360d02842fSSascha Wildner  *
10370d02842fSSascha Wildner  ******************************************************************************/
10380d02842fSSascha Wildner 
10390d02842fSSascha Wildner void
AcpiExDumpOperands(ACPI_OPERAND_OBJECT ** Operands,const char * OpcodeName,UINT32 NumOperands)10400d02842fSSascha Wildner AcpiExDumpOperands (
10410d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     **Operands,
10420d02842fSSascha Wildner     const char              *OpcodeName,
10430d02842fSSascha Wildner     UINT32                  NumOperands)
10440d02842fSSascha Wildner {
10457bcb6cafSSascha Wildner     ACPI_FUNCTION_TRACE (ExDumpOperands);
10460d02842fSSascha Wildner 
10470d02842fSSascha Wildner 
10480d02842fSSascha Wildner     if (!OpcodeName)
10490d02842fSSascha Wildner     {
10500d02842fSSascha Wildner         OpcodeName = "UNKNOWN";
10510d02842fSSascha Wildner     }
10520d02842fSSascha Wildner 
10530d02842fSSascha Wildner     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
10540d02842fSSascha Wildner         "**** Start operand dump for opcode [%s], %u operands\n",
10550d02842fSSascha Wildner         OpcodeName, NumOperands));
10560d02842fSSascha Wildner 
10570d02842fSSascha Wildner     if (NumOperands == 0)
10580d02842fSSascha Wildner     {
10590d02842fSSascha Wildner         NumOperands = 1;
10600d02842fSSascha Wildner     }
10610d02842fSSascha Wildner 
10620d02842fSSascha Wildner     /* Dump the individual operands */
10630d02842fSSascha Wildner 
10640d02842fSSascha Wildner     while (NumOperands)
10650d02842fSSascha Wildner     {
10660d02842fSSascha Wildner         AcpiExDumpOperand (*Operands, 0);
10670d02842fSSascha Wildner         Operands++;
10680d02842fSSascha Wildner         NumOperands--;
10690d02842fSSascha Wildner     }
10700d02842fSSascha Wildner 
10710d02842fSSascha Wildner     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
10720d02842fSSascha Wildner         "**** End operand dump for [%s]\n", OpcodeName));
10737bcb6cafSSascha Wildner     return_VOID;
10740d02842fSSascha Wildner }
10750d02842fSSascha Wildner 
10760d02842fSSascha Wildner 
10770d02842fSSascha Wildner /*******************************************************************************
10780d02842fSSascha Wildner  *
10790d02842fSSascha Wildner  * FUNCTION:    AcpiExOut* functions
10800d02842fSSascha Wildner  *
10810d02842fSSascha Wildner  * PARAMETERS:  Title               - Descriptive text
10820d02842fSSascha Wildner  *              Value               - Value to be displayed
10830d02842fSSascha Wildner  *
10840d02842fSSascha Wildner  * DESCRIPTION: Object dump output formatting functions. These functions
10850d02842fSSascha Wildner  *              reduce the number of format strings required and keeps them
10860d02842fSSascha Wildner  *              all in one place for easy modification.
10870d02842fSSascha Wildner  *
10880d02842fSSascha Wildner  ******************************************************************************/
10890d02842fSSascha Wildner 
10900d02842fSSascha Wildner static void
AcpiExOutString(const char * Title,const char * Value)10910d02842fSSascha Wildner AcpiExOutString (
10922ffe9f16SSascha Wildner     const char              *Title,
10932ffe9f16SSascha Wildner     const char              *Value)
10940d02842fSSascha Wildner {
10950d02842fSSascha Wildner     AcpiOsPrintf ("%20s : %s\n", Title, Value);
10960d02842fSSascha Wildner }
10970d02842fSSascha Wildner 
10980d02842fSSascha Wildner static void
AcpiExOutPointer(const char * Title,const void * Value)10990d02842fSSascha Wildner AcpiExOutPointer (
11002ffe9f16SSascha Wildner     const char              *Title,
11012ffe9f16SSascha Wildner     const void              *Value)
11020d02842fSSascha Wildner {
11030d02842fSSascha Wildner     AcpiOsPrintf ("%20s : %p\n", Title, Value);
11040d02842fSSascha Wildner }
11050d02842fSSascha Wildner 
11060d02842fSSascha Wildner 
11070d02842fSSascha Wildner /*******************************************************************************
11080d02842fSSascha Wildner  *
11090d02842fSSascha Wildner  * FUNCTION:    AcpiExDumpNamespaceNode
11100d02842fSSascha Wildner  *
11110d02842fSSascha Wildner  * PARAMETERS:  Node                - Descriptor to dump
11120d02842fSSascha Wildner  *              Flags               - Force display if TRUE
11130d02842fSSascha Wildner  *
11140d02842fSSascha Wildner  * DESCRIPTION: Dumps the members of the given.Node
11150d02842fSSascha Wildner  *
11160d02842fSSascha Wildner  ******************************************************************************/
11170d02842fSSascha Wildner 
11180d02842fSSascha Wildner void
AcpiExDumpNamespaceNode(ACPI_NAMESPACE_NODE * Node,UINT32 Flags)11190d02842fSSascha Wildner AcpiExDumpNamespaceNode (
11200d02842fSSascha Wildner     ACPI_NAMESPACE_NODE     *Node,
11210d02842fSSascha Wildner     UINT32                  Flags)
11220d02842fSSascha Wildner {
11230d02842fSSascha Wildner 
11240d02842fSSascha Wildner     ACPI_FUNCTION_ENTRY ();
11250d02842fSSascha Wildner 
11260d02842fSSascha Wildner 
11270d02842fSSascha Wildner     if (!Flags)
11280d02842fSSascha Wildner     {
11290d02842fSSascha Wildner         /* Check if debug output enabled */
11300d02842fSSascha Wildner 
11310d02842fSSascha Wildner         if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
11320d02842fSSascha Wildner         {
11330d02842fSSascha Wildner             return;
11340d02842fSSascha Wildner         }
11350d02842fSSascha Wildner     }
11360d02842fSSascha Wildner 
11370d02842fSSascha Wildner     AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
11386a0135c2SSascha Wildner     AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
11396a0135c2SSascha Wildner         Node->Type, AcpiUtGetTypeName (Node->Type));
11400d02842fSSascha Wildner 
11410d02842fSSascha Wildner     AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
11420d02842fSSascha Wildner         AcpiExDumpNode);
11430d02842fSSascha Wildner }
11440d02842fSSascha Wildner 
11450d02842fSSascha Wildner 
11460d02842fSSascha Wildner /*******************************************************************************
11470d02842fSSascha Wildner  *
11480d02842fSSascha Wildner  * FUNCTION:    AcpiExDumpReferenceObj
11490d02842fSSascha Wildner  *
11500d02842fSSascha Wildner  * PARAMETERS:  Object              - Descriptor to dump
11510d02842fSSascha Wildner  *
11520d02842fSSascha Wildner  * DESCRIPTION: Dumps a reference object
11530d02842fSSascha Wildner  *
11540d02842fSSascha Wildner  ******************************************************************************/
11550d02842fSSascha Wildner 
11560d02842fSSascha Wildner static void
AcpiExDumpReferenceObj(ACPI_OPERAND_OBJECT * ObjDesc)11570d02842fSSascha Wildner AcpiExDumpReferenceObj (
11580d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     *ObjDesc)
11590d02842fSSascha Wildner {
11600d02842fSSascha Wildner     ACPI_BUFFER             RetBuf;
11610d02842fSSascha Wildner     ACPI_STATUS             Status;
11620d02842fSSascha Wildner 
11630d02842fSSascha Wildner 
11640d02842fSSascha Wildner     RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
11650d02842fSSascha Wildner 
11660d02842fSSascha Wildner     if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
11670d02842fSSascha Wildner     {
11680d02842fSSascha Wildner         AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
11690d02842fSSascha Wildner 
1170267c04fdSSascha Wildner         Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node,
11713cc0afc6SSascha Wildner             &RetBuf, TRUE);
11720d02842fSSascha Wildner         if (ACPI_FAILURE (Status))
11730d02842fSSascha Wildner         {
11741093ca81SSascha Wildner             AcpiOsPrintf (" Could not convert name to pathname: %s\n",
11751093ca81SSascha Wildner                 AcpiFormatException (Status));
11760d02842fSSascha Wildner         }
11770d02842fSSascha Wildner         else
11780d02842fSSascha Wildner         {
11791093ca81SSascha Wildner             AcpiOsPrintf ("%s: %s\n",
11801093ca81SSascha Wildner                 AcpiUtGetTypeName (ObjDesc->Reference.Node->Type),
11811093ca81SSascha Wildner                 (char *) RetBuf.Pointer);
11820d02842fSSascha Wildner             ACPI_FREE (RetBuf.Pointer);
11830d02842fSSascha Wildner         }
11840d02842fSSascha Wildner     }
11850d02842fSSascha Wildner     else if (ObjDesc->Reference.Object)
11860d02842fSSascha Wildner     {
11870d02842fSSascha Wildner         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
11880d02842fSSascha Wildner         {
118925ca8c79SSascha Wildner             AcpiOsPrintf ("%22s %p", "Target :",
119025ca8c79SSascha Wildner                 ObjDesc->Reference.Object);
11910d02842fSSascha Wildner             if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
11920d02842fSSascha Wildner             {
119325ca8c79SSascha Wildner                 AcpiOsPrintf (" Table Index: %X\n",
119425ca8c79SSascha Wildner                     ObjDesc->Reference.Value);
11950d02842fSSascha Wildner             }
11960d02842fSSascha Wildner             else
11970d02842fSSascha Wildner             {
119825ca8c79SSascha Wildner                 AcpiOsPrintf (" [%s]\n",
11990d02842fSSascha Wildner                     AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
12000d02842fSSascha Wildner                     ObjDesc->Reference.Object)->Common.Type));
12010d02842fSSascha Wildner             }
12020d02842fSSascha Wildner         }
12030d02842fSSascha Wildner         else
12040d02842fSSascha Wildner         {
12050d02842fSSascha Wildner             AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
12060d02842fSSascha Wildner         }
12070d02842fSSascha Wildner     }
12080d02842fSSascha Wildner }
12090d02842fSSascha Wildner 
12100d02842fSSascha Wildner 
12110d02842fSSascha Wildner /*******************************************************************************
12120d02842fSSascha Wildner  *
12130d02842fSSascha Wildner  * FUNCTION:    AcpiExDumpPackageObj
12140d02842fSSascha Wildner  *
12150d02842fSSascha Wildner  * PARAMETERS:  ObjDesc             - Descriptor to dump
12160d02842fSSascha Wildner  *              Level               - Indentation Level
12170d02842fSSascha Wildner  *              Index               - Package index for this object
12180d02842fSSascha Wildner  *
12190d02842fSSascha Wildner  * DESCRIPTION: Dumps the elements of the package
12200d02842fSSascha Wildner  *
12210d02842fSSascha Wildner  ******************************************************************************/
12220d02842fSSascha Wildner 
12230d02842fSSascha Wildner static void
AcpiExDumpPackageObj(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Level,UINT32 Index)12240d02842fSSascha Wildner AcpiExDumpPackageObj (
12250d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     *ObjDesc,
12260d02842fSSascha Wildner     UINT32                  Level,
12270d02842fSSascha Wildner     UINT32                  Index)
12280d02842fSSascha Wildner {
12290d02842fSSascha Wildner     UINT32                  i;
12300d02842fSSascha Wildner 
12310d02842fSSascha Wildner 
12320d02842fSSascha Wildner     /* Indentation and index output */
12330d02842fSSascha Wildner 
12340d02842fSSascha Wildner     if (Level > 0)
12350d02842fSSascha Wildner     {
12360d02842fSSascha Wildner         for (i = 0; i < Level; i++)
12370d02842fSSascha Wildner         {
12380d02842fSSascha Wildner             AcpiOsPrintf ("  ");
12390d02842fSSascha Wildner         }
12400d02842fSSascha Wildner 
12410d02842fSSascha Wildner         AcpiOsPrintf ("[%.2d] ", Index);
12420d02842fSSascha Wildner     }
12430d02842fSSascha Wildner 
12440d02842fSSascha Wildner     AcpiOsPrintf ("%p ", ObjDesc);
12450d02842fSSascha Wildner 
12460d02842fSSascha Wildner     /* Null package elements are allowed */
12470d02842fSSascha Wildner 
12480d02842fSSascha Wildner     if (!ObjDesc)
12490d02842fSSascha Wildner     {
12500d02842fSSascha Wildner         AcpiOsPrintf ("[Null Object]\n");
12510d02842fSSascha Wildner         return;
12520d02842fSSascha Wildner     }
12530d02842fSSascha Wildner 
12540d02842fSSascha Wildner     /* Packages may only contain a few object types */
12550d02842fSSascha Wildner 
12560d02842fSSascha Wildner     switch (ObjDesc->Common.Type)
12570d02842fSSascha Wildner     {
12580d02842fSSascha Wildner     case ACPI_TYPE_INTEGER:
12590d02842fSSascha Wildner 
12600d02842fSSascha Wildner         AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
12610d02842fSSascha Wildner             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
12620d02842fSSascha Wildner         break;
12630d02842fSSascha Wildner 
12640d02842fSSascha Wildner     case ACPI_TYPE_STRING:
12650d02842fSSascha Wildner 
12660d02842fSSascha Wildner         AcpiOsPrintf ("[String]  Value: ");
12670d02842fSSascha Wildner         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
12680d02842fSSascha Wildner         AcpiOsPrintf ("\n");
12690d02842fSSascha Wildner         break;
12700d02842fSSascha Wildner 
12710d02842fSSascha Wildner     case ACPI_TYPE_BUFFER:
12720d02842fSSascha Wildner 
12730d02842fSSascha Wildner         AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
12740d02842fSSascha Wildner         if (ObjDesc->Buffer.Length)
12750d02842fSSascha Wildner         {
1276820c5b08SSascha Wildner             AcpiUtDebugDumpBuffer (
1277820c5b08SSascha Wildner                 ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
12780d02842fSSascha Wildner                 ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
12790d02842fSSascha Wildner         }
12800d02842fSSascha Wildner         else
12810d02842fSSascha Wildner         {
12820d02842fSSascha Wildner             AcpiOsPrintf ("\n");
12830d02842fSSascha Wildner         }
12840d02842fSSascha Wildner         break;
12850d02842fSSascha Wildner 
12860d02842fSSascha Wildner     case ACPI_TYPE_PACKAGE:
12870d02842fSSascha Wildner 
12880d02842fSSascha Wildner         AcpiOsPrintf ("[Package] Contains %u Elements:\n",
12890d02842fSSascha Wildner             ObjDesc->Package.Count);
12900d02842fSSascha Wildner 
12910d02842fSSascha Wildner         for (i = 0; i < ObjDesc->Package.Count; i++)
12920d02842fSSascha Wildner         {
1293820c5b08SSascha Wildner             AcpiExDumpPackageObj (
1294820c5b08SSascha Wildner                 ObjDesc->Package.Elements[i], Level + 1, i);
12950d02842fSSascha Wildner         }
12960d02842fSSascha Wildner         break;
12970d02842fSSascha Wildner 
12980d02842fSSascha Wildner     case ACPI_TYPE_LOCAL_REFERENCE:
12990d02842fSSascha Wildner 
13001093ca81SSascha Wildner         AcpiOsPrintf ("[Object Reference] Class [%s]",
13011093ca81SSascha Wildner             AcpiUtGetReferenceName (ObjDesc));
13020d02842fSSascha Wildner         AcpiExDumpReferenceObj (ObjDesc);
13030d02842fSSascha Wildner         break;
13040d02842fSSascha Wildner 
13050d02842fSSascha Wildner     default:
13060d02842fSSascha Wildner 
13073c639e0cSSascha Wildner         AcpiOsPrintf ("[%s] Type: %2.2X\n",
13083c639e0cSSascha Wildner             AcpiUtGetTypeName (ObjDesc->Common.Type), ObjDesc->Common.Type);
13090d02842fSSascha Wildner         break;
13100d02842fSSascha Wildner     }
13110d02842fSSascha Wildner }
13120d02842fSSascha Wildner 
13130d02842fSSascha Wildner 
13140d02842fSSascha Wildner /*******************************************************************************
13150d02842fSSascha Wildner  *
13160d02842fSSascha Wildner  * FUNCTION:    AcpiExDumpObjectDescriptor
13170d02842fSSascha Wildner  *
13180d02842fSSascha Wildner  * PARAMETERS:  ObjDesc             - Descriptor to dump
13190d02842fSSascha Wildner  *              Flags               - Force display if TRUE
13200d02842fSSascha Wildner  *
13210d02842fSSascha Wildner  * DESCRIPTION: Dumps the members of the object descriptor given.
13220d02842fSSascha Wildner  *
13230d02842fSSascha Wildner  ******************************************************************************/
13240d02842fSSascha Wildner 
13250d02842fSSascha Wildner void
AcpiExDumpObjectDescriptor(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Flags)13260d02842fSSascha Wildner AcpiExDumpObjectDescriptor (
13270d02842fSSascha Wildner     ACPI_OPERAND_OBJECT     *ObjDesc,
13280d02842fSSascha Wildner     UINT32                  Flags)
13290d02842fSSascha Wildner {
13300d02842fSSascha Wildner     ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
13310d02842fSSascha Wildner 
13320d02842fSSascha Wildner 
13330d02842fSSascha Wildner     if (!ObjDesc)
13340d02842fSSascha Wildner     {
13350d02842fSSascha Wildner         return_VOID;
13360d02842fSSascha Wildner     }
13370d02842fSSascha Wildner 
13380d02842fSSascha Wildner     if (!Flags)
13390d02842fSSascha Wildner     {
13400d02842fSSascha Wildner         /* Check if debug output enabled */
13410d02842fSSascha Wildner 
13420d02842fSSascha Wildner         if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
13430d02842fSSascha Wildner         {
13440d02842fSSascha Wildner             return_VOID;
13450d02842fSSascha Wildner         }
13460d02842fSSascha Wildner     }
13470d02842fSSascha Wildner 
13480d02842fSSascha Wildner     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
13490d02842fSSascha Wildner     {
13500d02842fSSascha Wildner         AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
13510d02842fSSascha Wildner 
13526a0135c2SSascha Wildner         ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object;
13533c639e0cSSascha Wildner         if (!ObjDesc)
13543c639e0cSSascha Wildner         {
13553c639e0cSSascha Wildner             return_VOID;
13563c639e0cSSascha Wildner         }
13573c639e0cSSascha Wildner 
13583c639e0cSSascha Wildner         AcpiOsPrintf ("\nAttached Object %p", ObjDesc);
13593c639e0cSSascha Wildner         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
13603c639e0cSSascha Wildner         {
13613c639e0cSSascha Wildner             AcpiOsPrintf (" - Namespace Node");
13623c639e0cSSascha Wildner         }
13633c639e0cSSascha Wildner 
13643c639e0cSSascha Wildner         AcpiOsPrintf (":\n");
13656a0135c2SSascha Wildner         goto DumpObject;
13660d02842fSSascha Wildner     }
13670d02842fSSascha Wildner 
13680d02842fSSascha Wildner     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
13690d02842fSSascha Wildner     {
13700d02842fSSascha Wildner         AcpiOsPrintf (
13716a0135c2SSascha Wildner             "%p is not an ACPI operand object: [%s]\n",
13720d02842fSSascha Wildner             ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
13730d02842fSSascha Wildner         return_VOID;
13740d02842fSSascha Wildner     }
13750d02842fSSascha Wildner 
13766a0135c2SSascha Wildner     /* Validate the object type */
13776a0135c2SSascha Wildner 
13786a0135c2SSascha Wildner     if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
13790d02842fSSascha Wildner     {
13806a0135c2SSascha Wildner         AcpiOsPrintf ("Not a known object type: %2.2X\n",
13816a0135c2SSascha Wildner             ObjDesc->Common.Type);
13820d02842fSSascha Wildner         return_VOID;
13830d02842fSSascha Wildner     }
13840d02842fSSascha Wildner 
13856a0135c2SSascha Wildner 
13866a0135c2SSascha Wildner DumpObject:
13876a0135c2SSascha Wildner 
13883c639e0cSSascha Wildner     if (!ObjDesc)
13893c639e0cSSascha Wildner     {
13903c639e0cSSascha Wildner         return_VOID;
13913c639e0cSSascha Wildner     }
13923c639e0cSSascha Wildner 
13930d02842fSSascha Wildner     /* Common Fields */
13940d02842fSSascha Wildner 
13950d02842fSSascha Wildner     AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
13960d02842fSSascha Wildner 
13970d02842fSSascha Wildner     /* Object-specific fields */
13980d02842fSSascha Wildner 
13990d02842fSSascha Wildner     AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
14006a0135c2SSascha Wildner 
14016a0135c2SSascha Wildner     if (ObjDesc->Common.Type == ACPI_TYPE_REGION)
14026a0135c2SSascha Wildner     {
14036a0135c2SSascha Wildner         ObjDesc = ObjDesc->Common.NextObject;
14046a0135c2SSascha Wildner         if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
14056a0135c2SSascha Wildner         {
1406820c5b08SSascha Wildner             AcpiOsPrintf (
1407820c5b08SSascha Wildner                 "Secondary object is not a known object type: %2.2X\n",
14086a0135c2SSascha Wildner                 ObjDesc->Common.Type);
14096a0135c2SSascha Wildner 
14106a0135c2SSascha Wildner             return_VOID;
14116a0135c2SSascha Wildner         }
14126a0135c2SSascha Wildner 
14136a0135c2SSascha Wildner         AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc);
14146a0135c2SSascha Wildner         AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
14156a0135c2SSascha Wildner     }
14166a0135c2SSascha Wildner 
14170d02842fSSascha Wildner     return_VOID;
14180d02842fSSascha Wildner }
14190d02842fSSascha Wildner 
14200d02842fSSascha Wildner #endif
1421