ath6kl: Isolate host sleep mode config part from ath6kl_wow_suspend
authorRaja Mani <rmani@qca.qualcomm.com>
Wed, 21 Mar 2012 09:33:37 +0000 (15:03 +0530)
committerKalle Valo <kvalo@qca.qualcomm.com>
Mon, 26 Mar 2012 13:07:19 +0000 (16:07 +0300)
The piece of code used in ath6kk_wow_suspend function
to configure the host sleep mode is needed in deep sleep
case also.

Moving that portion to a separate function called
ath6kl_update_host_mode() would be helpful to avoid
the duplication of the same code in deep sleep path.

There is no functional change.

kvalo: move inline functions to cfg80211.c and fix a long line

Signed-off-by: Raja Mani <rmani@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/cfg80211.c

index 8b12ad6127d382e3baff626f4dd724e419d0957c..e3c4c404ba114215ee2961fef041e03ce76a1c63 100644 (file)
@@ -1924,12 +1924,61 @@ static int ath6kl_wow_sta(struct ath6kl *ar, struct ath6kl_vif *vif)
        return 0;
 }
 
+static int is_hsleep_mode_procsed(struct ath6kl_vif *vif)
+{
+       return test_bit(HOST_SLEEP_MODE_CMD_PROCESSED, &vif->flags);
+}
+
+static bool is_ctrl_ep_empty(struct ath6kl *ar)
+{
+       return !ar->tx_pending[ar->ctrl_ep];
+}
+
+static int ath6kl_cfg80211_host_sleep(struct ath6kl *ar, struct ath6kl_vif *vif)
+{
+       int ret, left;
+
+       clear_bit(HOST_SLEEP_MODE_CMD_PROCESSED, &vif->flags);
+
+       ret = ath6kl_wmi_set_host_sleep_mode_cmd(ar->wmi, vif->fw_vif_idx,
+                                                ATH6KL_HOST_MODE_ASLEEP);
+       if (ret)
+               return ret;
+
+       left = wait_event_interruptible_timeout(ar->event_wq,
+                                               is_hsleep_mode_procsed(vif),
+                                               WMI_TIMEOUT);
+       if (left == 0) {
+               ath6kl_warn("timeout, didn't get host sleep cmd processed event\n");
+               ret = -ETIMEDOUT;
+       } else if (left < 0) {
+               ath6kl_warn("error while waiting for host sleep cmd processed event %d\n",
+                           left);
+               ret = left;
+       }
+
+       if (ar->tx_pending[ar->ctrl_ep]) {
+               left = wait_event_interruptible_timeout(ar->event_wq,
+                                                       is_ctrl_ep_empty(ar),
+                                                       WMI_TIMEOUT);
+               if (left == 0) {
+                       ath6kl_warn("clear wmi ctrl data timeout\n");
+                       ret = -ETIMEDOUT;
+               } else if (left < 0) {
+                       ath6kl_warn("clear wmi ctrl data failed: %d\n", left);
+                       ret = left;
+               }
+       }
+
+       return ret;
+}
+
 static int ath6kl_wow_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
 {
        struct in_device *in_dev;
        struct in_ifaddr *ifa;
        struct ath6kl_vif *vif;
-       int ret, left;
+       int ret;
        u32 filter = 0;
        u16 i, bmiss_time;
        u8 index = 0;
@@ -2030,39 +2079,11 @@ skip_arp:
        if (ret)
                return ret;
 
-       clear_bit(HOST_SLEEP_MODE_CMD_PROCESSED, &vif->flags);
-
-       ret = ath6kl_wmi_set_host_sleep_mode_cmd(ar->wmi, vif->fw_vif_idx,
-                                                ATH6KL_HOST_MODE_ASLEEP);
+       ret = ath6kl_cfg80211_host_sleep(ar, vif);
        if (ret)
                return ret;
 
-       left = wait_event_interruptible_timeout(ar->event_wq,
-                       test_bit(HOST_SLEEP_MODE_CMD_PROCESSED, &vif->flags),
-                       WMI_TIMEOUT);
-       if (left == 0) {
-               ath6kl_warn("timeout, didn't get host sleep cmd "
-                           "processed event\n");
-               ret = -ETIMEDOUT;
-       } else if (left < 0) {
-               ath6kl_warn("error while waiting for host sleep cmd "
-                           "processed event %d\n", left);
-               ret = left;
-       }
-
-       if (ar->tx_pending[ar->ctrl_ep]) {
-               left = wait_event_interruptible_timeout(ar->event_wq,
-                               ar->tx_pending[ar->ctrl_ep] == 0, WMI_TIMEOUT);
-               if (left == 0) {
-                       ath6kl_warn("clear wmi ctrl data timeout\n");
-                       ret = -ETIMEDOUT;
-               } else if (left < 0) {
-                       ath6kl_warn("clear wmi ctrl data failed: %d\n", left);
-                       ret = left;
-               }
-       }
-
-       return ret;
+       return 0;
 }
 
 static int ath6kl_wow_resume(struct ath6kl *ar)