xref: /dflybsd-src/sys/contrib/dev/acpica/source/components/debugger/dbobject.c (revision 383048aca08c2de51d27aa8638a36982a0d74550)
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