| plan 9 kernel history: overview | file list | diff list |
1991/0828/port/devlance.c (diff list | history)
| 1991/0621/sys/src/9/port/devlance.c:183,189 – 1991/0828/sys/src/9/port/devlance.c:183,191 (short | long | prev | next) | ||
| 1990/0227 | * predeclared */ | |
| 1991/0621 | static void lancekproc(void *); | |
| 1991/0828 | static void lancestart(int, int); static void lancedump(void); | |
| 1990/0227 | /* * lance stream module definition */ | |
| 1991/0621/sys/src/9/port/devlance.c:228,234 – 1991/0828/sys/src/9/port/devlance.c:230,236 | ||
| 1991/0621 | qlock(&l); l.prom--; if(l.prom == 0) | |
| 1991/0828 | lancestart(0, 1); | |
| 1991/0621 | qunlock(&l); } | |
| 1990/0721 | qlock(et); | |
| 1991/0621/sys/src/9/port/devlance.c:266,272 – 1991/0828/sys/src/9/port/devlance.c:268,274 | ||
| 1991/0621 | qlock(&l); l.prom++; if(l.prom == 1) | |
| 1991/0828 | lancestart(PROM, 1); | |
| 1991/0621 | qunlock(&l); | |
| 1990/0227 | } freeb(bp); | |
| 1991/0621/sys/src/9/port/devlance.c:283,295 – 1991/0828/sys/src/9/port/devlance.c:285,299 | ||
| 1990/0227 | * only one transmitter at a time */ qlock(&l.tlock); | |
| 1991/0828 | if(waserror()){ qunlock(&l.tlock); nexterror(); } | |
| 1990/0227 | /* * Wait till we get an output buffer */ | |
| 1991/0828 | sleep(&l.tr, isobuf, (void *)0); | |
| 1990/0911 | p = &l.tp[l.tc]; | |
| 1990/0227 | /* | |
| 1991/0621/sys/src/9/port/devlance.c:335,340 – 1991/0828/sys/src/9/port/devlance.c:339,345 | ||
| 1990/0227 | *l.rdp = INEA|TDMD; /**/ | |
| 1990/1229 | wbflush(); | |
| 1990/0227 | qunlock(&l.tlock); | |
| 1991/0828 | poperror(); | |
| 1990/0227 | } /* | |
| 1991/0621/sys/src/9/port/devlance.c:377,383 – 1991/0828/sys/src/9/port/devlance.c:382,388 | ||
| 1990/0227 | * It may be used to restart a dead lance. */ static void | |
| 1991/0621 |
| |
| 1991/0828 | lancestart(int mode, int dolock) | |
| 1990/0227 | { int i; | |
| 1990/1228 | Etherpkt *p; | |
| 1991/0621/sys/src/9/port/devlance.c:388,395 – 1991/0828/sys/src/9/port/devlance.c:393,402 | ||
| 1991/0621 | * wait till both receiver and transmitter are * quiescent */ | |
| 1991/0828 | if(dolock){ qlock(&l.tlock); qlock(&l.rlock); } | |
| 1991/0621 | ||
| 1990/0227 | lancereset(); | |
| 1991/0621 | l.rl = 0; | |
| 1991/0621/sys/src/9/port/devlance.c:509,515 – 1991/0828/sys/src/9/port/devlance.c:516,522 | ||
| 1990/0227 | if(l.kstarted == 0){ | |
| 1990/0911 | kproc("lancekproc", lancekproc, 0);/**/ | |
| 1990/0227 | l.kstarted = 1; | |
| 1991/0621 |
| |
| 1991/0828 | lancestart(0, 1); | |
| 1990/0227 | } | |
| 1991/0316 | return devattach('l', spec); | |
| 1990/0227 | } | |
| 1991/0621/sys/src/9/port/devlance.c:625,630 – 1991/0828/sys/src/9/port/devlance.c:632,638 | ||
| 1990/0911 | int i; | |
| 1990/0227 | ushort csr; | |
| 1990/0911 | Lancemem *lm = LANCEMEM; | |
| 1991/0828 | static int misses; | |
| 1990/0227 | csr = *l.rdp; | |
| 1991/0621/sys/src/9/port/devlance.c:638,643 – 1991/0828/sys/src/9/port/devlance.c:646,653 | ||
| 1990/0227 | */ | |
| 1991/0108 | if(csr & (BABL|MISS|MERR)){ | |
| 1990/0227 | print("lance err %ux\n", csr); | |
| 1991/0828 | if(csr & MISS) lancedump(); | |
| 1991/0108 | } | |
| 1990/0227 | ||
| 1990/1231 | if(csr & IDON){ | |
| 1991/0621/sys/src/9/port/devlance.c:650,655 – 1991/0828/sys/src/9/port/devlance.c:660,666 | ||
| 1990/0227 | * look for rcv'd packets, just wakeup the input process */ | |
| 1990/1229 | if(l.rl!=l.rc && (MPus(lm->rmr[l.rl].flags) & OWN)==0){ | |
| 1991/0828 | misses = 0; | |
| 1990/0227 | wakeup(&l.rr); | |
| 1990/1229 | } | |
| 1990/0227 | ||
| 1991/0621/sys/src/9/port/devlance.c:756,759 – 1991/0828/sys/src/9/port/devlance.c:767,776 | ||
| 1991/0621 | qunlock(&l.rlock); | |
| 1990/0227 | sleep(&l.rr, isinput, 0); } | |
| 1991/0828 | } static void lancedump(void) { print("l.rl %d l.rc %d l.tl %d l.tc %d\n", l.rl, l.rc, l.tl, l.tc); | |
| 1990/0826 | } | |