1 /* 2 * Copyright (c) 1986 MICOM-Interlan, Inc., Boxborough Mass. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 * 6 */ 7 #ifndef lint 8 char copyright[] = 9 "@(#) Copyright (c) 1986 MICOM-Interlan, Inc., Boxborough Mass.\n\ 10 All rights reserved.\n"; 11 #endif not lint 12 13 #ifndef lint 14 static char sccsid[] = "@(#)npload.c 6.2 (Berkeley) 02/20/86"; 15 #endif not lint 16 17 #include <stdio.h> 18 #include <fcntl.h> 19 #include "npcmd.h" 20 #include <sys/ioctl.h> 21 22 extern int errno; 23 24 main(argc,argv) 25 int argc; 26 char **argv; 27 { 28 29 int ret; 30 int ed; 31 int fd; 32 int nbyte; 33 char *fname; 34 char ibuf[1024]; 35 char obuf[1024]; 36 long stadd = 0x400; 37 char *devname = "/dev/np00"; 38 39 switch (argc) { 40 case 3: 41 /* Pathname for device to be loaded */ 42 devname = argv[2]; 43 case 2: 44 /* Name of the image file to be loaded */ 45 fname = argv[1]; 46 break; 47 default: 48 printf("usage: npload imagefile [device]\n"); 49 exit(1); 50 } 51 /* Open the device to be loaded */ 52 53 if((ed = open(devname,O_RDWR)) == -1) { 54 char fullpath[50]; 55 (void) sprintf(fullpath, "/dev/%s", devname); 56 if((ed = open(devname,O_RDWR)) == -1) { 57 fprintf(stderr, 58 "%s unable to open device %s errno = %d\n", 59 argv[0], devname, errno); 60 exit(2); 61 } 62 } 63 64 /* Open the image file */ 65 66 if((fd = open(fname,O_RDONLY)) == -1) { 67 fprintf(stderr,"%s: unable to open file %s errno = %d\n", 68 argv[0],fname,errno); 69 exit(3); 70 } 71 72 /* Reset the specified device */ 73 74 if(ioctl(ed,NPRESET | IOC_VOID,&stadd) == -1) { 75 fprintf(stderr,"unable to reset %s errno = %d\n",devname,errno); 76 exit(4); 77 } 78 79 /* Seek to address 400 on the device */ 80 81 if(lseek(ed,(long)0x400,0) == -1) { 82 fprintf(stderr,"seek failed on %s errno = %d.\n",devname,errno); 83 exit(5); 84 } 85 86 /* Seek to address 400 on the image file */ 87 88 if(lseek(fd,(long)0x400,0) == -1) { 89 fprintf(stderr,"seek failed on %s errno = %d.\n",fname,errno); 90 exit(6); 91 } 92 93 /* Read from the image file and write to the device */ 94 95 while((nbyte = read(fd,ibuf,1024)) > 0) { 96 97 if((ret = write(ed,ibuf,nbyte)) == -1) { 98 fprintf(stderr,"Bad write to %s errno = %d\n", 99 argv[0],errno); 100 exit(7); 101 } 102 } 103 104 /* Issue a begin execution command to the device */ 105 106 if(ioctl(ed,NPSTART | IOC_VOID,&stadd) == -1) { 107 fprintf(stderr,"Start error on %s errno = %d.\n",devname,errno); 108 exit(8); 109 } 110 111 close(fd); 112 close(ed); 113 114 exit(0); 115 } 116