xref: /titanic_52/usr/src/uts/intel/io/acpica/executer/exdump.c (revision 385cc6b4ad1792caef3f84eb61eed3f27085801f)
1db2bae30SDana Myers /******************************************************************************
2db2bae30SDana Myers  *
3db2bae30SDana Myers  * Module Name: exdump - Interpreter debug output routines
4db2bae30SDana Myers  *
5db2bae30SDana Myers  *****************************************************************************/
6db2bae30SDana Myers 
726f3cdf0SGordon Ross /*
8*385cc6b4SJerry Jelinek  * Copyright (C) 2000 - 2016, Intel Corp.
9db2bae30SDana Myers  * All rights reserved.
10db2bae30SDana Myers  *
1126f3cdf0SGordon Ross  * Redistribution and use in source and binary forms, with or without
1226f3cdf0SGordon Ross  * modification, are permitted provided that the following conditions
1326f3cdf0SGordon Ross  * are met:
1426f3cdf0SGordon Ross  * 1. Redistributions of source code must retain the above copyright
1526f3cdf0SGordon Ross  *    notice, this list of conditions, and the following disclaimer,
1626f3cdf0SGordon Ross  *    without modification.
1726f3cdf0SGordon Ross  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1826f3cdf0SGordon Ross  *    substantially similar to the "NO WARRANTY" disclaimer below
1926f3cdf0SGordon Ross  *    ("Disclaimer") and any redistribution must be conditioned upon
2026f3cdf0SGordon Ross  *    including a substantially similar Disclaimer requirement for further
2126f3cdf0SGordon Ross  *    binary redistribution.
2226f3cdf0SGordon Ross  * 3. Neither the names of the above-listed copyright holders nor the names
2326f3cdf0SGordon Ross  *    of any contributors may be used to endorse or promote products derived
2426f3cdf0SGordon Ross  *    from this software without specific prior written permission.
25db2bae30SDana Myers  *
2626f3cdf0SGordon Ross  * Alternatively, this software may be distributed under the terms of the
2726f3cdf0SGordon Ross  * GNU General Public License ("GPL") version 2 as published by the Free
2826f3cdf0SGordon Ross  * Software Foundation.
29db2bae30SDana Myers  *
3026f3cdf0SGordon Ross  * NO WARRANTY
3126f3cdf0SGordon Ross  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
3226f3cdf0SGordon Ross  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3326f3cdf0SGordon Ross  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
3426f3cdf0SGordon Ross  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3526f3cdf0SGordon Ross  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3626f3cdf0SGordon Ross  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3726f3cdf0SGordon Ross  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3826f3cdf0SGordon Ross  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3926f3cdf0SGordon Ross  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
4026f3cdf0SGordon Ross  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
4126f3cdf0SGordon Ross  * POSSIBILITY OF SUCH DAMAGES.
4226f3cdf0SGordon Ross  */
43db2bae30SDana Myers 
44db2bae30SDana Myers #include "acpi.h"
45aa2aa9a6SDana Myers #include "accommon.h"
46db2bae30SDana Myers #include "acinterp.h"
47db2bae30SDana Myers #include "amlcode.h"
48db2bae30SDana Myers #include "acnamesp.h"
49db2bae30SDana Myers 
50db2bae30SDana Myers 
51db2bae30SDana Myers #define _COMPONENT          ACPI_EXECUTER
52db2bae30SDana Myers         ACPI_MODULE_NAME    ("exdump")
53db2bae30SDana Myers 
54db2bae30SDana Myers /*
55db2bae30SDana Myers  * The following routines are used for debug output only
56db2bae30SDana Myers  */
57db2bae30SDana Myers #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
58db2bae30SDana Myers 
59db2bae30SDana Myers /* Local prototypes */
60db2bae30SDana Myers 
61db2bae30SDana Myers static void
62db2bae30SDana Myers AcpiExOutString (
63*385cc6b4SJerry Jelinek     const char              *Title,
64*385cc6b4SJerry Jelinek     const char              *Value);
65db2bae30SDana Myers 
66db2bae30SDana Myers static void
67db2bae30SDana Myers AcpiExOutPointer (
68*385cc6b4SJerry Jelinek     const char              *Title,
69*385cc6b4SJerry Jelinek     const void              *Value);
70db2bae30SDana Myers 
71db2bae30SDana Myers static void
72db2bae30SDana Myers AcpiExDumpObject (
73db2bae30SDana Myers     ACPI_OPERAND_OBJECT     *ObjDesc,
74db2bae30SDana Myers     ACPI_EXDUMP_INFO        *Info);
75db2bae30SDana Myers 
76db2bae30SDana Myers static void
77db2bae30SDana Myers AcpiExDumpReferenceObj (
78db2bae30SDana Myers     ACPI_OPERAND_OBJECT     *ObjDesc);
79db2bae30SDana Myers 
80db2bae30SDana Myers static void
81db2bae30SDana Myers AcpiExDumpPackageObj (
82db2bae30SDana Myers     ACPI_OPERAND_OBJECT     *ObjDesc,
83db2bae30SDana Myers     UINT32                  Level,
84db2bae30SDana Myers     UINT32                  Index);
85db2bae30SDana Myers 
86db2bae30SDana Myers 
87db2bae30SDana Myers /*******************************************************************************
88db2bae30SDana Myers  *
89db2bae30SDana Myers  * Object Descriptor info tables
90db2bae30SDana Myers  *
91db2bae30SDana Myers  * Note: The first table entry must be an INIT opcode and must contain
92db2bae30SDana Myers  * the table length (number of table entries)
93db2bae30SDana Myers  *
94db2bae30SDana Myers  ******************************************************************************/
95db2bae30SDana Myers 
96db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpInteger[2] =
97db2bae30SDana Myers {
98db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger),        NULL},
99db2bae30SDana Myers     {ACPI_EXD_UINT64,   ACPI_EXD_OFFSET (Integer.Value),                "Value"}
100db2bae30SDana Myers };
101db2bae30SDana Myers 
102db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpString[4] =
103db2bae30SDana Myers {
104db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpString),         NULL},
105db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (String.Length),                "Length"},
106db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (String.Pointer),               "Pointer"},
107db2bae30SDana Myers     {ACPI_EXD_STRING,   0,                                              NULL}
108db2bae30SDana Myers };
109db2bae30SDana Myers 
110db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpBuffer[5] =
111db2bae30SDana Myers {
112db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer),         NULL},
113db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Buffer.Length),                "Length"},
114db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Pointer),               "Pointer"},
115*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
116db2bae30SDana Myers     {ACPI_EXD_BUFFER,   0,                                              NULL}
117db2bae30SDana Myers };
118db2bae30SDana Myers 
119*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpPackage[6] =
120db2bae30SDana Myers {
121db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage),        NULL},
122*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Package.Node),                 "Parent Node"},
123db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Package.Flags),                "Flags"},
124db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Package.Count),                "Elements"},
125db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Package.Elements),             "Element List"},
126db2bae30SDana Myers     {ACPI_EXD_PACKAGE,  0,                                              NULL}
127db2bae30SDana Myers };
128db2bae30SDana Myers 
129db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
130db2bae30SDana Myers {
131db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
132*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[0]),         "System Notify"},
133*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[1]),         "Device Notify"},
134*385cc6b4SJerry Jelinek     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler),               "Handler"}
135db2bae30SDana Myers };
136db2bae30SDana Myers 
137db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
138db2bae30SDana Myers {
139db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent),          NULL},
140db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Event.OsSemaphore),            "OsSemaphore"}
141db2bae30SDana Myers };
142db2bae30SDana Myers 
143aa2aa9a6SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpMethod[9] =
144db2bae30SDana Myers {
145db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod),         NULL},
14626f3cdf0SGordon Ross     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.InfoFlags),             "Info Flags"},
147aa2aa9a6SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ParamCount),            "Parameter Count"},
148db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.SyncLevel),             "Sync Level"},
149db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.Mutex),                 "Mutex"},
150db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.OwnerId),               "Owner Id"},
151db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ThreadCount),           "Thread Count"},
152db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Method.AmlLength),             "Aml Length"},
153db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.AmlStart),              "Aml Start"}
154db2bae30SDana Myers };
155db2bae30SDana Myers 
156*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpMutex[6] =
157db2bae30SDana Myers {
158db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex),          NULL},
159db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.SyncLevel),              "Sync Level"},
160*385cc6b4SJerry Jelinek     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel),      "Original Sync Level"},
161db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OwnerThread),            "Owner Thread"},
162db2bae30SDana Myers     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Mutex.AcquisitionDepth),       "Acquire Depth"},
163db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OsMutex),                "OsMutex"}
164db2bae30SDana Myers };
165db2bae30SDana Myers 
166*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpRegion[8] =
167db2bae30SDana Myers {
168db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion),         NULL},
169db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.SpaceId),               "Space Id"},
170db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.Flags),                 "Flags"},
171*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Region.Node),                  "Parent Node"},
172db2bae30SDana Myers     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
173db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
174*385cc6b4SJerry Jelinek     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
175db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
176db2bae30SDana Myers };
177db2bae30SDana Myers 
178*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpPower[6] =
179db2bae30SDana Myers {
180db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
181db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
182db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
183*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[0]),  "System Notify"},
184*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[1]),  "Device Notify"},
185*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.Handler),        "Handler"}
186db2bae30SDana Myers };
187db2bae30SDana Myers 
188db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
189db2bae30SDana Myers {
190db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor),      NULL},
191db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
192db2bae30SDana Myers     {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
193db2bae30SDana Myers     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
194*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[0]),      "System Notify"},
195*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[1]),      "Device Notify"},
196db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
197db2bae30SDana Myers };
198db2bae30SDana Myers 
199db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
200db2bae30SDana Myers {
201db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
202*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]),    "System Notify"},
203*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]),    "Device Notify"},
204db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
205db2bae30SDana Myers };
206db2bae30SDana Myers 
207db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
208db2bae30SDana Myers {
209db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField),    NULL},
210db2bae30SDana Myers     {ACPI_EXD_FIELD,    0,                                              NULL},
211db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
212db2bae30SDana Myers };
213db2bae30SDana Myers 
214*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpRegionField[5] =
215db2bae30SDana Myers {
216db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
217db2bae30SDana Myers     {ACPI_EXD_FIELD,    0,                                              NULL},
218*385cc6b4SJerry Jelinek     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Field.AccessLength),           "AccessLength"},
219*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"},
220*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.ResourceBuffer),         "ResourceBuffer"}
221db2bae30SDana Myers };
222db2bae30SDana Myers 
223db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
224db2bae30SDana Myers {
225db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
226db2bae30SDana Myers     {ACPI_EXD_FIELD,    0,                                              NULL},
227db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (BankField.Value),              "Value"},
228db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.RegionObj),          "Region Object"},
229db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.BankObj),            "Bank Object"}
230db2bae30SDana Myers };
231db2bae30SDana Myers 
232db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
233db2bae30SDana Myers {
234db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
235db2bae30SDana Myers     {ACPI_EXD_FIELD,    0,                                              NULL},
236db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (IndexField.Value),             "Value"},
237db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.IndexObj),          "Index Object"},
238db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
239db2bae30SDana Myers };
240db2bae30SDana Myers 
241*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpReference[9] =
242db2bae30SDana Myers {
243db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpReference),       NULL},
244db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.Class),              "Class"},
245db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.TargetType),         "Target Type"},
246db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Reference.Value),              "Value"},
247db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
248*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Reference.Node),               "Node"},
249db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
250*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.IndexPointer),       "Index Pointer"},
251db2bae30SDana Myers     {ACPI_EXD_REFERENCE,0,                                              NULL}
252db2bae30SDana Myers };
253db2bae30SDana Myers 
254db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
255db2bae30SDana Myers {
256db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
257db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (AddressSpace.SpaceId),         "Space Id"},
258*385cc6b4SJerry Jelinek     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
259*385cc6b4SJerry Jelinek     {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
260*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
261db2bae30SDana Myers     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
262db2bae30SDana Myers };
263db2bae30SDana Myers 
264*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpNotify[7] =
265db2bae30SDana Myers {
266db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
267*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
268*385cc6b4SJerry Jelinek     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Notify.HandlerType),           "Handler Type"},
269*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Handler),               "Handler"},
270*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"},
271*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[0]),               "Next System Notify"},
272*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[1]),               "Next Device Notify"}
273db2bae30SDana Myers };
274db2bae30SDana Myers 
275*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpExtra[6] =
276*385cc6b4SJerry Jelinek {
277*385cc6b4SJerry Jelinek     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra),          NULL},
278*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.Method_REG),             "_REG Method"},
279*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Extra.ScopeNode),              "Scope Node"},
280*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.RegionContext),          "Region Context"},
281*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.AmlStart),               "Aml Start"},
282*385cc6b4SJerry Jelinek     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Extra.AmlLength),              "Aml Length"}
283*385cc6b4SJerry Jelinek };
284*385cc6b4SJerry Jelinek 
285*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpData[3] =
286*385cc6b4SJerry Jelinek {
287*385cc6b4SJerry Jelinek     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpData),           NULL},
288*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Handler),                 "Handler"},
289*385cc6b4SJerry Jelinek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Pointer),                 "Raw Data"}
290*385cc6b4SJerry Jelinek };
291db2bae30SDana Myers 
292db2bae30SDana Myers /* Miscellaneous tables */
293db2bae30SDana Myers 
294*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpCommon[5] =
295db2bae30SDana Myers {
296db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon),         NULL},
297db2bae30SDana Myers     {ACPI_EXD_TYPE ,    0,                                              NULL},
298db2bae30SDana Myers     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Common.ReferenceCount),        "Reference Count"},
299*385cc6b4SJerry Jelinek     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"},
300*385cc6b4SJerry Jelinek     {ACPI_EXD_LIST,     ACPI_EXD_OFFSET (Common.NextObject),            "Object List"}
301db2bae30SDana Myers };
302db2bae30SDana Myers 
303db2bae30SDana Myers static ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
304db2bae30SDana Myers {
305db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon),    NULL},
306db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.FieldFlags),       "Field Flags"},
307db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.AccessByteWidth),  "Access Byte Width"},
308db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
309db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
310db2bae30SDana Myers     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
311*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
312db2bae30SDana Myers };
313db2bae30SDana Myers 
314*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO     AcpiExDumpNode[7] =
315db2bae30SDana Myers {
316db2bae30SDana Myers     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
317db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
318db2bae30SDana Myers     {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
319*385cc6b4SJerry Jelinek     {ACPI_EXD_LIST,     ACPI_EXD_NSOFFSET (Object),                     "Object List"},
320*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Parent),                     "Parent"},
321*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Child),                      "Child"},
322*385cc6b4SJerry Jelinek     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Peer),                       "Peer"}
323db2bae30SDana Myers };
324db2bae30SDana Myers 
325db2bae30SDana Myers 
326db2bae30SDana Myers /* Dispatch table, indexed by object type */
327db2bae30SDana Myers 
328db2bae30SDana Myers static ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
329db2bae30SDana Myers {
330db2bae30SDana Myers     NULL,
331db2bae30SDana Myers     AcpiExDumpInteger,
332db2bae30SDana Myers     AcpiExDumpString,
333db2bae30SDana Myers     AcpiExDumpBuffer,
334db2bae30SDana Myers     AcpiExDumpPackage,
335db2bae30SDana Myers     NULL,
336db2bae30SDana Myers     AcpiExDumpDevice,
337db2bae30SDana Myers     AcpiExDumpEvent,
338db2bae30SDana Myers     AcpiExDumpMethod,
339db2bae30SDana Myers     AcpiExDumpMutex,
340db2bae30SDana Myers     AcpiExDumpRegion,
341db2bae30SDana Myers     AcpiExDumpPower,
342db2bae30SDana Myers     AcpiExDumpProcessor,
343db2bae30SDana Myers     AcpiExDumpThermal,
344db2bae30SDana Myers     AcpiExDumpBufferField,
345db2bae30SDana Myers     NULL,
346db2bae30SDana Myers     NULL,
347db2bae30SDana Myers     AcpiExDumpRegionField,
348db2bae30SDana Myers     AcpiExDumpBankField,
349db2bae30SDana Myers     AcpiExDumpIndexField,
350db2bae30SDana Myers     AcpiExDumpReference,
351db2bae30SDana Myers     NULL,
352db2bae30SDana Myers     NULL,
353db2bae30SDana Myers     AcpiExDumpNotify,
354db2bae30SDana Myers     AcpiExDumpAddressHandler,
355db2bae30SDana Myers     NULL,
356db2bae30SDana Myers     NULL,
357*385cc6b4SJerry Jelinek     NULL,
358*385cc6b4SJerry Jelinek     AcpiExDumpExtra,
359*385cc6b4SJerry Jelinek     AcpiExDumpData
360db2bae30SDana Myers };
361db2bae30SDana Myers 
362db2bae30SDana Myers 
363db2bae30SDana Myers /*******************************************************************************
364db2bae30SDana Myers  *
365db2bae30SDana Myers  * FUNCTION:    AcpiExDumpObject
366db2bae30SDana Myers  *
367db2bae30SDana Myers  * PARAMETERS:  ObjDesc             - Descriptor to dump
368db2bae30SDana Myers  *              Info                - Info table corresponding to this object
369db2bae30SDana Myers  *                                    type
370db2bae30SDana Myers  *
371db2bae30SDana Myers  * RETURN:      None
372db2bae30SDana Myers  *
373db2bae30SDana Myers  * DESCRIPTION: Walk the info table for this object
374db2bae30SDana Myers  *
375db2bae30SDana Myers  ******************************************************************************/
376db2bae30SDana Myers 
377db2bae30SDana Myers static void
378db2bae30SDana Myers AcpiExDumpObject (
379db2bae30SDana Myers     ACPI_OPERAND_OBJECT     *ObjDesc,
380db2bae30SDana Myers     ACPI_EXDUMP_INFO        *Info)
381db2bae30SDana Myers {
382db2bae30SDana Myers     UINT8                   *Target;
383*385cc6b4SJerry Jelinek     const char              *Name;
384db2bae30SDana Myers     UINT8                   Count;
385*385cc6b4SJerry Jelinek     ACPI_OPERAND_OBJECT     *Start;
386*385cc6b4SJerry Jelinek     ACPI_OPERAND_OBJECT     *Data = NULL;
387*385cc6b4SJerry Jelinek     ACPI_OPERAND_OBJECT     *Next;
388*385cc6b4SJerry Jelinek     ACPI_NAMESPACE_NODE     *Node;
389db2bae30SDana Myers 
390db2bae30SDana Myers 
391db2bae30SDana Myers     if (!Info)
392db2bae30SDana Myers     {
393db2bae30SDana Myers         AcpiOsPrintf (
394db2bae30SDana Myers             "ExDumpObject: Display not implemented for object type %s\n",
395db2bae30SDana Myers             AcpiUtGetObjectTypeName (ObjDesc));
396db2bae30SDana Myers         return;
397db2bae30SDana Myers     }
398db2bae30SDana Myers 
399db2bae30SDana Myers     /* First table entry must contain the table length (# of table entries) */
400db2bae30SDana Myers 
401db2bae30SDana Myers     Count = Info->Offset;
402db2bae30SDana Myers 
403db2bae30SDana Myers     while (Count)
404db2bae30SDana Myers     {
405db2bae30SDana Myers         Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
406db2bae30SDana Myers         Name = Info->Name;
407db2bae30SDana Myers 
408db2bae30SDana Myers         switch (Info->Opcode)
409db2bae30SDana Myers         {
410db2bae30SDana Myers         case ACPI_EXD_INIT:
411*385cc6b4SJerry Jelinek 
412db2bae30SDana Myers             break;
413db2bae30SDana Myers 
414db2bae30SDana Myers         case ACPI_EXD_TYPE:
415aa2aa9a6SDana Myers 
416*385cc6b4SJerry Jelinek             AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
417*385cc6b4SJerry Jelinek                 ObjDesc->Common.Type, AcpiUtGetObjectTypeName (ObjDesc));
418db2bae30SDana Myers             break;
419db2bae30SDana Myers 
420db2bae30SDana Myers         case ACPI_EXD_UINT8:
421db2bae30SDana Myers 
422db2bae30SDana Myers             AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
423db2bae30SDana Myers             break;
424db2bae30SDana Myers 
425db2bae30SDana Myers         case ACPI_EXD_UINT16:
426db2bae30SDana Myers 
427db2bae30SDana Myers             AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
428db2bae30SDana Myers             break;
429db2bae30SDana Myers 
430db2bae30SDana Myers         case ACPI_EXD_UINT32:
431db2bae30SDana Myers 
432db2bae30SDana Myers             AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
433db2bae30SDana Myers             break;
434db2bae30SDana Myers 
435db2bae30SDana Myers         case ACPI_EXD_UINT64:
436db2bae30SDana Myers 
437db2bae30SDana Myers             AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
438db2bae30SDana Myers                 ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
439db2bae30SDana Myers             break;
440db2bae30SDana Myers 
441db2bae30SDana Myers         case ACPI_EXD_POINTER:
442db2bae30SDana Myers         case ACPI_EXD_ADDRESS:
443db2bae30SDana Myers 
444db2bae30SDana Myers             AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
445db2bae30SDana Myers             break;
446db2bae30SDana Myers 
447db2bae30SDana Myers         case ACPI_EXD_STRING:
448db2bae30SDana Myers 
449db2bae30SDana Myers             AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
450db2bae30SDana Myers             AcpiOsPrintf ("\n");
451db2bae30SDana Myers             break;
452db2bae30SDana Myers 
453db2bae30SDana Myers         case ACPI_EXD_BUFFER:
454db2bae30SDana Myers 
455*385cc6b4SJerry Jelinek             ACPI_DUMP_BUFFER (
456*385cc6b4SJerry Jelinek                 ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
457db2bae30SDana Myers             break;
458db2bae30SDana Myers 
459db2bae30SDana Myers         case ACPI_EXD_PACKAGE:
460db2bae30SDana Myers 
461db2bae30SDana Myers             /* Dump the package contents */
462db2bae30SDana Myers 
463db2bae30SDana Myers             AcpiOsPrintf ("\nPackage Contents:\n");
464db2bae30SDana Myers             AcpiExDumpPackageObj (ObjDesc, 0, 0);
465db2bae30SDana Myers             break;
466db2bae30SDana Myers 
467db2bae30SDana Myers         case ACPI_EXD_FIELD:
468db2bae30SDana Myers 
469db2bae30SDana Myers             AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
470db2bae30SDana Myers             break;
471db2bae30SDana Myers 
472db2bae30SDana Myers         case ACPI_EXD_REFERENCE:
473db2bae30SDana Myers 
474*385cc6b4SJerry Jelinek             AcpiExOutString ("Class Name", AcpiUtGetReferenceName (ObjDesc));
475db2bae30SDana Myers             AcpiExDumpReferenceObj (ObjDesc);
476db2bae30SDana Myers             break;
477db2bae30SDana Myers 
478*385cc6b4SJerry Jelinek         case ACPI_EXD_LIST:
479*385cc6b4SJerry Jelinek 
480*385cc6b4SJerry Jelinek             Start = *ACPI_CAST_PTR (void *, Target);
481*385cc6b4SJerry Jelinek             Next = Start;
482*385cc6b4SJerry Jelinek 
483*385cc6b4SJerry Jelinek             AcpiOsPrintf ("%20s : %p", Name, Next);
484*385cc6b4SJerry Jelinek             if (Next)
485*385cc6b4SJerry Jelinek             {
486*385cc6b4SJerry Jelinek                 AcpiOsPrintf ("(%s %2.2X)",
487*385cc6b4SJerry Jelinek                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
488*385cc6b4SJerry Jelinek 
489*385cc6b4SJerry Jelinek                 while (Next->Common.NextObject)
490*385cc6b4SJerry Jelinek                 {
491*385cc6b4SJerry Jelinek                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
492*385cc6b4SJerry Jelinek                         !Data)
493*385cc6b4SJerry Jelinek                     {
494*385cc6b4SJerry Jelinek                         Data = Next;
495*385cc6b4SJerry Jelinek                     }
496*385cc6b4SJerry Jelinek 
497*385cc6b4SJerry Jelinek                     Next = Next->Common.NextObject;
498*385cc6b4SJerry Jelinek                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
499*385cc6b4SJerry Jelinek                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
500*385cc6b4SJerry Jelinek 
501*385cc6b4SJerry Jelinek                     if ((Next == Start) || (Next == Data))
502*385cc6b4SJerry Jelinek                     {
503*385cc6b4SJerry Jelinek                         AcpiOsPrintf (
504*385cc6b4SJerry Jelinek                             "\n**** Error: Object list appears to be circular linked");
505*385cc6b4SJerry Jelinek                         break;
506*385cc6b4SJerry Jelinek                     }
507*385cc6b4SJerry Jelinek                 }
508*385cc6b4SJerry Jelinek             }
509*385cc6b4SJerry Jelinek 
510*385cc6b4SJerry Jelinek             AcpiOsPrintf ("\n");
511*385cc6b4SJerry Jelinek             break;
512*385cc6b4SJerry Jelinek 
513*385cc6b4SJerry Jelinek         case ACPI_EXD_HDLR_LIST:
514*385cc6b4SJerry Jelinek 
515*385cc6b4SJerry Jelinek             Start = *ACPI_CAST_PTR (void *, Target);
516*385cc6b4SJerry Jelinek             Next = Start;
517*385cc6b4SJerry Jelinek 
518*385cc6b4SJerry Jelinek             AcpiOsPrintf ("%20s : %p", Name, Next);
519*385cc6b4SJerry Jelinek             if (Next)
520*385cc6b4SJerry Jelinek             {
521*385cc6b4SJerry Jelinek                 AcpiOsPrintf ("(%s %2.2X)",
522*385cc6b4SJerry Jelinek                     AcpiUtGetObjectTypeName (Next),
523*385cc6b4SJerry Jelinek                     Next->AddressSpace.SpaceId);
524*385cc6b4SJerry Jelinek 
525*385cc6b4SJerry Jelinek                 while (Next->AddressSpace.Next)
526*385cc6b4SJerry Jelinek                 {
527*385cc6b4SJerry Jelinek                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
528*385cc6b4SJerry Jelinek                         !Data)
529*385cc6b4SJerry Jelinek                     {
530*385cc6b4SJerry Jelinek                         Data = Next;
531*385cc6b4SJerry Jelinek                     }
532*385cc6b4SJerry Jelinek 
533*385cc6b4SJerry Jelinek                     Next = Next->AddressSpace.Next;
534*385cc6b4SJerry Jelinek                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
535*385cc6b4SJerry Jelinek                         AcpiUtGetObjectTypeName (Next),
536*385cc6b4SJerry Jelinek                         Next->AddressSpace.SpaceId);
537*385cc6b4SJerry Jelinek 
538*385cc6b4SJerry Jelinek                     if ((Next == Start) || (Next == Data))
539*385cc6b4SJerry Jelinek                     {
540*385cc6b4SJerry Jelinek                         AcpiOsPrintf (
541*385cc6b4SJerry Jelinek                             "\n**** Error: Handler list appears to be circular linked");
542*385cc6b4SJerry Jelinek                         break;
543*385cc6b4SJerry Jelinek                     }
544*385cc6b4SJerry Jelinek                 }
545*385cc6b4SJerry Jelinek             }
546*385cc6b4SJerry Jelinek 
547*385cc6b4SJerry Jelinek             AcpiOsPrintf ("\n");
548*385cc6b4SJerry Jelinek             break;
549*385cc6b4SJerry Jelinek 
550*385cc6b4SJerry Jelinek         case ACPI_EXD_RGN_LIST:
551*385cc6b4SJerry Jelinek 
552*385cc6b4SJerry Jelinek             Start = *ACPI_CAST_PTR (void *, Target);
553*385cc6b4SJerry Jelinek             Next = Start;
554*385cc6b4SJerry Jelinek 
555*385cc6b4SJerry Jelinek             AcpiOsPrintf ("%20s : %p", Name, Next);
556*385cc6b4SJerry Jelinek             if (Next)
557*385cc6b4SJerry Jelinek             {
558*385cc6b4SJerry Jelinek                 AcpiOsPrintf ("(%s %2.2X)",
559*385cc6b4SJerry Jelinek                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
560*385cc6b4SJerry Jelinek 
561*385cc6b4SJerry Jelinek                 while (Next->Region.Next)
562*385cc6b4SJerry Jelinek                 {
563*385cc6b4SJerry Jelinek                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
564*385cc6b4SJerry Jelinek                         !Data)
565*385cc6b4SJerry Jelinek                     {
566*385cc6b4SJerry Jelinek                         Data = Next;
567*385cc6b4SJerry Jelinek                     }
568*385cc6b4SJerry Jelinek 
569*385cc6b4SJerry Jelinek                     Next = Next->Region.Next;
570*385cc6b4SJerry Jelinek                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
571*385cc6b4SJerry Jelinek                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
572*385cc6b4SJerry Jelinek 
573*385cc6b4SJerry Jelinek                     if ((Next == Start) || (Next == Data))
574*385cc6b4SJerry Jelinek                     {
575*385cc6b4SJerry Jelinek                         AcpiOsPrintf (
576*385cc6b4SJerry Jelinek                             "\n**** Error: Region list appears to be circular linked");
577*385cc6b4SJerry Jelinek                         break;
578*385cc6b4SJerry Jelinek                     }
579*385cc6b4SJerry Jelinek                 }
580*385cc6b4SJerry Jelinek             }
581*385cc6b4SJerry Jelinek 
582*385cc6b4SJerry Jelinek             AcpiOsPrintf ("\n");
583*385cc6b4SJerry Jelinek             break;
584*385cc6b4SJerry Jelinek 
585*385cc6b4SJerry Jelinek         case ACPI_EXD_NODE:
586*385cc6b4SJerry Jelinek 
587*385cc6b4SJerry Jelinek             Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target);
588*385cc6b4SJerry Jelinek 
589*385cc6b4SJerry Jelinek             AcpiOsPrintf ("%20s : %p", Name, Node);
590*385cc6b4SJerry Jelinek             if (Node)
591*385cc6b4SJerry Jelinek             {
592*385cc6b4SJerry Jelinek                 AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii);
593*385cc6b4SJerry Jelinek             }
594*385cc6b4SJerry Jelinek             AcpiOsPrintf ("\n");
595*385cc6b4SJerry Jelinek             break;
596*385cc6b4SJerry Jelinek 
597db2bae30SDana Myers         default:
598aa2aa9a6SDana Myers 
599aa2aa9a6SDana Myers             AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
600aa2aa9a6SDana Myers                 Info->Opcode);
601db2bae30SDana Myers             return;
602db2bae30SDana Myers         }
603db2bae30SDana Myers 
604db2bae30SDana Myers         Info++;
605db2bae30SDana Myers         Count--;
606db2bae30SDana Myers     }
607db2bae30SDana Myers }
608db2bae30SDana Myers 
609db2bae30SDana Myers 
610db2bae30SDana Myers /*******************************************************************************
611db2bae30SDana Myers  *
612db2bae30SDana Myers  * FUNCTION:    AcpiExDumpOperand
613db2bae30SDana Myers  *
614db2bae30SDana Myers  * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped
615db2bae30SDana Myers  *              Depth           - Current nesting depth
616db2bae30SDana Myers  *
617db2bae30SDana Myers  * RETURN:      None
618db2bae30SDana Myers  *
619db2bae30SDana Myers  * DESCRIPTION: Dump an operand object
620db2bae30SDana Myers  *
621db2bae30SDana Myers  ******************************************************************************/
622db2bae30SDana Myers 
623db2bae30SDana Myers void
624db2bae30SDana Myers AcpiExDumpOperand (
625db2bae30SDana Myers     ACPI_OPERAND_OBJECT     *ObjDesc,
626db2bae30SDana Myers     UINT32                  Depth)
627db2bae30SDana Myers {
628db2bae30SDana Myers     UINT32                  Length;
629db2bae30SDana Myers     UINT32                  Index;
630db2bae30SDana Myers 
631db2bae30SDana Myers 
632db2bae30SDana Myers     ACPI_FUNCTION_NAME (ExDumpOperand)
633db2bae30SDana Myers 
634db2bae30SDana Myers 
635*385cc6b4SJerry Jelinek     /* Check if debug output enabled */
636*385cc6b4SJerry Jelinek 
637*385cc6b4SJerry Jelinek     if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT))
638db2bae30SDana Myers     {
639db2bae30SDana Myers         return;
640db2bae30SDana Myers     }
641db2bae30SDana Myers 
642db2bae30SDana Myers     if (!ObjDesc)
643db2bae30SDana Myers     {
644db2bae30SDana Myers         /* This could be a null element of a package */
645db2bae30SDana Myers 
646db2bae30SDana Myers         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
647db2bae30SDana Myers         return;
648db2bae30SDana Myers     }
649db2bae30SDana Myers 
650db2bae30SDana Myers     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
651db2bae30SDana Myers     {
652db2bae30SDana Myers         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
653db2bae30SDana Myers         ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
654db2bae30SDana Myers         return;
655db2bae30SDana Myers     }
656db2bae30SDana Myers 
657db2bae30SDana Myers     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
658db2bae30SDana Myers     {
659db2bae30SDana Myers         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
660db2bae30SDana Myers             "%p is not a node or operand object: [%s]\n",
661db2bae30SDana Myers             ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
662db2bae30SDana Myers         ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
663db2bae30SDana Myers         return;
664db2bae30SDana Myers     }
665db2bae30SDana Myers 
666db2bae30SDana Myers     /* ObjDesc is a valid object */
667db2bae30SDana Myers 
668db2bae30SDana Myers     if (Depth > 0)
669db2bae30SDana Myers     {
670db2bae30SDana Myers         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
671db2bae30SDana Myers             Depth, " ", Depth, ObjDesc));
672db2bae30SDana Myers     }
673db2bae30SDana Myers     else
674db2bae30SDana Myers     {
675db2bae30SDana Myers         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
676db2bae30SDana Myers     }
677db2bae30SDana Myers 
678db2bae30SDana Myers     /* Decode object type */
679db2bae30SDana Myers 
680aa2aa9a6SDana Myers     switch (ObjDesc->Common.Type)
681db2bae30SDana Myers     {
682db2bae30SDana Myers     case ACPI_TYPE_LOCAL_REFERENCE:
683db2bae30SDana Myers 
684*385cc6b4SJerry Jelinek         AcpiOsPrintf ("Reference: [%s] ",
685*385cc6b4SJerry Jelinek             AcpiUtGetReferenceName (ObjDesc));
686db2bae30SDana Myers 
687db2bae30SDana Myers         switch (ObjDesc->Reference.Class)
688db2bae30SDana Myers         {
689db2bae30SDana Myers         case ACPI_REFCLASS_DEBUG:
690db2bae30SDana Myers 
691db2bae30SDana Myers             AcpiOsPrintf ("\n");
692db2bae30SDana Myers             break;
693db2bae30SDana Myers 
694db2bae30SDana Myers         case ACPI_REFCLASS_INDEX:
695db2bae30SDana Myers 
696db2bae30SDana Myers             AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
697db2bae30SDana Myers             break;
698db2bae30SDana Myers 
699db2bae30SDana Myers         case ACPI_REFCLASS_TABLE:
700db2bae30SDana Myers 
701db2bae30SDana Myers             AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
702db2bae30SDana Myers             break;
703db2bae30SDana Myers 
704db2bae30SDana Myers         case ACPI_REFCLASS_REFOF:
705db2bae30SDana Myers 
706db2bae30SDana Myers             AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
707db2bae30SDana Myers                 AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
708db2bae30SDana Myers                     ObjDesc->Reference.Object)->Common.Type));
709db2bae30SDana Myers             break;
710db2bae30SDana Myers 
711db2bae30SDana Myers         case ACPI_REFCLASS_NAME:
712db2bae30SDana Myers 
713*385cc6b4SJerry Jelinek             AcpiOsPrintf ("- [%4.4s]\n",
714*385cc6b4SJerry Jelinek                 ObjDesc->Reference.Node->Name.Ascii);
715db2bae30SDana Myers             break;
716db2bae30SDana Myers 
717aa2aa9a6SDana Myers         case ACPI_REFCLASS_ARG:
718aa2aa9a6SDana Myers         case ACPI_REFCLASS_LOCAL:
719aa2aa9a6SDana Myers 
720aa2aa9a6SDana Myers             AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
721aa2aa9a6SDana Myers             break;
722aa2aa9a6SDana Myers 
723db2bae30SDana Myers         default:    /* Unknown reference class */
724db2bae30SDana Myers 
725db2bae30SDana Myers             AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
726db2bae30SDana Myers             break;
727db2bae30SDana Myers         }
728db2bae30SDana Myers         break;
729db2bae30SDana Myers 
730db2bae30SDana Myers     case ACPI_TYPE_BUFFER:
731db2bae30SDana Myers 
732db2bae30SDana Myers         AcpiOsPrintf ("Buffer length %.2X @ %p\n",
733db2bae30SDana Myers             ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
734db2bae30SDana Myers 
735db2bae30SDana Myers         /* Debug only -- dump the buffer contents */
736db2bae30SDana Myers 
737db2bae30SDana Myers         if (ObjDesc->Buffer.Pointer)
738db2bae30SDana Myers         {
739db2bae30SDana Myers             Length = ObjDesc->Buffer.Length;
740db2bae30SDana Myers             if (Length > 128)
741db2bae30SDana Myers             {
742db2bae30SDana Myers                 Length = 128;
743db2bae30SDana Myers             }
744db2bae30SDana Myers 
745*385cc6b4SJerry Jelinek             AcpiOsPrintf (
746*385cc6b4SJerry Jelinek                 "Buffer Contents: (displaying length 0x%.2X)\n", Length);
747db2bae30SDana Myers             ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
748db2bae30SDana Myers         }
749db2bae30SDana Myers         break;
750db2bae30SDana Myers 
751db2bae30SDana Myers     case ACPI_TYPE_INTEGER:
752db2bae30SDana Myers 
753db2bae30SDana Myers         AcpiOsPrintf ("Integer %8.8X%8.8X\n",
754db2bae30SDana Myers             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
755db2bae30SDana Myers         break;
756db2bae30SDana Myers 
757db2bae30SDana Myers     case ACPI_TYPE_PACKAGE:
758db2bae30SDana Myers 
759db2bae30SDana Myers         AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
760db2bae30SDana Myers             ObjDesc->Package.Count, ObjDesc->Package.Elements);
761db2bae30SDana Myers 
762db2bae30SDana Myers         /*
763db2bae30SDana Myers          * If elements exist, package element pointer is valid,
764db2bae30SDana Myers          * and debug_level exceeds 1, dump package's elements.
765db2bae30SDana Myers          */
766db2bae30SDana Myers         if (ObjDesc->Package.Count &&
767db2bae30SDana Myers             ObjDesc->Package.Elements &&
768db2bae30SDana Myers             AcpiDbgLevel > 1)
769db2bae30SDana Myers         {
770db2bae30SDana Myers             for (Index = 0; Index < ObjDesc->Package.Count; Index++)
771db2bae30SDana Myers             {
772*385cc6b4SJerry Jelinek                 AcpiExDumpOperand (
773*385cc6b4SJerry Jelinek                     ObjDesc->Package.Elements[Index], Depth + 1);
774db2bae30SDana Myers             }
775db2bae30SDana Myers         }
776db2bae30SDana Myers         break;
777db2bae30SDana Myers 
778db2bae30SDana Myers     case ACPI_TYPE_REGION:
779db2bae30SDana Myers 
780db2bae30SDana Myers         AcpiOsPrintf ("Region %s (%X)",
781db2bae30SDana Myers             AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
782db2bae30SDana Myers             ObjDesc->Region.SpaceId);
783db2bae30SDana Myers 
784db2bae30SDana Myers         /*
785db2bae30SDana Myers          * If the address and length have not been evaluated,
786db2bae30SDana Myers          * don't print them.
787db2bae30SDana Myers          */
788db2bae30SDana Myers         if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
789db2bae30SDana Myers         {
790db2bae30SDana Myers             AcpiOsPrintf ("\n");
791db2bae30SDana Myers         }
792db2bae30SDana Myers         else
793db2bae30SDana Myers         {
794db2bae30SDana Myers             AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
795*385cc6b4SJerry Jelinek                 ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
796db2bae30SDana Myers                 ObjDesc->Region.Length);
797db2bae30SDana Myers         }
798db2bae30SDana Myers         break;
799db2bae30SDana Myers 
800db2bae30SDana Myers     case ACPI_TYPE_STRING:
801db2bae30SDana Myers 
802db2bae30SDana Myers         AcpiOsPrintf ("String length %X @ %p ",
803db2bae30SDana Myers             ObjDesc->String.Length,
804db2bae30SDana Myers             ObjDesc->String.Pointer);
805db2bae30SDana Myers 
806db2bae30SDana Myers         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
807db2bae30SDana Myers         AcpiOsPrintf ("\n");
808db2bae30SDana Myers         break;
809db2bae30SDana Myers 
810db2bae30SDana Myers     case ACPI_TYPE_LOCAL_BANK_FIELD:
811db2bae30SDana Myers 
812db2bae30SDana Myers         AcpiOsPrintf ("BankField\n");
813db2bae30SDana Myers         break;
814db2bae30SDana Myers 
815db2bae30SDana Myers     case ACPI_TYPE_LOCAL_REGION_FIELD:
816db2bae30SDana Myers 
817aa2aa9a6SDana Myers         AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
818aa2aa9a6SDana Myers             "byte=%X bit=%X of below:\n",
819db2bae30SDana Myers             ObjDesc->Field.BitLength,
820db2bae30SDana Myers             ObjDesc->Field.AccessByteWidth,
821db2bae30SDana Myers             ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
822db2bae30SDana Myers             ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
823db2bae30SDana Myers             ObjDesc->Field.BaseByteOffset,
824db2bae30SDana Myers             ObjDesc->Field.StartFieldBitOffset);
825db2bae30SDana Myers 
826db2bae30SDana Myers         AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth + 1);
827db2bae30SDana Myers         break;
828db2bae30SDana Myers 
829db2bae30SDana Myers     case ACPI_TYPE_LOCAL_INDEX_FIELD:
830db2bae30SDana Myers 
831db2bae30SDana Myers         AcpiOsPrintf ("IndexField\n");
832db2bae30SDana Myers         break;
833db2bae30SDana Myers 
834db2bae30SDana Myers     case ACPI_TYPE_BUFFER_FIELD:
835db2bae30SDana Myers 
836aa2aa9a6SDana Myers         AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
837db2bae30SDana Myers             ObjDesc->BufferField.BitLength,
838db2bae30SDana Myers             ObjDesc->BufferField.BaseByteOffset,
839db2bae30SDana Myers             ObjDesc->BufferField.StartFieldBitOffset);
840db2bae30SDana Myers 
841db2bae30SDana Myers         if (!ObjDesc->BufferField.BufferObj)
842db2bae30SDana Myers         {
843db2bae30SDana Myers             ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
844db2bae30SDana Myers         }
845aa2aa9a6SDana Myers         else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
846db2bae30SDana Myers             ACPI_TYPE_BUFFER)
847db2bae30SDana Myers         {
848db2bae30SDana Myers             AcpiOsPrintf ("*not a Buffer*\n");
849db2bae30SDana Myers         }
850db2bae30SDana Myers         else
851db2bae30SDana Myers         {
852db2bae30SDana Myers             AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth + 1);
853db2bae30SDana Myers         }
854db2bae30SDana Myers         break;
855db2bae30SDana Myers 
856db2bae30SDana Myers     case ACPI_TYPE_EVENT:
857db2bae30SDana Myers 
858db2bae30SDana Myers         AcpiOsPrintf ("Event\n");
859db2bae30SDana Myers         break;
860db2bae30SDana Myers 
861db2bae30SDana Myers     case ACPI_TYPE_METHOD:
862db2bae30SDana Myers 
863db2bae30SDana Myers         AcpiOsPrintf ("Method(%X) @ %p:%X\n",
864db2bae30SDana Myers             ObjDesc->Method.ParamCount,
865db2bae30SDana Myers             ObjDesc->Method.AmlStart,
866db2bae30SDana Myers             ObjDesc->Method.AmlLength);
867db2bae30SDana Myers         break;
868db2bae30SDana Myers 
869db2bae30SDana Myers     case ACPI_TYPE_MUTEX:
870db2bae30SDana Myers 
871db2bae30SDana Myers         AcpiOsPrintf ("Mutex\n");
872db2bae30SDana Myers         break;
873db2bae30SDana Myers 
874db2bae30SDana Myers     case ACPI_TYPE_DEVICE:
875db2bae30SDana Myers 
876db2bae30SDana Myers         AcpiOsPrintf ("Device\n");
877db2bae30SDana Myers         break;
878db2bae30SDana Myers 
879db2bae30SDana Myers     case ACPI_TYPE_POWER:
880db2bae30SDana Myers 
881db2bae30SDana Myers         AcpiOsPrintf ("Power\n");
882db2bae30SDana Myers         break;
883db2bae30SDana Myers 
884db2bae30SDana Myers     case ACPI_TYPE_PROCESSOR:
885db2bae30SDana Myers 
886db2bae30SDana Myers         AcpiOsPrintf ("Processor\n");
887db2bae30SDana Myers         break;
888db2bae30SDana Myers 
889db2bae30SDana Myers     case ACPI_TYPE_THERMAL:
890db2bae30SDana Myers 
891db2bae30SDana Myers         AcpiOsPrintf ("Thermal\n");
892db2bae30SDana Myers         break;
893db2bae30SDana Myers 
894db2bae30SDana Myers     default:
895*385cc6b4SJerry Jelinek 
896db2bae30SDana Myers         /* Unknown Type */
897db2bae30SDana Myers 
898aa2aa9a6SDana Myers         AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
899db2bae30SDana Myers         break;
900db2bae30SDana Myers     }
901db2bae30SDana Myers 
902db2bae30SDana Myers     return;
903db2bae30SDana Myers }
904db2bae30SDana Myers 
905db2bae30SDana Myers 
906db2bae30SDana Myers /*******************************************************************************
907db2bae30SDana Myers  *
908db2bae30SDana Myers  * FUNCTION:    AcpiExDumpOperands
909db2bae30SDana Myers  *
910db2bae30SDana Myers  * PARAMETERS:  Operands            - A list of Operand objects
911db2bae30SDana Myers  *              OpcodeName          - AML opcode name
912db2bae30SDana Myers  *              NumOperands         - Operand count for this opcode
913db2bae30SDana Myers  *
914db2bae30SDana Myers  * DESCRIPTION: Dump the operands associated with the opcode
915db2bae30SDana Myers  *
916db2bae30SDana Myers  ******************************************************************************/
917db2bae30SDana Myers 
918db2bae30SDana Myers void
919db2bae30SDana Myers AcpiExDumpOperands (
920db2bae30SDana Myers     ACPI_OPERAND_OBJECT     **Operands,
921db2bae30SDana Myers     const char              *OpcodeName,
922db2bae30SDana Myers     UINT32                  NumOperands)
923db2bae30SDana Myers {
924db2bae30SDana Myers     ACPI_FUNCTION_NAME (ExDumpOperands);
925db2bae30SDana Myers 
926db2bae30SDana Myers 
927db2bae30SDana Myers     if (!OpcodeName)
928db2bae30SDana Myers     {
929db2bae30SDana Myers         OpcodeName = "UNKNOWN";
930db2bae30SDana Myers     }
931db2bae30SDana Myers 
932db2bae30SDana Myers     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
93326f3cdf0SGordon Ross         "**** Start operand dump for opcode [%s], %u operands\n",
934db2bae30SDana Myers         OpcodeName, NumOperands));
935db2bae30SDana Myers 
936db2bae30SDana Myers     if (NumOperands == 0)
937db2bae30SDana Myers     {
938db2bae30SDana Myers         NumOperands = 1;
939db2bae30SDana Myers     }
940db2bae30SDana Myers 
941db2bae30SDana Myers     /* Dump the individual operands */
942db2bae30SDana Myers 
943db2bae30SDana Myers     while (NumOperands)
944db2bae30SDana Myers     {
945db2bae30SDana Myers         AcpiExDumpOperand (*Operands, 0);
946db2bae30SDana Myers         Operands++;
947db2bae30SDana Myers         NumOperands--;
948db2bae30SDana Myers     }
949db2bae30SDana Myers 
950db2bae30SDana Myers     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
951db2bae30SDana Myers         "**** End operand dump for [%s]\n", OpcodeName));
952db2bae30SDana Myers     return;
953db2bae30SDana Myers }
954db2bae30SDana Myers 
955db2bae30SDana Myers 
956db2bae30SDana Myers /*******************************************************************************
957db2bae30SDana Myers  *
958db2bae30SDana Myers  * FUNCTION:    AcpiExOut* functions
959db2bae30SDana Myers  *
960db2bae30SDana Myers  * PARAMETERS:  Title               - Descriptive text
961db2bae30SDana Myers  *              Value               - Value to be displayed
962db2bae30SDana Myers  *
963db2bae30SDana Myers  * DESCRIPTION: Object dump output formatting functions. These functions
964db2bae30SDana Myers  *              reduce the number of format strings required and keeps them
965db2bae30SDana Myers  *              all in one place for easy modification.
966db2bae30SDana Myers  *
967db2bae30SDana Myers  ******************************************************************************/
968db2bae30SDana Myers 
969db2bae30SDana Myers static void
970db2bae30SDana Myers AcpiExOutString (
971*385cc6b4SJerry Jelinek     const char              *Title,
972*385cc6b4SJerry Jelinek     const char              *Value)
973db2bae30SDana Myers {
974db2bae30SDana Myers     AcpiOsPrintf ("%20s : %s\n", Title, Value);
975db2bae30SDana Myers }
976db2bae30SDana Myers 
977db2bae30SDana Myers static void
978db2bae30SDana Myers AcpiExOutPointer (
979*385cc6b4SJerry Jelinek     const char              *Title,
980*385cc6b4SJerry Jelinek     const void              *Value)
981db2bae30SDana Myers {
982db2bae30SDana Myers     AcpiOsPrintf ("%20s : %p\n", Title, Value);
983db2bae30SDana Myers }
984db2bae30SDana Myers 
985db2bae30SDana Myers 
986db2bae30SDana Myers /*******************************************************************************
987db2bae30SDana Myers  *
988db2bae30SDana Myers  * FUNCTION:    AcpiExDumpNamespaceNode
989db2bae30SDana Myers  *
990db2bae30SDana Myers  * PARAMETERS:  Node                - Descriptor to dump
991db2bae30SDana Myers  *              Flags               - Force display if TRUE
992db2bae30SDana Myers  *
993db2bae30SDana Myers  * DESCRIPTION: Dumps the members of the given.Node
994db2bae30SDana Myers  *
995db2bae30SDana Myers  ******************************************************************************/
996db2bae30SDana Myers 
997db2bae30SDana Myers void
998db2bae30SDana Myers AcpiExDumpNamespaceNode (
999db2bae30SDana Myers     ACPI_NAMESPACE_NODE     *Node,
1000db2bae30SDana Myers     UINT32                  Flags)
1001db2bae30SDana Myers {
1002db2bae30SDana Myers 
1003db2bae30SDana Myers     ACPI_FUNCTION_ENTRY ();
1004db2bae30SDana Myers 
1005db2bae30SDana Myers 
1006db2bae30SDana Myers     if (!Flags)
1007db2bae30SDana Myers     {
1008*385cc6b4SJerry Jelinek         /* Check if debug output enabled */
1009*385cc6b4SJerry Jelinek 
1010*385cc6b4SJerry Jelinek         if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
1011db2bae30SDana Myers         {
1012db2bae30SDana Myers             return;
1013db2bae30SDana Myers         }
1014db2bae30SDana Myers     }
1015db2bae30SDana Myers 
1016db2bae30SDana Myers     AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
1017*385cc6b4SJerry Jelinek     AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
1018*385cc6b4SJerry Jelinek         Node->Type, AcpiUtGetTypeName (Node->Type));
1019db2bae30SDana Myers 
1020db2bae30SDana Myers     AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
1021db2bae30SDana Myers         AcpiExDumpNode);
1022db2bae30SDana Myers }
1023db2bae30SDana Myers 
1024db2bae30SDana Myers 
1025db2bae30SDana Myers /*******************************************************************************
1026db2bae30SDana Myers  *
1027db2bae30SDana Myers  * FUNCTION:    AcpiExDumpReferenceObj
1028db2bae30SDana Myers  *
1029db2bae30SDana Myers  * PARAMETERS:  Object              - Descriptor to dump
1030db2bae30SDana Myers  *
1031db2bae30SDana Myers  * DESCRIPTION: Dumps a reference object
1032db2bae30SDana Myers  *
1033db2bae30SDana Myers  ******************************************************************************/
1034db2bae30SDana Myers 
1035db2bae30SDana Myers static void
1036db2bae30SDana Myers AcpiExDumpReferenceObj (
1037db2bae30SDana Myers     ACPI_OPERAND_OBJECT     *ObjDesc)
1038db2bae30SDana Myers {
1039db2bae30SDana Myers     ACPI_BUFFER             RetBuf;
1040db2bae30SDana Myers     ACPI_STATUS             Status;
1041db2bae30SDana Myers 
1042db2bae30SDana Myers 
1043db2bae30SDana Myers     RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1044db2bae30SDana Myers 
1045db2bae30SDana Myers     if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
1046db2bae30SDana Myers     {
1047db2bae30SDana Myers         AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
1048db2bae30SDana Myers 
1049*385cc6b4SJerry Jelinek         Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node,
1050*385cc6b4SJerry Jelinek             &RetBuf, TRUE);
1051db2bae30SDana Myers         if (ACPI_FAILURE (Status))
1052db2bae30SDana Myers         {
1053db2bae30SDana Myers             AcpiOsPrintf (" Could not convert name to pathname\n");
1054db2bae30SDana Myers         }
1055db2bae30SDana Myers         else
1056db2bae30SDana Myers         {
1057db2bae30SDana Myers            AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
1058db2bae30SDana Myers            ACPI_FREE (RetBuf.Pointer);
1059db2bae30SDana Myers         }
1060db2bae30SDana Myers     }
1061db2bae30SDana Myers     else if (ObjDesc->Reference.Object)
1062db2bae30SDana Myers     {
1063db2bae30SDana Myers         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
1064db2bae30SDana Myers         {
1065*385cc6b4SJerry Jelinek             AcpiOsPrintf ("%22s %p", "Target :",
1066*385cc6b4SJerry Jelinek                 ObjDesc->Reference.Object);
1067db2bae30SDana Myers             if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
1068db2bae30SDana Myers             {
1069*385cc6b4SJerry Jelinek                 AcpiOsPrintf (" Table Index: %X\n",
1070*385cc6b4SJerry Jelinek                     ObjDesc->Reference.Value);
1071db2bae30SDana Myers             }
1072db2bae30SDana Myers             else
1073db2bae30SDana Myers             {
1074*385cc6b4SJerry Jelinek                 AcpiOsPrintf (" [%s]\n",
1075db2bae30SDana Myers                     AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
1076db2bae30SDana Myers                     ObjDesc->Reference.Object)->Common.Type));
1077db2bae30SDana Myers             }
1078db2bae30SDana Myers         }
1079db2bae30SDana Myers         else
1080db2bae30SDana Myers         {
1081aa2aa9a6SDana Myers             AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
1082db2bae30SDana Myers         }
1083db2bae30SDana Myers     }
1084db2bae30SDana Myers }
1085db2bae30SDana Myers 
1086db2bae30SDana Myers 
1087db2bae30SDana Myers /*******************************************************************************
1088db2bae30SDana Myers  *
1089db2bae30SDana Myers  * FUNCTION:    AcpiExDumpPackageObj
1090db2bae30SDana Myers  *
1091db2bae30SDana Myers  * PARAMETERS:  ObjDesc             - Descriptor to dump
1092db2bae30SDana Myers  *              Level               - Indentation Level
1093db2bae30SDana Myers  *              Index               - Package index for this object
1094db2bae30SDana Myers  *
1095db2bae30SDana Myers  * DESCRIPTION: Dumps the elements of the package
1096db2bae30SDana Myers  *
1097db2bae30SDana Myers  ******************************************************************************/
1098db2bae30SDana Myers 
1099db2bae30SDana Myers static void
1100db2bae30SDana Myers AcpiExDumpPackageObj (
1101db2bae30SDana Myers     ACPI_OPERAND_OBJECT     *ObjDesc,
1102db2bae30SDana Myers     UINT32                  Level,
1103db2bae30SDana Myers     UINT32                  Index)
1104db2bae30SDana Myers {
1105db2bae30SDana Myers     UINT32                  i;
1106db2bae30SDana Myers 
1107db2bae30SDana Myers 
1108db2bae30SDana Myers     /* Indentation and index output */
1109db2bae30SDana Myers 
1110db2bae30SDana Myers     if (Level > 0)
1111db2bae30SDana Myers     {
1112db2bae30SDana Myers         for (i = 0; i < Level; i++)
1113db2bae30SDana Myers         {
1114db2bae30SDana Myers             AcpiOsPrintf ("  ");
1115db2bae30SDana Myers         }
1116db2bae30SDana Myers 
1117db2bae30SDana Myers         AcpiOsPrintf ("[%.2d] ", Index);
1118db2bae30SDana Myers     }
1119db2bae30SDana Myers 
1120db2bae30SDana Myers     AcpiOsPrintf ("%p ", ObjDesc);
1121db2bae30SDana Myers 
1122db2bae30SDana Myers     /* Null package elements are allowed */
1123db2bae30SDana Myers 
1124db2bae30SDana Myers     if (!ObjDesc)
1125db2bae30SDana Myers     {
1126db2bae30SDana Myers         AcpiOsPrintf ("[Null Object]\n");
1127db2bae30SDana Myers         return;
1128db2bae30SDana Myers     }
1129db2bae30SDana Myers 
1130db2bae30SDana Myers     /* Packages may only contain a few object types */
1131db2bae30SDana Myers 
1132aa2aa9a6SDana Myers     switch (ObjDesc->Common.Type)
1133db2bae30SDana Myers     {
1134db2bae30SDana Myers     case ACPI_TYPE_INTEGER:
1135db2bae30SDana Myers 
1136db2bae30SDana Myers         AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
1137db2bae30SDana Myers             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
1138db2bae30SDana Myers         break;
1139db2bae30SDana Myers 
1140db2bae30SDana Myers     case ACPI_TYPE_STRING:
1141db2bae30SDana Myers 
1142db2bae30SDana Myers         AcpiOsPrintf ("[String]  Value: ");
1143*385cc6b4SJerry Jelinek         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
1144db2bae30SDana Myers         AcpiOsPrintf ("\n");
1145db2bae30SDana Myers         break;
1146db2bae30SDana Myers 
1147db2bae30SDana Myers     case ACPI_TYPE_BUFFER:
1148db2bae30SDana Myers 
1149db2bae30SDana Myers         AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
1150db2bae30SDana Myers         if (ObjDesc->Buffer.Length)
1151db2bae30SDana Myers         {
1152*385cc6b4SJerry Jelinek             AcpiUtDebugDumpBuffer (
1153*385cc6b4SJerry Jelinek                 ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
1154db2bae30SDana Myers                 ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
1155db2bae30SDana Myers         }
1156db2bae30SDana Myers         else
1157db2bae30SDana Myers         {
1158db2bae30SDana Myers             AcpiOsPrintf ("\n");
1159db2bae30SDana Myers         }
1160db2bae30SDana Myers         break;
1161db2bae30SDana Myers 
1162db2bae30SDana Myers     case ACPI_TYPE_PACKAGE:
1163db2bae30SDana Myers 
116426f3cdf0SGordon Ross         AcpiOsPrintf ("[Package] Contains %u Elements:\n",
1165db2bae30SDana Myers             ObjDesc->Package.Count);
1166db2bae30SDana Myers 
1167db2bae30SDana Myers         for (i = 0; i < ObjDesc->Package.Count; i++)
1168db2bae30SDana Myers         {
1169*385cc6b4SJerry Jelinek             AcpiExDumpPackageObj (
1170*385cc6b4SJerry Jelinek                 ObjDesc->Package.Elements[i], Level + 1, i);
1171db2bae30SDana Myers         }
1172db2bae30SDana Myers         break;
1173db2bae30SDana Myers 
1174db2bae30SDana Myers     case ACPI_TYPE_LOCAL_REFERENCE:
1175db2bae30SDana Myers 
1176db2bae30SDana Myers         AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
1177db2bae30SDana Myers             AcpiUtGetReferenceName (ObjDesc),
1178db2bae30SDana Myers             ObjDesc->Reference.Class);
1179db2bae30SDana Myers         AcpiExDumpReferenceObj (ObjDesc);
1180db2bae30SDana Myers         break;
1181db2bae30SDana Myers 
1182db2bae30SDana Myers     default:
1183db2bae30SDana Myers 
1184aa2aa9a6SDana Myers         AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type);
1185db2bae30SDana Myers         break;
1186db2bae30SDana Myers     }
1187db2bae30SDana Myers }
1188db2bae30SDana Myers 
1189db2bae30SDana Myers 
1190db2bae30SDana Myers /*******************************************************************************
1191db2bae30SDana Myers  *
1192db2bae30SDana Myers  * FUNCTION:    AcpiExDumpObjectDescriptor
1193db2bae30SDana Myers  *
1194db2bae30SDana Myers  * PARAMETERS:  ObjDesc             - Descriptor to dump
1195db2bae30SDana Myers  *              Flags               - Force display if TRUE
1196db2bae30SDana Myers  *
1197db2bae30SDana Myers  * DESCRIPTION: Dumps the members of the object descriptor given.
1198db2bae30SDana Myers  *
1199db2bae30SDana Myers  ******************************************************************************/
1200db2bae30SDana Myers 
1201db2bae30SDana Myers void
1202db2bae30SDana Myers AcpiExDumpObjectDescriptor (
1203db2bae30SDana Myers     ACPI_OPERAND_OBJECT     *ObjDesc,
1204db2bae30SDana Myers     UINT32                  Flags)
1205db2bae30SDana Myers {
1206db2bae30SDana Myers     ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
1207db2bae30SDana Myers 
1208db2bae30SDana Myers 
1209db2bae30SDana Myers     if (!ObjDesc)
1210db2bae30SDana Myers     {
1211db2bae30SDana Myers         return_VOID;
1212db2bae30SDana Myers     }
1213db2bae30SDana Myers 
1214db2bae30SDana Myers     if (!Flags)
1215db2bae30SDana Myers     {
1216*385cc6b4SJerry Jelinek         /* Check if debug output enabled */
1217*385cc6b4SJerry Jelinek 
1218*385cc6b4SJerry Jelinek         if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
1219db2bae30SDana Myers         {
1220db2bae30SDana Myers             return_VOID;
1221db2bae30SDana Myers         }
1222db2bae30SDana Myers     }
1223db2bae30SDana Myers 
1224db2bae30SDana Myers     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1225db2bae30SDana Myers     {
1226db2bae30SDana Myers         AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
1227db2bae30SDana Myers 
1228db2bae30SDana Myers         AcpiOsPrintf ("\nAttached Object (%p):\n",
1229db2bae30SDana Myers             ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object);
1230db2bae30SDana Myers 
1231*385cc6b4SJerry Jelinek         ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object;
1232*385cc6b4SJerry Jelinek         goto DumpObject;
1233db2bae30SDana Myers     }
1234db2bae30SDana Myers 
1235db2bae30SDana Myers     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
1236db2bae30SDana Myers     {
1237db2bae30SDana Myers         AcpiOsPrintf (
1238*385cc6b4SJerry Jelinek             "%p is not an ACPI operand object: [%s]\n",
1239db2bae30SDana Myers             ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
1240db2bae30SDana Myers         return_VOID;
1241db2bae30SDana Myers     }
1242db2bae30SDana Myers 
1243*385cc6b4SJerry Jelinek     /* Validate the object type */
1244*385cc6b4SJerry Jelinek 
1245*385cc6b4SJerry Jelinek     if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1246db2bae30SDana Myers     {
1247*385cc6b4SJerry Jelinek         AcpiOsPrintf ("Not a known object type: %2.2X\n",
1248*385cc6b4SJerry Jelinek             ObjDesc->Common.Type);
1249db2bae30SDana Myers         return_VOID;
1250db2bae30SDana Myers     }
1251db2bae30SDana Myers 
1252*385cc6b4SJerry Jelinek 
1253*385cc6b4SJerry Jelinek DumpObject:
1254*385cc6b4SJerry Jelinek 
1255db2bae30SDana Myers     /* Common Fields */
1256db2bae30SDana Myers 
1257db2bae30SDana Myers     AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
1258db2bae30SDana Myers 
1259db2bae30SDana Myers     /* Object-specific fields */
1260db2bae30SDana Myers 
1261db2bae30SDana Myers     AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1262*385cc6b4SJerry Jelinek 
1263*385cc6b4SJerry Jelinek     if (ObjDesc->Common.Type == ACPI_TYPE_REGION)
1264*385cc6b4SJerry Jelinek     {
1265*385cc6b4SJerry Jelinek         ObjDesc = ObjDesc->Common.NextObject;
1266*385cc6b4SJerry Jelinek         if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1267*385cc6b4SJerry Jelinek         {
1268*385cc6b4SJerry Jelinek             AcpiOsPrintf (
1269*385cc6b4SJerry Jelinek                 "Secondary object is not a known object type: %2.2X\n",
1270*385cc6b4SJerry Jelinek                 ObjDesc->Common.Type);
1271*385cc6b4SJerry Jelinek 
1272*385cc6b4SJerry Jelinek             return_VOID;
1273*385cc6b4SJerry Jelinek         }
1274*385cc6b4SJerry Jelinek 
1275*385cc6b4SJerry Jelinek         AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc);
1276*385cc6b4SJerry Jelinek         AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1277*385cc6b4SJerry Jelinek     }
1278*385cc6b4SJerry Jelinek 
1279db2bae30SDana Myers     return_VOID;
1280db2bae30SDana Myers }
1281db2bae30SDana Myers 
1282db2bae30SDana Myers #endif
1283