1/*
2 * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax
3 */
4
5#include <asm/svinto.h>
6#include <asm/io.h>
7
8#define D(x)
9
10void *dma_memcpy(void *pdst,
11		 const void *psrc,
12		 unsigned int pn)
13{
14	static etrax_dma_descr indma, outdma;
15
16	D(printk(KERN_DEBUG "dma_memcpy %d bytes... ", pn));
17
18#if 0
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);
23#endif
24	indma.sw_len = outdma.sw_len = pn;
25	indma.ctrl = d_eol | d_eop;
26	outdma.ctrl = d_eol;
27	indma.buf = psrc;
28	outdma.buf = pdst;
29
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);
34
35	while (*R_DMA_CH7_CMD == 1)
36		/* wait for completion */;
37
38	D(printk(KERN_DEBUG "done\n"));
39}
40
41
42
43