diff options
Diffstat (limited to 'package/madwifi/patches/326-soc_dma.patch')
-rw-r--r-- | package/madwifi/patches/326-soc_dma.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/package/madwifi/patches/326-soc_dma.patch b/package/madwifi/patches/326-soc_dma.patch new file mode 100644 index 0000000000..8ac6187a34 --- /dev/null +++ b/package/madwifi/patches/326-soc_dma.patch @@ -0,0 +1,82 @@ +Index: madwifi-trunk-r3280/ath/if_ath_ahb.c +=================================================================== +--- madwifi-trunk-r3280.orig/ath/if_ath_ahb.c 2008-01-28 19:12:37.022826852 +0100 ++++ madwifi-trunk-r3280/ath/if_ath_ahb.c 2008-01-28 19:31:09.184472483 +0100 +@@ -69,27 +69,13 @@ + void * + bus_alloc_consistent(void *hwdev, size_t size, dma_addr_t *dma_handle) + { +- void *ret; +- +- ret = (void *) __get_free_pages(GFP_ATOMIC, get_order(size)); +- +- if (ret != NULL) { +- memset(ret, 0, size); +- *dma_handle = __pa(ret); +- dma_cache_wback_inv((unsigned long) ret, size); +- ret = UNCAC_ADDR(ret); +- } +- +- return ret; ++ return dma_alloc_coherent(hwdev, size, dma_handle, GFP_ATOMIC); + } + + void + bus_free_consistent(void *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle) + { +- unsigned long addr = (unsigned long) vaddr; +- +- addr = CAC_ADDR(addr); +- free_pages(addr, get_order(size)); ++ dma_free_coherent(hwdev, size, vaddr, dma_handle); + } + + static int +Index: madwifi-trunk-r3280/ath/if_ath_ahb.h +=================================================================== +--- madwifi-trunk-r3280.orig/ath/if_ath_ahb.h 2008-01-28 19:20:06.016413537 +0100 ++++ madwifi-trunk-r3280/ath/if_ath_ahb.h 2008-01-28 19:30:40.978865135 +0100 +@@ -89,8 +89,8 @@ + #define AR531X_RADIO1_MASK 0x000c + #define AR531X_RADIO1_S 2 + +-#define BUS_DMA_FROMDEVICE 0 +-#define BUS_DMA_TODEVICE 1 ++#define BUS_DMA_FROMDEVICE DMA_FROM_DEVICE ++#define BUS_DMA_TODEVICE DMA_TO_DEVICE + + #define AR531X_APBBASE 0xbc000000 + #define AR531X_RESETTMR (AR531X_APBBASE + 0x3000) +@@ -115,29 +115,19 @@ + static __inline void bus_dma_sync_single(void *hwdev, dma_addr_t dma_handle, + size_t size, int direction) + { +- unsigned long addr; +- +- addr = (unsigned long) __va(dma_handle); +- dma_cache_wback_inv(addr, size); ++ dma_sync_single(hwdev, dma_handle, size, direction); + } + + static __inline dma_addr_t bus_map_single(void *hwdev, void *ptr, + size_t size, int direction) + { +- dma_cache_wback_inv((unsigned long) ptr, size); +- +- return __pa(ptr); ++ return dma_map_single(hwdev, ptr, size, direction); + } + + static __inline void bus_unmap_single(void *hwdev, dma_addr_t dma_addr, + size_t size, int direction) + { +- if (direction != BUS_DMA_TODEVICE) { +- unsigned long addr; +- +- addr = (unsigned long)__va(dma_addr); +- dma_cache_wback_inv(addr, size); +- } ++ dma_unmap_single(hwdev, dma_addr, size, direction); + } + void *bus_alloc_consistent(void *, size_t, dma_addr_t *); + void bus_free_consistent(void *, size_t, void *, dma_addr_t); |