aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaja Mani <rmani@qca.qualcomm.com>2011-11-07 15:52:45 -0500
committerKalle Valo <kvalo@qca.qualcomm.com>2011-11-11 05:59:59 -0500
commit0f60e9f4c239554ad75ab8e4d864030a7f0dd6f7 (patch)
treeb7f4ef5c92afdcd1545cc30116e86ec360454b7b
parent6cb3c714e75c6e70fa1c379b7f3af2f143f31c70 (diff)
ath6kl: Include new parameter in suspend path for wowlan
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>
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c5
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.h4
-rw-r--r--drivers/net/wireless/ath/ath6kl/hif-ops.h5
-rw-r--r--drivers/net/wireless/ath/ath6kl/hif.h2
-rw-r--r--drivers/net/wireless/ath/ath6kl/sdio.c7
5 files changed, 14 insertions, 9 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 2e12c6f70a5a..e804ee965308 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -1754,7 +1754,8 @@ static int ath6kl_wow_resume(struct ath6kl *ar)
1754} 1754}
1755 1755
1756int ath6kl_cfg80211_suspend(struct ath6kl *ar, 1756int ath6kl_cfg80211_suspend(struct ath6kl *ar,
1757 enum ath6kl_cfg_suspend_mode mode) 1757 enum ath6kl_cfg_suspend_mode mode,
1758 struct cfg80211_wowlan *wow)
1758{ 1759{
1759 int ret; 1760 int ret;
1760 1761
@@ -1844,7 +1845,7 @@ static int __ath6kl_cfg80211_suspend(struct wiphy *wiphy,
1844{ 1845{
1845 struct ath6kl *ar = wiphy_priv(wiphy); 1846 struct ath6kl *ar = wiphy_priv(wiphy);
1846 1847
1847 return ath6kl_hif_suspend(ar); 1848 return ath6kl_hif_suspend(ar, wow);
1848} 1849}
1849 1850
1850static int __ath6kl_cfg80211_resume(struct wiphy *wiphy) 1851static int __ath6kl_cfg80211_resume(struct wiphy *wiphy)
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.h b/drivers/net/wireless/ath/ath6kl/cfg80211.h
index 72eadf823e0c..b4781e558248 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.h
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.h
@@ -46,7 +46,9 @@ void ath6kl_cfg80211_tkip_micerr_event(struct ath6kl_vif *vif, u8 keyid,
46 bool ismcast); 46 bool ismcast);
47 47
48int ath6kl_cfg80211_suspend(struct ath6kl *ar, 48int ath6kl_cfg80211_suspend(struct ath6kl *ar,
49 enum ath6kl_cfg_suspend_mode mode); 49 enum ath6kl_cfg_suspend_mode mode,
50 struct cfg80211_wowlan *wow);
51
50int ath6kl_cfg80211_resume(struct ath6kl *ar); 52int ath6kl_cfg80211_resume(struct ath6kl *ar);
51 53
52void ath6kl_cfg80211_stop(struct ath6kl *ar); 54void ath6kl_cfg80211_stop(struct ath6kl *ar);
diff --git a/drivers/net/wireless/ath/ath6kl/hif-ops.h b/drivers/net/wireless/ath/ath6kl/hif-ops.h
index 50fd3e992811..eed22870448b 100644
--- a/drivers/net/wireless/ath/ath6kl/hif-ops.h
+++ b/drivers/net/wireless/ath/ath6kl/hif-ops.h
@@ -83,11 +83,12 @@ static inline void ath6kl_hif_cleanup_scatter(struct ath6kl *ar)
83 return ar->hif_ops->cleanup_scatter(ar); 83 return ar->hif_ops->cleanup_scatter(ar);
84} 84}
85 85
86static inline int ath6kl_hif_suspend(struct ath6kl *ar) 86static inline int ath6kl_hif_suspend(struct ath6kl *ar,
87 struct cfg80211_wowlan *wow)
87{ 88{
88 ath6kl_dbg(ATH6KL_DBG_HIF, "hif suspend\n"); 89 ath6kl_dbg(ATH6KL_DBG_HIF, "hif suspend\n");
89 90
90 return ar->hif_ops->suspend(ar); 91 return ar->hif_ops->suspend(ar, wow);
91} 92}
92 93
93static inline int ath6kl_hif_resume(struct ath6kl *ar) 94static inline int ath6kl_hif_resume(struct ath6kl *ar)
diff --git a/drivers/net/wireless/ath/ath6kl/hif.h b/drivers/net/wireless/ath/ath6kl/hif.h
index 814386d19b83..f2dc3bcdae4a 100644
--- a/drivers/net/wireless/ath/ath6kl/hif.h
+++ b/drivers/net/wireless/ath/ath6kl/hif.h
@@ -242,7 +242,7 @@ struct ath6kl_hif_ops {
242 int (*scat_req_rw) (struct ath6kl *ar, 242 int (*scat_req_rw) (struct ath6kl *ar,
243 struct hif_scatter_req *scat_req); 243 struct hif_scatter_req *scat_req);
244 void (*cleanup_scatter)(struct ath6kl *ar); 244 void (*cleanup_scatter)(struct ath6kl *ar);
245 int (*suspend)(struct ath6kl *ar); 245 int (*suspend)(struct ath6kl *ar, struct cfg80211_wowlan *wow);
246 int (*resume)(struct ath6kl *ar); 246 int (*resume)(struct ath6kl *ar);
247 int (*power_on)(struct ath6kl *ar); 247 int (*power_on)(struct ath6kl *ar);
248 int (*power_off)(struct ath6kl *ar); 248 int (*power_off)(struct ath6kl *ar);
diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c b/drivers/net/wireless/ath/ath6kl/sdio.c
index a026daef2375..b576b7667b6d 100644
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -773,7 +773,7 @@ out:
773 return ret; 773 return ret;
774} 774}
775 775
776static int ath6kl_sdio_suspend(struct ath6kl *ar) 776static int ath6kl_sdio_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
777{ 777{
778 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar); 778 struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar);
779 struct sdio_func *func = ar_sdio->func; 779 struct sdio_func *func = ar_sdio->func;
@@ -787,7 +787,8 @@ static int ath6kl_sdio_suspend(struct ath6kl *ar)
787 if (!(flags & MMC_PM_KEEP_POWER) || 787 if (!(flags & MMC_PM_KEEP_POWER) ||
788 (ar->conf_flags & ATH6KL_CONF_SUSPEND_CUTPOWER)) { 788 (ar->conf_flags & ATH6KL_CONF_SUSPEND_CUTPOWER)) {
789 /* as host doesn't support keep power we need to cut power */ 789 /* as host doesn't support keep power we need to cut power */
790 return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_CUTPOWER); 790 return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_CUTPOWER,
791 NULL);
791 } 792 }
792 793
793 ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER); 794 ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
@@ -797,7 +798,7 @@ static int ath6kl_sdio_suspend(struct ath6kl *ar)
797 return ret; 798 return ret;
798 } 799 }
799 800
800 return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_DEEPSLEEP); 801 return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_DEEPSLEEP, NULL);
801} 802}
802 803
803static int ath6kl_sdio_resume(struct ath6kl *ar) 804static int ath6kl_sdio_resume(struct ath6kl *ar)