aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/540-ath9k_sw_retry_reduce.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-08-11 13:52:27 +0000
committerFelix Fietkau <nbd@openwrt.org>2011-08-11 13:52:27 +0000
commit0da1b304fcb69df143a30335779f3b6886bf2fba (patch)
tree3d6e1cf9fed773c35a5cfaec71f59a3633e80c7c /package/mac80211/patches/540-ath9k_sw_retry_reduce.patch
parentb968a100483fbe18783e7152589854c72bbe6923 (diff)
downloadmaster-187ad058-0da1b304fcb69df143a30335779f3b6886bf2fba.tar.gz
master-187ad058-0da1b304fcb69df143a30335779f3b6886bf2fba.tar.bz2
master-187ad058-0da1b304fcb69df143a30335779f3b6886bf2fba.zip
mac80211: update to 2011-08-10
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@27958 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/540-ath9k_sw_retry_reduce.patch')
-rw-r--r--package/mac80211/patches/540-ath9k_sw_retry_reduce.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/package/mac80211/patches/540-ath9k_sw_retry_reduce.patch b/package/mac80211/patches/540-ath9k_sw_retry_reduce.patch
new file mode 100644
index 0000000000..d34b85140a
--- /dev/null
+++ b/package/mac80211/patches/540-ath9k_sw_retry_reduce.patch
@@ -0,0 +1,61 @@
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -248,13 +248,16 @@ static void ath_tid_drain(struct ath_sof
+ }
+
+ static void ath_tx_set_retry(struct ath_softc *sc, struct ath_txq *txq,
+- struct sk_buff *skb)
++ struct sk_buff *skb, int count)
+ {
+ struct ath_frame_info *fi = get_frame_info(skb);
+ struct ieee80211_hdr *hdr;
++ int prev = fi->retries;
+
+ TX_STAT_INC(txq->axq_qnum, a_retries);
+- if (fi->retries++ > 0)
++ fi->retries += count;
++
++ if (prev > 0)
+ return;
+
+ hdr = (struct ieee80211_hdr *)skb->data;
+@@ -359,6 +362,7 @@ static void ath_tx_complete_aggr(struct
+ int nframes;
+ u8 tidno;
+ bool clear_filter;
++ int i, retries;
+
+ skb = bf->bf_mpdu;
+ hdr = (struct ieee80211_hdr *)skb->data;
+@@ -367,6 +371,10 @@ static void ath_tx_complete_aggr(struct
+
+ memcpy(rates, tx_info->control.rates, sizeof(rates));
+
++ retries = ts->ts_longretry + 1;
++ for (i = 0; i < ts->ts_rateindex; i++)
++ retries += rates[i].count;
++
+ rcu_read_lock();
+
+ sta = ieee80211_find_sta_by_ifaddr(hw, hdr->addr1, hdr->addr2);
+@@ -451,7 +459,8 @@ static void ath_tx_complete_aggr(struct
+ } else if (fi->retries < ATH_MAX_SW_RETRIES) {
+ if (!(ts->ts_status & ATH9K_TXERR_FILT) ||
+ !an->sleeping)
+- ath_tx_set_retry(sc, txq, bf->bf_mpdu);
++ ath_tx_set_retry(sc, txq, bf->bf_mpdu,
++ retries);
+
+ clear_filter = true;
+ txpending = 1;
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -538,7 +538,7 @@ struct ath_ant_comb {
+ #define DEFAULT_CACHELINE 32
+ #define ATH_REGCLASSIDS_MAX 10
+ #define ATH_CABQ_READY_TIME 80 /* % of beacon interval */
+-#define ATH_MAX_SW_RETRIES 10
++#define ATH_MAX_SW_RETRIES 20
+ #define ATH_CHAN_MAX 255
+
+ #define ATH_TXPOWER_MAX 100 /* .5 dBm units */