167754Smsmith/******************************************************************************
267754Smsmith *
377424Smsmith * Module Name: exdump - Interpreter debug output routines
467754Smsmith *
567754Smsmith *****************************************************************************/
667754Smsmith
7217365Sjkim/*
8306536Sjkim * Copyright (C) 2000 - 2016, 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
44193341Sjkim#include <contrib/dev/acpica/include/acpi.h>
45193341Sjkim#include <contrib/dev/acpica/include/accommon.h>
46193341Sjkim#include <contrib/dev/acpica/include/acinterp.h>
47193341Sjkim#include <contrib/dev/acpica/include/amlcode.h>
48193341Sjkim#include <contrib/dev/acpica/include/acnamesp.h>
4967754Smsmith
50193267Sjkim
5177424Smsmith#define _COMPONENT          ACPI_EXECUTER
5291116Smsmith        ACPI_MODULE_NAME    ("exdump")
5367754Smsmith
5467754Smsmith/*
5567754Smsmith * The following routines are used for debug output only
5667754Smsmith */
57102550Siwasaki#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
5867754Smsmith
59151937Sjkim/* Local prototypes */
60151937Sjkim
61151937Sjkimstatic void
62151937SjkimAcpiExOutString (
63306536Sjkim    const char              *Title,
64306536Sjkim    const char              *Value);
65151937Sjkim
66151937Sjkimstatic void
67151937SjkimAcpiExOutPointer (
68306536Sjkim    const char              *Title,
69306536Sjkim    const void              *Value);
70151937Sjkim
71151937Sjkimstatic void
72167802SjkimAcpiExDumpObject (
73167802Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc,
74167802Sjkim    ACPI_EXDUMP_INFO        *Info);
75151937Sjkim
76151937Sjkimstatic void
77167802SjkimAcpiExDumpReferenceObj (
78151937Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc);
79151937Sjkim
80151937Sjkimstatic void
81167802SjkimAcpiExDumpPackageObj (
82151937Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc,
83151937Sjkim    UINT32                  Level,
84151937Sjkim    UINT32                  Index);
85151937Sjkim
86151937Sjkim
87151937Sjkim/*******************************************************************************
8867754Smsmith *
89167802Sjkim * Object Descriptor info tables
90167802Sjkim *
91167802Sjkim * Note: The first table entry must be an INIT opcode and must contain
92167802Sjkim * the table length (number of table entries)
93167802Sjkim *
94167802Sjkim ******************************************************************************/
95167802Sjkim
96167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpInteger[2] =
97167802Sjkim{
98167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger),        NULL},
99167802Sjkim    {ACPI_EXD_UINT64,   ACPI_EXD_OFFSET (Integer.Value),                "Value"}
100167802Sjkim};
101167802Sjkim
102167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpString[4] =
103167802Sjkim{
104167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpString),         NULL},
105167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (String.Length),                "Length"},
106167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (String.Pointer),               "Pointer"},
107167802Sjkim    {ACPI_EXD_STRING,   0,                                              NULL}
108167802Sjkim};
109167802Sjkim
110167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpBuffer[5] =
111167802Sjkim{
112167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer),         NULL},
113167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Buffer.Length),                "Length"},
114167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Pointer),               "Pointer"},
115281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
116167802Sjkim    {ACPI_EXD_BUFFER,   0,                                              NULL}
117167802Sjkim};
118167802Sjkim
119281075Sdimstatic ACPI_EXDUMP_INFO     AcpiExDumpPackage[6] =
120167802Sjkim{
121167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage),        NULL},
122281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Package.Node),                 "Parent Node"},
123167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Package.Flags),                "Flags"},
124167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Package.Count),                "Elements"},
125167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Package.Elements),             "Element List"},
126167802Sjkim    {ACPI_EXD_PACKAGE,  0,                                              NULL}
127167802Sjkim};
128167802Sjkim
129167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
130167802Sjkim{
131167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
132234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[0]),         "System Notify"},
133281075Sdim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[1]),         "Device Notify"},
134281075Sdim    {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler),               "Handler"}
135167802Sjkim};
136167802Sjkim
137167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
138167802Sjkim{
139167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent),          NULL},
140167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Event.OsSemaphore),            "OsSemaphore"}
141167802Sjkim};
142167802Sjkim
143193267Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpMethod[9] =
144167802Sjkim{
145167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod),         NULL},
146217365Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.InfoFlags),             "Info Flags"},
147193267Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ParamCount),            "Parameter Count"},
148167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.SyncLevel),             "Sync Level"},
149167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.Mutex),                 "Mutex"},
150167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.OwnerId),               "Owner Id"},
151167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ThreadCount),           "Thread Count"},
152167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Method.AmlLength),             "Aml Length"},
153167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.AmlStart),              "Aml Start"}
154167802Sjkim};
155167802Sjkim
156281075Sdimstatic ACPI_EXDUMP_INFO     AcpiExDumpMutex[6] =
157167802Sjkim{
158167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex),          NULL},
159167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.SyncLevel),              "Sync Level"},
160281075Sdim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel),      "Original 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
166281075Sdimstatic ACPI_EXDUMP_INFO     AcpiExDumpRegion[8] =
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"},
171281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Region.Node),                  "Parent Node"},
172167802Sjkim    {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
173167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
174281075Sdim    {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
175167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
176167802Sjkim};
177167802Sjkim
178281075Sdimstatic ACPI_EXDUMP_INFO     AcpiExDumpPower[6] =
179167802Sjkim{
180167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
181167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
182167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
183234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[0]),  "System Notify"},
184281075Sdim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[1]),  "Device Notify"},
185281075Sdim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.Handler),        "Handler"}
186167802Sjkim};
187167802Sjkim
188167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
189167802Sjkim{
190167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor),      NULL},
191167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
192167802Sjkim    {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
193167802Sjkim    {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
194234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[0]),      "System Notify"},
195234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[1]),      "Device Notify"},
196167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
197167802Sjkim};
198167802Sjkim
199167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
200167802Sjkim{
201167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
202234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]),    "System Notify"},
203234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]),    "Device Notify"},
204167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
205167802Sjkim};
206167802Sjkim
207167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
208167802Sjkim{
209167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField),    NULL},
210167802Sjkim    {ACPI_EXD_FIELD,    0,                                              NULL},
211167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
212167802Sjkim};
213167802Sjkim
214228110Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpRegionField[5] =
215167802Sjkim{
216167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
217167802Sjkim    {ACPI_EXD_FIELD,    0,                                              NULL},
218228110Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Field.AccessLength),           "AccessLength"},
219228110Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"},
220228110Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.ResourceBuffer),         "ResourceBuffer"}
221167802Sjkim};
222167802Sjkim
223167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
224167802Sjkim{
225167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
226167802Sjkim    {ACPI_EXD_FIELD,    0,                                              NULL},
227167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (BankField.Value),              "Value"},
228167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.RegionObj),          "Region Object"},
229167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.BankObj),            "Bank Object"}
230167802Sjkim};
231167802Sjkim
232167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
233167802Sjkim{
234167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
235167802Sjkim    {ACPI_EXD_FIELD,    0,                                              NULL},
236167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (IndexField.Value),             "Value"},
237167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.IndexObj),          "Index Object"},
238167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
239167802Sjkim};
240167802Sjkim
241306536Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpReference[9] =
242167802Sjkim{
243167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpReference),       NULL},
244193267Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.Class),              "Class"},
245167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.TargetType),         "Target Type"},
246193267Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Reference.Value),              "Value"},
247167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
248281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Reference.Node),               "Node"},
249167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
250306536Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.IndexPointer),       "Index Pointer"},
251167802Sjkim    {ACPI_EXD_REFERENCE,0,                                              NULL}
252167802Sjkim};
253167802Sjkim
254167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
255167802Sjkim{
256167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
257167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (AddressSpace.SpaceId),         "Space Id"},
258281075Sdim    {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
259281075Sdim    {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
260281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
261167802Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
262167802Sjkim};
263167802Sjkim
264234623Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpNotify[7] =
265167802Sjkim{
266167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
267281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
268234623Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Notify.HandlerType),           "Handler Type"},
269234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Handler),               "Handler"},
270234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"},
271234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[0]),               "Next System Notify"},
272234623Sjkim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[1]),               "Next Device Notify"}
273167802Sjkim};
274167802Sjkim
275281075Sdimstatic ACPI_EXDUMP_INFO     AcpiExDumpExtra[6] =
276281075Sdim{
277281075Sdim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra),          NULL},
278281075Sdim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.Method_REG),             "_REG Method"},
279281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Extra.ScopeNode),              "Scope Node"},
280281075Sdim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.RegionContext),          "Region Context"},
281281075Sdim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.AmlStart),               "Aml Start"},
282281075Sdim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Extra.AmlLength),              "Aml Length"}
283281075Sdim};
284167802Sjkim
285281075Sdimstatic ACPI_EXDUMP_INFO     AcpiExDumpData[3] =
286281075Sdim{
287281075Sdim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpData),           NULL},
288281075Sdim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Handler),                 "Handler"},
289281075Sdim    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Pointer),                 "Raw Data"}
290281075Sdim};
291281075Sdim
292167802Sjkim/* Miscellaneous tables */
293167802Sjkim
294281075Sdimstatic ACPI_EXDUMP_INFO     AcpiExDumpCommon[5] =
295167802Sjkim{
296167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon),         NULL},
297167802Sjkim    {ACPI_EXD_TYPE ,    0,                                              NULL},
298167802Sjkim    {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Common.ReferenceCount),        "Reference Count"},
299281075Sdim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"},
300281075Sdim    {ACPI_EXD_LIST,     ACPI_EXD_OFFSET (Common.NextObject),            "Object List"}
301167802Sjkim};
302167802Sjkim
303167802Sjkimstatic ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
304167802Sjkim{
305167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon),    NULL},
306167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.FieldFlags),       "Field Flags"},
307167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.AccessByteWidth),  "Access Byte Width"},
308167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
309167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
310167802Sjkim    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
311281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
312167802Sjkim};
313167802Sjkim
314281075Sdimstatic ACPI_EXDUMP_INFO     AcpiExDumpNode[7] =
315167802Sjkim{
316167802Sjkim    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
317167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
318167802Sjkim    {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
319281075Sdim    {ACPI_EXD_LIST,     ACPI_EXD_NSOFFSET (Object),                     "Object List"},
320281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Parent),                     "Parent"},
321281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Child),                      "Child"},
322281075Sdim    {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Peer),                       "Peer"}
323167802Sjkim};
324167802Sjkim
325167802Sjkim
326167802Sjkim/* Dispatch table, indexed by object type */
327167802Sjkim
328167802Sjkimstatic ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
329167802Sjkim{
330167802Sjkim    NULL,
331167802Sjkim    AcpiExDumpInteger,
332167802Sjkim    AcpiExDumpString,
333167802Sjkim    AcpiExDumpBuffer,
334167802Sjkim    AcpiExDumpPackage,
335167802Sjkim    NULL,
336167802Sjkim    AcpiExDumpDevice,
337167802Sjkim    AcpiExDumpEvent,
338167802Sjkim    AcpiExDumpMethod,
339167802Sjkim    AcpiExDumpMutex,
340167802Sjkim    AcpiExDumpRegion,
341167802Sjkim    AcpiExDumpPower,
342167802Sjkim    AcpiExDumpProcessor,
343167802Sjkim    AcpiExDumpThermal,
344167802Sjkim    AcpiExDumpBufferField,
345167802Sjkim    NULL,
346167802Sjkim    NULL,
347167802Sjkim    AcpiExDumpRegionField,
348167802Sjkim    AcpiExDumpBankField,
349167802Sjkim    AcpiExDumpIndexField,
350167802Sjkim    AcpiExDumpReference,
351167802Sjkim    NULL,
352167802Sjkim    NULL,
353167802Sjkim    AcpiExDumpNotify,
354167802Sjkim    AcpiExDumpAddressHandler,
355167802Sjkim    NULL,
356167802Sjkim    NULL,
357281075Sdim    NULL,
358281075Sdim    AcpiExDumpExtra,
359281075Sdim    AcpiExDumpData
360167802Sjkim};
361167802Sjkim
362167802Sjkim
363167802Sjkim/*******************************************************************************
364167802Sjkim *
365167802Sjkim * FUNCTION:    AcpiExDumpObject
366167802Sjkim *
367167802Sjkim * PARAMETERS:  ObjDesc             - Descriptor to dump
368167802Sjkim *              Info                - Info table corresponding to this object
369167802Sjkim *                                    type
370167802Sjkim *
371167802Sjkim * RETURN:      None
372167802Sjkim *
373167802Sjkim * DESCRIPTION: Walk the info table for this object
374167802Sjkim *
375167802Sjkim ******************************************************************************/
376167802Sjkim
377167802Sjkimstatic void
378167802SjkimAcpiExDumpObject (
379167802Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc,
380167802Sjkim    ACPI_EXDUMP_INFO        *Info)
381167802Sjkim{
382167802Sjkim    UINT8                   *Target;
383306536Sjkim    const char              *Name;
384167802Sjkim    UINT8                   Count;
385281075Sdim    ACPI_OPERAND_OBJECT     *Start;
386281075Sdim    ACPI_OPERAND_OBJECT     *Data = NULL;
387281075Sdim    ACPI_OPERAND_OBJECT     *Next;
388281075Sdim    ACPI_NAMESPACE_NODE     *Node;
389167802Sjkim
390167802Sjkim
391167802Sjkim    if (!Info)
392167802Sjkim    {
393167802Sjkim        AcpiOsPrintf (
394167802Sjkim            "ExDumpObject: Display not implemented for object type %s\n",
395167802Sjkim            AcpiUtGetObjectTypeName (ObjDesc));
396167802Sjkim        return;
397167802Sjkim    }
398167802Sjkim
399167802Sjkim    /* First table entry must contain the table length (# of table entries) */
400167802Sjkim
401167802Sjkim    Count = Info->Offset;
402167802Sjkim
403167802Sjkim    while (Count)
404167802Sjkim    {
405167802Sjkim        Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
406167802Sjkim        Name = Info->Name;
407167802Sjkim
408167802Sjkim        switch (Info->Opcode)
409167802Sjkim        {
410167802Sjkim        case ACPI_EXD_INIT:
411250838Sjkim
412167802Sjkim            break;
413167802Sjkim
414167802Sjkim        case ACPI_EXD_TYPE:
415193267Sjkim
416281075Sdim            AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
417281075Sdim                ObjDesc->Common.Type, AcpiUtGetObjectTypeName (ObjDesc));
418167802Sjkim            break;
419167802Sjkim
420167802Sjkim        case ACPI_EXD_UINT8:
421167802Sjkim
422167802Sjkim            AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
423167802Sjkim            break;
424167802Sjkim
425167802Sjkim        case ACPI_EXD_UINT16:
426167802Sjkim
427167802Sjkim            AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
428167802Sjkim            break;
429167802Sjkim
430167802Sjkim        case ACPI_EXD_UINT32:
431167802Sjkim
432167802Sjkim            AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
433167802Sjkim            break;
434167802Sjkim
435167802Sjkim        case ACPI_EXD_UINT64:
436167802Sjkim
437167802Sjkim            AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
438193267Sjkim                ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
439167802Sjkim            break;
440167802Sjkim
441167802Sjkim        case ACPI_EXD_POINTER:
442167802Sjkim        case ACPI_EXD_ADDRESS:
443167802Sjkim
444167802Sjkim            AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
445167802Sjkim            break;
446167802Sjkim
447167802Sjkim        case ACPI_EXD_STRING:
448167802Sjkim
449167802Sjkim            AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
450167802Sjkim            AcpiOsPrintf ("\n");
451167802Sjkim            break;
452167802Sjkim
453167802Sjkim        case ACPI_EXD_BUFFER:
454167802Sjkim
455306536Sjkim            ACPI_DUMP_BUFFER (
456306536Sjkim                ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
457167802Sjkim            break;
458167802Sjkim
459167802Sjkim        case ACPI_EXD_PACKAGE:
460167802Sjkim
461167802Sjkim            /* Dump the package contents */
462167802Sjkim
463167802Sjkim            AcpiOsPrintf ("\nPackage Contents:\n");
464167802Sjkim            AcpiExDumpPackageObj (ObjDesc, 0, 0);
465167802Sjkim            break;
466167802Sjkim
467167802Sjkim        case ACPI_EXD_FIELD:
468167802Sjkim
469167802Sjkim            AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
470167802Sjkim            break;
471167802Sjkim
472167802Sjkim        case ACPI_EXD_REFERENCE:
473167802Sjkim
474306536Sjkim            AcpiExOutString ("Class Name", AcpiUtGetReferenceName (ObjDesc));
475167802Sjkim            AcpiExDumpReferenceObj (ObjDesc);
476167802Sjkim            break;
477167802Sjkim
478281075Sdim        case ACPI_EXD_LIST:
479281075Sdim
480281075Sdim            Start = *ACPI_CAST_PTR (void *, Target);
481281075Sdim            Next = Start;
482281075Sdim
483281075Sdim            AcpiOsPrintf ("%20s : %p", Name, Next);
484281075Sdim            if (Next)
485281075Sdim            {
486281075Sdim                AcpiOsPrintf ("(%s %2.2X)",
487281075Sdim                    AcpiUtGetObjectTypeName (Next), Next->Common.Type);
488281075Sdim
489281075Sdim                while (Next->Common.NextObject)
490281075Sdim                {
491281075Sdim                    if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
492281075Sdim                        !Data)
493281075Sdim                    {
494281075Sdim                        Data = Next;
495281075Sdim                    }
496281075Sdim
497281075Sdim                    Next = Next->Common.NextObject;
498281075Sdim                    AcpiOsPrintf ("->%p(%s %2.2X)", Next,
499281075Sdim                        AcpiUtGetObjectTypeName (Next), Next->Common.Type);
500281075Sdim
501281075Sdim                    if ((Next == Start) || (Next == Data))
502281075Sdim                    {
503306536Sjkim                        AcpiOsPrintf (
504306536Sjkim                            "\n**** Error: Object list appears to be circular linked");
505281075Sdim                        break;
506281075Sdim                    }
507281075Sdim                }
508281075Sdim            }
509281075Sdim
510281075Sdim            AcpiOsPrintf ("\n");
511281075Sdim            break;
512281075Sdim
513281075Sdim        case ACPI_EXD_HDLR_LIST:
514281075Sdim
515281075Sdim            Start = *ACPI_CAST_PTR (void *, Target);
516281075Sdim            Next = Start;
517281075Sdim
518281075Sdim            AcpiOsPrintf ("%20s : %p", Name, Next);
519281075Sdim            if (Next)
520281075Sdim            {
521281075Sdim                AcpiOsPrintf ("(%s %2.2X)",
522306536Sjkim                    AcpiUtGetObjectTypeName (Next),
523306536Sjkim                    Next->AddressSpace.SpaceId);
524281075Sdim
525281075Sdim                while (Next->AddressSpace.Next)
526281075Sdim                {
527281075Sdim                    if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
528281075Sdim                        !Data)
529281075Sdim                    {
530281075Sdim                        Data = Next;
531281075Sdim                    }
532281075Sdim
533281075Sdim                    Next = Next->AddressSpace.Next;
534281075Sdim                    AcpiOsPrintf ("->%p(%s %2.2X)", Next,
535306536Sjkim                        AcpiUtGetObjectTypeName (Next),
536306536Sjkim                        Next->AddressSpace.SpaceId);
537281075Sdim
538281075Sdim                    if ((Next == Start) || (Next == Data))
539281075Sdim                    {
540306536Sjkim                        AcpiOsPrintf (
541306536Sjkim                            "\n**** Error: Handler list appears to be circular linked");
542281075Sdim                        break;
543281075Sdim                    }
544281075Sdim                }
545281075Sdim            }
546281075Sdim
547281075Sdim            AcpiOsPrintf ("\n");
548281075Sdim            break;
549281075Sdim
550281075Sdim        case ACPI_EXD_RGN_LIST:
551281075Sdim
552281075Sdim            Start = *ACPI_CAST_PTR (void *, Target);
553281075Sdim            Next = Start;
554281075Sdim
555281075Sdim            AcpiOsPrintf ("%20s : %p", Name, Next);
556281075Sdim            if (Next)
557281075Sdim            {
558281075Sdim                AcpiOsPrintf ("(%s %2.2X)",
559281075Sdim                    AcpiUtGetObjectTypeName (Next), Next->Common.Type);
560281075Sdim
561281075Sdim                while (Next->Region.Next)
562281075Sdim                {
563281075Sdim                    if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
564281075Sdim                        !Data)
565281075Sdim                    {
566281075Sdim                        Data = Next;
567281075Sdim                    }
568281075Sdim
569281075Sdim                    Next = Next->Region.Next;
570281075Sdim                    AcpiOsPrintf ("->%p(%s %2.2X)", Next,
571281075Sdim                        AcpiUtGetObjectTypeName (Next), Next->Common.Type);
572281075Sdim
573281075Sdim                    if ((Next == Start) || (Next == Data))
574281075Sdim                    {
575306536Sjkim                        AcpiOsPrintf (
576306536Sjkim                            "\n**** Error: Region list appears to be circular linked");
577281075Sdim                        break;
578281075Sdim                    }
579281075Sdim                }
580281075Sdim            }
581281075Sdim
582281075Sdim            AcpiOsPrintf ("\n");
583281075Sdim            break;
584281075Sdim
585281075Sdim        case ACPI_EXD_NODE:
586281075Sdim
587281075Sdim            Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target);
588281075Sdim
589281075Sdim            AcpiOsPrintf ("%20s : %p", Name, Node);
590281075Sdim            if (Node)
591281075Sdim            {
592281075Sdim                AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii);
593281075Sdim            }
594281075Sdim            AcpiOsPrintf ("\n");
595281075Sdim            break;
596281075Sdim
597167802Sjkim        default:
598193267Sjkim
599193267Sjkim            AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
600193267Sjkim                Info->Opcode);
601167802Sjkim            return;
602167802Sjkim        }
603167802Sjkim
604167802Sjkim        Info++;
605167802Sjkim        Count--;
606167802Sjkim    }
607167802Sjkim}
608167802Sjkim
609167802Sjkim
610167802Sjkim/*******************************************************************************
611167802Sjkim *
61277424Smsmith * FUNCTION:    AcpiExDumpOperand
61367754Smsmith *
614151937Sjkim * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped
615151937Sjkim *              Depth           - Current nesting depth
61667754Smsmith *
617138287Smarks * RETURN:      None
61867754Smsmith *
61991116Smsmith * DESCRIPTION: Dump an operand object
62067754Smsmith *
621151937Sjkim ******************************************************************************/
62267754Smsmith
62399679Siwasakivoid
62477424SmsmithAcpiExDumpOperand (
625138287Smarks    ACPI_OPERAND_OBJECT     *ObjDesc,
626138287Smarks    UINT32                  Depth)
62767754Smsmith{
62867754Smsmith    UINT32                  Length;
629138287Smarks    UINT32                  Index;
63067754Smsmith
63167754Smsmith
632167802Sjkim    ACPI_FUNCTION_NAME (ExDumpOperand)
63377424Smsmith
63477424Smsmith
635245582Sjkim    /* Check if debug output enabled */
636245582Sjkim
637245582Sjkim    if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT))
63887031Smsmith    {
63999679Siwasaki        return;
64087031Smsmith    }
64187031Smsmith
64291116Smsmith    if (!ObjDesc)
64367754Smsmith    {
644151937Sjkim        /* This could be a null element of a package */
645151937Sjkim
646138287Smarks        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
64799679Siwasaki        return;
64867754Smsmith    }
64967754Smsmith
65091116Smsmith    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
65167754Smsmith    {
652151937Sjkim        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
65399146Siwasaki        ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
65499679Siwasaki        return;
65567754Smsmith    }
65667754Smsmith
65799679Siwasaki    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
65867754Smsmith    {
659123315Snjl        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
660138287Smarks            "%p is not a node or operand object: [%s]\n",
661138287Smarks            ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
66291116Smsmith        ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
66399679Siwasaki        return;
66467754Smsmith    }
66567754Smsmith
666123315Snjl    /* ObjDesc is a valid object */
66767754Smsmith
668138287Smarks    if (Depth > 0)
669138287Smarks    {
670138287Smarks        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
671138287Smarks            Depth, " ", Depth, ObjDesc));
672138287Smarks    }
673138287Smarks    else
674138287Smarks    {
675138287Smarks        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
676138287Smarks    }
67767754Smsmith
678151937Sjkim    /* Decode object type */
679138287Smarks
680193267Sjkim    switch (ObjDesc->Common.Type)
68167754Smsmith    {
682107325Siwasaki    case ACPI_TYPE_LOCAL_REFERENCE:
68367754Smsmith
684306536Sjkim        AcpiOsPrintf ("Reference: [%s] ",
685306536Sjkim            AcpiUtGetReferenceName (ObjDesc));
686193267Sjkim
687193267Sjkim        switch (ObjDesc->Reference.Class)
68867754Smsmith        {
689193267Sjkim        case ACPI_REFCLASS_DEBUG:
69067754Smsmith
691193267Sjkim            AcpiOsPrintf ("\n");
69267754Smsmith            break;
69367754Smsmith
694193267Sjkim        case ACPI_REFCLASS_INDEX:
69567754Smsmith
696193267Sjkim            AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
69767754Smsmith            break;
69867754Smsmith
699193267Sjkim        case ACPI_REFCLASS_TABLE:
700100966Siwasaki
701193267Sjkim            AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
702100966Siwasaki            break;
703100966Siwasaki
704193267Sjkim        case ACPI_REFCLASS_REFOF:
70567754Smsmith
706193267Sjkim            AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
707193267Sjkim                AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
708193267Sjkim                    ObjDesc->Reference.Object)->Common.Type));
70967754Smsmith            break;
71067754Smsmith
711193267Sjkim        case ACPI_REFCLASS_NAME:
71267754Smsmith
713306536Sjkim            AcpiOsPrintf ("- [%4.4s]\n",
714306536Sjkim                ObjDesc->Reference.Node->Name.Ascii);
71567754Smsmith            break;
71667754Smsmith
717193267Sjkim        case ACPI_REFCLASS_ARG:
718193267Sjkim        case ACPI_REFCLASS_LOCAL:
719100966Siwasaki
720193267Sjkim            AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
72167754Smsmith            break;
72267754Smsmith
723193267Sjkim        default:    /* Unknown reference class */
72467754Smsmith
725193267Sjkim            AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
72667754Smsmith            break;
72767754Smsmith        }
72867754Smsmith        break;
72967754Smsmith
73067754Smsmith    case ACPI_TYPE_BUFFER:
73167754Smsmith
732193267Sjkim        AcpiOsPrintf ("Buffer length %.2X @ %p\n",
733138287Smarks            ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
73467754Smsmith
73567754Smsmith        /* Debug only -- dump the buffer contents */
73667754Smsmith
73791116Smsmith        if (ObjDesc->Buffer.Pointer)
73867754Smsmith        {
739193267Sjkim            Length = ObjDesc->Buffer.Length;
740193267Sjkim            if (Length > 128)
74167754Smsmith            {
742193267Sjkim                Length = 128;
74367754Smsmith            }
744193267Sjkim
745306536Sjkim            AcpiOsPrintf (
746306536Sjkim                "Buffer Contents: (displaying length 0x%.2X)\n", Length);
747193267Sjkim            ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
74867754Smsmith        }
74967754Smsmith        break;
75067754Smsmith
75171867Smsmith    case ACPI_TYPE_INTEGER:
75267754Smsmith
75387031Smsmith        AcpiOsPrintf ("Integer %8.8X%8.8X\n",
754138287Smarks            ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
75567754Smsmith        break;
75667754Smsmith
75767754Smsmith    case ACPI_TYPE_PACKAGE:
75867754Smsmith
759138287Smarks        AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
760138287Smarks            ObjDesc->Package.Count, ObjDesc->Package.Elements);
76167754Smsmith
76267754Smsmith        /*
763138287Smarks         * If elements exist, package element pointer is valid,
76467754Smsmith         * and debug_level exceeds 1, dump package's elements.
76567754Smsmith         */
76691116Smsmith        if (ObjDesc->Package.Count &&
76791116Smsmith            ObjDesc->Package.Elements &&
76883174Smsmith            AcpiDbgLevel > 1)
76967754Smsmith        {
770138287Smarks            for (Index = 0; Index < ObjDesc->Package.Count; Index++)
77167754Smsmith            {
772306536Sjkim                AcpiExDumpOperand (
773306536Sjkim                    ObjDesc->Package.Elements[Index], Depth + 1);
77467754Smsmith            }
77567754Smsmith        }
77667754Smsmith        break;
77767754Smsmith
77867754Smsmith    case ACPI_TYPE_REGION:
77967754Smsmith
78087031Smsmith        AcpiOsPrintf ("Region %s (%X)",
78191116Smsmith            AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
78291116Smsmith            ObjDesc->Region.SpaceId);
78367754Smsmith
78467754Smsmith        /*
78567754Smsmith         * If the address and length have not been evaluated,
78667754Smsmith         * don't print them.
78767754Smsmith         */
78891116Smsmith        if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
78967754Smsmith        {
79087031Smsmith            AcpiOsPrintf ("\n");
79167754Smsmith        }
79267754Smsmith        else
79367754Smsmith        {
79487031Smsmith            AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
795281687Sjkim                ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
79691116Smsmith                ObjDesc->Region.Length);
79767754Smsmith        }
79867754Smsmith        break;
79967754Smsmith
80067754Smsmith    case ACPI_TYPE_STRING:
80167754Smsmith
802107325Siwasaki        AcpiOsPrintf ("String length %X @ %p ",
803151937Sjkim            ObjDesc->String.Length,
804151937Sjkim            ObjDesc->String.Pointer);
805151937Sjkim
806107325Siwasaki        AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
807107325Siwasaki        AcpiOsPrintf ("\n");
80867754Smsmith        break;
80967754Smsmith
810107325Siwasaki    case ACPI_TYPE_LOCAL_BANK_FIELD:
81167754Smsmith
81287031Smsmith        AcpiOsPrintf ("BankField\n");
81367754Smsmith        break;
81467754Smsmith
815107325Siwasaki    case ACPI_TYPE_LOCAL_REGION_FIELD:
81667754Smsmith
817193267Sjkim        AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
818193267Sjkim            "byte=%X bit=%X of below:\n",
819151937Sjkim            ObjDesc->Field.BitLength,
820151937Sjkim            ObjDesc->Field.AccessByteWidth,
82191116Smsmith            ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
82291116Smsmith            ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
823151937Sjkim            ObjDesc->Field.BaseByteOffset,
824151937Sjkim            ObjDesc->Field.StartFieldBitOffset);
825151937Sjkim
826306536Sjkim        AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth + 1);
82767754Smsmith        break;
82867754Smsmith
829107325Siwasaki    case ACPI_TYPE_LOCAL_INDEX_FIELD:
83067754Smsmith
83187031Smsmith        AcpiOsPrintf ("IndexField\n");
83267754Smsmith        break;
83367754Smsmith
83477424Smsmith    case ACPI_TYPE_BUFFER_FIELD:
83567754Smsmith
836193267Sjkim        AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
837151937Sjkim            ObjDesc->BufferField.BitLength,
838151937Sjkim            ObjDesc->BufferField.BaseByteOffset,
83991116Smsmith            ObjDesc->BufferField.StartFieldBitOffset);
84067754Smsmith
84191116Smsmith        if (!ObjDesc->BufferField.BufferObj)
84267754Smsmith        {
843151937Sjkim            ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
84467754Smsmith        }
845193267Sjkim        else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
846306536Sjkim            ACPI_TYPE_BUFFER)
84767754Smsmith        {
848151937Sjkim            AcpiOsPrintf ("*not a Buffer*\n");
84967754Smsmith        }
85067754Smsmith        else
85167754Smsmith        {
852306536Sjkim            AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth + 1);
85367754Smsmith        }
85467754Smsmith        break;
85567754Smsmith
85667754Smsmith    case ACPI_TYPE_EVENT:
85767754Smsmith
85887031Smsmith        AcpiOsPrintf ("Event\n");
85967754Smsmith        break;
86067754Smsmith
86167754Smsmith    case ACPI_TYPE_METHOD:
86267754Smsmith
863151937Sjkim        AcpiOsPrintf ("Method(%X) @ %p:%X\n",
86491116Smsmith            ObjDesc->Method.ParamCount,
865151937Sjkim            ObjDesc->Method.AmlStart,
866151937Sjkim            ObjDesc->Method.AmlLength);
86767754Smsmith        break;
86867754Smsmith
86967754Smsmith    case ACPI_TYPE_MUTEX:
87067754Smsmith
87187031Smsmith        AcpiOsPrintf ("Mutex\n");
87267754Smsmith        break;
87367754Smsmith
87467754Smsmith    case ACPI_TYPE_DEVICE:
87567754Smsmith
87687031Smsmith        AcpiOsPrintf ("Device\n");
87767754Smsmith        break;
87867754Smsmith
87967754Smsmith    case ACPI_TYPE_POWER:
88067754Smsmith
88187031Smsmith        AcpiOsPrintf ("Power\n");
88267754Smsmith        break;
88367754Smsmith
88467754Smsmith    case ACPI_TYPE_PROCESSOR:
88567754Smsmith
88687031Smsmith        AcpiOsPrintf ("Processor\n");
88767754Smsmith        break;
88867754Smsmith
88967754Smsmith    case ACPI_TYPE_THERMAL:
89067754Smsmith
89187031Smsmith        AcpiOsPrintf ("Thermal\n");
89267754Smsmith        break;
89367754Smsmith
894250838Sjkim    default:
89567754Smsmith
89699679Siwasaki        /* Unknown Type */
89767754Smsmith
898193267Sjkim        AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
89967754Smsmith        break;
90067754Smsmith    }
90167754Smsmith
90299679Siwasaki    return;
90367754Smsmith}
90467754Smsmith
90567754Smsmith
906151937Sjkim/*******************************************************************************
90767754Smsmith *
90877424Smsmith * FUNCTION:    AcpiExDumpOperands
90967754Smsmith *
910193267Sjkim * PARAMETERS:  Operands            - A list of Operand objects
911193267Sjkim *              OpcodeName          - AML opcode name
912193267Sjkim *              NumOperands         - Operand count for this opcode
91367754Smsmith *
914193267Sjkim * DESCRIPTION: Dump the operands associated with the opcode
91567754Smsmith *
916151937Sjkim ******************************************************************************/
91767754Smsmith
91867754Smsmithvoid
91977424SmsmithAcpiExDumpOperands (
92067754Smsmith    ACPI_OPERAND_OBJECT     **Operands,
921193267Sjkim    const char              *OpcodeName,
922193267Sjkim    UINT32                  NumOperands)
92367754Smsmith{
924167802Sjkim    ACPI_FUNCTION_NAME (ExDumpOperands);
92582367Smsmith
92683174Smsmith
927193267Sjkim    if (!OpcodeName)
92867754Smsmith    {
929193267Sjkim        OpcodeName = "UNKNOWN";
93067754Smsmith    }
93167754Smsmith
93299146Siwasaki    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
933209746Sjkim        "**** Start operand dump for opcode [%s], %u operands\n",
934193267Sjkim        OpcodeName, NumOperands));
93567754Smsmith
936193267Sjkim    if (NumOperands == 0)
93777424Smsmith    {
938193267Sjkim        NumOperands = 1;
93977424Smsmith    }
94067754Smsmith
941193267Sjkim    /* Dump the individual operands */
94267754Smsmith
943193267Sjkim    while (NumOperands)
94467754Smsmith    {
945193267Sjkim        AcpiExDumpOperand (*Operands, 0);
946193267Sjkim        Operands++;
947193267Sjkim        NumOperands--;
94867754Smsmith    }
94967754Smsmith
95099146Siwasaki    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
951193267Sjkim        "**** End operand dump for [%s]\n", OpcodeName));
95267754Smsmith    return;
95367754Smsmith}
95467754Smsmith
95567754Smsmith
956151937Sjkim/*******************************************************************************
95767754Smsmith *
958151937Sjkim * FUNCTION:    AcpiExOut* functions
95987031Smsmith *
96087031Smsmith * PARAMETERS:  Title               - Descriptive text
96187031Smsmith *              Value               - Value to be displayed
96287031Smsmith *
963241973Sjkim * DESCRIPTION: Object dump output formatting functions. These functions
96487031Smsmith *              reduce the number of format strings required and keeps them
96587031Smsmith *              all in one place for easy modification.
96687031Smsmith *
967151937Sjkim ******************************************************************************/
96887031Smsmith
969151937Sjkimstatic void
97087031SmsmithAcpiExOutString (
971306536Sjkim    const char              *Title,
972306536Sjkim    const char              *Value)
97387031Smsmith{
97487031Smsmith    AcpiOsPrintf ("%20s : %s\n", Title, Value);
97587031Smsmith}
97687031Smsmith
977151937Sjkimstatic void
97887031SmsmithAcpiExOutPointer (
979306536Sjkim    const char              *Title,
980306536Sjkim    const void              *Value)
98187031Smsmith{
98287031Smsmith    AcpiOsPrintf ("%20s : %p\n", Title, Value);
98387031Smsmith}
98487031Smsmith
98587031Smsmith
986151937Sjkim/*******************************************************************************
98787031Smsmith *
988167802Sjkim * FUNCTION:    AcpiExDumpNamespaceNode
98967754Smsmith *
990167802Sjkim * PARAMETERS:  Node                - Descriptor to dump
991151937Sjkim *              Flags               - Force display if TRUE
99267754Smsmith *
99367754Smsmith * DESCRIPTION: Dumps the members of the given.Node
99467754Smsmith *
995151937Sjkim ******************************************************************************/
99667754Smsmith
99767754Smsmithvoid
998167802SjkimAcpiExDumpNamespaceNode (
99967754Smsmith    ACPI_NAMESPACE_NODE     *Node,
100067754Smsmith    UINT32                  Flags)
100167754Smsmith{
100267754Smsmith
100391116Smsmith    ACPI_FUNCTION_ENTRY ();
100483174Smsmith
100583174Smsmith
100667754Smsmith    if (!Flags)
100767754Smsmith    {
1008245582Sjkim        /* Check if debug output enabled */
1009245582Sjkim
1010245582Sjkim        if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
101167754Smsmith        {
101267754Smsmith            return;
101367754Smsmith        }
101467754Smsmith    }
101567754Smsmith
1016193267Sjkim    AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
1017281075Sdim    AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
1018281075Sdim        Node->Type, AcpiUtGetTypeName (Node->Type));
1019167802Sjkim
1020167802Sjkim    AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
1021167802Sjkim        AcpiExDumpNode);
102267754Smsmith}
102367754Smsmith
102467754Smsmith
1025151937Sjkim/*******************************************************************************
102667754Smsmith *
1027167802Sjkim * FUNCTION:    AcpiExDumpReferenceObj
1028151937Sjkim *
1029151937Sjkim * PARAMETERS:  Object              - Descriptor to dump
1030151937Sjkim *
1031151937Sjkim * DESCRIPTION: Dumps a reference object
1032151937Sjkim *
1033151937Sjkim ******************************************************************************/
1034151937Sjkim
1035151937Sjkimstatic void
1036167802SjkimAcpiExDumpReferenceObj (
1037151937Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc)
1038151937Sjkim{
1039151937Sjkim    ACPI_BUFFER             RetBuf;
1040151937Sjkim    ACPI_STATUS             Status;
1041151937Sjkim
1042151937Sjkim
1043167802Sjkim    RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1044167802Sjkim
1045193267Sjkim    if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
1046151937Sjkim    {
1047193267Sjkim        AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
1048167802Sjkim
1049306536Sjkim        Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node,
1050306536Sjkim            &RetBuf, TRUE);
1051151937Sjkim        if (ACPI_FAILURE (Status))
1052151937Sjkim        {
1053193267Sjkim            AcpiOsPrintf (" Could not convert name to pathname\n");
1054151937Sjkim        }
1055151937Sjkim        else
1056151937Sjkim        {
1057151937Sjkim           AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
1058167802Sjkim           ACPI_FREE (RetBuf.Pointer);
1059151937Sjkim        }
1060151937Sjkim    }
1061151937Sjkim    else if (ObjDesc->Reference.Object)
1062151937Sjkim    {
1063193267Sjkim        if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
1064193267Sjkim        {
1065306536Sjkim            AcpiOsPrintf ("%22s %p", "Target :",
1066306536Sjkim                ObjDesc->Reference.Object);
1067193267Sjkim            if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
1068193267Sjkim            {
1069306536Sjkim                AcpiOsPrintf (" Table Index: %X\n",
1070306536Sjkim                    ObjDesc->Reference.Value);
1071193267Sjkim            }
1072193267Sjkim            else
1073193267Sjkim            {
1074306536Sjkim                AcpiOsPrintf (" [%s]\n",
1075193267Sjkim                    AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
1076306536Sjkim                    ObjDesc->Reference.Object)->Common.Type));
1077193267Sjkim            }
1078193267Sjkim        }
1079193267Sjkim        else
1080193267Sjkim        {
1081193267Sjkim            AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
1082193267Sjkim        }
1083151937Sjkim    }
1084151937Sjkim}
1085151937Sjkim
1086151937Sjkim
1087151937Sjkim/*******************************************************************************
1088151937Sjkim *
1089167802Sjkim * FUNCTION:    AcpiExDumpPackageObj
1090151937Sjkim *
1091167802Sjkim * PARAMETERS:  ObjDesc             - Descriptor to dump
1092151937Sjkim *              Level               - Indentation Level
1093151937Sjkim *              Index               - Package index for this object
1094151937Sjkim *
1095151937Sjkim * DESCRIPTION: Dumps the elements of the package
1096151937Sjkim *
1097151937Sjkim ******************************************************************************/
1098151937Sjkim
1099151937Sjkimstatic void
1100167802SjkimAcpiExDumpPackageObj (
1101151937Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc,
1102151937Sjkim    UINT32                  Level,
1103151937Sjkim    UINT32                  Index)
1104151937Sjkim{
1105151937Sjkim    UINT32                  i;
1106151937Sjkim
1107151937Sjkim
1108151937Sjkim    /* Indentation and index output */
1109151937Sjkim
1110151937Sjkim    if (Level > 0)
1111151937Sjkim    {
1112151937Sjkim        for (i = 0; i < Level; i++)
1113151937Sjkim        {
1114151937Sjkim            AcpiOsPrintf ("  ");
1115151937Sjkim        }
1116151937Sjkim
1117151937Sjkim        AcpiOsPrintf ("[%.2d] ", Index);
1118151937Sjkim    }
1119151937Sjkim
1120151937Sjkim    AcpiOsPrintf ("%p ", ObjDesc);
1121151937Sjkim
1122151937Sjkim    /* Null package elements are allowed */
1123151937Sjkim
1124151937Sjkim    if (!ObjDesc)
1125151937Sjkim    {
1126151937Sjkim        AcpiOsPrintf ("[Null Object]\n");
1127151937Sjkim        return;
1128151937Sjkim    }
1129151937Sjkim
1130151937Sjkim    /* Packages may only contain a few object types */
1131151937Sjkim
1132193267Sjkim    switch (ObjDesc->Common.Type)
1133151937Sjkim    {
1134151937Sjkim    case ACPI_TYPE_INTEGER:
1135151937Sjkim
1136151937Sjkim        AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
1137193267Sjkim            ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
1138151937Sjkim        break;
1139151937Sjkim
1140151937Sjkim    case ACPI_TYPE_STRING:
1141151937Sjkim
1142151937Sjkim        AcpiOsPrintf ("[String]  Value: ");
1143234623Sjkim        AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
1144151937Sjkim        AcpiOsPrintf ("\n");
1145151937Sjkim        break;
1146151937Sjkim
1147151937Sjkim    case ACPI_TYPE_BUFFER:
1148151937Sjkim
1149151937Sjkim        AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
1150151937Sjkim        if (ObjDesc->Buffer.Length)
1151151937Sjkim        {
1152306536Sjkim            AcpiUtDebugDumpBuffer (
1153306536Sjkim                ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
1154193267Sjkim                ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
1155151937Sjkim        }
1156151937Sjkim        else
1157151937Sjkim        {
1158151937Sjkim            AcpiOsPrintf ("\n");
1159151937Sjkim        }
1160151937Sjkim        break;
1161151937Sjkim
1162151937Sjkim    case ACPI_TYPE_PACKAGE:
1163151937Sjkim
1164209746Sjkim        AcpiOsPrintf ("[Package] Contains %u Elements:\n",
1165193267Sjkim            ObjDesc->Package.Count);
1166151937Sjkim
1167151937Sjkim        for (i = 0; i < ObjDesc->Package.Count; i++)
1168151937Sjkim        {
1169306536Sjkim            AcpiExDumpPackageObj (
1170306536Sjkim                ObjDesc->Package.Elements[i], Level + 1, i);
1171151937Sjkim        }
1172151937Sjkim        break;
1173151937Sjkim
1174151937Sjkim    case ACPI_TYPE_LOCAL_REFERENCE:
1175151937Sjkim
1176193267Sjkim        AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
1177193267Sjkim            AcpiUtGetReferenceName (ObjDesc),
1178193267Sjkim            ObjDesc->Reference.Class);
1179167802Sjkim        AcpiExDumpReferenceObj (ObjDesc);
1180151937Sjkim        break;
1181151937Sjkim
1182151937Sjkim    default:
1183151937Sjkim
1184193267Sjkim        AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type);
1185151937Sjkim        break;
1186151937Sjkim    }
1187151937Sjkim}
1188151937Sjkim
1189151937Sjkim
1190151937Sjkim/*******************************************************************************
1191151937Sjkim *
119277424Smsmith * FUNCTION:    AcpiExDumpObjectDescriptor
119367754Smsmith *
1194167802Sjkim * PARAMETERS:  ObjDesc             - Descriptor to dump
1195151937Sjkim *              Flags               - Force display if TRUE
119667754Smsmith *
119767754Smsmith * DESCRIPTION: Dumps the members of the object descriptor given.
119867754Smsmith *
1199151937Sjkim ******************************************************************************/
120067754Smsmith
120167754Smsmithvoid
120277424SmsmithAcpiExDumpObjectDescriptor (
120367754Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc,
120467754Smsmith    UINT32                  Flags)
120567754Smsmith{
1206167802Sjkim    ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
120782367Smsmith
120882367Smsmith
1209151937Sjkim    if (!ObjDesc)
1210151937Sjkim    {
1211151937Sjkim        return_VOID;
1212151937Sjkim    }
121367754Smsmith
121467754Smsmith    if (!Flags)
121567754Smsmith    {
1216245582Sjkim        /* Check if debug output enabled */
1217245582Sjkim
1218245582Sjkim        if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
121967754Smsmith        {
1220100966Siwasaki            return_VOID;
122167754Smsmith        }
122267754Smsmith    }
122367754Smsmith
1224104470Siwasaki    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1225104470Siwasaki    {
1226167802Sjkim        AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
1227167802Sjkim
1228138287Smarks        AcpiOsPrintf ("\nAttached Object (%p):\n",
1229138287Smarks            ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object);
1230167802Sjkim
1231281075Sdim        ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object;
1232281075Sdim        goto DumpObject;
1233104470Siwasaki    }
1234104470Siwasaki
123599679Siwasaki    if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
123667754Smsmith    {
1237138287Smarks        AcpiOsPrintf (
1238281075Sdim            "%p is not an ACPI operand object: [%s]\n",
1239138287Smarks            ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
1240100966Siwasaki        return_VOID;
124167754Smsmith    }
124267754Smsmith
1243281075Sdim    /* Validate the object type */
1244281075Sdim
1245281075Sdim    if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
124667754Smsmith    {
1247281075Sdim        AcpiOsPrintf ("Not a known object type: %2.2X\n",
1248281075Sdim            ObjDesc->Common.Type);
1249167802Sjkim        return_VOID;
1250167802Sjkim    }
125167754Smsmith
1252281075Sdim
1253281075SdimDumpObject:
1254281075Sdim
1255167802Sjkim    /* Common Fields */
125667754Smsmith
1257167802Sjkim    AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
125867754Smsmith
1259167802Sjkim    /* Object-specific fields */
126067754Smsmith
1261167802Sjkim    AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1262281075Sdim
1263281075Sdim    if (ObjDesc->Common.Type == ACPI_TYPE_REGION)
1264281075Sdim    {
1265281075Sdim        ObjDesc = ObjDesc->Common.NextObject;
1266281075Sdim        if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1267281075Sdim        {
1268306536Sjkim            AcpiOsPrintf (
1269306536Sjkim                "Secondary object is not a known object type: %2.2X\n",
1270281075Sdim                ObjDesc->Common.Type);
1271281075Sdim
1272281075Sdim            return_VOID;
1273281075Sdim        }
1274281075Sdim
1275281075Sdim        AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc);
1276281075Sdim        AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1277281075Sdim    }
1278281075Sdim
127967754Smsmith    return_VOID;
128067754Smsmith}
128167754Smsmith
128267754Smsmith#endif
1283