3 void _mdma_memcpy (bu32 dst
, bu32 src
, bu32 size
, bs16 mod
)
5 bu32 count
= size
>> (abs (mod
) / 2);
9 case 4: wdsize
= WDSIZE_32
; break;
10 case 2: wdsize
= WDSIZE_16
; break;
11 default: wdsize
= WDSIZE_8
; break;
14 s
->config
= d
->config
= 0;
16 d
->irq_status
= DMA_DONE
| DMA_ERR
;
22 d
->irq_status
= DMA_DONE
| DMA_ERR
;
28 s
->irq_status
= DMA_DONE
| DMA_ERR
;
31 s
->config
= DMAEN
| wdsize
;
32 d
->config
= WNR
| DI_EN
| DMAEN
| wdsize
;
34 while (!(d
->irq_status
& DMA_DONE
))
38 void mdma_memcpy (bu32 dst
, bu32 src
, bu32 size
);
41 #define MAX_LEN 0x40000
43 bu32 _data
[(MAX_LEN
/ 4) * 2 + 3];
44 char *data
= (char *)(_data
+ 1);
49 bu32 len
, canary
, *canaries
[3];
58 /* Set up the canaries. */
59 canaries
[0] = (void *)&src
[-4];
60 canaries
[1] = (void *)&dst
[-4];
61 canaries
[2] = (void *)&dst
[len
];
62 *canaries
[0] = *canaries
[1] = *canaries
[2] = canary
;
64 memset (src
, 0xad, len
);
65 memset (dst
, 0x00, len
);
67 mdma_memcpy ((bu32
)dst
, (bu32
)src
, len
);
68 if (memcmp (src
, dst
, len
))
71 if (*canaries
[0] != canary
||
72 *canaries
[1] != canary
||
73 *canaries
[2] != canary
)
This page took 0.034157 seconds and 4 git commands to generate.