aboutsummaryrefslogtreecommitdiffstats
path: root/include/acpi
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2010-02-17 17:41:07 -0500
committerJesse Barnes <jbarnes@virtuousgeek.org>2010-02-22 19:20:45 -0500
commit9630bdd9b15d2f489c646d8bc04b60e53eb5ec78 (patch)
treeed99f729cb9142492e0cdf2f7d19f2f33069a3f4 /include/acpi
parentc39fae1416d59fd565606793f090cebe3720d50d (diff)
ACPI: Use GPE reference counting to support shared GPEs
ACPI GPEs may map to multiple devices. The current GPE interface only provides a mechanism for enabling and disabling GPEs, making it difficult to change the state of GPEs at runtime without extensive cooperation between devices. Add an API to allow devices to indicate whether or not they want their device's GPE to be enabled for both runtime and wakeup events. Remove the old GPE type handling entirely, which gets rid of various quirks, like the implicit disabling with GPE type setting. This requires a small amount of rework in order to ensure that non-wake GPEs are enabled by default to preserve existing behaviour. Based on patches from Matthew Garrett <mjg@redhat.com>. Signed-off-by: Matthew Garrett <mjg@redhat.com> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'include/acpi')
-rw-r--r--include/acpi/acpixf.h6
-rw-r--r--include/acpi/actypes.h28
2 files changed, 13 insertions, 21 deletions
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index 86e9735a96bd..3988f93b9c66 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -281,11 +281,11 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status);
281/* 281/*
282 * GPE Interfaces 282 * GPE Interfaces
283 */ 283 */
284acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type); 284acpi_status acpi_set_gpe(acpi_handle gpe_device, u32 gpe_number, u8 action);
285 285
286acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number); 286acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 type);
287 287
288acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number); 288acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 type);
289 289
290acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags); 290acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags);
291 291
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
index 153f12dc3373..73af40863371 100644
--- a/include/acpi/actypes.h
+++ b/include/acpi/actypes.h
@@ -668,15 +668,16 @@ typedef u32 acpi_event_status;
668 668
669/* 669/*
670 * GPE info flags - Per GPE 670 * GPE info flags - Per GPE
671 * +-+-+-+---+---+-+ 671 * +-+-+-+---+-+-+-+
672 * |7|6|5|4:3|2:1|0| 672 * |7|6|5|4:3|2|1|0|
673 * +-+-+-+---+---+-+ 673 * +-+-+-+---+-+-+-+
674 * | | | | | | 674 * | | | | | | |
675 * | | | | | +--- Interrupt type: Edge or Level Triggered 675 * | | | | | | +--- Interrupt type: Edge or Level Triggered
676 * | | | | +--- Type: Wake-only, Runtime-only, or wake/runtime 676 * | | | | | +--- GPE can wake the system
677 * | | | | +--- Unused
677 * | | | +--- Type of dispatch -- to method, handler, or none 678 * | | | +--- Type of dispatch -- to method, handler, or none
678 * | | +--- Enabled for runtime? 679 * | | +--- Unused
679 * | +--- Enabled for wake? 680 * | +--- Unused
680 * +--- Unused 681 * +--- Unused
681 */ 682 */
682#define ACPI_GPE_XRUPT_TYPE_MASK (u8) 0x01 683#define ACPI_GPE_XRUPT_TYPE_MASK (u8) 0x01
@@ -687,22 +688,13 @@ typedef u32 acpi_event_status;
687#define ACPI_GPE_TYPE_WAKE_RUN (u8) 0x06 688#define ACPI_GPE_TYPE_WAKE_RUN (u8) 0x06
688#define ACPI_GPE_TYPE_WAKE (u8) 0x02 689#define ACPI_GPE_TYPE_WAKE (u8) 0x02
689#define ACPI_GPE_TYPE_RUNTIME (u8) 0x04 /* Default */ 690#define ACPI_GPE_TYPE_RUNTIME (u8) 0x04 /* Default */
691#define ACPI_GPE_CAN_WAKE (u8) 0x02
690 692
691#define ACPI_GPE_DISPATCH_MASK (u8) 0x18 693#define ACPI_GPE_DISPATCH_MASK (u8) 0x18
692#define ACPI_GPE_DISPATCH_HANDLER (u8) 0x08 694#define ACPI_GPE_DISPATCH_HANDLER (u8) 0x08
693#define ACPI_GPE_DISPATCH_METHOD (u8) 0x10 695#define ACPI_GPE_DISPATCH_METHOD (u8) 0x10
694#define ACPI_GPE_DISPATCH_NOT_USED (u8) 0x00 /* Default */ 696#define ACPI_GPE_DISPATCH_NOT_USED (u8) 0x00 /* Default */
695 697
696#define ACPI_GPE_RUN_ENABLE_MASK (u8) 0x20
697#define ACPI_GPE_RUN_ENABLED (u8) 0x20
698#define ACPI_GPE_RUN_DISABLED (u8) 0x00 /* Default */
699
700#define ACPI_GPE_WAKE_ENABLE_MASK (u8) 0x40
701#define ACPI_GPE_WAKE_ENABLED (u8) 0x40
702#define ACPI_GPE_WAKE_DISABLED (u8) 0x00 /* Default */
703
704#define ACPI_GPE_ENABLE_MASK (u8) 0x60 /* Both run/wake */
705
706/* 698/*
707 * Flags for GPE and Lock interfaces 699 * Flags for GPE and Lock interfaces
708 */ 700 */