diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-01-03 15:16:34 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-01-03 15:16:34 -0500 |
commit | 57adc1fcbae2c13104ce291b40f23e40a414fa87 (patch) | |
tree | a22d95cd3a96cbd515cd24fb0833739576c5e92f /drivers/net/wireless/b43/dma.c | |
parent | faa85aa24286a9e14ae7cc797352350c3ac39986 (diff) | |
parent | dc0d633e35643662f27a0b1c531da3cd6b204b9c (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.c | 15 |
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 | ||
1595 | static void dma_rx(struct b43_dmaring *ring, int *slot) | 1606 | static void dma_rx(struct b43_dmaring *ring, int *slot) |