mirror of https://github.com/hak5/openwrt-owl.git
mac80211/ath9k: improve pending patches based on review feedback
SVN-Revision: 26041owl
parent
3efcd0a1fc
commit
3a77dae1d4
|
@ -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);
|
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue