diff options
author | Stefano Brivio <stefano.brivio@polimi.it> | 2008-02-08 00:31:53 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-02-15 13:44:18 -0500 |
commit | 8e118f0ed866afab654a438b85643d4f1472f28b (patch) | |
tree | 562364b18b16c98a7809ebce7be6b0d20c32eaec /drivers/net/wireless/b43legacy/dma.h | |
parent | d68ab68066805fdfee1f5f29ec2ec0179fd92fe1 (diff) |
b43legacy: fix DMA for 30/32-bit DMA engines
This checks if the DMA address is bigger than what the controller can manage.
It will reallocate the buffers in the GFP_DMA zone in that case.
The patch by Michael Buesch has been ported to b43legacy.
Thanks to Matti Viljanen for reporting this.
Cc: Matti Viljanen <viljanen.matti@gmail.com>
Signed-off-by: Stefano Brivio <stefano.brivio@polimi.it>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43legacy/dma.h')
-rw-r--r-- | drivers/net/wireless/b43legacy/dma.h | 33 |
1 files changed, 8 insertions, 25 deletions
diff --git a/drivers/net/wireless/b43legacy/dma.h b/drivers/net/wireless/b43legacy/dma.h index 26f6ab08de75..2dd488c5be2d 100644 --- a/drivers/net/wireless/b43legacy/dma.h +++ b/drivers/net/wireless/b43legacy/dma.h | |||
@@ -218,6 +218,12 @@ struct b43legacy_dma_ops { | |||
218 | void (*set_current_rxslot)(struct b43legacy_dmaring *ring, int slot); | 218 | void (*set_current_rxslot)(struct b43legacy_dmaring *ring, int slot); |
219 | }; | 219 | }; |
220 | 220 | ||
221 | enum b43legacy_dmatype { | ||
222 | B43legacy_DMA_30BIT = 30, | ||
223 | B43legacy_DMA_32BIT = 32, | ||
224 | B43legacy_DMA_64BIT = 64, | ||
225 | }; | ||
226 | |||
221 | struct b43legacy_dmaring { | 227 | struct b43legacy_dmaring { |
222 | /* Lowlevel DMA ops. */ | 228 | /* Lowlevel DMA ops. */ |
223 | const struct b43legacy_dma_ops *ops; | 229 | const struct b43legacy_dma_ops *ops; |
@@ -250,8 +256,8 @@ struct b43legacy_dmaring { | |||
250 | int index; | 256 | int index; |
251 | /* Boolean. Is this a TX ring? */ | 257 | /* Boolean. Is this a TX ring? */ |
252 | bool tx; | 258 | bool tx; |
253 | /* Boolean. 64bit DMA if true, 32bit DMA otherwise. */ | 259 | /* The type of DMA engine used. */ |
254 | bool dma64; | 260 | enum b43legacy_dmatype type; |
255 | /* Boolean. Is this ring stopped at ieee80211 level? */ | 261 | /* Boolean. Is this ring stopped at ieee80211 level? */ |
256 | bool stopped; | 262 | bool stopped; |
257 | /* Lock, only used for TX. */ | 263 | /* Lock, only used for TX. */ |
@@ -284,15 +290,6 @@ void b43legacy_dma_write(struct b43legacy_dmaring *ring, | |||
284 | int b43legacy_dma_init(struct b43legacy_wldev *dev); | 290 | int b43legacy_dma_init(struct b43legacy_wldev *dev); |
285 | void b43legacy_dma_free(struct b43legacy_wldev *dev); | 291 | void b43legacy_dma_free(struct b43legacy_wldev *dev); |
286 | 292 | ||
287 | int b43legacy_dmacontroller_rx_reset(struct b43legacy_wldev *dev, | ||
288 | u16 dmacontroller_mmio_base, | ||
289 | int dma64); | ||
290 | int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev, | ||
291 | u16 dmacontroller_mmio_base, | ||
292 | int dma64); | ||
293 | |||
294 | u16 b43legacy_dmacontroller_base(int dma64bit, int dmacontroller_idx); | ||
295 | |||
296 | void b43legacy_dma_tx_suspend(struct b43legacy_wldev *dev); | 293 | void b43legacy_dma_tx_suspend(struct b43legacy_wldev *dev); |
297 | void b43legacy_dma_tx_resume(struct b43legacy_wldev *dev); | 294 | void b43legacy_dma_tx_resume(struct b43legacy_wldev *dev); |
298 | 295 | ||
@@ -320,20 +317,6 @@ void b43legacy_dma_free(struct b43legacy_wldev *dev) | |||
320 | { | 317 | { |
321 | } | 318 | } |
322 | static inline | 319 | static inline |
323 | int b43legacy_dmacontroller_rx_reset(struct b43legacy_wldev *dev, | ||
324 | u16 dmacontroller_mmio_base, | ||
325 | int dma64) | ||
326 | { | ||
327 | return 0; | ||
328 | } | ||
329 | static inline | ||
330 | int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev, | ||
331 | u16 dmacontroller_mmio_base, | ||
332 | int dma64) | ||
333 | { | ||
334 | return 0; | ||
335 | } | ||
336 | static inline | ||
337 | void b43legacy_dma_get_tx_stats(struct b43legacy_wldev *dev, | 320 | void b43legacy_dma_get_tx_stats(struct b43legacy_wldev *dev, |
338 | struct ieee80211_tx_queue_stats *stats) | 321 | struct ieee80211_tx_queue_stats *stats) |
339 | { | 322 | { |