[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