| plan 9 kernel history: overview | file list | diff list |
1990/1127/power/boot.c (diff list | history)
| 1990/1122/sys/src/9/power/boot.c:2,8 – 1990/1127/sys/src/9/power/boot.c:2,8 (short | long | prev | next) | ||
| 1990/0227 | #include <libc.h> #include <fcall.h> | |
| 1990/0427 |
| |
| 1990/1127 | #define DEFSYS "bit!bootes" | |
| 1990/0427 | #define DEFFILE "/mips/9" | |
| 1990/0227 | Fcall hdr; | |
| 1990/1122/sys/src/9/power/boot.c:21,36 – 1990/1127/sys/src/9/power/boot.c:21,34 | ||
| 1990/0227 | struct address { char *name; char *cmd; | |
| 1990/0721 |
| |
| 1990/0227 | } Address; Address addr[] = { | |
| 1990/0721 |
| |
| 1990/1127 | { "ross", "connect 020701005eff" }, { "bootes", "connect 080069020205" }, { "helix", "connect 080069020427" }, { "spindle", "connect 0800690202df" }, { "r70", "connect 08002b04265d" }, | |
| 1990/0227 | { 0 } }; | |
| 1990/1122/sys/src/9/power/boot.c:37,47 – 1990/1127/sys/src/9/power/boot.c:35,47 | ||
| 1990/0427 | /* * predeclared */ | |
| 1990/0721 |
| |
| 1990/0427 | int outin(char *, char *, char *, int); void prerror(char *); void error(char *); void boot(int); | |
| 1990/1127 | int dkdial(char *); int nonetdial(char *); int bitdial(char *); | |
| 1990/0227 | ||
| 1990/0427 | /* * usage: 9b [-a] [server] [file] | |
| 1990/1122/sys/src/9/power/boot.c:95,177 – 1990/1127/sys/src/9/power/boot.c:95,267 | ||
| 1990/0427 | close(fd); if(cfd > 0) close(cfd); | |
| 1990/1127 | fd = cfd = 0; | |
| 1990/0427 | boot(1); } | |
| 1990/0227 | } | |
| 1990/0427 |
| |
| 1990/1127 | int bitdial(char *arg) | |
| 1990/0227 | { | |
| 1990/0427 |
| |
| 1990/1127 | return open("#3/bit3", ORDWR); } int nonetdial(char *arg) { int efd, cfd, fd; | |
| 1990/0721 | Address *a; | |
| 1990/1127 | static int mounted; | |
| 1990/0227 | ||
| 1990/0721 |
| |
| 1990/0427 |
| |
| 1990/1127 | for(a = addr; a->name; a++){ if(strcmp(a->name, arg) == 0) break; | |
| 1990/0427 | } | |
| 1990/0721 |
| |
| 1990/0427 |
| |
| 1990/1127 | if(a->name == 0){ print("can't convert nonet address to ether address\n"); return -1; | |
| 1990/0427 | } | |
| 1990/0721 |
| |
| 1990/0227 |
| |
| 1990/0427 |
| |
| 1990/0227 |
| |
| 1990/0324 |
| |
| 1990/0427 |
| |
| 1990/1127 | if(!mounted){ /* * grab a lance channel, make it recognize ether type 0x900, * and push the nonet ethernet multiplexor onto it. */ efd = open("#l/1/ctl", 2); if(efd < 0){ prerror("opening #l/1/ctl"); return -1; | |
| 1990/0427 | } | |
| 1990/0227 |
| |
| 1990/1127 | if(write(efd, "connect 0x900", sizeof("connect 0x900")-1)<0){ close(efd); prerror("connect 0x900"); return -1; } if(write(efd, "push noether", sizeof("push noether")-1)<0){ close(efd); prerror("push noether"); return -1; } if(write(efd, "config nonet", sizeof("config nonet")-1)<0){ close(efd); prerror("config nonet"); return -1; } mounted = 1; | |
| 1990/0227 | } /* | |
| 1990/1127 | * grab a nonet channel and call up the file server | |
| 1990/0227 | */ | |
| 1990/0427 |
| |
| 1990/1127 | fd = open("#nnonet/2/data", 2); if(fd < 0) { prerror("opening #nnonet/2/data"); return -1; | |
| 1990/0427 | } | |
| 1990/1127 | cfd = open("#nnonet/2/ctl", 2); if(cfd < 0){ close(fd); fd = -1; prerror("opening #nnonet/2/ctl"); return -1; | |
| 1990/0427 | } | |
| 1990/1127 | if(write(cfd, a->cmd, strlen(a->cmd))<0){ close(cfd); close(fd); fd = cfd = -1; prerror(a->cmd); return -1; | |
| 1990/0427 | } | |
| 1990/0721 |
| |
| 1990/1127 | return fd; } int dkdial(char *arg) { int fd; char cmd[64]; static int mounted; if(!mounted){ /* * grab the hsvme and configure it for a datakit */ efd = open("#h/ctl", 2); if(efd < 0){ prerror("opening #h/ctl"); return -1; } if(write(efd, "push dkmux", sizeof("push dkmux")-1)<0){ close(efd); prerror("push dkmux"); return -1; } if(write(efd, "config 4 256 restart dk", sizeof("config 4 256 restart dk")-1)<0){ close(efd); prerror("config 4 256 restart dk"); return -1; } mounted = 1; sleep(2000); /* wait for things to settle down */ | |
| 1990/0721 | } | |
| 1990/0227 | /* | |
| 1990/1127 | * grab a datakit channel and call up the file server | |
| 1990/0227 | */ | |
| 1990/0721 |
| |
| 1990/1127 | fd = open("#kdk/5/data", 2); | |
| 1990/0427 | if(fd < 0) { | |
| 1990/0722 |
| |
| 1990/0427 |
| |
| 1990/1127 | prerror("opening #kdk/5/data"); return -1; | |
| 1990/0427 | } | |
| 1990/0721 |
| |
| 1990/1127 | cfd = open("#kdk/5/ctl", 2); | |
| 1990/0427 | if(cfd < 0){ | |
| 1990/0722 |
| |
| 1990/0427 |
| |
| 1990/1127 | close(fd); fd = -1; prerror("opening #kdk/5/ctl"); return -1; | |
| 1990/0427 | } | |
| 1990/1127 | sprint(cmd, "connect %s", arg); if(write(cfd, cmd, strlen(cmd))<0){ close(cfd); close(fd); cfd = fd = -1; prerror(cmd); return -1; } return fd; } void boot(int ask) { int n, f, tries; char *srvname; if(ask){ outin("server", sys, sbuf, sizeof(sbuf)); sys = sbuf; } for(tries = 0; tries < 5; tries++){ fd = -1; if(strncmp(sys, "bit!", 4) == 0) fd = bitdial(srvname = &sys[4]); else if(strncmp(sys, "dk!", 3) == 0) fd = dkdial(srvname = &sys[3]); else if(strncmp(sys, "nonet!", 5) == 0) fd = nonetdial(srvname = &sys[5]); else fd = nonetdial(srvname = sys); if(fd >= 0) break; print("can't connect, retrying...\n"); sleep(1000); } if(fd < 0){ print("can't connect\n"); | |
| 1990/0427 | return; } | |
| 1990/0227 |
| |
| 1990/11211 | hdr.tag = ~0; | |
| 1990/1122/sys/src/9/power/boot.c:181,191 – 1990/1127/sys/src/9/power/boot.c:271,284 | ||
| 1990/0427 | prerror("write nop"); return; } | |
| 1990/1127 | reread: | |
| 1990/0227 | n = read(fd, buf, sizeof buf); | |
| 1990/0427 | if(n <= 0){ prerror("read nop"); return; } | |
| 1990/1127 | if(n == 2) goto reread; | |
| 1990/0227 | if(convM2S(buf, &hdr, n) == 0) { print("n = %d; buf = %.2x %.2x %.2x %.2x\n", n, buf[0], buf[1], buf[2], buf[3]); | |
| 1990/1122/sys/src/9/power/boot.c:232,238 – 1990/1127/sys/src/9/power/boot.c:325,331 | ||
| 1990/11211 | } | |
| 1990/0227 | print("post..."); | |
| 1990/0721 |
| |
| 1990/1127 | sprint(buf, "#s/%s", srvname); | |
| 1990/0227 | f = create(buf, 1, 0666); if(f < 0) error("create"); | |
| 1990/1122/sys/src/9/power/boot.c:286,311 – 1990/1127/sys/src/9/power/boot.c:379,384 | ||
| 1990/11211 | errstr(buf); | |
| 1990/0227 | fprint(2, "boot: %s: %s\n", s, buf); exits(0); | |
| 1990/0427 |
| |
| 1990/0721 |
| |
| 1990/0427 |
| |
| 1990/0721 |
| |
| 1990/0427 |
| |