minstrel_ht: fixed rate mode through debugfs
authorZefir Kurtisi <zefir.kurtisi@neratec.com>
Fri, 20 May 2011 18:29:17 +0000 (20:29 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 1 Jun 2011 19:12:29 +0000 (15:12 -0400)
Found several threads about fixed rate mode in minstrel_ht for test
environments, but no patches for it.

This patch provides such a mode through debugfs.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/rc80211_minstrel.c
net/mac80211/rc80211_minstrel.h
net/mac80211/rc80211_minstrel_ht.c

index 8adac67..58a8955 100644 (file)
@@ -532,12 +532,21 @@ minstrel_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
        mp->hw = hw;
        mp->update_interval = 100;
 
+#ifdef CONFIG_MAC80211_DEBUGFS
+       mp->fixed_rate_idx = (u32) -1;
+       mp->dbg_fixed_rate = debugfs_create_u32("fixed_rate_idx",
+                       S_IRUGO | S_IWUGO, debugfsdir, &mp->fixed_rate_idx);
+#endif
+
        return mp;
 }
 
 static void
 minstrel_free(void *priv)
 {
+#ifdef CONFIG_MAC80211_DEBUGFS
+       debugfs_remove(((struct minstrel_priv *)priv)->dbg_fixed_rate);
+#endif
        kfree(priv);
 }
 
index 0f5a833..5d278ec 100644 (file)
@@ -78,6 +78,18 @@ struct minstrel_priv {
        unsigned int update_interval;
        unsigned int lookaround_rate;
        unsigned int lookaround_rate_mrr;
+
+#ifdef CONFIG_MAC80211_DEBUGFS
+       /*
+        * enable fixed rate processing per RC
+        *   - write static index to debugfs:ieee80211/phyX/rc/fixed_rate_idx
+        *   - write -1 to enable RC processing again
+        *   - setting will be applied on next update
+        */
+       u32 fixed_rate_idx;
+       struct dentry *dbg_fixed_rate;
+#endif
+
 };
 
 struct minstrel_debugfs_info {
index 333b511..66a1eeb 100644 (file)
@@ -609,6 +609,13 @@ minstrel_ht_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
 
        info->flags |= mi->tx_flags;
        sample_idx = minstrel_get_sample_rate(mp, mi);
+
+#ifdef CONFIG_MAC80211_DEBUGFS
+       /* use fixed index if set */
+       if (mp->fixed_rate_idx != -1)
+               sample_idx = mp->fixed_rate_idx;
+#endif
+
        if (sample_idx >= 0) {
                sample = true;
                minstrel_ht_set_rate(mp, mi, &ar[0], sample_idx,