Home | History | Annotate | Line # | Download | only in acpiexec
aehandlers.c revision 1.1.1.8.2.2
      1          1.1    jruoho /******************************************************************************
      2          1.1    jruoho  *
      3          1.1    jruoho  * Module Name: aehandlers - Various handlers for acpiexec
      4          1.1    jruoho  *
      5          1.1    jruoho  *****************************************************************************/
      6          1.1    jruoho 
      7      1.1.1.2    jruoho /*
      8  1.1.1.8.2.2  pgoyette  * Copyright (C) 2000 - 2017, Intel Corp.
      9          1.1    jruoho  * All rights reserved.
     10          1.1    jruoho  *
     11      1.1.1.2    jruoho  * Redistribution and use in source and binary forms, with or without
     12      1.1.1.2    jruoho  * modification, are permitted provided that the following conditions
     13      1.1.1.2    jruoho  * are met:
     14      1.1.1.2    jruoho  * 1. Redistributions of source code must retain the above copyright
     15      1.1.1.2    jruoho  *    notice, this list of conditions, and the following disclaimer,
     16      1.1.1.2    jruoho  *    without modification.
     17      1.1.1.2    jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18      1.1.1.2    jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19      1.1.1.2    jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20      1.1.1.2    jruoho  *    including a substantially similar Disclaimer requirement for further
     21      1.1.1.2    jruoho  *    binary redistribution.
     22      1.1.1.2    jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23      1.1.1.2    jruoho  *    of any contributors may be used to endorse or promote products derived
     24      1.1.1.2    jruoho  *    from this software without specific prior written permission.
     25      1.1.1.2    jruoho  *
     26      1.1.1.2    jruoho  * Alternatively, this software may be distributed under the terms of the
     27      1.1.1.2    jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28      1.1.1.2    jruoho  * Software Foundation.
     29      1.1.1.2    jruoho  *
     30      1.1.1.2    jruoho  * NO WARRANTY
     31      1.1.1.2    jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32      1.1.1.2    jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33      1.1.1.2    jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34      1.1.1.2    jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35      1.1.1.2    jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36      1.1.1.2    jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37      1.1.1.2    jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38      1.1.1.2    jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39      1.1.1.2    jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40      1.1.1.2    jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41      1.1.1.2    jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42      1.1.1.2    jruoho  */
     43          1.1    jruoho 
     44          1.1    jruoho #include "aecommon.h"
     45          1.1    jruoho 
     46          1.1    jruoho #define _COMPONENT          ACPI_TOOLS
     47          1.1    jruoho         ACPI_MODULE_NAME    ("aehandlers")
     48          1.1    jruoho 
     49      1.1.1.5  christos 
     50          1.1    jruoho /* Local prototypes */
     51          1.1    jruoho 
     52      1.1.1.2    jruoho static void
     53      1.1.1.4  christos AeNotifyHandler1 (
     54          1.1    jruoho     ACPI_HANDLE             Device,
     55          1.1    jruoho     UINT32                  Value,
     56          1.1    jruoho     void                    *Context);
     57          1.1    jruoho 
     58      1.1.1.2    jruoho static void
     59      1.1.1.4  christos AeNotifyHandler2 (
     60      1.1.1.4  christos     ACPI_HANDLE             Device,
     61      1.1.1.4  christos     UINT32                  Value,
     62      1.1.1.4  christos     void                    *Context);
     63      1.1.1.4  christos 
     64      1.1.1.4  christos static void
     65      1.1.1.4  christos AeCommonNotifyHandler (
     66      1.1.1.4  christos     ACPI_HANDLE             Device,
     67      1.1.1.4  christos     UINT32                  Value,
     68      1.1.1.4  christos     UINT32                  HandlerId);
     69      1.1.1.4  christos 
     70      1.1.1.4  christos static void
     71          1.1    jruoho AeDeviceNotifyHandler (
     72          1.1    jruoho     ACPI_HANDLE             Device,
     73          1.1    jruoho     UINT32                  Value,
     74          1.1    jruoho     void                    *Context);
     75          1.1    jruoho 
     76      1.1.1.2    jruoho static ACPI_STATUS
     77          1.1    jruoho AeExceptionHandler (
     78          1.1    jruoho     ACPI_STATUS             AmlStatus,
     79          1.1    jruoho     ACPI_NAME               Name,
     80          1.1    jruoho     UINT16                  Opcode,
     81          1.1    jruoho     UINT32                  AmlOffset,
     82          1.1    jruoho     void                    *Context);
     83          1.1    jruoho 
     84      1.1.1.2    jruoho static ACPI_STATUS
     85          1.1    jruoho AeTableHandler (
     86          1.1    jruoho     UINT32                  Event,
     87          1.1    jruoho     void                    *Table,
     88          1.1    jruoho     void                    *Context);
     89          1.1    jruoho 
     90      1.1.1.2    jruoho static void
     91          1.1    jruoho AeAttachedDataHandler (
     92          1.1    jruoho     ACPI_HANDLE             Object,
     93          1.1    jruoho     void                    *Data);
     94          1.1    jruoho 
     95      1.1.1.4  christos static void
     96      1.1.1.4  christos AeAttachedDataHandler2 (
     97      1.1.1.4  christos     ACPI_HANDLE             Object,
     98      1.1.1.4  christos     void                    *Data);
     99      1.1.1.4  christos 
    100      1.1.1.2    jruoho static UINT32
    101      1.1.1.2    jruoho AeInterfaceHandler (
    102      1.1.1.2    jruoho     ACPI_STRING             InterfaceName,
    103      1.1.1.2    jruoho     UINT32                  Supported);
    104      1.1.1.2    jruoho 
    105      1.1.1.4  christos #if (!ACPI_REDUCED_HARDWARE)
    106      1.1.1.2    jruoho static UINT32
    107      1.1.1.2    jruoho AeEventHandler (
    108      1.1.1.2    jruoho     void                    *Context);
    109      1.1.1.2    jruoho 
    110      1.1.1.4  christos static UINT32
    111      1.1.1.4  christos AeSciHandler (
    112      1.1.1.4  christos     void                    *Context);
    113      1.1.1.4  christos 
    114      1.1.1.4  christos static char                *TableEvents[] =
    115      1.1.1.4  christos {
    116      1.1.1.4  christos     "LOAD",
    117      1.1.1.4  christos     "UNLOAD",
    118  1.1.1.8.2.1  pgoyette     "INSTALL",
    119  1.1.1.8.2.1  pgoyette     "UNINSTALL",
    120      1.1.1.4  christos     "UNKNOWN"
    121      1.1.1.4  christos };
    122      1.1.1.4  christos #endif /* !ACPI_REDUCED_HARDWARE */
    123      1.1.1.4  christos 
    124      1.1.1.4  christos 
    125      1.1.1.2    jruoho static UINT32               SigintCount = 0;
    126      1.1.1.2    jruoho static AE_DEBUG_REGIONS     AeRegions;
    127      1.1.1.4  christos 
    128          1.1    jruoho 
    129          1.1    jruoho /******************************************************************************
    130          1.1    jruoho  *
    131          1.1    jruoho  * FUNCTION:    AeCtrlCHandler
    132          1.1    jruoho  *
    133          1.1    jruoho  * PARAMETERS:  Sig
    134          1.1    jruoho  *
    135          1.1    jruoho  * RETURN:      none
    136          1.1    jruoho  *
    137      1.1.1.4  christos  * DESCRIPTION: Control-C handler. Abort running control method if any.
    138          1.1    jruoho  *
    139          1.1    jruoho  *****************************************************************************/
    140          1.1    jruoho 
    141      1.1.1.2    jruoho void ACPI_SYSTEM_XFACE
    142          1.1    jruoho AeCtrlCHandler (
    143          1.1    jruoho     int                     Sig)
    144          1.1    jruoho {
    145          1.1    jruoho 
    146          1.1    jruoho     signal (SIGINT, SIG_IGN);
    147          1.1    jruoho     SigintCount++;
    148          1.1    jruoho 
    149          1.1    jruoho     AcpiOsPrintf ("Caught a ctrl-c (#%u)\n\n", SigintCount);
    150          1.1    jruoho 
    151          1.1    jruoho     if (AcpiGbl_MethodExecuting)
    152          1.1    jruoho     {
    153          1.1    jruoho         AcpiGbl_AbortMethod = TRUE;
    154          1.1    jruoho         signal (SIGINT, AeCtrlCHandler);
    155          1.1    jruoho 
    156          1.1    jruoho         if (SigintCount < 10)
    157          1.1    jruoho         {
    158          1.1    jruoho             return;
    159          1.1    jruoho         }
    160          1.1    jruoho     }
    161          1.1    jruoho 
    162      1.1.1.4  christos     (void) AcpiOsTerminate ();
    163          1.1    jruoho     exit (0);
    164          1.1    jruoho }
    165          1.1    jruoho 
    166          1.1    jruoho 
    167          1.1    jruoho /******************************************************************************
    168          1.1    jruoho  *
    169      1.1.1.4  christos  * FUNCTION:    AeNotifyHandler(s)
    170          1.1    jruoho  *
    171          1.1    jruoho  * PARAMETERS:  Standard notify handler parameters
    172          1.1    jruoho  *
    173          1.1    jruoho  * RETURN:      Status
    174          1.1    jruoho  *
    175      1.1.1.4  christos  * DESCRIPTION: Notify handlers for AcpiExec utility. Used by the ASL
    176          1.1    jruoho  *              test suite(s) to communicate errors and other information to
    177      1.1.1.4  christos  *              this utility via the Notify() operator. Tests notify handling
    178      1.1.1.4  christos  *              and multiple notify handler support.
    179          1.1    jruoho  *
    180          1.1    jruoho  *****************************************************************************/
    181          1.1    jruoho 
    182      1.1.1.2    jruoho static void
    183      1.1.1.4  christos AeNotifyHandler1 (
    184      1.1.1.4  christos     ACPI_HANDLE             Device,
    185      1.1.1.4  christos     UINT32                  Value,
    186      1.1.1.4  christos     void                    *Context)
    187      1.1.1.4  christos {
    188      1.1.1.4  christos     AeCommonNotifyHandler (Device, Value, 1);
    189      1.1.1.4  christos }
    190      1.1.1.4  christos 
    191      1.1.1.4  christos static void
    192      1.1.1.4  christos AeNotifyHandler2 (
    193      1.1.1.4  christos     ACPI_HANDLE             Device,
    194      1.1.1.4  christos     UINT32                  Value,
    195      1.1.1.4  christos     void                    *Context)
    196      1.1.1.4  christos {
    197      1.1.1.4  christos     AeCommonNotifyHandler (Device, Value, 2);
    198      1.1.1.4  christos }
    199      1.1.1.4  christos 
    200      1.1.1.4  christos static void
    201      1.1.1.4  christos AeCommonNotifyHandler (
    202      1.1.1.4  christos     ACPI_HANDLE             Device,
    203      1.1.1.4  christos     UINT32                  Value,
    204      1.1.1.4  christos     UINT32                  HandlerId)
    205          1.1    jruoho {
    206      1.1.1.4  christos     char                    *Type;
    207      1.1.1.4  christos 
    208      1.1.1.4  christos 
    209      1.1.1.4  christos     Type = "Device";
    210      1.1.1.4  christos     if (Value <= ACPI_MAX_SYS_NOTIFY)
    211      1.1.1.4  christos     {
    212      1.1.1.4  christos         Type = "System";
    213      1.1.1.4  christos     }
    214          1.1    jruoho 
    215          1.1    jruoho     switch (Value)
    216          1.1    jruoho     {
    217          1.1    jruoho #if 0
    218          1.1    jruoho     case 0:
    219      1.1.1.4  christos 
    220          1.1    jruoho         printf ("[AcpiExec] Method Error 0x%X: Results not equal\n", Value);
    221          1.1    jruoho         if (AcpiGbl_DebugFile)
    222          1.1    jruoho         {
    223          1.1    jruoho             AcpiOsPrintf ("[AcpiExec] Method Error: Results not equal\n");
    224          1.1    jruoho         }
    225          1.1    jruoho         break;
    226          1.1    jruoho 
    227          1.1    jruoho     case 1:
    228      1.1.1.4  christos 
    229          1.1    jruoho         printf ("[AcpiExec] Method Error: Incorrect numeric result\n");
    230          1.1    jruoho         if (AcpiGbl_DebugFile)
    231          1.1    jruoho         {
    232          1.1    jruoho             AcpiOsPrintf ("[AcpiExec] Method Error: Incorrect numeric result\n");
    233          1.1    jruoho         }
    234          1.1    jruoho         break;
    235          1.1    jruoho 
    236          1.1    jruoho     case 2:
    237      1.1.1.4  christos 
    238          1.1    jruoho         printf ("[AcpiExec] Method Error: An operand was overwritten\n");
    239          1.1    jruoho         if (AcpiGbl_DebugFile)
    240          1.1    jruoho         {
    241          1.1    jruoho             AcpiOsPrintf ("[AcpiExec] Method Error: An operand was overwritten\n");
    242          1.1    jruoho         }
    243          1.1    jruoho         break;
    244          1.1    jruoho 
    245          1.1    jruoho #endif
    246          1.1    jruoho 
    247          1.1    jruoho     default:
    248      1.1.1.4  christos 
    249      1.1.1.4  christos         printf ("[AcpiExec] Handler %u: Received a %s Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
    250      1.1.1.4  christos             HandlerId, Type, AcpiUtGetNodeName (Device), Device, Value,
    251      1.1.1.5  christos             AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY));
    252          1.1    jruoho         if (AcpiGbl_DebugFile)
    253          1.1    jruoho         {
    254      1.1.1.4  christos             AcpiOsPrintf ("[AcpiExec] Handler %u: Received a %s notify, Value 0x%2.2X\n",
    255      1.1.1.4  christos                 HandlerId, Type, Value);
    256          1.1    jruoho         }
    257          1.1    jruoho 
    258          1.1    jruoho         (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL);
    259          1.1    jruoho         break;
    260          1.1    jruoho     }
    261          1.1    jruoho }
    262          1.1    jruoho 
    263          1.1    jruoho 
    264          1.1    jruoho /******************************************************************************
    265          1.1    jruoho  *
    266      1.1.1.4  christos  * FUNCTION:    AeSystemNotifyHandler
    267      1.1.1.4  christos  *
    268      1.1.1.4  christos  * PARAMETERS:  Standard notify handler parameters
    269      1.1.1.4  christos  *
    270      1.1.1.4  christos  * RETURN:      Status
    271      1.1.1.4  christos  *
    272      1.1.1.4  christos  * DESCRIPTION: System notify handler for AcpiExec utility. Used by the ASL
    273      1.1.1.4  christos  *              test suite(s) to communicate errors and other information to
    274      1.1.1.4  christos  *              this utility via the Notify() operator.
    275      1.1.1.4  christos  *
    276      1.1.1.4  christos  *****************************************************************************/
    277      1.1.1.4  christos 
    278      1.1.1.4  christos static void
    279      1.1.1.4  christos AeSystemNotifyHandler (
    280      1.1.1.4  christos     ACPI_HANDLE                 Device,
    281      1.1.1.4  christos     UINT32                      Value,
    282      1.1.1.4  christos     void                        *Context)
    283      1.1.1.4  christos {
    284      1.1.1.4  christos 
    285      1.1.1.4  christos     printf ("[AcpiExec] Global:    Received a System Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
    286      1.1.1.4  christos         AcpiUtGetNodeName (Device), Device, Value,
    287      1.1.1.5  christos         AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY));
    288      1.1.1.4  christos     if (AcpiGbl_DebugFile)
    289      1.1.1.4  christos     {
    290      1.1.1.4  christos         AcpiOsPrintf ("[AcpiExec] Global:    Received a System Notify, Value 0x%2.2X\n", Value);
    291      1.1.1.4  christos     }
    292      1.1.1.4  christos 
    293      1.1.1.4  christos     (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL);
    294      1.1.1.4  christos }
    295      1.1.1.4  christos 
    296      1.1.1.4  christos 
    297      1.1.1.4  christos /******************************************************************************
    298      1.1.1.4  christos  *
    299          1.1    jruoho  * FUNCTION:    AeDeviceNotifyHandler
    300          1.1    jruoho  *
    301          1.1    jruoho  * PARAMETERS:  Standard notify handler parameters
    302          1.1    jruoho  *
    303          1.1    jruoho  * RETURN:      Status
    304          1.1    jruoho  *
    305      1.1.1.4  christos  * DESCRIPTION: Device notify handler for AcpiExec utility. Used by the ASL
    306          1.1    jruoho  *              test suite(s) to communicate errors and other information to
    307          1.1    jruoho  *              this utility via the Notify() operator.
    308          1.1    jruoho  *
    309          1.1    jruoho  *****************************************************************************/
    310          1.1    jruoho 
    311      1.1.1.2    jruoho static void
    312          1.1    jruoho AeDeviceNotifyHandler (
    313          1.1    jruoho     ACPI_HANDLE                 Device,
    314          1.1    jruoho     UINT32                      Value,
    315          1.1    jruoho     void                        *Context)
    316          1.1    jruoho {
    317          1.1    jruoho 
    318      1.1.1.4  christos     printf ("[AcpiExec] Global:    Received a Device Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
    319          1.1    jruoho         AcpiUtGetNodeName (Device), Device, Value,
    320      1.1.1.5  christos         AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY));
    321          1.1    jruoho     if (AcpiGbl_DebugFile)
    322          1.1    jruoho     {
    323      1.1.1.4  christos         AcpiOsPrintf ("[AcpiExec] Global:    Received a Device Notify, Value 0x%2.2X\n", Value);
    324          1.1    jruoho     }
    325          1.1    jruoho 
    326          1.1    jruoho     (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL);
    327          1.1    jruoho }
    328          1.1    jruoho 
    329          1.1    jruoho 
    330          1.1    jruoho /******************************************************************************
    331          1.1    jruoho  *
    332          1.1    jruoho  * FUNCTION:    AeExceptionHandler
    333          1.1    jruoho  *
    334          1.1    jruoho  * PARAMETERS:  Standard exception handler parameters
    335          1.1    jruoho  *
    336          1.1    jruoho  * RETURN:      Status
    337          1.1    jruoho  *
    338          1.1    jruoho  * DESCRIPTION: System exception handler for AcpiExec utility.
    339          1.1    jruoho  *
    340          1.1    jruoho  *****************************************************************************/
    341          1.1    jruoho 
    342      1.1.1.2    jruoho static ACPI_STATUS
    343          1.1    jruoho AeExceptionHandler (
    344          1.1    jruoho     ACPI_STATUS             AmlStatus,
    345          1.1    jruoho     ACPI_NAME               Name,
    346          1.1    jruoho     UINT16                  Opcode,
    347          1.1    jruoho     UINT32                  AmlOffset,
    348          1.1    jruoho     void                    *Context)
    349          1.1    jruoho {
    350          1.1    jruoho     ACPI_STATUS             NewAmlStatus = AmlStatus;
    351          1.1    jruoho     ACPI_STATUS             Status;
    352          1.1    jruoho     ACPI_BUFFER             ReturnObj;
    353          1.1    jruoho     ACPI_OBJECT_LIST        ArgList;
    354          1.1    jruoho     ACPI_OBJECT             Arg[3];
    355          1.1    jruoho     const char              *Exception;
    356          1.1    jruoho 
    357          1.1    jruoho 
    358          1.1    jruoho     Exception = AcpiFormatException (AmlStatus);
    359          1.1    jruoho     AcpiOsPrintf ("[AcpiExec] Exception %s during execution ", Exception);
    360          1.1    jruoho     if (Name)
    361          1.1    jruoho     {
    362          1.1    jruoho         AcpiOsPrintf ("of method [%4.4s]", (char *) &Name);
    363          1.1    jruoho     }
    364          1.1    jruoho     else
    365          1.1    jruoho     {
    366          1.1    jruoho         AcpiOsPrintf ("at module level (table load)");
    367          1.1    jruoho     }
    368      1.1.1.8  christos 
    369          1.1    jruoho     AcpiOsPrintf (" Opcode [%s] @%X\n", AcpiPsGetOpcodeName (Opcode), AmlOffset);
    370          1.1    jruoho 
    371          1.1    jruoho     /*
    372          1.1    jruoho      * Invoke the _ERR method if present
    373          1.1    jruoho      *
    374          1.1    jruoho      * Setup parameter object
    375          1.1    jruoho      */
    376          1.1    jruoho     ArgList.Count = 3;
    377          1.1    jruoho     ArgList.Pointer = Arg;
    378          1.1    jruoho 
    379          1.1    jruoho     Arg[0].Type = ACPI_TYPE_INTEGER;
    380          1.1    jruoho     Arg[0].Integer.Value = AmlStatus;
    381          1.1    jruoho 
    382          1.1    jruoho     Arg[1].Type = ACPI_TYPE_STRING;
    383          1.1    jruoho     Arg[1].String.Pointer = ACPI_CAST_PTR (char, Exception);
    384      1.1.1.7  christos     Arg[1].String.Length = strlen (Exception);
    385          1.1    jruoho 
    386          1.1    jruoho     Arg[2].Type = ACPI_TYPE_INTEGER;
    387      1.1.1.2    jruoho     Arg[2].Integer.Value = AcpiOsGetThreadId();
    388          1.1    jruoho 
    389          1.1    jruoho     /* Setup return buffer */
    390          1.1    jruoho 
    391          1.1    jruoho     ReturnObj.Pointer = NULL;
    392          1.1    jruoho     ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
    393          1.1    jruoho 
    394          1.1    jruoho     Status = AcpiEvaluateObject (NULL, "\\_ERR", &ArgList, &ReturnObj);
    395          1.1    jruoho     if (ACPI_SUCCESS (Status))
    396          1.1    jruoho     {
    397          1.1    jruoho         if (ReturnObj.Pointer)
    398          1.1    jruoho         {
    399          1.1    jruoho             /* Override original status */
    400          1.1    jruoho 
    401          1.1    jruoho             NewAmlStatus = (ACPI_STATUS)
    402          1.1    jruoho                 ((ACPI_OBJECT *) ReturnObj.Pointer)->Integer.Value;
    403          1.1    jruoho 
    404      1.1.1.4  christos             /* Free a buffer created via ACPI_ALLOCATE_BUFFER */
    405      1.1.1.4  christos 
    406          1.1    jruoho             AcpiOsFree (ReturnObj.Pointer);
    407          1.1    jruoho         }
    408          1.1    jruoho     }
    409          1.1    jruoho     else if (Status != AE_NOT_FOUND)
    410          1.1    jruoho     {
    411          1.1    jruoho         AcpiOsPrintf ("[AcpiExec] Could not execute _ERR method, %s\n",
    412          1.1    jruoho             AcpiFormatException (Status));
    413          1.1    jruoho     }
    414          1.1    jruoho 
    415          1.1    jruoho     /* Global override */
    416          1.1    jruoho 
    417          1.1    jruoho     if (AcpiGbl_IgnoreErrors)
    418          1.1    jruoho     {
    419          1.1    jruoho         NewAmlStatus = AE_OK;
    420          1.1    jruoho     }
    421          1.1    jruoho 
    422          1.1    jruoho     if (NewAmlStatus != AmlStatus)
    423          1.1    jruoho     {
    424      1.1.1.8  christos         AcpiOsPrintf ("[AcpiExec] Exception override, new status %s\n\n",
    425          1.1    jruoho             AcpiFormatException (NewAmlStatus));
    426          1.1    jruoho     }
    427          1.1    jruoho 
    428          1.1    jruoho     return (NewAmlStatus);
    429          1.1    jruoho }
    430          1.1    jruoho 
    431          1.1    jruoho 
    432          1.1    jruoho /******************************************************************************
    433          1.1    jruoho  *
    434          1.1    jruoho  * FUNCTION:    AeTableHandler
    435          1.1    jruoho  *
    436          1.1    jruoho  * PARAMETERS:  Table handler
    437          1.1    jruoho  *
    438          1.1    jruoho  * RETURN:      Status
    439          1.1    jruoho  *
    440          1.1    jruoho  * DESCRIPTION: System table handler for AcpiExec utility.
    441          1.1    jruoho  *
    442          1.1    jruoho  *****************************************************************************/
    443          1.1    jruoho 
    444      1.1.1.2    jruoho static ACPI_STATUS
    445          1.1    jruoho AeTableHandler (
    446          1.1    jruoho     UINT32                  Event,
    447          1.1    jruoho     void                    *Table,
    448          1.1    jruoho     void                    *Context)
    449          1.1    jruoho {
    450      1.1.1.4  christos #if (!ACPI_REDUCED_HARDWARE)
    451      1.1.1.2    jruoho     ACPI_STATUS             Status;
    452      1.1.1.4  christos #endif /* !ACPI_REDUCED_HARDWARE */
    453      1.1.1.2    jruoho 
    454          1.1    jruoho 
    455          1.1    jruoho     if (Event > ACPI_NUM_TABLE_EVENTS)
    456          1.1    jruoho     {
    457          1.1    jruoho         Event = ACPI_NUM_TABLE_EVENTS;
    458          1.1    jruoho     }
    459          1.1    jruoho 
    460      1.1.1.4  christos #if (!ACPI_REDUCED_HARDWARE)
    461      1.1.1.2    jruoho     /* Enable any GPEs associated with newly-loaded GPE methods */
    462      1.1.1.2    jruoho 
    463      1.1.1.2    jruoho     Status = AcpiUpdateAllGpes ();
    464      1.1.1.8  christos     ACPI_CHECK_OK (AcpiUpdateAllGpes, Status);
    465          1.1    jruoho 
    466          1.1    jruoho     printf ("[AcpiExec] Table Event %s, [%4.4s] %p\n",
    467          1.1    jruoho         TableEvents[Event], ((ACPI_TABLE_HEADER *) Table)->Signature, Table);
    468      1.1.1.4  christos #endif /* !ACPI_REDUCED_HARDWARE */
    469      1.1.1.4  christos 
    470          1.1    jruoho     return (AE_OK);
    471          1.1    jruoho }
    472          1.1    jruoho 
    473          1.1    jruoho 
    474          1.1    jruoho /******************************************************************************
    475          1.1    jruoho  *
    476          1.1    jruoho  * FUNCTION:    AeGpeHandler
    477          1.1    jruoho  *
    478      1.1.1.2    jruoho  * DESCRIPTION: Common GPE handler for acpiexec
    479          1.1    jruoho  *
    480          1.1    jruoho  *****************************************************************************/
    481          1.1    jruoho 
    482          1.1    jruoho UINT32
    483          1.1    jruoho AeGpeHandler (
    484      1.1.1.2    jruoho     ACPI_HANDLE             GpeDevice,
    485      1.1.1.2    jruoho     UINT32                  GpeNumber,
    486          1.1    jruoho     void                    *Context)
    487          1.1    jruoho {
    488      1.1.1.2    jruoho     ACPI_NAMESPACE_NODE     *DeviceNode = (ACPI_NAMESPACE_NODE *) GpeDevice;
    489      1.1.1.2    jruoho 
    490      1.1.1.2    jruoho 
    491      1.1.1.5  christos     AcpiOsPrintf ("[AcpiExec] GPE Handler received GPE %02X (GPE block %4.4s)\n",
    492      1.1.1.2    jruoho         GpeNumber, GpeDevice ? DeviceNode->Name.Ascii : "FADT");
    493      1.1.1.2    jruoho 
    494      1.1.1.2    jruoho     return (ACPI_REENABLE_GPE);
    495      1.1.1.2    jruoho }
    496      1.1.1.2    jruoho 
    497      1.1.1.2    jruoho 
    498      1.1.1.2    jruoho /******************************************************************************
    499      1.1.1.2    jruoho  *
    500      1.1.1.2    jruoho  * FUNCTION:    AeGlobalEventHandler
    501      1.1.1.2    jruoho  *
    502      1.1.1.2    jruoho  * DESCRIPTION: Global GPE/Fixed event handler
    503      1.1.1.2    jruoho  *
    504      1.1.1.2    jruoho  *****************************************************************************/
    505      1.1.1.2    jruoho 
    506      1.1.1.2    jruoho void
    507      1.1.1.2    jruoho AeGlobalEventHandler (
    508      1.1.1.2    jruoho     UINT32                  Type,
    509      1.1.1.2    jruoho     ACPI_HANDLE             Device,
    510      1.1.1.2    jruoho     UINT32                  EventNumber,
    511      1.1.1.2    jruoho     void                    *Context)
    512      1.1.1.2    jruoho {
    513      1.1.1.2    jruoho     char                    *TypeName;
    514      1.1.1.2    jruoho 
    515      1.1.1.2    jruoho 
    516      1.1.1.2    jruoho     switch (Type)
    517      1.1.1.2    jruoho     {
    518      1.1.1.2    jruoho     case ACPI_EVENT_TYPE_GPE:
    519      1.1.1.4  christos 
    520      1.1.1.2    jruoho         TypeName = "GPE";
    521      1.1.1.2    jruoho         break;
    522      1.1.1.2    jruoho 
    523      1.1.1.2    jruoho     case ACPI_EVENT_TYPE_FIXED:
    524      1.1.1.4  christos 
    525      1.1.1.2    jruoho         TypeName = "FixedEvent";
    526      1.1.1.2    jruoho         break;
    527      1.1.1.2    jruoho 
    528      1.1.1.2    jruoho     default:
    529      1.1.1.4  christos 
    530      1.1.1.2    jruoho         TypeName = "UNKNOWN";
    531      1.1.1.2    jruoho         break;
    532      1.1.1.2    jruoho     }
    533      1.1.1.2    jruoho 
    534      1.1.1.8  christos     AcpiOsPrintf (
    535      1.1.1.8  christos         "[AcpiExec] Global Event Handler received: Type %s Number %.2X Dev %p\n",
    536      1.1.1.2    jruoho         TypeName, EventNumber, Device);
    537          1.1    jruoho }
    538          1.1    jruoho 
    539          1.1    jruoho 
    540          1.1    jruoho /******************************************************************************
    541          1.1    jruoho  *
    542          1.1    jruoho  * FUNCTION:    AeAttachedDataHandler
    543          1.1    jruoho  *
    544          1.1    jruoho  * DESCRIPTION: Handler for deletion of nodes with attached data (attached via
    545          1.1    jruoho  *              AcpiAttachData)
    546          1.1    jruoho  *
    547          1.1    jruoho  *****************************************************************************/
    548          1.1    jruoho 
    549      1.1.1.2    jruoho static void
    550          1.1    jruoho AeAttachedDataHandler (
    551          1.1    jruoho     ACPI_HANDLE             Object,
    552          1.1    jruoho     void                    *Data)
    553          1.1    jruoho {
    554          1.1    jruoho     ACPI_NAMESPACE_NODE     *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data);
    555          1.1    jruoho 
    556          1.1    jruoho 
    557      1.1.1.4  christos     AcpiOsPrintf ("Received an attached data deletion (1) on %4.4s\n",
    558      1.1.1.4  christos         Node->Name.Ascii);
    559      1.1.1.4  christos }
    560      1.1.1.4  christos 
    561      1.1.1.4  christos 
    562      1.1.1.4  christos /******************************************************************************
    563      1.1.1.4  christos  *
    564      1.1.1.4  christos  * FUNCTION:    AeAttachedDataHandler2
    565      1.1.1.4  christos  *
    566      1.1.1.4  christos  * DESCRIPTION: Handler for deletion of nodes with attached data (attached via
    567      1.1.1.4  christos  *              AcpiAttachData)
    568      1.1.1.4  christos  *
    569      1.1.1.4  christos  *****************************************************************************/
    570      1.1.1.4  christos 
    571      1.1.1.4  christos static void
    572      1.1.1.4  christos AeAttachedDataHandler2 (
    573      1.1.1.4  christos     ACPI_HANDLE             Object,
    574      1.1.1.4  christos     void                    *Data)
    575      1.1.1.4  christos {
    576      1.1.1.4  christos     ACPI_NAMESPACE_NODE     *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data);
    577      1.1.1.4  christos 
    578      1.1.1.4  christos 
    579      1.1.1.4  christos     AcpiOsPrintf ("Received an attached data deletion (2) on %4.4s\n",
    580          1.1    jruoho         Node->Name.Ascii);
    581          1.1    jruoho }
    582          1.1    jruoho 
    583          1.1    jruoho 
    584          1.1    jruoho /******************************************************************************
    585          1.1    jruoho  *
    586      1.1.1.2    jruoho  * FUNCTION:    AeInterfaceHandler
    587      1.1.1.2    jruoho  *
    588      1.1.1.2    jruoho  * DESCRIPTION: Handler for _OSI invocations
    589      1.1.1.2    jruoho  *
    590      1.1.1.2    jruoho  *****************************************************************************/
    591      1.1.1.2    jruoho 
    592      1.1.1.2    jruoho static UINT32
    593      1.1.1.2    jruoho AeInterfaceHandler (
    594      1.1.1.2    jruoho     ACPI_STRING             InterfaceName,
    595      1.1.1.2    jruoho     UINT32                  Supported)
    596      1.1.1.2    jruoho {
    597      1.1.1.2    jruoho     ACPI_FUNCTION_NAME (AeInterfaceHandler);
    598      1.1.1.2    jruoho 
    599      1.1.1.2    jruoho 
    600      1.1.1.2    jruoho     ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
    601      1.1.1.2    jruoho         "Received _OSI (\"%s\"), is %ssupported\n",
    602      1.1.1.2    jruoho         InterfaceName, Supported == 0 ? "not " : ""));
    603      1.1.1.2    jruoho 
    604      1.1.1.2    jruoho     return (Supported);
    605      1.1.1.2    jruoho }
    606      1.1.1.2    jruoho 
    607      1.1.1.2    jruoho 
    608      1.1.1.4  christos #if (!ACPI_REDUCED_HARDWARE)
    609      1.1.1.2    jruoho /******************************************************************************
    610      1.1.1.2    jruoho  *
    611      1.1.1.4  christos  * FUNCTION:    AeEventHandler, AeSciHandler
    612      1.1.1.2    jruoho  *
    613      1.1.1.4  christos  * DESCRIPTION: Handler for Fixed Events and SCIs
    614      1.1.1.2    jruoho  *
    615      1.1.1.2    jruoho  *****************************************************************************/
    616      1.1.1.2    jruoho 
    617      1.1.1.2    jruoho static UINT32
    618      1.1.1.2    jruoho AeEventHandler (
    619      1.1.1.2    jruoho     void                    *Context)
    620      1.1.1.2    jruoho {
    621      1.1.1.2    jruoho     return (0);
    622      1.1.1.2    jruoho }
    623      1.1.1.2    jruoho 
    624      1.1.1.4  christos static UINT32
    625      1.1.1.4  christos AeSciHandler (
    626      1.1.1.4  christos     void                    *Context)
    627      1.1.1.4  christos {
    628      1.1.1.4  christos 
    629      1.1.1.4  christos     AcpiOsPrintf ("[AcpiExec] Received an SCI at handler\n");
    630      1.1.1.4  christos     return (0);
    631      1.1.1.4  christos }
    632      1.1.1.4  christos 
    633      1.1.1.4  christos #endif /* !ACPI_REDUCED_HARDWARE */
    634      1.1.1.4  christos 
    635      1.1.1.2    jruoho 
    636      1.1.1.4  christos /*******************************************************************************
    637      1.1.1.4  christos  *
    638      1.1.1.4  christos  * FUNCTION:    AeInstallSciHandler
    639      1.1.1.4  christos  *
    640      1.1.1.4  christos  * PARAMETERS:  None
    641      1.1.1.4  christos  *
    642      1.1.1.4  christos  * RETURN:      Status
    643      1.1.1.4  christos  *
    644      1.1.1.4  christos  * DESCRIPTION: Install handler for SCIs. Exercise the code by doing an
    645      1.1.1.4  christos  *              install/remove/install.
    646      1.1.1.4  christos  *
    647      1.1.1.4  christos  ******************************************************************************/
    648      1.1.1.4  christos 
    649      1.1.1.4  christos static ACPI_STATUS
    650      1.1.1.4  christos AeInstallSciHandler (
    651      1.1.1.4  christos     void)
    652      1.1.1.4  christos {
    653      1.1.1.4  christos     ACPI_STATUS             Status;
    654      1.1.1.4  christos 
    655      1.1.1.4  christos 
    656      1.1.1.4  christos     Status = AcpiInstallSciHandler (AeSciHandler, &AeMyContext);
    657      1.1.1.4  christos     if (ACPI_FAILURE (Status))
    658      1.1.1.4  christos     {
    659      1.1.1.4  christos         ACPI_EXCEPTION ((AE_INFO, Status,
    660      1.1.1.4  christos             "Could not install an SCI handler (1)"));
    661      1.1.1.4  christos     }
    662      1.1.1.4  christos 
    663      1.1.1.4  christos     Status = AcpiRemoveSciHandler (AeSciHandler);
    664      1.1.1.4  christos     if (ACPI_FAILURE (Status))
    665      1.1.1.4  christos     {
    666      1.1.1.4  christos         ACPI_EXCEPTION ((AE_INFO, Status,
    667      1.1.1.4  christos             "Could not remove an SCI handler"));
    668      1.1.1.4  christos     }
    669      1.1.1.4  christos 
    670      1.1.1.4  christos     Status = AcpiInstallSciHandler (AeSciHandler, &AeMyContext);
    671      1.1.1.4  christos     if (ACPI_FAILURE (Status))
    672      1.1.1.4  christos     {
    673      1.1.1.4  christos         ACPI_EXCEPTION ((AE_INFO, Status,
    674      1.1.1.4  christos             "Could not install an SCI handler (2)"));
    675      1.1.1.4  christos     }
    676      1.1.1.4  christos 
    677      1.1.1.4  christos     return (Status);
    678      1.1.1.4  christos }
    679      1.1.1.4  christos 
    680      1.1.1.4  christos 
    681          1.1    jruoho /******************************************************************************
    682          1.1    jruoho  *
    683      1.1.1.2    jruoho  * FUNCTION:    AeInstallLateHandlers
    684          1.1    jruoho  *
    685          1.1    jruoho  * PARAMETERS:  None
    686          1.1    jruoho  *
    687          1.1    jruoho  * RETURN:      Status
    688          1.1    jruoho  *
    689          1.1    jruoho  * DESCRIPTION: Install handlers for the AcpiExec utility.
    690          1.1    jruoho  *
    691          1.1    jruoho  *****************************************************************************/
    692          1.1    jruoho 
    693      1.1.1.2    jruoho ACPI_STATUS
    694      1.1.1.2    jruoho AeInstallLateHandlers (
    695      1.1.1.2    jruoho     void)
    696      1.1.1.2    jruoho {
    697      1.1.1.2    jruoho     ACPI_STATUS             Status;
    698      1.1.1.8  christos     ACPI_HANDLE             Handle;
    699      1.1.1.8  christos 
    700      1.1.1.8  christos 
    701      1.1.1.8  christos     Status = AcpiGetHandle (NULL, "\\_TZ.TZ1", &Handle);
    702      1.1.1.8  christos     if (ACPI_SUCCESS (Status))
    703      1.1.1.8  christos     {
    704      1.1.1.8  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    705      1.1.1.8  christos             AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
    706      1.1.1.8  christos 
    707      1.1.1.8  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    708      1.1.1.8  christos             AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
    709      1.1.1.8  christos 
    710      1.1.1.8  christos         Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    711      1.1.1.8  christos             AeNotifyHandler1);
    712      1.1.1.8  christos         Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    713      1.1.1.8  christos             AeNotifyHandler2);
    714      1.1.1.2    jruoho 
    715      1.1.1.8  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    716      1.1.1.8  christos             AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
    717      1.1.1.8  christos 
    718      1.1.1.8  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    719      1.1.1.8  christos             AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
    720      1.1.1.8  christos     }
    721      1.1.1.8  christos 
    722      1.1.1.8  christos     Status = AcpiGetHandle (NULL, "\\_PR.CPU0", &Handle);
    723      1.1.1.8  christos     if (ACPI_SUCCESS (Status))
    724      1.1.1.8  christos     {
    725      1.1.1.8  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    726      1.1.1.8  christos             AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
    727      1.1.1.8  christos 
    728      1.1.1.8  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
    729      1.1.1.8  christos             AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
    730      1.1.1.8  christos     }
    731      1.1.1.2    jruoho 
    732      1.1.1.4  christos #if (!ACPI_REDUCED_HARDWARE)
    733      1.1.1.4  christos     if (!AcpiGbl_ReducedHardware)
    734      1.1.1.4  christos     {
    735      1.1.1.4  christos         /* Install a user SCI handler */
    736      1.1.1.4  christos 
    737      1.1.1.4  christos         Status = AeInstallSciHandler ();
    738      1.1.1.8  christos         ACPI_CHECK_OK (AeInstallSciHandler, Status);
    739      1.1.1.4  christos 
    740      1.1.1.4  christos         /* Install some fixed event handlers */
    741      1.1.1.2    jruoho 
    742      1.1.1.8  christos         Status = AcpiInstallFixedEventHandler (
    743      1.1.1.8  christos             ACPI_EVENT_GLOBAL, AeEventHandler, NULL);
    744      1.1.1.8  christos         ACPI_CHECK_OK (AcpiInstallFixedEventHandler, Status);
    745      1.1.1.8  christos 
    746      1.1.1.8  christos         Status = AcpiInstallFixedEventHandler (
    747      1.1.1.8  christos             ACPI_EVENT_RTC, AeEventHandler, NULL);
    748      1.1.1.8  christos         ACPI_CHECK_OK (AcpiInstallFixedEventHandler, Status);
    749      1.1.1.4  christos     }
    750      1.1.1.4  christos #endif /* !ACPI_REDUCED_HARDWARE */
    751      1.1.1.4  christos 
    752      1.1.1.4  christos     AeMyContext.Connection = NULL;
    753      1.1.1.4  christos     AeMyContext.AccessLength = 0xA5;
    754      1.1.1.4  christos 
    755      1.1.1.4  christos     /*
    756      1.1.1.4  christos      * We will install a handler for each EC device, directly under the EC
    757      1.1.1.4  christos      * device definition. This is unlike the other handlers which we install
    758      1.1.1.4  christos      * at the root node. Also install memory and I/O handlers at any PCI
    759      1.1.1.4  christos      * devices.
    760      1.1.1.4  christos      */
    761      1.1.1.4  christos     AeInstallDeviceHandlers ();
    762      1.1.1.2    jruoho 
    763      1.1.1.2    jruoho     /*
    764      1.1.1.2    jruoho      * Install handlers for some of the "device driver" address spaces
    765      1.1.1.4  christos      * such as SMBus, etc.
    766      1.1.1.2    jruoho      */
    767      1.1.1.5  christos     AeInstallRegionHandlers ();
    768      1.1.1.2    jruoho     return (AE_OK);
    769      1.1.1.2    jruoho }
    770      1.1.1.2    jruoho 
    771      1.1.1.2    jruoho 
    772      1.1.1.2    jruoho /******************************************************************************
    773      1.1.1.2    jruoho  *
    774      1.1.1.2    jruoho  * FUNCTION:    AeInstallEarlyHandlers
    775      1.1.1.2    jruoho  *
    776      1.1.1.2    jruoho  * PARAMETERS:  None
    777      1.1.1.2    jruoho  *
    778      1.1.1.2    jruoho  * RETURN:      Status
    779      1.1.1.2    jruoho  *
    780      1.1.1.2    jruoho  * DESCRIPTION: Install handlers for the AcpiExec utility.
    781      1.1.1.2    jruoho  *
    782      1.1.1.2    jruoho  * Notes:       Don't install handler for PCI_Config, we want to use the
    783      1.1.1.2    jruoho  *              default handler to exercise that code.
    784      1.1.1.2    jruoho  *
    785      1.1.1.2    jruoho  *****************************************************************************/
    786          1.1    jruoho 
    787          1.1    jruoho ACPI_STATUS
    788      1.1.1.2    jruoho AeInstallEarlyHandlers (
    789      1.1.1.2    jruoho     void)
    790          1.1    jruoho {
    791          1.1    jruoho     ACPI_STATUS             Status;
    792          1.1    jruoho     ACPI_HANDLE             Handle;
    793          1.1    jruoho 
    794          1.1    jruoho 
    795          1.1    jruoho     ACPI_FUNCTION_ENTRY ();
    796          1.1    jruoho 
    797          1.1    jruoho 
    798      1.1.1.2    jruoho     Status = AcpiInstallInterfaceHandler (AeInterfaceHandler);
    799      1.1.1.2    jruoho     if (ACPI_FAILURE (Status))
    800      1.1.1.2    jruoho     {
    801      1.1.1.2    jruoho         printf ("Could not install interface handler, %s\n",
    802      1.1.1.2    jruoho             AcpiFormatException (Status));
    803      1.1.1.2    jruoho     }
    804      1.1.1.2    jruoho 
    805          1.1    jruoho     Status = AcpiInstallTableHandler (AeTableHandler, NULL);
    806          1.1    jruoho     if (ACPI_FAILURE (Status))
    807          1.1    jruoho     {
    808          1.1    jruoho         printf ("Could not install table handler, %s\n",
    809          1.1    jruoho             AcpiFormatException (Status));
    810          1.1    jruoho     }
    811          1.1    jruoho 
    812          1.1    jruoho     Status = AcpiInstallExceptionHandler (AeExceptionHandler);
    813          1.1    jruoho     if (ACPI_FAILURE (Status))
    814          1.1    jruoho     {
    815          1.1    jruoho         printf ("Could not install exception handler, %s\n",
    816          1.1    jruoho             AcpiFormatException (Status));
    817          1.1    jruoho     }
    818          1.1    jruoho 
    819      1.1.1.4  christos     /* Install global notify handlers */
    820          1.1    jruoho 
    821          1.1    jruoho     Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
    822      1.1.1.4  christos         AeSystemNotifyHandler, NULL);
    823          1.1    jruoho     if (ACPI_FAILURE (Status))
    824          1.1    jruoho     {
    825      1.1.1.4  christos         printf ("Could not install a global system notify handler, %s\n",
    826          1.1    jruoho             AcpiFormatException (Status));
    827          1.1    jruoho     }
    828          1.1    jruoho 
    829          1.1    jruoho     Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY,
    830      1.1.1.4  christos         AeDeviceNotifyHandler, NULL);
    831          1.1    jruoho     if (ACPI_FAILURE (Status))
    832          1.1    jruoho     {
    833          1.1    jruoho         printf ("Could not install a global notify handler, %s\n",
    834          1.1    jruoho             AcpiFormatException (Status));
    835          1.1    jruoho     }
    836          1.1    jruoho 
    837          1.1    jruoho     Status = AcpiGetHandle (NULL, "\\_SB", &Handle);
    838          1.1    jruoho     if (ACPI_SUCCESS (Status))
    839          1.1    jruoho     {
    840          1.1    jruoho         Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
    841      1.1.1.4  christos             AeNotifyHandler1, NULL);
    842          1.1    jruoho         if (ACPI_FAILURE (Status))
    843          1.1    jruoho         {
    844          1.1    jruoho             printf ("Could not install a notify handler, %s\n",
    845          1.1    jruoho                 AcpiFormatException (Status));
    846          1.1    jruoho         }
    847          1.1    jruoho 
    848          1.1    jruoho         Status = AcpiRemoveNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
    849      1.1.1.4  christos             AeNotifyHandler1);
    850          1.1    jruoho         if (ACPI_FAILURE (Status))
    851          1.1    jruoho         {
    852          1.1    jruoho             printf ("Could not remove a notify handler, %s\n",
    853          1.1    jruoho                 AcpiFormatException (Status));
    854          1.1    jruoho         }
    855          1.1    jruoho 
    856          1.1    jruoho         Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    857      1.1.1.4  christos             AeNotifyHandler1, NULL);
    858      1.1.1.8  christos         ACPI_CHECK_OK (AcpiInstallNotifyHandler, Status);
    859      1.1.1.2    jruoho 
    860          1.1    jruoho         Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    861      1.1.1.4  christos             AeNotifyHandler1);
    862      1.1.1.8  christos         ACPI_CHECK_OK (AcpiRemoveNotifyHandler, Status);
    863      1.1.1.2    jruoho 
    864      1.1.1.4  christos #if 0
    865          1.1    jruoho         Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
    866      1.1.1.4  christos             AeNotifyHandler1, NULL);
    867          1.1    jruoho         if (ACPI_FAILURE (Status))
    868          1.1    jruoho         {
    869          1.1    jruoho             printf ("Could not install a notify handler, %s\n",
    870          1.1    jruoho                 AcpiFormatException (Status));
    871          1.1    jruoho         }
    872      1.1.1.4  christos #endif
    873      1.1.1.4  christos 
    874      1.1.1.4  christos         /* Install two handlers for _SB_ */
    875      1.1.1.4  christos 
    876      1.1.1.4  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
    877      1.1.1.4  christos             AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
    878      1.1.1.4  christos 
    879      1.1.1.4  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
    880      1.1.1.4  christos             AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
    881      1.1.1.4  christos 
    882      1.1.1.4  christos         /* Attempt duplicate handler installation, should fail */
    883      1.1.1.4  christos 
    884      1.1.1.4  christos         Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
    885      1.1.1.4  christos             AeNotifyHandler1, ACPI_CAST_PTR (void, 0x77777777));
    886          1.1    jruoho 
    887          1.1    jruoho         Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle);
    888      1.1.1.8  christos         ACPI_CHECK_OK (AcpiAttachData, Status);
    889      1.1.1.2    jruoho 
    890          1.1    jruoho         Status = AcpiDetachData (Handle, AeAttachedDataHandler);
    891      1.1.1.8  christos         ACPI_CHECK_OK (AcpiDetachData, Status);
    892      1.1.1.2    jruoho 
    893      1.1.1.5  christos         /* Test attach data at the root object */
    894      1.1.1.5  christos 
    895      1.1.1.5  christos         Status = AcpiAttachData (ACPI_ROOT_OBJECT, AeAttachedDataHandler,
    896      1.1.1.5  christos             AcpiGbl_RootNode);
    897      1.1.1.8  christos         ACPI_CHECK_OK (AcpiAttachData, Status);
    898      1.1.1.5  christos 
    899      1.1.1.5  christos         Status = AcpiAttachData (ACPI_ROOT_OBJECT, AeAttachedDataHandler2,
    900      1.1.1.5  christos             AcpiGbl_RootNode);
    901      1.1.1.8  christos         ACPI_CHECK_OK (AcpiAttachData, Status);
    902      1.1.1.4  christos 
    903      1.1.1.4  christos         /* Test support for multiple attaches */
    904      1.1.1.4  christos 
    905      1.1.1.5  christos         Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle);
    906      1.1.1.8  christos         ACPI_CHECK_OK (AcpiAttachData, Status);
    907      1.1.1.5  christos 
    908      1.1.1.4  christos         Status = AcpiAttachData (Handle, AeAttachedDataHandler2, Handle);
    909      1.1.1.8  christos         ACPI_CHECK_OK (AcpiAttachData, Status);
    910          1.1    jruoho     }
    911          1.1    jruoho     else
    912          1.1    jruoho     {
    913          1.1    jruoho         printf ("No _SB_ found, %s\n", AcpiFormatException (Status));
    914          1.1    jruoho     }
    915          1.1    jruoho 
    916      1.1.1.2    jruoho     /*
    917      1.1.1.2    jruoho      * Install handlers that will override the default handlers for some of
    918      1.1.1.2    jruoho      * the space IDs.
    919      1.1.1.2    jruoho      */
    920      1.1.1.5  christos     AeOverrideRegionHandlers ();
    921          1.1    jruoho 
    922          1.1    jruoho     /*
    923          1.1    jruoho      * Initialize the global Region Handler space
    924          1.1    jruoho      * MCW 3/23/00
    925          1.1    jruoho      */
    926          1.1    jruoho     AeRegions.NumberOfRegions = 0;
    927          1.1    jruoho     AeRegions.RegionList = NULL;
    928      1.1.1.4  christos     return (AE_OK);
    929      1.1.1.4  christos }
    930