xref: /onnv-gate/usr/src/uts/intel/io/acpica/executer/exdump.c (revision 7851:e828bbb1689c)
1*7851SDana.Myers@Sun.COM /******************************************************************************
2*7851SDana.Myers@Sun.COM  *
3*7851SDana.Myers@Sun.COM  * Module Name: exdump - Interpreter debug output routines
4*7851SDana.Myers@Sun.COM  *              $Revision: 1.206 $
5*7851SDana.Myers@Sun.COM  *
6*7851SDana.Myers@Sun.COM  *****************************************************************************/
7*7851SDana.Myers@Sun.COM 
8*7851SDana.Myers@Sun.COM /******************************************************************************
9*7851SDana.Myers@Sun.COM  *
10*7851SDana.Myers@Sun.COM  * 1. Copyright Notice
11*7851SDana.Myers@Sun.COM  *
12*7851SDana.Myers@Sun.COM  * Some or all of this work - Copyright (c) 1999 - 2008, Intel Corp.
13*7851SDana.Myers@Sun.COM  * All rights reserved.
14*7851SDana.Myers@Sun.COM  *
15*7851SDana.Myers@Sun.COM  * 2. License
16*7851SDana.Myers@Sun.COM  *
17*7851SDana.Myers@Sun.COM  * 2.1. This is your license from Intel Corp. under its intellectual property
18*7851SDana.Myers@Sun.COM  * rights.  You may have additional license terms from the party that provided
19*7851SDana.Myers@Sun.COM  * you this software, covering your right to use that party's intellectual
20*7851SDana.Myers@Sun.COM  * property rights.
21*7851SDana.Myers@Sun.COM  *
22*7851SDana.Myers@Sun.COM  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23*7851SDana.Myers@Sun.COM  * copy of the source code appearing in this file ("Covered Code") an
24*7851SDana.Myers@Sun.COM  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25*7851SDana.Myers@Sun.COM  * base code distributed originally by Intel ("Original Intel Code") to copy,
26*7851SDana.Myers@Sun.COM  * make derivatives, distribute, use and display any portion of the Covered
27*7851SDana.Myers@Sun.COM  * Code in any form, with the right to sublicense such rights; and
28*7851SDana.Myers@Sun.COM  *
29*7851SDana.Myers@Sun.COM  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30*7851SDana.Myers@Sun.COM  * license (with the right to sublicense), under only those claims of Intel
31*7851SDana.Myers@Sun.COM  * patents that are infringed by the Original Intel Code, to make, use, sell,
32*7851SDana.Myers@Sun.COM  * offer to sell, and import the Covered Code and derivative works thereof
33*7851SDana.Myers@Sun.COM  * solely to the minimum extent necessary to exercise the above copyright
34*7851SDana.Myers@Sun.COM  * license, and in no event shall the patent license extend to any additions
35*7851SDana.Myers@Sun.COM  * to or modifications of the Original Intel Code.  No other license or right
36*7851SDana.Myers@Sun.COM  * is granted directly or by implication, estoppel or otherwise;
37*7851SDana.Myers@Sun.COM  *
38*7851SDana.Myers@Sun.COM  * The above copyright and patent license is granted only if the following
39*7851SDana.Myers@Sun.COM  * conditions are met:
40*7851SDana.Myers@Sun.COM  *
41*7851SDana.Myers@Sun.COM  * 3. Conditions
42*7851SDana.Myers@Sun.COM  *
43*7851SDana.Myers@Sun.COM  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44*7851SDana.Myers@Sun.COM  * Redistribution of source code of any substantial portion of the Covered
45*7851SDana.Myers@Sun.COM  * Code or modification with rights to further distribute source must include
46*7851SDana.Myers@Sun.COM  * the above Copyright Notice, the above License, this list of Conditions,
47*7851SDana.Myers@Sun.COM  * and the following Disclaimer and Export Compliance provision.  In addition,
48*7851SDana.Myers@Sun.COM  * Licensee must cause all Covered Code to which Licensee contributes to
49*7851SDana.Myers@Sun.COM  * contain a file documenting the changes Licensee made to create that Covered
50*7851SDana.Myers@Sun.COM  * Code and the date of any change.  Licensee must include in that file the
51*7851SDana.Myers@Sun.COM  * documentation of any changes made by any predecessor Licensee.  Licensee
52*7851SDana.Myers@Sun.COM  * must include a prominent statement that the modification is derived,
53*7851SDana.Myers@Sun.COM  * directly or indirectly, from Original Intel Code.
54*7851SDana.Myers@Sun.COM  *
55*7851SDana.Myers@Sun.COM  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56*7851SDana.Myers@Sun.COM  * Redistribution of source code of any substantial portion of the Covered
57*7851SDana.Myers@Sun.COM  * Code or modification without rights to further distribute source must
58*7851SDana.Myers@Sun.COM  * include the following Disclaimer and Export Compliance provision in the
59*7851SDana.Myers@Sun.COM  * documentation and/or other materials provided with distribution.  In
60*7851SDana.Myers@Sun.COM  * addition, Licensee may not authorize further sublicense of source of any
61*7851SDana.Myers@Sun.COM  * portion of the Covered Code, and must include terms to the effect that the
62*7851SDana.Myers@Sun.COM  * license from Licensee to its licensee is limited to the intellectual
63*7851SDana.Myers@Sun.COM  * property embodied in the software Licensee provides to its licensee, and
64*7851SDana.Myers@Sun.COM  * not to intellectual property embodied in modifications its licensee may
65*7851SDana.Myers@Sun.COM  * make.
66*7851SDana.Myers@Sun.COM  *
67*7851SDana.Myers@Sun.COM  * 3.3. Redistribution of Executable. Redistribution in executable form of any
68*7851SDana.Myers@Sun.COM  * substantial portion of the Covered Code or modification must reproduce the
69*7851SDana.Myers@Sun.COM  * above Copyright Notice, and the following Disclaimer and Export Compliance
70*7851SDana.Myers@Sun.COM  * provision in the documentation and/or other materials provided with the
71*7851SDana.Myers@Sun.COM  * distribution.
72*7851SDana.Myers@Sun.COM  *
73*7851SDana.Myers@Sun.COM  * 3.4. Intel retains all right, title, and interest in and to the Original
74*7851SDana.Myers@Sun.COM  * Intel Code.
75*7851SDana.Myers@Sun.COM  *
76*7851SDana.Myers@Sun.COM  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77*7851SDana.Myers@Sun.COM  * Intel shall be used in advertising or otherwise to promote the sale, use or
78*7851SDana.Myers@Sun.COM  * other dealings in products derived from or relating to the Covered Code
79*7851SDana.Myers@Sun.COM  * without prior written authorization from Intel.
80*7851SDana.Myers@Sun.COM  *
81*7851SDana.Myers@Sun.COM  * 4. Disclaimer and Export Compliance
82*7851SDana.Myers@Sun.COM  *
83*7851SDana.Myers@Sun.COM  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84*7851SDana.Myers@Sun.COM  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85*7851SDana.Myers@Sun.COM  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
86*7851SDana.Myers@Sun.COM  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
87*7851SDana.Myers@Sun.COM  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
88*7851SDana.Myers@Sun.COM  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
89*7851SDana.Myers@Sun.COM  * PARTICULAR PURPOSE.
90*7851SDana.Myers@Sun.COM  *
91*7851SDana.Myers@Sun.COM  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92*7851SDana.Myers@Sun.COM  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93*7851SDana.Myers@Sun.COM  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94*7851SDana.Myers@Sun.COM  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95*7851SDana.Myers@Sun.COM  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96*7851SDana.Myers@Sun.COM  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
97*7851SDana.Myers@Sun.COM  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
98*7851SDana.Myers@Sun.COM  * LIMITED REMEDY.
99*7851SDana.Myers@Sun.COM  *
100*7851SDana.Myers@Sun.COM  * 4.3. Licensee shall not export, either directly or indirectly, any of this
101*7851SDana.Myers@Sun.COM  * software or system incorporating such software without first obtaining any
102*7851SDana.Myers@Sun.COM  * required license or other approval from the U. S. Department of Commerce or
103*7851SDana.Myers@Sun.COM  * any other agency or department of the United States Government.  In the
104*7851SDana.Myers@Sun.COM  * event Licensee exports any such software from the United States or
105*7851SDana.Myers@Sun.COM  * re-exports any such software from a foreign destination, Licensee shall
106*7851SDana.Myers@Sun.COM  * ensure that the distribution and export/re-export of the software is in
107*7851SDana.Myers@Sun.COM  * compliance with all laws, regulations, orders, or other restrictions of the
108*7851SDana.Myers@Sun.COM  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109*7851SDana.Myers@Sun.COM  * any of its subsidiaries will export/re-export any technical data, process,
110*7851SDana.Myers@Sun.COM  * software, or service, directly or indirectly, to any country for which the
111*7851SDana.Myers@Sun.COM  * United States government or any agency thereof requires an export license,
112*7851SDana.Myers@Sun.COM  * other governmental approval, or letter of assurance, without first obtaining
113*7851SDana.Myers@Sun.COM  * such license, approval or letter.
114*7851SDana.Myers@Sun.COM  *
115*7851SDana.Myers@Sun.COM  *****************************************************************************/
116*7851SDana.Myers@Sun.COM 
117*7851SDana.Myers@Sun.COM #define __EXDUMP_C__
118*7851SDana.Myers@Sun.COM 
119*7851SDana.Myers@Sun.COM #include "acpi.h"
120*7851SDana.Myers@Sun.COM #include "acinterp.h"
121*7851SDana.Myers@Sun.COM #include "amlcode.h"
122*7851SDana.Myers@Sun.COM #include "acnamesp.h"
123*7851SDana.Myers@Sun.COM 
124*7851SDana.Myers@Sun.COM 
125*7851SDana.Myers@Sun.COM #define _COMPONENT          ACPI_EXECUTER
126*7851SDana.Myers@Sun.COM         ACPI_MODULE_NAME    ("exdump")
127*7851SDana.Myers@Sun.COM 
128*7851SDana.Myers@Sun.COM /*
129*7851SDana.Myers@Sun.COM  * The following routines are used for debug output only
130*7851SDana.Myers@Sun.COM  */
131*7851SDana.Myers@Sun.COM #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
132*7851SDana.Myers@Sun.COM 
133*7851SDana.Myers@Sun.COM /* Local prototypes */
134*7851SDana.Myers@Sun.COM 
135*7851SDana.Myers@Sun.COM static void
136*7851SDana.Myers@Sun.COM AcpiExOutString (
137*7851SDana.Myers@Sun.COM     char                    *Title,
138*7851SDana.Myers@Sun.COM     char                    *Value);
139*7851SDana.Myers@Sun.COM 
140*7851SDana.Myers@Sun.COM static void
141*7851SDana.Myers@Sun.COM AcpiExOutPointer (
142*7851SDana.Myers@Sun.COM     char                    *Title,
143*7851SDana.Myers@Sun.COM     void                    *Value);
144*7851SDana.Myers@Sun.COM 
145*7851SDana.Myers@Sun.COM static void
146*7851SDana.Myers@Sun.COM AcpiExDumpObject (
147*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *ObjDesc,
148*7851SDana.Myers@Sun.COM     ACPI_EXDUMP_INFO        *Info);
149*7851SDana.Myers@Sun.COM 
150*7851SDana.Myers@Sun.COM static void
151*7851SDana.Myers@Sun.COM AcpiExDumpReferenceObj (
152*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *ObjDesc);
153*7851SDana.Myers@Sun.COM 
154*7851SDana.Myers@Sun.COM static void
155*7851SDana.Myers@Sun.COM AcpiExDumpPackageObj (
156*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *ObjDesc,
157*7851SDana.Myers@Sun.COM     UINT32                  Level,
158*7851SDana.Myers@Sun.COM     UINT32                  Index);
159*7851SDana.Myers@Sun.COM 
160*7851SDana.Myers@Sun.COM 
161*7851SDana.Myers@Sun.COM /*******************************************************************************
162*7851SDana.Myers@Sun.COM  *
163*7851SDana.Myers@Sun.COM  * Object Descriptor info tables
164*7851SDana.Myers@Sun.COM  *
165*7851SDana.Myers@Sun.COM  * Note: The first table entry must be an INIT opcode and must contain
166*7851SDana.Myers@Sun.COM  * the table length (number of table entries)
167*7851SDana.Myers@Sun.COM  *
168*7851SDana.Myers@Sun.COM  ******************************************************************************/
169*7851SDana.Myers@Sun.COM 
170*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpInteger[2] =
171*7851SDana.Myers@Sun.COM {
172*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger),        NULL},
173*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT64,   ACPI_EXD_OFFSET (Integer.Value),                "Value"}
174*7851SDana.Myers@Sun.COM };
175*7851SDana.Myers@Sun.COM 
176*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpString[4] =
177*7851SDana.Myers@Sun.COM {
178*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpString),         NULL},
179*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (String.Length),                "Length"},
180*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (String.Pointer),               "Pointer"},
181*7851SDana.Myers@Sun.COM     {ACPI_EXD_STRING,   0,                                              NULL}
182*7851SDana.Myers@Sun.COM };
183*7851SDana.Myers@Sun.COM 
184*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpBuffer[5] =
185*7851SDana.Myers@Sun.COM {
186*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer),         NULL},
187*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Buffer.Length),                "Length"},
188*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Pointer),               "Pointer"},
189*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
190*7851SDana.Myers@Sun.COM     {ACPI_EXD_BUFFER,   0,                                              NULL}
191*7851SDana.Myers@Sun.COM };
192*7851SDana.Myers@Sun.COM 
193*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpPackage[5] =
194*7851SDana.Myers@Sun.COM {
195*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage),        NULL},
196*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Package.Flags),                "Flags"},
197*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Package.Count),                "Elements"},
198*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Package.Elements),             "Element List"},
199*7851SDana.Myers@Sun.COM     {ACPI_EXD_PACKAGE,  0,                                              NULL}
200*7851SDana.Myers@Sun.COM };
201*7851SDana.Myers@Sun.COM 
202*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
203*7851SDana.Myers@Sun.COM {
204*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
205*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.Handler),               "Handler"},
206*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.SystemNotify),          "System Notify"},
207*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.DeviceNotify),          "Device Notify"}
208*7851SDana.Myers@Sun.COM };
209*7851SDana.Myers@Sun.COM 
210*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
211*7851SDana.Myers@Sun.COM {
212*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent),          NULL},
213*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Event.OsSemaphore),            "OsSemaphore"}
214*7851SDana.Myers@Sun.COM };
215*7851SDana.Myers@Sun.COM 
216*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpMethod[8] =
217*7851SDana.Myers@Sun.COM {
218*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod),         NULL},
219*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ParamCount),            "ParamCount"},
220*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.SyncLevel),             "Sync Level"},
221*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.Mutex),                 "Mutex"},
222*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.OwnerId),               "Owner Id"},
223*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ThreadCount),           "Thread Count"},
224*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Method.AmlLength),             "Aml Length"},
225*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.AmlStart),              "Aml Start"}
226*7851SDana.Myers@Sun.COM };
227*7851SDana.Myers@Sun.COM 
228*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpMutex[5] =
229*7851SDana.Myers@Sun.COM {
230*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex),          NULL},
231*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.SyncLevel),              "Sync Level"},
232*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OwnerThread),            "Owner Thread"},
233*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Mutex.AcquisitionDepth),       "Acquire Depth"},
234*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OsMutex),                "OsMutex"}
235*7851SDana.Myers@Sun.COM };
236*7851SDana.Myers@Sun.COM 
237*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpRegion[7] =
238*7851SDana.Myers@Sun.COM {
239*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion),         NULL},
240*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.SpaceId),               "Space Id"},
241*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.Flags),                 "Flags"},
242*7851SDana.Myers@Sun.COM     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
243*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
244*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
245*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
246*7851SDana.Myers@Sun.COM };
247*7851SDana.Myers@Sun.COM 
248*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpPower[5] =
249*7851SDana.Myers@Sun.COM {
250*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
251*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
252*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
253*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.SystemNotify),   "System Notify"},
254*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.DeviceNotify),   "Device Notify"}
255*7851SDana.Myers@Sun.COM };
256*7851SDana.Myers@Sun.COM 
257*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
258*7851SDana.Myers@Sun.COM {
259*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor),      NULL},
260*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
261*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
262*7851SDana.Myers@Sun.COM     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
263*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.SystemNotify),       "System Notify"},
264*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.DeviceNotify),       "Device Notify"},
265*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
266*7851SDana.Myers@Sun.COM };
267*7851SDana.Myers@Sun.COM 
268*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
269*7851SDana.Myers@Sun.COM {
270*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
271*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.SystemNotify),     "System Notify"},
272*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.DeviceNotify),     "Device Notify"},
273*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
274*7851SDana.Myers@Sun.COM };
275*7851SDana.Myers@Sun.COM 
276*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
277*7851SDana.Myers@Sun.COM {
278*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField),    NULL},
279*7851SDana.Myers@Sun.COM     {ACPI_EXD_FIELD,    0,                                              NULL},
280*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
281*7851SDana.Myers@Sun.COM };
282*7851SDana.Myers@Sun.COM 
283*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpRegionField[3] =
284*7851SDana.Myers@Sun.COM {
285*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
286*7851SDana.Myers@Sun.COM     {ACPI_EXD_FIELD,    0,                                              NULL},
287*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"}
288*7851SDana.Myers@Sun.COM };
289*7851SDana.Myers@Sun.COM 
290*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
291*7851SDana.Myers@Sun.COM {
292*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
293*7851SDana.Myers@Sun.COM     {ACPI_EXD_FIELD,    0,                                              NULL},
294*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (BankField.Value),              "Value"},
295*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.RegionObj),          "Region Object"},
296*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.BankObj),            "Bank Object"}
297*7851SDana.Myers@Sun.COM };
298*7851SDana.Myers@Sun.COM 
299*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
300*7851SDana.Myers@Sun.COM {
301*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
302*7851SDana.Myers@Sun.COM     {ACPI_EXD_FIELD,    0,                                              NULL},
303*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (IndexField.Value),             "Value"},
304*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.IndexObj),          "Index Object"},
305*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
306*7851SDana.Myers@Sun.COM };
307*7851SDana.Myers@Sun.COM 
308*7851SDana.Myers@Sun.COM 
309*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpReference[8] =
310*7851SDana.Myers@Sun.COM {
311*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpReference),       NULL},
312*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.Class),              "Class"},
313*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.TargetType),         "Target Type"},
314*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Reference.Value),              "Value"},
315*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
316*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Node),               "Node"},
317*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
318*7851SDana.Myers@Sun.COM     {ACPI_EXD_REFERENCE,0,                                              NULL}
319*7851SDana.Myers@Sun.COM };
320*7851SDana.Myers@Sun.COM 
321*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
322*7851SDana.Myers@Sun.COM {
323*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
324*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (AddressSpace.SpaceId),         "Space Id"},
325*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
326*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
327*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
328*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
329*7851SDana.Myers@Sun.COM };
330*7851SDana.Myers@Sun.COM 
331*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpNotify[3] =
332*7851SDana.Myers@Sun.COM {
333*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
334*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
335*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"}
336*7851SDana.Myers@Sun.COM };
337*7851SDana.Myers@Sun.COM 
338*7851SDana.Myers@Sun.COM 
339*7851SDana.Myers@Sun.COM /* Miscellaneous tables */
340*7851SDana.Myers@Sun.COM 
341*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpCommon[4] =
342*7851SDana.Myers@Sun.COM {
343*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon),         NULL},
344*7851SDana.Myers@Sun.COM     {ACPI_EXD_TYPE ,    0,                                              NULL},
345*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Common.ReferenceCount),        "Reference Count"},
346*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"}
347*7851SDana.Myers@Sun.COM };
348*7851SDana.Myers@Sun.COM 
349*7851SDana.Myers@Sun.COM 
350*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
351*7851SDana.Myers@Sun.COM {
352*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon),    NULL},
353*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.FieldFlags),       "Field Flags"},
354*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.AccessByteWidth),  "Access Byte Width"},
355*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
356*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
357*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
358*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
359*7851SDana.Myers@Sun.COM };
360*7851SDana.Myers@Sun.COM 
361*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     AcpiExDumpNode[5] =
362*7851SDana.Myers@Sun.COM {
363*7851SDana.Myers@Sun.COM     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
364*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
365*7851SDana.Myers@Sun.COM     {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
366*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_NSOFFSET (Child),                      "Child List"},
367*7851SDana.Myers@Sun.COM     {ACPI_EXD_POINTER,  ACPI_EXD_NSOFFSET (Peer),                       "Next Peer"}
368*7851SDana.Myers@Sun.COM };
369*7851SDana.Myers@Sun.COM 
370*7851SDana.Myers@Sun.COM 
371*7851SDana.Myers@Sun.COM /* Dispatch table, indexed by object type */
372*7851SDana.Myers@Sun.COM 
373*7851SDana.Myers@Sun.COM static ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
374*7851SDana.Myers@Sun.COM {
375*7851SDana.Myers@Sun.COM     NULL,
376*7851SDana.Myers@Sun.COM     AcpiExDumpInteger,
377*7851SDana.Myers@Sun.COM     AcpiExDumpString,
378*7851SDana.Myers@Sun.COM     AcpiExDumpBuffer,
379*7851SDana.Myers@Sun.COM     AcpiExDumpPackage,
380*7851SDana.Myers@Sun.COM     NULL,
381*7851SDana.Myers@Sun.COM     AcpiExDumpDevice,
382*7851SDana.Myers@Sun.COM     AcpiExDumpEvent,
383*7851SDana.Myers@Sun.COM     AcpiExDumpMethod,
384*7851SDana.Myers@Sun.COM     AcpiExDumpMutex,
385*7851SDana.Myers@Sun.COM     AcpiExDumpRegion,
386*7851SDana.Myers@Sun.COM     AcpiExDumpPower,
387*7851SDana.Myers@Sun.COM     AcpiExDumpProcessor,
388*7851SDana.Myers@Sun.COM     AcpiExDumpThermal,
389*7851SDana.Myers@Sun.COM     AcpiExDumpBufferField,
390*7851SDana.Myers@Sun.COM     NULL,
391*7851SDana.Myers@Sun.COM     NULL,
392*7851SDana.Myers@Sun.COM     AcpiExDumpRegionField,
393*7851SDana.Myers@Sun.COM     AcpiExDumpBankField,
394*7851SDana.Myers@Sun.COM     AcpiExDumpIndexField,
395*7851SDana.Myers@Sun.COM     AcpiExDumpReference,
396*7851SDana.Myers@Sun.COM     NULL,
397*7851SDana.Myers@Sun.COM     NULL,
398*7851SDana.Myers@Sun.COM     AcpiExDumpNotify,
399*7851SDana.Myers@Sun.COM     AcpiExDumpAddressHandler,
400*7851SDana.Myers@Sun.COM     NULL,
401*7851SDana.Myers@Sun.COM     NULL,
402*7851SDana.Myers@Sun.COM     NULL
403*7851SDana.Myers@Sun.COM };
404*7851SDana.Myers@Sun.COM 
405*7851SDana.Myers@Sun.COM 
406*7851SDana.Myers@Sun.COM /*******************************************************************************
407*7851SDana.Myers@Sun.COM  *
408*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiExDumpObject
409*7851SDana.Myers@Sun.COM  *
410*7851SDana.Myers@Sun.COM  * PARAMETERS:  ObjDesc             - Descriptor to dump
411*7851SDana.Myers@Sun.COM  *              Info                - Info table corresponding to this object
412*7851SDana.Myers@Sun.COM  *                                    type
413*7851SDana.Myers@Sun.COM  *
414*7851SDana.Myers@Sun.COM  * RETURN:      None
415*7851SDana.Myers@Sun.COM  *
416*7851SDana.Myers@Sun.COM  * DESCRIPTION: Walk the info table for this object
417*7851SDana.Myers@Sun.COM  *
418*7851SDana.Myers@Sun.COM  ******************************************************************************/
419*7851SDana.Myers@Sun.COM 
420*7851SDana.Myers@Sun.COM static void
421*7851SDana.Myers@Sun.COM AcpiExDumpObject (
422*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *ObjDesc,
423*7851SDana.Myers@Sun.COM     ACPI_EXDUMP_INFO        *Info)
424*7851SDana.Myers@Sun.COM {
425*7851SDana.Myers@Sun.COM     UINT8                   *Target;
426*7851SDana.Myers@Sun.COM     char                    *Name;
427*7851SDana.Myers@Sun.COM     UINT8                   Count;
428*7851SDana.Myers@Sun.COM 
429*7851SDana.Myers@Sun.COM 
430*7851SDana.Myers@Sun.COM     if (!Info)
431*7851SDana.Myers@Sun.COM     {
432*7851SDana.Myers@Sun.COM         AcpiOsPrintf (
433*7851SDana.Myers@Sun.COM             "ExDumpObject: Display not implemented for object type %s\n",
434*7851SDana.Myers@Sun.COM             AcpiUtGetObjectTypeName (ObjDesc));
435*7851SDana.Myers@Sun.COM         return;
436*7851SDana.Myers@Sun.COM     }
437*7851SDana.Myers@Sun.COM 
438*7851SDana.Myers@Sun.COM     /* First table entry must contain the table length (# of table entries) */
439*7851SDana.Myers@Sun.COM 
440*7851SDana.Myers@Sun.COM     Count = Info->Offset;
441*7851SDana.Myers@Sun.COM 
442*7851SDana.Myers@Sun.COM     while (Count)
443*7851SDana.Myers@Sun.COM     {
444*7851SDana.Myers@Sun.COM         Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
445*7851SDana.Myers@Sun.COM         Name = Info->Name;
446*7851SDana.Myers@Sun.COM 
447*7851SDana.Myers@Sun.COM         switch (Info->Opcode)
448*7851SDana.Myers@Sun.COM         {
449*7851SDana.Myers@Sun.COM         case ACPI_EXD_INIT:
450*7851SDana.Myers@Sun.COM             break;
451*7851SDana.Myers@Sun.COM 
452*7851SDana.Myers@Sun.COM         case ACPI_EXD_TYPE:
453*7851SDana.Myers@Sun.COM             AcpiExOutString  ("Type", AcpiUtGetObjectTypeName (ObjDesc));
454*7851SDana.Myers@Sun.COM             break;
455*7851SDana.Myers@Sun.COM 
456*7851SDana.Myers@Sun.COM         case ACPI_EXD_UINT8:
457*7851SDana.Myers@Sun.COM 
458*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
459*7851SDana.Myers@Sun.COM             break;
460*7851SDana.Myers@Sun.COM 
461*7851SDana.Myers@Sun.COM         case ACPI_EXD_UINT16:
462*7851SDana.Myers@Sun.COM 
463*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
464*7851SDana.Myers@Sun.COM             break;
465*7851SDana.Myers@Sun.COM 
466*7851SDana.Myers@Sun.COM         case ACPI_EXD_UINT32:
467*7851SDana.Myers@Sun.COM 
468*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
469*7851SDana.Myers@Sun.COM             break;
470*7851SDana.Myers@Sun.COM 
471*7851SDana.Myers@Sun.COM         case ACPI_EXD_UINT64:
472*7851SDana.Myers@Sun.COM 
473*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
474*7851SDana.Myers@Sun.COM                     ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
475*7851SDana.Myers@Sun.COM             break;
476*7851SDana.Myers@Sun.COM 
477*7851SDana.Myers@Sun.COM         case ACPI_EXD_POINTER:
478*7851SDana.Myers@Sun.COM         case ACPI_EXD_ADDRESS:
479*7851SDana.Myers@Sun.COM 
480*7851SDana.Myers@Sun.COM             AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
481*7851SDana.Myers@Sun.COM             break;
482*7851SDana.Myers@Sun.COM 
483*7851SDana.Myers@Sun.COM         case ACPI_EXD_STRING:
484*7851SDana.Myers@Sun.COM 
485*7851SDana.Myers@Sun.COM             AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
486*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("\n");
487*7851SDana.Myers@Sun.COM             break;
488*7851SDana.Myers@Sun.COM 
489*7851SDana.Myers@Sun.COM         case ACPI_EXD_BUFFER:
490*7851SDana.Myers@Sun.COM 
491*7851SDana.Myers@Sun.COM             ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
492*7851SDana.Myers@Sun.COM             break;
493*7851SDana.Myers@Sun.COM 
494*7851SDana.Myers@Sun.COM         case ACPI_EXD_PACKAGE:
495*7851SDana.Myers@Sun.COM 
496*7851SDana.Myers@Sun.COM             /* Dump the package contents */
497*7851SDana.Myers@Sun.COM 
498*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("\nPackage Contents:\n");
499*7851SDana.Myers@Sun.COM             AcpiExDumpPackageObj (ObjDesc, 0, 0);
500*7851SDana.Myers@Sun.COM             break;
501*7851SDana.Myers@Sun.COM 
502*7851SDana.Myers@Sun.COM         case ACPI_EXD_FIELD:
503*7851SDana.Myers@Sun.COM 
504*7851SDana.Myers@Sun.COM             AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
505*7851SDana.Myers@Sun.COM             break;
506*7851SDana.Myers@Sun.COM 
507*7851SDana.Myers@Sun.COM         case ACPI_EXD_REFERENCE:
508*7851SDana.Myers@Sun.COM 
509*7851SDana.Myers@Sun.COM             AcpiExOutString ("Class Name", (char *) AcpiUtGetReferenceName (ObjDesc));
510*7851SDana.Myers@Sun.COM             AcpiExDumpReferenceObj (ObjDesc);
511*7851SDana.Myers@Sun.COM             break;
512*7851SDana.Myers@Sun.COM 
513*7851SDana.Myers@Sun.COM         default:
514*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", Info->Opcode);
515*7851SDana.Myers@Sun.COM             return;
516*7851SDana.Myers@Sun.COM         }
517*7851SDana.Myers@Sun.COM 
518*7851SDana.Myers@Sun.COM         Info++;
519*7851SDana.Myers@Sun.COM         Count--;
520*7851SDana.Myers@Sun.COM     }
521*7851SDana.Myers@Sun.COM }
522*7851SDana.Myers@Sun.COM 
523*7851SDana.Myers@Sun.COM 
524*7851SDana.Myers@Sun.COM /*******************************************************************************
525*7851SDana.Myers@Sun.COM  *
526*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiExDumpOperand
527*7851SDana.Myers@Sun.COM  *
528*7851SDana.Myers@Sun.COM  * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped
529*7851SDana.Myers@Sun.COM  *              Depth           - Current nesting depth
530*7851SDana.Myers@Sun.COM  *
531*7851SDana.Myers@Sun.COM  * RETURN:      None
532*7851SDana.Myers@Sun.COM  *
533*7851SDana.Myers@Sun.COM  * DESCRIPTION: Dump an operand object
534*7851SDana.Myers@Sun.COM  *
535*7851SDana.Myers@Sun.COM  ******************************************************************************/
536*7851SDana.Myers@Sun.COM 
537*7851SDana.Myers@Sun.COM void
538*7851SDana.Myers@Sun.COM AcpiExDumpOperand (
539*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *ObjDesc,
540*7851SDana.Myers@Sun.COM     UINT32                  Depth)
541*7851SDana.Myers@Sun.COM {
542*7851SDana.Myers@Sun.COM     UINT32                  Length;
543*7851SDana.Myers@Sun.COM     UINT32                  Index;
544*7851SDana.Myers@Sun.COM 
545*7851SDana.Myers@Sun.COM 
546*7851SDana.Myers@Sun.COM     ACPI_FUNCTION_NAME (ExDumpOperand)
547*7851SDana.Myers@Sun.COM 
548*7851SDana.Myers@Sun.COM 
549*7851SDana.Myers@Sun.COM     if (!((ACPI_LV_EXEC & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
550*7851SDana.Myers@Sun.COM     {
551*7851SDana.Myers@Sun.COM         return;
552*7851SDana.Myers@Sun.COM     }
553*7851SDana.Myers@Sun.COM 
554*7851SDana.Myers@Sun.COM     if (!ObjDesc)
555*7851SDana.Myers@Sun.COM     {
556*7851SDana.Myers@Sun.COM         /* This could be a null element of a package */
557*7851SDana.Myers@Sun.COM 
558*7851SDana.Myers@Sun.COM         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
559*7851SDana.Myers@Sun.COM         return;
560*7851SDana.Myers@Sun.COM     }
561*7851SDana.Myers@Sun.COM 
562*7851SDana.Myers@Sun.COM     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
563*7851SDana.Myers@Sun.COM     {
564*7851SDana.Myers@Sun.COM         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
565*7851SDana.Myers@Sun.COM         ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
566*7851SDana.Myers@Sun.COM         return;
567*7851SDana.Myers@Sun.COM     }
568*7851SDana.Myers@Sun.COM 
569*7851SDana.Myers@Sun.COM     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
570*7851SDana.Myers@Sun.COM     {
571*7851SDana.Myers@Sun.COM         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
572*7851SDana.Myers@Sun.COM             "%p is not a node or operand object: [%s]\n",
573*7851SDana.Myers@Sun.COM             ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
574*7851SDana.Myers@Sun.COM         ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
575*7851SDana.Myers@Sun.COM         return;
576*7851SDana.Myers@Sun.COM     }
577*7851SDana.Myers@Sun.COM 
578*7851SDana.Myers@Sun.COM     /* ObjDesc is a valid object */
579*7851SDana.Myers@Sun.COM 
580*7851SDana.Myers@Sun.COM     if (Depth > 0)
581*7851SDana.Myers@Sun.COM     {
582*7851SDana.Myers@Sun.COM         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
583*7851SDana.Myers@Sun.COM             Depth, " ", Depth, ObjDesc));
584*7851SDana.Myers@Sun.COM     }
585*7851SDana.Myers@Sun.COM     else
586*7851SDana.Myers@Sun.COM     {
587*7851SDana.Myers@Sun.COM         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
588*7851SDana.Myers@Sun.COM     }
589*7851SDana.Myers@Sun.COM 
590*7851SDana.Myers@Sun.COM     /* Decode object type */
591*7851SDana.Myers@Sun.COM 
592*7851SDana.Myers@Sun.COM     switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
593*7851SDana.Myers@Sun.COM     {
594*7851SDana.Myers@Sun.COM     case ACPI_TYPE_LOCAL_REFERENCE:
595*7851SDana.Myers@Sun.COM 
596*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Reference: [%s] ", AcpiUtGetReferenceName (ObjDesc));
597*7851SDana.Myers@Sun.COM 
598*7851SDana.Myers@Sun.COM         switch (ObjDesc->Reference.Class)
599*7851SDana.Myers@Sun.COM         {
600*7851SDana.Myers@Sun.COM         case ACPI_REFCLASS_DEBUG:
601*7851SDana.Myers@Sun.COM 
602*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("\n");
603*7851SDana.Myers@Sun.COM             break;
604*7851SDana.Myers@Sun.COM 
605*7851SDana.Myers@Sun.COM 
606*7851SDana.Myers@Sun.COM         case ACPI_REFCLASS_INDEX:
607*7851SDana.Myers@Sun.COM 
608*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
609*7851SDana.Myers@Sun.COM             break;
610*7851SDana.Myers@Sun.COM 
611*7851SDana.Myers@Sun.COM 
612*7851SDana.Myers@Sun.COM         case ACPI_REFCLASS_TABLE:
613*7851SDana.Myers@Sun.COM 
614*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
615*7851SDana.Myers@Sun.COM             break;
616*7851SDana.Myers@Sun.COM 
617*7851SDana.Myers@Sun.COM 
618*7851SDana.Myers@Sun.COM         case ACPI_REFCLASS_REFOF:
619*7851SDana.Myers@Sun.COM 
620*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
621*7851SDana.Myers@Sun.COM                 AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
622*7851SDana.Myers@Sun.COM                     ObjDesc->Reference.Object)->Common.Type));
623*7851SDana.Myers@Sun.COM             break;
624*7851SDana.Myers@Sun.COM 
625*7851SDana.Myers@Sun.COM 
626*7851SDana.Myers@Sun.COM         case ACPI_REFCLASS_ARG:
627*7851SDana.Myers@Sun.COM 
628*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%X", ObjDesc->Reference.Value);
629*7851SDana.Myers@Sun.COM 
630*7851SDana.Myers@Sun.COM             if (ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_INTEGER)
631*7851SDana.Myers@Sun.COM             {
632*7851SDana.Myers@Sun.COM                 /* Value is an Integer */
633*7851SDana.Myers@Sun.COM 
634*7851SDana.Myers@Sun.COM                 AcpiOsPrintf (" value is [%8.8X%8.8x]",
635*7851SDana.Myers@Sun.COM                     ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
636*7851SDana.Myers@Sun.COM             }
637*7851SDana.Myers@Sun.COM 
638*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("\n");
639*7851SDana.Myers@Sun.COM             break;
640*7851SDana.Myers@Sun.COM 
641*7851SDana.Myers@Sun.COM 
642*7851SDana.Myers@Sun.COM         case ACPI_REFCLASS_LOCAL:
643*7851SDana.Myers@Sun.COM 
644*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%X", ObjDesc->Reference.Value);
645*7851SDana.Myers@Sun.COM 
646*7851SDana.Myers@Sun.COM             if (ACPI_GET_OBJECT_TYPE (ObjDesc) == ACPI_TYPE_INTEGER)
647*7851SDana.Myers@Sun.COM             {
648*7851SDana.Myers@Sun.COM                 /* Value is an Integer */
649*7851SDana.Myers@Sun.COM 
650*7851SDana.Myers@Sun.COM                 AcpiOsPrintf (" value is [%8.8X%8.8x]",
651*7851SDana.Myers@Sun.COM                     ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
652*7851SDana.Myers@Sun.COM             }
653*7851SDana.Myers@Sun.COM 
654*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("\n");
655*7851SDana.Myers@Sun.COM             break;
656*7851SDana.Myers@Sun.COM 
657*7851SDana.Myers@Sun.COM 
658*7851SDana.Myers@Sun.COM         case ACPI_REFCLASS_NAME:
659*7851SDana.Myers@Sun.COM 
660*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("- [%4.4s]\n", ObjDesc->Reference.Node->Name.Ascii);
661*7851SDana.Myers@Sun.COM             break;
662*7851SDana.Myers@Sun.COM 
663*7851SDana.Myers@Sun.COM 
664*7851SDana.Myers@Sun.COM         default:    /* Unknown reference class */
665*7851SDana.Myers@Sun.COM 
666*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
667*7851SDana.Myers@Sun.COM             break;
668*7851SDana.Myers@Sun.COM         }
669*7851SDana.Myers@Sun.COM         break;
670*7851SDana.Myers@Sun.COM 
671*7851SDana.Myers@Sun.COM 
672*7851SDana.Myers@Sun.COM     case ACPI_TYPE_BUFFER:
673*7851SDana.Myers@Sun.COM 
674*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Buffer length %.2X @ %p\n",
675*7851SDana.Myers@Sun.COM             ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
676*7851SDana.Myers@Sun.COM 
677*7851SDana.Myers@Sun.COM 
678*7851SDana.Myers@Sun.COM         /* Debug only -- dump the buffer contents */
679*7851SDana.Myers@Sun.COM 
680*7851SDana.Myers@Sun.COM         if (ObjDesc->Buffer.Pointer)
681*7851SDana.Myers@Sun.COM         {
682*7851SDana.Myers@Sun.COM             Length = ObjDesc->Buffer.Length;
683*7851SDana.Myers@Sun.COM             if (Length > 128)
684*7851SDana.Myers@Sun.COM             {
685*7851SDana.Myers@Sun.COM                 Length = 128;
686*7851SDana.Myers@Sun.COM             }
687*7851SDana.Myers@Sun.COM 
688*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("Buffer Contents: (displaying length 0x%.2X)\n", Length);
689*7851SDana.Myers@Sun.COM             ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
690*7851SDana.Myers@Sun.COM         }
691*7851SDana.Myers@Sun.COM         break;
692*7851SDana.Myers@Sun.COM 
693*7851SDana.Myers@Sun.COM 
694*7851SDana.Myers@Sun.COM     case ACPI_TYPE_INTEGER:
695*7851SDana.Myers@Sun.COM 
696*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Integer %8.8X%8.8X\n",
697*7851SDana.Myers@Sun.COM             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
698*7851SDana.Myers@Sun.COM         break;
699*7851SDana.Myers@Sun.COM 
700*7851SDana.Myers@Sun.COM 
701*7851SDana.Myers@Sun.COM     case ACPI_TYPE_PACKAGE:
702*7851SDana.Myers@Sun.COM 
703*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
704*7851SDana.Myers@Sun.COM             ObjDesc->Package.Count, ObjDesc->Package.Elements);
705*7851SDana.Myers@Sun.COM 
706*7851SDana.Myers@Sun.COM         /*
707*7851SDana.Myers@Sun.COM          * If elements exist, package element pointer is valid,
708*7851SDana.Myers@Sun.COM          * and debug_level exceeds 1, dump package's elements.
709*7851SDana.Myers@Sun.COM          */
710*7851SDana.Myers@Sun.COM         if (ObjDesc->Package.Count &&
711*7851SDana.Myers@Sun.COM             ObjDesc->Package.Elements &&
712*7851SDana.Myers@Sun.COM             AcpiDbgLevel > 1)
713*7851SDana.Myers@Sun.COM         {
714*7851SDana.Myers@Sun.COM             for (Index = 0; Index < ObjDesc->Package.Count; Index++)
715*7851SDana.Myers@Sun.COM             {
716*7851SDana.Myers@Sun.COM                 AcpiExDumpOperand (ObjDesc->Package.Elements[Index], Depth+1);
717*7851SDana.Myers@Sun.COM             }
718*7851SDana.Myers@Sun.COM         }
719*7851SDana.Myers@Sun.COM         break;
720*7851SDana.Myers@Sun.COM 
721*7851SDana.Myers@Sun.COM 
722*7851SDana.Myers@Sun.COM     case ACPI_TYPE_REGION:
723*7851SDana.Myers@Sun.COM 
724*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Region %s (%X)",
725*7851SDana.Myers@Sun.COM             AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
726*7851SDana.Myers@Sun.COM             ObjDesc->Region.SpaceId);
727*7851SDana.Myers@Sun.COM 
728*7851SDana.Myers@Sun.COM         /*
729*7851SDana.Myers@Sun.COM          * If the address and length have not been evaluated,
730*7851SDana.Myers@Sun.COM          * don't print them.
731*7851SDana.Myers@Sun.COM          */
732*7851SDana.Myers@Sun.COM         if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
733*7851SDana.Myers@Sun.COM         {
734*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("\n");
735*7851SDana.Myers@Sun.COM         }
736*7851SDana.Myers@Sun.COM         else
737*7851SDana.Myers@Sun.COM         {
738*7851SDana.Myers@Sun.COM             AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
739*7851SDana.Myers@Sun.COM                 ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address),
740*7851SDana.Myers@Sun.COM                 ObjDesc->Region.Length);
741*7851SDana.Myers@Sun.COM         }
742*7851SDana.Myers@Sun.COM         break;
743*7851SDana.Myers@Sun.COM 
744*7851SDana.Myers@Sun.COM 
745*7851SDana.Myers@Sun.COM     case ACPI_TYPE_STRING:
746*7851SDana.Myers@Sun.COM 
747*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("String length %X @ %p ",
748*7851SDana.Myers@Sun.COM             ObjDesc->String.Length,
749*7851SDana.Myers@Sun.COM             ObjDesc->String.Pointer);
750*7851SDana.Myers@Sun.COM 
751*7851SDana.Myers@Sun.COM         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
752*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("\n");
753*7851SDana.Myers@Sun.COM         break;
754*7851SDana.Myers@Sun.COM 
755*7851SDana.Myers@Sun.COM 
756*7851SDana.Myers@Sun.COM     case ACPI_TYPE_LOCAL_BANK_FIELD:
757*7851SDana.Myers@Sun.COM 
758*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("BankField\n");
759*7851SDana.Myers@Sun.COM         break;
760*7851SDana.Myers@Sun.COM 
761*7851SDana.Myers@Sun.COM 
762*7851SDana.Myers@Sun.COM     case ACPI_TYPE_LOCAL_REGION_FIELD:
763*7851SDana.Myers@Sun.COM 
764*7851SDana.Myers@Sun.COM         AcpiOsPrintf (
765*7851SDana.Myers@Sun.COM             "RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",
766*7851SDana.Myers@Sun.COM             ObjDesc->Field.BitLength,
767*7851SDana.Myers@Sun.COM             ObjDesc->Field.AccessByteWidth,
768*7851SDana.Myers@Sun.COM             ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
769*7851SDana.Myers@Sun.COM             ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
770*7851SDana.Myers@Sun.COM             ObjDesc->Field.BaseByteOffset,
771*7851SDana.Myers@Sun.COM             ObjDesc->Field.StartFieldBitOffset);
772*7851SDana.Myers@Sun.COM 
773*7851SDana.Myers@Sun.COM         AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1);
774*7851SDana.Myers@Sun.COM         break;
775*7851SDana.Myers@Sun.COM 
776*7851SDana.Myers@Sun.COM 
777*7851SDana.Myers@Sun.COM     case ACPI_TYPE_LOCAL_INDEX_FIELD:
778*7851SDana.Myers@Sun.COM 
779*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("IndexField\n");
780*7851SDana.Myers@Sun.COM         break;
781*7851SDana.Myers@Sun.COM 
782*7851SDana.Myers@Sun.COM 
783*7851SDana.Myers@Sun.COM     case ACPI_TYPE_BUFFER_FIELD:
784*7851SDana.Myers@Sun.COM 
785*7851SDana.Myers@Sun.COM         AcpiOsPrintf (
786*7851SDana.Myers@Sun.COM             "BufferField: %X bits at byte %X bit %X of\n",
787*7851SDana.Myers@Sun.COM             ObjDesc->BufferField.BitLength,
788*7851SDana.Myers@Sun.COM             ObjDesc->BufferField.BaseByteOffset,
789*7851SDana.Myers@Sun.COM             ObjDesc->BufferField.StartFieldBitOffset);
790*7851SDana.Myers@Sun.COM 
791*7851SDana.Myers@Sun.COM         if (!ObjDesc->BufferField.BufferObj)
792*7851SDana.Myers@Sun.COM         {
793*7851SDana.Myers@Sun.COM             ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
794*7851SDana.Myers@Sun.COM         }
795*7851SDana.Myers@Sun.COM         else if (ACPI_GET_OBJECT_TYPE (ObjDesc->BufferField.BufferObj) !=
796*7851SDana.Myers@Sun.COM                     ACPI_TYPE_BUFFER)
797*7851SDana.Myers@Sun.COM         {
798*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("*not a Buffer*\n");
799*7851SDana.Myers@Sun.COM         }
800*7851SDana.Myers@Sun.COM         else
801*7851SDana.Myers@Sun.COM         {
802*7851SDana.Myers@Sun.COM             AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth+1);
803*7851SDana.Myers@Sun.COM         }
804*7851SDana.Myers@Sun.COM         break;
805*7851SDana.Myers@Sun.COM 
806*7851SDana.Myers@Sun.COM 
807*7851SDana.Myers@Sun.COM     case ACPI_TYPE_EVENT:
808*7851SDana.Myers@Sun.COM 
809*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Event\n");
810*7851SDana.Myers@Sun.COM         break;
811*7851SDana.Myers@Sun.COM 
812*7851SDana.Myers@Sun.COM 
813*7851SDana.Myers@Sun.COM     case ACPI_TYPE_METHOD:
814*7851SDana.Myers@Sun.COM 
815*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Method(%X) @ %p:%X\n",
816*7851SDana.Myers@Sun.COM             ObjDesc->Method.ParamCount,
817*7851SDana.Myers@Sun.COM             ObjDesc->Method.AmlStart,
818*7851SDana.Myers@Sun.COM             ObjDesc->Method.AmlLength);
819*7851SDana.Myers@Sun.COM         break;
820*7851SDana.Myers@Sun.COM 
821*7851SDana.Myers@Sun.COM 
822*7851SDana.Myers@Sun.COM     case ACPI_TYPE_MUTEX:
823*7851SDana.Myers@Sun.COM 
824*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Mutex\n");
825*7851SDana.Myers@Sun.COM         break;
826*7851SDana.Myers@Sun.COM 
827*7851SDana.Myers@Sun.COM 
828*7851SDana.Myers@Sun.COM     case ACPI_TYPE_DEVICE:
829*7851SDana.Myers@Sun.COM 
830*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Device\n");
831*7851SDana.Myers@Sun.COM         break;
832*7851SDana.Myers@Sun.COM 
833*7851SDana.Myers@Sun.COM 
834*7851SDana.Myers@Sun.COM     case ACPI_TYPE_POWER:
835*7851SDana.Myers@Sun.COM 
836*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Power\n");
837*7851SDana.Myers@Sun.COM         break;
838*7851SDana.Myers@Sun.COM 
839*7851SDana.Myers@Sun.COM 
840*7851SDana.Myers@Sun.COM     case ACPI_TYPE_PROCESSOR:
841*7851SDana.Myers@Sun.COM 
842*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Processor\n");
843*7851SDana.Myers@Sun.COM         break;
844*7851SDana.Myers@Sun.COM 
845*7851SDana.Myers@Sun.COM 
846*7851SDana.Myers@Sun.COM     case ACPI_TYPE_THERMAL:
847*7851SDana.Myers@Sun.COM 
848*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Thermal\n");
849*7851SDana.Myers@Sun.COM         break;
850*7851SDana.Myers@Sun.COM 
851*7851SDana.Myers@Sun.COM 
852*7851SDana.Myers@Sun.COM     default:
853*7851SDana.Myers@Sun.COM         /* Unknown Type */
854*7851SDana.Myers@Sun.COM 
855*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("Unknown Type %X\n", ACPI_GET_OBJECT_TYPE (ObjDesc));
856*7851SDana.Myers@Sun.COM         break;
857*7851SDana.Myers@Sun.COM     }
858*7851SDana.Myers@Sun.COM 
859*7851SDana.Myers@Sun.COM     return;
860*7851SDana.Myers@Sun.COM }
861*7851SDana.Myers@Sun.COM 
862*7851SDana.Myers@Sun.COM 
863*7851SDana.Myers@Sun.COM /*******************************************************************************
864*7851SDana.Myers@Sun.COM  *
865*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiExDumpOperands
866*7851SDana.Myers@Sun.COM  *
867*7851SDana.Myers@Sun.COM  * PARAMETERS:  Operands            - A list of Operand objects
868*7851SDana.Myers@Sun.COM  *              OpcodeName          - AML opcode name
869*7851SDana.Myers@Sun.COM  *              NumOperands         - Operand count for this opcode
870*7851SDana.Myers@Sun.COM  *
871*7851SDana.Myers@Sun.COM  * DESCRIPTION: Dump the operands associated with the opcode
872*7851SDana.Myers@Sun.COM  *
873*7851SDana.Myers@Sun.COM  ******************************************************************************/
874*7851SDana.Myers@Sun.COM 
875*7851SDana.Myers@Sun.COM void
876*7851SDana.Myers@Sun.COM AcpiExDumpOperands (
877*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     **Operands,
878*7851SDana.Myers@Sun.COM     const char              *OpcodeName,
879*7851SDana.Myers@Sun.COM     UINT32                  NumOperands)
880*7851SDana.Myers@Sun.COM {
881*7851SDana.Myers@Sun.COM     ACPI_FUNCTION_NAME (ExDumpOperands);
882*7851SDana.Myers@Sun.COM 
883*7851SDana.Myers@Sun.COM 
884*7851SDana.Myers@Sun.COM     if (!OpcodeName)
885*7851SDana.Myers@Sun.COM     {
886*7851SDana.Myers@Sun.COM         OpcodeName = "UNKNOWN";
887*7851SDana.Myers@Sun.COM     }
888*7851SDana.Myers@Sun.COM 
889*7851SDana.Myers@Sun.COM     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
890*7851SDana.Myers@Sun.COM         "**** Start operand dump for opcode [%s], %d operands\n",
891*7851SDana.Myers@Sun.COM         OpcodeName, NumOperands));
892*7851SDana.Myers@Sun.COM 
893*7851SDana.Myers@Sun.COM     if (NumOperands == 0)
894*7851SDana.Myers@Sun.COM     {
895*7851SDana.Myers@Sun.COM         NumOperands = 1;
896*7851SDana.Myers@Sun.COM     }
897*7851SDana.Myers@Sun.COM 
898*7851SDana.Myers@Sun.COM     /* Dump the individual operands */
899*7851SDana.Myers@Sun.COM 
900*7851SDana.Myers@Sun.COM     while (NumOperands)
901*7851SDana.Myers@Sun.COM     {
902*7851SDana.Myers@Sun.COM         AcpiExDumpOperand (*Operands, 0);
903*7851SDana.Myers@Sun.COM         Operands++;
904*7851SDana.Myers@Sun.COM         NumOperands--;
905*7851SDana.Myers@Sun.COM     }
906*7851SDana.Myers@Sun.COM 
907*7851SDana.Myers@Sun.COM     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
908*7851SDana.Myers@Sun.COM         "**** End operand dump for [%s]\n", OpcodeName));
909*7851SDana.Myers@Sun.COM     return;
910*7851SDana.Myers@Sun.COM }
911*7851SDana.Myers@Sun.COM 
912*7851SDana.Myers@Sun.COM 
913*7851SDana.Myers@Sun.COM /*******************************************************************************
914*7851SDana.Myers@Sun.COM  *
915*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiExOut* functions
916*7851SDana.Myers@Sun.COM  *
917*7851SDana.Myers@Sun.COM  * PARAMETERS:  Title               - Descriptive text
918*7851SDana.Myers@Sun.COM  *              Value               - Value to be displayed
919*7851SDana.Myers@Sun.COM  *
920*7851SDana.Myers@Sun.COM  * DESCRIPTION: Object dump output formatting functions.  These functions
921*7851SDana.Myers@Sun.COM  *              reduce the number of format strings required and keeps them
922*7851SDana.Myers@Sun.COM  *              all in one place for easy modification.
923*7851SDana.Myers@Sun.COM  *
924*7851SDana.Myers@Sun.COM  ******************************************************************************/
925*7851SDana.Myers@Sun.COM 
926*7851SDana.Myers@Sun.COM static void
927*7851SDana.Myers@Sun.COM AcpiExOutString (
928*7851SDana.Myers@Sun.COM     char                    *Title,
929*7851SDana.Myers@Sun.COM     char                    *Value)
930*7851SDana.Myers@Sun.COM {
931*7851SDana.Myers@Sun.COM     AcpiOsPrintf ("%20s : %s\n", Title, Value);
932*7851SDana.Myers@Sun.COM }
933*7851SDana.Myers@Sun.COM 
934*7851SDana.Myers@Sun.COM static void
935*7851SDana.Myers@Sun.COM AcpiExOutPointer (
936*7851SDana.Myers@Sun.COM     char                    *Title,
937*7851SDana.Myers@Sun.COM     void                    *Value)
938*7851SDana.Myers@Sun.COM {
939*7851SDana.Myers@Sun.COM     AcpiOsPrintf ("%20s : %p\n", Title, Value);
940*7851SDana.Myers@Sun.COM }
941*7851SDana.Myers@Sun.COM 
942*7851SDana.Myers@Sun.COM 
943*7851SDana.Myers@Sun.COM /*******************************************************************************
944*7851SDana.Myers@Sun.COM  *
945*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiExDumpNamespaceNode
946*7851SDana.Myers@Sun.COM  *
947*7851SDana.Myers@Sun.COM  * PARAMETERS:  Node                - Descriptor to dump
948*7851SDana.Myers@Sun.COM  *              Flags               - Force display if TRUE
949*7851SDana.Myers@Sun.COM  *
950*7851SDana.Myers@Sun.COM  * DESCRIPTION: Dumps the members of the given.Node
951*7851SDana.Myers@Sun.COM  *
952*7851SDana.Myers@Sun.COM  ******************************************************************************/
953*7851SDana.Myers@Sun.COM 
954*7851SDana.Myers@Sun.COM void
955*7851SDana.Myers@Sun.COM AcpiExDumpNamespaceNode (
956*7851SDana.Myers@Sun.COM     ACPI_NAMESPACE_NODE     *Node,
957*7851SDana.Myers@Sun.COM     UINT32                  Flags)
958*7851SDana.Myers@Sun.COM {
959*7851SDana.Myers@Sun.COM 
960*7851SDana.Myers@Sun.COM     ACPI_FUNCTION_ENTRY ();
961*7851SDana.Myers@Sun.COM 
962*7851SDana.Myers@Sun.COM 
963*7851SDana.Myers@Sun.COM     if (!Flags)
964*7851SDana.Myers@Sun.COM     {
965*7851SDana.Myers@Sun.COM         if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
966*7851SDana.Myers@Sun.COM         {
967*7851SDana.Myers@Sun.COM             return;
968*7851SDana.Myers@Sun.COM         }
969*7851SDana.Myers@Sun.COM     }
970*7851SDana.Myers@Sun.COM 
971*7851SDana.Myers@Sun.COM     AcpiOsPrintf ("%20s : %4.4s\n",       "Name", AcpiUtGetNodeName (Node));
972*7851SDana.Myers@Sun.COM     AcpiExOutString  ("Type",             AcpiUtGetTypeName (Node->Type));
973*7851SDana.Myers@Sun.COM     AcpiExOutPointer ("Attached Object",  AcpiNsGetAttachedObject (Node));
974*7851SDana.Myers@Sun.COM     AcpiExOutPointer ("Parent",           AcpiNsGetParentNode (Node));
975*7851SDana.Myers@Sun.COM 
976*7851SDana.Myers@Sun.COM     AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
977*7851SDana.Myers@Sun.COM         AcpiExDumpNode);
978*7851SDana.Myers@Sun.COM }
979*7851SDana.Myers@Sun.COM 
980*7851SDana.Myers@Sun.COM 
981*7851SDana.Myers@Sun.COM /*******************************************************************************
982*7851SDana.Myers@Sun.COM  *
983*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiExDumpReferenceObj
984*7851SDana.Myers@Sun.COM  *
985*7851SDana.Myers@Sun.COM  * PARAMETERS:  Object              - Descriptor to dump
986*7851SDana.Myers@Sun.COM  *
987*7851SDana.Myers@Sun.COM  * DESCRIPTION: Dumps a reference object
988*7851SDana.Myers@Sun.COM  *
989*7851SDana.Myers@Sun.COM  ******************************************************************************/
990*7851SDana.Myers@Sun.COM 
991*7851SDana.Myers@Sun.COM static void
992*7851SDana.Myers@Sun.COM AcpiExDumpReferenceObj (
993*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *ObjDesc)
994*7851SDana.Myers@Sun.COM {
995*7851SDana.Myers@Sun.COM     ACPI_BUFFER             RetBuf;
996*7851SDana.Myers@Sun.COM     ACPI_STATUS             Status;
997*7851SDana.Myers@Sun.COM 
998*7851SDana.Myers@Sun.COM 
999*7851SDana.Myers@Sun.COM     RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1000*7851SDana.Myers@Sun.COM 
1001*7851SDana.Myers@Sun.COM     if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
1002*7851SDana.Myers@Sun.COM     {
1003*7851SDana.Myers@Sun.COM         AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
1004*7851SDana.Myers@Sun.COM 
1005*7851SDana.Myers@Sun.COM         Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf);
1006*7851SDana.Myers@Sun.COM         if (ACPI_FAILURE (Status))
1007*7851SDana.Myers@Sun.COM         {
1008*7851SDana.Myers@Sun.COM             AcpiOsPrintf (" Could not convert name to pathname\n");
1009*7851SDana.Myers@Sun.COM         }
1010*7851SDana.Myers@Sun.COM         else
1011*7851SDana.Myers@Sun.COM         {
1012*7851SDana.Myers@Sun.COM            AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
1013*7851SDana.Myers@Sun.COM            ACPI_FREE (RetBuf.Pointer);
1014*7851SDana.Myers@Sun.COM         }
1015*7851SDana.Myers@Sun.COM     }
1016*7851SDana.Myers@Sun.COM     else if (ObjDesc->Reference.Object)
1017*7851SDana.Myers@Sun.COM     {
1018*7851SDana.Myers@Sun.COM         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
1019*7851SDana.Myers@Sun.COM         {
1020*7851SDana.Myers@Sun.COM             AcpiOsPrintf (" Target: %p", ObjDesc->Reference.Object);
1021*7851SDana.Myers@Sun.COM             if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
1022*7851SDana.Myers@Sun.COM             {
1023*7851SDana.Myers@Sun.COM                 AcpiOsPrintf (" Table Index: %X\n",
1024*7851SDana.Myers@Sun.COM                     ObjDesc->Reference.Value);
1025*7851SDana.Myers@Sun.COM             }
1026*7851SDana.Myers@Sun.COM             else
1027*7851SDana.Myers@Sun.COM             {
1028*7851SDana.Myers@Sun.COM                 AcpiOsPrintf (" Target: %p [%s]\n",
1029*7851SDana.Myers@Sun.COM                     ObjDesc->Reference.Object,
1030*7851SDana.Myers@Sun.COM                     AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
1031*7851SDana.Myers@Sun.COM                         ObjDesc->Reference.Object)->Common.Type));
1032*7851SDana.Myers@Sun.COM             }
1033*7851SDana.Myers@Sun.COM         }
1034*7851SDana.Myers@Sun.COM         else
1035*7851SDana.Myers@Sun.COM         {
1036*7851SDana.Myers@Sun.COM             AcpiOsPrintf (" Target: %p\n",
1037*7851SDana.Myers@Sun.COM                 ObjDesc->Reference.Object);
1038*7851SDana.Myers@Sun.COM         }
1039*7851SDana.Myers@Sun.COM     }
1040*7851SDana.Myers@Sun.COM }
1041*7851SDana.Myers@Sun.COM 
1042*7851SDana.Myers@Sun.COM 
1043*7851SDana.Myers@Sun.COM /*******************************************************************************
1044*7851SDana.Myers@Sun.COM  *
1045*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiExDumpPackageObj
1046*7851SDana.Myers@Sun.COM  *
1047*7851SDana.Myers@Sun.COM  * PARAMETERS:  ObjDesc             - Descriptor to dump
1048*7851SDana.Myers@Sun.COM  *              Level               - Indentation Level
1049*7851SDana.Myers@Sun.COM  *              Index               - Package index for this object
1050*7851SDana.Myers@Sun.COM  *
1051*7851SDana.Myers@Sun.COM  * DESCRIPTION: Dumps the elements of the package
1052*7851SDana.Myers@Sun.COM  *
1053*7851SDana.Myers@Sun.COM  ******************************************************************************/
1054*7851SDana.Myers@Sun.COM 
1055*7851SDana.Myers@Sun.COM static void
1056*7851SDana.Myers@Sun.COM AcpiExDumpPackageObj (
1057*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *ObjDesc,
1058*7851SDana.Myers@Sun.COM     UINT32                  Level,
1059*7851SDana.Myers@Sun.COM     UINT32                  Index)
1060*7851SDana.Myers@Sun.COM {
1061*7851SDana.Myers@Sun.COM     UINT32                  i;
1062*7851SDana.Myers@Sun.COM 
1063*7851SDana.Myers@Sun.COM 
1064*7851SDana.Myers@Sun.COM     /* Indentation and index output */
1065*7851SDana.Myers@Sun.COM 
1066*7851SDana.Myers@Sun.COM     if (Level > 0)
1067*7851SDana.Myers@Sun.COM     {
1068*7851SDana.Myers@Sun.COM         for (i = 0; i < Level; i++)
1069*7851SDana.Myers@Sun.COM         {
1070*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("  ");
1071*7851SDana.Myers@Sun.COM         }
1072*7851SDana.Myers@Sun.COM 
1073*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("[%.2d] ", Index);
1074*7851SDana.Myers@Sun.COM     }
1075*7851SDana.Myers@Sun.COM 
1076*7851SDana.Myers@Sun.COM     AcpiOsPrintf ("%p ", ObjDesc);
1077*7851SDana.Myers@Sun.COM 
1078*7851SDana.Myers@Sun.COM     /* Null package elements are allowed */
1079*7851SDana.Myers@Sun.COM 
1080*7851SDana.Myers@Sun.COM     if (!ObjDesc)
1081*7851SDana.Myers@Sun.COM     {
1082*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("[Null Object]\n");
1083*7851SDana.Myers@Sun.COM         return;
1084*7851SDana.Myers@Sun.COM     }
1085*7851SDana.Myers@Sun.COM 
1086*7851SDana.Myers@Sun.COM     /* Packages may only contain a few object types */
1087*7851SDana.Myers@Sun.COM 
1088*7851SDana.Myers@Sun.COM     switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
1089*7851SDana.Myers@Sun.COM     {
1090*7851SDana.Myers@Sun.COM     case ACPI_TYPE_INTEGER:
1091*7851SDana.Myers@Sun.COM 
1092*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
1093*7851SDana.Myers@Sun.COM                     ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
1094*7851SDana.Myers@Sun.COM         break;
1095*7851SDana.Myers@Sun.COM 
1096*7851SDana.Myers@Sun.COM 
1097*7851SDana.Myers@Sun.COM     case ACPI_TYPE_STRING:
1098*7851SDana.Myers@Sun.COM 
1099*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("[String]  Value: ");
1100*7851SDana.Myers@Sun.COM         for (i = 0; i < ObjDesc->String.Length; i++)
1101*7851SDana.Myers@Sun.COM         {
1102*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("%c", ObjDesc->String.Pointer[i]);
1103*7851SDana.Myers@Sun.COM         }
1104*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("\n");
1105*7851SDana.Myers@Sun.COM         break;
1106*7851SDana.Myers@Sun.COM 
1107*7851SDana.Myers@Sun.COM 
1108*7851SDana.Myers@Sun.COM     case ACPI_TYPE_BUFFER:
1109*7851SDana.Myers@Sun.COM 
1110*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
1111*7851SDana.Myers@Sun.COM         if (ObjDesc->Buffer.Length)
1112*7851SDana.Myers@Sun.COM         {
1113*7851SDana.Myers@Sun.COM             AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
1114*7851SDana.Myers@Sun.COM                     ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
1115*7851SDana.Myers@Sun.COM         }
1116*7851SDana.Myers@Sun.COM         else
1117*7851SDana.Myers@Sun.COM         {
1118*7851SDana.Myers@Sun.COM             AcpiOsPrintf ("\n");
1119*7851SDana.Myers@Sun.COM         }
1120*7851SDana.Myers@Sun.COM         break;
1121*7851SDana.Myers@Sun.COM 
1122*7851SDana.Myers@Sun.COM 
1123*7851SDana.Myers@Sun.COM     case ACPI_TYPE_PACKAGE:
1124*7851SDana.Myers@Sun.COM 
1125*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("[Package] Contains %d Elements:\n",
1126*7851SDana.Myers@Sun.COM                 ObjDesc->Package.Count);
1127*7851SDana.Myers@Sun.COM 
1128*7851SDana.Myers@Sun.COM         for (i = 0; i < ObjDesc->Package.Count; i++)
1129*7851SDana.Myers@Sun.COM         {
1130*7851SDana.Myers@Sun.COM             AcpiExDumpPackageObj (ObjDesc->Package.Elements[i], Level+1, i);
1131*7851SDana.Myers@Sun.COM         }
1132*7851SDana.Myers@Sun.COM         break;
1133*7851SDana.Myers@Sun.COM 
1134*7851SDana.Myers@Sun.COM 
1135*7851SDana.Myers@Sun.COM     case ACPI_TYPE_LOCAL_REFERENCE:
1136*7851SDana.Myers@Sun.COM 
1137*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
1138*7851SDana.Myers@Sun.COM             AcpiUtGetReferenceName (ObjDesc),
1139*7851SDana.Myers@Sun.COM             ObjDesc->Reference.Class);
1140*7851SDana.Myers@Sun.COM         AcpiExDumpReferenceObj (ObjDesc);
1141*7851SDana.Myers@Sun.COM         break;
1142*7851SDana.Myers@Sun.COM 
1143*7851SDana.Myers@Sun.COM 
1144*7851SDana.Myers@Sun.COM     default:
1145*7851SDana.Myers@Sun.COM 
1146*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("[Unknown Type] %X\n", ACPI_GET_OBJECT_TYPE (ObjDesc));
1147*7851SDana.Myers@Sun.COM         break;
1148*7851SDana.Myers@Sun.COM     }
1149*7851SDana.Myers@Sun.COM }
1150*7851SDana.Myers@Sun.COM 
1151*7851SDana.Myers@Sun.COM 
1152*7851SDana.Myers@Sun.COM /*******************************************************************************
1153*7851SDana.Myers@Sun.COM  *
1154*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiExDumpObjectDescriptor
1155*7851SDana.Myers@Sun.COM  *
1156*7851SDana.Myers@Sun.COM  * PARAMETERS:  ObjDesc             - Descriptor to dump
1157*7851SDana.Myers@Sun.COM  *              Flags               - Force display if TRUE
1158*7851SDana.Myers@Sun.COM  *
1159*7851SDana.Myers@Sun.COM  * DESCRIPTION: Dumps the members of the object descriptor given.
1160*7851SDana.Myers@Sun.COM  *
1161*7851SDana.Myers@Sun.COM  ******************************************************************************/
1162*7851SDana.Myers@Sun.COM 
1163*7851SDana.Myers@Sun.COM void
1164*7851SDana.Myers@Sun.COM AcpiExDumpObjectDescriptor (
1165*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *ObjDesc,
1166*7851SDana.Myers@Sun.COM     UINT32                  Flags)
1167*7851SDana.Myers@Sun.COM {
1168*7851SDana.Myers@Sun.COM     ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
1169*7851SDana.Myers@Sun.COM 
1170*7851SDana.Myers@Sun.COM 
1171*7851SDana.Myers@Sun.COM     if (!ObjDesc)
1172*7851SDana.Myers@Sun.COM     {
1173*7851SDana.Myers@Sun.COM         return_VOID;
1174*7851SDana.Myers@Sun.COM     }
1175*7851SDana.Myers@Sun.COM 
1176*7851SDana.Myers@Sun.COM     if (!Flags)
1177*7851SDana.Myers@Sun.COM     {
1178*7851SDana.Myers@Sun.COM         if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
1179*7851SDana.Myers@Sun.COM         {
1180*7851SDana.Myers@Sun.COM             return_VOID;
1181*7851SDana.Myers@Sun.COM         }
1182*7851SDana.Myers@Sun.COM     }
1183*7851SDana.Myers@Sun.COM 
1184*7851SDana.Myers@Sun.COM     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1185*7851SDana.Myers@Sun.COM     {
1186*7851SDana.Myers@Sun.COM         AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
1187*7851SDana.Myers@Sun.COM 
1188*7851SDana.Myers@Sun.COM         AcpiOsPrintf ("\nAttached Object (%p):\n",
1189*7851SDana.Myers@Sun.COM             ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object);
1190*7851SDana.Myers@Sun.COM 
1191*7851SDana.Myers@Sun.COM         AcpiExDumpObjectDescriptor (
1192*7851SDana.Myers@Sun.COM             ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object, Flags);
1193*7851SDana.Myers@Sun.COM         return_VOID;
1194*7851SDana.Myers@Sun.COM     }
1195*7851SDana.Myers@Sun.COM 
1196*7851SDana.Myers@Sun.COM     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
1197*7851SDana.Myers@Sun.COM     {
1198*7851SDana.Myers@Sun.COM         AcpiOsPrintf (
1199*7851SDana.Myers@Sun.COM             "ExDumpObjectDescriptor: %p is not an ACPI operand object: [%s]\n",
1200*7851SDana.Myers@Sun.COM             ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
1201*7851SDana.Myers@Sun.COM         return_VOID;
1202*7851SDana.Myers@Sun.COM     }
1203*7851SDana.Myers@Sun.COM 
1204*7851SDana.Myers@Sun.COM     if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX)
1205*7851SDana.Myers@Sun.COM     {
1206*7851SDana.Myers@Sun.COM         return_VOID;
1207*7851SDana.Myers@Sun.COM     }
1208*7851SDana.Myers@Sun.COM 
1209*7851SDana.Myers@Sun.COM     /* Common Fields */
1210*7851SDana.Myers@Sun.COM 
1211*7851SDana.Myers@Sun.COM     AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
1212*7851SDana.Myers@Sun.COM 
1213*7851SDana.Myers@Sun.COM     /* Object-specific fields */
1214*7851SDana.Myers@Sun.COM 
1215*7851SDana.Myers@Sun.COM     AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1216*7851SDana.Myers@Sun.COM     return_VOID;
1217*7851SDana.Myers@Sun.COM }
1218*7851SDana.Myers@Sun.COM 
1219*7851SDana.Myers@Sun.COM #endif
1220*7851SDana.Myers@Sun.COM 
1221