diff mbox series

ath11k: Disable peer fixed rate before setting the vdev fixed rate

Message ID 1559648280-16284-1-git-send-email-mkenna@codeaurora.org (mailing list archive)
State Accepted
Commit 3676c26226da95d10503c4d9588616f2c719289e
Delegated to: Kalle Valo
Headers show
Series ath11k: Disable peer fixed rate before setting the vdev fixed rate | expand

Commit Message

Maharaja Kennadyrajan June 4, 2019, 11:38 a.m. UTC
As per the firmware design, peer fixed rate should be disabled before
setting the VDEV fixed rate again.
When it is not disabled, then the user can't set the legacy rate(VDEV
fixed rate) after setting peer fixed rate(as peer fixed rate has higher
priority in the rate setting).

Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
---
 drivers/net/wireless/ath/ath11k/mac.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

Comments

Kalle Valo June 6, 2019, 4:55 p.m. UTC | #1
Maharaja Kennadyrajan <mkenna@codeaurora.org> wrote:

> As per the firmware design, peer fixed rate should be disabled before
> setting the VDEV fixed rate again.
> When it is not disabled, then the user can't set the legacy rate(VDEV
> fixed rate) after setting peer fixed rate(as peer fixed rate has higher
> priority in the rate setting).
> 
> Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>

Patch applied to ath.git, thanks.

3676c26226da ath11k: Disable peer fixed rate before setting the vdev fixed rate
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index cb0de8e2aa60..cb1189136959 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -4573,6 +4573,23 @@  static void ath11k_mac_set_bitrate_mask_iter(void *data,
 	ieee80211_queue_work(ar->hw, &arsta->update_wk);
 }
 
+static void ath11k_mac_disable_peer_fixed_rate(void *data,
+					       struct ieee80211_sta *sta)
+{
+	struct ath11k_vif *arvif = data;
+	struct ath11k *ar = arvif->ar;
+	int ret;
+
+	ret = ath11k_wmi_set_peer_param(ar, sta->addr,
+					arvif->vdev_id,
+					WMI_PEER_PARAM_FIXED_RATE,
+					WMI_FIXED_RATE_NONE);
+	if (ret)
+		ath11k_warn(ar->ab,
+			    "failed to disable peer fixed rate for STA %pM ret %d\n",
+			    sta->addr, ret);
+}
+
 static int
 ath11k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
 			       struct ieee80211_vif *vif,
@@ -4620,6 +4637,9 @@  ath11k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
 				    arvif->vdev_id, ret);
 			return ret;
 		}
+		ieee80211_iterate_stations_atomic(ar->hw,
+						  ath11k_mac_disable_peer_fixed_rate,
+						  arvif);
 	} else if (ath11k_mac_bitrate_mask_get_single_nss(ar, band, mask,
 							  &single_nss)) {
 		rate = WMI_FIXED_RATE_NONE;