FreeCalypso > hg > freecalypso-tools
comparison loadtools/flmisc.c @ 668:cd48bc4c5460
fc-loadtool code: erase command split out into flerase.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 08 Mar 2020 00:29:11 +0000 |
parents | 4be92bcd1535 |
children | ba9523ca6ed8 |
comparison
equal
deleted
inserted
replaced
667:2772cf8435b4 | 668:cd48bc4c5460 |
---|---|
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <string.h> | 8 #include <string.h> |
9 #include <strings.h> | 9 #include <strings.h> |
10 #include <stdlib.h> | 10 #include <stdlib.h> |
11 #include <time.h> | |
12 #include "flash.h" | 11 #include "flash.h" |
13 | 12 |
14 extern struct flash_bank_info flash_bank_info[2]; | 13 extern struct flash_bank_info flash_bank_info[2]; |
15 | 14 |
16 flashcmd_blankchk(argc, argv, bank) | 15 flashcmd_blankchk(argc, argv, bank) |
120 return(-1); | 119 return(-1); |
121 return loadtool_memdump(bi->base_addr + offset, dumplen, argv[2], | 120 return loadtool_memdump(bi->base_addr + offset, dumplen, argv[2], |
122 format); | 121 format); |
123 } | 122 } |
124 | 123 |
125 flashcmd_erase(argc, argv, bank) | |
126 char **argv; | |
127 { | |
128 struct flash_bank_info *bi; | |
129 u_long offset, len; | |
130 char *strtoul_endp; | |
131 struct sector_info *startsec, *endsec, *sp; | |
132 int stat; | |
133 time_t start_time, finish_time; | |
134 unsigned duration, mm, ss; | |
135 | |
136 if (argc != 4) { | |
137 inv: fprintf(stderr, "usage: %s %s hex-start-offset hex-length\n", | |
138 argv[0], argv[1]); | |
139 return(-1); | |
140 } | |
141 offset = strtoul(argv[2], &strtoul_endp, 16); | |
142 if (*strtoul_endp) | |
143 goto inv; | |
144 if (flash_detect(bank, 0) < 0) | |
145 return(-1); | |
146 bi = flash_bank_info + bank; | |
147 if (offset >= bi->geom->total_size) { | |
148 fprintf(stderr, | |
149 "error: specified offset exceeds flash bank size (0x%lx)\n", | |
150 (u_long) bi->geom->total_size); | |
151 return(-1); | |
152 } | |
153 len = strtoul(argv[3], &strtoul_endp, 16); | |
154 if (*strtoul_endp) | |
155 goto inv; | |
156 if (len > bi->geom->total_size - offset) { | |
157 fprintf(stderr, | |
158 "error: specified offset+length exceed flash bank size (0x%lx)\n", | |
159 (u_long) bi->geom->total_size); | |
160 return(-1); | |
161 } | |
162 if (!len) { | |
163 printf("Zero length specified - nothing to do!\n"); | |
164 return(0); | |
165 } | |
166 /* now enforce sector alignment for both offset and length */ | |
167 if (get_flash_sector_table(bank) < 0) | |
168 return(-1); | |
169 if (get_flash_sector_range(bi, offset, len, &startsec, &endsec) < 0) | |
170 return(-1); | |
171 printf("Erasing %d sector(s)\n", endsec - startsec); | |
172 time(&start_time); | |
173 for (sp = startsec; sp < endsec; sp++) { | |
174 stat = bi->ops->erase_sector(bi, sp); | |
175 if (stat) | |
176 return(stat); | |
177 putchar('.'); | |
178 fflush(stdout); | |
179 } | |
180 time(&finish_time); | |
181 putchar('\n'); | |
182 duration = finish_time - start_time; | |
183 mm = duration / 60; | |
184 ss = duration - mm * 60; | |
185 printf("Operation completed in %um%us\n", mm, ss); | |
186 return(0); | |
187 } | |
188 | |
189 flashcmd_quickprog(argc, argv, bank) | 124 flashcmd_quickprog(argc, argv, bank) |
190 char **argv; | 125 char **argv; |
191 { | 126 { |
192 struct flash_bank_info *bi; | 127 struct flash_bank_info *bi; |
193 char *targv[4], targ_base[10]; | 128 char *targv[4], targ_base[10]; |