167754Smsmith/*******************************************************************************
267754Smsmith *
367754Smsmith * Module Name: dbdisply - debug display commands
467754Smsmith *
567754Smsmith ******************************************************************************/
667754Smsmith
7217365Sjkim/*
8298714Sjkim * Copyright (C) 2000 - 2016, Intel Corp.
970243Smsmith * All rights reserved.
1067754Smsmith *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
2567754Smsmith *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
2967754Smsmith *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
4367754Smsmith
44193341Sjkim#include <contrib/dev/acpica/include/acpi.h>
45193341Sjkim#include <contrib/dev/acpica/include/accommon.h>
46193341Sjkim#include <contrib/dev/acpica/include/amlcode.h>
47193341Sjkim#include <contrib/dev/acpica/include/acdispat.h>
48193341Sjkim#include <contrib/dev/acpica/include/acnamesp.h>
49193341Sjkim#include <contrib/dev/acpica/include/acparser.h>
50193341Sjkim#include <contrib/dev/acpica/include/acinterp.h>
51298714Sjkim#include <contrib/dev/acpica/include/acevents.h>
52193341Sjkim#include <contrib/dev/acpica/include/acdebug.h>
5367754Smsmith
5467754Smsmith
55102550Siwasaki#define _COMPONENT          ACPI_CA_DEBUGGER
5691116Smsmith        ACPI_MODULE_NAME    ("dbdisply")
5767754Smsmith
58151937Sjkim/* Local prototypes */
5967754Smsmith
60151937Sjkimstatic void
61151937SjkimAcpiDbDumpParserDescriptor (
62151937Sjkim    ACPI_PARSE_OBJECT       *Op);
63151937Sjkim
64151937Sjkimstatic void *
65151937SjkimAcpiDbGetPointer (
66151937Sjkim    void                    *Target);
67151937Sjkim
68249663Sjkimstatic ACPI_STATUS
69249663SjkimAcpiDbDisplayNonRootHandlers (
70249663Sjkim    ACPI_HANDLE             ObjHandle,
71249663Sjkim    UINT32                  NestingLevel,
72249663Sjkim    void                    *Context,
73249663Sjkim    void                    **ReturnValue);
74151937Sjkim
75220663Sjkim/*
76220663Sjkim * System handler information.
77220663Sjkim * Used for Handlers command, in AcpiDbDisplayHandlers.
78220663Sjkim */
79220663Sjkim#define ACPI_PREDEFINED_PREFIX          "%25s (%.2X) : "
80220663Sjkim#define ACPI_HANDLER_NAME_STRING               "%30s : "
81220663Sjkim#define ACPI_HANDLER_PRESENT_STRING                    "%-9s (%p)\n"
82249663Sjkim#define ACPI_HANDLER_PRESENT_STRING2                   "%-9s (%p)"
83220663Sjkim#define ACPI_HANDLER_NOT_PRESENT_STRING                "%-9s\n"
84220663Sjkim
85220663Sjkim/* All predefined Address Space IDs */
86220663Sjkim
87220663Sjkimstatic ACPI_ADR_SPACE_TYPE  AcpiGbl_SpaceIdList[] =
88220663Sjkim{
89220663Sjkim    ACPI_ADR_SPACE_SYSTEM_MEMORY,
90220663Sjkim    ACPI_ADR_SPACE_SYSTEM_IO,
91220663Sjkim    ACPI_ADR_SPACE_PCI_CONFIG,
92220663Sjkim    ACPI_ADR_SPACE_EC,
93220663Sjkim    ACPI_ADR_SPACE_SMBUS,
94220663Sjkim    ACPI_ADR_SPACE_CMOS,
95220663Sjkim    ACPI_ADR_SPACE_PCI_BAR_TARGET,
96220663Sjkim    ACPI_ADR_SPACE_IPMI,
97228110Sjkim    ACPI_ADR_SPACE_GPIO,
98228110Sjkim    ACPI_ADR_SPACE_GSBUS,
99220663Sjkim    ACPI_ADR_SPACE_DATA_TABLE,
100220663Sjkim    ACPI_ADR_SPACE_FIXED_HARDWARE
101220663Sjkim};
102220663Sjkim
103220663Sjkim/* Global handler information */
104220663Sjkim
105220663Sjkimtypedef struct acpi_handler_info
106220663Sjkim{
107220663Sjkim    void                    *Handler;
108220663Sjkim    char                    *Name;
109220663Sjkim
110220663Sjkim} ACPI_HANDLER_INFO;
111220663Sjkim
112220663Sjkimstatic ACPI_HANDLER_INFO    AcpiGbl_HandlerList[] =
113220663Sjkim{
114234623Sjkim    {&AcpiGbl_GlobalNotify[0].Handler,  "System Notifications"},
115234623Sjkim    {&AcpiGbl_GlobalNotify[1].Handler,  "Device Notifications"},
116220663Sjkim    {&AcpiGbl_TableHandler,             "ACPI Table Events"},
117220663Sjkim    {&AcpiGbl_ExceptionHandler,         "Control Method Exceptions"},
118220663Sjkim    {&AcpiGbl_InterfaceHandler,         "OSI Invocations"}
119220663Sjkim};
120220663Sjkim
121220663Sjkim
122151937Sjkim/*******************************************************************************
12367754Smsmith *
12467754Smsmith * FUNCTION:    AcpiDbGetPointer
12567754Smsmith *
12667754Smsmith * PARAMETERS:  Target          - Pointer to string to be converted
12767754Smsmith *
12867754Smsmith * RETURN:      Converted pointer
12967754Smsmith *
13067754Smsmith * DESCRIPTION: Convert an ascii pointer value to a real value
13167754Smsmith *
132151937Sjkim ******************************************************************************/
13367754Smsmith
134151937Sjkimstatic void *
13567754SmsmithAcpiDbGetPointer (
13667754Smsmith    void                    *Target)
13767754Smsmith{
13867754Smsmith    void                    *ObjPtr;
139252279Sjkim    ACPI_SIZE               Address;
14067754Smsmith
14167754Smsmith
142284583Sjkim    Address = strtoul (Target, NULL, 16);
143252279Sjkim    ObjPtr = ACPI_TO_POINTER (Address);
14467754Smsmith    return (ObjPtr);
14567754Smsmith}
14667754Smsmith
14767754Smsmith
14867754Smsmith/*******************************************************************************
14967754Smsmith *
15067754Smsmith * FUNCTION:    AcpiDbDumpParserDescriptor
15167754Smsmith *
15267754Smsmith * PARAMETERS:  Op              - A parser Op descriptor
15367754Smsmith *
15467754Smsmith * RETURN:      None
15567754Smsmith *
15667754Smsmith * DESCRIPTION: Display a formatted parser object
15767754Smsmith *
15867754Smsmith ******************************************************************************/
15967754Smsmith
160151937Sjkimstatic void
16167754SmsmithAcpiDbDumpParserDescriptor (
16267754Smsmith    ACPI_PARSE_OBJECT       *Op)
16367754Smsmith{
16483174Smsmith    const ACPI_OPCODE_INFO  *Info;
16567754Smsmith
16667754Smsmith
16799679Siwasaki    Info = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
16867754Smsmith
16967754Smsmith    AcpiOsPrintf ("Parser Op Descriptor:\n");
17099679Siwasaki    AcpiOsPrintf ("%20.20s : %4.4X\n", "Opcode", Op->Common.AmlOpcode);
17167754Smsmith
172151937Sjkim    ACPI_DEBUG_ONLY_MEMBERS (AcpiOsPrintf ("%20.20s : %s\n", "Opcode Name",
173151937Sjkim        Info->Name));
17467754Smsmith
17599679Siwasaki    AcpiOsPrintf ("%20.20s : %p\n", "Value/ArgList", Op->Common.Value.Arg);
17699679Siwasaki    AcpiOsPrintf ("%20.20s : %p\n", "Parent", Op->Common.Parent);
17799679Siwasaki    AcpiOsPrintf ("%20.20s : %p\n", "NextOp", Op->Common.Next);
17867754Smsmith}
17967754Smsmith
18067754Smsmith
18167754Smsmith/*******************************************************************************
18267754Smsmith *
18367754Smsmith * FUNCTION:    AcpiDbDecodeAndDisplayObject
18467754Smsmith *
185241973Sjkim * PARAMETERS:  Target          - String with object to be displayed. Names
18667754Smsmith *                                and hex pointers are supported.
18767754Smsmith *              OutputType      - Byte, Word, Dword, or Qword (B|W|D|Q)
18867754Smsmith *
18967754Smsmith * RETURN:      None
19067754Smsmith *
19167754Smsmith * DESCRIPTION: Display a formatted ACPI object
19267754Smsmith *
19367754Smsmith ******************************************************************************/
19467754Smsmith
19567754Smsmithvoid
19667754SmsmithAcpiDbDecodeAndDisplayObject (
197114237Snjl    char                    *Target,
198114237Snjl    char                    *OutputType)
19967754Smsmith{
20067754Smsmith    void                    *ObjPtr;
20167754Smsmith    ACPI_NAMESPACE_NODE     *Node;
20287031Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc;
20367754Smsmith    UINT32                  Display = DB_BYTE_DISPLAY;
204114237Snjl    char                    Buffer[80];
20567754Smsmith    ACPI_BUFFER             RetBuf;
20667754Smsmith    ACPI_STATUS             Status;
20767754Smsmith    UINT32                  Size;
20867754Smsmith
20967754Smsmith
21067754Smsmith    if (!Target)
21167754Smsmith    {
21267754Smsmith        return;
21367754Smsmith    }
21467754Smsmith
21567754Smsmith    /* Decode the output type */
21667754Smsmith
21767754Smsmith    if (OutputType)
21867754Smsmith    {
219151937Sjkim        AcpiUtStrupr (OutputType);
22067754Smsmith        if (OutputType[0] == 'W')
22167754Smsmith        {
22267754Smsmith            Display = DB_WORD_DISPLAY;
22367754Smsmith        }
22467754Smsmith        else if (OutputType[0] == 'D')
22567754Smsmith        {
22667754Smsmith            Display = DB_DWORD_DISPLAY;
22767754Smsmith        }
22867754Smsmith        else if (OutputType[0] == 'Q')
22967754Smsmith        {
23067754Smsmith            Display = DB_QWORD_DISPLAY;
23167754Smsmith        }
23267754Smsmith    }
23367754Smsmith
23467754Smsmith    RetBuf.Length = sizeof (Buffer);
23567754Smsmith    RetBuf.Pointer = Buffer;
23667754Smsmith
23767754Smsmith    /* Differentiate between a number and a name */
23867754Smsmith
23967754Smsmith    if ((Target[0] >= 0x30) && (Target[0] <= 0x39))
24067754Smsmith    {
24167754Smsmith        ObjPtr = AcpiDbGetPointer (Target);
24267754Smsmith        if (!AcpiOsReadable (ObjPtr, 16))
24367754Smsmith        {
244287168Sjkim            AcpiOsPrintf (
245287168Sjkim                "Address %p is invalid in this address space\n",
246151937Sjkim                ObjPtr);
24767754Smsmith            return;
24867754Smsmith        }
24967754Smsmith
25067754Smsmith        /* Decode the object type */
25167754Smsmith
25291116Smsmith        switch (ACPI_GET_DESCRIPTOR_TYPE (ObjPtr))
25367754Smsmith        {
25491116Smsmith        case ACPI_DESC_TYPE_NAMED:
25567754Smsmith
25691116Smsmith            /* This is a namespace Node */
25791116Smsmith
25867754Smsmith            if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_NAMESPACE_NODE)))
25967754Smsmith            {
260151937Sjkim                AcpiOsPrintf (
261287168Sjkim                    "Cannot read entire Named object at address %p\n",
262287168Sjkim                    ObjPtr);
26367754Smsmith                return;
26467754Smsmith            }
26567754Smsmith
26667754Smsmith            Node = ObjPtr;
267151937Sjkim            goto DumpNode;
26867754Smsmith
26999679Siwasaki        case ACPI_DESC_TYPE_OPERAND:
27091116Smsmith
27191116Smsmith            /* This is a ACPI OPERAND OBJECT */
27291116Smsmith
27367754Smsmith            if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_OPERAND_OBJECT)))
27467754Smsmith            {
275287168Sjkim                AcpiOsPrintf (
276287168Sjkim                    "Cannot read entire ACPI object at address %p\n",
277151937Sjkim                    ObjPtr);
27867754Smsmith                return;
27967754Smsmith            }
28067754Smsmith
281287168Sjkim            AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_OPERAND_OBJECT),
282287168Sjkim                Display, ACPI_UINT32_MAX);
28377424Smsmith            AcpiExDumpObjectDescriptor (ObjPtr, 1);
28491116Smsmith            break;
28567754Smsmith
28691116Smsmith        case ACPI_DESC_TYPE_PARSER:
28791116Smsmith
28891116Smsmith            /* This is a Parser Op object */
28991116Smsmith
29067754Smsmith            if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_PARSE_OBJECT)))
29167754Smsmith            {
292151937Sjkim                AcpiOsPrintf (
293287168Sjkim                    "Cannot read entire Parser object at address %p\n",
294287168Sjkim                    ObjPtr);
29567754Smsmith                return;
29667754Smsmith            }
29767754Smsmith
298287168Sjkim            AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_PARSE_OBJECT),
299287168Sjkim                Display, ACPI_UINT32_MAX);
30067754Smsmith            AcpiDbDumpParserDescriptor ((ACPI_PARSE_OBJECT *) ObjPtr);
30191116Smsmith            break;
30267754Smsmith
30391116Smsmith        default:
30491116Smsmith
30591116Smsmith            /* Is not a recognizeable object */
30691116Smsmith
307272444Sjkim            AcpiOsPrintf (
308272444Sjkim                "Not a known ACPI internal object, descriptor type %2.2X\n",
309272444Sjkim                ACPI_GET_DESCRIPTOR_TYPE (ObjPtr));
310272444Sjkim
31167754Smsmith            Size = 16;
31267754Smsmith            if (AcpiOsReadable (ObjPtr, 64))
31367754Smsmith            {
31467754Smsmith                Size = 64;
31567754Smsmith            }
31667754Smsmith
31767754Smsmith            /* Just dump some memory */
31867754Smsmith
319241973Sjkim            AcpiUtDebugDumpBuffer (ObjPtr, Size, Display, ACPI_UINT32_MAX);
32091116Smsmith            break;
32167754Smsmith        }
32267754Smsmith
32367754Smsmith        return;
32467754Smsmith    }
32567754Smsmith
32667754Smsmith    /* The parameter is a name string that must be resolved to a Named obj */
32767754Smsmith
32867754Smsmith    Node = AcpiDbLocalNsLookup (Target);
32967754Smsmith    if (!Node)
33067754Smsmith    {
33167754Smsmith        return;
33267754Smsmith    }
33367754Smsmith
33467754Smsmith
335151937SjkimDumpNode:
336151937Sjkim    /* Now dump the NS node */
33767754Smsmith
338287168Sjkim    Status = AcpiGetName (Node, ACPI_FULL_PATHNAME_NO_TRAILING, &RetBuf);
33967754Smsmith    if (ACPI_FAILURE (Status))
34067754Smsmith    {
34167754Smsmith        AcpiOsPrintf ("Could not convert name to pathname\n");
34267754Smsmith    }
34367754Smsmith
34469746Smsmith    else
34569746Smsmith    {
346151937Sjkim        AcpiOsPrintf ("Object (%p) Pathname:  %s\n",
347151937Sjkim            Node, (char *) RetBuf.Pointer);
34869746Smsmith    }
34969746Smsmith
35067754Smsmith    if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE)))
35167754Smsmith    {
35267754Smsmith        AcpiOsPrintf ("Invalid Named object at address %p\n", Node);
35367754Smsmith        return;
35467754Smsmith    }
35567754Smsmith
356241973Sjkim    AcpiUtDebugDumpBuffer ((void *) Node, sizeof (ACPI_NAMESPACE_NODE),
357151937Sjkim        Display, ACPI_UINT32_MAX);
358167802Sjkim    AcpiExDumpNamespaceNode (Node, 1);
35967754Smsmith
36087031Smsmith    ObjDesc = AcpiNsGetAttachedObject (Node);
36187031Smsmith    if (ObjDesc)
36267754Smsmith    {
36387031Smsmith        AcpiOsPrintf ("\nAttached Object (%p):\n", ObjDesc);
36487031Smsmith        if (!AcpiOsReadable (ObjDesc, sizeof (ACPI_OPERAND_OBJECT)))
36567754Smsmith        {
366151937Sjkim            AcpiOsPrintf ("Invalid internal ACPI Object at address %p\n",
367151937Sjkim                ObjDesc);
36867754Smsmith            return;
36967754Smsmith        }
37067754Smsmith
371287168Sjkim        AcpiUtDebugDumpBuffer ((void *) ObjDesc,
372287168Sjkim            sizeof (ACPI_OPERAND_OBJECT), Display, ACPI_UINT32_MAX);
37387031Smsmith        AcpiExDumpObjectDescriptor (ObjDesc, 1);
37467754Smsmith    }
37567754Smsmith}
37667754Smsmith
37767754Smsmith
37867754Smsmith/*******************************************************************************
37967754Smsmith *
38067754Smsmith * FUNCTION:    AcpiDbDisplayMethodInfo
38167754Smsmith *
38267754Smsmith * PARAMETERS:  StartOp         - Root of the control method parse tree
38367754Smsmith *
38467754Smsmith * RETURN:      None
38567754Smsmith *
38667754Smsmith * DESCRIPTION: Display information about the current method
38767754Smsmith *
38867754Smsmith ******************************************************************************/
38967754Smsmith
39067754Smsmithvoid
39167754SmsmithAcpiDbDisplayMethodInfo (
39267754Smsmith    ACPI_PARSE_OBJECT       *StartOp)
39367754Smsmith{
39467754Smsmith    ACPI_WALK_STATE         *WalkState;
39567754Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc;
39667754Smsmith    ACPI_NAMESPACE_NODE     *Node;
39767754Smsmith    ACPI_PARSE_OBJECT       *RootOp;
39867754Smsmith    ACPI_PARSE_OBJECT       *Op;
39983174Smsmith    const ACPI_OPCODE_INFO  *OpInfo;
40067754Smsmith    UINT32                  NumOps = 0;
40167754Smsmith    UINT32                  NumOperands = 0;
40267754Smsmith    UINT32                  NumOperators = 0;
40367754Smsmith    UINT32                  NumRemainingOps = 0;
40467754Smsmith    UINT32                  NumRemainingOperands = 0;
40567754Smsmith    UINT32                  NumRemainingOperators = 0;
40667754Smsmith    BOOLEAN                 CountRemaining = FALSE;
40767754Smsmith
40867754Smsmith
40967754Smsmith    WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
41067754Smsmith    if (!WalkState)
41167754Smsmith    {
41267754Smsmith        AcpiOsPrintf ("There is no method currently executing\n");
41367754Smsmith        return;
41467754Smsmith    }
41567754Smsmith
41667754Smsmith    ObjDesc = WalkState->MethodDesc;
417298714Sjkim    Node = WalkState->MethodNode;
41867754Smsmith
419123315Snjl    AcpiOsPrintf ("Currently executing control method is [%4.4s]\n",
420298714Sjkim        AcpiUtGetNodeName (Node));
421167802Sjkim    AcpiOsPrintf ("%X Arguments, SyncLevel = %X\n",
422298714Sjkim        (UINT32) ObjDesc->Method.ParamCount,
423298714Sjkim        (UINT32) ObjDesc->Method.SyncLevel);
42467754Smsmith
42567754Smsmith    RootOp = StartOp;
42699679Siwasaki    while (RootOp->Common.Parent)
42767754Smsmith    {
42899679Siwasaki        RootOp = RootOp->Common.Parent;
42967754Smsmith    }
43067754Smsmith
43167754Smsmith    Op = RootOp;
43267754Smsmith
43367754Smsmith    while (Op)
43467754Smsmith    {
43567754Smsmith        if (Op == StartOp)
43667754Smsmith        {
43767754Smsmith            CountRemaining = TRUE;
43867754Smsmith        }
43967754Smsmith
44067754Smsmith        NumOps++;
44167754Smsmith        if (CountRemaining)
44267754Smsmith        {
44367754Smsmith            NumRemainingOps++;
44467754Smsmith        }
44567754Smsmith
44667754Smsmith        /* Decode the opcode */
44767754Smsmith
44899679Siwasaki        OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
44985756Smsmith        switch (OpInfo->Class)
45067754Smsmith        {
45185756Smsmith        case AML_CLASS_ARGUMENT:
452250838Sjkim
45367754Smsmith            if (CountRemaining)
45467754Smsmith            {
45567754Smsmith                NumRemainingOperands++;
45667754Smsmith            }
45767754Smsmith
45867754Smsmith            NumOperands++;
45967754Smsmith            break;
46067754Smsmith
46185756Smsmith        case AML_CLASS_UNKNOWN:
462250838Sjkim
46385756Smsmith            /* Bad opcode or ASCII character */
46485756Smsmith
46585756Smsmith            continue;
46685756Smsmith
46767754Smsmith        default:
468250838Sjkim
46967754Smsmith            if (CountRemaining)
47067754Smsmith            {
47167754Smsmith                NumRemainingOperators++;
47267754Smsmith            }
47367754Smsmith
47467754Smsmith            NumOperators++;
47567754Smsmith            break;
47667754Smsmith        }
47767754Smsmith
47867754Smsmith        Op = AcpiPsGetDepthNext (StartOp, Op);
47967754Smsmith    }
48067754Smsmith
481151937Sjkim    AcpiOsPrintf (
482151937Sjkim        "Method contains:       %X AML Opcodes - %X Operators, %X Operands\n",
483151937Sjkim        NumOps, NumOperators, NumOperands);
48467754Smsmith
485151937Sjkim    AcpiOsPrintf (
486151937Sjkim        "Remaining to execute:  %X AML Opcodes - %X Operators, %X Operands\n",
487151937Sjkim        NumRemainingOps, NumRemainingOperators, NumRemainingOperands);
48867754Smsmith}
48967754Smsmith
49067754Smsmith
49167754Smsmith/*******************************************************************************
49267754Smsmith *
49367754Smsmith * FUNCTION:    AcpiDbDisplayLocals
49467754Smsmith *
49567754Smsmith * PARAMETERS:  None
49667754Smsmith *
49767754Smsmith * RETURN:      None
49867754Smsmith *
49967754Smsmith * DESCRIPTION: Display all locals for the currently running control method
50067754Smsmith *
50167754Smsmith ******************************************************************************/
50267754Smsmith
50367754Smsmithvoid
504151937SjkimAcpiDbDisplayLocals (
505151937Sjkim    void)
50667754Smsmith{
50767754Smsmith    ACPI_WALK_STATE         *WalkState;
50867754Smsmith
50967754Smsmith
51067754Smsmith    WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
51167754Smsmith    if (!WalkState)
51267754Smsmith    {
51367754Smsmith        AcpiOsPrintf ("There is no method currently executing\n");
51467754Smsmith        return;
51567754Smsmith    }
51667754Smsmith
517285797Sjkim    AcpiDbDecodeLocals (WalkState);
51867754Smsmith}
51967754Smsmith
52067754Smsmith
52167754Smsmith/*******************************************************************************
52267754Smsmith *
52367754Smsmith * FUNCTION:    AcpiDbDisplayArguments
52467754Smsmith *
52567754Smsmith * PARAMETERS:  None
52667754Smsmith *
52767754Smsmith * RETURN:      None
52867754Smsmith *
52967754Smsmith * DESCRIPTION: Display all arguments for the currently running control method
53067754Smsmith *
53167754Smsmith ******************************************************************************/
53267754Smsmith
53367754Smsmithvoid
534151937SjkimAcpiDbDisplayArguments (
535151937Sjkim    void)
53667754Smsmith{
53767754Smsmith    ACPI_WALK_STATE         *WalkState;
53867754Smsmith
53967754Smsmith
54067754Smsmith    WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
54167754Smsmith    if (!WalkState)
54267754Smsmith    {
54367754Smsmith        AcpiOsPrintf ("There is no method currently executing\n");
54467754Smsmith        return;
54567754Smsmith    }
54667754Smsmith
547285797Sjkim    AcpiDbDecodeArguments (WalkState);
54867754Smsmith}
54967754Smsmith
55067754Smsmith
55167754Smsmith/*******************************************************************************
55267754Smsmith *
55367754Smsmith * FUNCTION:    AcpiDbDisplayResults
55467754Smsmith *
55567754Smsmith * PARAMETERS:  None
55667754Smsmith *
55767754Smsmith * RETURN:      None
55867754Smsmith *
55967754Smsmith * DESCRIPTION: Display current contents of a method result stack
56067754Smsmith *
56167754Smsmith ******************************************************************************/
56267754Smsmith
56367754Smsmithvoid
564151937SjkimAcpiDbDisplayResults (
565151937Sjkim    void)
56667754Smsmith{
56767754Smsmith    UINT32                  i;
56867754Smsmith    ACPI_WALK_STATE         *WalkState;
56967754Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc;
570167802Sjkim    UINT32                  ResultCount = 0;
57167754Smsmith    ACPI_NAMESPACE_NODE     *Node;
572167802Sjkim    ACPI_GENERIC_STATE      *Frame;
573167802Sjkim    UINT32                  Index; /* Index onto current frame */
57467754Smsmith
57567754Smsmith
57667754Smsmith    WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
57767754Smsmith    if (!WalkState)
57867754Smsmith    {
57967754Smsmith        AcpiOsPrintf ("There is no method currently executing\n");
58067754Smsmith        return;
58167754Smsmith    }
58267754Smsmith
58367754Smsmith    ObjDesc = WalkState->MethodDesc;
584298714Sjkim    Node  = WalkState->MethodNode;
58567754Smsmith
58669746Smsmith    if (WalkState->Results)
58769746Smsmith    {
588167802Sjkim        ResultCount = WalkState->ResultCount;
58969746Smsmith    }
59067754Smsmith
59187031Smsmith    AcpiOsPrintf ("Method [%4.4s] has %X stacked result objects\n",
592287168Sjkim        AcpiUtGetNodeName (Node), ResultCount);
59369746Smsmith
594167802Sjkim    /* From the top element of result stack */
595167802Sjkim
596167802Sjkim    Frame = WalkState->Results;
597167802Sjkim    Index = (ResultCount - 1) % ACPI_RESULTS_FRAME_OBJ_NUM;
598167802Sjkim
599167802Sjkim    for (i = 0; i < ResultCount; i++)
60067754Smsmith    {
601167802Sjkim        ObjDesc = Frame->Results.ObjDesc[Index];
602209746Sjkim        AcpiOsPrintf ("Result%u: ", i);
603285797Sjkim        AcpiDbDisplayInternalObject (ObjDesc, WalkState);
604287168Sjkim
605167802Sjkim        if (Index == 0)
606167802Sjkim        {
607167802Sjkim            Frame = Frame->Results.Next;
608167802Sjkim            Index = ACPI_RESULTS_FRAME_OBJ_NUM;
609167802Sjkim        }
610287168Sjkim
611167802Sjkim        Index--;
61267754Smsmith    }
61367754Smsmith}
61467754Smsmith
61567754Smsmith
61667754Smsmith/*******************************************************************************
61767754Smsmith *
61867754Smsmith * FUNCTION:    AcpiDbDisplayCallingTree
61967754Smsmith *
62067754Smsmith * PARAMETERS:  None
62167754Smsmith *
62267754Smsmith * RETURN:      None
62367754Smsmith *
62467754Smsmith * DESCRIPTION: Display current calling tree of nested control methods
62567754Smsmith *
62667754Smsmith ******************************************************************************/
62767754Smsmith
62867754Smsmithvoid
629151937SjkimAcpiDbDisplayCallingTree (
630151937Sjkim    void)
63167754Smsmith{
63267754Smsmith    ACPI_WALK_STATE         *WalkState;
63367754Smsmith    ACPI_NAMESPACE_NODE     *Node;
63467754Smsmith
63567754Smsmith
63667754Smsmith    WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
63767754Smsmith    if (!WalkState)
63867754Smsmith    {
63967754Smsmith        AcpiOsPrintf ("There is no method currently executing\n");
64067754Smsmith        return;
64167754Smsmith    }
64267754Smsmith
64369450Smsmith    Node = WalkState->MethodNode;
64467754Smsmith    AcpiOsPrintf ("Current Control Method Call Tree\n");
64567754Smsmith
64699679Siwasaki    while (WalkState)
64767754Smsmith    {
64869450Smsmith        Node = WalkState->MethodNode;
649123315Snjl        AcpiOsPrintf ("    [%4.4s]\n", AcpiUtGetNodeName (Node));
65067754Smsmith
65167754Smsmith        WalkState = WalkState->Next;
65267754Smsmith    }
65367754Smsmith}
65467754Smsmith
65567754Smsmith
65667754Smsmith/*******************************************************************************
65767754Smsmith *
658117521Snjl * FUNCTION:    AcpiDbDisplayObjectType
659117521Snjl *
660298714Sjkim * PARAMETERS:  ObjectArg       - User entered NS node handle
661117521Snjl *
662117521Snjl * RETURN:      None
663117521Snjl *
664123315Snjl * DESCRIPTION: Display type of an arbitrary NS node
665117521Snjl *
666117521Snjl ******************************************************************************/
667117521Snjl
668117521Snjlvoid
669117521SnjlAcpiDbDisplayObjectType (
670298714Sjkim    char                    *ObjectArg)
671117521Snjl{
672298714Sjkim    ACPI_SIZE               Arg;
673298714Sjkim    ACPI_HANDLE             Handle;
674117521Snjl    ACPI_DEVICE_INFO        *Info;
675117521Snjl    ACPI_STATUS             Status;
676193267Sjkim    UINT32                  i;
677117521Snjl
678117521Snjl
679298714Sjkim    Arg = strtoul (ObjectArg, NULL, 16);
680298714Sjkim    Handle = ACPI_TO_POINTER (Arg);
681117521Snjl
682298714Sjkim    Status = AcpiGetObjectInfo (Handle, &Info);
683197104Sjkim    if (ACPI_FAILURE (Status))
684117521Snjl    {
685197104Sjkim        AcpiOsPrintf ("Could not get object info, %s\n",
686197104Sjkim            AcpiFormatException (Status));
687197104Sjkim        return;
688197104Sjkim    }
689117521Snjl
690298714Sjkim    AcpiOsPrintf ("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n",
691298714Sjkim        ACPI_FORMAT_UINT64 (Info->Address),
692298714Sjkim        Info->CurrentStatus, Info->Flags);
693117521Snjl
694298714Sjkim    AcpiOsPrintf ("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n",
695298714Sjkim        Info->HighestDstates[0], Info->HighestDstates[1],
696298714Sjkim        Info->HighestDstates[2], Info->HighestDstates[3]);
697298714Sjkim
698298714Sjkim    AcpiOsPrintf ("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n",
699298714Sjkim        Info->LowestDstates[0], Info->LowestDstates[1],
700298714Sjkim        Info->LowestDstates[2], Info->LowestDstates[3],
701298714Sjkim        Info->LowestDstates[4]);
702298714Sjkim
703197104Sjkim    if (Info->Valid & ACPI_VALID_HID)
704197104Sjkim    {
705197104Sjkim        AcpiOsPrintf ("HID: %s\n", Info->HardwareId.String);
706117521Snjl    }
707287168Sjkim
708197104Sjkim    if (Info->Valid & ACPI_VALID_UID)
709117521Snjl    {
710197104Sjkim        AcpiOsPrintf ("UID: %s\n", Info->UniqueId.String);
711117521Snjl    }
712287168Sjkim
713197104Sjkim    if (Info->Valid & ACPI_VALID_CID)
714197104Sjkim    {
715197104Sjkim        for (i = 0; i < Info->CompatibleIdList.Count; i++)
716197104Sjkim        {
717209746Sjkim            AcpiOsPrintf ("CID %u: %s\n", i,
718197104Sjkim                Info->CompatibleIdList.Ids[i].String);
719197104Sjkim        }
720197104Sjkim    }
721197104Sjkim
722197104Sjkim    ACPI_FREE (Info);
723117521Snjl}
724117521Snjl
725117521Snjl
726117521Snjl/*******************************************************************************
727117521Snjl *
72867754Smsmith * FUNCTION:    AcpiDbDisplayResultObject
72967754Smsmith *
73067754Smsmith * PARAMETERS:  ObjDesc         - Object to be displayed
73167754Smsmith *              WalkState       - Current walk state
73267754Smsmith *
73367754Smsmith * RETURN:      None
73467754Smsmith *
73567754Smsmith * DESCRIPTION: Display the result of an AML opcode
73667754Smsmith *
73791116Smsmith * Note: Curently only displays the result object if we are single stepping.
73891116Smsmith * However, this output may be useful in other contexts and could be enabled
73991116Smsmith * to do so if needed.
74091116Smsmith *
74167754Smsmith ******************************************************************************/
74267754Smsmith
74367754Smsmithvoid
74467754SmsmithAcpiDbDisplayResultObject (
74567754Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc,
74667754Smsmith    ACPI_WALK_STATE         *WalkState)
74767754Smsmith{
74867754Smsmith
749298714Sjkim#ifndef ACPI_APPLICATION
750298714Sjkim    if (AcpiGbl_DbThreadId != AcpiOsGetThreadId())
751298714Sjkim    {
752298714Sjkim        return;
753298714Sjkim    }
754298714Sjkim#endif
755298714Sjkim
75691116Smsmith    /* Only display if single stepping */
75791116Smsmith
75867754Smsmith    if (!AcpiGbl_CmSingleStep)
75967754Smsmith    {
76067754Smsmith        return;
76167754Smsmith    }
76267754Smsmith
76367754Smsmith    AcpiOsPrintf ("ResultObj: ");
764285797Sjkim    AcpiDbDisplayInternalObject (ObjDesc, WalkState);
76567754Smsmith    AcpiOsPrintf ("\n");
76667754Smsmith}
76767754Smsmith
76867754Smsmith
76967754Smsmith/*******************************************************************************
77067754Smsmith *
77167754Smsmith * FUNCTION:    AcpiDbDisplayArgumentObject
77267754Smsmith *
77367754Smsmith * PARAMETERS:  ObjDesc         - Object to be displayed
77467754Smsmith *              WalkState       - Current walk state
77567754Smsmith *
77667754Smsmith * RETURN:      None
77767754Smsmith *
77867754Smsmith * DESCRIPTION: Display the result of an AML opcode
77967754Smsmith *
78067754Smsmith ******************************************************************************/
78167754Smsmith
78267754Smsmithvoid
78367754SmsmithAcpiDbDisplayArgumentObject (
78467754Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc,
78567754Smsmith    ACPI_WALK_STATE         *WalkState)
78667754Smsmith{
78767754Smsmith
788298714Sjkim#ifndef ACPI_APPLICATION
789298714Sjkim    if (AcpiGbl_DbThreadId != AcpiOsGetThreadId())
790298714Sjkim    {
791298714Sjkim        return;
792298714Sjkim    }
793298714Sjkim#endif
794298714Sjkim
79567754Smsmith    if (!AcpiGbl_CmSingleStep)
79667754Smsmith    {
79767754Smsmith        return;
79867754Smsmith    }
79967754Smsmith
80067754Smsmith    AcpiOsPrintf ("ArgObj:    ");
801285797Sjkim    AcpiDbDisplayInternalObject (ObjDesc, WalkState);
80267754Smsmith}
80367754Smsmith
804114237Snjl
805231844Sjkim#if (!ACPI_REDUCED_HARDWARE)
806114237Snjl/*******************************************************************************
807114237Snjl *
808114237Snjl * FUNCTION:    AcpiDbDisplayGpes
809114237Snjl *
810123315Snjl * PARAMETERS:  None
811114237Snjl *
812114237Snjl * RETURN:      None
813114237Snjl *
814123315Snjl * DESCRIPTION: Display the current GPE structures
815114237Snjl *
816114237Snjl ******************************************************************************/
817114237Snjl
818114237Snjlvoid
819151937SjkimAcpiDbDisplayGpes (
820151937Sjkim    void)
821114237Snjl{
822114237Snjl    ACPI_GPE_BLOCK_INFO     *GpeBlock;
823117521Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo;
824129684Snjl    ACPI_GPE_EVENT_INFO     *GpeEventInfo;
825129684Snjl    ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
826207344Sjkim    char                    *GpeType;
827237412Sjkim    ACPI_GPE_NOTIFY_INFO    *Notify;
828129684Snjl    UINT32                  GpeIndex;
829129684Snjl    UINT32                  Block = 0;
830129684Snjl    UINT32                  i;
831129684Snjl    UINT32                  j;
832237412Sjkim    UINT32                  Count;
833129684Snjl    char                    Buffer[80];
834129684Snjl    ACPI_BUFFER             RetBuf;
835129684Snjl    ACPI_STATUS             Status;
836114237Snjl
837114237Snjl
838129684Snjl    RetBuf.Length = sizeof (Buffer);
839129684Snjl    RetBuf.Pointer = Buffer;
840129684Snjl
841129684Snjl    Block = 0;
842129684Snjl
843129684Snjl    /* Walk the GPE lists */
844129684Snjl
845117521Snjl    GpeXruptInfo = AcpiGbl_GpeXruptListHead;
846117521Snjl    while (GpeXruptInfo)
847114237Snjl    {
848117521Snjl        GpeBlock = GpeXruptInfo->GpeBlockListHead;
849117521Snjl        while (GpeBlock)
850117521Snjl        {
851287168Sjkim            Status = AcpiGetName (GpeBlock->Node,
852287168Sjkim                ACPI_FULL_PATHNAME_NO_TRAILING, &RetBuf);
853129684Snjl            if (ACPI_FAILURE (Status))
854129684Snjl            {
855129684Snjl                AcpiOsPrintf ("Could not convert name to pathname\n");
856129684Snjl            }
857129684Snjl
858207344Sjkim            if (GpeBlock->Node == AcpiGbl_FadtGpeDevice)
859207344Sjkim            {
860207344Sjkim                GpeType = "FADT-defined GPE block";
861207344Sjkim            }
862207344Sjkim            else
863207344Sjkim            {
864207344Sjkim                GpeType = "GPE Block Device";
865207344Sjkim            }
866151937Sjkim
867287168Sjkim            AcpiOsPrintf (
868287168Sjkim                "\nBlock %u - Info %p  DeviceNode %p [%s] - %s\n",
869207344Sjkim                Block, GpeBlock, GpeBlock->Node, Buffer, GpeType);
870207344Sjkim
871287168Sjkim            AcpiOsPrintf (
872287168Sjkim                "    Registers:    %u (%u GPEs)\n",
873206117Sjkim                GpeBlock->RegisterCount, GpeBlock->GpeCount);
874151937Sjkim
875287168Sjkim            AcpiOsPrintf (
876287168Sjkim                "    GPE range:    0x%X to 0x%X on interrupt %u\n",
877151937Sjkim                GpeBlock->BlockBaseNumber,
878206117Sjkim                GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1),
879206117Sjkim                GpeXruptInfo->InterruptNumber);
880151937Sjkim
881151937Sjkim            AcpiOsPrintf (
882151937Sjkim                "    RegisterInfo: %p  Status %8.8X%8.8X Enable %8.8X%8.8X\n",
883151937Sjkim                GpeBlock->RegisterInfo,
884287168Sjkim                ACPI_FORMAT_UINT64 (
885287168Sjkim                    GpeBlock->RegisterInfo->StatusAddress.Address),
886287168Sjkim                ACPI_FORMAT_UINT64 (
887287168Sjkim                    GpeBlock->RegisterInfo->EnableAddress.Address));
888151937Sjkim
889117521Snjl            AcpiOsPrintf ("    EventInfo:    %p\n", GpeBlock->EventInfo);
890114237Snjl
891129684Snjl            /* Examine each GPE Register within the block */
892129684Snjl
893129684Snjl            for (i = 0; i < GpeBlock->RegisterCount; i++)
894129684Snjl            {
895129684Snjl                GpeRegisterInfo = &GpeBlock->RegisterInfo[i];
896129684Snjl
897129684Snjl                AcpiOsPrintf (
898287168Sjkim                    "    Reg %u: (GPE %.2X-%.2X)  "
899287168Sjkim                    "RunEnable %2.2X WakeEnable %2.2X"
900206117Sjkim                    " Status %8.8X%8.8X Enable %8.8X%8.8X\n",
901206117Sjkim                    i, GpeRegisterInfo->BaseGpeNumber,
902287168Sjkim                    GpeRegisterInfo->BaseGpeNumber +
903287168Sjkim                        (ACPI_GPE_REGISTER_WIDTH - 1),
904151937Sjkim                    GpeRegisterInfo->EnableForRun,
905206117Sjkim                    GpeRegisterInfo->EnableForWake,
906287168Sjkim                    ACPI_FORMAT_UINT64 (
907287168Sjkim                        GpeRegisterInfo->StatusAddress.Address),
908287168Sjkim                    ACPI_FORMAT_UINT64 (
909287168Sjkim                        GpeRegisterInfo->EnableAddress.Address));
910129684Snjl
911129684Snjl                /* Now look at the individual GPEs in this byte register */
912129684Snjl
913129684Snjl                for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++)
914129684Snjl                {
915129684Snjl                    GpeIndex = (i * ACPI_GPE_REGISTER_WIDTH) + j;
916129684Snjl                    GpeEventInfo = &GpeBlock->EventInfo[GpeIndex];
917129684Snjl
918278970Sjkim                    if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) ==
919216471Sjkim                        ACPI_GPE_DISPATCH_NONE)
920129684Snjl                    {
921206117Sjkim                        /* This GPE is not used (no method or handler), ignore it */
922129684Snjl
923129684Snjl                        continue;
924129684Snjl                    }
925129684Snjl
926129684Snjl                    AcpiOsPrintf (
927209746Sjkim                        "        GPE %.2X: %p  RunRefs %2.2X Flags %2.2X (",
928206117Sjkim                        GpeBlock->BlockBaseNumber + GpeIndex, GpeEventInfo,
929216471Sjkim                        GpeEventInfo->RuntimeCount, GpeEventInfo->Flags);
930129684Snjl
931206117Sjkim                    /* Decode the flags byte */
932206117Sjkim
933129684Snjl                    if (GpeEventInfo->Flags & ACPI_GPE_LEVEL_TRIGGERED)
934129684Snjl                    {
935129684Snjl                        AcpiOsPrintf ("Level, ");
936129684Snjl                    }
937129684Snjl                    else
938129684Snjl                    {
939129684Snjl                        AcpiOsPrintf ("Edge,  ");
940129684Snjl                    }
941129684Snjl
942206117Sjkim                    if (GpeEventInfo->Flags & ACPI_GPE_CAN_WAKE)
943129684Snjl                    {
944206117Sjkim                        AcpiOsPrintf ("CanWake, ");
945129684Snjl                    }
946129684Snjl                    else
947129684Snjl                    {
948206117Sjkim                        AcpiOsPrintf ("RunOnly, ");
949129684Snjl                    }
950129684Snjl
951278970Sjkim                    switch (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags))
952129684Snjl                    {
953216471Sjkim                    case ACPI_GPE_DISPATCH_NONE:
954250838Sjkim
955129684Snjl                        AcpiOsPrintf ("NotUsed");
956129684Snjl                        break;
957250838Sjkim
958216471Sjkim                    case ACPI_GPE_DISPATCH_METHOD:
959250838Sjkim
960216471Sjkim                        AcpiOsPrintf ("Method");
961216471Sjkim                        break;
962278970Sjkim
963129684Snjl                    case ACPI_GPE_DISPATCH_HANDLER:
964250838Sjkim
965129684Snjl                        AcpiOsPrintf ("Handler");
966129684Snjl                        break;
967250838Sjkim
968216471Sjkim                    case ACPI_GPE_DISPATCH_NOTIFY:
969250838Sjkim
970237412Sjkim                        Count = 0;
971237412Sjkim                        Notify = GpeEventInfo->Dispatch.NotifyList;
972237412Sjkim                        while (Notify)
973237412Sjkim                        {
974237412Sjkim                            Count++;
975237412Sjkim                            Notify = Notify->Next;
976237412Sjkim                        }
977287168Sjkim
978287168Sjkim                        AcpiOsPrintf ("Implicit Notify on %u devices",
979287168Sjkim                            Count);
980129684Snjl                        break;
981250838Sjkim
982278970Sjkim                    case ACPI_GPE_DISPATCH_RAW_HANDLER:
983278970Sjkim
984278970Sjkim                        AcpiOsPrintf ("RawHandler");
985278970Sjkim                        break;
986278970Sjkim
987129684Snjl                    default:
988250838Sjkim
989129684Snjl                        AcpiOsPrintf ("UNKNOWN: %X",
990278970Sjkim                            ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags));
991129684Snjl                        break;
992129684Snjl                    }
993129684Snjl
994206117Sjkim                    AcpiOsPrintf (")\n");
995129684Snjl                }
996129684Snjl            }
997287168Sjkim
998129684Snjl            Block++;
999117521Snjl            GpeBlock = GpeBlock->Next;
1000117521Snjl        }
1001287168Sjkim
1002117521Snjl        GpeXruptInfo = GpeXruptInfo->Next;
1003114237Snjl    }
1004114237Snjl}
1005231844Sjkim#endif /* !ACPI_REDUCED_HARDWARE */
1006114237Snjl
1007220663Sjkim
1008218590Sjkim/*******************************************************************************
1009218590Sjkim *
1010218590Sjkim * FUNCTION:    AcpiDbDisplayHandlers
1011218590Sjkim *
1012218590Sjkim * PARAMETERS:  None
1013218590Sjkim *
1014218590Sjkim * RETURN:      None
1015218590Sjkim *
1016218590Sjkim * DESCRIPTION: Display the currently installed global handlers
1017218590Sjkim *
1018218590Sjkim ******************************************************************************/
1019218590Sjkim
1020218590Sjkimvoid
1021218590SjkimAcpiDbDisplayHandlers (
1022218590Sjkim    void)
1023218590Sjkim{
1024218590Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc;
1025218590Sjkim    ACPI_OPERAND_OBJECT     *HandlerObj;
1026218590Sjkim    ACPI_ADR_SPACE_TYPE     SpaceId;
1027218590Sjkim    UINT32                  i;
1028218590Sjkim
1029218590Sjkim
1030218590Sjkim    /* Operation region handlers */
1031218590Sjkim
1032249663Sjkim    AcpiOsPrintf ("\nOperation Region Handlers at the namespace root:\n");
1033218590Sjkim
1034218590Sjkim    ObjDesc = AcpiNsGetAttachedObject (AcpiGbl_RootNode);
1035218590Sjkim    if (ObjDesc)
1036218590Sjkim    {
1037220663Sjkim        for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_SpaceIdList); i++)
1038218590Sjkim        {
1039220663Sjkim            SpaceId = AcpiGbl_SpaceIdList[i];
1040218590Sjkim
1041218590Sjkim            AcpiOsPrintf (ACPI_PREDEFINED_PREFIX,
1042218590Sjkim                AcpiUtGetRegionName ((UINT8) SpaceId), SpaceId);
1043218590Sjkim
1044298714Sjkim            HandlerObj = AcpiEvFindRegionHandler (
1045298714Sjkim                SpaceId, ObjDesc->CommonNotify.Handler);
1046298714Sjkim            if (HandlerObj)
1047218590Sjkim            {
1048298714Sjkim                AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING,
1049298714Sjkim                    (HandlerObj->AddressSpace.HandlerFlags &
1050298714Sjkim                        ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ?
1051298714Sjkim                        "Default" : "User",
1052298714Sjkim                    HandlerObj->AddressSpace.Handler);
1053287168Sjkim
1054298714Sjkim                goto FoundHandler;
1055218590Sjkim            }
1056218590Sjkim
1057218590Sjkim            /* There is no handler for this SpaceId */
1058218590Sjkim
1059218590Sjkim            AcpiOsPrintf ("None\n");
1060218590Sjkim
1061218590Sjkim        FoundHandler:;
1062218590Sjkim        }
1063228110Sjkim
1064228110Sjkim        /* Find all handlers for user-defined SpaceIDs */
1065228110Sjkim
1066298714Sjkim        HandlerObj = ObjDesc->CommonNotify.Handler;
1067228110Sjkim        while (HandlerObj)
1068228110Sjkim        {
1069228110Sjkim            if (HandlerObj->AddressSpace.SpaceId >= ACPI_USER_REGION_BEGIN)
1070228110Sjkim            {
1071228110Sjkim                AcpiOsPrintf (ACPI_PREDEFINED_PREFIX,
1072228110Sjkim                    "User-defined ID", HandlerObj->AddressSpace.SpaceId);
1073228110Sjkim                AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING,
1074228110Sjkim                    (HandlerObj->AddressSpace.HandlerFlags &
1075287168Sjkim                        ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ?
1076287168Sjkim                        "Default" : "User",
1077228110Sjkim                    HandlerObj->AddressSpace.Handler);
1078228110Sjkim            }
1079228110Sjkim
1080228110Sjkim            HandlerObj = HandlerObj->AddressSpace.Next;
1081228110Sjkim        }
1082218590Sjkim    }
1083218590Sjkim
1084231844Sjkim#if (!ACPI_REDUCED_HARDWARE)
1085231844Sjkim
1086218590Sjkim    /* Fixed event handlers */
1087218590Sjkim
1088218590Sjkim    AcpiOsPrintf ("\nFixed Event Handlers:\n");
1089218590Sjkim
1090218590Sjkim    for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
1091218590Sjkim    {
1092218590Sjkim        AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, AcpiUtGetEventName (i), i);
1093218590Sjkim        if (AcpiGbl_FixedEventHandlers[i].Handler)
1094218590Sjkim        {
1095218590Sjkim            AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, "User",
1096218590Sjkim                AcpiGbl_FixedEventHandlers[i].Handler);
1097218590Sjkim        }
1098218590Sjkim        else
1099218590Sjkim        {
1100218590Sjkim            AcpiOsPrintf (ACPI_HANDLER_NOT_PRESENT_STRING, "None");
1101218590Sjkim        }
1102218590Sjkim    }
1103218590Sjkim
1104231844Sjkim#endif /* !ACPI_REDUCED_HARDWARE */
1105231844Sjkim
1106218590Sjkim    /* Miscellaneous global handlers */
1107218590Sjkim
1108218590Sjkim    AcpiOsPrintf ("\nMiscellaneous Global Handlers:\n");
1109218590Sjkim
1110220663Sjkim    for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_HandlerList); i++)
1111218590Sjkim    {
1112287168Sjkim        AcpiOsPrintf (ACPI_HANDLER_NAME_STRING,
1113287168Sjkim            AcpiGbl_HandlerList[i].Name);
1114287168Sjkim
1115220663Sjkim        if (AcpiGbl_HandlerList[i].Handler)
1116218590Sjkim        {
1117218590Sjkim            AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, "User",
1118220663Sjkim                AcpiGbl_HandlerList[i].Handler);
1119218590Sjkim        }
1120218590Sjkim        else
1121218590Sjkim        {
1122218590Sjkim            AcpiOsPrintf (ACPI_HANDLER_NOT_PRESENT_STRING, "None");
1123218590Sjkim        }
1124218590Sjkim    }
1125249663Sjkim
1126249663Sjkim
1127249663Sjkim    /* Other handlers that are installed throughout the namespace */
1128249663Sjkim
1129249663Sjkim    AcpiOsPrintf ("\nOperation Region Handlers for specific devices:\n");
1130249663Sjkim
1131249663Sjkim    (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
1132287168Sjkim        ACPI_UINT32_MAX, AcpiDbDisplayNonRootHandlers,
1133287168Sjkim        NULL, NULL, NULL);
1134218590Sjkim}
1135218590Sjkim
1136249663Sjkim
1137249663Sjkim/*******************************************************************************
1138249663Sjkim *
1139249663Sjkim * FUNCTION:    AcpiDbDisplayNonRootHandlers
1140249663Sjkim *
1141249663Sjkim * PARAMETERS:  ACPI_WALK_CALLBACK
1142249663Sjkim *
1143249663Sjkim * RETURN:      Status
1144249663Sjkim *
1145249663Sjkim * DESCRIPTION: Display information about all handlers installed for a
1146249663Sjkim *              device object.
1147249663Sjkim *
1148249663Sjkim ******************************************************************************/
1149249663Sjkim
1150249663Sjkimstatic ACPI_STATUS
1151249663SjkimAcpiDbDisplayNonRootHandlers (
1152249663Sjkim    ACPI_HANDLE             ObjHandle,
1153249663Sjkim    UINT32                  NestingLevel,
1154249663Sjkim    void                    *Context,
1155249663Sjkim    void                    **ReturnValue)
1156249663Sjkim{
1157249663Sjkim    ACPI_NAMESPACE_NODE     *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
1158249663Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc;
1159249663Sjkim    ACPI_OPERAND_OBJECT     *HandlerObj;
1160249663Sjkim    char                    *Pathname;
1161249663Sjkim
1162249663Sjkim
1163249663Sjkim    ObjDesc = AcpiNsGetAttachedObject (Node);
1164249663Sjkim    if (!ObjDesc)
1165249663Sjkim    {
1166249663Sjkim        return (AE_OK);
1167249663Sjkim    }
1168249663Sjkim
1169298714Sjkim    Pathname = AcpiNsGetNormalizedPathname (Node, TRUE);
1170249663Sjkim    if (!Pathname)
1171249663Sjkim    {
1172249663Sjkim        return (AE_OK);
1173249663Sjkim    }
1174249663Sjkim
1175249663Sjkim    /* Display all handlers associated with this device */
1176249663Sjkim
1177298714Sjkim    HandlerObj = ObjDesc->CommonNotify.Handler;
1178249663Sjkim    while (HandlerObj)
1179249663Sjkim    {
1180249663Sjkim        AcpiOsPrintf (ACPI_PREDEFINED_PREFIX,
1181249663Sjkim            AcpiUtGetRegionName ((UINT8) HandlerObj->AddressSpace.SpaceId),
1182249663Sjkim            HandlerObj->AddressSpace.SpaceId);
1183249663Sjkim
1184249663Sjkim        AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING2,
1185249663Sjkim            (HandlerObj->AddressSpace.HandlerFlags &
1186249663Sjkim                ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User",
1187249663Sjkim            HandlerObj->AddressSpace.Handler);
1188249663Sjkim
1189249663Sjkim        AcpiOsPrintf (" Device Name: %s (%p)\n", Pathname, Node);
1190249663Sjkim
1191249663Sjkim        HandlerObj = HandlerObj->AddressSpace.Next;
1192249663Sjkim    }
1193249663Sjkim
1194249663Sjkim    ACPI_FREE (Pathname);
1195249663Sjkim    return (AE_OK);
1196249663Sjkim}
1197