]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
UBUNTU: SAUCE: rtw88: No retry and report for auth and assoc
authorPing-Ke Shih <pkshih@realtek.com>
Tue, 7 Apr 2020 06:05:13 +0000 (14:05 +0800)
committerSeth Forshee <seth.forshee@canonical.com>
Tue, 7 Apr 2020 19:43:44 +0000 (14:43 -0500)
BugLink: https://bugs.launchpad.net/bugs/1871300
The certain AP can't handle quick auth/assoc retry proerply, so disable
auth/assoc L2 retry and doesn't report TX status immediately, then wait for
cfg80211 connection retry that in period of 100ms.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Change-Id: I663fc017049b3e663dc3cc0619e00d8e04d0de7e
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
drivers/net/wireless/realtek/rtw88/main.h
drivers/net/wireless/realtek/rtw88/tx.c
drivers/net/wireless/realtek/rtw88/tx.h

index ab50d3546b664811b258ca37f8888430b809af02..f311adeb48534f69265cf06c9f5c10a3caf16218 100644 (file)
@@ -600,6 +600,7 @@ struct rtw_tx_pkt_info {
        u8 hw_ssn_sel;
        bool en_hw_exseq;
        bool bt_null;
+       bool no_retry;
 };
 
 struct rtw_rx_pkt_stat {
index c73b9a0903f6117e67090c7b9c4997e327d3fa3a..88c57fe4685748ce69bb675657d1bd6ecbae4dd2 100644 (file)
@@ -64,6 +64,11 @@ void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb)
        SET_TX_DESC_EN_HWEXSEQ(txdesc, pkt_info->en_hw_exseq);
        SET_TX_DESC_HW_SSN_SEL(txdesc, pkt_info->hw_ssn_sel);
        SET_TX_DESC_BT_NULL(txdesc, pkt_info->bt_null);
+
+       if (pkt_info->no_retry) {
+               SET_TX_DESC_RETRY_LIMIT_ENABLE(txdesc, 1);
+               SET_TX_DESC_DATA_RETRY_LIMIT(txdesc, 0);
+       }
 }
 EXPORT_SYMBOL(rtw_tx_fill_tx_desc);
 
@@ -374,6 +379,11 @@ void rtw_tx_pkt_info_update(struct rtw_dev *rtwdev,
        bmc = is_broadcast_ether_addr(hdr->addr1) ||
              is_multicast_ether_addr(hdr->addr1);
 
+       if (info->flags & IEEE80211_TX_INTFL_MLME_CONN_TX) {
+               info->flags &= ~IEEE80211_TX_CTL_REQ_TX_STATUS; // no report
+               pkt_info->no_retry = true;      // don't re-tx
+       }
+
        if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS)
                rtw_tx_report_enable(rtwdev, pkt_info);
 
index e1f5bb3e57433793aa405649ad38299c481a6624..cc92926ceb704cfb6a096bf4181d29a363ce2003 100644 (file)
        le32p_replace_bits((__le32 *)(txdesc) + 0x03, value, GENMASK(7, 6))
 #define SET_TX_DESC_BT_NULL(txdesc, value)                                    \
        le32p_replace_bits((__le32 *)(txdesc) + 0x02, value, BIT(23))
+#define SET_TX_DESC_RETRY_LIMIT_ENABLE(txdesc, value)                         \
+       le32p_replace_bits((__le32 *)(txdesc) + 0x04, value, BIT(17))
+#define SET_TX_DESC_DATA_RETRY_LIMIT(txdesc, value)                           \
+       le32p_replace_bits((__le32 *)(txdesc) + 0x04, value, GENMASK(23, 18))
+
 
 enum rtw_tx_desc_queue_select {
        TX_DESC_QSEL_TID0       = 0,