wil6210: add per-MCS Rx stats
authorVladimir Kondratiev <QCA_vkondrat@QCA.qualcomm.com>
Tue, 9 Jun 2015 11:11:18 +0000 (14:11 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Tue, 9 Jun 2015 11:39:00 +0000 (14:39 +0300)
Provide detailed statistics for the Rx frames per MCS
Statistics printed in "stations" debugfs entry

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/wil6210/debugfs.c
drivers/net/wireless/ath/wil6210/txrx.c
drivers/net/wireless/ath/wil6210/wil6210.h

index 8f9c0722a8018b605242a26307015a69ad3e48ee..75219a1b8805135c5cc751db9f70c50e55ddf285 100644 (file)
@@ -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)
 {
        struct wil6210_priv *wil = s->private;
-       int i, tid;
+       int i, tid, mcs;
 
        for (i = 0; i < ARRAY_SIZE(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)
                                }
                        }
                        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");
                }
        }
 
index 0113dac3a9a9f33b6190609e26057777a35aa8ff..aa20af86e1d61e790a4ba054c9db383ec2968b15 100644 (file)
@@ -427,6 +427,8 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil,
        cid = wil_rxdesc_cid(d);
        stats = &wil->sta[cid].stats;
        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 */
        if (ndev->type == ARPHRD_IEEE80211_RADIOTAP)
index ea0163ca15edebee1d055ee505ddafb4174b056a..c39369f8d739cc5765ee635c176b9ee88a264f9c 100644 (file)
@@ -464,6 +464,7 @@ enum wil_sta_status {
 };
 
 #define WIL_STA_TID_NUM (16)
+#define WIL_MCS_MAX (12) /* Maximum MCS supported */
 
 struct wil_net_stats {
        unsigned long   rx_packets;
@@ -473,6 +474,7 @@ struct wil_net_stats {
        unsigned long   tx_errors;
        unsigned long   rx_dropped;
        u16 last_mcs_rx;
+       u64 rx_per_mcs[WIL_MCS_MAX + 1];
 };
 
 /**