hwgpe.c revision 217365
171867Smsmith
267754Smsmith/******************************************************************************
367754Smsmith *
467754Smsmith * Module Name: hwgpe - Low level GPE enable/disable/clear functions
567754Smsmith *
667754Smsmith *****************************************************************************/
767754Smsmith
8217365Sjkim/*
9217365Sjkim * Copyright (C) 2000 - 2011, Intel Corp.
1070243Smsmith * All rights reserved.
1167754Smsmith *
12217365Sjkim * Redistribution and use in source and binary forms, with or without
13217365Sjkim * modification, are permitted provided that the following conditions
14217365Sjkim * are met:
15217365Sjkim * 1. Redistributions of source code must retain the above copyright
16217365Sjkim *    notice, this list of conditions, and the following disclaimer,
17217365Sjkim *    without modification.
18217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
20217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
21217365Sjkim *    including a substantially similar Disclaimer requirement for further
22217365Sjkim *    binary redistribution.
23217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
24217365Sjkim *    of any contributors may be used to endorse or promote products derived
25217365Sjkim *    from this software without specific prior written permission.
2667754Smsmith *
27217365Sjkim * Alternatively, this software may be distributed under the terms of the
28217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
29217365Sjkim * Software Foundation.
3067754Smsmith *
31217365Sjkim * NO WARRANTY
32217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
43217365Sjkim */
4467754Smsmith
45193341Sjkim#include <contrib/dev/acpica/include/acpi.h>
46193341Sjkim#include <contrib/dev/acpica/include/accommon.h>
47193341Sjkim#include <contrib/dev/acpica/include/acevents.h>
4867754Smsmith
4977424Smsmith#define _COMPONENT          ACPI_HARDWARE
5091116Smsmith        ACPI_MODULE_NAME    ("hwgpe")
5167754Smsmith
52151937Sjkim/* Local prototypes */
5367754Smsmith
54151937Sjkimstatic ACPI_STATUS
55151937SjkimAcpiHwEnableWakeupGpeBlock (
56151937Sjkim    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
57193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
58193267Sjkim    void                    *Context);
59151937Sjkim
60151937Sjkim
6167754Smsmith/******************************************************************************
6267754Smsmith *
63209746Sjkim * FUNCTION:    AcpiHwGetGpeRegisterBit
64193267Sjkim *
65209746Sjkim * PARAMETERS:  GpeEventInfo        - Info block for the GPE
66209746Sjkim *              GpeRegisterInfo     - Info block for the GPE register
67209746Sjkim *
68209746Sjkim * RETURN:      Register mask with a one in the GPE bit position
69209746Sjkim *
70209746Sjkim * DESCRIPTION: Compute the register mask for this GPE. One bit is set in the
71209746Sjkim *              correct position for the input GPE.
72209746Sjkim *
73209746Sjkim ******************************************************************************/
74209746Sjkim
75209746SjkimUINT32
76209746SjkimAcpiHwGetGpeRegisterBit (
77209746Sjkim    ACPI_GPE_EVENT_INFO     *GpeEventInfo,
78209746Sjkim    ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo)
79209746Sjkim{
80209746Sjkim
81209746Sjkim    return ((UINT32) 1 <<
82209746Sjkim        (GpeEventInfo->GpeNumber - GpeRegisterInfo->BaseGpeNumber));
83209746Sjkim}
84209746Sjkim
85209746Sjkim
86209746Sjkim/******************************************************************************
87209746Sjkim *
88209746Sjkim * FUNCTION:    AcpiHwLowSetGpe
89209746Sjkim *
90193267Sjkim * PARAMETERS:  GpeEventInfo        - Info block for the GPE to be disabled
91209746Sjkim *              Action              - Enable or disable
92193267Sjkim *
93193267Sjkim * RETURN:      Status
94193267Sjkim *
95209746Sjkim * DESCRIPTION: Enable or disable a single GPE in the parent enable register.
96193267Sjkim *
97193267Sjkim ******************************************************************************/
98193267Sjkim
99193267SjkimACPI_STATUS
100209746SjkimAcpiHwLowSetGpe (
101209746Sjkim    ACPI_GPE_EVENT_INFO     *GpeEventInfo,
102209746Sjkim    UINT32                  Action)
103193267Sjkim{
104193267Sjkim    ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
105193267Sjkim    ACPI_STATUS             Status;
106193267Sjkim    UINT32                  EnableMask;
107209746Sjkim    UINT32                  RegisterBit;
108193267Sjkim
109193267Sjkim
110209746Sjkim    ACPI_FUNCTION_ENTRY ();
111209746Sjkim
112209746Sjkim
113193267Sjkim    /* Get the info block for the entire GPE register */
114193267Sjkim
115193267Sjkim    GpeRegisterInfo = GpeEventInfo->RegisterInfo;
116193267Sjkim    if (!GpeRegisterInfo)
117193267Sjkim    {
118193267Sjkim        return (AE_NOT_EXIST);
119193267Sjkim    }
120193267Sjkim
121193267Sjkim    /* Get current value of the enable register that contains this GPE */
122193267Sjkim
123197104Sjkim    Status = AcpiHwRead (&EnableMask, &GpeRegisterInfo->EnableAddress);
124193267Sjkim    if (ACPI_FAILURE (Status))
125193267Sjkim    {
126193267Sjkim        return (Status);
127193267Sjkim    }
128193267Sjkim
129209746Sjkim    /* Set or clear just the bit that corresponds to this GPE */
130193267Sjkim
131209746Sjkim    RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo, GpeRegisterInfo);
132209746Sjkim    switch (Action)
133209746Sjkim    {
134209746Sjkim    case ACPI_GPE_CONDITIONAL_ENABLE:
135193267Sjkim
136209746Sjkim        /* Only enable if the EnableForRun bit is set */
137193267Sjkim
138209746Sjkim        if (!(RegisterBit & GpeRegisterInfo->EnableForRun))
139209746Sjkim        {
140209746Sjkim            return (AE_BAD_PARAMETER);
141209746Sjkim        }
142193267Sjkim
143209746Sjkim        /*lint -fallthrough */
144193267Sjkim
145209746Sjkim    case ACPI_GPE_ENABLE:
146209746Sjkim        ACPI_SET_BIT (EnableMask, RegisterBit);
147209746Sjkim        break;
148193267Sjkim
149209746Sjkim    case ACPI_GPE_DISABLE:
150209746Sjkim        ACPI_CLEAR_BIT (EnableMask, RegisterBit);
151209746Sjkim        break;
15267754Smsmith
153209746Sjkim    default:
154209746Sjkim        ACPI_ERROR ((AE_INFO, "Invalid GPE Action, %u\n", Action));
155209746Sjkim        return (AE_BAD_PARAMETER);
156114237Snjl    }
15767754Smsmith
158209746Sjkim    /* Write the updated enable mask */
15984491Smsmith
160209746Sjkim    Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress);
161129684Snjl    return (Status);
16267754Smsmith}
16367754Smsmith
16491116Smsmith
16584491Smsmith/******************************************************************************
16684491Smsmith *
16767754Smsmith * FUNCTION:    AcpiHwClearGpe
16867754Smsmith *
169128212Snjl * PARAMETERS:  GpeEventInfo        - Info block for the GPE to be cleared
17067754Smsmith *
171138287Smarks * RETURN:      Status
17267754Smsmith *
173128212Snjl * DESCRIPTION: Clear the status bit for a single GPE.
17467754Smsmith *
17567754Smsmith ******************************************************************************/
17667754Smsmith
17799679SiwasakiACPI_STATUS
17867754SmsmithAcpiHwClearGpe (
179114237Snjl    ACPI_GPE_EVENT_INFO     *GpeEventInfo)
18067754Smsmith{
181209746Sjkim    ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
18299679Siwasaki    ACPI_STATUS             Status;
183209746Sjkim    UINT32                  RegisterBit;
18467754Smsmith
18580062Smsmith
18691116Smsmith    ACPI_FUNCTION_ENTRY ();
18783174Smsmith
188209746Sjkim    /* Get the info block for the entire GPE register */
18983174Smsmith
190209746Sjkim    GpeRegisterInfo = GpeEventInfo->RegisterInfo;
191209746Sjkim    if (!GpeRegisterInfo)
192209746Sjkim    {
193209746Sjkim        return (AE_NOT_EXIST);
194209746Sjkim    }
195167802Sjkim
19667754Smsmith    /*
19767754Smsmith     * Write a one to the appropriate bit in the status register to
19867754Smsmith     * clear this GPE.
19967754Smsmith     */
200209746Sjkim    RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo, GpeRegisterInfo);
201209746Sjkim
202197104Sjkim    Status = AcpiHwWrite (RegisterBit,
203209746Sjkim                    &GpeRegisterInfo->StatusAddress);
20499679Siwasaki
20599679Siwasaki    return (Status);
20667754Smsmith}
20767754Smsmith
20867754Smsmith
20967754Smsmith/******************************************************************************
21067754Smsmith *
21167754Smsmith * FUNCTION:    AcpiHwGetGpeStatus
21267754Smsmith *
213128212Snjl * PARAMETERS:  GpeEventInfo        - Info block for the GPE to queried
214128212Snjl *              EventStatus         - Where the GPE status is returned
21567754Smsmith *
216128212Snjl * RETURN:      Status
21767754Smsmith *
21867754Smsmith * DESCRIPTION: Return the status of a single GPE.
21967754Smsmith *
22067754Smsmith ******************************************************************************/
22167754Smsmith
22299679SiwasakiACPI_STATUS
22367754SmsmithAcpiHwGetGpeStatus (
224117521Snjl    ACPI_GPE_EVENT_INFO     *GpeEventInfo,
22567754Smsmith    ACPI_EVENT_STATUS       *EventStatus)
22667754Smsmith{
227114237Snjl    UINT32                  InByte;
228209746Sjkim    UINT32                  RegisterBit;
22991116Smsmith    ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
230209746Sjkim    ACPI_EVENT_STATUS       LocalEventStatus = 0;
23199679Siwasaki    ACPI_STATUS             Status;
23267754Smsmith
23380062Smsmith
23491116Smsmith    ACPI_FUNCTION_ENTRY ();
23583174Smsmith
23683174Smsmith
23767754Smsmith    if (!EventStatus)
23867754Smsmith    {
23999679Siwasaki        return (AE_BAD_PARAMETER);
24067754Smsmith    }
24167754Smsmith
242114237Snjl    /* Get the info block for the entire GPE register */
24367754Smsmith
244114237Snjl    GpeRegisterInfo = GpeEventInfo->RegisterInfo;
24567754Smsmith
24691116Smsmith    /* Get the register bitmask for this GPE */
24791116Smsmith
248209746Sjkim    RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo, GpeRegisterInfo);
24991116Smsmith
250129684Snjl    /* GPE currently enabled? (enabled for runtime?) */
25191116Smsmith
252129684Snjl    if (RegisterBit & GpeRegisterInfo->EnableForRun)
25399679Siwasaki    {
254114237Snjl        LocalEventStatus |= ACPI_EVENT_FLAG_ENABLED;
25567754Smsmith    }
25667754Smsmith
257129684Snjl    /* GPE enabled for wake? */
25891116Smsmith
259129684Snjl    if (RegisterBit & GpeRegisterInfo->EnableForWake)
26084491Smsmith    {
261114237Snjl        LocalEventStatus |= ACPI_EVENT_FLAG_WAKE_ENABLED;
26284491Smsmith    }
26384491Smsmith
264129684Snjl    /* GPE currently active (status bit == 1)? */
26591116Smsmith
266197104Sjkim    Status = AcpiHwRead (&InByte, &GpeRegisterInfo->StatusAddress);
26799679Siwasaki    if (ACPI_FAILURE (Status))
26899679Siwasaki    {
269202771Sjkim        return (Status);
27099679Siwasaki    }
27199679Siwasaki
272129684Snjl    if (RegisterBit & InByte)
27367754Smsmith    {
274114237Snjl        LocalEventStatus |= ACPI_EVENT_FLAG_SET;
27567754Smsmith    }
276114237Snjl
277114237Snjl    /* Set return value */
278114237Snjl
279114237Snjl    (*EventStatus) = LocalEventStatus;
280202771Sjkim    return (AE_OK);
281117521Snjl}
282117521Snjl
283117521Snjl
284117521Snjl/******************************************************************************
285117521Snjl *
286117521Snjl * FUNCTION:    AcpiHwDisableGpeBlock
287117521Snjl *
288117521Snjl * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
289117521Snjl *              GpeBlock            - Gpe Block info
290117521Snjl *
291117521Snjl * RETURN:      Status
292117521Snjl *
293151937Sjkim * DESCRIPTION: Disable all GPEs within a single GPE block
294117521Snjl *
295117521Snjl ******************************************************************************/
296117521Snjl
297117521SnjlACPI_STATUS
298117521SnjlAcpiHwDisableGpeBlock (
299117521Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
300193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
301193267Sjkim    void                    *Context)
302117521Snjl{
303117521Snjl    UINT32                  i;
304117521Snjl    ACPI_STATUS             Status;
305117521Snjl
306117521Snjl
307117521Snjl    /* Examine each GPE Register within the block */
308117521Snjl
309117521Snjl    for (i = 0; i < GpeBlock->RegisterCount; i++)
310117521Snjl    {
311126372Snjl        /* Disable all GPEs in this register */
312126372Snjl
313197104Sjkim        Status = AcpiHwWrite (0x00, &GpeBlock->RegisterInfo[i].EnableAddress);
314117521Snjl        if (ACPI_FAILURE (Status))
315117521Snjl        {
316117521Snjl            return (Status);
317117521Snjl        }
318117521Snjl    }
319117521Snjl
32099679Siwasaki    return (AE_OK);
32167754Smsmith}
32284491Smsmith
32391116Smsmith
32484491Smsmith/******************************************************************************
32584491Smsmith *
326117521Snjl * FUNCTION:    AcpiHwClearGpeBlock
327117521Snjl *
328117521Snjl * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
329117521Snjl *              GpeBlock            - Gpe Block info
330117521Snjl *
331117521Snjl * RETURN:      Status
332117521Snjl *
333151937Sjkim * DESCRIPTION: Clear status bits for all GPEs within a single GPE block
334117521Snjl *
335117521Snjl ******************************************************************************/
336117521Snjl
337117521SnjlACPI_STATUS
338117521SnjlAcpiHwClearGpeBlock (
339117521Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
340193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
341193267Sjkim    void                    *Context)
342117521Snjl{
343117521Snjl    UINT32                  i;
344117521Snjl    ACPI_STATUS             Status;
345117521Snjl
346117521Snjl
347117521Snjl    /* Examine each GPE Register within the block */
348117521Snjl
349117521Snjl    for (i = 0; i < GpeBlock->RegisterCount; i++)
350117521Snjl    {
351128212Snjl        /* Clear status on all GPEs in this register */
352126372Snjl
353197104Sjkim        Status = AcpiHwWrite (0xFF, &GpeBlock->RegisterInfo[i].StatusAddress);
354117521Snjl        if (ACPI_FAILURE (Status))
355117521Snjl        {
356117521Snjl            return (Status);
357117521Snjl        }
358117521Snjl    }
359117521Snjl
360117521Snjl    return (AE_OK);
361117521Snjl}
362117521Snjl
363117521Snjl
364117521Snjl/******************************************************************************
365117521Snjl *
366129684Snjl * FUNCTION:    AcpiHwEnableRuntimeGpeBlock
367117521Snjl *
368117521Snjl * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
369117521Snjl *              GpeBlock            - Gpe Block info
370117521Snjl *
371117521Snjl * RETURN:      Status
372117521Snjl *
373151937Sjkim * DESCRIPTION: Enable all "runtime" GPEs within a single GPE block. Includes
374151937Sjkim *              combination wake/run GPEs.
375117521Snjl *
376117521Snjl ******************************************************************************/
377117521Snjl
378129684SnjlACPI_STATUS
379129684SnjlAcpiHwEnableRuntimeGpeBlock (
380117521Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
381193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
382193267Sjkim    void                    *Context)
383117521Snjl{
384117521Snjl    UINT32                  i;
385117521Snjl    ACPI_STATUS             Status;
386117521Snjl
387117521Snjl
388129684Snjl    /* NOTE: assumes that all GPEs are currently disabled */
389117521Snjl
390117521Snjl    /* Examine each GPE Register within the block */
391117521Snjl
392117521Snjl    for (i = 0; i < GpeBlock->RegisterCount; i++)
393117521Snjl    {
394129684Snjl        if (!GpeBlock->RegisterInfo[i].EnableForRun)
395117521Snjl        {
396129684Snjl            continue;
397117521Snjl        }
398117521Snjl
399129684Snjl        /* Enable all "runtime" GPEs in this register */
400117521Snjl
401197104Sjkim        Status = AcpiHwWrite (GpeBlock->RegisterInfo[i].EnableForRun,
402129684Snjl                    &GpeBlock->RegisterInfo[i].EnableAddress);
403117521Snjl        if (ACPI_FAILURE (Status))
404117521Snjl        {
405117521Snjl            return (Status);
406117521Snjl        }
407117521Snjl    }
408117521Snjl
409117521Snjl    return (AE_OK);
410117521Snjl}
411117521Snjl
412117521Snjl
413117521Snjl/******************************************************************************
414117521Snjl *
415129684Snjl * FUNCTION:    AcpiHwEnableWakeupGpeBlock
41684491Smsmith *
417129684Snjl * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
418129684Snjl *              GpeBlock            - Gpe Block info
41984491Smsmith *
420128212Snjl * RETURN:      Status
42184491Smsmith *
422151937Sjkim * DESCRIPTION: Enable all "wake" GPEs within a single GPE block. Includes
423151937Sjkim *              combination wake/run GPEs.
42484491Smsmith *
42584491Smsmith ******************************************************************************/
42684491Smsmith
427151937Sjkimstatic ACPI_STATUS
428129684SnjlAcpiHwEnableWakeupGpeBlock (
429129684Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
430193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
431193267Sjkim    void                    *Context)
43284491Smsmith{
433129684Snjl    UINT32                  i;
43499679Siwasaki    ACPI_STATUS             Status;
43584491Smsmith
43684491Smsmith
437129684Snjl    /* Examine each GPE Register within the block */
43891116Smsmith
439129684Snjl    for (i = 0; i < GpeBlock->RegisterCount; i++)
440129684Snjl    {
441129684Snjl        if (!GpeBlock->RegisterInfo[i].EnableForWake)
442129684Snjl        {
443129684Snjl            continue;
444129684Snjl        }
44591116Smsmith
446129684Snjl        /* Enable all "wake" GPEs in this register */
447129684Snjl
448197104Sjkim        Status = AcpiHwWrite (GpeBlock->RegisterInfo[i].EnableForWake,
449129684Snjl                    &GpeBlock->RegisterInfo[i].EnableAddress);
450129684Snjl        if (ACPI_FAILURE (Status))
451129684Snjl        {
452129684Snjl            return (Status);
453129684Snjl        }
454129684Snjl    }
455129684Snjl
456129684Snjl    return (AE_OK);
457117521Snjl}
45884491Smsmith
45999679Siwasaki
460117521Snjl/******************************************************************************
461117521Snjl *
462129684Snjl * FUNCTION:    AcpiHwDisableAllGpes
463117521Snjl *
464151937Sjkim * PARAMETERS:  None
465117521Snjl *
466117521Snjl * RETURN:      Status
467117521Snjl *
468151937Sjkim * DESCRIPTION: Disable and clear all GPEs in all GPE blocks
469117521Snjl *
470117521Snjl ******************************************************************************/
471114237Snjl
472129684SnjlACPI_STATUS
473129684SnjlAcpiHwDisableAllGpes (
474151937Sjkim    void)
475117521Snjl{
476117521Snjl    ACPI_STATUS             Status;
477114237Snjl
478117521Snjl
479167802Sjkim    ACPI_FUNCTION_TRACE (HwDisableAllGpes);
480117521Snjl
481117521Snjl
482193267Sjkim    Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL);
483193267Sjkim    Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL);
484129684Snjl    return_ACPI_STATUS (Status);
485129684Snjl}
486117521Snjl
487117521Snjl
488129684Snjl/******************************************************************************
489129684Snjl *
490129684Snjl * FUNCTION:    AcpiHwEnableAllRuntimeGpes
491129684Snjl *
492151937Sjkim * PARAMETERS:  None
493129684Snjl *
494129684Snjl * RETURN:      Status
495129684Snjl *
496151937Sjkim * DESCRIPTION: Enable all "runtime" GPEs, in all GPE blocks
497129684Snjl *
498129684Snjl ******************************************************************************/
499126372Snjl
500129684SnjlACPI_STATUS
501129684SnjlAcpiHwEnableAllRuntimeGpes (
502151937Sjkim    void)
503129684Snjl{
504129684Snjl    ACPI_STATUS             Status;
505126372Snjl
506114237Snjl
507167802Sjkim    ACPI_FUNCTION_TRACE (HwEnableAllRuntimeGpes);
508128212Snjl
509114237Snjl
510193267Sjkim    Status = AcpiEvWalkGpeList (AcpiHwEnableRuntimeGpeBlock, NULL);
511129684Snjl    return_ACPI_STATUS (Status);
51284491Smsmith}
51384491Smsmith
51491116Smsmith
51584491Smsmith/******************************************************************************
51684491Smsmith *
517129684Snjl * FUNCTION:    AcpiHwEnableAllWakeupGpes
51884491Smsmith *
519151937Sjkim * PARAMETERS:  None
52084491Smsmith *
521128212Snjl * RETURN:      Status
52284491Smsmith *
523151937Sjkim * DESCRIPTION: Enable all "wakeup" GPEs, in all GPE blocks
52484491Smsmith *
52584491Smsmith ******************************************************************************/
52684491Smsmith
52799679SiwasakiACPI_STATUS
528129684SnjlAcpiHwEnableAllWakeupGpes (
529151937Sjkim    void)
53084491Smsmith{
53199679Siwasaki    ACPI_STATUS             Status;
53284491Smsmith
53384491Smsmith
534167802Sjkim    ACPI_FUNCTION_TRACE (HwEnableAllWakeupGpes);
53591116Smsmith
53691116Smsmith
537193267Sjkim    Status = AcpiEvWalkGpeList (AcpiHwEnableWakeupGpeBlock, NULL);
538129684Snjl    return_ACPI_STATUS (Status);
53984491Smsmith}
540129684Snjl
541