blob: 1f726b4a110ae68d5885229e83e0e5584fae8984 [file] [log] [blame]
developera43cc482023-04-17 15:57:28 +08001From d3a40cf6ad567d4fb50d65cb6960d0672a38abe7 Mon Sep 17 00:00:00 2001
developer5eddc512023-02-13 16:01:56 +08002From: Peter Chiu <chui-hao.chiu@mediatek.com>
3Date: Tue, 17 Jan 2023 21:15:00 +0800
developera43cc482023-04-17 15:57:28 +08004Subject: [PATCH 3010/3013] wifi: mt76: mt7915: get tx retries from tx free
developerf8871e82023-03-08 17:22:32 +08005 done event for sw path
developer5eddc512023-02-13 16:01:56 +08006
7---
8 mt7915/mac.c | 14 +++++++++++---
9 mt7915/mac.h | 5 ++++-
10 mt7915/main.c | 6 +++---
11 3 files changed, 18 insertions(+), 7 deletions(-)
12
13diff --git a/mt7915/mac.c b/mt7915/mac.c
developera43cc482023-04-17 15:57:28 +080014index d7b0e63..7690cc3 100644
developer5eddc512023-02-13 16:01:56 +080015--- a/mt7915/mac.c
16+++ b/mt7915/mac.c
developera43cc482023-04-17 15:57:28 +080017@@ -985,6 +985,7 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
developer5eddc512023-02-13 16:01:56 +080018 struct mt76_dev *mdev = &dev->mt76;
19 struct mt76_txwi_cache *txwi;
20 struct ieee80211_sta *sta = NULL;
21+ struct mt76_wcid *wcid = NULL;
22 LIST_HEAD(free_list);
23 void *end = data + len;
24 bool v3, wake = false;
developera43cc482023-04-17 15:57:28 +080025@@ -999,7 +1000,7 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
developer5eddc512023-02-13 16:01:56 +080026 v3 = (FIELD_GET(MT_TX_FREE_VER, txd) == 0x4);
27
28 for (cur_info = tx_info; count < total; cur_info++) {
29- u32 msdu, info;
30+ u32 msdu, info, retries = 0;
31 u8 i;
32
33 if (WARN_ON_ONCE((void *)cur_info >= end))
developera43cc482023-04-17 15:57:28 +080034@@ -1012,7 +1013,6 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
developer5eddc512023-02-13 16:01:56 +080035 info = le32_to_cpu(*cur_info);
36 if (info & MT_TX_FREE_PAIR) {
37 struct mt7915_sta *msta;
38- struct mt76_wcid *wcid = NULL;
developera43cc482023-04-17 15:57:28 +080039 struct mt7915_phy *phy;
developer5eddc512023-02-13 16:01:56 +080040 u16 idx;
41
developera43cc482023-04-17 15:57:28 +080042@@ -1037,7 +1037,15 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
developer5eddc512023-02-13 16:01:56 +080043 continue;
44 }
45
46- if (v3 && (info & MT_TX_FREE_MPDU_HEADER))
47+ if (v3 && (info & MT_TX_FREE_MPDU_HEADER_V3))
48+ retries = u32_get_bits(info, MT_TX_FREE_TX_COUNT_V3) - 1;
49+ else if (!v3 && (info & MT_TX_FREE_MPDU_HEADER))
50+ retries = u32_get_bits(info, MT_TX_FREE_TX_COUNT) - 1;
51+
developere0a1e0e2023-02-24 11:26:12 +080052+ if (!mtk_wed_device_active(&mdev->mmio.wed) && wcid)
developer5eddc512023-02-13 16:01:56 +080053+ wcid->stats.tx_retries += retries;
54+
55+ if (v3 && (info & MT_TX_FREE_MPDU_HEADER_V3))
56 continue;
57
58 for (i = 0; i < 1 + v3; i++) {
59diff --git a/mt7915/mac.h b/mt7915/mac.h
developera43cc482023-04-17 15:57:28 +080060index 6fa9c79..afadc51 100644
developer5eddc512023-02-13 16:01:56 +080061--- a/mt7915/mac.h
62+++ b/mt7915/mac.h
63@@ -36,8 +36,11 @@ enum rx_pkt_type {
64 #define MT_TX_FREE_LATENCY GENMASK(12, 0)
65 /* 0: success, others: dropped */
66 #define MT_TX_FREE_MSDU_ID GENMASK(30, 16)
67+#define MT_TX_FREE_TX_COUNT GENMASK(12, 0)
68+#define MT_TX_FREE_TX_COUNT_V3 GENMASK(27, 24)
69 #define MT_TX_FREE_PAIR BIT(31)
70-#define MT_TX_FREE_MPDU_HEADER BIT(30)
71+#define MT_TX_FREE_MPDU_HEADER BIT(15)
72+#define MT_TX_FREE_MPDU_HEADER_V3 BIT(30)
73 #define MT_TX_FREE_MSDU_ID_V3 GENMASK(14, 0)
74
75 /* will support this field in further revision */
76diff --git a/mt7915/main.c b/mt7915/main.c
developera43cc482023-04-17 15:57:28 +080077index 3074091..7cc3a99 100644
developer5eddc512023-02-13 16:01:56 +080078--- a/mt7915/main.c
79+++ b/mt7915/main.c
developera43cc482023-04-17 15:57:28 +080080@@ -1118,9 +1118,6 @@ static void mt7915_sta_statistics(struct ieee80211_hw *hw,
developer5eddc512023-02-13 16:01:56 +080081 sinfo->tx_bytes = msta->wcid.stats.tx_bytes;
82 sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BYTES64);
83
84- sinfo->tx_retries = msta->wcid.stats.tx_retries;
85- sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES);
86-
87 if (mtk_wed_get_rx_capa(&phy->dev->mt76.mmio.wed)) {
88 sinfo->rx_bytes = msta->wcid.stats.rx_bytes;
89 sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BYTES64);
developera43cc482023-04-17 15:57:28 +080090@@ -1130,6 +1127,9 @@ static void mt7915_sta_statistics(struct ieee80211_hw *hw,
developer5eddc512023-02-13 16:01:56 +080091 }
92 }
93
94+ sinfo->tx_retries = msta->wcid.stats.tx_retries;
95+ sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES);
96+
97 if (!mt7915_mcu_get_tx_stat_wa(phy->dev, msta->wcid.idx)) {
98 sinfo->tx_packets = msta->wcid.stats.tx_packets;
99 sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_PACKETS);
100--
developera43cc482023-04-17 15:57:28 +08001012.18.0
developer5eddc512023-02-13 16:01:56 +0800102