| From d3a40cf6ad567d4fb50d65cb6960d0672a38abe7 Mon Sep 17 00:00:00 2001 |
| From: Peter Chiu <chui-hao.chiu@mediatek.com> |
| Date: Tue, 17 Jan 2023 21:15:00 +0800 |
| Subject: [PATCH 3010/3013] wifi: mt76: mt7915: get tx retries from tx free |
| done event for sw path |
| |
| --- |
| mt7915/mac.c | 14 +++++++++++--- |
| mt7915/mac.h | 5 ++++- |
| mt7915/main.c | 6 +++--- |
| 3 files changed, 18 insertions(+), 7 deletions(-) |
| |
| diff --git a/mt7915/mac.c b/mt7915/mac.c |
| index d7b0e63..7690cc3 100644 |
| --- a/mt7915/mac.c |
| +++ b/mt7915/mac.c |
| @@ -985,6 +985,7 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len) |
| struct mt76_dev *mdev = &dev->mt76; |
| struct mt76_txwi_cache *txwi; |
| struct ieee80211_sta *sta = NULL; |
| + struct mt76_wcid *wcid = NULL; |
| LIST_HEAD(free_list); |
| void *end = data + len; |
| bool v3, wake = false; |
| @@ -999,7 +1000,7 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len) |
| v3 = (FIELD_GET(MT_TX_FREE_VER, txd) == 0x4); |
| |
| for (cur_info = tx_info; count < total; cur_info++) { |
| - u32 msdu, info; |
| + u32 msdu, info, retries = 0; |
| u8 i; |
| |
| if (WARN_ON_ONCE((void *)cur_info >= end)) |
| @@ -1012,7 +1013,6 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len) |
| info = le32_to_cpu(*cur_info); |
| if (info & MT_TX_FREE_PAIR) { |
| struct mt7915_sta *msta; |
| - struct mt76_wcid *wcid = NULL; |
| struct mt7915_phy *phy; |
| u16 idx; |
| |
| @@ -1037,7 +1037,15 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len) |
| continue; |
| } |
| |
| - if (v3 && (info & MT_TX_FREE_MPDU_HEADER)) |
| + if (v3 && (info & MT_TX_FREE_MPDU_HEADER_V3)) |
| + retries = u32_get_bits(info, MT_TX_FREE_TX_COUNT_V3) - 1; |
| + else if (!v3 && (info & MT_TX_FREE_MPDU_HEADER)) |
| + retries = u32_get_bits(info, MT_TX_FREE_TX_COUNT) - 1; |
| + |
| + if (!mtk_wed_device_active(&mdev->mmio.wed) && wcid) |
| + wcid->stats.tx_retries += retries; |
| + |
| + if (v3 && (info & MT_TX_FREE_MPDU_HEADER_V3)) |
| continue; |
| |
| for (i = 0; i < 1 + v3; i++) { |
| diff --git a/mt7915/mac.h b/mt7915/mac.h |
| index 6fa9c79..afadc51 100644 |
| --- a/mt7915/mac.h |
| +++ b/mt7915/mac.h |
| @@ -36,8 +36,11 @@ enum rx_pkt_type { |
| #define MT_TX_FREE_LATENCY GENMASK(12, 0) |
| /* 0: success, others: dropped */ |
| #define MT_TX_FREE_MSDU_ID GENMASK(30, 16) |
| +#define MT_TX_FREE_TX_COUNT GENMASK(12, 0) |
| +#define MT_TX_FREE_TX_COUNT_V3 GENMASK(27, 24) |
| #define MT_TX_FREE_PAIR BIT(31) |
| -#define MT_TX_FREE_MPDU_HEADER BIT(30) |
| +#define MT_TX_FREE_MPDU_HEADER BIT(15) |
| +#define MT_TX_FREE_MPDU_HEADER_V3 BIT(30) |
| #define MT_TX_FREE_MSDU_ID_V3 GENMASK(14, 0) |
| |
| /* will support this field in further revision */ |
| diff --git a/mt7915/main.c b/mt7915/main.c |
| index 3074091..7cc3a99 100644 |
| --- a/mt7915/main.c |
| +++ b/mt7915/main.c |
| @@ -1118,9 +1118,6 @@ static void mt7915_sta_statistics(struct ieee80211_hw *hw, |
| sinfo->tx_bytes = msta->wcid.stats.tx_bytes; |
| sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BYTES64); |
| |
| - sinfo->tx_retries = msta->wcid.stats.tx_retries; |
| - sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES); |
| - |
| if (mtk_wed_get_rx_capa(&phy->dev->mt76.mmio.wed)) { |
| sinfo->rx_bytes = msta->wcid.stats.rx_bytes; |
| sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BYTES64); |
| @@ -1130,6 +1127,9 @@ static void mt7915_sta_statistics(struct ieee80211_hw *hw, |
| } |
| } |
| |
| + sinfo->tx_retries = msta->wcid.stats.tx_retries; |
| + sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES); |
| + |
| if (!mt7915_mcu_get_tx_stat_wa(phy->dev, msta->wcid.idx)) { |
| sinfo->tx_packets = msta->wcid.stats.tx_packets; |
| sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_PACKETS); |
| -- |
| 2.18.0 |
| |