FreeCalypso > hg > freecalypso-tools
changeset 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 | 2772cf8435b4 |
children | ba9523ca6ed8 |
files | loadtools/Makefile loadtools/flerase.c loadtools/flmisc.c |
diffstat | 3 files changed, 83 insertions(+), 70 deletions(-) [+] |
line wrap: on
line diff
--- a/loadtools/Makefile Sat Mar 07 19:43:10 2020 +0000 +++ b/loadtools/Makefile Sun Mar 08 00:29:11 2020 +0000 @@ -15,11 +15,11 @@ ttypassthru.o LOADTOOL_OBJS= compalload.o crc32tab.o defpath.o flashid.o flashops.o \ - flcmplboot.o flconf.o fldevs.o flmain.o flmisc.o flprogbin.o \ - flprogsrec.o flutil.o hexdecode.o hwparam.o labaud.o lacrc32.o \ - ltdispatch.o ltdump.o ltexit.o lthelp.o ltmain.o ltmisc.o \ - ltpassthru.o ltscript.o romload.o srecreader.o tpinterf.o \ - tpinterf2.o tpinterf3.o tpinterfb.o + flcmplboot.o flconf.o fldevs.o flerase.o flmain.o flmisc.o \ + flprogbin.o flprogsrec.o flutil.o hexdecode.o hwparam.o \ + labaud.o lacrc32.o ltdispatch.o ltdump.o ltexit.o lthelp.o \ + ltmain.o ltmisc.o ltpassthru.o ltscript.o romload.o \ + srecreader.o tpinterf.o tpinterf2.o tpinterf3.o tpinterfb.o XRAM_OBJS= chainload.o clmain.o compalload.o crc32tab.o defexitstub.o \ defpath.o flashstubs.o hexdecode.o hwparam.o initscript.o \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loadtools/flerase.c Sun Mar 08 00:29:11 2020 +0000 @@ -0,0 +1,78 @@ +/* + * Flash erase operations are implemented here + */ + +#include <sys/types.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> +#include <time.h> +#include "flash.h" + +extern struct flash_bank_info flash_bank_info[2]; + +flashcmd_erase(argc, argv, bank) + char **argv; +{ + struct flash_bank_info *bi; + u_long offset, len; + char *strtoul_endp; + struct sector_info *startsec, *endsec, *sp; + int stat; + time_t start_time, finish_time; + unsigned duration, mm, ss; + + if (argc != 4) { +inv: fprintf(stderr, "usage: %s %s hex-start-offset hex-length\n", + argv[0], argv[1]); + return(-1); + } + offset = strtoul(argv[2], &strtoul_endp, 16); + if (*strtoul_endp) + goto inv; + if (flash_detect(bank, 0) < 0) + return(-1); + bi = flash_bank_info + bank; + if (offset >= bi->geom->total_size) { + fprintf(stderr, + "error: specified offset exceeds flash bank size (0x%lx)\n", + (u_long) bi->geom->total_size); + return(-1); + } + len = strtoul(argv[3], &strtoul_endp, 16); + if (*strtoul_endp) + goto inv; + if (len > bi->geom->total_size - offset) { + fprintf(stderr, + "error: specified offset+length exceed flash bank size (0x%lx)\n", + (u_long) bi->geom->total_size); + return(-1); + } + if (!len) { + printf("Zero length specified - nothing to do!\n"); + return(0); + } + /* now enforce sector alignment for both offset and length */ + if (get_flash_sector_table(bank) < 0) + return(-1); + if (get_flash_sector_range(bi, offset, len, &startsec, &endsec) < 0) + return(-1); + printf("Erasing %d sector(s)\n", endsec - startsec); + time(&start_time); + for (sp = startsec; sp < endsec; sp++) { + stat = bi->ops->erase_sector(bi, sp); + if (stat) + return(stat); + putchar('.'); + fflush(stdout); + } + time(&finish_time); + putchar('\n'); + duration = finish_time - start_time; + mm = duration / 60; + ss = duration - mm * 60; + printf("Operation completed in %um%us\n", mm, ss); + return(0); +}
--- a/loadtools/flmisc.c Sat Mar 07 19:43:10 2020 +0000 +++ b/loadtools/flmisc.c Sun Mar 08 00:29:11 2020 +0000 @@ -8,7 +8,6 @@ #include <string.h> #include <strings.h> #include <stdlib.h> -#include <time.h> #include "flash.h" extern struct flash_bank_info flash_bank_info[2]; @@ -122,70 +121,6 @@ format); } -flashcmd_erase(argc, argv, bank) - char **argv; -{ - struct flash_bank_info *bi; - u_long offset, len; - char *strtoul_endp; - struct sector_info *startsec, *endsec, *sp; - int stat; - time_t start_time, finish_time; - unsigned duration, mm, ss; - - if (argc != 4) { -inv: fprintf(stderr, "usage: %s %s hex-start-offset hex-length\n", - argv[0], argv[1]); - return(-1); - } - offset = strtoul(argv[2], &strtoul_endp, 16); - if (*strtoul_endp) - goto inv; - if (flash_detect(bank, 0) < 0) - return(-1); - bi = flash_bank_info + bank; - if (offset >= bi->geom->total_size) { - fprintf(stderr, - "error: specified offset exceeds flash bank size (0x%lx)\n", - (u_long) bi->geom->total_size); - return(-1); - } - len = strtoul(argv[3], &strtoul_endp, 16); - if (*strtoul_endp) - goto inv; - if (len > bi->geom->total_size - offset) { - fprintf(stderr, - "error: specified offset+length exceed flash bank size (0x%lx)\n", - (u_long) bi->geom->total_size); - return(-1); - } - if (!len) { - printf("Zero length specified - nothing to do!\n"); - return(0); - } - /* now enforce sector alignment for both offset and length */ - if (get_flash_sector_table(bank) < 0) - return(-1); - if (get_flash_sector_range(bi, offset, len, &startsec, &endsec) < 0) - return(-1); - printf("Erasing %d sector(s)\n", endsec - startsec); - time(&start_time); - for (sp = startsec; sp < endsec; sp++) { - stat = bi->ops->erase_sector(bi, sp); - if (stat) - return(stat); - putchar('.'); - fflush(stdout); - } - time(&finish_time); - putchar('\n'); - duration = finish_time - start_time; - mm = duration / 60; - ss = duration - mm * 60; - printf("Operation completed in %um%us\n", mm, ss); - return(0); -} - flashcmd_quickprog(argc, argv, bank) char **argv; {