summaryrefslogtreecommitdiff
path: root/doc_loadbios.c
diff options
context:
space:
mode:
Diffstat (limited to 'doc_loadbios.c')
-rw-r--r--doc_loadbios.c250
1 files changed, 125 insertions, 125 deletions
diff --git a/doc_loadbios.c b/doc_loadbios.c
index f7ba8fa..66e2e6a 100644
--- a/doc_loadbios.c
+++ b/doc_loadbios.c
@@ -15,135 +15,135 @@ unsigned char databuf[512];
int main(int argc,char **argv)
{
- mtd_info_t meminfo;
- int ifd,ofd;
- struct stat statbuf;
- erase_info_t erase;
- unsigned long retlen, ofs, iplsize, ipltailsize;
- unsigned char *iplbuf;
- iplbuf = NULL;
-
- if (argc < 3) {
- fprintf(stderr,"You must specify a device,"
- " the source firmware file and the offset\n");
- return 1;
- }
-
- // Open and size the device
- if ((ofd = open(argv[1],O_RDWR)) < 0) {
- perror("Open flash device");
- return 1;
- }
-
- if ((ifd = open(argv[2], O_RDONLY)) < 0) {
- perror("Open firmware file\n");
- close(ofd);
- return 1;
- }
-
- if (fstat(ifd, &statbuf) != 0) {
- perror("Stat firmware file");
- goto error;
- }
+ mtd_info_t meminfo;
+ int ifd,ofd;
+ struct stat statbuf;
+ erase_info_t erase;
+ unsigned long retlen, ofs, iplsize, ipltailsize;
+ unsigned char *iplbuf;
+ iplbuf = NULL;
+
+ if (argc < 3) {
+ fprintf(stderr,"You must specify a device,"
+ " the source firmware file and the offset\n");
+ return 1;
+ }
+
+ // Open and size the device
+ if ((ofd = open(argv[1],O_RDWR)) < 0) {
+ perror("Open flash device");
+ return 1;
+ }
+
+ if ((ifd = open(argv[2], O_RDONLY)) < 0) {
+ perror("Open firmware file\n");
+ close(ofd);
+ return 1;
+ }
+
+ if (fstat(ifd, &statbuf) != 0) {
+ perror("Stat firmware file");
+ goto error;
+ }
#if 0
- if (statbuf.st_size > 65536) {
- printf("Firmware too large (%ld bytes)\n",statbuf.st_size);
- goto error;
- }
+ if (statbuf.st_size > 65536) {
+ printf("Firmware too large (%ld bytes)\n",statbuf.st_size);
+ goto error;
+ }
#endif
- if (ioctl(ofd,MEMGETINFO,&meminfo) != 0) {
- perror("ioctl(MEMGETINFO)");
- goto error;
- }
-
- iplsize = (ipltailsize = 0);
- if (argc >= 4) {
- /* DoC Millennium has IPL in the first 1K of flash memory */
- /* You may want to specify the offset 1024 to store
- the firmware next to IPL. */
- iplsize = strtoul(argv[3], NULL, 0);
- ipltailsize = iplsize % meminfo.erasesize;
- }
-
- if (lseek(ofd, iplsize - ipltailsize, SEEK_SET) < 0) {
- perror("lseek");
- goto error;
- }
-
- if (ipltailsize) {
- iplbuf = malloc(ipltailsize);
- if (iplbuf == NULL) {
- fprintf(stderr, "Not enough memory for IPL tail buffer of"
- " %lu bytes\n", (unsigned long) ipltailsize);
- goto error;
- }
- printf("Reading IPL%s area of length %lu at offset %lu\n",
- (iplsize - ipltailsize) ? " tail" : "",
- (long unsigned) ipltailsize,
- (long unsigned) (iplsize - ipltailsize));
- if (read(ofd, iplbuf, ipltailsize) != ipltailsize) {
- perror("read");
- goto error;
- }
- }
-
- erase.length = meminfo.erasesize;
-
- for (ofs = iplsize - ipltailsize ;
- ofs < iplsize + statbuf.st_size ;
- ofs += meminfo.erasesize) {
- erase.start = ofs;
- printf("Performing Flash Erase of length %lu at offset %lu\n",
- (long unsigned) erase.length, (long unsigned) erase.start);
-
- if (ioctl(ofd,MEMERASE,&erase) != 0) {
- perror("ioctl(MEMERASE)");
- goto error;
- }
- }
-
- if (lseek(ofd, iplsize - ipltailsize, SEEK_SET) < 0) {
- perror("lseek");
- goto error;
- }
-
- if (ipltailsize) {
- printf("Writing IPL%s area of length %lu at offset %lu\n",
- (iplsize - ipltailsize) ? " tail" : "",
- (long unsigned) ipltailsize,
- (long unsigned) (iplsize - ipltailsize));
- if (write(ofd, iplbuf, ipltailsize) != ipltailsize) {
- perror("write");
- goto error;
- }
- }
-
- printf("Writing the firmware of length %lu at %lu... ",
- (unsigned long) statbuf.st_size,
- (unsigned long) iplsize);
- do {
- retlen = read(ifd, databuf, 512);
- if (retlen < 512)
- memset(databuf+retlen, 0xff, 512-retlen);
- if (write(ofd, databuf, 512) != 512) {
- perror("write");
- goto error;
- }
- } while (retlen == 512);
- printf("Done.\n");
-
- if (iplbuf != NULL)
- free(iplbuf);
- close(ifd);
- close(ofd);
- return 0;
+ if (ioctl(ofd,MEMGETINFO,&meminfo) != 0) {
+ perror("ioctl(MEMGETINFO)");
+ goto error;
+ }
+
+ iplsize = (ipltailsize = 0);
+ if (argc >= 4) {
+ /* DoC Millennium has IPL in the first 1K of flash memory */
+ /* You may want to specify the offset 1024 to store
+ the firmware next to IPL. */
+ iplsize = strtoul(argv[3], NULL, 0);
+ ipltailsize = iplsize % meminfo.erasesize;
+ }
+
+ if (lseek(ofd, iplsize - ipltailsize, SEEK_SET) < 0) {
+ perror("lseek");
+ goto error;
+ }
+
+ if (ipltailsize) {
+ iplbuf = malloc(ipltailsize);
+ if (iplbuf == NULL) {
+ fprintf(stderr, "Not enough memory for IPL tail buffer of"
+ " %lu bytes\n", (unsigned long) ipltailsize);
+ goto error;
+ }
+ printf("Reading IPL%s area of length %lu at offset %lu\n",
+ (iplsize - ipltailsize) ? " tail" : "",
+ (long unsigned) ipltailsize,
+ (long unsigned) (iplsize - ipltailsize));
+ if (read(ofd, iplbuf, ipltailsize) != ipltailsize) {
+ perror("read");
+ goto error;
+ }
+ }
+
+ erase.length = meminfo.erasesize;
+
+ for (ofs = iplsize - ipltailsize ;
+ ofs < iplsize + statbuf.st_size ;
+ ofs += meminfo.erasesize) {
+ erase.start = ofs;
+ printf("Performing Flash Erase of length %lu at offset %lu\n",
+ (long unsigned) erase.length, (long unsigned) erase.start);
+
+ if (ioctl(ofd,MEMERASE,&erase) != 0) {
+ perror("ioctl(MEMERASE)");
+ goto error;
+ }
+ }
+
+ if (lseek(ofd, iplsize - ipltailsize, SEEK_SET) < 0) {
+ perror("lseek");
+ goto error;
+ }
+
+ if (ipltailsize) {
+ printf("Writing IPL%s area of length %lu at offset %lu\n",
+ (iplsize - ipltailsize) ? " tail" : "",
+ (long unsigned) ipltailsize,
+ (long unsigned) (iplsize - ipltailsize));
+ if (write(ofd, iplbuf, ipltailsize) != ipltailsize) {
+ perror("write");
+ goto error;
+ }
+ }
+
+ printf("Writing the firmware of length %lu at %lu... ",
+ (unsigned long) statbuf.st_size,
+ (unsigned long) iplsize);
+ do {
+ retlen = read(ifd, databuf, 512);
+ if (retlen < 512)
+ memset(databuf+retlen, 0xff, 512-retlen);
+ if (write(ofd, databuf, 512) != 512) {
+ perror("write");
+ goto error;
+ }
+ } while (retlen == 512);
+ printf("Done.\n");
+
+ if (iplbuf != NULL)
+ free(iplbuf);
+ close(ifd);
+ close(ofd);
+ return 0;
error:
- if (iplbuf != NULL)
- free(iplbuf);
- close(ifd);
- close(ofd);
- return 1;
+ if (iplbuf != NULL)
+ free(iplbuf);
+ close(ifd);
+ close(ofd);
+ return 1;
}