blob: 2fd5579048f46b382a2e70f13b213d6cc2978fac [file] [log] [blame]
From b784e9ad2ee7187b065d10c87b20a127e59346eb Mon Sep 17 00:00:00 2001
From: Benjamin Lin <benjamin-jw.lin@mediatek.com>
Date: Tue, 23 Jul 2024 16:37:57 +0800
Subject: [PATCH 143/193] mtk: mt76: mt7996: add per-link RX MPDU statistics
Add per-link RX MPDU total/failed counts.
Change-Id: Ibe9acae34bf9eff17da651ec8c33b6a9a9f6f785
Signed-off-by: Benjamin Lin <benjamin-jw.lin@mediatek.com>
---
mt76.h | 2 ++
mt76_connac_mcu.h | 2 ++
mt7996/mac.c | 1 +
mt7996/mcu.c | 10 ++++++++++
mt7996/mcu.h | 7 +++++++
5 files changed, 22 insertions(+)
diff --git a/mt76.h b/mt76.h
index de6f2be..ce34ccc 100644
--- a/mt76.h
+++ b/mt76.h
@@ -340,6 +340,8 @@ struct mt76_sta_stats {
/* WED RX */
u64 rx_bytes;
u32 rx_packets;
+ u32 rx_mpdus;
+ u32 rx_fcs_err;
u32 rx_errors;
u32 rx_drops;
u64 rx_airtime;
diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h
index 1971c7b..931b29e 100644
--- a/mt76_connac_mcu.h
+++ b/mt76_connac_mcu.h
@@ -1426,6 +1426,8 @@ enum UNI_ALL_STA_INFO_TAG {
UNI_ALL_STA_DATA_TX_RETRY_COUNT,
UNI_ALL_STA_GI_MODE,
UNI_ALL_STA_TXRX_MSDU_COUNT,
+ UNI_ALL_STA_TXOP_ACCESS_DELAY,
+ UNI_ALL_STA_RX_MPDU_COUNT,
UNI_ALL_STA_MAX_NUM
};
diff --git a/mt7996/mac.c b/mt7996/mac.c
index 3933683..966cf31 100644
--- a/mt7996/mac.c
+++ b/mt7996/mac.c
@@ -2420,6 +2420,7 @@ void mt7996_mac_work(struct work_struct *work)
mt7996_mcu_get_all_sta_info(mdev, UNI_ALL_STA_TXRX_ADM_STAT);
mt7996_mcu_get_all_sta_info(mdev, UNI_ALL_STA_TXRX_MSDU_COUNT);
// }
+ mt7996_mcu_get_all_sta_info(mdev, UNI_ALL_STA_RX_MPDU_COUNT);
if (mt7996_mcu_wa_cmd(phy->dev, MCU_WA_PARAM_CMD(QUERY), MCU_WA_PARAM_BSS_ACQ_PKT_CNT,
BSS_ACQ_PKT_CNT_BSS_BITMAP_ALL | BSS_ACQ_PKT_CNT_READ_CLR, 0))
diff --git a/mt7996/mcu.c b/mt7996/mcu.c
index 66f6d46..8bd2718 100644
--- a/mt7996/mcu.c
+++ b/mt7996/mcu.c
@@ -808,6 +808,16 @@ mt7996_mcu_rx_all_sta_info_event(struct mt7996_dev *dev, struct sk_buff *skb)
tx_airtime, rx_airtime);
}
break;
+ case UNI_ALL_STA_RX_MPDU_COUNT:
+ wlan_idx = le16_to_cpu(res->rx_mpdu_cnt[i].wlan_idx);
+ wcid = rcu_dereference(dev->mt76.wcid[wlan_idx]);
+ if (!wcid)
+ break;
+
+ wcid->stats.rx_mpdus += le32_to_cpu(res->rx_mpdu_cnt[i].total);
+ wcid->stats.rx_fcs_err += le32_to_cpu(res->rx_mpdu_cnt[i].total) -
+ le32_to_cpu(res->rx_mpdu_cnt[i].success);
+ break;
default:
break;
}
diff --git a/mt7996/mcu.h b/mt7996/mcu.h
index 389aab6..737f426 100644
--- a/mt7996/mcu.h
+++ b/mt7996/mcu.h
@@ -268,6 +268,13 @@ struct mt7996_mcu_all_sta_info_event {
__le32 tx[IEEE80211_NUM_ACS];
__le32 rx[IEEE80211_NUM_ACS];
} __packed, airtime);
+
+ DECLARE_FLEX_ARRAY(struct {
+ __le16 wlan_idx;
+ u8 rsv[2];
+ __le32 total;
+ __le32 success;
+ } __packed, rx_mpdu_cnt);
} __packed;
} __packed;
--
2.45.2