aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2014-11-13 14:53:45 -0500
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2015-01-22 10:54:11 -0500
commitbd1ba664147ae271e592aa90266cf9aba6efe116 (patch)
tree5f7726e3389327f7cc4b7e90867c186f96c39d57 /drivers/net/wireless
parent7fe3016f24296ec88100113c9671fa605a71c44e (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/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-drv.c2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c19
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,
1490MODULE_PARM_DESC(d0i3_disable, "disable d0i3 functionality (default: Y)"); 1490MODULE_PARM_DESC(d0i3_disable, "disable d0i3 functionality (default: Y)");
1491 1491
1492module_param_named(uapsd_disable, iwlwifi_mod_params.uapsd_disable, 1492module_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
1495MODULE_PARM_DESC(uapsd_disable, "disable U-APSD functionality (default: N)"); 1495MODULE_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
2304static 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
2308static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw, 2318static 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) {