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