|
|
1.1 ! root 1: /* ! 2: * stream pipe ! 3: */ ! 4: #include "sp.h" ! 5: #if NSP>0 ! 6: ! 7: #include "../h/param.h" ! 8: #include "../h/systm.h" ! 9: #include "../h/stream.h" ! 10: #include "../h/conf.h" ! 11: ! 12: struct queue *spipes[256]; ! 13: ! 14: int spsrv(), spopen(), spclose(), putp(); ! 15: static struct qinit sprinit = { putq, spsrv, spopen, spclose, 128, 65 }; ! 16: struct streamtab spinfo = { &sprinit, &sprinit }; ! 17: ! 18: spopen(q, dev) ! 19: register struct queue *q; ! 20: { ! 21: register d = minor(dev); ! 22: register struct queue *oq; ! 23: ! 24: if (q->ptr) { /* already open */ ! 25: if (d&01) ! 26: return(0); /* reopening master */ ! 27: else ! 28: return(1); /* reopening slave */ ! 29: } ! 30: q->flag |= QDELIM; ! 31: if (oq = spipes[d^01]) { ! 32: if (d&01) ! 33: return(0); /* master with old lingering slave */ ! 34: WR(q)->ptr = (caddr_t)oq; ! 35: WR(oq)->ptr = (caddr_t)q; ! 36: } else if ((d&01) == 0) ! 37: return(0); /* slave opened first */ ! 38: q->ptr = (caddr_t)dev; ! 39: spipes[d] = q; ! 40: return(1); ! 41: } ! 42: ! 43: spclose(q) ! 44: register struct queue *q; ! 45: { ! 46: register struct queue *oq; ! 47: register struct block *bp; ! 48: ! 49: if (oq = (struct queue *)WR(q)->ptr) { ! 50: while (bp = getq(WR(q))) ! 51: (*oq->next->qinfo->putp)(oq->next, bp); ! 52: putctl(oq->next, M_HANGUP); ! 53: WR(oq)->ptr = NULL; ! 54: } ! 55: spipes[minor((int)q->ptr)] = NULL; ! 56: } ! 57: ! 58: spsrv(q) ! 59: register struct queue *q; ! 60: { ! 61: register struct block *bp; ! 62: register struct queue *oq; ! 63: ! 64: if (q->flag&QREADR) { ! 65: oq = (struct queue *)WR(q)->ptr; ! 66: if (oq && (q->next->flag & QFULL) == 0) ! 67: qenable(WR(oq)); ! 68: return; ! 69: } ! 70: oq = (struct queue *)q->ptr; ! 71: while (bp = getq(q)) { ! 72: if (oq == NULL) { ! 73: freeb(bp); ! 74: continue; ! 75: } ! 76: if (oq->next->flag & QFULL && bp->type < QPCTL) { ! 77: putbq(q, bp); ! 78: return; ! 79: } ! 80: (*oq->next->qinfo->putp)(oq->next, bp); ! 81: } ! 82: } ! 83: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.