]>
Commit | Line | Data |
---|---|---|
1 | #include <bfin_sram.h> | |
2 | #include <stdint.h> | |
3 | #include <stdio.h> | |
4 | #include <stdlib.h> | |
5 | #include <string.h> | |
6 | #include <unistd.h> | |
7 | ||
8 | int main(int argc, char *argv[]) | |
9 | { | |
10 | void *l1_addr = (void *)0xf0000000; | |
11 | void *src_addr, *dst_addr; | |
12 | size_t count; | |
13 | enum { AUTO, DMA, CORE } use_dma = AUTO; | |
14 | ||
15 | if (argc > 1) { | |
16 | if (!strcmp(argv[1], "-d")) | |
17 | use_dma = DMA; | |
18 | else if (!strcmp(argv[1], "-c")) | |
19 | use_dma = CORE; | |
20 | if (use_dma != AUTO) | |
21 | --argc, ++argv; | |
22 | } | |
23 | ||
24 | if (argc != 3) { | |
25 | fprintf(stderr, | |
26 | "Usage: dump [-d|-c] <address> <count>\n" | |
27 | " -d - use DMA for copy (default if address >= %p)\n" | |
28 | " -c - use core loads (default if address < %p)\n" | |
29 | "Values are in hex.\n", l1_addr, l1_addr); | |
30 | return EXIT_FAILURE; | |
31 | } | |
32 | ||
33 | src_addr = (void *)strtoul(argv[1], NULL, 16); | |
34 | count = strtoul(argv[2], NULL, 16); | |
35 | if (use_dma == AUTO) | |
36 | use_dma = (src_addr >= l1_addr ? DMA : CORE); | |
37 | ||
38 | fprintf(stderr, "Copying %zi bytes from %p\n", count, src_addr); | |
39 | ||
40 | dst_addr = malloc(count); | |
41 | fprintf(stderr, "%smemcpy(%p, %p, %zi);\n", | |
42 | (use_dma == DMA ? "dma_" : ""), | |
43 | dst_addr, src_addr, count); | |
44 | if (use_dma == DMA) | |
45 | dma_memcpy(dst_addr, src_addr, count); | |
46 | else | |
47 | memcpy(dst_addr, src_addr, count); | |
48 | fprintf(stderr, "write(%i, %p, %zi);\n", 1, dst_addr, count); | |
49 | write(1, dst_addr, count); | |
50 | ||
51 | return 0; | |
52 | } |