--- wpflash.c +++ wpflash.c @@ -5,6 +5,9 @@ #include #include #include +#include +#include +#include int do_write(int, void *, int); int do_read(int, void *, int); @@ -74,6 +77,13 @@ struct partition_table { struct partition modified; struct partition *find_partition(char *); +void usage(); +void bad_partition(char *name); +int erase_sector(int addr); +int read_object(char *filename, char *memory, int rom_size); +int read_raw(char *filename, char *memory, int rom_size); +int write_flash(int addr, char *buffer, int length); +int read_flash(int addr, char *buffer, int length); /* This structure defines the sectors on the FLASH */ @@ -199,7 +209,8 @@ find_partition(char *name) return fixup_partition(partition); partition++; } - bad_partition(); + bad_partition(name); + return NULL; } /* Initialize a "cmd" structure */ @@ -224,6 +235,7 @@ set_cmd(struct cmd *cmd, char type, int waiting for "CONTROL-A" to signal it should jump to the programming code */ +void wait_boot_prompt() { char line[256], *s; @@ -236,7 +248,7 @@ wait_boot_prompt() else if (*s == '\n') { *s = 0; if (strcmp(line, "Enter CTRL-A to enter programmer.") == 0) - return 1; + return; s = line; } else { s++; @@ -246,6 +258,7 @@ wait_boot_prompt() /* Erase a partition */ +int erase_partition(char *name) { struct partition *partition = find_partition(name); @@ -328,16 +341,18 @@ erase_partition(char *name) { } } printf("done.\n"); + + return 0; } /* Program a partition */ +int program_partition(char *name, char *filename, int hexdump) { struct partition *partition = find_partition(name); int addr, maxaddr, maxpgm, addrincr, startaddr; - int i; /* Load data to be programmed in either hex or binary format */ @@ -384,6 +399,7 @@ program_partition(char *name, char *file /* Read a partition */ +int read_partition(char *name, char *filename) { struct partition *partition = find_partition(name); @@ -421,13 +437,17 @@ read_partition(char *name, char *filenam return(0); } +int pp_open(); +int hello(); +int initialize(); +int device_id(int *deviceID1, int *deviceID2); +int device_id_v0(int *deviceID1, int *deviceID2); +int double_wide(); +int parse_flash_params(char *filename); + +int main(int argc, char **argv) { - struct termios termios; - char c; - int i; - int cpid; - int count; - int maxcount; + struct termios termios; int version; int deviceID1, deviceID2; struct flash_chip *f; @@ -607,6 +627,8 @@ main(int argc, char **argv) { /* If we got to here, an invalid operation was specified */ usage(); + + return 0; } /* Reads a block of data from the flash. @@ -632,7 +654,7 @@ read_flash(int addr, char *buffer, int l for (count = 0; count < length + 1; count = count + readl) { readl = do_read(sfd, buffer+count, length+1-count); if (readl == 0) - exit; + exit(0); } /* Check checksum at end of data */ @@ -662,7 +684,6 @@ write_flash(int addr, char *buffer, int struct cmd cmd; int count; int checksum; - int readl; char checksumbuf[1]; /* Build and send "W" command to programmer. @@ -705,6 +726,7 @@ write_flash(int addr, char *buffer, int /* Send initialize command */ +int initialize() { struct cmd cmd; char checksumbuf[1]; @@ -770,6 +792,7 @@ int device_id_v0(int *deviceID1, int *de Note supported on Version 0 programmers. */ +int double_wide() { struct cmd cmd; char checksumbuf[1]; @@ -835,6 +858,7 @@ hello() { /* Send erase (whole flash) command */ +int erase() { struct cmd cmd; char checksumbuf[1]; @@ -857,6 +881,7 @@ erase() { /* Send erase sector command */ +int erase_sector(int addr) { struct cmd cmd; char checksumbuf[1]; @@ -900,7 +925,7 @@ hex(char c) { int parse_line(char *buffer, char *mem, int rom_size, int *max_mem) { char *c = buffer; - unsigned int address, word_addr; + unsigned int address; unsigned int length,type; unsigned int checksum = 0; int count = 0; @@ -1020,10 +1045,7 @@ int read_raw(char *filename, char *memory, int rom_size) { FILE *f; - char line[80]; - int lines_read = 0; int count = 0; - int bytes ; static int max_mem; max_mem = 0; @@ -1042,7 +1064,7 @@ read_raw(char *filename, char *memory, i exit(1); } - while (count = fread(memory, 1, 1024, f)) { + while ((count = fread(memory, 1, 1024, f))) { memory += count; max_mem += count; } @@ -1053,12 +1075,13 @@ read_raw(char *filename, char *memory, i return max_mem; //return highest memory address used } -bad_partition(char *name) +void bad_partition(char *name) { fprintf(stderr, "Unknown partition: %s\n\n", name); usage(); } +void usage() { struct partition *partition = partition_table; @@ -1077,6 +1100,7 @@ usage() { exit(1); } +void pp_write(int fd, char value) { u_char d = value;