]> git.wh0rd.org - home.git/blame - dump.c
cros-board: update
[home.git] / dump.c
CommitLineData
1afdf944
MF
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
8int 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}