mac80211: minstrel_ht: remove sample rate switching code for constrained devices
[linux-2.6-microblaze.git] / net / mac80211 / rc80211_minstrel_ht_debugfs.c
index bebb719..25b8a67 100644 (file)
@@ -9,9 +9,13 @@
 #include <linux/ieee80211.h>
 #include <linux/export.h>
 #include <net/mac80211.h>
-#include "rc80211_minstrel.h"
 #include "rc80211_minstrel_ht.h"
 
+struct minstrel_debugfs_info {
+       size_t len;
+       char buf[];
+};
+
 static ssize_t
 minstrel_stats_read(struct file *file, char __user *buf, size_t len, loff_t *ppos)
 {
@@ -28,6 +32,18 @@ minstrel_stats_release(struct inode *inode, struct file *file)
        return 0;
 }
 
+static bool
+minstrel_ht_is_sample_rate(struct minstrel_ht_sta *mi, int idx)
+{
+       int type, i;
+
+       for (type = 0; type < ARRAY_SIZE(mi->sample); type++)
+               for (i = 0; i < MINSTREL_SAMPLE_RATES; i++)
+                       if (mi->sample[type].cur_sample_rates[i] == idx)
+                               return true;
+       return false;
+}
+
 static char *
 minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
 {
@@ -52,8 +68,7 @@ minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
 
        for (j = 0; j < MCS_GROUP_RATES; j++) {
                struct minstrel_rate_stats *mrs = &mi->groups[i].rates[j];
-               static const int bitrates[4] = { 10, 20, 55, 110 };
-               int idx = i * MCS_GROUP_RATES + j;
+               int idx = MI_RATE(i, j);
                unsigned int duration;
 
                if (!(mi->supported[i] & BIT(j)))
@@ -67,6 +82,9 @@ minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
                        p += sprintf(p, "VHT%c0 ", htmode);
                        p += sprintf(p, "%cGI ", gimode);
                        p += sprintf(p, "%d  ", mg->streams);
+               } else if (i == MINSTREL_OFDM_GROUP) {
+                       p += sprintf(p, "OFDM       ");
+                       p += sprintf(p, "1 ");
                } else {
                        p += sprintf(p, "CCK    ");
                        p += sprintf(p, "%cP  ", j < 4 ? 'L' : 'S');
@@ -78,13 +96,19 @@ minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
                *(p++) = (idx == mi->max_tp_rate[2]) ? 'C' : ' ';
                *(p++) = (idx == mi->max_tp_rate[3]) ? 'D' : ' ';
                *(p++) = (idx == mi->max_prob_rate) ? 'P' : ' ';
+               *(p++) = minstrel_ht_is_sample_rate(mi, idx) ? 'S' : ' ';
 
                if (gflags & IEEE80211_TX_RC_MCS) {
                        p += sprintf(p, "  MCS%-2u", (mg->streams - 1) * 8 + j);
                } else if (gflags & IEEE80211_TX_RC_VHT_MCS) {
                        p += sprintf(p, "  MCS%-1u/%1u", j, mg->streams);
                } else {
-                       int r = bitrates[j % 4];
+                       int r;
+
+                       if (i == MINSTREL_OFDM_GROUP)
+                               r = minstrel_ofdm_bitrates[j % 8];
+                       else
+                               r = minstrel_cck_bitrates[j % 4];
 
                        p += sprintf(p, "   %2u.%1uM", r / 10, r % 10);
                }
@@ -120,20 +144,11 @@ minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
 static int
 minstrel_ht_stats_open(struct inode *inode, struct file *file)
 {
-       struct minstrel_ht_sta_priv *msp = inode->i_private;
-       struct minstrel_ht_sta *mi = &msp->ht;
+       struct minstrel_ht_sta *mi = inode->i_private;
        struct minstrel_debugfs_info *ms;
        unsigned int i;
-       int ret;
        char *p;
 
-       if (!msp->is_ht) {
-               inode->i_private = &msp->legacy;
-               ret = minstrel_stats_open(inode, file);
-               inode->i_private = msp;
-               return ret;
-       }
-
        ms = kmalloc(32768, GFP_KERNEL);
        if (!ms)
                return -ENOMEM;
@@ -143,9 +158,9 @@ minstrel_ht_stats_open(struct inode *inode, struct file *file)
 
        p += sprintf(p, "\n");
        p += sprintf(p,
-                    "              best   ____________rate__________    ____statistics___    _____last____    ______sum-of________\n");
+                    "              best    ____________rate__________    ____statistics___    _____last____    ______sum-of________\n");
        p += sprintf(p,
-                    "mode guard #  rate  [name   idx airtime  max_tp]  [avg(tp) avg(prob)]  [retry|suc|att]  [#success | #attempts]\n");
+                    "mode guard #  rate   [name   idx airtime  max_tp]  [avg(tp) avg(prob)]  [retry|suc|att]  [#success | #attempts]\n");
 
        p = minstrel_ht_stats_dump(mi, MINSTREL_CCK_GROUP, p);
        for (i = 0; i < MINSTREL_CCK_GROUP; i++)
@@ -199,8 +214,7 @@ minstrel_ht_stats_csv_dump(struct minstrel_ht_sta *mi, int i, char *p)
 
        for (j = 0; j < MCS_GROUP_RATES; j++) {
                struct minstrel_rate_stats *mrs = &mi->groups[i].rates[j];
-               static const int bitrates[4] = { 10, 20, 55, 110 };
-               int idx = i * MCS_GROUP_RATES + j;
+               int idx = MI_RATE(i, j);
                unsigned int duration;
 
                if (!(mi->supported[i] & BIT(j)))
@@ -214,6 +228,8 @@ minstrel_ht_stats_csv_dump(struct minstrel_ht_sta *mi, int i, char *p)
                        p += sprintf(p, "VHT%c0,", htmode);
                        p += sprintf(p, "%cGI,", gimode);
                        p += sprintf(p, "%d,", mg->streams);
+               } else if (i == MINSTREL_OFDM_GROUP) {
+                       p += sprintf(p, "OFDM,,1,");
                } else {
                        p += sprintf(p, "CCK,");
                        p += sprintf(p, "%cP,", j < 4 ? 'L' : 'S');
@@ -225,13 +241,20 @@ minstrel_ht_stats_csv_dump(struct minstrel_ht_sta *mi, int i, char *p)
                p += sprintf(p, "%s" ,((idx == mi->max_tp_rate[2]) ? "C" : ""));
                p += sprintf(p, "%s" ,((idx == mi->max_tp_rate[3]) ? "D" : ""));
                p += sprintf(p, "%s" ,((idx == mi->max_prob_rate) ? "P" : ""));
+               p += sprintf(p, "%s", (minstrel_ht_is_sample_rate(mi, idx) ? "S" : ""));
 
                if (gflags & IEEE80211_TX_RC_MCS) {
                        p += sprintf(p, ",MCS%-2u,", (mg->streams - 1) * 8 + j);
                } else if (gflags & IEEE80211_TX_RC_VHT_MCS) {
                        p += sprintf(p, ",MCS%-1u/%1u,", j, mg->streams);
                } else {
-                       int r = bitrates[j % 4];
+                       int r;
+
+                       if (i == MINSTREL_OFDM_GROUP)
+                               r = minstrel_ofdm_bitrates[j % 8];
+                       else
+                               r = minstrel_cck_bitrates[j % 4];
+
                        p += sprintf(p, ",%2u.%1uM,", r / 10, r % 10);
                }
 
@@ -270,22 +293,12 @@ minstrel_ht_stats_csv_dump(struct minstrel_ht_sta *mi, int i, char *p)
 static int
 minstrel_ht_stats_csv_open(struct inode *inode, struct file *file)
 {
-       struct minstrel_ht_sta_priv *msp = inode->i_private;
-       struct minstrel_ht_sta *mi = &msp->ht;
+       struct minstrel_ht_sta *mi = inode->i_private;
        struct minstrel_debugfs_info *ms;
        unsigned int i;
-       int ret;
        char *p;
 
-       if (!msp->is_ht) {
-               inode->i_private = &msp->legacy;
-               ret = minstrel_stats_csv_open(inode, file);
-               inode->i_private = msp;
-               return ret;
-       }
-
        ms = kmalloc(32768, GFP_KERNEL);
-
        if (!ms)
                return -ENOMEM;
 
@@ -316,10 +329,8 @@ static const struct file_operations minstrel_ht_stat_csv_fops = {
 void
 minstrel_ht_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir)
 {
-       struct minstrel_ht_sta_priv *msp = priv_sta;
-
-       debugfs_create_file("rc_stats", 0444, dir, msp,
+       debugfs_create_file("rc_stats", 0444, dir, priv_sta,
                            &minstrel_ht_stat_fops);
-       debugfs_create_file("rc_stats_csv", 0444, dir, msp,
+       debugfs_create_file("rc_stats_csv", 0444, dir, priv_sta,
                            &minstrel_ht_stat_csv_fops);
 }