diff options
Diffstat (limited to 'drivers/net/wireless/b43/dma.c')
-rw-r--r-- | drivers/net/wireless/b43/dma.c | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c index 10d0aaf754c5..47d44bcff37d 100644 --- a/drivers/net/wireless/b43/dma.c +++ b/drivers/net/wireless/b43/dma.c | |||
@@ -80,7 +80,7 @@ static void op32_fill_descriptor(struct b43_dmaring *ring, | |||
80 | addr = (u32) (dmaaddr & ~SSB_DMA_TRANSLATION_MASK); | 80 | addr = (u32) (dmaaddr & ~SSB_DMA_TRANSLATION_MASK); |
81 | addrext = (u32) (dmaaddr & SSB_DMA_TRANSLATION_MASK) | 81 | addrext = (u32) (dmaaddr & SSB_DMA_TRANSLATION_MASK) |
82 | >> SSB_DMA_TRANSLATION_SHIFT; | 82 | >> SSB_DMA_TRANSLATION_SHIFT; |
83 | addr |= ssb_dma_translation(ring->dev->dev); | 83 | addr |= ring->dev->dma.translation; |
84 | ctl = bufsize & B43_DMA32_DCTL_BYTECNT; | 84 | ctl = bufsize & B43_DMA32_DCTL_BYTECNT; |
85 | if (slot == ring->nr_slots - 1) | 85 | if (slot == ring->nr_slots - 1) |
86 | ctl |= B43_DMA32_DCTL_DTABLEEND; | 86 | ctl |= B43_DMA32_DCTL_DTABLEEND; |
@@ -174,7 +174,7 @@ static void op64_fill_descriptor(struct b43_dmaring *ring, | |||
174 | addrhi = (((u64) dmaaddr >> 32) & ~SSB_DMA_TRANSLATION_MASK); | 174 | addrhi = (((u64) dmaaddr >> 32) & ~SSB_DMA_TRANSLATION_MASK); |
175 | addrext = (((u64) dmaaddr >> 32) & SSB_DMA_TRANSLATION_MASK) | 175 | addrext = (((u64) dmaaddr >> 32) & SSB_DMA_TRANSLATION_MASK) |
176 | >> SSB_DMA_TRANSLATION_SHIFT; | 176 | >> SSB_DMA_TRANSLATION_SHIFT; |
177 | addrhi |= (ssb_dma_translation(ring->dev->dev) << 1); | 177 | addrhi |= (ring->dev->dma.translation << 1); |
178 | if (slot == ring->nr_slots - 1) | 178 | if (slot == ring->nr_slots - 1) |
179 | ctl0 |= B43_DMA64_DCTL0_DTABLEEND; | 179 | ctl0 |= B43_DMA64_DCTL0_DTABLEEND; |
180 | if (start) | 180 | if (start) |
@@ -333,10 +333,10 @@ static inline | |||
333 | dma_addr_t dmaaddr; | 333 | dma_addr_t dmaaddr; |
334 | 334 | ||
335 | if (tx) { | 335 | if (tx) { |
336 | dmaaddr = dma_map_single(ring->dev->dev->dma_dev, | 336 | dmaaddr = dma_map_single(ring->dev->sdev->dma_dev, |
337 | buf, len, DMA_TO_DEVICE); | 337 | buf, len, DMA_TO_DEVICE); |
338 | } else { | 338 | } else { |
339 | dmaaddr = dma_map_single(ring->dev->dev->dma_dev, | 339 | dmaaddr = dma_map_single(ring->dev->sdev->dma_dev, |
340 | buf, len, DMA_FROM_DEVICE); | 340 | buf, len, DMA_FROM_DEVICE); |
341 | } | 341 | } |
342 | 342 | ||
@@ -348,10 +348,10 @@ static inline | |||
348 | dma_addr_t addr, size_t len, int tx) | 348 | dma_addr_t addr, size_t len, int tx) |
349 | { | 349 | { |
350 | if (tx) { | 350 | if (tx) { |
351 | dma_unmap_single(ring->dev->dev->dma_dev, | 351 | dma_unmap_single(ring->dev->sdev->dma_dev, |
352 | addr, len, DMA_TO_DEVICE); | 352 | addr, len, DMA_TO_DEVICE); |
353 | } else { | 353 | } else { |
354 | dma_unmap_single(ring->dev->dev->dma_dev, | 354 | dma_unmap_single(ring->dev->sdev->dma_dev, |
355 | addr, len, DMA_FROM_DEVICE); | 355 | addr, len, DMA_FROM_DEVICE); |
356 | } | 356 | } |
357 | } | 357 | } |
@@ -361,7 +361,7 @@ static inline | |||
361 | dma_addr_t addr, size_t len) | 361 | dma_addr_t addr, size_t len) |
362 | { | 362 | { |
363 | B43_WARN_ON(ring->tx); | 363 | B43_WARN_ON(ring->tx); |
364 | dma_sync_single_for_cpu(ring->dev->dev->dma_dev, | 364 | dma_sync_single_for_cpu(ring->dev->sdev->dma_dev, |
365 | addr, len, DMA_FROM_DEVICE); | 365 | addr, len, DMA_FROM_DEVICE); |
366 | } | 366 | } |
367 | 367 | ||
@@ -370,7 +370,7 @@ static inline | |||
370 | dma_addr_t addr, size_t len) | 370 | dma_addr_t addr, size_t len) |
371 | { | 371 | { |
372 | B43_WARN_ON(ring->tx); | 372 | B43_WARN_ON(ring->tx); |
373 | dma_sync_single_for_device(ring->dev->dev->dma_dev, | 373 | dma_sync_single_for_device(ring->dev->sdev->dma_dev, |
374 | addr, len, DMA_FROM_DEVICE); | 374 | addr, len, DMA_FROM_DEVICE); |
375 | } | 375 | } |
376 | 376 | ||
@@ -401,7 +401,7 @@ static int alloc_ringmemory(struct b43_dmaring *ring) | |||
401 | */ | 401 | */ |
402 | if (ring->type == B43_DMA_64BIT) | 402 | if (ring->type == B43_DMA_64BIT) |
403 | flags |= GFP_DMA; | 403 | flags |= GFP_DMA; |
404 | ring->descbase = dma_alloc_coherent(ring->dev->dev->dma_dev, | 404 | ring->descbase = dma_alloc_coherent(ring->dev->sdev->dma_dev, |
405 | B43_DMA_RINGMEMSIZE, | 405 | B43_DMA_RINGMEMSIZE, |
406 | &(ring->dmabase), flags); | 406 | &(ring->dmabase), flags); |
407 | if (!ring->descbase) { | 407 | if (!ring->descbase) { |
@@ -415,12 +415,7 @@ static int alloc_ringmemory(struct b43_dmaring *ring) | |||
415 | 415 | ||
416 | static void free_ringmemory(struct b43_dmaring *ring) | 416 | static void free_ringmemory(struct b43_dmaring *ring) |
417 | { | 417 | { |
418 | gfp_t flags = GFP_KERNEL; | 418 | dma_free_coherent(ring->dev->sdev->dma_dev, B43_DMA_RINGMEMSIZE, |
419 | |||
420 | if (ring->type == B43_DMA_64BIT) | ||
421 | flags |= GFP_DMA; | ||
422 | |||
423 | dma_free_coherent(ring->dev->dev->dma_dev, B43_DMA_RINGMEMSIZE, | ||
424 | ring->descbase, ring->dmabase); | 419 | ring->descbase, ring->dmabase); |
425 | } | 420 | } |
426 | 421 | ||
@@ -528,7 +523,7 @@ static bool b43_dma_mapping_error(struct b43_dmaring *ring, | |||
528 | dma_addr_t addr, | 523 | dma_addr_t addr, |
529 | size_t buffersize, bool dma_to_device) | 524 | size_t buffersize, bool dma_to_device) |
530 | { | 525 | { |
531 | if (unlikely(dma_mapping_error(ring->dev->dev->dma_dev, addr))) | 526 | if (unlikely(dma_mapping_error(ring->dev->sdev->dma_dev, addr))) |
532 | return 1; | 527 | return 1; |
533 | 528 | ||
534 | switch (ring->type) { | 529 | switch (ring->type) { |
@@ -663,7 +658,7 @@ static int dmacontroller_setup(struct b43_dmaring *ring) | |||
663 | int err = 0; | 658 | int err = 0; |
664 | u32 value; | 659 | u32 value; |
665 | u32 addrext; | 660 | u32 addrext; |
666 | u32 trans = ssb_dma_translation(ring->dev->dev); | 661 | u32 trans = ring->dev->dma.translation; |
667 | 662 | ||
668 | if (ring->tx) { | 663 | if (ring->tx) { |
669 | if (ring->type == B43_DMA_64BIT) { | 664 | if (ring->type == B43_DMA_64BIT) { |
@@ -874,7 +869,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev, | |||
874 | goto err_kfree_meta; | 869 | goto err_kfree_meta; |
875 | 870 | ||
876 | /* test for ability to dma to txhdr_cache */ | 871 | /* test for ability to dma to txhdr_cache */ |
877 | dma_test = dma_map_single(dev->dev->dma_dev, | 872 | dma_test = dma_map_single(dev->sdev->dma_dev, |
878 | ring->txhdr_cache, | 873 | ring->txhdr_cache, |
879 | b43_txhdr_size(dev), | 874 | b43_txhdr_size(dev), |
880 | DMA_TO_DEVICE); | 875 | DMA_TO_DEVICE); |
@@ -889,7 +884,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev, | |||
889 | if (!ring->txhdr_cache) | 884 | if (!ring->txhdr_cache) |
890 | goto err_kfree_meta; | 885 | goto err_kfree_meta; |
891 | 886 | ||
892 | dma_test = dma_map_single(dev->dev->dma_dev, | 887 | dma_test = dma_map_single(dev->sdev->dma_dev, |
893 | ring->txhdr_cache, | 888 | ring->txhdr_cache, |
894 | b43_txhdr_size(dev), | 889 | b43_txhdr_size(dev), |
895 | DMA_TO_DEVICE); | 890 | DMA_TO_DEVICE); |
@@ -903,7 +898,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev, | |||
903 | } | 898 | } |
904 | } | 899 | } |
905 | 900 | ||
906 | dma_unmap_single(dev->dev->dma_dev, | 901 | dma_unmap_single(dev->sdev->dma_dev, |
907 | dma_test, b43_txhdr_size(dev), | 902 | dma_test, b43_txhdr_size(dev), |
908 | DMA_TO_DEVICE); | 903 | DMA_TO_DEVICE); |
909 | } | 904 | } |
@@ -1018,9 +1013,9 @@ static int b43_dma_set_mask(struct b43_wldev *dev, u64 mask) | |||
1018 | /* Try to set the DMA mask. If it fails, try falling back to a | 1013 | /* Try to set the DMA mask. If it fails, try falling back to a |
1019 | * lower mask, as we can always also support a lower one. */ | 1014 | * lower mask, as we can always also support a lower one. */ |
1020 | while (1) { | 1015 | while (1) { |
1021 | err = dma_set_mask(dev->dev->dma_dev, mask); | 1016 | err = dma_set_mask(dev->sdev->dma_dev, mask); |
1022 | if (!err) { | 1017 | if (!err) { |
1023 | err = dma_set_coherent_mask(dev->dev->dma_dev, mask); | 1018 | err = dma_set_coherent_mask(dev->sdev->dma_dev, mask); |
1024 | if (!err) | 1019 | if (!err) |
1025 | break; | 1020 | break; |
1026 | } | 1021 | } |
@@ -1060,6 +1055,7 @@ int b43_dma_init(struct b43_wldev *dev) | |||
1060 | err = b43_dma_set_mask(dev, dmamask); | 1055 | err = b43_dma_set_mask(dev, dmamask); |
1061 | if (err) | 1056 | if (err) |
1062 | return err; | 1057 | return err; |
1058 | dma->translation = ssb_dma_translation(dev->sdev); | ||
1063 | 1059 | ||
1064 | err = -ENOMEM; | 1060 | err = -ENOMEM; |
1065 | /* setup TX DMA channels. */ | 1061 | /* setup TX DMA channels. */ |
@@ -1089,7 +1085,7 @@ int b43_dma_init(struct b43_wldev *dev) | |||
1089 | goto err_destroy_mcast; | 1085 | goto err_destroy_mcast; |
1090 | 1086 | ||
1091 | /* No support for the TX status DMA ring. */ | 1087 | /* No support for the TX status DMA ring. */ |
1092 | B43_WARN_ON(dev->dev->id.revision < 5); | 1088 | B43_WARN_ON(dev->sdev->id.revision < 5); |
1093 | 1089 | ||
1094 | b43dbg(dev->wl, "%u-bit DMA initialized\n", | 1090 | b43dbg(dev->wl, "%u-bit DMA initialized\n", |
1095 | (unsigned int)type); | 1091 | (unsigned int)type); |
@@ -1541,7 +1537,7 @@ static void dma_rx(struct b43_dmaring *ring, int *slot) | |||
1541 | dmaaddr = meta->dmaaddr; | 1537 | dmaaddr = meta->dmaaddr; |
1542 | goto drop_recycle_buffer; | 1538 | goto drop_recycle_buffer; |
1543 | } | 1539 | } |
1544 | if (unlikely(len > ring->rx_buffersize)) { | 1540 | if (unlikely(len + ring->frameoffset > ring->rx_buffersize)) { |
1545 | /* The data did not fit into one descriptor buffer | 1541 | /* The data did not fit into one descriptor buffer |
1546 | * and is split over multiple buffers. | 1542 | * and is split over multiple buffers. |
1547 | * This should never happen, as we try to allocate buffers | 1543 | * This should never happen, as we try to allocate buffers |