| From ca3fdfbb27f8d7c4c57164276e0220a7825fa61c Mon Sep 17 00:00:00 2001 |
| From: Yi-Chia Hsieh <Yi-Chia.Hsieh@mediatek.com> |
| Date: Fri, 5 Aug 2022 13:58:11 -0700 |
| Subject: [PATCH 3006/3011] mt76: mt7915: add statistic for H/W Rx Path |
| |
| Change-Id: Id94d663f08e91c83d296bd57e5e9b65a505ae1c7 |
| --- |
| mt76.h | 4 ++++ |
| mt7915/mac.c | 25 +++++++++++++++++++++++++ |
| mt7915/main.c | 9 ++++++++- |
| mt7915/mmio.c | 17 +++++++++++++++++ |
| mt7915/mt7915.h | 2 ++ |
| 5 files changed, 56 insertions(+), 1 deletion(-) |
| |
| diff --git a/mt76.h b/mt76.h |
| index f22e96e..8011d4c 100644 |
| --- a/mt76.h |
| +++ b/mt76.h |
| @@ -278,6 +278,10 @@ struct mt76_sta_stats { |
| u32 tx_packets; |
| u32 tx_retries; |
| u32 tx_failed; |
| + u64 rx_bytes; |
| + u32 rx_packets; |
| + u32 rx_error; |
| + u32 rx_drop; |
| }; |
| |
| enum mt76_wcid_flags { |
| diff --git a/mt7915/mac.c b/mt7915/mac.c |
| index cbdabea..f1d15d8 100644 |
| --- a/mt7915/mac.c |
| +++ b/mt7915/mac.c |
| @@ -972,6 +972,31 @@ void mt7915_wed_trigger_ser(struct mtk_wed_device *wed) |
| return; |
| } |
| |
| +void mt7915_wed_update_wo_rxcnt(struct mtk_wed_device *wed, |
| + struct wo_cmd_rxcnt_t *rxcnt) |
| +{ |
| + struct mt7915_dev *dev; |
| + struct mt76_wcid *wcid; |
| + |
| + dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed); |
| + if (rxcnt->wlan_idx >= mt7915_wtbl_size(dev)) |
| + return; |
| + |
| + rcu_read_lock(); |
| + |
| + wcid = rcu_dereference(dev->mt76.wcid[rxcnt->wlan_idx]); |
| + if (!wcid) |
| + goto out; |
| + |
| + wcid->stats.rx_bytes += rxcnt->rx_byte_cnt; |
| + wcid->stats.rx_packets += rxcnt->rx_pkt_cnt; |
| + wcid->stats.rx_error += rxcnt->rx_err_cnt; |
| + wcid->stats.rx_drop += rxcnt->rx_drop_cnt; |
| + |
| +out: |
| + rcu_read_unlock(); |
| +} |
| + |
| static void |
| mt7915_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi) |
| { |
| diff --git a/mt7915/main.c b/mt7915/main.c |
| index 84b9001..4ac5259 100644 |
| --- a/mt7915/main.c |
| +++ b/mt7915/main.c |
| @@ -1054,7 +1054,8 @@ static void mt7915_sta_statistics(struct ieee80211_hw *hw, |
| struct rate_info *txrate = &msta->wcid.rate; |
| struct rate_info rxrate = {}; |
| |
| - if (is_mt7915(&phy->dev->mt76) && |
| + if ((is_mt7915(&phy->dev->mt76) || |
| + mtk_wed_device_active(&phy->dev->mt76.mmio.wed)) && |
| !mt7915_mcu_get_rx_rate(phy, vif, sta, &rxrate)) { |
| sinfo->rxrate = rxrate; |
| sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BITRATE); |
| @@ -1091,6 +1092,12 @@ 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); |
| + |
| + sinfo->rx_bytes = msta->wcid.stats.rx_bytes; |
| + sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BYTES64); |
| + |
| + sinfo->rx_packets = msta->wcid.stats.rx_packets; |
| + sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_PACKETS); |
| } |
| |
| sinfo->ack_signal = (s8)msta->ack_signal; |
| diff --git a/mt7915/mmio.c b/mt7915/mmio.c |
| index 60b7886..f3144d1 100644 |
| --- a/mt7915/mmio.c |
| +++ b/mt7915/mmio.c |
| @@ -9,6 +9,7 @@ |
| #include "mt7915.h" |
| #include "mac.h" |
| #include "../trace.h" |
| +#include "../mt76_connac_mcu.h" |
| |
| static bool wed_enable = true; |
| module_param(wed_enable, bool, 0644); |
| @@ -668,6 +669,8 @@ int mt7915_mmio_wed_init(struct mt7915_dev *dev, void *pdev_ptr, |
| |
| wed->wlan.ser_trigger = mt7915_wed_trigger_ser; |
| |
| + wed->wlan.update_wo_rxcnt = mt7915_wed_update_wo_rxcnt; |
| + |
| dev->mt76.rx_token_size = wed->wlan.rx_pkt; |
| if (mtk_wed_device_attach(wed)) |
| return 0; |
| @@ -680,6 +683,20 @@ int mt7915_mmio_wed_init(struct mt7915_dev *dev, void *pdev_ptr, |
| if (ret) |
| return ret; |
| |
| + if (wed->ver != 1) { |
| + struct { |
| + __le32 args[2]; |
| + } req = { |
| + .args = { |
| + cpu_to_le32(1), |
| + cpu_to_le32(6), |
| + }, |
| + }; |
| + |
| + mtk_wed_device_update_msg(wed, WED_WO_RXCNT_CTRL, |
| + (void *)&req, sizeof(req)); |
| + } |
| + |
| return 1; |
| #else |
| return 0; |
| diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h |
| index 36d1d86..7165273 100644 |
| --- a/mt7915/mt7915.h |
| +++ b/mt7915/mt7915.h |
| @@ -565,6 +565,8 @@ u32 mt7915_wed_init_rx_buf(struct mtk_wed_device *wed, |
| int pkt_num); |
| void mt7915_wed_release_rx_buf(struct mtk_wed_device *wed); |
| void mt7915_wed_trigger_ser(struct mtk_wed_device *wed); |
| +void mt7915_wed_update_wo_rxcnt(struct mtk_wed_device *wed, |
| + struct wo_cmd_rxcnt_t *rxcnt); |
| int mt7915_register_device(struct mt7915_dev *dev); |
| void mt7915_unregister_device(struct mt7915_dev *dev); |
| void mt7915_eeprom_rebonding(struct mt7915_dev *dev); |
| -- |
| 2.18.0 |
| |