Raise WARNS to 6:
[dragonfly.git] / sys / contrib / dev / acpica-unix-20040527 / NAMESPACE / nsdump.c
1 /******************************************************************************
2  *
3  * Module Name: nsdump - table dumping routines for debug
4  *              $Revision: 158 $
5  *
6  *****************************************************************************/
7
8 /******************************************************************************
9  *
10  * 1. Copyright Notice
11  *
12  * Some or all of this work - Copyright (c) 1999 - 2004, 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 "acnamesp.h"
122 #include "acparser.h"
123
124
125 #define _COMPONENT          ACPI_NAMESPACE
126         ACPI_MODULE_NAME    ("nsdump")
127
128
129 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
130
131 /*******************************************************************************
132  *
133  * FUNCTION:    AcpiNsPrintPathname
134  *
135  * PARAMETERS:  NumSegment          - Number of ACPI name segments
136  *              Pathname            - The compressed (internal) path
137  *
138  * DESCRIPTION: Print an object's full namespace pathname
139  *
140  ******************************************************************************/
141
142 void
143 AcpiNsPrintPathname (
144     UINT32                  NumSegments,
145     char                    *Pathname)
146 {
147     ACPI_FUNCTION_NAME ("NsPrintPathname");
148
149
150     if (!(AcpiDbgLevel & ACPI_LV_NAMES) || !(AcpiDbgLayer & ACPI_NAMESPACE))
151     {
152         return;
153     }
154
155     /* Print the entire name */
156
157     ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "["));
158
159     while (NumSegments)
160     {
161         AcpiOsPrintf ("%4.4s", Pathname);
162         Pathname += ACPI_NAME_SIZE;
163
164         NumSegments--;
165         if (NumSegments)
166         {
167             AcpiOsPrintf (".");
168         }
169     }
170
171     AcpiOsPrintf ("]\n");
172 }
173
174
175 /*******************************************************************************
176  *
177  * FUNCTION:    AcpiNsDumpPathname
178  *
179  * PARAMETERS:  Handle              - Object
180  *              Msg                 - Prefix message
181  *              Level               - Desired debug level
182  *              Component           - Caller's component ID
183  *
184  * DESCRIPTION: Print an object's full namespace pathname
185  *              Manages allocation/freeing of a pathname buffer
186  *
187  ******************************************************************************/
188
189 void
190 AcpiNsDumpPathname (
191     ACPI_HANDLE             Handle,
192     char                    *Msg,
193     UINT32                  Level,
194     UINT32                  Component)
195 {
196
197     ACPI_FUNCTION_TRACE ("NsDumpPathname");
198
199
200     /* Do this only if the requested debug level and component are enabled */
201
202     if (!(AcpiDbgLevel & Level) || !(AcpiDbgLayer & Component))
203     {
204         return_VOID;
205     }
206
207     /* Convert handle to a full pathname and print it (with supplied message) */
208
209     AcpiNsPrintNodePathname (Handle, Msg);
210     AcpiOsPrintf ("\n");
211     return_VOID;
212 }
213
214
215 /*******************************************************************************
216  *
217  * FUNCTION:    AcpiNsDumpOneObject
218  *
219  * PARAMETERS:  Handle              - Node to be dumped
220  *              Level               - Nesting level of the handle
221  *              Context             - Passed into WalkNamespace
222  *
223  * DESCRIPTION: Dump a single Node
224  *              This procedure is a UserFunction called by AcpiNsWalkNamespace.
225  *
226  ******************************************************************************/
227
228 ACPI_STATUS
229 AcpiNsDumpOneObject (
230     ACPI_HANDLE             ObjHandle,
231     UINT32                  Level,
232     void                    *Context,
233     void                    **ReturnValue)
234 {
235     ACPI_WALK_INFO          *Info = (ACPI_WALK_INFO *) Context;
236     ACPI_NAMESPACE_NODE     *ThisNode;
237     ACPI_OPERAND_OBJECT     *ObjDesc = NULL;
238     ACPI_OBJECT_TYPE        ObjType;
239     ACPI_OBJECT_TYPE        Type;
240     UINT32                  BytesToDump;
241     UINT32                  DbgLevel;
242     UINT32                  i;
243
244
245     ACPI_FUNCTION_NAME ("NsDumpOneObject");
246
247
248     /* Is output enabled? */
249
250     if (!(AcpiDbgLevel & Info->DebugLevel))
251     {
252         return (AE_OK);
253     }
254
255     if (!ObjHandle)
256     {
257         ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n"));
258         return (AE_OK);
259     }
260
261     ThisNode = AcpiNsMapHandleToNode (ObjHandle);
262     Type = ThisNode->Type;
263
264     /* Check if the owner matches */
265
266     if ((Info->OwnerId != ACPI_UINT32_MAX) &&
267         (Info->OwnerId != ThisNode->OwnerId))
268     {
269         return (AE_OK);
270     }
271
272     /* Indent the object according to the level */
273
274     AcpiOsPrintf ("%2d%*s", (UINT32) Level - 1, (int) Level * 2, " ");
275
276     /* Check the node type and name */
277
278     if (Type > ACPI_TYPE_LOCAL_MAX)
279     {
280         ACPI_REPORT_WARNING (("Invalid ACPI Type %08X\n", Type));
281     }
282
283     if (!AcpiUtValidAcpiName (ThisNode->Name.Integer))
284     {
285         ACPI_REPORT_WARNING (("Invalid ACPI Name %08X\n", ThisNode->Name.Integer));
286     }
287
288     /*
289      * Now we can print out the pertinent information
290      */
291     AcpiOsPrintf ("%4.4s %-12s %p ",
292             AcpiUtGetNodeName (ThisNode), AcpiUtGetTypeName (Type), ThisNode);
293
294     DbgLevel = AcpiDbgLevel;
295     AcpiDbgLevel = 0;
296     ObjDesc = AcpiNsGetAttachedObject (ThisNode);
297     AcpiDbgLevel = DbgLevel;
298
299     switch (Info->DisplayType)
300     {
301     case ACPI_DISPLAY_SUMMARY:
302
303         if (!ObjDesc)
304         {
305             /* No attached object, we are done */
306
307             AcpiOsPrintf ("\n");
308             return (AE_OK);
309         }
310
311         switch (Type)
312         {
313         case ACPI_TYPE_PROCESSOR:
314
315             AcpiOsPrintf ("ID %X Len %.4X Addr %p\n",
316                         ObjDesc->Processor.ProcId,
317                         ObjDesc->Processor.Length,
318                         (char *) ObjDesc->Processor.Address);
319             break;
320
321
322         case ACPI_TYPE_DEVICE:
323
324             AcpiOsPrintf ("Notify Object: %p\n", ObjDesc);
325             break;
326
327
328         case ACPI_TYPE_METHOD:
329
330             AcpiOsPrintf ("Args %X Len %.4X Aml %p\n",
331                         (UINT32) ObjDesc->Method.ParamCount,
332                         ObjDesc->Method.AmlLength,
333                         ObjDesc->Method.AmlStart);
334             break;
335
336
337         case ACPI_TYPE_INTEGER:
338
339             AcpiOsPrintf ("= %8.8X%8.8X\n",
340                         ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
341             break;
342
343
344         case ACPI_TYPE_PACKAGE:
345
346             if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
347             {
348                 AcpiOsPrintf ("Elements %.2X\n",
349                             ObjDesc->Package.Count);
350             }
351             else
352             {
353                 AcpiOsPrintf ("[Length not yet evaluated]\n");
354             }
355             break;
356
357
358         case ACPI_TYPE_BUFFER:
359
360             if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
361             {
362                 AcpiOsPrintf ("Len %.2X",
363                             ObjDesc->Buffer.Length);
364
365                 /* Dump some of the buffer */
366
367                 if (ObjDesc->Buffer.Length > 0)
368                 {
369                     AcpiOsPrintf (" =");
370                     for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++)
371                     {
372                         AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]);
373                     }
374                 }
375                 AcpiOsPrintf ("\n");
376             }
377             else
378             {
379                 AcpiOsPrintf ("[Length not yet evaluated]\n");
380             }
381             break;
382
383
384         case ACPI_TYPE_STRING:
385
386             AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length);
387             AcpiUtPrintString (ObjDesc->String.Pointer, 32);
388             AcpiOsPrintf ("\n");
389             break;
390
391
392         case ACPI_TYPE_REGION:
393
394             AcpiOsPrintf ("[%s]", AcpiUtGetRegionName (ObjDesc->Region.SpaceId));
395             if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)
396             {
397                 AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n",
398                             ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
399                             ObjDesc->Region.Length);
400             }
401             else
402             {
403                 AcpiOsPrintf (" [Address/Length not yet evaluated]\n");
404             }
405             break;
406
407
408         case ACPI_TYPE_LOCAL_REFERENCE:
409
410             AcpiOsPrintf ("[%s]\n",
411                     AcpiPsGetOpcodeName (ObjDesc->Reference.Opcode));
412             break;
413
414
415         case ACPI_TYPE_BUFFER_FIELD:
416
417             if (ObjDesc->BufferField.BufferObj &&
418                 ObjDesc->BufferField.BufferObj->Buffer.Node)
419             {
420                 AcpiOsPrintf ("Buf [%4.4s]",
421                         AcpiUtGetNodeName (ObjDesc->BufferField.BufferObj->Buffer.Node));
422             }
423             break;
424
425
426         case ACPI_TYPE_LOCAL_REGION_FIELD:
427
428             AcpiOsPrintf ("Rgn [%4.4s]",
429                     AcpiUtGetNodeName (ObjDesc->CommonField.RegionObj->Region.Node));
430             break;
431
432
433         case ACPI_TYPE_LOCAL_BANK_FIELD:
434
435             AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]",
436                     AcpiUtGetNodeName (ObjDesc->CommonField.RegionObj->Region.Node),
437                     AcpiUtGetNodeName (ObjDesc->BankField.BankObj->CommonField.Node));
438             break;
439
440
441         case ACPI_TYPE_LOCAL_INDEX_FIELD:
442
443             AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]",
444                     AcpiUtGetNodeName (ObjDesc->IndexField.IndexObj->CommonField.Node),
445                     AcpiUtGetNodeName (ObjDesc->IndexField.DataObj->CommonField.Node));
446             break;
447
448
449         case ACPI_TYPE_LOCAL_ALIAS:
450         case ACPI_TYPE_LOCAL_METHOD_ALIAS:
451
452             AcpiOsPrintf ("Target %4.4s (%p)\n", AcpiUtGetNodeName (ObjDesc), ObjDesc);
453             break;
454
455         default:
456
457             AcpiOsPrintf ("Object %p\n", ObjDesc);
458             break;
459         }
460
461         /* Common field handling */
462
463         switch (Type)
464         {
465         case ACPI_TYPE_BUFFER_FIELD:
466         case ACPI_TYPE_LOCAL_REGION_FIELD:
467         case ACPI_TYPE_LOCAL_BANK_FIELD:
468         case ACPI_TYPE_LOCAL_INDEX_FIELD:
469
470             AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n",
471                     (ObjDesc->CommonField.BaseByteOffset * 8)
472                         + ObjDesc->CommonField.StartFieldBitOffset,
473                     ObjDesc->CommonField.BitLength,
474                     ObjDesc->CommonField.AccessByteWidth);
475             break;
476
477         default:
478             break;
479         }
480         break;
481
482
483     case ACPI_DISPLAY_OBJECTS:
484
485         AcpiOsPrintf ("O:%p", ObjDesc);
486         if (!ObjDesc)
487         {
488             /* No attached object, we are done */
489
490             AcpiOsPrintf ("\n");
491             return (AE_OK);
492         }
493
494         AcpiOsPrintf ("(R%d)",
495                 ObjDesc->Common.ReferenceCount);
496
497         switch (Type)
498         {
499         case ACPI_TYPE_METHOD:
500
501             /* Name is a Method and its AML offset/length are set */
502
503             AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart,
504                                         ObjDesc->Method.AmlLength);
505             break;
506
507         case ACPI_TYPE_INTEGER:
508
509             AcpiOsPrintf (" I:%8.8X8.8%X\n",
510                     ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
511             break;
512
513         case ACPI_TYPE_STRING:
514
515             AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer,
516                                         ObjDesc->String.Length);
517             break;
518
519         case ACPI_TYPE_BUFFER:
520
521             AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer,
522                                         ObjDesc->Buffer.Length);
523             break;
524
525         default:
526
527             AcpiOsPrintf ("\n");
528             break;
529         }
530         break;
531
532
533     default:
534         AcpiOsPrintf ("\n");
535         break;
536     }
537
538     /* If debug turned off, done */
539
540     if (!(AcpiDbgLevel & ACPI_LV_VALUES))
541     {
542         return (AE_OK);
543     }
544
545
546     /* If there is an attached object, display it */
547
548     DbgLevel     = AcpiDbgLevel;
549     AcpiDbgLevel = 0;
550     ObjDesc      = AcpiNsGetAttachedObject (ThisNode);
551     AcpiDbgLevel = DbgLevel;
552
553     /* Dump attached objects */
554
555     while (ObjDesc)
556     {
557         ObjType = ACPI_TYPE_INVALID;
558         AcpiOsPrintf ("        Attached Object %p: ", ObjDesc);
559
560         /* Decode the type of attached object and dump the contents */
561
562         switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))
563         {
564         case ACPI_DESC_TYPE_NAMED:
565
566             AcpiOsPrintf ("(Ptr to Node)\n");
567             BytesToDump = sizeof (ACPI_NAMESPACE_NODE);
568             break;
569
570
571         case ACPI_DESC_TYPE_OPERAND:
572
573             ObjType = ACPI_GET_OBJECT_TYPE (ObjDesc);
574
575             if (ObjType > ACPI_TYPE_LOCAL_MAX)
576             {
577                 AcpiOsPrintf ("(Ptr to ACPI Object type %X [UNKNOWN])\n", ObjType);
578                 BytesToDump = 32;
579             }
580             else
581             {
582                 AcpiOsPrintf ("(Ptr to ACPI Object type %s, %X)\n",
583                                     AcpiUtGetTypeName (ObjType), ObjType);
584                 BytesToDump = sizeof (ACPI_OPERAND_OBJECT);
585             }
586             break;
587
588
589         default:
590
591             AcpiOsPrintf ("(String or Buffer ptr - not an object descriptor) [%s]\n",
592                     AcpiUtGetDescriptorName (ObjDesc));
593             BytesToDump = 16;
594             break;
595         }
596
597         ACPI_DUMP_BUFFER (ObjDesc, BytesToDump);
598
599         /* If value is NOT an internal object, we are done */
600
601         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
602         {
603             goto Cleanup;
604         }
605
606         /*
607          * Valid object, get the pointer to next level, if any
608          */
609         switch (ObjType)
610         {
611         case ACPI_TYPE_STRING:
612             ObjDesc = (void *) ObjDesc->String.Pointer;
613             break;
614
615         case ACPI_TYPE_BUFFER:
616             ObjDesc = (void *) ObjDesc->Buffer.Pointer;
617             break;
618
619         case ACPI_TYPE_BUFFER_FIELD:
620             ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj;
621             break;
622
623         case ACPI_TYPE_PACKAGE:
624             ObjDesc = (void *) ObjDesc->Package.Elements;
625             break;
626
627         case ACPI_TYPE_METHOD:
628             ObjDesc = (void *) ObjDesc->Method.AmlStart;
629             break;
630
631         case ACPI_TYPE_LOCAL_REGION_FIELD:
632             ObjDesc = (void *) ObjDesc->Field.RegionObj;
633             break;
634
635         case ACPI_TYPE_LOCAL_BANK_FIELD:
636             ObjDesc = (void *) ObjDesc->BankField.RegionObj;
637             break;
638
639         case ACPI_TYPE_LOCAL_INDEX_FIELD:
640             ObjDesc = (void *) ObjDesc->IndexField.IndexObj;
641             break;
642
643         default:
644             goto Cleanup;
645         }
646
647         ObjType = ACPI_TYPE_INVALID;   /* Terminate loop after next pass */
648     }
649
650 Cleanup:
651     AcpiOsPrintf ("\n");
652     return (AE_OK);
653 }
654
655
656 /*******************************************************************************
657  *
658  * FUNCTION:    AcpiNsDumpObjects
659  *
660  * PARAMETERS:  Type                - Object type to be dumped
661  *              MaxDepth            - Maximum depth of dump.  Use ACPI_UINT32_MAX
662  *                                    for an effectively unlimited depth.
663  *              OwnerId             - Dump only objects owned by this ID.  Use
664  *                                    ACPI_UINT32_MAX to match all owners.
665  *              StartHandle         - Where in namespace to start/end search
666  *
667  * DESCRIPTION: Dump typed objects within the loaded namespace.
668  *              Uses AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject.
669  *
670  ******************************************************************************/
671
672 void
673 AcpiNsDumpObjects (
674     ACPI_OBJECT_TYPE        Type,
675     UINT8                   DisplayType,
676     UINT32                  MaxDepth,
677     UINT32                  OwnerId,
678     ACPI_HANDLE             StartHandle)
679 {
680     ACPI_WALK_INFO          Info;
681
682
683     ACPI_FUNCTION_ENTRY ();
684
685
686     Info.DebugLevel = ACPI_LV_TABLES;
687     Info.OwnerId = OwnerId;
688     Info.DisplayType = DisplayType;
689
690     (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth,
691                 ACPI_NS_WALK_NO_UNLOCK, AcpiNsDumpOneObject,
692                 (void *) &Info, NULL);
693 }
694
695
696 /*******************************************************************************
697  *
698  * FUNCTION:    AcpiNsDumpTables
699  *
700  * PARAMETERS:  SearchBase          - Root of subtree to be dumped, or
701  *                                    NS_ALL to dump the entire namespace
702  *              MaxDepth            - Maximum depth of dump.  Use INT_MAX
703  *                                    for an effectively unlimited depth.
704  *
705  * DESCRIPTION: Dump the name space, or a portion of it.
706  *
707  ******************************************************************************/
708
709 void
710 AcpiNsDumpTables (
711     ACPI_HANDLE             SearchBase,
712     UINT32                  MaxDepth)
713 {
714     ACPI_HANDLE             SearchHandle = SearchBase;
715
716
717     ACPI_FUNCTION_TRACE ("NsDumpTables");
718
719
720     if (!AcpiGbl_RootNode)
721     {
722         /*
723          * If the name space has not been initialized,
724          * there is nothing to dump.
725          */
726         ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n"));
727         return_VOID;
728     }
729
730     if (ACPI_NS_ALL == SearchBase)
731     {
732         /*  entire namespace    */
733
734         SearchHandle = AcpiGbl_RootNode;
735         ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n"));
736     }
737
738     AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth,
739             ACPI_UINT32_MAX, SearchHandle);
740     return_VOID;
741 }
742
743
744 /*******************************************************************************
745  *
746  * FUNCTION:    AcpiNsDumpEntry
747  *
748  * PARAMETERS:  Handle              - Node to be dumped
749  *              DebugLevel          - Output level
750  *
751  * DESCRIPTION: Dump a single Node
752  *
753  ******************************************************************************/
754
755 void
756 AcpiNsDumpEntry (
757     ACPI_HANDLE             Handle,
758     UINT32                  DebugLevel)
759 {
760     ACPI_WALK_INFO          Info;
761
762
763     ACPI_FUNCTION_ENTRY ();
764
765
766     Info.DebugLevel = DebugLevel;
767     Info.OwnerId = ACPI_UINT32_MAX;
768     Info.DisplayType = ACPI_DISPLAY_SUMMARY;
769
770     (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL);
771 }
772
773 #endif
774