2 * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax
5 #include <asm/svinto.h>
10 void *dma_memcpy(void *pdst
,
14 static etrax_dma_descr indma
, outdma
;
16 D(printk(KERN_DEBUG
"dma_memcpy %d bytes... ", pn
));
19 *R_GEN_CONFIG
= genconfig_shadow
=
20 (genconfig_shadow
& ~0x3c0000) |
21 IO_STATE(R_GEN_CONFIG
, dma6
, intdma7
) |
22 IO_STATE(R_GEN_CONFIG
, dma7
, intdma6
);
24 indma
.sw_len
= outdma
.sw_len
= pn
;
25 indma
.ctrl
= d_eol
| d_eop
;
30 *R_DMA_CH6_FIRST
= &indma
;
31 *R_DMA_CH7_FIRST
= &outdma
;
32 *R_DMA_CH6_CMD
= IO_STATE(R_DMA_CH6_CMD
, cmd
, start
);
33 *R_DMA_CH7_CMD
= IO_STATE(R_DMA_CH7_CMD
, cmd
, start
);
35 while (*R_DMA_CH7_CMD
== 1)
36 /* wait for completion */;
38 D(printk(KERN_DEBUG
"done\n"));