Home | History | Annotate | Line # | Download | only in debugger
dbcmds.c revision 1.3.20.1
      1       1.1  jruoho /*******************************************************************************
      2       1.1  jruoho  *
      3       1.3  jruoho  * Module Name: dbcmds - Miscellaneous debug commands and output routines
      4       1.1  jruoho  *
      5       1.1  jruoho  ******************************************************************************/
      6       1.1  jruoho 
      7       1.3  jruoho /*
      8  1.3.20.1     tls  * Copyright (C) 2000 - 2013, Intel Corp.
      9       1.1  jruoho  * All rights reserved.
     10       1.1  jruoho  *
     11       1.3  jruoho  * Redistribution and use in source and binary forms, with or without
     12       1.3  jruoho  * modification, are permitted provided that the following conditions
     13       1.3  jruoho  * are met:
     14       1.3  jruoho  * 1. Redistributions of source code must retain the above copyright
     15       1.3  jruoho  *    notice, this list of conditions, and the following disclaimer,
     16       1.3  jruoho  *    without modification.
     17       1.3  jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18       1.3  jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19       1.3  jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20       1.3  jruoho  *    including a substantially similar Disclaimer requirement for further
     21       1.3  jruoho  *    binary redistribution.
     22       1.3  jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23       1.3  jruoho  *    of any contributors may be used to endorse or promote products derived
     24       1.3  jruoho  *    from this software without specific prior written permission.
     25       1.3  jruoho  *
     26       1.3  jruoho  * Alternatively, this software may be distributed under the terms of the
     27       1.3  jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28       1.3  jruoho  * Software Foundation.
     29       1.3  jruoho  *
     30       1.3  jruoho  * NO WARRANTY
     31       1.3  jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32       1.3  jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33       1.3  jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34       1.3  jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35       1.3  jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36       1.3  jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37       1.3  jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38       1.3  jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39       1.3  jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40       1.3  jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41       1.3  jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42       1.3  jruoho  */
     43       1.1  jruoho 
     44       1.1  jruoho 
     45       1.1  jruoho #include "acpi.h"
     46       1.1  jruoho #include "accommon.h"
     47       1.1  jruoho #include "acevents.h"
     48       1.1  jruoho #include "acdebug.h"
     49  1.3.20.1     tls #include "acnamesp.h"
     50       1.1  jruoho #include "acresrc.h"
     51       1.1  jruoho #include "actables.h"
     52       1.1  jruoho 
     53       1.1  jruoho #ifdef ACPI_DEBUGGER
     54       1.1  jruoho 
     55       1.1  jruoho #define _COMPONENT          ACPI_CA_DEBUGGER
     56       1.1  jruoho         ACPI_MODULE_NAME    ("dbcmds")
     57       1.1  jruoho 
     58       1.1  jruoho 
     59       1.1  jruoho /* Local prototypes */
     60       1.1  jruoho 
     61       1.1  jruoho static void
     62       1.1  jruoho AcpiDmCompareAmlResources (
     63       1.1  jruoho     UINT8                   *Aml1Buffer,
     64       1.1  jruoho     ACPI_RSDESC_SIZE        Aml1BufferLength,
     65       1.1  jruoho     UINT8                   *Aml2Buffer,
     66       1.1  jruoho     ACPI_RSDESC_SIZE        Aml2BufferLength);
     67       1.1  jruoho 
     68       1.1  jruoho static ACPI_STATUS
     69       1.1  jruoho AcpiDmTestResourceConversion (
     70       1.1  jruoho     ACPI_NAMESPACE_NODE     *Node,
     71       1.1  jruoho     char                    *Name);
     72       1.1  jruoho 
     73  1.3.20.1     tls static ACPI_STATUS
     74  1.3.20.1     tls AcpiDbResourceCallback (
     75  1.3.20.1     tls     ACPI_RESOURCE           *Resource,
     76  1.3.20.1     tls     void                    *Context);
     77  1.3.20.1     tls 
     78  1.3.20.1     tls static ACPI_STATUS
     79  1.3.20.1     tls AcpiDbDeviceResources (
     80  1.3.20.1     tls     ACPI_HANDLE             ObjHandle,
     81  1.3.20.1     tls     UINT32                  NestingLevel,
     82  1.3.20.1     tls     void                    *Context,
     83  1.3.20.1     tls     void                    **ReturnValue);
     84  1.3.20.1     tls 
     85  1.3.20.1     tls static void
     86  1.3.20.1     tls AcpiDbDoOneSleepState (
     87  1.3.20.1     tls     UINT8                   SleepState);
     88  1.3.20.1     tls 
     89       1.1  jruoho 
     90       1.1  jruoho /*******************************************************************************
     91       1.1  jruoho  *
     92       1.1  jruoho  * FUNCTION:    AcpiDbConvertToNode
     93       1.1  jruoho  *
     94  1.3.20.1     tls  * PARAMETERS:  InString            - String to convert
     95       1.1  jruoho  *
     96       1.1  jruoho  * RETURN:      Pointer to a NS node
     97       1.1  jruoho  *
     98  1.3.20.1     tls  * DESCRIPTION: Convert a string to a valid NS pointer. Handles numeric or
     99  1.3.20.1     tls  *              alphanumeric strings.
    100       1.1  jruoho  *
    101       1.1  jruoho  ******************************************************************************/
    102       1.1  jruoho 
    103       1.3  jruoho ACPI_NAMESPACE_NODE *
    104       1.1  jruoho AcpiDbConvertToNode (
    105       1.1  jruoho     char                    *InString)
    106       1.1  jruoho {
    107       1.1  jruoho     ACPI_NAMESPACE_NODE     *Node;
    108  1.3.20.1     tls     ACPI_SIZE               Address;
    109       1.1  jruoho 
    110       1.1  jruoho 
    111       1.1  jruoho     if ((*InString >= 0x30) && (*InString <= 0x39))
    112       1.1  jruoho     {
    113       1.1  jruoho         /* Numeric argument, convert */
    114       1.1  jruoho 
    115  1.3.20.1     tls         Address = ACPI_STRTOUL (InString, NULL, 16);
    116  1.3.20.1     tls         Node = ACPI_TO_POINTER (Address);
    117       1.1  jruoho         if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE)))
    118       1.1  jruoho         {
    119       1.1  jruoho             AcpiOsPrintf ("Address %p is invalid in this address space\n",
    120       1.1  jruoho                 Node);
    121       1.1  jruoho             return (NULL);
    122       1.1  jruoho         }
    123       1.1  jruoho 
    124       1.1  jruoho         /* Make sure pointer is valid NS node */
    125       1.1  jruoho 
    126       1.1  jruoho         if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
    127       1.1  jruoho         {
    128       1.1  jruoho             AcpiOsPrintf ("Address %p is not a valid NS node [%s]\n",
    129       1.1  jruoho                     Node, AcpiUtGetDescriptorName (Node));
    130       1.1  jruoho             return (NULL);
    131       1.1  jruoho         }
    132       1.1  jruoho     }
    133       1.1  jruoho     else
    134       1.1  jruoho     {
    135  1.3.20.1     tls         /*
    136  1.3.20.1     tls          * Alpha argument: The parameter is a name string that must be
    137  1.3.20.1     tls          * resolved to a Namespace object.
    138       1.1  jruoho          */
    139       1.1  jruoho         Node = AcpiDbLocalNsLookup (InString);
    140       1.1  jruoho         if (!Node)
    141       1.1  jruoho         {
    142       1.1  jruoho             Node = AcpiGbl_RootNode;
    143       1.1  jruoho         }
    144       1.1  jruoho     }
    145       1.1  jruoho 
    146       1.1  jruoho     return (Node);
    147       1.1  jruoho }
    148       1.1  jruoho 
    149       1.1  jruoho 
    150       1.1  jruoho /*******************************************************************************
    151       1.1  jruoho  *
    152       1.1  jruoho  * FUNCTION:    AcpiDbSleep
    153       1.1  jruoho  *
    154  1.3.20.1     tls  * PARAMETERS:  ObjectArg           - Desired sleep state (0-5). NULL means
    155  1.3.20.1     tls  *                                    invoke all possible sleep states.
    156       1.1  jruoho  *
    157       1.1  jruoho  * RETURN:      Status
    158       1.1  jruoho  *
    159  1.3.20.1     tls  * DESCRIPTION: Simulate sleep/wake sequences
    160       1.1  jruoho  *
    161       1.1  jruoho  ******************************************************************************/
    162       1.1  jruoho 
    163       1.1  jruoho ACPI_STATUS
    164       1.1  jruoho AcpiDbSleep (
    165       1.1  jruoho     char                    *ObjectArg)
    166       1.1  jruoho {
    167       1.1  jruoho     UINT8                   SleepState;
    168  1.3.20.1     tls     UINT32                  i;
    169  1.3.20.1     tls 
    170  1.3.20.1     tls 
    171  1.3.20.1     tls     ACPI_FUNCTION_TRACE (AcpiDbSleep);
    172  1.3.20.1     tls 
    173  1.3.20.1     tls 
    174  1.3.20.1     tls     /* Null input (no arguments) means to invoke all sleep states */
    175  1.3.20.1     tls 
    176  1.3.20.1     tls     if (!ObjectArg)
    177  1.3.20.1     tls     {
    178  1.3.20.1     tls         AcpiOsPrintf ("Invoking all possible sleep states, 0-%d\n",
    179  1.3.20.1     tls             ACPI_S_STATES_MAX);
    180  1.3.20.1     tls 
    181  1.3.20.1     tls         for (i = 0; i <= ACPI_S_STATES_MAX; i++)
    182  1.3.20.1     tls         {
    183  1.3.20.1     tls             AcpiDbDoOneSleepState ((UINT8) i);
    184  1.3.20.1     tls         }
    185  1.3.20.1     tls 
    186  1.3.20.1     tls         return_ACPI_STATUS (AE_OK);
    187  1.3.20.1     tls     }
    188       1.1  jruoho 
    189  1.3.20.1     tls     /* Convert argument to binary and invoke the sleep state */
    190       1.1  jruoho 
    191       1.1  jruoho     SleepState = (UINT8) ACPI_STRTOUL (ObjectArg, NULL, 0);
    192  1.3.20.1     tls     AcpiDbDoOneSleepState (SleepState);
    193  1.3.20.1     tls     return_ACPI_STATUS (AE_OK);
    194  1.3.20.1     tls }
    195  1.3.20.1     tls 
    196  1.3.20.1     tls 
    197  1.3.20.1     tls /*******************************************************************************
    198  1.3.20.1     tls  *
    199  1.3.20.1     tls  * FUNCTION:    AcpiDbDoOneSleepState
    200  1.3.20.1     tls  *
    201  1.3.20.1     tls  * PARAMETERS:  SleepState          - Desired sleep state (0-5)
    202  1.3.20.1     tls  *
    203  1.3.20.1     tls  * RETURN:      Status
    204  1.3.20.1     tls  *
    205  1.3.20.1     tls  * DESCRIPTION: Simulate a sleep/wake sequence
    206  1.3.20.1     tls  *
    207  1.3.20.1     tls  ******************************************************************************/
    208  1.3.20.1     tls 
    209  1.3.20.1     tls static void
    210  1.3.20.1     tls AcpiDbDoOneSleepState (
    211  1.3.20.1     tls     UINT8                   SleepState)
    212  1.3.20.1     tls {
    213  1.3.20.1     tls     ACPI_STATUS             Status;
    214  1.3.20.1     tls     UINT8                   SleepTypeA;
    215  1.3.20.1     tls     UINT8                   SleepTypeB;
    216  1.3.20.1     tls 
    217  1.3.20.1     tls 
    218  1.3.20.1     tls     /* Validate parameter */
    219  1.3.20.1     tls 
    220  1.3.20.1     tls     if (SleepState > ACPI_S_STATES_MAX)
    221  1.3.20.1     tls     {
    222  1.3.20.1     tls         AcpiOsPrintf ("Sleep state %d out of range (%d max)\n",
    223  1.3.20.1     tls             SleepState, ACPI_S_STATES_MAX);
    224  1.3.20.1     tls         return;
    225  1.3.20.1     tls     }
    226  1.3.20.1     tls 
    227  1.3.20.1     tls     AcpiOsPrintf ("\n---- Invoking sleep state S%d (%s):\n",
    228  1.3.20.1     tls         SleepState, AcpiGbl_SleepStateNames[SleepState]);
    229  1.3.20.1     tls 
    230  1.3.20.1     tls     /* Get the values for the sleep type registers (for display only) */
    231  1.3.20.1     tls 
    232  1.3.20.1     tls     Status = AcpiGetSleepTypeData (SleepState, &SleepTypeA, &SleepTypeB);
    233  1.3.20.1     tls     if (ACPI_FAILURE (Status))
    234  1.3.20.1     tls     {
    235  1.3.20.1     tls         AcpiOsPrintf ("Could not evaluate [%s] method, %s\n",
    236  1.3.20.1     tls             AcpiGbl_SleepStateNames[SleepState],
    237  1.3.20.1     tls             AcpiFormatException (Status));
    238  1.3.20.1     tls         return;
    239  1.3.20.1     tls     }
    240       1.1  jruoho 
    241  1.3.20.1     tls     AcpiOsPrintf (
    242  1.3.20.1     tls         "Register values for sleep state S%d: Sleep-A: %.2X, Sleep-B: %.2X\n",
    243  1.3.20.1     tls         SleepState, SleepTypeA, SleepTypeB);
    244  1.3.20.1     tls 
    245  1.3.20.1     tls     /* Invoke the various sleep/wake interfaces */
    246  1.3.20.1     tls 
    247  1.3.20.1     tls     AcpiOsPrintf ("**** Sleep: Prepare to sleep (S%d) ****\n",
    248  1.3.20.1     tls         SleepState);
    249       1.1  jruoho     Status = AcpiEnterSleepStatePrep (SleepState);
    250       1.1  jruoho     if (ACPI_FAILURE (Status))
    251       1.1  jruoho     {
    252  1.3.20.1     tls         goto ErrorExit;
    253       1.1  jruoho     }
    254       1.1  jruoho 
    255  1.3.20.1     tls     AcpiOsPrintf ("**** Sleep: Going to sleep (S%d) ****\n",
    256  1.3.20.1     tls         SleepState);
    257       1.1  jruoho     Status = AcpiEnterSleepState (SleepState);
    258       1.1  jruoho     if (ACPI_FAILURE (Status))
    259       1.1  jruoho     {
    260  1.3.20.1     tls         goto ErrorExit;
    261  1.3.20.1     tls     }
    262  1.3.20.1     tls 
    263  1.3.20.1     tls     AcpiOsPrintf ("**** Wake: Prepare to return from sleep (S%d) ****\n",
    264  1.3.20.1     tls         SleepState);
    265  1.3.20.1     tls     Status = AcpiLeaveSleepStatePrep (SleepState);
    266  1.3.20.1     tls     if (ACPI_FAILURE (Status))
    267  1.3.20.1     tls     {
    268  1.3.20.1     tls         goto ErrorExit;
    269       1.1  jruoho     }
    270       1.1  jruoho 
    271  1.3.20.1     tls     AcpiOsPrintf ("**** Wake: Return from sleep (S%d) ****\n",
    272  1.3.20.1     tls         SleepState);
    273       1.1  jruoho     Status = AcpiLeaveSleepState (SleepState);
    274  1.3.20.1     tls     if (ACPI_FAILURE (Status))
    275  1.3.20.1     tls     {
    276  1.3.20.1     tls         goto ErrorExit;
    277  1.3.20.1     tls     }
    278       1.1  jruoho 
    279  1.3.20.1     tls     return;
    280  1.3.20.1     tls 
    281  1.3.20.1     tls 
    282  1.3.20.1     tls ErrorExit:
    283  1.3.20.1     tls     ACPI_EXCEPTION ((AE_INFO, Status, "During invocation of sleep state S%d",
    284  1.3.20.1     tls         SleepState));
    285       1.1  jruoho }
    286       1.1  jruoho 
    287  1.3.20.1     tls 
    288       1.1  jruoho /*******************************************************************************
    289       1.1  jruoho  *
    290       1.1  jruoho  * FUNCTION:    AcpiDbDisplayLocks
    291       1.1  jruoho  *
    292       1.1  jruoho  * PARAMETERS:  None
    293       1.1  jruoho  *
    294       1.1  jruoho  * RETURN:      None
    295       1.1  jruoho  *
    296       1.1  jruoho  * DESCRIPTION: Display information about internal mutexes.
    297       1.1  jruoho  *
    298       1.1  jruoho  ******************************************************************************/
    299       1.1  jruoho 
    300       1.1  jruoho void
    301       1.1  jruoho AcpiDbDisplayLocks (
    302       1.1  jruoho     void)
    303       1.1  jruoho {
    304       1.1  jruoho     UINT32                  i;
    305       1.1  jruoho 
    306       1.1  jruoho 
    307       1.1  jruoho     for (i = 0; i < ACPI_MAX_MUTEX; i++)
    308       1.1  jruoho     {
    309       1.1  jruoho         AcpiOsPrintf ("%26s : %s\n", AcpiUtGetMutexName (i),
    310       1.1  jruoho             AcpiGbl_MutexInfo[i].ThreadId == ACPI_MUTEX_NOT_ACQUIRED
    311       1.1  jruoho                 ? "Locked" : "Unlocked");
    312       1.1  jruoho     }
    313       1.1  jruoho }
    314       1.1  jruoho 
    315       1.1  jruoho 
    316       1.1  jruoho /*******************************************************************************
    317       1.1  jruoho  *
    318       1.1  jruoho  * FUNCTION:    AcpiDbDisplayTableInfo
    319       1.1  jruoho  *
    320  1.3.20.1     tls  * PARAMETERS:  TableArg            - Name of table to be displayed
    321       1.1  jruoho  *
    322       1.1  jruoho  * RETURN:      None
    323       1.1  jruoho  *
    324  1.3.20.1     tls  * DESCRIPTION: Display information about loaded tables. Current
    325       1.1  jruoho  *              implementation displays all loaded tables.
    326       1.1  jruoho  *
    327       1.1  jruoho  ******************************************************************************/
    328       1.1  jruoho 
    329       1.1  jruoho void
    330       1.1  jruoho AcpiDbDisplayTableInfo (
    331       1.1  jruoho     char                    *TableArg)
    332       1.1  jruoho {
    333       1.1  jruoho     UINT32                  i;
    334       1.1  jruoho     ACPI_TABLE_DESC         *TableDesc;
    335       1.1  jruoho     ACPI_STATUS             Status;
    336       1.1  jruoho 
    337       1.1  jruoho 
    338  1.3.20.1     tls     /* Header */
    339  1.3.20.1     tls 
    340  1.3.20.1     tls     AcpiOsPrintf ("Idx ID Status    Type            Sig  Address  Len   Header\n");
    341  1.3.20.1     tls 
    342       1.1  jruoho     /* Walk the entire root table list */
    343       1.1  jruoho 
    344       1.1  jruoho     for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
    345       1.1  jruoho     {
    346       1.1  jruoho         TableDesc = &AcpiGbl_RootTableList.Tables[i];
    347  1.3.20.1     tls 
    348  1.3.20.1     tls         /* Index and Table ID */
    349  1.3.20.1     tls 
    350  1.3.20.1     tls         AcpiOsPrintf ("%3u %.2u ", i, TableDesc->OwnerId);
    351  1.3.20.1     tls 
    352  1.3.20.1     tls         /* Decode the table flags */
    353  1.3.20.1     tls 
    354  1.3.20.1     tls         if (!(TableDesc->Flags & ACPI_TABLE_IS_LOADED))
    355  1.3.20.1     tls         {
    356  1.3.20.1     tls             AcpiOsPrintf ("NotLoaded ");
    357  1.3.20.1     tls         }
    358  1.3.20.1     tls         else
    359  1.3.20.1     tls         {
    360  1.3.20.1     tls             AcpiOsPrintf ("   Loaded ");
    361  1.3.20.1     tls         }
    362  1.3.20.1     tls 
    363  1.3.20.1     tls         switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
    364  1.3.20.1     tls         {
    365  1.3.20.1     tls         case ACPI_TABLE_ORIGIN_UNKNOWN:
    366  1.3.20.1     tls 
    367  1.3.20.1     tls             AcpiOsPrintf ("Unknown   ");
    368  1.3.20.1     tls             break;
    369  1.3.20.1     tls 
    370  1.3.20.1     tls         case ACPI_TABLE_ORIGIN_MAPPED:
    371  1.3.20.1     tls 
    372  1.3.20.1     tls             AcpiOsPrintf ("Mapped    ");
    373  1.3.20.1     tls             break;
    374  1.3.20.1     tls 
    375  1.3.20.1     tls         case ACPI_TABLE_ORIGIN_ALLOCATED:
    376  1.3.20.1     tls 
    377  1.3.20.1     tls             AcpiOsPrintf ("Allocated ");
    378  1.3.20.1     tls             break;
    379  1.3.20.1     tls 
    380  1.3.20.1     tls         case ACPI_TABLE_ORIGIN_OVERRIDE:
    381  1.3.20.1     tls 
    382  1.3.20.1     tls             AcpiOsPrintf ("Override  ");
    383  1.3.20.1     tls             break;
    384  1.3.20.1     tls 
    385  1.3.20.1     tls         default:
    386  1.3.20.1     tls 
    387  1.3.20.1     tls             AcpiOsPrintf ("INVALID   ");
    388  1.3.20.1     tls             break;
    389  1.3.20.1     tls         }
    390       1.1  jruoho 
    391       1.1  jruoho         /* Make sure that the table is mapped */
    392       1.1  jruoho 
    393       1.1  jruoho         Status = AcpiTbVerifyTable (TableDesc);
    394       1.1  jruoho         if (ACPI_FAILURE (Status))
    395       1.1  jruoho         {
    396       1.1  jruoho             return;
    397       1.1  jruoho         }
    398       1.1  jruoho 
    399       1.1  jruoho         /* Dump the table header */
    400       1.1  jruoho 
    401       1.1  jruoho         if (TableDesc->Pointer)
    402       1.1  jruoho         {
    403       1.1  jruoho             AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer);
    404       1.1  jruoho         }
    405       1.1  jruoho         else
    406       1.1  jruoho         {
    407       1.1  jruoho             /* If the pointer is null, the table has been unloaded */
    408       1.1  jruoho 
    409       1.1  jruoho             ACPI_INFO ((AE_INFO, "%4.4s - Table has been unloaded",
    410       1.1  jruoho                 TableDesc->Signature.Ascii));
    411       1.1  jruoho         }
    412       1.1  jruoho     }
    413       1.1  jruoho }
    414       1.1  jruoho 
    415       1.1  jruoho 
    416       1.1  jruoho /*******************************************************************************
    417       1.1  jruoho  *
    418       1.3  jruoho  * FUNCTION:    AcpiDbUnloadAcpiTable
    419       1.1  jruoho  *
    420  1.3.20.1     tls  * PARAMETERS:  ObjectName          - Namespace pathname for an object that
    421  1.3.20.1     tls  *                                    is owned by the table to be unloaded
    422       1.1  jruoho  *
    423  1.3.20.1     tls  * RETURN:      None
    424       1.1  jruoho  *
    425  1.3.20.1     tls  * DESCRIPTION: Unload an ACPI table, via any namespace node that is owned
    426  1.3.20.1     tls  *              by the table.
    427       1.1  jruoho  *
    428       1.1  jruoho  ******************************************************************************/
    429       1.1  jruoho 
    430       1.3  jruoho void
    431       1.3  jruoho AcpiDbUnloadAcpiTable (
    432  1.3.20.1     tls     char                    *ObjectName)
    433       1.1  jruoho {
    434  1.3.20.1     tls     ACPI_NAMESPACE_NODE     *Node;
    435       1.1  jruoho     ACPI_STATUS             Status;
    436       1.1  jruoho 
    437       1.1  jruoho 
    438  1.3.20.1     tls     /* Translate name to an Named object */
    439       1.1  jruoho 
    440  1.3.20.1     tls     Node = AcpiDbConvertToNode (ObjectName);
    441  1.3.20.1     tls     if (!Node)
    442       1.1  jruoho     {
    443  1.3.20.1     tls         AcpiOsPrintf ("Could not find [%s] in namespace\n",
    444  1.3.20.1     tls             ObjectName);
    445  1.3.20.1     tls         return;
    446       1.1  jruoho     }
    447       1.1  jruoho 
    448  1.3.20.1     tls     Status = AcpiUnloadParentTable (ACPI_CAST_PTR (ACPI_HANDLE, Node));
    449  1.3.20.1     tls     if (ACPI_SUCCESS (Status))
    450  1.3.20.1     tls     {
    451  1.3.20.1     tls         AcpiOsPrintf ("Parent of [%s] (%p) unloaded and uninstalled\n",
    452  1.3.20.1     tls             ObjectName, Node);
    453  1.3.20.1     tls     }
    454  1.3.20.1     tls     else
    455  1.3.20.1     tls     {
    456  1.3.20.1     tls         AcpiOsPrintf ("%s, while unloading parent table of [%s]\n",
    457  1.3.20.1     tls             AcpiFormatException (Status), ObjectName);
    458  1.3.20.1     tls     }
    459       1.1  jruoho }
    460       1.1  jruoho 
    461       1.1  jruoho 
    462       1.1  jruoho /*******************************************************************************
    463       1.1  jruoho  *
    464       1.3  jruoho  * FUNCTION:    AcpiDbSendNotify
    465       1.1  jruoho  *
    466  1.3.20.1     tls  * PARAMETERS:  Name                - Name of ACPI object where to send notify
    467  1.3.20.1     tls  *              Value               - Value of the notify to send.
    468       1.1  jruoho  *
    469       1.1  jruoho  * RETURN:      None
    470       1.1  jruoho  *
    471  1.3.20.1     tls  * DESCRIPTION: Send an ACPI notification. The value specified is sent to the
    472       1.3  jruoho  *              named object as an ACPI notify.
    473       1.1  jruoho  *
    474       1.1  jruoho  ******************************************************************************/
    475       1.1  jruoho 
    476       1.3  jruoho void
    477       1.3  jruoho AcpiDbSendNotify (
    478       1.3  jruoho     char                    *Name,
    479       1.3  jruoho     UINT32                  Value)
    480       1.1  jruoho {
    481       1.3  jruoho     ACPI_NAMESPACE_NODE     *Node;
    482       1.3  jruoho     ACPI_STATUS             Status;
    483       1.3  jruoho 
    484       1.1  jruoho 
    485       1.3  jruoho     /* Translate name to an Named object */
    486       1.1  jruoho 
    487       1.3  jruoho     Node = AcpiDbConvertToNode (Name);
    488       1.3  jruoho     if (!Node)
    489       1.1  jruoho     {
    490       1.3  jruoho         return;
    491       1.1  jruoho     }
    492       1.1  jruoho 
    493  1.3.20.1     tls     /* Dispatch the notify if legal */
    494       1.1  jruoho 
    495  1.3.20.1     tls     if (AcpiEvIsNotifyObject (Node))
    496       1.1  jruoho     {
    497       1.3  jruoho         Status = AcpiEvQueueNotifyRequest (Node, Value);
    498       1.3  jruoho         if (ACPI_FAILURE (Status))
    499       1.3  jruoho         {
    500       1.3  jruoho             AcpiOsPrintf ("Could not queue notify\n");
    501       1.3  jruoho         }
    502  1.3.20.1     tls     }
    503  1.3.20.1     tls     else
    504  1.3.20.1     tls     {
    505  1.3.20.1     tls         AcpiOsPrintf (
    506  1.3.20.1     tls             "Named object [%4.4s] Type %s, must be Device/Thermal/Processor type\n",
    507  1.3.20.1     tls             AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type));
    508       1.3  jruoho     }
    509       1.1  jruoho }
    510       1.1  jruoho 
    511       1.1  jruoho 
    512       1.1  jruoho /*******************************************************************************
    513       1.1  jruoho  *
    514       1.3  jruoho  * FUNCTION:    AcpiDbDisplayInterfaces
    515       1.1  jruoho  *
    516       1.3  jruoho  * PARAMETERS:  ActionArg           - Null, "install", or "remove"
    517       1.3  jruoho  *              InterfaceNameArg    - Name for install/remove options
    518       1.1  jruoho  *
    519       1.3  jruoho  * RETURN:      None
    520       1.1  jruoho  *
    521       1.3  jruoho  * DESCRIPTION: Display or modify the global _OSI interface list
    522       1.1  jruoho  *
    523       1.1  jruoho  ******************************************************************************/
    524       1.1  jruoho 
    525       1.1  jruoho void
    526       1.3  jruoho AcpiDbDisplayInterfaces (
    527       1.3  jruoho     char                    *ActionArg,
    528       1.3  jruoho     char                    *InterfaceNameArg)
    529       1.1  jruoho {
    530       1.3  jruoho     ACPI_INTERFACE_INFO     *NextInterface;
    531       1.3  jruoho     char                    *SubString;
    532       1.1  jruoho     ACPI_STATUS             Status;
    533       1.1  jruoho 
    534       1.1  jruoho 
    535       1.3  jruoho     /* If no arguments, just display current interface list */
    536       1.3  jruoho 
    537       1.3  jruoho     if (!ActionArg)
    538       1.1  jruoho     {
    539       1.3  jruoho         (void) AcpiOsAcquireMutex (AcpiGbl_OsiMutex,
    540       1.3  jruoho                     ACPI_WAIT_FOREVER);
    541       1.3  jruoho 
    542       1.3  jruoho         NextInterface = AcpiGbl_SupportedInterfaces;
    543       1.3  jruoho         while (NextInterface)
    544       1.3  jruoho         {
    545       1.3  jruoho             if (!(NextInterface->Flags & ACPI_OSI_INVALID))
    546       1.3  jruoho             {
    547       1.3  jruoho                 AcpiOsPrintf ("%s\n", NextInterface->Name);
    548       1.3  jruoho             }
    549       1.3  jruoho             NextInterface = NextInterface->Next;
    550       1.3  jruoho         }
    551       1.3  jruoho 
    552       1.3  jruoho         AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
    553       1.1  jruoho         return;
    554       1.1  jruoho     }
    555       1.1  jruoho 
    556       1.3  jruoho     /* If ActionArg exists, so must InterfaceNameArg */
    557       1.1  jruoho 
    558       1.3  jruoho     if (!InterfaceNameArg)
    559       1.1  jruoho     {
    560       1.3  jruoho         AcpiOsPrintf ("Missing Interface Name argument\n");
    561       1.3  jruoho         return;
    562       1.3  jruoho     }
    563       1.3  jruoho 
    564       1.3  jruoho     /* Uppercase the action for match below */
    565       1.1  jruoho 
    566       1.3  jruoho     AcpiUtStrupr (ActionArg);
    567       1.3  jruoho 
    568       1.3  jruoho     /* Install - install an interface */
    569       1.3  jruoho 
    570       1.3  jruoho     SubString = ACPI_STRSTR ("INSTALL", ActionArg);
    571       1.3  jruoho     if (SubString)
    572       1.3  jruoho     {
    573       1.3  jruoho         Status = AcpiInstallInterface (InterfaceNameArg);
    574       1.1  jruoho         if (ACPI_FAILURE (Status))
    575       1.1  jruoho         {
    576       1.3  jruoho             AcpiOsPrintf ("%s, while installing \"%s\"\n",
    577       1.3  jruoho                 AcpiFormatException (Status), InterfaceNameArg);
    578       1.1  jruoho         }
    579       1.3  jruoho         return;
    580       1.3  jruoho     }
    581       1.3  jruoho 
    582       1.3  jruoho     /* Remove - remove an interface */
    583       1.1  jruoho 
    584       1.3  jruoho     SubString = ACPI_STRSTR ("REMOVE", ActionArg);
    585       1.3  jruoho     if (SubString)
    586       1.1  jruoho     {
    587       1.3  jruoho         Status = AcpiRemoveInterface (InterfaceNameArg);
    588       1.1  jruoho         if (ACPI_FAILURE (Status))
    589       1.1  jruoho         {
    590       1.3  jruoho             AcpiOsPrintf ("%s, while removing \"%s\"\n",
    591       1.3  jruoho                 AcpiFormatException (Status), InterfaceNameArg);
    592       1.1  jruoho         }
    593       1.3  jruoho         return;
    594       1.3  jruoho     }
    595       1.1  jruoho 
    596       1.3  jruoho     /* Invalid ActionArg */
    597       1.1  jruoho 
    598       1.3  jruoho     AcpiOsPrintf ("Invalid action argument: %s\n", ActionArg);
    599       1.1  jruoho     return;
    600       1.1  jruoho }
    601       1.1  jruoho 
    602       1.1  jruoho 
    603       1.1  jruoho /*******************************************************************************
    604       1.1  jruoho  *
    605  1.3.20.1     tls  * FUNCTION:    AcpiDbDisplayTemplate
    606  1.3.20.1     tls  *
    607  1.3.20.1     tls  * PARAMETERS:  BufferArg           - Buffer name or address
    608  1.3.20.1     tls  *
    609  1.3.20.1     tls  * RETURN:      None
    610  1.3.20.1     tls  *
    611  1.3.20.1     tls  * DESCRIPTION: Dump a buffer that contains a resource template
    612  1.3.20.1     tls  *
    613  1.3.20.1     tls  ******************************************************************************/
    614  1.3.20.1     tls 
    615  1.3.20.1     tls void
    616  1.3.20.1     tls AcpiDbDisplayTemplate (
    617  1.3.20.1     tls     char                    *BufferArg)
    618  1.3.20.1     tls {
    619  1.3.20.1     tls     ACPI_NAMESPACE_NODE     *Node;
    620  1.3.20.1     tls     ACPI_STATUS             Status;
    621  1.3.20.1     tls     ACPI_BUFFER             ReturnBuffer;
    622  1.3.20.1     tls 
    623  1.3.20.1     tls 
    624  1.3.20.1     tls     /* Translate BufferArg to an Named object */
    625  1.3.20.1     tls 
    626  1.3.20.1     tls     Node = AcpiDbConvertToNode (BufferArg);
    627  1.3.20.1     tls     if (!Node || (Node == AcpiGbl_RootNode))
    628  1.3.20.1     tls     {
    629  1.3.20.1     tls         AcpiOsPrintf ("Invalid argument: %s\n", BufferArg);
    630  1.3.20.1     tls         return;
    631  1.3.20.1     tls     }
    632  1.3.20.1     tls 
    633  1.3.20.1     tls     /* We must have a buffer object */
    634  1.3.20.1     tls 
    635  1.3.20.1     tls     if (Node->Type != ACPI_TYPE_BUFFER)
    636  1.3.20.1     tls     {
    637  1.3.20.1     tls         AcpiOsPrintf ("Not a Buffer object, cannot be a template: %s\n",
    638  1.3.20.1     tls             BufferArg);
    639  1.3.20.1     tls         return;
    640  1.3.20.1     tls     }
    641  1.3.20.1     tls 
    642  1.3.20.1     tls     ReturnBuffer.Length = ACPI_DEBUG_BUFFER_SIZE;
    643  1.3.20.1     tls     ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
    644  1.3.20.1     tls 
    645  1.3.20.1     tls     /* Attempt to convert the raw buffer to a resource list */
    646  1.3.20.1     tls 
    647  1.3.20.1     tls     Status = AcpiRsCreateResourceList (Node->Object, &ReturnBuffer);
    648  1.3.20.1     tls 
    649  1.3.20.1     tls     AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
    650  1.3.20.1     tls     AcpiDbgLevel |= ACPI_LV_RESOURCES;
    651  1.3.20.1     tls 
    652  1.3.20.1     tls     if (ACPI_FAILURE (Status))
    653  1.3.20.1     tls     {
    654  1.3.20.1     tls         AcpiOsPrintf ("Could not convert Buffer to a resource list: %s, %s\n",
    655  1.3.20.1     tls             BufferArg, AcpiFormatException (Status));
    656  1.3.20.1     tls         goto DumpBuffer;
    657  1.3.20.1     tls     }
    658  1.3.20.1     tls 
    659  1.3.20.1     tls     /* Now we can dump the resource list */
    660  1.3.20.1     tls 
    661  1.3.20.1     tls     AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
    662  1.3.20.1     tls         ReturnBuffer.Pointer));
    663  1.3.20.1     tls 
    664  1.3.20.1     tls DumpBuffer:
    665  1.3.20.1     tls     AcpiOsPrintf ("\nRaw data buffer:\n");
    666  1.3.20.1     tls     AcpiUtDebugDumpBuffer ((UINT8 *) Node->Object->Buffer.Pointer,
    667  1.3.20.1     tls         Node->Object->Buffer.Length,
    668  1.3.20.1     tls         DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
    669  1.3.20.1     tls 
    670  1.3.20.1     tls     AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
    671  1.3.20.1     tls     return;
    672  1.3.20.1     tls }
    673  1.3.20.1     tls 
    674  1.3.20.1     tls 
    675  1.3.20.1     tls /*******************************************************************************
    676  1.3.20.1     tls  *
    677       1.1  jruoho  * FUNCTION:    AcpiDmCompareAmlResources
    678       1.1  jruoho  *
    679       1.1  jruoho  * PARAMETERS:  Aml1Buffer          - Contains first resource list
    680       1.1  jruoho  *              Aml1BufferLength    - Length of first resource list
    681       1.1  jruoho  *              Aml2Buffer          - Contains second resource list
    682       1.1  jruoho  *              Aml2BufferLength    - Length of second resource list
    683       1.1  jruoho  *
    684       1.1  jruoho  * RETURN:      None
    685       1.1  jruoho  *
    686       1.1  jruoho  * DESCRIPTION: Compare two AML resource lists, descriptor by descriptor (in
    687       1.1  jruoho  *              order to isolate a miscompare to an individual resource)
    688       1.1  jruoho  *
    689       1.1  jruoho  ******************************************************************************/
    690       1.1  jruoho 
    691       1.1  jruoho static void
    692       1.1  jruoho AcpiDmCompareAmlResources (
    693       1.1  jruoho     UINT8                   *Aml1Buffer,
    694       1.1  jruoho     ACPI_RSDESC_SIZE        Aml1BufferLength,
    695       1.1  jruoho     UINT8                   *Aml2Buffer,
    696       1.1  jruoho     ACPI_RSDESC_SIZE        Aml2BufferLength)
    697       1.1  jruoho {
    698       1.1  jruoho     UINT8                   *Aml1;
    699       1.1  jruoho     UINT8                   *Aml2;
    700  1.3.20.1     tls     UINT8                   *Aml1End;
    701  1.3.20.1     tls     UINT8                   *Aml2End;
    702       1.1  jruoho     ACPI_RSDESC_SIZE        Aml1Length;
    703       1.1  jruoho     ACPI_RSDESC_SIZE        Aml2Length;
    704       1.1  jruoho     ACPI_RSDESC_SIZE        Offset = 0;
    705       1.1  jruoho     UINT8                   ResourceType;
    706       1.1  jruoho     UINT32                  Count = 0;
    707  1.3.20.1     tls     UINT32                  i;
    708       1.1  jruoho 
    709       1.1  jruoho 
    710       1.1  jruoho     /* Compare overall buffer sizes (may be different due to size rounding) */
    711       1.1  jruoho 
    712       1.1  jruoho     if (Aml1BufferLength != Aml2BufferLength)
    713       1.1  jruoho     {
    714       1.1  jruoho         AcpiOsPrintf (
    715  1.3.20.1     tls             "**** Buffer length mismatch in converted AML: Original %X, New %X ****\n",
    716       1.1  jruoho             Aml1BufferLength, Aml2BufferLength);
    717       1.1  jruoho     }
    718       1.1  jruoho 
    719       1.1  jruoho     Aml1 = Aml1Buffer;
    720       1.1  jruoho     Aml2 = Aml2Buffer;
    721  1.3.20.1     tls     Aml1End = Aml1Buffer + Aml1BufferLength;
    722  1.3.20.1     tls     Aml2End = Aml2Buffer + Aml2BufferLength;
    723       1.1  jruoho 
    724       1.1  jruoho     /* Walk the descriptor lists, comparing each descriptor */
    725       1.1  jruoho 
    726  1.3.20.1     tls     while ((Aml1 < Aml1End) && (Aml2 < Aml2End))
    727       1.1  jruoho     {
    728       1.1  jruoho         /* Get the lengths of each descriptor */
    729       1.1  jruoho 
    730       1.1  jruoho         Aml1Length = AcpiUtGetDescriptorLength (Aml1);
    731       1.1  jruoho         Aml2Length = AcpiUtGetDescriptorLength (Aml2);
    732       1.1  jruoho         ResourceType = AcpiUtGetResourceType (Aml1);
    733       1.1  jruoho 
    734       1.1  jruoho         /* Check for descriptor length match */
    735       1.1  jruoho 
    736       1.1  jruoho         if (Aml1Length != Aml2Length)
    737       1.1  jruoho         {
    738       1.1  jruoho             AcpiOsPrintf (
    739  1.3.20.1     tls                 "**** Length mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X Len1 %X, Len2 %X ****\n",
    740       1.1  jruoho                 Count, ResourceType, Offset, Aml1Length, Aml2Length);
    741       1.1  jruoho         }
    742       1.1  jruoho 
    743       1.1  jruoho         /* Check for descriptor byte match */
    744       1.1  jruoho 
    745       1.1  jruoho         else if (ACPI_MEMCMP (Aml1, Aml2, Aml1Length))
    746       1.1  jruoho         {
    747       1.1  jruoho             AcpiOsPrintf (
    748       1.1  jruoho                 "**** Data mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X ****\n",
    749       1.1  jruoho                 Count, ResourceType, Offset);
    750  1.3.20.1     tls 
    751  1.3.20.1     tls             for (i = 0; i < Aml1Length; i++)
    752  1.3.20.1     tls             {
    753  1.3.20.1     tls                 if (Aml1[i] != Aml2[i])
    754  1.3.20.1     tls                 {
    755  1.3.20.1     tls                     AcpiOsPrintf (
    756  1.3.20.1     tls                         "Mismatch at byte offset %.2X: is %2.2X, should be %2.2X\n",
    757  1.3.20.1     tls                         i, Aml2[i], Aml1[i]);
    758  1.3.20.1     tls                 }
    759  1.3.20.1     tls             }
    760       1.1  jruoho         }
    761       1.1  jruoho 
    762       1.1  jruoho         /* Exit on EndTag descriptor */
    763       1.1  jruoho 
    764       1.1  jruoho         if (ResourceType == ACPI_RESOURCE_NAME_END_TAG)
    765       1.1  jruoho         {
    766       1.1  jruoho             return;
    767       1.1  jruoho         }
    768       1.1  jruoho 
    769       1.1  jruoho         /* Point to next descriptor in each buffer */
    770       1.1  jruoho 
    771       1.1  jruoho         Count++;
    772       1.1  jruoho         Offset += Aml1Length;
    773       1.1  jruoho         Aml1 += Aml1Length;
    774       1.1  jruoho         Aml2 += Aml2Length;
    775       1.1  jruoho     }
    776       1.1  jruoho }
    777       1.1  jruoho 
    778       1.1  jruoho 
    779       1.1  jruoho /*******************************************************************************
    780       1.1  jruoho  *
    781       1.1  jruoho  * FUNCTION:    AcpiDmTestResourceConversion
    782       1.1  jruoho  *
    783  1.3.20.1     tls  * PARAMETERS:  Node                - Parent device node
    784  1.3.20.1     tls  *              Name                - resource method name (_CRS)
    785       1.1  jruoho  *
    786       1.1  jruoho  * RETURN:      Status
    787       1.1  jruoho  *
    788       1.1  jruoho  * DESCRIPTION: Compare the original AML with a conversion of the AML to
    789       1.1  jruoho  *              internal resource list, then back to AML.
    790       1.1  jruoho  *
    791       1.1  jruoho  ******************************************************************************/
    792       1.1  jruoho 
    793       1.1  jruoho static ACPI_STATUS
    794       1.1  jruoho AcpiDmTestResourceConversion (
    795       1.1  jruoho     ACPI_NAMESPACE_NODE     *Node,
    796       1.1  jruoho     char                    *Name)
    797       1.1  jruoho {
    798       1.1  jruoho     ACPI_STATUS             Status;
    799  1.3.20.1     tls     ACPI_BUFFER             ReturnBuffer;
    800  1.3.20.1     tls     ACPI_BUFFER             ResourceBuffer;
    801       1.1  jruoho     ACPI_BUFFER             NewAml;
    802       1.1  jruoho     ACPI_OBJECT             *OriginalAml;
    803       1.1  jruoho 
    804       1.1  jruoho 
    805       1.1  jruoho     AcpiOsPrintf ("Resource Conversion Comparison:\n");
    806       1.1  jruoho 
    807       1.1  jruoho     NewAml.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
    808  1.3.20.1     tls     ReturnBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
    809  1.3.20.1     tls     ResourceBuffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
    810       1.1  jruoho 
    811       1.1  jruoho     /* Get the original _CRS AML resource template */
    812       1.1  jruoho 
    813  1.3.20.1     tls     Status = AcpiEvaluateObject (Node, Name, NULL, &ReturnBuffer);
    814       1.1  jruoho     if (ACPI_FAILURE (Status))
    815       1.1  jruoho     {
    816       1.1  jruoho         AcpiOsPrintf ("Could not obtain %s: %s\n",
    817       1.1  jruoho             Name, AcpiFormatException (Status));
    818       1.1  jruoho         return (Status);
    819       1.1  jruoho     }
    820       1.1  jruoho 
    821       1.1  jruoho     /* Get the AML resource template, converted to internal resource structs */
    822       1.1  jruoho 
    823  1.3.20.1     tls     Status = AcpiGetCurrentResources (Node, &ResourceBuffer);
    824       1.1  jruoho     if (ACPI_FAILURE (Status))
    825       1.1  jruoho     {
    826       1.1  jruoho         AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
    827       1.1  jruoho             AcpiFormatException (Status));
    828       1.1  jruoho         goto Exit1;
    829       1.1  jruoho     }
    830       1.1  jruoho 
    831       1.1  jruoho     /* Convert internal resource list to external AML resource template */
    832       1.1  jruoho 
    833  1.3.20.1     tls     Status = AcpiRsCreateAmlResources (&ResourceBuffer, &NewAml);
    834       1.1  jruoho     if (ACPI_FAILURE (Status))
    835       1.1  jruoho     {
    836       1.1  jruoho         AcpiOsPrintf ("AcpiRsCreateAmlResources failed: %s\n",
    837       1.1  jruoho             AcpiFormatException (Status));
    838       1.1  jruoho         goto Exit2;
    839       1.1  jruoho     }
    840       1.1  jruoho 
    841       1.1  jruoho     /* Compare original AML to the newly created AML resource list */
    842       1.1  jruoho 
    843  1.3.20.1     tls     OriginalAml = ReturnBuffer.Pointer;
    844       1.1  jruoho 
    845  1.3.20.1     tls     AcpiDmCompareAmlResources (OriginalAml->Buffer.Pointer,
    846  1.3.20.1     tls         (ACPI_RSDESC_SIZE) OriginalAml->Buffer.Length,
    847       1.1  jruoho         NewAml.Pointer, (ACPI_RSDESC_SIZE) NewAml.Length);
    848       1.1  jruoho 
    849       1.1  jruoho     /* Cleanup and exit */
    850       1.1  jruoho 
    851       1.1  jruoho     ACPI_FREE (NewAml.Pointer);
    852       1.1  jruoho Exit2:
    853  1.3.20.1     tls     ACPI_FREE (ResourceBuffer.Pointer);
    854       1.1  jruoho Exit1:
    855  1.3.20.1     tls     ACPI_FREE (ReturnBuffer.Pointer);
    856       1.1  jruoho     return (Status);
    857       1.1  jruoho }
    858       1.1  jruoho 
    859       1.1  jruoho 
    860       1.1  jruoho /*******************************************************************************
    861       1.1  jruoho  *
    862  1.3.20.1     tls  * FUNCTION:    AcpiDbResourceCallback
    863       1.1  jruoho  *
    864  1.3.20.1     tls  * PARAMETERS:  ACPI_WALK_RESOURCE_CALLBACK
    865       1.1  jruoho  *
    866  1.3.20.1     tls  * RETURN:      Status
    867       1.1  jruoho  *
    868  1.3.20.1     tls  * DESCRIPTION: Simple callback to exercise AcpiWalkResources and
    869  1.3.20.1     tls  *              AcpiWalkResourceBuffer.
    870       1.1  jruoho  *
    871       1.1  jruoho  ******************************************************************************/
    872       1.1  jruoho 
    873  1.3.20.1     tls static ACPI_STATUS
    874  1.3.20.1     tls AcpiDbResourceCallback (
    875  1.3.20.1     tls     ACPI_RESOURCE           *Resource,
    876  1.3.20.1     tls     void                    *Context)
    877  1.3.20.1     tls {
    878  1.3.20.1     tls 
    879  1.3.20.1     tls     return (AE_OK);
    880  1.3.20.1     tls }
    881  1.3.20.1     tls 
    882  1.3.20.1     tls 
    883  1.3.20.1     tls /*******************************************************************************
    884  1.3.20.1     tls  *
    885  1.3.20.1     tls  * FUNCTION:    AcpiDbDeviceResources
    886  1.3.20.1     tls  *
    887  1.3.20.1     tls  * PARAMETERS:  ACPI_WALK_CALLBACK
    888  1.3.20.1     tls  *
    889  1.3.20.1     tls  * RETURN:      Status
    890  1.3.20.1     tls  *
    891  1.3.20.1     tls  * DESCRIPTION: Display the _PRT/_CRS/_PRS resources for a device object.
    892  1.3.20.1     tls  *
    893  1.3.20.1     tls  ******************************************************************************/
    894  1.3.20.1     tls 
    895  1.3.20.1     tls static ACPI_STATUS
    896  1.3.20.1     tls AcpiDbDeviceResources (
    897  1.3.20.1     tls     ACPI_HANDLE             ObjHandle,
    898  1.3.20.1     tls     UINT32                  NestingLevel,
    899  1.3.20.1     tls     void                    *Context,
    900  1.3.20.1     tls     void                    **ReturnValue)
    901       1.1  jruoho {
    902       1.1  jruoho     ACPI_NAMESPACE_NODE     *Node;
    903  1.3.20.1     tls     ACPI_NAMESPACE_NODE     *PrtNode = NULL;
    904  1.3.20.1     tls     ACPI_NAMESPACE_NODE     *CrsNode = NULL;
    905  1.3.20.1     tls     ACPI_NAMESPACE_NODE     *PrsNode = NULL;
    906  1.3.20.1     tls     ACPI_NAMESPACE_NODE     *AeiNode = NULL;
    907  1.3.20.1     tls     char                    *ParentPath;
    908  1.3.20.1     tls     ACPI_BUFFER             ReturnBuffer;
    909       1.1  jruoho     ACPI_STATUS             Status;
    910       1.1  jruoho 
    911       1.1  jruoho 
    912  1.3.20.1     tls     Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
    913  1.3.20.1     tls     ParentPath = AcpiNsGetExternalPathname (Node);
    914  1.3.20.1     tls     if (!ParentPath)
    915  1.3.20.1     tls     {
    916  1.3.20.1     tls         return (AE_NO_MEMORY);
    917  1.3.20.1     tls     }
    918       1.1  jruoho 
    919  1.3.20.1     tls     /* Get handles to the resource methods for this device */
    920       1.1  jruoho 
    921  1.3.20.1     tls     (void) AcpiGetHandle (Node, METHOD_NAME__PRT, ACPI_CAST_PTR (ACPI_HANDLE, &PrtNode));
    922  1.3.20.1     tls     (void) AcpiGetHandle (Node, METHOD_NAME__CRS, ACPI_CAST_PTR (ACPI_HANDLE, &CrsNode));
    923  1.3.20.1     tls     (void) AcpiGetHandle (Node, METHOD_NAME__PRS, ACPI_CAST_PTR (ACPI_HANDLE, &PrsNode));
    924  1.3.20.1     tls     (void) AcpiGetHandle (Node, METHOD_NAME__AEI, ACPI_CAST_PTR (ACPI_HANDLE, &AeiNode));
    925  1.3.20.1     tls     if (!PrtNode && !CrsNode && !PrsNode && !AeiNode)
    926       1.1  jruoho     {
    927  1.3.20.1     tls         goto Cleanup;   /* Nothing to do */
    928       1.1  jruoho     }
    929       1.1  jruoho 
    930  1.3.20.1     tls     AcpiOsPrintf ("\nDevice: %s\n", ParentPath);
    931  1.3.20.1     tls 
    932       1.1  jruoho     /* Prepare for a return object of arbitrary size */
    933       1.1  jruoho 
    934  1.3.20.1     tls     ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
    935  1.3.20.1     tls     ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
    936  1.3.20.1     tls 
    937       1.1  jruoho 
    938       1.1  jruoho     /* _PRT */
    939       1.1  jruoho 
    940  1.3.20.1     tls     if (PrtNode)
    941  1.3.20.1     tls     {
    942  1.3.20.1     tls         AcpiOsPrintf ("Evaluating _PRT\n");
    943       1.1  jruoho 
    944  1.3.20.1     tls         Status = AcpiEvaluateObject (PrtNode, NULL, NULL, &ReturnBuffer);
    945  1.3.20.1     tls         if (ACPI_FAILURE (Status))
    946  1.3.20.1     tls         {
    947  1.3.20.1     tls             AcpiOsPrintf ("Could not evaluate _PRT: %s\n",
    948  1.3.20.1     tls                 AcpiFormatException (Status));
    949  1.3.20.1     tls             goto GetCrs;
    950  1.3.20.1     tls         }
    951       1.1  jruoho 
    952  1.3.20.1     tls         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
    953  1.3.20.1     tls         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
    954       1.1  jruoho 
    955  1.3.20.1     tls         Status = AcpiGetIrqRoutingTable (Node, &ReturnBuffer);
    956  1.3.20.1     tls         if (ACPI_FAILURE (Status))
    957  1.3.20.1     tls         {
    958  1.3.20.1     tls             AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n",
    959  1.3.20.1     tls                 AcpiFormatException (Status));
    960  1.3.20.1     tls             goto GetCrs;
    961  1.3.20.1     tls         }
    962       1.1  jruoho 
    963  1.3.20.1     tls         AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer));
    964       1.1  jruoho     }
    965       1.1  jruoho 
    966       1.1  jruoho 
    967       1.1  jruoho     /* _CRS */
    968       1.1  jruoho 
    969       1.1  jruoho GetCrs:
    970  1.3.20.1     tls     if (CrsNode)
    971  1.3.20.1     tls     {
    972  1.3.20.1     tls         AcpiOsPrintf ("Evaluating _CRS\n");
    973       1.1  jruoho 
    974  1.3.20.1     tls         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
    975  1.3.20.1     tls         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
    976       1.1  jruoho 
    977  1.3.20.1     tls         Status = AcpiEvaluateObject (CrsNode, NULL, NULL, &ReturnBuffer);
    978  1.3.20.1     tls         if (ACPI_FAILURE (Status))
    979  1.3.20.1     tls         {
    980  1.3.20.1     tls             AcpiOsPrintf ("Could not evaluate _CRS: %s\n",
    981  1.3.20.1     tls                 AcpiFormatException (Status));
    982  1.3.20.1     tls             goto GetPrs;
    983  1.3.20.1     tls         }
    984       1.1  jruoho 
    985  1.3.20.1     tls         /* This code exercises the AcpiWalkResources interface */
    986       1.1  jruoho 
    987  1.3.20.1     tls         Status = AcpiWalkResources (Node, METHOD_NAME__CRS,
    988  1.3.20.1     tls             AcpiDbResourceCallback, NULL);
    989  1.3.20.1     tls         if (ACPI_FAILURE (Status))
    990  1.3.20.1     tls         {
    991  1.3.20.1     tls             AcpiOsPrintf ("AcpiWalkResources failed: %s\n",
    992  1.3.20.1     tls                 AcpiFormatException (Status));
    993  1.3.20.1     tls             goto GetPrs;
    994  1.3.20.1     tls         }
    995       1.1  jruoho 
    996  1.3.20.1     tls         /* Get the _CRS resource list (test ALLOCATE buffer) */
    997       1.1  jruoho 
    998  1.3.20.1     tls         ReturnBuffer.Pointer = NULL;
    999  1.3.20.1     tls         ReturnBuffer.Length  = ACPI_ALLOCATE_LOCAL_BUFFER;
   1000  1.3.20.1     tls 
   1001  1.3.20.1     tls         Status = AcpiGetCurrentResources (Node, &ReturnBuffer);
   1002  1.3.20.1     tls         if (ACPI_FAILURE (Status))
   1003  1.3.20.1     tls         {
   1004  1.3.20.1     tls             AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n",
   1005  1.3.20.1     tls                 AcpiFormatException (Status));
   1006  1.3.20.1     tls             goto GetPrs;
   1007  1.3.20.1     tls         }
   1008       1.1  jruoho 
   1009  1.3.20.1     tls         /* This code exercises the AcpiWalkResourceBuffer interface */
   1010       1.1  jruoho 
   1011  1.3.20.1     tls         Status = AcpiWalkResourceBuffer (&ReturnBuffer,
   1012  1.3.20.1     tls             AcpiDbResourceCallback, NULL);
   1013  1.3.20.1     tls         if (ACPI_FAILURE (Status))
   1014  1.3.20.1     tls         {
   1015  1.3.20.1     tls             AcpiOsPrintf ("AcpiWalkResourceBuffer failed: %s\n",
   1016  1.3.20.1     tls                 AcpiFormatException (Status));
   1017  1.3.20.1     tls             goto EndCrs;
   1018  1.3.20.1     tls         }
   1019       1.1  jruoho 
   1020  1.3.20.1     tls         /* Dump the _CRS resource list */
   1021       1.1  jruoho 
   1022  1.3.20.1     tls         AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE,
   1023  1.3.20.1     tls             ReturnBuffer.Pointer));
   1024       1.1  jruoho 
   1025  1.3.20.1     tls         /*
   1026  1.3.20.1     tls          * Perform comparison of original AML to newly created AML. This
   1027  1.3.20.1     tls          * tests both the AML->Resource conversion and the Resource->AML
   1028  1.3.20.1     tls          * conversion.
   1029  1.3.20.1     tls          */
   1030  1.3.20.1     tls         (void) AcpiDmTestResourceConversion (Node, __UNCONST(METHOD_NAME__CRS));
   1031  1.3.20.1     tls 
   1032  1.3.20.1     tls         /* Execute _SRS with the resource list */
   1033  1.3.20.1     tls 
   1034  1.3.20.1     tls         AcpiOsPrintf ("Evaluating _SRS\n");
   1035  1.3.20.1     tls 
   1036  1.3.20.1     tls         Status = AcpiSetCurrentResources (Node, &ReturnBuffer);
   1037  1.3.20.1     tls         if (ACPI_FAILURE (Status))
   1038  1.3.20.1     tls         {
   1039  1.3.20.1     tls             AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n",
   1040  1.3.20.1     tls                 AcpiFormatException (Status));
   1041  1.3.20.1     tls             goto EndCrs;
   1042  1.3.20.1     tls         }
   1043  1.3.20.1     tls 
   1044  1.3.20.1     tls EndCrs:
   1045  1.3.20.1     tls         ACPI_FREE (ReturnBuffer.Pointer);
   1046       1.1  jruoho     }
   1047       1.1  jruoho 
   1048       1.1  jruoho 
   1049       1.1  jruoho     /* _PRS */
   1050       1.1  jruoho 
   1051       1.1  jruoho GetPrs:
   1052  1.3.20.1     tls     if (PrsNode)
   1053  1.3.20.1     tls     {
   1054  1.3.20.1     tls         AcpiOsPrintf ("Evaluating _PRS\n");
   1055  1.3.20.1     tls 
   1056  1.3.20.1     tls         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
   1057  1.3.20.1     tls         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
   1058       1.1  jruoho 
   1059  1.3.20.1     tls         Status = AcpiEvaluateObject (PrsNode, NULL, NULL, &ReturnBuffer);
   1060  1.3.20.1     tls         if (ACPI_FAILURE (Status))
   1061  1.3.20.1     tls         {
   1062  1.3.20.1     tls             AcpiOsPrintf ("Could not evaluate _PRS: %s\n",
   1063  1.3.20.1     tls                 AcpiFormatException (Status));
   1064  1.3.20.1     tls             goto GetAei;
   1065  1.3.20.1     tls         }
   1066       1.1  jruoho 
   1067  1.3.20.1     tls         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
   1068  1.3.20.1     tls         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
   1069       1.1  jruoho 
   1070  1.3.20.1     tls         Status = AcpiGetPossibleResources (Node, &ReturnBuffer);
   1071  1.3.20.1     tls         if (ACPI_FAILURE (Status))
   1072  1.3.20.1     tls         {
   1073  1.3.20.1     tls             AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n",
   1074  1.3.20.1     tls                 AcpiFormatException (Status));
   1075  1.3.20.1     tls             goto GetAei;
   1076  1.3.20.1     tls         }
   1077  1.3.20.1     tls 
   1078  1.3.20.1     tls         AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, AcpiGbl_DbBuffer));
   1079       1.1  jruoho     }
   1080       1.1  jruoho 
   1081       1.1  jruoho 
   1082  1.3.20.1     tls     /* _AEI */
   1083  1.3.20.1     tls 
   1084  1.3.20.1     tls GetAei:
   1085  1.3.20.1     tls     if (AeiNode)
   1086       1.1  jruoho     {
   1087  1.3.20.1     tls         AcpiOsPrintf ("Evaluating _AEI\n");
   1088  1.3.20.1     tls 
   1089  1.3.20.1     tls         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
   1090  1.3.20.1     tls         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
   1091  1.3.20.1     tls 
   1092  1.3.20.1     tls         Status = AcpiEvaluateObject (AeiNode, NULL, NULL, &ReturnBuffer);
   1093  1.3.20.1     tls         if (ACPI_FAILURE (Status))
   1094  1.3.20.1     tls         {
   1095  1.3.20.1     tls             AcpiOsPrintf ("Could not evaluate _AEI: %s\n",
   1096  1.3.20.1     tls                 AcpiFormatException (Status));
   1097  1.3.20.1     tls             goto Cleanup;
   1098  1.3.20.1     tls         }
   1099  1.3.20.1     tls 
   1100  1.3.20.1     tls         ReturnBuffer.Pointer = AcpiGbl_DbBuffer;
   1101  1.3.20.1     tls         ReturnBuffer.Length  = ACPI_DEBUG_BUFFER_SIZE;
   1102  1.3.20.1     tls 
   1103  1.3.20.1     tls         Status = AcpiGetEventResources (Node, &ReturnBuffer);
   1104  1.3.20.1     tls         if (ACPI_FAILURE (Status))
   1105  1.3.20.1     tls         {
   1106  1.3.20.1     tls             AcpiOsPrintf ("AcpiGetEventResources failed: %s\n",
   1107  1.3.20.1     tls                 AcpiFormatException (Status));
   1108  1.3.20.1     tls             goto Cleanup;
   1109  1.3.20.1     tls         }
   1110  1.3.20.1     tls 
   1111  1.3.20.1     tls         AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, AcpiGbl_DbBuffer));
   1112       1.1  jruoho     }
   1113       1.1  jruoho 
   1114       1.1  jruoho 
   1115       1.1  jruoho Cleanup:
   1116  1.3.20.1     tls     ACPI_FREE (ParentPath);
   1117  1.3.20.1     tls     return (AE_OK);
   1118  1.3.20.1     tls }
   1119  1.3.20.1     tls 
   1120  1.3.20.1     tls 
   1121  1.3.20.1     tls /*******************************************************************************
   1122  1.3.20.1     tls  *
   1123  1.3.20.1     tls  * FUNCTION:    AcpiDbDisplayResources
   1124  1.3.20.1     tls  *
   1125  1.3.20.1     tls  * PARAMETERS:  ObjectArg           - String object name or object pointer.
   1126  1.3.20.1     tls  *                                    NULL or "*" means "display resources for
   1127  1.3.20.1     tls  *                                    all devices"
   1128  1.3.20.1     tls  *
   1129  1.3.20.1     tls  * RETURN:      None
   1130  1.3.20.1     tls  *
   1131  1.3.20.1     tls  * DESCRIPTION: Display the resource objects associated with a device.
   1132  1.3.20.1     tls  *
   1133  1.3.20.1     tls  ******************************************************************************/
   1134  1.3.20.1     tls 
   1135  1.3.20.1     tls void
   1136  1.3.20.1     tls AcpiDbDisplayResources (
   1137  1.3.20.1     tls     char                    *ObjectArg)
   1138  1.3.20.1     tls {
   1139  1.3.20.1     tls     ACPI_NAMESPACE_NODE     *Node;
   1140  1.3.20.1     tls 
   1141  1.3.20.1     tls 
   1142  1.3.20.1     tls     AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT);
   1143  1.3.20.1     tls     AcpiDbgLevel |= ACPI_LV_RESOURCES;
   1144  1.3.20.1     tls 
   1145  1.3.20.1     tls     /* Asterisk means "display resources for all devices" */
   1146  1.3.20.1     tls 
   1147  1.3.20.1     tls     if (!ObjectArg || (!ACPI_STRCMP (ObjectArg, "*")))
   1148  1.3.20.1     tls     {
   1149  1.3.20.1     tls         (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
   1150  1.3.20.1     tls                     ACPI_UINT32_MAX, AcpiDbDeviceResources, NULL, NULL, NULL);
   1151  1.3.20.1     tls     }
   1152  1.3.20.1     tls     else
   1153  1.3.20.1     tls     {
   1154  1.3.20.1     tls         /* Convert string to object pointer */
   1155  1.3.20.1     tls 
   1156  1.3.20.1     tls         Node = AcpiDbConvertToNode (ObjectArg);
   1157  1.3.20.1     tls         if (Node)
   1158  1.3.20.1     tls         {
   1159  1.3.20.1     tls             if (Node->Type != ACPI_TYPE_DEVICE)
   1160  1.3.20.1     tls             {
   1161  1.3.20.1     tls                 AcpiOsPrintf ("%4.4s: Name is not a device object (%s)\n",
   1162  1.3.20.1     tls                     Node->Name.Ascii, AcpiUtGetTypeName (Node->Type));
   1163  1.3.20.1     tls             }
   1164  1.3.20.1     tls             else
   1165  1.3.20.1     tls             {
   1166  1.3.20.1     tls                 (void) AcpiDbDeviceResources (Node, 0, NULL, NULL);
   1167  1.3.20.1     tls             }
   1168  1.3.20.1     tls         }
   1169  1.3.20.1     tls     }
   1170       1.1  jruoho 
   1171       1.1  jruoho     AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
   1172       1.1  jruoho }
   1173       1.1  jruoho 
   1174       1.1  jruoho 
   1175  1.3.20.1     tls #if (!ACPI_REDUCED_HARDWARE)
   1176       1.1  jruoho /*******************************************************************************
   1177       1.1  jruoho  *
   1178       1.1  jruoho  * FUNCTION:    AcpiDbGenerateGpe
   1179       1.1  jruoho  *
   1180  1.3.20.1     tls  * PARAMETERS:  GpeArg              - Raw GPE number, ascii string
   1181  1.3.20.1     tls  *              BlockArg            - GPE block number, ascii string
   1182  1.3.20.1     tls  *                                    0 or 1 for FADT GPE blocks
   1183       1.1  jruoho  *
   1184       1.1  jruoho  * RETURN:      None
   1185       1.1  jruoho  *
   1186  1.3.20.1     tls  * DESCRIPTION: Simulate firing of a GPE
   1187       1.1  jruoho  *
   1188       1.1  jruoho  ******************************************************************************/
   1189       1.1  jruoho 
   1190       1.1  jruoho void
   1191       1.1  jruoho AcpiDbGenerateGpe (
   1192       1.1  jruoho     char                    *GpeArg,
   1193       1.1  jruoho     char                    *BlockArg)
   1194       1.1  jruoho {
   1195       1.1  jruoho     UINT32                  BlockNumber;
   1196       1.1  jruoho     UINT32                  GpeNumber;
   1197       1.1  jruoho     ACPI_GPE_EVENT_INFO     *GpeEventInfo;
   1198       1.1  jruoho 
   1199       1.1  jruoho 
   1200       1.1  jruoho     GpeNumber   = ACPI_STRTOUL (GpeArg, NULL, 0);
   1201       1.1  jruoho     BlockNumber = ACPI_STRTOUL (BlockArg, NULL, 0);
   1202       1.1  jruoho 
   1203       1.1  jruoho 
   1204       1.1  jruoho     GpeEventInfo = AcpiEvGetGpeEventInfo (ACPI_TO_POINTER (BlockNumber),
   1205       1.1  jruoho         GpeNumber);
   1206       1.1  jruoho     if (!GpeEventInfo)
   1207       1.1  jruoho     {
   1208       1.1  jruoho         AcpiOsPrintf ("Invalid GPE\n");
   1209       1.1  jruoho         return;
   1210       1.1  jruoho     }
   1211       1.1  jruoho 
   1212       1.3  jruoho     (void) AcpiEvGpeDispatch (NULL, GpeEventInfo, GpeNumber);
   1213       1.1  jruoho }
   1214       1.1  jruoho 
   1215  1.3.20.1     tls void
   1216  1.3.20.1     tls AcpiDbGenerateSci (
   1217  1.3.20.1     tls     void)
   1218  1.3.20.1     tls {
   1219  1.3.20.1     tls     AcpiEvSciDispatch ();
   1220  1.3.20.1     tls }
   1221  1.3.20.1     tls 
   1222  1.3.20.1     tls #endif /* !ACPI_REDUCED_HARDWARE */
   1223  1.3.20.1     tls 
   1224       1.1  jruoho #endif /* ACPI_DEBUGGER */
   1225