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