aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/dma.c
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2012-01-03 15:16:34 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-01-03 15:16:34 -0500
commit57adc1fcbae2c13104ce291b40f23e40a414fa87 (patch)
treea22d95cd3a96cbd515cd24fb0833739576c5e92f /drivers/net/wireless/b43/dma.c
parentfaa85aa24286a9e14ae7cc797352350c3ac39986 (diff)
parentdc0d633e35643662f27a0b1c531da3cd6b204b9c (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Conflicts: drivers/net/wireless/b43/dma.c drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
Diffstat (limited to 'drivers/net/wireless/b43/dma.c')
-rw-r--r--drivers/net/wireless/b43/dma.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
index af23968520b6..b5f1b91002bb 100644
--- a/drivers/net/wireless/b43/dma.c
+++ b/drivers/net/wireless/b43/dma.c
@@ -1465,7 +1465,9 @@ int b43_dma_tx(struct b43_wldev *dev, struct sk_buff *skb)
1465 if ((free_slots(ring) < TX_SLOTS_PER_FRAME) || 1465 if ((free_slots(ring) < TX_SLOTS_PER_FRAME) ||
1466 should_inject_overflow(ring)) { 1466 should_inject_overflow(ring)) {
1467 /* This TX ring is full. */ 1467 /* This TX ring is full. */
1468 ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb)); 1468 unsigned int skb_mapping = skb_get_queue_mapping(skb);
1469 ieee80211_stop_queue(dev->wl->hw, skb_mapping);
1470 dev->wl->tx_queue_stopped[skb_mapping] = 1;
1469 ring->stopped = true; 1471 ring->stopped = true;
1470 if (b43_debug(dev, B43_DBG_DMAVERBOSE)) { 1472 if (b43_debug(dev, B43_DBG_DMAVERBOSE)) {
1471 b43dbg(dev->wl, "Stopped TX ring %d\n", ring->index); 1473 b43dbg(dev->wl, "Stopped TX ring %d\n", ring->index);
@@ -1584,12 +1586,21 @@ void b43_dma_handle_txstatus(struct b43_wldev *dev,
1584 } 1586 }
1585 if (ring->stopped) { 1587 if (ring->stopped) {
1586 B43_WARN_ON(free_slots(ring) < TX_SLOTS_PER_FRAME); 1588 B43_WARN_ON(free_slots(ring) < TX_SLOTS_PER_FRAME);
1587 ieee80211_wake_queue(dev->wl->hw, ring->queue_prio);
1588 ring->stopped = false; 1589 ring->stopped = false;
1590 }
1591
1592 if (dev->wl->tx_queue_stopped[ring->queue_prio]) {
1593 dev->wl->tx_queue_stopped[ring->queue_prio] = 0;
1594 } else {
1595 /* If the driver queue is running wake the corresponding
1596 * mac80211 queue. */
1597 ieee80211_wake_queue(dev->wl->hw, ring->queue_prio);
1589 if (b43_debug(dev, B43_DBG_DMAVERBOSE)) { 1598 if (b43_debug(dev, B43_DBG_DMAVERBOSE)) {
1590 b43dbg(dev->wl, "Woke up TX ring %d\n", ring->index); 1599 b43dbg(dev->wl, "Woke up TX ring %d\n", ring->index);
1591 } 1600 }
1592 } 1601 }
1602 /* Add work to the queue. */
1603 ieee80211_queue_work(dev->wl->hw, &dev->wl->tx_work);
1593} 1604}
1594 1605
1595static void dma_rx(struct b43_dmaring *ring, int *slot) 1606static void dma_rx(struct b43_dmaring *ring, int *slot)