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