[OEM-OSP1-B] [PATCH 2/3] UBUNTU: SAUCE: rtw88: fix rate for a while after being connected
Kai-Heng Feng
kai.heng.feng at canonical.com
Tue Apr 7 06:05:16 UTC 2020
From: Ping-Ke Shih <pkshih at realtek.com>
BugLink: https://bugs.launchpad.net/bugs/1871300
Use low rate to issue auth/assoc to ensure AP can receive these packets
with higher probability.
Change-Id: Ic500bbd14687d623e1e98a2ab6f9ba15055201a9
Signed-off-by: Ping-Ke Shih <pkshih at realtek.com>
Signed-off-by: Kai-Heng Feng <kai.heng.feng at canonical.com>
---
drivers/net/wireless/realtek/rtw88/mac80211.c | 4 ++++
drivers/net/wireless/realtek/rtw88/main.h | 2 ++
drivers/net/wireless/realtek/rtw88/tx.c | 15 +++++++++++++++
3 files changed, 21 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c
index 36cd63ba0aab..a0853997d30e 100644
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
@@ -288,12 +288,16 @@ static void rtw_ops_bss_info_changed(struct ieee80211_hw *hw,
rtw_coex_media_status_notify(rtwdev, conf->assoc);
if (rtw_bf_support)
rtw_bf_assoc(rtwdev, vif, conf);
+
+ rtwdev->fix_rate_count = 20;
} else {
rtw_leave_lps(rtwdev);
net_type = RTW_NET_NO_LINK;
rtwvif->aid = 0;
rtw_reset_rsvd_page(rtwdev);
rtw_bf_disassoc(rtwdev, vif, conf);
+
+ rtwdev->fix_rate_count = 0;
}
rtwvif->net_type = net_type;
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
index 2d20d766f0f5..89fd6b299d6c 100644
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -1697,6 +1697,8 @@ struct rtw_dev {
const struct sar_read *sar_read;
struct delayed_work sar_work;
+ u32 fix_rate_count;
+
/* hci related data, must be last */
u8 priv[0] __aligned(sizeof(void *));
};
diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c
index 8e59b24279bb..3362da35f6c3 100644
--- a/drivers/net/wireless/realtek/rtw88/tx.c
+++ b/drivers/net/wireless/realtek/rtw88/tx.c
@@ -241,6 +241,16 @@ static void rtw_tx_mgmt_pkt_info_update(struct rtw_dev *rtwdev,
pkt_info->dis_rate_fallback = true;
}
+static void rtw_tx_pkt_info_update_rate(struct rtw_dev *rtwdev,
+ struct rtw_tx_pkt_info *pkt_info,
+ struct sk_buff *skb)
+{
+ pkt_info->use_rate = true;
+ pkt_info->rate_id = RTW_RATEID_B_20M;
+ pkt_info->rate = DESC_RATE1M;
+ pkt_info->dis_rate_fallback = true;
+}
+
static void rtw_tx_data_pkt_info_update(struct rtw_dev *rtwdev,
struct rtw_tx_pkt_info *pkt_info,
struct ieee80211_tx_control *control,
@@ -344,6 +354,11 @@ void rtw_tx_pkt_info_update(struct rtw_dev *rtwdev,
}
}
+ if (rtwdev->fix_rate_count) {
+ rtwdev->fix_rate_count--;
+ rtw_tx_pkt_info_update_rate(rtwdev, pkt_info, skb);
+ }
+
bmc = is_broadcast_ether_addr(hdr->addr1) ||
is_multicast_ether_addr(hdr->addr1);
--
2.17.1
More information about the kernel-team
mailing list