FreeCalypso > hg > freecalypso-tools
comparison target-utils/dspdump/dumpops.c @ 542:b95b251b33eb
dspdump: bigdump command implemented
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 28 Oct 2019 20:42:06 +0000 |
| parents | target-utils/dspdump/mandump.c@27b5526ba1a8 |
| children | 947c6a443a9c |
comparison
equal
deleted
inserted
replaced
| 541:a58563d16e1d | 542:b95b251b33eb |
|---|---|
| 1 #include <sys/types.h> | |
| 2 #include "types.h" | |
| 3 #include "leadapi.h" | |
| 4 | |
| 5 void | |
| 6 cmd_dump(argbulk) | |
| 7 char *argbulk; | |
| 8 { | |
| 9 char *argv[4]; | |
| 10 u_long mode, addr, len; | |
| 11 int rc; | |
| 12 volatile u16 *api; | |
| 13 unsigned n; | |
| 14 | |
| 15 if (parse_args(argbulk, 3, 3, argv, 0) < 0) | |
| 16 return; | |
| 17 if (parse_hexarg(argv[0], 4, &mode) < 0) { | |
| 18 printf("ERROR: mode must be a valid 16-bit hex value\n"); | |
| 19 return; | |
| 20 } | |
| 21 if (parse_hexarg(argv[1], 8, &addr) < 0) { | |
| 22 printf("ERROR: addr must be a valid 32-bit hex value\n"); | |
| 23 return; | |
| 24 } | |
| 25 if (parse_hexarg(argv[2], 4, &len) < 0) { | |
| 26 printf("ERROR: len must be a valid 16-bit hex value\n"); | |
| 27 return; | |
| 28 } | |
| 29 rc = boot_dsp_dump_agent(); | |
| 30 if (rc < 0) | |
| 31 return; /* error msg already printed */ | |
| 32 rc = dsp_read_op((u16)mode, (u32)addr, (u16)len); | |
| 33 if (rc < 0) { | |
| 34 printf("ERROR: DSP timeout on read operation\n"); | |
| 35 return; | |
| 36 } | |
| 37 api = (volatile u16 *) APIF_ADDR; | |
| 38 for (n = 0; n < len; n++) | |
| 39 printf("%04X\n", *api++); | |
| 40 } | |
| 41 | |
| 42 dump_large_section(mode, addr, len) | |
| 43 u16 mode; | |
| 44 u32 addr, len; | |
| 45 { | |
| 46 u32 chunk, remain; | |
| 47 volatile u16 *api; | |
| 48 int rc; | |
| 49 | |
| 50 for (remain = len; remain; remain -= chunk) { | |
| 51 chunk = remain; | |
| 52 if (chunk > MAX_BLOCK_SIZE) | |
| 53 chunk = MAX_BLOCK_SIZE; | |
| 54 rc = dsp_read_op(mode, addr, chunk); | |
| 55 if (rc < 0) { | |
| 56 printf("ERROR: DSP timeout on read operation\n"); | |
| 57 return(rc); | |
| 58 } | |
| 59 api = (volatile u16 *) APIF_ADDR; | |
| 60 for (; chunk; chunk--) { | |
| 61 if (!(addr & 0xF)) | |
| 62 printf("%05x : ", addr); | |
| 63 printf("%04x%c", *api++, ((addr&15)==15)?'\n':' '); | |
| 64 addr++; | |
| 65 } | |
| 66 } | |
| 67 putchar('\n'); | |
| 68 return(0); | |
| 69 } | |
| 70 | |
| 71 void | |
| 72 cmd_bigdump(argbulk) | |
| 73 char *argbulk; | |
| 74 { | |
| 75 char *argv[4]; | |
| 76 u_long mode, addr, len; | |
| 77 int rc; | |
| 78 | |
| 79 if (parse_args(argbulk, 3, 3, argv, 0) < 0) | |
| 80 return; | |
| 81 if (parse_hexarg(argv[0], 4, &mode) < 0) { | |
| 82 printf("ERROR: mode must be a valid 16-bit hex value\n"); | |
| 83 return; | |
| 84 } | |
| 85 if (parse_hexarg(argv[1], 8, &addr) < 0) { | |
| 86 printf("ERROR: addr must be a valid 32-bit hex value\n"); | |
| 87 return; | |
| 88 } | |
| 89 if (parse_hexarg(argv[2], 8, &len) < 0) { | |
| 90 printf("ERROR: len must be a valid 32-bit hex value\n"); | |
| 91 return; | |
| 92 } | |
| 93 rc = boot_dsp_dump_agent(); | |
| 94 if (rc < 0) | |
| 95 return; /* error msg already printed */ | |
| 96 dump_large_section((u16)mode, (u32)addr, (u32)len); | |
| 97 } |
