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