| From 7fad725b238b5b94403b9c4457aa0c3c0acdd576 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 3009/3012] wifi: mt76: mt7915: get tx retries from tx free |
| done event for sw path |
| |
| --- |
| mt76_connac2_mac.h | 2 ++ |
| mt7915/mac.c | 14 +++++++++++--- |
| mt7915/mac.h | 3 ++- |
| mt7915/main.c | 6 +++--- |
| 4 files changed, 18 insertions(+), 7 deletions(-) |
| |
| diff --git a/mt76_connac2_mac.h b/mt76_connac2_mac.h |
| index e7a4019..e6170ea 100644 |
| --- a/mt76_connac2_mac.h |
| +++ b/mt76_connac2_mac.h |
| @@ -38,6 +38,8 @@ enum { |
| /* 0: success, others: dropped */ |
| #define MT_TX_FREE_STATUS GENMASK(14, 13) |
| #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) |
| /* will support this field in further revision */ |
| #define MT_TX_FREE_RATE GENMASK(13, 0) |
| diff --git a/mt7915/mac.c b/mt7915/mac.c |
| index 26b5e15..0994ce1 100644 |
| --- a/mt7915/mac.c |
| +++ b/mt7915/mac.c |
| @@ -981,6 +981,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; |
| @@ -995,7 +996,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)) |
| @@ -1008,7 +1009,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; |
| |
| @@ -1033,7 +1033,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 ce94f87..859298d 100644 |
| --- a/mt7915/mac.h |
| +++ b/mt7915/mac.h |
| @@ -9,7 +9,8 @@ |
| #define MT_TX_FREE_VER GENMASK(18, 16) |
| #define MT_TX_FREE_MSDU_CNT_V0 GENMASK(6, 0) |
| /* 0: success, others: dropped */ |
| -#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) |
| |
| #define MT_TXS5_F0_FINAL_MPDU BIT(31) |
| diff --git a/mt7915/main.c b/mt7915/main.c |
| index c377ef2..f836aa8 100644 |
| --- a/mt7915/main.c |
| +++ b/mt7915/main.c |
| @@ -1116,9 +1116,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); |
| @@ -1128,6 +1125,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 |
| |