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*58308fadSJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2025, 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 #define _COMPONENT ACPI_CA_DEBUGGER
161a159c266SJung-uk Kim ACPI_MODULE_NAME ("dbcmds")
162a159c266SJung-uk Kim
163a159c266SJung-uk Kim
164a159c266SJung-uk Kim /* Local prototypes */
165a159c266SJung-uk Kim
166a159c266SJung-uk Kim static void
167a159c266SJung-uk Kim AcpiDmCompareAmlResources (
168a159c266SJung-uk Kim UINT8 *Aml1Buffer,
169a159c266SJung-uk Kim ACPI_RSDESC_SIZE Aml1BufferLength,
170a159c266SJung-uk Kim UINT8 *Aml2Buffer,
171a159c266SJung-uk Kim ACPI_RSDESC_SIZE Aml2BufferLength);
172a159c266SJung-uk Kim
173a159c266SJung-uk Kim static ACPI_STATUS
174a159c266SJung-uk Kim AcpiDmTestResourceConversion (
175a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *Node,
176a159c266SJung-uk Kim char *Name);
177a159c266SJung-uk Kim
178a159c266SJung-uk Kim static ACPI_STATUS
179a159c266SJung-uk Kim AcpiDbResourceCallback (
180a159c266SJung-uk Kim ACPI_RESOURCE *Resource,
181a159c266SJung-uk Kim void *Context);
182a159c266SJung-uk Kim
183a159c266SJung-uk Kim static ACPI_STATUS
184a159c266SJung-uk Kim AcpiDbDeviceResources (
185a159c266SJung-uk Kim ACPI_HANDLE ObjHandle,
186a159c266SJung-uk Kim UINT32 NestingLevel,
187a159c266SJung-uk Kim void *Context,
188a159c266SJung-uk Kim void **ReturnValue);
189a159c266SJung-uk Kim
190efcc2a30SJung-uk Kim static void
191efcc2a30SJung-uk Kim AcpiDbDoOneSleepState (
192efcc2a30SJung-uk Kim UINT8 SleepState);
193efcc2a30SJung-uk Kim
194a159c266SJung-uk Kim
195fe0f0bbbSJung-uk Kim static char *AcpiDbTraceMethodName = NULL;
196fe0f0bbbSJung-uk Kim
19770e6ab8fSJung-uk Kim
198a159c266SJung-uk Kim /*******************************************************************************
199a159c266SJung-uk Kim *
200a159c266SJung-uk Kim * FUNCTION: AcpiDbConvertToNode
201a159c266SJung-uk Kim *
202a159c266SJung-uk Kim * PARAMETERS: InString - String to convert
203a159c266SJung-uk Kim *
204a159c266SJung-uk Kim * RETURN: Pointer to a NS node
205a159c266SJung-uk Kim *
206a159c266SJung-uk Kim * DESCRIPTION: Convert a string to a valid NS pointer. Handles numeric or
207efcc2a30SJung-uk Kim * alphanumeric strings.
208a159c266SJung-uk Kim *
209a159c266SJung-uk Kim ******************************************************************************/
210a159c266SJung-uk Kim
211a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *
AcpiDbConvertToNode(char * InString)212a159c266SJung-uk Kim AcpiDbConvertToNode (
213a159c266SJung-uk Kim char *InString)
214a159c266SJung-uk Kim {
215a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *Node;
2168d744e47SJung-uk Kim ACPI_SIZE Address;
217a159c266SJung-uk Kim
218a159c266SJung-uk Kim
219a159c266SJung-uk Kim if ((*InString >= 0x30) && (*InString <= 0x39))
220a159c266SJung-uk Kim {
221a159c266SJung-uk Kim /* Numeric argument, convert */
222a159c266SJung-uk Kim
2235ef50723SJung-uk Kim Address = strtoul (InString, NULL, 16);
2248d744e47SJung-uk Kim Node = ACPI_TO_POINTER (Address);
225a159c266SJung-uk Kim if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE)))
226a159c266SJung-uk Kim {
227f8146b88SJung-uk Kim AcpiOsPrintf ("Address %p is invalid", Node);
228a159c266SJung-uk Kim return (NULL);
229a159c266SJung-uk Kim }
230a159c266SJung-uk Kim
231a159c266SJung-uk Kim /* Make sure pointer is valid NS node */
232a159c266SJung-uk Kim
233a159c266SJung-uk Kim if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
234a159c266SJung-uk Kim {
235313a0c13SJung-uk Kim AcpiOsPrintf ("Address %p is not a valid namespace node [%s]\n",
236a159c266SJung-uk Kim Node, AcpiUtGetDescriptorName (Node));
237a159c266SJung-uk Kim return (NULL);
238a159c266SJung-uk Kim }
239a159c266SJung-uk Kim }
240a159c266SJung-uk Kim else
241a159c266SJung-uk Kim {
242efcc2a30SJung-uk Kim /*
243efcc2a30SJung-uk Kim * Alpha argument: The parameter is a name string that must be
244efcc2a30SJung-uk Kim * resolved to a Namespace object.
245a159c266SJung-uk Kim */
246a159c266SJung-uk Kim Node = AcpiDbLocalNsLookup (InString);
247a159c266SJung-uk Kim if (!Node)
248a159c266SJung-uk Kim {
24970e6ab8fSJung-uk Kim AcpiOsPrintf (
25070e6ab8fSJung-uk Kim "Could not find [%s] in namespace, defaulting to root node\n",
251313a0c13SJung-uk Kim InString);
252a159c266SJung-uk Kim Node = AcpiGbl_RootNode;
253a159c266SJung-uk Kim }
254a159c266SJung-uk Kim }
255a159c266SJung-uk Kim
256a159c266SJung-uk Kim return (Node);
257a159c266SJung-uk Kim }
258a159c266SJung-uk Kim
259a159c266SJung-uk Kim
260a159c266SJung-uk Kim /*******************************************************************************
261a159c266SJung-uk Kim *
262a159c266SJung-uk Kim * FUNCTION: AcpiDbSleep
263a159c266SJung-uk Kim *
264efcc2a30SJung-uk Kim * PARAMETERS: ObjectArg - Desired sleep state (0-5). NULL means
265efcc2a30SJung-uk Kim * invoke all possible sleep states.
266a159c266SJung-uk Kim *
267a159c266SJung-uk Kim * RETURN: Status
268a159c266SJung-uk Kim *
269efcc2a30SJung-uk Kim * DESCRIPTION: Simulate sleep/wake sequences
270a159c266SJung-uk Kim *
271a159c266SJung-uk Kim ******************************************************************************/
272a159c266SJung-uk Kim
273a159c266SJung-uk Kim ACPI_STATUS
AcpiDbSleep(char * ObjectArg)274a159c266SJung-uk Kim AcpiDbSleep (
275a159c266SJung-uk Kim char *ObjectArg)
276a159c266SJung-uk Kim {
277a159c266SJung-uk Kim UINT8 SleepState;
278efcc2a30SJung-uk Kim UINT32 i;
279a159c266SJung-uk Kim
280a159c266SJung-uk Kim
281a159c266SJung-uk Kim ACPI_FUNCTION_TRACE (AcpiDbSleep);
282a159c266SJung-uk Kim
283a159c266SJung-uk Kim
284efcc2a30SJung-uk Kim /* Null input (no arguments) means to invoke all sleep states */
285a159c266SJung-uk Kim
286efcc2a30SJung-uk Kim if (!ObjectArg)
287efcc2a30SJung-uk Kim {
288efcc2a30SJung-uk Kim AcpiOsPrintf ("Invoking all possible sleep states, 0-%d\n",
289efcc2a30SJung-uk Kim ACPI_S_STATES_MAX);
290efcc2a30SJung-uk Kim
291efcc2a30SJung-uk Kim for (i = 0; i <= ACPI_S_STATES_MAX; i++)
292efcc2a30SJung-uk Kim {
293efcc2a30SJung-uk Kim AcpiDbDoOneSleepState ((UINT8) i);
294efcc2a30SJung-uk Kim }
295efcc2a30SJung-uk Kim
296efcc2a30SJung-uk Kim return_ACPI_STATUS (AE_OK);
297efcc2a30SJung-uk Kim }
298efcc2a30SJung-uk Kim
299efcc2a30SJung-uk Kim /* Convert argument to binary and invoke the sleep state */
300efcc2a30SJung-uk Kim
3015ef50723SJung-uk Kim SleepState = (UINT8) strtoul (ObjectArg, NULL, 0);
302efcc2a30SJung-uk Kim AcpiDbDoOneSleepState (SleepState);
303efcc2a30SJung-uk Kim return_ACPI_STATUS (AE_OK);
304efcc2a30SJung-uk Kim }
305efcc2a30SJung-uk Kim
306efcc2a30SJung-uk Kim
307efcc2a30SJung-uk Kim /*******************************************************************************
308efcc2a30SJung-uk Kim *
309efcc2a30SJung-uk Kim * FUNCTION: AcpiDbDoOneSleepState
310efcc2a30SJung-uk Kim *
311efcc2a30SJung-uk Kim * PARAMETERS: SleepState - Desired sleep state (0-5)
312efcc2a30SJung-uk Kim *
31370e6ab8fSJung-uk Kim * RETURN: None
314efcc2a30SJung-uk Kim *
315efcc2a30SJung-uk Kim * DESCRIPTION: Simulate a sleep/wake sequence
316efcc2a30SJung-uk Kim *
317efcc2a30SJung-uk Kim ******************************************************************************/
318efcc2a30SJung-uk Kim
319efcc2a30SJung-uk Kim static void
AcpiDbDoOneSleepState(UINT8 SleepState)320efcc2a30SJung-uk Kim AcpiDbDoOneSleepState (
321efcc2a30SJung-uk Kim UINT8 SleepState)
322efcc2a30SJung-uk Kim {
323efcc2a30SJung-uk Kim ACPI_STATUS Status;
324efcc2a30SJung-uk Kim UINT8 SleepTypeA;
325efcc2a30SJung-uk Kim UINT8 SleepTypeB;
326efcc2a30SJung-uk Kim
327efcc2a30SJung-uk Kim
328efcc2a30SJung-uk Kim /* Validate parameter */
329efcc2a30SJung-uk Kim
330efcc2a30SJung-uk Kim if (SleepState > ACPI_S_STATES_MAX)
331efcc2a30SJung-uk Kim {
332efcc2a30SJung-uk Kim AcpiOsPrintf ("Sleep state %d out of range (%d max)\n",
333efcc2a30SJung-uk Kim SleepState, ACPI_S_STATES_MAX);
334efcc2a30SJung-uk Kim return;
335efcc2a30SJung-uk Kim }
336efcc2a30SJung-uk Kim
337efcc2a30SJung-uk Kim AcpiOsPrintf ("\n---- Invoking sleep state S%d (%s):\n",
338efcc2a30SJung-uk Kim SleepState, AcpiGbl_SleepStateNames[SleepState]);
339efcc2a30SJung-uk Kim
340efcc2a30SJung-uk Kim /* Get the values for the sleep type registers (for display only) */
341efcc2a30SJung-uk Kim
342efcc2a30SJung-uk Kim Status = AcpiGetSleepTypeData (SleepState, &SleepTypeA, &SleepTypeB);
343efcc2a30SJung-uk Kim if (ACPI_FAILURE (Status))
344efcc2a30SJung-uk Kim {
345efcc2a30SJung-uk Kim AcpiOsPrintf ("Could not evaluate [%s] method, %s\n",
346efcc2a30SJung-uk Kim AcpiGbl_SleepStateNames[SleepState],
347efcc2a30SJung-uk Kim AcpiFormatException (Status));
348efcc2a30SJung-uk Kim return;
349efcc2a30SJung-uk Kim }
350efcc2a30SJung-uk Kim
351efcc2a30SJung-uk Kim AcpiOsPrintf (
352efcc2a30SJung-uk Kim "Register values for sleep state S%d: Sleep-A: %.2X, Sleep-B: %.2X\n",
353efcc2a30SJung-uk Kim SleepState, SleepTypeA, SleepTypeB);
354efcc2a30SJung-uk Kim
355efcc2a30SJung-uk Kim /* Invoke the various sleep/wake interfaces */
356efcc2a30SJung-uk Kim
357efcc2a30SJung-uk Kim AcpiOsPrintf ("**** Sleep: Prepare to sleep (S%d) ****\n",
358efcc2a30SJung-uk Kim SleepState);
359a159c266SJung-uk Kim Status = AcpiEnterSleepStatePrep (SleepState);
360a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
361a159c266SJung-uk Kim {
362a159c266SJung-uk Kim goto ErrorExit;
363a159c266SJung-uk Kim }
364a159c266SJung-uk Kim
365efcc2a30SJung-uk Kim AcpiOsPrintf ("**** Sleep: Going to sleep (S%d) ****\n",
366efcc2a30SJung-uk Kim SleepState);
3671df130f1SJung-uk Kim Status = AcpiEnterSleepState (SleepState);
368a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
369a159c266SJung-uk Kim {
370a159c266SJung-uk Kim goto ErrorExit;
371a159c266SJung-uk Kim }
372a159c266SJung-uk Kim
373efcc2a30SJung-uk Kim AcpiOsPrintf ("**** Wake: Prepare to return from sleep (S%d) ****\n",
374efcc2a30SJung-uk Kim SleepState);
3751df130f1SJung-uk Kim Status = AcpiLeaveSleepStatePrep (SleepState);
376a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
377a159c266SJung-uk Kim {
378a159c266SJung-uk Kim goto ErrorExit;
379a159c266SJung-uk Kim }
380a159c266SJung-uk Kim
381efcc2a30SJung-uk Kim AcpiOsPrintf ("**** Wake: Return from sleep (S%d) ****\n",
382efcc2a30SJung-uk Kim SleepState);
383a159c266SJung-uk Kim Status = AcpiLeaveSleepState (SleepState);
384a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
385a159c266SJung-uk Kim {
386a159c266SJung-uk Kim goto ErrorExit;
387a159c266SJung-uk Kim }
388a159c266SJung-uk Kim
389efcc2a30SJung-uk Kim return;
390a159c266SJung-uk Kim
391a159c266SJung-uk Kim
392a159c266SJung-uk Kim ErrorExit:
393efcc2a30SJung-uk Kim ACPI_EXCEPTION ((AE_INFO, Status, "During invocation of sleep state S%d",
394efcc2a30SJung-uk Kim SleepState));
395a159c266SJung-uk Kim }
396a159c266SJung-uk Kim
397a159c266SJung-uk Kim
398a159c266SJung-uk Kim /*******************************************************************************
399a159c266SJung-uk Kim *
400a159c266SJung-uk Kim * FUNCTION: AcpiDbDisplayLocks
401a159c266SJung-uk Kim *
402a159c266SJung-uk Kim * PARAMETERS: None
403a159c266SJung-uk Kim *
404a159c266SJung-uk Kim * RETURN: None
405a159c266SJung-uk Kim *
406a159c266SJung-uk Kim * DESCRIPTION: Display information about internal mutexes.
407a159c266SJung-uk Kim *
408a159c266SJung-uk Kim ******************************************************************************/
409a159c266SJung-uk Kim
410a159c266SJung-uk Kim void
AcpiDbDisplayLocks(void)411a159c266SJung-uk Kim AcpiDbDisplayLocks (
412a159c266SJung-uk Kim void)
413a159c266SJung-uk Kim {
414a159c266SJung-uk Kim UINT32 i;
415a159c266SJung-uk Kim
416a159c266SJung-uk Kim
417a159c266SJung-uk Kim for (i = 0; i < ACPI_MAX_MUTEX; i++)
418a159c266SJung-uk Kim {
419a159c266SJung-uk Kim AcpiOsPrintf ("%26s : %s\n", AcpiUtGetMutexName (i),
420a159c266SJung-uk Kim AcpiGbl_MutexInfo[i].ThreadId == ACPI_MUTEX_NOT_ACQUIRED
421a159c266SJung-uk Kim ? "Locked" : "Unlocked");
422a159c266SJung-uk Kim }
423a159c266SJung-uk Kim }
424a159c266SJung-uk Kim
425a159c266SJung-uk Kim
426a159c266SJung-uk Kim /*******************************************************************************
427a159c266SJung-uk Kim *
428a159c266SJung-uk Kim * FUNCTION: AcpiDbDisplayTableInfo
429a159c266SJung-uk Kim *
430efcc2a30SJung-uk Kim * PARAMETERS: TableArg - Name of table to be displayed
431a159c266SJung-uk Kim *
432a159c266SJung-uk Kim * RETURN: None
433a159c266SJung-uk Kim *
434a159c266SJung-uk Kim * DESCRIPTION: Display information about loaded tables. Current
435a159c266SJung-uk Kim * implementation displays all loaded tables.
436a159c266SJung-uk Kim *
437a159c266SJung-uk Kim ******************************************************************************/
438a159c266SJung-uk Kim
439a159c266SJung-uk Kim void
AcpiDbDisplayTableInfo(char * TableArg)440a159c266SJung-uk Kim AcpiDbDisplayTableInfo (
441a159c266SJung-uk Kim char *TableArg)
442a159c266SJung-uk Kim {
443a159c266SJung-uk Kim UINT32 i;
444a159c266SJung-uk Kim ACPI_TABLE_DESC *TableDesc;
445a159c266SJung-uk Kim ACPI_STATUS Status;
446a159c266SJung-uk Kim
447a159c266SJung-uk Kim
448e8241eabSJung-uk Kim /* Header */
449e8241eabSJung-uk Kim
45070e6ab8fSJung-uk Kim AcpiOsPrintf ("Idx ID Status Type "
45170e6ab8fSJung-uk Kim "TableHeader (Sig, Address, Length, Misc)\n");
452e8241eabSJung-uk Kim
453a159c266SJung-uk Kim /* Walk the entire root table list */
454a159c266SJung-uk Kim
455a159c266SJung-uk Kim for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
456a159c266SJung-uk Kim {
457a159c266SJung-uk Kim TableDesc = &AcpiGbl_RootTableList.Tables[i];
458e8241eabSJung-uk Kim
459e8241eabSJung-uk Kim /* Index and Table ID */
460e8241eabSJung-uk Kim
461e8241eabSJung-uk Kim AcpiOsPrintf ("%3u %.2u ", i, TableDesc->OwnerId);
462e8241eabSJung-uk Kim
463e8241eabSJung-uk Kim /* Decode the table flags */
464e8241eabSJung-uk Kim
465e8241eabSJung-uk Kim if (!(TableDesc->Flags & ACPI_TABLE_IS_LOADED))
466e8241eabSJung-uk Kim {
467e8241eabSJung-uk Kim AcpiOsPrintf ("NotLoaded ");
468e8241eabSJung-uk Kim }
469e8241eabSJung-uk Kim else
470e8241eabSJung-uk Kim {
471e8241eabSJung-uk Kim AcpiOsPrintf (" Loaded ");
472e8241eabSJung-uk Kim }
473e8241eabSJung-uk Kim
474e8241eabSJung-uk Kim switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
475e8241eabSJung-uk Kim {
476313a0c13SJung-uk Kim case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
477a9d8d09cSJung-uk Kim
478313a0c13SJung-uk Kim AcpiOsPrintf ("External/virtual ");
479e8241eabSJung-uk Kim break;
480e8241eabSJung-uk Kim
481313a0c13SJung-uk Kim case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
482a9d8d09cSJung-uk Kim
483313a0c13SJung-uk Kim AcpiOsPrintf ("Internal/physical ");
484e8241eabSJung-uk Kim break;
485e8241eabSJung-uk Kim
486313a0c13SJung-uk Kim case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
487a9d8d09cSJung-uk Kim
488313a0c13SJung-uk Kim AcpiOsPrintf ("Internal/virtual ");
489e8241eabSJung-uk Kim break;
490e8241eabSJung-uk Kim
491e8241eabSJung-uk Kim default:
492a9d8d09cSJung-uk Kim
493313a0c13SJung-uk Kim AcpiOsPrintf ("INVALID TYPE ");
494e8241eabSJung-uk Kim break;
495e8241eabSJung-uk Kim }
496a159c266SJung-uk Kim
497a159c266SJung-uk Kim /* Make sure that the table is mapped */
498a159c266SJung-uk Kim
499313a0c13SJung-uk Kim Status = AcpiTbValidateTable (TableDesc);
500a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
501a159c266SJung-uk Kim {
502a159c266SJung-uk Kim return;
503a159c266SJung-uk Kim }
504a159c266SJung-uk Kim
505a159c266SJung-uk Kim /* Dump the table header */
506a159c266SJung-uk Kim
507a159c266SJung-uk Kim if (TableDesc->Pointer)
508a159c266SJung-uk Kim {
509a159c266SJung-uk Kim AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer);
510a159c266SJung-uk Kim }
511a159c266SJung-uk Kim else
512a159c266SJung-uk Kim {
513a159c266SJung-uk Kim /* If the pointer is null, the table has been unloaded */
514a159c266SJung-uk Kim
515f8146b88SJung-uk Kim ACPI_INFO (("%4.4s - Table has been unloaded",
516a159c266SJung-uk Kim TableDesc->Signature.Ascii));
517a159c266SJung-uk Kim }
518a159c266SJung-uk Kim }
519a159c266SJung-uk Kim }
520a159c266SJung-uk Kim
521a159c266SJung-uk Kim
522a159c266SJung-uk Kim /*******************************************************************************
523a159c266SJung-uk Kim *
524a159c266SJung-uk Kim * FUNCTION: AcpiDbUnloadAcpiTable
525a159c266SJung-uk Kim *
526e8241eabSJung-uk Kim * PARAMETERS: ObjectName - Namespace pathname for an object that
527e8241eabSJung-uk Kim * is owned by the table to be unloaded
528a159c266SJung-uk Kim *
529e8241eabSJung-uk Kim * RETURN: None
530a159c266SJung-uk Kim *
531e8241eabSJung-uk Kim * DESCRIPTION: Unload an ACPI table, via any namespace node that is owned
532e8241eabSJung-uk Kim * by the table.
533a159c266SJung-uk Kim *
534a159c266SJung-uk Kim ******************************************************************************/
535a159c266SJung-uk Kim
536a159c266SJung-uk Kim void
AcpiDbUnloadAcpiTable(char * ObjectName)537a159c266SJung-uk Kim AcpiDbUnloadAcpiTable (
538e8241eabSJung-uk Kim char *ObjectName)
539a159c266SJung-uk Kim {
540e8241eabSJung-uk Kim ACPI_NAMESPACE_NODE *Node;
541a159c266SJung-uk Kim ACPI_STATUS Status;
542a159c266SJung-uk Kim
543a159c266SJung-uk Kim
544e8241eabSJung-uk Kim /* Translate name to an Named object */
545a159c266SJung-uk Kim
546e8241eabSJung-uk Kim Node = AcpiDbConvertToNode (ObjectName);
547e8241eabSJung-uk Kim if (!Node)
548a159c266SJung-uk Kim {
549e8241eabSJung-uk Kim return;
550e8241eabSJung-uk Kim }
551a159c266SJung-uk Kim
552e8241eabSJung-uk Kim Status = AcpiUnloadParentTable (ACPI_CAST_PTR (ACPI_HANDLE, Node));
553a159c266SJung-uk Kim if (ACPI_SUCCESS (Status))
554a159c266SJung-uk Kim {
555e8241eabSJung-uk Kim AcpiOsPrintf ("Parent of [%s] (%p) unloaded and uninstalled\n",
556e8241eabSJung-uk Kim ObjectName, Node);
557a159c266SJung-uk Kim }
558a159c266SJung-uk Kim else
559a159c266SJung-uk Kim {
560e8241eabSJung-uk Kim AcpiOsPrintf ("%s, while unloading parent table of [%s]\n",
561e8241eabSJung-uk Kim AcpiFormatException (Status), ObjectName);
562a159c266SJung-uk Kim }
563a159c266SJung-uk Kim }
564a159c266SJung-uk Kim
565a159c266SJung-uk Kim
566a159c266SJung-uk Kim /*******************************************************************************
567a159c266SJung-uk Kim *
568a159c266SJung-uk Kim * FUNCTION: AcpiDbSendNotify
569a159c266SJung-uk Kim *
570efcc2a30SJung-uk Kim * PARAMETERS: Name - Name of ACPI object where to send notify
571a159c266SJung-uk Kim * Value - Value of the notify to send.
572a159c266SJung-uk Kim *
573a159c266SJung-uk Kim * RETURN: None
574a159c266SJung-uk Kim *
575a159c266SJung-uk Kim * DESCRIPTION: Send an ACPI notification. The value specified is sent to the
576a159c266SJung-uk Kim * named object as an ACPI notify.
577a159c266SJung-uk Kim *
578a159c266SJung-uk Kim ******************************************************************************/
579a159c266SJung-uk Kim
580a159c266SJung-uk Kim void
AcpiDbSendNotify(char * Name,UINT32 Value)581a159c266SJung-uk Kim AcpiDbSendNotify (
582a159c266SJung-uk Kim char *Name,
583a159c266SJung-uk Kim UINT32 Value)
584a159c266SJung-uk Kim {
585a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *Node;
586a159c266SJung-uk Kim ACPI_STATUS Status;
587a159c266SJung-uk Kim
588a159c266SJung-uk Kim
589a159c266SJung-uk Kim /* Translate name to an Named object */
590a159c266SJung-uk Kim
591a159c266SJung-uk Kim Node = AcpiDbConvertToNode (Name);
592a159c266SJung-uk Kim if (!Node)
593a159c266SJung-uk Kim {
594a159c266SJung-uk Kim return;
595a159c266SJung-uk Kim }
596a159c266SJung-uk Kim
597eef1b955SJung-uk Kim /* Dispatch the notify if legal */
598a159c266SJung-uk Kim
599eef1b955SJung-uk Kim if (AcpiEvIsNotifyObject (Node))
600a159c266SJung-uk Kim {
601a159c266SJung-uk Kim Status = AcpiEvQueueNotifyRequest (Node, Value);
602a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
603a159c266SJung-uk Kim {
604a159c266SJung-uk Kim AcpiOsPrintf ("Could not queue notify\n");
605a159c266SJung-uk Kim }
606eef1b955SJung-uk Kim }
607eef1b955SJung-uk Kim else
608eef1b955SJung-uk Kim {
609efcc2a30SJung-uk Kim AcpiOsPrintf (
61070e6ab8fSJung-uk Kim "Named object [%4.4s] Type %s, "
61170e6ab8fSJung-uk Kim "must be Device/Thermal/Processor type\n",
612eef1b955SJung-uk Kim AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type));
613a159c266SJung-uk Kim }
614a159c266SJung-uk Kim }
615a159c266SJung-uk Kim
616a159c266SJung-uk Kim
617a159c266SJung-uk Kim /*******************************************************************************
618a159c266SJung-uk Kim *
619a159c266SJung-uk Kim * FUNCTION: AcpiDbDisplayInterfaces
620a159c266SJung-uk Kim *
621a159c266SJung-uk Kim * PARAMETERS: ActionArg - Null, "install", or "remove"
622a159c266SJung-uk Kim * InterfaceNameArg - Name for install/remove options
623a159c266SJung-uk Kim *
624a159c266SJung-uk Kim * RETURN: None
625a159c266SJung-uk Kim *
626a159c266SJung-uk Kim * DESCRIPTION: Display or modify the global _OSI interface list
627a159c266SJung-uk Kim *
628a159c266SJung-uk Kim ******************************************************************************/
629a159c266SJung-uk Kim
630a159c266SJung-uk Kim void
AcpiDbDisplayInterfaces(char * ActionArg,char * InterfaceNameArg)631a159c266SJung-uk Kim AcpiDbDisplayInterfaces (
632a159c266SJung-uk Kim char *ActionArg,
633a159c266SJung-uk Kim char *InterfaceNameArg)
634a159c266SJung-uk Kim {
635a159c266SJung-uk Kim ACPI_INTERFACE_INFO *NextInterface;
636a159c266SJung-uk Kim char *SubString;
637a159c266SJung-uk Kim ACPI_STATUS Status;
638a159c266SJung-uk Kim
639a159c266SJung-uk Kim
640a159c266SJung-uk Kim /* If no arguments, just display current interface list */
641a159c266SJung-uk Kim
642a159c266SJung-uk Kim if (!ActionArg)
643a159c266SJung-uk Kim {
64470e6ab8fSJung-uk Kim (void) AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
645a159c266SJung-uk Kim
646a159c266SJung-uk Kim NextInterface = AcpiGbl_SupportedInterfaces;
647a159c266SJung-uk Kim while (NextInterface)
648a159c266SJung-uk Kim {
649a159c266SJung-uk Kim if (!(NextInterface->Flags & ACPI_OSI_INVALID))
650a159c266SJung-uk Kim {
651a159c266SJung-uk Kim AcpiOsPrintf ("%s\n", NextInterface->Name);
652a159c266SJung-uk Kim }
65370e6ab8fSJung-uk Kim
654a159c266SJung-uk Kim NextInterface = NextInterface->Next;
655a159c266SJung-uk Kim }
656a159c266SJung-uk Kim
657a159c266SJung-uk Kim AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
658a159c266SJung-uk Kim return;
659a159c266SJung-uk Kim }
660a159c266SJung-uk Kim
661a159c266SJung-uk Kim /* If ActionArg exists, so must InterfaceNameArg */
662a159c266SJung-uk Kim
663a159c266SJung-uk Kim if (!InterfaceNameArg)
664a159c266SJung-uk Kim {
665a159c266SJung-uk Kim AcpiOsPrintf ("Missing Interface Name argument\n");
666a159c266SJung-uk Kim return;
667a159c266SJung-uk Kim }
668a159c266SJung-uk Kim
669a159c266SJung-uk Kim /* Uppercase the action for match below */
670a159c266SJung-uk Kim
671a159c266SJung-uk Kim AcpiUtStrupr (ActionArg);
672a159c266SJung-uk Kim
673a159c266SJung-uk Kim /* Install - install an interface */
674a159c266SJung-uk Kim
6755ef50723SJung-uk Kim SubString = strstr ("INSTALL", ActionArg);
676a159c266SJung-uk Kim if (SubString)
677a159c266SJung-uk Kim {
678a159c266SJung-uk Kim Status = AcpiInstallInterface (InterfaceNameArg);
679a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
680a159c266SJung-uk Kim {
681a159c266SJung-uk Kim AcpiOsPrintf ("%s, while installing \"%s\"\n",
682a159c266SJung-uk Kim AcpiFormatException (Status), InterfaceNameArg);
683a159c266SJung-uk Kim }
684a159c266SJung-uk Kim return;
685a159c266SJung-uk Kim }
686a159c266SJung-uk Kim
687a159c266SJung-uk Kim /* Remove - remove an interface */
688a159c266SJung-uk Kim
6895ef50723SJung-uk Kim SubString = strstr ("REMOVE", ActionArg);
690a159c266SJung-uk Kim if (SubString)
691a159c266SJung-uk Kim {
692a159c266SJung-uk Kim Status = AcpiRemoveInterface (InterfaceNameArg);
693a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
694a159c266SJung-uk Kim {
695a159c266SJung-uk Kim AcpiOsPrintf ("%s, while removing \"%s\"\n",
696a159c266SJung-uk Kim AcpiFormatException (Status), InterfaceNameArg);
697a159c266SJung-uk Kim }
698a159c266SJung-uk Kim return;
699a159c266SJung-uk Kim }
700a159c266SJung-uk Kim
701a159c266SJung-uk Kim /* Invalid ActionArg */
702a159c266SJung-uk Kim
703a159c266SJung-uk Kim AcpiOsPrintf ("Invalid action argument: %s\n", ActionArg);
704a159c266SJung-uk Kim return;
705a159c266SJung-uk Kim }
706a159c266SJung-uk Kim
707a159c266SJung-uk Kim
708a159c266SJung-uk Kim /*******************************************************************************
709a159c266SJung-uk Kim *
710a159c266SJung-uk Kim * FUNCTION: AcpiDbDisplayTemplate
711a159c266SJung-uk Kim *
712efcc2a30SJung-uk Kim * PARAMETERS: BufferArg - Buffer name or address
713a159c266SJung-uk Kim *
714a159c266SJung-uk Kim * RETURN: None
715a159c266SJung-uk Kim *
716a159c266SJung-uk Kim * DESCRIPTION: Dump a buffer that contains a resource template
717a159c266SJung-uk Kim *
718a159c266SJung-uk Kim ******************************************************************************/
719a159c266SJung-uk Kim
720a159c266SJung-uk Kim void
AcpiDbDisplayTemplate(char * BufferArg)721a159c266SJung-uk Kim AcpiDbDisplayTemplate (
722a159c266SJung-uk Kim char *BufferArg)
723a159c266SJung-uk Kim {
724a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *Node;
725a159c266SJung-uk Kim ACPI_STATUS Status;
726efcc2a30SJung-uk Kim ACPI_BUFFER ReturnBuffer;
727a159c266SJung-uk Kim
728a159c266SJung-uk Kim
729a159c266SJung-uk Kim /* Translate BufferArg to an Named object */
730a159c266SJung-uk Kim
731a159c266SJung-uk Kim Node = AcpiDbConvertToNode (BufferArg);
732a159c266SJung-uk Kim if (!Node || (Node == AcpiGbl_RootNode))
733a159c266SJung-uk Kim {
734a159c266SJung-uk Kim AcpiOsPrintf ("Invalid argument: %s\n", BufferArg);
735a159c266SJung-uk Kim return;
736a159c266SJung-uk Kim }
737a159c266SJung-uk Kim
738a159c266SJung-uk Kim /* We must have a buffer object */
739a159c266SJung-uk Kim
740a159c266SJung-uk Kim if (Node->Type != ACPI_TYPE_BUFFER)
741a159c266SJung-uk Kim {
742a159c266SJung-uk Kim AcpiOsPrintf ("Not a Buffer object, cannot be a template: %s\n",
743a159c266SJung-uk Kim BufferArg);
744a159c266SJung-uk Kim return;
745a159c266SJung-uk Kim }
746a159c266SJung-uk Kim
747efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
748efcc2a30SJung-uk Kim ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
749a159c266SJung-uk Kim
750a159c266SJung-uk Kim /* Attempt to convert the raw buffer to a resource list */
751a159c266SJung-uk Kim
752efcc2a30SJung-uk Kim Status = AcpiRsCreateResourceList (Node->Object, &ReturnBuffer);
753a159c266SJung-uk Kim
754a159c266SJung-uk Kim AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
755a159c266SJung-uk Kim AcpiDbgLevel |= ACPI_LV_RESOURCES;
756a159c266SJung-uk Kim
757a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
758a159c266SJung-uk Kim {
75970e6ab8fSJung-uk Kim AcpiOsPrintf (
76070e6ab8fSJung-uk Kim "Could not convert Buffer to a resource list: %s, %s\n",
761a159c266SJung-uk Kim BufferArg, AcpiFormatException (Status));
762a159c266SJung-uk Kim goto DumpBuffer;
763a159c266SJung-uk Kim }
764a159c266SJung-uk Kim
765a159c266SJung-uk Kim /* Now we can dump the resource list */
766a159c266SJung-uk Kim
767a159c266SJung-uk Kim AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
768efcc2a30SJung-uk Kim ReturnBuffer.Pointer));
769a159c266SJung-uk Kim
770a159c266SJung-uk Kim DumpBuffer:
771a159c266SJung-uk Kim AcpiOsPrintf ("\nRaw data buffer:\n");
7728ef1a331SJung-uk Kim AcpiUtDebugDumpBuffer ((UINT8 *) Node->Object->Buffer.Pointer,
773a159c266SJung-uk Kim Node->Object->Buffer.Length,
774a159c266SJung-uk Kim DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
775a159c266SJung-uk Kim
776a159c266SJung-uk Kim AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
777a159c266SJung-uk Kim return;
778a159c266SJung-uk Kim }
779a159c266SJung-uk Kim
780a159c266SJung-uk Kim
781a159c266SJung-uk Kim /*******************************************************************************
782a159c266SJung-uk Kim *
783a159c266SJung-uk Kim * FUNCTION: AcpiDmCompareAmlResources
784a159c266SJung-uk Kim *
785a159c266SJung-uk Kim * PARAMETERS: Aml1Buffer - Contains first resource list
786a159c266SJung-uk Kim * Aml1BufferLength - Length of first resource list
787a159c266SJung-uk Kim * Aml2Buffer - Contains second resource list
788a159c266SJung-uk Kim * Aml2BufferLength - Length of second resource list
789a159c266SJung-uk Kim *
790a159c266SJung-uk Kim * RETURN: None
791a159c266SJung-uk Kim *
792a159c266SJung-uk Kim * DESCRIPTION: Compare two AML resource lists, descriptor by descriptor (in
793a159c266SJung-uk Kim * order to isolate a miscompare to an individual resource)
794a159c266SJung-uk Kim *
795a159c266SJung-uk Kim ******************************************************************************/
796a159c266SJung-uk Kim
797a159c266SJung-uk Kim static void
AcpiDmCompareAmlResources(UINT8 * Aml1Buffer,ACPI_RSDESC_SIZE Aml1BufferLength,UINT8 * Aml2Buffer,ACPI_RSDESC_SIZE Aml2BufferLength)798a159c266SJung-uk Kim AcpiDmCompareAmlResources (
799a159c266SJung-uk Kim UINT8 *Aml1Buffer,
800a159c266SJung-uk Kim ACPI_RSDESC_SIZE Aml1BufferLength,
801a159c266SJung-uk Kim UINT8 *Aml2Buffer,
802a159c266SJung-uk Kim ACPI_RSDESC_SIZE Aml2BufferLength)
803a159c266SJung-uk Kim {
804a159c266SJung-uk Kim UINT8 *Aml1;
805a159c266SJung-uk Kim UINT8 *Aml2;
806a159c266SJung-uk Kim UINT8 *Aml1End;
807a159c266SJung-uk Kim UINT8 *Aml2End;
808a159c266SJung-uk Kim ACPI_RSDESC_SIZE Aml1Length;
809a159c266SJung-uk Kim ACPI_RSDESC_SIZE Aml2Length;
810a159c266SJung-uk Kim ACPI_RSDESC_SIZE Offset = 0;
811a159c266SJung-uk Kim UINT8 ResourceType;
812a159c266SJung-uk Kim UINT32 Count = 0;
813a159c266SJung-uk Kim UINT32 i;
814a159c266SJung-uk Kim
815a159c266SJung-uk Kim
816a159c266SJung-uk Kim /* Compare overall buffer sizes (may be different due to size rounding) */
817a159c266SJung-uk Kim
818a159c266SJung-uk Kim if (Aml1BufferLength != Aml2BufferLength)
819a159c266SJung-uk Kim {
820a159c266SJung-uk Kim AcpiOsPrintf (
82170e6ab8fSJung-uk Kim "**** Buffer length mismatch in converted "
82270e6ab8fSJung-uk Kim "AML: Original %X, New %X ****\n",
823a159c266SJung-uk Kim Aml1BufferLength, Aml2BufferLength);
824a159c266SJung-uk Kim }
825a159c266SJung-uk Kim
826a159c266SJung-uk Kim Aml1 = Aml1Buffer;
827a159c266SJung-uk Kim Aml2 = Aml2Buffer;
828a159c266SJung-uk Kim Aml1End = Aml1Buffer + Aml1BufferLength;
829a159c266SJung-uk Kim Aml2End = Aml2Buffer + Aml2BufferLength;
830a159c266SJung-uk Kim
831a159c266SJung-uk Kim /* Walk the descriptor lists, comparing each descriptor */
832a159c266SJung-uk Kim
833a159c266SJung-uk Kim while ((Aml1 < Aml1End) && (Aml2 < Aml2End))
834a159c266SJung-uk Kim {
835a159c266SJung-uk Kim /* Get the lengths of each descriptor */
836a159c266SJung-uk Kim
837a159c266SJung-uk Kim Aml1Length = AcpiUtGetDescriptorLength (Aml1);
838a159c266SJung-uk Kim Aml2Length = AcpiUtGetDescriptorLength (Aml2);
839a159c266SJung-uk Kim ResourceType = AcpiUtGetResourceType (Aml1);
840a159c266SJung-uk Kim
841a159c266SJung-uk Kim /* Check for descriptor length match */
842a159c266SJung-uk Kim
843a159c266SJung-uk Kim if (Aml1Length != Aml2Length)
844a159c266SJung-uk Kim {
845a159c266SJung-uk Kim AcpiOsPrintf (
84670e6ab8fSJung-uk Kim "**** Length mismatch in descriptor [%.2X] type %2.2X, "
84770e6ab8fSJung-uk Kim "Offset %8.8X Len1 %X, Len2 %X ****\n",
848a159c266SJung-uk Kim Count, ResourceType, Offset, Aml1Length, Aml2Length);
849a159c266SJung-uk Kim }
850a159c266SJung-uk Kim
851a159c266SJung-uk Kim /* Check for descriptor byte match */
852a159c266SJung-uk Kim
8535ef50723SJung-uk Kim else if (memcmp (Aml1, Aml2, Aml1Length))
854a159c266SJung-uk Kim {
855a159c266SJung-uk Kim AcpiOsPrintf (
85670e6ab8fSJung-uk Kim "**** Data mismatch in descriptor [%.2X] type %2.2X, "
85770e6ab8fSJung-uk Kim "Offset %8.8X ****\n",
858a159c266SJung-uk Kim Count, ResourceType, Offset);
859a159c266SJung-uk Kim
860a159c266SJung-uk Kim for (i = 0; i < Aml1Length; i++)
861a159c266SJung-uk Kim {
862a159c266SJung-uk Kim if (Aml1[i] != Aml2[i])
863a159c266SJung-uk Kim {
864efcc2a30SJung-uk Kim AcpiOsPrintf (
86570e6ab8fSJung-uk Kim "Mismatch at byte offset %.2X: is %2.2X, "
86670e6ab8fSJung-uk Kim "should be %2.2X\n",
867a159c266SJung-uk Kim i, Aml2[i], Aml1[i]);
868a159c266SJung-uk Kim }
869a159c266SJung-uk Kim }
870a159c266SJung-uk Kim }
871a159c266SJung-uk Kim
872a159c266SJung-uk Kim /* Exit on EndTag descriptor */
873a159c266SJung-uk Kim
874a159c266SJung-uk Kim if (ResourceType == ACPI_RESOURCE_NAME_END_TAG)
875a159c266SJung-uk Kim {
876a159c266SJung-uk Kim return;
877a159c266SJung-uk Kim }
878a159c266SJung-uk Kim
879a159c266SJung-uk Kim /* Point to next descriptor in each buffer */
880a159c266SJung-uk Kim
881a159c266SJung-uk Kim Count++;
882a159c266SJung-uk Kim Offset += Aml1Length;
883a159c266SJung-uk Kim Aml1 += Aml1Length;
884a159c266SJung-uk Kim Aml2 += Aml2Length;
885a159c266SJung-uk Kim }
886a159c266SJung-uk Kim }
887a159c266SJung-uk Kim
888a159c266SJung-uk Kim
889a159c266SJung-uk Kim /*******************************************************************************
890a159c266SJung-uk Kim *
891a159c266SJung-uk Kim * FUNCTION: AcpiDmTestResourceConversion
892a159c266SJung-uk Kim *
893a159c266SJung-uk Kim * PARAMETERS: Node - Parent device node
894a159c266SJung-uk Kim * Name - resource method name (_CRS)
895a159c266SJung-uk Kim *
896a159c266SJung-uk Kim * RETURN: Status
897a159c266SJung-uk Kim *
898a159c266SJung-uk Kim * DESCRIPTION: Compare the original AML with a conversion of the AML to
899a159c266SJung-uk Kim * internal resource list, then back to AML.
900a159c266SJung-uk Kim *
901a159c266SJung-uk Kim ******************************************************************************/
902a159c266SJung-uk Kim
903a159c266SJung-uk Kim static ACPI_STATUS
AcpiDmTestResourceConversion(ACPI_NAMESPACE_NODE * Node,char * Name)904a159c266SJung-uk Kim AcpiDmTestResourceConversion (
905a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *Node,
906a159c266SJung-uk Kim char *Name)
907a159c266SJung-uk Kim {
908a159c266SJung-uk Kim ACPI_STATUS Status;
909efcc2a30SJung-uk Kim ACPI_BUFFER ReturnBuffer;
910efcc2a30SJung-uk Kim ACPI_BUFFER ResourceBuffer;
911a159c266SJung-uk Kim ACPI_BUFFER NewAml;
912a159c266SJung-uk Kim ACPI_OBJECT *OriginalAml;
913a159c266SJung-uk Kim
914a159c266SJung-uk Kim
915a159c266SJung-uk Kim AcpiOsPrintf ("Resource Conversion Comparison:\n");
916a159c266SJung-uk Kim
917a159c266SJung-uk Kim NewAml.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
918efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
919efcc2a30SJung-uk Kim ResourceBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
920a159c266SJung-uk Kim
921a159c266SJung-uk Kim /* Get the original _CRS AML resource template */
922a159c266SJung-uk Kim
923efcc2a30SJung-uk Kim Status = AcpiEvaluateObject (Node, Name, NULL, &ReturnBuffer);
924a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
925a159c266SJung-uk Kim {
926a159c266SJung-uk Kim AcpiOsPrintf ("Could not obtain %s: %s\n",
927a159c266SJung-uk Kim Name, AcpiFormatException (Status));
928a159c266SJung-uk Kim return (Status);
929a159c266SJung-uk Kim }
930a159c266SJung-uk Kim
931a159c266SJung-uk Kim /* Get the AML resource template, converted to internal resource structs */
932a159c266SJung-uk Kim
933efcc2a30SJung-uk Kim Status = AcpiGetCurrentResources (Node, &ResourceBuffer);
934a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
935a159c266SJung-uk Kim {
936a159c266SJung-uk Kim AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
937a159c266SJung-uk Kim AcpiFormatException (Status));
938a159c266SJung-uk Kim goto Exit1;
939a159c266SJung-uk Kim }
940a159c266SJung-uk Kim
941a159c266SJung-uk Kim /* Convert internal resource list to external AML resource template */
942a159c266SJung-uk Kim
943313a0c13SJung-uk Kim Status = AcpiRsCreateAmlResources (&ResourceBuffer, &NewAml);
944a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
945a159c266SJung-uk Kim {
946a159c266SJung-uk Kim AcpiOsPrintf ("AcpiRsCreateAmlResources failed: %s\n",
947a159c266SJung-uk Kim AcpiFormatException (Status));
948a159c266SJung-uk Kim goto Exit2;
949a159c266SJung-uk Kim }
950a159c266SJung-uk Kim
951a159c266SJung-uk Kim /* Compare original AML to the newly created AML resource list */
952a159c266SJung-uk Kim
953efcc2a30SJung-uk Kim OriginalAml = ReturnBuffer.Pointer;
954a159c266SJung-uk Kim
955313a0c13SJung-uk Kim AcpiDmCompareAmlResources (OriginalAml->Buffer.Pointer,
956313a0c13SJung-uk Kim (ACPI_RSDESC_SIZE) OriginalAml->Buffer.Length,
957a159c266SJung-uk Kim NewAml.Pointer, (ACPI_RSDESC_SIZE) NewAml.Length);
958a159c266SJung-uk Kim
959a159c266SJung-uk Kim /* Cleanup and exit */
960a159c266SJung-uk Kim
961a159c266SJung-uk Kim ACPI_FREE (NewAml.Pointer);
962a159c266SJung-uk Kim Exit2:
963efcc2a30SJung-uk Kim ACPI_FREE (ResourceBuffer.Pointer);
964a159c266SJung-uk Kim Exit1:
965efcc2a30SJung-uk Kim ACPI_FREE (ReturnBuffer.Pointer);
966a159c266SJung-uk Kim return (Status);
967a159c266SJung-uk Kim }
968a159c266SJung-uk Kim
969a159c266SJung-uk Kim
970a159c266SJung-uk Kim /*******************************************************************************
971a159c266SJung-uk Kim *
972a159c266SJung-uk Kim * FUNCTION: AcpiDbResourceCallback
973a159c266SJung-uk Kim *
974a159c266SJung-uk Kim * PARAMETERS: ACPI_WALK_RESOURCE_CALLBACK
975a159c266SJung-uk Kim *
976a159c266SJung-uk Kim * RETURN: Status
977a159c266SJung-uk Kim *
978efcc2a30SJung-uk Kim * DESCRIPTION: Simple callback to exercise AcpiWalkResources and
979efcc2a30SJung-uk Kim * AcpiWalkResourceBuffer.
980a159c266SJung-uk Kim *
981a159c266SJung-uk Kim ******************************************************************************/
982a159c266SJung-uk Kim
983a159c266SJung-uk Kim static ACPI_STATUS
AcpiDbResourceCallback(ACPI_RESOURCE * Resource,void * Context)984a159c266SJung-uk Kim AcpiDbResourceCallback (
985a159c266SJung-uk Kim ACPI_RESOURCE *Resource,
986a159c266SJung-uk Kim void *Context)
987a159c266SJung-uk Kim {
988a159c266SJung-uk Kim
989a159c266SJung-uk Kim return (AE_OK);
990a159c266SJung-uk Kim }
991a159c266SJung-uk Kim
992a159c266SJung-uk Kim
993a159c266SJung-uk Kim /*******************************************************************************
994a159c266SJung-uk Kim *
995a159c266SJung-uk Kim * FUNCTION: AcpiDbDeviceResources
996a159c266SJung-uk Kim *
997a159c266SJung-uk Kim * PARAMETERS: ACPI_WALK_CALLBACK
998a159c266SJung-uk Kim *
999a159c266SJung-uk Kim * RETURN: Status
1000a159c266SJung-uk Kim *
1001a159c266SJung-uk Kim * DESCRIPTION: Display the _PRT/_CRS/_PRS resources for a device object.
1002a159c266SJung-uk Kim *
1003a159c266SJung-uk Kim ******************************************************************************/
1004a159c266SJung-uk Kim
1005a159c266SJung-uk Kim static ACPI_STATUS
AcpiDbDeviceResources(ACPI_HANDLE ObjHandle,UINT32 NestingLevel,void * Context,void ** ReturnValue)1006a159c266SJung-uk Kim AcpiDbDeviceResources (
1007a159c266SJung-uk Kim ACPI_HANDLE ObjHandle,
1008a159c266SJung-uk Kim UINT32 NestingLevel,
1009a159c266SJung-uk Kim void *Context,
1010a159c266SJung-uk Kim void **ReturnValue)
1011a159c266SJung-uk Kim {
1012a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *Node;
1013a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *PrtNode = NULL;
1014a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *CrsNode = NULL;
1015a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *PrsNode = NULL;
1016a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *AeiNode = NULL;
1017a159c266SJung-uk Kim char *ParentPath;
1018efcc2a30SJung-uk Kim ACPI_BUFFER ReturnBuffer;
1019a159c266SJung-uk Kim ACPI_STATUS Status;
1020a159c266SJung-uk Kim
1021a159c266SJung-uk Kim
1022a159c266SJung-uk Kim Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
1023f8146b88SJung-uk Kim ParentPath = AcpiNsGetNormalizedPathname (Node, TRUE);
1024a159c266SJung-uk Kim if (!ParentPath)
1025a159c266SJung-uk Kim {
1026a159c266SJung-uk Kim return (AE_NO_MEMORY);
1027a159c266SJung-uk Kim }
1028a159c266SJung-uk Kim
1029a159c266SJung-uk Kim /* Get handles to the resource methods for this device */
1030a159c266SJung-uk Kim
103170e6ab8fSJung-uk Kim (void) AcpiGetHandle (Node, METHOD_NAME__PRT,
103270e6ab8fSJung-uk Kim ACPI_CAST_PTR (ACPI_HANDLE, &PrtNode));
103370e6ab8fSJung-uk Kim (void) AcpiGetHandle (Node, METHOD_NAME__CRS,
103470e6ab8fSJung-uk Kim ACPI_CAST_PTR (ACPI_HANDLE, &CrsNode));
103570e6ab8fSJung-uk Kim (void) AcpiGetHandle (Node, METHOD_NAME__PRS,
103670e6ab8fSJung-uk Kim ACPI_CAST_PTR (ACPI_HANDLE, &PrsNode));
103770e6ab8fSJung-uk Kim (void) AcpiGetHandle (Node, METHOD_NAME__AEI,
103870e6ab8fSJung-uk Kim ACPI_CAST_PTR (ACPI_HANDLE, &AeiNode));
103970e6ab8fSJung-uk Kim
1040a159c266SJung-uk Kim if (!PrtNode && !CrsNode && !PrsNode && !AeiNode)
1041a159c266SJung-uk Kim {
1042a159c266SJung-uk Kim goto Cleanup; /* Nothing to do */
1043a159c266SJung-uk Kim }
1044a159c266SJung-uk Kim
1045a159c266SJung-uk Kim AcpiOsPrintf ("\nDevice: %s\n", ParentPath);
1046a159c266SJung-uk Kim
1047a159c266SJung-uk Kim /* Prepare for a return object of arbitrary size */
1048a159c266SJung-uk Kim
1049efcc2a30SJung-uk Kim ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1050efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1051a159c266SJung-uk Kim
1052a159c266SJung-uk Kim
1053a159c266SJung-uk Kim /* _PRT */
1054a159c266SJung-uk Kim
1055a159c266SJung-uk Kim if (PrtNode)
1056a159c266SJung-uk Kim {
1057a159c266SJung-uk Kim AcpiOsPrintf ("Evaluating _PRT\n");
1058a159c266SJung-uk Kim
1059efcc2a30SJung-uk Kim Status = AcpiEvaluateObject (PrtNode, NULL, NULL, &ReturnBuffer);
1060a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1061a159c266SJung-uk Kim {
1062a159c266SJung-uk Kim AcpiOsPrintf ("Could not evaluate _PRT: %s\n",
1063a159c266SJung-uk Kim AcpiFormatException (Status));
1064a159c266SJung-uk Kim goto GetCrs;
1065a159c266SJung-uk Kim }
1066a159c266SJung-uk Kim
1067efcc2a30SJung-uk Kim ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1068efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1069a159c266SJung-uk Kim
1070efcc2a30SJung-uk Kim Status = AcpiGetIrqRoutingTable (Node, &ReturnBuffer);
1071a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1072a159c266SJung-uk Kim {
1073a159c266SJung-uk Kim AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n",
1074a159c266SJung-uk Kim AcpiFormatException (Status));
1075a159c266SJung-uk Kim goto GetCrs;
1076a159c266SJung-uk Kim }
1077a159c266SJung-uk Kim
1078a159c266SJung-uk Kim AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer));
1079a159c266SJung-uk Kim }
1080a159c266SJung-uk Kim
1081a159c266SJung-uk Kim
1082a159c266SJung-uk Kim /* _CRS */
1083a159c266SJung-uk Kim
1084a159c266SJung-uk Kim GetCrs:
1085a159c266SJung-uk Kim if (CrsNode)
1086a159c266SJung-uk Kim {
1087a159c266SJung-uk Kim AcpiOsPrintf ("Evaluating _CRS\n");
1088a159c266SJung-uk Kim
1089efcc2a30SJung-uk Kim ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1090efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1091a159c266SJung-uk Kim
1092efcc2a30SJung-uk Kim Status = AcpiEvaluateObject (CrsNode, NULL, NULL, &ReturnBuffer);
1093a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1094a159c266SJung-uk Kim {
1095a159c266SJung-uk Kim AcpiOsPrintf ("Could not evaluate _CRS: %s\n",
1096a159c266SJung-uk Kim AcpiFormatException (Status));
1097a159c266SJung-uk Kim goto GetPrs;
1098a159c266SJung-uk Kim }
1099a159c266SJung-uk Kim
1100efcc2a30SJung-uk Kim /* This code exercises the AcpiWalkResources interface */
1101a159c266SJung-uk Kim
1102a159c266SJung-uk Kim Status = AcpiWalkResources (Node, METHOD_NAME__CRS,
1103a159c266SJung-uk Kim AcpiDbResourceCallback, NULL);
1104a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1105a159c266SJung-uk Kim {
1106a159c266SJung-uk Kim AcpiOsPrintf ("AcpiWalkResources failed: %s\n",
1107a159c266SJung-uk Kim AcpiFormatException (Status));
1108a159c266SJung-uk Kim goto GetPrs;
1109a159c266SJung-uk Kim }
1110a159c266SJung-uk Kim
1111efcc2a30SJung-uk Kim /* Get the _CRS resource list (test ALLOCATE buffer) */
1112a159c266SJung-uk Kim
1113efcc2a30SJung-uk Kim ReturnBuffer.Pointer = NULL;
1114efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
1115a159c266SJung-uk Kim
1116efcc2a30SJung-uk Kim Status = AcpiGetCurrentResources (Node, &ReturnBuffer);
1117a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1118a159c266SJung-uk Kim {
1119a159c266SJung-uk Kim AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
1120a159c266SJung-uk Kim AcpiFormatException (Status));
1121a159c266SJung-uk Kim goto GetPrs;
1122a159c266SJung-uk Kim }
1123a159c266SJung-uk Kim
1124efcc2a30SJung-uk Kim /* This code exercises the AcpiWalkResourceBuffer interface */
1125efcc2a30SJung-uk Kim
1126efcc2a30SJung-uk Kim Status = AcpiWalkResourceBuffer (&ReturnBuffer,
1127efcc2a30SJung-uk Kim AcpiDbResourceCallback, NULL);
1128efcc2a30SJung-uk Kim if (ACPI_FAILURE (Status))
1129efcc2a30SJung-uk Kim {
1130efcc2a30SJung-uk Kim AcpiOsPrintf ("AcpiWalkResourceBuffer failed: %s\n",
1131efcc2a30SJung-uk Kim AcpiFormatException (Status));
1132efcc2a30SJung-uk Kim goto EndCrs;
1133efcc2a30SJung-uk Kim }
1134efcc2a30SJung-uk Kim
1135a159c266SJung-uk Kim /* Dump the _CRS resource list */
1136a159c266SJung-uk Kim
1137a159c266SJung-uk Kim AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
1138efcc2a30SJung-uk Kim ReturnBuffer.Pointer));
1139a159c266SJung-uk Kim
1140a159c266SJung-uk Kim /*
1141efcc2a30SJung-uk Kim * Perform comparison of original AML to newly created AML. This
1142efcc2a30SJung-uk Kim * tests both the AML->Resource conversion and the Resource->AML
1143efcc2a30SJung-uk Kim * conversion.
1144a159c266SJung-uk Kim */
1145efcc2a30SJung-uk Kim (void) AcpiDmTestResourceConversion (Node, METHOD_NAME__CRS);
1146a159c266SJung-uk Kim
1147a159c266SJung-uk Kim /* Execute _SRS with the resource list */
1148a159c266SJung-uk Kim
11499c48c75eSJung-uk Kim AcpiOsPrintf ("Evaluating _SRS\n");
11509c48c75eSJung-uk Kim
1151efcc2a30SJung-uk Kim Status = AcpiSetCurrentResources (Node, &ReturnBuffer);
1152a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1153a159c266SJung-uk Kim {
1154a159c266SJung-uk Kim AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n",
1155a159c266SJung-uk Kim AcpiFormatException (Status));
1156efcc2a30SJung-uk Kim goto EndCrs;
1157a159c266SJung-uk Kim }
1158efcc2a30SJung-uk Kim
1159efcc2a30SJung-uk Kim EndCrs:
1160313a0c13SJung-uk Kim ACPI_FREE (ReturnBuffer.Pointer);
1161a159c266SJung-uk Kim }
1162a159c266SJung-uk Kim
1163a159c266SJung-uk Kim
1164a159c266SJung-uk Kim /* _PRS */
1165a159c266SJung-uk Kim
1166a159c266SJung-uk Kim GetPrs:
1167a159c266SJung-uk Kim if (PrsNode)
1168a159c266SJung-uk Kim {
1169a159c266SJung-uk Kim AcpiOsPrintf ("Evaluating _PRS\n");
1170a159c266SJung-uk Kim
1171efcc2a30SJung-uk Kim ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1172efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1173a159c266SJung-uk Kim
1174efcc2a30SJung-uk Kim Status = AcpiEvaluateObject (PrsNode, NULL, NULL, &ReturnBuffer);
1175a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1176a159c266SJung-uk Kim {
1177a159c266SJung-uk Kim AcpiOsPrintf ("Could not evaluate _PRS: %s\n",
1178a159c266SJung-uk Kim AcpiFormatException (Status));
1179a159c266SJung-uk Kim goto GetAei;
1180a159c266SJung-uk Kim }
1181a159c266SJung-uk Kim
1182efcc2a30SJung-uk Kim ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1183efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1184a159c266SJung-uk Kim
1185efcc2a30SJung-uk Kim Status = AcpiGetPossibleResources (Node, &ReturnBuffer);
1186a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1187a159c266SJung-uk Kim {
1188a159c266SJung-uk Kim AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n",
1189a159c266SJung-uk Kim AcpiFormatException (Status));
1190a159c266SJung-uk Kim goto GetAei;
1191a159c266SJung-uk Kim }
1192a159c266SJung-uk Kim
119370e6ab8fSJung-uk Kim AcpiRsDumpResourceList (ACPI_CAST_PTR (
119470e6ab8fSJung-uk Kim ACPI_RESOURCE, AcpiGbl_DbBuffer));
1195a159c266SJung-uk Kim }
1196a159c266SJung-uk Kim
1197a159c266SJung-uk Kim
1198a159c266SJung-uk Kim /* _AEI */
1199a159c266SJung-uk Kim
1200a159c266SJung-uk Kim GetAei:
1201a159c266SJung-uk Kim if (AeiNode)
1202a159c266SJung-uk Kim {
1203a159c266SJung-uk Kim AcpiOsPrintf ("Evaluating _AEI\n");
1204a159c266SJung-uk Kim
1205efcc2a30SJung-uk Kim ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1206efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1207a159c266SJung-uk Kim
1208efcc2a30SJung-uk Kim Status = AcpiEvaluateObject (AeiNode, NULL, NULL, &ReturnBuffer);
1209a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1210a159c266SJung-uk Kim {
1211a159c266SJung-uk Kim AcpiOsPrintf ("Could not evaluate _AEI: %s\n",
1212a159c266SJung-uk Kim AcpiFormatException (Status));
1213a159c266SJung-uk Kim goto Cleanup;
1214a159c266SJung-uk Kim }
1215a159c266SJung-uk Kim
1216efcc2a30SJung-uk Kim ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
1217efcc2a30SJung-uk Kim ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
1218a159c266SJung-uk Kim
1219efcc2a30SJung-uk Kim Status = AcpiGetEventResources (Node, &ReturnBuffer);
1220a159c266SJung-uk Kim if (ACPI_FAILURE (Status))
1221a159c266SJung-uk Kim {
1222a159c266SJung-uk Kim AcpiOsPrintf ("AcpiGetEventResources failed: %s\n",
1223a159c266SJung-uk Kim AcpiFormatException (Status));
1224a159c266SJung-uk Kim goto Cleanup;
1225a159c266SJung-uk Kim }
1226a159c266SJung-uk Kim
122770e6ab8fSJung-uk Kim AcpiRsDumpResourceList (ACPI_CAST_PTR (
122870e6ab8fSJung-uk Kim ACPI_RESOURCE, AcpiGbl_DbBuffer));
1229a159c266SJung-uk Kim }
1230a159c266SJung-uk Kim
1231a159c266SJung-uk Kim
1232a159c266SJung-uk Kim Cleanup:
1233a159c266SJung-uk Kim ACPI_FREE (ParentPath);
1234a159c266SJung-uk Kim return (AE_OK);
1235a159c266SJung-uk Kim }
1236a159c266SJung-uk Kim
1237a159c266SJung-uk Kim
1238a159c266SJung-uk Kim /*******************************************************************************
1239a159c266SJung-uk Kim *
1240a159c266SJung-uk Kim * FUNCTION: AcpiDbDisplayResources
1241a159c266SJung-uk Kim *
1242a159c266SJung-uk Kim * PARAMETERS: ObjectArg - String object name or object pointer.
12439c48c75eSJung-uk Kim * NULL or "*" means "display resources for
12449c48c75eSJung-uk Kim * all devices"
1245a159c266SJung-uk Kim *
1246a159c266SJung-uk Kim * RETURN: None
1247a159c266SJung-uk Kim *
1248a159c266SJung-uk Kim * DESCRIPTION: Display the resource objects associated with a device.
1249a159c266SJung-uk Kim *
1250a159c266SJung-uk Kim ******************************************************************************/
1251a159c266SJung-uk Kim
1252a159c266SJung-uk Kim void
AcpiDbDisplayResources(char * ObjectArg)1253a159c266SJung-uk Kim AcpiDbDisplayResources (
1254a159c266SJung-uk Kim char *ObjectArg)
1255a159c266SJung-uk Kim {
1256a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *Node;
1257a159c266SJung-uk Kim
1258a159c266SJung-uk Kim
1259a159c266SJung-uk Kim AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
1260a159c266SJung-uk Kim AcpiDbgLevel |= ACPI_LV_RESOURCES;
1261a159c266SJung-uk Kim
1262a159c266SJung-uk Kim /* Asterisk means "display resources for all devices" */
1263a159c266SJung-uk Kim
12645ef50723SJung-uk Kim if (!ObjectArg || (!strcmp (ObjectArg, "*")))
1265a159c266SJung-uk Kim {
1266a159c266SJung-uk Kim (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
1267a159c266SJung-uk Kim ACPI_UINT32_MAX, AcpiDbDeviceResources, NULL, NULL, NULL);
1268a159c266SJung-uk Kim }
1269a159c266SJung-uk Kim else
1270a159c266SJung-uk Kim {
1271a159c266SJung-uk Kim /* Convert string to object pointer */
1272a159c266SJung-uk Kim
1273a159c266SJung-uk Kim Node = AcpiDbConvertToNode (ObjectArg);
1274a159c266SJung-uk Kim if (Node)
1275a159c266SJung-uk Kim {
1276a159c266SJung-uk Kim if (Node->Type != ACPI_TYPE_DEVICE)
1277a159c266SJung-uk Kim {
127870e6ab8fSJung-uk Kim AcpiOsPrintf (
127970e6ab8fSJung-uk Kim "%4.4s: Name is not a device object (%s)\n",
1280a159c266SJung-uk Kim Node->Name.Ascii, AcpiUtGetTypeName (Node->Type));
1281a159c266SJung-uk Kim }
1282a159c266SJung-uk Kim else
1283a159c266SJung-uk Kim {
1284a159c266SJung-uk Kim (void) AcpiDbDeviceResources (Node, 0, NULL, NULL);
1285a159c266SJung-uk Kim }
1286a159c266SJung-uk Kim }
1287a159c266SJung-uk Kim }
1288a159c266SJung-uk Kim
1289a159c266SJung-uk Kim AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
1290a159c266SJung-uk Kim }
1291a159c266SJung-uk Kim
1292a159c266SJung-uk Kim
129307c64d74SJung-uk Kim /*******************************************************************************
129407c64d74SJung-uk Kim *
129507c64d74SJung-uk Kim * FUNCTION: AcpiDbGenerateGed
129607c64d74SJung-uk Kim *
129707c64d74SJung-uk Kim * PARAMETERS: GedArg - Raw GED number, ascii string
129807c64d74SJung-uk Kim *
129907c64d74SJung-uk Kim * RETURN: None
130007c64d74SJung-uk Kim *
130107c64d74SJung-uk Kim * DESCRIPTION: Simulate firing of a GED
130207c64d74SJung-uk Kim *
130307c64d74SJung-uk Kim ******************************************************************************/
130407c64d74SJung-uk Kim
130507c64d74SJung-uk Kim void
AcpiDbGenerateInterrupt(char * GsivArg)130607c64d74SJung-uk Kim AcpiDbGenerateInterrupt (
130707c64d74SJung-uk Kim char *GsivArg)
130807c64d74SJung-uk Kim {
130907c64d74SJung-uk Kim UINT32 GsivNumber;
131007c64d74SJung-uk Kim ACPI_GED_HANDLER_INFO *GedInfo = AcpiGbl_GedHandlerList;
131107c64d74SJung-uk Kim
131207c64d74SJung-uk Kim if (!GedInfo) {
131307c64d74SJung-uk Kim AcpiOsPrintf ("No GED handling present\n");
131407c64d74SJung-uk Kim }
131507c64d74SJung-uk Kim
131607c64d74SJung-uk Kim GsivNumber = strtoul (GsivArg, NULL, 0);
131707c64d74SJung-uk Kim
131807c64d74SJung-uk Kim while (GedInfo) {
131907c64d74SJung-uk Kim
132007c64d74SJung-uk Kim if (GedInfo->IntId == GsivNumber) {
132107c64d74SJung-uk Kim ACPI_OBJECT_LIST ArgList;
132207c64d74SJung-uk Kim ACPI_OBJECT Arg0;
132307c64d74SJung-uk Kim ACPI_HANDLE EvtHandle = GedInfo->EvtMethod;
132407c64d74SJung-uk Kim ACPI_STATUS Status;
132507c64d74SJung-uk Kim
132607c64d74SJung-uk Kim AcpiOsPrintf ("Evaluate GED _EVT (GSIV=%d)\n", GsivNumber);
132707c64d74SJung-uk Kim
132807c64d74SJung-uk Kim if (!EvtHandle) {
132907c64d74SJung-uk Kim AcpiOsPrintf ("Undefined _EVT method\n");
133007c64d74SJung-uk Kim return;
133107c64d74SJung-uk Kim }
133207c64d74SJung-uk Kim
133307c64d74SJung-uk Kim Arg0.Integer.Type = ACPI_TYPE_INTEGER;
133407c64d74SJung-uk Kim Arg0.Integer.Value = GsivNumber;
133507c64d74SJung-uk Kim
133607c64d74SJung-uk Kim ArgList.Count = 1;
133707c64d74SJung-uk Kim ArgList.Pointer = &Arg0;
133807c64d74SJung-uk Kim
133907c64d74SJung-uk Kim Status = AcpiEvaluateObject (EvtHandle, NULL, &ArgList, NULL);
134007c64d74SJung-uk Kim if (ACPI_FAILURE (Status))
134107c64d74SJung-uk Kim {
134207c64d74SJung-uk Kim AcpiOsPrintf ("Could not evaluate _EVT\n");
134307c64d74SJung-uk Kim return;
134407c64d74SJung-uk Kim }
134507c64d74SJung-uk Kim
134607c64d74SJung-uk Kim }
134707c64d74SJung-uk Kim GedInfo = GedInfo->Next;
134807c64d74SJung-uk Kim }
134907c64d74SJung-uk Kim }
135007c64d74SJung-uk Kim
1351a159c266SJung-uk Kim #if (!ACPI_REDUCED_HARDWARE)
1352a159c266SJung-uk Kim /*******************************************************************************
1353a159c266SJung-uk Kim *
1354a159c266SJung-uk Kim * FUNCTION: AcpiDbGenerateGpe
1355a159c266SJung-uk Kim *
1356a159c266SJung-uk Kim * PARAMETERS: GpeArg - Raw GPE number, ascii string
1357a159c266SJung-uk Kim * BlockArg - GPE block number, ascii string
1358a159c266SJung-uk Kim * 0 or 1 for FADT GPE blocks
1359a159c266SJung-uk Kim *
1360a159c266SJung-uk Kim * RETURN: None
1361a159c266SJung-uk Kim *
1362efcc2a30SJung-uk Kim * DESCRIPTION: Simulate firing of a GPE
1363a159c266SJung-uk Kim *
1364a159c266SJung-uk Kim ******************************************************************************/
1365a159c266SJung-uk Kim
1366a159c266SJung-uk Kim void
AcpiDbGenerateGpe(char * GpeArg,char * BlockArg)1367a159c266SJung-uk Kim AcpiDbGenerateGpe (
1368a159c266SJung-uk Kim char *GpeArg,
1369a159c266SJung-uk Kim char *BlockArg)
1370a159c266SJung-uk Kim {
1371313a0c13SJung-uk Kim UINT32 BlockNumber = 0;
1372a159c266SJung-uk Kim UINT32 GpeNumber;
1373a159c266SJung-uk Kim ACPI_GPE_EVENT_INFO *GpeEventInfo;
1374a159c266SJung-uk Kim
1375a159c266SJung-uk Kim
13765ef50723SJung-uk Kim GpeNumber = strtoul (GpeArg, NULL, 0);
1377a159c266SJung-uk Kim
1378313a0c13SJung-uk Kim /*
1379313a0c13SJung-uk Kim * If no block arg, or block arg == 0 or 1, use the FADT-defined
1380313a0c13SJung-uk Kim * GPE blocks.
1381313a0c13SJung-uk Kim */
1382313a0c13SJung-uk Kim if (BlockArg)
1383313a0c13SJung-uk Kim {
13845ef50723SJung-uk Kim BlockNumber = strtoul (BlockArg, NULL, 0);
1385313a0c13SJung-uk Kim if (BlockNumber == 1)
1386313a0c13SJung-uk Kim {
1387313a0c13SJung-uk Kim BlockNumber = 0;
1388313a0c13SJung-uk Kim }
1389313a0c13SJung-uk Kim }
1390a159c266SJung-uk Kim
1391f8146b88SJung-uk Kim GpeEventInfo = AcpiEvGetGpeEventInfo (
1392f8146b88SJung-uk Kim ACPI_TO_POINTER (BlockNumber), GpeNumber);
1393a159c266SJung-uk Kim if (!GpeEventInfo)
1394a159c266SJung-uk Kim {
1395a159c266SJung-uk Kim AcpiOsPrintf ("Invalid GPE\n");
1396a159c266SJung-uk Kim return;
1397a159c266SJung-uk Kim }
1398a159c266SJung-uk Kim
1399a159c266SJung-uk Kim (void) AcpiEvGpeDispatch (NULL, GpeEventInfo, GpeNumber);
1400a159c266SJung-uk Kim }
140179c6d946SJung-uk Kim
140270e6ab8fSJung-uk Kim
140370e6ab8fSJung-uk Kim /*******************************************************************************
140470e6ab8fSJung-uk Kim *
140570e6ab8fSJung-uk Kim * FUNCTION: AcpiDbGenerateSci
140670e6ab8fSJung-uk Kim *
140770e6ab8fSJung-uk Kim * PARAMETERS: None
140870e6ab8fSJung-uk Kim *
140970e6ab8fSJung-uk Kim * RETURN: None
141070e6ab8fSJung-uk Kim *
141170e6ab8fSJung-uk Kim * DESCRIPTION: Simulate an SCI -- just call the SCI dispatch.
141270e6ab8fSJung-uk Kim *
141370e6ab8fSJung-uk Kim ******************************************************************************/
141470e6ab8fSJung-uk Kim
141579c6d946SJung-uk Kim void
AcpiDbGenerateSci(void)141679c6d946SJung-uk Kim AcpiDbGenerateSci (
141779c6d946SJung-uk Kim void)
141879c6d946SJung-uk Kim {
141979c6d946SJung-uk Kim AcpiEvSciDispatch ();
142079c6d946SJung-uk Kim }
142179c6d946SJung-uk Kim
1422a159c266SJung-uk Kim #endif /* !ACPI_REDUCED_HARDWARE */
1423a159c266SJung-uk Kim
1424fe0f0bbbSJung-uk Kim
1425fe0f0bbbSJung-uk Kim /*******************************************************************************
1426fe0f0bbbSJung-uk Kim *
1427fe0f0bbbSJung-uk Kim * FUNCTION: AcpiDbTrace
1428fe0f0bbbSJung-uk Kim *
1429fe0f0bbbSJung-uk Kim * PARAMETERS: EnableArg - ENABLE/AML to enable tracer
1430fe0f0bbbSJung-uk Kim * DISABLE to disable tracer
1431fe0f0bbbSJung-uk Kim * MethodArg - Method to trace
1432fe0f0bbbSJung-uk Kim * OnceArg - Whether trace once
1433fe0f0bbbSJung-uk Kim *
1434fe0f0bbbSJung-uk Kim * RETURN: None
1435fe0f0bbbSJung-uk Kim *
1436fe0f0bbbSJung-uk Kim * DESCRIPTION: Control method tracing facility
1437fe0f0bbbSJung-uk Kim *
1438fe0f0bbbSJung-uk Kim ******************************************************************************/
1439fe0f0bbbSJung-uk Kim
1440fe0f0bbbSJung-uk Kim void
AcpiDbTrace(char * EnableArg,char * MethodArg,char * OnceArg)1441fe0f0bbbSJung-uk Kim AcpiDbTrace (
1442fe0f0bbbSJung-uk Kim char *EnableArg,
1443fe0f0bbbSJung-uk Kim char *MethodArg,
1444fe0f0bbbSJung-uk Kim char *OnceArg)
1445fe0f0bbbSJung-uk Kim {
1446fe0f0bbbSJung-uk Kim UINT32 DebugLevel = 0;
1447fe0f0bbbSJung-uk Kim UINT32 DebugLayer = 0;
1448fe0f0bbbSJung-uk Kim UINT32 Flags = 0;
1449fe0f0bbbSJung-uk Kim
1450fe0f0bbbSJung-uk Kim
1451fe0f0bbbSJung-uk Kim AcpiUtStrupr (EnableArg);
1452fe0f0bbbSJung-uk Kim AcpiUtStrupr (OnceArg);
145370e6ab8fSJung-uk Kim
1454fe0f0bbbSJung-uk Kim if (MethodArg)
1455fe0f0bbbSJung-uk Kim {
1456fe0f0bbbSJung-uk Kim if (AcpiDbTraceMethodName)
1457fe0f0bbbSJung-uk Kim {
1458fe0f0bbbSJung-uk Kim ACPI_FREE (AcpiDbTraceMethodName);
1459fe0f0bbbSJung-uk Kim AcpiDbTraceMethodName = NULL;
1460fe0f0bbbSJung-uk Kim }
146170e6ab8fSJung-uk Kim
1462fe0f0bbbSJung-uk Kim AcpiDbTraceMethodName = ACPI_ALLOCATE (strlen (MethodArg) + 1);
1463fe0f0bbbSJung-uk Kim if (!AcpiDbTraceMethodName)
1464fe0f0bbbSJung-uk Kim {
146570e6ab8fSJung-uk Kim AcpiOsPrintf ("Failed to allocate method name (%s)\n",
146670e6ab8fSJung-uk Kim MethodArg);
1467fe0f0bbbSJung-uk Kim return;
1468fe0f0bbbSJung-uk Kim }
146970e6ab8fSJung-uk Kim
1470fe0f0bbbSJung-uk Kim strcpy (AcpiDbTraceMethodName, MethodArg);
1471fe0f0bbbSJung-uk Kim }
147270e6ab8fSJung-uk Kim
1473fe0f0bbbSJung-uk Kim if (!strcmp (EnableArg, "ENABLE") ||
1474fe0f0bbbSJung-uk Kim !strcmp (EnableArg, "METHOD") ||
1475fe0f0bbbSJung-uk Kim !strcmp (EnableArg, "OPCODE"))
1476fe0f0bbbSJung-uk Kim {
1477fe0f0bbbSJung-uk Kim if (!strcmp (EnableArg, "ENABLE"))
1478fe0f0bbbSJung-uk Kim {
1479fe0f0bbbSJung-uk Kim /* Inherit current console settings */
1480fe0f0bbbSJung-uk Kim
1481fe0f0bbbSJung-uk Kim DebugLevel = AcpiGbl_DbConsoleDebugLevel;
1482fe0f0bbbSJung-uk Kim DebugLayer = AcpiDbgLayer;
1483fe0f0bbbSJung-uk Kim }
1484fe0f0bbbSJung-uk Kim else
1485fe0f0bbbSJung-uk Kim {
1486fe0f0bbbSJung-uk Kim /* Restrict console output to trace points only */
1487fe0f0bbbSJung-uk Kim
1488fe0f0bbbSJung-uk Kim DebugLevel = ACPI_LV_TRACE_POINT;
1489fe0f0bbbSJung-uk Kim DebugLayer = ACPI_EXECUTER;
1490fe0f0bbbSJung-uk Kim }
1491fe0f0bbbSJung-uk Kim
1492fe0f0bbbSJung-uk Kim Flags = ACPI_TRACE_ENABLED;
149370e6ab8fSJung-uk Kim
1494fe0f0bbbSJung-uk Kim if (!strcmp (EnableArg, "OPCODE"))
1495fe0f0bbbSJung-uk Kim {
1496fe0f0bbbSJung-uk Kim Flags |= ACPI_TRACE_OPCODE;
1497fe0f0bbbSJung-uk Kim }
149870e6ab8fSJung-uk Kim
1499fe0f0bbbSJung-uk Kim if (OnceArg && !strcmp (OnceArg, "ONCE"))
1500fe0f0bbbSJung-uk Kim {
1501fe0f0bbbSJung-uk Kim Flags |= ACPI_TRACE_ONESHOT;
1502fe0f0bbbSJung-uk Kim }
1503fe0f0bbbSJung-uk Kim }
1504fe0f0bbbSJung-uk Kim
1505fe0f0bbbSJung-uk Kim (void) AcpiDebugTrace (AcpiDbTraceMethodName,
1506fe0f0bbbSJung-uk Kim DebugLevel, DebugLayer, Flags);
1507fe0f0bbbSJung-uk Kim }
1508