Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs...
[pandora-kernel.git] / drivers / dma / coh901318_lli.c
index f5120f2..9f7e0e6 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/spinlock.h>
 #include <linux/dmapool.h>
 #include <linux/memory.h>
+#include <linux/gfp.h>
 #include <mach/coh901318.h>
 
 #include "coh901318_lli.h"
@@ -74,6 +75,8 @@ coh901318_lli_alloc(struct coh901318_pool *pool, unsigned int len)
 
        lli = head;
        lli->phy_this = phy;
+       lli->link_addr = 0x00000000;
+       lli->virt_link_addr = 0x00000000U;
 
        for (i = 1; i < len; i++) {
                lli_prev = lli;
@@ -85,13 +88,13 @@ coh901318_lli_alloc(struct coh901318_pool *pool, unsigned int len)
 
                DEBUGFS_POOL_COUNTER_ADD(pool, 1);
                lli->phy_this = phy;
+               lli->link_addr = 0x00000000;
+               lli->virt_link_addr = 0x00000000U;
 
                lli_prev->link_addr = phy;
                lli_prev->virt_link_addr = lli;
        }
 
-       lli->link_addr = 0x00000000U;
-
        spin_unlock(&pool->lock);
 
        return head;
@@ -166,8 +169,7 @@ coh901318_lli_fill_memcpy(struct coh901318_pool *pool,
        lli->src_addr = src;
        lli->dst_addr = dst;
 
-       /* One irq per single transfer */
-       return 1;
+       return 0;
 }
 
 int
@@ -223,8 +225,7 @@ coh901318_lli_fill_single(struct coh901318_pool *pool,
        lli->src_addr = src;
        lli->dst_addr = dst;
 
-       /* One irq per single transfer */
-       return 1;
+       return 0;
 }
 
 int
@@ -240,7 +241,6 @@ coh901318_lli_fill_sg(struct coh901318_pool *pool,
        u32 ctrl_sg;
        dma_addr_t src = 0;
        dma_addr_t dst = 0;
-       int nbr_of_irq = 0;
        u32 bytes_to_transfer;
        u32 elem_size;
 
@@ -269,15 +269,12 @@ coh901318_lli_fill_sg(struct coh901318_pool *pool,
                        ctrl_sg = ctrl ? ctrl : ctrl_last;
 
 
-               if ((ctrl_sg & ctrl_irq_mask))
-                       nbr_of_irq++;
-
                if (dir == DMA_TO_DEVICE)
                        /* increment source address */
-                       src = sg_dma_address(sg);
+                       src = sg_phys(sg);
                else
                        /* increment destination address */
-                       dst =  sg_dma_address(sg);
+                       dst =  sg_phys(sg);
 
                bytes_to_transfer = sg_dma_len(sg);
 
@@ -310,8 +307,7 @@ coh901318_lli_fill_sg(struct coh901318_pool *pool,
        }
        spin_unlock(&pool->lock);
 
-       /* There can be many IRQs per sg transfer */
-       return nbr_of_irq;
+       return 0;
  err:
        spin_unlock(&pool->lock);
        return -EINVAL;