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