Home | History | Annotate | Line # | Download | only in events
evxfevnt.c revision 1.1.1.2
      1 /******************************************************************************
      2  *
      3  * Module Name: evxfevnt - External Interfaces, ACPI event disable/enable
      4  *
      5  *****************************************************************************/
      6 
      7 /*
      8  * Copyright (C) 2000 - 2011, Intel Corp.
      9  * All rights reserved.
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 1. Redistributions of source code must retain the above copyright
     15  *    notice, this list of conditions, and the following disclaimer,
     16  *    without modification.
     17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18  *    substantially similar to the "NO WARRANTY" disclaimer below
     19  *    ("Disclaimer") and any redistribution must be conditioned upon
     20  *    including a substantially similar Disclaimer requirement for further
     21  *    binary redistribution.
     22  * 3. Neither the names of the above-listed copyright holders nor the names
     23  *    of any contributors may be used to endorse or promote products derived
     24  *    from this software without specific prior written permission.
     25  *
     26  * Alternatively, this software may be distributed under the terms of the
     27  * GNU General Public License ("GPL") version 2 as published by the Free
     28  * Software Foundation.
     29  *
     30  * NO WARRANTY
     31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41  * POSSIBILITY OF SUCH DAMAGES.
     42  */
     43 
     44 
     45 #define __EVXFEVNT_C__
     46 
     47 #include "acpi.h"
     48 #include "accommon.h"
     49 #include "actables.h"
     50 
     51 #define _COMPONENT          ACPI_EVENTS
     52         ACPI_MODULE_NAME    ("evxfevnt")
     53 
     54 
     55 /*******************************************************************************
     56  *
     57  * FUNCTION:    AcpiEnable
     58  *
     59  * PARAMETERS:  None
     60  *
     61  * RETURN:      Status
     62  *
     63  * DESCRIPTION: Transfers the system into ACPI mode.
     64  *
     65  ******************************************************************************/
     66 
     67 ACPI_STATUS
     68 AcpiEnable (
     69     void)
     70 {
     71     ACPI_STATUS             Status = AE_OK;
     72 
     73 
     74     ACPI_FUNCTION_TRACE (AcpiEnable);
     75 
     76 
     77     /* ACPI tables must be present */
     78 
     79     if (!AcpiTbTablesLoaded ())
     80     {
     81         return_ACPI_STATUS (AE_NO_ACPI_TABLES);
     82     }
     83 
     84     /* Check current mode */
     85 
     86     if (AcpiHwGetMode() == ACPI_SYS_MODE_ACPI)
     87     {
     88         ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "System is already in ACPI mode\n"));
     89     }
     90     else
     91     {
     92         /* Transition to ACPI mode */
     93 
     94         Status = AcpiHwSetMode (ACPI_SYS_MODE_ACPI);
     95         if (ACPI_FAILURE (Status))
     96         {
     97             ACPI_ERROR ((AE_INFO, "Could not transition to ACPI mode"));
     98             return_ACPI_STATUS (Status);
     99         }
    100 
    101         ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
    102             "Transition to ACPI mode successful\n"));
    103     }
    104 
    105     return_ACPI_STATUS (Status);
    106 }
    107 
    108 ACPI_EXPORT_SYMBOL (AcpiEnable)
    109 
    110 
    111 /*******************************************************************************
    112  *
    113  * FUNCTION:    AcpiDisable
    114  *
    115  * PARAMETERS:  None
    116  *
    117  * RETURN:      Status
    118  *
    119  * DESCRIPTION: Transfers the system into LEGACY (non-ACPI) mode.
    120  *
    121  ******************************************************************************/
    122 
    123 ACPI_STATUS
    124 AcpiDisable (
    125     void)
    126 {
    127     ACPI_STATUS             Status = AE_OK;
    128 
    129 
    130     ACPI_FUNCTION_TRACE (AcpiDisable);
    131 
    132 
    133     if (AcpiHwGetMode() == ACPI_SYS_MODE_LEGACY)
    134     {
    135         ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
    136             "System is already in legacy (non-ACPI) mode\n"));
    137     }
    138     else
    139     {
    140         /* Transition to LEGACY mode */
    141 
    142         Status = AcpiHwSetMode (ACPI_SYS_MODE_LEGACY);
    143 
    144         if (ACPI_FAILURE (Status))
    145         {
    146             ACPI_ERROR ((AE_INFO,
    147                 "Could not exit ACPI mode to legacy mode"));
    148             return_ACPI_STATUS (Status);
    149         }
    150 
    151         ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI mode disabled\n"));
    152     }
    153 
    154     return_ACPI_STATUS (Status);
    155 }
    156 
    157 ACPI_EXPORT_SYMBOL (AcpiDisable)
    158 
    159 
    160 /*******************************************************************************
    161  *
    162  * FUNCTION:    AcpiEnableEvent
    163  *
    164  * PARAMETERS:  Event           - The fixed eventto be enabled
    165  *              Flags           - Reserved
    166  *
    167  * RETURN:      Status
    168  *
    169  * DESCRIPTION: Enable an ACPI event (fixed)
    170  *
    171  ******************************************************************************/
    172 
    173 ACPI_STATUS
    174 AcpiEnableEvent (
    175     UINT32                  Event,
    176     UINT32                  Flags)
    177 {
    178     ACPI_STATUS             Status = AE_OK;
    179     UINT32                  Value;
    180 
    181 
    182     ACPI_FUNCTION_TRACE (AcpiEnableEvent);
    183 
    184 
    185     /* Decode the Fixed Event */
    186 
    187     if (Event > ACPI_EVENT_MAX)
    188     {
    189         return_ACPI_STATUS (AE_BAD_PARAMETER);
    190     }
    191 
    192     /*
    193      * Enable the requested fixed event (by writing a one to the enable
    194      * register bit)
    195      */
    196     Status = AcpiWriteBitRegister (
    197                 AcpiGbl_FixedEventInfo[Event].EnableRegisterId,
    198                 ACPI_ENABLE_EVENT);
    199     if (ACPI_FAILURE (Status))
    200     {
    201         return_ACPI_STATUS (Status);
    202     }
    203 
    204     /* Make sure that the hardware responded */
    205 
    206     Status = AcpiReadBitRegister (
    207                 AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &Value);
    208     if (ACPI_FAILURE (Status))
    209     {
    210         return_ACPI_STATUS (Status);
    211     }
    212 
    213     if (Value != 1)
    214     {
    215         ACPI_ERROR ((AE_INFO,
    216             "Could not enable %s event", AcpiUtGetEventName (Event)));
    217         return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE);
    218     }
    219 
    220     return_ACPI_STATUS (Status);
    221 }
    222 
    223 ACPI_EXPORT_SYMBOL (AcpiEnableEvent)
    224 
    225 
    226 /*******************************************************************************
    227  *
    228  * FUNCTION:    AcpiDisableEvent
    229  *
    230  * PARAMETERS:  Event           - The fixed event to be disabled
    231  *              Flags           - Reserved
    232  *
    233  * RETURN:      Status
    234  *
    235  * DESCRIPTION: Disable an ACPI event (fixed)
    236  *
    237  ******************************************************************************/
    238 
    239 ACPI_STATUS
    240 AcpiDisableEvent (
    241     UINT32                  Event,
    242     UINT32                  Flags)
    243 {
    244     ACPI_STATUS             Status = AE_OK;
    245     UINT32                  Value;
    246 
    247 
    248     ACPI_FUNCTION_TRACE (AcpiDisableEvent);
    249 
    250 
    251     /* Decode the Fixed Event */
    252 
    253     if (Event > ACPI_EVENT_MAX)
    254     {
    255         return_ACPI_STATUS (AE_BAD_PARAMETER);
    256     }
    257 
    258     /*
    259      * Disable the requested fixed event (by writing a zero to the enable
    260      * register bit)
    261      */
    262     Status = AcpiWriteBitRegister (
    263                 AcpiGbl_FixedEventInfo[Event].EnableRegisterId,
    264                 ACPI_DISABLE_EVENT);
    265     if (ACPI_FAILURE (Status))
    266     {
    267         return_ACPI_STATUS (Status);
    268     }
    269 
    270     Status = AcpiReadBitRegister (
    271                 AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &Value);
    272     if (ACPI_FAILURE (Status))
    273     {
    274         return_ACPI_STATUS (Status);
    275     }
    276 
    277     if (Value != 0)
    278     {
    279         ACPI_ERROR ((AE_INFO,
    280             "Could not disable %s events", AcpiUtGetEventName (Event)));
    281         return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE);
    282     }
    283 
    284     return_ACPI_STATUS (Status);
    285 }
    286 
    287 ACPI_EXPORT_SYMBOL (AcpiDisableEvent)
    288 
    289 
    290 /*******************************************************************************
    291  *
    292  * FUNCTION:    AcpiClearEvent
    293  *
    294  * PARAMETERS:  Event           - The fixed event to be cleared
    295  *
    296  * RETURN:      Status
    297  *
    298  * DESCRIPTION: Clear an ACPI event (fixed)
    299  *
    300  ******************************************************************************/
    301 
    302 ACPI_STATUS
    303 AcpiClearEvent (
    304     UINT32                  Event)
    305 {
    306     ACPI_STATUS             Status = AE_OK;
    307 
    308 
    309     ACPI_FUNCTION_TRACE (AcpiClearEvent);
    310 
    311 
    312     /* Decode the Fixed Event */
    313 
    314     if (Event > ACPI_EVENT_MAX)
    315     {
    316         return_ACPI_STATUS (AE_BAD_PARAMETER);
    317     }
    318 
    319     /*
    320      * Clear the requested fixed event (By writing a one to the status
    321      * register bit)
    322      */
    323     Status = AcpiWriteBitRegister (
    324                 AcpiGbl_FixedEventInfo[Event].StatusRegisterId,
    325                 ACPI_CLEAR_STATUS);
    326 
    327     return_ACPI_STATUS (Status);
    328 }
    329 
    330 ACPI_EXPORT_SYMBOL (AcpiClearEvent)
    331 
    332 
    333 /*******************************************************************************
    334  *
    335  * FUNCTION:    AcpiGetEventStatus
    336  *
    337  * PARAMETERS:  Event           - The fixed event
    338  *              EventStatus     - Where the current status of the event will
    339  *                                be returned
    340  *
    341  * RETURN:      Status
    342  *
    343  * DESCRIPTION: Obtains and returns the current status of the event
    344  *
    345  ******************************************************************************/
    346 
    347 ACPI_STATUS
    348 AcpiGetEventStatus (
    349     UINT32                  Event,
    350     ACPI_EVENT_STATUS       *EventStatus)
    351 {
    352     ACPI_STATUS             Status = AE_OK;
    353 
    354 
    355     ACPI_FUNCTION_TRACE (AcpiGetEventStatus);
    356 
    357 
    358     if (!EventStatus)
    359     {
    360         return_ACPI_STATUS (AE_BAD_PARAMETER);
    361     }
    362 
    363     /* Decode the Fixed Event */
    364 
    365     if (Event > ACPI_EVENT_MAX)
    366     {
    367         return_ACPI_STATUS (AE_BAD_PARAMETER);
    368     }
    369 
    370     /* Get the status of the requested fixed event */
    371 
    372     Status = AcpiReadBitRegister (
    373                 AcpiGbl_FixedEventInfo[Event].StatusRegisterId, EventStatus);
    374 
    375     return_ACPI_STATUS (Status);
    376 }
    377 
    378 ACPI_EXPORT_SYMBOL (AcpiGetEventStatus)
    379 
    380 
    381