1267c04fdSSascha Wildner /*******************************************************************************
2267c04fdSSascha Wildner *
3267c04fdSSascha Wildner * Module Name: dbobject - ACPI object decode and display
4267c04fdSSascha Wildner *
5267c04fdSSascha Wildner ******************************************************************************/
6267c04fdSSascha Wildner
7b4315fc7SSascha Wildner /******************************************************************************
8b4315fc7SSascha Wildner *
9b4315fc7SSascha Wildner * 1. Copyright Notice
10b4315fc7SSascha Wildner *
11*383048acSSascha Wildner * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
12267c04fdSSascha Wildner * All rights reserved.
13267c04fdSSascha Wildner *
14b4315fc7SSascha Wildner * 2. License
15b4315fc7SSascha Wildner *
16b4315fc7SSascha Wildner * 2.1. This is your license from Intel Corp. under its intellectual property
17b4315fc7SSascha Wildner * rights. You may have additional license terms from the party that provided
18b4315fc7SSascha Wildner * you this software, covering your right to use that party's intellectual
19b4315fc7SSascha Wildner * property rights.
20b4315fc7SSascha Wildner *
21b4315fc7SSascha Wildner * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22b4315fc7SSascha Wildner * copy of the source code appearing in this file ("Covered Code") an
23b4315fc7SSascha Wildner * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24b4315fc7SSascha Wildner * base code distributed originally by Intel ("Original Intel Code") to copy,
25b4315fc7SSascha Wildner * make derivatives, distribute, use and display any portion of the Covered
26b4315fc7SSascha Wildner * Code in any form, with the right to sublicense such rights; and
27b4315fc7SSascha Wildner *
28b4315fc7SSascha Wildner * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29b4315fc7SSascha Wildner * license (with the right to sublicense), under only those claims of Intel
30b4315fc7SSascha Wildner * patents that are infringed by the Original Intel Code, to make, use, sell,
31b4315fc7SSascha Wildner * offer to sell, and import the Covered Code and derivative works thereof
32b4315fc7SSascha Wildner * solely to the minimum extent necessary to exercise the above copyright
33b4315fc7SSascha Wildner * license, and in no event shall the patent license extend to any additions
34b4315fc7SSascha Wildner * to or modifications of the Original Intel Code. No other license or right
35b4315fc7SSascha Wildner * is granted directly or by implication, estoppel or otherwise;
36b4315fc7SSascha Wildner *
37b4315fc7SSascha Wildner * The above copyright and patent license is granted only if the following
38b4315fc7SSascha Wildner * conditions are met:
39b4315fc7SSascha Wildner *
40b4315fc7SSascha Wildner * 3. Conditions
41b4315fc7SSascha Wildner *
42b4315fc7SSascha Wildner * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered
44b4315fc7SSascha Wildner * Code or modification with rights to further distribute source must include
45b4315fc7SSascha Wildner * the above Copyright Notice, the above License, this list of Conditions,
46b4315fc7SSascha Wildner * and the following Disclaimer and Export Compliance provision. In addition,
47b4315fc7SSascha Wildner * Licensee must cause all Covered Code to which Licensee contributes to
48b4315fc7SSascha Wildner * contain a file documenting the changes Licensee made to create that Covered
49b4315fc7SSascha Wildner * Code and the date of any change. Licensee must include in that file the
50b4315fc7SSascha Wildner * documentation of any changes made by any predecessor Licensee. Licensee
51b4315fc7SSascha Wildner * must include a prominent statement that the modification is derived,
52b4315fc7SSascha Wildner * directly or indirectly, from Original Intel Code.
53b4315fc7SSascha Wildner *
54b4315fc7SSascha Wildner * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered
56b4315fc7SSascha Wildner * Code or modification without rights to further distribute source must
57b4315fc7SSascha Wildner * include the following Disclaimer and Export Compliance provision in the
58b4315fc7SSascha Wildner * documentation and/or other materials provided with distribution. In
59b4315fc7SSascha Wildner * addition, Licensee may not authorize further sublicense of source of any
60b4315fc7SSascha Wildner * portion of the Covered Code, and must include terms to the effect that the
61b4315fc7SSascha Wildner * license from Licensee to its licensee is limited to the intellectual
62b4315fc7SSascha Wildner * property embodied in the software Licensee provides to its licensee, and
63b4315fc7SSascha Wildner * not to intellectual property embodied in modifications its licensee may
64b4315fc7SSascha Wildner * make.
65b4315fc7SSascha Wildner *
66b4315fc7SSascha Wildner * 3.3. Redistribution of Executable. Redistribution in executable form of any
67b4315fc7SSascha Wildner * substantial portion of the Covered Code or modification must reproduce the
68b4315fc7SSascha Wildner * above Copyright Notice, and the following Disclaimer and Export Compliance
69b4315fc7SSascha Wildner * provision in the documentation and/or other materials provided with the
70b4315fc7SSascha Wildner * distribution.
71b4315fc7SSascha Wildner *
72b4315fc7SSascha Wildner * 3.4. Intel retains all right, title, and interest in and to the Original
73b4315fc7SSascha Wildner * Intel Code.
74b4315fc7SSascha Wildner *
75b4315fc7SSascha Wildner * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76b4315fc7SSascha Wildner * Intel shall be used in advertising or otherwise to promote the sale, use or
77b4315fc7SSascha Wildner * other dealings in products derived from or relating to the Covered Code
78b4315fc7SSascha Wildner * without prior written authorization from Intel.
79b4315fc7SSascha Wildner *
80b4315fc7SSascha Wildner * 4. Disclaimer and Export Compliance
81b4315fc7SSascha Wildner *
82b4315fc7SSascha Wildner * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83b4315fc7SSascha Wildner * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84b4315fc7SSascha Wildner * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85b4315fc7SSascha Wildner * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86b4315fc7SSascha Wildner * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87b4315fc7SSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88b4315fc7SSascha Wildner * PARTICULAR PURPOSE.
89b4315fc7SSascha Wildner *
90b4315fc7SSascha Wildner * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91b4315fc7SSascha Wildner * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92b4315fc7SSascha Wildner * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93b4315fc7SSascha Wildner * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94b4315fc7SSascha Wildner * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95b4315fc7SSascha Wildner * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96b4315fc7SSascha Wildner * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97b4315fc7SSascha Wildner * LIMITED REMEDY.
98b4315fc7SSascha Wildner *
99b4315fc7SSascha Wildner * 4.3. Licensee shall not export, either directly or indirectly, any of this
100b4315fc7SSascha Wildner * software or system incorporating such software without first obtaining any
101b4315fc7SSascha Wildner * required license or other approval from the U. S. Department of Commerce or
102b4315fc7SSascha Wildner * any other agency or department of the United States Government. In the
103b4315fc7SSascha Wildner * event Licensee exports any such software from the United States or
104b4315fc7SSascha Wildner * re-exports any such software from a foreign destination, Licensee shall
105b4315fc7SSascha Wildner * ensure that the distribution and export/re-export of the software is in
106b4315fc7SSascha Wildner * compliance with all laws, regulations, orders, or other restrictions of the
107b4315fc7SSascha Wildner * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108b4315fc7SSascha Wildner * any of its subsidiaries will export/re-export any technical data, process,
109b4315fc7SSascha Wildner * software, or service, directly or indirectly, to any country for which the
110b4315fc7SSascha Wildner * United States government or any agency thereof requires an export license,
111b4315fc7SSascha Wildner * other governmental approval, or letter of assurance, without first obtaining
112b4315fc7SSascha Wildner * such license, approval or letter.
113b4315fc7SSascha Wildner *
114b4315fc7SSascha Wildner *****************************************************************************
115b4315fc7SSascha Wildner *
116b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
117b4315fc7SSascha Wildner * following license:
118b4315fc7SSascha Wildner *
119267c04fdSSascha Wildner * Redistribution and use in source and binary forms, with or without
120267c04fdSSascha Wildner * modification, are permitted provided that the following conditions
121267c04fdSSascha Wildner * are met:
122267c04fdSSascha Wildner * 1. Redistributions of source code must retain the above copyright
123267c04fdSSascha Wildner * notice, this list of conditions, and the following disclaimer,
124267c04fdSSascha Wildner * without modification.
125267c04fdSSascha Wildner * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126267c04fdSSascha Wildner * substantially similar to the "NO WARRANTY" disclaimer below
127267c04fdSSascha Wildner * ("Disclaimer") and any redistribution must be conditioned upon
128267c04fdSSascha Wildner * including a substantially similar Disclaimer requirement for further
129267c04fdSSascha Wildner * binary redistribution.
130267c04fdSSascha Wildner * 3. Neither the names of the above-listed copyright holders nor the names
131267c04fdSSascha Wildner * of any contributors may be used to endorse or promote products derived
132267c04fdSSascha Wildner * from this software without specific prior written permission.
133267c04fdSSascha Wildner *
134b4315fc7SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135b4315fc7SSascha Wildner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136b4315fc7SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137b4315fc7SSascha Wildner * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138b4315fc7SSascha Wildner * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139b4315fc7SSascha Wildner * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140b4315fc7SSascha Wildner * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141b4315fc7SSascha Wildner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142b4315fc7SSascha Wildner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143b4315fc7SSascha Wildner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144b4315fc7SSascha Wildner * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145b4315fc7SSascha Wildner *
146b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
147267c04fdSSascha Wildner * GNU General Public License ("GPL") version 2 as published by the Free
148267c04fdSSascha Wildner * Software Foundation.
149267c04fdSSascha Wildner *
150b4315fc7SSascha Wildner *****************************************************************************/
151267c04fdSSascha Wildner
152267c04fdSSascha Wildner #include "acpi.h"
153267c04fdSSascha Wildner #include "accommon.h"
154267c04fdSSascha Wildner #include "acnamesp.h"
155267c04fdSSascha Wildner #include "acdebug.h"
156267c04fdSSascha Wildner
157267c04fdSSascha Wildner
1587b90aa48SSascha Wildner #ifdef ACPI_DEBUGGER
1597b90aa48SSascha Wildner
160267c04fdSSascha Wildner #define _COMPONENT ACPI_CA_DEBUGGER
161267c04fdSSascha Wildner ACPI_MODULE_NAME ("dbobject")
162267c04fdSSascha Wildner
1633cc0afc6SSascha Wildner
164267c04fdSSascha Wildner /* Local prototypes */
165267c04fdSSascha Wildner
166267c04fdSSascha Wildner static void
167267c04fdSSascha Wildner AcpiDbDecodeNode (
168267c04fdSSascha Wildner ACPI_NAMESPACE_NODE *Node);
169267c04fdSSascha Wildner
170267c04fdSSascha Wildner
171267c04fdSSascha Wildner /*******************************************************************************
172267c04fdSSascha Wildner *
173267c04fdSSascha Wildner * FUNCTION: AcpiDbDumpMethodInfo
174267c04fdSSascha Wildner *
175267c04fdSSascha Wildner * PARAMETERS: Status - Method execution status
176267c04fdSSascha Wildner * WalkState - Current state of the parse tree walk
177267c04fdSSascha Wildner *
178267c04fdSSascha Wildner * RETURN: None
179267c04fdSSascha Wildner *
180267c04fdSSascha Wildner * DESCRIPTION: Called when a method has been aborted because of an error.
181267c04fdSSascha Wildner * Dumps the method execution stack, and the method locals/args,
182267c04fdSSascha Wildner * and disassembles the AML opcode that failed.
183267c04fdSSascha Wildner *
184267c04fdSSascha Wildner ******************************************************************************/
185267c04fdSSascha Wildner
186267c04fdSSascha Wildner void
AcpiDbDumpMethodInfo(ACPI_STATUS Status,ACPI_WALK_STATE * WalkState)187267c04fdSSascha Wildner AcpiDbDumpMethodInfo (
188267c04fdSSascha Wildner ACPI_STATUS Status,
189267c04fdSSascha Wildner ACPI_WALK_STATE *WalkState)
190267c04fdSSascha Wildner {
191267c04fdSSascha Wildner ACPI_THREAD_STATE *Thread;
192e416ee21SSascha Wildner ACPI_NAMESPACE_NODE *Node;
193267c04fdSSascha Wildner
194267c04fdSSascha Wildner
195e416ee21SSascha Wildner Node = WalkState->MethodNode;
196e416ee21SSascha Wildner
197e416ee21SSascha Wildner /* There are no locals or arguments for the module-level code case */
198e416ee21SSascha Wildner
199e416ee21SSascha Wildner if (Node == AcpiGbl_RootNode)
200e416ee21SSascha Wildner {
201e416ee21SSascha Wildner return;
202e416ee21SSascha Wildner }
203e416ee21SSascha Wildner
204267c04fdSSascha Wildner /* Ignore control codes, they are not errors */
205267c04fdSSascha Wildner
20608343eafSSascha Wildner if (ACPI_CNTL_EXCEPTION (Status))
207267c04fdSSascha Wildner {
208267c04fdSSascha Wildner return;
209267c04fdSSascha Wildner }
210267c04fdSSascha Wildner
211267c04fdSSascha Wildner /* We may be executing a deferred opcode */
212267c04fdSSascha Wildner
213267c04fdSSascha Wildner if (WalkState->DeferredNode)
214267c04fdSSascha Wildner {
215267c04fdSSascha Wildner AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n");
216267c04fdSSascha Wildner return;
217267c04fdSSascha Wildner }
218267c04fdSSascha Wildner
219267c04fdSSascha Wildner /*
220267c04fdSSascha Wildner * If there is no Thread, we are not actually executing a method.
221267c04fdSSascha Wildner * This can happen when the iASL compiler calls the interpreter
222267c04fdSSascha Wildner * to perform constant folding.
223267c04fdSSascha Wildner */
224267c04fdSSascha Wildner Thread = WalkState->Thread;
225267c04fdSSascha Wildner if (!Thread)
226267c04fdSSascha Wildner {
227267c04fdSSascha Wildner return;
228267c04fdSSascha Wildner }
229267c04fdSSascha Wildner
230267c04fdSSascha Wildner /* Display the method locals and arguments */
231267c04fdSSascha Wildner
232267c04fdSSascha Wildner AcpiOsPrintf ("\n");
233267c04fdSSascha Wildner AcpiDbDecodeLocals (WalkState);
234267c04fdSSascha Wildner AcpiOsPrintf ("\n");
235267c04fdSSascha Wildner AcpiDbDecodeArguments (WalkState);
236267c04fdSSascha Wildner AcpiOsPrintf ("\n");
237267c04fdSSascha Wildner }
238267c04fdSSascha Wildner
239267c04fdSSascha Wildner
240267c04fdSSascha Wildner /*******************************************************************************
241267c04fdSSascha Wildner *
242267c04fdSSascha Wildner * FUNCTION: AcpiDbDecodeInternalObject
243267c04fdSSascha Wildner *
244267c04fdSSascha Wildner * PARAMETERS: ObjDesc - Object to be displayed
245267c04fdSSascha Wildner *
246267c04fdSSascha Wildner * RETURN: None
247267c04fdSSascha Wildner *
248267c04fdSSascha Wildner * DESCRIPTION: Short display of an internal object. Numbers/Strings/Buffers.
249267c04fdSSascha Wildner *
250267c04fdSSascha Wildner ******************************************************************************/
251267c04fdSSascha Wildner
252267c04fdSSascha Wildner void
AcpiDbDecodeInternalObject(ACPI_OPERAND_OBJECT * ObjDesc)253267c04fdSSascha Wildner AcpiDbDecodeInternalObject (
254267c04fdSSascha Wildner ACPI_OPERAND_OBJECT *ObjDesc)
255267c04fdSSascha Wildner {
256267c04fdSSascha Wildner UINT32 i;
257267c04fdSSascha Wildner
258267c04fdSSascha Wildner
259267c04fdSSascha Wildner if (!ObjDesc)
260267c04fdSSascha Wildner {
261267c04fdSSascha Wildner AcpiOsPrintf (" Uninitialized");
262267c04fdSSascha Wildner return;
263267c04fdSSascha Wildner }
264267c04fdSSascha Wildner
265267c04fdSSascha Wildner if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
266267c04fdSSascha Wildner {
2673cc0afc6SSascha Wildner AcpiOsPrintf (" %p [%s]", ObjDesc,
2683cc0afc6SSascha Wildner AcpiUtGetDescriptorName (ObjDesc));
269267c04fdSSascha Wildner return;
270267c04fdSSascha Wildner }
271267c04fdSSascha Wildner
272267c04fdSSascha Wildner AcpiOsPrintf (" %s", AcpiUtGetObjectTypeName (ObjDesc));
273267c04fdSSascha Wildner
274267c04fdSSascha Wildner switch (ObjDesc->Common.Type)
275267c04fdSSascha Wildner {
276267c04fdSSascha Wildner case ACPI_TYPE_INTEGER:
277267c04fdSSascha Wildner
278267c04fdSSascha Wildner AcpiOsPrintf (" %8.8X%8.8X",
279267c04fdSSascha Wildner ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
280267c04fdSSascha Wildner break;
281267c04fdSSascha Wildner
282267c04fdSSascha Wildner case ACPI_TYPE_STRING:
283267c04fdSSascha Wildner
2842adac2b8SSascha Wildner AcpiOsPrintf ("(%u) \"%.60s",
285267c04fdSSascha Wildner ObjDesc->String.Length, ObjDesc->String.Pointer);
286267c04fdSSascha Wildner
2872adac2b8SSascha Wildner if (ObjDesc->String.Length > 60)
288267c04fdSSascha Wildner {
289267c04fdSSascha Wildner AcpiOsPrintf ("...");
290267c04fdSSascha Wildner }
291267c04fdSSascha Wildner else
292267c04fdSSascha Wildner {
293267c04fdSSascha Wildner AcpiOsPrintf ("\"");
294267c04fdSSascha Wildner }
295267c04fdSSascha Wildner break;
296267c04fdSSascha Wildner
297267c04fdSSascha Wildner case ACPI_TYPE_BUFFER:
298267c04fdSSascha Wildner
299267c04fdSSascha Wildner AcpiOsPrintf ("(%u)", ObjDesc->Buffer.Length);
300267c04fdSSascha Wildner for (i = 0; (i < 8) && (i < ObjDesc->Buffer.Length); i++)
301267c04fdSSascha Wildner {
302267c04fdSSascha Wildner AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]);
303267c04fdSSascha Wildner }
304267c04fdSSascha Wildner break;
305267c04fdSSascha Wildner
306267c04fdSSascha Wildner default:
307267c04fdSSascha Wildner
308267c04fdSSascha Wildner AcpiOsPrintf (" %p", ObjDesc);
309267c04fdSSascha Wildner break;
310267c04fdSSascha Wildner }
311267c04fdSSascha Wildner }
312267c04fdSSascha Wildner
313267c04fdSSascha Wildner
314267c04fdSSascha Wildner /*******************************************************************************
315267c04fdSSascha Wildner *
316267c04fdSSascha Wildner * FUNCTION: AcpiDbDecodeNode
317267c04fdSSascha Wildner *
318267c04fdSSascha Wildner * PARAMETERS: Node - Object to be displayed
319267c04fdSSascha Wildner *
320267c04fdSSascha Wildner * RETURN: None
321267c04fdSSascha Wildner *
322267c04fdSSascha Wildner * DESCRIPTION: Short display of a namespace node
323267c04fdSSascha Wildner *
324267c04fdSSascha Wildner ******************************************************************************/
325267c04fdSSascha Wildner
326267c04fdSSascha Wildner static void
AcpiDbDecodeNode(ACPI_NAMESPACE_NODE * Node)327267c04fdSSascha Wildner AcpiDbDecodeNode (
328267c04fdSSascha Wildner ACPI_NAMESPACE_NODE *Node)
329267c04fdSSascha Wildner {
330267c04fdSSascha Wildner
331267c04fdSSascha Wildner AcpiOsPrintf ("<Node> Name %4.4s",
332267c04fdSSascha Wildner AcpiUtGetNodeName (Node));
333267c04fdSSascha Wildner
334267c04fdSSascha Wildner if (Node->Flags & ANOBJ_METHOD_ARG)
335267c04fdSSascha Wildner {
336267c04fdSSascha Wildner AcpiOsPrintf (" [Method Arg]");
337267c04fdSSascha Wildner }
338267c04fdSSascha Wildner if (Node->Flags & ANOBJ_METHOD_LOCAL)
339267c04fdSSascha Wildner {
340267c04fdSSascha Wildner AcpiOsPrintf (" [Method Local]");
341267c04fdSSascha Wildner }
342267c04fdSSascha Wildner
343267c04fdSSascha Wildner switch (Node->Type)
344267c04fdSSascha Wildner {
345267c04fdSSascha Wildner /* These types have no attached object */
346267c04fdSSascha Wildner
347267c04fdSSascha Wildner case ACPI_TYPE_DEVICE:
348267c04fdSSascha Wildner
349267c04fdSSascha Wildner AcpiOsPrintf (" Device");
350267c04fdSSascha Wildner break;
351267c04fdSSascha Wildner
352267c04fdSSascha Wildner case ACPI_TYPE_THERMAL:
353267c04fdSSascha Wildner
354267c04fdSSascha Wildner AcpiOsPrintf (" Thermal Zone");
355267c04fdSSascha Wildner break;
356267c04fdSSascha Wildner
357267c04fdSSascha Wildner default:
358267c04fdSSascha Wildner
359267c04fdSSascha Wildner AcpiDbDecodeInternalObject (AcpiNsGetAttachedObject (Node));
360267c04fdSSascha Wildner break;
361267c04fdSSascha Wildner }
362267c04fdSSascha Wildner }
363267c04fdSSascha Wildner
364267c04fdSSascha Wildner
365267c04fdSSascha Wildner /*******************************************************************************
366267c04fdSSascha Wildner *
367267c04fdSSascha Wildner * FUNCTION: AcpiDbDisplayInternalObject
368267c04fdSSascha Wildner *
369267c04fdSSascha Wildner * PARAMETERS: ObjDesc - Object to be displayed
370267c04fdSSascha Wildner * WalkState - Current walk state
371267c04fdSSascha Wildner *
372267c04fdSSascha Wildner * RETURN: None
373267c04fdSSascha Wildner *
374267c04fdSSascha Wildner * DESCRIPTION: Short display of an internal object
375267c04fdSSascha Wildner *
376267c04fdSSascha Wildner ******************************************************************************/
377267c04fdSSascha Wildner
378267c04fdSSascha Wildner void
AcpiDbDisplayInternalObject(ACPI_OPERAND_OBJECT * ObjDesc,ACPI_WALK_STATE * WalkState)379267c04fdSSascha Wildner AcpiDbDisplayInternalObject (
380267c04fdSSascha Wildner ACPI_OPERAND_OBJECT *ObjDesc,
381267c04fdSSascha Wildner ACPI_WALK_STATE *WalkState)
382267c04fdSSascha Wildner {
383267c04fdSSascha Wildner UINT8 Type;
384267c04fdSSascha Wildner
385267c04fdSSascha Wildner
386267c04fdSSascha Wildner AcpiOsPrintf ("%p ", ObjDesc);
387267c04fdSSascha Wildner
388267c04fdSSascha Wildner if (!ObjDesc)
389267c04fdSSascha Wildner {
390267c04fdSSascha Wildner AcpiOsPrintf ("<Null Object>\n");
391267c04fdSSascha Wildner return;
392267c04fdSSascha Wildner }
393267c04fdSSascha Wildner
394267c04fdSSascha Wildner /* Decode the object type */
395267c04fdSSascha Wildner
396267c04fdSSascha Wildner switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))
397267c04fdSSascha Wildner {
398267c04fdSSascha Wildner case ACPI_DESC_TYPE_PARSER:
399267c04fdSSascha Wildner
400267c04fdSSascha Wildner AcpiOsPrintf ("<Parser> ");
401267c04fdSSascha Wildner break;
402267c04fdSSascha Wildner
403267c04fdSSascha Wildner case ACPI_DESC_TYPE_NAMED:
404267c04fdSSascha Wildner
405267c04fdSSascha Wildner AcpiDbDecodeNode ((ACPI_NAMESPACE_NODE *) ObjDesc);
406267c04fdSSascha Wildner break;
407267c04fdSSascha Wildner
408267c04fdSSascha Wildner case ACPI_DESC_TYPE_OPERAND:
409267c04fdSSascha Wildner
410267c04fdSSascha Wildner Type = ObjDesc->Common.Type;
411267c04fdSSascha Wildner if (Type > ACPI_TYPE_LOCAL_MAX)
412267c04fdSSascha Wildner {
413267c04fdSSascha Wildner AcpiOsPrintf (" Type %X [Invalid Type]", (UINT32) Type);
414267c04fdSSascha Wildner return;
415267c04fdSSascha Wildner }
416267c04fdSSascha Wildner
417267c04fdSSascha Wildner /* Decode the ACPI object type */
418267c04fdSSascha Wildner
419267c04fdSSascha Wildner switch (ObjDesc->Common.Type)
420267c04fdSSascha Wildner {
421267c04fdSSascha Wildner case ACPI_TYPE_LOCAL_REFERENCE:
422267c04fdSSascha Wildner
423267c04fdSSascha Wildner AcpiOsPrintf ("[%s] ", AcpiUtGetReferenceName (ObjDesc));
424267c04fdSSascha Wildner
42500ffa116SSascha Wildner /* Decode the reference */
426267c04fdSSascha Wildner
427267c04fdSSascha Wildner switch (ObjDesc->Reference.Class)
428267c04fdSSascha Wildner {
429267c04fdSSascha Wildner case ACPI_REFCLASS_LOCAL:
430267c04fdSSascha Wildner
431267c04fdSSascha Wildner AcpiOsPrintf ("%X ", ObjDesc->Reference.Value);
432267c04fdSSascha Wildner if (WalkState)
433267c04fdSSascha Wildner {
434267c04fdSSascha Wildner ObjDesc = WalkState->LocalVariables
435267c04fdSSascha Wildner [ObjDesc->Reference.Value].Object;
436267c04fdSSascha Wildner AcpiOsPrintf ("%p", ObjDesc);
437267c04fdSSascha Wildner AcpiDbDecodeInternalObject (ObjDesc);
438267c04fdSSascha Wildner }
439267c04fdSSascha Wildner break;
440267c04fdSSascha Wildner
441267c04fdSSascha Wildner case ACPI_REFCLASS_ARG:
442267c04fdSSascha Wildner
443267c04fdSSascha Wildner AcpiOsPrintf ("%X ", ObjDesc->Reference.Value);
444267c04fdSSascha Wildner if (WalkState)
445267c04fdSSascha Wildner {
446267c04fdSSascha Wildner ObjDesc = WalkState->Arguments
447267c04fdSSascha Wildner [ObjDesc->Reference.Value].Object;
448267c04fdSSascha Wildner AcpiOsPrintf ("%p", ObjDesc);
449267c04fdSSascha Wildner AcpiDbDecodeInternalObject (ObjDesc);
450267c04fdSSascha Wildner }
451267c04fdSSascha Wildner break;
452267c04fdSSascha Wildner
453267c04fdSSascha Wildner case ACPI_REFCLASS_INDEX:
454267c04fdSSascha Wildner
455267c04fdSSascha Wildner switch (ObjDesc->Reference.TargetType)
456267c04fdSSascha Wildner {
457267c04fdSSascha Wildner case ACPI_TYPE_BUFFER_FIELD:
458267c04fdSSascha Wildner
459267c04fdSSascha Wildner AcpiOsPrintf ("%p", ObjDesc->Reference.Object);
460267c04fdSSascha Wildner AcpiDbDecodeInternalObject (ObjDesc->Reference.Object);
461267c04fdSSascha Wildner break;
462267c04fdSSascha Wildner
463267c04fdSSascha Wildner case ACPI_TYPE_PACKAGE:
464267c04fdSSascha Wildner
465267c04fdSSascha Wildner AcpiOsPrintf ("%p", ObjDesc->Reference.Where);
466267c04fdSSascha Wildner if (!ObjDesc->Reference.Where)
467267c04fdSSascha Wildner {
468267c04fdSSascha Wildner AcpiOsPrintf (" Uninitialized WHERE pointer");
469267c04fdSSascha Wildner }
470267c04fdSSascha Wildner else
471267c04fdSSascha Wildner {
472267c04fdSSascha Wildner AcpiDbDecodeInternalObject (
473267c04fdSSascha Wildner *(ObjDesc->Reference.Where));
474267c04fdSSascha Wildner }
475267c04fdSSascha Wildner break;
476267c04fdSSascha Wildner
477267c04fdSSascha Wildner default:
478267c04fdSSascha Wildner
479267c04fdSSascha Wildner AcpiOsPrintf ("Unknown index target type");
480267c04fdSSascha Wildner break;
481267c04fdSSascha Wildner }
482267c04fdSSascha Wildner break;
483267c04fdSSascha Wildner
484267c04fdSSascha Wildner case ACPI_REFCLASS_REFOF:
485267c04fdSSascha Wildner
486267c04fdSSascha Wildner if (!ObjDesc->Reference.Object)
487267c04fdSSascha Wildner {
4883cc0afc6SSascha Wildner AcpiOsPrintf (
4893cc0afc6SSascha Wildner "Uninitialized reference subobject pointer");
490267c04fdSSascha Wildner break;
491267c04fdSSascha Wildner }
492267c04fdSSascha Wildner
493267c04fdSSascha Wildner /* Reference can be to a Node or an Operand object */
494267c04fdSSascha Wildner
495267c04fdSSascha Wildner switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc->Reference.Object))
496267c04fdSSascha Wildner {
497267c04fdSSascha Wildner case ACPI_DESC_TYPE_NAMED:
4983cc0afc6SSascha Wildner
499267c04fdSSascha Wildner AcpiDbDecodeNode (ObjDesc->Reference.Object);
500267c04fdSSascha Wildner break;
501267c04fdSSascha Wildner
502267c04fdSSascha Wildner case ACPI_DESC_TYPE_OPERAND:
5033cc0afc6SSascha Wildner
504267c04fdSSascha Wildner AcpiDbDecodeInternalObject (ObjDesc->Reference.Object);
505267c04fdSSascha Wildner break;
506267c04fdSSascha Wildner
507267c04fdSSascha Wildner default:
508267c04fdSSascha Wildner break;
509267c04fdSSascha Wildner }
510267c04fdSSascha Wildner break;
511267c04fdSSascha Wildner
512267c04fdSSascha Wildner case ACPI_REFCLASS_NAME:
513267c04fdSSascha Wildner
514267c04fdSSascha Wildner AcpiDbDecodeNode (ObjDesc->Reference.Node);
515267c04fdSSascha Wildner break;
516267c04fdSSascha Wildner
517267c04fdSSascha Wildner case ACPI_REFCLASS_DEBUG:
518267c04fdSSascha Wildner case ACPI_REFCLASS_TABLE:
519267c04fdSSascha Wildner
520267c04fdSSascha Wildner AcpiOsPrintf ("\n");
521267c04fdSSascha Wildner break;
522267c04fdSSascha Wildner
523267c04fdSSascha Wildner default: /* Unknown reference class */
524267c04fdSSascha Wildner
525267c04fdSSascha Wildner AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
526267c04fdSSascha Wildner break;
527267c04fdSSascha Wildner }
528267c04fdSSascha Wildner break;
529267c04fdSSascha Wildner
530267c04fdSSascha Wildner default:
531267c04fdSSascha Wildner
532267c04fdSSascha Wildner AcpiOsPrintf ("<Obj> ");
533267c04fdSSascha Wildner AcpiDbDecodeInternalObject (ObjDesc);
534267c04fdSSascha Wildner break;
535267c04fdSSascha Wildner }
536267c04fdSSascha Wildner break;
537267c04fdSSascha Wildner
538267c04fdSSascha Wildner default:
539267c04fdSSascha Wildner
540267c04fdSSascha Wildner AcpiOsPrintf ("<Not a valid ACPI Object Descriptor> [%s]",
541267c04fdSSascha Wildner AcpiUtGetDescriptorName (ObjDesc));
542267c04fdSSascha Wildner break;
543267c04fdSSascha Wildner }
544267c04fdSSascha Wildner
545267c04fdSSascha Wildner AcpiOsPrintf ("\n");
546267c04fdSSascha Wildner }
547267c04fdSSascha Wildner
548267c04fdSSascha Wildner
549267c04fdSSascha Wildner /*******************************************************************************
550267c04fdSSascha Wildner *
551267c04fdSSascha Wildner * FUNCTION: AcpiDbDecodeLocals
552267c04fdSSascha Wildner *
553267c04fdSSascha Wildner * PARAMETERS: WalkState - State for current method
554267c04fdSSascha Wildner *
555267c04fdSSascha Wildner * RETURN: None
556267c04fdSSascha Wildner *
557267c04fdSSascha Wildner * DESCRIPTION: Display all locals for the currently running control method
558267c04fdSSascha Wildner *
559267c04fdSSascha Wildner ******************************************************************************/
560267c04fdSSascha Wildner
561267c04fdSSascha Wildner void
AcpiDbDecodeLocals(ACPI_WALK_STATE * WalkState)562267c04fdSSascha Wildner AcpiDbDecodeLocals (
563267c04fdSSascha Wildner ACPI_WALK_STATE *WalkState)
564267c04fdSSascha Wildner {
565267c04fdSSascha Wildner UINT32 i;
566267c04fdSSascha Wildner ACPI_OPERAND_OBJECT *ObjDesc;
567267c04fdSSascha Wildner ACPI_NAMESPACE_NODE *Node;
568c6400d37SSascha Wildner BOOLEAN DisplayLocals = FALSE;
569267c04fdSSascha Wildner
570267c04fdSSascha Wildner
571267c04fdSSascha Wildner Node = WalkState->MethodNode;
572e416ee21SSascha Wildner
573e416ee21SSascha Wildner /* There are no locals for the module-level code case */
574e416ee21SSascha Wildner
575e416ee21SSascha Wildner if (Node == AcpiGbl_RootNode)
576e416ee21SSascha Wildner {
577e416ee21SSascha Wildner return;
578e416ee21SSascha Wildner }
5793cc0afc6SSascha Wildner
580267c04fdSSascha Wildner if (!Node)
581267c04fdSSascha Wildner {
582267c04fdSSascha Wildner AcpiOsPrintf (
583267c04fdSSascha Wildner "No method node (Executing subtree for buffer or opregion)\n");
584267c04fdSSascha Wildner return;
585267c04fdSSascha Wildner }
586267c04fdSSascha Wildner
587267c04fdSSascha Wildner if (Node->Type != ACPI_TYPE_METHOD)
588267c04fdSSascha Wildner {
589267c04fdSSascha Wildner AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n");
590267c04fdSSascha Wildner return;
591267c04fdSSascha Wildner }
592267c04fdSSascha Wildner
593c6400d37SSascha Wildner /* Are any locals actually set? */
594c6400d37SSascha Wildner
595c6400d37SSascha Wildner for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++)
596c6400d37SSascha Wildner {
597c6400d37SSascha Wildner ObjDesc = WalkState->LocalVariables[i].Object;
598c6400d37SSascha Wildner if (ObjDesc)
599c6400d37SSascha Wildner {
600c6400d37SSascha Wildner DisplayLocals = TRUE;
601c6400d37SSascha Wildner break;
602c6400d37SSascha Wildner }
603c6400d37SSascha Wildner }
604c6400d37SSascha Wildner
605c6400d37SSascha Wildner /* If any are set, only display the ones that are set */
606c6400d37SSascha Wildner
607c6400d37SSascha Wildner if (DisplayLocals)
608c6400d37SSascha Wildner {
6091093ca81SSascha Wildner AcpiOsPrintf ("\nInitialized Local Variables for Method [%4.4s]:\n",
610267c04fdSSascha Wildner AcpiUtGetNodeName (Node));
611267c04fdSSascha Wildner
612267c04fdSSascha Wildner for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++)
613267c04fdSSascha Wildner {
614267c04fdSSascha Wildner ObjDesc = WalkState->LocalVariables[i].Object;
615c6400d37SSascha Wildner if (ObjDesc)
616c6400d37SSascha Wildner {
617267c04fdSSascha Wildner AcpiOsPrintf (" Local%X: ", i);
618267c04fdSSascha Wildner AcpiDbDisplayInternalObject (ObjDesc, WalkState);
619267c04fdSSascha Wildner }
620267c04fdSSascha Wildner }
621c6400d37SSascha Wildner }
622c6400d37SSascha Wildner else
623c6400d37SSascha Wildner {
624820c5b08SSascha Wildner AcpiOsPrintf (
6251093ca81SSascha Wildner "No Local Variables are initialized for Method [%4.4s]\n",
626c6400d37SSascha Wildner AcpiUtGetNodeName (Node));
627c6400d37SSascha Wildner }
628c6400d37SSascha Wildner }
629267c04fdSSascha Wildner
630267c04fdSSascha Wildner
631267c04fdSSascha Wildner /*******************************************************************************
632267c04fdSSascha Wildner *
633267c04fdSSascha Wildner * FUNCTION: AcpiDbDecodeArguments
634267c04fdSSascha Wildner *
635267c04fdSSascha Wildner * PARAMETERS: WalkState - State for current method
636267c04fdSSascha Wildner *
637267c04fdSSascha Wildner * RETURN: None
638267c04fdSSascha Wildner *
639267c04fdSSascha Wildner * DESCRIPTION: Display all arguments for the currently running control method
640267c04fdSSascha Wildner *
641267c04fdSSascha Wildner ******************************************************************************/
642267c04fdSSascha Wildner
643267c04fdSSascha Wildner void
AcpiDbDecodeArguments(ACPI_WALK_STATE * WalkState)644267c04fdSSascha Wildner AcpiDbDecodeArguments (
645267c04fdSSascha Wildner ACPI_WALK_STATE *WalkState)
646267c04fdSSascha Wildner {
647267c04fdSSascha Wildner UINT32 i;
648267c04fdSSascha Wildner ACPI_OPERAND_OBJECT *ObjDesc;
649267c04fdSSascha Wildner ACPI_NAMESPACE_NODE *Node;
650c6400d37SSascha Wildner BOOLEAN DisplayArgs = FALSE;
651267c04fdSSascha Wildner
652267c04fdSSascha Wildner
653267c04fdSSascha Wildner Node = WalkState->MethodNode;
6543cc0afc6SSascha Wildner
655e416ee21SSascha Wildner /* There are no arguments for the module-level code case */
656e416ee21SSascha Wildner
657e416ee21SSascha Wildner if (Node == AcpiGbl_RootNode)
658e416ee21SSascha Wildner {
659e416ee21SSascha Wildner return;
660e416ee21SSascha Wildner }
661e416ee21SSascha Wildner
662267c04fdSSascha Wildner if (!Node)
663267c04fdSSascha Wildner {
664267c04fdSSascha Wildner AcpiOsPrintf (
665267c04fdSSascha Wildner "No method node (Executing subtree for buffer or opregion)\n");
666267c04fdSSascha Wildner return;
667267c04fdSSascha Wildner }
668267c04fdSSascha Wildner
669267c04fdSSascha Wildner if (Node->Type != ACPI_TYPE_METHOD)
670267c04fdSSascha Wildner {
671267c04fdSSascha Wildner AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n");
672267c04fdSSascha Wildner return;
673267c04fdSSascha Wildner }
674267c04fdSSascha Wildner
675c6400d37SSascha Wildner /* Are any arguments actually set? */
676267c04fdSSascha Wildner
677267c04fdSSascha Wildner for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++)
678267c04fdSSascha Wildner {
679267c04fdSSascha Wildner ObjDesc = WalkState->Arguments[i].Object;
680c6400d37SSascha Wildner if (ObjDesc)
681c6400d37SSascha Wildner {
682c6400d37SSascha Wildner DisplayArgs = TRUE;
683c6400d37SSascha Wildner break;
684c6400d37SSascha Wildner }
685c6400d37SSascha Wildner }
686c6400d37SSascha Wildner
687c6400d37SSascha Wildner /* If any are set, only display the ones that are set */
688c6400d37SSascha Wildner
689c6400d37SSascha Wildner if (DisplayArgs)
690c6400d37SSascha Wildner {
691c6400d37SSascha Wildner AcpiOsPrintf (
692c6400d37SSascha Wildner "Initialized Arguments for Method [%4.4s]: "
693c6400d37SSascha Wildner "(%X arguments defined for method invocation)\n",
6941093ca81SSascha Wildner AcpiUtGetNodeName (Node), Node->Object->Method.ParamCount);
695c6400d37SSascha Wildner
696c6400d37SSascha Wildner for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++)
697c6400d37SSascha Wildner {
698c6400d37SSascha Wildner ObjDesc = WalkState->Arguments[i].Object;
699c6400d37SSascha Wildner if (ObjDesc)
700c6400d37SSascha Wildner {
701267c04fdSSascha Wildner AcpiOsPrintf (" Arg%u: ", i);
702267c04fdSSascha Wildner AcpiDbDisplayInternalObject (ObjDesc, WalkState);
703267c04fdSSascha Wildner }
704267c04fdSSascha Wildner }
705c6400d37SSascha Wildner }
706c6400d37SSascha Wildner else
707c6400d37SSascha Wildner {
708820c5b08SSascha Wildner AcpiOsPrintf (
709820c5b08SSascha Wildner "No Arguments are initialized for method [%4.4s]\n",
710c6400d37SSascha Wildner AcpiUtGetNodeName (Node));
711c6400d37SSascha Wildner }
712c6400d37SSascha Wildner }
7137b90aa48SSascha Wildner
7147b90aa48SSascha Wildner #endif
715