mac80211/ath9k: improve pending patches based on review feedback

SVN-Revision: 26041
lede-17.01
Felix Fietkau 2011-03-11 20:55:54 +00:00
parent 3efcd0a1fc
commit 3a77dae1d4
4 changed files with 26 additions and 19 deletions

View File

@ -25,7 +25,7 @@
if (npend) if (npend)
--- a/drivers/net/wireless/ath/ath9k/mac.c --- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/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); 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); + 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 (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)) + if (!ath9k_hw_numtxpending(ah, q))
+ break; + break;
+
+ udelay(5);
+ } + }
+ } + }
+ +

View File

@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/main.c --- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/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) static void ath9k_flush(struct ieee80211_hw *hw, bool drop)
{ {
@ -32,6 +32,12 @@
- } - }
+ if (drop) + if (drop)
+ timeout = 1; + 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)) { - if (drop || ath9k_has_pending_frames(sc, txq)) {
- ath_dbg(common, ATH_DBG_QUEUE, "Drop frames from hw queue:%d\n", - ath_dbg(common, ATH_DBG_QUEUE, "Drop frames from hw queue:%d\n",
@ -46,8 +52,6 @@
- ath9k_ps_restore(sc); - ath9k_ps_restore(sc);
- if (npend) - if (npend)
- break; - break;
+ for (j = 0; j < timeout; j++) {
+ int npend = 0;
+ for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { + for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
+ if (!ATH_TXQ_SETUP(sc, i)) + if (!ATH_TXQ_SETUP(sc, i))
+ continue; + continue;
@ -59,8 +63,6 @@
+ +
+ if (!npend) + if (!npend)
+ goto out; + goto out;
+
+ usleep_range(1000, 2000);
} }
- if (npend) { - if (npend) {

View File

@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/mac.c --- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/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); EXPORT_SYMBOL(ath9k_hw_abort_tx_dma);
@ -34,11 +34,11 @@
REG_WRITE(ah, AR_Q_TXD, 1 << q); REG_WRITE(ah, AR_Q_TXD, 1 << q);
for (wait = wait_time; wait != 0; wait--) { for (wait = wait_time; wait != 0; wait--) {
if (ath9k_hw_numtxpending(ah, q) == 0) - if (ath9k_hw_numtxpending(ah, q) == 0)
break; - break;
- udelay(ATH9K_TIME_QUANTUM); - udelay(ATH9K_TIME_QUANTUM);
- } - }
-
- if (ath9k_hw_numtxpending(ah, q)) { - if (ath9k_hw_numtxpending(ah, q)) {
- ath_dbg(common, ATH_DBG_QUEUE, - ath_dbg(common, ATH_DBG_QUEUE,
- "%s: Num of pending TX Frames %d on Q %d\n", - "%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"); - "Failed to stop TX DMA in 100 msec after killing last frame\n");
- break; - 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); - 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); REG_WRITE(ah, AR_Q_TXD, 0);

View File

@ -1,10 +1,12 @@
--- a/net/mac80211/chan.c --- a/net/mac80211/chan.c
+++ b/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) { switch (tmp->vif.bss_conf.channel_type) {
case NL80211_CHAN_NO_HT: case NL80211_CHAN_NO_HT:
+ break;
case NL80211_CHAN_HT20: case NL80211_CHAN_HT20:
+ if (superchan > tmp->vif.bss_conf.channel_type)
+ break;
+
superchan = tmp->vif.bss_conf.channel_type; superchan = tmp->vif.bss_conf.channel_type;
break; break;
case NL80211_CHAN_HT40PLUS: