You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
4.9 KiB

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