aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/300-minstrel_no_mrr.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2008-10-10 01:45:35 +0000
committerFelix Fietkau <nbd@openwrt.org>2008-10-10 01:45:35 +0000
commit4802f81b70667e73a822710cd8a2482168ef6096 (patch)
tree55a0da7136b9919ad4675101c3a3bf477e48a04d /package/mac80211/patches/300-minstrel_no_mrr.patch
parent2351e523b9c9f866b45245d42be671cf50c77699 (diff)
downloadmaster-187ad058-4802f81b70667e73a822710cd8a2482168ef6096.tar.gz
master-187ad058-4802f81b70667e73a822710cd8a2482168ef6096.tar.bz2
master-187ad058-4802f81b70667e73a822710cd8a2482168ef6096.zip
update to latest compat-wireless version and add some new minstrel/b43 fixes
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@12939 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/300-minstrel_no_mrr.patch')
-rw-r--r--package/mac80211/patches/300-minstrel_no_mrr.patch31
1 files changed, 31 insertions, 0 deletions
diff --git a/package/mac80211/patches/300-minstrel_no_mrr.patch b/package/mac80211/patches/300-minstrel_no_mrr.patch
new file mode 100644
index 0000000000..d4c04c4d8b
--- /dev/null
+++ b/package/mac80211/patches/300-minstrel_no_mrr.patch
@@ -0,0 +1,31 @@
+This fixes tx status processing for drivers that do not support mrr.
+If the retry count is bigger than the maximum retry count configured in
+the hardware, do not count the rate attempt as successful, the hardware
+has probably switched to a lower rate.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+
+--- a/net/mac80211/rc80211_minstrel.c
++++ b/net/mac80211/rc80211_minstrel.c
+@@ -171,6 +171,7 @@ minstrel_tx_status(void *priv, struct ie
+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+ struct ieee80211_tx_altrate *ar = info->status.retries;
+ struct minstrel_priv *mp = priv;
++ struct ieee80211_local *local = hw_to_local(mp->hw);
+ int i, ndx, tries;
+ int success = 0;
+
+@@ -180,6 +181,13 @@ minstrel_tx_status(void *priv, struct ie
+ if (!mp->has_mrr || (ar[0].rate_idx < 0)) {
+ ndx = rix_to_ndx(mi, info->tx_rate_idx);
+ tries = info->status.retry_count + 1;
++
++ /* If the driver does not support the MRR API, but uses
++ * a fallback rate, use the long retry limit as indication
++ * that a rate switch has happened */
++ if (!mp->has_mrr && (tries >= local->long_retry_limit))
++ success = 0;
++
+ mi->r[ndx].success += success;
+ mi->r[ndx].attempts += tries;
+ return;