10d02842fSSascha Wildner /*******************************************************************************
20d02842fSSascha Wildner *
30d02842fSSascha Wildner * Module Name: dbmethod - Debug commands for control methods
40d02842fSSascha Wildner *
50d02842fSSascha Wildner ******************************************************************************/
60d02842fSSascha Wildner
7b4315fc7SSascha Wildner /******************************************************************************
8b4315fc7SSascha Wildner *
9b4315fc7SSascha Wildner * 1. Copyright Notice
10b4315fc7SSascha Wildner *
11*383048acSSascha Wildner * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
120d02842fSSascha Wildner * All rights reserved.
130d02842fSSascha Wildner *
14b4315fc7SSascha Wildner * 2. License
15b4315fc7SSascha Wildner *
16b4315fc7SSascha Wildner * 2.1. This is your license from Intel Corp. under its intellectual property
17b4315fc7SSascha Wildner * rights. You may have additional license terms from the party that provided
18b4315fc7SSascha Wildner * you this software, covering your right to use that party's intellectual
19b4315fc7SSascha Wildner * property rights.
20b4315fc7SSascha Wildner *
21b4315fc7SSascha Wildner * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22b4315fc7SSascha Wildner * copy of the source code appearing in this file ("Covered Code") an
23b4315fc7SSascha Wildner * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24b4315fc7SSascha Wildner * base code distributed originally by Intel ("Original Intel Code") to copy,
25b4315fc7SSascha Wildner * make derivatives, distribute, use and display any portion of the Covered
26b4315fc7SSascha Wildner * Code in any form, with the right to sublicense such rights; and
27b4315fc7SSascha Wildner *
28b4315fc7SSascha Wildner * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29b4315fc7SSascha Wildner * license (with the right to sublicense), under only those claims of Intel
30b4315fc7SSascha Wildner * patents that are infringed by the Original Intel Code, to make, use, sell,
31b4315fc7SSascha Wildner * offer to sell, and import the Covered Code and derivative works thereof
32b4315fc7SSascha Wildner * solely to the minimum extent necessary to exercise the above copyright
33b4315fc7SSascha Wildner * license, and in no event shall the patent license extend to any additions
34b4315fc7SSascha Wildner * to or modifications of the Original Intel Code. No other license or right
35b4315fc7SSascha Wildner * is granted directly or by implication, estoppel or otherwise;
36b4315fc7SSascha Wildner *
37b4315fc7SSascha Wildner * The above copyright and patent license is granted only if the following
38b4315fc7SSascha Wildner * conditions are met:
39b4315fc7SSascha Wildner *
40b4315fc7SSascha Wildner * 3. Conditions
41b4315fc7SSascha Wildner *
42b4315fc7SSascha Wildner * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered
44b4315fc7SSascha Wildner * Code or modification with rights to further distribute source must include
45b4315fc7SSascha Wildner * the above Copyright Notice, the above License, this list of Conditions,
46b4315fc7SSascha Wildner * and the following Disclaimer and Export Compliance provision. In addition,
47b4315fc7SSascha Wildner * Licensee must cause all Covered Code to which Licensee contributes to
48b4315fc7SSascha Wildner * contain a file documenting the changes Licensee made to create that Covered
49b4315fc7SSascha Wildner * Code and the date of any change. Licensee must include in that file the
50b4315fc7SSascha Wildner * documentation of any changes made by any predecessor Licensee. Licensee
51b4315fc7SSascha Wildner * must include a prominent statement that the modification is derived,
52b4315fc7SSascha Wildner * directly or indirectly, from Original Intel Code.
53b4315fc7SSascha Wildner *
54b4315fc7SSascha Wildner * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered
56b4315fc7SSascha Wildner * Code or modification without rights to further distribute source must
57b4315fc7SSascha Wildner * include the following Disclaimer and Export Compliance provision in the
58b4315fc7SSascha Wildner * documentation and/or other materials provided with distribution. In
59b4315fc7SSascha Wildner * addition, Licensee may not authorize further sublicense of source of any
60b4315fc7SSascha Wildner * portion of the Covered Code, and must include terms to the effect that the
61b4315fc7SSascha Wildner * license from Licensee to its licensee is limited to the intellectual
62b4315fc7SSascha Wildner * property embodied in the software Licensee provides to its licensee, and
63b4315fc7SSascha Wildner * not to intellectual property embodied in modifications its licensee may
64b4315fc7SSascha Wildner * make.
65b4315fc7SSascha Wildner *
66b4315fc7SSascha Wildner * 3.3. Redistribution of Executable. Redistribution in executable form of any
67b4315fc7SSascha Wildner * substantial portion of the Covered Code or modification must reproduce the
68b4315fc7SSascha Wildner * above Copyright Notice, and the following Disclaimer and Export Compliance
69b4315fc7SSascha Wildner * provision in the documentation and/or other materials provided with the
70b4315fc7SSascha Wildner * distribution.
71b4315fc7SSascha Wildner *
72b4315fc7SSascha Wildner * 3.4. Intel retains all right, title, and interest in and to the Original
73b4315fc7SSascha Wildner * Intel Code.
74b4315fc7SSascha Wildner *
75b4315fc7SSascha Wildner * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76b4315fc7SSascha Wildner * Intel shall be used in advertising or otherwise to promote the sale, use or
77b4315fc7SSascha Wildner * other dealings in products derived from or relating to the Covered Code
78b4315fc7SSascha Wildner * without prior written authorization from Intel.
79b4315fc7SSascha Wildner *
80b4315fc7SSascha Wildner * 4. Disclaimer and Export Compliance
81b4315fc7SSascha Wildner *
82b4315fc7SSascha Wildner * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83b4315fc7SSascha Wildner * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84b4315fc7SSascha Wildner * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85b4315fc7SSascha Wildner * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86b4315fc7SSascha Wildner * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87b4315fc7SSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88b4315fc7SSascha Wildner * PARTICULAR PURPOSE.
89b4315fc7SSascha Wildner *
90b4315fc7SSascha Wildner * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91b4315fc7SSascha Wildner * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92b4315fc7SSascha Wildner * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93b4315fc7SSascha Wildner * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94b4315fc7SSascha Wildner * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95b4315fc7SSascha Wildner * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96b4315fc7SSascha Wildner * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97b4315fc7SSascha Wildner * LIMITED REMEDY.
98b4315fc7SSascha Wildner *
99b4315fc7SSascha Wildner * 4.3. Licensee shall not export, either directly or indirectly, any of this
100b4315fc7SSascha Wildner * software or system incorporating such software without first obtaining any
101b4315fc7SSascha Wildner * required license or other approval from the U. S. Department of Commerce or
102b4315fc7SSascha Wildner * any other agency or department of the United States Government. In the
103b4315fc7SSascha Wildner * event Licensee exports any such software from the United States or
104b4315fc7SSascha Wildner * re-exports any such software from a foreign destination, Licensee shall
105b4315fc7SSascha Wildner * ensure that the distribution and export/re-export of the software is in
106b4315fc7SSascha Wildner * compliance with all laws, regulations, orders, or other restrictions of the
107b4315fc7SSascha Wildner * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108b4315fc7SSascha Wildner * any of its subsidiaries will export/re-export any technical data, process,
109b4315fc7SSascha Wildner * software, or service, directly or indirectly, to any country for which the
110b4315fc7SSascha Wildner * United States government or any agency thereof requires an export license,
111b4315fc7SSascha Wildner * other governmental approval, or letter of assurance, without first obtaining
112b4315fc7SSascha Wildner * such license, approval or letter.
113b4315fc7SSascha Wildner *
114b4315fc7SSascha Wildner *****************************************************************************
115b4315fc7SSascha Wildner *
116b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
117b4315fc7SSascha Wildner * following license:
118b4315fc7SSascha Wildner *
1190d02842fSSascha Wildner * Redistribution and use in source and binary forms, with or without
1200d02842fSSascha Wildner * modification, are permitted provided that the following conditions
1210d02842fSSascha Wildner * are met:
1220d02842fSSascha Wildner * 1. Redistributions of source code must retain the above copyright
1230d02842fSSascha Wildner * notice, this list of conditions, and the following disclaimer,
1240d02842fSSascha Wildner * without modification.
1250d02842fSSascha Wildner * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1260d02842fSSascha Wildner * substantially similar to the "NO WARRANTY" disclaimer below
1270d02842fSSascha Wildner * ("Disclaimer") and any redistribution must be conditioned upon
1280d02842fSSascha Wildner * including a substantially similar Disclaimer requirement for further
1290d02842fSSascha Wildner * binary redistribution.
1300d02842fSSascha Wildner * 3. Neither the names of the above-listed copyright holders nor the names
1310d02842fSSascha Wildner * of any contributors may be used to endorse or promote products derived
1320d02842fSSascha Wildner * from this software without specific prior written permission.
1330d02842fSSascha Wildner *
134b4315fc7SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135b4315fc7SSascha Wildner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136b4315fc7SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137b4315fc7SSascha Wildner * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138b4315fc7SSascha Wildner * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139b4315fc7SSascha Wildner * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140b4315fc7SSascha Wildner * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141b4315fc7SSascha Wildner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142b4315fc7SSascha Wildner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143b4315fc7SSascha Wildner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144b4315fc7SSascha Wildner * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145b4315fc7SSascha Wildner *
146b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
1470d02842fSSascha Wildner * GNU General Public License ("GPL") version 2 as published by the Free
1480d02842fSSascha Wildner * Software Foundation.
1490d02842fSSascha Wildner *
150b4315fc7SSascha Wildner *****************************************************************************/
1510d02842fSSascha Wildner
1520d02842fSSascha Wildner #include "acpi.h"
1530d02842fSSascha Wildner #include "accommon.h"
1540d02842fSSascha Wildner #include "acdispat.h"
1550d02842fSSascha Wildner #include "acnamesp.h"
1560d02842fSSascha Wildner #include "acdebug.h"
1570d02842fSSascha Wildner #include "acparser.h"
1580d02842fSSascha Wildner #include "acpredef.h"
1590d02842fSSascha Wildner
1600d02842fSSascha Wildner
1617b90aa48SSascha Wildner #ifdef ACPI_DEBUGGER
1627b90aa48SSascha Wildner
1630d02842fSSascha Wildner #define _COMPONENT ACPI_CA_DEBUGGER
1640d02842fSSascha Wildner ACPI_MODULE_NAME ("dbmethod")
1650d02842fSSascha Wildner
166e5e174adSSascha Wildner /* Local prototypes */
167e5e174adSSascha Wildner
168e5e174adSSascha Wildner static ACPI_STATUS
169e5e174adSSascha Wildner AcpiDbWalkForExecute (
170e5e174adSSascha Wildner ACPI_HANDLE ObjHandle,
171e5e174adSSascha Wildner UINT32 NestingLevel,
172e5e174adSSascha Wildner void *Context,
173e5e174adSSascha Wildner void **ReturnValue);
174e5e174adSSascha Wildner
175c5a52fd3SSascha Wildner static ACPI_STATUS
176c5a52fd3SSascha Wildner AcpiDbEvaluateObject (
177c5a52fd3SSascha Wildner ACPI_NAMESPACE_NODE *Node);
178c5a52fd3SSascha Wildner
1790d02842fSSascha Wildner
1800d02842fSSascha Wildner /*******************************************************************************
1810d02842fSSascha Wildner *
1820d02842fSSascha Wildner * FUNCTION: AcpiDbSetMethodBreakpoint
1830d02842fSSascha Wildner *
1840d02842fSSascha Wildner * PARAMETERS: Location - AML offset of breakpoint
1850d02842fSSascha Wildner * WalkState - Current walk info
1860d02842fSSascha Wildner * Op - Current Op (from parse walk)
1870d02842fSSascha Wildner *
1880d02842fSSascha Wildner * RETURN: None
1890d02842fSSascha Wildner *
1900d02842fSSascha Wildner * DESCRIPTION: Set a breakpoint in a control method at the specified
1910d02842fSSascha Wildner * AML offset
1920d02842fSSascha Wildner *
1930d02842fSSascha Wildner ******************************************************************************/
1940d02842fSSascha Wildner
1950d02842fSSascha Wildner void
AcpiDbSetMethodBreakpoint(char * Location,ACPI_WALK_STATE * WalkState,ACPI_PARSE_OBJECT * Op)1960d02842fSSascha Wildner AcpiDbSetMethodBreakpoint (
1970d02842fSSascha Wildner char *Location,
1980d02842fSSascha Wildner ACPI_WALK_STATE *WalkState,
1990d02842fSSascha Wildner ACPI_PARSE_OBJECT *Op)
2000d02842fSSascha Wildner {
2010d02842fSSascha Wildner UINT32 Address;
202267c04fdSSascha Wildner UINT32 AmlOffset;
2030d02842fSSascha Wildner
2040d02842fSSascha Wildner
2050d02842fSSascha Wildner if (!Op)
2060d02842fSSascha Wildner {
2070d02842fSSascha Wildner AcpiOsPrintf ("There is no method currently executing\n");
2080d02842fSSascha Wildner return;
2090d02842fSSascha Wildner }
2100d02842fSSascha Wildner
2110d02842fSSascha Wildner /* Get and verify the breakpoint address */
2120d02842fSSascha Wildner
21325ca8c79SSascha Wildner Address = strtoul (Location, NULL, 16);
214267c04fdSSascha Wildner AmlOffset = (UINT32) ACPI_PTR_DIFF (Op->Common.Aml,
215267c04fdSSascha Wildner WalkState->ParserState.AmlStart);
216267c04fdSSascha Wildner if (Address <= AmlOffset)
2170d02842fSSascha Wildner {
2180d02842fSSascha Wildner AcpiOsPrintf ("Breakpoint %X is beyond current address %X\n",
219267c04fdSSascha Wildner Address, AmlOffset);
2200d02842fSSascha Wildner }
2210d02842fSSascha Wildner
2220d02842fSSascha Wildner /* Save breakpoint in current walk */
2230d02842fSSascha Wildner
2240d02842fSSascha Wildner WalkState->UserBreakpoint = Address;
2250d02842fSSascha Wildner AcpiOsPrintf ("Breakpoint set at AML offset %X\n", Address);
2260d02842fSSascha Wildner }
2270d02842fSSascha Wildner
2280d02842fSSascha Wildner
2290d02842fSSascha Wildner /*******************************************************************************
2300d02842fSSascha Wildner *
2310d02842fSSascha Wildner * FUNCTION: AcpiDbSetMethodCallBreakpoint
2320d02842fSSascha Wildner *
2330d02842fSSascha Wildner * PARAMETERS: Op - Current Op (from parse walk)
2340d02842fSSascha Wildner *
2350d02842fSSascha Wildner * RETURN: None
2360d02842fSSascha Wildner *
2370d02842fSSascha Wildner * DESCRIPTION: Set a breakpoint in a control method at the specified
2380d02842fSSascha Wildner * AML offset
2390d02842fSSascha Wildner *
2400d02842fSSascha Wildner ******************************************************************************/
2410d02842fSSascha Wildner
2420d02842fSSascha Wildner void
AcpiDbSetMethodCallBreakpoint(ACPI_PARSE_OBJECT * Op)2430d02842fSSascha Wildner AcpiDbSetMethodCallBreakpoint (
2440d02842fSSascha Wildner ACPI_PARSE_OBJECT *Op)
2450d02842fSSascha Wildner {
2460d02842fSSascha Wildner
2470d02842fSSascha Wildner
2480d02842fSSascha Wildner if (!Op)
2490d02842fSSascha Wildner {
2500d02842fSSascha Wildner AcpiOsPrintf ("There is no method currently executing\n");
2510d02842fSSascha Wildner return;
2520d02842fSSascha Wildner }
2530d02842fSSascha Wildner
2540d02842fSSascha Wildner AcpiGbl_StepToNextCall = TRUE;
2550d02842fSSascha Wildner }
2560d02842fSSascha Wildner
2570d02842fSSascha Wildner
2580d02842fSSascha Wildner /*******************************************************************************
2590d02842fSSascha Wildner *
2600d02842fSSascha Wildner * FUNCTION: AcpiDbSetMethodData
2610d02842fSSascha Wildner *
2620d02842fSSascha Wildner * PARAMETERS: TypeArg - L for local, A for argument
2630d02842fSSascha Wildner * IndexArg - which one
2640d02842fSSascha Wildner * ValueArg - Value to set.
2650d02842fSSascha Wildner *
2660d02842fSSascha Wildner * RETURN: None
2670d02842fSSascha Wildner *
2680d02842fSSascha Wildner * DESCRIPTION: Set a local or argument for the running control method.
2690d02842fSSascha Wildner * NOTE: only object supported is Number.
2700d02842fSSascha Wildner *
2710d02842fSSascha Wildner ******************************************************************************/
2720d02842fSSascha Wildner
2730d02842fSSascha Wildner void
AcpiDbSetMethodData(char * TypeArg,char * IndexArg,char * ValueArg)2740d02842fSSascha Wildner AcpiDbSetMethodData (
2750d02842fSSascha Wildner char *TypeArg,
2760d02842fSSascha Wildner char *IndexArg,
2770d02842fSSascha Wildner char *ValueArg)
2780d02842fSSascha Wildner {
2790d02842fSSascha Wildner char Type;
2800d02842fSSascha Wildner UINT32 Index;
2810d02842fSSascha Wildner UINT32 Value;
2820d02842fSSascha Wildner ACPI_WALK_STATE *WalkState;
2830d02842fSSascha Wildner ACPI_OPERAND_OBJECT *ObjDesc;
2840d02842fSSascha Wildner ACPI_STATUS Status;
2850d02842fSSascha Wildner ACPI_NAMESPACE_NODE *Node;
2860d02842fSSascha Wildner
2870d02842fSSascha Wildner
2880d02842fSSascha Wildner /* Validate TypeArg */
2890d02842fSSascha Wildner
2900d02842fSSascha Wildner AcpiUtStrupr (TypeArg);
2910d02842fSSascha Wildner Type = TypeArg[0];
2920d02842fSSascha Wildner if ((Type != 'L') &&
2930d02842fSSascha Wildner (Type != 'A') &&
2940d02842fSSascha Wildner (Type != 'N'))
2950d02842fSSascha Wildner {
2960d02842fSSascha Wildner AcpiOsPrintf ("Invalid SET operand: %s\n", TypeArg);
2970d02842fSSascha Wildner return;
2980d02842fSSascha Wildner }
2990d02842fSSascha Wildner
30025ca8c79SSascha Wildner Value = strtoul (ValueArg, NULL, 16);
3010d02842fSSascha Wildner
3020d02842fSSascha Wildner if (Type == 'N')
3030d02842fSSascha Wildner {
3040d02842fSSascha Wildner Node = AcpiDbConvertToNode (IndexArg);
305d4972a9cSSascha Wildner if (!Node)
306d4972a9cSSascha Wildner {
307d4972a9cSSascha Wildner return;
308d4972a9cSSascha Wildner }
309d4972a9cSSascha Wildner
3100d02842fSSascha Wildner if (Node->Type != ACPI_TYPE_INTEGER)
3110d02842fSSascha Wildner {
3120d02842fSSascha Wildner AcpiOsPrintf ("Can only set Integer nodes\n");
3130d02842fSSascha Wildner return;
3140d02842fSSascha Wildner }
3150d02842fSSascha Wildner ObjDesc = Node->Object;
3160d02842fSSascha Wildner ObjDesc->Integer.Value = Value;
3170d02842fSSascha Wildner return;
3180d02842fSSascha Wildner }
3190d02842fSSascha Wildner
3200d02842fSSascha Wildner /* Get the index and value */
3210d02842fSSascha Wildner
32225ca8c79SSascha Wildner Index = strtoul (IndexArg, NULL, 16);
3230d02842fSSascha Wildner
3240d02842fSSascha Wildner WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
3250d02842fSSascha Wildner if (!WalkState)
3260d02842fSSascha Wildner {
3270d02842fSSascha Wildner AcpiOsPrintf ("There is no method currently executing\n");
3280d02842fSSascha Wildner return;
3290d02842fSSascha Wildner }
3300d02842fSSascha Wildner
3310d02842fSSascha Wildner /* Create and initialize the new object */
3320d02842fSSascha Wildner
3330d02842fSSascha Wildner ObjDesc = AcpiUtCreateIntegerObject ((UINT64) Value);
3340d02842fSSascha Wildner if (!ObjDesc)
3350d02842fSSascha Wildner {
3360d02842fSSascha Wildner AcpiOsPrintf ("Could not create an internal object\n");
3370d02842fSSascha Wildner return;
3380d02842fSSascha Wildner }
3390d02842fSSascha Wildner
3400d02842fSSascha Wildner /* Store the new object into the target */
3410d02842fSSascha Wildner
3420d02842fSSascha Wildner switch (Type)
3430d02842fSSascha Wildner {
3440d02842fSSascha Wildner case 'A':
3450d02842fSSascha Wildner
3460d02842fSSascha Wildner /* Set a method argument */
3470d02842fSSascha Wildner
3480d02842fSSascha Wildner if (Index > ACPI_METHOD_MAX_ARG)
3490d02842fSSascha Wildner {
3503cc0afc6SSascha Wildner AcpiOsPrintf ("Arg%u - Invalid argument name\n",
3513cc0afc6SSascha Wildner Index);
3520d02842fSSascha Wildner goto Cleanup;
3530d02842fSSascha Wildner }
3540d02842fSSascha Wildner
3553cc0afc6SSascha Wildner Status = AcpiDsStoreObjectToLocal (ACPI_REFCLASS_ARG,
3563cc0afc6SSascha Wildner Index, ObjDesc, WalkState);
3570d02842fSSascha Wildner if (ACPI_FAILURE (Status))
3580d02842fSSascha Wildner {
3590d02842fSSascha Wildner goto Cleanup;
3600d02842fSSascha Wildner }
3610d02842fSSascha Wildner
3620d02842fSSascha Wildner ObjDesc = WalkState->Arguments[Index].Object;
3630d02842fSSascha Wildner
3640d02842fSSascha Wildner AcpiOsPrintf ("Arg%u: ", Index);
365267c04fdSSascha Wildner AcpiDbDisplayInternalObject (ObjDesc, WalkState);
3660d02842fSSascha Wildner break;
3670d02842fSSascha Wildner
3680d02842fSSascha Wildner case 'L':
3690d02842fSSascha Wildner
3700d02842fSSascha Wildner /* Set a method local */
3710d02842fSSascha Wildner
3720d02842fSSascha Wildner if (Index > ACPI_METHOD_MAX_LOCAL)
3730d02842fSSascha Wildner {
3743cc0afc6SSascha Wildner AcpiOsPrintf ("Local%u - Invalid local variable name\n",
3753cc0afc6SSascha Wildner Index);
3760d02842fSSascha Wildner goto Cleanup;
3770d02842fSSascha Wildner }
3780d02842fSSascha Wildner
3793cc0afc6SSascha Wildner Status = AcpiDsStoreObjectToLocal (ACPI_REFCLASS_LOCAL,
3803cc0afc6SSascha Wildner Index, ObjDesc, WalkState);
3810d02842fSSascha Wildner if (ACPI_FAILURE (Status))
3820d02842fSSascha Wildner {
3830d02842fSSascha Wildner goto Cleanup;
3840d02842fSSascha Wildner }
3850d02842fSSascha Wildner
3860d02842fSSascha Wildner ObjDesc = WalkState->LocalVariables[Index].Object;
3870d02842fSSascha Wildner
3880d02842fSSascha Wildner AcpiOsPrintf ("Local%u: ", Index);
389267c04fdSSascha Wildner AcpiDbDisplayInternalObject (ObjDesc, WalkState);
3900d02842fSSascha Wildner break;
3910d02842fSSascha Wildner
3920d02842fSSascha Wildner default:
3930d02842fSSascha Wildner
3940d02842fSSascha Wildner break;
3950d02842fSSascha Wildner }
3960d02842fSSascha Wildner
3970d02842fSSascha Wildner Cleanup:
3980d02842fSSascha Wildner AcpiUtRemoveReference (ObjDesc);
3990d02842fSSascha Wildner }
4000d02842fSSascha Wildner
4010d02842fSSascha Wildner
4022afeb59bSSascha Wildner #ifdef ACPI_DISASSEMBLER
4030d02842fSSascha Wildner /*******************************************************************************
4040d02842fSSascha Wildner *
4050d02842fSSascha Wildner * FUNCTION: AcpiDbDisassembleAml
4060d02842fSSascha Wildner *
4070d02842fSSascha Wildner * PARAMETERS: Statements - Number of statements to disassemble
4080d02842fSSascha Wildner * Op - Current Op (from parse walk)
4090d02842fSSascha Wildner *
4100d02842fSSascha Wildner * RETURN: None
4110d02842fSSascha Wildner *
4120d02842fSSascha Wildner * DESCRIPTION: Display disassembled AML (ASL) starting from Op for the number
4130d02842fSSascha Wildner * of statements specified.
4140d02842fSSascha Wildner *
4150d02842fSSascha Wildner ******************************************************************************/
4160d02842fSSascha Wildner
4170d02842fSSascha Wildner void
AcpiDbDisassembleAml(char * Statements,ACPI_PARSE_OBJECT * Op)4180d02842fSSascha Wildner AcpiDbDisassembleAml (
4190d02842fSSascha Wildner char *Statements,
4200d02842fSSascha Wildner ACPI_PARSE_OBJECT *Op)
4210d02842fSSascha Wildner {
4220d02842fSSascha Wildner UINT32 NumStatements = 8;
4230d02842fSSascha Wildner
4240d02842fSSascha Wildner
4250d02842fSSascha Wildner if (!Op)
4260d02842fSSascha Wildner {
4270d02842fSSascha Wildner AcpiOsPrintf ("There is no method currently executing\n");
4280d02842fSSascha Wildner return;
4290d02842fSSascha Wildner }
4300d02842fSSascha Wildner
4310d02842fSSascha Wildner if (Statements)
4320d02842fSSascha Wildner {
43325ca8c79SSascha Wildner NumStatements = strtoul (Statements, NULL, 0);
4340d02842fSSascha Wildner }
4350d02842fSSascha Wildner
4360d02842fSSascha Wildner AcpiDmDisassemble (NULL, Op, NumStatements);
4370d02842fSSascha Wildner }
4380d02842fSSascha Wildner
4390d02842fSSascha Wildner
4400d02842fSSascha Wildner /*******************************************************************************
4410d02842fSSascha Wildner *
4420d02842fSSascha Wildner * FUNCTION: AcpiDbDisassembleMethod
4430d02842fSSascha Wildner *
4440d02842fSSascha Wildner * PARAMETERS: Name - Name of control method
4450d02842fSSascha Wildner *
4460d02842fSSascha Wildner * RETURN: None
4470d02842fSSascha Wildner *
4480d02842fSSascha Wildner * DESCRIPTION: Display disassembled AML (ASL) starting from Op for the number
4490d02842fSSascha Wildner * of statements specified.
4500d02842fSSascha Wildner *
4510d02842fSSascha Wildner ******************************************************************************/
4520d02842fSSascha Wildner
4530d02842fSSascha Wildner ACPI_STATUS
AcpiDbDisassembleMethod(char * Name)4540d02842fSSascha Wildner AcpiDbDisassembleMethod (
4550d02842fSSascha Wildner char *Name)
4560d02842fSSascha Wildner {
4570d02842fSSascha Wildner ACPI_STATUS Status;
4580d02842fSSascha Wildner ACPI_PARSE_OBJECT *Op;
4590d02842fSSascha Wildner ACPI_WALK_STATE *WalkState;
4600d02842fSSascha Wildner ACPI_OPERAND_OBJECT *ObjDesc;
4610d02842fSSascha Wildner ACPI_NAMESPACE_NODE *Method;
4620d02842fSSascha Wildner
4630d02842fSSascha Wildner
4640d02842fSSascha Wildner Method = AcpiDbConvertToNode (Name);
4650d02842fSSascha Wildner if (!Method)
4660d02842fSSascha Wildner {
4670d02842fSSascha Wildner return (AE_BAD_PARAMETER);
4680d02842fSSascha Wildner }
4690d02842fSSascha Wildner
4700d02842fSSascha Wildner if (Method->Type != ACPI_TYPE_METHOD)
4710d02842fSSascha Wildner {
4720d02842fSSascha Wildner ACPI_ERROR ((AE_INFO, "%s (%s): Object must be a control method",
4730d02842fSSascha Wildner Name, AcpiUtGetTypeName (Method->Type)));
4740d02842fSSascha Wildner return (AE_BAD_PARAMETER);
4750d02842fSSascha Wildner }
4760d02842fSSascha Wildner
4770d02842fSSascha Wildner ObjDesc = Method->Object;
4780d02842fSSascha Wildner
479267c04fdSSascha Wildner Op = AcpiPsCreateScopeOp (ObjDesc->Method.AmlStart);
4800d02842fSSascha Wildner if (!Op)
4810d02842fSSascha Wildner {
4820d02842fSSascha Wildner return (AE_NO_MEMORY);
4830d02842fSSascha Wildner }
4840d02842fSSascha Wildner
4850d02842fSSascha Wildner /* Create and initialize a new walk state */
4860d02842fSSascha Wildner
4870d02842fSSascha Wildner WalkState = AcpiDsCreateWalkState (0, Op, NULL, NULL);
4880d02842fSSascha Wildner if (!WalkState)
4890d02842fSSascha Wildner {
4900d02842fSSascha Wildner return (AE_NO_MEMORY);
4910d02842fSSascha Wildner }
4920d02842fSSascha Wildner
4930d02842fSSascha Wildner Status = AcpiDsInitAmlWalk (WalkState, Op, NULL,
4940d02842fSSascha Wildner ObjDesc->Method.AmlStart,
4950d02842fSSascha Wildner ObjDesc->Method.AmlLength, NULL, ACPI_IMODE_LOAD_PASS1);
4960d02842fSSascha Wildner if (ACPI_FAILURE (Status))
4970d02842fSSascha Wildner {
4980d02842fSSascha Wildner return (Status);
4990d02842fSSascha Wildner }
5000d02842fSSascha Wildner
5010d02842fSSascha Wildner Status = AcpiUtAllocateOwnerId (&ObjDesc->Method.OwnerId);
502e5412f1eSSascha Wildner if (ACPI_FAILURE(Status))
503e5412f1eSSascha Wildner {
504e5412f1eSSascha Wildner return (Status);
505e5412f1eSSascha Wildner }
506e5412f1eSSascha Wildner
5070d02842fSSascha Wildner WalkState->OwnerId = ObjDesc->Method.OwnerId;
5080d02842fSSascha Wildner
5090d02842fSSascha Wildner /* Push start scope on scope stack and make it current */
5100d02842fSSascha Wildner
5110d02842fSSascha Wildner Status = AcpiDsScopeStackPush (Method,
5120d02842fSSascha Wildner Method->Type, WalkState);
5130d02842fSSascha Wildner if (ACPI_FAILURE (Status))
5140d02842fSSascha Wildner {
5150d02842fSSascha Wildner return (Status);
5160d02842fSSascha Wildner }
5170d02842fSSascha Wildner
5180d02842fSSascha Wildner /* Parse the entire method AML including deferred operators */
5190d02842fSSascha Wildner
5200d02842fSSascha Wildner WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE;
5210d02842fSSascha Wildner WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
5220d02842fSSascha Wildner
5230d02842fSSascha Wildner Status = AcpiPsParseAml (WalkState);
524e5412f1eSSascha Wildner if (ACPI_FAILURE(Status))
525e5412f1eSSascha Wildner {
526e5412f1eSSascha Wildner return (Status);
527e5412f1eSSascha Wildner }
528e5412f1eSSascha Wildner
5290d02842fSSascha Wildner (void) AcpiDmParseDeferredOps (Op);
5300d02842fSSascha Wildner
5310d02842fSSascha Wildner /* Now we can disassemble the method */
5320d02842fSSascha Wildner
5333cc0afc6SSascha Wildner AcpiGbl_DmOpt_Verbose = FALSE;
5340d02842fSSascha Wildner AcpiDmDisassemble (NULL, Op, 0);
5353cc0afc6SSascha Wildner AcpiGbl_DmOpt_Verbose = TRUE;
5360d02842fSSascha Wildner
5370d02842fSSascha Wildner AcpiPsDeleteParseTree (Op);
5380d02842fSSascha Wildner
5390d02842fSSascha Wildner /* Method cleanup */
5400d02842fSSascha Wildner
5410d02842fSSascha Wildner AcpiNsDeleteNamespaceSubtree (Method);
5420d02842fSSascha Wildner AcpiNsDeleteNamespaceByOwner (ObjDesc->Method.OwnerId);
5430d02842fSSascha Wildner AcpiUtReleaseOwnerId (&ObjDesc->Method.OwnerId);
5440d02842fSSascha Wildner return (AE_OK);
5450d02842fSSascha Wildner }
5462afeb59bSSascha Wildner #endif
5477b90aa48SSascha Wildner
548e5e174adSSascha Wildner
549e5e174adSSascha Wildner /*******************************************************************************
550e5e174adSSascha Wildner *
551c5a52fd3SSascha Wildner * FUNCTION: AcpiDbEvaluateObject
552e5e174adSSascha Wildner *
553c5a52fd3SSascha Wildner * PARAMETERS: Node - Namespace node for the object
554e5e174adSSascha Wildner *
555e5e174adSSascha Wildner * RETURN: Status
556e5e174adSSascha Wildner *
557c5a52fd3SSascha Wildner * DESCRIPTION: Main execution function for the Evaluate/Execute/All debugger
558c5a52fd3SSascha Wildner * commands.
559e5e174adSSascha Wildner *
560e5e174adSSascha Wildner ******************************************************************************/
561e5e174adSSascha Wildner
562e5e174adSSascha Wildner static ACPI_STATUS
AcpiDbEvaluateObject(ACPI_NAMESPACE_NODE * Node)563c5a52fd3SSascha Wildner AcpiDbEvaluateObject (
564c5a52fd3SSascha Wildner ACPI_NAMESPACE_NODE *Node)
565e5e174adSSascha Wildner {
566e5e174adSSascha Wildner char *Pathname;
567e5e174adSSascha Wildner UINT32 i;
568e5e174adSSascha Wildner ACPI_DEVICE_INFO *ObjInfo;
569e5e174adSSascha Wildner ACPI_OBJECT_LIST ParamObjects;
570e5e174adSSascha Wildner ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS];
571c5a52fd3SSascha Wildner ACPI_BUFFER ReturnObj;
572c5a52fd3SSascha Wildner ACPI_STATUS Status;
573e5e174adSSascha Wildner
574e5e174adSSascha Wildner
575e5e174adSSascha Wildner Pathname = AcpiNsGetExternalPathname (Node);
576e5e174adSSascha Wildner if (!Pathname)
577e5e174adSSascha Wildner {
578e5e174adSSascha Wildner return (AE_OK);
579e5e174adSSascha Wildner }
580e5e174adSSascha Wildner
581e5e174adSSascha Wildner /* Get the object info for number of method parameters */
582e5e174adSSascha Wildner
583c5a52fd3SSascha Wildner Status = AcpiGetObjectInfo (Node, &ObjInfo);
584e5e174adSSascha Wildner if (ACPI_FAILURE (Status))
585e5e174adSSascha Wildner {
586d638c6eeSSascha Wildner ACPI_FREE (Pathname);
587e5e174adSSascha Wildner return (Status);
588e5e174adSSascha Wildner }
589e5e174adSSascha Wildner
590e5e174adSSascha Wildner ParamObjects.Pointer = NULL;
591e5e174adSSascha Wildner ParamObjects.Count = 0;
592e5e174adSSascha Wildner
593e5e174adSSascha Wildner if (ObjInfo->Type == ACPI_TYPE_METHOD)
594e5e174adSSascha Wildner {
595e5e174adSSascha Wildner /* Setup default parameters */
596e5e174adSSascha Wildner
597e5e174adSSascha Wildner for (i = 0; i < ObjInfo->ParamCount; i++)
598e5e174adSSascha Wildner {
599e5e174adSSascha Wildner Params[i].Type = ACPI_TYPE_INTEGER;
600e5e174adSSascha Wildner Params[i].Integer.Value = 1;
601e5e174adSSascha Wildner }
602e5e174adSSascha Wildner
603e5e174adSSascha Wildner ParamObjects.Pointer = Params;
604e5e174adSSascha Wildner ParamObjects.Count = ObjInfo->ParamCount;
605e5e174adSSascha Wildner }
606e5e174adSSascha Wildner
607e5e174adSSascha Wildner ACPI_FREE (ObjInfo);
608e5e174adSSascha Wildner ReturnObj.Pointer = NULL;
609e5e174adSSascha Wildner ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
610e5e174adSSascha Wildner
611e5e174adSSascha Wildner /* Do the actual method execution */
612e5e174adSSascha Wildner
613e5e174adSSascha Wildner AcpiGbl_MethodExecuting = TRUE;
614e5e174adSSascha Wildner
615e5e174adSSascha Wildner Status = AcpiEvaluateObject (Node, NULL, &ParamObjects, &ReturnObj);
616c5a52fd3SSascha Wildner AcpiGbl_MethodExecuting = FALSE;
617e5e174adSSascha Wildner
618e5e174adSSascha Wildner AcpiOsPrintf ("%-32s returned %s\n", Pathname, AcpiFormatException (Status));
619c5a52fd3SSascha Wildner if (ReturnObj.Length)
620c5a52fd3SSascha Wildner {
621c5a52fd3SSascha Wildner AcpiOsPrintf ("Evaluation of %s returned object %p, "
622c5a52fd3SSascha Wildner "external buffer length %X\n",
623c5a52fd3SSascha Wildner Pathname, ReturnObj.Pointer, (UINT32) ReturnObj.Length);
624c5a52fd3SSascha Wildner
625c5a52fd3SSascha Wildner AcpiDbDumpExternalObject (ReturnObj.Pointer, 1);
626c5a52fd3SSascha Wildner AcpiOsPrintf ("\n");
627c5a52fd3SSascha Wildner }
628c5a52fd3SSascha Wildner
629e5e174adSSascha Wildner ACPI_FREE (Pathname);
630e5e174adSSascha Wildner
631e5e174adSSascha Wildner /* Ignore status from method execution */
632e5e174adSSascha Wildner
633c5a52fd3SSascha Wildner return (AE_OK);
634c5a52fd3SSascha Wildner
635c5a52fd3SSascha Wildner /* Update count, check if we have executed enough methods */
636c5a52fd3SSascha Wildner
637c5a52fd3SSascha Wildner }
638c5a52fd3SSascha Wildner
639c5a52fd3SSascha Wildner /*******************************************************************************
640c5a52fd3SSascha Wildner *
641c5a52fd3SSascha Wildner * FUNCTION: AcpiDbWalkForExecute
642c5a52fd3SSascha Wildner *
643c5a52fd3SSascha Wildner * PARAMETERS: Callback from WalkNamespace
644c5a52fd3SSascha Wildner *
645c5a52fd3SSascha Wildner * RETURN: Status
646c5a52fd3SSascha Wildner *
647c5a52fd3SSascha Wildner * DESCRIPTION: Batch execution function. Evaluates all "predefined" objects --
648c5a52fd3SSascha Wildner * the nameseg begins with an underscore.
649c5a52fd3SSascha Wildner *
650c5a52fd3SSascha Wildner ******************************************************************************/
651c5a52fd3SSascha Wildner
652c5a52fd3SSascha Wildner static ACPI_STATUS
AcpiDbWalkForExecute(ACPI_HANDLE ObjHandle,UINT32 NestingLevel,void * Context,void ** ReturnValue)653c5a52fd3SSascha Wildner AcpiDbWalkForExecute (
654c5a52fd3SSascha Wildner ACPI_HANDLE ObjHandle,
655c5a52fd3SSascha Wildner UINT32 NestingLevel,
656c5a52fd3SSascha Wildner void *Context,
657c5a52fd3SSascha Wildner void **ReturnValue)
658c5a52fd3SSascha Wildner {
659c5a52fd3SSascha Wildner ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
660c5a52fd3SSascha Wildner ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context;
661c5a52fd3SSascha Wildner ACPI_STATUS Status;
662c5a52fd3SSascha Wildner const ACPI_PREDEFINED_INFO *Predefined;
663c5a52fd3SSascha Wildner
664c5a52fd3SSascha Wildner
665c5a52fd3SSascha Wildner Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii);
666c5a52fd3SSascha Wildner if (!Predefined)
667c5a52fd3SSascha Wildner {
668c5a52fd3SSascha Wildner return (AE_OK);
669c5a52fd3SSascha Wildner }
670c5a52fd3SSascha Wildner
671c5a52fd3SSascha Wildner if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
672c5a52fd3SSascha Wildner {
673c5a52fd3SSascha Wildner return (AE_OK);
674c5a52fd3SSascha Wildner }
675c5a52fd3SSascha Wildner
676c5a52fd3SSascha Wildner AcpiDbEvaluateObject (Node);
677c5a52fd3SSascha Wildner
678c5a52fd3SSascha Wildner /* Ignore status from object evaluation */
679c5a52fd3SSascha Wildner
680e5e174adSSascha Wildner Status = AE_OK;
681e5e174adSSascha Wildner
682e5e174adSSascha Wildner /* Update count, check if we have executed enough methods */
683e5e174adSSascha Wildner
684e5e174adSSascha Wildner Info->Count++;
685e5e174adSSascha Wildner if (Info->Count >= Info->MaxCount)
686e5e174adSSascha Wildner {
687e5e174adSSascha Wildner Status = AE_CTRL_TERMINATE;
688e5e174adSSascha Wildner }
689e5e174adSSascha Wildner
690e5e174adSSascha Wildner return (Status);
691e5e174adSSascha Wildner }
692e5e174adSSascha Wildner
693e5e174adSSascha Wildner
694e5e174adSSascha Wildner /*******************************************************************************
695e5e174adSSascha Wildner *
696c5a52fd3SSascha Wildner * FUNCTION: AcpiDbWalkForExecuteAll
697c5a52fd3SSascha Wildner *
698c5a52fd3SSascha Wildner * PARAMETERS: Callback from WalkNamespace
699c5a52fd3SSascha Wildner *
700c5a52fd3SSascha Wildner * RETURN: Status
701c5a52fd3SSascha Wildner *
702c5a52fd3SSascha Wildner * DESCRIPTION: Batch execution function. Evaluates all objects whose path ends
703c5a52fd3SSascha Wildner * with the nameseg "Info->NameSeg". Used for the "ALL" command.
704c5a52fd3SSascha Wildner *
705c5a52fd3SSascha Wildner ******************************************************************************/
706c5a52fd3SSascha Wildner
707c5a52fd3SSascha Wildner static ACPI_STATUS
AcpiDbWalkForExecuteAll(ACPI_HANDLE ObjHandle,UINT32 NestingLevel,void * Context,void ** ReturnValue)708c5a52fd3SSascha Wildner AcpiDbWalkForExecuteAll (
709c5a52fd3SSascha Wildner ACPI_HANDLE ObjHandle,
710c5a52fd3SSascha Wildner UINT32 NestingLevel,
711c5a52fd3SSascha Wildner void *Context,
712c5a52fd3SSascha Wildner void **ReturnValue)
713c5a52fd3SSascha Wildner {
714c5a52fd3SSascha Wildner ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
715c5a52fd3SSascha Wildner ACPI_DB_EXECUTE_WALK *Info = (ACPI_DB_EXECUTE_WALK *) Context;
716c5a52fd3SSascha Wildner ACPI_STATUS Status;
717c5a52fd3SSascha Wildner
718c5a52fd3SSascha Wildner
719c5a52fd3SSascha Wildner if (!ACPI_COMPARE_NAMESEG (Node->Name.Ascii, Info->NameSeg))
720c5a52fd3SSascha Wildner {
721c5a52fd3SSascha Wildner return (AE_OK);
722c5a52fd3SSascha Wildner }
723c5a52fd3SSascha Wildner
724c5a52fd3SSascha Wildner if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
725c5a52fd3SSascha Wildner {
726c5a52fd3SSascha Wildner return (AE_OK);
727c5a52fd3SSascha Wildner }
728c5a52fd3SSascha Wildner
729c5a52fd3SSascha Wildner /* Now evaluate the input object (node) */
730c5a52fd3SSascha Wildner
731c5a52fd3SSascha Wildner AcpiDbEvaluateObject (Node);
732c5a52fd3SSascha Wildner
733c5a52fd3SSascha Wildner /* Ignore status from method execution */
734c5a52fd3SSascha Wildner
735c5a52fd3SSascha Wildner Status = AE_OK;
736c5a52fd3SSascha Wildner
737c5a52fd3SSascha Wildner /* Update count of executed methods/objects */
738c5a52fd3SSascha Wildner
739c5a52fd3SSascha Wildner Info->Count++;
740c5a52fd3SSascha Wildner return (Status);
741c5a52fd3SSascha Wildner }
742c5a52fd3SSascha Wildner
743c5a52fd3SSascha Wildner
744c5a52fd3SSascha Wildner /*******************************************************************************
745c5a52fd3SSascha Wildner *
746e5e174adSSascha Wildner * FUNCTION: AcpiDbEvaluatePredefinedNames
747e5e174adSSascha Wildner *
748e5e174adSSascha Wildner * PARAMETERS: None
749e5e174adSSascha Wildner *
750e5e174adSSascha Wildner * RETURN: None
751e5e174adSSascha Wildner *
752e5e174adSSascha Wildner * DESCRIPTION: Namespace batch execution. Execute predefined names in the
753e5e174adSSascha Wildner * namespace, up to the max count, if specified.
754e5e174adSSascha Wildner *
755e5e174adSSascha Wildner ******************************************************************************/
756e5e174adSSascha Wildner
757e5e174adSSascha Wildner void
AcpiDbEvaluatePredefinedNames(void)758e5e174adSSascha Wildner AcpiDbEvaluatePredefinedNames (
759e5e174adSSascha Wildner void)
760e5e174adSSascha Wildner {
761e5e174adSSascha Wildner ACPI_DB_EXECUTE_WALK Info;
762e5e174adSSascha Wildner
763e5e174adSSascha Wildner
764e5e174adSSascha Wildner Info.Count = 0;
765e5e174adSSascha Wildner Info.MaxCount = ACPI_UINT32_MAX;
766e5e174adSSascha Wildner
767e5e174adSSascha Wildner /* Search all nodes in namespace */
768e5e174adSSascha Wildner
769e5e174adSSascha Wildner (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
770e5e174adSSascha Wildner AcpiDbWalkForExecute, NULL, (void *) &Info, NULL);
771e5e174adSSascha Wildner
772e5e174adSSascha Wildner AcpiOsPrintf ("Evaluated %u predefined names in the namespace\n", Info.Count);
773e5e174adSSascha Wildner }
774e5e174adSSascha Wildner
775c5a52fd3SSascha Wildner
776c5a52fd3SSascha Wildner /*******************************************************************************
777c5a52fd3SSascha Wildner *
778c5a52fd3SSascha Wildner * FUNCTION: AcpiDbEvaluateAll
779c5a52fd3SSascha Wildner *
780c5a52fd3SSascha Wildner * PARAMETERS: NoneAcpiGbl_DbMethodInfo
781c5a52fd3SSascha Wildner *
782c5a52fd3SSascha Wildner * RETURN: None
783c5a52fd3SSascha Wildner *
784c5a52fd3SSascha Wildner * DESCRIPTION: Namespace batch execution. Implements the "ALL" command.
785c5a52fd3SSascha Wildner * Execute all namepaths whose final nameseg matches the
786c5a52fd3SSascha Wildner * input nameseg.
787c5a52fd3SSascha Wildner *
788c5a52fd3SSascha Wildner ******************************************************************************/
789c5a52fd3SSascha Wildner
790c5a52fd3SSascha Wildner void
AcpiDbEvaluateAll(char * NameSeg)791c5a52fd3SSascha Wildner AcpiDbEvaluateAll (
792c5a52fd3SSascha Wildner char *NameSeg)
793c5a52fd3SSascha Wildner {
794c5a52fd3SSascha Wildner ACPI_DB_EXECUTE_WALK Info;
795c5a52fd3SSascha Wildner
796c5a52fd3SSascha Wildner
797c5a52fd3SSascha Wildner Info.Count = 0;
798c5a52fd3SSascha Wildner Info.MaxCount = ACPI_UINT32_MAX;
799c5a52fd3SSascha Wildner ACPI_COPY_NAMESEG (Info.NameSeg, NameSeg);
800c5a52fd3SSascha Wildner Info.NameSeg[ACPI_NAMESEG_SIZE] = 0;
801c5a52fd3SSascha Wildner
802c5a52fd3SSascha Wildner /* Search all nodes in namespace */
803c5a52fd3SSascha Wildner
804c5a52fd3SSascha Wildner (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
805c5a52fd3SSascha Wildner AcpiDbWalkForExecuteAll, NULL, (void *) &Info, NULL);
806c5a52fd3SSascha Wildner
807c5a52fd3SSascha Wildner AcpiOsPrintf ("Evaluated %u names in the namespace\n", Info.Count);
808c5a52fd3SSascha Wildner }
809c5a52fd3SSascha Wildner
8107b90aa48SSascha Wildner #endif /* ACPI_DEBUGGER */
811