1433d6423SLionel Sambuc /******************************************************************************
2433d6423SLionel Sambuc *
3433d6423SLionel Sambuc * Module Name: exdump - Interpreter debug output routines
4433d6423SLionel Sambuc *
5433d6423SLionel Sambuc *****************************************************************************/
6433d6423SLionel Sambuc
7*29492bb7SDavid van Moolenbroek /*
8*29492bb7SDavid van Moolenbroek * Copyright (C) 2000 - 2014, Intel Corp.
9433d6423SLionel Sambuc * All rights reserved.
10433d6423SLionel Sambuc *
11*29492bb7SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without
12*29492bb7SDavid van Moolenbroek * modification, are permitted provided that the following conditions
13*29492bb7SDavid van Moolenbroek * are met:
14*29492bb7SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright
15*29492bb7SDavid van Moolenbroek * notice, this list of conditions, and the following disclaimer,
16*29492bb7SDavid van Moolenbroek * without modification.
17*29492bb7SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*29492bb7SDavid van Moolenbroek * substantially similar to the "NO WARRANTY" disclaimer below
19*29492bb7SDavid van Moolenbroek * ("Disclaimer") and any redistribution must be conditioned upon
20*29492bb7SDavid van Moolenbroek * including a substantially similar Disclaimer requirement for further
21*29492bb7SDavid van Moolenbroek * binary redistribution.
22*29492bb7SDavid van Moolenbroek * 3. Neither the names of the above-listed copyright holders nor the names
23*29492bb7SDavid van Moolenbroek * of any contributors may be used to endorse or promote products derived
24*29492bb7SDavid van Moolenbroek * from this software without specific prior written permission.
25433d6423SLionel Sambuc *
26*29492bb7SDavid van Moolenbroek * Alternatively, this software may be distributed under the terms of the
27*29492bb7SDavid van Moolenbroek * GNU General Public License ("GPL") version 2 as published by the Free
28*29492bb7SDavid van Moolenbroek * Software Foundation.
29433d6423SLionel Sambuc *
30*29492bb7SDavid van Moolenbroek * NO WARRANTY
31*29492bb7SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*29492bb7SDavid van Moolenbroek * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*29492bb7SDavid van Moolenbroek * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*29492bb7SDavid van Moolenbroek * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*29492bb7SDavid van Moolenbroek * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*29492bb7SDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*29492bb7SDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*29492bb7SDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*29492bb7SDavid van Moolenbroek * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*29492bb7SDavid van Moolenbroek * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*29492bb7SDavid van Moolenbroek * POSSIBILITY OF SUCH DAMAGES.
42*29492bb7SDavid van Moolenbroek */
43433d6423SLionel Sambuc
44433d6423SLionel Sambuc #include "acpi.h"
45433d6423SLionel Sambuc #include "accommon.h"
46433d6423SLionel Sambuc #include "acinterp.h"
47433d6423SLionel Sambuc #include "amlcode.h"
48433d6423SLionel Sambuc #include "acnamesp.h"
49433d6423SLionel Sambuc
50433d6423SLionel Sambuc
51433d6423SLionel Sambuc #define _COMPONENT ACPI_EXECUTER
52433d6423SLionel Sambuc ACPI_MODULE_NAME ("exdump")
53433d6423SLionel Sambuc
54433d6423SLionel Sambuc /*
55433d6423SLionel Sambuc * The following routines are used for debug output only
56433d6423SLionel Sambuc */
57433d6423SLionel Sambuc #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
58433d6423SLionel Sambuc
59433d6423SLionel Sambuc /* Local prototypes */
60433d6423SLionel Sambuc
61433d6423SLionel Sambuc static void
62433d6423SLionel Sambuc AcpiExOutString (
63433d6423SLionel Sambuc char *Title,
64433d6423SLionel Sambuc char *Value);
65433d6423SLionel Sambuc
66433d6423SLionel Sambuc static void
67433d6423SLionel Sambuc AcpiExOutPointer (
68433d6423SLionel Sambuc char *Title,
69433d6423SLionel Sambuc void *Value);
70433d6423SLionel Sambuc
71433d6423SLionel Sambuc static void
72433d6423SLionel Sambuc AcpiExDumpObject (
73433d6423SLionel Sambuc ACPI_OPERAND_OBJECT *ObjDesc,
74433d6423SLionel Sambuc ACPI_EXDUMP_INFO *Info);
75433d6423SLionel Sambuc
76433d6423SLionel Sambuc static void
77433d6423SLionel Sambuc AcpiExDumpReferenceObj (
78433d6423SLionel Sambuc ACPI_OPERAND_OBJECT *ObjDesc);
79433d6423SLionel Sambuc
80433d6423SLionel Sambuc static void
81433d6423SLionel Sambuc AcpiExDumpPackageObj (
82433d6423SLionel Sambuc ACPI_OPERAND_OBJECT *ObjDesc,
83433d6423SLionel Sambuc UINT32 Level,
84433d6423SLionel Sambuc UINT32 Index);
85433d6423SLionel Sambuc
86433d6423SLionel Sambuc
87433d6423SLionel Sambuc /*******************************************************************************
88433d6423SLionel Sambuc *
89433d6423SLionel Sambuc * Object Descriptor info tables
90433d6423SLionel Sambuc *
91433d6423SLionel Sambuc * Note: The first table entry must be an INIT opcode and must contain
92433d6423SLionel Sambuc * the table length (number of table entries)
93433d6423SLionel Sambuc *
94433d6423SLionel Sambuc ******************************************************************************/
95433d6423SLionel Sambuc
96433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpInteger[2] =
97433d6423SLionel Sambuc {
98433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger), NULL},
99433d6423SLionel Sambuc {ACPI_EXD_UINT64, ACPI_EXD_OFFSET (Integer.Value), "Value"}
100433d6423SLionel Sambuc };
101433d6423SLionel Sambuc
102433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpString[4] =
103433d6423SLionel Sambuc {
104433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpString), NULL},
105433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (String.Length), "Length"},
106433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (String.Pointer), "Pointer"},
107433d6423SLionel Sambuc {ACPI_EXD_STRING, 0, NULL}
108433d6423SLionel Sambuc };
109433d6423SLionel Sambuc
110433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpBuffer[5] =
111433d6423SLionel Sambuc {
112433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer), NULL},
113433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Buffer.Length), "Length"},
114433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Buffer.Pointer), "Pointer"},
115*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Buffer.Node), "Parent Node"},
116433d6423SLionel Sambuc {ACPI_EXD_BUFFER, 0, NULL}
117433d6423SLionel Sambuc };
118433d6423SLionel Sambuc
119*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpPackage[6] =
120433d6423SLionel Sambuc {
121433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage), NULL},
122*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Package.Node), "Parent Node"},
123433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Package.Flags), "Flags"},
124433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Package.Count), "Elements"},
125433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Package.Elements), "Element List"},
126433d6423SLionel Sambuc {ACPI_EXD_PACKAGE, 0, NULL}
127433d6423SLionel Sambuc };
128433d6423SLionel Sambuc
129433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpDevice[4] =
130433d6423SLionel Sambuc {
131433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice), NULL},
132*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.NotifyList[0]), "System Notify"},
133*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.NotifyList[1]), "Device Notify"},
134*29492bb7SDavid van Moolenbroek {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler), "Handler"}
135433d6423SLionel Sambuc };
136433d6423SLionel Sambuc
137433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpEvent[2] =
138433d6423SLionel Sambuc {
139433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent), NULL},
140433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Event.OsSemaphore), "OsSemaphore"}
141433d6423SLionel Sambuc };
142433d6423SLionel Sambuc
143433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpMethod[9] =
144433d6423SLionel Sambuc {
145433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod), NULL},
146*29492bb7SDavid van Moolenbroek {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.InfoFlags), "Info Flags"},
147433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ParamCount), "Parameter Count"},
148433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.SyncLevel), "Sync Level"},
149433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"},
150433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"},
151433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ThreadCount), "Thread Count"},
152433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Method.AmlLength), "Aml Length"},
153433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.AmlStart), "Aml Start"}
154433d6423SLionel Sambuc };
155433d6423SLionel Sambuc
156*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpMutex[6] =
157433d6423SLionel Sambuc {
158433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex), NULL},
159433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.SyncLevel), "Sync Level"},
160*29492bb7SDavid van Moolenbroek {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel), "Original Sync Level"},
161433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OwnerThread), "Owner Thread"},
162433d6423SLionel Sambuc {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Mutex.AcquisitionDepth), "Acquire Depth"},
163433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OsMutex), "OsMutex"}
164433d6423SLionel Sambuc };
165433d6423SLionel Sambuc
166*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpRegion[8] =
167433d6423SLionel Sambuc {
168433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion), NULL},
169433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.SpaceId), "Space Id"},
170433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.Flags), "Flags"},
171*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Region.Node), "Parent Node"},
172433d6423SLionel Sambuc {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Region.Address), "Address"},
173433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Region.Length), "Length"},
174*29492bb7SDavid van Moolenbroek {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler), "Handler"},
175433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Region.Next), "Next"}
176433d6423SLionel Sambuc };
177433d6423SLionel Sambuc
178*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpPower[6] =
179433d6423SLionel Sambuc {
180433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPower), NULL},
181433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.SystemLevel), "System Level"},
182433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.ResourceOrder), "Resource Order"},
183*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.NotifyList[0]), "System Notify"},
184*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.NotifyList[1]), "Device Notify"},
185*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.Handler), "Handler"}
186433d6423SLionel Sambuc };
187433d6423SLionel Sambuc
188433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpProcessor[7] =
189433d6423SLionel Sambuc {
190433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor), NULL},
191433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Processor.ProcId), "Processor ID"},
192433d6423SLionel Sambuc {ACPI_EXD_UINT8 , ACPI_EXD_OFFSET (Processor.Length), "Length"},
193433d6423SLionel Sambuc {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Processor.Address), "Address"},
194*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.NotifyList[0]), "System Notify"},
195*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.NotifyList[1]), "Device Notify"},
196433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.Handler), "Handler"}
197433d6423SLionel Sambuc };
198433d6423SLionel Sambuc
199433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpThermal[4] =
200433d6423SLionel Sambuc {
201433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal), NULL},
202*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]), "System Notify"},
203*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]), "Device Notify"},
204433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.Handler), "Handler"}
205433d6423SLionel Sambuc };
206433d6423SLionel Sambuc
207433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpBufferField[3] =
208433d6423SLionel Sambuc {
209433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField), NULL},
210433d6423SLionel Sambuc {ACPI_EXD_FIELD, 0, NULL},
211433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BufferField.BufferObj), "Buffer Object"}
212433d6423SLionel Sambuc };
213433d6423SLionel Sambuc
214*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpRegionField[5] =
215433d6423SLionel Sambuc {
216433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField), NULL},
217433d6423SLionel Sambuc {ACPI_EXD_FIELD, 0, NULL},
218*29492bb7SDavid van Moolenbroek {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Field.AccessLength), "AccessLength"},
219*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.RegionObj), "Region Object"},
220*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.ResourceBuffer), "ResourceBuffer"}
221433d6423SLionel Sambuc };
222433d6423SLionel Sambuc
223433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpBankField[5] =
224433d6423SLionel Sambuc {
225433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL},
226433d6423SLionel Sambuc {ACPI_EXD_FIELD, 0, NULL},
227433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (BankField.Value), "Value"},
228433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.RegionObj), "Region Object"},
229433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.BankObj), "Bank Object"}
230433d6423SLionel Sambuc };
231433d6423SLionel Sambuc
232433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpIndexField[5] =
233433d6423SLionel Sambuc {
234433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL},
235433d6423SLionel Sambuc {ACPI_EXD_FIELD, 0, NULL},
236433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (IndexField.Value), "Value"},
237433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.IndexObj), "Index Object"},
238433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.DataObj), "Data Object"}
239433d6423SLionel Sambuc };
240433d6423SLionel Sambuc
241433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpReference[8] =
242433d6423SLionel Sambuc {
243433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpReference), NULL},
244433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.Class), "Class"},
245433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.TargetType), "Target Type"},
246433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Reference.Value), "Value"},
247433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Object), "Object Desc"},
248*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Reference.Node), "Node"},
249433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Where), "Where"},
250433d6423SLionel Sambuc {ACPI_EXD_REFERENCE,0, NULL}
251433d6423SLionel Sambuc };
252433d6423SLionel Sambuc
253433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpAddressHandler[6] =
254433d6423SLionel Sambuc {
255433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
256433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (AddressSpace.SpaceId), "Space Id"},
257*29492bb7SDavid van Moolenbroek {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next), "Next"},
258*29492bb7SDavid van Moolenbroek {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList), "Region List"},
259*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (AddressSpace.Node), "Node"},
260433d6423SLionel Sambuc {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Context), "Context"}
261433d6423SLionel Sambuc };
262433d6423SLionel Sambuc
263*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpNotify[7] =
264433d6423SLionel Sambuc {
265433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify), NULL},
266*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Notify.Node), "Node"},
267*29492bb7SDavid van Moolenbroek {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Notify.HandlerType), "Handler Type"},
268*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Handler), "Handler"},
269*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Context), "Context"},
270*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Next[0]), "Next System Notify"},
271*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Next[1]), "Next Device Notify"}
272433d6423SLionel Sambuc };
273433d6423SLionel Sambuc
274*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpExtra[6] =
275*29492bb7SDavid van Moolenbroek {
276*29492bb7SDavid van Moolenbroek {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra), NULL},
277*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.Method_REG), "_REG Method"},
278*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Extra.ScopeNode), "Scope Node"},
279*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.RegionContext), "Region Context"},
280*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.AmlStart), "Aml Start"},
281*29492bb7SDavid van Moolenbroek {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Extra.AmlLength), "Aml Length"}
282*29492bb7SDavid van Moolenbroek };
283*29492bb7SDavid van Moolenbroek
284*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpData[3] =
285*29492bb7SDavid van Moolenbroek {
286*29492bb7SDavid van Moolenbroek {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpData), NULL},
287*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Data.Handler), "Handler"},
288*29492bb7SDavid van Moolenbroek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Data.Pointer), "Raw Data"}
289*29492bb7SDavid van Moolenbroek };
290433d6423SLionel Sambuc
291433d6423SLionel Sambuc /* Miscellaneous tables */
292433d6423SLionel Sambuc
293*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpCommon[5] =
294433d6423SLionel Sambuc {
295433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon), NULL},
296433d6423SLionel Sambuc {ACPI_EXD_TYPE , 0, NULL},
297433d6423SLionel Sambuc {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Common.ReferenceCount), "Reference Count"},
298*29492bb7SDavid van Moolenbroek {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Common.Flags), "Flags"},
299*29492bb7SDavid van Moolenbroek {ACPI_EXD_LIST, ACPI_EXD_OFFSET (Common.NextObject), "Object List"}
300433d6423SLionel Sambuc };
301433d6423SLionel Sambuc
302433d6423SLionel Sambuc static ACPI_EXDUMP_INFO AcpiExDumpFieldCommon[7] =
303433d6423SLionel Sambuc {
304433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon), NULL},
305433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.FieldFlags), "Field Flags"},
306433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.AccessByteWidth), "Access Byte Width"},
307433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BitLength), "Bit Length"},
308433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
309433d6423SLionel Sambuc {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BaseByteOffset), "Base Byte Offset"},
310*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (CommonField.Node), "Parent Node"}
311433d6423SLionel Sambuc };
312433d6423SLionel Sambuc
313*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO AcpiExDumpNode[7] =
314433d6423SLionel Sambuc {
315433d6423SLionel Sambuc {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNode), NULL},
316433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (Flags), "Flags"},
317433d6423SLionel Sambuc {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"},
318*29492bb7SDavid van Moolenbroek {ACPI_EXD_LIST, ACPI_EXD_NSOFFSET (Object), "Object List"},
319*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Parent), "Parent"},
320*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Child), "Child"},
321*29492bb7SDavid van Moolenbroek {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Peer), "Peer"}
322433d6423SLionel Sambuc };
323433d6423SLionel Sambuc
324433d6423SLionel Sambuc
325433d6423SLionel Sambuc /* Dispatch table, indexed by object type */
326433d6423SLionel Sambuc
327433d6423SLionel Sambuc static ACPI_EXDUMP_INFO *AcpiExDumpInfo[] =
328433d6423SLionel Sambuc {
329433d6423SLionel Sambuc NULL,
330433d6423SLionel Sambuc AcpiExDumpInteger,
331433d6423SLionel Sambuc AcpiExDumpString,
332433d6423SLionel Sambuc AcpiExDumpBuffer,
333433d6423SLionel Sambuc AcpiExDumpPackage,
334433d6423SLionel Sambuc NULL,
335433d6423SLionel Sambuc AcpiExDumpDevice,
336433d6423SLionel Sambuc AcpiExDumpEvent,
337433d6423SLionel Sambuc AcpiExDumpMethod,
338433d6423SLionel Sambuc AcpiExDumpMutex,
339433d6423SLionel Sambuc AcpiExDumpRegion,
340433d6423SLionel Sambuc AcpiExDumpPower,
341433d6423SLionel Sambuc AcpiExDumpProcessor,
342433d6423SLionel Sambuc AcpiExDumpThermal,
343433d6423SLionel Sambuc AcpiExDumpBufferField,
344433d6423SLionel Sambuc NULL,
345433d6423SLionel Sambuc NULL,
346433d6423SLionel Sambuc AcpiExDumpRegionField,
347433d6423SLionel Sambuc AcpiExDumpBankField,
348433d6423SLionel Sambuc AcpiExDumpIndexField,
349433d6423SLionel Sambuc AcpiExDumpReference,
350433d6423SLionel Sambuc NULL,
351433d6423SLionel Sambuc NULL,
352433d6423SLionel Sambuc AcpiExDumpNotify,
353433d6423SLionel Sambuc AcpiExDumpAddressHandler,
354433d6423SLionel Sambuc NULL,
355433d6423SLionel Sambuc NULL,
356*29492bb7SDavid van Moolenbroek NULL,
357*29492bb7SDavid van Moolenbroek AcpiExDumpExtra,
358*29492bb7SDavid van Moolenbroek AcpiExDumpData
359433d6423SLionel Sambuc };
360433d6423SLionel Sambuc
361433d6423SLionel Sambuc
362433d6423SLionel Sambuc /*******************************************************************************
363433d6423SLionel Sambuc *
364433d6423SLionel Sambuc * FUNCTION: AcpiExDumpObject
365433d6423SLionel Sambuc *
366433d6423SLionel Sambuc * PARAMETERS: ObjDesc - Descriptor to dump
367433d6423SLionel Sambuc * Info - Info table corresponding to this object
368433d6423SLionel Sambuc * type
369433d6423SLionel Sambuc *
370433d6423SLionel Sambuc * RETURN: None
371433d6423SLionel Sambuc *
372433d6423SLionel Sambuc * DESCRIPTION: Walk the info table for this object
373433d6423SLionel Sambuc *
374433d6423SLionel Sambuc ******************************************************************************/
375433d6423SLionel Sambuc
376433d6423SLionel Sambuc static void
AcpiExDumpObject(ACPI_OPERAND_OBJECT * ObjDesc,ACPI_EXDUMP_INFO * Info)377433d6423SLionel Sambuc AcpiExDumpObject (
378433d6423SLionel Sambuc ACPI_OPERAND_OBJECT *ObjDesc,
379433d6423SLionel Sambuc ACPI_EXDUMP_INFO *Info)
380433d6423SLionel Sambuc {
381433d6423SLionel Sambuc UINT8 *Target;
382433d6423SLionel Sambuc char *Name;
383*29492bb7SDavid van Moolenbroek const char *ReferenceName;
384433d6423SLionel Sambuc UINT8 Count;
385*29492bb7SDavid van Moolenbroek ACPI_OPERAND_OBJECT *Start;
386*29492bb7SDavid van Moolenbroek ACPI_OPERAND_OBJECT *Data = NULL;
387*29492bb7SDavid van Moolenbroek ACPI_OPERAND_OBJECT *Next;
388*29492bb7SDavid van Moolenbroek ACPI_NAMESPACE_NODE *Node;
389433d6423SLionel Sambuc
390433d6423SLionel Sambuc
391433d6423SLionel Sambuc if (!Info)
392433d6423SLionel Sambuc {
393433d6423SLionel Sambuc AcpiOsPrintf (
394433d6423SLionel Sambuc "ExDumpObject: Display not implemented for object type %s\n",
395433d6423SLionel Sambuc AcpiUtGetObjectTypeName (ObjDesc));
396433d6423SLionel Sambuc return;
397433d6423SLionel Sambuc }
398433d6423SLionel Sambuc
399433d6423SLionel Sambuc /* First table entry must contain the table length (# of table entries) */
400433d6423SLionel Sambuc
401433d6423SLionel Sambuc Count = Info->Offset;
402433d6423SLionel Sambuc
403433d6423SLionel Sambuc while (Count)
404433d6423SLionel Sambuc {
405433d6423SLionel Sambuc Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
406433d6423SLionel Sambuc Name = Info->Name;
407433d6423SLionel Sambuc
408433d6423SLionel Sambuc switch (Info->Opcode)
409433d6423SLionel Sambuc {
410433d6423SLionel Sambuc case ACPI_EXD_INIT:
411*29492bb7SDavid van Moolenbroek
412433d6423SLionel Sambuc break;
413433d6423SLionel Sambuc
414433d6423SLionel Sambuc case ACPI_EXD_TYPE:
415433d6423SLionel Sambuc
416*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
417*29492bb7SDavid van Moolenbroek ObjDesc->Common.Type, AcpiUtGetObjectTypeName (ObjDesc));
418433d6423SLionel Sambuc break;
419433d6423SLionel Sambuc
420433d6423SLionel Sambuc case ACPI_EXD_UINT8:
421433d6423SLionel Sambuc
422433d6423SLionel Sambuc AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
423433d6423SLionel Sambuc break;
424433d6423SLionel Sambuc
425433d6423SLionel Sambuc case ACPI_EXD_UINT16:
426433d6423SLionel Sambuc
427433d6423SLionel Sambuc AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
428433d6423SLionel Sambuc break;
429433d6423SLionel Sambuc
430433d6423SLionel Sambuc case ACPI_EXD_UINT32:
431433d6423SLionel Sambuc
432433d6423SLionel Sambuc AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
433433d6423SLionel Sambuc break;
434433d6423SLionel Sambuc
435433d6423SLionel Sambuc case ACPI_EXD_UINT64:
436433d6423SLionel Sambuc
437433d6423SLionel Sambuc AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
438433d6423SLionel Sambuc ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
439433d6423SLionel Sambuc break;
440433d6423SLionel Sambuc
441433d6423SLionel Sambuc case ACPI_EXD_POINTER:
442433d6423SLionel Sambuc case ACPI_EXD_ADDRESS:
443433d6423SLionel Sambuc
444433d6423SLionel Sambuc AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
445433d6423SLionel Sambuc break;
446433d6423SLionel Sambuc
447433d6423SLionel Sambuc case ACPI_EXD_STRING:
448433d6423SLionel Sambuc
449433d6423SLionel Sambuc AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
450433d6423SLionel Sambuc AcpiOsPrintf ("\n");
451433d6423SLionel Sambuc break;
452433d6423SLionel Sambuc
453433d6423SLionel Sambuc case ACPI_EXD_BUFFER:
454433d6423SLionel Sambuc
455433d6423SLionel Sambuc ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
456433d6423SLionel Sambuc break;
457433d6423SLionel Sambuc
458433d6423SLionel Sambuc case ACPI_EXD_PACKAGE:
459433d6423SLionel Sambuc
460433d6423SLionel Sambuc /* Dump the package contents */
461433d6423SLionel Sambuc
462433d6423SLionel Sambuc AcpiOsPrintf ("\nPackage Contents:\n");
463433d6423SLionel Sambuc AcpiExDumpPackageObj (ObjDesc, 0, 0);
464433d6423SLionel Sambuc break;
465433d6423SLionel Sambuc
466433d6423SLionel Sambuc case ACPI_EXD_FIELD:
467433d6423SLionel Sambuc
468433d6423SLionel Sambuc AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
469433d6423SLionel Sambuc break;
470433d6423SLionel Sambuc
471433d6423SLionel Sambuc case ACPI_EXD_REFERENCE:
472433d6423SLionel Sambuc
473*29492bb7SDavid van Moolenbroek ReferenceName = AcpiUtGetReferenceName (ObjDesc);
474*29492bb7SDavid van Moolenbroek AcpiExOutString ("Class Name", ACPI_CAST_PTR (char, ReferenceName));
475433d6423SLionel Sambuc AcpiExDumpReferenceObj (ObjDesc);
476433d6423SLionel Sambuc break;
477433d6423SLionel Sambuc
478*29492bb7SDavid van Moolenbroek case ACPI_EXD_LIST:
479*29492bb7SDavid van Moolenbroek
480*29492bb7SDavid van Moolenbroek Start = *ACPI_CAST_PTR (void *, Target);
481*29492bb7SDavid van Moolenbroek Next = Start;
482*29492bb7SDavid van Moolenbroek
483*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("%20s : %p", Name, Next);
484*29492bb7SDavid van Moolenbroek if (Next)
485*29492bb7SDavid van Moolenbroek {
486*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("(%s %2.2X)",
487*29492bb7SDavid van Moolenbroek AcpiUtGetObjectTypeName (Next), Next->Common.Type);
488*29492bb7SDavid van Moolenbroek
489*29492bb7SDavid van Moolenbroek while (Next->Common.NextObject)
490*29492bb7SDavid van Moolenbroek {
491*29492bb7SDavid van Moolenbroek if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
492*29492bb7SDavid van Moolenbroek !Data)
493*29492bb7SDavid van Moolenbroek {
494*29492bb7SDavid van Moolenbroek Data = Next;
495*29492bb7SDavid van Moolenbroek }
496*29492bb7SDavid van Moolenbroek
497*29492bb7SDavid van Moolenbroek Next = Next->Common.NextObject;
498*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("->%p(%s %2.2X)", Next,
499*29492bb7SDavid van Moolenbroek AcpiUtGetObjectTypeName (Next), Next->Common.Type);
500*29492bb7SDavid van Moolenbroek
501*29492bb7SDavid van Moolenbroek if ((Next == Start) || (Next == Data))
502*29492bb7SDavid van Moolenbroek {
503*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("\n**** Error: Object list appears to be circular linked");
504*29492bb7SDavid van Moolenbroek break;
505*29492bb7SDavid van Moolenbroek }
506*29492bb7SDavid van Moolenbroek }
507*29492bb7SDavid van Moolenbroek }
508*29492bb7SDavid van Moolenbroek
509*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("\n");
510*29492bb7SDavid van Moolenbroek break;
511*29492bb7SDavid van Moolenbroek
512*29492bb7SDavid van Moolenbroek case ACPI_EXD_HDLR_LIST:
513*29492bb7SDavid van Moolenbroek
514*29492bb7SDavid van Moolenbroek Start = *ACPI_CAST_PTR (void *, Target);
515*29492bb7SDavid van Moolenbroek Next = Start;
516*29492bb7SDavid van Moolenbroek
517*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("%20s : %p", Name, Next);
518*29492bb7SDavid van Moolenbroek if (Next)
519*29492bb7SDavid van Moolenbroek {
520*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("(%s %2.2X)",
521*29492bb7SDavid van Moolenbroek AcpiUtGetObjectTypeName (Next), Next->Common.Type);
522*29492bb7SDavid van Moolenbroek
523*29492bb7SDavid van Moolenbroek while (Next->AddressSpace.Next)
524*29492bb7SDavid van Moolenbroek {
525*29492bb7SDavid van Moolenbroek if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
526*29492bb7SDavid van Moolenbroek !Data)
527*29492bb7SDavid van Moolenbroek {
528*29492bb7SDavid van Moolenbroek Data = Next;
529*29492bb7SDavid van Moolenbroek }
530*29492bb7SDavid van Moolenbroek
531*29492bb7SDavid van Moolenbroek Next = Next->AddressSpace.Next;
532*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("->%p(%s %2.2X)", Next,
533*29492bb7SDavid van Moolenbroek AcpiUtGetObjectTypeName (Next), Next->Common.Type);
534*29492bb7SDavid van Moolenbroek
535*29492bb7SDavid van Moolenbroek if ((Next == Start) || (Next == Data))
536*29492bb7SDavid van Moolenbroek {
537*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("\n**** Error: Handler list appears to be circular linked");
538*29492bb7SDavid van Moolenbroek break;
539*29492bb7SDavid van Moolenbroek }
540*29492bb7SDavid van Moolenbroek }
541*29492bb7SDavid van Moolenbroek }
542*29492bb7SDavid van Moolenbroek
543*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("\n");
544*29492bb7SDavid van Moolenbroek break;
545*29492bb7SDavid van Moolenbroek
546*29492bb7SDavid van Moolenbroek case ACPI_EXD_RGN_LIST:
547*29492bb7SDavid van Moolenbroek
548*29492bb7SDavid van Moolenbroek Start = *ACPI_CAST_PTR (void *, Target);
549*29492bb7SDavid van Moolenbroek Next = Start;
550*29492bb7SDavid van Moolenbroek
551*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("%20s : %p", Name, Next);
552*29492bb7SDavid van Moolenbroek if (Next)
553*29492bb7SDavid van Moolenbroek {
554*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("(%s %2.2X)",
555*29492bb7SDavid van Moolenbroek AcpiUtGetObjectTypeName (Next), Next->Common.Type);
556*29492bb7SDavid van Moolenbroek
557*29492bb7SDavid van Moolenbroek while (Next->Region.Next)
558*29492bb7SDavid van Moolenbroek {
559*29492bb7SDavid van Moolenbroek if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
560*29492bb7SDavid van Moolenbroek !Data)
561*29492bb7SDavid van Moolenbroek {
562*29492bb7SDavid van Moolenbroek Data = Next;
563*29492bb7SDavid van Moolenbroek }
564*29492bb7SDavid van Moolenbroek
565*29492bb7SDavid van Moolenbroek Next = Next->Region.Next;
566*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("->%p(%s %2.2X)", Next,
567*29492bb7SDavid van Moolenbroek AcpiUtGetObjectTypeName (Next), Next->Common.Type);
568*29492bb7SDavid van Moolenbroek
569*29492bb7SDavid van Moolenbroek if ((Next == Start) || (Next == Data))
570*29492bb7SDavid van Moolenbroek {
571*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("\n**** Error: Region list appears to be circular linked");
572*29492bb7SDavid van Moolenbroek break;
573*29492bb7SDavid van Moolenbroek }
574*29492bb7SDavid van Moolenbroek }
575*29492bb7SDavid van Moolenbroek }
576*29492bb7SDavid van Moolenbroek
577*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("\n");
578*29492bb7SDavid van Moolenbroek break;
579*29492bb7SDavid van Moolenbroek
580*29492bb7SDavid van Moolenbroek case ACPI_EXD_NODE:
581*29492bb7SDavid van Moolenbroek
582*29492bb7SDavid van Moolenbroek Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target);
583*29492bb7SDavid van Moolenbroek
584*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("%20s : %p", Name, Node);
585*29492bb7SDavid van Moolenbroek if (Node)
586*29492bb7SDavid van Moolenbroek {
587*29492bb7SDavid van Moolenbroek AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii);
588*29492bb7SDavid van Moolenbroek }
589*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("\n");
590*29492bb7SDavid van Moolenbroek break;
591*29492bb7SDavid van Moolenbroek
592433d6423SLionel Sambuc default:
593433d6423SLionel Sambuc
594433d6423SLionel Sambuc AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
595433d6423SLionel Sambuc Info->Opcode);
596433d6423SLionel Sambuc return;
597433d6423SLionel Sambuc }
598433d6423SLionel Sambuc
599433d6423SLionel Sambuc Info++;
600433d6423SLionel Sambuc Count--;
601433d6423SLionel Sambuc }
602433d6423SLionel Sambuc }
603433d6423SLionel Sambuc
604433d6423SLionel Sambuc
605433d6423SLionel Sambuc /*******************************************************************************
606433d6423SLionel Sambuc *
607433d6423SLionel Sambuc * FUNCTION: AcpiExDumpOperand
608433d6423SLionel Sambuc *
609433d6423SLionel Sambuc * PARAMETERS: *ObjDesc - Pointer to entry to be dumped
610433d6423SLionel Sambuc * Depth - Current nesting depth
611433d6423SLionel Sambuc *
612433d6423SLionel Sambuc * RETURN: None
613433d6423SLionel Sambuc *
614433d6423SLionel Sambuc * DESCRIPTION: Dump an operand object
615433d6423SLionel Sambuc *
616433d6423SLionel Sambuc ******************************************************************************/
617433d6423SLionel Sambuc
618433d6423SLionel Sambuc void
AcpiExDumpOperand(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Depth)619433d6423SLionel Sambuc AcpiExDumpOperand (
620433d6423SLionel Sambuc ACPI_OPERAND_OBJECT *ObjDesc,
621433d6423SLionel Sambuc UINT32 Depth)
622433d6423SLionel Sambuc {
623433d6423SLionel Sambuc UINT32 Length;
624433d6423SLionel Sambuc UINT32 Index;
625433d6423SLionel Sambuc
626433d6423SLionel Sambuc
627433d6423SLionel Sambuc ACPI_FUNCTION_NAME (ExDumpOperand)
628433d6423SLionel Sambuc
629433d6423SLionel Sambuc
630*29492bb7SDavid van Moolenbroek /* Check if debug output enabled */
631*29492bb7SDavid van Moolenbroek
632*29492bb7SDavid van Moolenbroek if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT))
633433d6423SLionel Sambuc {
634433d6423SLionel Sambuc return;
635433d6423SLionel Sambuc }
636433d6423SLionel Sambuc
637433d6423SLionel Sambuc if (!ObjDesc)
638433d6423SLionel Sambuc {
639433d6423SLionel Sambuc /* This could be a null element of a package */
640433d6423SLionel Sambuc
641433d6423SLionel Sambuc ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
642433d6423SLionel Sambuc return;
643433d6423SLionel Sambuc }
644433d6423SLionel Sambuc
645433d6423SLionel Sambuc if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
646433d6423SLionel Sambuc {
647433d6423SLionel Sambuc ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
648433d6423SLionel Sambuc ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
649433d6423SLionel Sambuc return;
650433d6423SLionel Sambuc }
651433d6423SLionel Sambuc
652433d6423SLionel Sambuc if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
653433d6423SLionel Sambuc {
654433d6423SLionel Sambuc ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
655433d6423SLionel Sambuc "%p is not a node or operand object: [%s]\n",
656433d6423SLionel Sambuc ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
657433d6423SLionel Sambuc ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
658433d6423SLionel Sambuc return;
659433d6423SLionel Sambuc }
660433d6423SLionel Sambuc
661433d6423SLionel Sambuc /* ObjDesc is a valid object */
662433d6423SLionel Sambuc
663433d6423SLionel Sambuc if (Depth > 0)
664433d6423SLionel Sambuc {
665433d6423SLionel Sambuc ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
666433d6423SLionel Sambuc Depth, " ", Depth, ObjDesc));
667433d6423SLionel Sambuc }
668433d6423SLionel Sambuc else
669433d6423SLionel Sambuc {
670433d6423SLionel Sambuc ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
671433d6423SLionel Sambuc }
672433d6423SLionel Sambuc
673433d6423SLionel Sambuc /* Decode object type */
674433d6423SLionel Sambuc
675433d6423SLionel Sambuc switch (ObjDesc->Common.Type)
676433d6423SLionel Sambuc {
677433d6423SLionel Sambuc case ACPI_TYPE_LOCAL_REFERENCE:
678433d6423SLionel Sambuc
679433d6423SLionel Sambuc AcpiOsPrintf ("Reference: [%s] ", AcpiUtGetReferenceName (ObjDesc));
680433d6423SLionel Sambuc
681433d6423SLionel Sambuc switch (ObjDesc->Reference.Class)
682433d6423SLionel Sambuc {
683433d6423SLionel Sambuc case ACPI_REFCLASS_DEBUG:
684433d6423SLionel Sambuc
685433d6423SLionel Sambuc AcpiOsPrintf ("\n");
686433d6423SLionel Sambuc break;
687433d6423SLionel Sambuc
688433d6423SLionel Sambuc case ACPI_REFCLASS_INDEX:
689433d6423SLionel Sambuc
690433d6423SLionel Sambuc AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
691433d6423SLionel Sambuc break;
692433d6423SLionel Sambuc
693433d6423SLionel Sambuc case ACPI_REFCLASS_TABLE:
694433d6423SLionel Sambuc
695433d6423SLionel Sambuc AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
696433d6423SLionel Sambuc break;
697433d6423SLionel Sambuc
698433d6423SLionel Sambuc case ACPI_REFCLASS_REFOF:
699433d6423SLionel Sambuc
700433d6423SLionel Sambuc AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
701433d6423SLionel Sambuc AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
702433d6423SLionel Sambuc ObjDesc->Reference.Object)->Common.Type));
703433d6423SLionel Sambuc break;
704433d6423SLionel Sambuc
705433d6423SLionel Sambuc case ACPI_REFCLASS_NAME:
706433d6423SLionel Sambuc
707433d6423SLionel Sambuc AcpiOsPrintf ("- [%4.4s]\n", ObjDesc->Reference.Node->Name.Ascii);
708433d6423SLionel Sambuc break;
709433d6423SLionel Sambuc
710433d6423SLionel Sambuc case ACPI_REFCLASS_ARG:
711433d6423SLionel Sambuc case ACPI_REFCLASS_LOCAL:
712433d6423SLionel Sambuc
713433d6423SLionel Sambuc AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
714433d6423SLionel Sambuc break;
715433d6423SLionel Sambuc
716433d6423SLionel Sambuc default: /* Unknown reference class */
717433d6423SLionel Sambuc
718433d6423SLionel Sambuc AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
719433d6423SLionel Sambuc break;
720433d6423SLionel Sambuc }
721433d6423SLionel Sambuc break;
722433d6423SLionel Sambuc
723433d6423SLionel Sambuc case ACPI_TYPE_BUFFER:
724433d6423SLionel Sambuc
725433d6423SLionel Sambuc AcpiOsPrintf ("Buffer length %.2X @ %p\n",
726433d6423SLionel Sambuc ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
727433d6423SLionel Sambuc
728433d6423SLionel Sambuc /* Debug only -- dump the buffer contents */
729433d6423SLionel Sambuc
730433d6423SLionel Sambuc if (ObjDesc->Buffer.Pointer)
731433d6423SLionel Sambuc {
732433d6423SLionel Sambuc Length = ObjDesc->Buffer.Length;
733433d6423SLionel Sambuc if (Length > 128)
734433d6423SLionel Sambuc {
735433d6423SLionel Sambuc Length = 128;
736433d6423SLionel Sambuc }
737433d6423SLionel Sambuc
738433d6423SLionel Sambuc AcpiOsPrintf ("Buffer Contents: (displaying length 0x%.2X)\n",
739433d6423SLionel Sambuc Length);
740433d6423SLionel Sambuc ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
741433d6423SLionel Sambuc }
742433d6423SLionel Sambuc break;
743433d6423SLionel Sambuc
744433d6423SLionel Sambuc case ACPI_TYPE_INTEGER:
745433d6423SLionel Sambuc
746433d6423SLionel Sambuc AcpiOsPrintf ("Integer %8.8X%8.8X\n",
747433d6423SLionel Sambuc ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
748433d6423SLionel Sambuc break;
749433d6423SLionel Sambuc
750433d6423SLionel Sambuc case ACPI_TYPE_PACKAGE:
751433d6423SLionel Sambuc
752433d6423SLionel Sambuc AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
753433d6423SLionel Sambuc ObjDesc->Package.Count, ObjDesc->Package.Elements);
754433d6423SLionel Sambuc
755433d6423SLionel Sambuc /*
756433d6423SLionel Sambuc * If elements exist, package element pointer is valid,
757433d6423SLionel Sambuc * and debug_level exceeds 1, dump package's elements.
758433d6423SLionel Sambuc */
759433d6423SLionel Sambuc if (ObjDesc->Package.Count &&
760433d6423SLionel Sambuc ObjDesc->Package.Elements &&
761433d6423SLionel Sambuc AcpiDbgLevel > 1)
762433d6423SLionel Sambuc {
763433d6423SLionel Sambuc for (Index = 0; Index < ObjDesc->Package.Count; Index++)
764433d6423SLionel Sambuc {
765433d6423SLionel Sambuc AcpiExDumpOperand (ObjDesc->Package.Elements[Index], Depth+1);
766433d6423SLionel Sambuc }
767433d6423SLionel Sambuc }
768433d6423SLionel Sambuc break;
769433d6423SLionel Sambuc
770433d6423SLionel Sambuc case ACPI_TYPE_REGION:
771433d6423SLionel Sambuc
772433d6423SLionel Sambuc AcpiOsPrintf ("Region %s (%X)",
773433d6423SLionel Sambuc AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
774433d6423SLionel Sambuc ObjDesc->Region.SpaceId);
775433d6423SLionel Sambuc
776433d6423SLionel Sambuc /*
777433d6423SLionel Sambuc * If the address and length have not been evaluated,
778433d6423SLionel Sambuc * don't print them.
779433d6423SLionel Sambuc */
780433d6423SLionel Sambuc if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
781433d6423SLionel Sambuc {
782433d6423SLionel Sambuc AcpiOsPrintf ("\n");
783433d6423SLionel Sambuc }
784433d6423SLionel Sambuc else
785433d6423SLionel Sambuc {
786433d6423SLionel Sambuc AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
787433d6423SLionel Sambuc ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address),
788433d6423SLionel Sambuc ObjDesc->Region.Length);
789433d6423SLionel Sambuc }
790433d6423SLionel Sambuc break;
791433d6423SLionel Sambuc
792433d6423SLionel Sambuc case ACPI_TYPE_STRING:
793433d6423SLionel Sambuc
794433d6423SLionel Sambuc AcpiOsPrintf ("String length %X @ %p ",
795433d6423SLionel Sambuc ObjDesc->String.Length,
796433d6423SLionel Sambuc ObjDesc->String.Pointer);
797433d6423SLionel Sambuc
798433d6423SLionel Sambuc AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
799433d6423SLionel Sambuc AcpiOsPrintf ("\n");
800433d6423SLionel Sambuc break;
801433d6423SLionel Sambuc
802433d6423SLionel Sambuc case ACPI_TYPE_LOCAL_BANK_FIELD:
803433d6423SLionel Sambuc
804433d6423SLionel Sambuc AcpiOsPrintf ("BankField\n");
805433d6423SLionel Sambuc break;
806433d6423SLionel Sambuc
807433d6423SLionel Sambuc case ACPI_TYPE_LOCAL_REGION_FIELD:
808433d6423SLionel Sambuc
809433d6423SLionel Sambuc AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
810433d6423SLionel Sambuc "byte=%X bit=%X of below:\n",
811433d6423SLionel Sambuc ObjDesc->Field.BitLength,
812433d6423SLionel Sambuc ObjDesc->Field.AccessByteWidth,
813433d6423SLionel Sambuc ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
814433d6423SLionel Sambuc ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
815433d6423SLionel Sambuc ObjDesc->Field.BaseByteOffset,
816433d6423SLionel Sambuc ObjDesc->Field.StartFieldBitOffset);
817433d6423SLionel Sambuc
818433d6423SLionel Sambuc AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1);
819433d6423SLionel Sambuc break;
820433d6423SLionel Sambuc
821433d6423SLionel Sambuc case ACPI_TYPE_LOCAL_INDEX_FIELD:
822433d6423SLionel Sambuc
823433d6423SLionel Sambuc AcpiOsPrintf ("IndexField\n");
824433d6423SLionel Sambuc break;
825433d6423SLionel Sambuc
826433d6423SLionel Sambuc case ACPI_TYPE_BUFFER_FIELD:
827433d6423SLionel Sambuc
828433d6423SLionel Sambuc AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
829433d6423SLionel Sambuc ObjDesc->BufferField.BitLength,
830433d6423SLionel Sambuc ObjDesc->BufferField.BaseByteOffset,
831433d6423SLionel Sambuc ObjDesc->BufferField.StartFieldBitOffset);
832433d6423SLionel Sambuc
833433d6423SLionel Sambuc if (!ObjDesc->BufferField.BufferObj)
834433d6423SLionel Sambuc {
835433d6423SLionel Sambuc ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
836433d6423SLionel Sambuc }
837433d6423SLionel Sambuc else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
838433d6423SLionel Sambuc ACPI_TYPE_BUFFER)
839433d6423SLionel Sambuc {
840433d6423SLionel Sambuc AcpiOsPrintf ("*not a Buffer*\n");
841433d6423SLionel Sambuc }
842433d6423SLionel Sambuc else
843433d6423SLionel Sambuc {
844433d6423SLionel Sambuc AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth+1);
845433d6423SLionel Sambuc }
846433d6423SLionel Sambuc break;
847433d6423SLionel Sambuc
848433d6423SLionel Sambuc case ACPI_TYPE_EVENT:
849433d6423SLionel Sambuc
850433d6423SLionel Sambuc AcpiOsPrintf ("Event\n");
851433d6423SLionel Sambuc break;
852433d6423SLionel Sambuc
853433d6423SLionel Sambuc case ACPI_TYPE_METHOD:
854433d6423SLionel Sambuc
855433d6423SLionel Sambuc AcpiOsPrintf ("Method(%X) @ %p:%X\n",
856433d6423SLionel Sambuc ObjDesc->Method.ParamCount,
857433d6423SLionel Sambuc ObjDesc->Method.AmlStart,
858433d6423SLionel Sambuc ObjDesc->Method.AmlLength);
859433d6423SLionel Sambuc break;
860433d6423SLionel Sambuc
861433d6423SLionel Sambuc case ACPI_TYPE_MUTEX:
862433d6423SLionel Sambuc
863433d6423SLionel Sambuc AcpiOsPrintf ("Mutex\n");
864433d6423SLionel Sambuc break;
865433d6423SLionel Sambuc
866433d6423SLionel Sambuc case ACPI_TYPE_DEVICE:
867433d6423SLionel Sambuc
868433d6423SLionel Sambuc AcpiOsPrintf ("Device\n");
869433d6423SLionel Sambuc break;
870433d6423SLionel Sambuc
871433d6423SLionel Sambuc case ACPI_TYPE_POWER:
872433d6423SLionel Sambuc
873433d6423SLionel Sambuc AcpiOsPrintf ("Power\n");
874433d6423SLionel Sambuc break;
875433d6423SLionel Sambuc
876433d6423SLionel Sambuc case ACPI_TYPE_PROCESSOR:
877433d6423SLionel Sambuc
878433d6423SLionel Sambuc AcpiOsPrintf ("Processor\n");
879433d6423SLionel Sambuc break;
880433d6423SLionel Sambuc
881433d6423SLionel Sambuc case ACPI_TYPE_THERMAL:
882433d6423SLionel Sambuc
883433d6423SLionel Sambuc AcpiOsPrintf ("Thermal\n");
884433d6423SLionel Sambuc break;
885433d6423SLionel Sambuc
886433d6423SLionel Sambuc default:
887*29492bb7SDavid van Moolenbroek
888433d6423SLionel Sambuc /* Unknown Type */
889433d6423SLionel Sambuc
890433d6423SLionel Sambuc AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
891433d6423SLionel Sambuc break;
892433d6423SLionel Sambuc }
893433d6423SLionel Sambuc
894433d6423SLionel Sambuc return;
895433d6423SLionel Sambuc }
896433d6423SLionel Sambuc
897433d6423SLionel Sambuc
898433d6423SLionel Sambuc /*******************************************************************************
899433d6423SLionel Sambuc *
900433d6423SLionel Sambuc * FUNCTION: AcpiExDumpOperands
901433d6423SLionel Sambuc *
902433d6423SLionel Sambuc * PARAMETERS: Operands - A list of Operand objects
903433d6423SLionel Sambuc * OpcodeName - AML opcode name
904433d6423SLionel Sambuc * NumOperands - Operand count for this opcode
905433d6423SLionel Sambuc *
906433d6423SLionel Sambuc * DESCRIPTION: Dump the operands associated with the opcode
907433d6423SLionel Sambuc *
908433d6423SLionel Sambuc ******************************************************************************/
909433d6423SLionel Sambuc
910433d6423SLionel Sambuc void
AcpiExDumpOperands(ACPI_OPERAND_OBJECT ** Operands,const char * OpcodeName,UINT32 NumOperands)911433d6423SLionel Sambuc AcpiExDumpOperands (
912433d6423SLionel Sambuc ACPI_OPERAND_OBJECT **Operands,
913433d6423SLionel Sambuc const char *OpcodeName,
914433d6423SLionel Sambuc UINT32 NumOperands)
915433d6423SLionel Sambuc {
916433d6423SLionel Sambuc ACPI_FUNCTION_NAME (ExDumpOperands);
917433d6423SLionel Sambuc
918433d6423SLionel Sambuc
919433d6423SLionel Sambuc if (!OpcodeName)
920433d6423SLionel Sambuc {
921433d6423SLionel Sambuc OpcodeName = "UNKNOWN";
922433d6423SLionel Sambuc }
923433d6423SLionel Sambuc
924433d6423SLionel Sambuc ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
925433d6423SLionel Sambuc "**** Start operand dump for opcode [%s], %u operands\n",
926433d6423SLionel Sambuc OpcodeName, NumOperands));
927433d6423SLionel Sambuc
928433d6423SLionel Sambuc if (NumOperands == 0)
929433d6423SLionel Sambuc {
930433d6423SLionel Sambuc NumOperands = 1;
931433d6423SLionel Sambuc }
932433d6423SLionel Sambuc
933433d6423SLionel Sambuc /* Dump the individual operands */
934433d6423SLionel Sambuc
935433d6423SLionel Sambuc while (NumOperands)
936433d6423SLionel Sambuc {
937433d6423SLionel Sambuc AcpiExDumpOperand (*Operands, 0);
938433d6423SLionel Sambuc Operands++;
939433d6423SLionel Sambuc NumOperands--;
940433d6423SLionel Sambuc }
941433d6423SLionel Sambuc
942433d6423SLionel Sambuc ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
943433d6423SLionel Sambuc "**** End operand dump for [%s]\n", OpcodeName));
944433d6423SLionel Sambuc return;
945433d6423SLionel Sambuc }
946433d6423SLionel Sambuc
947433d6423SLionel Sambuc
948433d6423SLionel Sambuc /*******************************************************************************
949433d6423SLionel Sambuc *
950433d6423SLionel Sambuc * FUNCTION: AcpiExOut* functions
951433d6423SLionel Sambuc *
952433d6423SLionel Sambuc * PARAMETERS: Title - Descriptive text
953433d6423SLionel Sambuc * Value - Value to be displayed
954433d6423SLionel Sambuc *
955433d6423SLionel Sambuc * DESCRIPTION: Object dump output formatting functions. These functions
956433d6423SLionel Sambuc * reduce the number of format strings required and keeps them
957433d6423SLionel Sambuc * all in one place for easy modification.
958433d6423SLionel Sambuc *
959433d6423SLionel Sambuc ******************************************************************************/
960433d6423SLionel Sambuc
961433d6423SLionel Sambuc static void
AcpiExOutString(char * Title,char * Value)962433d6423SLionel Sambuc AcpiExOutString (
963433d6423SLionel Sambuc char *Title,
964433d6423SLionel Sambuc char *Value)
965433d6423SLionel Sambuc {
966433d6423SLionel Sambuc AcpiOsPrintf ("%20s : %s\n", Title, Value);
967433d6423SLionel Sambuc }
968433d6423SLionel Sambuc
969433d6423SLionel Sambuc static void
AcpiExOutPointer(char * Title,void * Value)970433d6423SLionel Sambuc AcpiExOutPointer (
971433d6423SLionel Sambuc char *Title,
972433d6423SLionel Sambuc void *Value)
973433d6423SLionel Sambuc {
974433d6423SLionel Sambuc AcpiOsPrintf ("%20s : %p\n", Title, Value);
975433d6423SLionel Sambuc }
976433d6423SLionel Sambuc
977433d6423SLionel Sambuc
978433d6423SLionel Sambuc /*******************************************************************************
979433d6423SLionel Sambuc *
980433d6423SLionel Sambuc * FUNCTION: AcpiExDumpNamespaceNode
981433d6423SLionel Sambuc *
982433d6423SLionel Sambuc * PARAMETERS: Node - Descriptor to dump
983433d6423SLionel Sambuc * Flags - Force display if TRUE
984433d6423SLionel Sambuc *
985433d6423SLionel Sambuc * DESCRIPTION: Dumps the members of the given.Node
986433d6423SLionel Sambuc *
987433d6423SLionel Sambuc ******************************************************************************/
988433d6423SLionel Sambuc
989433d6423SLionel Sambuc void
AcpiExDumpNamespaceNode(ACPI_NAMESPACE_NODE * Node,UINT32 Flags)990433d6423SLionel Sambuc AcpiExDumpNamespaceNode (
991433d6423SLionel Sambuc ACPI_NAMESPACE_NODE *Node,
992433d6423SLionel Sambuc UINT32 Flags)
993433d6423SLionel Sambuc {
994433d6423SLionel Sambuc
995433d6423SLionel Sambuc ACPI_FUNCTION_ENTRY ();
996433d6423SLionel Sambuc
997433d6423SLionel Sambuc
998433d6423SLionel Sambuc if (!Flags)
999433d6423SLionel Sambuc {
1000*29492bb7SDavid van Moolenbroek /* Check if debug output enabled */
1001*29492bb7SDavid van Moolenbroek
1002*29492bb7SDavid van Moolenbroek if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
1003433d6423SLionel Sambuc {
1004433d6423SLionel Sambuc return;
1005433d6423SLionel Sambuc }
1006433d6423SLionel Sambuc }
1007433d6423SLionel Sambuc
1008433d6423SLionel Sambuc AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
1009*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
1010*29492bb7SDavid van Moolenbroek Node->Type, AcpiUtGetTypeName (Node->Type));
1011433d6423SLionel Sambuc
1012433d6423SLionel Sambuc AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
1013433d6423SLionel Sambuc AcpiExDumpNode);
1014433d6423SLionel Sambuc }
1015433d6423SLionel Sambuc
1016433d6423SLionel Sambuc
1017433d6423SLionel Sambuc /*******************************************************************************
1018433d6423SLionel Sambuc *
1019433d6423SLionel Sambuc * FUNCTION: AcpiExDumpReferenceObj
1020433d6423SLionel Sambuc *
1021433d6423SLionel Sambuc * PARAMETERS: Object - Descriptor to dump
1022433d6423SLionel Sambuc *
1023433d6423SLionel Sambuc * DESCRIPTION: Dumps a reference object
1024433d6423SLionel Sambuc *
1025433d6423SLionel Sambuc ******************************************************************************/
1026433d6423SLionel Sambuc
1027433d6423SLionel Sambuc static void
AcpiExDumpReferenceObj(ACPI_OPERAND_OBJECT * ObjDesc)1028433d6423SLionel Sambuc AcpiExDumpReferenceObj (
1029433d6423SLionel Sambuc ACPI_OPERAND_OBJECT *ObjDesc)
1030433d6423SLionel Sambuc {
1031433d6423SLionel Sambuc ACPI_BUFFER RetBuf;
1032433d6423SLionel Sambuc ACPI_STATUS Status;
1033433d6423SLionel Sambuc
1034433d6423SLionel Sambuc
1035433d6423SLionel Sambuc RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1036433d6423SLionel Sambuc
1037433d6423SLionel Sambuc if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
1038433d6423SLionel Sambuc {
1039433d6423SLionel Sambuc AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
1040433d6423SLionel Sambuc
1041433d6423SLionel Sambuc Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf);
1042433d6423SLionel Sambuc if (ACPI_FAILURE (Status))
1043433d6423SLionel Sambuc {
1044433d6423SLionel Sambuc AcpiOsPrintf (" Could not convert name to pathname\n");
1045433d6423SLionel Sambuc }
1046433d6423SLionel Sambuc else
1047433d6423SLionel Sambuc {
1048433d6423SLionel Sambuc AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
1049433d6423SLionel Sambuc ACPI_FREE (RetBuf.Pointer);
1050433d6423SLionel Sambuc }
1051433d6423SLionel Sambuc }
1052433d6423SLionel Sambuc else if (ObjDesc->Reference.Object)
1053433d6423SLionel Sambuc {
1054433d6423SLionel Sambuc if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
1055433d6423SLionel Sambuc {
1056433d6423SLionel Sambuc AcpiOsPrintf (" Target: %p", ObjDesc->Reference.Object);
1057433d6423SLionel Sambuc if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
1058433d6423SLionel Sambuc {
1059433d6423SLionel Sambuc AcpiOsPrintf (" Table Index: %X\n", ObjDesc->Reference.Value);
1060433d6423SLionel Sambuc }
1061433d6423SLionel Sambuc else
1062433d6423SLionel Sambuc {
1063433d6423SLionel Sambuc AcpiOsPrintf (" Target: %p [%s]\n", ObjDesc->Reference.Object,
1064433d6423SLionel Sambuc AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
1065433d6423SLionel Sambuc ObjDesc->Reference.Object)->Common.Type));
1066433d6423SLionel Sambuc }
1067433d6423SLionel Sambuc }
1068433d6423SLionel Sambuc else
1069433d6423SLionel Sambuc {
1070433d6423SLionel Sambuc AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
1071433d6423SLionel Sambuc }
1072433d6423SLionel Sambuc }
1073433d6423SLionel Sambuc }
1074433d6423SLionel Sambuc
1075433d6423SLionel Sambuc
1076433d6423SLionel Sambuc /*******************************************************************************
1077433d6423SLionel Sambuc *
1078433d6423SLionel Sambuc * FUNCTION: AcpiExDumpPackageObj
1079433d6423SLionel Sambuc *
1080433d6423SLionel Sambuc * PARAMETERS: ObjDesc - Descriptor to dump
1081433d6423SLionel Sambuc * Level - Indentation Level
1082433d6423SLionel Sambuc * Index - Package index for this object
1083433d6423SLionel Sambuc *
1084433d6423SLionel Sambuc * DESCRIPTION: Dumps the elements of the package
1085433d6423SLionel Sambuc *
1086433d6423SLionel Sambuc ******************************************************************************/
1087433d6423SLionel Sambuc
1088433d6423SLionel Sambuc static void
AcpiExDumpPackageObj(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Level,UINT32 Index)1089433d6423SLionel Sambuc AcpiExDumpPackageObj (
1090433d6423SLionel Sambuc ACPI_OPERAND_OBJECT *ObjDesc,
1091433d6423SLionel Sambuc UINT32 Level,
1092433d6423SLionel Sambuc UINT32 Index)
1093433d6423SLionel Sambuc {
1094433d6423SLionel Sambuc UINT32 i;
1095433d6423SLionel Sambuc
1096433d6423SLionel Sambuc
1097433d6423SLionel Sambuc /* Indentation and index output */
1098433d6423SLionel Sambuc
1099433d6423SLionel Sambuc if (Level > 0)
1100433d6423SLionel Sambuc {
1101433d6423SLionel Sambuc for (i = 0; i < Level; i++)
1102433d6423SLionel Sambuc {
1103433d6423SLionel Sambuc AcpiOsPrintf (" ");
1104433d6423SLionel Sambuc }
1105433d6423SLionel Sambuc
1106433d6423SLionel Sambuc AcpiOsPrintf ("[%.2d] ", Index);
1107433d6423SLionel Sambuc }
1108433d6423SLionel Sambuc
1109433d6423SLionel Sambuc AcpiOsPrintf ("%p ", ObjDesc);
1110433d6423SLionel Sambuc
1111433d6423SLionel Sambuc /* Null package elements are allowed */
1112433d6423SLionel Sambuc
1113433d6423SLionel Sambuc if (!ObjDesc)
1114433d6423SLionel Sambuc {
1115433d6423SLionel Sambuc AcpiOsPrintf ("[Null Object]\n");
1116433d6423SLionel Sambuc return;
1117433d6423SLionel Sambuc }
1118433d6423SLionel Sambuc
1119433d6423SLionel Sambuc /* Packages may only contain a few object types */
1120433d6423SLionel Sambuc
1121433d6423SLionel Sambuc switch (ObjDesc->Common.Type)
1122433d6423SLionel Sambuc {
1123433d6423SLionel Sambuc case ACPI_TYPE_INTEGER:
1124433d6423SLionel Sambuc
1125433d6423SLionel Sambuc AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
1126433d6423SLionel Sambuc ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
1127433d6423SLionel Sambuc break;
1128433d6423SLionel Sambuc
1129433d6423SLionel Sambuc case ACPI_TYPE_STRING:
1130433d6423SLionel Sambuc
1131433d6423SLionel Sambuc AcpiOsPrintf ("[String] Value: ");
1132*29492bb7SDavid van Moolenbroek AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
1133433d6423SLionel Sambuc AcpiOsPrintf ("\n");
1134433d6423SLionel Sambuc break;
1135433d6423SLionel Sambuc
1136433d6423SLionel Sambuc case ACPI_TYPE_BUFFER:
1137433d6423SLionel Sambuc
1138433d6423SLionel Sambuc AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
1139433d6423SLionel Sambuc if (ObjDesc->Buffer.Length)
1140433d6423SLionel Sambuc {
1141*29492bb7SDavid van Moolenbroek AcpiUtDebugDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
1142433d6423SLionel Sambuc ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
1143433d6423SLionel Sambuc }
1144433d6423SLionel Sambuc else
1145433d6423SLionel Sambuc {
1146433d6423SLionel Sambuc AcpiOsPrintf ("\n");
1147433d6423SLionel Sambuc }
1148433d6423SLionel Sambuc break;
1149433d6423SLionel Sambuc
1150433d6423SLionel Sambuc case ACPI_TYPE_PACKAGE:
1151433d6423SLionel Sambuc
1152433d6423SLionel Sambuc AcpiOsPrintf ("[Package] Contains %u Elements:\n",
1153433d6423SLionel Sambuc ObjDesc->Package.Count);
1154433d6423SLionel Sambuc
1155433d6423SLionel Sambuc for (i = 0; i < ObjDesc->Package.Count; i++)
1156433d6423SLionel Sambuc {
1157433d6423SLionel Sambuc AcpiExDumpPackageObj (ObjDesc->Package.Elements[i], Level+1, i);
1158433d6423SLionel Sambuc }
1159433d6423SLionel Sambuc break;
1160433d6423SLionel Sambuc
1161433d6423SLionel Sambuc case ACPI_TYPE_LOCAL_REFERENCE:
1162433d6423SLionel Sambuc
1163433d6423SLionel Sambuc AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
1164433d6423SLionel Sambuc AcpiUtGetReferenceName (ObjDesc),
1165433d6423SLionel Sambuc ObjDesc->Reference.Class);
1166433d6423SLionel Sambuc AcpiExDumpReferenceObj (ObjDesc);
1167433d6423SLionel Sambuc break;
1168433d6423SLionel Sambuc
1169433d6423SLionel Sambuc default:
1170433d6423SLionel Sambuc
1171433d6423SLionel Sambuc AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type);
1172433d6423SLionel Sambuc break;
1173433d6423SLionel Sambuc }
1174433d6423SLionel Sambuc }
1175433d6423SLionel Sambuc
1176433d6423SLionel Sambuc
1177433d6423SLionel Sambuc /*******************************************************************************
1178433d6423SLionel Sambuc *
1179433d6423SLionel Sambuc * FUNCTION: AcpiExDumpObjectDescriptor
1180433d6423SLionel Sambuc *
1181433d6423SLionel Sambuc * PARAMETERS: ObjDesc - Descriptor to dump
1182433d6423SLionel Sambuc * Flags - Force display if TRUE
1183433d6423SLionel Sambuc *
1184433d6423SLionel Sambuc * DESCRIPTION: Dumps the members of the object descriptor given.
1185433d6423SLionel Sambuc *
1186433d6423SLionel Sambuc ******************************************************************************/
1187433d6423SLionel Sambuc
1188433d6423SLionel Sambuc void
AcpiExDumpObjectDescriptor(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Flags)1189433d6423SLionel Sambuc AcpiExDumpObjectDescriptor (
1190433d6423SLionel Sambuc ACPI_OPERAND_OBJECT *ObjDesc,
1191433d6423SLionel Sambuc UINT32 Flags)
1192433d6423SLionel Sambuc {
1193433d6423SLionel Sambuc ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
1194433d6423SLionel Sambuc
1195433d6423SLionel Sambuc
1196433d6423SLionel Sambuc if (!ObjDesc)
1197433d6423SLionel Sambuc {
1198433d6423SLionel Sambuc return_VOID;
1199433d6423SLionel Sambuc }
1200433d6423SLionel Sambuc
1201433d6423SLionel Sambuc if (!Flags)
1202433d6423SLionel Sambuc {
1203*29492bb7SDavid van Moolenbroek /* Check if debug output enabled */
1204*29492bb7SDavid van Moolenbroek
1205*29492bb7SDavid van Moolenbroek if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
1206433d6423SLionel Sambuc {
1207433d6423SLionel Sambuc return_VOID;
1208433d6423SLionel Sambuc }
1209433d6423SLionel Sambuc }
1210433d6423SLionel Sambuc
1211433d6423SLionel Sambuc if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1212433d6423SLionel Sambuc {
1213433d6423SLionel Sambuc AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
1214433d6423SLionel Sambuc
1215433d6423SLionel Sambuc AcpiOsPrintf ("\nAttached Object (%p):\n",
1216433d6423SLionel Sambuc ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object);
1217433d6423SLionel Sambuc
1218*29492bb7SDavid van Moolenbroek ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object;
1219*29492bb7SDavid van Moolenbroek goto DumpObject;
1220433d6423SLionel Sambuc }
1221433d6423SLionel Sambuc
1222433d6423SLionel Sambuc if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
1223433d6423SLionel Sambuc {
1224433d6423SLionel Sambuc AcpiOsPrintf (
1225*29492bb7SDavid van Moolenbroek "%p is not an ACPI operand object: [%s]\n",
1226433d6423SLionel Sambuc ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
1227433d6423SLionel Sambuc return_VOID;
1228433d6423SLionel Sambuc }
1229433d6423SLionel Sambuc
1230*29492bb7SDavid van Moolenbroek /* Validate the object type */
1231*29492bb7SDavid van Moolenbroek
1232*29492bb7SDavid van Moolenbroek if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1233433d6423SLionel Sambuc {
1234*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("Not a known object type: %2.2X\n",
1235*29492bb7SDavid van Moolenbroek ObjDesc->Common.Type);
1236433d6423SLionel Sambuc return_VOID;
1237433d6423SLionel Sambuc }
1238433d6423SLionel Sambuc
1239*29492bb7SDavid van Moolenbroek
1240*29492bb7SDavid van Moolenbroek DumpObject:
1241*29492bb7SDavid van Moolenbroek
1242433d6423SLionel Sambuc /* Common Fields */
1243433d6423SLionel Sambuc
1244433d6423SLionel Sambuc AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
1245433d6423SLionel Sambuc
1246433d6423SLionel Sambuc /* Object-specific fields */
1247433d6423SLionel Sambuc
1248433d6423SLionel Sambuc AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1249*29492bb7SDavid van Moolenbroek
1250*29492bb7SDavid van Moolenbroek if (ObjDesc->Common.Type == ACPI_TYPE_REGION)
1251*29492bb7SDavid van Moolenbroek {
1252*29492bb7SDavid van Moolenbroek ObjDesc = ObjDesc->Common.NextObject;
1253*29492bb7SDavid van Moolenbroek if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1254*29492bb7SDavid van Moolenbroek {
1255*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("Secondary object is not a known object type: %2.2X\n",
1256*29492bb7SDavid van Moolenbroek ObjDesc->Common.Type);
1257*29492bb7SDavid van Moolenbroek
1258*29492bb7SDavid van Moolenbroek return_VOID;
1259*29492bb7SDavid van Moolenbroek }
1260*29492bb7SDavid van Moolenbroek
1261*29492bb7SDavid van Moolenbroek AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc);
1262*29492bb7SDavid van Moolenbroek AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1263*29492bb7SDavid van Moolenbroek }
1264*29492bb7SDavid van Moolenbroek
1265433d6423SLionel Sambuc return_VOID;
1266433d6423SLionel Sambuc }
1267433d6423SLionel Sambuc
1268433d6423SLionel Sambuc #endif
1269