Commit fff1972f authored by Pradeep kumar Chitrapu's avatar Pradeep kumar Chitrapu Committed by Greg Kroah-Hartman

ath10k: fix incorrect multicast/broadcast rate setting

[ Upstream commit 93ee3d10 ]

Invalid rate code is sent to firmware when multicast rate value of 0 is
sent to driver indicating disabled case, causing broken mesh path.
so fix that.

Tested on QCA9984 with firmware 10.4-3.6.1-00827

Sven tested on IPQ4019 with 10.4-3.5.3-00057 and QCA9888 with 10.4-3.5.3-00053
(ath10k-firmware) and 10.4-3.6-00140 (linux-firmware 2018-12-16-211de167).

Fixes: cd93b83a ("ath10k: support for multicast rate control")
Co-developed-by: default avatarZhi Chen <zhichen@codeaurora.org>
Signed-off-by: default avatarZhi Chen <zhichen@codeaurora.org>
Signed-off-by: default avatarPradeep Kumar Chitrapu <pradeepc@codeaurora.org>
Tested-by: default avatarSven Eckelmann <sven@narfation.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 4c8cec9a
...@@ -5588,8 +5588,8 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw, ...@@ -5588,8 +5588,8 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
struct cfg80211_chan_def def; struct cfg80211_chan_def def;
u32 vdev_param, pdev_param, slottime, preamble; u32 vdev_param, pdev_param, slottime, preamble;
u16 bitrate, hw_value; u16 bitrate, hw_value;
u8 rate, basic_rate_idx; u8 rate, basic_rate_idx, rateidx;
int rateidx, ret = 0, hw_rate_code; int ret = 0, hw_rate_code, mcast_rate;
enum nl80211_band band; enum nl80211_band band;
const struct ieee80211_supported_band *sband; const struct ieee80211_supported_band *sband;
...@@ -5776,7 +5776,11 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw, ...@@ -5776,7 +5776,11 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
if (changed & BSS_CHANGED_MCAST_RATE && if (changed & BSS_CHANGED_MCAST_RATE &&
!ath10k_mac_vif_chan(arvif->vif, &def)) { !ath10k_mac_vif_chan(arvif->vif, &def)) {
band = def.chan->band; band = def.chan->band;
rateidx = vif->bss_conf.mcast_rate[band] - 1; mcast_rate = vif->bss_conf.mcast_rate[band];
if (mcast_rate > 0)
rateidx = mcast_rate - 1;
else
rateidx = ffs(vif->bss_conf.basic_rates) - 1;
if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX; rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment