diff options
author | John W. Linville <linville@tuxdriver.com> | 2013-06-12 15:39:05 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-06-12 15:39:05 -0400 |
commit | 812fd645968118c35a3f4d0d18dd3f4d07221df0 (patch) | |
tree | b68ee223f22a811e9743b193872052cd264fe2d0 /drivers | |
parent | cb180840a0c6bff7c0787373c23cefdf20417a27 (diff) | |
parent | 940d0ac9dbe3fb9d4806e96f006286c2e476deed (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.c | 51 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/init.c | 18 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/cw1200/main.c | 13 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/dev.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/mac80211.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 28 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mvm.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/cfg80211.c | 16 | ||||
-rw-r--r-- | drivers/net/wireless/ti/wlcore/main.c | 19 |
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 | ||
3221 | static void ath6kl_mgmt_frame_register(struct wiphy *wiphy, | 3228 | static 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 | ||
3690 | static 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 | |||
3682 | int ath6kl_cfg80211_init(struct ath6kl *ar) | 3703 | int 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 | ||
759 | static 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 | |||
758 | void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) | 767 | void 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); | |||
245 | MODULE_PARM_DESC(cw1200_ba_rx_tids, "Block ACK RX TIDs"); | 245 | MODULE_PARM_DESC(cw1200_ba_rx_tids, "Block ACK RX TIDs"); |
246 | MODULE_PARM_DESC(cw1200_ba_tx_tids, "Block ACK TX TIDs"); | 246 | MODULE_PARM_DESC(cw1200_ba_tx_tids, "Block ACK TX TIDs"); |
247 | 247 | ||
248 | #ifdef CONFIG_PM | ||
249 | static 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 | |||
248 | static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr, | 256 | static 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 | ||
2479 | static 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 | } |
6019 | EXPORT_SYMBOL_GPL(wlcore_free_hw); | 6019 | EXPORT_SYMBOL_GPL(wlcore_free_hw); |
6020 | 6020 | ||
6021 | #ifdef CONFIG_PM | ||
6022 | static 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 | |||
6021 | static void wlcore_nvs_cb(const struct firmware *fw, void *context) | 6030 | static 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); |