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