10d02842fSSascha Wildner /*******************************************************************************
20d02842fSSascha Wildner *
30d02842fSSascha Wildner * Module Name: dbinput - user front-end to the AML debugger
40d02842fSSascha Wildner *
50d02842fSSascha Wildner ******************************************************************************/
60d02842fSSascha Wildner
7b4315fc7SSascha Wildner /******************************************************************************
8b4315fc7SSascha Wildner *
9b4315fc7SSascha Wildner * 1. Copyright Notice
10b4315fc7SSascha Wildner *
11*383048acSSascha Wildner * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
120d02842fSSascha Wildner * All rights reserved.
130d02842fSSascha Wildner *
14b4315fc7SSascha Wildner * 2. License
15b4315fc7SSascha Wildner *
16b4315fc7SSascha Wildner * 2.1. This is your license from Intel Corp. under its intellectual property
17b4315fc7SSascha Wildner * rights. You may have additional license terms from the party that provided
18b4315fc7SSascha Wildner * you this software, covering your right to use that party's intellectual
19b4315fc7SSascha Wildner * property rights.
20b4315fc7SSascha Wildner *
21b4315fc7SSascha Wildner * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22b4315fc7SSascha Wildner * copy of the source code appearing in this file ("Covered Code") an
23b4315fc7SSascha Wildner * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24b4315fc7SSascha Wildner * base code distributed originally by Intel ("Original Intel Code") to copy,
25b4315fc7SSascha Wildner * make derivatives, distribute, use and display any portion of the Covered
26b4315fc7SSascha Wildner * Code in any form, with the right to sublicense such rights; and
27b4315fc7SSascha Wildner *
28b4315fc7SSascha Wildner * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29b4315fc7SSascha Wildner * license (with the right to sublicense), under only those claims of Intel
30b4315fc7SSascha Wildner * patents that are infringed by the Original Intel Code, to make, use, sell,
31b4315fc7SSascha Wildner * offer to sell, and import the Covered Code and derivative works thereof
32b4315fc7SSascha Wildner * solely to the minimum extent necessary to exercise the above copyright
33b4315fc7SSascha Wildner * license, and in no event shall the patent license extend to any additions
34b4315fc7SSascha Wildner * to or modifications of the Original Intel Code. No other license or right
35b4315fc7SSascha Wildner * is granted directly or by implication, estoppel or otherwise;
36b4315fc7SSascha Wildner *
37b4315fc7SSascha Wildner * The above copyright and patent license is granted only if the following
38b4315fc7SSascha Wildner * conditions are met:
39b4315fc7SSascha Wildner *
40b4315fc7SSascha Wildner * 3. Conditions
41b4315fc7SSascha Wildner *
42b4315fc7SSascha Wildner * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered
44b4315fc7SSascha Wildner * Code or modification with rights to further distribute source must include
45b4315fc7SSascha Wildner * the above Copyright Notice, the above License, this list of Conditions,
46b4315fc7SSascha Wildner * and the following Disclaimer and Export Compliance provision. In addition,
47b4315fc7SSascha Wildner * Licensee must cause all Covered Code to which Licensee contributes to
48b4315fc7SSascha Wildner * contain a file documenting the changes Licensee made to create that Covered
49b4315fc7SSascha Wildner * Code and the date of any change. Licensee must include in that file the
50b4315fc7SSascha Wildner * documentation of any changes made by any predecessor Licensee. Licensee
51b4315fc7SSascha Wildner * must include a prominent statement that the modification is derived,
52b4315fc7SSascha Wildner * directly or indirectly, from Original Intel Code.
53b4315fc7SSascha Wildner *
54b4315fc7SSascha Wildner * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered
56b4315fc7SSascha Wildner * Code or modification without rights to further distribute source must
57b4315fc7SSascha Wildner * include the following Disclaimer and Export Compliance provision in the
58b4315fc7SSascha Wildner * documentation and/or other materials provided with distribution. In
59b4315fc7SSascha Wildner * addition, Licensee may not authorize further sublicense of source of any
60b4315fc7SSascha Wildner * portion of the Covered Code, and must include terms to the effect that the
61b4315fc7SSascha Wildner * license from Licensee to its licensee is limited to the intellectual
62b4315fc7SSascha Wildner * property embodied in the software Licensee provides to its licensee, and
63b4315fc7SSascha Wildner * not to intellectual property embodied in modifications its licensee may
64b4315fc7SSascha Wildner * make.
65b4315fc7SSascha Wildner *
66b4315fc7SSascha Wildner * 3.3. Redistribution of Executable. Redistribution in executable form of any
67b4315fc7SSascha Wildner * substantial portion of the Covered Code or modification must reproduce the
68b4315fc7SSascha Wildner * above Copyright Notice, and the following Disclaimer and Export Compliance
69b4315fc7SSascha Wildner * provision in the documentation and/or other materials provided with the
70b4315fc7SSascha Wildner * distribution.
71b4315fc7SSascha Wildner *
72b4315fc7SSascha Wildner * 3.4. Intel retains all right, title, and interest in and to the Original
73b4315fc7SSascha Wildner * Intel Code.
74b4315fc7SSascha Wildner *
75b4315fc7SSascha Wildner * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76b4315fc7SSascha Wildner * Intel shall be used in advertising or otherwise to promote the sale, use or
77b4315fc7SSascha Wildner * other dealings in products derived from or relating to the Covered Code
78b4315fc7SSascha Wildner * without prior written authorization from Intel.
79b4315fc7SSascha Wildner *
80b4315fc7SSascha Wildner * 4. Disclaimer and Export Compliance
81b4315fc7SSascha Wildner *
82b4315fc7SSascha Wildner * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83b4315fc7SSascha Wildner * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84b4315fc7SSascha Wildner * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85b4315fc7SSascha Wildner * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86b4315fc7SSascha Wildner * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87b4315fc7SSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88b4315fc7SSascha Wildner * PARTICULAR PURPOSE.
89b4315fc7SSascha Wildner *
90b4315fc7SSascha Wildner * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91b4315fc7SSascha Wildner * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92b4315fc7SSascha Wildner * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93b4315fc7SSascha Wildner * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94b4315fc7SSascha Wildner * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95b4315fc7SSascha Wildner * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96b4315fc7SSascha Wildner * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97b4315fc7SSascha Wildner * LIMITED REMEDY.
98b4315fc7SSascha Wildner *
99b4315fc7SSascha Wildner * 4.3. Licensee shall not export, either directly or indirectly, any of this
100b4315fc7SSascha Wildner * software or system incorporating such software without first obtaining any
101b4315fc7SSascha Wildner * required license or other approval from the U. S. Department of Commerce or
102b4315fc7SSascha Wildner * any other agency or department of the United States Government. In the
103b4315fc7SSascha Wildner * event Licensee exports any such software from the United States or
104b4315fc7SSascha Wildner * re-exports any such software from a foreign destination, Licensee shall
105b4315fc7SSascha Wildner * ensure that the distribution and export/re-export of the software is in
106b4315fc7SSascha Wildner * compliance with all laws, regulations, orders, or other restrictions of the
107b4315fc7SSascha Wildner * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108b4315fc7SSascha Wildner * any of its subsidiaries will export/re-export any technical data, process,
109b4315fc7SSascha Wildner * software, or service, directly or indirectly, to any country for which the
110b4315fc7SSascha Wildner * United States government or any agency thereof requires an export license,
111b4315fc7SSascha Wildner * other governmental approval, or letter of assurance, without first obtaining
112b4315fc7SSascha Wildner * such license, approval or letter.
113b4315fc7SSascha Wildner *
114b4315fc7SSascha Wildner *****************************************************************************
115b4315fc7SSascha Wildner *
116b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
117b4315fc7SSascha Wildner * following license:
118b4315fc7SSascha Wildner *
1190d02842fSSascha Wildner * Redistribution and use in source and binary forms, with or without
1200d02842fSSascha Wildner * modification, are permitted provided that the following conditions
1210d02842fSSascha Wildner * are met:
1220d02842fSSascha Wildner * 1. Redistributions of source code must retain the above copyright
1230d02842fSSascha Wildner * notice, this list of conditions, and the following disclaimer,
1240d02842fSSascha Wildner * without modification.
1250d02842fSSascha Wildner * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1260d02842fSSascha Wildner * substantially similar to the "NO WARRANTY" disclaimer below
1270d02842fSSascha Wildner * ("Disclaimer") and any redistribution must be conditioned upon
1280d02842fSSascha Wildner * including a substantially similar Disclaimer requirement for further
1290d02842fSSascha Wildner * binary redistribution.
1300d02842fSSascha Wildner * 3. Neither the names of the above-listed copyright holders nor the names
1310d02842fSSascha Wildner * of any contributors may be used to endorse or promote products derived
1320d02842fSSascha Wildner * from this software without specific prior written permission.
1330d02842fSSascha Wildner *
134b4315fc7SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135b4315fc7SSascha Wildner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136b4315fc7SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137b4315fc7SSascha Wildner * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138b4315fc7SSascha Wildner * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139b4315fc7SSascha Wildner * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140b4315fc7SSascha Wildner * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141b4315fc7SSascha Wildner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142b4315fc7SSascha Wildner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143b4315fc7SSascha Wildner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144b4315fc7SSascha Wildner * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145b4315fc7SSascha Wildner *
146b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
1470d02842fSSascha Wildner * GNU General Public License ("GPL") version 2 as published by the Free
1480d02842fSSascha Wildner * Software Foundation.
1490d02842fSSascha Wildner *
150b4315fc7SSascha Wildner *****************************************************************************/
1510d02842fSSascha Wildner
1520d02842fSSascha Wildner #include "acpi.h"
1530d02842fSSascha Wildner #include "accommon.h"
1540d02842fSSascha Wildner #include "acdebug.h"
1550d02842fSSascha Wildner
156820c5b08SSascha Wildner #ifdef ACPI_APPLICATION
157820c5b08SSascha Wildner #include "acapps.h"
158820c5b08SSascha Wildner #endif
1590d02842fSSascha Wildner
1600d02842fSSascha Wildner #ifdef ACPI_DEBUGGER
1610d02842fSSascha Wildner
1620d02842fSSascha Wildner #define _COMPONENT ACPI_CA_DEBUGGER
1630d02842fSSascha Wildner ACPI_MODULE_NAME ("dbinput")
1640d02842fSSascha Wildner
1653cc0afc6SSascha Wildner
1660d02842fSSascha Wildner /* Local prototypes */
1670d02842fSSascha Wildner
1680d02842fSSascha Wildner static UINT32
1690d02842fSSascha Wildner AcpiDbGetLine (
1700d02842fSSascha Wildner char *InputBuffer);
1710d02842fSSascha Wildner
1720d02842fSSascha Wildner static UINT32
1730d02842fSSascha Wildner AcpiDbMatchCommand (
1740d02842fSSascha Wildner char *UserCommand);
1750d02842fSSascha Wildner
1760d02842fSSascha Wildner static void
1770d02842fSSascha Wildner AcpiDbDisplayCommandInfo (
1782ffe9f16SSascha Wildner const char *Command,
1790d02842fSSascha Wildner BOOLEAN DisplayAll);
1800d02842fSSascha Wildner
1810d02842fSSascha Wildner static void
1820d02842fSSascha Wildner AcpiDbDisplayHelp (
1830d02842fSSascha Wildner char *Command);
1840d02842fSSascha Wildner
1850d02842fSSascha Wildner static BOOLEAN
1860d02842fSSascha Wildner AcpiDbMatchCommandHelp (
1872ffe9f16SSascha Wildner const char *Command,
1880d02842fSSascha Wildner const ACPI_DB_COMMAND_HELP *Help);
1890d02842fSSascha Wildner
1900d02842fSSascha Wildner
1910d02842fSSascha Wildner /*
1920d02842fSSascha Wildner * Top-level debugger commands.
1930d02842fSSascha Wildner *
1940d02842fSSascha Wildner * This list of commands must match the string table below it
1950d02842fSSascha Wildner */
1960d02842fSSascha Wildner enum AcpiExDebuggerCommands
1970d02842fSSascha Wildner {
1980d02842fSSascha Wildner CMD_NOT_FOUND = 0,
1990d02842fSSascha Wildner CMD_NULL,
200c5a52fd3SSascha Wildner CMD_ALL,
2010d02842fSSascha Wildner CMD_ALLOCATIONS,
2020d02842fSSascha Wildner CMD_ARGS,
2030d02842fSSascha Wildner CMD_ARGUMENTS,
2040d02842fSSascha Wildner CMD_BREAKPOINT,
2050d02842fSSascha Wildner CMD_BUSINFO,
2060d02842fSSascha Wildner CMD_CALL,
2070d02842fSSascha Wildner CMD_DEBUG,
2080d02842fSSascha Wildner CMD_DISASSEMBLE,
2090d02842fSSascha Wildner CMD_DISASM,
2100d02842fSSascha Wildner CMD_DUMP,
2110d02842fSSascha Wildner CMD_EVALUATE,
2120d02842fSSascha Wildner CMD_EXECUTE,
2130d02842fSSascha Wildner CMD_EXIT,
214e5412f1eSSascha Wildner CMD_FIELDS,
2150d02842fSSascha Wildner CMD_FIND,
2160d02842fSSascha Wildner CMD_GO,
2170d02842fSSascha Wildner CMD_HANDLERS,
2180d02842fSSascha Wildner CMD_HELP,
2190d02842fSSascha Wildner CMD_HELP2,
2200d02842fSSascha Wildner CMD_HISTORY,
2210d02842fSSascha Wildner CMD_HISTORY_EXE,
2220d02842fSSascha Wildner CMD_HISTORY_LAST,
2230d02842fSSascha Wildner CMD_INFORMATION,
2240d02842fSSascha Wildner CMD_INTEGRITY,
2250d02842fSSascha Wildner CMD_INTO,
2260d02842fSSascha Wildner CMD_LEVEL,
2270d02842fSSascha Wildner CMD_LIST,
2280d02842fSSascha Wildner CMD_LOCALS,
2290d02842fSSascha Wildner CMD_LOCKS,
2300d02842fSSascha Wildner CMD_METHODS,
2310d02842fSSascha Wildner CMD_NAMESPACE,
2320d02842fSSascha Wildner CMD_NOTIFY,
2330d02842fSSascha Wildner CMD_OBJECTS,
2340d02842fSSascha Wildner CMD_OSI,
2350d02842fSSascha Wildner CMD_OWNER,
2360d02842fSSascha Wildner CMD_PATHS,
237c6400d37SSascha Wildner CMD_PREDEFINED,
2380d02842fSSascha Wildner CMD_PREFIX,
2390d02842fSSascha Wildner CMD_QUIT,
2400d02842fSSascha Wildner CMD_REFERENCES,
2410d02842fSSascha Wildner CMD_RESOURCES,
2420d02842fSSascha Wildner CMD_RESULTS,
2430d02842fSSascha Wildner CMD_SET,
2440d02842fSSascha Wildner CMD_STATS,
2450d02842fSSascha Wildner CMD_STOP,
2460d02842fSSascha Wildner CMD_TABLES,
2470d02842fSSascha Wildner CMD_TEMPLATE,
2480d02842fSSascha Wildner CMD_TRACE,
2490d02842fSSascha Wildner CMD_TREE,
2500d02842fSSascha Wildner CMD_TYPE,
2513cc0afc6SSascha Wildner #ifdef ACPI_APPLICATION
2523cc0afc6SSascha Wildner CMD_ENABLEACPI,
2533cc0afc6SSascha Wildner CMD_EVENT,
2543cc0afc6SSascha Wildner CMD_GPE,
2553cc0afc6SSascha Wildner CMD_GPES,
2563cc0afc6SSascha Wildner CMD_SCI,
2573cc0afc6SSascha Wildner CMD_SLEEP,
2583cc0afc6SSascha Wildner
2593cc0afc6SSascha Wildner CMD_CLOSE,
2603cc0afc6SSascha Wildner CMD_LOAD,
2613cc0afc6SSascha Wildner CMD_OPEN,
2623cc0afc6SSascha Wildner CMD_UNLOAD,
2633cc0afc6SSascha Wildner
2643cc0afc6SSascha Wildner CMD_TERMINATE,
2657bcb6cafSSascha Wildner CMD_BACKGROUND,
2663cc0afc6SSascha Wildner CMD_THREADS,
2673cc0afc6SSascha Wildner
2683cc0afc6SSascha Wildner CMD_TEST,
2693cc0afc6SSascha Wildner #endif
2700d02842fSSascha Wildner };
2710d02842fSSascha Wildner
2720d02842fSSascha Wildner #define CMD_FIRST_VALID 2
2730d02842fSSascha Wildner
2740d02842fSSascha Wildner
2750d02842fSSascha Wildner /* Second parameter is the required argument count */
2760d02842fSSascha Wildner
2770d02842fSSascha Wildner static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] =
2780d02842fSSascha Wildner {
2790d02842fSSascha Wildner {"<NOT FOUND>", 0},
2800d02842fSSascha Wildner {"<NULL>", 0},
281c5a52fd3SSascha Wildner {"ALL", 1},
2820d02842fSSascha Wildner {"ALLOCATIONS", 0},
2830d02842fSSascha Wildner {"ARGS", 0},
2840d02842fSSascha Wildner {"ARGUMENTS", 0},
2850d02842fSSascha Wildner {"BREAKPOINT", 1},
2860d02842fSSascha Wildner {"BUSINFO", 0},
2870d02842fSSascha Wildner {"CALL", 0},
2880d02842fSSascha Wildner {"DEBUG", 1},
2890d02842fSSascha Wildner {"DISASSEMBLE", 1},
2900d02842fSSascha Wildner {"DISASM", 1},
2910d02842fSSascha Wildner {"DUMP", 1},
2920d02842fSSascha Wildner {"EVALUATE", 1},
2930d02842fSSascha Wildner {"EXECUTE", 1},
2940d02842fSSascha Wildner {"EXIT", 0},
295e5412f1eSSascha Wildner {"FIELDS", 1},
2960d02842fSSascha Wildner {"FIND", 1},
2970d02842fSSascha Wildner {"GO", 0},
2980d02842fSSascha Wildner {"HANDLERS", 0},
2990d02842fSSascha Wildner {"HELP", 0},
3000d02842fSSascha Wildner {"?", 0},
3010d02842fSSascha Wildner {"HISTORY", 0},
3020d02842fSSascha Wildner {"!", 1},
3030d02842fSSascha Wildner {"!!", 0},
3040d02842fSSascha Wildner {"INFORMATION", 0},
3050d02842fSSascha Wildner {"INTEGRITY", 0},
3060d02842fSSascha Wildner {"INTO", 0},
3070d02842fSSascha Wildner {"LEVEL", 0},
3080d02842fSSascha Wildner {"LIST", 0},
3090d02842fSSascha Wildner {"LOCALS", 0},
3100d02842fSSascha Wildner {"LOCKS", 0},
3110d02842fSSascha Wildner {"METHODS", 0},
3120d02842fSSascha Wildner {"NAMESPACE", 0},
3130d02842fSSascha Wildner {"NOTIFY", 2},
3143cc0afc6SSascha Wildner {"OBJECTS", 0},
3150d02842fSSascha Wildner {"OSI", 0},
3160d02842fSSascha Wildner {"OWNER", 1},
3170d02842fSSascha Wildner {"PATHS", 0},
318c6400d37SSascha Wildner {"PREDEFINED", 0},
3190d02842fSSascha Wildner {"PREFIX", 0},
3200d02842fSSascha Wildner {"QUIT", 0},
3210d02842fSSascha Wildner {"REFERENCES", 1},
3220d02842fSSascha Wildner {"RESOURCES", 0},
3230d02842fSSascha Wildner {"RESULTS", 0},
3240d02842fSSascha Wildner {"SET", 3},
3250d02842fSSascha Wildner {"STATS", 1},
3260d02842fSSascha Wildner {"STOP", 0},
3270d02842fSSascha Wildner {"TABLES", 0},
3280d02842fSSascha Wildner {"TEMPLATE", 1},
3290d02842fSSascha Wildner {"TRACE", 1},
3300d02842fSSascha Wildner {"TREE", 0},
3310d02842fSSascha Wildner {"TYPE", 1},
3323cc0afc6SSascha Wildner #ifdef ACPI_APPLICATION
3333cc0afc6SSascha Wildner {"ENABLEACPI", 0},
3343cc0afc6SSascha Wildner {"EVENT", 1},
3353cc0afc6SSascha Wildner {"GPE", 1},
3363cc0afc6SSascha Wildner {"GPES", 0},
3373cc0afc6SSascha Wildner {"SCI", 0},
3383cc0afc6SSascha Wildner {"SLEEP", 0},
3393cc0afc6SSascha Wildner
3403cc0afc6SSascha Wildner {"CLOSE", 0},
3413cc0afc6SSascha Wildner {"LOAD", 1},
3423cc0afc6SSascha Wildner {"OPEN", 1},
3430d02842fSSascha Wildner {"UNLOAD", 1},
3443cc0afc6SSascha Wildner
3453cc0afc6SSascha Wildner {"TERMINATE", 0},
3467bcb6cafSSascha Wildner {"BACKGROUND", 1},
3473cc0afc6SSascha Wildner {"THREADS", 3},
3483cc0afc6SSascha Wildner
3493cc0afc6SSascha Wildner {"TEST", 1},
3503cc0afc6SSascha Wildner #endif
3510d02842fSSascha Wildner {NULL, 0}
3520d02842fSSascha Wildner };
3530d02842fSSascha Wildner
3540d02842fSSascha Wildner /*
3550d02842fSSascha Wildner * Help for all debugger commands. First argument is the number of lines
3560d02842fSSascha Wildner * of help to output for the command.
3577bcb6cafSSascha Wildner *
3587bcb6cafSSascha Wildner * Note: Some commands are not supported by the kernel-level version of
3597bcb6cafSSascha Wildner * the debugger.
3600d02842fSSascha Wildner */
3610d02842fSSascha Wildner static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] =
3620d02842fSSascha Wildner {
3637bcb6cafSSascha Wildner {0, "\nNamespace Access:", "\n"},
3647bcb6cafSSascha Wildner {1, " Businfo", "Display system bus info\n"},
3657bcb6cafSSascha Wildner {1, " Disassemble <Method>", "Disassemble a control method\n"},
3667bcb6cafSSascha Wildner {1, " Find <AcpiName> (? is wildcard)", "Find ACPI name(s) with wildcards\n"},
3677bcb6cafSSascha Wildner {1, " Integrity", "Validate namespace integrity\n"},
3687bcb6cafSSascha Wildner {1, " Methods", "Display list of loaded control methods\n"},
369e5412f1eSSascha Wildner {1, " Fields <AddressSpaceId>", "Display list of loaded field units by space ID\n"},
3707bcb6cafSSascha Wildner {1, " Namespace [Object] [Depth]", "Display loaded namespace tree/subtree\n"},
3717bcb6cafSSascha Wildner {1, " Notify <Object> <Value>", "Send a notification on Object\n"},
3727bcb6cafSSascha Wildner {1, " Objects [ObjectType]", "Display summary of all objects or just given type\n"},
3737bcb6cafSSascha Wildner {1, " Owner <OwnerId> [Depth]", "Display loaded namespace by object owner\n"},
3747bcb6cafSSascha Wildner {1, " Paths", "Display full pathnames of namespace objects\n"},
3757bcb6cafSSascha Wildner {1, " Predefined", "Check all predefined names\n"},
3767bcb6cafSSascha Wildner {1, " Prefix [<Namepath>]", "Set or Get current execution prefix\n"},
3777bcb6cafSSascha Wildner {1, " References <Addr>", "Find all references to object at addr\n"},
3787bcb6cafSSascha Wildner {1, " Resources [DeviceName]", "Display Device resources (no arg = all devices)\n"},
3797bcb6cafSSascha Wildner {1, " Set N <NamedObject> <Value>", "Set value for named integer\n"},
3807bcb6cafSSascha Wildner {1, " Template <Object>", "Format/dump a Buffer/ResourceTemplate\n"},
3817bcb6cafSSascha Wildner {1, " Type <Object>", "Display object type\n"},
3827bcb6cafSSascha Wildner
3837bcb6cafSSascha Wildner {0, "\nControl Method Execution:", "\n"},
384c5a52fd3SSascha Wildner {1, " All <NameSeg>", "Evaluate all objects named NameSeg\n"},
3857bcb6cafSSascha Wildner {1, " Evaluate <Namepath> [Arguments]", "Evaluate object or control method\n"},
3867bcb6cafSSascha Wildner {1, " Execute <Namepath> [Arguments]", "Synonym for Evaluate\n"},
3877bcb6cafSSascha Wildner #ifdef ACPI_APPLICATION
3887bcb6cafSSascha Wildner {1, " Background <Namepath> [Arguments]", "Evaluate object/method in a separate thread\n"},
3897bcb6cafSSascha Wildner {1, " Thread <Threads><Loops><NamePath>", "Spawn threads to execute method(s)\n"},
3907bcb6cafSSascha Wildner #endif
3917bcb6cafSSascha Wildner {1, " Debug <Namepath> [Arguments]", "Single-Step a control method\n"},
3927bcb6cafSSascha Wildner {7, " [Arguments] formats:", "Control method argument formats\n"},
3937bcb6cafSSascha Wildner {1, " Hex Integer", "Integer\n"},
3947bcb6cafSSascha Wildner {1, " \"Ascii String\"", "String\n"},
3957bcb6cafSSascha Wildner {1, " (Hex Byte List)", "Buffer\n"},
3967bcb6cafSSascha Wildner {1, " (01 42 7A BF)", "Buffer example (4 bytes)\n"},
3977bcb6cafSSascha Wildner {1, " [Package Element List]", "Package\n"},
3987bcb6cafSSascha Wildner {1, " [0x01 0x1234 \"string\"]", "Package example (3 elements)\n"},
3997bcb6cafSSascha Wildner
4007bcb6cafSSascha Wildner {0, "\nMiscellaneous:", "\n"},
4010d02842fSSascha Wildner {1, " Allocations", "Display list of current memory allocations\n"},
4020d02842fSSascha Wildner {2, " Dump <Address>|<Namepath>", "\n"},
4030d02842fSSascha Wildner {0, " [Byte|Word|Dword|Qword]", "Display ACPI objects or memory\n"},
4040d02842fSSascha Wildner {1, " Handlers", "Info about global handlers\n"},
4050d02842fSSascha Wildner {1, " Help [Command]", "This help screen or individual command\n"},
4060d02842fSSascha Wildner {1, " History", "Display command history buffer\n"},
4070d02842fSSascha Wildner {1, " Level <DebugLevel>] [console]", "Get/Set debug level for file or console\n"},
4080d02842fSSascha Wildner {1, " Locks", "Current status of internal mutexes\n"},
4090d02842fSSascha Wildner {1, " Osi [Install|Remove <name>]", "Display or modify global _OSI list\n"},
4100d02842fSSascha Wildner {1, " Quit or Exit", "Exit this command\n"},
41120294b7eSSascha Wildner {8, " Stats <SubCommand>", "Display namespace and memory statistics\n"},
4120d02842fSSascha Wildner {1, " Allocations", "Display list of current memory allocations\n"},
4130d02842fSSascha Wildner {1, " Memory", "Dump internal memory lists\n"},
4140d02842fSSascha Wildner {1, " Misc", "Namespace search and mutex stats\n"},
4150d02842fSSascha Wildner {1, " Objects", "Summary of namespace objects\n"},
4160d02842fSSascha Wildner {1, " Sizes", "Sizes for each of the internal objects\n"},
4170d02842fSSascha Wildner {1, " Stack", "Display CPU stack usage\n"},
4180d02842fSSascha Wildner {1, " Tables", "Info about current ACPI table(s)\n"},
4190d02842fSSascha Wildner {1, " Tables", "Display info about loaded ACPI tables\n"},
4207bcb6cafSSascha Wildner #ifdef ACPI_APPLICATION
4217bcb6cafSSascha Wildner {1, " Terminate", "Delete namespace and all internal objects\n"},
4227bcb6cafSSascha Wildner #endif
4230d02842fSSascha Wildner {1, " ! <CommandNumber>", "Execute command from history buffer\n"},
4240d02842fSSascha Wildner {1, " !!", "Execute last command again\n"},
4250d02842fSSascha Wildner
4267bcb6cafSSascha Wildner {0, "\nMethod and Namespace Debugging:", "\n"},
4277bcb6cafSSascha Wildner {5, " Trace <State> [<Namepath>] [Once]", "Trace control method execution\n"},
4287bcb6cafSSascha Wildner {1, " Enable", "Enable all messages\n"},
4297bcb6cafSSascha Wildner {1, " Disable", "Disable tracing\n"},
4307bcb6cafSSascha Wildner {1, " Method", "Enable method execution messages\n"},
4317bcb6cafSSascha Wildner {1, " Opcode", "Enable opcode execution messages\n"},
4327bcb6cafSSascha Wildner {3, " Test <TestName>", "Invoke a debug test\n"},
4337bcb6cafSSascha Wildner {1, " Objects", "Read/write/compare all namespace data objects\n"},
4347bcb6cafSSascha Wildner {1, " Predefined", "Validate all ACPI predefined names (_STA, etc.)\n"},
4357bcb6cafSSascha Wildner {1, " Execute predefined", "Execute all predefined (public) methods\n"},
4360d02842fSSascha Wildner
4377bcb6cafSSascha Wildner {0, "\nControl Method Single-Step Execution:","\n"},
4380d02842fSSascha Wildner {1, " Arguments (or Args)", "Display method arguments\n"},
4390d02842fSSascha Wildner {1, " Breakpoint <AmlOffset>", "Set an AML execution breakpoint\n"},
4400d02842fSSascha Wildner {1, " Call", "Run to next control method invocation\n"},
4410d02842fSSascha Wildner {1, " Go", "Allow method to run to completion\n"},
4420d02842fSSascha Wildner {1, " Information", "Display info about the current method\n"},
4430d02842fSSascha Wildner {1, " Into", "Step into (not over) a method call\n"},
4440d02842fSSascha Wildner {1, " List [# of Aml Opcodes]", "Display method ASL statements\n"},
4450d02842fSSascha Wildner {1, " Locals", "Display method local variables\n"},
4460d02842fSSascha Wildner {1, " Results", "Display method result stack\n"},
4470d02842fSSascha Wildner {1, " Set <A|L> <#> <Value>", "Set method data (Arguments/Locals)\n"},
4480d02842fSSascha Wildner {1, " Stop", "Terminate control method\n"},
4490d02842fSSascha Wildner {1, " Tree", "Display control method calling tree\n"},
4500d02842fSSascha Wildner {1, " <Enter>", "Single step next AML opcode (over calls)\n"},
4510d02842fSSascha Wildner
4523cc0afc6SSascha Wildner #ifdef ACPI_APPLICATION
4537bcb6cafSSascha Wildner {0, "\nFile Operations:", "\n"},
4547bcb6cafSSascha Wildner {1, " Close", "Close debug output file\n"},
4557bcb6cafSSascha Wildner {1, " Load <Input Filename>", "Load ACPI table from a file\n"},
4567bcb6cafSSascha Wildner {1, " Open <Output Filename>", "Open a file for debug output\n"},
4577bcb6cafSSascha Wildner {1, " Unload <Namepath>", "Unload an ACPI table via namespace object\n"},
4587bcb6cafSSascha Wildner
4597bcb6cafSSascha Wildner {0, "\nHardware Simulation:", "\n"},
4603cc0afc6SSascha Wildner {1, " EnableAcpi", "Enable ACPI (hardware) mode\n"},
4610d02842fSSascha Wildner {1, " Event <F|G> <Value>", "Generate AcpiEvent (Fixed/GPE)\n"},
4629e1c0880SSascha Wildner {1, " Gpe <GpeNum> [GpeBlockDevice]", "Simulate a GPE\n"},
4633cc0afc6SSascha Wildner {1, " Gpes", "Display info on all GPE devices\n"},
4640d02842fSSascha Wildner {1, " Sci", "Generate an SCI\n"},
4650d02842fSSascha Wildner {1, " Sleep [SleepState]", "Simulate sleep/wake sequence(s) (0-5)\n"},
4663cc0afc6SSascha Wildner #endif
4670d02842fSSascha Wildner {0, NULL, NULL}
4680d02842fSSascha Wildner };
4690d02842fSSascha Wildner
4700d02842fSSascha Wildner
4710d02842fSSascha Wildner /*******************************************************************************
4720d02842fSSascha Wildner *
4730d02842fSSascha Wildner * FUNCTION: AcpiDbMatchCommandHelp
4740d02842fSSascha Wildner *
4750d02842fSSascha Wildner * PARAMETERS: Command - Command string to match
4760d02842fSSascha Wildner * Help - Help table entry to attempt match
4770d02842fSSascha Wildner *
4780d02842fSSascha Wildner * RETURN: TRUE if command matched, FALSE otherwise
4790d02842fSSascha Wildner *
4800d02842fSSascha Wildner * DESCRIPTION: Attempt to match a command in the help table in order to
4810d02842fSSascha Wildner * print help information for a single command.
4820d02842fSSascha Wildner *
4830d02842fSSascha Wildner ******************************************************************************/
4840d02842fSSascha Wildner
4850d02842fSSascha Wildner static BOOLEAN
AcpiDbMatchCommandHelp(const char * Command,const ACPI_DB_COMMAND_HELP * Help)4860d02842fSSascha Wildner AcpiDbMatchCommandHelp (
4872ffe9f16SSascha Wildner const char *Command,
4880d02842fSSascha Wildner const ACPI_DB_COMMAND_HELP *Help)
4890d02842fSSascha Wildner {
4900d02842fSSascha Wildner char *Invocation = Help->Invocation;
4910d02842fSSascha Wildner UINT32 LineCount;
4920d02842fSSascha Wildner
4930d02842fSSascha Wildner
4940d02842fSSascha Wildner /* Valid commands in the help table begin with a couple of spaces */
4950d02842fSSascha Wildner
4960d02842fSSascha Wildner if (*Invocation != ' ')
4970d02842fSSascha Wildner {
4980d02842fSSascha Wildner return (FALSE);
4990d02842fSSascha Wildner }
5000d02842fSSascha Wildner
5010d02842fSSascha Wildner while (*Invocation == ' ')
5020d02842fSSascha Wildner {
5030d02842fSSascha Wildner Invocation++;
5040d02842fSSascha Wildner }
5050d02842fSSascha Wildner
5060d02842fSSascha Wildner /* Match command name (full command or substring) */
5070d02842fSSascha Wildner
5080d02842fSSascha Wildner while ((*Command) && (*Invocation) && (*Invocation != ' '))
5090d02842fSSascha Wildner {
51025ca8c79SSascha Wildner if (tolower ((int) *Command) != tolower ((int) *Invocation))
5110d02842fSSascha Wildner {
5120d02842fSSascha Wildner return (FALSE);
5130d02842fSSascha Wildner }
5140d02842fSSascha Wildner
5150d02842fSSascha Wildner Invocation++;
5160d02842fSSascha Wildner Command++;
5170d02842fSSascha Wildner }
5180d02842fSSascha Wildner
5190d02842fSSascha Wildner /* Print the appropriate number of help lines */
5200d02842fSSascha Wildner
5210d02842fSSascha Wildner LineCount = Help->LineCount;
5220d02842fSSascha Wildner while (LineCount)
5230d02842fSSascha Wildner {
5240d02842fSSascha Wildner AcpiOsPrintf ("%-38s : %s", Help->Invocation, Help->Description);
5250d02842fSSascha Wildner Help++;
5260d02842fSSascha Wildner LineCount--;
5270d02842fSSascha Wildner }
5280d02842fSSascha Wildner
5290d02842fSSascha Wildner return (TRUE);
5300d02842fSSascha Wildner }
5310d02842fSSascha Wildner
5320d02842fSSascha Wildner
5330d02842fSSascha Wildner /*******************************************************************************
5340d02842fSSascha Wildner *
5350d02842fSSascha Wildner * FUNCTION: AcpiDbDisplayCommandInfo
5360d02842fSSascha Wildner *
5370d02842fSSascha Wildner * PARAMETERS: Command - Command string to match
5380d02842fSSascha Wildner * DisplayAll - Display all matching commands, or just
5390d02842fSSascha Wildner * the first one (substring match)
5400d02842fSSascha Wildner *
5410d02842fSSascha Wildner * RETURN: None
5420d02842fSSascha Wildner *
5430d02842fSSascha Wildner * DESCRIPTION: Display help information for a Debugger command.
5440d02842fSSascha Wildner *
5450d02842fSSascha Wildner ******************************************************************************/
5460d02842fSSascha Wildner
5470d02842fSSascha Wildner static void
AcpiDbDisplayCommandInfo(const char * Command,BOOLEAN DisplayAll)5480d02842fSSascha Wildner AcpiDbDisplayCommandInfo (
5492ffe9f16SSascha Wildner const char *Command,
5500d02842fSSascha Wildner BOOLEAN DisplayAll)
5510d02842fSSascha Wildner {
5520d02842fSSascha Wildner const ACPI_DB_COMMAND_HELP *Next;
5530d02842fSSascha Wildner BOOLEAN Matched;
5540d02842fSSascha Wildner
5550d02842fSSascha Wildner
5560d02842fSSascha Wildner Next = AcpiGbl_DbCommandHelp;
5570d02842fSSascha Wildner while (Next->Invocation)
5580d02842fSSascha Wildner {
5590d02842fSSascha Wildner Matched = AcpiDbMatchCommandHelp (Command, Next);
5600d02842fSSascha Wildner if (!DisplayAll && Matched)
5610d02842fSSascha Wildner {
5620d02842fSSascha Wildner return;
5630d02842fSSascha Wildner }
5640d02842fSSascha Wildner
5650d02842fSSascha Wildner Next++;
5660d02842fSSascha Wildner }
5670d02842fSSascha Wildner }
5680d02842fSSascha Wildner
5690d02842fSSascha Wildner
5700d02842fSSascha Wildner /*******************************************************************************
5710d02842fSSascha Wildner *
5720d02842fSSascha Wildner * FUNCTION: AcpiDbDisplayHelp
5730d02842fSSascha Wildner *
5740d02842fSSascha Wildner * PARAMETERS: Command - Optional command string to display help.
5750d02842fSSascha Wildner * if not specified, all debugger command
5760d02842fSSascha Wildner * help strings are displayed
5770d02842fSSascha Wildner *
5780d02842fSSascha Wildner * RETURN: None
5790d02842fSSascha Wildner *
5800d02842fSSascha Wildner * DESCRIPTION: Display help for a single debugger command, or all of them.
5810d02842fSSascha Wildner *
5820d02842fSSascha Wildner ******************************************************************************/
5830d02842fSSascha Wildner
5840d02842fSSascha Wildner static void
AcpiDbDisplayHelp(char * Command)5850d02842fSSascha Wildner AcpiDbDisplayHelp (
5860d02842fSSascha Wildner char *Command)
5870d02842fSSascha Wildner {
5880d02842fSSascha Wildner const ACPI_DB_COMMAND_HELP *Next = AcpiGbl_DbCommandHelp;
5890d02842fSSascha Wildner
5900d02842fSSascha Wildner
5910d02842fSSascha Wildner if (!Command)
5920d02842fSSascha Wildner {
5930d02842fSSascha Wildner /* No argument to help, display help for all commands */
5940d02842fSSascha Wildner
5957bcb6cafSSascha Wildner AcpiOsPrintf ("\nSummary of AML Debugger Commands\n\n");
5967bcb6cafSSascha Wildner
5970d02842fSSascha Wildner while (Next->Invocation)
5980d02842fSSascha Wildner {
5990d02842fSSascha Wildner AcpiOsPrintf ("%-38s%s", Next->Invocation, Next->Description);
6000d02842fSSascha Wildner Next++;
6010d02842fSSascha Wildner }
6027bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
6037bcb6cafSSascha Wildner
6040d02842fSSascha Wildner }
6050d02842fSSascha Wildner else
6060d02842fSSascha Wildner {
607c5a52fd3SSascha Wildner /* Display help for all commands that match the substring */
6080d02842fSSascha Wildner
6090d02842fSSascha Wildner AcpiDbDisplayCommandInfo (Command, TRUE);
6100d02842fSSascha Wildner }
6110d02842fSSascha Wildner }
6120d02842fSSascha Wildner
6130d02842fSSascha Wildner
6140d02842fSSascha Wildner /*******************************************************************************
6150d02842fSSascha Wildner *
6160d02842fSSascha Wildner * FUNCTION: AcpiDbGetNextToken
6170d02842fSSascha Wildner *
6180d02842fSSascha Wildner * PARAMETERS: String - Command buffer
6190d02842fSSascha Wildner * Next - Return value, end of next token
6200d02842fSSascha Wildner *
6210d02842fSSascha Wildner * RETURN: Pointer to the start of the next token.
6220d02842fSSascha Wildner *
6230d02842fSSascha Wildner * DESCRIPTION: Command line parsing. Get the next token on the command line
6240d02842fSSascha Wildner *
6250d02842fSSascha Wildner ******************************************************************************/
6260d02842fSSascha Wildner
6270d02842fSSascha Wildner char *
AcpiDbGetNextToken(char * String,char ** Next,ACPI_OBJECT_TYPE * ReturnType)6280d02842fSSascha Wildner AcpiDbGetNextToken (
6290d02842fSSascha Wildner char *String,
6300d02842fSSascha Wildner char **Next,
6310d02842fSSascha Wildner ACPI_OBJECT_TYPE *ReturnType)
6320d02842fSSascha Wildner {
6330d02842fSSascha Wildner char *Start;
6340d02842fSSascha Wildner UINT32 Depth;
6350d02842fSSascha Wildner ACPI_OBJECT_TYPE Type = ACPI_TYPE_INTEGER;
6360d02842fSSascha Wildner
6370d02842fSSascha Wildner
6380d02842fSSascha Wildner /* At end of buffer? */
6390d02842fSSascha Wildner
6400d02842fSSascha Wildner if (!String || !(*String))
6410d02842fSSascha Wildner {
6420d02842fSSascha Wildner return (NULL);
6430d02842fSSascha Wildner }
6440d02842fSSascha Wildner
64571c97a3cSSascha Wildner /* Remove any spaces at the beginning, ignore blank lines */
6460d02842fSSascha Wildner
64708343eafSSascha Wildner while (*String && isspace ((int) *String))
6480d02842fSSascha Wildner {
6490d02842fSSascha Wildner String++;
6500d02842fSSascha Wildner }
6510d02842fSSascha Wildner
6520d02842fSSascha Wildner if (!(*String))
6530d02842fSSascha Wildner {
6540d02842fSSascha Wildner return (NULL);
6550d02842fSSascha Wildner }
6560d02842fSSascha Wildner
6570d02842fSSascha Wildner switch (*String)
6580d02842fSSascha Wildner {
6590d02842fSSascha Wildner case '"':
6600d02842fSSascha Wildner
6610d02842fSSascha Wildner /* This is a quoted string, scan until closing quote */
6620d02842fSSascha Wildner
6630d02842fSSascha Wildner String++;
6640d02842fSSascha Wildner Start = String;
6650d02842fSSascha Wildner Type = ACPI_TYPE_STRING;
6660d02842fSSascha Wildner
6670d02842fSSascha Wildner /* Find end of string */
6680d02842fSSascha Wildner
6690d02842fSSascha Wildner while (*String && (*String != '"'))
6700d02842fSSascha Wildner {
6710d02842fSSascha Wildner String++;
6720d02842fSSascha Wildner }
6730d02842fSSascha Wildner break;
6740d02842fSSascha Wildner
6750d02842fSSascha Wildner case '(':
6760d02842fSSascha Wildner
6770d02842fSSascha Wildner /* This is the start of a buffer, scan until closing paren */
6780d02842fSSascha Wildner
6790d02842fSSascha Wildner String++;
6800d02842fSSascha Wildner Start = String;
6810d02842fSSascha Wildner Type = ACPI_TYPE_BUFFER;
6820d02842fSSascha Wildner
6830d02842fSSascha Wildner /* Find end of buffer */
6840d02842fSSascha Wildner
6850d02842fSSascha Wildner while (*String && (*String != ')'))
6860d02842fSSascha Wildner {
6870d02842fSSascha Wildner String++;
6880d02842fSSascha Wildner }
6890d02842fSSascha Wildner break;
6900d02842fSSascha Wildner
691e5412f1eSSascha Wildner case '{':
692e5412f1eSSascha Wildner
693e5412f1eSSascha Wildner /* This is the start of a field unit, scan until closing brace */
694e5412f1eSSascha Wildner
695e5412f1eSSascha Wildner String++;
696e5412f1eSSascha Wildner Start = String;
697e5412f1eSSascha Wildner Type = ACPI_TYPE_FIELD_UNIT;
698e5412f1eSSascha Wildner
699e5412f1eSSascha Wildner /* Find end of buffer */
700e5412f1eSSascha Wildner
701e5412f1eSSascha Wildner while (*String && (*String != '}'))
702e5412f1eSSascha Wildner {
703e5412f1eSSascha Wildner String++;
704e5412f1eSSascha Wildner }
705e5412f1eSSascha Wildner break;
706e5412f1eSSascha Wildner
7070d02842fSSascha Wildner case '[':
7080d02842fSSascha Wildner
7090d02842fSSascha Wildner /* This is the start of a package, scan until closing bracket */
7100d02842fSSascha Wildner
7110d02842fSSascha Wildner String++;
7120d02842fSSascha Wildner Depth = 1;
7130d02842fSSascha Wildner Start = String;
7140d02842fSSascha Wildner Type = ACPI_TYPE_PACKAGE;
7150d02842fSSascha Wildner
7160d02842fSSascha Wildner /* Find end of package (closing bracket) */
7170d02842fSSascha Wildner
7180d02842fSSascha Wildner while (*String)
7190d02842fSSascha Wildner {
7200d02842fSSascha Wildner /* Handle String package elements */
7210d02842fSSascha Wildner
7220d02842fSSascha Wildner if (*String == '"')
7230d02842fSSascha Wildner {
7240d02842fSSascha Wildner /* Find end of string */
7250d02842fSSascha Wildner
7260d02842fSSascha Wildner String++;
7270d02842fSSascha Wildner while (*String && (*String != '"'))
7280d02842fSSascha Wildner {
7290d02842fSSascha Wildner String++;
7300d02842fSSascha Wildner }
7310d02842fSSascha Wildner if (!(*String))
7320d02842fSSascha Wildner {
7330d02842fSSascha Wildner break;
7340d02842fSSascha Wildner }
7350d02842fSSascha Wildner }
7360d02842fSSascha Wildner else if (*String == '[')
7370d02842fSSascha Wildner {
7380d02842fSSascha Wildner Depth++; /* A nested package declaration */
7390d02842fSSascha Wildner }
7400d02842fSSascha Wildner else if (*String == ']')
7410d02842fSSascha Wildner {
7420d02842fSSascha Wildner Depth--;
7430d02842fSSascha Wildner if (Depth == 0) /* Found final package closing bracket */
7440d02842fSSascha Wildner {
7450d02842fSSascha Wildner break;
7460d02842fSSascha Wildner }
7470d02842fSSascha Wildner }
7480d02842fSSascha Wildner
7490d02842fSSascha Wildner String++;
7500d02842fSSascha Wildner }
7510d02842fSSascha Wildner break;
7520d02842fSSascha Wildner
7530d02842fSSascha Wildner default:
7540d02842fSSascha Wildner
7550d02842fSSascha Wildner Start = String;
7560d02842fSSascha Wildner
7570d02842fSSascha Wildner /* Find end of token */
7580d02842fSSascha Wildner
75908343eafSSascha Wildner while (*String && !isspace ((int) *String))
7600d02842fSSascha Wildner {
7610d02842fSSascha Wildner String++;
7620d02842fSSascha Wildner }
7630d02842fSSascha Wildner break;
7640d02842fSSascha Wildner }
7650d02842fSSascha Wildner
7660d02842fSSascha Wildner if (!(*String))
7670d02842fSSascha Wildner {
7680d02842fSSascha Wildner *Next = NULL;
7690d02842fSSascha Wildner }
7700d02842fSSascha Wildner else
7710d02842fSSascha Wildner {
7720d02842fSSascha Wildner *String = 0;
7730d02842fSSascha Wildner *Next = String + 1;
7740d02842fSSascha Wildner }
7750d02842fSSascha Wildner
7760d02842fSSascha Wildner *ReturnType = Type;
7770d02842fSSascha Wildner return (Start);
7780d02842fSSascha Wildner }
7790d02842fSSascha Wildner
7800d02842fSSascha Wildner
7810d02842fSSascha Wildner /*******************************************************************************
7820d02842fSSascha Wildner *
7830d02842fSSascha Wildner * FUNCTION: AcpiDbGetLine
7840d02842fSSascha Wildner *
7850d02842fSSascha Wildner * PARAMETERS: InputBuffer - Command line buffer
7860d02842fSSascha Wildner *
7870d02842fSSascha Wildner * RETURN: Count of arguments to the command
7880d02842fSSascha Wildner *
7890d02842fSSascha Wildner * DESCRIPTION: Get the next command line from the user. Gets entire line
7900d02842fSSascha Wildner * up to the next newline
7910d02842fSSascha Wildner *
7920d02842fSSascha Wildner ******************************************************************************/
7930d02842fSSascha Wildner
7940d02842fSSascha Wildner static UINT32
AcpiDbGetLine(char * InputBuffer)7950d02842fSSascha Wildner AcpiDbGetLine (
7960d02842fSSascha Wildner char *InputBuffer)
7970d02842fSSascha Wildner {
7980d02842fSSascha Wildner UINT32 i;
7990d02842fSSascha Wildner UINT32 Count;
8000d02842fSSascha Wildner char *Next;
8010d02842fSSascha Wildner char *This;
8020d02842fSSascha Wildner
8030d02842fSSascha Wildner
8040d02842fSSascha Wildner if (AcpiUtSafeStrcpy (AcpiGbl_DbParsedBuf, sizeof (AcpiGbl_DbParsedBuf),
8050d02842fSSascha Wildner InputBuffer))
8060d02842fSSascha Wildner {
8073cc0afc6SSascha Wildner AcpiOsPrintf (
8083cc0afc6SSascha Wildner "Buffer overflow while parsing input line (max %u characters)\n",
809e5412f1eSSascha Wildner (UINT32) sizeof (AcpiGbl_DbParsedBuf));
8100d02842fSSascha Wildner return (0);
8110d02842fSSascha Wildner }
8120d02842fSSascha Wildner
8130d02842fSSascha Wildner This = AcpiGbl_DbParsedBuf;
8140d02842fSSascha Wildner for (i = 0; i < ACPI_DEBUGGER_MAX_ARGS; i++)
8150d02842fSSascha Wildner {
8160d02842fSSascha Wildner AcpiGbl_DbArgs[i] = AcpiDbGetNextToken (This, &Next,
8170d02842fSSascha Wildner &AcpiGbl_DbArgTypes[i]);
8180d02842fSSascha Wildner if (!AcpiGbl_DbArgs[i])
8190d02842fSSascha Wildner {
8200d02842fSSascha Wildner break;
8210d02842fSSascha Wildner }
8220d02842fSSascha Wildner
8230d02842fSSascha Wildner This = Next;
8240d02842fSSascha Wildner }
8250d02842fSSascha Wildner
8260d02842fSSascha Wildner /* Uppercase the actual command */
8270d02842fSSascha Wildner
8280d02842fSSascha Wildner AcpiUtStrupr (AcpiGbl_DbArgs[0]);
8290d02842fSSascha Wildner
8300d02842fSSascha Wildner Count = i;
8310d02842fSSascha Wildner if (Count)
8320d02842fSSascha Wildner {
8330d02842fSSascha Wildner Count--; /* Number of args only */
8340d02842fSSascha Wildner }
8350d02842fSSascha Wildner
8360d02842fSSascha Wildner return (Count);
8370d02842fSSascha Wildner }
8380d02842fSSascha Wildner
8390d02842fSSascha Wildner
8400d02842fSSascha Wildner /*******************************************************************************
8410d02842fSSascha Wildner *
8420d02842fSSascha Wildner * FUNCTION: AcpiDbMatchCommand
8430d02842fSSascha Wildner *
8440d02842fSSascha Wildner * PARAMETERS: UserCommand - User command line
8450d02842fSSascha Wildner *
8460d02842fSSascha Wildner * RETURN: Index into command array, -1 if not found
8470d02842fSSascha Wildner *
8480d02842fSSascha Wildner * DESCRIPTION: Search command array for a command match
8490d02842fSSascha Wildner *
8500d02842fSSascha Wildner ******************************************************************************/
8510d02842fSSascha Wildner
8520d02842fSSascha Wildner static UINT32
AcpiDbMatchCommand(char * UserCommand)8530d02842fSSascha Wildner AcpiDbMatchCommand (
8540d02842fSSascha Wildner char *UserCommand)
8550d02842fSSascha Wildner {
8560d02842fSSascha Wildner UINT32 i;
8570d02842fSSascha Wildner
8580d02842fSSascha Wildner
8590d02842fSSascha Wildner if (!UserCommand || UserCommand[0] == 0)
8600d02842fSSascha Wildner {
8610d02842fSSascha Wildner return (CMD_NULL);
8620d02842fSSascha Wildner }
8630d02842fSSascha Wildner
8640d02842fSSascha Wildner for (i = CMD_FIRST_VALID; AcpiGbl_DbCommands[i].Name; i++)
8650d02842fSSascha Wildner {
8662ffe9f16SSascha Wildner if (strstr (
8672ffe9f16SSascha Wildner ACPI_CAST_PTR (char, AcpiGbl_DbCommands[i].Name), UserCommand) ==
8680d02842fSSascha Wildner AcpiGbl_DbCommands[i].Name)
8690d02842fSSascha Wildner {
8700d02842fSSascha Wildner return (i);
8710d02842fSSascha Wildner }
8720d02842fSSascha Wildner }
8730d02842fSSascha Wildner
8740d02842fSSascha Wildner /* Command not recognized */
8750d02842fSSascha Wildner
8760d02842fSSascha Wildner return (CMD_NOT_FOUND);
8770d02842fSSascha Wildner }
8780d02842fSSascha Wildner
8790d02842fSSascha Wildner
8800d02842fSSascha Wildner /*******************************************************************************
8810d02842fSSascha Wildner *
8820d02842fSSascha Wildner * FUNCTION: AcpiDbCommandDispatch
8830d02842fSSascha Wildner *
8840d02842fSSascha Wildner * PARAMETERS: InputBuffer - Command line buffer
8850d02842fSSascha Wildner * WalkState - Current walk
8860d02842fSSascha Wildner * Op - Current (executing) parse op
8870d02842fSSascha Wildner *
8880d02842fSSascha Wildner * RETURN: Status
8890d02842fSSascha Wildner *
8900d02842fSSascha Wildner * DESCRIPTION: Command dispatcher.
8910d02842fSSascha Wildner *
8920d02842fSSascha Wildner ******************************************************************************/
8930d02842fSSascha Wildner
8940d02842fSSascha Wildner ACPI_STATUS
AcpiDbCommandDispatch(char * InputBuffer,ACPI_WALK_STATE * WalkState,ACPI_PARSE_OBJECT * Op)8950d02842fSSascha Wildner AcpiDbCommandDispatch (
8960d02842fSSascha Wildner char *InputBuffer,
8970d02842fSSascha Wildner ACPI_WALK_STATE *WalkState,
8980d02842fSSascha Wildner ACPI_PARSE_OBJECT *Op)
8990d02842fSSascha Wildner {
9000d02842fSSascha Wildner UINT32 Temp;
901e5412f1eSSascha Wildner UINT64 Temp64;
9020d02842fSSascha Wildner UINT32 CommandIndex;
9030d02842fSSascha Wildner UINT32 ParamCount;
9040d02842fSSascha Wildner char *CommandLine;
9050d02842fSSascha Wildner ACPI_STATUS Status = AE_CTRL_TRUE;
9060d02842fSSascha Wildner
9070d02842fSSascha Wildner
9080d02842fSSascha Wildner /* If AcpiTerminate has been called, terminate this thread */
9090d02842fSSascha Wildner
910820c5b08SSascha Wildner if (AcpiGbl_DbTerminateLoop)
9110d02842fSSascha Wildner {
9120d02842fSSascha Wildner return (AE_CTRL_TERMINATE);
9130d02842fSSascha Wildner }
9140d02842fSSascha Wildner
915d63676ccSSascha Wildner /* Find command and add to the history buffer */
9160d02842fSSascha Wildner
9170d02842fSSascha Wildner ParamCount = AcpiDbGetLine (InputBuffer);
9180d02842fSSascha Wildner CommandIndex = AcpiDbMatchCommand (AcpiGbl_DbArgs[0]);
9190d02842fSSascha Wildner
920d63676ccSSascha Wildner /*
921d63676ccSSascha Wildner * We don't want to add the !! command to the history buffer. It
922d63676ccSSascha Wildner * would cause an infinite loop because it would always be the
923d63676ccSSascha Wildner * previous command.
924d63676ccSSascha Wildner */
925d63676ccSSascha Wildner if (CommandIndex != CMD_HISTORY_LAST)
926d63676ccSSascha Wildner {
927d63676ccSSascha Wildner AcpiDbAddToHistory (InputBuffer);
928d63676ccSSascha Wildner }
929d63676ccSSascha Wildner
9300d02842fSSascha Wildner /* Verify that we have the minimum number of params */
9310d02842fSSascha Wildner
9320d02842fSSascha Wildner if (ParamCount < AcpiGbl_DbCommands[CommandIndex].MinArgs)
9330d02842fSSascha Wildner {
9340d02842fSSascha Wildner AcpiOsPrintf ("%u parameters entered, [%s] requires %u parameters\n",
9350d02842fSSascha Wildner ParamCount, AcpiGbl_DbCommands[CommandIndex].Name,
9360d02842fSSascha Wildner AcpiGbl_DbCommands[CommandIndex].MinArgs);
9370d02842fSSascha Wildner
9383cc0afc6SSascha Wildner AcpiDbDisplayCommandInfo (
9393cc0afc6SSascha Wildner AcpiGbl_DbCommands[CommandIndex].Name, FALSE);
9400d02842fSSascha Wildner return (AE_CTRL_TRUE);
9410d02842fSSascha Wildner }
9420d02842fSSascha Wildner
9430d02842fSSascha Wildner /* Decode and dispatch the command */
9440d02842fSSascha Wildner
9450d02842fSSascha Wildner switch (CommandIndex)
9460d02842fSSascha Wildner {
9470d02842fSSascha Wildner case CMD_NULL:
9480d02842fSSascha Wildner
9490d02842fSSascha Wildner if (Op)
9500d02842fSSascha Wildner {
9510d02842fSSascha Wildner return (AE_OK);
9520d02842fSSascha Wildner }
9530d02842fSSascha Wildner break;
9540d02842fSSascha Wildner
955c5a52fd3SSascha Wildner case CMD_ALL:
956c5a52fd3SSascha Wildner
957c5a52fd3SSascha Wildner AcpiOsPrintf ("Executing all objects with NameSeg: %s\n", AcpiGbl_DbArgs[1]);
958c5a52fd3SSascha Wildner AcpiDbExecute (AcpiGbl_DbArgs[1],
959c5a52fd3SSascha Wildner &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP | EX_ALL);
960c5a52fd3SSascha Wildner break;
961c5a52fd3SSascha Wildner
9620d02842fSSascha Wildner case CMD_ALLOCATIONS:
9630d02842fSSascha Wildner
9640d02842fSSascha Wildner #ifdef ACPI_DBG_TRACK_ALLOCATIONS
9650d02842fSSascha Wildner AcpiUtDumpAllocations ((UINT32) -1, NULL);
9660d02842fSSascha Wildner #endif
9670d02842fSSascha Wildner break;
9680d02842fSSascha Wildner
9690d02842fSSascha Wildner case CMD_ARGS:
9700d02842fSSascha Wildner case CMD_ARGUMENTS:
9710d02842fSSascha Wildner
9720d02842fSSascha Wildner AcpiDbDisplayArguments ();
9730d02842fSSascha Wildner break;
9740d02842fSSascha Wildner
9750d02842fSSascha Wildner case CMD_BREAKPOINT:
9760d02842fSSascha Wildner
9770d02842fSSascha Wildner AcpiDbSetMethodBreakpoint (AcpiGbl_DbArgs[1], WalkState, Op);
9780d02842fSSascha Wildner break;
9790d02842fSSascha Wildner
9800d02842fSSascha Wildner case CMD_BUSINFO:
9810d02842fSSascha Wildner
9820d02842fSSascha Wildner AcpiDbGetBusInfo ();
9830d02842fSSascha Wildner break;
9840d02842fSSascha Wildner
9850d02842fSSascha Wildner case CMD_CALL:
9860d02842fSSascha Wildner
9870d02842fSSascha Wildner AcpiDbSetMethodCallBreakpoint (Op);
9880d02842fSSascha Wildner Status = AE_OK;
9890d02842fSSascha Wildner break;
9900d02842fSSascha Wildner
9910d02842fSSascha Wildner case CMD_DEBUG:
9920d02842fSSascha Wildner
9930d02842fSSascha Wildner AcpiDbExecute (AcpiGbl_DbArgs[1],
9940d02842fSSascha Wildner &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_SINGLE_STEP);
9950d02842fSSascha Wildner break;
9960d02842fSSascha Wildner
9970d02842fSSascha Wildner case CMD_DISASSEMBLE:
9980d02842fSSascha Wildner case CMD_DISASM:
9990d02842fSSascha Wildner
10002afeb59bSSascha Wildner #ifdef ACPI_DISASSEMBLER
10010d02842fSSascha Wildner (void) AcpiDbDisassembleMethod (AcpiGbl_DbArgs[1]);
10022afeb59bSSascha Wildner #else
10032afeb59bSSascha Wildner AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
10042afeb59bSSascha Wildner #endif
10050d02842fSSascha Wildner break;
10060d02842fSSascha Wildner
10070d02842fSSascha Wildner case CMD_DUMP:
10080d02842fSSascha Wildner
10090d02842fSSascha Wildner AcpiDbDecodeAndDisplayObject (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
10100d02842fSSascha Wildner break;
10110d02842fSSascha Wildner
10120d02842fSSascha Wildner case CMD_EVALUATE:
10130d02842fSSascha Wildner case CMD_EXECUTE:
10140d02842fSSascha Wildner
10150d02842fSSascha Wildner AcpiDbExecute (AcpiGbl_DbArgs[1],
10160d02842fSSascha Wildner &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP);
10170d02842fSSascha Wildner break;
10180d02842fSSascha Wildner
10190d02842fSSascha Wildner case CMD_FIND:
10200d02842fSSascha Wildner
10210d02842fSSascha Wildner Status = AcpiDbFindNameInNamespace (AcpiGbl_DbArgs[1]);
10220d02842fSSascha Wildner break;
10230d02842fSSascha Wildner
1024e5412f1eSSascha Wildner case CMD_FIELDS:
1025e5412f1eSSascha Wildner
1026e5412f1eSSascha Wildner Status = AcpiUtStrtoul64 (AcpiGbl_DbArgs[1], &Temp64);
1027e5412f1eSSascha Wildner
1028e5412f1eSSascha Wildner if (ACPI_FAILURE (Status) || Temp64 >= ACPI_NUM_PREDEFINED_REGIONS)
1029e5412f1eSSascha Wildner {
1030e5412f1eSSascha Wildner AcpiOsPrintf (
1031e5412f1eSSascha Wildner "Invalid address space ID: must be between 0 and %u inclusive\n",
1032e5412f1eSSascha Wildner ACPI_NUM_PREDEFINED_REGIONS - 1);
1033e5412f1eSSascha Wildner return (AE_OK);
1034e5412f1eSSascha Wildner }
1035e5412f1eSSascha Wildner
1036e5412f1eSSascha Wildner Status = AcpiDbDisplayFields ((UINT32) Temp64);
1037e5412f1eSSascha Wildner break;
1038e5412f1eSSascha Wildner
10390d02842fSSascha Wildner case CMD_GO:
10400d02842fSSascha Wildner
10410d02842fSSascha Wildner AcpiGbl_CmSingleStep = FALSE;
10420d02842fSSascha Wildner return (AE_OK);
10430d02842fSSascha Wildner
10440d02842fSSascha Wildner case CMD_HANDLERS:
10450d02842fSSascha Wildner
10460d02842fSSascha Wildner AcpiDbDisplayHandlers ();
10470d02842fSSascha Wildner break;
10480d02842fSSascha Wildner
10490d02842fSSascha Wildner case CMD_HELP:
10500d02842fSSascha Wildner case CMD_HELP2:
10510d02842fSSascha Wildner
10520d02842fSSascha Wildner AcpiDbDisplayHelp (AcpiGbl_DbArgs[1]);
10530d02842fSSascha Wildner break;
10540d02842fSSascha Wildner
10550d02842fSSascha Wildner case CMD_HISTORY:
10560d02842fSSascha Wildner
10570d02842fSSascha Wildner AcpiDbDisplayHistory ();
10580d02842fSSascha Wildner break;
10590d02842fSSascha Wildner
10600d02842fSSascha Wildner case CMD_HISTORY_EXE: /* ! command */
10610d02842fSSascha Wildner
10620d02842fSSascha Wildner CommandLine = AcpiDbGetFromHistory (AcpiGbl_DbArgs[1]);
10630d02842fSSascha Wildner if (!CommandLine)
10640d02842fSSascha Wildner {
10650d02842fSSascha Wildner return (AE_CTRL_TRUE);
10660d02842fSSascha Wildner }
10670d02842fSSascha Wildner
10680d02842fSSascha Wildner Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op);
10690d02842fSSascha Wildner return (Status);
10700d02842fSSascha Wildner
10710d02842fSSascha Wildner case CMD_HISTORY_LAST: /* !! command */
10720d02842fSSascha Wildner
10730d02842fSSascha Wildner CommandLine = AcpiDbGetFromHistory (NULL);
10740d02842fSSascha Wildner if (!CommandLine)
10750d02842fSSascha Wildner {
10760d02842fSSascha Wildner return (AE_CTRL_TRUE);
10770d02842fSSascha Wildner }
10780d02842fSSascha Wildner
10790d02842fSSascha Wildner Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op);
10800d02842fSSascha Wildner return (Status);
10810d02842fSSascha Wildner
10820d02842fSSascha Wildner case CMD_INFORMATION:
10830d02842fSSascha Wildner
10840d02842fSSascha Wildner AcpiDbDisplayMethodInfo (Op);
10850d02842fSSascha Wildner break;
10860d02842fSSascha Wildner
10870d02842fSSascha Wildner case CMD_INTEGRITY:
10880d02842fSSascha Wildner
10890d02842fSSascha Wildner AcpiDbCheckIntegrity ();
10900d02842fSSascha Wildner break;
10910d02842fSSascha Wildner
10920d02842fSSascha Wildner case CMD_INTO:
10930d02842fSSascha Wildner
10940d02842fSSascha Wildner if (Op)
10950d02842fSSascha Wildner {
10960d02842fSSascha Wildner AcpiGbl_CmSingleStep = TRUE;
10970d02842fSSascha Wildner return (AE_OK);
10980d02842fSSascha Wildner }
10990d02842fSSascha Wildner break;
11000d02842fSSascha Wildner
11010d02842fSSascha Wildner case CMD_LEVEL:
11020d02842fSSascha Wildner
11030d02842fSSascha Wildner if (ParamCount == 0)
11040d02842fSSascha Wildner {
11053cc0afc6SSascha Wildner AcpiOsPrintf (
1106e5412f1eSSascha Wildner "Current debug level for file output is: %8.8X\n",
11070d02842fSSascha Wildner AcpiGbl_DbDebugLevel);
11083cc0afc6SSascha Wildner AcpiOsPrintf (
1109e5412f1eSSascha Wildner "Current debug level for console output is: %8.8X\n",
11100d02842fSSascha Wildner AcpiGbl_DbConsoleDebugLevel);
11110d02842fSSascha Wildner }
11120d02842fSSascha Wildner else if (ParamCount == 2)
11130d02842fSSascha Wildner {
11140d02842fSSascha Wildner Temp = AcpiGbl_DbConsoleDebugLevel;
1115820c5b08SSascha Wildner AcpiGbl_DbConsoleDebugLevel =
1116820c5b08SSascha Wildner strtoul (AcpiGbl_DbArgs[1], NULL, 16);
11170d02842fSSascha Wildner AcpiOsPrintf (
1118e5412f1eSSascha Wildner "Debug Level for console output was %8.8X, now %8.8X\n",
11190d02842fSSascha Wildner Temp, AcpiGbl_DbConsoleDebugLevel);
11200d02842fSSascha Wildner }
11210d02842fSSascha Wildner else
11220d02842fSSascha Wildner {
11230d02842fSSascha Wildner Temp = AcpiGbl_DbDebugLevel;
112425ca8c79SSascha Wildner AcpiGbl_DbDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16);
11250d02842fSSascha Wildner AcpiOsPrintf (
1126e5412f1eSSascha Wildner "Debug Level for file output was %8.8X, now %8.8X\n",
11270d02842fSSascha Wildner Temp, AcpiGbl_DbDebugLevel);
11280d02842fSSascha Wildner }
11290d02842fSSascha Wildner break;
11300d02842fSSascha Wildner
11310d02842fSSascha Wildner case CMD_LIST:
11320d02842fSSascha Wildner
11332afeb59bSSascha Wildner #ifdef ACPI_DISASSEMBLER
1134806343b9SSascha Wildner AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);
11352afeb59bSSascha Wildner #else
11362afeb59bSSascha Wildner AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
11372afeb59bSSascha Wildner #endif
11380d02842fSSascha Wildner break;
11390d02842fSSascha Wildner
11400d02842fSSascha Wildner case CMD_LOCKS:
11410d02842fSSascha Wildner
11420d02842fSSascha Wildner AcpiDbDisplayLocks ();
11430d02842fSSascha Wildner break;
11440d02842fSSascha Wildner
11450d02842fSSascha Wildner case CMD_LOCALS:
11460d02842fSSascha Wildner
11470d02842fSSascha Wildner AcpiDbDisplayLocals ();
11480d02842fSSascha Wildner break;
11490d02842fSSascha Wildner
11500d02842fSSascha Wildner case CMD_METHODS:
11510d02842fSSascha Wildner
11520d02842fSSascha Wildner Status = AcpiDbDisplayObjects ("METHOD", AcpiGbl_DbArgs[1]);
11530d02842fSSascha Wildner break;
11540d02842fSSascha Wildner
11550d02842fSSascha Wildner case CMD_NAMESPACE:
11560d02842fSSascha Wildner
11570d02842fSSascha Wildner AcpiDbDumpNamespace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
11580d02842fSSascha Wildner break;
11590d02842fSSascha Wildner
11600d02842fSSascha Wildner case CMD_NOTIFY:
11610d02842fSSascha Wildner
116225ca8c79SSascha Wildner Temp = strtoul (AcpiGbl_DbArgs[2], NULL, 0);
11630d02842fSSascha Wildner AcpiDbSendNotify (AcpiGbl_DbArgs[1], Temp);
11640d02842fSSascha Wildner break;
11650d02842fSSascha Wildner
11660d02842fSSascha Wildner case CMD_OBJECTS:
11670d02842fSSascha Wildner
11680d02842fSSascha Wildner AcpiUtStrupr (AcpiGbl_DbArgs[1]);
11690d02842fSSascha Wildner Status = AcpiDbDisplayObjects (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
11700d02842fSSascha Wildner break;
11710d02842fSSascha Wildner
11720d02842fSSascha Wildner case CMD_OSI:
11730d02842fSSascha Wildner
11740d02842fSSascha Wildner AcpiDbDisplayInterfaces (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
11750d02842fSSascha Wildner break;
11760d02842fSSascha Wildner
11770d02842fSSascha Wildner case CMD_OWNER:
11780d02842fSSascha Wildner
11790d02842fSSascha Wildner AcpiDbDumpNamespaceByOwner (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
11800d02842fSSascha Wildner break;
11810d02842fSSascha Wildner
11820d02842fSSascha Wildner case CMD_PATHS:
11830d02842fSSascha Wildner
11840d02842fSSascha Wildner AcpiDbDumpNamespacePaths ();
11850d02842fSSascha Wildner break;
11860d02842fSSascha Wildner
11870d02842fSSascha Wildner case CMD_PREFIX:
11880d02842fSSascha Wildner
11890d02842fSSascha Wildner AcpiDbSetScope (AcpiGbl_DbArgs[1]);
11900d02842fSSascha Wildner break;
11910d02842fSSascha Wildner
11920d02842fSSascha Wildner case CMD_REFERENCES:
11930d02842fSSascha Wildner
11940d02842fSSascha Wildner AcpiDbFindReferences (AcpiGbl_DbArgs[1]);
11950d02842fSSascha Wildner break;
11960d02842fSSascha Wildner
11970d02842fSSascha Wildner case CMD_RESOURCES:
11980d02842fSSascha Wildner
11990d02842fSSascha Wildner AcpiDbDisplayResources (AcpiGbl_DbArgs[1]);
12000d02842fSSascha Wildner break;
12010d02842fSSascha Wildner
12020d02842fSSascha Wildner case CMD_RESULTS:
12030d02842fSSascha Wildner
12040d02842fSSascha Wildner AcpiDbDisplayResults ();
12050d02842fSSascha Wildner break;
12060d02842fSSascha Wildner
12070d02842fSSascha Wildner case CMD_SET:
12080d02842fSSascha Wildner
12090d02842fSSascha Wildner AcpiDbSetMethodData (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2],
12100d02842fSSascha Wildner AcpiGbl_DbArgs[3]);
12110d02842fSSascha Wildner break;
12120d02842fSSascha Wildner
12130d02842fSSascha Wildner case CMD_STATS:
12140d02842fSSascha Wildner
12150d02842fSSascha Wildner Status = AcpiDbDisplayStatistics (AcpiGbl_DbArgs[1]);
12160d02842fSSascha Wildner break;
12170d02842fSSascha Wildner
12180d02842fSSascha Wildner case CMD_STOP:
12190d02842fSSascha Wildner
12200d02842fSSascha Wildner return (AE_NOT_IMPLEMENTED);
12210d02842fSSascha Wildner
12220d02842fSSascha Wildner case CMD_TABLES:
12230d02842fSSascha Wildner
12240d02842fSSascha Wildner AcpiDbDisplayTableInfo (AcpiGbl_DbArgs[1]);
12250d02842fSSascha Wildner break;
12260d02842fSSascha Wildner
12270d02842fSSascha Wildner case CMD_TEMPLATE:
12280d02842fSSascha Wildner
12290d02842fSSascha Wildner AcpiDbDisplayTemplate (AcpiGbl_DbArgs[1]);
12300d02842fSSascha Wildner break;
12310d02842fSSascha Wildner
12320d02842fSSascha Wildner case CMD_TRACE:
12330d02842fSSascha Wildner
1234267c04fdSSascha Wildner AcpiDbTrace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], AcpiGbl_DbArgs[3]);
12350d02842fSSascha Wildner break;
12360d02842fSSascha Wildner
12370d02842fSSascha Wildner case CMD_TREE:
12380d02842fSSascha Wildner
12390d02842fSSascha Wildner AcpiDbDisplayCallingTree ();
12400d02842fSSascha Wildner break;
12410d02842fSSascha Wildner
12420d02842fSSascha Wildner case CMD_TYPE:
12430d02842fSSascha Wildner
12440d02842fSSascha Wildner AcpiDbDisplayObjectType (AcpiGbl_DbArgs[1]);
12450d02842fSSascha Wildner break;
12460d02842fSSascha Wildner
12473cc0afc6SSascha Wildner #ifdef ACPI_APPLICATION
12483cc0afc6SSascha Wildner
12493cc0afc6SSascha Wildner /* Hardware simulation commands. */
12503cc0afc6SSascha Wildner
12513cc0afc6SSascha Wildner case CMD_ENABLEACPI:
12523cc0afc6SSascha Wildner #if (!ACPI_REDUCED_HARDWARE)
12533cc0afc6SSascha Wildner
12543cc0afc6SSascha Wildner Status = AcpiEnable();
12553cc0afc6SSascha Wildner if (ACPI_FAILURE(Status))
12563cc0afc6SSascha Wildner {
12573cc0afc6SSascha Wildner AcpiOsPrintf("AcpiEnable failed (Status=%X)\n", Status);
12583cc0afc6SSascha Wildner return (Status);
12593cc0afc6SSascha Wildner }
12603cc0afc6SSascha Wildner #endif /* !ACPI_REDUCED_HARDWARE */
12613cc0afc6SSascha Wildner break;
12623cc0afc6SSascha Wildner
12633cc0afc6SSascha Wildner case CMD_EVENT:
12643cc0afc6SSascha Wildner
12653cc0afc6SSascha Wildner AcpiOsPrintf ("Event command not implemented\n");
12663cc0afc6SSascha Wildner break;
12673cc0afc6SSascha Wildner
12683cc0afc6SSascha Wildner case CMD_GPE:
12693cc0afc6SSascha Wildner
12703cc0afc6SSascha Wildner AcpiDbGenerateGpe (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
12713cc0afc6SSascha Wildner break;
12723cc0afc6SSascha Wildner
12733cc0afc6SSascha Wildner case CMD_GPES:
12743cc0afc6SSascha Wildner
12753cc0afc6SSascha Wildner AcpiDbDisplayGpes ();
12763cc0afc6SSascha Wildner break;
12773cc0afc6SSascha Wildner
12783cc0afc6SSascha Wildner case CMD_SCI:
12793cc0afc6SSascha Wildner
12803cc0afc6SSascha Wildner AcpiDbGenerateSci ();
12813cc0afc6SSascha Wildner break;
12823cc0afc6SSascha Wildner
12833cc0afc6SSascha Wildner case CMD_SLEEP:
12843cc0afc6SSascha Wildner
12853cc0afc6SSascha Wildner Status = AcpiDbSleep (AcpiGbl_DbArgs[1]);
12863cc0afc6SSascha Wildner break;
12873cc0afc6SSascha Wildner
12883cc0afc6SSascha Wildner /* File I/O commands. */
12893cc0afc6SSascha Wildner
12903cc0afc6SSascha Wildner case CMD_CLOSE:
12913cc0afc6SSascha Wildner
12923cc0afc6SSascha Wildner AcpiDbCloseDebugFile ();
12933cc0afc6SSascha Wildner break;
12943cc0afc6SSascha Wildner
12953cc0afc6SSascha Wildner case CMD_LOAD:
1296820c5b08SSascha Wildner {
1297820c5b08SSascha Wildner ACPI_NEW_TABLE_DESC *ListHead = NULL;
12983cc0afc6SSascha Wildner
1299f5f76cf2SSascha Wildner Status = AcGetAllTablesFromFile (AcpiGbl_DbArgs[1],
1300820c5b08SSascha Wildner ACPI_GET_ALL_TABLES, &ListHead);
1301820c5b08SSascha Wildner if (ACPI_SUCCESS (Status))
1302820c5b08SSascha Wildner {
1303820c5b08SSascha Wildner AcpiDbLoadTables (ListHead);
1304820c5b08SSascha Wildner }
1305820c5b08SSascha Wildner }
13063cc0afc6SSascha Wildner break;
13073cc0afc6SSascha Wildner
13083cc0afc6SSascha Wildner case CMD_OPEN:
13093cc0afc6SSascha Wildner
13103cc0afc6SSascha Wildner AcpiDbOpenDebugFile (AcpiGbl_DbArgs[1]);
13113cc0afc6SSascha Wildner break;
13123cc0afc6SSascha Wildner
13133cc0afc6SSascha Wildner /* User space commands. */
13143cc0afc6SSascha Wildner
13153cc0afc6SSascha Wildner case CMD_TERMINATE:
13163cc0afc6SSascha Wildner
13173cc0afc6SSascha Wildner AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
13183cc0afc6SSascha Wildner AcpiUtSubsystemShutdown ();
13193cc0afc6SSascha Wildner
13203cc0afc6SSascha Wildner /*
13213cc0afc6SSascha Wildner * TBD: [Restructure] Need some way to re-initialize without
13223cc0afc6SSascha Wildner * re-creating the semaphores!
13233cc0afc6SSascha Wildner */
13243cc0afc6SSascha Wildner
1325820c5b08SSascha Wildner AcpiGbl_DbTerminateLoop = TRUE;
13263cc0afc6SSascha Wildner /* AcpiInitialize (NULL); */
13273cc0afc6SSascha Wildner break;
13283cc0afc6SSascha Wildner
13297bcb6cafSSascha Wildner case CMD_BACKGROUND:
13307bcb6cafSSascha Wildner
13317bcb6cafSSascha Wildner AcpiDbCreateExecutionThread (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2],
13327bcb6cafSSascha Wildner &AcpiGbl_DbArgTypes[2]);
13337bcb6cafSSascha Wildner break;
13347bcb6cafSSascha Wildner
13353cc0afc6SSascha Wildner case CMD_THREADS:
13363cc0afc6SSascha Wildner
13373cc0afc6SSascha Wildner AcpiDbCreateExecutionThreads (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2],
13383cc0afc6SSascha Wildner AcpiGbl_DbArgs[3]);
13393cc0afc6SSascha Wildner break;
13403cc0afc6SSascha Wildner
13413cc0afc6SSascha Wildner /* Debug test commands. */
13423cc0afc6SSascha Wildner
13433cc0afc6SSascha Wildner case CMD_PREDEFINED:
13443cc0afc6SSascha Wildner
13453cc0afc6SSascha Wildner AcpiDbCheckPredefinedNames ();
13463cc0afc6SSascha Wildner break;
13473cc0afc6SSascha Wildner
13483cc0afc6SSascha Wildner case CMD_TEST:
13493cc0afc6SSascha Wildner
13503cc0afc6SSascha Wildner AcpiDbExecuteTest (AcpiGbl_DbArgs[1]);
13513cc0afc6SSascha Wildner break;
13523cc0afc6SSascha Wildner
13530d02842fSSascha Wildner case CMD_UNLOAD:
13540d02842fSSascha Wildner
13550d02842fSSascha Wildner AcpiDbUnloadAcpiTable (AcpiGbl_DbArgs[1]);
13560d02842fSSascha Wildner break;
13573cc0afc6SSascha Wildner #endif
13580d02842fSSascha Wildner
13590d02842fSSascha Wildner case CMD_EXIT:
13600d02842fSSascha Wildner case CMD_QUIT:
13610d02842fSSascha Wildner
13620d02842fSSascha Wildner if (Op)
13630d02842fSSascha Wildner {
13640d02842fSSascha Wildner AcpiOsPrintf ("Method execution terminated\n");
13650d02842fSSascha Wildner return (AE_CTRL_TERMINATE);
13660d02842fSSascha Wildner }
13670d02842fSSascha Wildner
13680d02842fSSascha Wildner if (!AcpiGbl_DbOutputToFile)
13690d02842fSSascha Wildner {
13700d02842fSSascha Wildner AcpiDbgLevel = ACPI_DEBUG_DEFAULT;
13710d02842fSSascha Wildner }
13720d02842fSSascha Wildner
13733cc0afc6SSascha Wildner #ifdef ACPI_APPLICATION
13740d02842fSSascha Wildner AcpiDbCloseDebugFile ();
13753cc0afc6SSascha Wildner #endif
1376820c5b08SSascha Wildner AcpiGbl_DbTerminateLoop = TRUE;
13770d02842fSSascha Wildner return (AE_CTRL_TERMINATE);
13780d02842fSSascha Wildner
13790d02842fSSascha Wildner case CMD_NOT_FOUND:
13800d02842fSSascha Wildner default:
13810d02842fSSascha Wildner
13820d02842fSSascha Wildner AcpiOsPrintf ("%s: unknown command\n", AcpiGbl_DbArgs[0]);
13830d02842fSSascha Wildner return (AE_CTRL_TRUE);
13840d02842fSSascha Wildner }
13850d02842fSSascha Wildner
13860d02842fSSascha Wildner if (ACPI_SUCCESS (Status))
13870d02842fSSascha Wildner {
13880d02842fSSascha Wildner Status = AE_CTRL_TRUE;
13890d02842fSSascha Wildner }
13900d02842fSSascha Wildner
13910d02842fSSascha Wildner return (Status);
13920d02842fSSascha Wildner }
13930d02842fSSascha Wildner
13940d02842fSSascha Wildner
13950d02842fSSascha Wildner /*******************************************************************************
13960d02842fSSascha Wildner *
13970d02842fSSascha Wildner * FUNCTION: AcpiDbExecuteThread
13980d02842fSSascha Wildner *
13990d02842fSSascha Wildner * PARAMETERS: Context - Not used
14000d02842fSSascha Wildner *
14010d02842fSSascha Wildner * RETURN: None
14020d02842fSSascha Wildner *
14030d02842fSSascha Wildner * DESCRIPTION: Debugger execute thread. Waits for a command line, then
14040d02842fSSascha Wildner * simply dispatches it.
14050d02842fSSascha Wildner *
14060d02842fSSascha Wildner ******************************************************************************/
14070d02842fSSascha Wildner
14080d02842fSSascha Wildner void ACPI_SYSTEM_XFACE
AcpiDbExecuteThread(void * Context)14090d02842fSSascha Wildner AcpiDbExecuteThread (
14100d02842fSSascha Wildner void *Context)
14110d02842fSSascha Wildner {
14120d02842fSSascha Wildner
141338b5d46cSSascha Wildner (void) AcpiDbUserCommands ();
1414820c5b08SSascha Wildner AcpiGbl_DbThreadsTerminated = TRUE;
14150d02842fSSascha Wildner }
14160d02842fSSascha Wildner
14170d02842fSSascha Wildner
14180d02842fSSascha Wildner /*******************************************************************************
14190d02842fSSascha Wildner *
14200d02842fSSascha Wildner * FUNCTION: AcpiDbUserCommands
14210d02842fSSascha Wildner *
142238b5d46cSSascha Wildner * PARAMETERS: None
14230d02842fSSascha Wildner *
14240d02842fSSascha Wildner * RETURN: None
14250d02842fSSascha Wildner *
14260d02842fSSascha Wildner * DESCRIPTION: Command line execution for the AML debugger. Commands are
14270d02842fSSascha Wildner * matched and dispatched here.
14280d02842fSSascha Wildner *
14290d02842fSSascha Wildner ******************************************************************************/
14300d02842fSSascha Wildner
14310d02842fSSascha Wildner ACPI_STATUS
AcpiDbUserCommands(void)14320d02842fSSascha Wildner AcpiDbUserCommands (
143338b5d46cSSascha Wildner void)
14340d02842fSSascha Wildner {
14350d02842fSSascha Wildner ACPI_STATUS Status = AE_OK;
14360d02842fSSascha Wildner
14370d02842fSSascha Wildner
14380d02842fSSascha Wildner AcpiOsPrintf ("\n");
14390d02842fSSascha Wildner
14400d02842fSSascha Wildner /* TBD: [Restructure] Need a separate command line buffer for step mode */
14410d02842fSSascha Wildner
1442820c5b08SSascha Wildner while (!AcpiGbl_DbTerminateLoop)
14430d02842fSSascha Wildner {
144438b5d46cSSascha Wildner /* Wait the readiness of the command */
14450d02842fSSascha Wildner
144638b5d46cSSascha Wildner Status = AcpiOsWaitCommandReady ();
14470d02842fSSascha Wildner if (ACPI_FAILURE (Status))
14480d02842fSSascha Wildner {
144938b5d46cSSascha Wildner break;
14500d02842fSSascha Wildner }
14510d02842fSSascha Wildner
14520d02842fSSascha Wildner /* Just call to the command line interpreter */
14530d02842fSSascha Wildner
145438b5d46cSSascha Wildner AcpiGbl_MethodExecuting = FALSE;
145538b5d46cSSascha Wildner AcpiGbl_StepToNextCall = FALSE;
145638b5d46cSSascha Wildner
145738b5d46cSSascha Wildner (void) AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, NULL, NULL);
145838b5d46cSSascha Wildner
145938b5d46cSSascha Wildner /* Notify the completion of the command */
146038b5d46cSSascha Wildner
146138b5d46cSSascha Wildner Status = AcpiOsNotifyCommandComplete ();
146238b5d46cSSascha Wildner if (ACPI_FAILURE (Status))
146338b5d46cSSascha Wildner {
146438b5d46cSSascha Wildner break;
14650d02842fSSascha Wildner }
14660d02842fSSascha Wildner }
14670d02842fSSascha Wildner
146838b5d46cSSascha Wildner if (ACPI_FAILURE (Status) && Status != AE_CTRL_TERMINATE)
146938b5d46cSSascha Wildner {
147038b5d46cSSascha Wildner ACPI_EXCEPTION ((AE_INFO, Status, "While parsing command line"));
147138b5d46cSSascha Wildner }
14720d02842fSSascha Wildner return (Status);
14730d02842fSSascha Wildner }
14740d02842fSSascha Wildner
14750d02842fSSascha Wildner #endif /* ACPI_DEBUGGER */
1476