Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / mips / mm / dma-noncoherent.c
index 9895e32..cd4ea84 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 void *dma_alloc_noncoherent(struct device *dev, size_t size,
-       dma_addr_t * dma_handle, int gfp)
+       dma_addr_t * dma_handle, gfp_t gfp)
 {
        void *ret;
        /* ignore region specifiers */
@@ -45,7 +45,7 @@ void *dma_alloc_noncoherent(struct device *dev, size_t size,
 EXPORT_SYMBOL(dma_alloc_noncoherent);
 
 void *dma_alloc_coherent(struct device *dev, size_t size,
-       dma_addr_t * dma_handle, int gfp)
+       dma_addr_t * dma_handle, gfp_t gfp)
 {
        void *ret;
 
@@ -105,22 +105,7 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
 {
        unsigned long addr = (unsigned long) ptr;
 
-       switch (direction) {
-       case DMA_TO_DEVICE:
-               dma_cache_wback(addr, size);
-               break;
-
-       case DMA_FROM_DEVICE:
-               dma_cache_inv(addr, size);
-               break;
-
-       case DMA_BIDIRECTIONAL:
-               dma_cache_wback_inv(addr, size);
-               break;
-
-       default:
-               BUG();
-       }
+       __dma_sync(addr, size, direction);
 
        return virt_to_phys(ptr);
 }
@@ -133,22 +118,7 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
        unsigned long addr;
        addr = dma_addr + PAGE_OFFSET;
 
-       switch (direction) {
-       case DMA_TO_DEVICE:
-               //dma_cache_wback(addr, size);
-               break;
-
-       case DMA_FROM_DEVICE:
-               //dma_cache_inv(addr, size);
-               break;
-
-       case DMA_BIDIRECTIONAL:
-               //dma_cache_wback_inv(addr, size);
-               break;
-
-       default:
-               BUG();
-       }
+       //__dma_sync(addr, size, direction);
 }
 
 EXPORT_SYMBOL(dma_unmap_single);
@@ -162,12 +132,13 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 
        for (i = 0; i < nents; i++, sg++) {
                unsigned long addr;
+
                addr = (unsigned long) page_address(sg->page);
-               if (addr)
+               if (addr) {
                        __dma_sync(addr + sg->offset, sg->length, direction);
-               sg->dma_address = (dma_addr_t)
-                       (page_to_phys(sg->page) + sg->offset);
+                       sg->dma_address = (dma_addr_t)page_to_phys(sg->page)
+                                         + sg->offset;
+               }
        }
 
        return nents;
@@ -218,9 +189,8 @@ void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
 
        for (i = 0; i < nhwentries; i++, sg++) {
                addr = (unsigned long) page_address(sg->page);
-               if (!addr)
-                       continue;
-               dma_cache_wback_inv(addr + sg->offset, sg->length);
+               if (addr)
+                       __dma_sync(addr + sg->offset, sg->length, direction);
        }
 }
 
@@ -230,9 +200,9 @@ void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,
        size_t size, enum dma_data_direction direction)
 {
        unsigned long addr;
+
        BUG_ON(direction == DMA_NONE);
+
        addr = dma_handle + PAGE_OFFSET;
        __dma_sync(addr, size, direction);
 }
@@ -282,9 +252,9 @@ void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
        enum dma_data_direction direction)
 {
        int i;
+
        BUG_ON(direction == DMA_NONE);
+
        /* Make sure that gcc doesn't leave the empty loop body.  */
        for (i = 0; i < nelems; i++, sg++)
                __dma_sync((unsigned long)page_address(sg->page),