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