167754Smsmith/******************************************************************************
267754Smsmith *
367754Smsmith * Module Name: hwgpe - Low level GPE enable/disable/clear functions
467754Smsmith *
567754Smsmith *****************************************************************************/
667754Smsmith
7217365Sjkim/*
8245582Sjkim * Copyright (C) 2000 - 2013, Intel Corp.
970243Smsmith * All rights reserved.
1067754Smsmith *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
2567754Smsmith *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
2967754Smsmith *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
4367754Smsmith
44193341Sjkim#include <contrib/dev/acpica/include/acpi.h>
45193341Sjkim#include <contrib/dev/acpica/include/accommon.h>
46193341Sjkim#include <contrib/dev/acpica/include/acevents.h>
4767754Smsmith
4877424Smsmith#define _COMPONENT          ACPI_HARDWARE
4991116Smsmith        ACPI_MODULE_NAME    ("hwgpe")
5067754Smsmith
51231844Sjkim#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
52231844Sjkim
53151937Sjkim/* Local prototypes */
5467754Smsmith
55151937Sjkimstatic ACPI_STATUS
56151937SjkimAcpiHwEnableWakeupGpeBlock (
57151937Sjkim    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
58193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
59193267Sjkim    void                    *Context);
60151937Sjkim
61151937Sjkim
6267754Smsmith/******************************************************************************
6367754Smsmith *
64209746Sjkim * FUNCTION:    AcpiHwGetGpeRegisterBit
65193267Sjkim *
66209746Sjkim * PARAMETERS:  GpeEventInfo        - Info block for the GPE
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 (
77239340Sjkim    ACPI_GPE_EVENT_INFO     *GpeEventInfo)
78209746Sjkim{
79209746Sjkim
80209746Sjkim    return ((UINT32) 1 <<
81239340Sjkim        (GpeEventInfo->GpeNumber - GpeEventInfo->RegisterInfo->BaseGpeNumber));
82209746Sjkim}
83209746Sjkim
84209746Sjkim
85209746Sjkim/******************************************************************************
86209746Sjkim *
87209746Sjkim * FUNCTION:    AcpiHwLowSetGpe
88209746Sjkim *
89193267Sjkim * PARAMETERS:  GpeEventInfo        - Info block for the GPE to be disabled
90209746Sjkim *              Action              - Enable or disable
91193267Sjkim *
92193267Sjkim * RETURN:      Status
93193267Sjkim *
94209746Sjkim * DESCRIPTION: Enable or disable a single GPE in the parent enable register.
95193267Sjkim *
96193267Sjkim ******************************************************************************/
97193267Sjkim
98193267SjkimACPI_STATUS
99209746SjkimAcpiHwLowSetGpe (
100209746Sjkim    ACPI_GPE_EVENT_INFO     *GpeEventInfo,
101209746Sjkim    UINT32                  Action)
102193267Sjkim{
103193267Sjkim    ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
104193267Sjkim    ACPI_STATUS             Status;
105193267Sjkim    UINT32                  EnableMask;
106209746Sjkim    UINT32                  RegisterBit;
107193267Sjkim
108193267Sjkim
109209746Sjkim    ACPI_FUNCTION_ENTRY ();
110209746Sjkim
111209746Sjkim
112193267Sjkim    /* Get the info block for the entire GPE register */
113193267Sjkim
114193267Sjkim    GpeRegisterInfo = GpeEventInfo->RegisterInfo;
115193267Sjkim    if (!GpeRegisterInfo)
116193267Sjkim    {
117193267Sjkim        return (AE_NOT_EXIST);
118193267Sjkim    }
119193267Sjkim
120193267Sjkim    /* Get current value of the enable register that contains this GPE */
121193267Sjkim
122197104Sjkim    Status = AcpiHwRead (&EnableMask, &GpeRegisterInfo->EnableAddress);
123193267Sjkim    if (ACPI_FAILURE (Status))
124193267Sjkim    {
125193267Sjkim        return (Status);
126193267Sjkim    }
127193267Sjkim
128209746Sjkim    /* Set or clear just the bit that corresponds to this GPE */
129193267Sjkim
130239340Sjkim    RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo);
131209746Sjkim    switch (Action)
132209746Sjkim    {
133209746Sjkim    case ACPI_GPE_CONDITIONAL_ENABLE:
134193267Sjkim
135209746Sjkim        /* Only enable if the EnableForRun bit is set */
136193267Sjkim
137209746Sjkim        if (!(RegisterBit & GpeRegisterInfo->EnableForRun))
138209746Sjkim        {
139209746Sjkim            return (AE_BAD_PARAMETER);
140209746Sjkim        }
141193267Sjkim
142209746Sjkim        /*lint -fallthrough */
143193267Sjkim
144209746Sjkim    case ACPI_GPE_ENABLE:
145250838Sjkim
146209746Sjkim        ACPI_SET_BIT (EnableMask, RegisterBit);
147209746Sjkim        break;
148193267Sjkim
149209746Sjkim    case ACPI_GPE_DISABLE:
150250838Sjkim
151209746Sjkim        ACPI_CLEAR_BIT (EnableMask, RegisterBit);
152209746Sjkim        break;
15367754Smsmith
154209746Sjkim    default:
155250838Sjkim
156245582Sjkim        ACPI_ERROR ((AE_INFO, "Invalid GPE Action, %u", Action));
157209746Sjkim        return (AE_BAD_PARAMETER);
158114237Snjl    }
15967754Smsmith
160209746Sjkim    /* Write the updated enable mask */
16184491Smsmith
162209746Sjkim    Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress);
163129684Snjl    return (Status);
16467754Smsmith}
16567754Smsmith
16691116Smsmith
16784491Smsmith/******************************************************************************
16884491Smsmith *
16967754Smsmith * FUNCTION:    AcpiHwClearGpe
17067754Smsmith *
171128212Snjl * PARAMETERS:  GpeEventInfo        - Info block for the GPE to be cleared
17267754Smsmith *
173138287Smarks * RETURN:      Status
17467754Smsmith *
175128212Snjl * DESCRIPTION: Clear the status bit for a single GPE.
17667754Smsmith *
17767754Smsmith ******************************************************************************/
17867754Smsmith
17999679SiwasakiACPI_STATUS
18067754SmsmithAcpiHwClearGpe (
181114237Snjl    ACPI_GPE_EVENT_INFO     *GpeEventInfo)
18267754Smsmith{
183209746Sjkim    ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
18499679Siwasaki    ACPI_STATUS             Status;
185209746Sjkim    UINT32                  RegisterBit;
18667754Smsmith
18780062Smsmith
18891116Smsmith    ACPI_FUNCTION_ENTRY ();
18983174Smsmith
190209746Sjkim    /* Get the info block for the entire GPE register */
19183174Smsmith
192209746Sjkim    GpeRegisterInfo = GpeEventInfo->RegisterInfo;
193209746Sjkim    if (!GpeRegisterInfo)
194209746Sjkim    {
195209746Sjkim        return (AE_NOT_EXIST);
196209746Sjkim    }
197167802Sjkim
19867754Smsmith    /*
19967754Smsmith     * Write a one to the appropriate bit in the status register to
20067754Smsmith     * clear this GPE.
20167754Smsmith     */
202239340Sjkim    RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo);
203209746Sjkim
204197104Sjkim    Status = AcpiHwWrite (RegisterBit,
205209746Sjkim                    &GpeRegisterInfo->StatusAddress);
20699679Siwasaki
20799679Siwasaki    return (Status);
20867754Smsmith}
20967754Smsmith
21067754Smsmith
21167754Smsmith/******************************************************************************
21267754Smsmith *
21367754Smsmith * FUNCTION:    AcpiHwGetGpeStatus
21467754Smsmith *
215128212Snjl * PARAMETERS:  GpeEventInfo        - Info block for the GPE to queried
216128212Snjl *              EventStatus         - Where the GPE status is returned
21767754Smsmith *
218128212Snjl * RETURN:      Status
21967754Smsmith *
22067754Smsmith * DESCRIPTION: Return the status of a single GPE.
22167754Smsmith *
22267754Smsmith ******************************************************************************/
22367754Smsmith
22499679SiwasakiACPI_STATUS
22567754SmsmithAcpiHwGetGpeStatus (
226117521Snjl    ACPI_GPE_EVENT_INFO     *GpeEventInfo,
22767754Smsmith    ACPI_EVENT_STATUS       *EventStatus)
22867754Smsmith{
229114237Snjl    UINT32                  InByte;
230209746Sjkim    UINT32                  RegisterBit;
23191116Smsmith    ACPI_GPE_REGISTER_INFO  *GpeRegisterInfo;
232209746Sjkim    ACPI_EVENT_STATUS       LocalEventStatus = 0;
23399679Siwasaki    ACPI_STATUS             Status;
23467754Smsmith
23580062Smsmith
23691116Smsmith    ACPI_FUNCTION_ENTRY ();
23783174Smsmith
23883174Smsmith
23967754Smsmith    if (!EventStatus)
24067754Smsmith    {
24199679Siwasaki        return (AE_BAD_PARAMETER);
24267754Smsmith    }
24367754Smsmith
244114237Snjl    /* Get the info block for the entire GPE register */
24567754Smsmith
246114237Snjl    GpeRegisterInfo = GpeEventInfo->RegisterInfo;
24767754Smsmith
24891116Smsmith    /* Get the register bitmask for this GPE */
24991116Smsmith
250239340Sjkim    RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo);
25191116Smsmith
252129684Snjl    /* GPE currently enabled? (enabled for runtime?) */
25391116Smsmith
254129684Snjl    if (RegisterBit & GpeRegisterInfo->EnableForRun)
25599679Siwasaki    {
256114237Snjl        LocalEventStatus |= ACPI_EVENT_FLAG_ENABLED;
25767754Smsmith    }
25867754Smsmith
259129684Snjl    /* GPE enabled for wake? */
26091116Smsmith
261129684Snjl    if (RegisterBit & GpeRegisterInfo->EnableForWake)
26284491Smsmith    {
263114237Snjl        LocalEventStatus |= ACPI_EVENT_FLAG_WAKE_ENABLED;
26484491Smsmith    }
26584491Smsmith
266129684Snjl    /* GPE currently active (status bit == 1)? */
26791116Smsmith
268197104Sjkim    Status = AcpiHwRead (&InByte, &GpeRegisterInfo->StatusAddress);
26999679Siwasaki    if (ACPI_FAILURE (Status))
27099679Siwasaki    {
271202771Sjkim        return (Status);
27299679Siwasaki    }
27399679Siwasaki
274129684Snjl    if (RegisterBit & InByte)
27567754Smsmith    {
276114237Snjl        LocalEventStatus |= ACPI_EVENT_FLAG_SET;
27767754Smsmith    }
278114237Snjl
279114237Snjl    /* Set return value */
280114237Snjl
281114237Snjl    (*EventStatus) = LocalEventStatus;
282202771Sjkim    return (AE_OK);
283117521Snjl}
284117521Snjl
285117521Snjl
286117521Snjl/******************************************************************************
287117521Snjl *
288117521Snjl * FUNCTION:    AcpiHwDisableGpeBlock
289117521Snjl *
290117521Snjl * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
291117521Snjl *              GpeBlock            - Gpe Block info
292117521Snjl *
293117521Snjl * RETURN:      Status
294117521Snjl *
295151937Sjkim * DESCRIPTION: Disable all GPEs within a single GPE block
296117521Snjl *
297117521Snjl ******************************************************************************/
298117521Snjl
299117521SnjlACPI_STATUS
300117521SnjlAcpiHwDisableGpeBlock (
301117521Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
302193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
303193267Sjkim    void                    *Context)
304117521Snjl{
305117521Snjl    UINT32                  i;
306117521Snjl    ACPI_STATUS             Status;
307117521Snjl
308117521Snjl
309117521Snjl    /* Examine each GPE Register within the block */
310117521Snjl
311117521Snjl    for (i = 0; i < GpeBlock->RegisterCount; i++)
312117521Snjl    {
313126372Snjl        /* Disable all GPEs in this register */
314126372Snjl
315197104Sjkim        Status = AcpiHwWrite (0x00, &GpeBlock->RegisterInfo[i].EnableAddress);
316117521Snjl        if (ACPI_FAILURE (Status))
317117521Snjl        {
318117521Snjl            return (Status);
319117521Snjl        }
320117521Snjl    }
321117521Snjl
32299679Siwasaki    return (AE_OK);
32367754Smsmith}
32484491Smsmith
32591116Smsmith
32684491Smsmith/******************************************************************************
32784491Smsmith *
328117521Snjl * FUNCTION:    AcpiHwClearGpeBlock
329117521Snjl *
330117521Snjl * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
331117521Snjl *              GpeBlock            - Gpe Block info
332117521Snjl *
333117521Snjl * RETURN:      Status
334117521Snjl *
335151937Sjkim * DESCRIPTION: Clear status bits for all GPEs within a single GPE block
336117521Snjl *
337117521Snjl ******************************************************************************/
338117521Snjl
339117521SnjlACPI_STATUS
340117521SnjlAcpiHwClearGpeBlock (
341117521Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
342193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
343193267Sjkim    void                    *Context)
344117521Snjl{
345117521Snjl    UINT32                  i;
346117521Snjl    ACPI_STATUS             Status;
347117521Snjl
348117521Snjl
349117521Snjl    /* Examine each GPE Register within the block */
350117521Snjl
351117521Snjl    for (i = 0; i < GpeBlock->RegisterCount; i++)
352117521Snjl    {
353128212Snjl        /* Clear status on all GPEs in this register */
354126372Snjl
355197104Sjkim        Status = AcpiHwWrite (0xFF, &GpeBlock->RegisterInfo[i].StatusAddress);
356117521Snjl        if (ACPI_FAILURE (Status))
357117521Snjl        {
358117521Snjl            return (Status);
359117521Snjl        }
360117521Snjl    }
361117521Snjl
362117521Snjl    return (AE_OK);
363117521Snjl}
364117521Snjl
365117521Snjl
366117521Snjl/******************************************************************************
367117521Snjl *
368129684Snjl * FUNCTION:    AcpiHwEnableRuntimeGpeBlock
369117521Snjl *
370117521Snjl * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
371117521Snjl *              GpeBlock            - Gpe Block info
372117521Snjl *
373117521Snjl * RETURN:      Status
374117521Snjl *
375151937Sjkim * DESCRIPTION: Enable all "runtime" GPEs within a single GPE block. Includes
376151937Sjkim *              combination wake/run GPEs.
377117521Snjl *
378117521Snjl ******************************************************************************/
379117521Snjl
380129684SnjlACPI_STATUS
381129684SnjlAcpiHwEnableRuntimeGpeBlock (
382117521Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
383193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
384193267Sjkim    void                    *Context)
385117521Snjl{
386117521Snjl    UINT32                  i;
387117521Snjl    ACPI_STATUS             Status;
388117521Snjl
389117521Snjl
390129684Snjl    /* NOTE: assumes that all GPEs are currently disabled */
391117521Snjl
392117521Snjl    /* Examine each GPE Register within the block */
393117521Snjl
394117521Snjl    for (i = 0; i < GpeBlock->RegisterCount; i++)
395117521Snjl    {
396129684Snjl        if (!GpeBlock->RegisterInfo[i].EnableForRun)
397117521Snjl        {
398129684Snjl            continue;
399117521Snjl        }
400117521Snjl
401129684Snjl        /* Enable all "runtime" GPEs in this register */
402117521Snjl
403197104Sjkim        Status = AcpiHwWrite (GpeBlock->RegisterInfo[i].EnableForRun,
404129684Snjl                    &GpeBlock->RegisterInfo[i].EnableAddress);
405117521Snjl        if (ACPI_FAILURE (Status))
406117521Snjl        {
407117521Snjl            return (Status);
408117521Snjl        }
409117521Snjl    }
410117521Snjl
411117521Snjl    return (AE_OK);
412117521Snjl}
413117521Snjl
414117521Snjl
415117521Snjl/******************************************************************************
416117521Snjl *
417129684Snjl * FUNCTION:    AcpiHwEnableWakeupGpeBlock
41884491Smsmith *
419129684Snjl * PARAMETERS:  GpeXruptInfo        - GPE Interrupt info
420129684Snjl *              GpeBlock            - Gpe Block info
42184491Smsmith *
422128212Snjl * RETURN:      Status
42384491Smsmith *
424151937Sjkim * DESCRIPTION: Enable all "wake" GPEs within a single GPE block. Includes
425151937Sjkim *              combination wake/run GPEs.
42684491Smsmith *
42784491Smsmith ******************************************************************************/
42884491Smsmith
429151937Sjkimstatic ACPI_STATUS
430129684SnjlAcpiHwEnableWakeupGpeBlock (
431129684Snjl    ACPI_GPE_XRUPT_INFO     *GpeXruptInfo,
432193267Sjkim    ACPI_GPE_BLOCK_INFO     *GpeBlock,
433193267Sjkim    void                    *Context)
43484491Smsmith{
435129684Snjl    UINT32                  i;
43699679Siwasaki    ACPI_STATUS             Status;
43784491Smsmith
43884491Smsmith
439129684Snjl    /* Examine each GPE Register within the block */
44091116Smsmith
441129684Snjl    for (i = 0; i < GpeBlock->RegisterCount; i++)
442129684Snjl    {
443129684Snjl        if (!GpeBlock->RegisterInfo[i].EnableForWake)
444129684Snjl        {
445129684Snjl            continue;
446129684Snjl        }
44791116Smsmith
448129684Snjl        /* Enable all "wake" GPEs in this register */
449129684Snjl
450197104Sjkim        Status = AcpiHwWrite (GpeBlock->RegisterInfo[i].EnableForWake,
451129684Snjl                    &GpeBlock->RegisterInfo[i].EnableAddress);
452129684Snjl        if (ACPI_FAILURE (Status))
453129684Snjl        {
454129684Snjl            return (Status);
455129684Snjl        }
456129684Snjl    }
457129684Snjl
458129684Snjl    return (AE_OK);
459117521Snjl}
46084491Smsmith
46199679Siwasaki
462117521Snjl/******************************************************************************
463117521Snjl *
464129684Snjl * FUNCTION:    AcpiHwDisableAllGpes
465117521Snjl *
466151937Sjkim * PARAMETERS:  None
467117521Snjl *
468117521Snjl * RETURN:      Status
469117521Snjl *
470151937Sjkim * DESCRIPTION: Disable and clear all GPEs in all GPE blocks
471117521Snjl *
472117521Snjl ******************************************************************************/
473114237Snjl
474129684SnjlACPI_STATUS
475129684SnjlAcpiHwDisableAllGpes (
476151937Sjkim    void)
477117521Snjl{
478117521Snjl    ACPI_STATUS             Status;
479114237Snjl
480117521Snjl
481167802Sjkim    ACPI_FUNCTION_TRACE (HwDisableAllGpes);
482117521Snjl
483117521Snjl
484193267Sjkim    Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL);
485193267Sjkim    Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL);
486129684Snjl    return_ACPI_STATUS (Status);
487129684Snjl}
488117521Snjl
489117521Snjl
490129684Snjl/******************************************************************************
491129684Snjl *
492129684Snjl * FUNCTION:    AcpiHwEnableAllRuntimeGpes
493129684Snjl *
494151937Sjkim * PARAMETERS:  None
495129684Snjl *
496129684Snjl * RETURN:      Status
497129684Snjl *
498151937Sjkim * DESCRIPTION: Enable all "runtime" GPEs, in all GPE blocks
499129684Snjl *
500129684Snjl ******************************************************************************/
501126372Snjl
502129684SnjlACPI_STATUS
503129684SnjlAcpiHwEnableAllRuntimeGpes (
504151937Sjkim    void)
505129684Snjl{
506129684Snjl    ACPI_STATUS             Status;
507126372Snjl
508114237Snjl
509167802Sjkim    ACPI_FUNCTION_TRACE (HwEnableAllRuntimeGpes);
510128212Snjl
511114237Snjl
512193267Sjkim    Status = AcpiEvWalkGpeList (AcpiHwEnableRuntimeGpeBlock, NULL);
513129684Snjl    return_ACPI_STATUS (Status);
51484491Smsmith}
51584491Smsmith
51691116Smsmith
51784491Smsmith/******************************************************************************
51884491Smsmith *
519129684Snjl * FUNCTION:    AcpiHwEnableAllWakeupGpes
52084491Smsmith *
521151937Sjkim * PARAMETERS:  None
52284491Smsmith *
523128212Snjl * RETURN:      Status
52484491Smsmith *
525151937Sjkim * DESCRIPTION: Enable all "wakeup" GPEs, in all GPE blocks
52684491Smsmith *
52784491Smsmith ******************************************************************************/
52884491Smsmith
52999679SiwasakiACPI_STATUS
530129684SnjlAcpiHwEnableAllWakeupGpes (
531151937Sjkim    void)
53284491Smsmith{
53399679Siwasaki    ACPI_STATUS             Status;
53484491Smsmith
53584491Smsmith
536167802Sjkim    ACPI_FUNCTION_TRACE (HwEnableAllWakeupGpes);
53791116Smsmith
53891116Smsmith
539193267Sjkim    Status = AcpiEvWalkGpeList (AcpiHwEnableWakeupGpeBlock, NULL);
540129684Snjl    return_ACPI_STATUS (Status);
54184491Smsmith}
542129684Snjl
543231844Sjkim#endif /* !ACPI_REDUCED_HARDWARE */
544