|
|
1.1 root 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) 2/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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.