aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorMichal Kazior <michal.kazior@tieto.com>2014-12-12 06:41:37 -0500
committerKalle Valo <kvalo@qca.qualcomm.com>2014-12-16 02:25:47 -0500
commit526549a850bf6f549b88a271c7df9dd847e02bcf (patch)
tree4f7b386337302fda928aefcf3d5d18ee4bbeb560 /drivers/net
parent9f9b5746246014890b85a4bfd83b9bbd0f223ac2 (diff)
ath10k: prevent invalid ps timeout config
Setting 0 ps timeout to firmware yields very poor latency and traffic issues. This is the case when multi-vif is active. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 13c2bad71c21..2804952448c5 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -1105,10 +1105,12 @@ static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
1105static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif) 1105static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1106{ 1106{
1107 struct ath10k *ar = arvif->ar; 1107 struct ath10k *ar = arvif->ar;
1108 struct ieee80211_vif *vif = arvif->vif;
1108 struct ieee80211_conf *conf = &ar->hw->conf; 1109 struct ieee80211_conf *conf = &ar->hw->conf;
1109 enum wmi_sta_powersave_param param; 1110 enum wmi_sta_powersave_param param;
1110 enum wmi_sta_ps_mode psmode; 1111 enum wmi_sta_ps_mode psmode;
1111 int ret; 1112 int ret;
1113 int ps_timeout;
1112 1114
1113 lockdep_assert_held(&arvif->ar->conf_mutex); 1115 lockdep_assert_held(&arvif->ar->conf_mutex);
1114 1116
@@ -1119,8 +1121,15 @@ static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1119 psmode = WMI_STA_PS_MODE_ENABLED; 1121 psmode = WMI_STA_PS_MODE_ENABLED;
1120 param = WMI_STA_PS_PARAM_INACTIVITY_TIME; 1122 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1121 1123
1124 ps_timeout = conf->dynamic_ps_timeout;
1125 if (ps_timeout == 0) {
1126 /* Firmware doesn't like 0 */
1127 ps_timeout = ieee80211_tu_to_usec(
1128 vif->bss_conf.beacon_int) / 1000;
1129 }
1130
1122 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, 1131 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1123 conf->dynamic_ps_timeout); 1132 ps_timeout);
1124 if (ret) { 1133 if (ret) {
1125 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n", 1134 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1126 arvif->vdev_id, ret); 1135 arvif->vdev_id, ret);