dbcmds.c revision 1.1 1 1.1 jruoho /*******************************************************************************
2 1.1 jruoho *
3 1.1 jruoho * Module Name: dbcmds - debug commands and output routines
4 1.1 jruoho *
5 1.1 jruoho ******************************************************************************/
6 1.1 jruoho
7 1.1 jruoho /******************************************************************************
8 1.1 jruoho *
9 1.1 jruoho * 1. Copyright Notice
10 1.1 jruoho *
11 1.1 jruoho * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp.
12 1.1 jruoho * All rights reserved.
13 1.1 jruoho *
14 1.1 jruoho * 2. License
15 1.1 jruoho *
16 1.1 jruoho * 2.1. This is your license from Intel Corp. under its intellectual property
17 1.1 jruoho * rights. You may have additional license terms from the party that provided
18 1.1 jruoho * you this software, covering your right to use that party's intellectual
19 1.1 jruoho * property rights.
20 1.1 jruoho *
21 1.1 jruoho * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22 1.1 jruoho * copy of the source code appearing in this file ("Covered Code") an
23 1.1 jruoho * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24 1.1 jruoho * base code distributed originally by Intel ("Original Intel Code") to copy,
25 1.1 jruoho * make derivatives, distribute, use and display any portion of the Covered
26 1.1 jruoho * Code in any form, with the right to sublicense such rights; and
27 1.1 jruoho *
28 1.1 jruoho * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29 1.1 jruoho * license (with the right to sublicense), under only those claims of Intel
30 1.1 jruoho * patents that are infringed by the Original Intel Code, to make, use, sell,
31 1.1 jruoho * offer to sell, and import the Covered Code and derivative works thereof
32 1.1 jruoho * solely to the minimum extent necessary to exercise the above copyright
33 1.1 jruoho * license, and in no event shall the patent license extend to any additions
34 1.1 jruoho * to or modifications of the Original Intel Code. No other license or right
35 1.1 jruoho * is granted directly or by implication, estoppel or otherwise;
36 1.1 jruoho *
37 1.1 jruoho * The above copyright and patent license is granted only if the following
38 1.1 jruoho * conditions are met:
39 1.1 jruoho *
40 1.1 jruoho * 3. Conditions
41 1.1 jruoho *
42 1.1 jruoho * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43 1.1 jruoho * Redistribution of source code of any substantial portion of the Covered
44 1.1 jruoho * Code or modification with rights to further distribute source must include
45 1.1 jruoho * the above Copyright Notice, the above License, this list of Conditions,
46 1.1 jruoho * and the following Disclaimer and Export Compliance provision. In addition,
47 1.1 jruoho * Licensee must cause all Covered Code to which Licensee contributes to
48 1.1 jruoho * contain a file documenting the changes Licensee made to create that Covered
49 1.1 jruoho * Code and the date of any change. Licensee must include in that file the
50 1.1 jruoho * documentation of any changes made by any predecessor Licensee. Licensee
51 1.1 jruoho * must include a prominent statement that the modification is derived,
52 1.1 jruoho * directly or indirectly, from Original Intel Code.
53 1.1 jruoho *
54 1.1 jruoho * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55 1.1 jruoho * Redistribution of source code of any substantial portion of the Covered
56 1.1 jruoho * Code or modification without rights to further distribute source must
57 1.1 jruoho * include the following Disclaimer and Export Compliance provision in the
58 1.1 jruoho * documentation and/or other materials provided with distribution. In
59 1.1 jruoho * addition, Licensee may not authorize further sublicense of source of any
60 1.1 jruoho * portion of the Covered Code, and must include terms to the effect that the
61 1.1 jruoho * license from Licensee to its licensee is limited to the intellectual
62 1.1 jruoho * property embodied in the software Licensee provides to its licensee, and
63 1.1 jruoho * not to intellectual property embodied in modifications its licensee may
64 1.1 jruoho * make.
65 1.1 jruoho *
66 1.1 jruoho * 3.3. Redistribution of Executable. Redistribution in executable form of any
67 1.1 jruoho * substantial portion of the Covered Code or modification must reproduce the
68 1.1 jruoho * above Copyright Notice, and the following Disclaimer and Export Compliance
69 1.1 jruoho * provision in the documentation and/or other materials provided with the
70 1.1 jruoho * distribution.
71 1.1 jruoho *
72 1.1 jruoho * 3.4. Intel retains all right, title, and interest in and to the Original
73 1.1 jruoho * Intel Code.
74 1.1 jruoho *
75 1.1 jruoho * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76 1.1 jruoho * Intel shall be used in advertising or otherwise to promote the sale, use or
77 1.1 jruoho * other dealings in products derived from or relating to the Covered Code
78 1.1 jruoho * without prior written authorization from Intel.
79 1.1 jruoho *
80 1.1 jruoho * 4. Disclaimer and Export Compliance
81 1.1 jruoho *
82 1.1 jruoho * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83 1.1 jruoho * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84 1.1 jruoho * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85 1.1 jruoho * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86 1.1 jruoho * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87 1.1 jruoho * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88 1.1 jruoho * PARTICULAR PURPOSE.
89 1.1 jruoho *
90 1.1 jruoho * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91 1.1 jruoho * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92 1.1 jruoho * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93 1.1 jruoho * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94 1.1 jruoho * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95 1.1 jruoho * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96 1.1 jruoho * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97 1.1 jruoho * LIMITED REMEDY.
98 1.1 jruoho *
99 1.1 jruoho * 4.3. Licensee shall not export, either directly or indirectly, any of this
100 1.1 jruoho * software or system incorporating such software without first obtaining any
101 1.1 jruoho * required license or other approval from the U. S. Department of Commerce or
102 1.1 jruoho * any other agency or department of the United States Government. In the
103 1.1 jruoho * event Licensee exports any such software from the United States or
104 1.1 jruoho * re-exports any such software from a foreign destination, Licensee shall
105 1.1 jruoho * ensure that the distribution and export/re-export of the software is in
106 1.1 jruoho * compliance with all laws, regulations, orders, or other restrictions of the
107 1.1 jruoho * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108 1.1 jruoho * any of its subsidiaries will export/re-export any technical data, process,
109 1.1 jruoho * software, or service, directly or indirectly, to any country for which the
110 1.1 jruoho * United States government or any agency thereof requires an export license,
111 1.1 jruoho * other governmental approval, or letter of assurance, without first obtaining
112 1.1 jruoho * such license, approval or letter.
113 1.1 jruoho *
114 1.1 jruoho *****************************************************************************/
115 1.1 jruoho
116 1.1 jruoho
117 1.1 jruoho #include "acpi.h"
118 1.1 jruoho #include "accommon.h"
119 1.1 jruoho #include "acdispat.h"
120 1.1 jruoho #include "acnamesp.h"
121 1.1 jruoho #include "acevents.h"
122 1.1 jruoho #include "acdebug.h"
123 1.1 jruoho #include "acresrc.h"
124 1.1 jruoho #include "acdisasm.h"
125 1.1 jruoho #include "actables.h"
126 1.1 jruoho #include "acparser.h"
127 1.1 jruoho
128 1.1 jruoho #ifdef ACPI_DEBUGGER
129 1.1 jruoho
130 1.1 jruoho #define _COMPONENT ACPI_CA_DEBUGGER
131 1.1 jruoho ACPI_MODULE_NAME ("dbcmds")
132 1.1 jruoho
133 1.1 jruoho
134 1.1 jruoho /* Local prototypes */
135 1.1 jruoho
136 1.1 jruoho static ACPI_STATUS
137 1.1 jruoho AcpiDbIntegrityWalk (
138 1.1 jruoho ACPI_HANDLE ObjHandle,
139 1.1 jruoho UINT32 NestingLevel,
140 1.1 jruoho void *Context,
141 1.1 jruoho void **ReturnValue);
142 1.1 jruoho
143 1.1 jruoho static ACPI_STATUS
144 1.1 jruoho AcpiDbWalkAndMatchName (
145 1.1 jruoho ACPI_HANDLE ObjHandle,
146 1.1 jruoho UINT32 NestingLevel,
147 1.1 jruoho void *Context,
148 1.1 jruoho void **ReturnValue);
149 1.1 jruoho
150 1.1 jruoho static ACPI_STATUS
151 1.1 jruoho AcpiDbWalkForReferences (
152 1.1 jruoho ACPI_HANDLE ObjHandle,
153 1.1 jruoho UINT32 NestingLevel,
154 1.1 jruoho void *Context,
155 1.1 jruoho void **ReturnValue);
156 1.1 jruoho
157 1.1 jruoho static ACPI_STATUS
158 1.1 jruoho AcpiDbWalkForSpecificObjects (
159 1.1 jruoho ACPI_HANDLE ObjHandle,
160 1.1 jruoho UINT32 NestingLevel,
161 1.1 jruoho void *Context,
162 1.1 jruoho void **ReturnValue);
163 1.1 jruoho
164 1.1 jruoho static ACPI_NAMESPACE_NODE *
165 1.1 jruoho AcpiDbConvertToNode (
166 1.1 jruoho char *InString);
167 1.1 jruoho
168 1.1 jruoho static void
169 1.1 jruoho AcpiDmCompareAmlResources (
170 1.1 jruoho UINT8 *Aml1Buffer,
171 1.1 jruoho ACPI_RSDESC_SIZE Aml1BufferLength,
172 1.1 jruoho UINT8 *Aml2Buffer,
173 1.1 jruoho ACPI_RSDESC_SIZE Aml2BufferLength);
174 1.1 jruoho
175 1.1 jruoho static ACPI_STATUS
176 1.1 jruoho AcpiDmTestResourceConversion (
177 1.1 jruoho ACPI_NAMESPACE_NODE *Node,
178 1.1 jruoho char *Name);
179 1.1 jruoho
180 1.1 jruoho
181 1.1 jruoho /*
182 1.1 jruoho * Arguments for the Objects command
183 1.1 jruoho * These object types map directly to the ACPI_TYPES
184 1.1 jruoho */
185 1.1 jruoho static ARGUMENT_INFO AcpiDbObjectTypes [] =
186 1.1 jruoho {
187 1.1 jruoho {"ANY"},
188 1.1 jruoho {"INTEGERS"},
189 1.1 jruoho {"STRINGS"},
190 1.1 jruoho {"BUFFERS"},
191 1.1 jruoho {"PACKAGES"},
192 1.1 jruoho {"FIELDS"},
193 1.1 jruoho {"DEVICES"},
194 1.1 jruoho {"EVENTS"},
195 1.1 jruoho {"METHODS"},
196 1.1 jruoho {"MUTEXES"},
197 1.1 jruoho {"REGIONS"},
198 1.1 jruoho {"POWERRESOURCES"},
199 1.1 jruoho {"PROCESSORS"},
200 1.1 jruoho {"THERMALZONES"},
201 1.1 jruoho {"BUFFERFIELDS"},
202 1.1 jruoho {"DDBHANDLES"},
203 1.1 jruoho {"DEBUG"},
204 1.1 jruoho {"REGIONFIELDS"},
205 1.1 jruoho {"BANKFIELDS"},
206 1.1 jruoho {"INDEXFIELDS"},
207 1.1 jruoho {"REFERENCES"},
208 1.1 jruoho {"ALIAS"},
209 1.1 jruoho {NULL} /* Must be null terminated */
210 1.1 jruoho };
211 1.1 jruoho
212 1.1 jruoho
213 1.1 jruoho /*******************************************************************************
214 1.1 jruoho *
215 1.1 jruoho * FUNCTION: AcpiDbConvertToNode
216 1.1 jruoho *
217 1.1 jruoho * PARAMETERS: InString - String to convert
218 1.1 jruoho *
219 1.1 jruoho * RETURN: Pointer to a NS node
220 1.1 jruoho *
221 1.1 jruoho * DESCRIPTION: Convert a string to a valid NS pointer. Handles numeric or
222 1.1 jruoho * alpha strings.
223 1.1 jruoho *
224 1.1 jruoho ******************************************************************************/
225 1.1 jruoho
226 1.1 jruoho static ACPI_NAMESPACE_NODE *
227 1.1 jruoho AcpiDbConvertToNode (
228 1.1 jruoho char *InString)
229 1.1 jruoho {
230 1.1 jruoho ACPI_NAMESPACE_NODE *Node;
231 1.1 jruoho
232 1.1 jruoho
233 1.1 jruoho if ((*InString >= 0x30) && (*InString <= 0x39))
234 1.1 jruoho {
235 1.1 jruoho /* Numeric argument, convert */
236 1.1 jruoho
237 1.1 jruoho Node = ACPI_TO_POINTER (ACPI_STRTOUL (InString, NULL, 16));
238 1.1 jruoho if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE)))
239 1.1 jruoho {
240 1.1 jruoho AcpiOsPrintf ("Address %p is invalid in this address space\n",
241 1.1 jruoho Node);
242 1.1 jruoho return (NULL);
243 1.1 jruoho }
244 1.1 jruoho
245 1.1 jruoho /* Make sure pointer is valid NS node */
246 1.1 jruoho
247 1.1 jruoho if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
248 1.1 jruoho {
249 1.1 jruoho AcpiOsPrintf ("Address %p is not a valid NS node [%s]\n",
250 1.1 jruoho Node, AcpiUtGetDescriptorName (Node));
251 1.1 jruoho return (NULL);
252 1.1 jruoho }
253 1.1 jruoho }
254 1.1 jruoho else
255 1.1 jruoho {
256 1.1 jruoho /* Alpha argument */
257 1.1 jruoho /* The parameter is a name string that must be resolved to a
258 1.1 jruoho * Named obj
259 1.1 jruoho */
260 1.1 jruoho Node = AcpiDbLocalNsLookup (InString);
261 1.1 jruoho if (!Node)
262 1.1 jruoho {
263 1.1 jruoho Node = AcpiGbl_RootNode;
264 1.1 jruoho }
265 1.1 jruoho }
266 1.1 jruoho
267 1.1 jruoho return (Node);
268 1.1 jruoho }
269 1.1 jruoho
270 1.1 jruoho
271 1.1 jruoho /*******************************************************************************
272 1.1 jruoho *
273 1.1 jruoho * FUNCTION: AcpiDbSleep
274 1.1 jruoho *
275 1.1 jruoho * PARAMETERS: ObjectArg - Desired sleep state (0-5)
276 1.1 jruoho *
277 1.1 jruoho * RETURN: Status
278 1.1 jruoho *
279 1.1 jruoho * DESCRIPTION: Simulate a sleep/wake sequence
280 1.1 jruoho *
281 1.1 jruoho ******************************************************************************/
282 1.1 jruoho
283 1.1 jruoho ACPI_STATUS
284 1.1 jruoho AcpiDbSleep (
285 1.1 jruoho char *ObjectArg)
286 1.1 jruoho {
287 1.1 jruoho ACPI_STATUS Status;
288 1.1 jruoho UINT8 SleepState;
289 1.1 jruoho
290 1.1 jruoho
291 1.1 jruoho SleepState = (UINT8) ACPI_STRTOUL (ObjectArg, NULL, 0);
292 1.1 jruoho
293 1.1 jruoho AcpiOsPrintf ("**** Prepare to sleep ****\n");
294 1.1 jruoho Status = AcpiEnterSleepStatePrep (SleepState);
295 1.1 jruoho if (ACPI_FAILURE (Status))
296 1.1 jruoho {
297 1.1 jruoho return (Status);
298 1.1 jruoho }
299 1.1 jruoho
300 1.1 jruoho AcpiOsPrintf ("**** Going to sleep ****\n");
301 1.1 jruoho Status = AcpiEnterSleepState (SleepState);
302 1.1 jruoho if (ACPI_FAILURE (Status))
303 1.1 jruoho {
304 1.1 jruoho return (Status);
305 1.1 jruoho }
306 1.1 jruoho
307 1.1 jruoho AcpiOsPrintf ("**** returning from sleep ****\n");
308 1.1 jruoho Status = AcpiLeaveSleepState (SleepState);
309 1.1 jruoho
310 1.1 jruoho return (Status);
311 1.1 jruoho }
312 1.1 jruoho
313 1.1 jruoho
314 1.1 jruoho /*******************************************************************************
315 1.1 jruoho *
316 1.1 jruoho * FUNCTION: AcpiDbWalkForReferences
317 1.1 jruoho *
318 1.1 jruoho * PARAMETERS: Callback from WalkNamespace
319 1.1 jruoho *
320 1.1 jruoho * RETURN: Status
321 1.1 jruoho *
322 1.1 jruoho * DESCRIPTION: Check if this namespace object refers to the target object
323 1.1 jruoho * that is passed in as the context value.
324 1.1 jruoho *
325 1.1 jruoho * Note: Currently doesn't check subobjects within the Node's object
326 1.1 jruoho *
327 1.1 jruoho ******************************************************************************/
328 1.1 jruoho
329 1.1 jruoho static ACPI_STATUS
330 1.1 jruoho AcpiDbWalkForReferences (
331 1.1 jruoho ACPI_HANDLE ObjHandle,
332 1.1 jruoho UINT32 NestingLevel,
333 1.1 jruoho void *Context,
334 1.1 jruoho void **ReturnValue)
335 1.1 jruoho {
336 1.1 jruoho ACPI_OPERAND_OBJECT *ObjDesc = (ACPI_OPERAND_OBJECT *) Context;
337 1.1 jruoho ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
338 1.1 jruoho
339 1.1 jruoho
340 1.1 jruoho /* Check for match against the namespace node itself */
341 1.1 jruoho
342 1.1 jruoho if (Node == (void *) ObjDesc)
343 1.1 jruoho {
344 1.1 jruoho AcpiOsPrintf ("Object is a Node [%4.4s]\n",
345 1.1 jruoho AcpiUtGetNodeName (Node));
346 1.1 jruoho }
347 1.1 jruoho
348 1.1 jruoho /* Check for match against the object attached to the node */
349 1.1 jruoho
350 1.1 jruoho if (AcpiNsGetAttachedObject (Node) == ObjDesc)
351 1.1 jruoho {
352 1.1 jruoho AcpiOsPrintf ("Reference at Node->Object %p [%4.4s]\n",
353 1.1 jruoho Node, AcpiUtGetNodeName (Node));
354 1.1 jruoho }
355 1.1 jruoho
356 1.1 jruoho return (AE_OK);
357 1.1 jruoho }
358 1.1 jruoho
359 1.1 jruoho
360 1.1 jruoho /*******************************************************************************
361 1.1 jruoho *
362 1.1 jruoho * FUNCTION: AcpiDbFindReferences
363 1.1 jruoho *
364 1.1 jruoho * PARAMETERS: ObjectArg - String with hex value of the object
365 1.1 jruoho *
366 1.1 jruoho * RETURN: None
367 1.1 jruoho *
368 1.1 jruoho * DESCRIPTION: Search namespace for all references to the input object
369 1.1 jruoho *
370 1.1 jruoho ******************************************************************************/
371 1.1 jruoho
372 1.1 jruoho void
373 1.1 jruoho AcpiDbFindReferences (
374 1.1 jruoho char *ObjectArg)
375 1.1 jruoho {
376 1.1 jruoho ACPI_OPERAND_OBJECT *ObjDesc;
377 1.1 jruoho
378 1.1 jruoho
379 1.1 jruoho /* Convert string to object pointer */
380 1.1 jruoho
381 1.1 jruoho ObjDesc = ACPI_TO_POINTER (ACPI_STRTOUL (ObjectArg, NULL, 16));
382 1.1 jruoho
383 1.1 jruoho /* Search all nodes in namespace */
384 1.1 jruoho
385 1.1 jruoho (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
386 1.1 jruoho AcpiDbWalkForReferences, NULL, (void *) ObjDesc, NULL);
387 1.1 jruoho }
388 1.1 jruoho
389 1.1 jruoho
390 1.1 jruoho /*******************************************************************************
391 1.1 jruoho *
392 1.1 jruoho * FUNCTION: AcpiDbWalkForPredefinedNames
393 1.1 jruoho *
394 1.1 jruoho * PARAMETERS: Callback from WalkNamespace
395 1.1 jruoho *
396 1.1 jruoho * RETURN: Status
397 1.1 jruoho *
398 1.1 jruoho * DESCRIPTION: Detect and display predefined ACPI names (names that start with
399 1.1 jruoho * an underscore)
400 1.1 jruoho *
401 1.1 jruoho ******************************************************************************/
402 1.1 jruoho
403 1.1 jruoho static ACPI_STATUS
404 1.1 jruoho AcpiDbWalkForPredefinedNames (
405 1.1 jruoho ACPI_HANDLE ObjHandle,
406 1.1 jruoho UINT32 NestingLevel,
407 1.1 jruoho void *Context,
408 1.1 jruoho void **ReturnValue)
409 1.1 jruoho {
410 1.1 jruoho ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
411 1.1 jruoho UINT32 *Count = (UINT32 *) Context;
412 1.1 jruoho const ACPI_PREDEFINED_INFO *Predefined;
413 1.1 jruoho const ACPI_PREDEFINED_INFO *Package = NULL;
414 1.1 jruoho char *Pathname;
415 1.1 jruoho
416 1.1 jruoho
417 1.1 jruoho Predefined = AcpiNsCheckForPredefinedName (Node);
418 1.1 jruoho if (!Predefined)
419 1.1 jruoho {
420 1.1 jruoho return (AE_OK);
421 1.1 jruoho }
422 1.1 jruoho
423 1.1 jruoho Pathname = AcpiNsGetExternalPathname (Node);
424 1.1 jruoho if (!Pathname)
425 1.1 jruoho {
426 1.1 jruoho return (AE_OK);
427 1.1 jruoho }
428 1.1 jruoho
429 1.1 jruoho /* If method returns a package, the info is in the next table entry */
430 1.1 jruoho
431 1.1 jruoho if (Predefined->Info.ExpectedBtypes & ACPI_BTYPE_PACKAGE)
432 1.1 jruoho {
433 1.1 jruoho Package = Predefined + 1;
434 1.1 jruoho }
435 1.1 jruoho
436 1.1 jruoho AcpiOsPrintf ("%-32s arg %X ret %2.2X", Pathname,
437 1.1 jruoho Predefined->Info.ParamCount, Predefined->Info.ExpectedBtypes);
438 1.1 jruoho
439 1.1 jruoho if (Package)
440 1.1 jruoho {
441 1.1 jruoho AcpiOsPrintf (" PkgType %2.2X ObjType %2.2X Count %2.2X",
442 1.1 jruoho Package->RetInfo.Type, Package->RetInfo.ObjectType1,
443 1.1 jruoho Package->RetInfo.Count1);
444 1.1 jruoho }
445 1.1 jruoho
446 1.1 jruoho AcpiOsPrintf("\n");
447 1.1 jruoho
448 1.1 jruoho AcpiNsCheckParameterCount (Pathname, Node, ACPI_UINT32_MAX, Predefined);
449 1.1 jruoho ACPI_FREE (Pathname);
450 1.1 jruoho (*Count)++;
451 1.1 jruoho
452 1.1 jruoho return (AE_OK);
453 1.1 jruoho }
454 1.1 jruoho
455 1.1 jruoho
456 1.1 jruoho /*******************************************************************************
457 1.1 jruoho *
458 1.1 jruoho * FUNCTION: AcpiDbCheckPredefinedNames
459 1.1 jruoho *
460 1.1 jruoho * PARAMETERS: None
461 1.1 jruoho *
462 1.1 jruoho * RETURN: None
463 1.1 jruoho *
464 1.1 jruoho * DESCRIPTION: Validate all predefined names in the namespace
465 1.1 jruoho *
466 1.1 jruoho ******************************************************************************/
467 1.1 jruoho
468 1.1 jruoho void
469 1.1 jruoho AcpiDbCheckPredefinedNames (
470 1.1 jruoho void)
471 1.1 jruoho {
472 1.1 jruoho UINT32 Count = 0;
473 1.1 jruoho
474 1.1 jruoho
475 1.1 jruoho /* Search all nodes in namespace */
476 1.1 jruoho
477 1.1 jruoho (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
478 1.1 jruoho AcpiDbWalkForPredefinedNames, NULL, (void *) &Count, NULL);
479 1.1 jruoho
480 1.1 jruoho AcpiOsPrintf ("Found %u predefined names in the namespace\n", Count);
481 1.1 jruoho }
482 1.1 jruoho
483 1.1 jruoho
484 1.1 jruoho /*******************************************************************************
485 1.1 jruoho *
486 1.1 jruoho * FUNCTION: AcpiDbWalkForExecute
487 1.1 jruoho *
488 1.1 jruoho * PARAMETERS: Callback from WalkNamespace
489 1.1 jruoho *
490 1.1 jruoho * RETURN: Status
491 1.1 jruoho *
492 1.1 jruoho * DESCRIPTION: Batch execution module. Currently only executes predefined
493 1.1 jruoho * ACPI names.
494 1.1 jruoho *
495 1.1 jruoho ******************************************************************************/
496 1.1 jruoho
497 1.1 jruoho static ACPI_STATUS
498 1.1 jruoho AcpiDbWalkForExecute (
499 1.1 jruoho ACPI_HANDLE ObjHandle,
500 1.1 jruoho UINT32 NestingLevel,
501 1.1 jruoho void *Context,
502 1.1 jruoho void **ReturnValue)
503 1.1 jruoho {
504 1.1 jruoho ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
505 1.1 jruoho ACPI_EXECUTE_WALK *Info = (ACPI_EXECUTE_WALK *) Context;
506 1.1 jruoho ACPI_BUFFER ReturnObj;
507 1.1 jruoho ACPI_STATUS Status;
508 1.1 jruoho char *Pathname;
509 1.1 jruoho UINT32 i;
510 1.1 jruoho ACPI_DEVICE_INFO *ObjInfo;
511 1.1 jruoho ACPI_OBJECT_LIST ParamObjects;
512 1.1 jruoho ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS];
513 1.1 jruoho const ACPI_PREDEFINED_INFO *Predefined;
514 1.1 jruoho
515 1.1 jruoho
516 1.1 jruoho Predefined = AcpiNsCheckForPredefinedName (Node);
517 1.1 jruoho if (!Predefined)
518 1.1 jruoho {
519 1.1 jruoho return (AE_OK);
520 1.1 jruoho }
521 1.1 jruoho
522 1.1 jruoho if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
523 1.1 jruoho {
524 1.1 jruoho return (AE_OK);
525 1.1 jruoho }
526 1.1 jruoho
527 1.1 jruoho Pathname = AcpiNsGetExternalPathname (Node);
528 1.1 jruoho if (!Pathname)
529 1.1 jruoho {
530 1.1 jruoho return (AE_OK);
531 1.1 jruoho }
532 1.1 jruoho
533 1.1 jruoho /* Get the object info for number of method parameters */
534 1.1 jruoho
535 1.1 jruoho Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
536 1.1 jruoho if (ACPI_FAILURE (Status))
537 1.1 jruoho {
538 1.1 jruoho return (Status);
539 1.1 jruoho }
540 1.1 jruoho
541 1.1 jruoho ParamObjects.Pointer = NULL;
542 1.1 jruoho ParamObjects.Count = 0;
543 1.1 jruoho
544 1.1 jruoho if (ObjInfo->Type == ACPI_TYPE_METHOD)
545 1.1 jruoho {
546 1.1 jruoho /* Setup default parameters */
547 1.1 jruoho
548 1.1 jruoho for (i = 0; i < ObjInfo->ParamCount; i++)
549 1.1 jruoho {
550 1.1 jruoho Params[i].Type = ACPI_TYPE_INTEGER;
551 1.1 jruoho Params[i].Integer.Value = 1;
552 1.1 jruoho }
553 1.1 jruoho
554 1.1 jruoho ParamObjects.Pointer = Params;
555 1.1 jruoho ParamObjects.Count = ObjInfo->ParamCount;
556 1.1 jruoho }
557 1.1 jruoho
558 1.1 jruoho ACPI_FREE (ObjInfo);
559 1.1 jruoho ReturnObj.Pointer = NULL;
560 1.1 jruoho ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
561 1.1 jruoho
562 1.1 jruoho /* Do the actual method execution */
563 1.1 jruoho
564 1.1 jruoho AcpiGbl_MethodExecuting = TRUE;
565 1.1 jruoho
566 1.1 jruoho Status = AcpiEvaluateObject (Node, NULL, &ParamObjects, &ReturnObj);
567 1.1 jruoho
568 1.1 jruoho AcpiOsPrintf ("%-32s returned %s\n", Pathname, AcpiFormatException (Status));
569 1.1 jruoho AcpiGbl_MethodExecuting = FALSE;
570 1.1 jruoho ACPI_FREE (Pathname);
571 1.1 jruoho
572 1.1 jruoho /* Ignore status from method execution */
573 1.1 jruoho
574 1.1 jruoho Status = AE_OK;
575 1.1 jruoho
576 1.1 jruoho /* Update count, check if we have executed enough methods */
577 1.1 jruoho
578 1.1 jruoho Info->Count++;
579 1.1 jruoho if (Info->Count >= Info->MaxCount)
580 1.1 jruoho {
581 1.1 jruoho Status = AE_CTRL_TERMINATE;
582 1.1 jruoho }
583 1.1 jruoho
584 1.1 jruoho return (Status);
585 1.1 jruoho }
586 1.1 jruoho
587 1.1 jruoho
588 1.1 jruoho /*******************************************************************************
589 1.1 jruoho *
590 1.1 jruoho * FUNCTION: AcpiDbBatchExecute
591 1.1 jruoho *
592 1.1 jruoho * PARAMETERS: CountArg - Max number of methods to execute
593 1.1 jruoho *
594 1.1 jruoho * RETURN: None
595 1.1 jruoho *
596 1.1 jruoho * DESCRIPTION: Namespace batch execution. Execute predefined names in the
597 1.1 jruoho * namespace, up to the max count, if specified.
598 1.1 jruoho *
599 1.1 jruoho ******************************************************************************/
600 1.1 jruoho
601 1.1 jruoho void
602 1.1 jruoho AcpiDbBatchExecute (
603 1.1 jruoho char *CountArg)
604 1.1 jruoho {
605 1.1 jruoho ACPI_EXECUTE_WALK Info;
606 1.1 jruoho
607 1.1 jruoho
608 1.1 jruoho Info.Count = 0;
609 1.1 jruoho Info.MaxCount = ACPI_UINT32_MAX;
610 1.1 jruoho
611 1.1 jruoho if (CountArg)
612 1.1 jruoho {
613 1.1 jruoho Info.MaxCount = ACPI_STRTOUL (CountArg, NULL, 0);
614 1.1 jruoho }
615 1.1 jruoho
616 1.1 jruoho
617 1.1 jruoho /* Search all nodes in namespace */
618 1.1 jruoho
619 1.1 jruoho (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
620 1.1 jruoho AcpiDbWalkForExecute, NULL, (void *) &Info, NULL);
621 1.1 jruoho
622 1.1 jruoho AcpiOsPrintf ("Executed %u predefined names in the namespace\n", Info.Count);
623 1.1 jruoho }
624 1.1 jruoho
625 1.1 jruoho
626 1.1 jruoho /*******************************************************************************
627 1.1 jruoho *
628 1.1 jruoho * FUNCTION: AcpiDbDisplayLocks
629 1.1 jruoho *
630 1.1 jruoho * PARAMETERS: None
631 1.1 jruoho *
632 1.1 jruoho * RETURN: None
633 1.1 jruoho *
634 1.1 jruoho * DESCRIPTION: Display information about internal mutexes.
635 1.1 jruoho *
636 1.1 jruoho ******************************************************************************/
637 1.1 jruoho
638 1.1 jruoho void
639 1.1 jruoho AcpiDbDisplayLocks (
640 1.1 jruoho void)
641 1.1 jruoho {
642 1.1 jruoho UINT32 i;
643 1.1 jruoho
644 1.1 jruoho
645 1.1 jruoho for (i = 0; i < ACPI_MAX_MUTEX; i++)
646 1.1 jruoho {
647 1.1 jruoho AcpiOsPrintf ("%26s : %s\n", AcpiUtGetMutexName (i),
648 1.1 jruoho AcpiGbl_MutexInfo[i].ThreadId == ACPI_MUTEX_NOT_ACQUIRED
649 1.1 jruoho ? "Locked" : "Unlocked");
650 1.1 jruoho }
651 1.1 jruoho }
652 1.1 jruoho
653 1.1 jruoho
654 1.1 jruoho /*******************************************************************************
655 1.1 jruoho *
656 1.1 jruoho * FUNCTION: AcpiDbDisplayTableInfo
657 1.1 jruoho *
658 1.1 jruoho * PARAMETERS: TableArg - String with name of table to be displayed
659 1.1 jruoho *
660 1.1 jruoho * RETURN: None
661 1.1 jruoho *
662 1.1 jruoho * DESCRIPTION: Display information about loaded tables. Current
663 1.1 jruoho * implementation displays all loaded tables.
664 1.1 jruoho *
665 1.1 jruoho ******************************************************************************/
666 1.1 jruoho
667 1.1 jruoho void
668 1.1 jruoho AcpiDbDisplayTableInfo (
669 1.1 jruoho char *TableArg)
670 1.1 jruoho {
671 1.1 jruoho UINT32 i;
672 1.1 jruoho ACPI_TABLE_DESC *TableDesc;
673 1.1 jruoho ACPI_STATUS Status;
674 1.1 jruoho
675 1.1 jruoho
676 1.1 jruoho /* Walk the entire root table list */
677 1.1 jruoho
678 1.1 jruoho for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
679 1.1 jruoho {
680 1.1 jruoho TableDesc = &AcpiGbl_RootTableList.Tables[i];
681 1.1 jruoho AcpiOsPrintf ("%u ", i);
682 1.1 jruoho
683 1.1 jruoho /* Make sure that the table is mapped */
684 1.1 jruoho
685 1.1 jruoho Status = AcpiTbVerifyTable (TableDesc);
686 1.1 jruoho if (ACPI_FAILURE (Status))
687 1.1 jruoho {
688 1.1 jruoho return;
689 1.1 jruoho }
690 1.1 jruoho
691 1.1 jruoho /* Dump the table header */
692 1.1 jruoho
693 1.1 jruoho if (TableDesc->Pointer)
694 1.1 jruoho {
695 1.1 jruoho AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer);
696 1.1 jruoho }
697 1.1 jruoho else
698 1.1 jruoho {
699 1.1 jruoho /* If the pointer is null, the table has been unloaded */
700 1.1 jruoho
701 1.1 jruoho ACPI_INFO ((AE_INFO, "%4.4s - Table has been unloaded",
702 1.1 jruoho TableDesc->Signature.Ascii));
703 1.1 jruoho }
704 1.1 jruoho }
705 1.1 jruoho }
706 1.1 jruoho
707 1.1 jruoho
708 1.1 jruoho /*******************************************************************************
709 1.1 jruoho *
710 1.1 jruoho * FUNCTION: AcpiDbUnloadAcpiTable
711 1.1 jruoho *
712 1.1 jruoho * PARAMETERS: TableArg - Name of the table to be unloaded
713 1.1 jruoho * InstanceArg - Which instance of the table to unload (if
714 1.1 jruoho * there are multiple tables of the same type)
715 1.1 jruoho *
716 1.1 jruoho * RETURN: Nonde
717 1.1 jruoho *
718 1.1 jruoho * DESCRIPTION: Unload an ACPI table.
719 1.1 jruoho * Instance is not implemented
720 1.1 jruoho *
721 1.1 jruoho ******************************************************************************/
722 1.1 jruoho
723 1.1 jruoho void
724 1.1 jruoho AcpiDbUnloadAcpiTable (
725 1.1 jruoho char *TableArg,
726 1.1 jruoho char *InstanceArg)
727 1.1 jruoho {
728 1.1 jruoho /* TBD: Need to reimplement for new data structures */
729 1.1 jruoho
730 1.1 jruoho #if 0
731 1.1 jruoho UINT32 i;
732 1.1 jruoho ACPI_STATUS Status;
733 1.1 jruoho
734 1.1 jruoho
735 1.1 jruoho /* Search all tables for the target type */
736 1.1 jruoho
737 1.1 jruoho for (i = 0; i < (ACPI_TABLE_ID_MAX+1); i++)
738 1.1 jruoho {
739 1.1 jruoho if (!ACPI_STRNCMP (TableArg, AcpiGbl_TableData[i].Signature,
740 1.1 jruoho AcpiGbl_TableData[i].SigLength))
741 1.1 jruoho {
742 1.1 jruoho /* Found the table, unload it */
743 1.1 jruoho
744 1.1 jruoho Status = AcpiUnloadTable (i);
745 1.1 jruoho if (ACPI_SUCCESS (Status))
746 1.1 jruoho {
747 1.1 jruoho AcpiOsPrintf ("[%s] unloaded and uninstalled\n", TableArg);
748 1.1 jruoho }
749 1.1 jruoho else
750 1.1 jruoho {
751 1.1 jruoho AcpiOsPrintf ("%s, while unloading [%s]\n",
752 1.1 jruoho AcpiFormatException (Status), TableArg);
753 1.1 jruoho }
754 1.1 jruoho
755 1.1 jruoho return;
756 1.1 jruoho }
757 1.1 jruoho }
758 1.1 jruoho
759 1.1 jruoho AcpiOsPrintf ("Unknown table type [%s]\n", TableArg);
760 1.1 jruoho #endif
761 1.1 jruoho }
762 1.1 jruoho
763 1.1 jruoho
764 1.1 jruoho /*******************************************************************************
765 1.1 jruoho *
766 1.1 jruoho * FUNCTION: AcpiDbSetMethodBreakpoint
767 1.1 jruoho *
768 1.1 jruoho * PARAMETERS: Location - AML offset of breakpoint
769 1.1 jruoho * WalkState - Current walk info
770 1.1 jruoho * Op - Current Op (from parse walk)
771 1.1 jruoho *
772 1.1 jruoho * RETURN: None
773 1.1 jruoho *
774 1.1 jruoho * DESCRIPTION: Set a breakpoint in a control method at the specified
775 1.1 jruoho * AML offset
776 1.1 jruoho *
777 1.1 jruoho ******************************************************************************/
778 1.1 jruoho
779 1.1 jruoho void
780 1.1 jruoho AcpiDbSetMethodBreakpoint (
781 1.1 jruoho char *Location,
782 1.1 jruoho ACPI_WALK_STATE *WalkState,
783 1.1 jruoho ACPI_PARSE_OBJECT *Op)
784 1.1 jruoho {
785 1.1 jruoho UINT32 Address;
786 1.1 jruoho
787 1.1 jruoho
788 1.1 jruoho if (!Op)
789 1.1 jruoho {
790 1.1 jruoho AcpiOsPrintf ("There is no method currently executing\n");
791 1.1 jruoho return;
792 1.1 jruoho }
793 1.1 jruoho
794 1.1 jruoho /* Get and verify the breakpoint address */
795 1.1 jruoho
796 1.1 jruoho Address = ACPI_STRTOUL (Location, NULL, 16);
797 1.1 jruoho if (Address <= Op->Common.AmlOffset)
798 1.1 jruoho {
799 1.1 jruoho AcpiOsPrintf ("Breakpoint %X is beyond current address %X\n",
800 1.1 jruoho Address, Op->Common.AmlOffset);
801 1.1 jruoho }
802 1.1 jruoho
803 1.1 jruoho /* Save breakpoint in current walk */
804 1.1 jruoho
805 1.1 jruoho WalkState->UserBreakpoint = Address;
806 1.1 jruoho AcpiOsPrintf ("Breakpoint set at AML offset %X\n", Address);
807 1.1 jruoho }
808 1.1 jruoho
809 1.1 jruoho
810 1.1 jruoho /*******************************************************************************
811 1.1 jruoho *
812 1.1 jruoho * FUNCTION: AcpiDbSetMethodCallBreakpoint
813 1.1 jruoho *
814 1.1 jruoho * PARAMETERS: Op - Current Op (from parse walk)
815 1.1 jruoho *
816 1.1 jruoho * RETURN: None
817 1.1 jruoho *
818 1.1 jruoho * DESCRIPTION: Set a breakpoint in a control method at the specified
819 1.1 jruoho * AML offset
820 1.1 jruoho *
821 1.1 jruoho ******************************************************************************/
822 1.1 jruoho
823 1.1 jruoho void
824 1.1 jruoho AcpiDbSetMethodCallBreakpoint (
825 1.1 jruoho ACPI_PARSE_OBJECT *Op)
826 1.1 jruoho {
827 1.1 jruoho
828 1.1 jruoho
829 1.1 jruoho if (!Op)
830 1.1 jruoho {
831 1.1 jruoho AcpiOsPrintf ("There is no method currently executing\n");
832 1.1 jruoho return;
833 1.1 jruoho }
834 1.1 jruoho
835 1.1 jruoho AcpiGbl_StepToNextCall = TRUE;
836 1.1 jruoho }
837 1.1 jruoho
838 1.1 jruoho
839 1.1 jruoho /*******************************************************************************
840 1.1 jruoho *
841 1.1 jruoho * FUNCTION: AcpiDbDisassembleAml
842 1.1 jruoho *
843 1.1 jruoho * PARAMETERS: Statements - Number of statements to disassemble
844 1.1 jruoho * Op - Current Op (from parse walk)
845 1.1 jruoho *
846 1.1 jruoho * RETURN: None
847 1.1 jruoho *
848 1.1 jruoho * DESCRIPTION: Display disassembled AML (ASL) starting from Op for the number
849 1.1 jruoho * of statements specified.
850 1.1 jruoho *
851 1.1 jruoho ******************************************************************************/
852 1.1 jruoho
853 1.1 jruoho void
854 1.1 jruoho AcpiDbDisassembleAml (
855 1.1 jruoho char *Statements,
856 1.1 jruoho ACPI_PARSE_OBJECT *Op)
857 1.1 jruoho {
858 1.1 jruoho UINT32 NumStatements = 8;
859 1.1 jruoho
860 1.1 jruoho
861 1.1 jruoho if (!Op)
862 1.1 jruoho {
863 1.1 jruoho AcpiOsPrintf ("There is no method currently executing\n");
864 1.1 jruoho return;
865 1.1 jruoho }
866 1.1 jruoho
867 1.1 jruoho if (Statements)
868 1.1 jruoho {
869 1.1 jruoho NumStatements = ACPI_STRTOUL (Statements, NULL, 0);
870 1.1 jruoho }
871 1.1 jruoho
872 1.1 jruoho AcpiDmDisassemble (NULL, Op, NumStatements);
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: AcpiDbDisassembleMethod
879 1.1 jruoho *
880 1.1 jruoho * PARAMETERS: Name - Name of control method
881 1.1 jruoho *
882 1.1 jruoho * RETURN: None
883 1.1 jruoho *
884 1.1 jruoho * DESCRIPTION: Display disassembled AML (ASL) starting from Op for the number
885 1.1 jruoho * of statements specified.
886 1.1 jruoho *
887 1.1 jruoho ******************************************************************************/
888 1.1 jruoho
889 1.1 jruoho ACPI_STATUS
890 1.1 jruoho AcpiDbDisassembleMethod (
891 1.1 jruoho char *Name)
892 1.1 jruoho {
893 1.1 jruoho ACPI_STATUS Status;
894 1.1 jruoho ACPI_PARSE_OBJECT *Op;
895 1.1 jruoho ACPI_WALK_STATE *WalkState;
896 1.1 jruoho ACPI_OPERAND_OBJECT *ObjDesc;
897 1.1 jruoho ACPI_NAMESPACE_NODE *Method;
898 1.1 jruoho
899 1.1 jruoho
900 1.1 jruoho Method = AcpiDbConvertToNode (Name);
901 1.1 jruoho if (!Method)
902 1.1 jruoho {
903 1.1 jruoho return (AE_BAD_PARAMETER);
904 1.1 jruoho }
905 1.1 jruoho
906 1.1 jruoho ObjDesc = Method->Object;
907 1.1 jruoho
908 1.1 jruoho Op = AcpiPsCreateScopeOp ();
909 1.1 jruoho if (!Op)
910 1.1 jruoho {
911 1.1 jruoho return (AE_NO_MEMORY);
912 1.1 jruoho }
913 1.1 jruoho
914 1.1 jruoho /* Create and initialize a new walk state */
915 1.1 jruoho
916 1.1 jruoho WalkState = AcpiDsCreateWalkState (0, Op, NULL, NULL);
917 1.1 jruoho if (!WalkState)
918 1.1 jruoho {
919 1.1 jruoho return (AE_NO_MEMORY);
920 1.1 jruoho }
921 1.1 jruoho
922 1.1 jruoho Status = AcpiDsInitAmlWalk (WalkState, Op, NULL,
923 1.1 jruoho ObjDesc->Method.AmlStart,
924 1.1 jruoho ObjDesc->Method.AmlLength, NULL, ACPI_IMODE_LOAD_PASS1);
925 1.1 jruoho if (ACPI_FAILURE (Status))
926 1.1 jruoho {
927 1.1 jruoho return (Status);
928 1.1 jruoho }
929 1.1 jruoho
930 1.1 jruoho /* Parse the AML */
931 1.1 jruoho
932 1.1 jruoho WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE;
933 1.1 jruoho WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
934 1.1 jruoho Status = AcpiPsParseAml (WalkState);
935 1.1 jruoho
936 1.1 jruoho AcpiDmDisassemble (NULL, Op, 0);
937 1.1 jruoho AcpiPsDeleteParseTree (Op);
938 1.1 jruoho return (AE_OK);
939 1.1 jruoho }
940 1.1 jruoho
941 1.1 jruoho
942 1.1 jruoho /*******************************************************************************
943 1.1 jruoho *
944 1.1 jruoho * FUNCTION: AcpiDbDumpNamespace
945 1.1 jruoho *
946 1.1 jruoho * PARAMETERS: StartArg - Node to begin namespace dump
947 1.1 jruoho * DepthArg - Maximum tree depth to be dumped
948 1.1 jruoho *
949 1.1 jruoho * RETURN: None
950 1.1 jruoho *
951 1.1 jruoho * DESCRIPTION: Dump entire namespace or a subtree. Each node is displayed
952 1.1 jruoho * with type and other information.
953 1.1 jruoho *
954 1.1 jruoho ******************************************************************************/
955 1.1 jruoho
956 1.1 jruoho void
957 1.1 jruoho AcpiDbDumpNamespace (
958 1.1 jruoho char *StartArg,
959 1.1 jruoho char *DepthArg)
960 1.1 jruoho {
961 1.1 jruoho ACPI_HANDLE SubtreeEntry = AcpiGbl_RootNode;
962 1.1 jruoho UINT32 MaxDepth = ACPI_UINT32_MAX;
963 1.1 jruoho
964 1.1 jruoho
965 1.1 jruoho /* No argument given, just start at the root and dump entire namespace */
966 1.1 jruoho
967 1.1 jruoho if (StartArg)
968 1.1 jruoho {
969 1.1 jruoho SubtreeEntry = AcpiDbConvertToNode (StartArg);
970 1.1 jruoho if (!SubtreeEntry)
971 1.1 jruoho {
972 1.1 jruoho return;
973 1.1 jruoho }
974 1.1 jruoho
975 1.1 jruoho /* Now we can check for the depth argument */
976 1.1 jruoho
977 1.1 jruoho if (DepthArg)
978 1.1 jruoho {
979 1.1 jruoho MaxDepth = ACPI_STRTOUL (DepthArg, NULL, 0);
980 1.1 jruoho }
981 1.1 jruoho }
982 1.1 jruoho
983 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
984 1.1 jruoho AcpiOsPrintf ("ACPI Namespace (from %4.4s (%p) subtree):\n",
985 1.1 jruoho ((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Name.Ascii, SubtreeEntry);
986 1.1 jruoho
987 1.1 jruoho /* Display the subtree */
988 1.1 jruoho
989 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
990 1.1 jruoho AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, MaxDepth,
991 1.1 jruoho ACPI_OWNER_ID_MAX, SubtreeEntry);
992 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
993 1.1 jruoho }
994 1.1 jruoho
995 1.1 jruoho
996 1.1 jruoho /*******************************************************************************
997 1.1 jruoho *
998 1.1 jruoho * FUNCTION: AcpiDbDumpNamespaceByOwner
999 1.1 jruoho *
1000 1.1 jruoho * PARAMETERS: OwnerArg - Owner ID whose nodes will be displayed
1001 1.1 jruoho * DepthArg - Maximum tree depth to be dumped
1002 1.1 jruoho *
1003 1.1 jruoho * RETURN: None
1004 1.1 jruoho *
1005 1.1 jruoho * DESCRIPTION: Dump elements of the namespace that are owned by the OwnerId.
1006 1.1 jruoho *
1007 1.1 jruoho ******************************************************************************/
1008 1.1 jruoho
1009 1.1 jruoho void
1010 1.1 jruoho AcpiDbDumpNamespaceByOwner (
1011 1.1 jruoho char *OwnerArg,
1012 1.1 jruoho char *DepthArg)
1013 1.1 jruoho {
1014 1.1 jruoho ACPI_HANDLE SubtreeEntry = AcpiGbl_RootNode;
1015 1.1 jruoho UINT32 MaxDepth = ACPI_UINT32_MAX;
1016 1.1 jruoho ACPI_OWNER_ID OwnerId;
1017 1.1 jruoho
1018 1.1 jruoho
1019 1.1 jruoho OwnerId = (ACPI_OWNER_ID) ACPI_STRTOUL (OwnerArg, NULL, 0);
1020 1.1 jruoho
1021 1.1 jruoho /* Now we can check for the depth argument */
1022 1.1 jruoho
1023 1.1 jruoho if (DepthArg)
1024 1.1 jruoho {
1025 1.1 jruoho MaxDepth = ACPI_STRTOUL (DepthArg, NULL, 0);
1026 1.1 jruoho }
1027 1.1 jruoho
1028 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
1029 1.1 jruoho AcpiOsPrintf ("ACPI Namespace by owner %X:\n", OwnerId);
1030 1.1 jruoho
1031 1.1 jruoho /* Display the subtree */
1032 1.1 jruoho
1033 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
1034 1.1 jruoho AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, MaxDepth, OwnerId,
1035 1.1 jruoho SubtreeEntry);
1036 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
1037 1.1 jruoho }
1038 1.1 jruoho
1039 1.1 jruoho
1040 1.1 jruoho /*******************************************************************************
1041 1.1 jruoho *
1042 1.1 jruoho * FUNCTION: AcpiDbSendNotify
1043 1.1 jruoho *
1044 1.1 jruoho * PARAMETERS: Name - Name of ACPI object to send the notify to
1045 1.1 jruoho * Value - Value of the notify to send.
1046 1.1 jruoho *
1047 1.1 jruoho * RETURN: None
1048 1.1 jruoho *
1049 1.1 jruoho * DESCRIPTION: Send an ACPI notification. The value specified is sent to the
1050 1.1 jruoho * named object as an ACPI notify.
1051 1.1 jruoho *
1052 1.1 jruoho ******************************************************************************/
1053 1.1 jruoho
1054 1.1 jruoho void
1055 1.1 jruoho AcpiDbSendNotify (
1056 1.1 jruoho char *Name,
1057 1.1 jruoho UINT32 Value)
1058 1.1 jruoho {
1059 1.1 jruoho ACPI_NAMESPACE_NODE *Node;
1060 1.1 jruoho ACPI_STATUS Status;
1061 1.1 jruoho
1062 1.1 jruoho
1063 1.1 jruoho /* Translate name to an Named object */
1064 1.1 jruoho
1065 1.1 jruoho Node = AcpiDbConvertToNode (Name);
1066 1.1 jruoho if (!Node)
1067 1.1 jruoho {
1068 1.1 jruoho return;
1069 1.1 jruoho }
1070 1.1 jruoho
1071 1.1 jruoho /* Decode Named object type */
1072 1.1 jruoho
1073 1.1 jruoho switch (Node->Type)
1074 1.1 jruoho {
1075 1.1 jruoho case ACPI_TYPE_DEVICE:
1076 1.1 jruoho case ACPI_TYPE_THERMAL:
1077 1.1 jruoho
1078 1.1 jruoho /* Send the notify */
1079 1.1 jruoho
1080 1.1 jruoho Status = AcpiEvQueueNotifyRequest (Node, Value);
1081 1.1 jruoho if (ACPI_FAILURE (Status))
1082 1.1 jruoho {
1083 1.1 jruoho AcpiOsPrintf ("Could not queue notify\n");
1084 1.1 jruoho }
1085 1.1 jruoho break;
1086 1.1 jruoho
1087 1.1 jruoho default:
1088 1.1 jruoho AcpiOsPrintf ("Named object is not a device or a thermal object\n");
1089 1.1 jruoho break;
1090 1.1 jruoho }
1091 1.1 jruoho }
1092 1.1 jruoho
1093 1.1 jruoho
1094 1.1 jruoho /*******************************************************************************
1095 1.1 jruoho *
1096 1.1 jruoho * FUNCTION: AcpiDbSetMethodData
1097 1.1 jruoho *
1098 1.1 jruoho * PARAMETERS: TypeArg - L for local, A for argument
1099 1.1 jruoho * IndexArg - which one
1100 1.1 jruoho * ValueArg - Value to set.
1101 1.1 jruoho *
1102 1.1 jruoho * RETURN: None
1103 1.1 jruoho *
1104 1.1 jruoho * DESCRIPTION: Set a local or argument for the running control method.
1105 1.1 jruoho * NOTE: only object supported is Number.
1106 1.1 jruoho *
1107 1.1 jruoho ******************************************************************************/
1108 1.1 jruoho
1109 1.1 jruoho void
1110 1.1 jruoho AcpiDbSetMethodData (
1111 1.1 jruoho char *TypeArg,
1112 1.1 jruoho char *IndexArg,
1113 1.1 jruoho char *ValueArg)
1114 1.1 jruoho {
1115 1.1 jruoho char Type;
1116 1.1 jruoho UINT32 Index;
1117 1.1 jruoho UINT32 Value;
1118 1.1 jruoho ACPI_WALK_STATE *WalkState;
1119 1.1 jruoho ACPI_OPERAND_OBJECT *ObjDesc;
1120 1.1 jruoho ACPI_STATUS Status;
1121 1.1 jruoho ACPI_NAMESPACE_NODE *Node;
1122 1.1 jruoho
1123 1.1 jruoho
1124 1.1 jruoho /* Validate TypeArg */
1125 1.1 jruoho
1126 1.1 jruoho AcpiUtStrupr (TypeArg);
1127 1.1 jruoho Type = TypeArg[0];
1128 1.1 jruoho if ((Type != 'L') &&
1129 1.1 jruoho (Type != 'A') &&
1130 1.1 jruoho (Type != 'N'))
1131 1.1 jruoho {
1132 1.1 jruoho AcpiOsPrintf ("Invalid SET operand: %s\n", TypeArg);
1133 1.1 jruoho return;
1134 1.1 jruoho }
1135 1.1 jruoho
1136 1.1 jruoho Value = ACPI_STRTOUL (ValueArg, NULL, 16);
1137 1.1 jruoho
1138 1.1 jruoho if (Type == 'N')
1139 1.1 jruoho {
1140 1.1 jruoho Node = AcpiDbConvertToNode (IndexArg);
1141 1.1 jruoho if (Node->Type != ACPI_TYPE_INTEGER)
1142 1.1 jruoho {
1143 1.1 jruoho AcpiOsPrintf ("Can only set Integer nodes\n");
1144 1.1 jruoho return;
1145 1.1 jruoho }
1146 1.1 jruoho ObjDesc = Node->Object;
1147 1.1 jruoho ObjDesc->Integer.Value = Value;
1148 1.1 jruoho return;
1149 1.1 jruoho }
1150 1.1 jruoho
1151 1.1 jruoho /* Get the index and value */
1152 1.1 jruoho
1153 1.1 jruoho Index = ACPI_STRTOUL (IndexArg, NULL, 16);
1154 1.1 jruoho
1155 1.1 jruoho WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
1156 1.1 jruoho if (!WalkState)
1157 1.1 jruoho {
1158 1.1 jruoho AcpiOsPrintf ("There is no method currently executing\n");
1159 1.1 jruoho return;
1160 1.1 jruoho }
1161 1.1 jruoho
1162 1.1 jruoho /* Create and initialize the new object */
1163 1.1 jruoho
1164 1.1 jruoho ObjDesc = AcpiUtCreateIntegerObject ((UINT64) Value);
1165 1.1 jruoho if (!ObjDesc)
1166 1.1 jruoho {
1167 1.1 jruoho AcpiOsPrintf ("Could not create an internal object\n");
1168 1.1 jruoho return;
1169 1.1 jruoho }
1170 1.1 jruoho
1171 1.1 jruoho /* Store the new object into the target */
1172 1.1 jruoho
1173 1.1 jruoho switch (Type)
1174 1.1 jruoho {
1175 1.1 jruoho case 'A':
1176 1.1 jruoho
1177 1.1 jruoho /* Set a method argument */
1178 1.1 jruoho
1179 1.1 jruoho if (Index > ACPI_METHOD_MAX_ARG)
1180 1.1 jruoho {
1181 1.1 jruoho AcpiOsPrintf ("Arg%u - Invalid argument name\n", Index);
1182 1.1 jruoho goto Cleanup;
1183 1.1 jruoho }
1184 1.1 jruoho
1185 1.1 jruoho Status = AcpiDsStoreObjectToLocal (ACPI_REFCLASS_ARG, Index, ObjDesc,
1186 1.1 jruoho WalkState);
1187 1.1 jruoho if (ACPI_FAILURE (Status))
1188 1.1 jruoho {
1189 1.1 jruoho goto Cleanup;
1190 1.1 jruoho }
1191 1.1 jruoho
1192 1.1 jruoho ObjDesc = WalkState->Arguments[Index].Object;
1193 1.1 jruoho
1194 1.1 jruoho AcpiOsPrintf ("Arg%u: ", Index);
1195 1.1 jruoho AcpiDmDisplayInternalObject (ObjDesc, WalkState);
1196 1.1 jruoho break;
1197 1.1 jruoho
1198 1.1 jruoho case 'L':
1199 1.1 jruoho
1200 1.1 jruoho /* Set a method local */
1201 1.1 jruoho
1202 1.1 jruoho if (Index > ACPI_METHOD_MAX_LOCAL)
1203 1.1 jruoho {
1204 1.1 jruoho AcpiOsPrintf ("Local%u - Invalid local variable name\n", Index);
1205 1.1 jruoho goto Cleanup;
1206 1.1 jruoho }
1207 1.1 jruoho
1208 1.1 jruoho Status = AcpiDsStoreObjectToLocal (ACPI_REFCLASS_LOCAL, Index, ObjDesc,
1209 1.1 jruoho WalkState);
1210 1.1 jruoho if (ACPI_FAILURE (Status))
1211 1.1 jruoho {
1212 1.1 jruoho goto Cleanup;
1213 1.1 jruoho }
1214 1.1 jruoho
1215 1.1 jruoho ObjDesc = WalkState->LocalVariables[Index].Object;
1216 1.1 jruoho
1217 1.1 jruoho AcpiOsPrintf ("Local%u: ", Index);
1218 1.1 jruoho AcpiDmDisplayInternalObject (ObjDesc, WalkState);
1219 1.1 jruoho break;
1220 1.1 jruoho
1221 1.1 jruoho default:
1222 1.1 jruoho break;
1223 1.1 jruoho }
1224 1.1 jruoho
1225 1.1 jruoho Cleanup:
1226 1.1 jruoho AcpiUtRemoveReference (ObjDesc);
1227 1.1 jruoho }
1228 1.1 jruoho
1229 1.1 jruoho
1230 1.1 jruoho /*******************************************************************************
1231 1.1 jruoho *
1232 1.1 jruoho * FUNCTION: AcpiDbWalkForSpecificObjects
1233 1.1 jruoho *
1234 1.1 jruoho * PARAMETERS: Callback from WalkNamespace
1235 1.1 jruoho *
1236 1.1 jruoho * RETURN: Status
1237 1.1 jruoho *
1238 1.1 jruoho * DESCRIPTION: Display short info about objects in the namespace
1239 1.1 jruoho *
1240 1.1 jruoho ******************************************************************************/
1241 1.1 jruoho
1242 1.1 jruoho static ACPI_STATUS
1243 1.1 jruoho AcpiDbWalkForSpecificObjects (
1244 1.1 jruoho ACPI_HANDLE ObjHandle,
1245 1.1 jruoho UINT32 NestingLevel,
1246 1.1 jruoho void *Context,
1247 1.1 jruoho void **ReturnValue)
1248 1.1 jruoho {
1249 1.1 jruoho ACPI_WALK_INFO *Info = (ACPI_WALK_INFO *) Context;
1250 1.1 jruoho ACPI_BUFFER Buffer;
1251 1.1 jruoho ACPI_STATUS Status;
1252 1.1 jruoho
1253 1.1 jruoho
1254 1.1 jruoho Info->Count++;
1255 1.1 jruoho
1256 1.1 jruoho /* Get and display the full pathname to this object */
1257 1.1 jruoho
1258 1.1 jruoho Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1259 1.1 jruoho Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
1260 1.1 jruoho if (ACPI_FAILURE (Status))
1261 1.1 jruoho {
1262 1.1 jruoho AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
1263 1.1 jruoho return (AE_OK);
1264 1.1 jruoho }
1265 1.1 jruoho
1266 1.1 jruoho AcpiOsPrintf ("%32s", (char *) Buffer.Pointer);
1267 1.1 jruoho ACPI_FREE (Buffer.Pointer);
1268 1.1 jruoho
1269 1.1 jruoho /* Dump short info about the object */
1270 1.1 jruoho
1271 1.1 jruoho (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, Info, NULL);
1272 1.1 jruoho return (AE_OK);
1273 1.1 jruoho }
1274 1.1 jruoho
1275 1.1 jruoho
1276 1.1 jruoho /*******************************************************************************
1277 1.1 jruoho *
1278 1.1 jruoho * FUNCTION: AcpiDbDisplayObjects
1279 1.1 jruoho *
1280 1.1 jruoho * PARAMETERS: ObjTypeArg - Type of object to display
1281 1.1 jruoho * DisplayCountArg - Max depth to display
1282 1.1 jruoho *
1283 1.1 jruoho * RETURN: None
1284 1.1 jruoho *
1285 1.1 jruoho * DESCRIPTION: Display objects in the namespace of the requested type
1286 1.1 jruoho *
1287 1.1 jruoho ******************************************************************************/
1288 1.1 jruoho
1289 1.1 jruoho ACPI_STATUS
1290 1.1 jruoho AcpiDbDisplayObjects (
1291 1.1 jruoho char *ObjTypeArg,
1292 1.1 jruoho char *DisplayCountArg)
1293 1.1 jruoho {
1294 1.1 jruoho ACPI_WALK_INFO Info;
1295 1.1 jruoho ACPI_OBJECT_TYPE Type;
1296 1.1 jruoho
1297 1.1 jruoho
1298 1.1 jruoho /* Get the object type */
1299 1.1 jruoho
1300 1.1 jruoho Type = AcpiDbMatchArgument (ObjTypeArg, AcpiDbObjectTypes);
1301 1.1 jruoho if (Type == ACPI_TYPE_NOT_FOUND)
1302 1.1 jruoho {
1303 1.1 jruoho AcpiOsPrintf ("Invalid or unsupported argument\n");
1304 1.1 jruoho return (AE_OK);
1305 1.1 jruoho }
1306 1.1 jruoho
1307 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
1308 1.1 jruoho AcpiOsPrintf (
1309 1.1 jruoho "Objects of type [%s] defined in the current ACPI Namespace:\n",
1310 1.1 jruoho AcpiUtGetTypeName (Type));
1311 1.1 jruoho
1312 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
1313 1.1 jruoho
1314 1.1 jruoho Info.Count = 0;
1315 1.1 jruoho Info.OwnerId = ACPI_OWNER_ID_MAX;
1316 1.1 jruoho Info.DebugLevel = ACPI_UINT32_MAX;
1317 1.1 jruoho Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;
1318 1.1 jruoho
1319 1.1 jruoho /* Walk the namespace from the root */
1320 1.1 jruoho
1321 1.1 jruoho (void) AcpiWalkNamespace (Type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
1322 1.1 jruoho AcpiDbWalkForSpecificObjects, NULL, (void *) &Info, NULL);
1323 1.1 jruoho
1324 1.1 jruoho AcpiOsPrintf (
1325 1.1 jruoho "\nFound %u objects of type [%s] in the current ACPI Namespace\n",
1326 1.1 jruoho Info.Count, AcpiUtGetTypeName (Type));
1327 1.1 jruoho
1328 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
1329 1.1 jruoho return (AE_OK);
1330 1.1 jruoho }
1331 1.1 jruoho
1332 1.1 jruoho
1333 1.1 jruoho /*******************************************************************************
1334 1.1 jruoho *
1335 1.1 jruoho * FUNCTION: AcpiDbWalkAndMatchName
1336 1.1 jruoho *
1337 1.1 jruoho * PARAMETERS: Callback from WalkNamespace
1338 1.1 jruoho *
1339 1.1 jruoho * RETURN: Status
1340 1.1 jruoho *
1341 1.1 jruoho * DESCRIPTION: Find a particular name/names within the namespace. Wildcards
1342 1.1 jruoho * are supported -- '?' matches any character.
1343 1.1 jruoho *
1344 1.1 jruoho ******************************************************************************/
1345 1.1 jruoho
1346 1.1 jruoho static ACPI_STATUS
1347 1.1 jruoho AcpiDbWalkAndMatchName (
1348 1.1 jruoho ACPI_HANDLE ObjHandle,
1349 1.1 jruoho UINT32 NestingLevel,
1350 1.1 jruoho void *Context,
1351 1.1 jruoho void **ReturnValue)
1352 1.1 jruoho {
1353 1.1 jruoho ACPI_STATUS Status;
1354 1.1 jruoho char *RequestedName = (char *) Context;
1355 1.1 jruoho UINT32 i;
1356 1.1 jruoho ACPI_BUFFER Buffer;
1357 1.1 jruoho ACPI_WALK_INFO Info;
1358 1.1 jruoho
1359 1.1 jruoho
1360 1.1 jruoho /* Check for a name match */
1361 1.1 jruoho
1362 1.1 jruoho for (i = 0; i < 4; i++)
1363 1.1 jruoho {
1364 1.1 jruoho /* Wildcard support */
1365 1.1 jruoho
1366 1.1 jruoho if ((RequestedName[i] != '?') &&
1367 1.1 jruoho (RequestedName[i] != ((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Ascii[i]))
1368 1.1 jruoho {
1369 1.1 jruoho /* No match, just exit */
1370 1.1 jruoho
1371 1.1 jruoho return (AE_OK);
1372 1.1 jruoho }
1373 1.1 jruoho }
1374 1.1 jruoho
1375 1.1 jruoho /* Get the full pathname to this object */
1376 1.1 jruoho
1377 1.1 jruoho Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1378 1.1 jruoho Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
1379 1.1 jruoho if (ACPI_FAILURE (Status))
1380 1.1 jruoho {
1381 1.1 jruoho AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
1382 1.1 jruoho }
1383 1.1 jruoho else
1384 1.1 jruoho {
1385 1.1 jruoho Info.OwnerId = ACPI_OWNER_ID_MAX;
1386 1.1 jruoho Info.DebugLevel = ACPI_UINT32_MAX;
1387 1.1 jruoho Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;
1388 1.1 jruoho
1389 1.1 jruoho AcpiOsPrintf ("%32s", (char *) Buffer.Pointer);
1390 1.1 jruoho (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, &Info, NULL);
1391 1.1 jruoho ACPI_FREE (Buffer.Pointer);
1392 1.1 jruoho }
1393 1.1 jruoho
1394 1.1 jruoho return (AE_OK);
1395 1.1 jruoho }
1396 1.1 jruoho
1397 1.1 jruoho
1398 1.1 jruoho /*******************************************************************************
1399 1.1 jruoho *
1400 1.1 jruoho * FUNCTION: AcpiDbFindNameInNamespace
1401 1.1 jruoho *
1402 1.1 jruoho * PARAMETERS: NameArg - The 4-character ACPI name to find.
1403 1.1 jruoho * wildcards are supported.
1404 1.1 jruoho *
1405 1.1 jruoho * RETURN: None
1406 1.1 jruoho *
1407 1.1 jruoho * DESCRIPTION: Search the namespace for a given name (with wildcards)
1408 1.1 jruoho *
1409 1.1 jruoho ******************************************************************************/
1410 1.1 jruoho
1411 1.1 jruoho ACPI_STATUS
1412 1.1 jruoho AcpiDbFindNameInNamespace (
1413 1.1 jruoho char *NameArg)
1414 1.1 jruoho {
1415 1.1 jruoho char AcpiName[5] = "____";
1416 1.1 jruoho char *AcpiNamePtr = AcpiName;
1417 1.1 jruoho
1418 1.1 jruoho
1419 1.1 jruoho if (ACPI_STRLEN (NameArg) > 4)
1420 1.1 jruoho {
1421 1.1 jruoho AcpiOsPrintf ("Name must be no longer than 4 characters\n");
1422 1.1 jruoho return (AE_OK);
1423 1.1 jruoho }
1424 1.1 jruoho
1425 1.1 jruoho /* Pad out name with underscores as necessary to create a 4-char name */
1426 1.1 jruoho
1427 1.1 jruoho AcpiUtStrupr (NameArg);
1428 1.1 jruoho while (*NameArg)
1429 1.1 jruoho {
1430 1.1 jruoho *AcpiNamePtr = *NameArg;
1431 1.1 jruoho AcpiNamePtr++;
1432 1.1 jruoho NameArg++;
1433 1.1 jruoho }
1434 1.1 jruoho
1435 1.1 jruoho /* Walk the namespace from the root */
1436 1.1 jruoho
1437 1.1 jruoho (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
1438 1.1 jruoho AcpiDbWalkAndMatchName, NULL, AcpiName, NULL);
1439 1.1 jruoho
1440 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
1441 1.1 jruoho return (AE_OK);
1442 1.1 jruoho }
1443 1.1 jruoho
1444 1.1 jruoho
1445 1.1 jruoho /*******************************************************************************
1446 1.1 jruoho *
1447 1.1 jruoho * FUNCTION: AcpiDbSetScope
1448 1.1 jruoho *
1449 1.1 jruoho * PARAMETERS: Name - New scope path
1450 1.1 jruoho *
1451 1.1 jruoho * RETURN: Status
1452 1.1 jruoho *
1453 1.1 jruoho * DESCRIPTION: Set the "current scope" as maintained by this utility.
1454 1.1 jruoho * The scope is used as a prefix to ACPI paths.
1455 1.1 jruoho *
1456 1.1 jruoho ******************************************************************************/
1457 1.1 jruoho
1458 1.1 jruoho void
1459 1.1 jruoho AcpiDbSetScope (
1460 1.1 jruoho char *Name)
1461 1.1 jruoho {
1462 1.1 jruoho ACPI_STATUS Status;
1463 1.1 jruoho ACPI_NAMESPACE_NODE *Node;
1464 1.1 jruoho
1465 1.1 jruoho
1466 1.1 jruoho if (!Name || Name[0] == 0)
1467 1.1 jruoho {
1468 1.1 jruoho AcpiOsPrintf ("Current scope: %s\n", AcpiGbl_DbScopeBuf);
1469 1.1 jruoho return;
1470 1.1 jruoho }
1471 1.1 jruoho
1472 1.1 jruoho AcpiDbPrepNamestring (Name);
1473 1.1 jruoho
1474 1.1 jruoho if (Name[0] == '\\')
1475 1.1 jruoho {
1476 1.1 jruoho /* Validate new scope from the root */
1477 1.1 jruoho
1478 1.1 jruoho Status = AcpiNsGetNode (AcpiGbl_RootNode, Name, ACPI_NS_NO_UPSEARCH,
1479 1.1 jruoho &Node);
1480 1.1 jruoho if (ACPI_FAILURE (Status))
1481 1.1 jruoho {
1482 1.1 jruoho goto ErrorExit;
1483 1.1 jruoho }
1484 1.1 jruoho
1485 1.1 jruoho ACPI_STRCPY (AcpiGbl_DbScopeBuf, Name);
1486 1.1 jruoho ACPI_STRCAT (AcpiGbl_DbScopeBuf, "\\");
1487 1.1 jruoho }
1488 1.1 jruoho else
1489 1.1 jruoho {
1490 1.1 jruoho /* Validate new scope relative to old scope */
1491 1.1 jruoho
1492 1.1 jruoho Status = AcpiNsGetNode (AcpiGbl_DbScopeNode, Name, ACPI_NS_NO_UPSEARCH,
1493 1.1 jruoho &Node);
1494 1.1 jruoho if (ACPI_FAILURE (Status))
1495 1.1 jruoho {
1496 1.1 jruoho goto ErrorExit;
1497 1.1 jruoho }
1498 1.1 jruoho
1499 1.1 jruoho ACPI_STRCAT (AcpiGbl_DbScopeBuf, Name);
1500 1.1 jruoho ACPI_STRCAT (AcpiGbl_DbScopeBuf, "\\");
1501 1.1 jruoho }
1502 1.1 jruoho
1503 1.1 jruoho AcpiGbl_DbScopeNode = Node;
1504 1.1 jruoho AcpiOsPrintf ("New scope: %s\n", AcpiGbl_DbScopeBuf);
1505 1.1 jruoho return;
1506 1.1 jruoho
1507 1.1 jruoho ErrorExit:
1508 1.1 jruoho
1509 1.1 jruoho AcpiOsPrintf ("Could not attach scope: %s, %s\n",
1510 1.1 jruoho Name, AcpiFormatException (Status));
1511 1.1 jruoho }
1512 1.1 jruoho
1513 1.1 jruoho
1514 1.1 jruoho /*******************************************************************************
1515 1.1 jruoho *
1516 1.1 jruoho * FUNCTION: AcpiDmCompareAmlResources
1517 1.1 jruoho *
1518 1.1 jruoho * PARAMETERS: Aml1Buffer - Contains first resource list
1519 1.1 jruoho * Aml1BufferLength - Length of first resource list
1520 1.1 jruoho * Aml2Buffer - Contains second resource list
1521 1.1 jruoho * Aml2BufferLength - Length of second resource list
1522 1.1 jruoho *
1523 1.1 jruoho * RETURN: None
1524 1.1 jruoho *
1525 1.1 jruoho * DESCRIPTION: Compare two AML resource lists, descriptor by descriptor (in
1526 1.1 jruoho * order to isolate a miscompare to an individual resource)
1527 1.1 jruoho *
1528 1.1 jruoho ******************************************************************************/
1529 1.1 jruoho
1530 1.1 jruoho static void
1531 1.1 jruoho AcpiDmCompareAmlResources (
1532 1.1 jruoho UINT8 *Aml1Buffer,
1533 1.1 jruoho ACPI_RSDESC_SIZE Aml1BufferLength,
1534 1.1 jruoho UINT8 *Aml2Buffer,
1535 1.1 jruoho ACPI_RSDESC_SIZE Aml2BufferLength)
1536 1.1 jruoho {
1537 1.1 jruoho UINT8 *Aml1;
1538 1.1 jruoho UINT8 *Aml2;
1539 1.1 jruoho ACPI_RSDESC_SIZE Aml1Length;
1540 1.1 jruoho ACPI_RSDESC_SIZE Aml2Length;
1541 1.1 jruoho ACPI_RSDESC_SIZE Offset = 0;
1542 1.1 jruoho UINT8 ResourceType;
1543 1.1 jruoho UINT32 Count = 0;
1544 1.1 jruoho
1545 1.1 jruoho
1546 1.1 jruoho /* Compare overall buffer sizes (may be different due to size rounding) */
1547 1.1 jruoho
1548 1.1 jruoho if (Aml1BufferLength != Aml2BufferLength)
1549 1.1 jruoho {
1550 1.1 jruoho AcpiOsPrintf (
1551 1.1 jruoho "**** Buffer length mismatch in converted AML: original %X new %X ****\n",
1552 1.1 jruoho Aml1BufferLength, Aml2BufferLength);
1553 1.1 jruoho }
1554 1.1 jruoho
1555 1.1 jruoho Aml1 = Aml1Buffer;
1556 1.1 jruoho Aml2 = Aml2Buffer;
1557 1.1 jruoho
1558 1.1 jruoho /* Walk the descriptor lists, comparing each descriptor */
1559 1.1 jruoho
1560 1.1 jruoho while (Aml1 < (Aml1Buffer + Aml1BufferLength))
1561 1.1 jruoho {
1562 1.1 jruoho /* Get the lengths of each descriptor */
1563 1.1 jruoho
1564 1.1 jruoho Aml1Length = AcpiUtGetDescriptorLength (Aml1);
1565 1.1 jruoho Aml2Length = AcpiUtGetDescriptorLength (Aml2);
1566 1.1 jruoho ResourceType = AcpiUtGetResourceType (Aml1);
1567 1.1 jruoho
1568 1.1 jruoho /* Check for descriptor length match */
1569 1.1 jruoho
1570 1.1 jruoho if (Aml1Length != Aml2Length)
1571 1.1 jruoho {
1572 1.1 jruoho AcpiOsPrintf (
1573 1.1 jruoho "**** Length mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X L1 %X L2 %X ****\n",
1574 1.1 jruoho Count, ResourceType, Offset, Aml1Length, Aml2Length);
1575 1.1 jruoho }
1576 1.1 jruoho
1577 1.1 jruoho /* Check for descriptor byte match */
1578 1.1 jruoho
1579 1.1 jruoho else if (ACPI_MEMCMP (Aml1, Aml2, Aml1Length))
1580 1.1 jruoho {
1581 1.1 jruoho AcpiOsPrintf (
1582 1.1 jruoho "**** Data mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X ****\n",
1583 1.1 jruoho Count, ResourceType, Offset);
1584 1.1 jruoho }
1585 1.1 jruoho
1586 1.1 jruoho /* Exit on EndTag descriptor */
1587 1.1 jruoho
1588 1.1 jruoho if (ResourceType == ACPI_RESOURCE_NAME_END_TAG)
1589 1.1 jruoho {
1590 1.1 jruoho return;
1591 1.1 jruoho }
1592 1.1 jruoho
1593 1.1 jruoho /* Point to next descriptor in each buffer */
1594 1.1 jruoho
1595 1.1 jruoho Count++;
1596 1.1 jruoho Offset += Aml1Length;
1597 1.1 jruoho Aml1 += Aml1Length;
1598 1.1 jruoho Aml2 += Aml2Length;
1599 1.1 jruoho }
1600 1.1 jruoho }
1601 1.1 jruoho
1602 1.1 jruoho
1603 1.1 jruoho /*******************************************************************************
1604 1.1 jruoho *
1605 1.1 jruoho * FUNCTION: AcpiDmTestResourceConversion
1606 1.1 jruoho *
1607 1.1 jruoho * PARAMETERS: Node - Parent device node
1608 1.1 jruoho * Name - resource method name (_CRS)
1609 1.1 jruoho *
1610 1.1 jruoho * RETURN: Status
1611 1.1 jruoho *
1612 1.1 jruoho * DESCRIPTION: Compare the original AML with a conversion of the AML to
1613 1.1 jruoho * internal resource list, then back to AML.
1614 1.1 jruoho *
1615 1.1 jruoho ******************************************************************************/
1616 1.1 jruoho
1617 1.1 jruoho static ACPI_STATUS
1618 1.1 jruoho AcpiDmTestResourceConversion (
1619 1.1 jruoho ACPI_NAMESPACE_NODE *Node,
1620 1.1 jruoho char *Name)
1621 1.1 jruoho {
1622 1.1 jruoho ACPI_STATUS Status;
1623 1.1 jruoho ACPI_BUFFER ReturnObj;
1624 1.1 jruoho ACPI_BUFFER ResourceObj;
1625 1.1 jruoho ACPI_BUFFER NewAml;
1626 1.1 jruoho ACPI_OBJECT *OriginalAml;
1627 1.1 jruoho
1628 1.1 jruoho
1629 1.1 jruoho AcpiOsPrintf ("Resource Conversion Comparison:\n");
1630 1.1 jruoho
1631 1.1 jruoho NewAml.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1632 1.1 jruoho ReturnObj.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1633 1.1 jruoho ResourceObj.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1634 1.1 jruoho
1635 1.1 jruoho /* Get the original _CRS AML resource template */
1636 1.1 jruoho
1637 1.1 jruoho Status = AcpiEvaluateObject (Node, Name, NULL, &ReturnObj);
1638 1.1 jruoho if (ACPI_FAILURE (Status))
1639 1.1 jruoho {
1640 1.1 jruoho AcpiOsPrintf ("Could not obtain %s: %s\n",
1641 1.1 jruoho Name, AcpiFormatException (Status));
1642 1.1 jruoho return (Status);
1643 1.1 jruoho }
1644 1.1 jruoho
1645 1.1 jruoho /* Get the AML resource template, converted to internal resource structs */
1646 1.1 jruoho
1647 1.1 jruoho Status = AcpiGetCurrentResources (Node, &ResourceObj);
1648 1.1 jruoho if (ACPI_FAILURE (Status))
1649 1.1 jruoho {
1650 1.1 jruoho AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
1651 1.1 jruoho AcpiFormatException (Status));
1652 1.1 jruoho goto Exit1;
1653 1.1 jruoho }
1654 1.1 jruoho
1655 1.1 jruoho /* Convert internal resource list to external AML resource template */
1656 1.1 jruoho
1657 1.1 jruoho Status = AcpiRsCreateAmlResources (ResourceObj.Pointer, &NewAml);
1658 1.1 jruoho if (ACPI_FAILURE (Status))
1659 1.1 jruoho {
1660 1.1 jruoho AcpiOsPrintf ("AcpiRsCreateAmlResources failed: %s\n",
1661 1.1 jruoho AcpiFormatException (Status));
1662 1.1 jruoho goto Exit2;
1663 1.1 jruoho }
1664 1.1 jruoho
1665 1.1 jruoho /* Compare original AML to the newly created AML resource list */
1666 1.1 jruoho
1667 1.1 jruoho OriginalAml = ReturnObj.Pointer;
1668 1.1 jruoho
1669 1.1 jruoho AcpiDmCompareAmlResources (
1670 1.1 jruoho OriginalAml->Buffer.Pointer, (ACPI_RSDESC_SIZE) OriginalAml->Buffer.Length,
1671 1.1 jruoho NewAml.Pointer, (ACPI_RSDESC_SIZE) NewAml.Length);
1672 1.1 jruoho
1673 1.1 jruoho /* Cleanup and exit */
1674 1.1 jruoho
1675 1.1 jruoho ACPI_FREE (NewAml.Pointer);
1676 1.1 jruoho Exit2:
1677 1.1 jruoho ACPI_FREE (ResourceObj.Pointer);
1678 1.1 jruoho Exit1:
1679 1.1 jruoho ACPI_FREE (ReturnObj.Pointer);
1680 1.1 jruoho return (Status);
1681 1.1 jruoho }
1682 1.1 jruoho
1683 1.1 jruoho
1684 1.1 jruoho /*******************************************************************************
1685 1.1 jruoho *
1686 1.1 jruoho * FUNCTION: AcpiDbDisplayResources
1687 1.1 jruoho *
1688 1.1 jruoho * PARAMETERS: ObjectArg - String with hex value of the object
1689 1.1 jruoho *
1690 1.1 jruoho * RETURN: None
1691 1.1 jruoho *
1692 1.1 jruoho * DESCRIPTION: Display the resource objects associated with a device.
1693 1.1 jruoho *
1694 1.1 jruoho ******************************************************************************/
1695 1.1 jruoho
1696 1.1 jruoho void
1697 1.1 jruoho AcpiDbDisplayResources (
1698 1.1 jruoho char *ObjectArg)
1699 1.1 jruoho {
1700 1.1 jruoho ACPI_NAMESPACE_NODE *Node;
1701 1.1 jruoho ACPI_STATUS Status;
1702 1.1 jruoho ACPI_BUFFER ReturnObj;
1703 1.1 jruoho
1704 1.1 jruoho
1705 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
1706 1.1 jruoho AcpiDbgLevel |= ACPI_LV_RESOURCES;
1707 1.1 jruoho
1708 1.1 jruoho /* Convert string to object pointer */
1709 1.1 jruoho
1710 1.1 jruoho Node = AcpiDbConvertToNode (ObjectArg);
1711 1.1 jruoho if (!Node)
1712 1.1 jruoho {
1713 1.1 jruoho return;
1714 1.1 jruoho }
1715 1.1 jruoho
1716 1.1 jruoho /* Prepare for a return object of arbitrary size */
1717 1.1 jruoho
1718 1.1 jruoho ReturnObj.Pointer = AcpiGbl_DbBuffer;
1719 1.1 jruoho ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE;
1720 1.1 jruoho
1721 1.1 jruoho /* _PRT */
1722 1.1 jruoho
1723 1.1 jruoho AcpiOsPrintf ("Evaluating _PRT\n");
1724 1.1 jruoho
1725 1.1 jruoho /* Check if _PRT exists */
1726 1.1 jruoho
1727 1.1 jruoho Status = AcpiEvaluateObject (Node, METHOD_NAME__PRT, NULL, &ReturnObj);
1728 1.1 jruoho if (ACPI_FAILURE (Status))
1729 1.1 jruoho {
1730 1.1 jruoho AcpiOsPrintf ("Could not obtain _PRT: %s\n",
1731 1.1 jruoho AcpiFormatException (Status));
1732 1.1 jruoho goto GetCrs;
1733 1.1 jruoho }
1734 1.1 jruoho
1735 1.1 jruoho ReturnObj.Pointer = AcpiGbl_DbBuffer;
1736 1.1 jruoho ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE;
1737 1.1 jruoho
1738 1.1 jruoho Status = AcpiGetIrqRoutingTable (Node, &ReturnObj);
1739 1.1 jruoho if (ACPI_FAILURE (Status))
1740 1.1 jruoho {
1741 1.1 jruoho AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n",
1742 1.1 jruoho AcpiFormatException (Status));
1743 1.1 jruoho goto GetCrs;
1744 1.1 jruoho }
1745 1.1 jruoho
1746 1.1 jruoho AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer));
1747 1.1 jruoho
1748 1.1 jruoho
1749 1.1 jruoho /* _CRS */
1750 1.1 jruoho
1751 1.1 jruoho GetCrs:
1752 1.1 jruoho AcpiOsPrintf ("Evaluating _CRS\n");
1753 1.1 jruoho
1754 1.1 jruoho ReturnObj.Pointer = AcpiGbl_DbBuffer;
1755 1.1 jruoho ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE;
1756 1.1 jruoho
1757 1.1 jruoho /* Check if _CRS exists */
1758 1.1 jruoho
1759 1.1 jruoho Status = AcpiEvaluateObject (Node, METHOD_NAME__CRS, NULL, &ReturnObj);
1760 1.1 jruoho if (ACPI_FAILURE (Status))
1761 1.1 jruoho {
1762 1.1 jruoho AcpiOsPrintf ("Could not obtain _CRS: %s\n",
1763 1.1 jruoho AcpiFormatException (Status));
1764 1.1 jruoho goto GetPrs;
1765 1.1 jruoho }
1766 1.1 jruoho
1767 1.1 jruoho /* Get the _CRS resource list */
1768 1.1 jruoho
1769 1.1 jruoho ReturnObj.Pointer = AcpiGbl_DbBuffer;
1770 1.1 jruoho ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE;
1771 1.1 jruoho
1772 1.1 jruoho Status = AcpiGetCurrentResources (Node, &ReturnObj);
1773 1.1 jruoho if (ACPI_FAILURE (Status))
1774 1.1 jruoho {
1775 1.1 jruoho AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
1776 1.1 jruoho AcpiFormatException (Status));
1777 1.1 jruoho goto GetPrs;
1778 1.1 jruoho }
1779 1.1 jruoho
1780 1.1 jruoho /* Dump the _CRS resource list */
1781 1.1 jruoho
1782 1.1 jruoho AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
1783 1.1 jruoho ReturnObj.Pointer));
1784 1.1 jruoho
1785 1.1 jruoho /*
1786 1.1 jruoho * Perform comparison of original AML to newly created AML. This tests both
1787 1.1 jruoho * the AML->Resource conversion and the Resource->Aml conversion.
1788 1.1 jruoho */
1789 1.1 jruoho Status = AcpiDmTestResourceConversion (Node, METHOD_NAME__CRS);
1790 1.1 jruoho
1791 1.1 jruoho /* Execute _SRS with the resource list */
1792 1.1 jruoho
1793 1.1 jruoho Status = AcpiSetCurrentResources (Node, &ReturnObj);
1794 1.1 jruoho if (ACPI_FAILURE (Status))
1795 1.1 jruoho {
1796 1.1 jruoho AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n",
1797 1.1 jruoho AcpiFormatException (Status));
1798 1.1 jruoho goto GetPrs;
1799 1.1 jruoho }
1800 1.1 jruoho
1801 1.1 jruoho
1802 1.1 jruoho /* _PRS */
1803 1.1 jruoho
1804 1.1 jruoho GetPrs:
1805 1.1 jruoho AcpiOsPrintf ("Evaluating _PRS\n");
1806 1.1 jruoho
1807 1.1 jruoho ReturnObj.Pointer = AcpiGbl_DbBuffer;
1808 1.1 jruoho ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE;
1809 1.1 jruoho
1810 1.1 jruoho /* Check if _PRS exists */
1811 1.1 jruoho
1812 1.1 jruoho Status = AcpiEvaluateObject (Node, METHOD_NAME__PRS, NULL, &ReturnObj);
1813 1.1 jruoho if (ACPI_FAILURE (Status))
1814 1.1 jruoho {
1815 1.1 jruoho AcpiOsPrintf ("Could not obtain _PRS: %s\n",
1816 1.1 jruoho AcpiFormatException (Status));
1817 1.1 jruoho goto Cleanup;
1818 1.1 jruoho }
1819 1.1 jruoho
1820 1.1 jruoho ReturnObj.Pointer = AcpiGbl_DbBuffer;
1821 1.1 jruoho ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE;
1822 1.1 jruoho
1823 1.1 jruoho Status = AcpiGetPossibleResources (Node, &ReturnObj);
1824 1.1 jruoho if (ACPI_FAILURE (Status))
1825 1.1 jruoho {
1826 1.1 jruoho AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n",
1827 1.1 jruoho AcpiFormatException (Status));
1828 1.1 jruoho goto Cleanup;
1829 1.1 jruoho }
1830 1.1 jruoho
1831 1.1 jruoho AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, AcpiGbl_DbBuffer));
1832 1.1 jruoho
1833 1.1 jruoho Cleanup:
1834 1.1 jruoho
1835 1.1 jruoho AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
1836 1.1 jruoho return;
1837 1.1 jruoho }
1838 1.1 jruoho
1839 1.1 jruoho
1840 1.1 jruoho /*******************************************************************************
1841 1.1 jruoho *
1842 1.1 jruoho * FUNCTION: AcpiDbIntegrityWalk
1843 1.1 jruoho *
1844 1.1 jruoho * PARAMETERS: Callback from WalkNamespace
1845 1.1 jruoho *
1846 1.1 jruoho * RETURN: Status
1847 1.1 jruoho *
1848 1.1 jruoho * DESCRIPTION: Examine one NS node for valid values.
1849 1.1 jruoho *
1850 1.1 jruoho ******************************************************************************/
1851 1.1 jruoho
1852 1.1 jruoho static ACPI_STATUS
1853 1.1 jruoho AcpiDbIntegrityWalk (
1854 1.1 jruoho ACPI_HANDLE ObjHandle,
1855 1.1 jruoho UINT32 NestingLevel,
1856 1.1 jruoho void *Context,
1857 1.1 jruoho void **ReturnValue)
1858 1.1 jruoho {
1859 1.1 jruoho ACPI_INTEGRITY_INFO *Info = (ACPI_INTEGRITY_INFO *) Context;
1860 1.1 jruoho ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
1861 1.1 jruoho ACPI_OPERAND_OBJECT *Object;
1862 1.1 jruoho BOOLEAN Alias = TRUE;
1863 1.1 jruoho
1864 1.1 jruoho
1865 1.1 jruoho Info->Nodes++;
1866 1.1 jruoho
1867 1.1 jruoho /* Verify the NS node, and dereference aliases */
1868 1.1 jruoho
1869 1.1 jruoho while (Alias)
1870 1.1 jruoho {
1871 1.1 jruoho if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
1872 1.1 jruoho {
1873 1.1 jruoho AcpiOsPrintf ("Invalid Descriptor Type for Node %p [%s] - is %2.2X should be %2.2X\n",
1874 1.1 jruoho Node, AcpiUtGetDescriptorName (Node), ACPI_GET_DESCRIPTOR_TYPE (Node),
1875 1.1 jruoho ACPI_DESC_TYPE_NAMED);
1876 1.1 jruoho return (AE_OK);
1877 1.1 jruoho }
1878 1.1 jruoho
1879 1.1 jruoho if ((Node->Type == ACPI_TYPE_LOCAL_ALIAS) ||
1880 1.1 jruoho (Node->Type == ACPI_TYPE_LOCAL_METHOD_ALIAS))
1881 1.1 jruoho {
1882 1.1 jruoho Node = (ACPI_NAMESPACE_NODE *) Node->Object;
1883 1.1 jruoho }
1884 1.1 jruoho else
1885 1.1 jruoho {
1886 1.1 jruoho Alias = FALSE;
1887 1.1 jruoho }
1888 1.1 jruoho }
1889 1.1 jruoho
1890 1.1 jruoho if (Node->Type > ACPI_TYPE_LOCAL_MAX)
1891 1.1 jruoho {
1892 1.1 jruoho AcpiOsPrintf ("Invalid Object Type for Node %p, Type = %X\n",
1893 1.1 jruoho Node, Node->Type);
1894 1.1 jruoho return (AE_OK);
1895 1.1 jruoho }
1896 1.1 jruoho
1897 1.1 jruoho if (!AcpiUtValidAcpiName (Node->Name.Integer))
1898 1.1 jruoho {
1899 1.1 jruoho AcpiOsPrintf ("Invalid AcpiName for Node %p\n", Node);
1900 1.1 jruoho return (AE_OK);
1901 1.1 jruoho }
1902 1.1 jruoho
1903 1.1 jruoho Object = AcpiNsGetAttachedObject (Node);
1904 1.1 jruoho if (Object)
1905 1.1 jruoho {
1906 1.1 jruoho Info->Objects++;
1907 1.1 jruoho if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND)
1908 1.1 jruoho {
1909 1.1 jruoho AcpiOsPrintf ("Invalid Descriptor Type for Object %p [%s]\n",
1910 1.1 jruoho Object, AcpiUtGetDescriptorName (Object));
1911 1.1 jruoho }
1912 1.1 jruoho }
1913 1.1 jruoho
1914 1.1 jruoho return (AE_OK);
1915 1.1 jruoho }
1916 1.1 jruoho
1917 1.1 jruoho
1918 1.1 jruoho /*******************************************************************************
1919 1.1 jruoho *
1920 1.1 jruoho * FUNCTION: AcpiDbCheckIntegrity
1921 1.1 jruoho *
1922 1.1 jruoho * PARAMETERS: None
1923 1.1 jruoho *
1924 1.1 jruoho * RETURN: None
1925 1.1 jruoho *
1926 1.1 jruoho * DESCRIPTION: Check entire namespace for data structure integrity
1927 1.1 jruoho *
1928 1.1 jruoho ******************************************************************************/
1929 1.1 jruoho
1930 1.1 jruoho void
1931 1.1 jruoho AcpiDbCheckIntegrity (
1932 1.1 jruoho void)
1933 1.1 jruoho {
1934 1.1 jruoho ACPI_INTEGRITY_INFO Info = {0,0};
1935 1.1 jruoho
1936 1.1 jruoho /* Search all nodes in namespace */
1937 1.1 jruoho
1938 1.1 jruoho (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
1939 1.1 jruoho AcpiDbIntegrityWalk, NULL, (void *) &Info, NULL);
1940 1.1 jruoho
1941 1.1 jruoho AcpiOsPrintf ("Verified %u namespace nodes with %u Objects\n",
1942 1.1 jruoho Info.Nodes, Info.Objects);
1943 1.1 jruoho }
1944 1.1 jruoho
1945 1.1 jruoho
1946 1.1 jruoho /*******************************************************************************
1947 1.1 jruoho *
1948 1.1 jruoho * FUNCTION: AcpiDbGenerateGpe
1949 1.1 jruoho *
1950 1.1 jruoho * PARAMETERS: GpeArg - Raw GPE number, ascii string
1951 1.1 jruoho * BlockArg - GPE block number, ascii string
1952 1.1 jruoho * 0 or 1 for FADT GPE blocks
1953 1.1 jruoho *
1954 1.1 jruoho * RETURN: None
1955 1.1 jruoho *
1956 1.1 jruoho * DESCRIPTION: Generate a GPE
1957 1.1 jruoho *
1958 1.1 jruoho ******************************************************************************/
1959 1.1 jruoho
1960 1.1 jruoho void
1961 1.1 jruoho AcpiDbGenerateGpe (
1962 1.1 jruoho char *GpeArg,
1963 1.1 jruoho char *BlockArg)
1964 1.1 jruoho {
1965 1.1 jruoho UINT32 BlockNumber;
1966 1.1 jruoho UINT32 GpeNumber;
1967 1.1 jruoho ACPI_GPE_EVENT_INFO *GpeEventInfo;
1968 1.1 jruoho
1969 1.1 jruoho
1970 1.1 jruoho GpeNumber = ACPI_STRTOUL (GpeArg, NULL, 0);
1971 1.1 jruoho BlockNumber = ACPI_STRTOUL (BlockArg, NULL, 0);
1972 1.1 jruoho
1973 1.1 jruoho
1974 1.1 jruoho GpeEventInfo = AcpiEvGetGpeEventInfo (ACPI_TO_POINTER (BlockNumber),
1975 1.1 jruoho GpeNumber);
1976 1.1 jruoho if (!GpeEventInfo)
1977 1.1 jruoho {
1978 1.1 jruoho AcpiOsPrintf ("Invalid GPE\n");
1979 1.1 jruoho return;
1980 1.1 jruoho }
1981 1.1 jruoho
1982 1.1 jruoho (void) AcpiEvGpeDispatch (GpeEventInfo, GpeNumber);
1983 1.1 jruoho }
1984 1.1 jruoho
1985 1.1 jruoho
1986 1.1 jruoho /*******************************************************************************
1987 1.1 jruoho *
1988 1.1 jruoho * FUNCTION: AcpiDbBusWalk
1989 1.1 jruoho *
1990 1.1 jruoho * PARAMETERS: Callback from WalkNamespace
1991 1.1 jruoho *
1992 1.1 jruoho * RETURN: Status
1993 1.1 jruoho *
1994 1.1 jruoho * DESCRIPTION: Display info about device objects that have a corresponding
1995 1.1 jruoho * _PRT method.
1996 1.1 jruoho *
1997 1.1 jruoho ******************************************************************************/
1998 1.1 jruoho
1999 1.1 jruoho static ACPI_STATUS
2000 1.1 jruoho AcpiDbBusWalk (
2001 1.1 jruoho ACPI_HANDLE ObjHandle,
2002 1.1 jruoho UINT32 NestingLevel,
2003 1.1 jruoho void *Context,
2004 1.1 jruoho void **ReturnValue)
2005 1.1 jruoho {
2006 1.1 jruoho ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
2007 1.1 jruoho ACPI_STATUS Status;
2008 1.1 jruoho ACPI_BUFFER Buffer;
2009 1.1 jruoho ACPI_NAMESPACE_NODE *TempNode;
2010 1.1 jruoho ACPI_DEVICE_INFO *Info;
2011 1.1 jruoho UINT32 i;
2012 1.1 jruoho
2013 1.1 jruoho
2014 1.1 jruoho if ((Node->Type != ACPI_TYPE_DEVICE) &&
2015 1.1 jruoho (Node->Type != ACPI_TYPE_PROCESSOR))
2016 1.1 jruoho {
2017 1.1 jruoho return (AE_OK);
2018 1.1 jruoho }
2019 1.1 jruoho
2020 1.1 jruoho /* Exit if there is no _PRT under this device */
2021 1.1 jruoho
2022 1.1 jruoho Status = AcpiGetHandle (Node, METHOD_NAME__PRT,
2023 1.1 jruoho ACPI_CAST_PTR (ACPI_HANDLE, &TempNode));
2024 1.1 jruoho if (ACPI_FAILURE (Status))
2025 1.1 jruoho {
2026 1.1 jruoho return (AE_OK);
2027 1.1 jruoho }
2028 1.1 jruoho
2029 1.1 jruoho /* Get the full path to this device object */
2030 1.1 jruoho
2031 1.1 jruoho Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
2032 1.1 jruoho Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
2033 1.1 jruoho if (ACPI_FAILURE (Status))
2034 1.1 jruoho {
2035 1.1 jruoho AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
2036 1.1 jruoho return (AE_OK);
2037 1.1 jruoho }
2038 1.1 jruoho
2039 1.1 jruoho Status = AcpiGetObjectInfo (ObjHandle, &Info);
2040 1.1 jruoho if (ACPI_FAILURE (Status))
2041 1.1 jruoho {
2042 1.1 jruoho return (AE_OK);
2043 1.1 jruoho }
2044 1.1 jruoho
2045 1.1 jruoho /* Display the full path */
2046 1.1 jruoho
2047 1.1 jruoho AcpiOsPrintf ("%-32s Type %X", (char *) Buffer.Pointer, Node->Type);
2048 1.1 jruoho ACPI_FREE (Buffer.Pointer);
2049 1.1 jruoho
2050 1.1 jruoho if (Info->Flags & ACPI_PCI_ROOT_BRIDGE)
2051 1.1 jruoho {
2052 1.1 jruoho AcpiOsPrintf (" - Is PCI Root Bridge");
2053 1.1 jruoho }
2054 1.1 jruoho AcpiOsPrintf ("\n");
2055 1.1 jruoho
2056 1.1 jruoho /* _PRT info */
2057 1.1 jruoho
2058 1.1 jruoho AcpiOsPrintf ("_PRT: %p\n", TempNode);
2059 1.1 jruoho
2060 1.1 jruoho /* Dump _ADR, _HID, _UID, _CID */
2061 1.1 jruoho
2062 1.1 jruoho if (Info->Valid & ACPI_VALID_ADR)
2063 1.1 jruoho {
2064 1.1 jruoho AcpiOsPrintf ("_ADR: %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Info->Address));
2065 1.1 jruoho }
2066 1.1 jruoho else
2067 1.1 jruoho {
2068 1.1 jruoho AcpiOsPrintf ("_ADR: <Not Present>\n");
2069 1.1 jruoho }
2070 1.1 jruoho
2071 1.1 jruoho if (Info->Valid & ACPI_VALID_HID)
2072 1.1 jruoho {
2073 1.1 jruoho AcpiOsPrintf ("_HID: %s\n", Info->HardwareId.String);
2074 1.1 jruoho }
2075 1.1 jruoho else
2076 1.1 jruoho {
2077 1.1 jruoho AcpiOsPrintf ("_HID: <Not Present>\n");
2078 1.1 jruoho }
2079 1.1 jruoho
2080 1.1 jruoho if (Info->Valid & ACPI_VALID_UID)
2081 1.1 jruoho {
2082 1.1 jruoho AcpiOsPrintf ("_UID: %s\n", Info->UniqueId.String);
2083 1.1 jruoho }
2084 1.1 jruoho else
2085 1.1 jruoho {
2086 1.1 jruoho AcpiOsPrintf ("_UID: <Not Present>\n");
2087 1.1 jruoho }
2088 1.1 jruoho
2089 1.1 jruoho if (Info->Valid & ACPI_VALID_CID)
2090 1.1 jruoho {
2091 1.1 jruoho for (i = 0; i < Info->CompatibleIdList.Count; i++)
2092 1.1 jruoho {
2093 1.1 jruoho AcpiOsPrintf ("_CID: %s\n",
2094 1.1 jruoho Info->CompatibleIdList.Ids[i].String);
2095 1.1 jruoho }
2096 1.1 jruoho }
2097 1.1 jruoho else
2098 1.1 jruoho {
2099 1.1 jruoho AcpiOsPrintf ("_CID: <Not Present>\n");
2100 1.1 jruoho }
2101 1.1 jruoho
2102 1.1 jruoho ACPI_FREE (Info);
2103 1.1 jruoho return (AE_OK);
2104 1.1 jruoho }
2105 1.1 jruoho
2106 1.1 jruoho
2107 1.1 jruoho /*******************************************************************************
2108 1.1 jruoho *
2109 1.1 jruoho * FUNCTION: AcpiDbGetBusInfo
2110 1.1 jruoho *
2111 1.1 jruoho * PARAMETERS: None
2112 1.1 jruoho *
2113 1.1 jruoho * RETURN: None
2114 1.1 jruoho *
2115 1.1 jruoho * DESCRIPTION: Display info about system busses.
2116 1.1 jruoho *
2117 1.1 jruoho ******************************************************************************/
2118 1.1 jruoho
2119 1.1 jruoho void
2120 1.1 jruoho AcpiDbGetBusInfo (
2121 1.1 jruoho void)
2122 1.1 jruoho {
2123 1.1 jruoho /* Search all nodes in namespace */
2124 1.1 jruoho
2125 1.1 jruoho (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
2126 1.1 jruoho AcpiDbBusWalk, NULL, NULL, NULL);
2127 1.1 jruoho }
2128 1.1 jruoho
2129 1.1 jruoho #endif /* ACPI_DEBUGGER */
2130