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