exdump.c revision 1.14 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.13 christos * Copyright (C) 2000 - 2019, 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.9 christos const 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.11 christos {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Package.Count), "Element Count"},
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.14 christos {ACPI_EXD_UINT16, 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.14 christos {ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET (Flags), "Flags"},
318 1.14 christos {ACPI_EXD_UINT16, 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.9 christos const char *Name;
384 1.1 jruoho UINT8 Count;
385 1.5 christos ACPI_OPERAND_OBJECT *Start;
386 1.5 christos ACPI_OPERAND_OBJECT *Data = NULL;
387 1.5 christos ACPI_OPERAND_OBJECT *Next;
388 1.5 christos ACPI_NAMESPACE_NODE *Node;
389 1.1 jruoho
390 1.1 jruoho
391 1.1 jruoho if (!Info)
392 1.1 jruoho {
393 1.1 jruoho AcpiOsPrintf (
394 1.1 jruoho "ExDumpObject: Display not implemented for object type %s\n",
395 1.1 jruoho AcpiUtGetObjectTypeName (ObjDesc));
396 1.1 jruoho return;
397 1.1 jruoho }
398 1.1 jruoho
399 1.1 jruoho /* First table entry must contain the table length (# of table entries) */
400 1.1 jruoho
401 1.1 jruoho Count = Info->Offset;
402 1.1 jruoho
403 1.1 jruoho while (Count)
404 1.1 jruoho {
405 1.11 christos if (!ObjDesc)
406 1.11 christos {
407 1.11 christos return;
408 1.11 christos }
409 1.11 christos
410 1.1 jruoho Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
411 1.2 jruoho Name = __UNCONST(Info->Name);
412 1.1 jruoho
413 1.1 jruoho switch (Info->Opcode)
414 1.1 jruoho {
415 1.1 jruoho case ACPI_EXD_INIT:
416 1.4 christos
417 1.1 jruoho break;
418 1.1 jruoho
419 1.1 jruoho case ACPI_EXD_TYPE:
420 1.1 jruoho
421 1.5 christos AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
422 1.11 christos ObjDesc->Common.Type,
423 1.11 christos AcpiUtGetObjectTypeName (ObjDesc));
424 1.1 jruoho break;
425 1.1 jruoho
426 1.1 jruoho case ACPI_EXD_UINT8:
427 1.1 jruoho
428 1.1 jruoho AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
429 1.1 jruoho break;
430 1.1 jruoho
431 1.1 jruoho case ACPI_EXD_UINT16:
432 1.1 jruoho
433 1.1 jruoho AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
434 1.1 jruoho break;
435 1.1 jruoho
436 1.1 jruoho case ACPI_EXD_UINT32:
437 1.1 jruoho
438 1.1 jruoho AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
439 1.1 jruoho break;
440 1.1 jruoho
441 1.1 jruoho case ACPI_EXD_UINT64:
442 1.1 jruoho
443 1.1 jruoho AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
444 1.1 jruoho ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
445 1.1 jruoho break;
446 1.1 jruoho
447 1.1 jruoho case ACPI_EXD_POINTER:
448 1.1 jruoho case ACPI_EXD_ADDRESS:
449 1.1 jruoho
450 1.1 jruoho AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
451 1.1 jruoho break;
452 1.1 jruoho
453 1.1 jruoho case ACPI_EXD_STRING:
454 1.1 jruoho
455 1.1 jruoho AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
456 1.1 jruoho AcpiOsPrintf ("\n");
457 1.1 jruoho break;
458 1.1 jruoho
459 1.1 jruoho case ACPI_EXD_BUFFER:
460 1.1 jruoho
461 1.8 christos ACPI_DUMP_BUFFER (
462 1.8 christos ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
463 1.1 jruoho break;
464 1.1 jruoho
465 1.1 jruoho case ACPI_EXD_PACKAGE:
466 1.1 jruoho
467 1.1 jruoho /* Dump the package contents */
468 1.1 jruoho
469 1.1 jruoho AcpiOsPrintf ("\nPackage Contents:\n");
470 1.1 jruoho AcpiExDumpPackageObj (ObjDesc, 0, 0);
471 1.1 jruoho break;
472 1.1 jruoho
473 1.1 jruoho case ACPI_EXD_FIELD:
474 1.1 jruoho
475 1.1 jruoho AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
476 1.1 jruoho break;
477 1.1 jruoho
478 1.1 jruoho case ACPI_EXD_REFERENCE:
479 1.1 jruoho
480 1.9 christos AcpiExOutString ("Class Name", AcpiUtGetReferenceName (ObjDesc));
481 1.1 jruoho AcpiExDumpReferenceObj (ObjDesc);
482 1.1 jruoho break;
483 1.1 jruoho
484 1.5 christos case ACPI_EXD_LIST:
485 1.5 christos
486 1.5 christos Start = *ACPI_CAST_PTR (void *, Target);
487 1.5 christos Next = Start;
488 1.5 christos
489 1.11 christos AcpiOsPrintf ("%20s : %p ", Name, Next);
490 1.5 christos if (Next)
491 1.5 christos {
492 1.11 christos AcpiOsPrintf ("%s (Type %2.2X)",
493 1.5 christos AcpiUtGetObjectTypeName (Next), Next->Common.Type);
494 1.5 christos
495 1.5 christos while (Next->Common.NextObject)
496 1.5 christos {
497 1.5 christos if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
498 1.5 christos !Data)
499 1.5 christos {
500 1.5 christos Data = Next;
501 1.5 christos }
502 1.5 christos
503 1.5 christos Next = Next->Common.NextObject;
504 1.5 christos AcpiOsPrintf ("->%p(%s %2.2X)", Next,
505 1.5 christos AcpiUtGetObjectTypeName (Next), Next->Common.Type);
506 1.5 christos
507 1.5 christos if ((Next == Start) || (Next == Data))
508 1.5 christos {
509 1.8 christos AcpiOsPrintf (
510 1.8 christos "\n**** Error: Object list appears to be circular linked");
511 1.5 christos break;
512 1.5 christos }
513 1.5 christos }
514 1.5 christos }
515 1.11 christos else
516 1.11 christos {
517 1.11 christos AcpiOsPrintf ("- No attached objects");
518 1.11 christos }
519 1.5 christos
520 1.5 christos AcpiOsPrintf ("\n");
521 1.5 christos break;
522 1.5 christos
523 1.5 christos case ACPI_EXD_HDLR_LIST:
524 1.5 christos
525 1.5 christos Start = *ACPI_CAST_PTR (void *, Target);
526 1.5 christos Next = Start;
527 1.5 christos
528 1.5 christos AcpiOsPrintf ("%20s : %p", Name, Next);
529 1.5 christos if (Next)
530 1.5 christos {
531 1.5 christos AcpiOsPrintf ("(%s %2.2X)",
532 1.8 christos AcpiUtGetObjectTypeName (Next),
533 1.8 christos Next->AddressSpace.SpaceId);
534 1.5 christos
535 1.5 christos while (Next->AddressSpace.Next)
536 1.5 christos {
537 1.5 christos if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
538 1.5 christos !Data)
539 1.5 christos {
540 1.5 christos Data = Next;
541 1.5 christos }
542 1.5 christos
543 1.5 christos Next = Next->AddressSpace.Next;
544 1.5 christos AcpiOsPrintf ("->%p(%s %2.2X)", Next,
545 1.8 christos AcpiUtGetObjectTypeName (Next),
546 1.8 christos Next->AddressSpace.SpaceId);
547 1.5 christos
548 1.5 christos if ((Next == Start) || (Next == Data))
549 1.5 christos {
550 1.8 christos AcpiOsPrintf (
551 1.8 christos "\n**** Error: Handler list appears to be circular linked");
552 1.5 christos break;
553 1.5 christos }
554 1.5 christos }
555 1.5 christos }
556 1.5 christos
557 1.5 christos AcpiOsPrintf ("\n");
558 1.5 christos break;
559 1.5 christos
560 1.5 christos case ACPI_EXD_RGN_LIST:
561 1.5 christos
562 1.5 christos Start = *ACPI_CAST_PTR (void *, Target);
563 1.5 christos Next = Start;
564 1.5 christos
565 1.5 christos AcpiOsPrintf ("%20s : %p", Name, Next);
566 1.5 christos if (Next)
567 1.5 christos {
568 1.5 christos AcpiOsPrintf ("(%s %2.2X)",
569 1.5 christos AcpiUtGetObjectTypeName (Next), Next->Common.Type);
570 1.5 christos
571 1.5 christos while (Next->Region.Next)
572 1.5 christos {
573 1.5 christos if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
574 1.5 christos !Data)
575 1.5 christos {
576 1.5 christos Data = Next;
577 1.5 christos }
578 1.5 christos
579 1.5 christos Next = Next->Region.Next;
580 1.5 christos AcpiOsPrintf ("->%p(%s %2.2X)", Next,
581 1.5 christos AcpiUtGetObjectTypeName (Next), Next->Common.Type);
582 1.5 christos
583 1.5 christos if ((Next == Start) || (Next == Data))
584 1.5 christos {
585 1.8 christos AcpiOsPrintf (
586 1.8 christos "\n**** Error: Region list appears to be circular linked");
587 1.5 christos break;
588 1.5 christos }
589 1.5 christos }
590 1.5 christos }
591 1.5 christos
592 1.5 christos AcpiOsPrintf ("\n");
593 1.5 christos break;
594 1.5 christos
595 1.5 christos case ACPI_EXD_NODE:
596 1.5 christos
597 1.5 christos Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target);
598 1.5 christos
599 1.5 christos AcpiOsPrintf ("%20s : %p", Name, Node);
600 1.5 christos if (Node)
601 1.5 christos {
602 1.5 christos AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii);
603 1.5 christos }
604 1.5 christos AcpiOsPrintf ("\n");
605 1.5 christos break;
606 1.5 christos
607 1.1 jruoho default:
608 1.1 jruoho
609 1.1 jruoho AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
610 1.1 jruoho Info->Opcode);
611 1.1 jruoho return;
612 1.1 jruoho }
613 1.1 jruoho
614 1.1 jruoho Info++;
615 1.1 jruoho Count--;
616 1.1 jruoho }
617 1.1 jruoho }
618 1.1 jruoho
619 1.1 jruoho
620 1.1 jruoho /*******************************************************************************
621 1.1 jruoho *
622 1.1 jruoho * FUNCTION: AcpiExDumpOperand
623 1.1 jruoho *
624 1.1 jruoho * PARAMETERS: *ObjDesc - Pointer to entry to be dumped
625 1.1 jruoho * Depth - Current nesting depth
626 1.1 jruoho *
627 1.1 jruoho * RETURN: None
628 1.1 jruoho *
629 1.1 jruoho * DESCRIPTION: Dump an operand object
630 1.1 jruoho *
631 1.1 jruoho ******************************************************************************/
632 1.1 jruoho
633 1.1 jruoho void
634 1.1 jruoho AcpiExDumpOperand (
635 1.1 jruoho ACPI_OPERAND_OBJECT *ObjDesc,
636 1.1 jruoho UINT32 Depth)
637 1.1 jruoho {
638 1.1 jruoho UINT32 Length;
639 1.1 jruoho UINT32 Index;
640 1.1 jruoho
641 1.1 jruoho
642 1.12 christos ACPI_FUNCTION_NAME (ExDumpOperand);
643 1.1 jruoho
644 1.1 jruoho
645 1.4 christos /* Check if debug output enabled */
646 1.4 christos
647 1.4 christos if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT))
648 1.1 jruoho {
649 1.1 jruoho return;
650 1.1 jruoho }
651 1.1 jruoho
652 1.1 jruoho if (!ObjDesc)
653 1.1 jruoho {
654 1.1 jruoho /* This could be a null element of a package */
655 1.1 jruoho
656 1.1 jruoho ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
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_NAMED)
661 1.1 jruoho {
662 1.1 jruoho ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
663 1.1 jruoho ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
664 1.1 jruoho return;
665 1.1 jruoho }
666 1.1 jruoho
667 1.1 jruoho if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
668 1.1 jruoho {
669 1.1 jruoho ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
670 1.1 jruoho "%p is not a node or operand object: [%s]\n",
671 1.1 jruoho ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
672 1.1 jruoho ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
673 1.1 jruoho return;
674 1.1 jruoho }
675 1.1 jruoho
676 1.1 jruoho /* ObjDesc is a valid object */
677 1.1 jruoho
678 1.1 jruoho if (Depth > 0)
679 1.1 jruoho {
680 1.11 christos ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
681 1.11 christos Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
682 1.1 jruoho }
683 1.1 jruoho else
684 1.1 jruoho {
685 1.11 christos ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Refs=%u ",
686 1.11 christos ObjDesc, ObjDesc->Common.ReferenceCount));
687 1.1 jruoho }
688 1.1 jruoho
689 1.1 jruoho /* Decode object type */
690 1.1 jruoho
691 1.1 jruoho switch (ObjDesc->Common.Type)
692 1.1 jruoho {
693 1.1 jruoho case ACPI_TYPE_LOCAL_REFERENCE:
694 1.1 jruoho
695 1.8 christos AcpiOsPrintf ("Reference: [%s] ",
696 1.8 christos AcpiUtGetReferenceName (ObjDesc));
697 1.1 jruoho
698 1.1 jruoho switch (ObjDesc->Reference.Class)
699 1.1 jruoho {
700 1.1 jruoho case ACPI_REFCLASS_DEBUG:
701 1.1 jruoho
702 1.1 jruoho AcpiOsPrintf ("\n");
703 1.1 jruoho break;
704 1.1 jruoho
705 1.1 jruoho case ACPI_REFCLASS_INDEX:
706 1.1 jruoho
707 1.1 jruoho AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
708 1.1 jruoho break;
709 1.1 jruoho
710 1.1 jruoho case ACPI_REFCLASS_TABLE:
711 1.1 jruoho
712 1.1 jruoho AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
713 1.1 jruoho break;
714 1.1 jruoho
715 1.1 jruoho case ACPI_REFCLASS_REFOF:
716 1.1 jruoho
717 1.1 jruoho AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
718 1.1 jruoho AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
719 1.1 jruoho ObjDesc->Reference.Object)->Common.Type));
720 1.1 jruoho break;
721 1.1 jruoho
722 1.1 jruoho case ACPI_REFCLASS_NAME:
723 1.1 jruoho
724 1.11 christos AcpiUtRepairName (ObjDesc->Reference.Node->Name.Ascii);
725 1.11 christos AcpiOsPrintf ("- [%4.4s] (Node %p)\n",
726 1.11 christos ObjDesc->Reference.Node->Name.Ascii,
727 1.11 christos ObjDesc->Reference.Node);
728 1.1 jruoho break;
729 1.1 jruoho
730 1.1 jruoho case ACPI_REFCLASS_ARG:
731 1.1 jruoho case ACPI_REFCLASS_LOCAL:
732 1.1 jruoho
733 1.1 jruoho AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
734 1.1 jruoho break;
735 1.1 jruoho
736 1.1 jruoho default: /* Unknown reference class */
737 1.1 jruoho
738 1.1 jruoho AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
739 1.1 jruoho break;
740 1.1 jruoho }
741 1.1 jruoho break;
742 1.1 jruoho
743 1.1 jruoho case ACPI_TYPE_BUFFER:
744 1.1 jruoho
745 1.1 jruoho AcpiOsPrintf ("Buffer length %.2X @ %p\n",
746 1.1 jruoho ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
747 1.1 jruoho
748 1.1 jruoho /* Debug only -- dump the buffer contents */
749 1.1 jruoho
750 1.1 jruoho if (ObjDesc->Buffer.Pointer)
751 1.1 jruoho {
752 1.1 jruoho Length = ObjDesc->Buffer.Length;
753 1.1 jruoho if (Length > 128)
754 1.1 jruoho {
755 1.1 jruoho Length = 128;
756 1.1 jruoho }
757 1.1 jruoho
758 1.8 christos AcpiOsPrintf (
759 1.8 christos "Buffer Contents: (displaying length 0x%.2X)\n", Length);
760 1.1 jruoho ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
761 1.1 jruoho }
762 1.1 jruoho break;
763 1.1 jruoho
764 1.1 jruoho case ACPI_TYPE_INTEGER:
765 1.1 jruoho
766 1.1 jruoho AcpiOsPrintf ("Integer %8.8X%8.8X\n",
767 1.1 jruoho ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
768 1.1 jruoho break;
769 1.1 jruoho
770 1.1 jruoho case ACPI_TYPE_PACKAGE:
771 1.1 jruoho
772 1.1 jruoho AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
773 1.1 jruoho ObjDesc->Package.Count, ObjDesc->Package.Elements);
774 1.1 jruoho
775 1.1 jruoho /*
776 1.1 jruoho * If elements exist, package element pointer is valid,
777 1.1 jruoho * and debug_level exceeds 1, dump package's elements.
778 1.1 jruoho */
779 1.1 jruoho if (ObjDesc->Package.Count &&
780 1.1 jruoho ObjDesc->Package.Elements &&
781 1.1 jruoho AcpiDbgLevel > 1)
782 1.1 jruoho {
783 1.1 jruoho for (Index = 0; Index < ObjDesc->Package.Count; Index++)
784 1.1 jruoho {
785 1.8 christos AcpiExDumpOperand (
786 1.8 christos ObjDesc->Package.Elements[Index], Depth + 1);
787 1.1 jruoho }
788 1.1 jruoho }
789 1.1 jruoho break;
790 1.1 jruoho
791 1.1 jruoho case ACPI_TYPE_REGION:
792 1.1 jruoho
793 1.1 jruoho AcpiOsPrintf ("Region %s (%X)",
794 1.1 jruoho AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
795 1.1 jruoho ObjDesc->Region.SpaceId);
796 1.1 jruoho
797 1.1 jruoho /*
798 1.1 jruoho * If the address and length have not been evaluated,
799 1.1 jruoho * don't print them.
800 1.1 jruoho */
801 1.1 jruoho if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
802 1.1 jruoho {
803 1.1 jruoho AcpiOsPrintf ("\n");
804 1.1 jruoho }
805 1.1 jruoho else
806 1.1 jruoho {
807 1.1 jruoho AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
808 1.6 christos ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
809 1.1 jruoho ObjDesc->Region.Length);
810 1.1 jruoho }
811 1.1 jruoho break;
812 1.1 jruoho
813 1.1 jruoho case ACPI_TYPE_STRING:
814 1.1 jruoho
815 1.1 jruoho AcpiOsPrintf ("String length %X @ %p ",
816 1.1 jruoho ObjDesc->String.Length,
817 1.1 jruoho ObjDesc->String.Pointer);
818 1.1 jruoho
819 1.1 jruoho AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
820 1.1 jruoho AcpiOsPrintf ("\n");
821 1.1 jruoho break;
822 1.1 jruoho
823 1.1 jruoho case ACPI_TYPE_LOCAL_BANK_FIELD:
824 1.1 jruoho
825 1.1 jruoho AcpiOsPrintf ("BankField\n");
826 1.1 jruoho break;
827 1.1 jruoho
828 1.1 jruoho case ACPI_TYPE_LOCAL_REGION_FIELD:
829 1.1 jruoho
830 1.1 jruoho AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
831 1.1 jruoho "byte=%X bit=%X of below:\n",
832 1.1 jruoho ObjDesc->Field.BitLength,
833 1.1 jruoho ObjDesc->Field.AccessByteWidth,
834 1.1 jruoho ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
835 1.1 jruoho ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
836 1.1 jruoho ObjDesc->Field.BaseByteOffset,
837 1.1 jruoho ObjDesc->Field.StartFieldBitOffset);
838 1.1 jruoho
839 1.8 christos AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth + 1);
840 1.1 jruoho break;
841 1.1 jruoho
842 1.1 jruoho case ACPI_TYPE_LOCAL_INDEX_FIELD:
843 1.1 jruoho
844 1.1 jruoho AcpiOsPrintf ("IndexField\n");
845 1.1 jruoho break;
846 1.1 jruoho
847 1.1 jruoho case ACPI_TYPE_BUFFER_FIELD:
848 1.1 jruoho
849 1.1 jruoho AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
850 1.1 jruoho ObjDesc->BufferField.BitLength,
851 1.1 jruoho ObjDesc->BufferField.BaseByteOffset,
852 1.1 jruoho ObjDesc->BufferField.StartFieldBitOffset);
853 1.1 jruoho
854 1.1 jruoho if (!ObjDesc->BufferField.BufferObj)
855 1.1 jruoho {
856 1.1 jruoho ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
857 1.1 jruoho }
858 1.1 jruoho else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
859 1.8 christos ACPI_TYPE_BUFFER)
860 1.1 jruoho {
861 1.1 jruoho AcpiOsPrintf ("*not a Buffer*\n");
862 1.1 jruoho }
863 1.1 jruoho else
864 1.1 jruoho {
865 1.8 christos AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth + 1);
866 1.1 jruoho }
867 1.1 jruoho break;
868 1.1 jruoho
869 1.1 jruoho case ACPI_TYPE_EVENT:
870 1.1 jruoho
871 1.1 jruoho AcpiOsPrintf ("Event\n");
872 1.1 jruoho break;
873 1.1 jruoho
874 1.1 jruoho case ACPI_TYPE_METHOD:
875 1.1 jruoho
876 1.1 jruoho AcpiOsPrintf ("Method(%X) @ %p:%X\n",
877 1.1 jruoho ObjDesc->Method.ParamCount,
878 1.1 jruoho ObjDesc->Method.AmlStart,
879 1.1 jruoho ObjDesc->Method.AmlLength);
880 1.1 jruoho break;
881 1.1 jruoho
882 1.1 jruoho case ACPI_TYPE_MUTEX:
883 1.1 jruoho
884 1.1 jruoho AcpiOsPrintf ("Mutex\n");
885 1.1 jruoho break;
886 1.1 jruoho
887 1.1 jruoho case ACPI_TYPE_DEVICE:
888 1.1 jruoho
889 1.1 jruoho AcpiOsPrintf ("Device\n");
890 1.1 jruoho break;
891 1.1 jruoho
892 1.1 jruoho case ACPI_TYPE_POWER:
893 1.1 jruoho
894 1.1 jruoho AcpiOsPrintf ("Power\n");
895 1.1 jruoho break;
896 1.1 jruoho
897 1.1 jruoho case ACPI_TYPE_PROCESSOR:
898 1.1 jruoho
899 1.1 jruoho AcpiOsPrintf ("Processor\n");
900 1.1 jruoho break;
901 1.1 jruoho
902 1.1 jruoho case ACPI_TYPE_THERMAL:
903 1.1 jruoho
904 1.1 jruoho AcpiOsPrintf ("Thermal\n");
905 1.1 jruoho break;
906 1.1 jruoho
907 1.4 christos default:
908 1.1 jruoho
909 1.1 jruoho /* Unknown Type */
910 1.1 jruoho
911 1.1 jruoho AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
912 1.1 jruoho break;
913 1.1 jruoho }
914 1.1 jruoho
915 1.1 jruoho return;
916 1.1 jruoho }
917 1.1 jruoho
918 1.1 jruoho
919 1.1 jruoho /*******************************************************************************
920 1.1 jruoho *
921 1.1 jruoho * FUNCTION: AcpiExDumpOperands
922 1.1 jruoho *
923 1.1 jruoho * PARAMETERS: Operands - A list of Operand objects
924 1.1 jruoho * OpcodeName - AML opcode name
925 1.1 jruoho * NumOperands - Operand count for this opcode
926 1.1 jruoho *
927 1.1 jruoho * DESCRIPTION: Dump the operands associated with the opcode
928 1.1 jruoho *
929 1.1 jruoho ******************************************************************************/
930 1.1 jruoho
931 1.1 jruoho void
932 1.1 jruoho AcpiExDumpOperands (
933 1.1 jruoho ACPI_OPERAND_OBJECT **Operands,
934 1.1 jruoho const char *OpcodeName,
935 1.1 jruoho UINT32 NumOperands)
936 1.1 jruoho {
937 1.12 christos ACPI_FUNCTION_TRACE (ExDumpOperands);
938 1.1 jruoho
939 1.1 jruoho
940 1.1 jruoho if (!OpcodeName)
941 1.1 jruoho {
942 1.1 jruoho OpcodeName = "UNKNOWN";
943 1.1 jruoho }
944 1.1 jruoho
945 1.1 jruoho ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
946 1.1 jruoho "**** Start operand dump for opcode [%s], %u operands\n",
947 1.1 jruoho OpcodeName, NumOperands));
948 1.1 jruoho
949 1.1 jruoho if (NumOperands == 0)
950 1.1 jruoho {
951 1.1 jruoho NumOperands = 1;
952 1.1 jruoho }
953 1.1 jruoho
954 1.1 jruoho /* Dump the individual operands */
955 1.1 jruoho
956 1.1 jruoho while (NumOperands)
957 1.1 jruoho {
958 1.1 jruoho AcpiExDumpOperand (*Operands, 0);
959 1.1 jruoho Operands++;
960 1.1 jruoho NumOperands--;
961 1.1 jruoho }
962 1.1 jruoho
963 1.1 jruoho ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
964 1.1 jruoho "**** End operand dump for [%s]\n", OpcodeName));
965 1.12 christos return_VOID;
966 1.1 jruoho }
967 1.1 jruoho
968 1.1 jruoho
969 1.1 jruoho /*******************************************************************************
970 1.1 jruoho *
971 1.1 jruoho * FUNCTION: AcpiExOut* functions
972 1.1 jruoho *
973 1.1 jruoho * PARAMETERS: Title - Descriptive text
974 1.1 jruoho * Value - Value to be displayed
975 1.1 jruoho *
976 1.4 christos * DESCRIPTION: Object dump output formatting functions. These functions
977 1.1 jruoho * reduce the number of format strings required and keeps them
978 1.1 jruoho * all in one place for easy modification.
979 1.1 jruoho *
980 1.1 jruoho ******************************************************************************/
981 1.1 jruoho
982 1.1 jruoho static void
983 1.1 jruoho AcpiExOutString (
984 1.2 jruoho const char *Title,
985 1.2 jruoho const char *Value)
986 1.1 jruoho {
987 1.1 jruoho AcpiOsPrintf ("%20s : %s\n", Title, Value);
988 1.1 jruoho }
989 1.1 jruoho
990 1.1 jruoho static void
991 1.1 jruoho AcpiExOutPointer (
992 1.2 jruoho const char *Title,
993 1.9 christos const void *Value)
994 1.1 jruoho {
995 1.1 jruoho AcpiOsPrintf ("%20s : %p\n", Title, Value);
996 1.1 jruoho }
997 1.1 jruoho
998 1.1 jruoho
999 1.1 jruoho /*******************************************************************************
1000 1.1 jruoho *
1001 1.1 jruoho * FUNCTION: AcpiExDumpNamespaceNode
1002 1.1 jruoho *
1003 1.1 jruoho * PARAMETERS: Node - Descriptor to dump
1004 1.1 jruoho * Flags - Force display if TRUE
1005 1.1 jruoho *
1006 1.1 jruoho * DESCRIPTION: Dumps the members of the given.Node
1007 1.1 jruoho *
1008 1.1 jruoho ******************************************************************************/
1009 1.1 jruoho
1010 1.1 jruoho void
1011 1.1 jruoho AcpiExDumpNamespaceNode (
1012 1.1 jruoho ACPI_NAMESPACE_NODE *Node,
1013 1.1 jruoho UINT32 Flags)
1014 1.1 jruoho {
1015 1.1 jruoho
1016 1.1 jruoho ACPI_FUNCTION_ENTRY ();
1017 1.1 jruoho
1018 1.1 jruoho
1019 1.1 jruoho if (!Flags)
1020 1.1 jruoho {
1021 1.4 christos /* Check if debug output enabled */
1022 1.4 christos
1023 1.4 christos if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
1024 1.1 jruoho {
1025 1.1 jruoho return;
1026 1.1 jruoho }
1027 1.1 jruoho }
1028 1.1 jruoho
1029 1.1 jruoho AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
1030 1.5 christos AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
1031 1.5 christos Node->Type, AcpiUtGetTypeName (Node->Type));
1032 1.1 jruoho
1033 1.1 jruoho AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
1034 1.1 jruoho AcpiExDumpNode);
1035 1.1 jruoho }
1036 1.1 jruoho
1037 1.1 jruoho
1038 1.1 jruoho /*******************************************************************************
1039 1.1 jruoho *
1040 1.1 jruoho * FUNCTION: AcpiExDumpReferenceObj
1041 1.1 jruoho *
1042 1.1 jruoho * PARAMETERS: Object - Descriptor to dump
1043 1.1 jruoho *
1044 1.1 jruoho * DESCRIPTION: Dumps a reference object
1045 1.1 jruoho *
1046 1.1 jruoho ******************************************************************************/
1047 1.1 jruoho
1048 1.1 jruoho static void
1049 1.1 jruoho AcpiExDumpReferenceObj (
1050 1.1 jruoho ACPI_OPERAND_OBJECT *ObjDesc)
1051 1.1 jruoho {
1052 1.1 jruoho ACPI_BUFFER RetBuf;
1053 1.1 jruoho ACPI_STATUS Status;
1054 1.1 jruoho
1055 1.1 jruoho
1056 1.1 jruoho RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1057 1.1 jruoho
1058 1.1 jruoho if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
1059 1.1 jruoho {
1060 1.1 jruoho AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
1061 1.1 jruoho
1062 1.7 christos Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node,
1063 1.8 christos &RetBuf, TRUE);
1064 1.1 jruoho if (ACPI_FAILURE (Status))
1065 1.1 jruoho {
1066 1.11 christos AcpiOsPrintf (" Could not convert name to pathname: %s\n",
1067 1.11 christos AcpiFormatException (Status));
1068 1.1 jruoho }
1069 1.1 jruoho else
1070 1.1 jruoho {
1071 1.11 christos AcpiOsPrintf ("%s: %s\n",
1072 1.11 christos AcpiUtGetTypeName (ObjDesc->Reference.Node->Type),
1073 1.11 christos (char *) RetBuf.Pointer);
1074 1.11 christos ACPI_FREE (RetBuf.Pointer);
1075 1.1 jruoho }
1076 1.1 jruoho }
1077 1.1 jruoho else if (ObjDesc->Reference.Object)
1078 1.1 jruoho {
1079 1.1 jruoho if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
1080 1.1 jruoho {
1081 1.7 christos AcpiOsPrintf ("%22s %p", "Target :",
1082 1.7 christos ObjDesc->Reference.Object);
1083 1.1 jruoho if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
1084 1.1 jruoho {
1085 1.7 christos AcpiOsPrintf (" Table Index: %X\n",
1086 1.7 christos ObjDesc->Reference.Value);
1087 1.1 jruoho }
1088 1.1 jruoho else
1089 1.1 jruoho {
1090 1.7 christos AcpiOsPrintf (" [%s]\n",
1091 1.1 jruoho AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
1092 1.7 christos ObjDesc->Reference.Object)->Common.Type));
1093 1.1 jruoho }
1094 1.1 jruoho }
1095 1.1 jruoho else
1096 1.1 jruoho {
1097 1.1 jruoho AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
1098 1.1 jruoho }
1099 1.1 jruoho }
1100 1.1 jruoho }
1101 1.1 jruoho
1102 1.1 jruoho
1103 1.1 jruoho /*******************************************************************************
1104 1.1 jruoho *
1105 1.1 jruoho * FUNCTION: AcpiExDumpPackageObj
1106 1.1 jruoho *
1107 1.1 jruoho * PARAMETERS: ObjDesc - Descriptor to dump
1108 1.1 jruoho * Level - Indentation Level
1109 1.1 jruoho * Index - Package index for this object
1110 1.1 jruoho *
1111 1.1 jruoho * DESCRIPTION: Dumps the elements of the package
1112 1.1 jruoho *
1113 1.1 jruoho ******************************************************************************/
1114 1.1 jruoho
1115 1.1 jruoho static void
1116 1.1 jruoho AcpiExDumpPackageObj (
1117 1.1 jruoho ACPI_OPERAND_OBJECT *ObjDesc,
1118 1.1 jruoho UINT32 Level,
1119 1.1 jruoho UINT32 Index)
1120 1.1 jruoho {
1121 1.1 jruoho UINT32 i;
1122 1.1 jruoho
1123 1.1 jruoho
1124 1.1 jruoho /* Indentation and index output */
1125 1.1 jruoho
1126 1.1 jruoho if (Level > 0)
1127 1.1 jruoho {
1128 1.1 jruoho for (i = 0; i < Level; i++)
1129 1.1 jruoho {
1130 1.1 jruoho AcpiOsPrintf (" ");
1131 1.1 jruoho }
1132 1.1 jruoho
1133 1.1 jruoho AcpiOsPrintf ("[%.2d] ", Index);
1134 1.1 jruoho }
1135 1.1 jruoho
1136 1.1 jruoho AcpiOsPrintf ("%p ", ObjDesc);
1137 1.1 jruoho
1138 1.1 jruoho /* Null package elements are allowed */
1139 1.1 jruoho
1140 1.1 jruoho if (!ObjDesc)
1141 1.1 jruoho {
1142 1.1 jruoho AcpiOsPrintf ("[Null Object]\n");
1143 1.1 jruoho return;
1144 1.1 jruoho }
1145 1.1 jruoho
1146 1.1 jruoho /* Packages may only contain a few object types */
1147 1.1 jruoho
1148 1.1 jruoho switch (ObjDesc->Common.Type)
1149 1.1 jruoho {
1150 1.1 jruoho case ACPI_TYPE_INTEGER:
1151 1.1 jruoho
1152 1.1 jruoho AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
1153 1.1 jruoho ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
1154 1.1 jruoho break;
1155 1.1 jruoho
1156 1.1 jruoho case ACPI_TYPE_STRING:
1157 1.1 jruoho
1158 1.1 jruoho AcpiOsPrintf ("[String] Value: ");
1159 1.4 christos AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
1160 1.1 jruoho AcpiOsPrintf ("\n");
1161 1.1 jruoho break;
1162 1.1 jruoho
1163 1.1 jruoho case ACPI_TYPE_BUFFER:
1164 1.1 jruoho
1165 1.1 jruoho AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
1166 1.1 jruoho if (ObjDesc->Buffer.Length)
1167 1.1 jruoho {
1168 1.8 christos AcpiUtDebugDumpBuffer (
1169 1.8 christos ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
1170 1.1 jruoho ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
1171 1.1 jruoho }
1172 1.1 jruoho else
1173 1.1 jruoho {
1174 1.1 jruoho AcpiOsPrintf ("\n");
1175 1.1 jruoho }
1176 1.1 jruoho break;
1177 1.1 jruoho
1178 1.1 jruoho case ACPI_TYPE_PACKAGE:
1179 1.1 jruoho
1180 1.1 jruoho AcpiOsPrintf ("[Package] Contains %u Elements:\n",
1181 1.1 jruoho ObjDesc->Package.Count);
1182 1.1 jruoho
1183 1.1 jruoho for (i = 0; i < ObjDesc->Package.Count; i++)
1184 1.1 jruoho {
1185 1.8 christos AcpiExDumpPackageObj (
1186 1.8 christos ObjDesc->Package.Elements[i], Level + 1, i);
1187 1.1 jruoho }
1188 1.1 jruoho break;
1189 1.1 jruoho
1190 1.1 jruoho case ACPI_TYPE_LOCAL_REFERENCE:
1191 1.1 jruoho
1192 1.11 christos AcpiOsPrintf ("[Object Reference] Class [%s]",
1193 1.11 christos AcpiUtGetReferenceName (ObjDesc));
1194 1.1 jruoho AcpiExDumpReferenceObj (ObjDesc);
1195 1.1 jruoho break;
1196 1.1 jruoho
1197 1.1 jruoho default:
1198 1.1 jruoho
1199 1.11 christos AcpiOsPrintf ("[%s] Type: %2.2X\n",
1200 1.11 christos AcpiUtGetTypeName (ObjDesc->Common.Type), ObjDesc->Common.Type);
1201 1.1 jruoho break;
1202 1.1 jruoho }
1203 1.1 jruoho }
1204 1.1 jruoho
1205 1.1 jruoho
1206 1.1 jruoho /*******************************************************************************
1207 1.1 jruoho *
1208 1.1 jruoho * FUNCTION: AcpiExDumpObjectDescriptor
1209 1.1 jruoho *
1210 1.1 jruoho * PARAMETERS: ObjDesc - Descriptor to dump
1211 1.1 jruoho * Flags - Force display if TRUE
1212 1.1 jruoho *
1213 1.1 jruoho * DESCRIPTION: Dumps the members of the object descriptor given.
1214 1.1 jruoho *
1215 1.1 jruoho ******************************************************************************/
1216 1.1 jruoho
1217 1.1 jruoho void
1218 1.1 jruoho AcpiExDumpObjectDescriptor (
1219 1.1 jruoho ACPI_OPERAND_OBJECT *ObjDesc,
1220 1.1 jruoho UINT32 Flags)
1221 1.1 jruoho {
1222 1.1 jruoho ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
1223 1.1 jruoho
1224 1.1 jruoho
1225 1.1 jruoho if (!ObjDesc)
1226 1.1 jruoho {
1227 1.1 jruoho return_VOID;
1228 1.1 jruoho }
1229 1.1 jruoho
1230 1.1 jruoho if (!Flags)
1231 1.1 jruoho {
1232 1.4 christos /* Check if debug output enabled */
1233 1.4 christos
1234 1.4 christos if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
1235 1.1 jruoho {
1236 1.1 jruoho return_VOID;
1237 1.1 jruoho }
1238 1.1 jruoho }
1239 1.1 jruoho
1240 1.1 jruoho if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1241 1.1 jruoho {
1242 1.1 jruoho AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
1243 1.1 jruoho
1244 1.11 christos ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object;
1245 1.11 christos if (!ObjDesc)
1246 1.11 christos {
1247 1.11 christos return_VOID;
1248 1.11 christos }
1249 1.11 christos
1250 1.11 christos AcpiOsPrintf ("\nAttached Object %p", ObjDesc);
1251 1.11 christos if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1252 1.11 christos {
1253 1.11 christos AcpiOsPrintf (" - Namespace Node");
1254 1.11 christos }
1255 1.1 jruoho
1256 1.11 christos AcpiOsPrintf (":\n");
1257 1.5 christos goto DumpObject;
1258 1.1 jruoho }
1259 1.1 jruoho
1260 1.1 jruoho if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
1261 1.1 jruoho {
1262 1.1 jruoho AcpiOsPrintf (
1263 1.5 christos "%p is not an ACPI operand object: [%s]\n",
1264 1.1 jruoho ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
1265 1.1 jruoho return_VOID;
1266 1.1 jruoho }
1267 1.1 jruoho
1268 1.5 christos /* Validate the object type */
1269 1.5 christos
1270 1.5 christos if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1271 1.1 jruoho {
1272 1.5 christos AcpiOsPrintf ("Not a known object type: %2.2X\n",
1273 1.5 christos ObjDesc->Common.Type);
1274 1.1 jruoho return_VOID;
1275 1.1 jruoho }
1276 1.1 jruoho
1277 1.5 christos
1278 1.5 christos DumpObject:
1279 1.5 christos
1280 1.11 christos if (!ObjDesc)
1281 1.11 christos {
1282 1.11 christos return_VOID;
1283 1.11 christos }
1284 1.11 christos
1285 1.1 jruoho /* Common Fields */
1286 1.1 jruoho
1287 1.1 jruoho AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
1288 1.1 jruoho
1289 1.1 jruoho /* Object-specific fields */
1290 1.1 jruoho
1291 1.1 jruoho AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1292 1.5 christos
1293 1.5 christos if (ObjDesc->Common.Type == ACPI_TYPE_REGION)
1294 1.5 christos {
1295 1.5 christos ObjDesc = ObjDesc->Common.NextObject;
1296 1.5 christos if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1297 1.5 christos {
1298 1.8 christos AcpiOsPrintf (
1299 1.8 christos "Secondary object is not a known object type: %2.2X\n",
1300 1.5 christos ObjDesc->Common.Type);
1301 1.5 christos
1302 1.5 christos return_VOID;
1303 1.5 christos }
1304 1.5 christos
1305 1.5 christos AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc);
1306 1.5 christos AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1307 1.5 christos }
1308 1.5 christos
1309 1.1 jruoho return_VOID;
1310 1.1 jruoho }
1311 1.1 jruoho
1312 1.1 jruoho #endif
1313