summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/b43/dma.h
diff options
context:
space:
mode:
authorThommy Jakobsson <thommyj@gmail.com>2013-04-23 21:45:11 +0200
committerJohn W. Linville <linville@tuxdriver.com>2013-05-08 17:15:06 -0400
commit73b82bf0bfbf58e6ff328d3726934370585f6e78 (patch)
tree19c23412ef8e7fbf7353eeb7084bf96c962ed725 /drivers/net/wireless/b43/dma.h
parentdb178340433f90e09ada35c174dfb2c84c2c71f4 (diff)
downloadlinux-3.10-73b82bf0bfbf58e6ff328d3726934370585f6e78.tar.gz
linux-3.10-73b82bf0bfbf58e6ff328d3726934370585f6e78.tar.bz2
linux-3.10-73b82bf0bfbf58e6ff328d3726934370585f6e78.zip
B43: Handle DMA RX descriptor underrun
Add handling of rx descriptor underflow. This fixes a fault that could happen on slow machines, where data is received faster than the CPU can handle. In such a case the device will use up all rx descriptors and refuse to send any more data before confirming that it is ok. This patch enables necessary interrupt to discover such a situation and will handle them by dropping everything in the ring buffer. Reviewed-by: Michael Buesch <m@bues.ch> Signed-off-by: Thommy Jakobsson <thommyj@gmail.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/dma.h')
-rw-r--r--drivers/net/wireless/b43/dma.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/wireless/b43/dma.h b/drivers/net/wireless/b43/dma.h
index 9fdd1983079..df8c8cdcbdb 100644
--- a/drivers/net/wireless/b43/dma.h
+++ b/drivers/net/wireless/b43/dma.h
@@ -9,7 +9,7 @@
/* DMA-Interrupt reasons. */
#define B43_DMAIRQ_FATALMASK ((1 << 10) | (1 << 11) | (1 << 12) \
| (1 << 14) | (1 << 15))
-#define B43_DMAIRQ_NONFATALMASK (1 << 13)
+#define B43_DMAIRQ_RDESC_UFLOW (1 << 13)
#define B43_DMAIRQ_RX_DONE (1 << 16)
/*** 32-bit DMA Engine. ***/
@@ -295,6 +295,8 @@ int b43_dma_tx(struct b43_wldev *dev,
void b43_dma_handle_txstatus(struct b43_wldev *dev,
const struct b43_txstatus *status);
+void b43_dma_handle_rx_overflow(struct b43_dmaring *ring);
+
void b43_dma_rx(struct b43_dmaring *ring);
void b43_dma_direct_fifo_rx(struct b43_wldev *dev,