| From 629de725ea7db82076de9c1d23e84b24c64dc64b Mon Sep 17 00:00:00 2001 |
| From: Peter Chiu <chui-hao.chiu@mediatek.com> |
| Date: Mon, 30 Jan 2023 11:36:32 +0800 |
| Subject: [PATCH 3010/3012] wifi: mt76: update debugfs knob for reset counter |
| and get tx packet error rate |
| |
| --- |
| mt7915/mtk_debugfs.c | 62 ++++++++++++++++++++++++++++++++++++++++++++ |
| 1 file changed, 62 insertions(+) |
| |
| diff --git a/mt7915/mtk_debugfs.c b/mt7915/mtk_debugfs.c |
| index 361b50c..f896e53 100644 |
| --- a/mt7915/mtk_debugfs.c |
| +++ b/mt7915/mtk_debugfs.c |
| @@ -3790,6 +3790,66 @@ mt7915_sw_aci_set(void *data, u64 val) |
| DEFINE_DEBUGFS_ATTRIBUTE(fops_sw_aci, NULL, |
| mt7915_sw_aci_set, "%llx\n"); |
| |
| +static int mt7915_reset_counter(void *data, u64 val) |
| +{ |
| + struct mt7915_phy *phy = data; |
| + struct mt7915_dev *dev = phy->dev; |
| + struct mt76_wcid *wcid; |
| + |
| + /* Clear the firmware counters */ |
| + mt7915_mcu_get_tx_stat_wa(dev, dev->wlan_idx); |
| + mt7915_get_tx_stat(phy, dev->wlan_idx); |
| + |
| + rcu_read_lock(); |
| + wcid = rcu_dereference(dev->mt76.wcid[dev->wlan_idx]); |
| + if (!wcid) |
| + return -EINVAL; |
| + |
| + memset(&wcid->stats, 0, sizeof(struct mt76_sta_stats)); |
| + |
| + rcu_read_unlock(); |
| + |
| + return 0; |
| +} |
| + |
| +DEFINE_DEBUGFS_ATTRIBUTE(fops_reset_counter, NULL, |
| + mt7915_reset_counter, "%lld\n"); |
| + |
| +static int |
| +mt7915_per_read(struct seq_file *s, void *data) |
| +{ |
| + struct mt7915_dev *dev = dev_get_drvdata(s->private); |
| + struct mt76_sta_stats *stats; |
| + struct mt76_wcid *wcid; |
| + int ret; |
| + u8 phy_idx; |
| + |
| + if (!dev->mt76.wcid[dev->wlan_idx]) |
| + return -EINVAL; |
| + |
| + phy_idx = dev->mt76.wcid[dev->wlan_idx]->phy_idx; |
| + |
| + ret = mt7915_get_tx_stat(dev->mt76.phys[phy_idx]->priv, dev->wlan_idx); |
| + if (ret) |
| + return ret; |
| + |
| + rcu_read_lock(); |
| + wcid = rcu_dereference(dev->mt76.wcid[dev->wlan_idx]); |
| + if (!wcid) |
| + return -EINVAL; |
| + |
| + stats = &wcid->stats; |
| + |
| + seq_printf(s, "sta %d, tx_mpdu_cnt = %u, tx_failed = %u, PER = %u.%u%%\n", dev->wlan_idx, |
| + stats->tx_mpdu_cnt, stats->tx_failed, |
| + stats->tx_mpdu_cnt ? stats->tx_failed * 1000 / stats->tx_mpdu_cnt / 10 : 0, |
| + stats->tx_mpdu_cnt ? stats->tx_failed * 1000 / stats->tx_mpdu_cnt % 10 : 0); |
| + |
| + rcu_read_unlock(); |
| + |
| + return 0; |
| +} |
| + |
| int mt7915_mtk_init_debugfs(struct mt7915_phy *phy, struct dentry *dir) |
| { |
| struct mt7915_dev *dev = phy->dev; |
| @@ -3881,6 +3941,8 @@ int mt7915_mtk_init_debugfs(struct mt7915_phy *phy, struct dentry *dir) |
| mt7915_show_eeprom_mode); |
| debugfs_create_file("sw_aci", 0600, dir, dev, |
| &fops_sw_aci); |
| + debugfs_create_file("reset_counter", 0200, dir, dev, &fops_reset_counter); |
| + debugfs_create_devm_seqfile(dev->mt76.dev, "per", dir, mt7915_per_read); |
| return 0; |
| } |
| #endif |
| -- |
| 2.18.0 |
| |