From: Felix Fietkau Date: Fri, 11 Mar 2011 20:55:54 +0000 (+0000) Subject: mac80211/ath9k: improve pending patches based on review feedback X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=3a77dae1d4bf78f6c8b8f5a721cad9aa3134742a;p=openwrt%2Fstaging%2Fthess.git mac80211/ath9k: improve pending patches based on review feedback SVN-Revision: 26041 --- diff --git a/package/mac80211/patches/571-ath9k_fix_dma_stop.patch b/package/mac80211/patches/571-ath9k_fix_dma_stop.patch index 072e657e2e..9f7cfa82ec 100644 --- a/package/mac80211/patches/571-ath9k_fix_dma_stop.patch +++ b/package/mac80211/patches/571-ath9k_fix_dma_stop.patch @@ -25,7 +25,7 @@ if (npend) --- a/drivers/net/wireless/ath/ath9k/mac.c +++ b/drivers/net/wireless/ath/ath9k/mac.c -@@ -143,6 +143,33 @@ bool ath9k_hw_updatetxtriglevel(struct a +@@ -143,6 +143,34 @@ bool ath9k_hw_updatetxtriglevel(struct a } EXPORT_SYMBOL(ath9k_hw_updatetxtriglevel); @@ -40,11 +40,12 @@ + REG_SET_BIT(ah, AR_D_GBL_IFS_MISC, AR_D_GBL_IFS_MISC_IGNORE_BACKOFF); + + for (q = 0; q < AR_NUM_QCU; q++) { -+ for (i = 1000; i > 0; i--) { ++ for (i = 0; i < 1000; i++) { ++ if (i) ++ udelay(5); ++ + if (!ath9k_hw_numtxpending(ah, q)) + break; -+ -+ udelay(5); + } + } + diff --git a/package/mac80211/patches/572-ath9k_fix_tx_flush.patch b/package/mac80211/patches/572-ath9k_fix_tx_flush.patch index ddeeb145bd..630abc6fdc 100644 --- a/package/mac80211/patches/572-ath9k_fix_tx_flush.patch +++ b/package/mac80211/patches/572-ath9k_fix_tx_flush.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -2149,56 +2149,40 @@ static void ath9k_set_coverage_class(str +@@ -2149,56 +2149,42 @@ static void ath9k_set_coverage_class(str static void ath9k_flush(struct ieee80211_hw *hw, bool drop) { @@ -32,6 +32,12 @@ - } + if (drop) + timeout = 1; ++ ++ for (j = 0; j < timeout; j++) { ++ int npend = 0; ++ ++ if (j) ++ usleep_range(1000, 2000); - if (drop || ath9k_has_pending_frames(sc, txq)) { - ath_dbg(common, ATH_DBG_QUEUE, "Drop frames from hw queue:%d\n", @@ -46,8 +52,6 @@ - ath9k_ps_restore(sc); - if (npend) - break; -+ for (j = 0; j < timeout; j++) { -+ int npend = 0; + for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { + if (!ATH_TXQ_SETUP(sc, i)) + continue; @@ -59,8 +63,6 @@ + + if (!npend) + goto out; -+ -+ usleep_range(1000, 2000); } - if (npend) { diff --git a/package/mac80211/patches/573-ath9k_beacon_stop.patch b/package/mac80211/patches/573-ath9k_beacon_stop.patch index 7a9f63fc70..5574d17168 100644 --- a/package/mac80211/patches/573-ath9k_beacon_stop.patch +++ b/package/mac80211/patches/573-ath9k_beacon_stop.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/mac.c +++ b/drivers/net/wireless/ath/ath9k/mac.c -@@ -170,84 +170,30 @@ void ath9k_hw_abort_tx_dma(struct ath_hw +@@ -171,84 +171,31 @@ void ath9k_hw_abort_tx_dma(struct ath_hw } EXPORT_SYMBOL(ath9k_hw_abort_tx_dma); @@ -34,11 +34,11 @@ REG_WRITE(ah, AR_Q_TXD, 1 << q); for (wait = wait_time; wait != 0; wait--) { - if (ath9k_hw_numtxpending(ah, q) == 0) - break; +- if (ath9k_hw_numtxpending(ah, q) == 0) +- break; - udelay(ATH9K_TIME_QUANTUM); - } - +- - if (ath9k_hw_numtxpending(ah, q)) { - ath_dbg(common, ATH_DBG_QUEUE, - "%s: Num of pending TX Frames %d on Q %d\n", @@ -73,11 +73,13 @@ - "Failed to stop TX DMA in 100 msec after killing last frame\n"); - break; - } -- udelay(ATH9K_TIME_QUANTUM); ++ if (wait != wait_time) + udelay(ATH9K_TIME_QUANTUM); - } -- + - REG_CLR_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH); -+ udelay(ATH9K_TIME_QUANTUM); ++ if (ath9k_hw_numtxpending(ah, q) == 0) ++ break; } REG_WRITE(ah, AR_Q_TXD, 0); diff --git a/package/mac80211/patches/581-mac80211_chantype_change_fix.patch b/package/mac80211/patches/581-mac80211_chantype_change_fix.patch index 87e277298a..b855d1d809 100644 --- a/package/mac80211/patches/581-mac80211_chantype_change_fix.patch +++ b/package/mac80211/patches/581-mac80211_chantype_change_fix.patch @@ -1,10 +1,12 @@ --- a/net/mac80211/chan.c +++ b/net/mac80211/chan.c -@@ -76,6 +76,7 @@ bool ieee80211_set_channel_type(struct i - +@@ -77,6 +77,9 @@ bool ieee80211_set_channel_type(struct i switch (tmp->vif.bss_conf.channel_type) { case NL80211_CHAN_NO_HT: -+ break; case NL80211_CHAN_HT20: ++ if (superchan > tmp->vif.bss_conf.channel_type) ++ break; ++ superchan = tmp->vif.bss_conf.channel_type; break; + case NL80211_CHAN_HT40PLUS: