adm8211: Use ieee80211_*_queue functions This patch fixes the adm8211 to use the ieee80211_*_queue instead of netif_*_queue functions to stop/wake the queue. Otherwise, the wireless stack happily overflows our tx ring. It also simplifies the some flag setting related to TX queue handling.
Signed-off-by: Michael Wu <[EMAIL PROTECTED]>
---
drivers/net/wireless/d80211/adm8211/adm8211.c | 16 ++++++----------
1 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/d80211/adm8211/adm8211.c
b/drivers/net/wireless/d80211/adm8211/adm8211.c
index 748eb26..339b69c 100644
--- a/drivers/net/wireless/d80211/adm8211/adm8211.c
+++ b/drivers/net/wireless/d80211/adm8211/adm8211.c
@@ -452,7 +452,7 @@ static void adm8211_interrupt_tci(struct
}
if (priv->cur_tx - dirty_tx < priv->tx_ring_size - 2)
- netif_wake_queue(dev);
+ ieee80211_wake_queue(dev, 0);
priv->dirty_tx = dirty_tx;
spin_unlock(&priv->lock);
@@ -1765,17 +1765,13 @@ static void adm8211_tx_raw(struct net_de
spin_lock_irqsave(&priv->lock, flags);
- if (priv->cur_tx - priv->dirty_tx < priv->tx_ring_size / 2)
+ if (priv->cur_tx - priv->dirty_tx == priv->tx_ring_size / 2)
flag = TDES1_CONTROL_IC | TDES1_CONTROL_LS | TDES1_CONTROL_FS;
- else if (priv->cur_tx - priv->dirty_tx == priv->tx_ring_size / 2)
- flag = TDES1_CONTROL_IC | TDES1_CONTROL_LS | TDES1_CONTROL_FS;
- else if (priv->cur_tx - priv->dirty_tx < priv->tx_ring_size - 2)
+ else
flag = TDES1_CONTROL_LS | TDES1_CONTROL_FS;
- else {
- flag = TDES1_CONTROL_IC | TDES1_CONTROL_LS | TDES1_CONTROL_FS;
- printk(KERN_DEBUG "%s: Yikes, this shouldn't happen!\n",
dev->name);
- netif_stop_queue(dev);
- }
+
+ if (priv->cur_tx - priv->dirty_tx == priv->tx_ring_size - 2)
+ ieee80211_stop_queue(dev, 0);
entry = priv->cur_tx % priv->tx_ring_size;
pgpOOwNSetEDe.pgp
Description: PGP signature
