Subversion Repositories Kolibri OS

Rev

Rev 1498 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1498 serge 1
/******************************************************************************
2
 *
3
 * Module Name: exdump - Interpreter debug output routines
4
 *
5
 *****************************************************************************/
6
 
7
/******************************************************************************
8
 *
9
 * 1. Copyright Notice
10
 *
2216 Serge 11
 * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
1498 serge 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_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[9] =
217
{
218
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod),         NULL},
2216 Serge 219
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.InfoFlags),             "Info Flags"},
1498 serge 220
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ParamCount),            "Parameter Count"},
221
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.SyncLevel),             "Sync Level"},
222
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.Mutex),                 "Mutex"},
223
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.OwnerId),               "Owner Id"},
224
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ThreadCount),           "Thread Count"},
225
    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Method.AmlLength),             "Aml Length"},
226
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.AmlStart),              "Aml Start"}
227
};
228
 
229
static ACPI_EXDUMP_INFO     AcpiExDumpMutex[5] =
230
{
231
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex),          NULL},
232
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.SyncLevel),              "Sync Level"},
233
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OwnerThread),            "Owner Thread"},
234
    {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Mutex.AcquisitionDepth),       "Acquire Depth"},
235
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OsMutex),                "OsMutex"}
236
};
237
 
238
static ACPI_EXDUMP_INFO     AcpiExDumpRegion[7] =
239
{
240
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion),         NULL},
241
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.SpaceId),               "Space Id"},
242
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.Flags),                 "Flags"},
243
    {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
244
    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
245
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
246
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
247
};
248
 
249
static ACPI_EXDUMP_INFO     AcpiExDumpPower[5] =
250
{
251
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
252
    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
253
    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
254
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.SystemNotify),   "System Notify"},
255
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.DeviceNotify),   "Device Notify"}
256
};
257
 
258
static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
259
{
260
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor),      NULL},
261
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
262
    {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
263
    {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
264
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.SystemNotify),       "System Notify"},
265
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.DeviceNotify),       "Device Notify"},
266
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
267
};
268
 
269
static ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
270
{
271
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
272
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.SystemNotify),     "System Notify"},
273
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.DeviceNotify),     "Device Notify"},
274
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
275
};
276
 
277
static ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
278
{
279
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField),    NULL},
280
    {ACPI_EXD_FIELD,    0,                                              NULL},
281
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
282
};
283
 
284
static ACPI_EXDUMP_INFO     AcpiExDumpRegionField[3] =
285
{
286
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
287
    {ACPI_EXD_FIELD,    0,                                              NULL},
288
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"}
289
};
290
 
291
static ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
292
{
293
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
294
    {ACPI_EXD_FIELD,    0,                                              NULL},
295
    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (BankField.Value),              "Value"},
296
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.RegionObj),          "Region Object"},
297
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.BankObj),            "Bank Object"}
298
};
299
 
300
static ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
301
{
302
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
303
    {ACPI_EXD_FIELD,    0,                                              NULL},
304
    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (IndexField.Value),             "Value"},
305
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.IndexObj),          "Index Object"},
306
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
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
static ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
350
{
351
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon),    NULL},
352
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.FieldFlags),       "Field Flags"},
353
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.AccessByteWidth),  "Access Byte Width"},
354
    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
355
    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
356
    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
357
    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
358
};
359
 
360
static ACPI_EXDUMP_INFO     AcpiExDumpNode[5] =
361
{
362
    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
363
    {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
364
    {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
365
    {ACPI_EXD_POINTER,  ACPI_EXD_NSOFFSET (Child),                      "Child List"},
366
    {ACPI_EXD_POINTER,  ACPI_EXD_NSOFFSET (Peer),                       "Next Peer"}
367
};
368
 
369
 
370
/* Dispatch table, indexed by object type */
371
 
372
static ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
373
{
374
    NULL,
375
    AcpiExDumpInteger,
376
    AcpiExDumpString,
377
    AcpiExDumpBuffer,
378
    AcpiExDumpPackage,
379
    NULL,
380
    AcpiExDumpDevice,
381
    AcpiExDumpEvent,
382
    AcpiExDumpMethod,
383
    AcpiExDumpMutex,
384
    AcpiExDumpRegion,
385
    AcpiExDumpPower,
386
    AcpiExDumpProcessor,
387
    AcpiExDumpThermal,
388
    AcpiExDumpBufferField,
389
    NULL,
390
    NULL,
391
    AcpiExDumpRegionField,
392
    AcpiExDumpBankField,
393
    AcpiExDumpIndexField,
394
    AcpiExDumpReference,
395
    NULL,
396
    NULL,
397
    AcpiExDumpNotify,
398
    AcpiExDumpAddressHandler,
399
    NULL,
400
    NULL,
401
    NULL
402
};
403
 
404
 
405
/*******************************************************************************
406
 *
407
 * FUNCTION:    AcpiExDumpObject
408
 *
409
 * PARAMETERS:  ObjDesc             - Descriptor to dump
410
 *              Info                - Info table corresponding to this object
411
 *                                    type
412
 *
413
 * RETURN:      None
414
 *
415
 * DESCRIPTION: Walk the info table for this object
416
 *
417
 ******************************************************************************/
418
 
419
static void
420
AcpiExDumpObject (
421
    ACPI_OPERAND_OBJECT     *ObjDesc,
422
    ACPI_EXDUMP_INFO        *Info)
423
{
424
    UINT8                   *Target;
425
    char                    *Name;
426
    UINT8                   Count;
427
 
428
 
429
    if (!Info)
430
    {
431
        AcpiOsPrintf (
432
            "ExDumpObject: Display not implemented for object type %s\n",
433
            AcpiUtGetObjectTypeName (ObjDesc));
434
        return;
435
    }
436
 
437
    /* First table entry must contain the table length (# of table entries) */
438
 
439
    Count = Info->Offset;
440
 
441
    while (Count)
442
    {
443
        Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
444
        Name = Info->Name;
445
 
446
        switch (Info->Opcode)
447
        {
448
        case ACPI_EXD_INIT:
449
            break;
450
 
451
        case ACPI_EXD_TYPE:
452
 
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",
510
                ACPI_CAST_PTR (char, AcpiUtGetReferenceName (ObjDesc)));
511
            AcpiExDumpReferenceObj (ObjDesc);
512
            break;
513
 
514
        default:
515
 
516
            AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
517
                Info->Opcode);
518
            return;
519
        }
520
 
521
        Info++;
522
        Count--;
523
    }
524
}
525
 
526
 
527
/*******************************************************************************
528
 *
529
 * FUNCTION:    AcpiExDumpOperand
530
 *
531
 * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped
532
 *              Depth           - Current nesting depth
533
 *
534
 * RETURN:      None
535
 *
536
 * DESCRIPTION: Dump an operand object
537
 *
538
 ******************************************************************************/
539
 
540
void
541
AcpiExDumpOperand (
542
    ACPI_OPERAND_OBJECT     *ObjDesc,
543
    UINT32                  Depth)
544
{
545
    UINT32                  Length;
546
    UINT32                  Index;
547
 
548
 
549
    ACPI_FUNCTION_NAME (ExDumpOperand)
550
 
551
 
552
    if (!((ACPI_LV_EXEC & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
553
    {
554
        return;
555
    }
556
 
557
    if (!ObjDesc)
558
    {
559
        /* This could be a null element of a package */
560
 
561
        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
562
        return;
563
    }
564
 
565
    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
566
    {
567
        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
568
        ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
569
        return;
570
    }
571
 
572
    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
573
    {
574
        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
575
            "%p is not a node or operand object: [%s]\n",
576
            ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
577
        ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
578
        return;
579
    }
580
 
581
    /* ObjDesc is a valid object */
582
 
583
    if (Depth > 0)
584
    {
585
        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
586
            Depth, " ", Depth, ObjDesc));
587
    }
588
    else
589
    {
590
        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
591
    }
592
 
593
    /* Decode object type */
594
 
595
    switch (ObjDesc->Common.Type)
596
    {
597
    case ACPI_TYPE_LOCAL_REFERENCE:
598
 
599
        AcpiOsPrintf ("Reference: [%s] ", AcpiUtGetReferenceName (ObjDesc));
600
 
601
        switch (ObjDesc->Reference.Class)
602
        {
603
        case ACPI_REFCLASS_DEBUG:
604
 
605
            AcpiOsPrintf ("\n");
606
            break;
607
 
608
 
609
        case ACPI_REFCLASS_INDEX:
610
 
611
            AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
612
            break;
613
 
614
 
615
        case ACPI_REFCLASS_TABLE:
616
 
617
            AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
618
            break;
619
 
620
 
621
        case ACPI_REFCLASS_REFOF:
622
 
623
            AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
624
                AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
625
                    ObjDesc->Reference.Object)->Common.Type));
626
            break;
627
 
628
 
629
        case ACPI_REFCLASS_NAME:
630
 
631
            AcpiOsPrintf ("- [%4.4s]\n", ObjDesc->Reference.Node->Name.Ascii);
632
            break;
633
 
634
 
635
        case ACPI_REFCLASS_ARG:
636
        case ACPI_REFCLASS_LOCAL:
637
 
638
            AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
639
            break;
640
 
641
 
642
        default:    /* Unknown reference class */
643
 
644
            AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
645
            break;
646
        }
647
        break;
648
 
649
 
650
    case ACPI_TYPE_BUFFER:
651
 
652
        AcpiOsPrintf ("Buffer length %.2X @ %p\n",
653
            ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
654
 
655
        /* Debug only -- dump the buffer contents */
656
 
657
        if (ObjDesc->Buffer.Pointer)
658
        {
659
            Length = ObjDesc->Buffer.Length;
660
            if (Length > 128)
661
            {
662
                Length = 128;
663
            }
664
 
665
            AcpiOsPrintf ("Buffer Contents: (displaying length 0x%.2X)\n",
666
                Length);
667
            ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
668
        }
669
        break;
670
 
671
 
672
    case ACPI_TYPE_INTEGER:
673
 
674
        AcpiOsPrintf ("Integer %8.8X%8.8X\n",
675
            ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
676
        break;
677
 
678
 
679
    case ACPI_TYPE_PACKAGE:
680
 
681
        AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
682
            ObjDesc->Package.Count, ObjDesc->Package.Elements);
683
 
684
        /*
685
         * If elements exist, package element pointer is valid,
686
         * and debug_level exceeds 1, dump package's elements.
687
         */
688
        if (ObjDesc->Package.Count &&
689
            ObjDesc->Package.Elements &&
690
            AcpiDbgLevel > 1)
691
        {
692
            for (Index = 0; Index < ObjDesc->Package.Count; Index++)
693
            {
694
                AcpiExDumpOperand (ObjDesc->Package.Elements[Index], Depth+1);
695
            }
696
        }
697
        break;
698
 
699
 
700
    case ACPI_TYPE_REGION:
701
 
702
        AcpiOsPrintf ("Region %s (%X)",
703
            AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
704
            ObjDesc->Region.SpaceId);
705
 
706
        /*
707
         * If the address and length have not been evaluated,
708
         * don't print them.
709
         */
710
        if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
711
        {
712
            AcpiOsPrintf ("\n");
713
        }
714
        else
715
        {
716
            AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
717
                ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address),
718
                ObjDesc->Region.Length);
719
        }
720
        break;
721
 
722
 
723
    case ACPI_TYPE_STRING:
724
 
725
        AcpiOsPrintf ("String length %X @ %p ",
726
            ObjDesc->String.Length,
727
            ObjDesc->String.Pointer);
728
 
729
        AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
730
        AcpiOsPrintf ("\n");
731
        break;
732
 
733
 
734
    case ACPI_TYPE_LOCAL_BANK_FIELD:
735
 
736
        AcpiOsPrintf ("BankField\n");
737
        break;
738
 
739
 
740
    case ACPI_TYPE_LOCAL_REGION_FIELD:
741
 
742
        AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
743
            "byte=%X bit=%X of below:\n",
744
            ObjDesc->Field.BitLength,
745
            ObjDesc->Field.AccessByteWidth,
746
            ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
747
            ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
748
            ObjDesc->Field.BaseByteOffset,
749
            ObjDesc->Field.StartFieldBitOffset);
750
 
751
        AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1);
752
        break;
753
 
754
 
755
    case ACPI_TYPE_LOCAL_INDEX_FIELD:
756
 
757
        AcpiOsPrintf ("IndexField\n");
758
        break;
759
 
760
 
761
    case ACPI_TYPE_BUFFER_FIELD:
762
 
763
        AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
764
            ObjDesc->BufferField.BitLength,
765
            ObjDesc->BufferField.BaseByteOffset,
766
            ObjDesc->BufferField.StartFieldBitOffset);
767
 
768
        if (!ObjDesc->BufferField.BufferObj)
769
        {
770
            ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
771
        }
772
        else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
773
                    ACPI_TYPE_BUFFER)
774
        {
775
            AcpiOsPrintf ("*not a Buffer*\n");
776
        }
777
        else
778
        {
779
            AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth+1);
780
        }
781
        break;
782
 
783
 
784
    case ACPI_TYPE_EVENT:
785
 
786
        AcpiOsPrintf ("Event\n");
787
        break;
788
 
789
 
790
    case ACPI_TYPE_METHOD:
791
 
792
        AcpiOsPrintf ("Method(%X) @ %p:%X\n",
793
            ObjDesc->Method.ParamCount,
794
            ObjDesc->Method.AmlStart,
795
            ObjDesc->Method.AmlLength);
796
        break;
797
 
798
 
799
    case ACPI_TYPE_MUTEX:
800
 
801
        AcpiOsPrintf ("Mutex\n");
802
        break;
803
 
804
 
805
    case ACPI_TYPE_DEVICE:
806
 
807
        AcpiOsPrintf ("Device\n");
808
        break;
809
 
810
 
811
    case ACPI_TYPE_POWER:
812
 
813
        AcpiOsPrintf ("Power\n");
814
        break;
815
 
816
 
817
    case ACPI_TYPE_PROCESSOR:
818
 
819
        AcpiOsPrintf ("Processor\n");
820
        break;
821
 
822
 
823
    case ACPI_TYPE_THERMAL:
824
 
825
        AcpiOsPrintf ("Thermal\n");
826
        break;
827
 
828
 
829
    default:
830
        /* Unknown Type */
831
 
832
        AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
833
        break;
834
    }
835
 
836
    return;
837
}
838
 
839
 
840
/*******************************************************************************
841
 *
842
 * FUNCTION:    AcpiExDumpOperands
843
 *
844
 * PARAMETERS:  Operands            - A list of Operand objects
845
 *              OpcodeName          - AML opcode name
846
 *              NumOperands         - Operand count for this opcode
847
 *
848
 * DESCRIPTION: Dump the operands associated with the opcode
849
 *
850
 ******************************************************************************/
851
 
852
void
853
AcpiExDumpOperands (
854
    ACPI_OPERAND_OBJECT     **Operands,
855
    const char              *OpcodeName,
856
    UINT32                  NumOperands)
857
{
858
    ACPI_FUNCTION_NAME (ExDumpOperands);
859
 
860
 
861
    if (!OpcodeName)
862
    {
863
        OpcodeName = "UNKNOWN";
864
    }
865
 
866
    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
867
        "**** Start operand dump for opcode [%s], %u operands\n",
868
        OpcodeName, NumOperands));
869
 
870
    if (NumOperands == 0)
871
    {
872
        NumOperands = 1;
873
    }
874
 
875
    /* Dump the individual operands */
876
 
877
    while (NumOperands)
878
    {
879
        AcpiExDumpOperand (*Operands, 0);
880
        Operands++;
881
        NumOperands--;
882
    }
883
 
884
    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
885
        "**** End operand dump for [%s]\n", OpcodeName));
886
    return;
887
}
888
 
889
 
890
/*******************************************************************************
891
 *
892
 * FUNCTION:    AcpiExOut* functions
893
 *
894
 * PARAMETERS:  Title               - Descriptive text
895
 *              Value               - Value to be displayed
896
 *
897
 * DESCRIPTION: Object dump output formatting functions.  These functions
898
 *              reduce the number of format strings required and keeps them
899
 *              all in one place for easy modification.
900
 *
901
 ******************************************************************************/
902
 
903
static void
904
AcpiExOutString (
905
    char                    *Title,
906
    char                    *Value)
907
{
908
    AcpiOsPrintf ("%20s : %s\n", Title, Value);
909
}
910
 
911
static void
912
AcpiExOutPointer (
913
    char                    *Title,
914
    void                    *Value)
915
{
916
    AcpiOsPrintf ("%20s : %p\n", Title, Value);
917
}
918
 
919
 
920
/*******************************************************************************
921
 *
922
 * FUNCTION:    AcpiExDumpNamespaceNode
923
 *
924
 * PARAMETERS:  Node                - Descriptor to dump
925
 *              Flags               - Force display if TRUE
926
 *
927
 * DESCRIPTION: Dumps the members of the given.Node
928
 *
929
 ******************************************************************************/
930
 
931
void
932
AcpiExDumpNamespaceNode (
933
    ACPI_NAMESPACE_NODE     *Node,
934
    UINT32                  Flags)
935
{
936
 
937
    ACPI_FUNCTION_ENTRY ();
938
 
939
 
940
    if (!Flags)
941
    {
942
        if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
943
        {
944
            return;
945
        }
946
    }
947
 
948
    AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
949
    AcpiExOutString  ("Type", AcpiUtGetTypeName (Node->Type));
950
    AcpiExOutPointer ("Attached Object", AcpiNsGetAttachedObject (Node));
951
    AcpiExOutPointer ("Parent", Node->Parent);
952
 
953
    AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
954
        AcpiExDumpNode);
955
}
956
 
957
 
958
/*******************************************************************************
959
 *
960
 * FUNCTION:    AcpiExDumpReferenceObj
961
 *
962
 * PARAMETERS:  Object              - Descriptor to dump
963
 *
964
 * DESCRIPTION: Dumps a reference object
965
 *
966
 ******************************************************************************/
967
 
968
static void
969
AcpiExDumpReferenceObj (
970
    ACPI_OPERAND_OBJECT     *ObjDesc)
971
{
972
    ACPI_BUFFER             RetBuf;
973
    ACPI_STATUS             Status;
974
 
975
 
976
    RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
977
 
978
    if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
979
    {
980
        AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
981
 
982
        Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf);
983
        if (ACPI_FAILURE (Status))
984
        {
985
            AcpiOsPrintf (" Could not convert name to pathname\n");
986
        }
987
        else
988
        {
989
           AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
990
           ACPI_FREE (RetBuf.Pointer);
991
        }
992
    }
993
    else if (ObjDesc->Reference.Object)
994
    {
995
        if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
996
        {
997
            AcpiOsPrintf (" Target: %p", ObjDesc->Reference.Object);
998
            if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
999
            {
1000
                AcpiOsPrintf (" Table Index: %X\n", ObjDesc->Reference.Value);
1001
            }
1002
            else
1003
            {
1004
                AcpiOsPrintf (" Target: %p [%s]\n", ObjDesc->Reference.Object,
1005
                    AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
1006
                        ObjDesc->Reference.Object)->Common.Type));
1007
            }
1008
        }
1009
        else
1010
        {
1011
            AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
1012
        }
1013
    }
1014
}
1015
 
1016
 
1017
/*******************************************************************************
1018
 *
1019
 * FUNCTION:    AcpiExDumpPackageObj
1020
 *
1021
 * PARAMETERS:  ObjDesc             - Descriptor to dump
1022
 *              Level               - Indentation Level
1023
 *              Index               - Package index for this object
1024
 *
1025
 * DESCRIPTION: Dumps the elements of the package
1026
 *
1027
 ******************************************************************************/
1028
 
1029
static void
1030
AcpiExDumpPackageObj (
1031
    ACPI_OPERAND_OBJECT     *ObjDesc,
1032
    UINT32                  Level,
1033
    UINT32                  Index)
1034
{
1035
    UINT32                  i;
1036
 
1037
 
1038
    /* Indentation and index output */
1039
 
1040
    if (Level > 0)
1041
    {
1042
        for (i = 0; i < Level; i++)
1043
        {
1044
            AcpiOsPrintf ("  ");
1045
        }
1046
 
1047
        AcpiOsPrintf ("[%.2d] ", Index);
1048
    }
1049
 
1050
    AcpiOsPrintf ("%p ", ObjDesc);
1051
 
1052
    /* Null package elements are allowed */
1053
 
1054
    if (!ObjDesc)
1055
    {
1056
        AcpiOsPrintf ("[Null Object]\n");
1057
        return;
1058
    }
1059
 
1060
    /* Packages may only contain a few object types */
1061
 
1062
    switch (ObjDesc->Common.Type)
1063
    {
1064
    case ACPI_TYPE_INTEGER:
1065
 
1066
        AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
1067
            ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
1068
        break;
1069
 
1070
 
1071
    case ACPI_TYPE_STRING:
1072
 
1073
        AcpiOsPrintf ("[String]  Value: ");
1074
        for (i = 0; i < ObjDesc->String.Length; i++)
1075
        {
1076
            AcpiOsPrintf ("%c", ObjDesc->String.Pointer[i]);
1077
        }
1078
        AcpiOsPrintf ("\n");
1079
        break;
1080
 
1081
 
1082
    case ACPI_TYPE_BUFFER:
1083
 
1084
        AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
1085
        if (ObjDesc->Buffer.Length)
1086
        {
1087
            AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
1088
                ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
1089
        }
1090
        else
1091
        {
1092
            AcpiOsPrintf ("\n");
1093
        }
1094
        break;
1095
 
1096
 
1097
    case ACPI_TYPE_PACKAGE:
1098
 
1099
        AcpiOsPrintf ("[Package] Contains %u Elements:\n",
1100
            ObjDesc->Package.Count);
1101
 
1102
        for (i = 0; i < ObjDesc->Package.Count; i++)
1103
        {
1104
            AcpiExDumpPackageObj (ObjDesc->Package.Elements[i], Level+1, i);
1105
        }
1106
        break;
1107
 
1108
 
1109
    case ACPI_TYPE_LOCAL_REFERENCE:
1110
 
1111
        AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
1112
            AcpiUtGetReferenceName (ObjDesc),
1113
            ObjDesc->Reference.Class);
1114
        AcpiExDumpReferenceObj (ObjDesc);
1115
        break;
1116
 
1117
 
1118
    default:
1119
 
1120
        AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type);
1121
        break;
1122
    }
1123
}
1124
 
1125
 
1126
/*******************************************************************************
1127
 *
1128
 * FUNCTION:    AcpiExDumpObjectDescriptor
1129
 *
1130
 * PARAMETERS:  ObjDesc             - Descriptor to dump
1131
 *              Flags               - Force display if TRUE
1132
 *
1133
 * DESCRIPTION: Dumps the members of the object descriptor given.
1134
 *
1135
 ******************************************************************************/
1136
 
1137
void
1138
AcpiExDumpObjectDescriptor (
1139
    ACPI_OPERAND_OBJECT     *ObjDesc,
1140
    UINT32                  Flags)
1141
{
1142
    ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
1143
 
1144
 
1145
    if (!ObjDesc)
1146
    {
1147
        return_VOID;
1148
    }
1149
 
1150
    if (!Flags)
1151
    {
1152
        if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
1153
        {
1154
            return_VOID;
1155
        }
1156
    }
1157
 
1158
    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1159
    {
1160
        AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
1161
 
1162
        AcpiOsPrintf ("\nAttached Object (%p):\n",
1163
            ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object);
1164
 
1165
        AcpiExDumpObjectDescriptor (
1166
            ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object, Flags);
1167
        return_VOID;
1168
    }
1169
 
1170
    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
1171
    {
1172
        AcpiOsPrintf (
1173
            "ExDumpObjectDescriptor: %p is not an ACPI operand object: [%s]\n",
1174
            ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
1175
        return_VOID;
1176
    }
1177
 
1178
    if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX)
1179
    {
1180
        return_VOID;
1181
    }
1182
 
1183
    /* Common Fields */
1184
 
1185
    AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
1186
 
1187
    /* Object-specific fields */
1188
 
1189
    AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1190
    return_VOID;
1191
}
1192
 
1193
#endif
1194