diff options
author | Johannes Berg <johannes.berg@intel.com> | 2014-11-13 14:53:45 -0500 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2015-01-22 10:54:11 -0500 |
commit | bd1ba664147ae271e592aa90266cf9aba6efe116 (patch) | |
tree | 5f7726e3389327f7cc4b7e90867c186f96c39d57 /drivers | |
parent | 7fe3016f24296ec88100113c9671fa605a71c44e (diff) |
iwlwifi: mvm: move U-APSD decision to authentication
In order to change the usage of U-APSD on the fly later,
move the enabling condition into a new function that is
called when authenticated.
This allows the module parameter to become writable, it
won't take effect immediately but at least on the next
association the new value will be used.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-drv.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 19 |
2 files changed, 16 insertions, 5 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-drv.c b/drivers/net/wireless/iwlwifi/iwl-drv.c index 0d3472679e4d..e3af724e0e0a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-drv.c +++ b/drivers/net/wireless/iwlwifi/iwl-drv.c | |||
@@ -1490,7 +1490,7 @@ module_param_named(d0i3_disable, iwlwifi_mod_params.d0i3_disable, | |||
1490 | MODULE_PARM_DESC(d0i3_disable, "disable d0i3 functionality (default: Y)"); | 1490 | MODULE_PARM_DESC(d0i3_disable, "disable d0i3 functionality (default: Y)"); |
1491 | 1491 | ||
1492 | module_param_named(uapsd_disable, iwlwifi_mod_params.uapsd_disable, | 1492 | module_param_named(uapsd_disable, iwlwifi_mod_params.uapsd_disable, |
1493 | bool, S_IRUGO); | 1493 | bool, S_IRUGO | S_IWUSR); |
1494 | #ifdef CONFIG_IWLWIFI_UAPSD | 1494 | #ifdef CONFIG_IWLWIFI_UAPSD |
1495 | MODULE_PARM_DESC(uapsd_disable, "disable U-APSD functionality (default: N)"); | 1495 | MODULE_PARM_DESC(uapsd_disable, "disable U-APSD functionality (default: N)"); |
1496 | #else | 1496 | #else |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index 076a781ceeb0..d13903eff2ec 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
@@ -1354,10 +1354,6 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw, | |||
1354 | mvm->bf_allowed_vif = mvmvif; | 1354 | mvm->bf_allowed_vif = mvmvif; |
1355 | vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER | | 1355 | vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER | |
1356 | IEEE80211_VIF_SUPPORTS_CQM_RSSI; | 1356 | IEEE80211_VIF_SUPPORTS_CQM_RSSI; |
1357 | if (mvm->fw->ucode_capa.flags & | ||
1358 | IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT && | ||
1359 | !iwlwifi_mod_params.uapsd_disable) | ||
1360 | vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD; | ||
1361 | } | 1357 | } |
1362 | 1358 | ||
1363 | /* | 1359 | /* |
@@ -2305,6 +2301,20 @@ static void iwl_mvm_sta_pre_rcu_remove(struct ieee80211_hw *hw, | |||
2305 | mutex_unlock(&mvm->mutex); | 2301 | mutex_unlock(&mvm->mutex); |
2306 | } | 2302 | } |
2307 | 2303 | ||
2304 | static void iwl_mvm_check_uapsd(struct iwl_mvm *mvm, struct ieee80211_vif *vif, | ||
2305 | const u8 *bssid) | ||
2306 | { | ||
2307 | if (!(mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT)) | ||
2308 | return; | ||
2309 | |||
2310 | if (iwlwifi_mod_params.uapsd_disable) { | ||
2311 | vif->driver_flags &= ~IEEE80211_VIF_SUPPORTS_UAPSD; | ||
2312 | return; | ||
2313 | } | ||
2314 | |||
2315 | vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD; | ||
2316 | } | ||
2317 | |||
2308 | static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw, | 2318 | static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw, |
2309 | struct ieee80211_vif *vif, | 2319 | struct ieee80211_vif *vif, |
2310 | struct ieee80211_sta *sta, | 2320 | struct ieee80211_sta *sta, |
@@ -2364,6 +2374,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw, | |||
2364 | * Reset EBS status here assuming environment has been changed. | 2374 | * Reset EBS status here assuming environment has been changed. |
2365 | */ | 2375 | */ |
2366 | mvm->last_ebs_successful = true; | 2376 | mvm->last_ebs_successful = true; |
2377 | iwl_mvm_check_uapsd(mvm, vif, sta->addr); | ||
2367 | ret = 0; | 2378 | ret = 0; |
2368 | } else if (old_state == IEEE80211_STA_AUTH && | 2379 | } else if (old_state == IEEE80211_STA_AUTH && |
2369 | new_state == IEEE80211_STA_ASSOC) { | 2380 | new_state == IEEE80211_STA_ASSOC) { |