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