167754Smsmith/******************************************************************************
267754Smsmith *
377424Smsmith * Module Name: exdump - Interpreter debug output routines
467754Smsmith *
567754Smsmith *****************************************************************************/
667754Smsmith
7217365Sjkim/*
8217365Sjkim * Copyright (C) 2000 - 2011, Intel Corp.
970243Smsmith * All rights reserved.
1067754Smsmith *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
2567754Smsmith *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
2967754Smsmith *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
4367754Smsmith
4477424Smsmith#define __EXDUMP_C__
4567754Smsmith
46193341Sjkim#include <contrib/dev/acpica/include/acpi.h>
47193341Sjkim#include <contrib/dev/acpica/include/accommon.h>
48193341Sjkim#include <contrib/dev/acpica/include/acinterp.h>
49193341Sjkim#include <contrib/dev/acpica/include/amlcode.h>
50193341Sjkim#include <contrib/dev/acpica/include/acnamesp.h>
5167754Smsmith
52193267Sjkim
5377424Smsmith#define _COMPONENT          ACPI_EXECUTER
5491116Smsmith        ACPI_MODULE_NAME    ("exdump")
5567754Smsmith
5667754Smsmith/*
5767754Smsmith * The following routines are used for debug output only
5867754Smsmith */
59102550Siwasaki#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
6067754Smsmith
61151937Sjkim/* Local prototypes */
62151937Sjkim
63151937Sjkimstatic void
64151937SjkimAcpiExOutString (
65151937Sjkim    char                    *Title,
66151937Sjkim    char                    *Value);
67151937Sjkim
68151937Sjkimstatic void
69151937SjkimAcpiExOutPointer (
70151937Sjkim    char                    *Title,
71151937Sjkim    void                    *Value);
72151937Sjkim
73151937Sjkimstatic void
74167802SjkimAcpiExDumpObject (
75167802Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc,
76167802Sjkim    ACPI_EXDUMP_INFO        *Info);
77151937Sjkim
78151937Sjkimstatic void
79167802SjkimAcpiExDumpReferenceObj (
80151937Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc);
81151937Sjkim
82151937Sjkimstatic void
83167802SjkimAcpiExDumpPackageObj (
84151937Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc,
85151937Sjkim    UINT32                  Level,
86151937Sjkim    UINT32                  Index);
87151937Sjkim
88151937Sjkim
89151937Sjkim/*******************************************************************************
9067754Smsmith *
91167802Sjkim * Object Descriptor info tables
92167802Sjkim *
93167802Sjkim * Note: The first table entry must be an INIT opcode and must contain
94167802Sjkim * the table length (number of table entries)
95167802Sjkim *
96167802Sjkim ******************************************************************************/
97167802Sjkim
98167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpInteger[2] =
99167802Sjkim{
100167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger),        NULL},
101167802Sjkim    {ACPI_EXD_UINT64,   ACPI_EXD_OFFSET (Integer.Value),                "Value"}
102167802Sjkim};
103167802Sjkim
104167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpString[4] =
105167802Sjkim{
106167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpString),         NULL},
107167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (String.Length),                "Length"},
108167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (String.Pointer),               "Pointer"},
109167802Sjkim    {ACPI_EXD_STRING,   0,                                              NULL}
110167802Sjkim};
111167802Sjkim
112167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpBuffer[5] =
113167802Sjkim{
114167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer),         NULL},
115167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Buffer.Length),                "Length"},
116167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Pointer),               "Pointer"},
117167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
118167802Sjkim    {ACPI_EXD_BUFFER,   0,                                              NULL}
119167802Sjkim};
120167802Sjkim
121167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpPackage[5] =
122167802Sjkim{
123167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage),        NULL},
124167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Package.Flags),                "Flags"},
125167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Package.Count),                "Elements"},
126167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Package.Elements),             "Element List"},
127167802Sjkim    {ACPI_EXD_PACKAGE,  0,                                              NULL}
128167802Sjkim};
129167802Sjkim
130167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
131167802Sjkim{
132167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
133167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.Handler),               "Handler"},
134167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.SystemNotify),          "System Notify"},
135167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.DeviceNotify),          "Device Notify"}
136167802Sjkim};
137167802Sjkim
138167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
139167802Sjkim{
140167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent),          NULL},
141167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Event.OsSemaphore),            "OsSemaphore"}
142167802Sjkim};
143167802Sjkim
144193267Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpMethod[9] =
145167802Sjkim{
146167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod),         NULL},
147217365Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.InfoFlags),             "Info Flags"},
148193267Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ParamCount),            "Parameter Count"},
149167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.SyncLevel),             "Sync Level"},
150167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.Mutex),                 "Mutex"},
151167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.OwnerId),               "Owner Id"},
152167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ThreadCount),           "Thread Count"},
153167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Method.AmlLength),             "Aml Length"},
154167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.AmlStart),              "Aml Start"}
155167802Sjkim};
156167802Sjkim
157167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpMutex[5] =
158167802Sjkim{
159167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex),          NULL},
160167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.SyncLevel),              "Sync Level"},
161167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OwnerThread),            "Owner Thread"},
162167802Sjkim    {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Mutex.AcquisitionDepth),       "Acquire Depth"},
163167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OsMutex),                "OsMutex"}
164167802Sjkim};
165167802Sjkim
166167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpRegion[7] =
167167802Sjkim{
168167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion),         NULL},
169167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.SpaceId),               "Space Id"},
170167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.Flags),                 "Flags"},
171167802Sjkim    {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
172167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
173167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
174167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
175167802Sjkim};
176167802Sjkim
177167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpPower[5] =
178167802Sjkim{
179167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
180167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
181167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
182167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.SystemNotify),   "System Notify"},
183167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.DeviceNotify),   "Device Notify"}
184167802Sjkim};
185167802Sjkim
186167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
187167802Sjkim{
188167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor),      NULL},
189167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
190167802Sjkim    {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
191167802Sjkim    {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
192167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.SystemNotify),       "System Notify"},
193167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.DeviceNotify),       "Device Notify"},
194167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
195167802Sjkim};
196167802Sjkim
197167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
198167802Sjkim{
199167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
200167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.SystemNotify),     "System Notify"},
201167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.DeviceNotify),     "Device Notify"},
202167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
203167802Sjkim};
204167802Sjkim
205167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
206167802Sjkim{
207167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField),    NULL},
208167802Sjkim    {ACPI_EXD_FIELD,    0,                                              NULL},
209167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
210167802Sjkim};
211167802Sjkim
212167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpRegionField[3] =
213167802Sjkim{
214167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
215167802Sjkim    {ACPI_EXD_FIELD,    0,                                              NULL},
216167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"}
217167802Sjkim};
218167802Sjkim
219167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
220167802Sjkim{
221167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
222167802Sjkim    {ACPI_EXD_FIELD,    0,                                              NULL},
223167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (BankField.Value),              "Value"},
224167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.RegionObj),          "Region Object"},
225167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.BankObj),            "Bank Object"}
226167802Sjkim};
227167802Sjkim
228167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
229167802Sjkim{
230167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
231167802Sjkim    {ACPI_EXD_FIELD,    0,                                              NULL},
232167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (IndexField.Value),             "Value"},
233167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.IndexObj),          "Index Object"},
234167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
235167802Sjkim};
236167802Sjkim
237193267Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpReference[8] =
238167802Sjkim{
239167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpReference),       NULL},
240193267Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.Class),              "Class"},
241167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.TargetType),         "Target Type"},
242193267Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Reference.Value),              "Value"},
243167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
244167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Node),               "Node"},
245167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
246167802Sjkim    {ACPI_EXD_REFERENCE,0,                                              NULL}
247167802Sjkim};
248167802Sjkim
249167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
250167802Sjkim{
251167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
252167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (AddressSpace.SpaceId),         "Space Id"},
253167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
254167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
255167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
256167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
257167802Sjkim};
258167802Sjkim
259167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpNotify[3] =
260167802Sjkim{
261167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
262167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
263167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"}
264167802Sjkim};
265167802Sjkim
266167802Sjkim
267167802Sjkim/* Miscellaneous tables */
268167802Sjkim
269167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpCommon[4] =
270167802Sjkim{
271167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon),         NULL},
272167802Sjkim    {ACPI_EXD_TYPE ,    0,                                              NULL},
273167802Sjkim    {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Common.ReferenceCount),        "Reference Count"},
274167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"}
275167802Sjkim};
276167802Sjkim
277167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
278167802Sjkim{
279167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon),    NULL},
280167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.FieldFlags),       "Field Flags"},
281167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.AccessByteWidth),  "Access Byte Width"},
282167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
283167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
284167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
285167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
286167802Sjkim};
287167802Sjkim
288167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpNode[5] =
289167802Sjkim{
290167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
291167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
292167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
293167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_NSOFFSET (Child),                      "Child List"},
294167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_NSOFFSET (Peer),                       "Next Peer"}
295167802Sjkim};
296167802Sjkim
297167802Sjkim
298167802Sjkim/* Dispatch table, indexed by object type */
299167802Sjkim
300167802Sjkimstatic ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
301167802Sjkim{
302167802Sjkim    NULL,
303167802Sjkim    AcpiExDumpInteger,
304167802Sjkim    AcpiExDumpString,
305167802Sjkim    AcpiExDumpBuffer,
306167802Sjkim    AcpiExDumpPackage,
307167802Sjkim    NULL,
308167802Sjkim    AcpiExDumpDevice,
309167802Sjkim    AcpiExDumpEvent,
310167802Sjkim    AcpiExDumpMethod,
311167802Sjkim    AcpiExDumpMutex,
312167802Sjkim    AcpiExDumpRegion,
313167802Sjkim    AcpiExDumpPower,
314167802Sjkim    AcpiExDumpProcessor,
315167802Sjkim    AcpiExDumpThermal,
316167802Sjkim    AcpiExDumpBufferField,
317167802Sjkim    NULL,
318167802Sjkim    NULL,
319167802Sjkim    AcpiExDumpRegionField,
320167802Sjkim    AcpiExDumpBankField,
321167802Sjkim    AcpiExDumpIndexField,
322167802Sjkim    AcpiExDumpReference,
323167802Sjkim    NULL,
324167802Sjkim    NULL,
325167802Sjkim    AcpiExDumpNotify,
326167802Sjkim    AcpiExDumpAddressHandler,
327167802Sjkim    NULL,
328167802Sjkim    NULL,
329167802Sjkim    NULL
330167802Sjkim};
331167802Sjkim
332167802Sjkim
333167802Sjkim/*******************************************************************************
334167802Sjkim *
335167802Sjkim * FUNCTION:    AcpiExDumpObject
336167802Sjkim *
337167802Sjkim * PARAMETERS:  ObjDesc             - Descriptor to dump
338167802Sjkim *              Info                - Info table corresponding to this object
339167802Sjkim *                                    type
340167802Sjkim *
341167802Sjkim * RETURN:      None
342167802Sjkim *
343167802Sjkim * DESCRIPTION: Walk the info table for this object
344167802Sjkim *
345167802Sjkim ******************************************************************************/
346167802Sjkim
347167802Sjkimstatic void
348167802SjkimAcpiExDumpObject (
349167802Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc,
350167802Sjkim    ACPI_EXDUMP_INFO        *Info)
351167802Sjkim{
352167802Sjkim    UINT8                   *Target;
353167802Sjkim    char                    *Name;
354167802Sjkim    UINT8                   Count;
355167802Sjkim
356167802Sjkim
357167802Sjkim    if (!Info)
358167802Sjkim    {
359167802Sjkim        AcpiOsPrintf (
360167802Sjkim            "ExDumpObject: Display not implemented for object type %s\n",
361167802Sjkim            AcpiUtGetObjectTypeName (ObjDesc));
362167802Sjkim        return;
363167802Sjkim    }
364167802Sjkim
365167802Sjkim    /* First table entry must contain the table length (# of table entries) */
366167802Sjkim
367167802Sjkim    Count = Info->Offset;
368167802Sjkim
369167802Sjkim    while (Count)
370167802Sjkim    {
371167802Sjkim        Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
372167802Sjkim        Name = Info->Name;
373167802Sjkim
374167802Sjkim        switch (Info->Opcode)
375167802Sjkim        {
376167802Sjkim        case ACPI_EXD_INIT:
377167802Sjkim            break;
378167802Sjkim
379167802Sjkim        case ACPI_EXD_TYPE:
380193267Sjkim
381167802Sjkim            AcpiExOutString  ("Type", AcpiUtGetObjectTypeName (ObjDesc));
382167802Sjkim            break;
383167802Sjkim
384167802Sjkim        case ACPI_EXD_UINT8:
385167802Sjkim
386167802Sjkim            AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
387167802Sjkim            break;
388167802Sjkim
389167802Sjkim        case ACPI_EXD_UINT16:
390167802Sjkim
391167802Sjkim            AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
392167802Sjkim            break;
393167802Sjkim
394167802Sjkim        case ACPI_EXD_UINT32:
395167802Sjkim
396167802Sjkim            AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
397167802Sjkim            break;
398167802Sjkim
399167802Sjkim        case ACPI_EXD_UINT64:
400167802Sjkim
401167802Sjkim            AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
402193267Sjkim                ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
403167802Sjkim            break;
404167802Sjkim
405167802Sjkim        case ACPI_EXD_POINTER:
406167802Sjkim        case ACPI_EXD_ADDRESS:
407167802Sjkim
408167802Sjkim            AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
409167802Sjkim            break;
410167802Sjkim
411167802Sjkim        case ACPI_EXD_STRING:
412167802Sjkim
413167802Sjkim            AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
414167802Sjkim            AcpiOsPrintf ("\n");
415167802Sjkim            break;
416167802Sjkim
417167802Sjkim        case ACPI_EXD_BUFFER:
418167802Sjkim
419167802Sjkim            ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
420167802Sjkim            break;
421167802Sjkim
422167802Sjkim        case ACPI_EXD_PACKAGE:
423167802Sjkim
424167802Sjkim            /* Dump the package contents */
425167802Sjkim
426167802Sjkim            AcpiOsPrintf ("\nPackage Contents:\n");
427167802Sjkim            AcpiExDumpPackageObj (ObjDesc, 0, 0);
428167802Sjkim            break;
429167802Sjkim
430167802Sjkim        case ACPI_EXD_FIELD:
431167802Sjkim
432167802Sjkim            AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
433167802Sjkim            break;
434167802Sjkim
435167802Sjkim        case ACPI_EXD_REFERENCE:
436167802Sjkim
437193267Sjkim            AcpiExOutString ("Class Name",
438193267Sjkim                ACPI_CAST_PTR (char, AcpiUtGetReferenceName (ObjDesc)));
439167802Sjkim            AcpiExDumpReferenceObj (ObjDesc);
440167802Sjkim            break;
441167802Sjkim
442167802Sjkim        default:
443193267Sjkim
444193267Sjkim            AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
445193267Sjkim                Info->Opcode);
446167802Sjkim            return;
447167802Sjkim        }
448167802Sjkim
449167802Sjkim        Info++;
450167802Sjkim        Count--;
451167802Sjkim    }
452167802Sjkim}
453167802Sjkim
454167802Sjkim
455167802Sjkim/*******************************************************************************
456167802Sjkim *
45777424Smsmith * FUNCTION:    AcpiExDumpOperand
45867754Smsmith *
459151937Sjkim * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped
460151937Sjkim *              Depth           - Current nesting depth
46167754Smsmith *
462138287Smarks * RETURN:      None
46367754Smsmith *
46491116Smsmith * DESCRIPTION: Dump an operand object
46567754Smsmith *
466151937Sjkim ******************************************************************************/
46767754Smsmith
46899679Siwasakivoid
46977424SmsmithAcpiExDumpOperand (
470138287Smarks    ACPI_OPERAND_OBJECT     *ObjDesc,
471138287Smarks    UINT32                  Depth)
47267754Smsmith{
47367754Smsmith    UINT32                  Length;
474138287Smarks    UINT32                  Index;
47567754Smsmith
47667754Smsmith
477167802Sjkim    ACPI_FUNCTION_NAME (ExDumpOperand)
47877424Smsmith
47977424Smsmith
48099146Siwasaki    if (!((ACPI_LV_EXEC & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
48187031Smsmith    {
48299679Siwasaki        return;
48387031Smsmith    }
48487031Smsmith
48591116Smsmith    if (!ObjDesc)
48667754Smsmith    {
487151937Sjkim        /* This could be a null element of a package */
488151937Sjkim
489138287Smarks        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
49099679Siwasaki        return;
49167754Smsmith    }
49267754Smsmith
49391116Smsmith    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
49467754Smsmith    {
495151937Sjkim        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
49699146Siwasaki        ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
49799679Siwasaki        return;
49867754Smsmith    }
49967754Smsmith
50099679Siwasaki    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
50167754Smsmith    {
502123315Snjl        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
503138287Smarks            "%p is not a node or operand object: [%s]\n",
504138287Smarks            ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
50591116Smsmith        ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
50699679Siwasaki        return;
50767754Smsmith    }
50867754Smsmith
509123315Snjl    /* ObjDesc is a valid object */
51067754Smsmith
511138287Smarks    if (Depth > 0)
512138287Smarks    {
513138287Smarks        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
514138287Smarks            Depth, " ", Depth, ObjDesc));
515138287Smarks    }
516138287Smarks    else
517138287Smarks    {
518138287Smarks        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
519138287Smarks    }
52067754Smsmith
521151937Sjkim    /* Decode object type */
522138287Smarks
523193267Sjkim    switch (ObjDesc->Common.Type)
52467754Smsmith    {
525107325Siwasaki    case ACPI_TYPE_LOCAL_REFERENCE:
52667754Smsmith
527193267Sjkim        AcpiOsPrintf ("Reference: [%s] ", AcpiUtGetReferenceName (ObjDesc));
528193267Sjkim
529193267Sjkim        switch (ObjDesc->Reference.Class)
53067754Smsmith        {
531193267Sjkim        case ACPI_REFCLASS_DEBUG:
53267754Smsmith
533193267Sjkim            AcpiOsPrintf ("\n");
53467754Smsmith            break;
53567754Smsmith
53667754Smsmith
537193267Sjkim        case ACPI_REFCLASS_INDEX:
53867754Smsmith
539193267Sjkim            AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
54067754Smsmith            break;
54167754Smsmith
54267754Smsmith
543193267Sjkim        case ACPI_REFCLASS_TABLE:
544100966Siwasaki
545193267Sjkim            AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
546100966Siwasaki            break;
547100966Siwasaki
548100966Siwasaki
549193267Sjkim        case ACPI_REFCLASS_REFOF:
55067754Smsmith
551193267Sjkim            AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
552193267Sjkim                AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
553193267Sjkim                    ObjDesc->Reference.Object)->Common.Type));
55467754Smsmith            break;
55567754Smsmith
55667754Smsmith
557193267Sjkim        case ACPI_REFCLASS_NAME:
55867754Smsmith
559193267Sjkim            AcpiOsPrintf ("- [%4.4s]\n", ObjDesc->Reference.Node->Name.Ascii);
56067754Smsmith            break;
56167754Smsmith
56267754Smsmith
563193267Sjkim        case ACPI_REFCLASS_ARG:
564193267Sjkim        case ACPI_REFCLASS_LOCAL:
565100966Siwasaki
566193267Sjkim            AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
56767754Smsmith            break;
56867754Smsmith
569100966Siwasaki
570193267Sjkim        default:    /* Unknown reference class */
57167754Smsmith
572193267Sjkim            AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
57367754Smsmith            break;
57467754Smsmith        }
57567754Smsmith        break;
57667754Smsmith
57767754Smsmith
57867754Smsmith    case ACPI_TYPE_BUFFER:
57967754Smsmith
580193267Sjkim        AcpiOsPrintf ("Buffer length %.2X @ %p\n",
581138287Smarks            ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
58267754Smsmith
58367754Smsmith        /* Debug only -- dump the buffer contents */
58467754Smsmith
58591116Smsmith        if (ObjDesc->Buffer.Pointer)
58667754Smsmith        {
587193267Sjkim            Length = ObjDesc->Buffer.Length;
588193267Sjkim            if (Length > 128)
58967754Smsmith            {
590193267Sjkim                Length = 128;
59167754Smsmith            }
592193267Sjkim
593193267Sjkim            AcpiOsPrintf ("Buffer Contents: (displaying length 0x%.2X)\n",
594193267Sjkim                Length);
595193267Sjkim            ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
59667754Smsmith        }
59767754Smsmith        break;
59867754Smsmith
59967754Smsmith
60071867Smsmith    case ACPI_TYPE_INTEGER:
60167754Smsmith
60287031Smsmith        AcpiOsPrintf ("Integer %8.8X%8.8X\n",
603138287Smarks            ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
60467754Smsmith        break;
60567754Smsmith
60667754Smsmith
60767754Smsmith    case ACPI_TYPE_PACKAGE:
60867754Smsmith
609138287Smarks        AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
610138287Smarks            ObjDesc->Package.Count, ObjDesc->Package.Elements);
61167754Smsmith
61267754Smsmith        /*
613138287Smarks         * If elements exist, package element pointer is valid,
61467754Smsmith         * and debug_level exceeds 1, dump package's elements.
61567754Smsmith         */
61691116Smsmith        if (ObjDesc->Package.Count &&
61791116Smsmith            ObjDesc->Package.Elements &&
61883174Smsmith            AcpiDbgLevel > 1)
61967754Smsmith        {
620138287Smarks            for (Index = 0; Index < ObjDesc->Package.Count; Index++)
62167754Smsmith            {
622138287Smarks                AcpiExDumpOperand (ObjDesc->Package.Elements[Index], Depth+1);
62367754Smsmith            }
62467754Smsmith        }
62567754Smsmith        break;
62667754Smsmith
62767754Smsmith
62867754Smsmith    case ACPI_TYPE_REGION:
62967754Smsmith
63087031Smsmith        AcpiOsPrintf ("Region %s (%X)",
63191116Smsmith            AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
63291116Smsmith            ObjDesc->Region.SpaceId);
63367754Smsmith
63467754Smsmith        /*
63567754Smsmith         * If the address and length have not been evaluated,
63667754Smsmith         * don't print them.
63767754Smsmith         */
63891116Smsmith        if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
63967754Smsmith        {
64087031Smsmith            AcpiOsPrintf ("\n");
64167754Smsmith        }
64267754Smsmith        else
64367754Smsmith        {
64487031Smsmith            AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
645193267Sjkim                ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address),
64691116Smsmith                ObjDesc->Region.Length);
64767754Smsmith        }
64867754Smsmith        break;
64967754Smsmith
65067754Smsmith
65167754Smsmith    case ACPI_TYPE_STRING:
65267754Smsmith
653107325Siwasaki        AcpiOsPrintf ("String length %X @ %p ",
654151937Sjkim            ObjDesc->String.Length,
655151937Sjkim            ObjDesc->String.Pointer);
656151937Sjkim
657107325Siwasaki        AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
658107325Siwasaki        AcpiOsPrintf ("\n");
65967754Smsmith        break;
66067754Smsmith
66167754Smsmith
662107325Siwasaki    case ACPI_TYPE_LOCAL_BANK_FIELD:
66367754Smsmith
66487031Smsmith        AcpiOsPrintf ("BankField\n");
66567754Smsmith        break;
66667754Smsmith
66767754Smsmith
668107325Siwasaki    case ACPI_TYPE_LOCAL_REGION_FIELD:
66967754Smsmith
670193267Sjkim        AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
671193267Sjkim            "byte=%X bit=%X of below:\n",
672151937Sjkim            ObjDesc->Field.BitLength,
673151937Sjkim            ObjDesc->Field.AccessByteWidth,
67491116Smsmith            ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
67591116Smsmith            ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
676151937Sjkim            ObjDesc->Field.BaseByteOffset,
677151937Sjkim            ObjDesc->Field.StartFieldBitOffset);
678151937Sjkim
679138287Smarks        AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1);
68067754Smsmith        break;
68167754Smsmith
68267754Smsmith
683107325Siwasaki    case ACPI_TYPE_LOCAL_INDEX_FIELD:
68467754Smsmith
68587031Smsmith        AcpiOsPrintf ("IndexField\n");
68667754Smsmith        break;
68767754Smsmith
68867754Smsmith
68977424Smsmith    case ACPI_TYPE_BUFFER_FIELD:
69067754Smsmith
691193267Sjkim        AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
692151937Sjkim            ObjDesc->BufferField.BitLength,
693151937Sjkim            ObjDesc->BufferField.BaseByteOffset,
69491116Smsmith            ObjDesc->BufferField.StartFieldBitOffset);
69567754Smsmith
69691116Smsmith        if (!ObjDesc->BufferField.BufferObj)
69767754Smsmith        {
698151937Sjkim            ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
69967754Smsmith        }
700193267Sjkim        else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
701151937Sjkim                    ACPI_TYPE_BUFFER)
70267754Smsmith        {
703151937Sjkim            AcpiOsPrintf ("*not a Buffer*\n");
70467754Smsmith        }
70567754Smsmith        else
70667754Smsmith        {
707138287Smarks            AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth+1);
70867754Smsmith        }
70967754Smsmith        break;
71067754Smsmith
71167754Smsmith
71267754Smsmith    case ACPI_TYPE_EVENT:
71367754Smsmith
71487031Smsmith        AcpiOsPrintf ("Event\n");
71567754Smsmith        break;
71667754Smsmith
71767754Smsmith
71867754Smsmith    case ACPI_TYPE_METHOD:
71967754Smsmith
720151937Sjkim        AcpiOsPrintf ("Method(%X) @ %p:%X\n",
72191116Smsmith            ObjDesc->Method.ParamCount,
722151937Sjkim            ObjDesc->Method.AmlStart,
723151937Sjkim            ObjDesc->Method.AmlLength);
72467754Smsmith        break;
72567754Smsmith
72667754Smsmith
72767754Smsmith    case ACPI_TYPE_MUTEX:
72867754Smsmith
72987031Smsmith        AcpiOsPrintf ("Mutex\n");
73067754Smsmith        break;
73167754Smsmith
73267754Smsmith
73367754Smsmith    case ACPI_TYPE_DEVICE:
73467754Smsmith
73587031Smsmith        AcpiOsPrintf ("Device\n");
73667754Smsmith        break;
73767754Smsmith
73867754Smsmith
73967754Smsmith    case ACPI_TYPE_POWER:
74067754Smsmith
74187031Smsmith        AcpiOsPrintf ("Power\n");
74267754Smsmith        break;
74367754Smsmith
74467754Smsmith
74567754Smsmith    case ACPI_TYPE_PROCESSOR:
74667754Smsmith
74787031Smsmith        AcpiOsPrintf ("Processor\n");
74867754Smsmith        break;
74967754Smsmith
75067754Smsmith
75167754Smsmith    case ACPI_TYPE_THERMAL:
75267754Smsmith
75387031Smsmith        AcpiOsPrintf ("Thermal\n");
75467754Smsmith        break;
75567754Smsmith
75667754Smsmith
75767754Smsmith    default:
75899679Siwasaki        /* Unknown Type */
75967754Smsmith
760193267Sjkim        AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
76167754Smsmith        break;
76267754Smsmith    }
76367754Smsmith
76499679Siwasaki    return;
76567754Smsmith}
76667754Smsmith
76767754Smsmith
768151937Sjkim/*******************************************************************************
76967754Smsmith *
77077424Smsmith * FUNCTION:    AcpiExDumpOperands
77167754Smsmith *
772193267Sjkim * PARAMETERS:  Operands            - A list of Operand objects
773193267Sjkim *              OpcodeName          - AML opcode name
774193267Sjkim *              NumOperands         - Operand count for this opcode
77567754Smsmith *
776193267Sjkim * DESCRIPTION: Dump the operands associated with the opcode
77767754Smsmith *
778151937Sjkim ******************************************************************************/
77967754Smsmith
78067754Smsmithvoid
78177424SmsmithAcpiExDumpOperands (
78267754Smsmith    ACPI_OPERAND_OBJECT     **Operands,
783193267Sjkim    const char              *OpcodeName,
784193267Sjkim    UINT32                  NumOperands)
78567754Smsmith{
786167802Sjkim    ACPI_FUNCTION_NAME (ExDumpOperands);
78782367Smsmith
78883174Smsmith
789193267Sjkim    if (!OpcodeName)
79067754Smsmith    {
791193267Sjkim        OpcodeName = "UNKNOWN";
79267754Smsmith    }
79367754Smsmith
79499146Siwasaki    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
795209746Sjkim        "**** Start operand dump for opcode [%s], %u operands\n",
796193267Sjkim        OpcodeName, NumOperands));
79767754Smsmith
798193267Sjkim    if (NumOperands == 0)
79977424Smsmith    {
800193267Sjkim        NumOperands = 1;
80177424Smsmith    }
80267754Smsmith
803193267Sjkim    /* Dump the individual operands */
80467754Smsmith
805193267Sjkim    while (NumOperands)
80667754Smsmith    {
807193267Sjkim        AcpiExDumpOperand (*Operands, 0);
808193267Sjkim        Operands++;
809193267Sjkim        NumOperands--;
81067754Smsmith    }
81167754Smsmith
81299146Siwasaki    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
813193267Sjkim        "**** End operand dump for [%s]\n", OpcodeName));
81467754Smsmith    return;
81567754Smsmith}
81667754Smsmith
81767754Smsmith
818151937Sjkim/*******************************************************************************
81967754Smsmith *
820151937Sjkim * FUNCTION:    AcpiExOut* functions
82187031Smsmith *
82287031Smsmith * PARAMETERS:  Title               - Descriptive text
82387031Smsmith *              Value               - Value to be displayed
82487031Smsmith *
82587031Smsmith * DESCRIPTION: Object dump output formatting functions.  These functions
82687031Smsmith *              reduce the number of format strings required and keeps them
82787031Smsmith *              all in one place for easy modification.
82887031Smsmith *
829151937Sjkim ******************************************************************************/
83087031Smsmith
831151937Sjkimstatic void
83287031SmsmithAcpiExOutString (
83387031Smsmith    char                    *Title,
83487031Smsmith    char                    *Value)
83587031Smsmith{
83687031Smsmith    AcpiOsPrintf ("%20s : %s\n", Title, Value);
83787031Smsmith}
83887031Smsmith
839151937Sjkimstatic void
84087031SmsmithAcpiExOutPointer (
84187031Smsmith    char                    *Title,
84287031Smsmith    void                    *Value)
84387031Smsmith{
84487031Smsmith    AcpiOsPrintf ("%20s : %p\n", Title, Value);
84587031Smsmith}
84687031Smsmith
84787031Smsmith
848151937Sjkim/*******************************************************************************
84987031Smsmith *
850167802Sjkim * FUNCTION:    AcpiExDumpNamespaceNode
85167754Smsmith *
852167802Sjkim * PARAMETERS:  Node                - Descriptor to dump
853151937Sjkim *              Flags               - Force display if TRUE
85467754Smsmith *
85567754Smsmith * DESCRIPTION: Dumps the members of the given.Node
85667754Smsmith *
857151937Sjkim ******************************************************************************/
85867754Smsmith
85967754Smsmithvoid
860167802SjkimAcpiExDumpNamespaceNode (
86167754Smsmith    ACPI_NAMESPACE_NODE     *Node,
86267754Smsmith    UINT32                  Flags)
86367754Smsmith{
86467754Smsmith
86591116Smsmith    ACPI_FUNCTION_ENTRY ();
86683174Smsmith
86783174Smsmith
86867754Smsmith    if (!Flags)
86967754Smsmith    {
87082367Smsmith        if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
87167754Smsmith        {
87267754Smsmith            return;
87367754Smsmith        }
87467754Smsmith    }
87567754Smsmith
876193267Sjkim    AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
877193267Sjkim    AcpiExOutString  ("Type", AcpiUtGetTypeName (Node->Type));
878193267Sjkim    AcpiExOutPointer ("Attached Object", AcpiNsGetAttachedObject (Node));
879209746Sjkim    AcpiExOutPointer ("Parent", Node->Parent);
880167802Sjkim
881167802Sjkim    AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
882167802Sjkim        AcpiExDumpNode);
88367754Smsmith}
88467754Smsmith
88567754Smsmith
886151937Sjkim/*******************************************************************************
88767754Smsmith *
888167802Sjkim * FUNCTION:    AcpiExDumpReferenceObj
889151937Sjkim *
890151937Sjkim * PARAMETERS:  Object              - Descriptor to dump
891151937Sjkim *
892151937Sjkim * DESCRIPTION: Dumps a reference object
893151937Sjkim *
894151937Sjkim ******************************************************************************/
895151937Sjkim
896151937Sjkimstatic void
897167802SjkimAcpiExDumpReferenceObj (
898151937Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc)
899151937Sjkim{
900151937Sjkim    ACPI_BUFFER             RetBuf;
901151937Sjkim    ACPI_STATUS             Status;
902151937Sjkim
903151937Sjkim
904167802Sjkim    RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
905167802Sjkim
906193267Sjkim    if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
907151937Sjkim    {
908193267Sjkim        AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
909167802Sjkim
910151937Sjkim        Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf);
911151937Sjkim        if (ACPI_FAILURE (Status))
912151937Sjkim        {
913193267Sjkim            AcpiOsPrintf (" Could not convert name to pathname\n");
914151937Sjkim        }
915151937Sjkim        else
916151937Sjkim        {
917151937Sjkim           AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
918167802Sjkim           ACPI_FREE (RetBuf.Pointer);
919151937Sjkim        }
920151937Sjkim    }
921151937Sjkim    else if (ObjDesc->Reference.Object)
922151937Sjkim    {
923193267Sjkim        if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
924193267Sjkim        {
925193267Sjkim            AcpiOsPrintf (" Target: %p", ObjDesc->Reference.Object);
926193267Sjkim            if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
927193267Sjkim            {
928193267Sjkim                AcpiOsPrintf (" Table Index: %X\n", ObjDesc->Reference.Value);
929193267Sjkim            }
930193267Sjkim            else
931193267Sjkim            {
932193267Sjkim                AcpiOsPrintf (" Target: %p [%s]\n", ObjDesc->Reference.Object,
933193267Sjkim                    AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
934193267Sjkim                        ObjDesc->Reference.Object)->Common.Type));
935193267Sjkim            }
936193267Sjkim        }
937193267Sjkim        else
938193267Sjkim        {
939193267Sjkim            AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
940193267Sjkim        }
941151937Sjkim    }
942151937Sjkim}
943151937Sjkim
944151937Sjkim
945151937Sjkim/*******************************************************************************
946151937Sjkim *
947167802Sjkim * FUNCTION:    AcpiExDumpPackageObj
948151937Sjkim *
949167802Sjkim * PARAMETERS:  ObjDesc             - Descriptor to dump
950151937Sjkim *              Level               - Indentation Level
951151937Sjkim *              Index               - Package index for this object
952151937Sjkim *
953151937Sjkim * DESCRIPTION: Dumps the elements of the package
954151937Sjkim *
955151937Sjkim ******************************************************************************/
956151937Sjkim
957151937Sjkimstatic void
958167802SjkimAcpiExDumpPackageObj (
959151937Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc,
960151937Sjkim    UINT32                  Level,
961151937Sjkim    UINT32                  Index)
962151937Sjkim{
963151937Sjkim    UINT32                  i;
964151937Sjkim
965151937Sjkim
966151937Sjkim    /* Indentation and index output */
967151937Sjkim
968151937Sjkim    if (Level > 0)
969151937Sjkim    {
970151937Sjkim        for (i = 0; i < Level; i++)
971151937Sjkim        {
972151937Sjkim            AcpiOsPrintf ("  ");
973151937Sjkim        }
974151937Sjkim
975151937Sjkim        AcpiOsPrintf ("[%.2d] ", Index);
976151937Sjkim    }
977151937Sjkim
978151937Sjkim    AcpiOsPrintf ("%p ", ObjDesc);
979151937Sjkim
980151937Sjkim    /* Null package elements are allowed */
981151937Sjkim
982151937Sjkim    if (!ObjDesc)
983151937Sjkim    {
984151937Sjkim        AcpiOsPrintf ("[Null Object]\n");
985151937Sjkim        return;
986151937Sjkim    }
987151937Sjkim
988151937Sjkim    /* Packages may only contain a few object types */
989151937Sjkim
990193267Sjkim    switch (ObjDesc->Common.Type)
991151937Sjkim    {
992151937Sjkim    case ACPI_TYPE_INTEGER:
993151937Sjkim
994151937Sjkim        AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
995193267Sjkim            ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
996151937Sjkim        break;
997151937Sjkim
998151937Sjkim
999151937Sjkim    case ACPI_TYPE_STRING:
1000151937Sjkim
1001151937Sjkim        AcpiOsPrintf ("[String]  Value: ");
1002151937Sjkim        for (i = 0; i < ObjDesc->String.Length; i++)
1003151937Sjkim        {
1004151937Sjkim            AcpiOsPrintf ("%c", ObjDesc->String.Pointer[i]);
1005151937Sjkim        }
1006151937Sjkim        AcpiOsPrintf ("\n");
1007151937Sjkim        break;
1008151937Sjkim
1009151937Sjkim
1010151937Sjkim    case ACPI_TYPE_BUFFER:
1011151937Sjkim
1012151937Sjkim        AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
1013151937Sjkim        if (ObjDesc->Buffer.Length)
1014151937Sjkim        {
1015167802Sjkim            AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
1016193267Sjkim                ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
1017151937Sjkim        }
1018151937Sjkim        else
1019151937Sjkim        {
1020151937Sjkim            AcpiOsPrintf ("\n");
1021151937Sjkim        }
1022151937Sjkim        break;
1023151937Sjkim
1024151937Sjkim
1025151937Sjkim    case ACPI_TYPE_PACKAGE:
1026151937Sjkim
1027209746Sjkim        AcpiOsPrintf ("[Package] Contains %u Elements:\n",
1028193267Sjkim            ObjDesc->Package.Count);
1029151937Sjkim
1030151937Sjkim        for (i = 0; i < ObjDesc->Package.Count; i++)
1031151937Sjkim        {
1032167802Sjkim            AcpiExDumpPackageObj (ObjDesc->Package.Elements[i], Level+1, i);
1033151937Sjkim        }
1034151937Sjkim        break;
1035151937Sjkim
1036151937Sjkim
1037151937Sjkim    case ACPI_TYPE_LOCAL_REFERENCE:
1038151937Sjkim
1039193267Sjkim        AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
1040193267Sjkim            AcpiUtGetReferenceName (ObjDesc),
1041193267Sjkim            ObjDesc->Reference.Class);
1042167802Sjkim        AcpiExDumpReferenceObj (ObjDesc);
1043151937Sjkim        break;
1044151937Sjkim
1045151937Sjkim
1046151937Sjkim    default:
1047151937Sjkim
1048193267Sjkim        AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type);
1049151937Sjkim        break;
1050151937Sjkim    }
1051151937Sjkim}
1052151937Sjkim
1053151937Sjkim
1054151937Sjkim/*******************************************************************************
1055151937Sjkim *
105677424Smsmith * FUNCTION:    AcpiExDumpObjectDescriptor
105767754Smsmith *
1058167802Sjkim * PARAMETERS:  ObjDesc             - Descriptor to dump
1059151937Sjkim *              Flags               - Force display if TRUE
106067754Smsmith *
106167754Smsmith * DESCRIPTION: Dumps the members of the object descriptor given.
106267754Smsmith *
1063151937Sjkim ******************************************************************************/
106467754Smsmith
106567754Smsmithvoid
106677424SmsmithAcpiExDumpObjectDescriptor (
106767754Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc,
106867754Smsmith    UINT32                  Flags)
106967754Smsmith{
1070167802Sjkim    ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
107182367Smsmith
107282367Smsmith
1073151937Sjkim    if (!ObjDesc)
1074151937Sjkim    {
1075151937Sjkim        return_VOID;
1076151937Sjkim    }
107767754Smsmith
107867754Smsmith    if (!Flags)
107967754Smsmith    {
108083174Smsmith        if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
108167754Smsmith        {
1082100966Siwasaki            return_VOID;
108367754Smsmith        }
108467754Smsmith    }
108567754Smsmith
1086104470Siwasaki    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1087104470Siwasaki    {
1088167802Sjkim        AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
1089167802Sjkim
1090138287Smarks        AcpiOsPrintf ("\nAttached Object (%p):\n",
1091138287Smarks            ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object);
1092167802Sjkim
1093138287Smarks        AcpiExDumpObjectDescriptor (
1094138287Smarks            ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object, Flags);
1095138287Smarks        return_VOID;
1096104470Siwasaki    }
1097104470Siwasaki
109899679Siwasaki    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
109967754Smsmith    {
1100138287Smarks        AcpiOsPrintf (
1101138287Smarks            "ExDumpObjectDescriptor: %p is not an ACPI operand object: [%s]\n",
1102138287Smarks            ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
1103100966Siwasaki        return_VOID;
110467754Smsmith    }
110567754Smsmith
1106167802Sjkim    if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX)
110767754Smsmith    {
1108167802Sjkim        return_VOID;
1109167802Sjkim    }
111067754Smsmith
1111167802Sjkim    /* Common Fields */
111267754Smsmith
1113167802Sjkim    AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
111467754Smsmith
1115167802Sjkim    /* Object-specific fields */
111667754Smsmith
1117167802Sjkim    AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
111867754Smsmith    return_VOID;
111967754Smsmith}
112067754Smsmith
112167754Smsmith#endif
112267754Smsmith
1123