xref: /freebsd-src/sys/contrib/dev/acpica/components/debugger/dbinput.c (revision 804fe2660352e090f4481f2c1d646b508859e79a)
1a159c266SJung-uk Kim /*******************************************************************************
2a159c266SJung-uk Kim  *
3a159c266SJung-uk Kim  * Module Name: dbinput - user front-end to the AML debugger
4a159c266SJung-uk Kim  *
5a159c266SJung-uk Kim  ******************************************************************************/
6a159c266SJung-uk Kim 
70d84335fSJung-uk Kim /******************************************************************************
80d84335fSJung-uk Kim  *
90d84335fSJung-uk Kim  * 1. Copyright Notice
100d84335fSJung-uk Kim  *
11*804fe266SJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp.
12a159c266SJung-uk Kim  * All rights reserved.
13a159c266SJung-uk Kim  *
140d84335fSJung-uk Kim  * 2. License
150d84335fSJung-uk Kim  *
160d84335fSJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
170d84335fSJung-uk Kim  * rights. You may have additional license terms from the party that provided
180d84335fSJung-uk Kim  * you this software, covering your right to use that party's intellectual
190d84335fSJung-uk Kim  * property rights.
200d84335fSJung-uk Kim  *
210d84335fSJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
220d84335fSJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
230d84335fSJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
240d84335fSJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
250d84335fSJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
260d84335fSJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
270d84335fSJung-uk Kim  *
280d84335fSJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
290d84335fSJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
300d84335fSJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
310d84335fSJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
320d84335fSJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
330d84335fSJung-uk Kim  * license, and in no event shall the patent license extend to any additions
340d84335fSJung-uk Kim  * to or modifications of the Original Intel Code. No other license or right
350d84335fSJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
360d84335fSJung-uk Kim  *
370d84335fSJung-uk Kim  * The above copyright and patent license is granted only if the following
380d84335fSJung-uk Kim  * conditions are met:
390d84335fSJung-uk Kim  *
400d84335fSJung-uk Kim  * 3. Conditions
410d84335fSJung-uk Kim  *
420d84335fSJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
430d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
440d84335fSJung-uk Kim  * Code or modification with rights to further distribute source must include
450d84335fSJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
460d84335fSJung-uk Kim  * and the following Disclaimer and Export Compliance provision. In addition,
470d84335fSJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
480d84335fSJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
490d84335fSJung-uk Kim  * Code and the date of any change. Licensee must include in that file the
500d84335fSJung-uk Kim  * documentation of any changes made by any predecessor Licensee. Licensee
510d84335fSJung-uk Kim  * must include a prominent statement that the modification is derived,
520d84335fSJung-uk Kim  * directly or indirectly, from Original Intel Code.
530d84335fSJung-uk Kim  *
540d84335fSJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
550d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
560d84335fSJung-uk Kim  * Code or modification without rights to further distribute source must
570d84335fSJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
580d84335fSJung-uk Kim  * documentation and/or other materials provided with distribution. In
590d84335fSJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
600d84335fSJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
610d84335fSJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
620d84335fSJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
630d84335fSJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
640d84335fSJung-uk Kim  * make.
650d84335fSJung-uk Kim  *
660d84335fSJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
670d84335fSJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
680d84335fSJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
690d84335fSJung-uk Kim  * provision in the documentation and/or other materials provided with the
700d84335fSJung-uk Kim  * distribution.
710d84335fSJung-uk Kim  *
720d84335fSJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
730d84335fSJung-uk Kim  * Intel Code.
740d84335fSJung-uk Kim  *
750d84335fSJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
760d84335fSJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
770d84335fSJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
780d84335fSJung-uk Kim  * without prior written authorization from Intel.
790d84335fSJung-uk Kim  *
800d84335fSJung-uk Kim  * 4. Disclaimer and Export Compliance
810d84335fSJung-uk Kim  *
820d84335fSJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
830d84335fSJung-uk Kim  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
840d84335fSJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
850d84335fSJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
860d84335fSJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
870d84335fSJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
880d84335fSJung-uk Kim  * PARTICULAR PURPOSE.
890d84335fSJung-uk Kim  *
900d84335fSJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
910d84335fSJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
920d84335fSJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
930d84335fSJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
940d84335fSJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
950d84335fSJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
960d84335fSJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
970d84335fSJung-uk Kim  * LIMITED REMEDY.
980d84335fSJung-uk Kim  *
990d84335fSJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1000d84335fSJung-uk Kim  * software or system incorporating such software without first obtaining any
1010d84335fSJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
1020d84335fSJung-uk Kim  * any other agency or department of the United States Government. In the
1030d84335fSJung-uk Kim  * event Licensee exports any such software from the United States or
1040d84335fSJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
1050d84335fSJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
1060d84335fSJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
1070d84335fSJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1080d84335fSJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
1090d84335fSJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
1100d84335fSJung-uk Kim  * United States government or any agency thereof requires an export license,
1110d84335fSJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
1120d84335fSJung-uk Kim  * such license, approval or letter.
1130d84335fSJung-uk Kim  *
1140d84335fSJung-uk Kim  *****************************************************************************
1150d84335fSJung-uk Kim  *
1160d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
1170d84335fSJung-uk Kim  * following license:
1180d84335fSJung-uk Kim  *
119a159c266SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
120a159c266SJung-uk Kim  * modification, are permitted provided that the following conditions
121a159c266SJung-uk Kim  * are met:
122a159c266SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
123a159c266SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
124a159c266SJung-uk Kim  *    without modification.
125a159c266SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126a159c266SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
127a159c266SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
128a159c266SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
129a159c266SJung-uk Kim  *    binary redistribution.
130a159c266SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
131a159c266SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
132a159c266SJung-uk Kim  *    from this software without specific prior written permission.
133a159c266SJung-uk Kim  *
1340d84335fSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1350d84335fSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1360d84335fSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1370d84335fSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1380d84335fSJung-uk Kim  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1390d84335fSJung-uk Kim  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1400d84335fSJung-uk Kim  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1410d84335fSJung-uk Kim  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1420d84335fSJung-uk Kim  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1430d84335fSJung-uk Kim  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1440d84335fSJung-uk Kim  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1450d84335fSJung-uk Kim  *
1460d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
147a159c266SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
148a159c266SJung-uk Kim  * Software Foundation.
149a159c266SJung-uk Kim  *
1500d84335fSJung-uk Kim  *****************************************************************************/
151a159c266SJung-uk Kim 
152a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
153a159c266SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
154a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acdebug.h>
155a159c266SJung-uk Kim 
156f8146b88SJung-uk Kim #ifdef ACPI_APPLICATION
157f8146b88SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h>
158f8146b88SJung-uk Kim #endif
159a159c266SJung-uk Kim 
160a159c266SJung-uk Kim #define _COMPONENT          ACPI_CA_DEBUGGER
161a159c266SJung-uk Kim         ACPI_MODULE_NAME    ("dbinput")
162a159c266SJung-uk Kim 
16370e6ab8fSJung-uk Kim 
164a159c266SJung-uk Kim /* Local prototypes */
165a159c266SJung-uk Kim 
166a159c266SJung-uk Kim static UINT32
167a159c266SJung-uk Kim AcpiDbGetLine (
168a159c266SJung-uk Kim     char                    *InputBuffer);
169a159c266SJung-uk Kim 
170a159c266SJung-uk Kim static UINT32
171a159c266SJung-uk Kim AcpiDbMatchCommand (
172a159c266SJung-uk Kim     char                    *UserCommand);
173a159c266SJung-uk Kim 
174a159c266SJung-uk Kim static void
175042ff955SJung-uk Kim AcpiDbDisplayCommandInfo (
176f8146b88SJung-uk Kim     const char              *Command,
177042ff955SJung-uk Kim     BOOLEAN                 DisplayAll);
178042ff955SJung-uk Kim 
179042ff955SJung-uk Kim static void
180a159c266SJung-uk Kim AcpiDbDisplayHelp (
181042ff955SJung-uk Kim     char                    *Command);
182042ff955SJung-uk Kim 
183042ff955SJung-uk Kim static BOOLEAN
184042ff955SJung-uk Kim AcpiDbMatchCommandHelp (
185f8146b88SJung-uk Kim     const char                  *Command,
186042ff955SJung-uk Kim     const ACPI_DB_COMMAND_HELP  *Help);
187a159c266SJung-uk Kim 
188a159c266SJung-uk Kim 
189a159c266SJung-uk Kim /*
190a159c266SJung-uk Kim  * Top-level debugger commands.
191a159c266SJung-uk Kim  *
192a159c266SJung-uk Kim  * This list of commands must match the string table below it
193a159c266SJung-uk Kim  */
194a159c266SJung-uk Kim enum AcpiExDebuggerCommands
195a159c266SJung-uk Kim {
196a159c266SJung-uk Kim     CMD_NOT_FOUND = 0,
197a159c266SJung-uk Kim     CMD_NULL,
198f15e9afbSJung-uk Kim     CMD_ALL,
199a159c266SJung-uk Kim     CMD_ALLOCATIONS,
200a159c266SJung-uk Kim     CMD_ARGS,
201a159c266SJung-uk Kim     CMD_ARGUMENTS,
202a159c266SJung-uk Kim     CMD_BREAKPOINT,
203a159c266SJung-uk Kim     CMD_BUSINFO,
204a159c266SJung-uk Kim     CMD_CALL,
205a159c266SJung-uk Kim     CMD_DEBUG,
206a159c266SJung-uk Kim     CMD_DISASSEMBLE,
207ed17e06eSJung-uk Kim     CMD_DISASM,
208a159c266SJung-uk Kim     CMD_DUMP,
209042ff955SJung-uk Kim     CMD_EVALUATE,
210a159c266SJung-uk Kim     CMD_EXECUTE,
211a159c266SJung-uk Kim     CMD_EXIT,
212a009b7dcSJung-uk Kim     CMD_FIELDS,
213a159c266SJung-uk Kim     CMD_FIND,
214a159c266SJung-uk Kim     CMD_GO,
215a159c266SJung-uk Kim     CMD_HANDLERS,
216a159c266SJung-uk Kim     CMD_HELP,
217a159c266SJung-uk Kim     CMD_HELP2,
218a159c266SJung-uk Kim     CMD_HISTORY,
219a159c266SJung-uk Kim     CMD_HISTORY_EXE,
220a159c266SJung-uk Kim     CMD_HISTORY_LAST,
221a159c266SJung-uk Kim     CMD_INFORMATION,
222a159c266SJung-uk Kim     CMD_INTEGRITY,
223a159c266SJung-uk Kim     CMD_INTO,
224a159c266SJung-uk Kim     CMD_LEVEL,
225a159c266SJung-uk Kim     CMD_LIST,
226a159c266SJung-uk Kim     CMD_LOCALS,
227a159c266SJung-uk Kim     CMD_LOCKS,
228a159c266SJung-uk Kim     CMD_METHODS,
229a159c266SJung-uk Kim     CMD_NAMESPACE,
230a159c266SJung-uk Kim     CMD_NOTIFY,
231313a0c13SJung-uk Kim     CMD_OBJECTS,
232a159c266SJung-uk Kim     CMD_OSI,
233a159c266SJung-uk Kim     CMD_OWNER,
23479c6d946SJung-uk Kim     CMD_PATHS,
235f8146b88SJung-uk Kim     CMD_PREDEFINED,
236a159c266SJung-uk Kim     CMD_PREFIX,
237a159c266SJung-uk Kim     CMD_QUIT,
238a159c266SJung-uk Kim     CMD_REFERENCES,
239a159c266SJung-uk Kim     CMD_RESOURCES,
240a159c266SJung-uk Kim     CMD_RESULTS,
241a159c266SJung-uk Kim     CMD_SET,
242a159c266SJung-uk Kim     CMD_STATS,
243a159c266SJung-uk Kim     CMD_STOP,
244a159c266SJung-uk Kim     CMD_TABLES,
245a159c266SJung-uk Kim     CMD_TEMPLATE,
246a159c266SJung-uk Kim     CMD_TRACE,
247a159c266SJung-uk Kim     CMD_TREE,
248a159c266SJung-uk Kim     CMD_TYPE,
24970e6ab8fSJung-uk Kim #ifdef ACPI_APPLICATION
25070e6ab8fSJung-uk Kim     CMD_ENABLEACPI,
25170e6ab8fSJung-uk Kim     CMD_EVENT,
25270e6ab8fSJung-uk Kim     CMD_GPE,
25370e6ab8fSJung-uk Kim     CMD_GPES,
25470e6ab8fSJung-uk Kim     CMD_SCI,
25570e6ab8fSJung-uk Kim     CMD_SLEEP,
25670e6ab8fSJung-uk Kim 
25770e6ab8fSJung-uk Kim     CMD_CLOSE,
25870e6ab8fSJung-uk Kim     CMD_LOAD,
25970e6ab8fSJung-uk Kim     CMD_OPEN,
26070e6ab8fSJung-uk Kim     CMD_UNLOAD,
26170e6ab8fSJung-uk Kim 
26270e6ab8fSJung-uk Kim     CMD_TERMINATE,
263b7b7e711SJung-uk Kim     CMD_BACKGROUND,
26470e6ab8fSJung-uk Kim     CMD_THREADS,
26570e6ab8fSJung-uk Kim 
26670e6ab8fSJung-uk Kim     CMD_TEST,
26707c64d74SJung-uk Kim 	CMD_INTERRUPT,
26870e6ab8fSJung-uk Kim #endif
269a159c266SJung-uk Kim };
270a159c266SJung-uk Kim 
271a159c266SJung-uk Kim #define CMD_FIRST_VALID     2
272a159c266SJung-uk Kim 
273a159c266SJung-uk Kim 
274a159c266SJung-uk Kim /* Second parameter is the required argument count */
275a159c266SJung-uk Kim 
276042ff955SJung-uk Kim static const ACPI_DB_COMMAND_INFO   AcpiGbl_DbCommands[] =
277a159c266SJung-uk Kim {
278a159c266SJung-uk Kim     {"<NOT FOUND>",  0},
279a159c266SJung-uk Kim     {"<NULL>",       0},
280f15e9afbSJung-uk Kim     {"ALL",          1},
281a159c266SJung-uk Kim     {"ALLOCATIONS",  0},
282a159c266SJung-uk Kim     {"ARGS",         0},
283a159c266SJung-uk Kim     {"ARGUMENTS",    0},
284a159c266SJung-uk Kim     {"BREAKPOINT",   1},
285a159c266SJung-uk Kim     {"BUSINFO",      0},
286a159c266SJung-uk Kim     {"CALL",         0},
287a159c266SJung-uk Kim     {"DEBUG",        1},
288a159c266SJung-uk Kim     {"DISASSEMBLE",  1},
289ed17e06eSJung-uk Kim     {"DISASM",       1},
290a159c266SJung-uk Kim     {"DUMP",         1},
291042ff955SJung-uk Kim     {"EVALUATE",     1},
292a159c266SJung-uk Kim     {"EXECUTE",      1},
293a159c266SJung-uk Kim     {"EXIT",         0},
294a009b7dcSJung-uk Kim     {"FIELDS",       1},
295a159c266SJung-uk Kim     {"FIND",         1},
296a159c266SJung-uk Kim     {"GO",           0},
297a159c266SJung-uk Kim     {"HANDLERS",     0},
298a159c266SJung-uk Kim     {"HELP",         0},
299a159c266SJung-uk Kim     {"?",            0},
300a159c266SJung-uk Kim     {"HISTORY",      0},
301a159c266SJung-uk Kim     {"!",            1},
302a159c266SJung-uk Kim     {"!!",           0},
303a159c266SJung-uk Kim     {"INFORMATION",  0},
304a159c266SJung-uk Kim     {"INTEGRITY",    0},
305a159c266SJung-uk Kim     {"INTO",         0},
306a159c266SJung-uk Kim     {"LEVEL",        0},
307a159c266SJung-uk Kim     {"LIST",         0},
308a159c266SJung-uk Kim     {"LOCALS",       0},
309a159c266SJung-uk Kim     {"LOCKS",        0},
310a159c266SJung-uk Kim     {"METHODS",      0},
311a159c266SJung-uk Kim     {"NAMESPACE",    0},
312a159c266SJung-uk Kim     {"NOTIFY",       2},
31370e6ab8fSJung-uk Kim     {"OBJECTS",      0},
314a159c266SJung-uk Kim     {"OSI",          0},
315a159c266SJung-uk Kim     {"OWNER",        1},
31679c6d946SJung-uk Kim     {"PATHS",        0},
317f8146b88SJung-uk Kim     {"PREDEFINED",   0},
318a159c266SJung-uk Kim     {"PREFIX",       0},
319a159c266SJung-uk Kim     {"QUIT",         0},
320a159c266SJung-uk Kim     {"REFERENCES",   1},
3219c48c75eSJung-uk Kim     {"RESOURCES",    0},
322a159c266SJung-uk Kim     {"RESULTS",      0},
323a159c266SJung-uk Kim     {"SET",          3},
324042ff955SJung-uk Kim     {"STATS",        1},
325a159c266SJung-uk Kim     {"STOP",         0},
326a159c266SJung-uk Kim     {"TABLES",       0},
327a159c266SJung-uk Kim     {"TEMPLATE",     1},
328a159c266SJung-uk Kim     {"TRACE",        1},
329a159c266SJung-uk Kim     {"TREE",         0},
330a159c266SJung-uk Kim     {"TYPE",         1},
33170e6ab8fSJung-uk Kim #ifdef ACPI_APPLICATION
33270e6ab8fSJung-uk Kim     {"ENABLEACPI",   0},
33370e6ab8fSJung-uk Kim     {"EVENT",        1},
33470e6ab8fSJung-uk Kim     {"GPE",          1},
33570e6ab8fSJung-uk Kim     {"GPES",         0},
33670e6ab8fSJung-uk Kim     {"SCI",          0},
33770e6ab8fSJung-uk Kim     {"SLEEP",        0},
33870e6ab8fSJung-uk Kim 
33970e6ab8fSJung-uk Kim     {"CLOSE",        0},
34070e6ab8fSJung-uk Kim     {"LOAD",         1},
34170e6ab8fSJung-uk Kim     {"OPEN",         1},
342a159c266SJung-uk Kim     {"UNLOAD",       1},
34370e6ab8fSJung-uk Kim 
34470e6ab8fSJung-uk Kim     {"TERMINATE",    0},
345b7b7e711SJung-uk Kim     {"BACKGROUND",   1},
34670e6ab8fSJung-uk Kim     {"THREADS",      3},
34770e6ab8fSJung-uk Kim 
34870e6ab8fSJung-uk Kim     {"TEST",         1},
34907c64d74SJung-uk Kim     {"INTERRUPT",    1},
35070e6ab8fSJung-uk Kim #endif
351a159c266SJung-uk Kim     {NULL,           0}
352a159c266SJung-uk Kim };
353a159c266SJung-uk Kim 
354042ff955SJung-uk Kim /*
355042ff955SJung-uk Kim  * Help for all debugger commands. First argument is the number of lines
356042ff955SJung-uk Kim  * of help to output for the command.
357b7b7e711SJung-uk Kim  *
358b7b7e711SJung-uk Kim  * Note: Some commands are not supported by the kernel-level version of
359b7b7e711SJung-uk Kim  * the debugger.
360042ff955SJung-uk Kim  */
361042ff955SJung-uk Kim static const ACPI_DB_COMMAND_HELP   AcpiGbl_DbCommandHelp[] =
362042ff955SJung-uk Kim {
363b7b7e711SJung-uk Kim     {0, "\nNamespace Access:",                  "\n"},
364b7b7e711SJung-uk Kim     {1, "  Businfo",                            "Display system bus info\n"},
365b7b7e711SJung-uk Kim     {1, "  Disassemble <Method>",               "Disassemble a control method\n"},
366b7b7e711SJung-uk Kim     {1, "  Find <AcpiName> (? is wildcard)",    "Find ACPI name(s) with wildcards\n"},
367b7b7e711SJung-uk Kim     {1, "  Integrity",                          "Validate namespace integrity\n"},
368b7b7e711SJung-uk Kim     {1, "  Methods",                            "Display list of loaded control methods\n"},
369a009b7dcSJung-uk Kim     {1, "  Fields <AddressSpaceId>",            "Display list of loaded field units by space ID\n"},
370b7b7e711SJung-uk Kim     {1, "  Namespace [Object] [Depth]",         "Display loaded namespace tree/subtree\n"},
371b7b7e711SJung-uk Kim     {1, "  Notify <Object> <Value>",            "Send a notification on Object\n"},
372b7b7e711SJung-uk Kim     {1, "  Objects [ObjectType]",               "Display summary of all objects or just given type\n"},
373b7b7e711SJung-uk Kim     {1, "  Owner <OwnerId> [Depth]",            "Display loaded namespace by object owner\n"},
374b7b7e711SJung-uk Kim     {1, "  Paths",                              "Display full pathnames of namespace objects\n"},
375b7b7e711SJung-uk Kim     {1, "  Predefined",                         "Check all predefined names\n"},
376b7b7e711SJung-uk Kim     {1, "  Prefix [<Namepath>]",                "Set or Get current execution prefix\n"},
377b7b7e711SJung-uk Kim     {1, "  References <Addr>",                  "Find all references to object at addr\n"},
378b7b7e711SJung-uk Kim     {1, "  Resources [DeviceName]",             "Display Device resources (no arg = all devices)\n"},
379b7b7e711SJung-uk Kim     {1, "  Set N <NamedObject> <Value>",        "Set value for named integer\n"},
380b7b7e711SJung-uk Kim     {1, "  Template <Object>",                  "Format/dump a Buffer/ResourceTemplate\n"},
381b7b7e711SJung-uk Kim     {1, "  Type <Object>",                      "Display object type\n"},
382b7b7e711SJung-uk Kim 
383b7b7e711SJung-uk Kim     {0, "\nControl Method Execution:",          "\n"},
384f15e9afbSJung-uk Kim     {1, "  All <NameSeg>",                      "Evaluate all objects named NameSeg\n"},
385b7b7e711SJung-uk Kim     {1, "  Evaluate <Namepath> [Arguments]",    "Evaluate object or control method\n"},
386b7b7e711SJung-uk Kim     {1, "  Execute <Namepath> [Arguments]",     "Synonym for Evaluate\n"},
387b7b7e711SJung-uk Kim #ifdef ACPI_APPLICATION
388b7b7e711SJung-uk Kim     {1, "  Background <Namepath> [Arguments]",  "Evaluate object/method in a separate thread\n"},
389b7b7e711SJung-uk Kim     {1, "  Thread <Threads><Loops><NamePath>",  "Spawn threads to execute method(s)\n"},
390b7b7e711SJung-uk Kim #endif
391b7b7e711SJung-uk Kim     {1, "  Debug <Namepath> [Arguments]",       "Single-Step a control method\n"},
392b7b7e711SJung-uk Kim     {7, "  [Arguments] formats:",               "Control method argument formats\n"},
393b7b7e711SJung-uk Kim     {1, "     Hex Integer",                     "Integer\n"},
394b7b7e711SJung-uk Kim     {1, "     \"Ascii String\"",                "String\n"},
395b7b7e711SJung-uk Kim     {1, "     (Hex Byte List)",                 "Buffer\n"},
396b7b7e711SJung-uk Kim     {1, "         (01 42 7A BF)",               "Buffer example (4 bytes)\n"},
397b7b7e711SJung-uk Kim     {1, "     [Package Element List]",          "Package\n"},
398b7b7e711SJung-uk Kim     {1, "         [0x01 0x1234 \"string\"]",    "Package example (3 elements)\n"},
399b7b7e711SJung-uk Kim 
400b7b7e711SJung-uk Kim     {0, "\nMiscellaneous:",                     "\n"},
401042ff955SJung-uk Kim     {1, "  Allocations",                        "Display list of current memory allocations\n"},
402042ff955SJung-uk Kim     {2, "  Dump <Address>|<Namepath>",          "\n"},
403042ff955SJung-uk Kim     {0, "       [Byte|Word|Dword|Qword]",       "Display ACPI objects or memory\n"},
404042ff955SJung-uk Kim     {1, "  Handlers",                           "Info about global handlers\n"},
405042ff955SJung-uk Kim     {1, "  Help [Command]",                     "This help screen or individual command\n"},
406042ff955SJung-uk Kim     {1, "  History",                            "Display command history buffer\n"},
407042ff955SJung-uk Kim     {1, "  Level <DebugLevel>] [console]",      "Get/Set debug level for file or console\n"},
408042ff955SJung-uk Kim     {1, "  Locks",                              "Current status of internal mutexes\n"},
409042ff955SJung-uk Kim     {1, "  Osi [Install|Remove <name>]",        "Display or modify global _OSI list\n"},
410042ff955SJung-uk Kim     {1, "  Quit or Exit",                       "Exit this command\n"},
411313a0c13SJung-uk Kim     {8, "  Stats <SubCommand>",                 "Display namespace and memory statistics\n"},
412042ff955SJung-uk Kim     {1, "     Allocations",                     "Display list of current memory allocations\n"},
413042ff955SJung-uk Kim     {1, "     Memory",                          "Dump internal memory lists\n"},
414042ff955SJung-uk Kim     {1, "     Misc",                            "Namespace search and mutex stats\n"},
415042ff955SJung-uk Kim     {1, "     Objects",                         "Summary of namespace objects\n"},
416042ff955SJung-uk Kim     {1, "     Sizes",                           "Sizes for each of the internal objects\n"},
417042ff955SJung-uk Kim     {1, "     Stack",                           "Display CPU stack usage\n"},
418042ff955SJung-uk Kim     {1, "     Tables",                          "Info about current ACPI table(s)\n"},
419042ff955SJung-uk Kim     {1, "  Tables",                             "Display info about loaded ACPI tables\n"},
420b7b7e711SJung-uk Kim #ifdef ACPI_APPLICATION
421b7b7e711SJung-uk Kim     {1, "  Terminate",                          "Delete namespace and all internal objects\n"},
422b7b7e711SJung-uk Kim #endif
423042ff955SJung-uk Kim     {1, "  ! <CommandNumber>",                  "Execute command from history buffer\n"},
424042ff955SJung-uk Kim     {1, "  !!",                                 "Execute last command again\n"},
425042ff955SJung-uk Kim 
426b7b7e711SJung-uk Kim     {0, "\nMethod and Namespace Debugging:",    "\n"},
427b7b7e711SJung-uk Kim     {5, "  Trace <State> [<Namepath>] [Once]",  "Trace control method execution\n"},
428b7b7e711SJung-uk Kim     {1, "     Enable",                          "Enable all messages\n"},
429b7b7e711SJung-uk Kim     {1, "     Disable",                         "Disable tracing\n"},
430b7b7e711SJung-uk Kim     {1, "     Method",                          "Enable method execution messages\n"},
431b7b7e711SJung-uk Kim     {1, "     Opcode",                          "Enable opcode execution messages\n"},
432b7b7e711SJung-uk Kim     {3, "  Test <TestName>",                    "Invoke a debug test\n"},
433b7b7e711SJung-uk Kim     {1, "     Objects",                         "Read/write/compare all namespace data objects\n"},
434b7b7e711SJung-uk Kim     {1, "     Predefined",                      "Validate all ACPI predefined names (_STA, etc.)\n"},
435b7b7e711SJung-uk Kim     {1, "  Execute predefined",                 "Execute all predefined (public) methods\n"},
436042ff955SJung-uk Kim 
437b7b7e711SJung-uk Kim     {0, "\nControl Method Single-Step Execution:","\n"},
438042ff955SJung-uk Kim     {1, "  Arguments (or Args)",                "Display method arguments\n"},
439042ff955SJung-uk Kim     {1, "  Breakpoint <AmlOffset>",             "Set an AML execution breakpoint\n"},
440042ff955SJung-uk Kim     {1, "  Call",                               "Run to next control method invocation\n"},
441042ff955SJung-uk Kim     {1, "  Go",                                 "Allow method to run to completion\n"},
442042ff955SJung-uk Kim     {1, "  Information",                        "Display info about the current method\n"},
443042ff955SJung-uk Kim     {1, "  Into",                               "Step into (not over) a method call\n"},
444042ff955SJung-uk Kim     {1, "  List [# of Aml Opcodes]",            "Display method ASL statements\n"},
445042ff955SJung-uk Kim     {1, "  Locals",                             "Display method local variables\n"},
446042ff955SJung-uk Kim     {1, "  Results",                            "Display method result stack\n"},
447042ff955SJung-uk Kim     {1, "  Set <A|L> <#> <Value>",              "Set method data (Arguments/Locals)\n"},
448042ff955SJung-uk Kim     {1, "  Stop",                               "Terminate control method\n"},
449042ff955SJung-uk Kim     {1, "  Tree",                               "Display control method calling tree\n"},
450042ff955SJung-uk Kim     {1, "  <Enter>",                            "Single step next AML opcode (over calls)\n"},
451042ff955SJung-uk Kim 
45270e6ab8fSJung-uk Kim #ifdef ACPI_APPLICATION
453b7b7e711SJung-uk Kim     {0, "\nFile Operations:",                   "\n"},
454b7b7e711SJung-uk Kim     {1, "  Close",                              "Close debug output file\n"},
455b7b7e711SJung-uk Kim     {1, "  Load <Input Filename>",              "Load ACPI table from a file\n"},
456b7b7e711SJung-uk Kim     {1, "  Open <Output Filename>",             "Open a file for debug output\n"},
457b7b7e711SJung-uk Kim     {1, "  Unload <Namepath>",                  "Unload an ACPI table via namespace object\n"},
458b7b7e711SJung-uk Kim 
459b7b7e711SJung-uk Kim     {0, "\nHardware Simulation:",               "\n"},
46070e6ab8fSJung-uk Kim     {1, "  EnableAcpi",                         "Enable ACPI (hardware) mode\n"},
46179c6d946SJung-uk Kim     {1, "  Event <F|G> <Value>",                "Generate AcpiEvent (Fixed/GPE)\n"},
462313a0c13SJung-uk Kim     {1, "  Gpe <GpeNum> [GpeBlockDevice]",      "Simulate a GPE\n"},
46370e6ab8fSJung-uk Kim     {1, "  Gpes",                               "Display info on all GPE devices\n"},
46479c6d946SJung-uk Kim     {1, "  Sci",                                "Generate an SCI\n"},
46579c6d946SJung-uk Kim     {1, "  Sleep [SleepState]",                 "Simulate sleep/wake sequence(s) (0-5)\n"},
46607c64d74SJung-uk Kim     {1, "  Interrupt <GSIV>",                   "Simulate an interrupt\n"},
46770e6ab8fSJung-uk Kim #endif
468042ff955SJung-uk Kim     {0, NULL, NULL}
469042ff955SJung-uk Kim };
470042ff955SJung-uk Kim 
471042ff955SJung-uk Kim 
472042ff955SJung-uk Kim /*******************************************************************************
473042ff955SJung-uk Kim  *
474042ff955SJung-uk Kim  * FUNCTION:    AcpiDbMatchCommandHelp
475042ff955SJung-uk Kim  *
476042ff955SJung-uk Kim  * PARAMETERS:  Command             - Command string to match
477042ff955SJung-uk Kim  *              Help                - Help table entry to attempt match
478042ff955SJung-uk Kim  *
479042ff955SJung-uk Kim  * RETURN:      TRUE if command matched, FALSE otherwise
480042ff955SJung-uk Kim  *
481042ff955SJung-uk Kim  * DESCRIPTION: Attempt to match a command in the help table in order to
482042ff955SJung-uk Kim  *              print help information for a single command.
483042ff955SJung-uk Kim  *
484042ff955SJung-uk Kim  ******************************************************************************/
485042ff955SJung-uk Kim 
486042ff955SJung-uk Kim static BOOLEAN
487042ff955SJung-uk Kim AcpiDbMatchCommandHelp (
488f8146b88SJung-uk Kim     const char                  *Command,
489042ff955SJung-uk Kim     const ACPI_DB_COMMAND_HELP  *Help)
490042ff955SJung-uk Kim {
491042ff955SJung-uk Kim     char                    *Invocation = Help->Invocation;
492042ff955SJung-uk Kim     UINT32                  LineCount;
493042ff955SJung-uk Kim 
494042ff955SJung-uk Kim 
495042ff955SJung-uk Kim     /* Valid commands in the help table begin with a couple of spaces */
496042ff955SJung-uk Kim 
497042ff955SJung-uk Kim     if (*Invocation != ' ')
498042ff955SJung-uk Kim     {
499042ff955SJung-uk Kim         return (FALSE);
500042ff955SJung-uk Kim     }
501042ff955SJung-uk Kim 
502042ff955SJung-uk Kim     while (*Invocation == ' ')
503042ff955SJung-uk Kim     {
504042ff955SJung-uk Kim         Invocation++;
505042ff955SJung-uk Kim     }
506042ff955SJung-uk Kim 
507042ff955SJung-uk Kim     /* Match command name (full command or substring) */
508042ff955SJung-uk Kim 
509042ff955SJung-uk Kim     while ((*Command) && (*Invocation) && (*Invocation != ' '))
510042ff955SJung-uk Kim     {
5115ef50723SJung-uk Kim         if (tolower ((int) *Command) != tolower ((int) *Invocation))
512042ff955SJung-uk Kim         {
513042ff955SJung-uk Kim             return (FALSE);
514042ff955SJung-uk Kim         }
515042ff955SJung-uk Kim 
516042ff955SJung-uk Kim         Invocation++;
517042ff955SJung-uk Kim         Command++;
518042ff955SJung-uk Kim     }
519042ff955SJung-uk Kim 
520042ff955SJung-uk Kim     /* Print the appropriate number of help lines */
521042ff955SJung-uk Kim 
522042ff955SJung-uk Kim     LineCount = Help->LineCount;
523042ff955SJung-uk Kim     while (LineCount)
524042ff955SJung-uk Kim     {
525042ff955SJung-uk Kim         AcpiOsPrintf ("%-38s : %s", Help->Invocation, Help->Description);
526042ff955SJung-uk Kim         Help++;
527042ff955SJung-uk Kim         LineCount--;
528042ff955SJung-uk Kim     }
529042ff955SJung-uk Kim 
530042ff955SJung-uk Kim     return (TRUE);
531042ff955SJung-uk Kim }
532042ff955SJung-uk Kim 
533042ff955SJung-uk Kim 
534042ff955SJung-uk Kim /*******************************************************************************
535042ff955SJung-uk Kim  *
536042ff955SJung-uk Kim  * FUNCTION:    AcpiDbDisplayCommandInfo
537042ff955SJung-uk Kim  *
538042ff955SJung-uk Kim  * PARAMETERS:  Command             - Command string to match
539042ff955SJung-uk Kim  *              DisplayAll          - Display all matching commands, or just
540042ff955SJung-uk Kim  *                                    the first one (substring match)
541042ff955SJung-uk Kim  *
542042ff955SJung-uk Kim  * RETURN:      None
543042ff955SJung-uk Kim  *
544042ff955SJung-uk Kim  * DESCRIPTION: Display help information for a Debugger command.
545042ff955SJung-uk Kim  *
546042ff955SJung-uk Kim  ******************************************************************************/
547042ff955SJung-uk Kim 
548042ff955SJung-uk Kim static void
549042ff955SJung-uk Kim AcpiDbDisplayCommandInfo (
550f8146b88SJung-uk Kim     const char              *Command,
551042ff955SJung-uk Kim     BOOLEAN                 DisplayAll)
552042ff955SJung-uk Kim {
553042ff955SJung-uk Kim     const ACPI_DB_COMMAND_HELP  *Next;
554042ff955SJung-uk Kim     BOOLEAN                     Matched;
555042ff955SJung-uk Kim 
556042ff955SJung-uk Kim 
557042ff955SJung-uk Kim     Next = AcpiGbl_DbCommandHelp;
558042ff955SJung-uk Kim     while (Next->Invocation)
559042ff955SJung-uk Kim     {
560042ff955SJung-uk Kim         Matched = AcpiDbMatchCommandHelp (Command, Next);
561042ff955SJung-uk Kim         if (!DisplayAll && Matched)
562042ff955SJung-uk Kim         {
563042ff955SJung-uk Kim             return;
564042ff955SJung-uk Kim         }
565042ff955SJung-uk Kim 
566042ff955SJung-uk Kim         Next++;
567042ff955SJung-uk Kim     }
568042ff955SJung-uk Kim }
569042ff955SJung-uk Kim 
570a159c266SJung-uk Kim 
571a159c266SJung-uk Kim /*******************************************************************************
572a159c266SJung-uk Kim  *
573a159c266SJung-uk Kim  * FUNCTION:    AcpiDbDisplayHelp
574a159c266SJung-uk Kim  *
575042ff955SJung-uk Kim  * PARAMETERS:  Command             - Optional command string to display help.
576042ff955SJung-uk Kim  *                                    if not specified, all debugger command
577042ff955SJung-uk Kim  *                                    help strings are displayed
578a159c266SJung-uk Kim  *
579a159c266SJung-uk Kim  * RETURN:      None
580a159c266SJung-uk Kim  *
581042ff955SJung-uk Kim  * DESCRIPTION: Display help for a single debugger command, or all of them.
582a159c266SJung-uk Kim  *
583a159c266SJung-uk Kim  ******************************************************************************/
584a159c266SJung-uk Kim 
585a159c266SJung-uk Kim static void
586a159c266SJung-uk Kim AcpiDbDisplayHelp (
587042ff955SJung-uk Kim     char                    *Command)
588a159c266SJung-uk Kim {
589042ff955SJung-uk Kim     const ACPI_DB_COMMAND_HELP  *Next = AcpiGbl_DbCommandHelp;
590a159c266SJung-uk Kim 
591a159c266SJung-uk Kim 
592042ff955SJung-uk Kim     if (!Command)
593042ff955SJung-uk Kim     {
594042ff955SJung-uk Kim         /* No argument to help, display help for all commands */
595a159c266SJung-uk Kim 
596b7b7e711SJung-uk Kim         AcpiOsPrintf ("\nSummary of AML Debugger Commands\n\n");
597b7b7e711SJung-uk Kim 
598042ff955SJung-uk Kim         while (Next->Invocation)
599042ff955SJung-uk Kim         {
600042ff955SJung-uk Kim             AcpiOsPrintf ("%-38s%s", Next->Invocation, Next->Description);
601042ff955SJung-uk Kim             Next++;
602042ff955SJung-uk Kim         }
603b7b7e711SJung-uk Kim         AcpiOsPrintf ("\n");
604b7b7e711SJung-uk Kim 
605042ff955SJung-uk Kim     }
606042ff955SJung-uk Kim     else
607042ff955SJung-uk Kim     {
608f15e9afbSJung-uk Kim         /* Display help for all commands that match the substring */
609a159c266SJung-uk Kim 
610042ff955SJung-uk Kim         AcpiDbDisplayCommandInfo (Command, TRUE);
611042ff955SJung-uk Kim     }
612a159c266SJung-uk Kim }
613a159c266SJung-uk Kim 
614a159c266SJung-uk Kim 
615a159c266SJung-uk Kim /*******************************************************************************
616a159c266SJung-uk Kim  *
617a159c266SJung-uk Kim  * FUNCTION:    AcpiDbGetNextToken
618a159c266SJung-uk Kim  *
619a159c266SJung-uk Kim  * PARAMETERS:  String          - Command buffer
620a159c266SJung-uk Kim  *              Next            - Return value, end of next token
621a159c266SJung-uk Kim  *
622a159c266SJung-uk Kim  * RETURN:      Pointer to the start of the next token.
623a159c266SJung-uk Kim  *
624a159c266SJung-uk Kim  * DESCRIPTION: Command line parsing. Get the next token on the command line
625a159c266SJung-uk Kim  *
626a159c266SJung-uk Kim  ******************************************************************************/
627a159c266SJung-uk Kim 
628a159c266SJung-uk Kim char *
629a159c266SJung-uk Kim AcpiDbGetNextToken (
630a159c266SJung-uk Kim     char                    *String,
631a159c266SJung-uk Kim     char                    **Next,
632a159c266SJung-uk Kim     ACPI_OBJECT_TYPE        *ReturnType)
633a159c266SJung-uk Kim {
634a159c266SJung-uk Kim     char                    *Start;
635a159c266SJung-uk Kim     UINT32                  Depth;
636a159c266SJung-uk Kim     ACPI_OBJECT_TYPE        Type = ACPI_TYPE_INTEGER;
637a159c266SJung-uk Kim 
638a159c266SJung-uk Kim 
639a159c266SJung-uk Kim     /* At end of buffer? */
640a159c266SJung-uk Kim 
641a159c266SJung-uk Kim     if (!String || !(*String))
642a159c266SJung-uk Kim     {
643a159c266SJung-uk Kim         return (NULL);
644a159c266SJung-uk Kim     }
645a159c266SJung-uk Kim 
6463ee58df5SJung-uk Kim     /* Remove any spaces at the beginning, ignore blank lines */
647a159c266SJung-uk Kim 
648385fb5d9SJung-uk Kim     while (*String && isspace ((int) *String))
649a159c266SJung-uk Kim     {
650a159c266SJung-uk Kim         String++;
651a159c266SJung-uk Kim     }
652a159c266SJung-uk Kim 
653a159c266SJung-uk Kim     if (!(*String))
654a159c266SJung-uk Kim     {
655a159c266SJung-uk Kim         return (NULL);
656a159c266SJung-uk Kim     }
657a159c266SJung-uk Kim 
658a159c266SJung-uk Kim     switch (*String)
659a159c266SJung-uk Kim     {
660a159c266SJung-uk Kim     case '"':
661a159c266SJung-uk Kim 
662a159c266SJung-uk Kim         /* This is a quoted string, scan until closing quote */
663a159c266SJung-uk Kim 
664a159c266SJung-uk Kim         String++;
665a159c266SJung-uk Kim         Start = String;
666a159c266SJung-uk Kim         Type = ACPI_TYPE_STRING;
667a159c266SJung-uk Kim 
668a159c266SJung-uk Kim         /* Find end of string */
669a159c266SJung-uk Kim 
670a159c266SJung-uk Kim         while (*String && (*String != '"'))
671a159c266SJung-uk Kim         {
672a159c266SJung-uk Kim             String++;
673a159c266SJung-uk Kim         }
674a159c266SJung-uk Kim         break;
675a159c266SJung-uk Kim 
676a159c266SJung-uk Kim     case '(':
677a159c266SJung-uk Kim 
678a159c266SJung-uk Kim         /* This is the start of a buffer, scan until closing paren */
679a159c266SJung-uk Kim 
680a159c266SJung-uk Kim         String++;
681a159c266SJung-uk Kim         Start = String;
682a159c266SJung-uk Kim         Type = ACPI_TYPE_BUFFER;
683a159c266SJung-uk Kim 
684a159c266SJung-uk Kim         /* Find end of buffer */
685a159c266SJung-uk Kim 
686a159c266SJung-uk Kim         while (*String && (*String != ')'))
687a159c266SJung-uk Kim         {
688a159c266SJung-uk Kim             String++;
689a159c266SJung-uk Kim         }
690a159c266SJung-uk Kim         break;
691a159c266SJung-uk Kim 
692a009b7dcSJung-uk Kim     case '{':
693a009b7dcSJung-uk Kim 
694a009b7dcSJung-uk Kim         /* This is the start of a field unit, scan until closing brace */
695a009b7dcSJung-uk Kim 
696a009b7dcSJung-uk Kim         String++;
697a009b7dcSJung-uk Kim         Start = String;
698a009b7dcSJung-uk Kim         Type = ACPI_TYPE_FIELD_UNIT;
699a009b7dcSJung-uk Kim 
700a009b7dcSJung-uk Kim         /* Find end of buffer */
701a009b7dcSJung-uk Kim 
702a009b7dcSJung-uk Kim         while (*String && (*String != '}'))
703a009b7dcSJung-uk Kim         {
704a009b7dcSJung-uk Kim             String++;
705a009b7dcSJung-uk Kim         }
706a009b7dcSJung-uk Kim         break;
707a009b7dcSJung-uk Kim 
708a159c266SJung-uk Kim     case '[':
709a159c266SJung-uk Kim 
710a159c266SJung-uk Kim         /* This is the start of a package, scan until closing bracket */
711a159c266SJung-uk Kim 
712a159c266SJung-uk Kim         String++;
713a159c266SJung-uk Kim         Depth = 1;
714a159c266SJung-uk Kim         Start = String;
715a159c266SJung-uk Kim         Type = ACPI_TYPE_PACKAGE;
716a159c266SJung-uk Kim 
717a159c266SJung-uk Kim         /* Find end of package (closing bracket) */
718a159c266SJung-uk Kim 
719a159c266SJung-uk Kim         while (*String)
720a159c266SJung-uk Kim         {
721a159c266SJung-uk Kim             /* Handle String package elements */
722a159c266SJung-uk Kim 
723a159c266SJung-uk Kim             if (*String == '"')
724a159c266SJung-uk Kim             {
725a159c266SJung-uk Kim                 /* Find end of string */
726a159c266SJung-uk Kim 
727a159c266SJung-uk Kim                 String++;
728a159c266SJung-uk Kim                 while (*String && (*String != '"'))
729a159c266SJung-uk Kim                 {
730a159c266SJung-uk Kim                     String++;
731a159c266SJung-uk Kim                 }
732a159c266SJung-uk Kim                 if (!(*String))
733a159c266SJung-uk Kim                 {
734a159c266SJung-uk Kim                     break;
735a159c266SJung-uk Kim                 }
736a159c266SJung-uk Kim             }
737a159c266SJung-uk Kim             else if (*String == '[')
738a159c266SJung-uk Kim             {
739a159c266SJung-uk Kim                 Depth++;         /* A nested package declaration */
740a159c266SJung-uk Kim             }
741a159c266SJung-uk Kim             else if (*String == ']')
742a159c266SJung-uk Kim             {
743a159c266SJung-uk Kim                 Depth--;
744a159c266SJung-uk Kim                 if (Depth == 0) /* Found final package closing bracket */
745a159c266SJung-uk Kim                 {
746a159c266SJung-uk Kim                     break;
747a159c266SJung-uk Kim                 }
748a159c266SJung-uk Kim             }
749a159c266SJung-uk Kim 
750a159c266SJung-uk Kim             String++;
751a159c266SJung-uk Kim         }
752a159c266SJung-uk Kim         break;
753a159c266SJung-uk Kim 
754a159c266SJung-uk Kim     default:
755a159c266SJung-uk Kim 
756a159c266SJung-uk Kim         Start = String;
757a159c266SJung-uk Kim 
758a159c266SJung-uk Kim         /* Find end of token */
759a159c266SJung-uk Kim 
760385fb5d9SJung-uk Kim         while (*String && !isspace ((int) *String))
761a159c266SJung-uk Kim         {
762a159c266SJung-uk Kim             String++;
763a159c266SJung-uk Kim         }
764a159c266SJung-uk Kim         break;
765a159c266SJung-uk Kim     }
766a159c266SJung-uk Kim 
767a159c266SJung-uk Kim     if (!(*String))
768a159c266SJung-uk Kim     {
769a159c266SJung-uk Kim         *Next = NULL;
770a159c266SJung-uk Kim     }
771a159c266SJung-uk Kim     else
772a159c266SJung-uk Kim     {
773a159c266SJung-uk Kim         *String = 0;
774a159c266SJung-uk Kim         *Next = String + 1;
775a159c266SJung-uk Kim     }
776a159c266SJung-uk Kim 
777a159c266SJung-uk Kim     *ReturnType = Type;
778a159c266SJung-uk Kim     return (Start);
779a159c266SJung-uk Kim }
780a159c266SJung-uk Kim 
781a159c266SJung-uk Kim 
782a159c266SJung-uk Kim /*******************************************************************************
783a159c266SJung-uk Kim  *
784a159c266SJung-uk Kim  * FUNCTION:    AcpiDbGetLine
785a159c266SJung-uk Kim  *
786a159c266SJung-uk Kim  * PARAMETERS:  InputBuffer         - Command line buffer
787a159c266SJung-uk Kim  *
788a159c266SJung-uk Kim  * RETURN:      Count of arguments to the command
789a159c266SJung-uk Kim  *
790a159c266SJung-uk Kim  * DESCRIPTION: Get the next command line from the user. Gets entire line
791a159c266SJung-uk Kim  *              up to the next newline
792a159c266SJung-uk Kim  *
793a159c266SJung-uk Kim  ******************************************************************************/
794a159c266SJung-uk Kim 
795a159c266SJung-uk Kim static UINT32
796a159c266SJung-uk Kim AcpiDbGetLine (
797a159c266SJung-uk Kim     char                    *InputBuffer)
798a159c266SJung-uk Kim {
799a159c266SJung-uk Kim     UINT32                  i;
800a159c266SJung-uk Kim     UINT32                  Count;
801a159c266SJung-uk Kim     char                    *Next;
802a159c266SJung-uk Kim     char                    *This;
803a159c266SJung-uk Kim 
804a159c266SJung-uk Kim 
805313a0c13SJung-uk Kim     if (AcpiUtSafeStrcpy (AcpiGbl_DbParsedBuf, sizeof (AcpiGbl_DbParsedBuf),
806313a0c13SJung-uk Kim         InputBuffer))
807313a0c13SJung-uk Kim     {
80870e6ab8fSJung-uk Kim         AcpiOsPrintf (
80970e6ab8fSJung-uk Kim             "Buffer overflow while parsing input line (max %u characters)\n",
810a009b7dcSJung-uk Kim             (UINT32) sizeof (AcpiGbl_DbParsedBuf));
811313a0c13SJung-uk Kim         return (0);
812313a0c13SJung-uk Kim     }
813a159c266SJung-uk Kim 
814a159c266SJung-uk Kim     This = AcpiGbl_DbParsedBuf;
815a159c266SJung-uk Kim     for (i = 0; i < ACPI_DEBUGGER_MAX_ARGS; i++)
816a159c266SJung-uk Kim     {
817a159c266SJung-uk Kim         AcpiGbl_DbArgs[i] = AcpiDbGetNextToken (This, &Next,
818a159c266SJung-uk Kim             &AcpiGbl_DbArgTypes[i]);
819a159c266SJung-uk Kim         if (!AcpiGbl_DbArgs[i])
820a159c266SJung-uk Kim         {
821a159c266SJung-uk Kim             break;
822a159c266SJung-uk Kim         }
823a159c266SJung-uk Kim 
824a159c266SJung-uk Kim         This = Next;
825a159c266SJung-uk Kim     }
826a159c266SJung-uk Kim 
827a159c266SJung-uk Kim     /* Uppercase the actual command */
828a159c266SJung-uk Kim 
829a159c266SJung-uk Kim     AcpiUtStrupr (AcpiGbl_DbArgs[0]);
830a159c266SJung-uk Kim 
831a159c266SJung-uk Kim     Count = i;
832a159c266SJung-uk Kim     if (Count)
833a159c266SJung-uk Kim     {
834a159c266SJung-uk Kim         Count--;  /* Number of args only */
835a159c266SJung-uk Kim     }
836a159c266SJung-uk Kim 
837a159c266SJung-uk Kim     return (Count);
838a159c266SJung-uk Kim }
839a159c266SJung-uk Kim 
840a159c266SJung-uk Kim 
841a159c266SJung-uk Kim /*******************************************************************************
842a159c266SJung-uk Kim  *
843a159c266SJung-uk Kim  * FUNCTION:    AcpiDbMatchCommand
844a159c266SJung-uk Kim  *
845a159c266SJung-uk Kim  * PARAMETERS:  UserCommand             - User command line
846a159c266SJung-uk Kim  *
847a159c266SJung-uk Kim  * RETURN:      Index into command array, -1 if not found
848a159c266SJung-uk Kim  *
849a159c266SJung-uk Kim  * DESCRIPTION: Search command array for a command match
850a159c266SJung-uk Kim  *
851a159c266SJung-uk Kim  ******************************************************************************/
852a159c266SJung-uk Kim 
853a159c266SJung-uk Kim static UINT32
854a159c266SJung-uk Kim AcpiDbMatchCommand (
855a159c266SJung-uk Kim     char                    *UserCommand)
856a159c266SJung-uk Kim {
857a159c266SJung-uk Kim     UINT32                  i;
858a159c266SJung-uk Kim 
859a159c266SJung-uk Kim 
860a159c266SJung-uk Kim     if (!UserCommand || UserCommand[0] == 0)
861a159c266SJung-uk Kim     {
862a159c266SJung-uk Kim         return (CMD_NULL);
863a159c266SJung-uk Kim     }
864a159c266SJung-uk Kim 
865a159c266SJung-uk Kim     for (i = CMD_FIRST_VALID; AcpiGbl_DbCommands[i].Name; i++)
866a159c266SJung-uk Kim     {
867f8146b88SJung-uk Kim         if (strstr (
868f8146b88SJung-uk Kim             ACPI_CAST_PTR (char, AcpiGbl_DbCommands[i].Name), UserCommand) ==
869a159c266SJung-uk Kim             AcpiGbl_DbCommands[i].Name)
870a159c266SJung-uk Kim         {
871a159c266SJung-uk Kim             return (i);
872a159c266SJung-uk Kim         }
873a159c266SJung-uk Kim     }
874a159c266SJung-uk Kim 
875a159c266SJung-uk Kim     /* Command not recognized */
876a159c266SJung-uk Kim 
877a159c266SJung-uk Kim     return (CMD_NOT_FOUND);
878a159c266SJung-uk Kim }
879a159c266SJung-uk Kim 
880a159c266SJung-uk Kim 
881a159c266SJung-uk Kim /*******************************************************************************
882a159c266SJung-uk Kim  *
883a159c266SJung-uk Kim  * FUNCTION:    AcpiDbCommandDispatch
884a159c266SJung-uk Kim  *
885a159c266SJung-uk Kim  * PARAMETERS:  InputBuffer         - Command line buffer
886a159c266SJung-uk Kim  *              WalkState           - Current walk
887a159c266SJung-uk Kim  *              Op                  - Current (executing) parse op
888a159c266SJung-uk Kim  *
889a159c266SJung-uk Kim  * RETURN:      Status
890a159c266SJung-uk Kim  *
891a159c266SJung-uk Kim  * DESCRIPTION: Command dispatcher.
892a159c266SJung-uk Kim  *
893a159c266SJung-uk Kim  ******************************************************************************/
894a159c266SJung-uk Kim 
895a159c266SJung-uk Kim ACPI_STATUS
896a159c266SJung-uk Kim AcpiDbCommandDispatch (
897a159c266SJung-uk Kim     char                    *InputBuffer,
898a159c266SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
899a159c266SJung-uk Kim     ACPI_PARSE_OBJECT       *Op)
900a159c266SJung-uk Kim {
901a159c266SJung-uk Kim     UINT32                  Temp;
902a009b7dcSJung-uk Kim     UINT64                  Temp64;
903a159c266SJung-uk Kim     UINT32                  CommandIndex;
904a159c266SJung-uk Kim     UINT32                  ParamCount;
905a159c266SJung-uk Kim     char                    *CommandLine;
906a159c266SJung-uk Kim     ACPI_STATUS             Status = AE_CTRL_TRUE;
907a159c266SJung-uk Kim 
908a159c266SJung-uk Kim 
909a159c266SJung-uk Kim     /* If AcpiTerminate has been called, terminate this thread */
910a159c266SJung-uk Kim 
911f8146b88SJung-uk Kim     if (AcpiGbl_DbTerminateLoop)
912a159c266SJung-uk Kim     {
913a159c266SJung-uk Kim         return (AE_CTRL_TERMINATE);
914a159c266SJung-uk Kim     }
915a159c266SJung-uk Kim 
916fe0f0bbbSJung-uk Kim     /* Find command and add to the history buffer */
917313a0c13SJung-uk Kim 
918a159c266SJung-uk Kim     ParamCount = AcpiDbGetLine (InputBuffer);
919a159c266SJung-uk Kim     CommandIndex = AcpiDbMatchCommand (AcpiGbl_DbArgs[0]);
920a159c266SJung-uk Kim 
921fe0f0bbbSJung-uk Kim     /*
922fe0f0bbbSJung-uk Kim      * We don't want to add the !! command to the history buffer. It
923fe0f0bbbSJung-uk Kim      * would cause an infinite loop because it would always be the
924fe0f0bbbSJung-uk Kim      * previous command.
925fe0f0bbbSJung-uk Kim      */
926fe0f0bbbSJung-uk Kim     if (CommandIndex != CMD_HISTORY_LAST)
927fe0f0bbbSJung-uk Kim     {
928fe0f0bbbSJung-uk Kim         AcpiDbAddToHistory (InputBuffer);
929fe0f0bbbSJung-uk Kim     }
930fe0f0bbbSJung-uk Kim 
931a159c266SJung-uk Kim     /* Verify that we have the minimum number of params */
932a159c266SJung-uk Kim 
933a159c266SJung-uk Kim     if (ParamCount < AcpiGbl_DbCommands[CommandIndex].MinArgs)
934a159c266SJung-uk Kim     {
935a159c266SJung-uk Kim         AcpiOsPrintf ("%u parameters entered, [%s] requires %u parameters\n",
936a159c266SJung-uk Kim             ParamCount, AcpiGbl_DbCommands[CommandIndex].Name,
937a159c266SJung-uk Kim             AcpiGbl_DbCommands[CommandIndex].MinArgs);
938a159c266SJung-uk Kim 
93970e6ab8fSJung-uk Kim         AcpiDbDisplayCommandInfo (
94070e6ab8fSJung-uk Kim             AcpiGbl_DbCommands[CommandIndex].Name, FALSE);
941a159c266SJung-uk Kim         return (AE_CTRL_TRUE);
942a159c266SJung-uk Kim     }
943a159c266SJung-uk Kim 
944a159c266SJung-uk Kim     /* Decode and dispatch the command */
945a159c266SJung-uk Kim 
946a159c266SJung-uk Kim     switch (CommandIndex)
947a159c266SJung-uk Kim     {
948a159c266SJung-uk Kim     case CMD_NULL:
949a9d8d09cSJung-uk Kim 
950a159c266SJung-uk Kim         if (Op)
951a159c266SJung-uk Kim         {
952a159c266SJung-uk Kim             return (AE_OK);
953a159c266SJung-uk Kim         }
954a159c266SJung-uk Kim         break;
955a159c266SJung-uk Kim 
956f15e9afbSJung-uk Kim     case CMD_ALL:
957f15e9afbSJung-uk Kim 
958f15e9afbSJung-uk Kim         AcpiOsPrintf ("Executing all objects with NameSeg: %s\n", AcpiGbl_DbArgs[1]);
959f15e9afbSJung-uk Kim         AcpiDbExecute (AcpiGbl_DbArgs[1],
960f15e9afbSJung-uk Kim             &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP | EX_ALL);
961f15e9afbSJung-uk Kim         break;
962f15e9afbSJung-uk Kim 
963a159c266SJung-uk Kim     case CMD_ALLOCATIONS:
964a159c266SJung-uk Kim 
965a159c266SJung-uk Kim #ifdef ACPI_DBG_TRACK_ALLOCATIONS
966a159c266SJung-uk Kim         AcpiUtDumpAllocations ((UINT32) -1, NULL);
967a159c266SJung-uk Kim #endif
968a159c266SJung-uk Kim         break;
969a159c266SJung-uk Kim 
970a159c266SJung-uk Kim     case CMD_ARGS:
971a159c266SJung-uk Kim     case CMD_ARGUMENTS:
972a9d8d09cSJung-uk Kim 
973a159c266SJung-uk Kim         AcpiDbDisplayArguments ();
974a159c266SJung-uk Kim         break;
975a159c266SJung-uk Kim 
976a159c266SJung-uk Kim     case CMD_BREAKPOINT:
977a9d8d09cSJung-uk Kim 
978a159c266SJung-uk Kim         AcpiDbSetMethodBreakpoint (AcpiGbl_DbArgs[1], WalkState, Op);
979a159c266SJung-uk Kim         break;
980a159c266SJung-uk Kim 
981a159c266SJung-uk Kim     case CMD_BUSINFO:
982a9d8d09cSJung-uk Kim 
983a159c266SJung-uk Kim         AcpiDbGetBusInfo ();
984a159c266SJung-uk Kim         break;
985a159c266SJung-uk Kim 
986a159c266SJung-uk Kim     case CMD_CALL:
987a9d8d09cSJung-uk Kim 
988a159c266SJung-uk Kim         AcpiDbSetMethodCallBreakpoint (Op);
989a159c266SJung-uk Kim         Status = AE_OK;
990a159c266SJung-uk Kim         break;
991a159c266SJung-uk Kim 
992a159c266SJung-uk Kim     case CMD_DEBUG:
993a9d8d09cSJung-uk Kim 
994a159c266SJung-uk Kim         AcpiDbExecute (AcpiGbl_DbArgs[1],
995a159c266SJung-uk Kim             &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_SINGLE_STEP);
996a159c266SJung-uk Kim         break;
997a159c266SJung-uk Kim 
998a159c266SJung-uk Kim     case CMD_DISASSEMBLE:
999ed17e06eSJung-uk Kim     case CMD_DISASM:
1000a9d8d09cSJung-uk Kim 
100151f42badSJung-uk Kim #ifdef ACPI_DISASSEMBLER
1002a159c266SJung-uk Kim         (void) AcpiDbDisassembleMethod (AcpiGbl_DbArgs[1]);
100351f42badSJung-uk Kim #else
100451f42badSJung-uk Kim         AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
100551f42badSJung-uk Kim #endif
1006a159c266SJung-uk Kim         break;
1007a159c266SJung-uk Kim 
1008a159c266SJung-uk Kim     case CMD_DUMP:
1009a9d8d09cSJung-uk Kim 
1010a159c266SJung-uk Kim         AcpiDbDecodeAndDisplayObject (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
1011a159c266SJung-uk Kim         break;
1012a159c266SJung-uk Kim 
1013042ff955SJung-uk Kim     case CMD_EVALUATE:
1014a159c266SJung-uk Kim     case CMD_EXECUTE:
1015a9d8d09cSJung-uk Kim 
1016a159c266SJung-uk Kim         AcpiDbExecute (AcpiGbl_DbArgs[1],
1017a159c266SJung-uk Kim             &AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP);
1018a159c266SJung-uk Kim         break;
1019a159c266SJung-uk Kim 
1020a159c266SJung-uk Kim     case CMD_FIND:
1021a9d8d09cSJung-uk Kim 
1022a159c266SJung-uk Kim         Status = AcpiDbFindNameInNamespace (AcpiGbl_DbArgs[1]);
1023a159c266SJung-uk Kim         break;
1024a159c266SJung-uk Kim 
1025a009b7dcSJung-uk Kim     case CMD_FIELDS:
1026a009b7dcSJung-uk Kim 
1027a009b7dcSJung-uk Kim         Status = AcpiUtStrtoul64 (AcpiGbl_DbArgs[1], &Temp64);
1028a009b7dcSJung-uk Kim 
1029a009b7dcSJung-uk Kim         if (ACPI_FAILURE (Status) || Temp64 >= ACPI_NUM_PREDEFINED_REGIONS)
1030a009b7dcSJung-uk Kim         {
1031a009b7dcSJung-uk Kim             AcpiOsPrintf (
1032f9a6772eSJung-uk Kim                 "Invalid address space ID: must be between 0 and %u inclusive\n",
1033a009b7dcSJung-uk Kim                 ACPI_NUM_PREDEFINED_REGIONS - 1);
1034a009b7dcSJung-uk Kim             return (AE_OK);
1035a009b7dcSJung-uk Kim         }
1036a009b7dcSJung-uk Kim 
1037a009b7dcSJung-uk Kim         Status = AcpiDbDisplayFields ((UINT32) Temp64);
1038a009b7dcSJung-uk Kim         break;
1039a009b7dcSJung-uk Kim 
1040a159c266SJung-uk Kim     case CMD_GO:
1041a9d8d09cSJung-uk Kim 
1042a159c266SJung-uk Kim         AcpiGbl_CmSingleStep = FALSE;
1043a159c266SJung-uk Kim         return (AE_OK);
1044a159c266SJung-uk Kim 
1045a159c266SJung-uk Kim     case CMD_HANDLERS:
1046a9d8d09cSJung-uk Kim 
1047a159c266SJung-uk Kim         AcpiDbDisplayHandlers ();
1048a159c266SJung-uk Kim         break;
1049a159c266SJung-uk Kim 
1050a159c266SJung-uk Kim     case CMD_HELP:
1051a159c266SJung-uk Kim     case CMD_HELP2:
1052a9d8d09cSJung-uk Kim 
1053042ff955SJung-uk Kim         AcpiDbDisplayHelp (AcpiGbl_DbArgs[1]);
1054a159c266SJung-uk Kim         break;
1055a159c266SJung-uk Kim 
1056a159c266SJung-uk Kim     case CMD_HISTORY:
1057a9d8d09cSJung-uk Kim 
1058a159c266SJung-uk Kim         AcpiDbDisplayHistory ();
1059a159c266SJung-uk Kim         break;
1060a159c266SJung-uk Kim 
1061a9d8d09cSJung-uk Kim     case CMD_HISTORY_EXE: /* ! command */
1062a9d8d09cSJung-uk Kim 
1063a159c266SJung-uk Kim         CommandLine = AcpiDbGetFromHistory (AcpiGbl_DbArgs[1]);
1064a159c266SJung-uk Kim         if (!CommandLine)
1065a159c266SJung-uk Kim         {
1066a159c266SJung-uk Kim             return (AE_CTRL_TRUE);
1067a159c266SJung-uk Kim         }
1068a159c266SJung-uk Kim 
1069a159c266SJung-uk Kim         Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op);
1070a159c266SJung-uk Kim         return (Status);
1071a159c266SJung-uk Kim 
1072a9d8d09cSJung-uk Kim     case CMD_HISTORY_LAST: /* !! command */
1073a9d8d09cSJung-uk Kim 
1074a159c266SJung-uk Kim         CommandLine = AcpiDbGetFromHistory (NULL);
1075a159c266SJung-uk Kim         if (!CommandLine)
1076a159c266SJung-uk Kim         {
1077a159c266SJung-uk Kim             return (AE_CTRL_TRUE);
1078a159c266SJung-uk Kim         }
1079a159c266SJung-uk Kim 
1080a159c266SJung-uk Kim         Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op);
1081a159c266SJung-uk Kim         return (Status);
1082a159c266SJung-uk Kim 
1083a159c266SJung-uk Kim     case CMD_INFORMATION:
1084a9d8d09cSJung-uk Kim 
1085a159c266SJung-uk Kim         AcpiDbDisplayMethodInfo (Op);
1086a159c266SJung-uk Kim         break;
1087a159c266SJung-uk Kim 
1088a159c266SJung-uk Kim     case CMD_INTEGRITY:
1089a9d8d09cSJung-uk Kim 
1090a159c266SJung-uk Kim         AcpiDbCheckIntegrity ();
1091a159c266SJung-uk Kim         break;
1092a159c266SJung-uk Kim 
1093a159c266SJung-uk Kim     case CMD_INTO:
1094a9d8d09cSJung-uk Kim 
1095a159c266SJung-uk Kim         if (Op)
1096a159c266SJung-uk Kim         {
1097a159c266SJung-uk Kim             AcpiGbl_CmSingleStep = TRUE;
1098a159c266SJung-uk Kim             return (AE_OK);
1099a159c266SJung-uk Kim         }
1100a159c266SJung-uk Kim         break;
1101a159c266SJung-uk Kim 
1102a159c266SJung-uk Kim     case CMD_LEVEL:
1103a9d8d09cSJung-uk Kim 
1104a159c266SJung-uk Kim         if (ParamCount == 0)
1105a159c266SJung-uk Kim         {
110670e6ab8fSJung-uk Kim             AcpiOsPrintf (
1107a009b7dcSJung-uk Kim                 "Current debug level for file output is:    %8.8X\n",
1108a159c266SJung-uk Kim                 AcpiGbl_DbDebugLevel);
110970e6ab8fSJung-uk Kim             AcpiOsPrintf (
1110a009b7dcSJung-uk Kim                 "Current debug level for console output is: %8.8X\n",
1111a159c266SJung-uk Kim                 AcpiGbl_DbConsoleDebugLevel);
1112a159c266SJung-uk Kim         }
1113a159c266SJung-uk Kim         else if (ParamCount == 2)
1114a159c266SJung-uk Kim         {
1115a159c266SJung-uk Kim             Temp = AcpiGbl_DbConsoleDebugLevel;
1116f8146b88SJung-uk Kim             AcpiGbl_DbConsoleDebugLevel =
1117f8146b88SJung-uk Kim                 strtoul (AcpiGbl_DbArgs[1], NULL, 16);
1118a159c266SJung-uk Kim             AcpiOsPrintf (
1119a009b7dcSJung-uk Kim                 "Debug Level for console output was %8.8X, now %8.8X\n",
1120a159c266SJung-uk Kim                 Temp, AcpiGbl_DbConsoleDebugLevel);
1121a159c266SJung-uk Kim         }
1122a159c266SJung-uk Kim         else
1123a159c266SJung-uk Kim         {
1124a159c266SJung-uk Kim             Temp = AcpiGbl_DbDebugLevel;
11255ef50723SJung-uk Kim             AcpiGbl_DbDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16);
1126a159c266SJung-uk Kim             AcpiOsPrintf (
1127a009b7dcSJung-uk Kim                 "Debug Level for file output was %8.8X, now %8.8X\n",
1128a159c266SJung-uk Kim                 Temp, AcpiGbl_DbDebugLevel);
1129a159c266SJung-uk Kim         }
1130a159c266SJung-uk Kim         break;
1131a159c266SJung-uk Kim 
1132a159c266SJung-uk Kim     case CMD_LIST:
1133a9d8d09cSJung-uk Kim 
113451f42badSJung-uk Kim #ifdef ACPI_DISASSEMBLER
11356f1f1a63SJung-uk Kim         AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op);
113651f42badSJung-uk Kim #else
113751f42badSJung-uk Kim         AcpiOsPrintf ("The AML Disassembler is not configured/present\n");
113851f42badSJung-uk Kim #endif
1139a159c266SJung-uk Kim         break;
1140a159c266SJung-uk Kim 
1141a159c266SJung-uk Kim     case CMD_LOCKS:
1142a9d8d09cSJung-uk Kim 
1143a159c266SJung-uk Kim         AcpiDbDisplayLocks ();
1144a159c266SJung-uk Kim         break;
1145a159c266SJung-uk Kim 
1146a159c266SJung-uk Kim     case CMD_LOCALS:
1147a9d8d09cSJung-uk Kim 
1148a159c266SJung-uk Kim         AcpiDbDisplayLocals ();
1149a159c266SJung-uk Kim         break;
1150a159c266SJung-uk Kim 
1151a159c266SJung-uk Kim     case CMD_METHODS:
1152a9d8d09cSJung-uk Kim 
1153a159c266SJung-uk Kim         Status = AcpiDbDisplayObjects ("METHOD", AcpiGbl_DbArgs[1]);
1154a159c266SJung-uk Kim         break;
1155a159c266SJung-uk Kim 
1156a159c266SJung-uk Kim     case CMD_NAMESPACE:
1157a9d8d09cSJung-uk Kim 
1158a159c266SJung-uk Kim         AcpiDbDumpNamespace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
1159a159c266SJung-uk Kim         break;
1160a159c266SJung-uk Kim 
1161a159c266SJung-uk Kim     case CMD_NOTIFY:
1162a9d8d09cSJung-uk Kim 
11635ef50723SJung-uk Kim         Temp = strtoul (AcpiGbl_DbArgs[2], NULL, 0);
1164a159c266SJung-uk Kim         AcpiDbSendNotify (AcpiGbl_DbArgs[1], Temp);
1165a159c266SJung-uk Kim         break;
1166a159c266SJung-uk Kim 
1167313a0c13SJung-uk Kim     case CMD_OBJECTS:
1168a9d8d09cSJung-uk Kim 
1169a159c266SJung-uk Kim         AcpiUtStrupr (AcpiGbl_DbArgs[1]);
1170a159c266SJung-uk Kim         Status = AcpiDbDisplayObjects (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
1171a159c266SJung-uk Kim         break;
1172a159c266SJung-uk Kim 
1173a159c266SJung-uk Kim     case CMD_OSI:
1174a9d8d09cSJung-uk Kim 
1175a159c266SJung-uk Kim         AcpiDbDisplayInterfaces (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
1176a159c266SJung-uk Kim         break;
1177a159c266SJung-uk Kim 
1178a159c266SJung-uk Kim     case CMD_OWNER:
1179a9d8d09cSJung-uk Kim 
1180a159c266SJung-uk Kim         AcpiDbDumpNamespaceByOwner (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
1181a159c266SJung-uk Kim         break;
1182a159c266SJung-uk Kim 
118379c6d946SJung-uk Kim     case CMD_PATHS:
118479c6d946SJung-uk Kim 
118579c6d946SJung-uk Kim         AcpiDbDumpNamespacePaths ();
118679c6d946SJung-uk Kim         break;
118779c6d946SJung-uk Kim 
1188a159c266SJung-uk Kim     case CMD_PREFIX:
1189a9d8d09cSJung-uk Kim 
1190a159c266SJung-uk Kim         AcpiDbSetScope (AcpiGbl_DbArgs[1]);
1191a159c266SJung-uk Kim         break;
1192a159c266SJung-uk Kim 
1193a159c266SJung-uk Kim     case CMD_REFERENCES:
1194a9d8d09cSJung-uk Kim 
1195a159c266SJung-uk Kim         AcpiDbFindReferences (AcpiGbl_DbArgs[1]);
1196a159c266SJung-uk Kim         break;
1197a159c266SJung-uk Kim 
1198a159c266SJung-uk Kim     case CMD_RESOURCES:
1199a9d8d09cSJung-uk Kim 
1200a159c266SJung-uk Kim         AcpiDbDisplayResources (AcpiGbl_DbArgs[1]);
1201a159c266SJung-uk Kim         break;
1202a159c266SJung-uk Kim 
1203a159c266SJung-uk Kim     case CMD_RESULTS:
1204a9d8d09cSJung-uk Kim 
1205a159c266SJung-uk Kim         AcpiDbDisplayResults ();
1206a159c266SJung-uk Kim         break;
1207a159c266SJung-uk Kim 
1208a159c266SJung-uk Kim     case CMD_SET:
1209a9d8d09cSJung-uk Kim 
1210a159c266SJung-uk Kim         AcpiDbSetMethodData (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2],
1211a159c266SJung-uk Kim             AcpiGbl_DbArgs[3]);
1212a159c266SJung-uk Kim         break;
1213a159c266SJung-uk Kim 
1214a159c266SJung-uk Kim     case CMD_STATS:
1215a9d8d09cSJung-uk Kim 
1216a159c266SJung-uk Kim         Status = AcpiDbDisplayStatistics (AcpiGbl_DbArgs[1]);
1217a159c266SJung-uk Kim         break;
1218a159c266SJung-uk Kim 
1219a159c266SJung-uk Kim     case CMD_STOP:
1220a9d8d09cSJung-uk Kim 
1221a159c266SJung-uk Kim         return (AE_NOT_IMPLEMENTED);
1222a159c266SJung-uk Kim 
1223a159c266SJung-uk Kim     case CMD_TABLES:
1224a9d8d09cSJung-uk Kim 
1225a159c266SJung-uk Kim         AcpiDbDisplayTableInfo (AcpiGbl_DbArgs[1]);
1226a159c266SJung-uk Kim         break;
1227a159c266SJung-uk Kim 
1228a159c266SJung-uk Kim     case CMD_TEMPLATE:
1229a9d8d09cSJung-uk Kim 
1230a159c266SJung-uk Kim         AcpiDbDisplayTemplate (AcpiGbl_DbArgs[1]);
1231a159c266SJung-uk Kim         break;
1232a159c266SJung-uk Kim 
1233a159c266SJung-uk Kim     case CMD_TRACE:
1234a9d8d09cSJung-uk Kim 
1235fe0f0bbbSJung-uk Kim         AcpiDbTrace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], AcpiGbl_DbArgs[3]);
1236a159c266SJung-uk Kim         break;
1237a159c266SJung-uk Kim 
1238a159c266SJung-uk Kim     case CMD_TREE:
1239a9d8d09cSJung-uk Kim 
1240a159c266SJung-uk Kim         AcpiDbDisplayCallingTree ();
1241a159c266SJung-uk Kim         break;
1242a159c266SJung-uk Kim 
1243a159c266SJung-uk Kim     case CMD_TYPE:
1244a9d8d09cSJung-uk Kim 
1245a159c266SJung-uk Kim         AcpiDbDisplayObjectType (AcpiGbl_DbArgs[1]);
1246a159c266SJung-uk Kim         break;
1247a159c266SJung-uk Kim 
124870e6ab8fSJung-uk Kim #ifdef ACPI_APPLICATION
124970e6ab8fSJung-uk Kim 
125070e6ab8fSJung-uk Kim     /* Hardware simulation commands. */
125170e6ab8fSJung-uk Kim 
125270e6ab8fSJung-uk Kim     case CMD_ENABLEACPI:
125370e6ab8fSJung-uk Kim #if (!ACPI_REDUCED_HARDWARE)
125470e6ab8fSJung-uk Kim 
125570e6ab8fSJung-uk Kim         Status = AcpiEnable();
125670e6ab8fSJung-uk Kim         if (ACPI_FAILURE(Status))
125770e6ab8fSJung-uk Kim         {
125870e6ab8fSJung-uk Kim             AcpiOsPrintf("AcpiEnable failed (Status=%X)\n", Status);
125970e6ab8fSJung-uk Kim             return (Status);
126070e6ab8fSJung-uk Kim         }
126170e6ab8fSJung-uk Kim #endif /* !ACPI_REDUCED_HARDWARE */
126270e6ab8fSJung-uk Kim         break;
126370e6ab8fSJung-uk Kim 
126470e6ab8fSJung-uk Kim     case CMD_EVENT:
126570e6ab8fSJung-uk Kim 
126670e6ab8fSJung-uk Kim         AcpiOsPrintf ("Event command not implemented\n");
126770e6ab8fSJung-uk Kim         break;
126870e6ab8fSJung-uk Kim 
126907c64d74SJung-uk Kim 	case CMD_INTERRUPT:
127007c64d74SJung-uk Kim 
127107c64d74SJung-uk Kim 		AcpiDbGenerateInterrupt (AcpiGbl_DbArgs[1]);
127207c64d74SJung-uk Kim 		break;
127307c64d74SJung-uk Kim 
127470e6ab8fSJung-uk Kim     case CMD_GPE:
127570e6ab8fSJung-uk Kim 
127670e6ab8fSJung-uk Kim         AcpiDbGenerateGpe (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
127770e6ab8fSJung-uk Kim         break;
127870e6ab8fSJung-uk Kim 
127970e6ab8fSJung-uk Kim     case CMD_GPES:
128070e6ab8fSJung-uk Kim 
128170e6ab8fSJung-uk Kim         AcpiDbDisplayGpes ();
128270e6ab8fSJung-uk Kim         break;
128370e6ab8fSJung-uk Kim 
128470e6ab8fSJung-uk Kim     case CMD_SCI:
128570e6ab8fSJung-uk Kim 
128670e6ab8fSJung-uk Kim         AcpiDbGenerateSci ();
128770e6ab8fSJung-uk Kim         break;
128870e6ab8fSJung-uk Kim 
128970e6ab8fSJung-uk Kim     case CMD_SLEEP:
129070e6ab8fSJung-uk Kim 
129170e6ab8fSJung-uk Kim         Status = AcpiDbSleep (AcpiGbl_DbArgs[1]);
129270e6ab8fSJung-uk Kim         break;
129370e6ab8fSJung-uk Kim 
129470e6ab8fSJung-uk Kim     /* File I/O commands. */
129570e6ab8fSJung-uk Kim 
129670e6ab8fSJung-uk Kim     case CMD_CLOSE:
129770e6ab8fSJung-uk Kim 
129870e6ab8fSJung-uk Kim         AcpiDbCloseDebugFile ();
129970e6ab8fSJung-uk Kim         break;
130070e6ab8fSJung-uk Kim 
130170e6ab8fSJung-uk Kim     case CMD_LOAD:
1302f8146b88SJung-uk Kim         {
1303f8146b88SJung-uk Kim             ACPI_NEW_TABLE_DESC     *ListHead = NULL;
130470e6ab8fSJung-uk Kim 
1305f8146b88SJung-uk Kim             Status = AcGetAllTablesFromFile (AcpiGbl_DbArgs[1],
1306f8146b88SJung-uk Kim                 ACPI_GET_ALL_TABLES, &ListHead);
1307f8146b88SJung-uk Kim             if (ACPI_SUCCESS (Status))
1308f8146b88SJung-uk Kim             {
1309f8146b88SJung-uk Kim                 AcpiDbLoadTables (ListHead);
1310f8146b88SJung-uk Kim             }
1311f8146b88SJung-uk Kim         }
131270e6ab8fSJung-uk Kim         break;
131370e6ab8fSJung-uk Kim 
131470e6ab8fSJung-uk Kim     case CMD_OPEN:
131570e6ab8fSJung-uk Kim 
131670e6ab8fSJung-uk Kim         AcpiDbOpenDebugFile (AcpiGbl_DbArgs[1]);
131770e6ab8fSJung-uk Kim         break;
131870e6ab8fSJung-uk Kim 
131970e6ab8fSJung-uk Kim     /* User space commands. */
132070e6ab8fSJung-uk Kim 
132170e6ab8fSJung-uk Kim     case CMD_TERMINATE:
132270e6ab8fSJung-uk Kim 
132370e6ab8fSJung-uk Kim         AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
132470e6ab8fSJung-uk Kim         AcpiUtSubsystemShutdown ();
132570e6ab8fSJung-uk Kim 
132670e6ab8fSJung-uk Kim         /*
132770e6ab8fSJung-uk Kim          * TBD: [Restructure] Need some way to re-initialize without
132870e6ab8fSJung-uk Kim          * re-creating the semaphores!
132970e6ab8fSJung-uk Kim          */
133070e6ab8fSJung-uk Kim 
1331f8146b88SJung-uk Kim         AcpiGbl_DbTerminateLoop = TRUE;
133270e6ab8fSJung-uk Kim         /*  AcpiInitialize (NULL);  */
133370e6ab8fSJung-uk Kim         break;
133470e6ab8fSJung-uk Kim 
1335b7b7e711SJung-uk Kim     case CMD_BACKGROUND:
1336b7b7e711SJung-uk Kim 
1337b7b7e711SJung-uk Kim         AcpiDbCreateExecutionThread (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2],
1338b7b7e711SJung-uk Kim             &AcpiGbl_DbArgTypes[2]);
1339b7b7e711SJung-uk Kim         break;
1340b7b7e711SJung-uk Kim 
134170e6ab8fSJung-uk Kim     case CMD_THREADS:
134270e6ab8fSJung-uk Kim 
134370e6ab8fSJung-uk Kim         AcpiDbCreateExecutionThreads (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2],
134470e6ab8fSJung-uk Kim             AcpiGbl_DbArgs[3]);
134570e6ab8fSJung-uk Kim         break;
134670e6ab8fSJung-uk Kim 
134770e6ab8fSJung-uk Kim     /* Debug test commands. */
134870e6ab8fSJung-uk Kim 
134970e6ab8fSJung-uk Kim     case CMD_PREDEFINED:
135070e6ab8fSJung-uk Kim 
135170e6ab8fSJung-uk Kim         AcpiDbCheckPredefinedNames ();
135270e6ab8fSJung-uk Kim         break;
135370e6ab8fSJung-uk Kim 
135470e6ab8fSJung-uk Kim     case CMD_TEST:
135570e6ab8fSJung-uk Kim 
135670e6ab8fSJung-uk Kim         AcpiDbExecuteTest (AcpiGbl_DbArgs[1]);
135770e6ab8fSJung-uk Kim         break;
135870e6ab8fSJung-uk Kim 
1359a159c266SJung-uk Kim     case CMD_UNLOAD:
1360a9d8d09cSJung-uk Kim 
1361e8241eabSJung-uk Kim         AcpiDbUnloadAcpiTable (AcpiGbl_DbArgs[1]);
1362a159c266SJung-uk Kim         break;
136370e6ab8fSJung-uk Kim #endif
1364a159c266SJung-uk Kim 
1365a159c266SJung-uk Kim     case CMD_EXIT:
1366a159c266SJung-uk Kim     case CMD_QUIT:
1367a9d8d09cSJung-uk Kim 
1368a159c266SJung-uk Kim         if (Op)
1369a159c266SJung-uk Kim         {
1370a159c266SJung-uk Kim             AcpiOsPrintf ("Method execution terminated\n");
1371a159c266SJung-uk Kim             return (AE_CTRL_TERMINATE);
1372a159c266SJung-uk Kim         }
1373a159c266SJung-uk Kim 
1374a159c266SJung-uk Kim         if (!AcpiGbl_DbOutputToFile)
1375a159c266SJung-uk Kim         {
1376a159c266SJung-uk Kim             AcpiDbgLevel = ACPI_DEBUG_DEFAULT;
1377a159c266SJung-uk Kim         }
1378a159c266SJung-uk Kim 
137970e6ab8fSJung-uk Kim #ifdef ACPI_APPLICATION
1380a159c266SJung-uk Kim         AcpiDbCloseDebugFile ();
138170e6ab8fSJung-uk Kim #endif
1382f8146b88SJung-uk Kim         AcpiGbl_DbTerminateLoop = TRUE;
1383a159c266SJung-uk Kim         return (AE_CTRL_TERMINATE);
1384a159c266SJung-uk Kim 
1385a159c266SJung-uk Kim     case CMD_NOT_FOUND:
1386a159c266SJung-uk Kim     default:
1387a9d8d09cSJung-uk Kim 
1388313a0c13SJung-uk Kim         AcpiOsPrintf ("%s: unknown command\n", AcpiGbl_DbArgs[0]);
1389a159c266SJung-uk Kim         return (AE_CTRL_TRUE);
1390a159c266SJung-uk Kim     }
1391a159c266SJung-uk Kim 
1392a159c266SJung-uk Kim     if (ACPI_SUCCESS (Status))
1393a159c266SJung-uk Kim     {
1394a159c266SJung-uk Kim         Status = AE_CTRL_TRUE;
1395a159c266SJung-uk Kim     }
1396a159c266SJung-uk Kim 
1397a159c266SJung-uk Kim     return (Status);
1398a159c266SJung-uk Kim }
1399a159c266SJung-uk Kim 
1400a159c266SJung-uk Kim 
1401a159c266SJung-uk Kim /*******************************************************************************
1402a159c266SJung-uk Kim  *
1403a159c266SJung-uk Kim  * FUNCTION:    AcpiDbExecuteThread
1404a159c266SJung-uk Kim  *
1405a159c266SJung-uk Kim  * PARAMETERS:  Context         - Not used
1406a159c266SJung-uk Kim  *
1407a159c266SJung-uk Kim  * RETURN:      None
1408a159c266SJung-uk Kim  *
1409a159c266SJung-uk Kim  * DESCRIPTION: Debugger execute thread. Waits for a command line, then
1410a159c266SJung-uk Kim  *              simply dispatches it.
1411a159c266SJung-uk Kim  *
1412a159c266SJung-uk Kim  ******************************************************************************/
1413a159c266SJung-uk Kim 
1414a159c266SJung-uk Kim void ACPI_SYSTEM_XFACE
1415a159c266SJung-uk Kim AcpiDbExecuteThread (
1416a159c266SJung-uk Kim     void                    *Context)
1417a159c266SJung-uk Kim {
1418a159c266SJung-uk Kim 
141928482948SJung-uk Kim     (void) AcpiDbUserCommands ();
1420f8146b88SJung-uk Kim     AcpiGbl_DbThreadsTerminated = TRUE;
1421a159c266SJung-uk Kim }
1422a159c266SJung-uk Kim 
1423a159c266SJung-uk Kim 
1424a159c266SJung-uk Kim /*******************************************************************************
1425a159c266SJung-uk Kim  *
1426a159c266SJung-uk Kim  * FUNCTION:    AcpiDbUserCommands
1427a159c266SJung-uk Kim  *
142828482948SJung-uk Kim  * PARAMETERS:  None
1429a159c266SJung-uk Kim  *
1430a159c266SJung-uk Kim  * RETURN:      None
1431a159c266SJung-uk Kim  *
1432a159c266SJung-uk Kim  * DESCRIPTION: Command line execution for the AML debugger. Commands are
1433a159c266SJung-uk Kim  *              matched and dispatched here.
1434a159c266SJung-uk Kim  *
1435a159c266SJung-uk Kim  ******************************************************************************/
1436a159c266SJung-uk Kim 
1437a159c266SJung-uk Kim ACPI_STATUS
1438a159c266SJung-uk Kim AcpiDbUserCommands (
143928482948SJung-uk Kim     void)
1440a159c266SJung-uk Kim {
1441a159c266SJung-uk Kim     ACPI_STATUS             Status = AE_OK;
1442a159c266SJung-uk Kim 
1443a159c266SJung-uk Kim 
1444efcc2a30SJung-uk Kim     AcpiOsPrintf ("\n");
1445efcc2a30SJung-uk Kim 
1446a159c266SJung-uk Kim     /* TBD: [Restructure] Need a separate command line buffer for step mode */
1447a159c266SJung-uk Kim 
1448f8146b88SJung-uk Kim     while (!AcpiGbl_DbTerminateLoop)
1449a159c266SJung-uk Kim     {
145028482948SJung-uk Kim         /* Wait the readiness of the command */
1451a159c266SJung-uk Kim 
145228482948SJung-uk Kim         Status = AcpiOsWaitCommandReady ();
1453a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1454a159c266SJung-uk Kim         {
145528482948SJung-uk Kim             break;
1456a159c266SJung-uk Kim         }
1457a159c266SJung-uk Kim 
1458a159c266SJung-uk Kim         /* Just call to the command line interpreter */
1459a159c266SJung-uk Kim 
146028482948SJung-uk Kim         AcpiGbl_MethodExecuting = FALSE;
146128482948SJung-uk Kim         AcpiGbl_StepToNextCall = FALSE;
146228482948SJung-uk Kim 
146328482948SJung-uk Kim         (void) AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, NULL, NULL);
146428482948SJung-uk Kim 
146528482948SJung-uk Kim         /* Notify the completion of the command */
146628482948SJung-uk Kim 
146728482948SJung-uk Kim         Status = AcpiOsNotifyCommandComplete ();
146828482948SJung-uk Kim         if (ACPI_FAILURE (Status))
146928482948SJung-uk Kim         {
147028482948SJung-uk Kim             break;
1471a159c266SJung-uk Kim         }
1472a159c266SJung-uk Kim     }
1473a159c266SJung-uk Kim 
147428482948SJung-uk Kim     if (ACPI_FAILURE (Status) && Status != AE_CTRL_TERMINATE)
147528482948SJung-uk Kim     {
147628482948SJung-uk Kim         ACPI_EXCEPTION ((AE_INFO, Status, "While parsing command line"));
147728482948SJung-uk Kim     }
1478a159c266SJung-uk Kim     return (Status);
1479a159c266SJung-uk Kim }
1480