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