aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-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) {