ACPICA: Remove wakeup GPE reference counting which is not used
Rafael J. Wysocki [Thu, 1 Jul 2010 02:11:45 +0000 (10:11 +0800)]
After the previous patch that introduced acpi_gpe_wakeup() and
modified the ACPI suspend and wakeup code to use it, the third
argument of acpi_{enable|disable}_gpe() and the GPE wakeup
reference counter are not necessary any more.  Remove them and
modify all of the users of acpi_{enable|disable}_gpe()
accordingly.  Also drop GPE type constants that aren't used
any more.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>

12 files changed:
drivers/acpi/acpica/acevents.h
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/evgpe.c
drivers/acpi/acpica/evgpeblk.c
drivers/acpi/acpica/evgpeinit.c
drivers/acpi/acpica/evxfevnt.c
drivers/acpi/button.c
drivers/acpi/ec.c
drivers/acpi/system.c
drivers/pci/pci-acpi.c
include/acpi/acpixf.h
include/acpi/actypes.h

index c3f43da..a561944 100644 (file)
@@ -78,7 +78,7 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node *node,
 u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list);
 
 acpi_status
-acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info);
+acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info);
 
 struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device,
                                                       u32 gpe_number);
index eb2d420..1ee0bcf 100644 (file)
@@ -429,7 +429,6 @@ struct acpi_gpe_event_info {
        u8 flags;               /* Misc info about this GPE */
        u8 gpe_number;          /* This GPE */
        u8 runtime_count;       /* References to a run GPE */
-       u8 wakeup_count;        /* References to a wake GPE */
 };
 
 /* Information about a GPE register pair, one per each status/enable pair in an array */
index d24d7d3..9413ac6 100644 (file)
@@ -54,24 +54,24 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context);
 
 /*******************************************************************************
  *
- * FUNCTION:    acpi_ev_update_gpe_enable_masks
+ * FUNCTION:    acpi_ev_update_gpe_enable_mask
  *
  * PARAMETERS:  gpe_event_info          - GPE to update
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Updates GPE register enable masks based upon whether there are
- *              references (either wake or run) to this GPE
+ * DESCRIPTION: Updates GPE register enable mask based upon whether there are
+ *              runtime references to this GPE
  *
  ******************************************************************************/
 
 acpi_status
-acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info)
+acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info)
 {
        struct acpi_gpe_register_info *gpe_register_info;
        u32 register_bit;
 
-       ACPI_FUNCTION_TRACE(ev_update_gpe_enable_masks);
+       ACPI_FUNCTION_TRACE(ev_update_gpe_enable_mask);
 
        gpe_register_info = gpe_event_info->register_info;
        if (!gpe_register_info) {
@@ -81,19 +81,14 @@ acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info)
        register_bit = acpi_hw_get_gpe_register_bit(gpe_event_info,
                                                gpe_register_info);
 
-       /* Clear the wake/run bits up front */
+       /* Clear the run bit up front */
 
-       ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake, register_bit);
        ACPI_CLEAR_BIT(gpe_register_info->enable_for_run, register_bit);
 
-       /* Set the mask bits only if there are references to this GPE */
+       /* Set the mask bit only if there are references to this GPE */
 
        if (gpe_event_info->runtime_count) {
-               ACPI_SET_BIT(gpe_register_info->enable_for_run, register_bit);
-       }
-
-       if (gpe_event_info->wakeup_count) {
-               ACPI_SET_BIT(gpe_register_info->enable_for_wake, register_bit);
+               ACPI_SET_BIT(gpe_register_info->enable_for_run, (u8)register_bit);
        }
 
        return_ACPI_STATUS(AE_OK);
index 341a38c..77e8630 100644 (file)
@@ -529,8 +529,7 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device,
 
                        /* Enable this GPE */
 
-                       status = acpi_enable_gpe(gpe_device, gpe_number,
-                                                ACPI_GPE_TYPE_RUNTIME);
+                       status = acpi_enable_gpe(gpe_device, gpe_number);
                        if (ACPI_FAILURE(status)) {
                                ACPI_EXCEPTION((AE_INFO, status,
                                                "Could not enable GPE 0x%02X",
index 3f6c2d2..8db9e07 100644 (file)
@@ -482,8 +482,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
                                gpe_device = NULL;
                        }
 
-                       status = acpi_enable_gpe(gpe_device, gpe_number,
-                                                ACPI_GPE_TYPE_RUNTIME);
+                       status = acpi_enable_gpe(gpe_device, gpe_number);
                        if (ACPI_FAILURE(status)) {
                                ACPI_EXCEPTION((AE_INFO, status,
                                                "Could not enable GPE 0x%02X",
index d6a6d4a..467fde9 100644 (file)
@@ -352,12 +352,13 @@ acpi_status acpi_gpe_wakeup(acpi_handle gpe_device, u32 gpe_number, u8 action)
 
        switch (action) {
        case ACPI_GPE_ENABLE:
-               ACPI_SET_BIT(gpe_register_info->enable_for_wake, register_bit);
+               ACPI_SET_BIT(gpe_register_info->enable_for_wake,
+                            (u8)register_bit);
                break;
 
        case ACPI_GPE_DISABLE:
                ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake,
-                              register_bit);
+                              (u8)register_bit);
                break;
 
        default:
@@ -379,17 +380,14 @@ ACPI_EXPORT_SYMBOL(acpi_gpe_wakeup)
  *
  * PARAMETERS:  gpe_device      - Parent GPE Device. NULL for GPE0/GPE1
  *              gpe_number      - GPE level within the GPE block
- *              gpe_type        - ACPI_GPE_TYPE_RUNTIME or ACPI_GPE_TYPE_WAKE
- *                                or both
  *
  * RETURN:      Status
  *
  * DESCRIPTION: Add a reference to a GPE. On the first reference, the GPE is
- *              hardware-enabled (for runtime GPEs), or the GPE register mask
- *              is updated (for wake GPEs).
+ *              hardware-enabled.
  *
  ******************************************************************************/
-acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type)
+acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number)
 {
        acpi_status status = AE_OK;
        struct acpi_gpe_event_info *gpe_event_info;
@@ -397,12 +395,6 @@ acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type)
 
        ACPI_FUNCTION_TRACE(acpi_enable_gpe);
 
-       /* Parameter validation */
-
-       if (!gpe_type || (gpe_type & ~ACPI_GPE_TYPE_WAKE_RUN)) {
-               return_ACPI_STATUS(AE_BAD_PARAMETER);
-       }
-
        flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
 
        /* Ensure that we have a valid GPE number */
@@ -413,46 +405,19 @@ acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type)
                goto unlock_and_exit;
        }
 
-       if (gpe_type & ACPI_GPE_TYPE_RUNTIME) {
-               if (gpe_event_info->runtime_count == ACPI_UINT8_MAX) {
-                       status = AE_LIMIT;      /* Too many references */
-                       goto unlock_and_exit;
-               }
-
-               gpe_event_info->runtime_count++;
-               if (gpe_event_info->runtime_count == 1) {
-                       status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
-                       if (ACPI_SUCCESS(status)) {
-                               status = acpi_clear_and_enable_gpe(gpe_event_info);
-                       }
-
-                       if (ACPI_FAILURE(status)) {
-                               gpe_event_info->runtime_count--;
-                               goto unlock_and_exit;
-                       }
-               }
+       if (gpe_event_info->runtime_count == ACPI_UINT8_MAX) {
+               status = AE_LIMIT;      /* Too many references */
+               goto unlock_and_exit;
        }
 
-       if (gpe_type & ACPI_GPE_TYPE_WAKE) {
-               /* The GPE must have the ability to wake the system */
-
-               if (!(gpe_event_info->flags & ACPI_GPE_CAN_WAKE)) {
-                       status = AE_TYPE;
-                       goto unlock_and_exit;
-               }
-
-               if (gpe_event_info->wakeup_count == ACPI_UINT8_MAX) {
-                       status = AE_LIMIT;      /* Too many references */
-                       goto unlock_and_exit;
+       gpe_event_info->runtime_count++;
+       if (gpe_event_info->runtime_count == 1) {
+               status = acpi_ev_update_gpe_enable_mask(gpe_event_info);
+               if (ACPI_SUCCESS(status)) {
+                       status = acpi_clear_and_enable_gpe(gpe_event_info);
                }
-
-               /*
-                * Update the enable mask on the first wakeup reference. Wake GPEs
-                * are only hardware-enabled just before sleeping.
-                */
-               gpe_event_info->wakeup_count++;
-               if (gpe_event_info->wakeup_count == 1) {
-                       status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
+               if (ACPI_FAILURE(status)) {
+                       gpe_event_info->runtime_count--;
                }
        }
 
@@ -468,8 +433,6 @@ ACPI_EXPORT_SYMBOL(acpi_enable_gpe)
  *
  * PARAMETERS:  gpe_device      - Parent GPE Device. NULL for GPE0/GPE1
  *              gpe_number      - GPE level within the GPE block
- *              gpe_type        - ACPI_GPE_TYPE_RUNTIME or ACPI_GPE_TYPE_WAKE
- *                                or both
  *
  * RETURN:      Status
  *
@@ -478,7 +441,7 @@ ACPI_EXPORT_SYMBOL(acpi_enable_gpe)
  *              the GPE mask bit disabled (for wake GPEs)
  *
  ******************************************************************************/
-acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type)
+acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number)
 {
        acpi_status status = AE_OK;
        struct acpi_gpe_event_info *gpe_event_info;
@@ -486,12 +449,6 @@ acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type
 
        ACPI_FUNCTION_TRACE(acpi_disable_gpe);
 
-       /* Parameter validation */
-
-       if (!gpe_type || (gpe_type & ~ACPI_GPE_TYPE_WAKE_RUN)) {
-               return_ACPI_STATUS(AE_BAD_PARAMETER);
-       }
-
        flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
 
        /* Ensure that we have a valid GPE number */
@@ -504,41 +461,21 @@ acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type
 
        /* Hardware-disable a runtime GPE on removal of the last reference */
 
-       if (gpe_type & ACPI_GPE_TYPE_RUNTIME) {
-               if (!gpe_event_info->runtime_count) {
-                       status = AE_LIMIT;      /* There are no references to remove */
-                       goto unlock_and_exit;
-               }
-
-               gpe_event_info->runtime_count--;
-               if (!gpe_event_info->runtime_count) {
-                       status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
-                       if (ACPI_SUCCESS(status)) {
-                               status = acpi_hw_low_set_gpe(gpe_event_info,
-                                                            ACPI_GPE_DISABLE);
-                       }
-
-                       if (ACPI_FAILURE(status)) {
-                               gpe_event_info->runtime_count++;
-                               goto unlock_and_exit;
-                       }
-               }
+       if (!gpe_event_info->runtime_count) {
+               status = AE_LIMIT;      /* There are no references to remove */
+               goto unlock_and_exit;
        }
 
-       /*
-        * Update masks for wake GPE on removal of the last reference.
-        * No need to hardware-disable wake GPEs here, they are not currently
-        * enabled.
-        */
-       if (gpe_type & ACPI_GPE_TYPE_WAKE) {
-               if (!gpe_event_info->wakeup_count) {
-                       status = AE_LIMIT;      /* There are no references to remove */
-                       goto unlock_and_exit;
+       gpe_event_info->runtime_count--;
+       if (!gpe_event_info->runtime_count) {
+               status = acpi_ev_update_gpe_enable_mask(gpe_event_info);
+               if (ACPI_SUCCESS(status)) {
+                       status =
+                           acpi_hw_low_set_gpe(gpe_event_info,
+                                               ACPI_GPE_DISABLE);
                }
-
-               gpe_event_info->wakeup_count--;
-               if (!gpe_event_info->wakeup_count) {
-                       status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
+               if (ACPI_FAILURE(status)) {
+                       gpe_event_info->runtime_count++;
                }
        }
 
index 7d857da..1575a9b 100644 (file)
@@ -424,8 +424,7 @@ static int acpi_button_add(struct acpi_device *device)
        if (device->wakeup.flags.valid) {
                /* Button's GPE is run-wake GPE */
                acpi_enable_gpe(device->wakeup.gpe_device,
-                               device->wakeup.gpe_number,
-                               ACPI_GPE_TYPE_RUNTIME);
+                               device->wakeup.gpe_number);
                device->wakeup.run_wake_count++;
                device->wakeup.state.enabled = 1;
        }
@@ -448,8 +447,7 @@ static int acpi_button_remove(struct acpi_device *device, int type)
 
        if (device->wakeup.flags.valid) {
                acpi_disable_gpe(device->wakeup.gpe_device,
-                               device->wakeup.gpe_number,
-                               ACPI_GPE_TYPE_RUNTIME);
+                               device->wakeup.gpe_number);
                device->wakeup.run_wake_count--;
                device->wakeup.state.enabled = 0;
        }
index 5f2027d..bf50454 100644 (file)
@@ -822,7 +822,7 @@ static int ec_install_handlers(struct acpi_ec *ec)
        if (ACPI_FAILURE(status))
                return -ENODEV;
 
-       acpi_enable_gpe(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME);
+       acpi_enable_gpe(NULL, ec->gpe);
        status = acpi_install_address_space_handler(ec->handle,
                                                    ACPI_ADR_SPACE_EC,
                                                    &acpi_ec_space_handler,
@@ -839,7 +839,7 @@ static int ec_install_handlers(struct acpi_ec *ec)
                } else {
                        acpi_remove_gpe_handler(NULL, ec->gpe,
                                &acpi_ec_gpe_handler);
-                       acpi_disable_gpe(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME);
+                       acpi_disable_gpe(NULL, ec->gpe);
                        return -ENODEV;
                }
        }
@@ -850,7 +850,7 @@ static int ec_install_handlers(struct acpi_ec *ec)
 
 static void ec_remove_handlers(struct acpi_ec *ec)
 {
-       acpi_disable_gpe(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME);
+       acpi_disable_gpe(NULL, ec->gpe);
        if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
                                ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
                pr_err(PREFIX "failed to remove space handler\n");
index f8db50a..5981bd0 100644 (file)
@@ -388,12 +388,10 @@ static ssize_t counter_set(struct kobject *kobj,
        if (index < num_gpes) {
                if (!strcmp(buf, "disable\n") &&
                                (status & ACPI_EVENT_FLAG_ENABLED))
-                       result = acpi_disable_gpe(handle, index,
-                                               ACPI_GPE_TYPE_RUNTIME);
+                       result = acpi_disable_gpe(handle, index);
                else if (!strcmp(buf, "enable\n") &&
                                !(status & ACPI_EVENT_FLAG_ENABLED))
-                       result = acpi_enable_gpe(handle, index,
-                                               ACPI_GPE_TYPE_RUNTIME);
+                       result = acpi_enable_gpe(handle, index);
                else if (!strcmp(buf, "clear\n") &&
                                (status & ACPI_EVENT_FLAG_SET))
                        result = acpi_clear_gpe(handle, index);
index 2e7a3bf..5342e03 100644 (file)
@@ -295,14 +295,12 @@ static int acpi_dev_run_wake(struct device *phys_dev, bool enable)
                if (!dev->wakeup.run_wake_count++) {
                        acpi_enable_wakeup_device_power(dev, ACPI_STATE_S0);
                        acpi_enable_gpe(dev->wakeup.gpe_device,
-                                       dev->wakeup.gpe_number,
-                                       ACPI_GPE_TYPE_RUNTIME);
+                                       dev->wakeup.gpe_number);
                }
        } else if (dev->wakeup.run_wake_count > 0) {
                if (!--dev->wakeup.run_wake_count) {
                        acpi_disable_gpe(dev->wakeup.gpe_device,
-                                        dev->wakeup.gpe_number,
-                                        ACPI_GPE_TYPE_RUNTIME);
+                                        dev->wakeup.gpe_number);
                        acpi_disable_wakeup_device_power(dev);
                }
        } else {
index 17396e8..354d785 100644 (file)
@@ -284,11 +284,9 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status);
  */
 acpi_status acpi_set_gpe(acpi_handle gpe_device, u32 gpe_number, u8 action);
 
-acpi_status
-acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type);
+acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number);
 
-acpi_status
-acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type);
+acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number);
 
 acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number);
 
index 6a65a94..a42513d 100644 (file)
@@ -669,12 +669,6 @@ typedef u32 acpi_event_status;
 #define ACPI_GPE_DISABLE                1
 #define ACPI_GPE_COND_ENABLE            2
 
-/* gpe_types for acpi_enable_gpe and acpi_disable_gpe */
-
-#define ACPI_GPE_TYPE_WAKE              (u8) 0x01
-#define ACPI_GPE_TYPE_RUNTIME           (u8) 0x02
-#define ACPI_GPE_TYPE_WAKE_RUN          (u8) 0x03
-
 /*
  * GPE info flags - Per GPE
  * +-------+---+-+-+