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*804fe266SJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. 12a159c266SJung-uk Kim * All rights reserved. 13a159c266SJung-uk Kim * 140d84335fSJung-uk Kim * 2. License 150d84335fSJung-uk Kim * 160d84335fSJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property 170d84335fSJung-uk Kim * rights. You may have additional license terms from the party that provided 180d84335fSJung-uk Kim * you this software, covering your right to use that party's intellectual 190d84335fSJung-uk Kim * property rights. 200d84335fSJung-uk Kim * 210d84335fSJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 220d84335fSJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an 230d84335fSJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 240d84335fSJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy, 250d84335fSJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered 260d84335fSJung-uk Kim * Code in any form, with the right to sublicense such rights; and 270d84335fSJung-uk Kim * 280d84335fSJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 290d84335fSJung-uk Kim * license (with the right to sublicense), under only those claims of Intel 300d84335fSJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell, 310d84335fSJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof 320d84335fSJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright 330d84335fSJung-uk Kim * license, and in no event shall the patent license extend to any additions 340d84335fSJung-uk Kim * to or modifications of the Original Intel Code. No other license or right 350d84335fSJung-uk Kim * is granted directly or by implication, estoppel or otherwise; 360d84335fSJung-uk Kim * 370d84335fSJung-uk Kim * The above copyright and patent license is granted only if the following 380d84335fSJung-uk Kim * conditions are met: 390d84335fSJung-uk Kim * 400d84335fSJung-uk Kim * 3. Conditions 410d84335fSJung-uk Kim * 420d84335fSJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 430d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 440d84335fSJung-uk Kim * Code or modification with rights to further distribute source must include 450d84335fSJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions, 460d84335fSJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition, 470d84335fSJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to 480d84335fSJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered 490d84335fSJung-uk Kim * Code and the date of any change. Licensee must include in that file the 500d84335fSJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee 510d84335fSJung-uk Kim * must include a prominent statement that the modification is derived, 520d84335fSJung-uk Kim * directly or indirectly, from Original Intel Code. 530d84335fSJung-uk Kim * 540d84335fSJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 550d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 560d84335fSJung-uk Kim * Code or modification without rights to further distribute source must 570d84335fSJung-uk Kim * include the following Disclaimer and Export Compliance provision in the 580d84335fSJung-uk Kim * documentation and/or other materials provided with distribution. In 590d84335fSJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any 600d84335fSJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the 610d84335fSJung-uk Kim * license from Licensee to its licensee is limited to the intellectual 620d84335fSJung-uk Kim * property embodied in the software Licensee provides to its licensee, and 630d84335fSJung-uk Kim * not to intellectual property embodied in modifications its licensee may 640d84335fSJung-uk Kim * make. 650d84335fSJung-uk Kim * 660d84335fSJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any 670d84335fSJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the 680d84335fSJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance 690d84335fSJung-uk Kim * provision in the documentation and/or other materials provided with the 700d84335fSJung-uk Kim * distribution. 710d84335fSJung-uk Kim * 720d84335fSJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original 730d84335fSJung-uk Kim * Intel Code. 740d84335fSJung-uk Kim * 750d84335fSJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 760d84335fSJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or 770d84335fSJung-uk Kim * other dealings in products derived from or relating to the Covered Code 780d84335fSJung-uk Kim * without prior written authorization from Intel. 790d84335fSJung-uk Kim * 800d84335fSJung-uk Kim * 4. Disclaimer and Export Compliance 810d84335fSJung-uk Kim * 820d84335fSJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 830d84335fSJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 840d84335fSJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 850d84335fSJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 860d84335fSJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 870d84335fSJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 880d84335fSJung-uk Kim * PARTICULAR PURPOSE. 890d84335fSJung-uk Kim * 900d84335fSJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 910d84335fSJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 920d84335fSJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 930d84335fSJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 940d84335fSJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 950d84335fSJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 960d84335fSJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 970d84335fSJung-uk Kim * LIMITED REMEDY. 980d84335fSJung-uk Kim * 990d84335fSJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this 1000d84335fSJung-uk Kim * software or system incorporating such software without first obtaining any 1010d84335fSJung-uk Kim * required license or other approval from the U. S. Department of Commerce or 1020d84335fSJung-uk Kim * any other agency or department of the United States Government. In the 1030d84335fSJung-uk Kim * event Licensee exports any such software from the United States or 1040d84335fSJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall 1050d84335fSJung-uk Kim * ensure that the distribution and export/re-export of the software is in 1060d84335fSJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the 1070d84335fSJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 1080d84335fSJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process, 1090d84335fSJung-uk Kim * software, or service, directly or indirectly, to any country for which the 1100d84335fSJung-uk Kim * United States government or any agency thereof requires an export license, 1110d84335fSJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining 1120d84335fSJung-uk Kim * such license, approval or letter. 1130d84335fSJung-uk Kim * 1140d84335fSJung-uk Kim ***************************************************************************** 1150d84335fSJung-uk Kim * 1160d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 1170d84335fSJung-uk Kim * following license: 1180d84335fSJung-uk Kim * 119a159c266SJung-uk Kim * Redistribution and use in source and binary forms, with or without 120a159c266SJung-uk Kim * modification, are permitted provided that the following conditions 121a159c266SJung-uk Kim * are met: 122a159c266SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 123a159c266SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 124a159c266SJung-uk Kim * without modification. 125a159c266SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 126a159c266SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 127a159c266SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 128a159c266SJung-uk Kim * including a substantially similar Disclaimer requirement for further 129a159c266SJung-uk Kim * binary redistribution. 130a159c266SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 131a159c266SJung-uk Kim * of any contributors may be used to endorse or promote products derived 132a159c266SJung-uk Kim * from this software without specific prior written permission. 133a159c266SJung-uk Kim * 1340d84335fSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1350d84335fSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1360d84335fSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1370d84335fSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1380d84335fSJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1390d84335fSJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1400d84335fSJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1410d84335fSJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1420d84335fSJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1430d84335fSJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1440d84335fSJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1450d84335fSJung-uk Kim * 1460d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 147a159c266SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 148a159c266SJung-uk Kim * Software Foundation. 149a159c266SJung-uk Kim * 1500d84335fSJung-uk Kim *****************************************************************************/ 151a159c266SJung-uk Kim 152a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h> 153a159c266SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h> 154a159c266SJung-uk Kim #include <contrib/dev/acpica/include/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 * 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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