mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 10:08:59 +00:00
bc5b2bcd9c
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
70 lines
2.5 KiB
Diff
70 lines
2.5 KiB
Diff
From: Pradeep kumar Chitrapu <pradeepc@codeaurora.org>
|
|
Date: Mon, 10 Dec 2018 20:56:11 -0800
|
|
Subject: ath10k: fix incorrect multicast/broadcast rate setting
|
|
|
|
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
|
|
|
|
Fixes: cd93b83ad92 ("ath10k: support for multicast rate control")
|
|
Co-developed-by: Zhi Chen <zhichen@codeaurora.org>
|
|
Signed-off-by: Zhi Chen <zhichen@codeaurora.org>
|
|
Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
|
|
|
|
Origin: other, https://patchwork.kernel.org/patch/10723033/
|
|
|
|
--- a/ath10k-4.19/mac.c
|
|
+++ b/ath10k-4.19/mac.c
|
|
@@ -6404,8 +6404,8 @@ static void ath10k_bss_info_changed(stru
|
|
struct cfg80211_chan_def def;
|
|
u32 vdev_param, pdev_param, slottime, preamble;
|
|
u16 bitrate, hw_value;
|
|
- u8 rate, basic_rate_idx;
|
|
- int rateidx, ret = 0, hw_rate_code;
|
|
+ u8 rate, basic_rate_idx, rateidx;
|
|
+ int ret = 0, hw_rate_code, mcast_rate;
|
|
enum nl80211_band band;
|
|
const struct ieee80211_supported_band *sband;
|
|
|
|
@@ -6578,7 +6578,11 @@ static void ath10k_bss_info_changed(stru
|
|
if (changed & BSS_CHANGED_MCAST_RATE &&
|
|
!WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) {
|
|
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)
|
|
rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
|
|
--- a/ath10k-5.2/mac.c
|
|
+++ b/ath10k-5.2/mac.c
|
|
@@ -6518,8 +6518,8 @@ static void ath10k_bss_info_changed(stru
|
|
struct cfg80211_chan_def def;
|
|
u32 vdev_param, pdev_param, slottime, preamble;
|
|
u16 bitrate, hw_value;
|
|
- u8 rate, basic_rate_idx;
|
|
- int rateidx, ret = 0, hw_rate_code;
|
|
+ u8 rate, basic_rate_idx, rateidx;
|
|
+ int ret = 0, hw_rate_code, mcast_rate;
|
|
enum nl80211_band band;
|
|
const struct ieee80211_supported_band *sband;
|
|
|
|
@@ -6706,7 +6706,11 @@ static void ath10k_bss_info_changed(stru
|
|
if (changed & BSS_CHANGED_MCAST_RATE &&
|
|
!ath10k_mac_vif_chan(arvif->vif, &def)) {
|
|
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)
|
|
rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
|