dbnames.c revision 284583
1218585Sjkim/*******************************************************************************
2218585Sjkim *
3218585Sjkim * Module Name: dbnames - Debugger commands for the acpi namespace
4218585Sjkim *
5218585Sjkim ******************************************************************************/
6218585Sjkim
7218585Sjkim/*
8278970Sjkim * Copyright (C) 2000 - 2015, Intel Corp.
9218585Sjkim * All rights reserved.
10218585Sjkim *
11218585Sjkim * Redistribution and use in source and binary forms, with or without
12218585Sjkim * modification, are permitted provided that the following conditions
13218585Sjkim * are met:
14218585Sjkim * 1. Redistributions of source code must retain the above copyright
15218585Sjkim *    notice, this list of conditions, and the following disclaimer,
16218585Sjkim *    without modification.
17218585Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18218585Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19218585Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20218585Sjkim *    including a substantially similar Disclaimer requirement for further
21218585Sjkim *    binary redistribution.
22218585Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23218585Sjkim *    of any contributors may be used to endorse or promote products derived
24218585Sjkim *    from this software without specific prior written permission.
25218585Sjkim *
26218585Sjkim * Alternatively, this software may be distributed under the terms of the
27218585Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28218585Sjkim * Software Foundation.
29218585Sjkim *
30218585Sjkim * NO WARRANTY
31218585Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32218585Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33218585Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34218585Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35218585Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36218585Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37218585Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38218585Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39218585Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40218585Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41218585Sjkim * POSSIBILITY OF SUCH DAMAGES.
42218585Sjkim */
43218585Sjkim
44218590Sjkim#include <contrib/dev/acpica/include/acpi.h>
45218590Sjkim#include <contrib/dev/acpica/include/accommon.h>
46218590Sjkim#include <contrib/dev/acpica/include/acnamesp.h>
47218590Sjkim#include <contrib/dev/acpica/include/acdebug.h>
48249112Sjkim#include <contrib/dev/acpica/include/acpredef.h>
49218585Sjkim
50218585Sjkim
51218585Sjkim#ifdef ACPI_DEBUGGER
52218585Sjkim
53218585Sjkim#define _COMPONENT          ACPI_CA_DEBUGGER
54218585Sjkim        ACPI_MODULE_NAME    ("dbnames")
55218585Sjkim
56218585Sjkim
57218585Sjkim/* Local prototypes */
58218585Sjkim
59218585Sjkimstatic ACPI_STATUS
60218585SjkimAcpiDbWalkAndMatchName (
61218585Sjkim    ACPI_HANDLE             ObjHandle,
62218585Sjkim    UINT32                  NestingLevel,
63218585Sjkim    void                    *Context,
64218585Sjkim    void                    **ReturnValue);
65218585Sjkim
66218585Sjkimstatic ACPI_STATUS
67218585SjkimAcpiDbWalkForPredefinedNames (
68218585Sjkim    ACPI_HANDLE             ObjHandle,
69218585Sjkim    UINT32                  NestingLevel,
70218585Sjkim    void                    *Context,
71218585Sjkim    void                    **ReturnValue);
72218585Sjkim
73218585Sjkimstatic ACPI_STATUS
74218585SjkimAcpiDbWalkForSpecificObjects (
75218585Sjkim    ACPI_HANDLE             ObjHandle,
76218585Sjkim    UINT32                  NestingLevel,
77218585Sjkim    void                    *Context,
78218585Sjkim    void                    **ReturnValue);
79218585Sjkim
80218585Sjkimstatic ACPI_STATUS
81218585SjkimAcpiDbIntegrityWalk (
82218585Sjkim    ACPI_HANDLE             ObjHandle,
83218585Sjkim    UINT32                  NestingLevel,
84218585Sjkim    void                    *Context,
85218585Sjkim    void                    **ReturnValue);
86218585Sjkim
87218585Sjkimstatic ACPI_STATUS
88218585SjkimAcpiDbWalkForReferences (
89218585Sjkim    ACPI_HANDLE             ObjHandle,
90218585Sjkim    UINT32                  NestingLevel,
91218585Sjkim    void                    *Context,
92218585Sjkim    void                    **ReturnValue);
93218585Sjkim
94218585Sjkimstatic ACPI_STATUS
95218585SjkimAcpiDbBusWalk (
96218585Sjkim    ACPI_HANDLE             ObjHandle,
97218585Sjkim    UINT32                  NestingLevel,
98218585Sjkim    void                    *Context,
99218585Sjkim    void                    **ReturnValue);
100218585Sjkim
101218585Sjkim/*
102218585Sjkim * Arguments for the Objects command
103218585Sjkim * These object types map directly to the ACPI_TYPES
104218585Sjkim */
105240716Sjkimstatic ACPI_DB_ARGUMENT_INFO    AcpiDbObjectTypes [] =
106218585Sjkim{
107218585Sjkim    {"ANY"},
108218585Sjkim    {"INTEGERS"},
109218585Sjkim    {"STRINGS"},
110218585Sjkim    {"BUFFERS"},
111218585Sjkim    {"PACKAGES"},
112218585Sjkim    {"FIELDS"},
113218585Sjkim    {"DEVICES"},
114218585Sjkim    {"EVENTS"},
115218585Sjkim    {"METHODS"},
116218585Sjkim    {"MUTEXES"},
117218585Sjkim    {"REGIONS"},
118218585Sjkim    {"POWERRESOURCES"},
119218585Sjkim    {"PROCESSORS"},
120218585Sjkim    {"THERMALZONES"},
121218585Sjkim    {"BUFFERFIELDS"},
122218585Sjkim    {"DDBHANDLES"},
123218585Sjkim    {"DEBUG"},
124218585Sjkim    {"REGIONFIELDS"},
125218585Sjkim    {"BANKFIELDS"},
126218585Sjkim    {"INDEXFIELDS"},
127218585Sjkim    {"REFERENCES"},
128218585Sjkim    {"ALIAS"},
129218585Sjkim    {NULL}           /* Must be null terminated */
130218585Sjkim};
131218585Sjkim
132218585Sjkim
133218585Sjkim/*******************************************************************************
134218585Sjkim *
135218585Sjkim * FUNCTION:    AcpiDbSetScope
136218585Sjkim *
137218585Sjkim * PARAMETERS:  Name                - New scope path
138218585Sjkim *
139218585Sjkim * RETURN:      Status
140218585Sjkim *
141218585Sjkim * DESCRIPTION: Set the "current scope" as maintained by this utility.
142218585Sjkim *              The scope is used as a prefix to ACPI paths.
143218585Sjkim *
144218585Sjkim ******************************************************************************/
145218585Sjkim
146218585Sjkimvoid
147218585SjkimAcpiDbSetScope (
148218585Sjkim    char                    *Name)
149218585Sjkim{
150218585Sjkim    ACPI_STATUS             Status;
151218585Sjkim    ACPI_NAMESPACE_NODE     *Node;
152218585Sjkim
153218585Sjkim
154218585Sjkim    if (!Name || Name[0] == 0)
155218585Sjkim    {
156218585Sjkim        AcpiOsPrintf ("Current scope: %s\n", AcpiGbl_DbScopeBuf);
157218585Sjkim        return;
158218585Sjkim    }
159218585Sjkim
160218585Sjkim    AcpiDbPrepNamestring (Name);
161218585Sjkim
162245582Sjkim    if (ACPI_IS_ROOT_PREFIX (Name[0]))
163218585Sjkim    {
164218585Sjkim        /* Validate new scope from the root */
165218585Sjkim
166218585Sjkim        Status = AcpiNsGetNode (AcpiGbl_RootNode, Name, ACPI_NS_NO_UPSEARCH,
167218585Sjkim                    &Node);
168218585Sjkim        if (ACPI_FAILURE (Status))
169218585Sjkim        {
170218585Sjkim            goto ErrorExit;
171218585Sjkim        }
172218585Sjkim
173272444Sjkim        AcpiGbl_DbScopeBuf[0] = 0;
174218585Sjkim    }
175218585Sjkim    else
176218585Sjkim    {
177218585Sjkim        /* Validate new scope relative to old scope */
178218585Sjkim
179218585Sjkim        Status = AcpiNsGetNode (AcpiGbl_DbScopeNode, Name, ACPI_NS_NO_UPSEARCH,
180218585Sjkim                    &Node);
181218585Sjkim        if (ACPI_FAILURE (Status))
182218585Sjkim        {
183218585Sjkim            goto ErrorExit;
184218585Sjkim        }
185272444Sjkim    }
186218585Sjkim
187272444Sjkim    /* Build the final pathname */
188272444Sjkim
189272444Sjkim    if (AcpiUtSafeStrcat (AcpiGbl_DbScopeBuf, sizeof (AcpiGbl_DbScopeBuf),
190272444Sjkim        Name))
191272444Sjkim    {
192272444Sjkim        Status = AE_BUFFER_OVERFLOW;
193272444Sjkim        goto ErrorExit;
194218585Sjkim    }
195218585Sjkim
196272444Sjkim    if (AcpiUtSafeStrcat (AcpiGbl_DbScopeBuf, sizeof (AcpiGbl_DbScopeBuf),
197272444Sjkim        "\\"))
198272444Sjkim    {
199272444Sjkim        Status = AE_BUFFER_OVERFLOW;
200272444Sjkim        goto ErrorExit;
201272444Sjkim    }
202272444Sjkim
203218585Sjkim    AcpiGbl_DbScopeNode = Node;
204218585Sjkim    AcpiOsPrintf ("New scope: %s\n", AcpiGbl_DbScopeBuf);
205218585Sjkim    return;
206218585Sjkim
207218585SjkimErrorExit:
208218585Sjkim
209218585Sjkim    AcpiOsPrintf ("Could not attach scope: %s, %s\n",
210218585Sjkim        Name, AcpiFormatException (Status));
211218585Sjkim}
212218585Sjkim
213218585Sjkim
214218585Sjkim/*******************************************************************************
215218585Sjkim *
216218585Sjkim * FUNCTION:    AcpiDbDumpNamespace
217218585Sjkim *
218218585Sjkim * PARAMETERS:  StartArg        - Node to begin namespace dump
219218585Sjkim *              DepthArg        - Maximum tree depth to be dumped
220218585Sjkim *
221218585Sjkim * RETURN:      None
222218585Sjkim *
223241973Sjkim * DESCRIPTION: Dump entire namespace or a subtree. Each node is displayed
224218585Sjkim *              with type and other information.
225218585Sjkim *
226218585Sjkim ******************************************************************************/
227218585Sjkim
228218585Sjkimvoid
229218585SjkimAcpiDbDumpNamespace (
230218585Sjkim    char                    *StartArg,
231218585Sjkim    char                    *DepthArg)
232218585Sjkim{
233218585Sjkim    ACPI_HANDLE             SubtreeEntry = AcpiGbl_RootNode;
234218585Sjkim    UINT32                  MaxDepth = ACPI_UINT32_MAX;
235218585Sjkim
236218585Sjkim
237218585Sjkim    /* No argument given, just start at the root and dump entire namespace */
238218585Sjkim
239218585Sjkim    if (StartArg)
240218585Sjkim    {
241218585Sjkim        SubtreeEntry = AcpiDbConvertToNode (StartArg);
242218585Sjkim        if (!SubtreeEntry)
243218585Sjkim        {
244218585Sjkim            return;
245218585Sjkim        }
246218585Sjkim
247218585Sjkim        /* Now we can check for the depth argument */
248218585Sjkim
249218585Sjkim        if (DepthArg)
250218585Sjkim        {
251284583Sjkim            MaxDepth = strtoul (DepthArg, NULL, 0);
252218585Sjkim        }
253218585Sjkim    }
254218585Sjkim
255218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
256218585Sjkim    AcpiOsPrintf ("ACPI Namespace (from %4.4s (%p) subtree):\n",
257218585Sjkim        ((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Name.Ascii, SubtreeEntry);
258218585Sjkim
259218585Sjkim    /* Display the subtree */
260218585Sjkim
261218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
262218585Sjkim    AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, MaxDepth,
263218585Sjkim        ACPI_OWNER_ID_MAX, SubtreeEntry);
264218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
265218585Sjkim}
266218585Sjkim
267218585Sjkim
268218585Sjkim/*******************************************************************************
269218585Sjkim *
270254745Sjkim * FUNCTION:    AcpiDbDumpNamespacePaths
271254745Sjkim *
272254745Sjkim * PARAMETERS:  None
273254745Sjkim *
274254745Sjkim * RETURN:      None
275254745Sjkim *
276254745Sjkim * DESCRIPTION: Dump entire namespace with full object pathnames and object
277254745Sjkim *              type information. Alternative to "namespace" command.
278254745Sjkim *
279254745Sjkim ******************************************************************************/
280254745Sjkim
281254745Sjkimvoid
282254745SjkimAcpiDbDumpNamespacePaths (
283254745Sjkim    void)
284254745Sjkim{
285254745Sjkim
286254745Sjkim    AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
287254745Sjkim    AcpiOsPrintf ("ACPI Namespace (from root):\n");
288254745Sjkim
289254745Sjkim    /* Display the entire namespace */
290254745Sjkim
291254745Sjkim    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
292254745Sjkim    AcpiNsDumpObjectPaths (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY,
293254745Sjkim        ACPI_UINT32_MAX, ACPI_OWNER_ID_MAX, AcpiGbl_RootNode);
294254745Sjkim
295254745Sjkim    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
296254745Sjkim}
297254745Sjkim
298254745Sjkim
299254745Sjkim/*******************************************************************************
300254745Sjkim *
301218585Sjkim * FUNCTION:    AcpiDbDumpNamespaceByOwner
302218585Sjkim *
303218585Sjkim * PARAMETERS:  OwnerArg        - Owner ID whose nodes will be displayed
304218585Sjkim *              DepthArg        - Maximum tree depth to be dumped
305218585Sjkim *
306218585Sjkim * RETURN:      None
307218585Sjkim *
308218585Sjkim * DESCRIPTION: Dump elements of the namespace that are owned by the OwnerId.
309218585Sjkim *
310218585Sjkim ******************************************************************************/
311218585Sjkim
312218585Sjkimvoid
313218585SjkimAcpiDbDumpNamespaceByOwner (
314218585Sjkim    char                    *OwnerArg,
315218585Sjkim    char                    *DepthArg)
316218585Sjkim{
317218585Sjkim    ACPI_HANDLE             SubtreeEntry = AcpiGbl_RootNode;
318218585Sjkim    UINT32                  MaxDepth = ACPI_UINT32_MAX;
319218585Sjkim    ACPI_OWNER_ID           OwnerId;
320218585Sjkim
321218585Sjkim
322284583Sjkim    OwnerId = (ACPI_OWNER_ID) strtoul (OwnerArg, NULL, 0);
323218585Sjkim
324218585Sjkim    /* Now we can check for the depth argument */
325218585Sjkim
326218585Sjkim    if (DepthArg)
327218585Sjkim    {
328284583Sjkim        MaxDepth = strtoul (DepthArg, NULL, 0);
329218585Sjkim    }
330218585Sjkim
331218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
332218585Sjkim    AcpiOsPrintf ("ACPI Namespace by owner %X:\n", OwnerId);
333218585Sjkim
334218585Sjkim    /* Display the subtree */
335218585Sjkim
336218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
337218585Sjkim    AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, MaxDepth, OwnerId,
338218585Sjkim        SubtreeEntry);
339218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
340218585Sjkim}
341218585Sjkim
342218585Sjkim
343218585Sjkim/*******************************************************************************
344218585Sjkim *
345218585Sjkim * FUNCTION:    AcpiDbWalkAndMatchName
346218585Sjkim *
347218585Sjkim * PARAMETERS:  Callback from WalkNamespace
348218585Sjkim *
349218585Sjkim * RETURN:      Status
350218585Sjkim *
351241973Sjkim * DESCRIPTION: Find a particular name/names within the namespace. Wildcards
352218585Sjkim *              are supported -- '?' matches any character.
353218585Sjkim *
354218585Sjkim ******************************************************************************/
355218585Sjkim
356218585Sjkimstatic ACPI_STATUS
357218585SjkimAcpiDbWalkAndMatchName (
358218585Sjkim    ACPI_HANDLE             ObjHandle,
359218585Sjkim    UINT32                  NestingLevel,
360218585Sjkim    void                    *Context,
361218585Sjkim    void                    **ReturnValue)
362218585Sjkim{
363218585Sjkim    ACPI_STATUS             Status;
364218585Sjkim    char                    *RequestedName = (char *) Context;
365218585Sjkim    UINT32                  i;
366218585Sjkim    ACPI_BUFFER             Buffer;
367218585Sjkim    ACPI_WALK_INFO          Info;
368218585Sjkim
369218585Sjkim
370218585Sjkim    /* Check for a name match */
371218585Sjkim
372218585Sjkim    for (i = 0; i < 4; i++)
373218585Sjkim    {
374218585Sjkim        /* Wildcard support */
375218585Sjkim
376218585Sjkim        if ((RequestedName[i] != '?') &&
377218585Sjkim            (RequestedName[i] != ((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Ascii[i]))
378218585Sjkim        {
379218585Sjkim            /* No match, just exit */
380218585Sjkim
381218585Sjkim            return (AE_OK);
382218585Sjkim        }
383218585Sjkim    }
384218585Sjkim
385218585Sjkim    /* Get the full pathname to this object */
386218585Sjkim
387218585Sjkim    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
388218585Sjkim    Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
389218585Sjkim    if (ACPI_FAILURE (Status))
390218585Sjkim    {
391218585Sjkim        AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
392218585Sjkim    }
393218585Sjkim    else
394218585Sjkim    {
395218585Sjkim        Info.OwnerId = ACPI_OWNER_ID_MAX;
396218585Sjkim        Info.DebugLevel = ACPI_UINT32_MAX;
397218585Sjkim        Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;
398218585Sjkim
399218585Sjkim        AcpiOsPrintf ("%32s", (char *) Buffer.Pointer);
400218585Sjkim        (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, &Info, NULL);
401218585Sjkim        ACPI_FREE (Buffer.Pointer);
402218585Sjkim    }
403218585Sjkim
404218585Sjkim    return (AE_OK);
405218585Sjkim}
406218585Sjkim
407218585Sjkim
408218585Sjkim/*******************************************************************************
409218585Sjkim *
410218585Sjkim * FUNCTION:    AcpiDbFindNameInNamespace
411218585Sjkim *
412218585Sjkim * PARAMETERS:  NameArg         - The 4-character ACPI name to find.
413218585Sjkim *                                wildcards are supported.
414218585Sjkim *
415218585Sjkim * RETURN:      None
416218585Sjkim *
417218585Sjkim * DESCRIPTION: Search the namespace for a given name (with wildcards)
418218585Sjkim *
419218585Sjkim ******************************************************************************/
420218585Sjkim
421218585SjkimACPI_STATUS
422218585SjkimAcpiDbFindNameInNamespace (
423218585Sjkim    char                    *NameArg)
424218585Sjkim{
425218585Sjkim    char                    AcpiName[5] = "____";
426218585Sjkim    char                    *AcpiNamePtr = AcpiName;
427218585Sjkim
428218585Sjkim
429284583Sjkim    if (strlen (NameArg) > 4)
430218585Sjkim    {
431218585Sjkim        AcpiOsPrintf ("Name must be no longer than 4 characters\n");
432218585Sjkim        return (AE_OK);
433218585Sjkim    }
434218585Sjkim
435218585Sjkim    /* Pad out name with underscores as necessary to create a 4-char name */
436218585Sjkim
437218585Sjkim    AcpiUtStrupr (NameArg);
438218585Sjkim    while (*NameArg)
439218585Sjkim    {
440218585Sjkim        *AcpiNamePtr = *NameArg;
441218585Sjkim        AcpiNamePtr++;
442218585Sjkim        NameArg++;
443218585Sjkim    }
444218585Sjkim
445218585Sjkim    /* Walk the namespace from the root */
446218585Sjkim
447218585Sjkim    (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
448218585Sjkim                        AcpiDbWalkAndMatchName, NULL, AcpiName, NULL);
449218585Sjkim
450218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
451218585Sjkim    return (AE_OK);
452218585Sjkim}
453218585Sjkim
454218585Sjkim
455218585Sjkim/*******************************************************************************
456218585Sjkim *
457218585Sjkim * FUNCTION:    AcpiDbWalkForPredefinedNames
458218585Sjkim *
459218585Sjkim * PARAMETERS:  Callback from WalkNamespace
460218585Sjkim *
461218585Sjkim * RETURN:      Status
462218585Sjkim *
463218585Sjkim * DESCRIPTION: Detect and display predefined ACPI names (names that start with
464218585Sjkim *              an underscore)
465218585Sjkim *
466218585Sjkim ******************************************************************************/
467218585Sjkim
468218585Sjkimstatic ACPI_STATUS
469218585SjkimAcpiDbWalkForPredefinedNames (
470218585Sjkim    ACPI_HANDLE             ObjHandle,
471218585Sjkim    UINT32                  NestingLevel,
472218585Sjkim    void                    *Context,
473218585Sjkim    void                    **ReturnValue)
474218585Sjkim{
475218585Sjkim    ACPI_NAMESPACE_NODE         *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
476218585Sjkim    UINT32                      *Count = (UINT32 *) Context;
477218585Sjkim    const ACPI_PREDEFINED_INFO  *Predefined;
478218585Sjkim    const ACPI_PREDEFINED_INFO  *Package = NULL;
479218585Sjkim    char                        *Pathname;
480249663Sjkim    char                        StringBuffer[48];
481218585Sjkim
482218585Sjkim
483249112Sjkim    Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii);
484218585Sjkim    if (!Predefined)
485218585Sjkim    {
486218585Sjkim        return (AE_OK);
487218585Sjkim    }
488218585Sjkim
489218585Sjkim    Pathname = AcpiNsGetExternalPathname (Node);
490218585Sjkim    if (!Pathname)
491218585Sjkim    {
492218585Sjkim        return (AE_OK);
493218585Sjkim    }
494218585Sjkim
495218585Sjkim    /* If method returns a package, the info is in the next table entry */
496218585Sjkim
497249112Sjkim    if (Predefined->Info.ExpectedBtypes & ACPI_RTYPE_PACKAGE)
498218585Sjkim    {
499218585Sjkim        Package = Predefined + 1;
500218585Sjkim    }
501218585Sjkim
502249663Sjkim    AcpiUtGetExpectedReturnTypes (StringBuffer,
503249112Sjkim        Predefined->Info.ExpectedBtypes);
504218585Sjkim
505249663Sjkim    AcpiOsPrintf ("%-32s Arguments %X, Return Types: %s", Pathname,
506249663Sjkim        METHOD_GET_ARG_COUNT (Predefined->Info.ArgumentList),
507249663Sjkim        StringBuffer);
508249663Sjkim
509218585Sjkim    if (Package)
510218585Sjkim    {
511249663Sjkim        AcpiOsPrintf (" (PkgType %2.2X, ObjType %2.2X, Count %2.2X)",
512218585Sjkim            Package->RetInfo.Type, Package->RetInfo.ObjectType1,
513218585Sjkim            Package->RetInfo.Count1);
514218585Sjkim    }
515218585Sjkim
516218585Sjkim    AcpiOsPrintf("\n");
517218585Sjkim
518249663Sjkim    /* Check that the declared argument count matches the ACPI spec */
519249663Sjkim
520249663Sjkim    AcpiNsCheckAcpiCompliance (Pathname, Node, Predefined);
521249663Sjkim
522218585Sjkim    ACPI_FREE (Pathname);
523218585Sjkim    (*Count)++;
524218585Sjkim    return (AE_OK);
525218585Sjkim}
526218585Sjkim
527218585Sjkim
528218585Sjkim/*******************************************************************************
529218585Sjkim *
530218585Sjkim * FUNCTION:    AcpiDbCheckPredefinedNames
531218585Sjkim *
532218585Sjkim * PARAMETERS:  None
533218585Sjkim *
534218585Sjkim * RETURN:      None
535218585Sjkim *
536218585Sjkim * DESCRIPTION: Validate all predefined names in the namespace
537218585Sjkim *
538218585Sjkim ******************************************************************************/
539218585Sjkim
540218585Sjkimvoid
541218585SjkimAcpiDbCheckPredefinedNames (
542218585Sjkim    void)
543218585Sjkim{
544218585Sjkim    UINT32                  Count = 0;
545218585Sjkim
546218585Sjkim
547218585Sjkim    /* Search all nodes in namespace */
548218585Sjkim
549218585Sjkim    (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
550218585Sjkim                AcpiDbWalkForPredefinedNames, NULL, (void *) &Count, NULL);
551218585Sjkim
552218585Sjkim    AcpiOsPrintf ("Found %u predefined names in the namespace\n", Count);
553218585Sjkim}
554218585Sjkim
555218585Sjkim
556218585Sjkim/*******************************************************************************
557218585Sjkim *
558218585Sjkim * FUNCTION:    AcpiDbWalkForSpecificObjects
559218585Sjkim *
560218585Sjkim * PARAMETERS:  Callback from WalkNamespace
561218585Sjkim *
562218585Sjkim * RETURN:      Status
563218585Sjkim *
564218585Sjkim * DESCRIPTION: Display short info about objects in the namespace
565218585Sjkim *
566218585Sjkim ******************************************************************************/
567218585Sjkim
568218585Sjkimstatic ACPI_STATUS
569218585SjkimAcpiDbWalkForSpecificObjects (
570218585Sjkim    ACPI_HANDLE             ObjHandle,
571218585Sjkim    UINT32                  NestingLevel,
572218585Sjkim    void                    *Context,
573218585Sjkim    void                    **ReturnValue)
574218585Sjkim{
575218585Sjkim    ACPI_WALK_INFO          *Info = (ACPI_WALK_INFO *) Context;
576218585Sjkim    ACPI_BUFFER             Buffer;
577218585Sjkim    ACPI_STATUS             Status;
578218585Sjkim
579218585Sjkim
580218585Sjkim    Info->Count++;
581218585Sjkim
582218585Sjkim    /* Get and display the full pathname to this object */
583218585Sjkim
584218585Sjkim    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
585218585Sjkim    Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
586218585Sjkim    if (ACPI_FAILURE (Status))
587218585Sjkim    {
588218585Sjkim        AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
589218585Sjkim        return (AE_OK);
590218585Sjkim    }
591218585Sjkim
592218585Sjkim    AcpiOsPrintf ("%32s", (char *) Buffer.Pointer);
593218585Sjkim    ACPI_FREE (Buffer.Pointer);
594218585Sjkim
595218585Sjkim    /* Dump short info about the object */
596218585Sjkim
597218585Sjkim    (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, Info, NULL);
598218585Sjkim    return (AE_OK);
599218585Sjkim}
600218585Sjkim
601218585Sjkim
602218585Sjkim/*******************************************************************************
603218585Sjkim *
604218585Sjkim * FUNCTION:    AcpiDbDisplayObjects
605218585Sjkim *
606218585Sjkim * PARAMETERS:  ObjTypeArg          - Type of object to display
607218585Sjkim *              DisplayCountArg     - Max depth to display
608218585Sjkim *
609218585Sjkim * RETURN:      None
610218585Sjkim *
611218585Sjkim * DESCRIPTION: Display objects in the namespace of the requested type
612218585Sjkim *
613218585Sjkim ******************************************************************************/
614218585Sjkim
615218585SjkimACPI_STATUS
616218585SjkimAcpiDbDisplayObjects (
617218585Sjkim    char                    *ObjTypeArg,
618218585Sjkim    char                    *DisplayCountArg)
619218585Sjkim{
620218585Sjkim    ACPI_WALK_INFO          Info;
621218585Sjkim    ACPI_OBJECT_TYPE        Type;
622218585Sjkim
623218585Sjkim
624218585Sjkim    /* Get the object type */
625218585Sjkim
626218585Sjkim    Type = AcpiDbMatchArgument (ObjTypeArg, AcpiDbObjectTypes);
627218585Sjkim    if (Type == ACPI_TYPE_NOT_FOUND)
628218585Sjkim    {
629218585Sjkim        AcpiOsPrintf ("Invalid or unsupported argument\n");
630218585Sjkim        return (AE_OK);
631218585Sjkim    }
632218585Sjkim
633218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
634218585Sjkim    AcpiOsPrintf (
635218585Sjkim        "Objects of type [%s] defined in the current ACPI Namespace:\n",
636218585Sjkim        AcpiUtGetTypeName (Type));
637218585Sjkim
638218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
639218585Sjkim
640218585Sjkim    Info.Count = 0;
641218585Sjkim    Info.OwnerId = ACPI_OWNER_ID_MAX;
642218585Sjkim    Info.DebugLevel = ACPI_UINT32_MAX;
643218585Sjkim    Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;
644218585Sjkim
645218585Sjkim    /* Walk the namespace from the root */
646218585Sjkim
647218585Sjkim    (void) AcpiWalkNamespace (Type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
648218585Sjkim                AcpiDbWalkForSpecificObjects, NULL, (void *) &Info, NULL);
649218585Sjkim
650218585Sjkim    AcpiOsPrintf (
651218585Sjkim        "\nFound %u objects of type [%s] in the current ACPI Namespace\n",
652218585Sjkim        Info.Count, AcpiUtGetTypeName (Type));
653218585Sjkim
654218585Sjkim    AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
655218585Sjkim    return (AE_OK);
656218585Sjkim}
657218585Sjkim
658218585Sjkim
659218585Sjkim/*******************************************************************************
660218585Sjkim *
661218585Sjkim * FUNCTION:    AcpiDbIntegrityWalk
662218585Sjkim *
663218585Sjkim * PARAMETERS:  Callback from WalkNamespace
664218585Sjkim *
665218585Sjkim * RETURN:      Status
666218585Sjkim *
667218585Sjkim * DESCRIPTION: Examine one NS node for valid values.
668218585Sjkim *
669218585Sjkim ******************************************************************************/
670218585Sjkim
671218585Sjkimstatic ACPI_STATUS
672218585SjkimAcpiDbIntegrityWalk (
673218585Sjkim    ACPI_HANDLE             ObjHandle,
674218585Sjkim    UINT32                  NestingLevel,
675218585Sjkim    void                    *Context,
676218585Sjkim    void                    **ReturnValue)
677218585Sjkim{
678218585Sjkim    ACPI_INTEGRITY_INFO     *Info = (ACPI_INTEGRITY_INFO *) Context;
679218585Sjkim    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
680218585Sjkim    ACPI_OPERAND_OBJECT     *Object;
681218585Sjkim    BOOLEAN                 Alias = TRUE;
682218585Sjkim
683218585Sjkim
684218585Sjkim    Info->Nodes++;
685218585Sjkim
686218585Sjkim    /* Verify the NS node, and dereference aliases */
687218585Sjkim
688218585Sjkim    while (Alias)
689218585Sjkim    {
690218585Sjkim        if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
691218585Sjkim        {
692218585Sjkim            AcpiOsPrintf ("Invalid Descriptor Type for Node %p [%s] - is %2.2X should be %2.2X\n",
693218585Sjkim                Node, AcpiUtGetDescriptorName (Node), ACPI_GET_DESCRIPTOR_TYPE (Node),
694218585Sjkim                ACPI_DESC_TYPE_NAMED);
695218585Sjkim            return (AE_OK);
696218585Sjkim        }
697218585Sjkim
698218585Sjkim        if ((Node->Type == ACPI_TYPE_LOCAL_ALIAS)  ||
699218585Sjkim            (Node->Type == ACPI_TYPE_LOCAL_METHOD_ALIAS))
700218585Sjkim        {
701218585Sjkim            Node = (ACPI_NAMESPACE_NODE *) Node->Object;
702218585Sjkim        }
703218585Sjkim        else
704218585Sjkim        {
705218585Sjkim            Alias = FALSE;
706218585Sjkim        }
707218585Sjkim    }
708218585Sjkim
709218585Sjkim    if (Node->Type > ACPI_TYPE_LOCAL_MAX)
710218585Sjkim    {
711218585Sjkim        AcpiOsPrintf ("Invalid Object Type for Node %p, Type = %X\n",
712218585Sjkim            Node, Node->Type);
713218585Sjkim        return (AE_OK);
714218585Sjkim    }
715218585Sjkim
716250838Sjkim    if (!AcpiUtValidAcpiName (Node->Name.Ascii))
717218585Sjkim    {
718218585Sjkim        AcpiOsPrintf ("Invalid AcpiName for Node %p\n", Node);
719218585Sjkim        return (AE_OK);
720218585Sjkim    }
721218585Sjkim
722218585Sjkim    Object = AcpiNsGetAttachedObject (Node);
723218585Sjkim    if (Object)
724218585Sjkim    {
725218585Sjkim        Info->Objects++;
726218585Sjkim        if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND)
727218585Sjkim        {
728218585Sjkim            AcpiOsPrintf ("Invalid Descriptor Type for Object %p [%s]\n",
729218585Sjkim                Object, AcpiUtGetDescriptorName (Object));
730218585Sjkim        }
731218585Sjkim    }
732218585Sjkim
733218585Sjkim    return (AE_OK);
734218585Sjkim}
735218585Sjkim
736218585Sjkim
737218585Sjkim/*******************************************************************************
738218585Sjkim *
739218585Sjkim * FUNCTION:    AcpiDbCheckIntegrity
740218585Sjkim *
741218585Sjkim * PARAMETERS:  None
742218585Sjkim *
743218585Sjkim * RETURN:      None
744218585Sjkim *
745218585Sjkim * DESCRIPTION: Check entire namespace for data structure integrity
746218585Sjkim *
747218585Sjkim ******************************************************************************/
748218585Sjkim
749218585Sjkimvoid
750218585SjkimAcpiDbCheckIntegrity (
751218585Sjkim    void)
752218585Sjkim{
753218585Sjkim    ACPI_INTEGRITY_INFO     Info = {0,0};
754218585Sjkim
755218585Sjkim    /* Search all nodes in namespace */
756218585Sjkim
757218585Sjkim    (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
758218585Sjkim                    AcpiDbIntegrityWalk, NULL, (void *) &Info, NULL);
759218585Sjkim
760218585Sjkim    AcpiOsPrintf ("Verified %u namespace nodes with %u Objects\n",
761218585Sjkim        Info.Nodes, Info.Objects);
762218585Sjkim}
763218585Sjkim
764218585Sjkim
765218585Sjkim/*******************************************************************************
766218585Sjkim *
767218585Sjkim * FUNCTION:    AcpiDbWalkForReferences
768218585Sjkim *
769218585Sjkim * PARAMETERS:  Callback from WalkNamespace
770218585Sjkim *
771218585Sjkim * RETURN:      Status
772218585Sjkim *
773218585Sjkim * DESCRIPTION: Check if this namespace object refers to the target object
774218585Sjkim *              that is passed in as the context value.
775218585Sjkim *
776218585Sjkim * Note: Currently doesn't check subobjects within the Node's object
777218585Sjkim *
778218585Sjkim ******************************************************************************/
779218585Sjkim
780218585Sjkimstatic ACPI_STATUS
781218585SjkimAcpiDbWalkForReferences (
782218585Sjkim    ACPI_HANDLE             ObjHandle,
783218585Sjkim    UINT32                  NestingLevel,
784218585Sjkim    void                    *Context,
785218585Sjkim    void                    **ReturnValue)
786218585Sjkim{
787218585Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc = (ACPI_OPERAND_OBJECT  *) Context;
788218585Sjkim    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
789218585Sjkim
790218585Sjkim
791218585Sjkim    /* Check for match against the namespace node itself */
792218585Sjkim
793218585Sjkim    if (Node == (void *) ObjDesc)
794218585Sjkim    {
795218585Sjkim        AcpiOsPrintf ("Object is a Node [%4.4s]\n",
796218585Sjkim            AcpiUtGetNodeName (Node));
797218585Sjkim    }
798218585Sjkim
799218585Sjkim    /* Check for match against the object attached to the node */
800218585Sjkim
801218585Sjkim    if (AcpiNsGetAttachedObject (Node) == ObjDesc)
802218585Sjkim    {
803218585Sjkim        AcpiOsPrintf ("Reference at Node->Object %p [%4.4s]\n",
804218585Sjkim            Node, AcpiUtGetNodeName (Node));
805218585Sjkim    }
806218585Sjkim
807218585Sjkim    return (AE_OK);
808218585Sjkim}
809218585Sjkim
810218585Sjkim
811218585Sjkim/*******************************************************************************
812218585Sjkim *
813218585Sjkim * FUNCTION:    AcpiDbFindReferences
814218585Sjkim *
815218585Sjkim * PARAMETERS:  ObjectArg       - String with hex value of the object
816218585Sjkim *
817218585Sjkim * RETURN:      None
818218585Sjkim *
819218585Sjkim * DESCRIPTION: Search namespace for all references to the input object
820218585Sjkim *
821218585Sjkim ******************************************************************************/
822218585Sjkim
823218585Sjkimvoid
824218585SjkimAcpiDbFindReferences (
825218585Sjkim    char                    *ObjectArg)
826218585Sjkim{
827218585Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc;
828252279Sjkim    ACPI_SIZE               Address;
829218585Sjkim
830218585Sjkim
831218585Sjkim    /* Convert string to object pointer */
832218585Sjkim
833284583Sjkim    Address = strtoul (ObjectArg, NULL, 16);
834252279Sjkim    ObjDesc = ACPI_TO_POINTER (Address);
835218585Sjkim
836218585Sjkim    /* Search all nodes in namespace */
837218585Sjkim
838218585Sjkim    (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
839218585Sjkim                    AcpiDbWalkForReferences, NULL, (void *) ObjDesc, NULL);
840218585Sjkim}
841218585Sjkim
842218585Sjkim
843218585Sjkim/*******************************************************************************
844218585Sjkim *
845218585Sjkim * FUNCTION:    AcpiDbBusWalk
846218585Sjkim *
847218585Sjkim * PARAMETERS:  Callback from WalkNamespace
848218585Sjkim *
849218585Sjkim * RETURN:      Status
850218585Sjkim *
851218585Sjkim * DESCRIPTION: Display info about device objects that have a corresponding
852218585Sjkim *              _PRT method.
853218585Sjkim *
854218585Sjkim ******************************************************************************/
855218585Sjkim
856218585Sjkimstatic ACPI_STATUS
857218585SjkimAcpiDbBusWalk (
858218585Sjkim    ACPI_HANDLE             ObjHandle,
859218585Sjkim    UINT32                  NestingLevel,
860218585Sjkim    void                    *Context,
861218585Sjkim    void                    **ReturnValue)
862218585Sjkim{
863218585Sjkim    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
864218585Sjkim    ACPI_STATUS             Status;
865218585Sjkim    ACPI_BUFFER             Buffer;
866218585Sjkim    ACPI_NAMESPACE_NODE     *TempNode;
867218585Sjkim    ACPI_DEVICE_INFO        *Info;
868218585Sjkim    UINT32                  i;
869218585Sjkim
870218585Sjkim
871218585Sjkim    if ((Node->Type != ACPI_TYPE_DEVICE) &&
872218585Sjkim        (Node->Type != ACPI_TYPE_PROCESSOR))
873218585Sjkim    {
874218585Sjkim        return (AE_OK);
875218585Sjkim    }
876218585Sjkim
877218585Sjkim    /* Exit if there is no _PRT under this device */
878218585Sjkim
879218585Sjkim    Status = AcpiGetHandle (Node, METHOD_NAME__PRT,
880218585Sjkim                ACPI_CAST_PTR (ACPI_HANDLE, &TempNode));
881218585Sjkim    if (ACPI_FAILURE (Status))
882218585Sjkim    {
883218585Sjkim        return (AE_OK);
884218585Sjkim    }
885218585Sjkim
886218585Sjkim    /* Get the full path to this device object */
887218585Sjkim
888218585Sjkim    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
889218585Sjkim    Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
890218585Sjkim    if (ACPI_FAILURE (Status))
891218585Sjkim    {
892218585Sjkim        AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
893218585Sjkim        return (AE_OK);
894218585Sjkim    }
895218585Sjkim
896218585Sjkim    Status = AcpiGetObjectInfo (ObjHandle, &Info);
897218585Sjkim    if (ACPI_FAILURE (Status))
898218585Sjkim    {
899218585Sjkim        return (AE_OK);
900218585Sjkim    }
901218585Sjkim
902218585Sjkim    /* Display the full path */
903218585Sjkim
904218585Sjkim    AcpiOsPrintf ("%-32s Type %X", (char *) Buffer.Pointer, Node->Type);
905218585Sjkim    ACPI_FREE (Buffer.Pointer);
906218585Sjkim
907218585Sjkim    if (Info->Flags & ACPI_PCI_ROOT_BRIDGE)
908218585Sjkim    {
909218585Sjkim        AcpiOsPrintf ("  - Is PCI Root Bridge");
910218585Sjkim    }
911218585Sjkim    AcpiOsPrintf ("\n");
912218585Sjkim
913218585Sjkim    /* _PRT info */
914218585Sjkim
915218585Sjkim    AcpiOsPrintf ("_PRT: %p\n", TempNode);
916218585Sjkim
917218585Sjkim    /* Dump _ADR, _HID, _UID, _CID */
918218585Sjkim
919218585Sjkim    if (Info->Valid & ACPI_VALID_ADR)
920218585Sjkim    {
921218585Sjkim        AcpiOsPrintf ("_ADR: %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Info->Address));
922218585Sjkim    }
923218585Sjkim    else
924218585Sjkim    {
925218585Sjkim        AcpiOsPrintf ("_ADR: <Not Present>\n");
926218585Sjkim    }
927218585Sjkim
928218585Sjkim    if (Info->Valid & ACPI_VALID_HID)
929218585Sjkim    {
930218585Sjkim        AcpiOsPrintf ("_HID: %s\n", Info->HardwareId.String);
931218585Sjkim    }
932218585Sjkim    else
933218585Sjkim    {
934218585Sjkim        AcpiOsPrintf ("_HID: <Not Present>\n");
935218585Sjkim    }
936218585Sjkim
937218585Sjkim    if (Info->Valid & ACPI_VALID_UID)
938218585Sjkim    {
939218585Sjkim        AcpiOsPrintf ("_UID: %s\n", Info->UniqueId.String);
940218585Sjkim    }
941218585Sjkim    else
942218585Sjkim    {
943218585Sjkim        AcpiOsPrintf ("_UID: <Not Present>\n");
944218585Sjkim    }
945218585Sjkim
946218585Sjkim    if (Info->Valid & ACPI_VALID_CID)
947218585Sjkim    {
948218585Sjkim        for (i = 0; i < Info->CompatibleIdList.Count; i++)
949218585Sjkim        {
950218585Sjkim            AcpiOsPrintf ("_CID: %s\n",
951218585Sjkim                Info->CompatibleIdList.Ids[i].String);
952218585Sjkim        }
953218585Sjkim    }
954218585Sjkim    else
955218585Sjkim    {
956218585Sjkim        AcpiOsPrintf ("_CID: <Not Present>\n");
957218585Sjkim    }
958218585Sjkim
959218585Sjkim    ACPI_FREE (Info);
960218585Sjkim    return (AE_OK);
961218585Sjkim}
962218585Sjkim
963218585Sjkim
964218585Sjkim/*******************************************************************************
965218585Sjkim *
966218585Sjkim * FUNCTION:    AcpiDbGetBusInfo
967218585Sjkim *
968218585Sjkim * PARAMETERS:  None
969218585Sjkim *
970218585Sjkim * RETURN:      None
971218585Sjkim *
972218585Sjkim * DESCRIPTION: Display info about system busses.
973218585Sjkim *
974218585Sjkim ******************************************************************************/
975218585Sjkim
976218585Sjkimvoid
977218585SjkimAcpiDbGetBusInfo (
978218585Sjkim    void)
979218585Sjkim{
980218585Sjkim    /* Search all nodes in namespace */
981218585Sjkim
982218585Sjkim    (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
983218585Sjkim                    AcpiDbBusWalk, NULL, NULL, NULL);
984218585Sjkim}
985218585Sjkim
986218585Sjkim#endif /* ACPI_DEBUGGER */
987