xref: /freebsd/sys/contrib/dev/acpica/components/debugger/dbcmds.c (revision 722b16673c40aedf280895f2f2f676bb494518d7)
1a159c266SJung-uk Kim /*******************************************************************************
2a159c266SJung-uk Kim  *
3a159c266SJung-uk Kim  * Module Name: dbcmds - Miscellaneous debug commands and output routines
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*722b1667SJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2023, 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/acevents.h>
155a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acdebug.h>
156a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acnamesp.h>
157a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acresrc.h>
158a159c266SJung-uk Kim #include <contrib/dev/acpica/include/actables.h>
159a159c266SJung-uk Kim 
160a159c266SJung-uk Kim 
161a159c266SJung-uk Kim #define _COMPONENT          ACPI_CA_DEBUGGER
162a159c266SJung-uk Kim         ACPI_MODULE_NAME    ("dbcmds")
163a159c266SJung-uk Kim 
164a159c266SJung-uk Kim 
165a159c266SJung-uk Kim /* Local prototypes */
166a159c266SJung-uk Kim 
167a159c266SJung-uk Kim static void
168a159c266SJung-uk Kim AcpiDmCompareAmlResources (
169a159c266SJung-uk Kim     UINT8                   *Aml1Buffer,
170a159c266SJung-uk Kim     ACPI_RSDESC_SIZE        Aml1BufferLength,
171a159c266SJung-uk Kim     UINT8                   *Aml2Buffer,
172a159c266SJung-uk Kim     ACPI_RSDESC_SIZE        Aml2BufferLength);
173a159c266SJung-uk Kim 
174a159c266SJung-uk Kim static ACPI_STATUS
175a159c266SJung-uk Kim AcpiDmTestResourceConversion (
176a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *Node,
177a159c266SJung-uk Kim     char                    *Name);
178a159c266SJung-uk Kim 
179a159c266SJung-uk Kim static ACPI_STATUS
180a159c266SJung-uk Kim AcpiDbResourceCallback (
181a159c266SJung-uk Kim     ACPI_RESOURCE           *Resource,
182a159c266SJung-uk Kim     void                    *Context);
183a159c266SJung-uk Kim 
184a159c266SJung-uk Kim static ACPI_STATUS
185a159c266SJung-uk Kim AcpiDbDeviceResources (
186a159c266SJung-uk Kim     ACPI_HANDLE             ObjHandle,
187a159c266SJung-uk Kim     UINT32                  NestingLevel,
188a159c266SJung-uk Kim     void                    *Context,
189a159c266SJung-uk Kim     void                    **ReturnValue);
190a159c266SJung-uk Kim 
191efcc2a30SJung-uk Kim static void
192efcc2a30SJung-uk Kim AcpiDbDoOneSleepState (
193efcc2a30SJung-uk Kim     UINT8                   SleepState);
194efcc2a30SJung-uk Kim 
195a159c266SJung-uk Kim 
196fe0f0bbbSJung-uk Kim static char                 *AcpiDbTraceMethodName = NULL;
197fe0f0bbbSJung-uk Kim 
19870e6ab8fSJung-uk Kim 
199a159c266SJung-uk Kim /*******************************************************************************
200a159c266SJung-uk Kim  *
201a159c266SJung-uk Kim  * FUNCTION:    AcpiDbConvertToNode
202a159c266SJung-uk Kim  *
203a159c266SJung-uk Kim  * PARAMETERS:  InString            - String to convert
204a159c266SJung-uk Kim  *
205a159c266SJung-uk Kim  * RETURN:      Pointer to a NS node
206a159c266SJung-uk Kim  *
207a159c266SJung-uk Kim  * DESCRIPTION: Convert a string to a valid NS pointer. Handles numeric or
208efcc2a30SJung-uk Kim  *              alphanumeric strings.
209a159c266SJung-uk Kim  *
210a159c266SJung-uk Kim  ******************************************************************************/
211a159c266SJung-uk Kim 
212a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *
213a159c266SJung-uk Kim AcpiDbConvertToNode (
214a159c266SJung-uk Kim     char                    *InString)
215a159c266SJung-uk Kim {
216a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *Node;
2178d744e47SJung-uk Kim     ACPI_SIZE               Address;
218a159c266SJung-uk Kim 
219a159c266SJung-uk Kim 
220a159c266SJung-uk Kim     if ((*InString >= 0x30) && (*InString <= 0x39))
221a159c266SJung-uk Kim     {
222a159c266SJung-uk Kim         /* Numeric argument, convert */
223a159c266SJung-uk Kim 
2245ef50723SJung-uk Kim         Address = strtoul (InString, NULL, 16);
2258d744e47SJung-uk Kim         Node = ACPI_TO_POINTER (Address);
226a159c266SJung-uk Kim         if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE)))
227a159c266SJung-uk Kim         {
228f8146b88SJung-uk Kim             AcpiOsPrintf ("Address %p is invalid", Node);
229a159c266SJung-uk Kim             return (NULL);
230a159c266SJung-uk Kim         }
231a159c266SJung-uk Kim 
232a159c266SJung-uk Kim         /* Make sure pointer is valid NS node */
233a159c266SJung-uk Kim 
234a159c266SJung-uk Kim         if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
235a159c266SJung-uk Kim         {
236313a0c13SJung-uk Kim             AcpiOsPrintf ("Address %p is not a valid namespace node [%s]\n",
237a159c266SJung-uk Kim                 Node, AcpiUtGetDescriptorName (Node));
238a159c266SJung-uk Kim             return (NULL);
239a159c266SJung-uk Kim         }
240a159c266SJung-uk Kim     }
241a159c266SJung-uk Kim     else
242a159c266SJung-uk Kim     {
243efcc2a30SJung-uk Kim         /*
244efcc2a30SJung-uk Kim          * Alpha argument: The parameter is a name string that must be
245efcc2a30SJung-uk Kim          * resolved to a Namespace object.
246a159c266SJung-uk Kim          */
247a159c266SJung-uk Kim         Node = AcpiDbLocalNsLookup (InString);
248a159c266SJung-uk Kim         if (!Node)
249a159c266SJung-uk Kim         {
25070e6ab8fSJung-uk Kim             AcpiOsPrintf (
25170e6ab8fSJung-uk Kim                 "Could not find [%s] in namespace, defaulting to root node\n",
252313a0c13SJung-uk Kim                 InString);
253a159c266SJung-uk Kim             Node = AcpiGbl_RootNode;
254a159c266SJung-uk Kim         }
255a159c266SJung-uk Kim     }
256a159c266SJung-uk Kim 
257a159c266SJung-uk Kim     return (Node);
258a159c266SJung-uk Kim }
259a159c266SJung-uk Kim 
260a159c266SJung-uk Kim 
261a159c266SJung-uk Kim /*******************************************************************************
262a159c266SJung-uk Kim  *
263a159c266SJung-uk Kim  * FUNCTION:    AcpiDbSleep
264a159c266SJung-uk Kim  *
265efcc2a30SJung-uk Kim  * PARAMETERS:  ObjectArg           - Desired sleep state (0-5). NULL means
266efcc2a30SJung-uk Kim  *                                    invoke all possible sleep states.
267a159c266SJung-uk Kim  *
268a159c266SJung-uk Kim  * RETURN:      Status
269a159c266SJung-uk Kim  *
270efcc2a30SJung-uk Kim  * DESCRIPTION: Simulate sleep/wake sequences
271a159c266SJung-uk Kim  *
272a159c266SJung-uk Kim  ******************************************************************************/
273a159c266SJung-uk Kim 
274a159c266SJung-uk Kim ACPI_STATUS
275a159c266SJung-uk Kim AcpiDbSleep (
276a159c266SJung-uk Kim     char                    *ObjectArg)
277a159c266SJung-uk Kim {
278a159c266SJung-uk Kim     UINT8                   SleepState;
279efcc2a30SJung-uk Kim     UINT32                  i;
280a159c266SJung-uk Kim 
281a159c266SJung-uk Kim 
282a159c266SJung-uk Kim     ACPI_FUNCTION_TRACE (AcpiDbSleep);
283a159c266SJung-uk Kim 
284a159c266SJung-uk Kim 
285efcc2a30SJung-uk Kim     /* Null input (no arguments) means to invoke all sleep states */
286a159c266SJung-uk Kim 
287efcc2a30SJung-uk Kim     if (!ObjectArg)
288efcc2a30SJung-uk Kim     {
289efcc2a30SJung-uk Kim         AcpiOsPrintf ("Invoking all possible sleep states, 0-%d\n",
290efcc2a30SJung-uk Kim             ACPI_S_STATES_MAX);
291efcc2a30SJung-uk Kim 
292efcc2a30SJung-uk Kim         for (i = 0; i <= ACPI_S_STATES_MAX; i++)
293efcc2a30SJung-uk Kim         {
294efcc2a30SJung-uk Kim             AcpiDbDoOneSleepState ((UINT8) i);
295efcc2a30SJung-uk Kim         }
296efcc2a30SJung-uk Kim 
297efcc2a30SJung-uk Kim         return_ACPI_STATUS (AE_OK);
298efcc2a30SJung-uk Kim     }
299efcc2a30SJung-uk Kim 
300efcc2a30SJung-uk Kim     /* Convert argument to binary and invoke the sleep state */
301efcc2a30SJung-uk Kim 
3025ef50723SJung-uk Kim     SleepState = (UINT8) strtoul (ObjectArg, NULL, 0);
303efcc2a30SJung-uk Kim     AcpiDbDoOneSleepState (SleepState);
304efcc2a30SJung-uk Kim     return_ACPI_STATUS (AE_OK);
305efcc2a30SJung-uk Kim }
306efcc2a30SJung-uk Kim 
307efcc2a30SJung-uk Kim 
308efcc2a30SJung-uk Kim /*******************************************************************************
309efcc2a30SJung-uk Kim  *
310efcc2a30SJung-uk Kim  * FUNCTION:    AcpiDbDoOneSleepState
311efcc2a30SJung-uk Kim  *
312efcc2a30SJung-uk Kim  * PARAMETERS:  SleepState          - Desired sleep state (0-5)
313efcc2a30SJung-uk Kim  *
31470e6ab8fSJung-uk Kim  * RETURN:      None
315efcc2a30SJung-uk Kim  *
316efcc2a30SJung-uk Kim  * DESCRIPTION: Simulate a sleep/wake sequence
317efcc2a30SJung-uk Kim  *
318efcc2a30SJung-uk Kim  ******************************************************************************/
319efcc2a30SJung-uk Kim 
320efcc2a30SJung-uk Kim static void
321efcc2a30SJung-uk Kim AcpiDbDoOneSleepState (
322efcc2a30SJung-uk Kim     UINT8                   SleepState)
323efcc2a30SJung-uk Kim {
324efcc2a30SJung-uk Kim     ACPI_STATUS             Status;
325efcc2a30SJung-uk Kim     UINT8                   SleepTypeA;
326efcc2a30SJung-uk Kim     UINT8                   SleepTypeB;
327efcc2a30SJung-uk Kim 
328efcc2a30SJung-uk Kim 
329efcc2a30SJung-uk Kim     /* Validate parameter */
330efcc2a30SJung-uk Kim 
331efcc2a30SJung-uk Kim     if (SleepState > ACPI_S_STATES_MAX)
332efcc2a30SJung-uk Kim     {
333efcc2a30SJung-uk Kim         AcpiOsPrintf ("Sleep state %d out of range (%d max)\n",
334efcc2a30SJung-uk Kim             SleepState, ACPI_S_STATES_MAX);
335efcc2a30SJung-uk Kim         return;
336efcc2a30SJung-uk Kim     }
337efcc2a30SJung-uk Kim 
338efcc2a30SJung-uk Kim     AcpiOsPrintf ("\n---- Invoking sleep state S%d (%s):\n",
339efcc2a30SJung-uk Kim         SleepState, AcpiGbl_SleepStateNames[SleepState]);
340efcc2a30SJung-uk Kim 
341efcc2a30SJung-uk Kim     /* Get the values for the sleep type registers (for display only) */
342efcc2a30SJung-uk Kim 
343efcc2a30SJung-uk Kim     Status = AcpiGetSleepTypeData (SleepState, &SleepTypeA, &SleepTypeB);
344efcc2a30SJung-uk Kim     if (ACPI_FAILURE (Status))
345efcc2a30SJung-uk Kim     {
346efcc2a30SJung-uk Kim         AcpiOsPrintf ("Could not evaluate [%s] method, %s\n",
347efcc2a30SJung-uk Kim             AcpiGbl_SleepStateNames[SleepState],
348efcc2a30SJung-uk Kim             AcpiFormatException (Status));
349efcc2a30SJung-uk Kim         return;
350efcc2a30SJung-uk Kim     }
351efcc2a30SJung-uk Kim 
352efcc2a30SJung-uk Kim     AcpiOsPrintf (
353efcc2a30SJung-uk Kim         "Register values for sleep state S%d: Sleep-A: %.2X, Sleep-B: %.2X\n",
354efcc2a30SJung-uk Kim         SleepState, SleepTypeA, SleepTypeB);
355efcc2a30SJung-uk Kim 
356efcc2a30SJung-uk Kim     /* Invoke the various sleep/wake interfaces */
357efcc2a30SJung-uk Kim 
358efcc2a30SJung-uk Kim     AcpiOsPrintf ("**** Sleep: Prepare to sleep (S%d) ****\n",
359efcc2a30SJung-uk Kim         SleepState);
360a159c266SJung-uk Kim     Status = AcpiEnterSleepStatePrep (SleepState);
361a159c266SJung-uk Kim     if (ACPI_FAILURE (Status))
362a159c266SJung-uk Kim     {
363a159c266SJung-uk Kim         goto ErrorExit;
364a159c266SJung-uk Kim     }
365a159c266SJung-uk Kim 
366efcc2a30SJung-uk Kim     AcpiOsPrintf ("**** Sleep: Going to sleep (S%d) ****\n",
367efcc2a30SJung-uk Kim         SleepState);
3681df130f1SJung-uk Kim     Status = AcpiEnterSleepState (SleepState);
369a159c266SJung-uk Kim     if (ACPI_FAILURE (Status))
370a159c266SJung-uk Kim     {
371a159c266SJung-uk Kim         goto ErrorExit;
372a159c266SJung-uk Kim     }
373a159c266SJung-uk Kim 
374efcc2a30SJung-uk Kim     AcpiOsPrintf ("**** Wake: Prepare to return from sleep (S%d) ****\n",
375efcc2a30SJung-uk Kim         SleepState);
3761df130f1SJung-uk Kim     Status = AcpiLeaveSleepStatePrep (SleepState);
377a159c266SJung-uk Kim     if (ACPI_FAILURE (Status))
378a159c266SJung-uk Kim     {
379a159c266SJung-uk Kim         goto ErrorExit;
380a159c266SJung-uk Kim     }
381a159c266SJung-uk Kim 
382efcc2a30SJung-uk Kim     AcpiOsPrintf ("**** Wake: Return from sleep (S%d) ****\n",
383efcc2a30SJung-uk Kim         SleepState);
384a159c266SJung-uk Kim     Status = AcpiLeaveSleepState (SleepState);
385a159c266SJung-uk Kim     if (ACPI_FAILURE (Status))
386a159c266SJung-uk Kim     {
387a159c266SJung-uk Kim         goto ErrorExit;
388a159c266SJung-uk Kim     }
389a159c266SJung-uk Kim 
390efcc2a30SJung-uk Kim     return;
391a159c266SJung-uk Kim 
392a159c266SJung-uk Kim 
393a159c266SJung-uk Kim ErrorExit:
394efcc2a30SJung-uk Kim     ACPI_EXCEPTION ((AE_INFO, Status, "During invocation of sleep state S%d",
395efcc2a30SJung-uk Kim         SleepState));
396a159c266SJung-uk Kim }
397a159c266SJung-uk Kim 
398a159c266SJung-uk Kim 
399a159c266SJung-uk Kim /*******************************************************************************
400a159c266SJung-uk Kim  *
401a159c266SJung-uk Kim  * FUNCTION:    AcpiDbDisplayLocks
402a159c266SJung-uk Kim  *
403a159c266SJung-uk Kim  * PARAMETERS:  None
404a159c266SJung-uk Kim  *
405a159c266SJung-uk Kim  * RETURN:      None
406a159c266SJung-uk Kim  *
407a159c266SJung-uk Kim  * DESCRIPTION: Display information about internal mutexes.
408a159c266SJung-uk Kim  *
409a159c266SJung-uk Kim  ******************************************************************************/
410a159c266SJung-uk Kim 
411a159c266SJung-uk Kim void
412a159c266SJung-uk Kim AcpiDbDisplayLocks (
413a159c266SJung-uk Kim     void)
414a159c266SJung-uk Kim {
415a159c266SJung-uk Kim     UINT32                  i;
416a159c266SJung-uk Kim 
417a159c266SJung-uk Kim 
418a159c266SJung-uk Kim     for (i = 0; i < ACPI_MAX_MUTEX; i++)
419a159c266SJung-uk Kim     {
420a159c266SJung-uk Kim         AcpiOsPrintf ("%26s : %s\n", AcpiUtGetMutexName (i),
421a159c266SJung-uk Kim             AcpiGbl_MutexInfo[i].ThreadId == ACPI_MUTEX_NOT_ACQUIRED
422a159c266SJung-uk Kim                 ? "Locked" : "Unlocked");
423a159c266SJung-uk Kim     }
424a159c266SJung-uk Kim }
425a159c266SJung-uk Kim 
426a159c266SJung-uk Kim 
427a159c266SJung-uk Kim /*******************************************************************************
428a159c266SJung-uk Kim  *
429a159c266SJung-uk Kim  * FUNCTION:    AcpiDbDisplayTableInfo
430a159c266SJung-uk Kim  *
431efcc2a30SJung-uk Kim  * PARAMETERS:  TableArg            - Name of table to be displayed
432a159c266SJung-uk Kim  *
433a159c266SJung-uk Kim  * RETURN:      None
434a159c266SJung-uk Kim  *
435a159c266SJung-uk Kim  * DESCRIPTION: Display information about loaded tables. Current
436a159c266SJung-uk Kim  *              implementation displays all loaded tables.
437a159c266SJung-uk Kim  *
438a159c266SJung-uk Kim  ******************************************************************************/
439a159c266SJung-uk Kim 
440a159c266SJung-uk Kim void
441a159c266SJung-uk Kim AcpiDbDisplayTableInfo (
442a159c266SJung-uk Kim     char                    *TableArg)
443a159c266SJung-uk Kim {
444a159c266SJung-uk Kim     UINT32                  i;
445a159c266SJung-uk Kim     ACPI_TABLE_DESC         *TableDesc;
446a159c266SJung-uk Kim     ACPI_STATUS             Status;
447a159c266SJung-uk Kim 
448a159c266SJung-uk Kim 
449e8241eabSJung-uk Kim     /* Header */
450e8241eabSJung-uk Kim 
45170e6ab8fSJung-uk Kim     AcpiOsPrintf ("Idx ID    Status Type                    "
45270e6ab8fSJung-uk Kim         "TableHeader (Sig, Address, Length, Misc)\n");
453e8241eabSJung-uk Kim 
454a159c266SJung-uk Kim     /* Walk the entire root table list */
455a159c266SJung-uk Kim 
456a159c266SJung-uk Kim     for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
457a159c266SJung-uk Kim     {
458a159c266SJung-uk Kim         TableDesc = &AcpiGbl_RootTableList.Tables[i];
459e8241eabSJung-uk Kim 
460e8241eabSJung-uk Kim         /* Index and Table ID */
461e8241eabSJung-uk Kim 
462e8241eabSJung-uk Kim         AcpiOsPrintf ("%3u %.2u ", i, TableDesc->OwnerId);
463e8241eabSJung-uk Kim 
464e8241eabSJung-uk Kim         /* Decode the table flags */
465e8241eabSJung-uk Kim 
466e8241eabSJung-uk Kim         if (!(TableDesc->Flags & ACPI_TABLE_IS_LOADED))
467e8241eabSJung-uk Kim         {
468e8241eabSJung-uk Kim             AcpiOsPrintf ("NotLoaded ");
469e8241eabSJung-uk Kim         }
470e8241eabSJung-uk Kim         else
471e8241eabSJung-uk Kim         {
472e8241eabSJung-uk Kim             AcpiOsPrintf ("   Loaded ");
473e8241eabSJung-uk Kim         }
474e8241eabSJung-uk Kim 
475e8241eabSJung-uk Kim         switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
476e8241eabSJung-uk Kim         {
477313a0c13SJung-uk Kim         case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
478a9d8d09cSJung-uk Kim 
479313a0c13SJung-uk Kim             AcpiOsPrintf ("External/virtual  ");
480e8241eabSJung-uk Kim             break;
481e8241eabSJung-uk Kim 
482313a0c13SJung-uk Kim         case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
483a9d8d09cSJung-uk Kim 
484313a0c13SJung-uk Kim             AcpiOsPrintf ("Internal/physical ");
485e8241eabSJung-uk Kim             break;
486e8241eabSJung-uk Kim 
487313a0c13SJung-uk Kim         case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
488a9d8d09cSJung-uk Kim 
489313a0c13SJung-uk Kim             AcpiOsPrintf ("Internal/virtual  ");
490e8241eabSJung-uk Kim             break;
491e8241eabSJung-uk Kim 
492e8241eabSJung-uk Kim         default:
493a9d8d09cSJung-uk Kim 
494313a0c13SJung-uk Kim             AcpiOsPrintf ("INVALID TYPE      ");
495e8241eabSJung-uk Kim             break;
496e8241eabSJung-uk Kim         }
497a159c266SJung-uk Kim 
498a159c266SJung-uk Kim         /* Make sure that the table is mapped */
499a159c266SJung-uk Kim 
500313a0c13SJung-uk Kim         Status = AcpiTbValidateTable (TableDesc);
501a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
502a159c266SJung-uk Kim         {
503a159c266SJung-uk Kim             return;
504a159c266SJung-uk Kim         }
505a159c266SJung-uk Kim 
506a159c266SJung-uk Kim         /* Dump the table header */
507a159c266SJung-uk Kim 
508a159c266SJung-uk Kim         if (TableDesc->Pointer)
509a159c266SJung-uk Kim         {
510a159c266SJung-uk Kim             AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer);
511a159c266SJung-uk Kim         }
512a159c266SJung-uk Kim         else
513a159c266SJung-uk Kim         {
514a159c266SJung-uk Kim             /* If the pointer is null, the table has been unloaded */
515a159c266SJung-uk Kim 
516f8146b88SJung-uk Kim             ACPI_INFO (("%4.4s - Table has been unloaded",
517a159c266SJung-uk Kim                 TableDesc->Signature.Ascii));
518a159c266SJung-uk Kim         }
519a159c266SJung-uk Kim     }
520a159c266SJung-uk Kim }
521a159c266SJung-uk Kim 
522a159c266SJung-uk Kim 
523a159c266SJung-uk Kim /*******************************************************************************
524a159c266SJung-uk Kim  *
525a159c266SJung-uk Kim  * FUNCTION:    AcpiDbUnloadAcpiTable
526a159c266SJung-uk Kim  *
527e8241eabSJung-uk Kim  * PARAMETERS:  ObjectName          - Namespace pathname for an object that
528e8241eabSJung-uk Kim  *                                    is owned by the table to be unloaded
529a159c266SJung-uk Kim  *
530e8241eabSJung-uk Kim  * RETURN:      None
531a159c266SJung-uk Kim  *
532e8241eabSJung-uk Kim  * DESCRIPTION: Unload an ACPI table, via any namespace node that is owned
533e8241eabSJung-uk Kim  *              by the table.
534a159c266SJung-uk Kim  *
535a159c266SJung-uk Kim  ******************************************************************************/
536a159c266SJung-uk Kim 
537a159c266SJung-uk Kim void
538a159c266SJung-uk Kim AcpiDbUnloadAcpiTable (
539e8241eabSJung-uk Kim     char                    *ObjectName)
540a159c266SJung-uk Kim {
541e8241eabSJung-uk Kim     ACPI_NAMESPACE_NODE     *Node;
542a159c266SJung-uk Kim     ACPI_STATUS             Status;
543a159c266SJung-uk Kim 
544a159c266SJung-uk Kim 
545e8241eabSJung-uk Kim     /* Translate name to an Named object */
546a159c266SJung-uk Kim 
547e8241eabSJung-uk Kim     Node = AcpiDbConvertToNode (ObjectName);
548e8241eabSJung-uk Kim     if (!Node)
549a159c266SJung-uk Kim     {
550e8241eabSJung-uk Kim         return;
551e8241eabSJung-uk Kim     }
552a159c266SJung-uk Kim 
553e8241eabSJung-uk Kim     Status = AcpiUnloadParentTable (ACPI_CAST_PTR (ACPI_HANDLE, Node));
554a159c266SJung-uk Kim     if (ACPI_SUCCESS (Status))
555a159c266SJung-uk Kim     {
556e8241eabSJung-uk Kim         AcpiOsPrintf ("Parent of [%s] (%p) unloaded and uninstalled\n",
557e8241eabSJung-uk Kim             ObjectName, Node);
558a159c266SJung-uk Kim     }
559a159c266SJung-uk Kim     else
560a159c266SJung-uk Kim     {
561e8241eabSJung-uk Kim         AcpiOsPrintf ("%s, while unloading parent table of [%s]\n",
562e8241eabSJung-uk Kim             AcpiFormatException (Status), ObjectName);
563a159c266SJung-uk Kim     }
564a159c266SJung-uk Kim }
565a159c266SJung-uk Kim 
566a159c266SJung-uk Kim 
567a159c266SJung-uk Kim /*******************************************************************************
568a159c266SJung-uk Kim  *
569a159c266SJung-uk Kim  * FUNCTION:    AcpiDbSendNotify
570a159c266SJung-uk Kim  *
571efcc2a30SJung-uk Kim  * PARAMETERS:  Name                - Name of ACPI object where to send notify
572a159c266SJung-uk Kim  *              Value               - Value of the notify to send.
573a159c266SJung-uk Kim  *
574a159c266SJung-uk Kim  * RETURN:      None
575a159c266SJung-uk Kim  *
576a159c266SJung-uk Kim  * DESCRIPTION: Send an ACPI notification. The value specified is sent to the
577a159c266SJung-uk Kim  *              named object as an ACPI notify.
578a159c266SJung-uk Kim  *
579a159c266SJung-uk Kim  ******************************************************************************/
580a159c266SJung-uk Kim 
581a159c266SJung-uk Kim void
582a159c266SJung-uk Kim AcpiDbSendNotify (
583a159c266SJung-uk Kim     char                    *Name,
584a159c266SJung-uk Kim     UINT32                  Value)
585a159c266SJung-uk Kim {
586a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *Node;
587a159c266SJung-uk Kim     ACPI_STATUS             Status;
588a159c266SJung-uk Kim 
589a159c266SJung-uk Kim 
590a159c266SJung-uk Kim     /* Translate name to an Named object */
591a159c266SJung-uk Kim 
592a159c266SJung-uk Kim     Node = AcpiDbConvertToNode (Name);
593a159c266SJung-uk Kim     if (!Node)
594a159c266SJung-uk Kim     {
595a159c266SJung-uk Kim         return;
596a159c266SJung-uk Kim     }
597a159c266SJung-uk Kim 
598eef1b955SJung-uk Kim     /* Dispatch the notify if legal */
599a159c266SJung-uk Kim 
600eef1b955SJung-uk Kim     if (AcpiEvIsNotifyObject (Node))
601a159c266SJung-uk Kim     {
602a159c266SJung-uk Kim         Status = AcpiEvQueueNotifyRequest (Node, Value);
603a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
604a159c266SJung-uk Kim         {
605a159c266SJung-uk Kim             AcpiOsPrintf ("Could not queue notify\n");
606a159c266SJung-uk Kim         }
607eef1b955SJung-uk Kim     }
608eef1b955SJung-uk Kim     else
609eef1b955SJung-uk Kim     {
610efcc2a30SJung-uk Kim         AcpiOsPrintf (
61170e6ab8fSJung-uk Kim             "Named object [%4.4s] Type %s, "
61270e6ab8fSJung-uk Kim             "must be Device/Thermal/Processor type\n",
613eef1b955SJung-uk Kim             AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type));
614a159c266SJung-uk Kim     }
615a159c266SJung-uk Kim }
616a159c266SJung-uk Kim 
617a159c266SJung-uk Kim 
618a159c266SJung-uk Kim /*******************************************************************************
619a159c266SJung-uk Kim  *
620a159c266SJung-uk Kim  * FUNCTION:    AcpiDbDisplayInterfaces
621a159c266SJung-uk Kim  *
622a159c266SJung-uk Kim  * PARAMETERS:  ActionArg           - Null, "install", or "remove"
623a159c266SJung-uk Kim  *              InterfaceNameArg    - Name for install/remove options
624a159c266SJung-uk Kim  *
625a159c266SJung-uk Kim  * RETURN:      None
626a159c266SJung-uk Kim  *
627a159c266SJung-uk Kim  * DESCRIPTION: Display or modify the global _OSI interface list
628a159c266SJung-uk Kim  *
629a159c266SJung-uk Kim  ******************************************************************************/
630a159c266SJung-uk Kim 
631a159c266SJung-uk Kim void
632a159c266SJung-uk Kim AcpiDbDisplayInterfaces (
633a159c266SJung-uk Kim     char                    *ActionArg,
634a159c266SJung-uk Kim     char                    *InterfaceNameArg)
635a159c266SJung-uk Kim {
636a159c266SJung-uk Kim     ACPI_INTERFACE_INFO     *NextInterface;
637a159c266SJung-uk Kim     char                    *SubString;
638a159c266SJung-uk Kim     ACPI_STATUS             Status;
639a159c266SJung-uk Kim 
640a159c266SJung-uk Kim 
641a159c266SJung-uk Kim     /* If no arguments, just display current interface list */
642a159c266SJung-uk Kim 
643a159c266SJung-uk Kim     if (!ActionArg)
644a159c266SJung-uk Kim     {
64570e6ab8fSJung-uk Kim         (void) AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
646a159c266SJung-uk Kim 
647a159c266SJung-uk Kim         NextInterface = AcpiGbl_SupportedInterfaces;
648a159c266SJung-uk Kim         while (NextInterface)
649a159c266SJung-uk Kim         {
650a159c266SJung-uk Kim             if (!(NextInterface->Flags & ACPI_OSI_INVALID))
651a159c266SJung-uk Kim             {
652a159c266SJung-uk Kim                 AcpiOsPrintf ("%s\n", NextInterface->Name);
653a159c266SJung-uk Kim             }
65470e6ab8fSJung-uk Kim 
655a159c266SJung-uk Kim             NextInterface = NextInterface->Next;
656a159c266SJung-uk Kim         }
657a159c266SJung-uk Kim 
658a159c266SJung-uk Kim         AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
659a159c266SJung-uk Kim         return;
660a159c266SJung-uk Kim     }
661a159c266SJung-uk Kim 
662a159c266SJung-uk Kim     /* If ActionArg exists, so must InterfaceNameArg */
663a159c266SJung-uk Kim 
664a159c266SJung-uk Kim     if (!InterfaceNameArg)
665a159c266SJung-uk Kim     {
666a159c266SJung-uk Kim         AcpiOsPrintf ("Missing Interface Name argument\n");
667a159c266SJung-uk Kim         return;
668a159c266SJung-uk Kim     }
669a159c266SJung-uk Kim 
670a159c266SJung-uk Kim     /* Uppercase the action for match below */
671a159c266SJung-uk Kim 
672a159c266SJung-uk Kim     AcpiUtStrupr (ActionArg);
673a159c266SJung-uk Kim 
674a159c266SJung-uk Kim     /* Install - install an interface */
675a159c266SJung-uk Kim 
6765ef50723SJung-uk Kim     SubString = strstr ("INSTALL", ActionArg);
677a159c266SJung-uk Kim     if (SubString)
678a159c266SJung-uk Kim     {
679a159c266SJung-uk Kim         Status = AcpiInstallInterface (InterfaceNameArg);
680a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
681a159c266SJung-uk Kim         {
682a159c266SJung-uk Kim             AcpiOsPrintf ("%s, while installing \"%s\"\n",
683a159c266SJung-uk Kim                 AcpiFormatException (Status), InterfaceNameArg);
684a159c266SJung-uk Kim         }
685a159c266SJung-uk Kim         return;
686a159c266SJung-uk Kim     }
687a159c266SJung-uk Kim 
688a159c266SJung-uk Kim     /* Remove - remove an interface */
689a159c266SJung-uk Kim 
6905ef50723SJung-uk Kim     SubString = strstr ("REMOVE", ActionArg);
691a159c266SJung-uk Kim     if (SubString)
692a159c266SJung-uk Kim     {
693a159c266SJung-uk Kim         Status = AcpiRemoveInterface (InterfaceNameArg);
694a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
695a159c266SJung-uk Kim         {
696a159c266SJung-uk Kim             AcpiOsPrintf ("%s, while removing \"%s\"\n",
697a159c266SJung-uk Kim                 AcpiFormatException (Status), InterfaceNameArg);
698a159c266SJung-uk Kim         }
699a159c266SJung-uk Kim         return;
700a159c266SJung-uk Kim     }
701a159c266SJung-uk Kim 
702a159c266SJung-uk Kim     /* Invalid ActionArg */
703a159c266SJung-uk Kim 
704a159c266SJung-uk Kim     AcpiOsPrintf ("Invalid action argument: %s\n", ActionArg);
705a159c266SJung-uk Kim     return;
706a159c266SJung-uk Kim }
707a159c266SJung-uk Kim 
708a159c266SJung-uk Kim 
709a159c266SJung-uk Kim /*******************************************************************************
710a159c266SJung-uk Kim  *
711a159c266SJung-uk Kim  * FUNCTION:    AcpiDbDisplayTemplate
712a159c266SJung-uk Kim  *
713efcc2a30SJung-uk Kim  * PARAMETERS:  BufferArg           - Buffer name or address
714a159c266SJung-uk Kim  *
715a159c266SJung-uk Kim  * RETURN:      None
716a159c266SJung-uk Kim  *
717a159c266SJung-uk Kim  * DESCRIPTION: Dump a buffer that contains a resource template
718a159c266SJung-uk Kim  *
719a159c266SJung-uk Kim  ******************************************************************************/
720a159c266SJung-uk Kim 
721a159c266SJung-uk Kim void
722a159c266SJung-uk Kim AcpiDbDisplayTemplate (
723a159c266SJung-uk Kim     char                    *BufferArg)
724a159c266SJung-uk Kim {
725a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *Node;
726a159c266SJung-uk Kim     ACPI_STATUS             Status;
727efcc2a30SJung-uk Kim     ACPI_BUFFER             ReturnBuffer;
728a159c266SJung-uk Kim 
729a159c266SJung-uk Kim 
730a159c266SJung-uk Kim     /* Translate BufferArg to an Named object */
731a159c266SJung-uk Kim 
732a159c266SJung-uk Kim     Node = AcpiDbConvertToNode (BufferArg);
733a159c266SJung-uk Kim     if (!Node || (Node == AcpiGbl_RootNode))
734a159c266SJung-uk Kim     {
735a159c266SJung-uk Kim         AcpiOsPrintf ("Invalid argument: %s\n", BufferArg);
736a159c266SJung-uk Kim         return;
737a159c266SJung-uk Kim     }
738a159c266SJung-uk Kim 
739a159c266SJung-uk Kim     /* We must have a buffer object */
740a159c266SJung-uk Kim 
741a159c266SJung-uk Kim     if (Node->Type != ACPI_TYPE_BUFFER)
742a159c266SJung-uk Kim     {
743a159c266SJung-uk Kim         AcpiOsPrintf ("Not a Buffer object, cannot be a template: %s\n",
744a159c266SJung-uk Kim             BufferArg);
745a159c266SJung-uk Kim         return;
746a159c266SJung-uk Kim     }
747a159c266SJung-uk Kim 
748efcc2a30SJung-uk Kim     ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
749efcc2a30SJung-uk Kim     ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
750a159c266SJung-uk Kim 
751a159c266SJung-uk Kim     /* Attempt to convert the raw buffer to a resource list */
752a159c266SJung-uk Kim 
753efcc2a30SJung-uk Kim     Status = AcpiRsCreateResourceList (Node->Object, &ReturnBuffer);
754a159c266SJung-uk Kim 
755a159c266SJung-uk Kim     AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
756a159c266SJung-uk Kim     AcpiDbgLevel |= ACPI_LV_RESOURCES;
757a159c266SJung-uk Kim 
758a159c266SJung-uk Kim     if (ACPI_FAILURE (Status))
759a159c266SJung-uk Kim     {
76070e6ab8fSJung-uk Kim         AcpiOsPrintf (
76170e6ab8fSJung-uk Kim             "Could not convert Buffer to a resource list: %s, %s\n",
762a159c266SJung-uk Kim             BufferArg, AcpiFormatException (Status));
763a159c266SJung-uk Kim         goto DumpBuffer;
764a159c266SJung-uk Kim     }
765a159c266SJung-uk Kim 
766a159c266SJung-uk Kim     /* Now we can dump the resource list */
767a159c266SJung-uk Kim 
768a159c266SJung-uk Kim     AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
769efcc2a30SJung-uk Kim         ReturnBuffer.Pointer));
770a159c266SJung-uk Kim 
771a159c266SJung-uk Kim DumpBuffer:
772a159c266SJung-uk Kim     AcpiOsPrintf ("\nRaw data buffer:\n");
7738ef1a331SJung-uk Kim     AcpiUtDebugDumpBuffer ((UINT8 *) Node->Object->Buffer.Pointer,
774a159c266SJung-uk Kim         Node->Object->Buffer.Length,
775a159c266SJung-uk Kim         DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
776a159c266SJung-uk Kim 
777a159c266SJung-uk Kim     AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
778a159c266SJung-uk Kim     return;
779a159c266SJung-uk Kim }
780a159c266SJung-uk Kim 
781a159c266SJung-uk Kim 
782a159c266SJung-uk Kim /*******************************************************************************
783a159c266SJung-uk Kim  *
784a159c266SJung-uk Kim  * FUNCTION:    AcpiDmCompareAmlResources
785a159c266SJung-uk Kim  *
786a159c266SJung-uk Kim  * PARAMETERS:  Aml1Buffer          - Contains first resource list
787a159c266SJung-uk Kim  *              Aml1BufferLength    - Length of first resource list
788a159c266SJung-uk Kim  *              Aml2Buffer          - Contains second resource list
789a159c266SJung-uk Kim  *              Aml2BufferLength    - Length of second resource list
790a159c266SJung-uk Kim  *
791a159c266SJung-uk Kim  * RETURN:      None
792a159c266SJung-uk Kim  *
793a159c266SJung-uk Kim  * DESCRIPTION: Compare two AML resource lists, descriptor by descriptor (in
794a159c266SJung-uk Kim  *              order to isolate a miscompare to an individual resource)
795a159c266SJung-uk Kim  *
796a159c266SJung-uk Kim  ******************************************************************************/
797a159c266SJung-uk Kim 
798a159c266SJung-uk Kim static void
799a159c266SJung-uk Kim AcpiDmCompareAmlResources (
800a159c266SJung-uk Kim     UINT8                   *Aml1Buffer,
801a159c266SJung-uk Kim     ACPI_RSDESC_SIZE        Aml1BufferLength,
802a159c266SJung-uk Kim     UINT8                   *Aml2Buffer,
803a159c266SJung-uk Kim     ACPI_RSDESC_SIZE        Aml2BufferLength)
804a159c266SJung-uk Kim {
805a159c266SJung-uk Kim     UINT8                   *Aml1;
806a159c266SJung-uk Kim     UINT8                   *Aml2;
807a159c266SJung-uk Kim     UINT8                   *Aml1End;
808a159c266SJung-uk Kim     UINT8                   *Aml2End;
809a159c266SJung-uk Kim     ACPI_RSDESC_SIZE        Aml1Length;
810a159c266SJung-uk Kim     ACPI_RSDESC_SIZE        Aml2Length;
811a159c266SJung-uk Kim     ACPI_RSDESC_SIZE        Offset = 0;
812a159c266SJung-uk Kim     UINT8                   ResourceType;
813a159c266SJung-uk Kim     UINT32                  Count = 0;
814a159c266SJung-uk Kim     UINT32                  i;
815a159c266SJung-uk Kim 
816a159c266SJung-uk Kim 
817a159c266SJung-uk Kim     /* Compare overall buffer sizes (may be different due to size rounding) */
818a159c266SJung-uk Kim 
819a159c266SJung-uk Kim     if (Aml1BufferLength != Aml2BufferLength)
820a159c266SJung-uk Kim     {
821a159c266SJung-uk Kim         AcpiOsPrintf (
82270e6ab8fSJung-uk Kim             "**** Buffer length mismatch in converted "
82370e6ab8fSJung-uk Kim             "AML: Original %X, New %X ****\n",
824a159c266SJung-uk Kim             Aml1BufferLength, Aml2BufferLength);
825a159c266SJung-uk Kim     }
826a159c266SJung-uk Kim 
827a159c266SJung-uk Kim     Aml1 = Aml1Buffer;
828a159c266SJung-uk Kim     Aml2 = Aml2Buffer;
829a159c266SJung-uk Kim     Aml1End = Aml1Buffer + Aml1BufferLength;
830a159c266SJung-uk Kim     Aml2End = Aml2Buffer + Aml2BufferLength;
831a159c266SJung-uk Kim 
832a159c266SJung-uk Kim     /* Walk the descriptor lists, comparing each descriptor */
833a159c266SJung-uk Kim 
834a159c266SJung-uk Kim     while ((Aml1 < Aml1End) && (Aml2 < Aml2End))
835a159c266SJung-uk Kim     {
836a159c266SJung-uk Kim         /* Get the lengths of each descriptor */
837a159c266SJung-uk Kim 
838a159c266SJung-uk Kim         Aml1Length = AcpiUtGetDescriptorLength (Aml1);
839a159c266SJung-uk Kim         Aml2Length = AcpiUtGetDescriptorLength (Aml2);
840a159c266SJung-uk Kim         ResourceType = AcpiUtGetResourceType (Aml1);
841a159c266SJung-uk Kim 
842a159c266SJung-uk Kim         /* Check for descriptor length match */
843a159c266SJung-uk Kim 
844a159c266SJung-uk Kim         if (Aml1Length != Aml2Length)
845a159c266SJung-uk Kim         {
846a159c266SJung-uk Kim             AcpiOsPrintf (
84770e6ab8fSJung-uk Kim                 "**** Length mismatch in descriptor [%.2X] type %2.2X, "
84870e6ab8fSJung-uk Kim                 "Offset %8.8X Len1 %X, Len2 %X ****\n",
849a159c266SJung-uk Kim                 Count, ResourceType, Offset, Aml1Length, Aml2Length);
850a159c266SJung-uk Kim         }
851a159c266SJung-uk Kim 
852a159c266SJung-uk Kim         /* Check for descriptor byte match */
853a159c266SJung-uk Kim 
8545ef50723SJung-uk Kim         else if (memcmp (Aml1, Aml2, Aml1Length))
855a159c266SJung-uk Kim         {
856a159c266SJung-uk Kim             AcpiOsPrintf (
85770e6ab8fSJung-uk Kim                 "**** Data mismatch in descriptor [%.2X] type %2.2X, "
85870e6ab8fSJung-uk Kim                 "Offset %8.8X ****\n",
859a159c266SJung-uk Kim                 Count, ResourceType, Offset);
860a159c266SJung-uk Kim 
861a159c266SJung-uk Kim             for (i = 0; i < Aml1Length; i++)
862a159c266SJung-uk Kim             {
863a159c266SJung-uk Kim                 if (Aml1[i] != Aml2[i])
864a159c266SJung-uk Kim                 {
865efcc2a30SJung-uk Kim                     AcpiOsPrintf (
86670e6ab8fSJung-uk Kim                         "Mismatch at byte offset %.2X: is %2.2X, "
86770e6ab8fSJung-uk Kim                         "should be %2.2X\n",
868a159c266SJung-uk Kim                         i, Aml2[i], Aml1[i]);
869a159c266SJung-uk Kim                 }
870a159c266SJung-uk Kim             }
871a159c266SJung-uk Kim         }
872a159c266SJung-uk Kim 
873a159c266SJung-uk Kim         /* Exit on EndTag descriptor */
874a159c266SJung-uk Kim 
875a159c266SJung-uk Kim         if (ResourceType == ACPI_RESOURCE_NAME_END_TAG)
876a159c266SJung-uk Kim         {
877a159c266SJung-uk Kim             return;
878a159c266SJung-uk Kim         }
879a159c266SJung-uk Kim 
880a159c266SJung-uk Kim         /* Point to next descriptor in each buffer */
881a159c266SJung-uk Kim 
882a159c266SJung-uk Kim         Count++;
883a159c266SJung-uk Kim         Offset += Aml1Length;
884a159c266SJung-uk Kim         Aml1 += Aml1Length;
885a159c266SJung-uk Kim         Aml2 += Aml2Length;
886a159c266SJung-uk Kim     }
887a159c266SJung-uk Kim }
888a159c266SJung-uk Kim 
889a159c266SJung-uk Kim 
890a159c266SJung-uk Kim /*******************************************************************************
891a159c266SJung-uk Kim  *
892a159c266SJung-uk Kim  * FUNCTION:    AcpiDmTestResourceConversion
893a159c266SJung-uk Kim  *
894a159c266SJung-uk Kim  * PARAMETERS:  Node                - Parent device node
895a159c266SJung-uk Kim  *              Name                - resource method name (_CRS)
896a159c266SJung-uk Kim  *
897a159c266SJung-uk Kim  * RETURN:      Status
898a159c266SJung-uk Kim  *
899a159c266SJung-uk Kim  * DESCRIPTION: Compare the original AML with a conversion of the AML to
900a159c266SJung-uk Kim  *              internal resource list, then back to AML.
901a159c266SJung-uk Kim  *
902a159c266SJung-uk Kim  ******************************************************************************/
903a159c266SJung-uk Kim 
904a159c266SJung-uk Kim static ACPI_STATUS
905a159c266SJung-uk Kim AcpiDmTestResourceConversion (
906a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *Node,
907a159c266SJung-uk Kim     char                    *Name)
908a159c266SJung-uk Kim {
909a159c266SJung-uk Kim     ACPI_STATUS             Status;
910efcc2a30SJung-uk Kim     ACPI_BUFFER             ReturnBuffer;
911efcc2a30SJung-uk Kim     ACPI_BUFFER             ResourceBuffer;
912a159c266SJung-uk Kim     ACPI_BUFFER             NewAml;
913a159c266SJung-uk Kim     ACPI_OBJECT             *OriginalAml;
914a159c266SJung-uk Kim 
915a159c266SJung-uk Kim 
916a159c266SJung-uk Kim     AcpiOsPrintf ("Resource Conversion Comparison:\n");
917a159c266SJung-uk Kim 
918a159c266SJung-uk Kim     NewAml.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
919efcc2a30SJung-uk Kim     ReturnBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
920efcc2a30SJung-uk Kim     ResourceBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
921a159c266SJung-uk Kim 
922a159c266SJung-uk Kim     /* Get the original _CRS AML resource template */
923a159c266SJung-uk Kim 
924efcc2a30SJung-uk Kim     Status = AcpiEvaluateObject (Node, Name, NULL, &ReturnBuffer);
925a159c266SJung-uk Kim     if (ACPI_FAILURE (Status))
926a159c266SJung-uk Kim     {
927a159c266SJung-uk Kim         AcpiOsPrintf ("Could not obtain %s: %s\n",
928a159c266SJung-uk Kim             Name, AcpiFormatException (Status));
929a159c266SJung-uk Kim         return (Status);
930a159c266SJung-uk Kim     }
931a159c266SJung-uk Kim 
932a159c266SJung-uk Kim     /* Get the AML resource template, converted to internal resource structs */
933a159c266SJung-uk Kim 
934efcc2a30SJung-uk Kim     Status = AcpiGetCurrentResources (Node, &ResourceBuffer);
935a159c266SJung-uk Kim     if (ACPI_FAILURE (Status))
936a159c266SJung-uk Kim     {
937a159c266SJung-uk Kim         AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
938a159c266SJung-uk Kim             AcpiFormatException (Status));
939a159c266SJung-uk Kim         goto Exit1;
940a159c266SJung-uk Kim     }
941a159c266SJung-uk Kim 
942a159c266SJung-uk Kim     /* Convert internal resource list to external AML resource template */
943a159c266SJung-uk Kim 
944313a0c13SJung-uk Kim     Status = AcpiRsCreateAmlResources (&ResourceBuffer, &NewAml);
945a159c266SJung-uk Kim     if (ACPI_FAILURE (Status))
946a159c266SJung-uk Kim     {
947a159c266SJung-uk Kim         AcpiOsPrintf ("AcpiRsCreateAmlResources failed: %s\n",
948a159c266SJung-uk Kim             AcpiFormatException (Status));
949a159c266SJung-uk Kim         goto Exit2;
950a159c266SJung-uk Kim     }
951a159c266SJung-uk Kim 
952a159c266SJung-uk Kim     /* Compare original AML to the newly created AML resource list */
953a159c266SJung-uk Kim 
954efcc2a30SJung-uk Kim     OriginalAml = ReturnBuffer.Pointer;
955a159c266SJung-uk Kim 
956313a0c13SJung-uk Kim     AcpiDmCompareAmlResources (OriginalAml->Buffer.Pointer,
957313a0c13SJung-uk Kim         (ACPI_RSDESC_SIZE) OriginalAml->Buffer.Length,
958a159c266SJung-uk Kim         NewAml.Pointer, (ACPI_RSDESC_SIZE) NewAml.Length);
959a159c266SJung-uk Kim 
960a159c266SJung-uk Kim     /* Cleanup and exit */
961a159c266SJung-uk Kim 
962a159c266SJung-uk Kim     ACPI_FREE (NewAml.Pointer);
963a159c266SJung-uk Kim Exit2:
964efcc2a30SJung-uk Kim     ACPI_FREE (ResourceBuffer.Pointer);
965a159c266SJung-uk Kim Exit1:
966efcc2a30SJung-uk Kim     ACPI_FREE (ReturnBuffer.Pointer);
967a159c266SJung-uk Kim     return (Status);
968a159c266SJung-uk Kim }
969a159c266SJung-uk Kim 
970a159c266SJung-uk Kim 
971a159c266SJung-uk Kim /*******************************************************************************
972a159c266SJung-uk Kim  *
973a159c266SJung-uk Kim  * FUNCTION:    AcpiDbResourceCallback
974a159c266SJung-uk Kim  *
975a159c266SJung-uk Kim  * PARAMETERS:  ACPI_WALK_RESOURCE_CALLBACK
976a159c266SJung-uk Kim  *
977a159c266SJung-uk Kim  * RETURN:      Status
978a159c266SJung-uk Kim  *
979efcc2a30SJung-uk Kim  * DESCRIPTION: Simple callback to exercise AcpiWalkResources and
980efcc2a30SJung-uk Kim  *              AcpiWalkResourceBuffer.
981a159c266SJung-uk Kim  *
982a159c266SJung-uk Kim  ******************************************************************************/
983a159c266SJung-uk Kim 
984a159c266SJung-uk Kim static ACPI_STATUS
985a159c266SJung-uk Kim AcpiDbResourceCallback (
986a159c266SJung-uk Kim     ACPI_RESOURCE           *Resource,
987a159c266SJung-uk Kim     void                    *Context)
988a159c266SJung-uk Kim {
989a159c266SJung-uk Kim 
990a159c266SJung-uk Kim     return (AE_OK);
991a159c266SJung-uk Kim }
992a159c266SJung-uk Kim 
993a159c266SJung-uk Kim 
994a159c266SJung-uk Kim /*******************************************************************************
995a159c266SJung-uk Kim  *
996a159c266SJung-uk Kim  * FUNCTION:    AcpiDbDeviceResources
997a159c266SJung-uk Kim  *
998a159c266SJung-uk Kim  * PARAMETERS:  ACPI_WALK_CALLBACK
999a159c266SJung-uk Kim  *
1000a159c266SJung-uk Kim  * RETURN:      Status
1001a159c266SJung-uk Kim  *
1002a159c266SJung-uk Kim  * DESCRIPTION: Display the _PRT/_CRS/_PRS resources for a device object.
1003a159c266SJung-uk Kim  *
1004a159c266SJung-uk Kim  ******************************************************************************/
1005a159c266SJung-uk Kim 
1006a159c266SJung-uk Kim static ACPI_STATUS
1007a159c266SJung-uk Kim AcpiDbDeviceResources (
1008a159c266SJung-uk Kim     ACPI_HANDLE             ObjHandle,
1009a159c266SJung-uk Kim     UINT32                  NestingLevel,
1010a159c266SJung-uk Kim     void                    *Context,
1011a159c266SJung-uk Kim     void                    **ReturnValue)
1012a159c266SJung-uk Kim {
1013a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *Node;
1014a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *PrtNode = NULL;
1015a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *CrsNode = NULL;
1016a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *PrsNode = NULL;
1017a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *AeiNode = NULL;
1018a159c266SJung-uk Kim     char                    *ParentPath;
1019efcc2a30SJung-uk Kim     ACPI_BUFFER             ReturnBuffer;
1020a159c266SJung-uk Kim     ACPI_STATUS             Status;
1021a159c266SJung-uk Kim 
1022a159c266SJung-uk Kim 
1023a159c266SJung-uk Kim     Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
1024f8146b88SJung-uk Kim     ParentPath = AcpiNsGetNormalizedPathname (Node, TRUE);
1025a159c266SJung-uk Kim     if (!ParentPath)
1026a159c266SJung-uk Kim     {
1027a159c266SJung-uk Kim         return (AE_NO_MEMORY);
1028a159c266SJung-uk Kim     }
1029a159c266SJung-uk Kim 
1030a159c266SJung-uk Kim     /* Get handles to the resource methods for this device */
1031a159c266SJung-uk Kim 
103270e6ab8fSJung-uk Kim     (void) AcpiGetHandle (Node, METHOD_NAME__PRT,
103370e6ab8fSJung-uk Kim         ACPI_CAST_PTR (ACPI_HANDLE, &PrtNode));
103470e6ab8fSJung-uk Kim     (void) AcpiGetHandle (Node, METHOD_NAME__CRS,
103570e6ab8fSJung-uk Kim         ACPI_CAST_PTR (ACPI_HANDLE, &CrsNode));
103670e6ab8fSJung-uk Kim     (void) AcpiGetHandle (Node, METHOD_NAME__PRS,
103770e6ab8fSJung-uk Kim         ACPI_CAST_PTR (ACPI_HANDLE, &PrsNode));
103870e6ab8fSJung-uk Kim     (void) AcpiGetHandle (Node, METHOD_NAME__AEI,
103970e6ab8fSJung-uk Kim         ACPI_CAST_PTR (ACPI_HANDLE, &AeiNode));
104070e6ab8fSJung-uk Kim 
1041a159c266SJung-uk Kim     if (!PrtNode && !CrsNode && !PrsNode && !AeiNode)
1042a159c266SJung-uk Kim     {
1043a159c266SJung-uk Kim         goto Cleanup;   /* Nothing to do */
1044a159c266SJung-uk Kim     }
1045a159c266SJung-uk Kim 
1046a159c266SJung-uk Kim     AcpiOsPrintf ("\nDevice: %s\n", ParentPath);
1047a159c266SJung-uk Kim 
1048a159c266SJung-uk Kim     /* Prepare for a return object of arbitrary size */
1049a159c266SJung-uk Kim 
1050efcc2a30SJung-uk Kim     ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1051efcc2a30SJung-uk Kim     ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
1052a159c266SJung-uk Kim 
1053a159c266SJung-uk Kim 
1054a159c266SJung-uk Kim     /* _PRT */
1055a159c266SJung-uk Kim 
1056a159c266SJung-uk Kim     if (PrtNode)
1057a159c266SJung-uk Kim     {
1058a159c266SJung-uk Kim         AcpiOsPrintf ("Evaluating _PRT\n");
1059a159c266SJung-uk Kim 
1060efcc2a30SJung-uk Kim         Status = AcpiEvaluateObject (PrtNode, NULL, NULL, &ReturnBuffer);
1061a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1062a159c266SJung-uk Kim         {
1063a159c266SJung-uk Kim             AcpiOsPrintf ("Could not evaluate _PRT: %s\n",
1064a159c266SJung-uk Kim                 AcpiFormatException (Status));
1065a159c266SJung-uk Kim             goto GetCrs;
1066a159c266SJung-uk Kim         }
1067a159c266SJung-uk Kim 
1068efcc2a30SJung-uk Kim         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1069efcc2a30SJung-uk Kim         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
1070a159c266SJung-uk Kim 
1071efcc2a30SJung-uk Kim         Status = AcpiGetIrqRoutingTable (Node, &ReturnBuffer);
1072a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1073a159c266SJung-uk Kim         {
1074a159c266SJung-uk Kim             AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n",
1075a159c266SJung-uk Kim                 AcpiFormatException (Status));
1076a159c266SJung-uk Kim             goto GetCrs;
1077a159c266SJung-uk Kim         }
1078a159c266SJung-uk Kim 
1079a159c266SJung-uk Kim         AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer));
1080a159c266SJung-uk Kim     }
1081a159c266SJung-uk Kim 
1082a159c266SJung-uk Kim 
1083a159c266SJung-uk Kim     /* _CRS */
1084a159c266SJung-uk Kim 
1085a159c266SJung-uk Kim GetCrs:
1086a159c266SJung-uk Kim     if (CrsNode)
1087a159c266SJung-uk Kim     {
1088a159c266SJung-uk Kim         AcpiOsPrintf ("Evaluating _CRS\n");
1089a159c266SJung-uk Kim 
1090efcc2a30SJung-uk Kim         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1091efcc2a30SJung-uk Kim         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
1092a159c266SJung-uk Kim 
1093efcc2a30SJung-uk Kim         Status = AcpiEvaluateObject (CrsNode, NULL, NULL, &ReturnBuffer);
1094a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1095a159c266SJung-uk Kim         {
1096a159c266SJung-uk Kim             AcpiOsPrintf ("Could not evaluate _CRS: %s\n",
1097a159c266SJung-uk Kim                 AcpiFormatException (Status));
1098a159c266SJung-uk Kim             goto GetPrs;
1099a159c266SJung-uk Kim         }
1100a159c266SJung-uk Kim 
1101efcc2a30SJung-uk Kim         /* This code exercises the AcpiWalkResources interface */
1102a159c266SJung-uk Kim 
1103a159c266SJung-uk Kim         Status = AcpiWalkResources (Node, METHOD_NAME__CRS,
1104a159c266SJung-uk Kim             AcpiDbResourceCallback, NULL);
1105a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1106a159c266SJung-uk Kim         {
1107a159c266SJung-uk Kim             AcpiOsPrintf ("AcpiWalkResources failed: %s\n",
1108a159c266SJung-uk Kim                 AcpiFormatException (Status));
1109a159c266SJung-uk Kim             goto GetPrs;
1110a159c266SJung-uk Kim         }
1111a159c266SJung-uk Kim 
1112efcc2a30SJung-uk Kim         /* Get the _CRS resource list (test ALLOCATE buffer) */
1113a159c266SJung-uk Kim 
1114efcc2a30SJung-uk Kim         ReturnBuffer.Pointer = NULL;
1115efcc2a30SJung-uk Kim         ReturnBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1116a159c266SJung-uk Kim 
1117efcc2a30SJung-uk Kim         Status = AcpiGetCurrentResources (Node, &ReturnBuffer);
1118a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1119a159c266SJung-uk Kim         {
1120a159c266SJung-uk Kim             AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
1121a159c266SJung-uk Kim                 AcpiFormatException (Status));
1122a159c266SJung-uk Kim             goto GetPrs;
1123a159c266SJung-uk Kim         }
1124a159c266SJung-uk Kim 
1125efcc2a30SJung-uk Kim         /* This code exercises the AcpiWalkResourceBuffer interface */
1126efcc2a30SJung-uk Kim 
1127efcc2a30SJung-uk Kim         Status = AcpiWalkResourceBuffer (&ReturnBuffer,
1128efcc2a30SJung-uk Kim             AcpiDbResourceCallback, NULL);
1129efcc2a30SJung-uk Kim         if (ACPI_FAILURE (Status))
1130efcc2a30SJung-uk Kim         {
1131efcc2a30SJung-uk Kim             AcpiOsPrintf ("AcpiWalkResourceBuffer failed: %s\n",
1132efcc2a30SJung-uk Kim                 AcpiFormatException (Status));
1133efcc2a30SJung-uk Kim             goto EndCrs;
1134efcc2a30SJung-uk Kim         }
1135efcc2a30SJung-uk Kim 
1136a159c266SJung-uk Kim         /* Dump the _CRS resource list */
1137a159c266SJung-uk Kim 
1138a159c266SJung-uk Kim         AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
1139efcc2a30SJung-uk Kim             ReturnBuffer.Pointer));
1140a159c266SJung-uk Kim 
1141a159c266SJung-uk Kim         /*
1142efcc2a30SJung-uk Kim          * Perform comparison of original AML to newly created AML. This
1143efcc2a30SJung-uk Kim          * tests both the AML->Resource conversion and the Resource->AML
1144efcc2a30SJung-uk Kim          * conversion.
1145a159c266SJung-uk Kim          */
1146efcc2a30SJung-uk Kim         (void) AcpiDmTestResourceConversion (Node, METHOD_NAME__CRS);
1147a159c266SJung-uk Kim 
1148a159c266SJung-uk Kim         /* Execute _SRS with the resource list */
1149a159c266SJung-uk Kim 
11509c48c75eSJung-uk Kim         AcpiOsPrintf ("Evaluating _SRS\n");
11519c48c75eSJung-uk Kim 
1152efcc2a30SJung-uk Kim         Status = AcpiSetCurrentResources (Node, &ReturnBuffer);
1153a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1154a159c266SJung-uk Kim         {
1155a159c266SJung-uk Kim             AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n",
1156a159c266SJung-uk Kim                 AcpiFormatException (Status));
1157efcc2a30SJung-uk Kim             goto EndCrs;
1158a159c266SJung-uk Kim         }
1159efcc2a30SJung-uk Kim 
1160efcc2a30SJung-uk Kim EndCrs:
1161313a0c13SJung-uk Kim         ACPI_FREE (ReturnBuffer.Pointer);
1162a159c266SJung-uk Kim     }
1163a159c266SJung-uk Kim 
1164a159c266SJung-uk Kim 
1165a159c266SJung-uk Kim     /* _PRS */
1166a159c266SJung-uk Kim 
1167a159c266SJung-uk Kim GetPrs:
1168a159c266SJung-uk Kim     if (PrsNode)
1169a159c266SJung-uk Kim     {
1170a159c266SJung-uk Kim         AcpiOsPrintf ("Evaluating _PRS\n");
1171a159c266SJung-uk Kim 
1172efcc2a30SJung-uk Kim         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1173efcc2a30SJung-uk Kim         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
1174a159c266SJung-uk Kim 
1175efcc2a30SJung-uk Kim         Status = AcpiEvaluateObject (PrsNode, NULL, NULL, &ReturnBuffer);
1176a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1177a159c266SJung-uk Kim         {
1178a159c266SJung-uk Kim             AcpiOsPrintf ("Could not evaluate _PRS: %s\n",
1179a159c266SJung-uk Kim                 AcpiFormatException (Status));
1180a159c266SJung-uk Kim             goto GetAei;
1181a159c266SJung-uk Kim         }
1182a159c266SJung-uk Kim 
1183efcc2a30SJung-uk Kim         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1184efcc2a30SJung-uk Kim         ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1185a159c266SJung-uk Kim 
1186efcc2a30SJung-uk Kim         Status = AcpiGetPossibleResources (Node, &ReturnBuffer);
1187a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1188a159c266SJung-uk Kim         {
1189a159c266SJung-uk Kim             AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n",
1190a159c266SJung-uk Kim                 AcpiFormatException (Status));
1191a159c266SJung-uk Kim             goto GetAei;
1192a159c266SJung-uk Kim         }
1193a159c266SJung-uk Kim 
119470e6ab8fSJung-uk Kim         AcpiRsDumpResourceList (ACPI_CAST_PTR (
119570e6ab8fSJung-uk Kim             ACPI_RESOURCE, AcpiGbl_DbBuffer));
1196a159c266SJung-uk Kim     }
1197a159c266SJung-uk Kim 
1198a159c266SJung-uk Kim 
1199a159c266SJung-uk Kim     /* _AEI */
1200a159c266SJung-uk Kim 
1201a159c266SJung-uk Kim GetAei:
1202a159c266SJung-uk Kim     if (AeiNode)
1203a159c266SJung-uk Kim     {
1204a159c266SJung-uk Kim         AcpiOsPrintf ("Evaluating _AEI\n");
1205a159c266SJung-uk Kim 
1206efcc2a30SJung-uk Kim         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1207efcc2a30SJung-uk Kim         ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1208a159c266SJung-uk Kim 
1209efcc2a30SJung-uk Kim         Status = AcpiEvaluateObject (AeiNode, NULL, NULL, &ReturnBuffer);
1210a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1211a159c266SJung-uk Kim         {
1212a159c266SJung-uk Kim             AcpiOsPrintf ("Could not evaluate _AEI: %s\n",
1213a159c266SJung-uk Kim                 AcpiFormatException (Status));
1214a159c266SJung-uk Kim             goto Cleanup;
1215a159c266SJung-uk Kim         }
1216a159c266SJung-uk Kim 
1217efcc2a30SJung-uk Kim         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1218efcc2a30SJung-uk Kim         ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1219a159c266SJung-uk Kim 
1220efcc2a30SJung-uk Kim         Status = AcpiGetEventResources (Node, &ReturnBuffer);
1221a159c266SJung-uk Kim         if (ACPI_FAILURE (Status))
1222a159c266SJung-uk Kim         {
1223a159c266SJung-uk Kim             AcpiOsPrintf ("AcpiGetEventResources failed: %s\n",
1224a159c266SJung-uk Kim                 AcpiFormatException (Status));
1225a159c266SJung-uk Kim             goto Cleanup;
1226a159c266SJung-uk Kim         }
1227a159c266SJung-uk Kim 
122870e6ab8fSJung-uk Kim         AcpiRsDumpResourceList (ACPI_CAST_PTR (
122970e6ab8fSJung-uk Kim             ACPI_RESOURCE, AcpiGbl_DbBuffer));
1230a159c266SJung-uk Kim     }
1231a159c266SJung-uk Kim 
1232a159c266SJung-uk Kim 
1233a159c266SJung-uk Kim Cleanup:
1234a159c266SJung-uk Kim     ACPI_FREE (ParentPath);
1235a159c266SJung-uk Kim     return (AE_OK);
1236a159c266SJung-uk Kim }
1237a159c266SJung-uk Kim 
1238a159c266SJung-uk Kim 
1239a159c266SJung-uk Kim /*******************************************************************************
1240a159c266SJung-uk Kim  *
1241a159c266SJung-uk Kim  * FUNCTION:    AcpiDbDisplayResources
1242a159c266SJung-uk Kim  *
1243a159c266SJung-uk Kim  * PARAMETERS:  ObjectArg           - String object name or object pointer.
12449c48c75eSJung-uk Kim  *                                    NULL or "*" means "display resources for
12459c48c75eSJung-uk Kim  *                                    all devices"
1246a159c266SJung-uk Kim  *
1247a159c266SJung-uk Kim  * RETURN:      None
1248a159c266SJung-uk Kim  *
1249a159c266SJung-uk Kim  * DESCRIPTION: Display the resource objects associated with a device.
1250a159c266SJung-uk Kim  *
1251a159c266SJung-uk Kim  ******************************************************************************/
1252a159c266SJung-uk Kim 
1253a159c266SJung-uk Kim void
1254a159c266SJung-uk Kim AcpiDbDisplayResources (
1255a159c266SJung-uk Kim     char                    *ObjectArg)
1256a159c266SJung-uk Kim {
1257a159c266SJung-uk Kim     ACPI_NAMESPACE_NODE     *Node;
1258a159c266SJung-uk Kim 
1259a159c266SJung-uk Kim 
1260a159c266SJung-uk Kim     AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
1261a159c266SJung-uk Kim     AcpiDbgLevel |= ACPI_LV_RESOURCES;
1262a159c266SJung-uk Kim 
1263a159c266SJung-uk Kim     /* Asterisk means "display resources for all devices" */
1264a159c266SJung-uk Kim 
12655ef50723SJung-uk Kim     if (!ObjectArg || (!strcmp (ObjectArg, "*")))
1266a159c266SJung-uk Kim     {
1267a159c266SJung-uk Kim         (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
1268a159c266SJung-uk Kim             ACPI_UINT32_MAX, AcpiDbDeviceResources, NULL, NULL, NULL);
1269a159c266SJung-uk Kim     }
1270a159c266SJung-uk Kim     else
1271a159c266SJung-uk Kim     {
1272a159c266SJung-uk Kim         /* Convert string to object pointer */
1273a159c266SJung-uk Kim 
1274a159c266SJung-uk Kim         Node = AcpiDbConvertToNode (ObjectArg);
1275a159c266SJung-uk Kim         if (Node)
1276a159c266SJung-uk Kim         {
1277a159c266SJung-uk Kim             if (Node->Type != ACPI_TYPE_DEVICE)
1278a159c266SJung-uk Kim             {
127970e6ab8fSJung-uk Kim                 AcpiOsPrintf (
128070e6ab8fSJung-uk Kim                     "%4.4s: Name is not a device object (%s)\n",
1281a159c266SJung-uk Kim                     Node->Name.Ascii, AcpiUtGetTypeName (Node->Type));
1282a159c266SJung-uk Kim             }
1283a159c266SJung-uk Kim             else
1284a159c266SJung-uk Kim             {
1285a159c266SJung-uk Kim                 (void) AcpiDbDeviceResources (Node, 0, NULL, NULL);
1286a159c266SJung-uk Kim             }
1287a159c266SJung-uk Kim         }
1288a159c266SJung-uk Kim     }
1289a159c266SJung-uk Kim 
1290a159c266SJung-uk Kim     AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
1291a159c266SJung-uk Kim }
1292a159c266SJung-uk Kim 
1293a159c266SJung-uk Kim 
1294a159c266SJung-uk Kim #if (!ACPI_REDUCED_HARDWARE)
1295a159c266SJung-uk Kim /*******************************************************************************
1296a159c266SJung-uk Kim  *
1297a159c266SJung-uk Kim  * FUNCTION:    AcpiDbGenerateGpe
1298a159c266SJung-uk Kim  *
1299a159c266SJung-uk Kim  * PARAMETERS:  GpeArg              - Raw GPE number, ascii string
1300a159c266SJung-uk Kim  *              BlockArg            - GPE block number, ascii string
1301a159c266SJung-uk Kim  *                                    0 or 1 for FADT GPE blocks
1302a159c266SJung-uk Kim  *
1303a159c266SJung-uk Kim  * RETURN:      None
1304a159c266SJung-uk Kim  *
1305efcc2a30SJung-uk Kim  * DESCRIPTION: Simulate firing of a GPE
1306a159c266SJung-uk Kim  *
1307a159c266SJung-uk Kim  ******************************************************************************/
1308a159c266SJung-uk Kim 
1309a159c266SJung-uk Kim void
1310a159c266SJung-uk Kim AcpiDbGenerateGpe (
1311a159c266SJung-uk Kim     char                    *GpeArg,
1312a159c266SJung-uk Kim     char                    *BlockArg)
1313a159c266SJung-uk Kim {
1314313a0c13SJung-uk Kim     UINT32                  BlockNumber = 0;
1315a159c266SJung-uk Kim     UINT32                  GpeNumber;
1316a159c266SJung-uk Kim     ACPI_GPE_EVENT_INFO     *GpeEventInfo;
1317a159c266SJung-uk Kim 
1318a159c266SJung-uk Kim 
13195ef50723SJung-uk Kim     GpeNumber = strtoul (GpeArg, NULL, 0);
1320a159c266SJung-uk Kim 
1321313a0c13SJung-uk Kim     /*
1322313a0c13SJung-uk Kim      * If no block arg, or block arg == 0 or 1, use the FADT-defined
1323313a0c13SJung-uk Kim      * GPE blocks.
1324313a0c13SJung-uk Kim      */
1325313a0c13SJung-uk Kim     if (BlockArg)
1326313a0c13SJung-uk Kim     {
13275ef50723SJung-uk Kim         BlockNumber = strtoul (BlockArg, NULL, 0);
1328313a0c13SJung-uk Kim         if (BlockNumber == 1)
1329313a0c13SJung-uk Kim         {
1330313a0c13SJung-uk Kim             BlockNumber = 0;
1331313a0c13SJung-uk Kim         }
1332313a0c13SJung-uk Kim     }
1333a159c266SJung-uk Kim 
1334f8146b88SJung-uk Kim     GpeEventInfo = AcpiEvGetGpeEventInfo (
1335f8146b88SJung-uk Kim         ACPI_TO_POINTER (BlockNumber), GpeNumber);
1336a159c266SJung-uk Kim     if (!GpeEventInfo)
1337a159c266SJung-uk Kim     {
1338a159c266SJung-uk Kim         AcpiOsPrintf ("Invalid GPE\n");
1339a159c266SJung-uk Kim         return;
1340a159c266SJung-uk Kim     }
1341a159c266SJung-uk Kim 
1342a159c266SJung-uk Kim     (void) AcpiEvGpeDispatch (NULL, GpeEventInfo, GpeNumber);
1343a159c266SJung-uk Kim }
134479c6d946SJung-uk Kim 
134570e6ab8fSJung-uk Kim 
134670e6ab8fSJung-uk Kim /*******************************************************************************
134770e6ab8fSJung-uk Kim  *
134870e6ab8fSJung-uk Kim  * FUNCTION:    AcpiDbGenerateSci
134970e6ab8fSJung-uk Kim  *
135070e6ab8fSJung-uk Kim  * PARAMETERS:  None
135170e6ab8fSJung-uk Kim  *
135270e6ab8fSJung-uk Kim  * RETURN:      None
135370e6ab8fSJung-uk Kim  *
135470e6ab8fSJung-uk Kim  * DESCRIPTION: Simulate an SCI -- just call the SCI dispatch.
135570e6ab8fSJung-uk Kim  *
135670e6ab8fSJung-uk Kim  ******************************************************************************/
135770e6ab8fSJung-uk Kim 
135879c6d946SJung-uk Kim void
135979c6d946SJung-uk Kim AcpiDbGenerateSci (
136079c6d946SJung-uk Kim     void)
136179c6d946SJung-uk Kim {
136279c6d946SJung-uk Kim     AcpiEvSciDispatch ();
136379c6d946SJung-uk Kim }
136479c6d946SJung-uk Kim 
1365a159c266SJung-uk Kim #endif /* !ACPI_REDUCED_HARDWARE */
1366a159c266SJung-uk Kim 
1367fe0f0bbbSJung-uk Kim 
1368fe0f0bbbSJung-uk Kim /*******************************************************************************
1369fe0f0bbbSJung-uk Kim  *
1370fe0f0bbbSJung-uk Kim  * FUNCTION:    AcpiDbTrace
1371fe0f0bbbSJung-uk Kim  *
1372fe0f0bbbSJung-uk Kim  * PARAMETERS:  EnableArg           - ENABLE/AML to enable tracer
1373fe0f0bbbSJung-uk Kim  *                                    DISABLE to disable tracer
1374fe0f0bbbSJung-uk Kim  *              MethodArg           - Method to trace
1375fe0f0bbbSJung-uk Kim  *              OnceArg             - Whether trace once
1376fe0f0bbbSJung-uk Kim  *
1377fe0f0bbbSJung-uk Kim  * RETURN:      None
1378fe0f0bbbSJung-uk Kim  *
1379fe0f0bbbSJung-uk Kim  * DESCRIPTION: Control method tracing facility
1380fe0f0bbbSJung-uk Kim  *
1381fe0f0bbbSJung-uk Kim  ******************************************************************************/
1382fe0f0bbbSJung-uk Kim 
1383fe0f0bbbSJung-uk Kim void
1384fe0f0bbbSJung-uk Kim AcpiDbTrace (
1385fe0f0bbbSJung-uk Kim     char                    *EnableArg,
1386fe0f0bbbSJung-uk Kim     char                    *MethodArg,
1387fe0f0bbbSJung-uk Kim     char                    *OnceArg)
1388fe0f0bbbSJung-uk Kim {
1389fe0f0bbbSJung-uk Kim     UINT32                  DebugLevel = 0;
1390fe0f0bbbSJung-uk Kim     UINT32                  DebugLayer = 0;
1391fe0f0bbbSJung-uk Kim     UINT32                  Flags = 0;
1392fe0f0bbbSJung-uk Kim 
1393fe0f0bbbSJung-uk Kim 
1394fe0f0bbbSJung-uk Kim     AcpiUtStrupr (EnableArg);
1395fe0f0bbbSJung-uk Kim     AcpiUtStrupr (OnceArg);
139670e6ab8fSJung-uk Kim 
1397fe0f0bbbSJung-uk Kim     if (MethodArg)
1398fe0f0bbbSJung-uk Kim     {
1399fe0f0bbbSJung-uk Kim         if (AcpiDbTraceMethodName)
1400fe0f0bbbSJung-uk Kim         {
1401fe0f0bbbSJung-uk Kim             ACPI_FREE (AcpiDbTraceMethodName);
1402fe0f0bbbSJung-uk Kim             AcpiDbTraceMethodName = NULL;
1403fe0f0bbbSJung-uk Kim         }
140470e6ab8fSJung-uk Kim 
1405fe0f0bbbSJung-uk Kim         AcpiDbTraceMethodName = ACPI_ALLOCATE (strlen (MethodArg) + 1);
1406fe0f0bbbSJung-uk Kim         if (!AcpiDbTraceMethodName)
1407fe0f0bbbSJung-uk Kim         {
140870e6ab8fSJung-uk Kim             AcpiOsPrintf ("Failed to allocate method name (%s)\n",
140970e6ab8fSJung-uk Kim                 MethodArg);
1410fe0f0bbbSJung-uk Kim             return;
1411fe0f0bbbSJung-uk Kim         }
141270e6ab8fSJung-uk Kim 
1413fe0f0bbbSJung-uk Kim         strcpy (AcpiDbTraceMethodName, MethodArg);
1414fe0f0bbbSJung-uk Kim     }
141570e6ab8fSJung-uk Kim 
1416fe0f0bbbSJung-uk Kim     if (!strcmp (EnableArg, "ENABLE") ||
1417fe0f0bbbSJung-uk Kim         !strcmp (EnableArg, "METHOD") ||
1418fe0f0bbbSJung-uk Kim         !strcmp (EnableArg, "OPCODE"))
1419fe0f0bbbSJung-uk Kim     {
1420fe0f0bbbSJung-uk Kim         if (!strcmp (EnableArg, "ENABLE"))
1421fe0f0bbbSJung-uk Kim         {
1422fe0f0bbbSJung-uk Kim             /* Inherit current console settings */
1423fe0f0bbbSJung-uk Kim 
1424fe0f0bbbSJung-uk Kim             DebugLevel = AcpiGbl_DbConsoleDebugLevel;
1425fe0f0bbbSJung-uk Kim             DebugLayer = AcpiDbgLayer;
1426fe0f0bbbSJung-uk Kim         }
1427fe0f0bbbSJung-uk Kim         else
1428fe0f0bbbSJung-uk Kim         {
1429fe0f0bbbSJung-uk Kim             /* Restrict console output to trace points only */
1430fe0f0bbbSJung-uk Kim 
1431fe0f0bbbSJung-uk Kim             DebugLevel = ACPI_LV_TRACE_POINT;
1432fe0f0bbbSJung-uk Kim             DebugLayer = ACPI_EXECUTER;
1433fe0f0bbbSJung-uk Kim         }
1434fe0f0bbbSJung-uk Kim 
1435fe0f0bbbSJung-uk Kim         Flags = ACPI_TRACE_ENABLED;
143670e6ab8fSJung-uk Kim 
1437fe0f0bbbSJung-uk Kim         if (!strcmp (EnableArg, "OPCODE"))
1438fe0f0bbbSJung-uk Kim         {
1439fe0f0bbbSJung-uk Kim             Flags |= ACPI_TRACE_OPCODE;
1440fe0f0bbbSJung-uk Kim         }
144170e6ab8fSJung-uk Kim 
1442fe0f0bbbSJung-uk Kim         if (OnceArg && !strcmp (OnceArg, "ONCE"))
1443fe0f0bbbSJung-uk Kim         {
1444fe0f0bbbSJung-uk Kim             Flags |= ACPI_TRACE_ONESHOT;
1445fe0f0bbbSJung-uk Kim         }
1446fe0f0bbbSJung-uk Kim     }
1447fe0f0bbbSJung-uk Kim 
1448fe0f0bbbSJung-uk Kim     (void) AcpiDebugTrace (AcpiDbTraceMethodName,
1449fe0f0bbbSJung-uk Kim         DebugLevel, DebugLayer, Flags);
1450fe0f0bbbSJung-uk Kim }
1451