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