123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- --- wpflash.c
- +++ wpflash.c
- @@ -5,6 +5,9 @@
- #include <termios.h>
- #include <linux/ppdev.h>
- #include <sys/ioctl.h>
- +#include <unistd.h>
- +#include <stdlib.h>
- +#include <string.h>
-
- 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;
|