Home | History | Annotate | Line # | Download | only in hardware
hwgpe.c revision 1.1.1.2.24.1
      1           1.1  jruoho /******************************************************************************
      2           1.1  jruoho  *
      3           1.1  jruoho  * Module Name: hwgpe - Low level GPE enable/disable/clear functions
      4           1.1  jruoho  *
      5           1.1  jruoho  *****************************************************************************/
      6           1.1  jruoho 
      7       1.1.1.2  jruoho /*
      8  1.1.1.2.24.1   rmind  * Copyright (C) 2000 - 2013, 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 "acpi.h"
     45           1.1  jruoho #include "accommon.h"
     46           1.1  jruoho #include "acevents.h"
     47           1.1  jruoho 
     48           1.1  jruoho #define _COMPONENT          ACPI_HARDWARE
     49           1.1  jruoho         ACPI_MODULE_NAME    ("hwgpe")
     50           1.1  jruoho 
     51  1.1.1.2.24.1   rmind #if (!ACPI_REDUCED_HARDWARE) /* Entire module */
     52  1.1.1.2.24.1   rmind 
     53           1.1  jruoho /* Local prototypes */
     54           1.1  jruoho 
     55           1.1  jruoho static ACPI_STATUS
     56           1.1  jruoho AcpiHwEnableWakeupGpeBlock (
     57           1.1  jruoho     ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
     58           1.1  jruoho     ACPI_GPE_BLOCK_INFO     *GpeBlock,
     59           1.1  jruoho     void                    *Context);
     60           1.1  jruoho 
     61           1.1  jruoho 
     62           1.1  jruoho /******************************************************************************
     63           1.1  jruoho  *
     64       1.1.1.2  jruoho  * FUNCTION:    AcpiHwGetGpeRegisterBit
     65       1.1.1.2  jruoho  *
     66       1.1.1.2  jruoho  * PARAMETERS:  GpeEventInfo        - Info block for the GPE
     67       1.1.1.2  jruoho  *
     68       1.1.1.2  jruoho  * RETURN:      Register mask with a one in the GPE bit position
     69       1.1.1.2  jruoho  *
     70       1.1.1.2  jruoho  * DESCRIPTION: Compute the register mask for this GPE. One bit is set in the
     71       1.1.1.2  jruoho  *              correct position for the input GPE.
     72       1.1.1.2  jruoho  *
     73       1.1.1.2  jruoho  ******************************************************************************/
     74       1.1.1.2  jruoho 
     75       1.1.1.2  jruoho UINT32
     76       1.1.1.2  jruoho AcpiHwGetGpeRegisterBit (
     77  1.1.1.2.24.1   rmind     ACPI_GPE_EVENT_INFO     *GpeEventInfo)
     78       1.1.1.2  jruoho {
     79       1.1.1.2  jruoho 
     80       1.1.1.2  jruoho     return ((UINT32) 1 <<
     81  1.1.1.2.24.1   rmind         (GpeEventInfo->GpeNumber - GpeEventInfo->RegisterInfo->BaseGpeNumber));
     82       1.1.1.2  jruoho }
     83       1.1.1.2  jruoho 
     84       1.1.1.2  jruoho 
     85       1.1.1.2  jruoho /******************************************************************************
     86       1.1.1.2  jruoho  *
     87       1.1.1.2  jruoho  * FUNCTION:    AcpiHwLowSetGpe
     88           1.1  jruoho  *
     89           1.1  jruoho  * PARAMETERS:  GpeEventInfo        - Info block for the GPE to be disabled
     90       1.1.1.2  jruoho  *              Action              - Enable or disable
     91           1.1  jruoho  *
     92           1.1  jruoho  * RETURN:      Status
     93           1.1  jruoho  *
     94       1.1.1.2  jruoho  * DESCRIPTION: Enable or disable a single GPE in the parent enable register.
     95           1.1  jruoho  *
     96           1.1  jruoho  ******************************************************************************/
     97           1.1  jruoho 
     98           1.1  jruoho ACPI_STATUS
     99       1.1.1.2  jruoho AcpiHwLowSetGpe (
    100       1.1.1.2  jruoho     ACPI_GPE_EVENT_INFO     *GpeEventInfo,
    101       1.1.1.2  jruoho     UINT32                  Action)
    102           1.1  jruoho {
    103           1.1  jruoho     ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
    104           1.1  jruoho     ACPI_STATUS             Status;
    105           1.1  jruoho     UINT32                  EnableMask;
    106       1.1.1.2  jruoho     UINT32                  RegisterBit;
    107       1.1.1.2  jruoho 
    108       1.1.1.2  jruoho 
    109       1.1.1.2  jruoho     ACPI_FUNCTION_ENTRY ();
    110           1.1  jruoho 
    111           1.1  jruoho 
    112           1.1  jruoho     /* Get the info block for the entire GPE register */
    113           1.1  jruoho 
    114           1.1  jruoho     GpeRegisterInfo = GpeEventInfo->RegisterInfo;
    115           1.1  jruoho     if (!GpeRegisterInfo)
    116           1.1  jruoho     {
    117           1.1  jruoho         return (AE_NOT_EXIST);
    118           1.1  jruoho     }
    119           1.1  jruoho 
    120           1.1  jruoho     /* Get current value of the enable register that contains this GPE */
    121           1.1  jruoho 
    122           1.1  jruoho     Status = AcpiHwRead (&EnableMask, &GpeRegisterInfo->EnableAddress);
    123           1.1  jruoho     if (ACPI_FAILURE (Status))
    124           1.1  jruoho     {
    125           1.1  jruoho         return (Status);
    126           1.1  jruoho     }
    127           1.1  jruoho 
    128       1.1.1.2  jruoho     /* Set or clear just the bit that corresponds to this GPE */
    129           1.1  jruoho 
    130  1.1.1.2.24.1   rmind     RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo);
    131       1.1.1.2  jruoho     switch (Action)
    132       1.1.1.2  jruoho     {
    133       1.1.1.2  jruoho     case ACPI_GPE_CONDITIONAL_ENABLE:
    134           1.1  jruoho 
    135       1.1.1.2  jruoho         /* Only enable if the EnableForRun bit is set */
    136           1.1  jruoho 
    137       1.1.1.2  jruoho         if (!(RegisterBit & GpeRegisterInfo->EnableForRun))
    138       1.1.1.2  jruoho         {
    139       1.1.1.2  jruoho             return (AE_BAD_PARAMETER);
    140       1.1.1.2  jruoho         }
    141           1.1  jruoho 
    142       1.1.1.2  jruoho         /*lint -fallthrough */
    143           1.1  jruoho 
    144       1.1.1.2  jruoho     case ACPI_GPE_ENABLE:
    145  1.1.1.2.24.1   rmind 
    146       1.1.1.2  jruoho         ACPI_SET_BIT (EnableMask, RegisterBit);
    147       1.1.1.2  jruoho         break;
    148       1.1.1.2  jruoho 
    149       1.1.1.2  jruoho     case ACPI_GPE_DISABLE:
    150  1.1.1.2.24.1   rmind 
    151       1.1.1.2  jruoho         ACPI_CLEAR_BIT (EnableMask, RegisterBit);
    152       1.1.1.2  jruoho         break;
    153           1.1  jruoho 
    154       1.1.1.2  jruoho     default:
    155  1.1.1.2.24.1   rmind 
    156  1.1.1.2.24.1   rmind         ACPI_ERROR ((AE_INFO, "Invalid GPE Action, %u", Action));
    157       1.1.1.2  jruoho         return (AE_BAD_PARAMETER);
    158           1.1  jruoho     }
    159           1.1  jruoho 
    160       1.1.1.2  jruoho     /* Write the updated enable mask */
    161           1.1  jruoho 
    162       1.1.1.2  jruoho     Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress);
    163           1.1  jruoho     return (Status);
    164           1.1  jruoho }
    165           1.1  jruoho 
    166           1.1  jruoho 
    167           1.1  jruoho /******************************************************************************
    168           1.1  jruoho  *
    169           1.1  jruoho  * FUNCTION:    AcpiHwClearGpe
    170           1.1  jruoho  *
    171           1.1  jruoho  * PARAMETERS:  GpeEventInfo        - Info block for the GPE to be cleared
    172           1.1  jruoho  *
    173           1.1  jruoho  * RETURN:      Status
    174           1.1  jruoho  *
    175           1.1  jruoho  * DESCRIPTION: Clear the status bit for a single GPE.
    176           1.1  jruoho  *
    177           1.1  jruoho  ******************************************************************************/
    178           1.1  jruoho 
    179           1.1  jruoho ACPI_STATUS
    180           1.1  jruoho AcpiHwClearGpe (
    181           1.1  jruoho     ACPI_GPE_EVENT_INFO     *GpeEventInfo)
    182           1.1  jruoho {
    183       1.1.1.2  jruoho     ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
    184           1.1  jruoho     ACPI_STATUS             Status;
    185       1.1.1.2  jruoho     UINT32                  RegisterBit;
    186           1.1  jruoho 
    187           1.1  jruoho 
    188           1.1  jruoho     ACPI_FUNCTION_ENTRY ();
    189           1.1  jruoho 
    190       1.1.1.2  jruoho     /* Get the info block for the entire GPE register */
    191           1.1  jruoho 
    192       1.1.1.2  jruoho     GpeRegisterInfo = GpeEventInfo->RegisterInfo;
    193       1.1.1.2  jruoho     if (!GpeRegisterInfo)
    194       1.1.1.2  jruoho     {
    195       1.1.1.2  jruoho         return (AE_NOT_EXIST);
    196       1.1.1.2  jruoho     }
    197           1.1  jruoho 
    198           1.1  jruoho     /*
    199           1.1  jruoho      * Write a one to the appropriate bit in the status register to
    200           1.1  jruoho      * clear this GPE.
    201           1.1  jruoho      */
    202  1.1.1.2.24.1   rmind     RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo);
    203       1.1.1.2  jruoho 
    204           1.1  jruoho     Status = AcpiHwWrite (RegisterBit,
    205       1.1.1.2  jruoho                     &GpeRegisterInfo->StatusAddress);
    206           1.1  jruoho 
    207           1.1  jruoho     return (Status);
    208           1.1  jruoho }
    209           1.1  jruoho 
    210           1.1  jruoho 
    211           1.1  jruoho /******************************************************************************
    212           1.1  jruoho  *
    213           1.1  jruoho  * FUNCTION:    AcpiHwGetGpeStatus
    214           1.1  jruoho  *
    215           1.1  jruoho  * PARAMETERS:  GpeEventInfo        - Info block for the GPE to queried
    216           1.1  jruoho  *              EventStatus         - Where the GPE status is returned
    217           1.1  jruoho  *
    218           1.1  jruoho  * RETURN:      Status
    219           1.1  jruoho  *
    220           1.1  jruoho  * DESCRIPTION: Return the status of a single GPE.
    221           1.1  jruoho  *
    222           1.1  jruoho  ******************************************************************************/
    223           1.1  jruoho 
    224           1.1  jruoho ACPI_STATUS
    225           1.1  jruoho AcpiHwGetGpeStatus (
    226           1.1  jruoho     ACPI_GPE_EVENT_INFO     *GpeEventInfo,
    227           1.1  jruoho     ACPI_EVENT_STATUS       *EventStatus)
    228           1.1  jruoho {
    229           1.1  jruoho     UINT32                  InByte;
    230       1.1.1.2  jruoho     UINT32                  RegisterBit;
    231           1.1  jruoho     ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
    232           1.1  jruoho     ACPI_EVENT_STATUS       LocalEventStatus = 0;
    233       1.1.1.2  jruoho     ACPI_STATUS             Status;
    234           1.1  jruoho 
    235           1.1  jruoho 
    236           1.1  jruoho     ACPI_FUNCTION_ENTRY ();
    237           1.1  jruoho 
    238           1.1  jruoho 
    239           1.1  jruoho     if (!EventStatus)
    240           1.1  jruoho     {
    241           1.1  jruoho         return (AE_BAD_PARAMETER);
    242           1.1  jruoho     }
    243           1.1  jruoho 
    244           1.1  jruoho     /* Get the info block for the entire GPE register */
    245           1.1  jruoho 
    246           1.1  jruoho     GpeRegisterInfo = GpeEventInfo->RegisterInfo;
    247           1.1  jruoho 
    248           1.1  jruoho     /* Get the register bitmask for this GPE */
    249           1.1  jruoho 
    250  1.1.1.2.24.1   rmind     RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo);
    251           1.1  jruoho 
    252           1.1  jruoho     /* GPE currently enabled? (enabled for runtime?) */
    253           1.1  jruoho 
    254           1.1  jruoho     if (RegisterBit & GpeRegisterInfo->EnableForRun)
    255           1.1  jruoho     {
    256           1.1  jruoho         LocalEventStatus |= ACPI_EVENT_FLAG_ENABLED;
    257           1.1  jruoho     }
    258           1.1  jruoho 
    259           1.1  jruoho     /* GPE enabled for wake? */
    260           1.1  jruoho 
    261           1.1  jruoho     if (RegisterBit & GpeRegisterInfo->EnableForWake)
    262           1.1  jruoho     {
    263           1.1  jruoho         LocalEventStatus |= ACPI_EVENT_FLAG_WAKE_ENABLED;
    264           1.1  jruoho     }
    265           1.1  jruoho 
    266           1.1  jruoho     /* GPE currently active (status bit == 1)? */
    267           1.1  jruoho 
    268           1.1  jruoho     Status = AcpiHwRead (&InByte, &GpeRegisterInfo->StatusAddress);
    269           1.1  jruoho     if (ACPI_FAILURE (Status))
    270           1.1  jruoho     {
    271           1.1  jruoho         return (Status);
    272           1.1  jruoho     }
    273           1.1  jruoho 
    274           1.1  jruoho     if (RegisterBit & InByte)
    275           1.1  jruoho     {
    276           1.1  jruoho         LocalEventStatus |= ACPI_EVENT_FLAG_SET;
    277           1.1  jruoho     }
    278           1.1  jruoho 
    279           1.1  jruoho     /* Set return value */
    280           1.1  jruoho 
    281           1.1  jruoho     (*EventStatus) = LocalEventStatus;
    282           1.1  jruoho     return (AE_OK);
    283           1.1  jruoho }
    284           1.1  jruoho 
    285           1.1  jruoho 
    286           1.1  jruoho /******************************************************************************
    287           1.1  jruoho  *
    288           1.1  jruoho  * FUNCTION:    AcpiHwDisableGpeBlock
    289           1.1  jruoho  *
    290           1.1  jruoho  * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
    291           1.1  jruoho  *              GpeBlock            - Gpe Block info
    292           1.1  jruoho  *
    293           1.1  jruoho  * RETURN:      Status
    294           1.1  jruoho  *
    295           1.1  jruoho  * DESCRIPTION: Disable all GPEs within a single GPE block
    296           1.1  jruoho  *
    297           1.1  jruoho  ******************************************************************************/
    298           1.1  jruoho 
    299           1.1  jruoho ACPI_STATUS
    300           1.1  jruoho AcpiHwDisableGpeBlock (
    301           1.1  jruoho     ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
    302           1.1  jruoho     ACPI_GPE_BLOCK_INFO     *GpeBlock,
    303           1.1  jruoho     void                    *Context)
    304           1.1  jruoho {
    305           1.1  jruoho     UINT32                  i;
    306           1.1  jruoho     ACPI_STATUS             Status;
    307           1.1  jruoho 
    308           1.1  jruoho 
    309           1.1  jruoho     /* Examine each GPE Register within the block */
    310           1.1  jruoho 
    311           1.1  jruoho     for (i = 0; i < GpeBlock->RegisterCount; i++)
    312           1.1  jruoho     {
    313           1.1  jruoho         /* Disable all GPEs in this register */
    314           1.1  jruoho 
    315           1.1  jruoho         Status = AcpiHwWrite (0x00, &GpeBlock->RegisterInfo[i].EnableAddress);
    316           1.1  jruoho         if (ACPI_FAILURE (Status))
    317           1.1  jruoho         {
    318           1.1  jruoho             return (Status);
    319           1.1  jruoho         }
    320           1.1  jruoho     }
    321           1.1  jruoho 
    322           1.1  jruoho     return (AE_OK);
    323           1.1  jruoho }
    324           1.1  jruoho 
    325           1.1  jruoho 
    326           1.1  jruoho /******************************************************************************
    327           1.1  jruoho  *
    328           1.1  jruoho  * FUNCTION:    AcpiHwClearGpeBlock
    329           1.1  jruoho  *
    330           1.1  jruoho  * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
    331           1.1  jruoho  *              GpeBlock            - Gpe Block info
    332           1.1  jruoho  *
    333           1.1  jruoho  * RETURN:      Status
    334           1.1  jruoho  *
    335           1.1  jruoho  * DESCRIPTION: Clear status bits for all GPEs within a single GPE block
    336           1.1  jruoho  *
    337           1.1  jruoho  ******************************************************************************/
    338           1.1  jruoho 
    339           1.1  jruoho ACPI_STATUS
    340           1.1  jruoho AcpiHwClearGpeBlock (
    341           1.1  jruoho     ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
    342           1.1  jruoho     ACPI_GPE_BLOCK_INFO     *GpeBlock,
    343           1.1  jruoho     void                    *Context)
    344           1.1  jruoho {
    345           1.1  jruoho     UINT32                  i;
    346           1.1  jruoho     ACPI_STATUS             Status;
    347           1.1  jruoho 
    348           1.1  jruoho 
    349           1.1  jruoho     /* Examine each GPE Register within the block */
    350           1.1  jruoho 
    351           1.1  jruoho     for (i = 0; i < GpeBlock->RegisterCount; i++)
    352           1.1  jruoho     {
    353           1.1  jruoho         /* Clear status on all GPEs in this register */
    354           1.1  jruoho 
    355           1.1  jruoho         Status = AcpiHwWrite (0xFF, &GpeBlock->RegisterInfo[i].StatusAddress);
    356           1.1  jruoho         if (ACPI_FAILURE (Status))
    357           1.1  jruoho         {
    358           1.1  jruoho             return (Status);
    359           1.1  jruoho         }
    360           1.1  jruoho     }
    361           1.1  jruoho 
    362           1.1  jruoho     return (AE_OK);
    363           1.1  jruoho }
    364           1.1  jruoho 
    365           1.1  jruoho 
    366           1.1  jruoho /******************************************************************************
    367           1.1  jruoho  *
    368           1.1  jruoho  * FUNCTION:    AcpiHwEnableRuntimeGpeBlock
    369           1.1  jruoho  *
    370           1.1  jruoho  * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
    371           1.1  jruoho  *              GpeBlock            - Gpe Block info
    372           1.1  jruoho  *
    373           1.1  jruoho  * RETURN:      Status
    374           1.1  jruoho  *
    375           1.1  jruoho  * DESCRIPTION: Enable all "runtime" GPEs within a single GPE block. Includes
    376           1.1  jruoho  *              combination wake/run GPEs.
    377           1.1  jruoho  *
    378           1.1  jruoho  ******************************************************************************/
    379           1.1  jruoho 
    380           1.1  jruoho ACPI_STATUS
    381           1.1  jruoho AcpiHwEnableRuntimeGpeBlock (
    382           1.1  jruoho     ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
    383           1.1  jruoho     ACPI_GPE_BLOCK_INFO     *GpeBlock,
    384           1.1  jruoho     void                    *Context)
    385           1.1  jruoho {
    386           1.1  jruoho     UINT32                  i;
    387           1.1  jruoho     ACPI_STATUS             Status;
    388           1.1  jruoho 
    389           1.1  jruoho 
    390           1.1  jruoho     /* NOTE: assumes that all GPEs are currently disabled */
    391           1.1  jruoho 
    392           1.1  jruoho     /* Examine each GPE Register within the block */
    393           1.1  jruoho 
    394           1.1  jruoho     for (i = 0; i < GpeBlock->RegisterCount; i++)
    395           1.1  jruoho     {
    396           1.1  jruoho         if (!GpeBlock->RegisterInfo[i].EnableForRun)
    397           1.1  jruoho         {
    398           1.1  jruoho             continue;
    399           1.1  jruoho         }
    400           1.1  jruoho 
    401           1.1  jruoho         /* Enable all "runtime" GPEs in this register */
    402           1.1  jruoho 
    403           1.1  jruoho         Status = AcpiHwWrite (GpeBlock->RegisterInfo[i].EnableForRun,
    404           1.1  jruoho                     &GpeBlock->RegisterInfo[i].EnableAddress);
    405           1.1  jruoho         if (ACPI_FAILURE (Status))
    406           1.1  jruoho         {
    407           1.1  jruoho             return (Status);
    408           1.1  jruoho         }
    409           1.1  jruoho     }
    410           1.1  jruoho 
    411           1.1  jruoho     return (AE_OK);
    412           1.1  jruoho }
    413           1.1  jruoho 
    414           1.1  jruoho 
    415           1.1  jruoho /******************************************************************************
    416           1.1  jruoho  *
    417           1.1  jruoho  * FUNCTION:    AcpiHwEnableWakeupGpeBlock
    418           1.1  jruoho  *
    419           1.1  jruoho  * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
    420           1.1  jruoho  *              GpeBlock            - Gpe Block info
    421           1.1  jruoho  *
    422           1.1  jruoho  * RETURN:      Status
    423           1.1  jruoho  *
    424           1.1  jruoho  * DESCRIPTION: Enable all "wake" GPEs within a single GPE block. Includes
    425           1.1  jruoho  *              combination wake/run GPEs.
    426           1.1  jruoho  *
    427           1.1  jruoho  ******************************************************************************/
    428           1.1  jruoho 
    429           1.1  jruoho static ACPI_STATUS
    430           1.1  jruoho AcpiHwEnableWakeupGpeBlock (
    431           1.1  jruoho     ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
    432           1.1  jruoho     ACPI_GPE_BLOCK_INFO     *GpeBlock,
    433           1.1  jruoho     void                    *Context)
    434           1.1  jruoho {
    435           1.1  jruoho     UINT32                  i;
    436           1.1  jruoho     ACPI_STATUS             Status;
    437           1.1  jruoho 
    438           1.1  jruoho 
    439           1.1  jruoho     /* Examine each GPE Register within the block */
    440           1.1  jruoho 
    441           1.1  jruoho     for (i = 0; i < GpeBlock->RegisterCount; i++)
    442           1.1  jruoho     {
    443           1.1  jruoho         if (!GpeBlock->RegisterInfo[i].EnableForWake)
    444           1.1  jruoho         {
    445           1.1  jruoho             continue;
    446           1.1  jruoho         }
    447           1.1  jruoho 
    448           1.1  jruoho         /* Enable all "wake" GPEs in this register */
    449           1.1  jruoho 
    450           1.1  jruoho         Status = AcpiHwWrite (GpeBlock->RegisterInfo[i].EnableForWake,
    451           1.1  jruoho                     &GpeBlock->RegisterInfo[i].EnableAddress);
    452           1.1  jruoho         if (ACPI_FAILURE (Status))
    453           1.1  jruoho         {
    454           1.1  jruoho             return (Status);
    455           1.1  jruoho         }
    456           1.1  jruoho     }
    457           1.1  jruoho 
    458           1.1  jruoho     return (AE_OK);
    459           1.1  jruoho }
    460           1.1  jruoho 
    461           1.1  jruoho 
    462           1.1  jruoho /******************************************************************************
    463           1.1  jruoho  *
    464           1.1  jruoho  * FUNCTION:    AcpiHwDisableAllGpes
    465           1.1  jruoho  *
    466           1.1  jruoho  * PARAMETERS:  None
    467           1.1  jruoho  *
    468           1.1  jruoho  * RETURN:      Status
    469           1.1  jruoho  *
    470           1.1  jruoho  * DESCRIPTION: Disable and clear all GPEs in all GPE blocks
    471           1.1  jruoho  *
    472           1.1  jruoho  ******************************************************************************/
    473           1.1  jruoho 
    474           1.1  jruoho ACPI_STATUS
    475           1.1  jruoho AcpiHwDisableAllGpes (
    476           1.1  jruoho     void)
    477           1.1  jruoho {
    478           1.1  jruoho     ACPI_STATUS             Status;
    479           1.1  jruoho 
    480           1.1  jruoho 
    481           1.1  jruoho     ACPI_FUNCTION_TRACE (HwDisableAllGpes);
    482           1.1  jruoho 
    483           1.1  jruoho 
    484           1.1  jruoho     Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL);
    485           1.1  jruoho     Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL);
    486           1.1  jruoho     return_ACPI_STATUS (Status);
    487           1.1  jruoho }
    488           1.1  jruoho 
    489           1.1  jruoho 
    490           1.1  jruoho /******************************************************************************
    491           1.1  jruoho  *
    492           1.1  jruoho  * FUNCTION:    AcpiHwEnableAllRuntimeGpes
    493           1.1  jruoho  *
    494           1.1  jruoho  * PARAMETERS:  None
    495           1.1  jruoho  *
    496           1.1  jruoho  * RETURN:      Status
    497           1.1  jruoho  *
    498           1.1  jruoho  * DESCRIPTION: Enable all "runtime" GPEs, in all GPE blocks
    499           1.1  jruoho  *
    500           1.1  jruoho  ******************************************************************************/
    501           1.1  jruoho 
    502           1.1  jruoho ACPI_STATUS
    503           1.1  jruoho AcpiHwEnableAllRuntimeGpes (
    504           1.1  jruoho     void)
    505           1.1  jruoho {
    506           1.1  jruoho     ACPI_STATUS             Status;
    507           1.1  jruoho 
    508           1.1  jruoho 
    509           1.1  jruoho     ACPI_FUNCTION_TRACE (HwEnableAllRuntimeGpes);
    510           1.1  jruoho 
    511           1.1  jruoho 
    512           1.1  jruoho     Status = AcpiEvWalkGpeList (AcpiHwEnableRuntimeGpeBlock, NULL);
    513           1.1  jruoho     return_ACPI_STATUS (Status);
    514           1.1  jruoho }
    515           1.1  jruoho 
    516           1.1  jruoho 
    517           1.1  jruoho /******************************************************************************
    518           1.1  jruoho  *
    519           1.1  jruoho  * FUNCTION:    AcpiHwEnableAllWakeupGpes
    520           1.1  jruoho  *
    521           1.1  jruoho  * PARAMETERS:  None
    522           1.1  jruoho  *
    523           1.1  jruoho  * RETURN:      Status
    524           1.1  jruoho  *
    525           1.1  jruoho  * DESCRIPTION: Enable all "wakeup" GPEs, in all GPE blocks
    526           1.1  jruoho  *
    527           1.1  jruoho  ******************************************************************************/
    528           1.1  jruoho 
    529           1.1  jruoho ACPI_STATUS
    530           1.1  jruoho AcpiHwEnableAllWakeupGpes (
    531           1.1  jruoho     void)
    532           1.1  jruoho {
    533           1.1  jruoho     ACPI_STATUS             Status;
    534           1.1  jruoho 
    535           1.1  jruoho 
    536           1.1  jruoho     ACPI_FUNCTION_TRACE (HwEnableAllWakeupGpes);
    537           1.1  jruoho 
    538           1.1  jruoho 
    539           1.1  jruoho     Status = AcpiEvWalkGpeList (AcpiHwEnableWakeupGpeBlock, NULL);
    540           1.1  jruoho     return_ACPI_STATUS (Status);
    541           1.1  jruoho }
    542           1.1  jruoho 
    543  1.1.1.2.24.1   rmind #endif /* !ACPI_REDUCED_HARDWARE */
    544