nsdump.c revision 82367
1/******************************************************************************
2 *
3 * Module Name: nsdump - table dumping routines for debug
4 *              $Revision: 95 $
5 *
6 *****************************************************************************/
7
8/******************************************************************************
9 *
10 * 1. Copyright Notice
11 *
12 * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp.
13 * All rights reserved.
14 *
15 * 2. License
16 *
17 * 2.1. This is your license from Intel Corp. under its intellectual property
18 * rights.  You may have additional license terms from the party that provided
19 * you this software, covering your right to use that party's intellectual
20 * property rights.
21 *
22 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23 * copy of the source code appearing in this file ("Covered Code") an
24 * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25 * base code distributed originally by Intel ("Original Intel Code") to copy,
26
27 * make derivatives, distribute, use and display any portion of the Covered
28 * Code in any form, with the right to sublicense such rights; and
29 *
30 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
31 * license (with the right to sublicense), under only those claims of Intel
32 * patents that are infringed by the Original Intel Code, to make, use, sell,
33 * offer to sell, and import the Covered Code and derivative works thereof
34 * solely to the minimum extent necessary to exercise the above copyright
35 * license, and in no event shall the patent license extend to any additions
36 * to or modifications of the Original Intel Code.  No other license or right
37 * is granted directly or by implication, estoppel or otherwise;
38 *
39 * The above copyright and patent license is granted only if the following
40 * conditions are met:
41 *
42 * 3. Conditions
43 *
44 * 3.1. Redistribution of Source with Rights to Further Distribute Source.
45 * Redistribution of source code of any substantial portion of the Covered
46 * Code or modification with rights to further distribute source must include
47 * the above Copyright Notice, the above License, this list of Conditions,
48 * and the following Disclaimer and Export Compliance provision.  In addition,
49 * Licensee must cause all Covered Code to which Licensee contributes to
50 * contain a file documenting the changes Licensee made to create that Covered
51 * Code and the date of any change.  Licensee must include in that file the
52 * documentation of any changes made by any predecessor Licensee.  Licensee
53 * must include a prominent statement that the modification is derived,
54 * directly or indirectly, from Original Intel Code.
55 *
56 * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
57 * Redistribution of source code of any substantial portion of the Covered
58 * Code or modification without rights to further distribute source must
59 * include the following Disclaimer and Export Compliance provision in the
60 * documentation and/or other materials provided with distribution.  In
61 * addition, Licensee may not authorize further sublicense of source of any
62 * portion of the Covered Code, and must include terms to the effect that the
63 * license from Licensee to its licensee is limited to the intellectual
64 * property embodied in the software Licensee provides to its licensee, and
65 * not to intellectual property embodied in modifications its licensee may
66 * make.
67 *
68 * 3.3. Redistribution of Executable. Redistribution in executable form of any
69 * substantial portion of the Covered Code or modification must reproduce the
70 * above Copyright Notice, and the following Disclaimer and Export Compliance
71 * provision in the documentation and/or other materials provided with the
72 * distribution.
73 *
74 * 3.4. Intel retains all right, title, and interest in and to the Original
75 * Intel Code.
76 *
77 * 3.5. Neither the name Intel nor any other trademark owned or controlled by
78 * Intel shall be used in advertising or otherwise to promote the sale, use or
79 * other dealings in products derived from or relating to the Covered Code
80 * without prior written authorization from Intel.
81 *
82 * 4. Disclaimer and Export Compliance
83 *
84 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
85 * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
86 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
87 * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
88 * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
89 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
90 * PARTICULAR PURPOSE.
91 *
92 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
93 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
94 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
95 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
96 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
97 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
98 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
99 * LIMITED REMEDY.
100 *
101 * 4.3. Licensee shall not export, either directly or indirectly, any of this
102 * software or system incorporating such software without first obtaining any
103 * required license or other approval from the U. S. Department of Commerce or
104 * any other agency or department of the United States Government.  In the
105 * event Licensee exports any such software from the United States or
106 * re-exports any such software from a foreign destination, Licensee shall
107 * ensure that the distribution and export/re-export of the software is in
108 * compliance with all laws, regulations, orders, or other restrictions of the
109 * U.S. Export Administration Regulations. Licensee agrees that neither it nor
110 * any of its subsidiaries will export/re-export any technical data, process,
111 * software, or service, directly or indirectly, to any country for which the
112 * United States government or any agency thereof requires an export license,
113 * other governmental approval, or letter of assurance, without first obtaining
114 * such license, approval or letter.
115 *
116 *****************************************************************************/
117
118#define __NSDUMP_C__
119
120#include "acpi.h"
121#include "acinterp.h"
122#include "acnamesp.h"
123#include "actables.h"
124
125
126#define _COMPONENT          ACPI_NAMESPACE
127        MODULE_NAME         ("nsdump")
128
129
130#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
131
132/*******************************************************************************
133 *
134 * FUNCTION:    AcpiNsDumpPathname
135 *
136 * PARAMETERS:  Handle              - Object
137 *              Msg                 - Prefix message
138 *              Level               - Desired debug level
139 *              Component           - Caller's component ID
140 *
141 * DESCRIPTION: Print an object's full namespace pathname
142 *              Manages allocation/freeing of a pathname buffer
143 *
144 ******************************************************************************/
145
146ACPI_STATUS
147AcpiNsDumpPathname (
148    ACPI_HANDLE             Handle,
149    NATIVE_CHAR             *Msg,
150    UINT32                  Level,
151    UINT32                  Component)
152{
153    NATIVE_CHAR             *Buffer;
154    UINT32                  Length;
155
156
157    FUNCTION_TRACE ("NsDumpPathname");
158
159    /* Do this only if the requested debug level and component are enabled */
160
161    if (!(AcpiDbgLevel & Level) || !(AcpiDbgLayer & Component))
162    {
163        return_ACPI_STATUS (AE_OK);
164    }
165
166    Buffer = ACPI_MEM_ALLOCATE (PATHNAME_MAX);
167    if (!Buffer)
168    {
169        return_ACPI_STATUS (AE_NO_MEMORY);
170    }
171
172    /* Convert handle to a full pathname and print it (with supplied message) */
173
174    Length = PATHNAME_MAX;
175    if (ACPI_SUCCESS (AcpiNsHandleToPathname (Handle, &Length, Buffer)))
176    {
177        AcpiOsPrintf ("%s %s (%p)\n", Msg, Buffer, Handle);
178    }
179
180    ACPI_MEM_FREE (Buffer);
181
182    return_ACPI_STATUS (AE_OK);
183}
184
185
186/*******************************************************************************
187 *
188 * FUNCTION:    AcpiNsDumpOneObject
189 *
190 * PARAMETERS:  Handle              - Node to be dumped
191 *              Level               - Nesting level of the handle
192 *              Context             - Passed into WalkNamespace
193 *
194 * DESCRIPTION: Dump a single Node
195 *              This procedure is a UserFunction called by AcpiNsWalkNamespace.
196 *
197 ******************************************************************************/
198
199ACPI_STATUS
200AcpiNsDumpOneObject (
201    ACPI_HANDLE             ObjHandle,
202    UINT32                  Level,
203    void                    *Context,
204    void                    **ReturnValue)
205{
206    ACPI_WALK_INFO          *Info = (ACPI_WALK_INFO *) Context;
207    ACPI_NAMESPACE_NODE     *ThisNode;
208    UINT8                   *Value;
209    ACPI_OPERAND_OBJECT     *ObjDesc = NULL;
210    ACPI_OBJECT_TYPE8       ObjType;
211    ACPI_OBJECT_TYPE8       Type;
212    UINT32                  BytesToDump;
213    UINT32                  DownstreamSiblingMask = 0;
214    UINT32                  LevelTmp;
215    UINT32                  WhichBit;
216
217
218    PROC_NAME ("AcpiNsDumpOneObject");
219
220
221    ThisNode = AcpiNsConvertHandleToEntry (ObjHandle);
222
223    LevelTmp    = Level;
224    Type        = ThisNode->Type;
225    WhichBit    = 1;
226
227
228    if (!(AcpiDbgLevel & Info->DebugLevel))
229    {
230        return (AE_OK);
231    }
232
233    if (!ObjHandle)
234    {
235        ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n"));
236        return (AE_OK);
237    }
238
239    /* Check if the owner matches */
240
241    if ((Info->OwnerId != ACPI_UINT32_MAX) &&
242        (Info->OwnerId != ThisNode->OwnerId))
243    {
244        return (AE_OK);
245    }
246
247
248    /* Indent the object according to the level */
249
250    while (LevelTmp--)
251    {
252
253        /* Print appropriate characters to form tree structure */
254
255        if (LevelTmp)
256        {
257            if (DownstreamSiblingMask & WhichBit)
258            {
259                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "|"));
260            }
261
262            else
263            {
264                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
265            }
266
267            WhichBit <<= 1;
268        }
269
270        else
271        {
272            if (AcpiNsExistDownstreamSibling (ThisNode + 1))
273            {
274                DownstreamSiblingMask |= (1 << (Level - 1));
275                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
276            }
277
278            else
279            {
280                DownstreamSiblingMask &= ACPI_UINT32_MAX ^ (1 << (Level - 1));
281                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
282            }
283
284            if (ThisNode->Child == NULL)
285            {
286                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "-"));
287            }
288
289            else if (AcpiNsExistDownstreamSibling (ThisNode->Child))
290            {
291                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
292            }
293
294            else
295            {
296                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "-"));
297            }
298        }
299    }
300
301
302    /* Check the integrity of our data */
303
304    if (Type > INTERNAL_TYPE_MAX)
305    {
306        Type = INTERNAL_TYPE_DEF_ANY;                                /* prints as *ERROR* */
307    }
308
309    if (!AcpiUtValidAcpiName (ThisNode->Name))
310    {
311        REPORT_WARNING (("Invalid ACPI Name %08X\n", ThisNode->Name));
312    }
313
314    /*
315     * Now we can print out the pertinent information
316     */
317
318    ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %4.4s %-9s ", &ThisNode->Name, AcpiUtGetTypeName (Type)));
319    ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "%p S:%p O:%p",  ThisNode, ThisNode->Child, ThisNode->Object));
320
321
322    if (!ThisNode->Object)
323    {
324        /* No attached object, we are done */
325
326        ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
327        return (AE_OK);
328    }
329
330    switch (Type)
331    {
332
333    case ACPI_TYPE_METHOD:
334
335        /* Name is a Method and its AML offset/length are set */
336
337        ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " M:%p-%X\n",
338                    ((ACPI_OPERAND_OBJECT  *) ThisNode->Object)->Method.Pcode,
339                    ((ACPI_OPERAND_OBJECT  *) ThisNode->Object)->Method.PcodeLength));
340
341        break;
342
343
344    case ACPI_TYPE_INTEGER:
345
346        ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " N:%X\n",
347                    ((ACPI_OPERAND_OBJECT  *) ThisNode->Object)->Integer.Value));
348        break;
349
350
351    case ACPI_TYPE_STRING:
352
353        ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " S:%p-%X\n",
354                    ((ACPI_OPERAND_OBJECT  *) ThisNode->Object)->String.Pointer,
355                    ((ACPI_OPERAND_OBJECT  *) ThisNode->Object)->String.Length));
356        break;
357
358
359    case ACPI_TYPE_BUFFER:
360
361        ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " B:%p-%X\n",
362                    ((ACPI_OPERAND_OBJECT  *) ThisNode->Object)->Buffer.Pointer,
363                    ((ACPI_OPERAND_OBJECT  *) ThisNode->Object)->Buffer.Length));
364        break;
365
366
367    default:
368
369        ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
370        break;
371    }
372
373    /* If debug turned off, done */
374
375    if (!(AcpiDbgLevel & ACPI_LV_VALUES))
376    {
377        return (AE_OK);
378    }
379
380
381    /* If there is an attached object, display it */
382
383    Value = ThisNode->Object;
384
385    /* Dump attached objects */
386
387    while (Value)
388    {
389        ObjType = INTERNAL_TYPE_INVALID;
390
391        /* Decode the type of attached object and dump the contents */
392
393        ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "        Attached Object %p: ", Value));
394
395        if (AcpiTbSystemTablePointer (Value))
396        {
397            ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to AML Code)\n"));
398            BytesToDump = 16;
399        }
400
401        else if (VALID_DESCRIPTOR_TYPE (Value, ACPI_DESC_TYPE_NAMED))
402        {
403            ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to Node)\n"));
404            BytesToDump = sizeof (ACPI_NAMESPACE_NODE);
405        }
406
407
408        else if (VALID_DESCRIPTOR_TYPE (Value, ACPI_DESC_TYPE_INTERNAL))
409        {
410            ObjDesc = (ACPI_OPERAND_OBJECT  *) Value;
411            ObjType = ObjDesc->Common.Type;
412
413            if (ObjType > INTERNAL_TYPE_MAX)
414            {
415                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %X [UNKNOWN])\n", ObjType));
416                BytesToDump = 32;
417            }
418
419            else
420            {
421                ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %X [%s])\n",
422                                    ObjType, AcpiUtGetTypeName (ObjType)));
423                BytesToDump = sizeof (ACPI_OPERAND_OBJECT);
424            }
425        }
426
427        else
428        {
429            ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(String or Buffer - not descriptor)\n", Value));
430            BytesToDump = 16;
431        }
432
433        DUMP_BUFFER (Value, BytesToDump);
434
435        /* If value is NOT an internal object, we are done */
436
437        if ((AcpiTbSystemTablePointer (Value)) ||
438            (VALID_DESCRIPTOR_TYPE (Value, ACPI_DESC_TYPE_NAMED)))
439        {
440            goto Cleanup;
441        }
442
443        /*
444         * Valid object, get the pointer to next level, if any
445         */
446        switch (ObjType)
447        {
448        case ACPI_TYPE_STRING:
449            Value = (UINT8 *) ObjDesc->String.Pointer;
450            break;
451
452        case ACPI_TYPE_BUFFER:
453            Value = (UINT8 *) ObjDesc->Buffer.Pointer;
454            break;
455
456        case ACPI_TYPE_BUFFER_FIELD:
457            Value = (UINT8 *) ObjDesc->BufferField.BufferObj;
458            break;
459
460        case ACPI_TYPE_PACKAGE:
461            Value = (UINT8 *) ObjDesc->Package.Elements;
462            break;
463
464        case ACPI_TYPE_METHOD:
465            Value = (UINT8 *) ObjDesc->Method.Pcode;
466            break;
467
468        case INTERNAL_TYPE_REGION_FIELD:
469            Value = (UINT8 *) ObjDesc->Field.RegionObj;
470            break;
471
472        case INTERNAL_TYPE_BANK_FIELD:
473            Value = (UINT8 *) ObjDesc->BankField.RegionObj;
474            break;
475
476        case INTERNAL_TYPE_INDEX_FIELD:
477            Value = (UINT8 *) ObjDesc->IndexField.IndexObj;
478            break;
479
480       default:
481            goto Cleanup;
482        }
483
484        ObjType = INTERNAL_TYPE_INVALID;     /* Terminate loop after next pass */
485    }
486
487Cleanup:
488    ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));
489    return (AE_OK);
490}
491
492
493/*******************************************************************************
494 *
495 * FUNCTION:    AcpiNsDumpObjects
496 *
497 * PARAMETERS:  Type                - Object type to be dumped
498 *              MaxDepth            - Maximum depth of dump.  Use ACPI_UINT32_MAX
499 *                                    for an effectively unlimited depth.
500 *              OwnerId             - Dump only objects owned by this ID.  Use
501 *                                    ACPI_UINT32_MAX to match all owners.
502 *              StartHandle         - Where in namespace to start/end search
503 *
504 * DESCRIPTION: Dump typed objects within the loaded namespace.
505 *              Uses AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject.
506 *
507 ******************************************************************************/
508
509void
510AcpiNsDumpObjects (
511    ACPI_OBJECT_TYPE8       Type,
512    UINT32                  MaxDepth,
513    UINT32                  OwnerId,
514    ACPI_HANDLE             StartHandle)
515{
516    ACPI_WALK_INFO          Info;
517
518
519    Info.DebugLevel = ACPI_LV_TABLES;
520    Info.OwnerId = OwnerId;
521
522    AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, NS_WALK_NO_UNLOCK, AcpiNsDumpOneObject,
523                        (void *) &Info, NULL);
524}
525
526
527#ifndef _ACPI_ASL_COMPILER
528/*******************************************************************************
529 *
530 * FUNCTION:    AcpiNsDumpOneDevice
531 *
532 * PARAMETERS:  Handle              - Node to be dumped
533 *              Level               - Nesting level of the handle
534 *              Context             - Passed into WalkNamespace
535 *
536 * DESCRIPTION: Dump a single Node that represents a device
537 *              This procedure is a UserFunction called by AcpiNsWalkNamespace.
538 *
539 ******************************************************************************/
540
541ACPI_STATUS
542AcpiNsDumpOneDevice (
543    ACPI_HANDLE             ObjHandle,
544    UINT32                  Level,
545    void                    *Context,
546    void                    **ReturnValue)
547{
548    ACPI_DEVICE_INFO        Info;
549    ACPI_STATUS             Status;
550    UINT32                  i;
551
552    PROC_NAME ("AcpiNsDumpOneDevice");
553
554
555    Status = AcpiNsDumpOneObject (ObjHandle, Level, Context, ReturnValue);
556
557    Status = AcpiGetObjectInfo (ObjHandle, &Info);
558    if (ACPI_SUCCESS (Status))
559    {
560        for (i = 0; i < Level; i++)
561        {
562            ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
563        }
564
565        ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "    HID: %.8X, ADR: %.8X, Status: %x\n",
566                        Info.HardwareId, Info.Address, Info.CurrentStatus));
567    }
568
569    return (Status);
570}
571
572
573/*******************************************************************************
574 *
575 * FUNCTION:    AcpiNsDumpRootDevices
576 *
577 * PARAMETERS:  None
578 *
579 * DESCRIPTION: Dump all objects of type "device"
580 *
581 ******************************************************************************/
582
583void
584AcpiNsDumpRootDevices (void)
585{
586    ACPI_HANDLE             SysBusHandle;
587
588    PROC_NAME ("AcpiNsDumpRootDevices");
589
590
591    /* Only dump the table if tracing is enabled */
592
593    if (!(ACPI_DB_TABLES & AcpiDbgLevel))
594    {
595        return;
596    }
597
598    AcpiGetHandle (0, NS_SYSTEM_BUS, &SysBusHandle);
599
600    ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Display of all devices in the namespace:\n"));
601    AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, SysBusHandle, ACPI_UINT32_MAX, NS_WALK_NO_UNLOCK,
602                        AcpiNsDumpOneDevice, NULL, NULL);
603}
604
605#endif
606
607/*******************************************************************************
608 *
609 * FUNCTION:    AcpiNsDumpTables
610 *
611 * PARAMETERS:  SearchBase          - Root of subtree to be dumped, or
612 *                                    NS_ALL to dump the entire namespace
613 *              MaxDepth            - Maximum depth of dump.  Use INT_MAX
614 *                                    for an effectively unlimited depth.
615 *
616 * DESCRIPTION: Dump the name space, or a portion of it.
617 *
618 ******************************************************************************/
619
620void
621AcpiNsDumpTables (
622    ACPI_HANDLE             SearchBase,
623    UINT32                  MaxDepth)
624{
625    ACPI_HANDLE             SearchHandle = SearchBase;
626
627
628    FUNCTION_TRACE ("NsDumpTables");
629
630
631    if (!AcpiGbl_RootNode)
632    {
633        /*
634         * If the name space has not been initialized,
635         * there is nothing to dump.
636         */
637        ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "name space not initialized!\n"));
638        return_VOID;
639    }
640
641    if (NS_ALL == SearchBase)
642    {
643        /*  entire namespace    */
644
645        SearchHandle = AcpiGbl_RootNode;
646        ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n"));
647    }
648
649
650    AcpiNsDumpObjects (ACPI_TYPE_ANY, MaxDepth, ACPI_UINT32_MAX, SearchHandle);
651    return_VOID;
652}
653
654
655/*******************************************************************************
656 *
657 * FUNCTION:    AcpiNsDumpEntry
658 *
659 * PARAMETERS:  Handle              - Node to be dumped
660 *              DebugLevel          - Output level
661 *
662 * DESCRIPTION: Dump a single Node
663 *
664 ******************************************************************************/
665
666void
667AcpiNsDumpEntry (
668    ACPI_HANDLE             Handle,
669    UINT32                  DebugLevel)
670{
671    ACPI_WALK_INFO          Info;
672
673
674    FUNCTION_TRACE_PTR ("NsDumpEntry", Handle);
675
676    Info.DebugLevel = DebugLevel;
677    Info.OwnerId = ACPI_UINT32_MAX;
678
679    AcpiNsDumpOneObject (Handle, 1, &Info, NULL);
680
681    return_VOID;
682}
683
684#endif
685
686