|
|
1.1 ! root 1: /* ttyoin.c - ttyoin */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <tty.h> ! 6: #include <io.h> ! 7: #include <slu.h> ! 8: ! 9: /*------------------------------------------------------------------------ ! 10: * ttyoin -- lower-half tty device driver for output interrupts ! 11: *------------------------------------------------------------------------ ! 12: */ ! 13: INTPROC ttyoin(iptr) ! 14: register struct tty *iptr; ! 15: { ! 16: register struct csr *cptr; ! 17: int ct; ! 18: ! 19: cptr = iptr->ioaddr; ! 20: if (iptr->ehead != iptr->etail) { ! 21: cptr->ctbuf = iptr->ebuff[iptr->etail++]; ! 22: if (iptr->etail >= EBUFLEN) ! 23: iptr->etail = 0; ! 24: return; ! 25: } ! 26: if (iptr->oheld) { /* honor flow control */ ! 27: cptr->ctstat = SLUDISABLE; ! 28: return; ! 29: } ! 30: if ((ct=scount(iptr->osem)) < OBUFLEN) { ! 31: cptr->ctbuf = iptr->obuff[iptr->otail++]; ! 32: if (iptr->otail >= OBUFLEN) ! 33: iptr->otail = 0; ! 34: if (ct > OBMINSP) ! 35: signal(iptr->osem); ! 36: else if ( ++(iptr->odsend) == OBMINSP) { ! 37: iptr->odsend = 0; ! 38: signaln(iptr->osem, OBMINSP); ! 39: } ! 40: } else ! 41: cptr->ctstat = SLUDISABLE; ! 42: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.