xref: /onnv-gate/usr/src/uts/intel/io/acpica/disassembler/dmobject.c (revision 3446:5903aece022d)
1*3446Smrj /*******************************************************************************
2*3446Smrj  *
3*3446Smrj  * Module Name: dmobject - ACPI object decode and display
4*3446Smrj  *              $Revision: 1.20 $
5*3446Smrj  *
6*3446Smrj  ******************************************************************************/
7*3446Smrj 
8*3446Smrj /******************************************************************************
9*3446Smrj  *
10*3446Smrj  * 1. Copyright Notice
11*3446Smrj  *
12*3446Smrj  * Some or all of this work - Copyright (c) 1999 - 2006, Intel Corp.
13*3446Smrj  * All rights reserved.
14*3446Smrj  *
15*3446Smrj  * 2. License
16*3446Smrj  *
17*3446Smrj  * 2.1. This is your license from Intel Corp. under its intellectual property
18*3446Smrj  * rights.  You may have additional license terms from the party that provided
19*3446Smrj  * you this software, covering your right to use that party's intellectual
20*3446Smrj  * property rights.
21*3446Smrj  *
22*3446Smrj  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23*3446Smrj  * copy of the source code appearing in this file ("Covered Code") an
24*3446Smrj  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25*3446Smrj  * base code distributed originally by Intel ("Original Intel Code") to copy,
26*3446Smrj  * make derivatives, distribute, use and display any portion of the Covered
27*3446Smrj  * Code in any form, with the right to sublicense such rights; and
28*3446Smrj  *
29*3446Smrj  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30*3446Smrj  * license (with the right to sublicense), under only those claims of Intel
31*3446Smrj  * patents that are infringed by the Original Intel Code, to make, use, sell,
32*3446Smrj  * offer to sell, and import the Covered Code and derivative works thereof
33*3446Smrj  * solely to the minimum extent necessary to exercise the above copyright
34*3446Smrj  * license, and in no event shall the patent license extend to any additions
35*3446Smrj  * to or modifications of the Original Intel Code.  No other license or right
36*3446Smrj  * is granted directly or by implication, estoppel or otherwise;
37*3446Smrj  *
38*3446Smrj  * The above copyright and patent license is granted only if the following
39*3446Smrj  * conditions are met:
40*3446Smrj  *
41*3446Smrj  * 3. Conditions
42*3446Smrj  *
43*3446Smrj  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44*3446Smrj  * Redistribution of source code of any substantial portion of the Covered
45*3446Smrj  * Code or modification with rights to further distribute source must include
46*3446Smrj  * the above Copyright Notice, the above License, this list of Conditions,
47*3446Smrj  * and the following Disclaimer and Export Compliance provision.  In addition,
48*3446Smrj  * Licensee must cause all Covered Code to which Licensee contributes to
49*3446Smrj  * contain a file documenting the changes Licensee made to create that Covered
50*3446Smrj  * Code and the date of any change.  Licensee must include in that file the
51*3446Smrj  * documentation of any changes made by any predecessor Licensee.  Licensee
52*3446Smrj  * must include a prominent statement that the modification is derived,
53*3446Smrj  * directly or indirectly, from Original Intel Code.
54*3446Smrj  *
55*3446Smrj  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56*3446Smrj  * Redistribution of source code of any substantial portion of the Covered
57*3446Smrj  * Code or modification without rights to further distribute source must
58*3446Smrj  * include the following Disclaimer and Export Compliance provision in the
59*3446Smrj  * documentation and/or other materials provided with distribution.  In
60*3446Smrj  * addition, Licensee may not authorize further sublicense of source of any
61*3446Smrj  * portion of the Covered Code, and must include terms to the effect that the
62*3446Smrj  * license from Licensee to its licensee is limited to the intellectual
63*3446Smrj  * property embodied in the software Licensee provides to its licensee, and
64*3446Smrj  * not to intellectual property embodied in modifications its licensee may
65*3446Smrj  * make.
66*3446Smrj  *
67*3446Smrj  * 3.3. Redistribution of Executable. Redistribution in executable form of any
68*3446Smrj  * substantial portion of the Covered Code or modification must reproduce the
69*3446Smrj  * above Copyright Notice, and the following Disclaimer and Export Compliance
70*3446Smrj  * provision in the documentation and/or other materials provided with the
71*3446Smrj  * distribution.
72*3446Smrj  *
73*3446Smrj  * 3.4. Intel retains all right, title, and interest in and to the Original
74*3446Smrj  * Intel Code.
75*3446Smrj  *
76*3446Smrj  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77*3446Smrj  * Intel shall be used in advertising or otherwise to promote the sale, use or
78*3446Smrj  * other dealings in products derived from or relating to the Covered Code
79*3446Smrj  * without prior written authorization from Intel.
80*3446Smrj  *
81*3446Smrj  * 4. Disclaimer and Export Compliance
82*3446Smrj  *
83*3446Smrj  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84*3446Smrj  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85*3446Smrj  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
86*3446Smrj  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
87*3446Smrj  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
88*3446Smrj  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
89*3446Smrj  * PARTICULAR PURPOSE.
90*3446Smrj  *
91*3446Smrj  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92*3446Smrj  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93*3446Smrj  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94*3446Smrj  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95*3446Smrj  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96*3446Smrj  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
97*3446Smrj  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
98*3446Smrj  * LIMITED REMEDY.
99*3446Smrj  *
100*3446Smrj  * 4.3. Licensee shall not export, either directly or indirectly, any of this
101*3446Smrj  * software or system incorporating such software without first obtaining any
102*3446Smrj  * required license or other approval from the U. S. Department of Commerce or
103*3446Smrj  * any other agency or department of the United States Government.  In the
104*3446Smrj  * event Licensee exports any such software from the United States or
105*3446Smrj  * re-exports any such software from a foreign destination, Licensee shall
106*3446Smrj  * ensure that the distribution and export/re-export of the software is in
107*3446Smrj  * compliance with all laws, regulations, orders, or other restrictions of the
108*3446Smrj  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109*3446Smrj  * any of its subsidiaries will export/re-export any technical data, process,
110*3446Smrj  * software, or service, directly or indirectly, to any country for which the
111*3446Smrj  * United States government or any agency thereof requires an export license,
112*3446Smrj  * other governmental approval, or letter of assurance, without first obtaining
113*3446Smrj  * such license, approval or letter.
114*3446Smrj  *
115*3446Smrj  *****************************************************************************/
116*3446Smrj 
117*3446Smrj 
118*3446Smrj #include "acpi.h"
119*3446Smrj #include "amlcode.h"
120*3446Smrj #include "acnamesp.h"
121*3446Smrj #include "acdisasm.h"
122*3446Smrj #include "acparser.h"
123*3446Smrj 
124*3446Smrj 
125*3446Smrj #ifdef ACPI_DISASSEMBLER
126*3446Smrj 
127*3446Smrj #define _COMPONENT          ACPI_CA_DEBUGGER
128*3446Smrj         ACPI_MODULE_NAME    ("dmnames")
129*3446Smrj 
130*3446Smrj /* Local prototypes */
131*3446Smrj 
132*3446Smrj static void
133*3446Smrj AcpiDmDecodeNode (
134*3446Smrj     ACPI_NAMESPACE_NODE     *Node);
135*3446Smrj 
136*3446Smrj 
137*3446Smrj /*******************************************************************************
138*3446Smrj  *
139*3446Smrj  * FUNCTION:    AcpiDmDumpMethodInfo
140*3446Smrj  *
141*3446Smrj  * PARAMETERS:  Status          - Method execution status
142*3446Smrj  *              WalkState       - Current state of the parse tree walk
143*3446Smrj  *              Op              - Executing parse op
144*3446Smrj  *
145*3446Smrj  * RETURN:      None
146*3446Smrj  *
147*3446Smrj  * DESCRIPTION: Called when a method has been aborted because of an error.
148*3446Smrj  *              Dumps the method execution stack, and the method locals/args,
149*3446Smrj  *              and disassembles the AML opcode that failed.
150*3446Smrj  *
151*3446Smrj  ******************************************************************************/
152*3446Smrj 
153*3446Smrj void
154*3446Smrj AcpiDmDumpMethodInfo (
155*3446Smrj     ACPI_STATUS             Status,
156*3446Smrj     ACPI_WALK_STATE         *WalkState,
157*3446Smrj     ACPI_PARSE_OBJECT       *Op)
158*3446Smrj {
159*3446Smrj     ACPI_PARSE_OBJECT       *Next;
160*3446Smrj     ACPI_THREAD_STATE       *Thread;
161*3446Smrj     ACPI_WALK_STATE         *NextWalkState;
162*3446Smrj     ACPI_NAMESPACE_NODE     *PreviousMethod = NULL;
163*3446Smrj 
164*3446Smrj 
165*3446Smrj     /* Ignore control codes, they are not errors */
166*3446Smrj 
167*3446Smrj     if ((Status & AE_CODE_MASK) == AE_CODE_CONTROL)
168*3446Smrj     {
169*3446Smrj         return;
170*3446Smrj     }
171*3446Smrj 
172*3446Smrj     /* We may be executing a deferred opcode */
173*3446Smrj 
174*3446Smrj     if (WalkState->DeferredNode)
175*3446Smrj     {
176*3446Smrj         AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n");
177*3446Smrj         return;
178*3446Smrj     }
179*3446Smrj 
180*3446Smrj     /*
181*3446Smrj      * If there is no Thread, we are not actually executing a method.
182*3446Smrj      * This can happen when the iASL compiler calls the interpreter
183*3446Smrj      * to perform constant folding.
184*3446Smrj      */
185*3446Smrj     Thread = WalkState->Thread;
186*3446Smrj     if (!Thread)
187*3446Smrj     {
188*3446Smrj         return;
189*3446Smrj     }
190*3446Smrj 
191*3446Smrj     /* Display exception and method name */
192*3446Smrj 
193*3446Smrj     AcpiOsPrintf ("\n**** Exception %s during execution of method ",
194*3446Smrj         AcpiFormatException (Status));
195*3446Smrj     AcpiNsPrintNodePathname (WalkState->MethodNode, NULL);
196*3446Smrj 
197*3446Smrj     /* Display stack of executing methods */
198*3446Smrj 
199*3446Smrj     AcpiOsPrintf ("\n\nMethod Execution Stack:\n");
200*3446Smrj     NextWalkState = Thread->WalkStateList;
201*3446Smrj 
202*3446Smrj     /* Walk list of linked walk states */
203*3446Smrj 
204*3446Smrj     while (NextWalkState)
205*3446Smrj     {
206*3446Smrj         AcpiOsPrintf ("    Method [%4.4s] executing: ",
207*3446Smrj                 AcpiUtGetNodeName (NextWalkState->MethodNode));
208*3446Smrj 
209*3446Smrj         /* First method is the currently executing method */
210*3446Smrj 
211*3446Smrj         if (NextWalkState == WalkState)
212*3446Smrj         {
213*3446Smrj             /* Display currently executing ASL statement */
214*3446Smrj 
215*3446Smrj             Next = Op->Common.Next;
216*3446Smrj             Op->Common.Next = NULL;
217*3446Smrj 
218*3446Smrj             AcpiDmDisassemble (NextWalkState, Op, ACPI_UINT32_MAX);
219*3446Smrj             Op->Common.Next = Next;
220*3446Smrj         }
221*3446Smrj         else
222*3446Smrj         {
223*3446Smrj             /*
224*3446Smrj              * This method has called another method
225*3446Smrj              * NOTE: the method call parse subtree is already deleted at this
226*3446Smrj              * point, so we cannot disassemble the method invocation.
227*3446Smrj              */
228*3446Smrj             AcpiOsPrintf ("Call to method ");
229*3446Smrj             AcpiNsPrintNodePathname (PreviousMethod, NULL);
230*3446Smrj         }
231*3446Smrj 
232*3446Smrj         PreviousMethod = NextWalkState->MethodNode;
233*3446Smrj         NextWalkState = NextWalkState->Next;
234*3446Smrj         AcpiOsPrintf ("\n");
235*3446Smrj     }
236*3446Smrj 
237*3446Smrj     /* Display the method locals and arguments */
238*3446Smrj 
239*3446Smrj     AcpiOsPrintf ("\n");
240*3446Smrj     AcpiDmDisplayLocals (WalkState);
241*3446Smrj     AcpiOsPrintf ("\n");
242*3446Smrj     AcpiDmDisplayArguments (WalkState);
243*3446Smrj     AcpiOsPrintf ("\n");
244*3446Smrj }
245*3446Smrj 
246*3446Smrj 
247*3446Smrj /*******************************************************************************
248*3446Smrj  *
249*3446Smrj  * FUNCTION:    AcpiDmDecodeInternalObject
250*3446Smrj  *
251*3446Smrj  * PARAMETERS:  ObjDesc         - Object to be displayed
252*3446Smrj  *
253*3446Smrj  * RETURN:      None
254*3446Smrj  *
255*3446Smrj  * DESCRIPTION: Short display of an internal object.  Numbers/Strings/Buffers.
256*3446Smrj  *
257*3446Smrj  ******************************************************************************/
258*3446Smrj 
259*3446Smrj void
260*3446Smrj AcpiDmDecodeInternalObject (
261*3446Smrj     ACPI_OPERAND_OBJECT     *ObjDesc)
262*3446Smrj {
263*3446Smrj     UINT32                  i;
264*3446Smrj 
265*3446Smrj 
266*3446Smrj     if (!ObjDesc)
267*3446Smrj     {
268*3446Smrj         AcpiOsPrintf (" Uninitialized");
269*3446Smrj         return;
270*3446Smrj     }
271*3446Smrj 
272*3446Smrj     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
273*3446Smrj     {
274*3446Smrj         AcpiOsPrintf (" %p [%s]", ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
275*3446Smrj         return;
276*3446Smrj     }
277*3446Smrj 
278*3446Smrj     AcpiOsPrintf (" %s", AcpiUtGetObjectTypeName (ObjDesc));
279*3446Smrj 
280*3446Smrj     switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
281*3446Smrj     {
282*3446Smrj     case ACPI_TYPE_INTEGER:
283*3446Smrj 
284*3446Smrj         AcpiOsPrintf (" %8.8X%8.8X",
285*3446Smrj                 ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
286*3446Smrj         break;
287*3446Smrj 
288*3446Smrj 
289*3446Smrj     case ACPI_TYPE_STRING:
290*3446Smrj 
291*3446Smrj         AcpiOsPrintf ("(%d) \"%.24s",
292*3446Smrj                 ObjDesc->String.Length, ObjDesc->String.Pointer);
293*3446Smrj 
294*3446Smrj         if (ObjDesc->String.Length > 24)
295*3446Smrj         {
296*3446Smrj             AcpiOsPrintf ("...");
297*3446Smrj         }
298*3446Smrj         else
299*3446Smrj         {
300*3446Smrj             AcpiOsPrintf ("\"");
301*3446Smrj         }
302*3446Smrj         break;
303*3446Smrj 
304*3446Smrj 
305*3446Smrj     case ACPI_TYPE_BUFFER:
306*3446Smrj 
307*3446Smrj         AcpiOsPrintf ("(%d)", ObjDesc->Buffer.Length);
308*3446Smrj         for (i = 0; (i < 8) && (i < ObjDesc->Buffer.Length); i++)
309*3446Smrj         {
310*3446Smrj             AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]);
311*3446Smrj         }
312*3446Smrj         break;
313*3446Smrj 
314*3446Smrj 
315*3446Smrj     default:
316*3446Smrj 
317*3446Smrj         AcpiOsPrintf (" %p", ObjDesc);
318*3446Smrj         break;
319*3446Smrj     }
320*3446Smrj }
321*3446Smrj 
322*3446Smrj 
323*3446Smrj /*******************************************************************************
324*3446Smrj  *
325*3446Smrj  * FUNCTION:    AcpiDmDecodeNode
326*3446Smrj  *
327*3446Smrj  * PARAMETERS:  Node        - Object to be displayed
328*3446Smrj  *
329*3446Smrj  * RETURN:      None
330*3446Smrj  *
331*3446Smrj  * DESCRIPTION: Short display of a namespace node
332*3446Smrj  *
333*3446Smrj  ******************************************************************************/
334*3446Smrj 
335*3446Smrj static void
336*3446Smrj AcpiDmDecodeNode (
337*3446Smrj     ACPI_NAMESPACE_NODE     *Node)
338*3446Smrj {
339*3446Smrj 
340*3446Smrj     AcpiOsPrintf ("<Node>            Name %4.4s",
341*3446Smrj             AcpiUtGetNodeName (Node));
342*3446Smrj 
343*3446Smrj     if (Node->Flags & ANOBJ_METHOD_ARG)
344*3446Smrj     {
345*3446Smrj         AcpiOsPrintf (" [Method Arg]");
346*3446Smrj     }
347*3446Smrj     if (Node->Flags & ANOBJ_METHOD_LOCAL)
348*3446Smrj     {
349*3446Smrj         AcpiOsPrintf (" [Method Local]");
350*3446Smrj     }
351*3446Smrj 
352*3446Smrj     AcpiDmDecodeInternalObject (AcpiNsGetAttachedObject (Node));
353*3446Smrj }
354*3446Smrj 
355*3446Smrj 
356*3446Smrj /*******************************************************************************
357*3446Smrj  *
358*3446Smrj  * FUNCTION:    AcpiDmDisplayInternalObject
359*3446Smrj  *
360*3446Smrj  * PARAMETERS:  ObjDesc         - Object to be displayed
361*3446Smrj  *              WalkState       - Current walk state
362*3446Smrj  *
363*3446Smrj  * RETURN:      None
364*3446Smrj  *
365*3446Smrj  * DESCRIPTION: Short display of an internal object
366*3446Smrj  *
367*3446Smrj  ******************************************************************************/
368*3446Smrj 
369*3446Smrj void
370*3446Smrj AcpiDmDisplayInternalObject (
371*3446Smrj     ACPI_OPERAND_OBJECT     *ObjDesc,
372*3446Smrj     ACPI_WALK_STATE         *WalkState)
373*3446Smrj {
374*3446Smrj     UINT8                   Type;
375*3446Smrj 
376*3446Smrj 
377*3446Smrj     AcpiOsPrintf ("%p ", ObjDesc);
378*3446Smrj 
379*3446Smrj     if (!ObjDesc)
380*3446Smrj     {
381*3446Smrj         AcpiOsPrintf ("<Null Object>\n");
382*3446Smrj         return;
383*3446Smrj     }
384*3446Smrj 
385*3446Smrj     /* Decode the object type */
386*3446Smrj 
387*3446Smrj     switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))
388*3446Smrj     {
389*3446Smrj     case ACPI_DESC_TYPE_PARSER:
390*3446Smrj 
391*3446Smrj         AcpiOsPrintf ("<Parser>  ");
392*3446Smrj         break;
393*3446Smrj 
394*3446Smrj 
395*3446Smrj     case ACPI_DESC_TYPE_NAMED:
396*3446Smrj 
397*3446Smrj         AcpiDmDecodeNode ((ACPI_NAMESPACE_NODE *) ObjDesc);
398*3446Smrj         break;
399*3446Smrj 
400*3446Smrj 
401*3446Smrj     case ACPI_DESC_TYPE_OPERAND:
402*3446Smrj 
403*3446Smrj         Type = ACPI_GET_OBJECT_TYPE (ObjDesc);
404*3446Smrj         if (Type > ACPI_TYPE_LOCAL_MAX)
405*3446Smrj         {
406*3446Smrj             AcpiOsPrintf (" Type %X [Invalid Type]", (UINT32) Type);
407*3446Smrj             return;
408*3446Smrj         }
409*3446Smrj 
410*3446Smrj         /* Decode the ACPI object type */
411*3446Smrj 
412*3446Smrj         switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
413*3446Smrj         {
414*3446Smrj         case ACPI_TYPE_LOCAL_REFERENCE:
415*3446Smrj 
416*3446Smrj             switch (ObjDesc->Reference.Opcode)
417*3446Smrj             {
418*3446Smrj             case AML_LOCAL_OP:
419*3446Smrj 
420*3446Smrj                 AcpiOsPrintf ("[Local%d] ", ObjDesc->Reference.Offset);
421*3446Smrj                 if (WalkState)
422*3446Smrj                 {
423*3446Smrj                     ObjDesc = WalkState->LocalVariables[
424*3446Smrj                                 ObjDesc->Reference.Offset].Object;
425*3446Smrj                     AcpiOsPrintf ("%p", ObjDesc);
426*3446Smrj                     AcpiDmDecodeInternalObject (ObjDesc);
427*3446Smrj                 }
428*3446Smrj                 break;
429*3446Smrj 
430*3446Smrj 
431*3446Smrj             case AML_ARG_OP:
432*3446Smrj 
433*3446Smrj                 AcpiOsPrintf ("[Arg%d]   ", ObjDesc->Reference.Offset);
434*3446Smrj                 if (WalkState)
435*3446Smrj                 {
436*3446Smrj                     ObjDesc = WalkState->Arguments[
437*3446Smrj                                 ObjDesc->Reference.Offset].Object;
438*3446Smrj                     AcpiOsPrintf ("%p", ObjDesc);
439*3446Smrj                     AcpiDmDecodeInternalObject (ObjDesc);
440*3446Smrj                 }
441*3446Smrj                 break;
442*3446Smrj 
443*3446Smrj 
444*3446Smrj             case AML_DEBUG_OP:
445*3446Smrj 
446*3446Smrj                 AcpiOsPrintf ("[Debug]  ");
447*3446Smrj                 break;
448*3446Smrj 
449*3446Smrj 
450*3446Smrj             case AML_INDEX_OP:
451*3446Smrj 
452*3446Smrj                 AcpiOsPrintf ("[Index]  ");
453*3446Smrj                 switch (ObjDesc->Reference.TargetType)
454*3446Smrj                 {
455*3446Smrj                 case ACPI_TYPE_BUFFER_FIELD:
456*3446Smrj                     AcpiOsPrintf ("%p", ObjDesc->Reference.Object);
457*3446Smrj                     AcpiDmDecodeInternalObject (ObjDesc->Reference.Object);
458*3446Smrj                     break;
459*3446Smrj 
460*3446Smrj                 case ACPI_TYPE_PACKAGE:
461*3446Smrj 
462*3446Smrj                     AcpiOsPrintf ("%p", ObjDesc->Reference.Where);
463*3446Smrj                     if (!ObjDesc->Reference.Where)
464*3446Smrj                     {
465*3446Smrj                         AcpiOsPrintf (" Uninitialized WHERE ptr");
466*3446Smrj                     }
467*3446Smrj                     else
468*3446Smrj                     {
469*3446Smrj                         AcpiDmDecodeInternalObject (
470*3446Smrj                             *(ObjDesc->Reference.Where));
471*3446Smrj                     }
472*3446Smrj                     break;
473*3446Smrj 
474*3446Smrj                 default:
475*3446Smrj                     AcpiOsPrintf ("Unknown index target type");
476*3446Smrj                     break;
477*3446Smrj                 }
478*3446Smrj                 break;
479*3446Smrj 
480*3446Smrj 
481*3446Smrj             case AML_LOAD_OP:
482*3446Smrj 
483*3446Smrj                 AcpiOsPrintf ("[DdbHandle]  ");
484*3446Smrj                 break;
485*3446Smrj 
486*3446Smrj 
487*3446Smrj             case AML_REF_OF_OP:
488*3446Smrj 
489*3446Smrj                 AcpiOsPrintf ("[RefOf]          ");
490*3446Smrj 
491*3446Smrj                 if (!ObjDesc->Reference.Object)
492*3446Smrj                 {
493*3446Smrj                     AcpiOsPrintf ("Uninitialized reference subobject ptr");
494*3446Smrj                     break;
495*3446Smrj                 }
496*3446Smrj 
497*3446Smrj                 /* Reference can be to a Node or an Operand object */
498*3446Smrj 
499*3446Smrj                 switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc->Reference.Object))
500*3446Smrj                 {
501*3446Smrj                 case ACPI_DESC_TYPE_NAMED:
502*3446Smrj                     AcpiDmDecodeNode (ObjDesc->Reference.Object);
503*3446Smrj                     break;
504*3446Smrj 
505*3446Smrj                 case ACPI_DESC_TYPE_OPERAND:
506*3446Smrj                     AcpiDmDecodeInternalObject (ObjDesc->Reference.Object);
507*3446Smrj                     break;
508*3446Smrj 
509*3446Smrj                 default:
510*3446Smrj                     break;
511*3446Smrj                 }
512*3446Smrj                 break;
513*3446Smrj 
514*3446Smrj             case AML_INT_NAMEPATH_OP:
515*3446Smrj 
516*3446Smrj                 AcpiDmDecodeNode (ObjDesc->Reference.Node);
517*3446Smrj                 break;
518*3446Smrj 
519*3446Smrj             default:
520*3446Smrj 
521*3446Smrj                 AcpiOsPrintf ("Unknown Reference opcode %X (%s)\n",
522*3446Smrj                     ObjDesc->Reference.Opcode,
523*3446Smrj                     AcpiPsGetOpcodeName (ObjDesc->Reference.Opcode));
524*3446Smrj                 break;
525*3446Smrj             }
526*3446Smrj             break;
527*3446Smrj 
528*3446Smrj         default:
529*3446Smrj 
530*3446Smrj             AcpiOsPrintf ("<Obj>            ");
531*3446Smrj             AcpiDmDecodeInternalObject (ObjDesc);
532*3446Smrj             break;
533*3446Smrj         }
534*3446Smrj         break;
535*3446Smrj 
536*3446Smrj 
537*3446Smrj     default:
538*3446Smrj 
539*3446Smrj         AcpiOsPrintf ("<Not a valid ACPI Object Descriptor> [%s]",
540*3446Smrj                 AcpiUtGetDescriptorName (ObjDesc));
541*3446Smrj         break;
542*3446Smrj     }
543*3446Smrj 
544*3446Smrj     AcpiOsPrintf ("\n");
545*3446Smrj }
546*3446Smrj 
547*3446Smrj 
548*3446Smrj /*******************************************************************************
549*3446Smrj  *
550*3446Smrj  * FUNCTION:    AcpiDmDisplayLocals
551*3446Smrj  *
552*3446Smrj  * PARAMETERS:  WalkState       - State for current method
553*3446Smrj  *
554*3446Smrj  * RETURN:      None
555*3446Smrj  *
556*3446Smrj  * DESCRIPTION: Display all locals for the currently running control method
557*3446Smrj  *
558*3446Smrj  ******************************************************************************/
559*3446Smrj 
560*3446Smrj void
561*3446Smrj AcpiDmDisplayLocals (
562*3446Smrj     ACPI_WALK_STATE         *WalkState)
563*3446Smrj {
564*3446Smrj     UINT32                  i;
565*3446Smrj     ACPI_OPERAND_OBJECT     *ObjDesc;
566*3446Smrj     ACPI_NAMESPACE_NODE     *Node;
567*3446Smrj 
568*3446Smrj 
569*3446Smrj     ObjDesc = WalkState->MethodDesc;
570*3446Smrj     Node    = WalkState->MethodNode;
571*3446Smrj     if (!Node)
572*3446Smrj     {
573*3446Smrj         AcpiOsPrintf (
574*3446Smrj             "No method node (Executing subtree for buffer or opregion)\n");
575*3446Smrj         return;
576*3446Smrj     }
577*3446Smrj 
578*3446Smrj     if (Node->Type != ACPI_TYPE_METHOD)
579*3446Smrj     {
580*3446Smrj         AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n");
581*3446Smrj         return;
582*3446Smrj     }
583*3446Smrj 
584*3446Smrj     AcpiOsPrintf ("Local Variables for method [%4.4s]:\n",
585*3446Smrj             AcpiUtGetNodeName (Node));
586*3446Smrj 
587*3446Smrj     for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++)
588*3446Smrj     {
589*3446Smrj         ObjDesc = WalkState->LocalVariables[i].Object;
590*3446Smrj         AcpiOsPrintf ("    Local%X: ", i);
591*3446Smrj         AcpiDmDisplayInternalObject (ObjDesc, WalkState);
592*3446Smrj     }
593*3446Smrj }
594*3446Smrj 
595*3446Smrj 
596*3446Smrj /*******************************************************************************
597*3446Smrj  *
598*3446Smrj  * FUNCTION:    AcpiDmDisplayArguments
599*3446Smrj  *
600*3446Smrj  * PARAMETERS:  WalkState       - State for current method
601*3446Smrj  *
602*3446Smrj  * RETURN:      None
603*3446Smrj  *
604*3446Smrj  * DESCRIPTION: Display all arguments for the currently running control method
605*3446Smrj  *
606*3446Smrj  ******************************************************************************/
607*3446Smrj 
608*3446Smrj void
609*3446Smrj AcpiDmDisplayArguments (
610*3446Smrj     ACPI_WALK_STATE         *WalkState)
611*3446Smrj {
612*3446Smrj     UINT32                  i;
613*3446Smrj     ACPI_OPERAND_OBJECT     *ObjDesc;
614*3446Smrj     ACPI_NAMESPACE_NODE     *Node;
615*3446Smrj 
616*3446Smrj 
617*3446Smrj     ObjDesc = WalkState->MethodDesc;
618*3446Smrj     Node    = WalkState->MethodNode;
619*3446Smrj     if (!Node)
620*3446Smrj     {
621*3446Smrj         AcpiOsPrintf (
622*3446Smrj             "No method node (Executing subtree for buffer or opregion)\n");
623*3446Smrj         return;
624*3446Smrj     }
625*3446Smrj 
626*3446Smrj     if (Node->Type != ACPI_TYPE_METHOD)
627*3446Smrj     {
628*3446Smrj         AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n");
629*3446Smrj         return;
630*3446Smrj     }
631*3446Smrj 
632*3446Smrj     AcpiOsPrintf (
633*3446Smrj         "Arguments for Method [%4.4s]:  (%X arguments defined, max concurrency = %X)\n",
634*3446Smrj         AcpiUtGetNodeName (Node), ObjDesc->Method.ParamCount, ObjDesc->Method.SyncLevel);
635*3446Smrj 
636*3446Smrj     for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++)
637*3446Smrj     {
638*3446Smrj         ObjDesc = WalkState->Arguments[i].Object;
639*3446Smrj         AcpiOsPrintf ("    Arg%d:   ", i);
640*3446Smrj         AcpiDmDisplayInternalObject (ObjDesc, WalkState);
641*3446Smrj     }
642*3446Smrj }
643*3446Smrj 
644*3446Smrj #endif
645*3446Smrj 
646*3446Smrj 
647