Commit c4a110d8 authored by Vladimir Kondratiev's avatar Vladimir Kondratiev Committed by Kalle Valo

wil6210: add per-MCS Rx stats

Provide detailed statistics for the Rx frames per MCS
Statistics printed in "stations" debugfs entry
Signed-off-by: default avatarVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 0fd37ff8
...@@ -1360,7 +1360,7 @@ static int wil_sta_debugfs_show(struct seq_file *s, void *data) ...@@ -1360,7 +1360,7 @@ static int wil_sta_debugfs_show(struct seq_file *s, void *data)
__acquires(&p->tid_rx_lock) __releases(&p->tid_rx_lock) __acquires(&p->tid_rx_lock) __releases(&p->tid_rx_lock)
{ {
struct wil6210_priv *wil = s->private; struct wil6210_priv *wil = s->private;
int i, tid; int i, tid, mcs;
for (i = 0; i < ARRAY_SIZE(wil->sta); i++) { for (i = 0; i < ARRAY_SIZE(wil->sta); i++) {
struct wil_sta_info *p = &wil->sta[i]; struct wil_sta_info *p = &wil->sta[i];
...@@ -1390,6 +1390,12 @@ __acquires(&p->tid_rx_lock) __releases(&p->tid_rx_lock) ...@@ -1390,6 +1390,12 @@ __acquires(&p->tid_rx_lock) __releases(&p->tid_rx_lock)
} }
} }
spin_unlock_bh(&p->tid_rx_lock); spin_unlock_bh(&p->tid_rx_lock);
seq_puts(s, "Rx/MCS:");
for (mcs = 0; mcs < ARRAY_SIZE(p->stats.rx_per_mcs);
mcs++)
seq_printf(s, " %lld",
p->stats.rx_per_mcs[mcs]);
seq_puts(s, "\n");
} }
} }
......
...@@ -427,6 +427,8 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil, ...@@ -427,6 +427,8 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil,
cid = wil_rxdesc_cid(d); cid = wil_rxdesc_cid(d);
stats = &wil->sta[cid].stats; stats = &wil->sta[cid].stats;
stats->last_mcs_rx = wil_rxdesc_mcs(d); stats->last_mcs_rx = wil_rxdesc_mcs(d);
if (stats->last_mcs_rx < ARRAY_SIZE(stats->rx_per_mcs))
stats->rx_per_mcs[stats->last_mcs_rx]++;
/* use radiotap header only if required */ /* use radiotap header only if required */
if (ndev->type == ARPHRD_IEEE80211_RADIOTAP) if (ndev->type == ARPHRD_IEEE80211_RADIOTAP)
......
...@@ -464,6 +464,7 @@ enum wil_sta_status { ...@@ -464,6 +464,7 @@ enum wil_sta_status {
}; };
#define WIL_STA_TID_NUM (16) #define WIL_STA_TID_NUM (16)
#define WIL_MCS_MAX (12) /* Maximum MCS supported */
struct wil_net_stats { struct wil_net_stats {
unsigned long rx_packets; unsigned long rx_packets;
...@@ -473,6 +474,7 @@ struct wil_net_stats { ...@@ -473,6 +474,7 @@ struct wil_net_stats {
unsigned long tx_errors; unsigned long tx_errors;
unsigned long rx_dropped; unsigned long rx_dropped;
u16 last_mcs_rx; u16 last_mcs_rx;
u64 rx_per_mcs[WIL_MCS_MAX + 1];
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment