• Home
  • Raw
  • Download

Lines Matching +full:idma +full:- +full:addr

2  *  linux/arch/arm/mach-rpc/dma.c
15 #include <linux/dma-mapping.h>
50 #define ENDA (IOMD_IO0ENDA - IOMD_IO0CURA)
51 #define CURB (IOMD_IO0CURB - IOMD_IO0CURA)
52 #define ENDB (IOMD_IO0ENDB - IOMD_IO0CURA)
53 #define CR (IOMD_IO0CR - IOMD_IO0CURA)
54 #define ST (IOMD_IO0ST - IOMD_IO0CURA)
56 static void iomd_get_next_sg(struct scatterlist *sg, struct iomd_dma *idma) in iomd_get_next_sg() argument
60 if (idma->dma.sg) { in iomd_get_next_sg()
61 sg->dma_address = idma->dma_addr; in iomd_get_next_sg()
62 offset = sg->dma_address & ~PAGE_MASK; in iomd_get_next_sg()
64 end = offset + idma->dma_len; in iomd_get_next_sg()
72 sg->length = end - TRANSFER_SIZE; in iomd_get_next_sg()
74 idma->dma_len -= end - offset; in iomd_get_next_sg()
75 idma->dma_addr += end - offset; in iomd_get_next_sg()
77 if (idma->dma_len == 0) { in iomd_get_next_sg()
78 if (idma->dma.sgcount > 1) { in iomd_get_next_sg()
79 idma->dma.sg = sg_next(idma->dma.sg); in iomd_get_next_sg()
80 idma->dma_addr = idma->dma.sg->dma_address; in iomd_get_next_sg()
81 idma->dma_len = idma->dma.sg->length; in iomd_get_next_sg()
82 idma->dma.sgcount--; in iomd_get_next_sg()
84 idma->dma.sg = NULL; in iomd_get_next_sg()
90 sg->dma_address = 0; in iomd_get_next_sg()
91 sg->length = 0; in iomd_get_next_sg()
94 sg->length |= flags; in iomd_get_next_sg()
99 struct iomd_dma *idma = dev_id; in iomd_dma_handle() local
100 unsigned long base = idma->base; in iomd_dma_handle()
109 if ((idma->state ^ status) & DMA_ST_AB) in iomd_dma_handle()
110 iomd_get_next_sg(&idma->cur_sg, idma); in iomd_dma_handle()
115 iomd_writel(idma->cur_sg.dma_address, base + CURA); in iomd_dma_handle()
116 iomd_writel(idma->cur_sg.length, base + ENDA); in iomd_dma_handle()
117 idma->state = DMA_ST_AB; in iomd_dma_handle()
122 iomd_writel(idma->cur_sg.dma_address, base + CURB); in iomd_dma_handle()
123 iomd_writel(idma->cur_sg.length, base + ENDB); in iomd_dma_handle()
124 idma->state = 0; in iomd_dma_handle()
129 idma->cur_sg.length == (DMA_END_S|DMA_END_L)) in iomd_dma_handle()
133 idma->state = ~DMA_ST_AB; in iomd_dma_handle()
141 struct iomd_dma *idma = container_of(dma, struct iomd_dma, dma); in iomd_request_dma() local
143 return request_irq(idma->irq, iomd_dma_handle, in iomd_request_dma()
144 0, idma->dma.device_id, idma); in iomd_request_dma()
149 struct iomd_dma *idma = container_of(dma, struct iomd_dma, dma); in iomd_free_dma() local
151 free_irq(idma->irq, idma); in iomd_free_dma()
156 struct iomd_dma *idma = container_of(dma, struct iomd_dma, dma); in iomd_enable_dma() local
157 unsigned long dma_base = idma->base; in iomd_enable_dma()
160 if (idma->dma.invalid) { in iomd_enable_dma()
161 idma->dma.invalid = 0; in iomd_enable_dma()
164 * Cope with ISA-style drivers which expect cache in iomd_enable_dma()
167 if (!idma->dma.sg) { in iomd_enable_dma()
168 idma->dma.sg = &idma->dma.buf; in iomd_enable_dma()
169 idma->dma.sgcount = 1; in iomd_enable_dma()
170 idma->dma.buf.length = idma->dma.count; in iomd_enable_dma()
171 idma->dma.buf.dma_address = dma_map_single(NULL, in iomd_enable_dma()
172 idma->dma.addr, idma->dma.count, in iomd_enable_dma()
173 idma->dma.dma_mode == DMA_MODE_READ ? in iomd_enable_dma()
177 idma->dma_addr = idma->dma.sg->dma_address; in iomd_enable_dma()
178 idma->dma_len = idma->dma.sg->length; in iomd_enable_dma()
181 idma->state = DMA_ST_AB; in iomd_enable_dma()
184 if (idma->dma.dma_mode == DMA_MODE_READ) in iomd_enable_dma()
188 enable_irq(idma->irq); in iomd_enable_dma()
193 struct iomd_dma *idma = container_of(dma, struct iomd_dma, dma); in iomd_disable_dma() local
194 unsigned long dma_base = idma->base; in iomd_disable_dma()
198 if (idma->state != ~DMA_ST_AB) in iomd_disable_dma()
199 disable_irq(idma->irq); in iomd_disable_dma()
271 if (fdma->dma.sg) in floppy_enable_dma()
274 if (fdma->dma.dma_mode == DMA_MODE_READ) { in floppy_enable_dma()
277 fiqhandler_length = &floppy_fiqin_end - &floppy_fiqin_start; in floppy_enable_dma()
281 fiqhandler_length = &floppy_fiqout_end - &floppy_fiqout_start; in floppy_enable_dma()
284 regs.ARM_r9 = fdma->dma.count; in floppy_enable_dma()
285 regs.ARM_r10 = (unsigned long)fdma->dma.addr; in floppy_enable_dma()
295 enable_fiq(fdma->fiq); in floppy_enable_dma()
301 disable_fiq(fdma->fiq); in floppy_disable_dma()
320 * This is virtual DMA - we don't need anything here.