| plan 9 kernel history: overview | file list | diff list |
1992/0411/pc/devether.c (diff list | history)
| 1992/0410/sys/src/9/pc/devether.c:26,32 – 1992/0411/sys/src/9/pc/devether.c:26,32 (short | long | prev | next) | ||
| 1992/0403 | enum { IObase = 0x360, | |
| 1992/0410 |
| |
| 1992/0411 | RAMbase = 0xC8000, | |
| 1992/0404 | RAMsize = 8*1024, BUFsize = 256, | |
| 1992/0403 | ||
| 1992/0410/sys/src/9/pc/devether.c:143,148 – 1992/0411/sys/src/9/pc/devether.c:143,172 | ||
| 1992/0403 | }; static Ctlr ctlr[Nctlr]; | |
| 1992/0411 | static Etherpkt txpkt; static void xmemmove(void *to, void *from, long len) { ushort *t, *f; int s; Ctlr *cp = &ctlr[0]; uchar reg; t = to; f = from; len = (len+1)/2; s = splhi(); reg = inb(cp->iobase+0x05); outb(cp->iobase+Imr, 0); outb(cp->iobase+0x05, 0x80|reg); while(len--) *t++ = *f++; outb(cp->iobase+0x05, reg); outb(cp->iobase+Imr, 0x1F); splx(s); } | |
| 1992/0407 | static int isxfree(void *arg) { | |
| 1992/0410/sys/src/9/pc/devether.c:208,213 – 1992/0411/sys/src/9/pc/devether.c:232,238 | ||
| 1992/0403 | */ | |
| 1992/0407 | qlock(&cp->xl); | |
| 1992/0403 | if(waserror()){ | |
| 1992/0411 | freeb(bp); | |
| 1992/0407 | qunlock(&cp->xl); | |
| 1992/0403 | nexterror(); } | |
| 1992/0410/sys/src/9/pc/devether.c:215,222 – 1992/0411/sys/src/9/pc/devether.c:240,249 | ||
| 1992/0403 | /* | |
| 1992/0407 | * Wait till we get an output buffer | |
| 1992/0403 | */ | |
| 1992/0407 |
| |
| 1992/0411 | tsleep(&cp->xr, isxfree, cp, 1000); if(isxfree(cp) == 0) print("Tx wedged\n"); p = &txpkt; | |
| 1992/0403 | /* * copy message into buffer | |
| 1992/0410/sys/src/9/pc/devether.c:244,249 – 1992/0411/sys/src/9/pc/devether.c:271,277 | ||
| 1992/0407 | * give packet a local address | |
| 1992/0403 | */ | |
| 1992/0407 | memmove(p->s, cp->ea, sizeof(cp->ea)); | |
| 1992/0411 | xmemmove(cp->xpkt, p, len); | |
| 1992/0403 | /* | |
| 1992/0407 | * start the transmission | |
| 1992/0410/sys/src/9/pc/devether.c:445,462 – 1992/0411/sys/src/9/pc/devether.c:473,488 | ||
| 1992/0403 | { | |
| 1992/0404 | Ctlr *cp = &ctlr[0]; | |
| 1992/0403 | int i; | |
| 1992/0409 |
| |
| 1992/0411 | uchar reg; | |
| 1992/0403 | ||
| 1992/0404 | cp->iobase = IObase; | |
| 1992/0409 |
| |
| 1992/0410 |
| |
| 1992/0411 | reg = 0x40|inb(cp->iobase); outb(cp->iobase, reg); reg = 0x40|inb(cp->iobase+0x05); outb(cp->iobase+0x05, reg); | |
| 1992/0409 | for(i = 0; i < 0x10; i++) print("#%2.2ux ", inb(cp->iobase+i)); print("\n"); | |
| 1992/0410 |
| |
| 1992/0404 | for(i = 0; i < sizeof(cp->ea); i++) cp->ea[i] = inb(cp->iobase+EA+i); | |
| 1992/0408 | init(cp); | |
| 1992/0410/sys/src/9/pc/devether.c:512,520 – 1992/0411/sys/src/9/pc/devether.c:538,546 | ||
| 1992/0404 | } if(waserror() == 0){ | |
| 1992/0410 | bp = allocb(len0+len1); | |
| 1992/0411 | xmemmove(bp->rptr, d0, len0); | |
| 1992/0410 | if(len1) | |
| 1992/0411 | xmemmove(bp->rptr+len0, d1, len1); | |
| 1992/0410 | bp->wptr += len0+len1; | |
| 1992/0404 | bp->flags |= S_DELIM; | |
| 1992/0410 | PUTNEXT(tp->q, bp); | |
| 1992/0410/sys/src/9/pc/devether.c:683,689 – 1992/0411/sys/src/9/pc/devether.c:709,715 | ||
| 1992/0409 | } void | |
| 1992/0411 | consdebug(void) | |
| 1992/0409 | { Ctlr *cp = &ctlr[0]; uchar bnry, curr, isr; | |