aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2013-06-12 15:39:05 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-06-12 15:39:05 -0400
commit812fd645968118c35a3f4d0d18dd3f4d07221df0 (patch)
treeb68ee223f22a811e9743b193872052cd264fe2d0 /drivers
parentcb180840a0c6bff7c0787373c23cefdf20417a27 (diff)
parent940d0ac9dbe3fb9d4806e96f006286c2e476deed (diff)
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Conflicts: drivers/net/wireless/iwlwifi/mvm/mac80211.c
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c51
-rw-r--r--drivers/net/wireless/ath/ath9k/init.c18
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c15
-rw-r--r--drivers/net/wireless/cw1200/main.c13
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/dev.h3
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/mac80211.c17
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c28
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mvm.h1
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c16
-rw-r--r--drivers/net/wireless/ti/wlcore/main.c19
10 files changed, 113 insertions, 68 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 5c9736a94e54..2437ad26949d 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -3175,10 +3175,21 @@ static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
3175{ 3175{
3176 struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev); 3176 struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);
3177 struct ath6kl *ar = ath6kl_priv(vif->ndev); 3177 struct ath6kl *ar = ath6kl_priv(vif->ndev);
3178 u32 id; 3178 u32 id, freq;
3179 const struct ieee80211_mgmt *mgmt; 3179 const struct ieee80211_mgmt *mgmt;
3180 bool more_data, queued; 3180 bool more_data, queued;
3181 3181
3182 /* default to the current channel, but use the one specified as argument
3183 * if any
3184 */
3185 freq = vif->ch_hint;
3186 if (chan)
3187 freq = chan->center_freq;
3188
3189 /* never send freq zero to the firmware */
3190 if (WARN_ON(freq == 0))
3191 return -EINVAL;
3192
3182 mgmt = (const struct ieee80211_mgmt *) buf; 3193 mgmt = (const struct ieee80211_mgmt *) buf;
3183 if (vif->nw_type == AP_NETWORK && test_bit(CONNECTED, &vif->flags) && 3194 if (vif->nw_type == AP_NETWORK && test_bit(CONNECTED, &vif->flags) &&
3184 ieee80211_is_probe_resp(mgmt->frame_control) && 3195 ieee80211_is_probe_resp(mgmt->frame_control) &&
@@ -3188,8 +3199,7 @@ static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
3188 * command to allow the target to fill in the generic IEs. 3199 * command to allow the target to fill in the generic IEs.
3189 */ 3200 */
3190 *cookie = 0; /* TX status not supported */ 3201 *cookie = 0; /* TX status not supported */
3191 return ath6kl_send_go_probe_resp(vif, buf, len, 3202 return ath6kl_send_go_probe_resp(vif, buf, len, freq);
3192 chan->center_freq);
3193 } 3203 }
3194 3204
3195 id = vif->send_action_id++; 3205 id = vif->send_action_id++;
@@ -3205,17 +3215,14 @@ static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
3205 3215
3206 /* AP mode Power saving processing */ 3216 /* AP mode Power saving processing */
3207 if (vif->nw_type == AP_NETWORK) { 3217 if (vif->nw_type == AP_NETWORK) {
3208 queued = ath6kl_mgmt_powersave_ap(vif, 3218 queued = ath6kl_mgmt_powersave_ap(vif, id, freq, wait, buf, len,
3209 id, chan->center_freq, 3219 &more_data, no_cck);
3210 wait, buf,
3211 len, &more_data, no_cck);
3212 if (queued) 3220 if (queued)
3213 return 0; 3221 return 0;
3214 } 3222 }
3215 3223
3216 return ath6kl_wmi_send_mgmt_cmd(ar->wmi, vif->fw_vif_idx, id, 3224 return ath6kl_wmi_send_mgmt_cmd(ar->wmi, vif->fw_vif_idx, id, freq,
3217 chan->center_freq, wait, 3225 wait, buf, len, no_cck);
3218 buf, len, no_cck);
3219} 3226}
3220 3227
3221static void ath6kl_mgmt_frame_register(struct wiphy *wiphy, 3228static void ath6kl_mgmt_frame_register(struct wiphy *wiphy,
@@ -3679,6 +3686,20 @@ err:
3679 return NULL; 3686 return NULL;
3680} 3687}
3681 3688
3689#ifdef CONFIG_PM
3690static const struct wiphy_wowlan_support ath6kl_wowlan_support = {
3691 .flags = WIPHY_WOWLAN_MAGIC_PKT |
3692 WIPHY_WOWLAN_DISCONNECT |
3693 WIPHY_WOWLAN_GTK_REKEY_FAILURE |
3694 WIPHY_WOWLAN_SUPPORTS_GTK_REKEY |
3695 WIPHY_WOWLAN_EAP_IDENTITY_REQ |
3696 WIPHY_WOWLAN_4WAY_HANDSHAKE,
3697 .n_patterns = WOW_MAX_FILTERS_PER_LIST,
3698 .pattern_min_len = 1,
3699 .pattern_max_len = WOW_PATTERN_SIZE,
3700};
3701#endif
3702
3682int ath6kl_cfg80211_init(struct ath6kl *ar) 3703int ath6kl_cfg80211_init(struct ath6kl *ar)
3683{ 3704{
3684 struct wiphy *wiphy = ar->wiphy; 3705 struct wiphy *wiphy = ar->wiphy;
@@ -3772,15 +3793,7 @@ int ath6kl_cfg80211_init(struct ath6kl *ar)
3772 wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); 3793 wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
3773 3794
3774#ifdef CONFIG_PM 3795#ifdef CONFIG_PM
3775 wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT | 3796 wiphy->wowlan = &ath6kl_wowlan_support;
3776 WIPHY_WOWLAN_DISCONNECT |
3777 WIPHY_WOWLAN_GTK_REKEY_FAILURE |
3778 WIPHY_WOWLAN_SUPPORTS_GTK_REKEY |
3779 WIPHY_WOWLAN_EAP_IDENTITY_REQ |
3780 WIPHY_WOWLAN_4WAY_HANDSHAKE;
3781 wiphy->wowlan.n_patterns = WOW_MAX_FILTERS_PER_LIST;
3782 wiphy->wowlan.pattern_min_len = 1;
3783 wiphy->wowlan.pattern_max_len = WOW_PATTERN_SIZE;
3784#endif 3797#endif
3785 3798
3786 wiphy->max_sched_scan_ssids = MAX_PROBED_SSIDS; 3799 wiphy->max_sched_scan_ssids = MAX_PROBED_SSIDS;
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index d65ee6e6437b..818f22daa8ba 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -755,6 +755,15 @@ static const struct ieee80211_iface_combination if_comb[] = {
755 } 755 }
756}; 756};
757 757
758#ifdef CONFIG_PM
759static const struct wiphy_wowlan_support ath9k_wowlan_support = {
760 .flags = WIPHY_WOWLAN_MAGIC_PKT | WIPHY_WOWLAN_DISCONNECT,
761 .n_patterns = MAX_NUM_USER_PATTERN,
762 .pattern_min_len = 1,
763 .pattern_max_len = MAX_PATTERN_SIZE,
764};
765#endif
766
758void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) 767void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
759{ 768{
760 struct ath_hw *ah = sc->sc_ah; 769 struct ath_hw *ah = sc->sc_ah;
@@ -802,13 +811,8 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
802 811
803#ifdef CONFIG_PM_SLEEP 812#ifdef CONFIG_PM_SLEEP
804 if ((ah->caps.hw_caps & ATH9K_HW_WOW_DEVICE_CAPABLE) && 813 if ((ah->caps.hw_caps & ATH9K_HW_WOW_DEVICE_CAPABLE) &&
805 device_can_wakeup(sc->dev)) { 814 device_can_wakeup(sc->dev))
806 hw->wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT | 815 hw->wiphy->wowlan = &ath9k_wowlan_support;
807 WIPHY_WOWLAN_DISCONNECT;
808 hw->wiphy->wowlan.n_patterns = MAX_NUM_USER_PATTERN;
809 hw->wiphy->wowlan.pattern_min_len = 1;
810 hw->wiphy->wowlan.pattern_max_len = MAX_PATTERN_SIZE;
811 }
812 816
813 atomic_set(&sc->wow_sleep_proc_intr, -1); 817 atomic_set(&sc->wow_sleep_proc_intr, -1);
814 atomic_set(&sc->wow_got_bmiss_intr, -1); 818 atomic_set(&sc->wow_got_bmiss_intr, -1);
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
index 301e572e8923..71f4db5fde99 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
@@ -3982,6 +3982,7 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
3982 struct brcmf_fil_af_params_le *af_params; 3982 struct brcmf_fil_af_params_le *af_params;
3983 bool ack; 3983 bool ack;
3984 s32 chan_nr; 3984 s32 chan_nr;
3985 u32 freq;
3985 3986
3986 brcmf_dbg(TRACE, "Enter\n"); 3987 brcmf_dbg(TRACE, "Enter\n");
3987 3988
@@ -3994,6 +3995,8 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
3994 return -EPERM; 3995 return -EPERM;
3995 } 3996 }
3996 3997
3998 vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev);
3999
3997 if (ieee80211_is_probe_resp(mgmt->frame_control)) { 4000 if (ieee80211_is_probe_resp(mgmt->frame_control)) {
3998 /* Right now the only reason to get a probe response */ 4001 /* Right now the only reason to get a probe response */
3999 /* is for p2p listen response or for p2p GO from */ 4002 /* is for p2p listen response or for p2p GO from */
@@ -4009,7 +4012,6 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
4009 ie_offset = DOT11_MGMT_HDR_LEN + 4012 ie_offset = DOT11_MGMT_HDR_LEN +
4010 DOT11_BCN_PRB_FIXED_LEN; 4013 DOT11_BCN_PRB_FIXED_LEN;
4011 ie_len = len - ie_offset; 4014 ie_len = len - ie_offset;
4012 vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev);
4013 if (vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif) 4015 if (vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif)
4014 vif = cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif; 4016 vif = cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif;
4015 err = brcmf_vif_set_mgmt_ie(vif, 4017 err = brcmf_vif_set_mgmt_ie(vif,
@@ -4033,8 +4035,15 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
4033 memcpy(&af_params->bssid[0], &mgmt->bssid[0], ETH_ALEN); 4035 memcpy(&af_params->bssid[0], &mgmt->bssid[0], ETH_ALEN);
4034 /* Add the length exepted for 802.11 header */ 4036 /* Add the length exepted for 802.11 header */
4035 action_frame->len = cpu_to_le16(len - DOT11_MGMT_HDR_LEN); 4037 action_frame->len = cpu_to_le16(len - DOT11_MGMT_HDR_LEN);
4036 /* Add the channel */ 4038 /* Add the channel. Use the one specified as parameter if any or
4037 chan_nr = ieee80211_frequency_to_channel(chan->center_freq); 4039 * the current one (got from the firmware) otherwise
4040 */
4041 if (chan)
4042 freq = chan->center_freq;
4043 else
4044 brcmf_fil_cmd_int_get(vif->ifp, BRCMF_C_GET_CHANNEL,
4045 &freq);
4046 chan_nr = ieee80211_frequency_to_channel(freq);
4038 af_params->channel = cpu_to_le32(chan_nr); 4047 af_params->channel = cpu_to_le32(chan_nr);
4039 4048
4040 memcpy(action_frame->data, &buf[DOT11_MGMT_HDR_LEN], 4049 memcpy(action_frame->data, &buf[DOT11_MGMT_HDR_LEN],
diff --git a/drivers/net/wireless/cw1200/main.c b/drivers/net/wireless/cw1200/main.c
index 9f9adb4fbfb8..da885036ca5f 100644
--- a/drivers/net/wireless/cw1200/main.c
+++ b/drivers/net/wireless/cw1200/main.c
@@ -245,6 +245,14 @@ module_param(cw1200_ba_tx_tids, int, 0644);
245MODULE_PARM_DESC(cw1200_ba_rx_tids, "Block ACK RX TIDs"); 245MODULE_PARM_DESC(cw1200_ba_rx_tids, "Block ACK RX TIDs");
246MODULE_PARM_DESC(cw1200_ba_tx_tids, "Block ACK TX TIDs"); 246MODULE_PARM_DESC(cw1200_ba_tx_tids, "Block ACK TX TIDs");
247 247
248#ifdef CONFIG_PM
249static const struct wiphy_wowlan_support cw1200_wowlan_support = {
250 /* Support only for limited wowlan functionalities */
251 .flags = WIPHY_WOWLAN_ANY | WIPHY_WOWLAN_DISCONNECT,
252};
253#endif
254
255
248static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr, 256static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr,
249 const bool have_5ghz) 257 const bool have_5ghz)
250{ 258{
@@ -289,10 +297,7 @@ static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr,
289 BIT(NL80211_IFTYPE_P2P_GO); 297 BIT(NL80211_IFTYPE_P2P_GO);
290 298
291#ifdef CONFIG_PM 299#ifdef CONFIG_PM
292 /* Support only for limited wowlan functionalities */ 300 hw->wiphy->wowlan = &cw1200_wowlan_support;
293 hw->wiphy->wowlan.flags = WIPHY_WOWLAN_ANY |
294 WIPHY_WOWLAN_DISCONNECT;
295 hw->wiphy->wowlan.n_patterns = 0;
296#endif 301#endif
297 302
298 hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD; 303 hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
diff --git a/drivers/net/wireless/iwlwifi/dvm/dev.h b/drivers/net/wireless/iwlwifi/dvm/dev.h
index f1b8df16dbba..5cd87f949266 100644
--- a/drivers/net/wireless/iwlwifi/dvm/dev.h
+++ b/drivers/net/wireless/iwlwifi/dvm/dev.h
@@ -915,6 +915,9 @@ struct iwl_priv {
915 __le64 replay_ctr; 915 __le64 replay_ctr;
916 __le16 last_seq_ctl; 916 __le16 last_seq_ctl;
917 bool have_rekey_data; 917 bool have_rekey_data;
918#ifdef CONFIG_PM_SLEEP
919 struct wiphy_wowlan_support wowlan_support;
920#endif
918 921
919 /* device_pointers: pointers to ucode event tables */ 922 /* device_pointers: pointers to ucode event tables */
920 struct { 923 struct {
diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
index c0039a992909..eef64bb854f7 100644
--- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
@@ -208,20 +208,21 @@ int iwlagn_mac_setup_register(struct iwl_priv *priv,
208 priv->trans->ops->d3_suspend && 208 priv->trans->ops->d3_suspend &&
209 priv->trans->ops->d3_resume && 209 priv->trans->ops->d3_resume &&
210 device_can_wakeup(priv->trans->dev)) { 210 device_can_wakeup(priv->trans->dev)) {
211 hw->wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT | 211 priv->wowlan_support.flags = WIPHY_WOWLAN_MAGIC_PKT |
212 WIPHY_WOWLAN_DISCONNECT | 212 WIPHY_WOWLAN_DISCONNECT |
213 WIPHY_WOWLAN_EAP_IDENTITY_REQ | 213 WIPHY_WOWLAN_EAP_IDENTITY_REQ |
214 WIPHY_WOWLAN_RFKILL_RELEASE; 214 WIPHY_WOWLAN_RFKILL_RELEASE;
215 if (!iwlwifi_mod_params.sw_crypto) 215 if (!iwlwifi_mod_params.sw_crypto)
216 hw->wiphy->wowlan.flags |= 216 priv->wowlan_support.flags |=
217 WIPHY_WOWLAN_SUPPORTS_GTK_REKEY | 217 WIPHY_WOWLAN_SUPPORTS_GTK_REKEY |
218 WIPHY_WOWLAN_GTK_REKEY_FAILURE; 218 WIPHY_WOWLAN_GTK_REKEY_FAILURE;
219 219
220 hw->wiphy->wowlan.n_patterns = IWLAGN_WOWLAN_MAX_PATTERNS; 220 priv->wowlan_support.n_patterns = IWLAGN_WOWLAN_MAX_PATTERNS;
221 hw->wiphy->wowlan.pattern_min_len = 221 priv->wowlan_support.pattern_min_len =
222 IWLAGN_WOWLAN_MIN_PATTERN_LEN; 222 IWLAGN_WOWLAN_MIN_PATTERN_LEN;
223 hw->wiphy->wowlan.pattern_max_len = 223 priv->wowlan_support.pattern_max_len =
224 IWLAGN_WOWLAN_MAX_PATTERN_LEN; 224 IWLAGN_WOWLAN_MAX_PATTERN_LEN;
225 hw->wiphy->wowlan = &priv->wowlan_support;
225 } 226 }
226#endif 227#endif
227 228
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index f091cf24b96c..e08683b20531 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -236,20 +236,20 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
236 mvm->trans->ops->d3_suspend && 236 mvm->trans->ops->d3_suspend &&
237 mvm->trans->ops->d3_resume && 237 mvm->trans->ops->d3_resume &&
238 device_can_wakeup(mvm->trans->dev)) { 238 device_can_wakeup(mvm->trans->dev)) {
239 hw->wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT | 239 mvm->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT |
240 WIPHY_WOWLAN_DISCONNECT | 240 WIPHY_WOWLAN_DISCONNECT |
241 WIPHY_WOWLAN_EAP_IDENTITY_REQ | 241 WIPHY_WOWLAN_EAP_IDENTITY_REQ |
242 WIPHY_WOWLAN_RFKILL_RELEASE; 242 WIPHY_WOWLAN_RFKILL_RELEASE;
243 if (!iwlwifi_mod_params.sw_crypto) 243 if (!iwlwifi_mod_params.sw_crypto)
244 hw->wiphy->wowlan.flags |= 244 mvm->wowlan.flags |= WIPHY_WOWLAN_SUPPORTS_GTK_REKEY |
245 WIPHY_WOWLAN_SUPPORTS_GTK_REKEY | 245 WIPHY_WOWLAN_GTK_REKEY_FAILURE |
246 WIPHY_WOWLAN_GTK_REKEY_FAILURE | 246 WIPHY_WOWLAN_4WAY_HANDSHAKE;
247 WIPHY_WOWLAN_4WAY_HANDSHAKE; 247
248 248 mvm->wowlan.n_patterns = IWL_WOWLAN_MAX_PATTERNS;
249 hw->wiphy->wowlan.n_patterns = IWL_WOWLAN_MAX_PATTERNS; 249 mvm->wowlan.pattern_min_len = IWL_WOWLAN_MIN_PATTERN_LEN;
250 hw->wiphy->wowlan.pattern_min_len = IWL_WOWLAN_MIN_PATTERN_LEN; 250 mvm->wowlan.pattern_max_len = IWL_WOWLAN_MAX_PATTERN_LEN;
251 hw->wiphy->wowlan.pattern_max_len = IWL_WOWLAN_MAX_PATTERN_LEN; 251 mvm->wowlan.tcp = &iwl_mvm_wowlan_tcp_support;
252 hw->wiphy->wowlan.tcp = &iwl_mvm_wowlan_tcp_support; 252 hw->wiphy->wowlan = &mvm->wowlan;
253 } 253 }
254#endif 254#endif
255 255
@@ -777,7 +777,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
777 ret = iwl_mvm_power_update_mode(mvm, vif); 777 ret = iwl_mvm_power_update_mode(mvm, vif);
778 if (ret) 778 if (ret)
779 IWL_ERR(mvm, "failed to update power mode\n"); 779 IWL_ERR(mvm, "failed to update power mode\n");
780 } else if (changes & BSS_CHANGED_DTIM_PERIOD) { 780 } else if (changes & BSS_CHANGED_BEACON_INFO) {
781 /* 781 /*
782 * We received a beacon _after_ association so 782 * We received a beacon _after_ association so
783 * remove the session protection. 783 * remove the session protection.
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
index ad39a22f79fa..c7409f159a36 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
@@ -458,6 +458,7 @@ struct iwl_mvm {
458 struct ieee80211_vif *p2p_device_vif; 458 struct ieee80211_vif *p2p_device_vif;
459 459
460#ifdef CONFIG_PM_SLEEP 460#ifdef CONFIG_PM_SLEEP
461 struct wiphy_wowlan_support wowlan;
461 int gtk_ivlen, gtk_icvlen, ptk_ivlen, ptk_icvlen; 462 int gtk_ivlen, gtk_icvlen, ptk_ivlen, ptk_icvlen;
462#ifdef CONFIG_IWLWIFI_DEBUGFS 463#ifdef CONFIG_IWLWIFI_DEBUGFS
463 bool d3_test_active; 464 bool d3_test_active;
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 00a82817eb6b..856aea25052b 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -2475,6 +2475,16 @@ static struct cfg80211_ops mwifiex_cfg80211_ops = {
2475#endif 2475#endif
2476}; 2476};
2477 2477
2478#ifdef CONFIG_PM
2479static const struct wiphy_wowlan_support mwifiex_wowlan_support = {
2480 .flags = WIPHY_WOWLAN_MAGIC_PKT,
2481 .n_patterns = MWIFIEX_MAX_FILTERS,
2482 .pattern_min_len = 1,
2483 .pattern_max_len = MWIFIEX_MAX_PATTERN_LEN,
2484 .max_pkt_offset = MWIFIEX_MAX_OFFSET_LEN,
2485};
2486#endif
2487
2478/* 2488/*
2479 * This function registers the device with CFG802.11 subsystem. 2489 * This function registers the device with CFG802.11 subsystem.
2480 * 2490 *
@@ -2532,11 +2542,7 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter)
2532 wiphy_apply_custom_regulatory(wiphy, &mwifiex_world_regdom_custom); 2542 wiphy_apply_custom_regulatory(wiphy, &mwifiex_world_regdom_custom);
2533 2543
2534#ifdef CONFIG_PM 2544#ifdef CONFIG_PM
2535 wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT; 2545 wiphy->wowlan = &mwifiex_wowlan_support;
2536 wiphy->wowlan.n_patterns = MWIFIEX_MAX_FILTERS;
2537 wiphy->wowlan.pattern_min_len = 1;
2538 wiphy->wowlan.pattern_max_len = MWIFIEX_MAX_PATTERN_LEN;
2539 wiphy->wowlan.max_pkt_offset = MWIFIEX_MAX_OFFSET_LEN;
2540#endif 2546#endif
2541 2547
2542 wiphy->probe_resp_offload = NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS | 2548 wiphy->probe_resp_offload = NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index 953111a502ee..796928ba875f 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -6018,6 +6018,15 @@ int wlcore_free_hw(struct wl1271 *wl)
6018} 6018}
6019EXPORT_SYMBOL_GPL(wlcore_free_hw); 6019EXPORT_SYMBOL_GPL(wlcore_free_hw);
6020 6020
6021#ifdef CONFIG_PM
6022static const struct wiphy_wowlan_support wlcore_wowlan_support = {
6023 .flags = WIPHY_WOWLAN_ANY,
6024 .n_patterns = WL1271_MAX_RX_FILTERS,
6025 .pattern_min_len = 1,
6026 .pattern_max_len = WL1271_RX_FILTER_MAX_PATTERN_SIZE,
6027};
6028#endif
6029
6021static void wlcore_nvs_cb(const struct firmware *fw, void *context) 6030static void wlcore_nvs_cb(const struct firmware *fw, void *context)
6022{ 6031{
6023 struct wl1271 *wl = context; 6032 struct wl1271 *wl = context;
@@ -6071,14 +6080,8 @@ static void wlcore_nvs_cb(const struct firmware *fw, void *context)
6071 if (!ret) { 6080 if (!ret) {
6072 wl->irq_wake_enabled = true; 6081 wl->irq_wake_enabled = true;
6073 device_init_wakeup(wl->dev, 1); 6082 device_init_wakeup(wl->dev, 1);
6074 if (pdata->pwr_in_suspend) { 6083 if (pdata->pwr_in_suspend)
6075 wl->hw->wiphy->wowlan.flags = WIPHY_WOWLAN_ANY; 6084 wl->hw->wiphy->wowlan = &wlcore_wowlan_support;
6076 wl->hw->wiphy->wowlan.n_patterns =
6077 WL1271_MAX_RX_FILTERS;
6078 wl->hw->wiphy->wowlan.pattern_min_len = 1;
6079 wl->hw->wiphy->wowlan.pattern_max_len =
6080 WL1271_RX_FILTER_MAX_PATTERN_SIZE;
6081 }
6082 } 6085 }
6083#endif 6086#endif
6084 disable_irq(wl->irq); 6087 disable_irq(wl->irq);