File: /usr/src/linux/arch/cris/lib/dmacopy.c

1     /* $Id: dmacopy.c,v 1.1 2000/07/10 16:25:21 bjornw Exp $ 
2      *
3      * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax
4      */
5     
6     #include <asm/svinto.h>
7     #include <asm/io.h>
8     
9     #define D(x)
10     
11     void *dma_memcpy(void *pdst,
12     		 const void *psrc,
13     		 unsigned int pn)
14     {
15     	static etrax_dma_descr indma, outdma;
16     	
17     	D(printk("dma_memcpy %d bytes... ", pn));
18     
19     #if 0
20     	*R_GEN_CONFIG = genconfig_shadow = 
21     		(genconfig_shadow & ~0x3c0000) |
22     		IO_STATE(R_GEN_CONFIG, dma6, intdma7) |
23     		IO_STATE(R_GEN_CONFIG, dma7, intdma6);
24     #endif
25     	indma.sw_len = outdma.sw_len = pn;
26     	indma.ctrl = d_eol | d_eop;
27     	outdma.ctrl = d_eol;
28     	indma.buf = psrc;
29     	outdma.buf = pdst;
30     
31     	*R_DMA_CH6_FIRST = &indma;
32     	*R_DMA_CH7_FIRST = &outdma;
33     	*R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start);
34     	*R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start);
35     	
36     	while(*R_DMA_CH7_CMD == 1) /* wait for completion */ ;
37     
38     	D(printk("done\n"));
39     
40     }
41     
42     
43     
44