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