]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/arm/mach-rpc/dma.c
Merge branch 'linus' into tracing/core
[karo-tx-linux.git] / arch / arm / mach-rpc / dma.c
index 0163592b2af01d94e47b5abc65c0e8dda4e509c6..c47d974d52bdacbe5fddcc40b9a630c2f5a914f0 100644 (file)
 #include <asm/mach/dma.h>
 #include <asm/hardware/iomd.h>
 
+struct iomd_dma {
+       struct dma_struct       dma;
+       unsigned int            state;
+       unsigned long           base;           /* Controller base address */
+       int                     irq;            /* Controller IRQ */
+       struct scatterlist      cur_sg;         /* Current controller buffer */
+       dma_addr_t              dma_addr;
+       unsigned int            dma_len;
+};
+
 #if 0
 typedef enum {
        dma_size_8      = 1,
@@ -49,10 +59,10 @@ static void iomd_get_next_sg(struct scatterlist *sg, struct iomd_dma *idma)
        unsigned long end, offset, flags = 0;
 
        if (idma->dma.sg) {
-               sg->dma_address = idma->dma.sg->dma_address;
+               sg->dma_address = idma->dma_addr;
                offset = sg->dma_address & ~PAGE_MASK;
 
-               end = offset + idma->dma.sg->length;
+               end = offset + idma->dma_len;
 
                if (end > PAGE_SIZE)
                        end = PAGE_SIZE;
@@ -62,12 +72,14 @@ static void iomd_get_next_sg(struct scatterlist *sg, struct iomd_dma *idma)
 
                sg->length = end - TRANSFER_SIZE;
 
-               idma->dma.sg->length -= end - offset;
-               idma->dma.sg->dma_address += end - offset;
+               idma->dma_len -= end - offset;
+               idma->dma_addr += end - offset;
 
-               if (idma->dma.sg->length == 0) {
+               if (idma->dma_len == 0) {
                        if (idma->dma.sgcount > 1) {
-                               idma->dma.sg++;
+                               idma->dma.sg = sg_next(idma->dma.sg);
+                               idma->dma_addr = idma->dma.sg->dma_address;
+                               idma->dma_len = idma->dma.sg->length;
                                idma->dma.sgcount--;
                        } else {
                                idma->dma.sg = NULL;
@@ -242,6 +254,11 @@ static struct fiq_handler fh = {
        .name   = "floppydma"
 };
 
+struct floppy_dma {
+       struct dma_struct       dma;
+       unsigned int            fiq;
+};
+
 static void floppy_enable_dma(unsigned int chan, dma_t *dma)
 {
        struct floppy_dma *fdma = container_of(dma, struct floppy_dma, dma);