xref: /minix3/minix/drivers/power/acpi/executer/exdump.c (revision 29492bb71c7148a089a5afafa0c99409161218df)
1433d6423SLionel Sambuc /******************************************************************************
2433d6423SLionel Sambuc  *
3433d6423SLionel Sambuc  * Module Name: exdump - Interpreter debug output routines
4433d6423SLionel Sambuc  *
5433d6423SLionel Sambuc  *****************************************************************************/
6433d6423SLionel Sambuc 
7*29492bb7SDavid van Moolenbroek /*
8*29492bb7SDavid van Moolenbroek  * Copyright (C) 2000 - 2014, Intel Corp.
9433d6423SLionel Sambuc  * All rights reserved.
10433d6423SLionel Sambuc  *
11*29492bb7SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
12*29492bb7SDavid van Moolenbroek  * modification, are permitted provided that the following conditions
13*29492bb7SDavid van Moolenbroek  * are met:
14*29492bb7SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
15*29492bb7SDavid van Moolenbroek  *    notice, this list of conditions, and the following disclaimer,
16*29492bb7SDavid van Moolenbroek  *    without modification.
17*29492bb7SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*29492bb7SDavid van Moolenbroek  *    substantially similar to the "NO WARRANTY" disclaimer below
19*29492bb7SDavid van Moolenbroek  *    ("Disclaimer") and any redistribution must be conditioned upon
20*29492bb7SDavid van Moolenbroek  *    including a substantially similar Disclaimer requirement for further
21*29492bb7SDavid van Moolenbroek  *    binary redistribution.
22*29492bb7SDavid van Moolenbroek  * 3. Neither the names of the above-listed copyright holders nor the names
23*29492bb7SDavid van Moolenbroek  *    of any contributors may be used to endorse or promote products derived
24*29492bb7SDavid van Moolenbroek  *    from this software without specific prior written permission.
25433d6423SLionel Sambuc  *
26*29492bb7SDavid van Moolenbroek  * Alternatively, this software may be distributed under the terms of the
27*29492bb7SDavid van Moolenbroek  * GNU General Public License ("GPL") version 2 as published by the Free
28*29492bb7SDavid van Moolenbroek  * Software Foundation.
29433d6423SLionel Sambuc  *
30*29492bb7SDavid van Moolenbroek  * NO WARRANTY
31*29492bb7SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*29492bb7SDavid van Moolenbroek  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*29492bb7SDavid van Moolenbroek  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*29492bb7SDavid van Moolenbroek  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*29492bb7SDavid van Moolenbroek  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*29492bb7SDavid van Moolenbroek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*29492bb7SDavid van Moolenbroek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*29492bb7SDavid van Moolenbroek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*29492bb7SDavid van Moolenbroek  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*29492bb7SDavid van Moolenbroek  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*29492bb7SDavid van Moolenbroek  * POSSIBILITY OF SUCH DAMAGES.
42*29492bb7SDavid van Moolenbroek  */
43433d6423SLionel Sambuc 
44433d6423SLionel Sambuc #include "acpi.h"
45433d6423SLionel Sambuc #include "accommon.h"
46433d6423SLionel Sambuc #include "acinterp.h"
47433d6423SLionel Sambuc #include "amlcode.h"
48433d6423SLionel Sambuc #include "acnamesp.h"
49433d6423SLionel Sambuc 
50433d6423SLionel Sambuc 
51433d6423SLionel Sambuc #define _COMPONENT          ACPI_EXECUTER
52433d6423SLionel Sambuc         ACPI_MODULE_NAME    ("exdump")
53433d6423SLionel Sambuc 
54433d6423SLionel Sambuc /*
55433d6423SLionel Sambuc  * The following routines are used for debug output only
56433d6423SLionel Sambuc  */
57433d6423SLionel Sambuc #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
58433d6423SLionel Sambuc 
59433d6423SLionel Sambuc /* Local prototypes */
60433d6423SLionel Sambuc 
61433d6423SLionel Sambuc static void
62433d6423SLionel Sambuc AcpiExOutString (
63433d6423SLionel Sambuc     char                    *Title,
64433d6423SLionel Sambuc     char                    *Value);
65433d6423SLionel Sambuc 
66433d6423SLionel Sambuc static void
67433d6423SLionel Sambuc AcpiExOutPointer (
68433d6423SLionel Sambuc     char                    *Title,
69433d6423SLionel Sambuc     void                    *Value);
70433d6423SLionel Sambuc 
71433d6423SLionel Sambuc static void
72433d6423SLionel Sambuc AcpiExDumpObject (
73433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     *ObjDesc,
74433d6423SLionel Sambuc     ACPI_EXDUMP_INFO        *Info);
75433d6423SLionel Sambuc 
76433d6423SLionel Sambuc static void
77433d6423SLionel Sambuc AcpiExDumpReferenceObj (
78433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     *ObjDesc);
79433d6423SLionel Sambuc 
80433d6423SLionel Sambuc static void
81433d6423SLionel Sambuc AcpiExDumpPackageObj (
82433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     *ObjDesc,
83433d6423SLionel Sambuc     UINT32                  Level,
84433d6423SLionel Sambuc     UINT32                  Index);
85433d6423SLionel Sambuc 
86433d6423SLionel Sambuc 
87433d6423SLionel Sambuc /*******************************************************************************
88433d6423SLionel Sambuc  *
89433d6423SLionel Sambuc  * Object Descriptor info tables
90433d6423SLionel Sambuc  *
91433d6423SLionel Sambuc  * Note: The first table entry must be an INIT opcode and must contain
92433d6423SLionel Sambuc  * the table length (number of table entries)
93433d6423SLionel Sambuc  *
94433d6423SLionel Sambuc  ******************************************************************************/
95433d6423SLionel Sambuc 
96433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpInteger[2] =
97433d6423SLionel Sambuc {
98433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger),        NULL},
99433d6423SLionel Sambuc     {ACPI_EXD_UINT64,   ACPI_EXD_OFFSET (Integer.Value),                "Value"}
100433d6423SLionel Sambuc };
101433d6423SLionel Sambuc 
102433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpString[4] =
103433d6423SLionel Sambuc {
104433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpString),         NULL},
105433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (String.Length),                "Length"},
106433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (String.Pointer),               "Pointer"},
107433d6423SLionel Sambuc     {ACPI_EXD_STRING,   0,                                              NULL}
108433d6423SLionel Sambuc };
109433d6423SLionel Sambuc 
110433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpBuffer[5] =
111433d6423SLionel Sambuc {
112433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer),         NULL},
113433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Buffer.Length),                "Length"},
114433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Pointer),               "Pointer"},
115*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
116433d6423SLionel Sambuc     {ACPI_EXD_BUFFER,   0,                                              NULL}
117433d6423SLionel Sambuc };
118433d6423SLionel Sambuc 
119*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpPackage[6] =
120433d6423SLionel Sambuc {
121433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage),        NULL},
122*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Package.Node),                 "Parent Node"},
123433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Package.Flags),                "Flags"},
124433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Package.Count),                "Elements"},
125433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Package.Elements),             "Element List"},
126433d6423SLionel Sambuc     {ACPI_EXD_PACKAGE,  0,                                              NULL}
127433d6423SLionel Sambuc };
128433d6423SLionel Sambuc 
129433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
130433d6423SLionel Sambuc {
131433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
132*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[0]),         "System Notify"},
133*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[1]),         "Device Notify"},
134*29492bb7SDavid van Moolenbroek     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler),               "Handler"}
135433d6423SLionel Sambuc };
136433d6423SLionel Sambuc 
137433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
138433d6423SLionel Sambuc {
139433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent),          NULL},
140433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Event.OsSemaphore),            "OsSemaphore"}
141433d6423SLionel Sambuc };
142433d6423SLionel Sambuc 
143433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpMethod[9] =
144433d6423SLionel Sambuc {
145433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod),         NULL},
146*29492bb7SDavid van Moolenbroek     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.InfoFlags),             "Info Flags"},
147433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ParamCount),            "Parameter Count"},
148433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.SyncLevel),             "Sync Level"},
149433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.Mutex),                 "Mutex"},
150433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.OwnerId),               "Owner Id"},
151433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ThreadCount),           "Thread Count"},
152433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Method.AmlLength),             "Aml Length"},
153433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.AmlStart),              "Aml Start"}
154433d6423SLionel Sambuc };
155433d6423SLionel Sambuc 
156*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpMutex[6] =
157433d6423SLionel Sambuc {
158433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex),          NULL},
159433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.SyncLevel),              "Sync Level"},
160*29492bb7SDavid van Moolenbroek     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel),      "Original Sync Level"},
161433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OwnerThread),            "Owner Thread"},
162433d6423SLionel Sambuc     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Mutex.AcquisitionDepth),       "Acquire Depth"},
163433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OsMutex),                "OsMutex"}
164433d6423SLionel Sambuc };
165433d6423SLionel Sambuc 
166*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpRegion[8] =
167433d6423SLionel Sambuc {
168433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion),         NULL},
169433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.SpaceId),               "Space Id"},
170433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.Flags),                 "Flags"},
171*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Region.Node),                  "Parent Node"},
172433d6423SLionel Sambuc     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
173433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
174*29492bb7SDavid van Moolenbroek     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
175433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
176433d6423SLionel Sambuc };
177433d6423SLionel Sambuc 
178*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpPower[6] =
179433d6423SLionel Sambuc {
180433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
181433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
182433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
183*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[0]),  "System Notify"},
184*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[1]),  "Device Notify"},
185*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.Handler),        "Handler"}
186433d6423SLionel Sambuc };
187433d6423SLionel Sambuc 
188433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
189433d6423SLionel Sambuc {
190433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor),      NULL},
191433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
192433d6423SLionel Sambuc     {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
193433d6423SLionel Sambuc     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
194*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[0]),      "System Notify"},
195*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[1]),      "Device Notify"},
196433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
197433d6423SLionel Sambuc };
198433d6423SLionel Sambuc 
199433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
200433d6423SLionel Sambuc {
201433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
202*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]),    "System Notify"},
203*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]),    "Device Notify"},
204433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
205433d6423SLionel Sambuc };
206433d6423SLionel Sambuc 
207433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
208433d6423SLionel Sambuc {
209433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField),    NULL},
210433d6423SLionel Sambuc     {ACPI_EXD_FIELD,    0,                                              NULL},
211433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
212433d6423SLionel Sambuc };
213433d6423SLionel Sambuc 
214*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpRegionField[5] =
215433d6423SLionel Sambuc {
216433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
217433d6423SLionel Sambuc     {ACPI_EXD_FIELD,    0,                                              NULL},
218*29492bb7SDavid van Moolenbroek     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Field.AccessLength),           "AccessLength"},
219*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"},
220*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.ResourceBuffer),         "ResourceBuffer"}
221433d6423SLionel Sambuc };
222433d6423SLionel Sambuc 
223433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
224433d6423SLionel Sambuc {
225433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
226433d6423SLionel Sambuc     {ACPI_EXD_FIELD,    0,                                              NULL},
227433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (BankField.Value),              "Value"},
228433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.RegionObj),          "Region Object"},
229433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.BankObj),            "Bank Object"}
230433d6423SLionel Sambuc };
231433d6423SLionel Sambuc 
232433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
233433d6423SLionel Sambuc {
234433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
235433d6423SLionel Sambuc     {ACPI_EXD_FIELD,    0,                                              NULL},
236433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (IndexField.Value),             "Value"},
237433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.IndexObj),          "Index Object"},
238433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
239433d6423SLionel Sambuc };
240433d6423SLionel Sambuc 
241433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpReference[8] =
242433d6423SLionel Sambuc {
243433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpReference),       NULL},
244433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.Class),              "Class"},
245433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.TargetType),         "Target Type"},
246433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Reference.Value),              "Value"},
247433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
248*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Reference.Node),               "Node"},
249433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
250433d6423SLionel Sambuc     {ACPI_EXD_REFERENCE,0,                                              NULL}
251433d6423SLionel Sambuc };
252433d6423SLionel Sambuc 
253433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
254433d6423SLionel Sambuc {
255433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
256433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (AddressSpace.SpaceId),         "Space Id"},
257*29492bb7SDavid van Moolenbroek     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
258*29492bb7SDavid van Moolenbroek     {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
259*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
260433d6423SLionel Sambuc     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
261433d6423SLionel Sambuc };
262433d6423SLionel Sambuc 
263*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpNotify[7] =
264433d6423SLionel Sambuc {
265433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
266*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
267*29492bb7SDavid van Moolenbroek     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Notify.HandlerType),           "Handler Type"},
268*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Handler),               "Handler"},
269*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"},
270*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[0]),               "Next System Notify"},
271*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[1]),               "Next Device Notify"}
272433d6423SLionel Sambuc };
273433d6423SLionel Sambuc 
274*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpExtra[6] =
275*29492bb7SDavid van Moolenbroek {
276*29492bb7SDavid van Moolenbroek     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra),          NULL},
277*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.Method_REG),             "_REG Method"},
278*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Extra.ScopeNode),              "Scope Node"},
279*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.RegionContext),          "Region Context"},
280*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.AmlStart),               "Aml Start"},
281*29492bb7SDavid van Moolenbroek     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Extra.AmlLength),              "Aml Length"}
282*29492bb7SDavid van Moolenbroek };
283*29492bb7SDavid van Moolenbroek 
284*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpData[3] =
285*29492bb7SDavid van Moolenbroek {
286*29492bb7SDavid van Moolenbroek     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpData),           NULL},
287*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Handler),                 "Handler"},
288*29492bb7SDavid van Moolenbroek     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Pointer),                 "Raw Data"}
289*29492bb7SDavid van Moolenbroek };
290433d6423SLionel Sambuc 
291433d6423SLionel Sambuc /* Miscellaneous tables */
292433d6423SLionel Sambuc 
293*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpCommon[5] =
294433d6423SLionel Sambuc {
295433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon),         NULL},
296433d6423SLionel Sambuc     {ACPI_EXD_TYPE ,    0,                                              NULL},
297433d6423SLionel Sambuc     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Common.ReferenceCount),        "Reference Count"},
298*29492bb7SDavid van Moolenbroek     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"},
299*29492bb7SDavid van Moolenbroek     {ACPI_EXD_LIST,     ACPI_EXD_OFFSET (Common.NextObject),            "Object List"}
300433d6423SLionel Sambuc };
301433d6423SLionel Sambuc 
302433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
303433d6423SLionel Sambuc {
304433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon),    NULL},
305433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.FieldFlags),       "Field Flags"},
306433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.AccessByteWidth),  "Access Byte Width"},
307433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
308433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
309433d6423SLionel Sambuc     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
310*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
311433d6423SLionel Sambuc };
312433d6423SLionel Sambuc 
313*29492bb7SDavid van Moolenbroek static ACPI_EXDUMP_INFO     AcpiExDumpNode[7] =
314433d6423SLionel Sambuc {
315433d6423SLionel Sambuc     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
316433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
317433d6423SLionel Sambuc     {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
318*29492bb7SDavid van Moolenbroek     {ACPI_EXD_LIST,     ACPI_EXD_NSOFFSET (Object),                     "Object List"},
319*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Parent),                     "Parent"},
320*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Child),                      "Child"},
321*29492bb7SDavid van Moolenbroek     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Peer),                       "Peer"}
322433d6423SLionel Sambuc };
323433d6423SLionel Sambuc 
324433d6423SLionel Sambuc 
325433d6423SLionel Sambuc /* Dispatch table, indexed by object type */
326433d6423SLionel Sambuc 
327433d6423SLionel Sambuc static ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
328433d6423SLionel Sambuc {
329433d6423SLionel Sambuc     NULL,
330433d6423SLionel Sambuc     AcpiExDumpInteger,
331433d6423SLionel Sambuc     AcpiExDumpString,
332433d6423SLionel Sambuc     AcpiExDumpBuffer,
333433d6423SLionel Sambuc     AcpiExDumpPackage,
334433d6423SLionel Sambuc     NULL,
335433d6423SLionel Sambuc     AcpiExDumpDevice,
336433d6423SLionel Sambuc     AcpiExDumpEvent,
337433d6423SLionel Sambuc     AcpiExDumpMethod,
338433d6423SLionel Sambuc     AcpiExDumpMutex,
339433d6423SLionel Sambuc     AcpiExDumpRegion,
340433d6423SLionel Sambuc     AcpiExDumpPower,
341433d6423SLionel Sambuc     AcpiExDumpProcessor,
342433d6423SLionel Sambuc     AcpiExDumpThermal,
343433d6423SLionel Sambuc     AcpiExDumpBufferField,
344433d6423SLionel Sambuc     NULL,
345433d6423SLionel Sambuc     NULL,
346433d6423SLionel Sambuc     AcpiExDumpRegionField,
347433d6423SLionel Sambuc     AcpiExDumpBankField,
348433d6423SLionel Sambuc     AcpiExDumpIndexField,
349433d6423SLionel Sambuc     AcpiExDumpReference,
350433d6423SLionel Sambuc     NULL,
351433d6423SLionel Sambuc     NULL,
352433d6423SLionel Sambuc     AcpiExDumpNotify,
353433d6423SLionel Sambuc     AcpiExDumpAddressHandler,
354433d6423SLionel Sambuc     NULL,
355433d6423SLionel Sambuc     NULL,
356*29492bb7SDavid van Moolenbroek     NULL,
357*29492bb7SDavid van Moolenbroek     AcpiExDumpExtra,
358*29492bb7SDavid van Moolenbroek     AcpiExDumpData
359433d6423SLionel Sambuc };
360433d6423SLionel Sambuc 
361433d6423SLionel Sambuc 
362433d6423SLionel Sambuc /*******************************************************************************
363433d6423SLionel Sambuc  *
364433d6423SLionel Sambuc  * FUNCTION:    AcpiExDumpObject
365433d6423SLionel Sambuc  *
366433d6423SLionel Sambuc  * PARAMETERS:  ObjDesc             - Descriptor to dump
367433d6423SLionel Sambuc  *              Info                - Info table corresponding to this object
368433d6423SLionel Sambuc  *                                    type
369433d6423SLionel Sambuc  *
370433d6423SLionel Sambuc  * RETURN:      None
371433d6423SLionel Sambuc  *
372433d6423SLionel Sambuc  * DESCRIPTION: Walk the info table for this object
373433d6423SLionel Sambuc  *
374433d6423SLionel Sambuc  ******************************************************************************/
375433d6423SLionel Sambuc 
376433d6423SLionel Sambuc static void
AcpiExDumpObject(ACPI_OPERAND_OBJECT * ObjDesc,ACPI_EXDUMP_INFO * Info)377433d6423SLionel Sambuc AcpiExDumpObject (
378433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     *ObjDesc,
379433d6423SLionel Sambuc     ACPI_EXDUMP_INFO        *Info)
380433d6423SLionel Sambuc {
381433d6423SLionel Sambuc     UINT8                   *Target;
382433d6423SLionel Sambuc     char                    *Name;
383*29492bb7SDavid van Moolenbroek     const char              *ReferenceName;
384433d6423SLionel Sambuc     UINT8                   Count;
385*29492bb7SDavid van Moolenbroek     ACPI_OPERAND_OBJECT     *Start;
386*29492bb7SDavid van Moolenbroek     ACPI_OPERAND_OBJECT     *Data = NULL;
387*29492bb7SDavid van Moolenbroek     ACPI_OPERAND_OBJECT     *Next;
388*29492bb7SDavid van Moolenbroek     ACPI_NAMESPACE_NODE     *Node;
389433d6423SLionel Sambuc 
390433d6423SLionel Sambuc 
391433d6423SLionel Sambuc     if (!Info)
392433d6423SLionel Sambuc     {
393433d6423SLionel Sambuc         AcpiOsPrintf (
394433d6423SLionel Sambuc             "ExDumpObject: Display not implemented for object type %s\n",
395433d6423SLionel Sambuc             AcpiUtGetObjectTypeName (ObjDesc));
396433d6423SLionel Sambuc         return;
397433d6423SLionel Sambuc     }
398433d6423SLionel Sambuc 
399433d6423SLionel Sambuc     /* First table entry must contain the table length (# of table entries) */
400433d6423SLionel Sambuc 
401433d6423SLionel Sambuc     Count = Info->Offset;
402433d6423SLionel Sambuc 
403433d6423SLionel Sambuc     while (Count)
404433d6423SLionel Sambuc     {
405433d6423SLionel Sambuc         Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
406433d6423SLionel Sambuc         Name = Info->Name;
407433d6423SLionel Sambuc 
408433d6423SLionel Sambuc         switch (Info->Opcode)
409433d6423SLionel Sambuc         {
410433d6423SLionel Sambuc         case ACPI_EXD_INIT:
411*29492bb7SDavid van Moolenbroek 
412433d6423SLionel Sambuc             break;
413433d6423SLionel Sambuc 
414433d6423SLionel Sambuc         case ACPI_EXD_TYPE:
415433d6423SLionel Sambuc 
416*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
417*29492bb7SDavid van Moolenbroek                 ObjDesc->Common.Type, AcpiUtGetObjectTypeName (ObjDesc));
418433d6423SLionel Sambuc             break;
419433d6423SLionel Sambuc 
420433d6423SLionel Sambuc         case ACPI_EXD_UINT8:
421433d6423SLionel Sambuc 
422433d6423SLionel Sambuc             AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
423433d6423SLionel Sambuc             break;
424433d6423SLionel Sambuc 
425433d6423SLionel Sambuc         case ACPI_EXD_UINT16:
426433d6423SLionel Sambuc 
427433d6423SLionel Sambuc             AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
428433d6423SLionel Sambuc             break;
429433d6423SLionel Sambuc 
430433d6423SLionel Sambuc         case ACPI_EXD_UINT32:
431433d6423SLionel Sambuc 
432433d6423SLionel Sambuc             AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
433433d6423SLionel Sambuc             break;
434433d6423SLionel Sambuc 
435433d6423SLionel Sambuc         case ACPI_EXD_UINT64:
436433d6423SLionel Sambuc 
437433d6423SLionel Sambuc             AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
438433d6423SLionel Sambuc                 ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
439433d6423SLionel Sambuc             break;
440433d6423SLionel Sambuc 
441433d6423SLionel Sambuc         case ACPI_EXD_POINTER:
442433d6423SLionel Sambuc         case ACPI_EXD_ADDRESS:
443433d6423SLionel Sambuc 
444433d6423SLionel Sambuc             AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
445433d6423SLionel Sambuc             break;
446433d6423SLionel Sambuc 
447433d6423SLionel Sambuc         case ACPI_EXD_STRING:
448433d6423SLionel Sambuc 
449433d6423SLionel Sambuc             AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
450433d6423SLionel Sambuc             AcpiOsPrintf ("\n");
451433d6423SLionel Sambuc             break;
452433d6423SLionel Sambuc 
453433d6423SLionel Sambuc         case ACPI_EXD_BUFFER:
454433d6423SLionel Sambuc 
455433d6423SLionel Sambuc             ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
456433d6423SLionel Sambuc             break;
457433d6423SLionel Sambuc 
458433d6423SLionel Sambuc         case ACPI_EXD_PACKAGE:
459433d6423SLionel Sambuc 
460433d6423SLionel Sambuc             /* Dump the package contents */
461433d6423SLionel Sambuc 
462433d6423SLionel Sambuc             AcpiOsPrintf ("\nPackage Contents:\n");
463433d6423SLionel Sambuc             AcpiExDumpPackageObj (ObjDesc, 0, 0);
464433d6423SLionel Sambuc             break;
465433d6423SLionel Sambuc 
466433d6423SLionel Sambuc         case ACPI_EXD_FIELD:
467433d6423SLionel Sambuc 
468433d6423SLionel Sambuc             AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
469433d6423SLionel Sambuc             break;
470433d6423SLionel Sambuc 
471433d6423SLionel Sambuc         case ACPI_EXD_REFERENCE:
472433d6423SLionel Sambuc 
473*29492bb7SDavid van Moolenbroek             ReferenceName = AcpiUtGetReferenceName (ObjDesc);
474*29492bb7SDavid van Moolenbroek             AcpiExOutString ("Class Name", ACPI_CAST_PTR (char, ReferenceName));
475433d6423SLionel Sambuc             AcpiExDumpReferenceObj (ObjDesc);
476433d6423SLionel Sambuc             break;
477433d6423SLionel Sambuc 
478*29492bb7SDavid van Moolenbroek         case ACPI_EXD_LIST:
479*29492bb7SDavid van Moolenbroek 
480*29492bb7SDavid van Moolenbroek             Start = *ACPI_CAST_PTR (void *, Target);
481*29492bb7SDavid van Moolenbroek             Next = Start;
482*29492bb7SDavid van Moolenbroek 
483*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("%20s : %p", Name, Next);
484*29492bb7SDavid van Moolenbroek             if (Next)
485*29492bb7SDavid van Moolenbroek             {
486*29492bb7SDavid van Moolenbroek                 AcpiOsPrintf ("(%s %2.2X)",
487*29492bb7SDavid van Moolenbroek                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
488*29492bb7SDavid van Moolenbroek 
489*29492bb7SDavid van Moolenbroek                 while (Next->Common.NextObject)
490*29492bb7SDavid van Moolenbroek                 {
491*29492bb7SDavid van Moolenbroek                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
492*29492bb7SDavid van Moolenbroek                         !Data)
493*29492bb7SDavid van Moolenbroek                     {
494*29492bb7SDavid van Moolenbroek                         Data = Next;
495*29492bb7SDavid van Moolenbroek                     }
496*29492bb7SDavid van Moolenbroek 
497*29492bb7SDavid van Moolenbroek                     Next = Next->Common.NextObject;
498*29492bb7SDavid van Moolenbroek                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
499*29492bb7SDavid van Moolenbroek                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
500*29492bb7SDavid van Moolenbroek 
501*29492bb7SDavid van Moolenbroek                     if ((Next == Start) || (Next == Data))
502*29492bb7SDavid van Moolenbroek                     {
503*29492bb7SDavid van Moolenbroek                         AcpiOsPrintf ("\n**** Error: Object list appears to be circular linked");
504*29492bb7SDavid van Moolenbroek                         break;
505*29492bb7SDavid van Moolenbroek                     }
506*29492bb7SDavid van Moolenbroek                 }
507*29492bb7SDavid van Moolenbroek             }
508*29492bb7SDavid van Moolenbroek 
509*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("\n");
510*29492bb7SDavid van Moolenbroek             break;
511*29492bb7SDavid van Moolenbroek 
512*29492bb7SDavid van Moolenbroek         case ACPI_EXD_HDLR_LIST:
513*29492bb7SDavid van Moolenbroek 
514*29492bb7SDavid van Moolenbroek             Start = *ACPI_CAST_PTR (void *, Target);
515*29492bb7SDavid van Moolenbroek             Next = Start;
516*29492bb7SDavid van Moolenbroek 
517*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("%20s : %p", Name, Next);
518*29492bb7SDavid van Moolenbroek             if (Next)
519*29492bb7SDavid van Moolenbroek             {
520*29492bb7SDavid van Moolenbroek                 AcpiOsPrintf ("(%s %2.2X)",
521*29492bb7SDavid van Moolenbroek                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
522*29492bb7SDavid van Moolenbroek 
523*29492bb7SDavid van Moolenbroek                 while (Next->AddressSpace.Next)
524*29492bb7SDavid van Moolenbroek                 {
525*29492bb7SDavid van Moolenbroek                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
526*29492bb7SDavid van Moolenbroek                         !Data)
527*29492bb7SDavid van Moolenbroek                     {
528*29492bb7SDavid van Moolenbroek                         Data = Next;
529*29492bb7SDavid van Moolenbroek                     }
530*29492bb7SDavid van Moolenbroek 
531*29492bb7SDavid van Moolenbroek                     Next = Next->AddressSpace.Next;
532*29492bb7SDavid van Moolenbroek                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
533*29492bb7SDavid van Moolenbroek                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
534*29492bb7SDavid van Moolenbroek 
535*29492bb7SDavid van Moolenbroek                     if ((Next == Start) || (Next == Data))
536*29492bb7SDavid van Moolenbroek                     {
537*29492bb7SDavid van Moolenbroek                         AcpiOsPrintf ("\n**** Error: Handler list appears to be circular linked");
538*29492bb7SDavid van Moolenbroek                         break;
539*29492bb7SDavid van Moolenbroek                     }
540*29492bb7SDavid van Moolenbroek                 }
541*29492bb7SDavid van Moolenbroek             }
542*29492bb7SDavid van Moolenbroek 
543*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("\n");
544*29492bb7SDavid van Moolenbroek             break;
545*29492bb7SDavid van Moolenbroek 
546*29492bb7SDavid van Moolenbroek         case ACPI_EXD_RGN_LIST:
547*29492bb7SDavid van Moolenbroek 
548*29492bb7SDavid van Moolenbroek             Start = *ACPI_CAST_PTR (void *, Target);
549*29492bb7SDavid van Moolenbroek             Next = Start;
550*29492bb7SDavid van Moolenbroek 
551*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("%20s : %p", Name, Next);
552*29492bb7SDavid van Moolenbroek             if (Next)
553*29492bb7SDavid van Moolenbroek             {
554*29492bb7SDavid van Moolenbroek                 AcpiOsPrintf ("(%s %2.2X)",
555*29492bb7SDavid van Moolenbroek                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
556*29492bb7SDavid van Moolenbroek 
557*29492bb7SDavid van Moolenbroek                 while (Next->Region.Next)
558*29492bb7SDavid van Moolenbroek                 {
559*29492bb7SDavid van Moolenbroek                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
560*29492bb7SDavid van Moolenbroek                         !Data)
561*29492bb7SDavid van Moolenbroek                     {
562*29492bb7SDavid van Moolenbroek                         Data = Next;
563*29492bb7SDavid van Moolenbroek                     }
564*29492bb7SDavid van Moolenbroek 
565*29492bb7SDavid van Moolenbroek                     Next = Next->Region.Next;
566*29492bb7SDavid van Moolenbroek                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
567*29492bb7SDavid van Moolenbroek                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
568*29492bb7SDavid van Moolenbroek 
569*29492bb7SDavid van Moolenbroek                     if ((Next == Start) || (Next == Data))
570*29492bb7SDavid van Moolenbroek                     {
571*29492bb7SDavid van Moolenbroek                         AcpiOsPrintf ("\n**** Error: Region list appears to be circular linked");
572*29492bb7SDavid van Moolenbroek                         break;
573*29492bb7SDavid van Moolenbroek                     }
574*29492bb7SDavid van Moolenbroek                 }
575*29492bb7SDavid van Moolenbroek             }
576*29492bb7SDavid van Moolenbroek 
577*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("\n");
578*29492bb7SDavid van Moolenbroek             break;
579*29492bb7SDavid van Moolenbroek 
580*29492bb7SDavid van Moolenbroek         case ACPI_EXD_NODE:
581*29492bb7SDavid van Moolenbroek 
582*29492bb7SDavid van Moolenbroek             Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target);
583*29492bb7SDavid van Moolenbroek 
584*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("%20s : %p", Name, Node);
585*29492bb7SDavid van Moolenbroek             if (Node)
586*29492bb7SDavid van Moolenbroek             {
587*29492bb7SDavid van Moolenbroek                 AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii);
588*29492bb7SDavid van Moolenbroek             }
589*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("\n");
590*29492bb7SDavid van Moolenbroek             break;
591*29492bb7SDavid van Moolenbroek 
592433d6423SLionel Sambuc         default:
593433d6423SLionel Sambuc 
594433d6423SLionel Sambuc             AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
595433d6423SLionel Sambuc                 Info->Opcode);
596433d6423SLionel Sambuc             return;
597433d6423SLionel Sambuc         }
598433d6423SLionel Sambuc 
599433d6423SLionel Sambuc         Info++;
600433d6423SLionel Sambuc         Count--;
601433d6423SLionel Sambuc     }
602433d6423SLionel Sambuc }
603433d6423SLionel Sambuc 
604433d6423SLionel Sambuc 
605433d6423SLionel Sambuc /*******************************************************************************
606433d6423SLionel Sambuc  *
607433d6423SLionel Sambuc  * FUNCTION:    AcpiExDumpOperand
608433d6423SLionel Sambuc  *
609433d6423SLionel Sambuc  * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped
610433d6423SLionel Sambuc  *              Depth           - Current nesting depth
611433d6423SLionel Sambuc  *
612433d6423SLionel Sambuc  * RETURN:      None
613433d6423SLionel Sambuc  *
614433d6423SLionel Sambuc  * DESCRIPTION: Dump an operand object
615433d6423SLionel Sambuc  *
616433d6423SLionel Sambuc  ******************************************************************************/
617433d6423SLionel Sambuc 
618433d6423SLionel Sambuc void
AcpiExDumpOperand(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Depth)619433d6423SLionel Sambuc AcpiExDumpOperand (
620433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     *ObjDesc,
621433d6423SLionel Sambuc     UINT32                  Depth)
622433d6423SLionel Sambuc {
623433d6423SLionel Sambuc     UINT32                  Length;
624433d6423SLionel Sambuc     UINT32                  Index;
625433d6423SLionel Sambuc 
626433d6423SLionel Sambuc 
627433d6423SLionel Sambuc     ACPI_FUNCTION_NAME (ExDumpOperand)
628433d6423SLionel Sambuc 
629433d6423SLionel Sambuc 
630*29492bb7SDavid van Moolenbroek     /* Check if debug output enabled */
631*29492bb7SDavid van Moolenbroek 
632*29492bb7SDavid van Moolenbroek     if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT))
633433d6423SLionel Sambuc     {
634433d6423SLionel Sambuc         return;
635433d6423SLionel Sambuc     }
636433d6423SLionel Sambuc 
637433d6423SLionel Sambuc     if (!ObjDesc)
638433d6423SLionel Sambuc     {
639433d6423SLionel Sambuc         /* This could be a null element of a package */
640433d6423SLionel Sambuc 
641433d6423SLionel Sambuc         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
642433d6423SLionel Sambuc         return;
643433d6423SLionel Sambuc     }
644433d6423SLionel Sambuc 
645433d6423SLionel Sambuc     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
646433d6423SLionel Sambuc     {
647433d6423SLionel Sambuc         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
648433d6423SLionel Sambuc         ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
649433d6423SLionel Sambuc         return;
650433d6423SLionel Sambuc     }
651433d6423SLionel Sambuc 
652433d6423SLionel Sambuc     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
653433d6423SLionel Sambuc     {
654433d6423SLionel Sambuc         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
655433d6423SLionel Sambuc             "%p is not a node or operand object: [%s]\n",
656433d6423SLionel Sambuc             ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
657433d6423SLionel Sambuc         ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
658433d6423SLionel Sambuc         return;
659433d6423SLionel Sambuc     }
660433d6423SLionel Sambuc 
661433d6423SLionel Sambuc     /* ObjDesc is a valid object */
662433d6423SLionel Sambuc 
663433d6423SLionel Sambuc     if (Depth > 0)
664433d6423SLionel Sambuc     {
665433d6423SLionel Sambuc         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
666433d6423SLionel Sambuc             Depth, " ", Depth, ObjDesc));
667433d6423SLionel Sambuc     }
668433d6423SLionel Sambuc     else
669433d6423SLionel Sambuc     {
670433d6423SLionel Sambuc         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
671433d6423SLionel Sambuc     }
672433d6423SLionel Sambuc 
673433d6423SLionel Sambuc     /* Decode object type */
674433d6423SLionel Sambuc 
675433d6423SLionel Sambuc     switch (ObjDesc->Common.Type)
676433d6423SLionel Sambuc     {
677433d6423SLionel Sambuc     case ACPI_TYPE_LOCAL_REFERENCE:
678433d6423SLionel Sambuc 
679433d6423SLionel Sambuc         AcpiOsPrintf ("Reference: [%s] ", AcpiUtGetReferenceName (ObjDesc));
680433d6423SLionel Sambuc 
681433d6423SLionel Sambuc         switch (ObjDesc->Reference.Class)
682433d6423SLionel Sambuc         {
683433d6423SLionel Sambuc         case ACPI_REFCLASS_DEBUG:
684433d6423SLionel Sambuc 
685433d6423SLionel Sambuc             AcpiOsPrintf ("\n");
686433d6423SLionel Sambuc             break;
687433d6423SLionel Sambuc 
688433d6423SLionel Sambuc         case ACPI_REFCLASS_INDEX:
689433d6423SLionel Sambuc 
690433d6423SLionel Sambuc             AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
691433d6423SLionel Sambuc             break;
692433d6423SLionel Sambuc 
693433d6423SLionel Sambuc         case ACPI_REFCLASS_TABLE:
694433d6423SLionel Sambuc 
695433d6423SLionel Sambuc             AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
696433d6423SLionel Sambuc             break;
697433d6423SLionel Sambuc 
698433d6423SLionel Sambuc         case ACPI_REFCLASS_REFOF:
699433d6423SLionel Sambuc 
700433d6423SLionel Sambuc             AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
701433d6423SLionel Sambuc                 AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
702433d6423SLionel Sambuc                     ObjDesc->Reference.Object)->Common.Type));
703433d6423SLionel Sambuc             break;
704433d6423SLionel Sambuc 
705433d6423SLionel Sambuc         case ACPI_REFCLASS_NAME:
706433d6423SLionel Sambuc 
707433d6423SLionel Sambuc             AcpiOsPrintf ("- [%4.4s]\n", ObjDesc->Reference.Node->Name.Ascii);
708433d6423SLionel Sambuc             break;
709433d6423SLionel Sambuc 
710433d6423SLionel Sambuc         case ACPI_REFCLASS_ARG:
711433d6423SLionel Sambuc         case ACPI_REFCLASS_LOCAL:
712433d6423SLionel Sambuc 
713433d6423SLionel Sambuc             AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
714433d6423SLionel Sambuc             break;
715433d6423SLionel Sambuc 
716433d6423SLionel Sambuc         default:    /* Unknown reference class */
717433d6423SLionel Sambuc 
718433d6423SLionel Sambuc             AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
719433d6423SLionel Sambuc             break;
720433d6423SLionel Sambuc         }
721433d6423SLionel Sambuc         break;
722433d6423SLionel Sambuc 
723433d6423SLionel Sambuc     case ACPI_TYPE_BUFFER:
724433d6423SLionel Sambuc 
725433d6423SLionel Sambuc         AcpiOsPrintf ("Buffer length %.2X @ %p\n",
726433d6423SLionel Sambuc             ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
727433d6423SLionel Sambuc 
728433d6423SLionel Sambuc         /* Debug only -- dump the buffer contents */
729433d6423SLionel Sambuc 
730433d6423SLionel Sambuc         if (ObjDesc->Buffer.Pointer)
731433d6423SLionel Sambuc         {
732433d6423SLionel Sambuc             Length = ObjDesc->Buffer.Length;
733433d6423SLionel Sambuc             if (Length > 128)
734433d6423SLionel Sambuc             {
735433d6423SLionel Sambuc                 Length = 128;
736433d6423SLionel Sambuc             }
737433d6423SLionel Sambuc 
738433d6423SLionel Sambuc             AcpiOsPrintf ("Buffer Contents: (displaying length 0x%.2X)\n",
739433d6423SLionel Sambuc                 Length);
740433d6423SLionel Sambuc             ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
741433d6423SLionel Sambuc         }
742433d6423SLionel Sambuc         break;
743433d6423SLionel Sambuc 
744433d6423SLionel Sambuc     case ACPI_TYPE_INTEGER:
745433d6423SLionel Sambuc 
746433d6423SLionel Sambuc         AcpiOsPrintf ("Integer %8.8X%8.8X\n",
747433d6423SLionel Sambuc             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
748433d6423SLionel Sambuc         break;
749433d6423SLionel Sambuc 
750433d6423SLionel Sambuc     case ACPI_TYPE_PACKAGE:
751433d6423SLionel Sambuc 
752433d6423SLionel Sambuc         AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
753433d6423SLionel Sambuc             ObjDesc->Package.Count, ObjDesc->Package.Elements);
754433d6423SLionel Sambuc 
755433d6423SLionel Sambuc         /*
756433d6423SLionel Sambuc          * If elements exist, package element pointer is valid,
757433d6423SLionel Sambuc          * and debug_level exceeds 1, dump package's elements.
758433d6423SLionel Sambuc          */
759433d6423SLionel Sambuc         if (ObjDesc->Package.Count &&
760433d6423SLionel Sambuc             ObjDesc->Package.Elements &&
761433d6423SLionel Sambuc             AcpiDbgLevel > 1)
762433d6423SLionel Sambuc         {
763433d6423SLionel Sambuc             for (Index = 0; Index < ObjDesc->Package.Count; Index++)
764433d6423SLionel Sambuc             {
765433d6423SLionel Sambuc                 AcpiExDumpOperand (ObjDesc->Package.Elements[Index], Depth+1);
766433d6423SLionel Sambuc             }
767433d6423SLionel Sambuc         }
768433d6423SLionel Sambuc         break;
769433d6423SLionel Sambuc 
770433d6423SLionel Sambuc     case ACPI_TYPE_REGION:
771433d6423SLionel Sambuc 
772433d6423SLionel Sambuc         AcpiOsPrintf ("Region %s (%X)",
773433d6423SLionel Sambuc             AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
774433d6423SLionel Sambuc             ObjDesc->Region.SpaceId);
775433d6423SLionel Sambuc 
776433d6423SLionel Sambuc         /*
777433d6423SLionel Sambuc          * If the address and length have not been evaluated,
778433d6423SLionel Sambuc          * don't print them.
779433d6423SLionel Sambuc          */
780433d6423SLionel Sambuc         if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
781433d6423SLionel Sambuc         {
782433d6423SLionel Sambuc             AcpiOsPrintf ("\n");
783433d6423SLionel Sambuc         }
784433d6423SLionel Sambuc         else
785433d6423SLionel Sambuc         {
786433d6423SLionel Sambuc             AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
787433d6423SLionel Sambuc                 ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address),
788433d6423SLionel Sambuc                 ObjDesc->Region.Length);
789433d6423SLionel Sambuc         }
790433d6423SLionel Sambuc         break;
791433d6423SLionel Sambuc 
792433d6423SLionel Sambuc     case ACPI_TYPE_STRING:
793433d6423SLionel Sambuc 
794433d6423SLionel Sambuc         AcpiOsPrintf ("String length %X @ %p ",
795433d6423SLionel Sambuc             ObjDesc->String.Length,
796433d6423SLionel Sambuc             ObjDesc->String.Pointer);
797433d6423SLionel Sambuc 
798433d6423SLionel Sambuc         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
799433d6423SLionel Sambuc         AcpiOsPrintf ("\n");
800433d6423SLionel Sambuc         break;
801433d6423SLionel Sambuc 
802433d6423SLionel Sambuc     case ACPI_TYPE_LOCAL_BANK_FIELD:
803433d6423SLionel Sambuc 
804433d6423SLionel Sambuc         AcpiOsPrintf ("BankField\n");
805433d6423SLionel Sambuc         break;
806433d6423SLionel Sambuc 
807433d6423SLionel Sambuc     case ACPI_TYPE_LOCAL_REGION_FIELD:
808433d6423SLionel Sambuc 
809433d6423SLionel Sambuc         AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
810433d6423SLionel Sambuc             "byte=%X bit=%X of below:\n",
811433d6423SLionel Sambuc             ObjDesc->Field.BitLength,
812433d6423SLionel Sambuc             ObjDesc->Field.AccessByteWidth,
813433d6423SLionel Sambuc             ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
814433d6423SLionel Sambuc             ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
815433d6423SLionel Sambuc             ObjDesc->Field.BaseByteOffset,
816433d6423SLionel Sambuc             ObjDesc->Field.StartFieldBitOffset);
817433d6423SLionel Sambuc 
818433d6423SLionel Sambuc         AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1);
819433d6423SLionel Sambuc         break;
820433d6423SLionel Sambuc 
821433d6423SLionel Sambuc     case ACPI_TYPE_LOCAL_INDEX_FIELD:
822433d6423SLionel Sambuc 
823433d6423SLionel Sambuc         AcpiOsPrintf ("IndexField\n");
824433d6423SLionel Sambuc         break;
825433d6423SLionel Sambuc 
826433d6423SLionel Sambuc     case ACPI_TYPE_BUFFER_FIELD:
827433d6423SLionel Sambuc 
828433d6423SLionel Sambuc         AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
829433d6423SLionel Sambuc             ObjDesc->BufferField.BitLength,
830433d6423SLionel Sambuc             ObjDesc->BufferField.BaseByteOffset,
831433d6423SLionel Sambuc             ObjDesc->BufferField.StartFieldBitOffset);
832433d6423SLionel Sambuc 
833433d6423SLionel Sambuc         if (!ObjDesc->BufferField.BufferObj)
834433d6423SLionel Sambuc         {
835433d6423SLionel Sambuc             ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
836433d6423SLionel Sambuc         }
837433d6423SLionel Sambuc         else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
838433d6423SLionel Sambuc                     ACPI_TYPE_BUFFER)
839433d6423SLionel Sambuc         {
840433d6423SLionel Sambuc             AcpiOsPrintf ("*not a Buffer*\n");
841433d6423SLionel Sambuc         }
842433d6423SLionel Sambuc         else
843433d6423SLionel Sambuc         {
844433d6423SLionel Sambuc             AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth+1);
845433d6423SLionel Sambuc         }
846433d6423SLionel Sambuc         break;
847433d6423SLionel Sambuc 
848433d6423SLionel Sambuc     case ACPI_TYPE_EVENT:
849433d6423SLionel Sambuc 
850433d6423SLionel Sambuc         AcpiOsPrintf ("Event\n");
851433d6423SLionel Sambuc         break;
852433d6423SLionel Sambuc 
853433d6423SLionel Sambuc     case ACPI_TYPE_METHOD:
854433d6423SLionel Sambuc 
855433d6423SLionel Sambuc         AcpiOsPrintf ("Method(%X) @ %p:%X\n",
856433d6423SLionel Sambuc             ObjDesc->Method.ParamCount,
857433d6423SLionel Sambuc             ObjDesc->Method.AmlStart,
858433d6423SLionel Sambuc             ObjDesc->Method.AmlLength);
859433d6423SLionel Sambuc         break;
860433d6423SLionel Sambuc 
861433d6423SLionel Sambuc     case ACPI_TYPE_MUTEX:
862433d6423SLionel Sambuc 
863433d6423SLionel Sambuc         AcpiOsPrintf ("Mutex\n");
864433d6423SLionel Sambuc         break;
865433d6423SLionel Sambuc 
866433d6423SLionel Sambuc     case ACPI_TYPE_DEVICE:
867433d6423SLionel Sambuc 
868433d6423SLionel Sambuc         AcpiOsPrintf ("Device\n");
869433d6423SLionel Sambuc         break;
870433d6423SLionel Sambuc 
871433d6423SLionel Sambuc     case ACPI_TYPE_POWER:
872433d6423SLionel Sambuc 
873433d6423SLionel Sambuc         AcpiOsPrintf ("Power\n");
874433d6423SLionel Sambuc         break;
875433d6423SLionel Sambuc 
876433d6423SLionel Sambuc     case ACPI_TYPE_PROCESSOR:
877433d6423SLionel Sambuc 
878433d6423SLionel Sambuc         AcpiOsPrintf ("Processor\n");
879433d6423SLionel Sambuc         break;
880433d6423SLionel Sambuc 
881433d6423SLionel Sambuc     case ACPI_TYPE_THERMAL:
882433d6423SLionel Sambuc 
883433d6423SLionel Sambuc         AcpiOsPrintf ("Thermal\n");
884433d6423SLionel Sambuc         break;
885433d6423SLionel Sambuc 
886433d6423SLionel Sambuc     default:
887*29492bb7SDavid van Moolenbroek 
888433d6423SLionel Sambuc         /* Unknown Type */
889433d6423SLionel Sambuc 
890433d6423SLionel Sambuc         AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
891433d6423SLionel Sambuc         break;
892433d6423SLionel Sambuc     }
893433d6423SLionel Sambuc 
894433d6423SLionel Sambuc     return;
895433d6423SLionel Sambuc }
896433d6423SLionel Sambuc 
897433d6423SLionel Sambuc 
898433d6423SLionel Sambuc /*******************************************************************************
899433d6423SLionel Sambuc  *
900433d6423SLionel Sambuc  * FUNCTION:    AcpiExDumpOperands
901433d6423SLionel Sambuc  *
902433d6423SLionel Sambuc  * PARAMETERS:  Operands            - A list of Operand objects
903433d6423SLionel Sambuc  *              OpcodeName          - AML opcode name
904433d6423SLionel Sambuc  *              NumOperands         - Operand count for this opcode
905433d6423SLionel Sambuc  *
906433d6423SLionel Sambuc  * DESCRIPTION: Dump the operands associated with the opcode
907433d6423SLionel Sambuc  *
908433d6423SLionel Sambuc  ******************************************************************************/
909433d6423SLionel Sambuc 
910433d6423SLionel Sambuc void
AcpiExDumpOperands(ACPI_OPERAND_OBJECT ** Operands,const char * OpcodeName,UINT32 NumOperands)911433d6423SLionel Sambuc AcpiExDumpOperands (
912433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     **Operands,
913433d6423SLionel Sambuc     const char              *OpcodeName,
914433d6423SLionel Sambuc     UINT32                  NumOperands)
915433d6423SLionel Sambuc {
916433d6423SLionel Sambuc     ACPI_FUNCTION_NAME (ExDumpOperands);
917433d6423SLionel Sambuc 
918433d6423SLionel Sambuc 
919433d6423SLionel Sambuc     if (!OpcodeName)
920433d6423SLionel Sambuc     {
921433d6423SLionel Sambuc         OpcodeName = "UNKNOWN";
922433d6423SLionel Sambuc     }
923433d6423SLionel Sambuc 
924433d6423SLionel Sambuc     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
925433d6423SLionel Sambuc         "**** Start operand dump for opcode [%s], %u operands\n",
926433d6423SLionel Sambuc         OpcodeName, NumOperands));
927433d6423SLionel Sambuc 
928433d6423SLionel Sambuc     if (NumOperands == 0)
929433d6423SLionel Sambuc     {
930433d6423SLionel Sambuc         NumOperands = 1;
931433d6423SLionel Sambuc     }
932433d6423SLionel Sambuc 
933433d6423SLionel Sambuc     /* Dump the individual operands */
934433d6423SLionel Sambuc 
935433d6423SLionel Sambuc     while (NumOperands)
936433d6423SLionel Sambuc     {
937433d6423SLionel Sambuc         AcpiExDumpOperand (*Operands, 0);
938433d6423SLionel Sambuc         Operands++;
939433d6423SLionel Sambuc         NumOperands--;
940433d6423SLionel Sambuc     }
941433d6423SLionel Sambuc 
942433d6423SLionel Sambuc     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
943433d6423SLionel Sambuc         "**** End operand dump for [%s]\n", OpcodeName));
944433d6423SLionel Sambuc     return;
945433d6423SLionel Sambuc }
946433d6423SLionel Sambuc 
947433d6423SLionel Sambuc 
948433d6423SLionel Sambuc /*******************************************************************************
949433d6423SLionel Sambuc  *
950433d6423SLionel Sambuc  * FUNCTION:    AcpiExOut* functions
951433d6423SLionel Sambuc  *
952433d6423SLionel Sambuc  * PARAMETERS:  Title               - Descriptive text
953433d6423SLionel Sambuc  *              Value               - Value to be displayed
954433d6423SLionel Sambuc  *
955433d6423SLionel Sambuc  * DESCRIPTION: Object dump output formatting functions. These functions
956433d6423SLionel Sambuc  *              reduce the number of format strings required and keeps them
957433d6423SLionel Sambuc  *              all in one place for easy modification.
958433d6423SLionel Sambuc  *
959433d6423SLionel Sambuc  ******************************************************************************/
960433d6423SLionel Sambuc 
961433d6423SLionel Sambuc static void
AcpiExOutString(char * Title,char * Value)962433d6423SLionel Sambuc AcpiExOutString (
963433d6423SLionel Sambuc     char                    *Title,
964433d6423SLionel Sambuc     char                    *Value)
965433d6423SLionel Sambuc {
966433d6423SLionel Sambuc     AcpiOsPrintf ("%20s : %s\n", Title, Value);
967433d6423SLionel Sambuc }
968433d6423SLionel Sambuc 
969433d6423SLionel Sambuc static void
AcpiExOutPointer(char * Title,void * Value)970433d6423SLionel Sambuc AcpiExOutPointer (
971433d6423SLionel Sambuc     char                    *Title,
972433d6423SLionel Sambuc     void                    *Value)
973433d6423SLionel Sambuc {
974433d6423SLionel Sambuc     AcpiOsPrintf ("%20s : %p\n", Title, Value);
975433d6423SLionel Sambuc }
976433d6423SLionel Sambuc 
977433d6423SLionel Sambuc 
978433d6423SLionel Sambuc /*******************************************************************************
979433d6423SLionel Sambuc  *
980433d6423SLionel Sambuc  * FUNCTION:    AcpiExDumpNamespaceNode
981433d6423SLionel Sambuc  *
982433d6423SLionel Sambuc  * PARAMETERS:  Node                - Descriptor to dump
983433d6423SLionel Sambuc  *              Flags               - Force display if TRUE
984433d6423SLionel Sambuc  *
985433d6423SLionel Sambuc  * DESCRIPTION: Dumps the members of the given.Node
986433d6423SLionel Sambuc  *
987433d6423SLionel Sambuc  ******************************************************************************/
988433d6423SLionel Sambuc 
989433d6423SLionel Sambuc void
AcpiExDumpNamespaceNode(ACPI_NAMESPACE_NODE * Node,UINT32 Flags)990433d6423SLionel Sambuc AcpiExDumpNamespaceNode (
991433d6423SLionel Sambuc     ACPI_NAMESPACE_NODE     *Node,
992433d6423SLionel Sambuc     UINT32                  Flags)
993433d6423SLionel Sambuc {
994433d6423SLionel Sambuc 
995433d6423SLionel Sambuc     ACPI_FUNCTION_ENTRY ();
996433d6423SLionel Sambuc 
997433d6423SLionel Sambuc 
998433d6423SLionel Sambuc     if (!Flags)
999433d6423SLionel Sambuc     {
1000*29492bb7SDavid van Moolenbroek         /* Check if debug output enabled */
1001*29492bb7SDavid van Moolenbroek 
1002*29492bb7SDavid van Moolenbroek         if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
1003433d6423SLionel Sambuc         {
1004433d6423SLionel Sambuc             return;
1005433d6423SLionel Sambuc         }
1006433d6423SLionel Sambuc     }
1007433d6423SLionel Sambuc 
1008433d6423SLionel Sambuc     AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
1009*29492bb7SDavid van Moolenbroek     AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
1010*29492bb7SDavid van Moolenbroek         Node->Type, AcpiUtGetTypeName (Node->Type));
1011433d6423SLionel Sambuc 
1012433d6423SLionel Sambuc     AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
1013433d6423SLionel Sambuc         AcpiExDumpNode);
1014433d6423SLionel Sambuc }
1015433d6423SLionel Sambuc 
1016433d6423SLionel Sambuc 
1017433d6423SLionel Sambuc /*******************************************************************************
1018433d6423SLionel Sambuc  *
1019433d6423SLionel Sambuc  * FUNCTION:    AcpiExDumpReferenceObj
1020433d6423SLionel Sambuc  *
1021433d6423SLionel Sambuc  * PARAMETERS:  Object              - Descriptor to dump
1022433d6423SLionel Sambuc  *
1023433d6423SLionel Sambuc  * DESCRIPTION: Dumps a reference object
1024433d6423SLionel Sambuc  *
1025433d6423SLionel Sambuc  ******************************************************************************/
1026433d6423SLionel Sambuc 
1027433d6423SLionel Sambuc static void
AcpiExDumpReferenceObj(ACPI_OPERAND_OBJECT * ObjDesc)1028433d6423SLionel Sambuc AcpiExDumpReferenceObj (
1029433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     *ObjDesc)
1030433d6423SLionel Sambuc {
1031433d6423SLionel Sambuc     ACPI_BUFFER             RetBuf;
1032433d6423SLionel Sambuc     ACPI_STATUS             Status;
1033433d6423SLionel Sambuc 
1034433d6423SLionel Sambuc 
1035433d6423SLionel Sambuc     RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1036433d6423SLionel Sambuc 
1037433d6423SLionel Sambuc     if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
1038433d6423SLionel Sambuc     {
1039433d6423SLionel Sambuc         AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
1040433d6423SLionel Sambuc 
1041433d6423SLionel Sambuc         Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf);
1042433d6423SLionel Sambuc         if (ACPI_FAILURE (Status))
1043433d6423SLionel Sambuc         {
1044433d6423SLionel Sambuc             AcpiOsPrintf (" Could not convert name to pathname\n");
1045433d6423SLionel Sambuc         }
1046433d6423SLionel Sambuc         else
1047433d6423SLionel Sambuc         {
1048433d6423SLionel Sambuc            AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
1049433d6423SLionel Sambuc            ACPI_FREE (RetBuf.Pointer);
1050433d6423SLionel Sambuc         }
1051433d6423SLionel Sambuc     }
1052433d6423SLionel Sambuc     else if (ObjDesc->Reference.Object)
1053433d6423SLionel Sambuc     {
1054433d6423SLionel Sambuc         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
1055433d6423SLionel Sambuc         {
1056433d6423SLionel Sambuc             AcpiOsPrintf (" Target: %p", ObjDesc->Reference.Object);
1057433d6423SLionel Sambuc             if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
1058433d6423SLionel Sambuc             {
1059433d6423SLionel Sambuc                 AcpiOsPrintf (" Table Index: %X\n", ObjDesc->Reference.Value);
1060433d6423SLionel Sambuc             }
1061433d6423SLionel Sambuc             else
1062433d6423SLionel Sambuc             {
1063433d6423SLionel Sambuc                 AcpiOsPrintf (" Target: %p [%s]\n", ObjDesc->Reference.Object,
1064433d6423SLionel Sambuc                     AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
1065433d6423SLionel Sambuc                         ObjDesc->Reference.Object)->Common.Type));
1066433d6423SLionel Sambuc             }
1067433d6423SLionel Sambuc         }
1068433d6423SLionel Sambuc         else
1069433d6423SLionel Sambuc         {
1070433d6423SLionel Sambuc             AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
1071433d6423SLionel Sambuc         }
1072433d6423SLionel Sambuc     }
1073433d6423SLionel Sambuc }
1074433d6423SLionel Sambuc 
1075433d6423SLionel Sambuc 
1076433d6423SLionel Sambuc /*******************************************************************************
1077433d6423SLionel Sambuc  *
1078433d6423SLionel Sambuc  * FUNCTION:    AcpiExDumpPackageObj
1079433d6423SLionel Sambuc  *
1080433d6423SLionel Sambuc  * PARAMETERS:  ObjDesc             - Descriptor to dump
1081433d6423SLionel Sambuc  *              Level               - Indentation Level
1082433d6423SLionel Sambuc  *              Index               - Package index for this object
1083433d6423SLionel Sambuc  *
1084433d6423SLionel Sambuc  * DESCRIPTION: Dumps the elements of the package
1085433d6423SLionel Sambuc  *
1086433d6423SLionel Sambuc  ******************************************************************************/
1087433d6423SLionel Sambuc 
1088433d6423SLionel Sambuc static void
AcpiExDumpPackageObj(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Level,UINT32 Index)1089433d6423SLionel Sambuc AcpiExDumpPackageObj (
1090433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     *ObjDesc,
1091433d6423SLionel Sambuc     UINT32                  Level,
1092433d6423SLionel Sambuc     UINT32                  Index)
1093433d6423SLionel Sambuc {
1094433d6423SLionel Sambuc     UINT32                  i;
1095433d6423SLionel Sambuc 
1096433d6423SLionel Sambuc 
1097433d6423SLionel Sambuc     /* Indentation and index output */
1098433d6423SLionel Sambuc 
1099433d6423SLionel Sambuc     if (Level > 0)
1100433d6423SLionel Sambuc     {
1101433d6423SLionel Sambuc         for (i = 0; i < Level; i++)
1102433d6423SLionel Sambuc         {
1103433d6423SLionel Sambuc             AcpiOsPrintf ("  ");
1104433d6423SLionel Sambuc         }
1105433d6423SLionel Sambuc 
1106433d6423SLionel Sambuc         AcpiOsPrintf ("[%.2d] ", Index);
1107433d6423SLionel Sambuc     }
1108433d6423SLionel Sambuc 
1109433d6423SLionel Sambuc     AcpiOsPrintf ("%p ", ObjDesc);
1110433d6423SLionel Sambuc 
1111433d6423SLionel Sambuc     /* Null package elements are allowed */
1112433d6423SLionel Sambuc 
1113433d6423SLionel Sambuc     if (!ObjDesc)
1114433d6423SLionel Sambuc     {
1115433d6423SLionel Sambuc         AcpiOsPrintf ("[Null Object]\n");
1116433d6423SLionel Sambuc         return;
1117433d6423SLionel Sambuc     }
1118433d6423SLionel Sambuc 
1119433d6423SLionel Sambuc     /* Packages may only contain a few object types */
1120433d6423SLionel Sambuc 
1121433d6423SLionel Sambuc     switch (ObjDesc->Common.Type)
1122433d6423SLionel Sambuc     {
1123433d6423SLionel Sambuc     case ACPI_TYPE_INTEGER:
1124433d6423SLionel Sambuc 
1125433d6423SLionel Sambuc         AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
1126433d6423SLionel Sambuc             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
1127433d6423SLionel Sambuc         break;
1128433d6423SLionel Sambuc 
1129433d6423SLionel Sambuc     case ACPI_TYPE_STRING:
1130433d6423SLionel Sambuc 
1131433d6423SLionel Sambuc         AcpiOsPrintf ("[String]  Value: ");
1132*29492bb7SDavid van Moolenbroek         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
1133433d6423SLionel Sambuc         AcpiOsPrintf ("\n");
1134433d6423SLionel Sambuc         break;
1135433d6423SLionel Sambuc 
1136433d6423SLionel Sambuc     case ACPI_TYPE_BUFFER:
1137433d6423SLionel Sambuc 
1138433d6423SLionel Sambuc         AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
1139433d6423SLionel Sambuc         if (ObjDesc->Buffer.Length)
1140433d6423SLionel Sambuc         {
1141*29492bb7SDavid van Moolenbroek             AcpiUtDebugDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
1142433d6423SLionel Sambuc                 ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
1143433d6423SLionel Sambuc         }
1144433d6423SLionel Sambuc         else
1145433d6423SLionel Sambuc         {
1146433d6423SLionel Sambuc             AcpiOsPrintf ("\n");
1147433d6423SLionel Sambuc         }
1148433d6423SLionel Sambuc         break;
1149433d6423SLionel Sambuc 
1150433d6423SLionel Sambuc     case ACPI_TYPE_PACKAGE:
1151433d6423SLionel Sambuc 
1152433d6423SLionel Sambuc         AcpiOsPrintf ("[Package] Contains %u Elements:\n",
1153433d6423SLionel Sambuc             ObjDesc->Package.Count);
1154433d6423SLionel Sambuc 
1155433d6423SLionel Sambuc         for (i = 0; i < ObjDesc->Package.Count; i++)
1156433d6423SLionel Sambuc         {
1157433d6423SLionel Sambuc             AcpiExDumpPackageObj (ObjDesc->Package.Elements[i], Level+1, i);
1158433d6423SLionel Sambuc         }
1159433d6423SLionel Sambuc         break;
1160433d6423SLionel Sambuc 
1161433d6423SLionel Sambuc     case ACPI_TYPE_LOCAL_REFERENCE:
1162433d6423SLionel Sambuc 
1163433d6423SLionel Sambuc         AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
1164433d6423SLionel Sambuc             AcpiUtGetReferenceName (ObjDesc),
1165433d6423SLionel Sambuc             ObjDesc->Reference.Class);
1166433d6423SLionel Sambuc         AcpiExDumpReferenceObj (ObjDesc);
1167433d6423SLionel Sambuc         break;
1168433d6423SLionel Sambuc 
1169433d6423SLionel Sambuc     default:
1170433d6423SLionel Sambuc 
1171433d6423SLionel Sambuc         AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type);
1172433d6423SLionel Sambuc         break;
1173433d6423SLionel Sambuc     }
1174433d6423SLionel Sambuc }
1175433d6423SLionel Sambuc 
1176433d6423SLionel Sambuc 
1177433d6423SLionel Sambuc /*******************************************************************************
1178433d6423SLionel Sambuc  *
1179433d6423SLionel Sambuc  * FUNCTION:    AcpiExDumpObjectDescriptor
1180433d6423SLionel Sambuc  *
1181433d6423SLionel Sambuc  * PARAMETERS:  ObjDesc             - Descriptor to dump
1182433d6423SLionel Sambuc  *              Flags               - Force display if TRUE
1183433d6423SLionel Sambuc  *
1184433d6423SLionel Sambuc  * DESCRIPTION: Dumps the members of the object descriptor given.
1185433d6423SLionel Sambuc  *
1186433d6423SLionel Sambuc  ******************************************************************************/
1187433d6423SLionel Sambuc 
1188433d6423SLionel Sambuc void
AcpiExDumpObjectDescriptor(ACPI_OPERAND_OBJECT * ObjDesc,UINT32 Flags)1189433d6423SLionel Sambuc AcpiExDumpObjectDescriptor (
1190433d6423SLionel Sambuc     ACPI_OPERAND_OBJECT     *ObjDesc,
1191433d6423SLionel Sambuc     UINT32                  Flags)
1192433d6423SLionel Sambuc {
1193433d6423SLionel Sambuc     ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
1194433d6423SLionel Sambuc 
1195433d6423SLionel Sambuc 
1196433d6423SLionel Sambuc     if (!ObjDesc)
1197433d6423SLionel Sambuc     {
1198433d6423SLionel Sambuc         return_VOID;
1199433d6423SLionel Sambuc     }
1200433d6423SLionel Sambuc 
1201433d6423SLionel Sambuc     if (!Flags)
1202433d6423SLionel Sambuc     {
1203*29492bb7SDavid van Moolenbroek         /* Check if debug output enabled */
1204*29492bb7SDavid van Moolenbroek 
1205*29492bb7SDavid van Moolenbroek         if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
1206433d6423SLionel Sambuc         {
1207433d6423SLionel Sambuc             return_VOID;
1208433d6423SLionel Sambuc         }
1209433d6423SLionel Sambuc     }
1210433d6423SLionel Sambuc 
1211433d6423SLionel Sambuc     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
1212433d6423SLionel Sambuc     {
1213433d6423SLionel Sambuc         AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
1214433d6423SLionel Sambuc 
1215433d6423SLionel Sambuc         AcpiOsPrintf ("\nAttached Object (%p):\n",
1216433d6423SLionel Sambuc             ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object);
1217433d6423SLionel Sambuc 
1218*29492bb7SDavid van Moolenbroek         ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object;
1219*29492bb7SDavid van Moolenbroek         goto DumpObject;
1220433d6423SLionel Sambuc     }
1221433d6423SLionel Sambuc 
1222433d6423SLionel Sambuc     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
1223433d6423SLionel Sambuc     {
1224433d6423SLionel Sambuc         AcpiOsPrintf (
1225*29492bb7SDavid van Moolenbroek             "%p is not an ACPI operand object: [%s]\n",
1226433d6423SLionel Sambuc             ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
1227433d6423SLionel Sambuc         return_VOID;
1228433d6423SLionel Sambuc     }
1229433d6423SLionel Sambuc 
1230*29492bb7SDavid van Moolenbroek     /* Validate the object type */
1231*29492bb7SDavid van Moolenbroek 
1232*29492bb7SDavid van Moolenbroek     if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1233433d6423SLionel Sambuc     {
1234*29492bb7SDavid van Moolenbroek         AcpiOsPrintf ("Not a known object type: %2.2X\n",
1235*29492bb7SDavid van Moolenbroek             ObjDesc->Common.Type);
1236433d6423SLionel Sambuc         return_VOID;
1237433d6423SLionel Sambuc     }
1238433d6423SLionel Sambuc 
1239*29492bb7SDavid van Moolenbroek 
1240*29492bb7SDavid van Moolenbroek DumpObject:
1241*29492bb7SDavid van Moolenbroek 
1242433d6423SLionel Sambuc     /* Common Fields */
1243433d6423SLionel Sambuc 
1244433d6423SLionel Sambuc     AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
1245433d6423SLionel Sambuc 
1246433d6423SLionel Sambuc     /* Object-specific fields */
1247433d6423SLionel Sambuc 
1248433d6423SLionel Sambuc     AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1249*29492bb7SDavid van Moolenbroek 
1250*29492bb7SDavid van Moolenbroek     if (ObjDesc->Common.Type == ACPI_TYPE_REGION)
1251*29492bb7SDavid van Moolenbroek     {
1252*29492bb7SDavid van Moolenbroek         ObjDesc = ObjDesc->Common.NextObject;
1253*29492bb7SDavid van Moolenbroek         if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
1254*29492bb7SDavid van Moolenbroek         {
1255*29492bb7SDavid van Moolenbroek             AcpiOsPrintf ("Secondary object is not a known object type: %2.2X\n",
1256*29492bb7SDavid van Moolenbroek                 ObjDesc->Common.Type);
1257*29492bb7SDavid van Moolenbroek 
1258*29492bb7SDavid van Moolenbroek             return_VOID;
1259*29492bb7SDavid van Moolenbroek         }
1260*29492bb7SDavid van Moolenbroek 
1261*29492bb7SDavid van Moolenbroek         AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc);
1262*29492bb7SDavid van Moolenbroek         AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
1263*29492bb7SDavid van Moolenbroek     }
1264*29492bb7SDavid van Moolenbroek 
1265433d6423SLionel Sambuc     return_VOID;
1266433d6423SLionel Sambuc }
1267433d6423SLionel Sambuc 
1268433d6423SLionel Sambuc #endif
1269