diff options
Diffstat (limited to 'arch/cris/arch-v10/lib/dmacopy.c')
-rw-r--r-- | arch/cris/arch-v10/lib/dmacopy.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/arch/cris/arch-v10/lib/dmacopy.c b/arch/cris/arch-v10/lib/dmacopy.c new file mode 100644 index 000000000000..e5fb44f505c5 --- /dev/null +++ b/arch/cris/arch-v10/lib/dmacopy.c | |||
@@ -0,0 +1,43 @@ | |||
1 | /* $Id: dmacopy.c,v 1.1 2001/12/17 13:59:27 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 | |||