ath6kl: Include new parameter in suspend path for wowlan
authorRaja Mani <rmani@qca.qualcomm.com>
Mon, 7 Nov 2011 20:52:45 +0000 (22:52 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 11 Nov 2011 10:59:59 +0000 (12:59 +0200)
cfg80211 layer provides user defined wow parameters like Filter options, Patterns,
Pattern's mask, etc via "struct cfg80211_wowlan *wow" to suspend function.

Right now, this wowlan parameter is not handled in __ath6kl_cfg80211_suspend func.
This parameter has to be passed to HIF layer, So that it can be passed back to
ath6kl's cfg interface layer when WOW mode is selected.

In case of deep sleep and cut power mode, it's not handled.

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
drivers/net/wireless/ath/ath6kl/cfg80211.h
drivers/net/wireless/ath/ath6kl/hif-ops.h
drivers/net/wireless/ath/ath6kl/hif.h
drivers/net/wireless/ath/ath6kl/sdio.c

index 2e12c6f70a5a2336984b4271ab2e99ff9d196c10..e804ee96530809e5f2d736f033148782891f6d39 100644 (file)
@@ -1754,7 +1754,8 @@ static int ath6kl_wow_resume(struct ath6kl *ar)
 }
 
 int ath6kl_cfg80211_suspend(struct ath6kl *ar,
-                           enum ath6kl_cfg_suspend_mode mode)
+                           enum ath6kl_cfg_suspend_mode mode,
+                           struct cfg80211_wowlan *wow)
 {
        int ret;
 
@@ -1844,7 +1845,7 @@ static int __ath6kl_cfg80211_suspend(struct wiphy *wiphy,
 {
        struct ath6kl *ar = wiphy_priv(wiphy);
 
-       return ath6kl_hif_suspend(ar);
+       return ath6kl_hif_suspend(ar, wow);
 }
 
 static int __ath6kl_cfg80211_resume(struct wiphy *wiphy)
index 72eadf823e0ceac3b92aba7769e2159438702b18..b4781e55824897caa0a9a7cde34c344baab483e2 100644 (file)
@@ -46,7 +46,9 @@ void ath6kl_cfg80211_tkip_micerr_event(struct ath6kl_vif *vif, u8 keyid,
                                     bool ismcast);
 
 int ath6kl_cfg80211_suspend(struct ath6kl *ar,
-                           enum ath6kl_cfg_suspend_mode mode);
+                           enum ath6kl_cfg_suspend_mode mode,
+                           struct cfg80211_wowlan *wow);
+
 int ath6kl_cfg80211_resume(struct ath6kl *ar);
 
 void ath6kl_cfg80211_stop(struct ath6kl *ar);
index 50fd3e992811498d37f37bb6f6cf029a53634e2f..eed22870448bd2f68b0cc2c9897ecbc50cb2fdd4 100644 (file)
@@ -83,11 +83,12 @@ static inline void ath6kl_hif_cleanup_scatter(struct ath6kl *ar)
        return ar->hif_ops->cleanup_scatter(ar);
 }
 
-static inline int ath6kl_hif_suspend(struct ath6kl *ar)
+static inline int ath6kl_hif_suspend(struct ath6kl *ar,
+                                    struct cfg80211_wowlan *wow)
 {
        ath6kl_dbg(ATH6KL_DBG_HIF, "hif suspend\n");
 
-       return ar->hif_ops->suspend(ar);
+       return ar->hif_ops->suspend(ar, wow);
 }
 
 static inline int ath6kl_hif_resume(struct ath6kl *ar)
index 814386d19b83e695672c4cd0f3916496dd127936..f2dc3bcdae4ae6661fdf191e93181855f685b597 100644 (file)
@@ -242,7 +242,7 @@ struct ath6kl_hif_ops {
        int (*scat_req_rw) (struct ath6kl *ar,
                            struct hif_scatter_req *scat_req);
        void (*cleanup_scatter)(struct ath6kl *ar);
-       int (*suspend)(struct ath6kl *ar);
+       int (*suspend)(struct ath6kl *ar, struct cfg80211_wowlan *wow);
        int (*resume)(struct ath6kl *ar);
        int (*power_on)(struct ath6kl *ar);
        int (*power_off)(struct ath6kl *ar);
index a026daef237547c096646c1e03e81fa083132c46..b576b7667b6d364ca15dd9f8cfedb65d4c6e30c6 100644 (file)
@@ -773,7 +773,7 @@ out:
        return ret;
 }
 
-static int ath6kl_sdio_suspend(struct ath6kl *ar)
+static int ath6kl_sdio_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
 {
        struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar);
        struct sdio_func *func = ar_sdio->func;
@@ -787,7 +787,8 @@ static int ath6kl_sdio_suspend(struct ath6kl *ar)
        if (!(flags & MMC_PM_KEEP_POWER) ||
            (ar->conf_flags & ATH6KL_CONF_SUSPEND_CUTPOWER)) {
                /* as host doesn't support keep power we need to cut power */
-               return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_CUTPOWER);
+               return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_CUTPOWER,
+                                              NULL);
        }
 
        ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
@@ -797,7 +798,7 @@ static int ath6kl_sdio_suspend(struct ath6kl *ar)
                return ret;
        }
 
-       return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_DEEPSLEEP);
+       return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_DEEPSLEEP, NULL);
 }
 
 static int ath6kl_sdio_resume(struct ath6kl *ar)