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];