Annotation of researchv8dc/sys/dev/dumpld.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *             D U M P  L D
        !             3:  *
        !             4:  * This line discipline is used for debugging.
        !             5:  * It passes on everything given to it, in the same order,
        !             6:  * but at the same time it creates a log of the message type
        !             7:  * and contents for each message.
        !             8:  *
        !             9:  *
        !            10:  * Written by Kurt Gollhardt  (Nirvonics, Inc.)
        !            11:  * Last update Sat Mar 30 15:17:01 1985
        !            12:  *
        !            13:  */
        !            14: 
        !            15: #include "../h/param.h"
        !            16: #include "../h/systm.h"
        !            17: #include "../h/stream.h"
        !            18: #include "../h/ioctl.h"
        !            19: #include "../h/ttyld.h"
        !            20: #include "../h/conf.h"
        !            21: #include "../h/dumpl.h"
        !            22: 
        !            23: #include "dumpld.h"
        !            24: #if NDUMPLD > 0
        !            25: 
        !            26: int  dumpput(), dumpopen(), dumpclose();
        !            27: 
        !            28: static struct qinit rinit = { dumpput, NULL, dumpopen, dumpclose, 300, 0 },
        !            29:                     winit = { dumpput, NULL, dumpopen, dumpclose, 300, 200 };
        !            30: struct streamtab dumpinfo = { &rinit, &winit };
        !            31: 
        !            32: #define DUMPSIZE    4096
        !            33: 
        !            34: static char    dumpbuf[NDUMPLD*2][DUMPSIZE];
        !            35: struct dumpld  dumpld[NDUMPLD*2];
        !            36: struct dumpinf dumpinf[NDUMPLD*2];
        !            37: 
        !            38: int ndumpbuf = NDUMPLD * 2;
        !            39: int dumpver = 1;
        !            40: 
        !            41: 
        !            42: dumpopen(q, dev)
        !            43:      struct queue   *q;
        !            44:      dev_t          dev;
        !            45: {
        !            46:      register struct dumpld *di;
        !            47:      register struct dumpinf *dinf;
        !            48: 
        !            49:      if (q->ptr)
        !            50:           return 1;
        !            51:      for (di = dumpld; di < &dumpld[NDUMPLD*2]; di += 2)
        !            52:           if (di->base == (char *)0)
        !            53:               break;
        !            54:      if (di == &dumpld[NDUMPLD*2])
        !            55:           return 0;
        !            56: 
        !            57:      dinf = &dumpinf[di - dumpld];
        !            58: 
        !            59:      di->fillp = di->base = dumpbuf[di - dumpld];
        !            60:      di->size = DUMPSIZE;
        !            61:      q->ptr = (caddr_t)di;
        !            62:      ++di;
        !            63:      di->fillp = di->base = dumpbuf[di - dumpld];
        !            64:      di->size = DUMPSIZE;
        !            65: 
        !            66:      dinf->dev = dev;
        !            67:      (++dinf)->dev = dev;
        !            68: 
        !            69:      WR(q)->ptr = (caddr_t)di;
        !            70:      dumpupdate(q);
        !            71:      dumpupdate(WR(q));
        !            72: 
        !            73:      return 1;
        !            74: }
        !            75: 
        !            76: 
        !            77: dumpclose(q)
        !            78:      struct queue   *q;
        !            79: {
        !            80:      register struct dumpld *di = (struct dumpld *)q->ptr;
        !            81: 
        !            82:      dumpupdate(q);
        !            83:      dumpupdate(WR(q));
        !            84: 
        !            85:      di->base = (char *)0;
        !            86:      (di+1)->base = (char *)0;
        !            87:      q->ptr = (caddr_t)0;
        !            88: }
        !            89: 
        !            90: 
        !            91: dumpput(q, bp)
        !            92:      struct queue   *q;
        !            93:      register struct block    *bp;
        !            94: {
        !            95:      register struct dumpld *di = (struct dumpld *)q->ptr;
        !            96:      register u_char     *p;
        !            97:      struct dumpheader  hd;
        !            98:      int  ps = spl6();
        !            99: 
        !           100:      hd.type = bp->type;
        !           101:      hd.class = bp->class;
        !           102:      hd.count = bp->wptr - bp->rptr;
        !           103:      for (p = (u_char *)&hd; p < (u_char *)(&hd + 1);)
        !           104:          dumpchr(di, *p++);
        !           105:      for (p = bp->rptr; p < bp->wptr;)
        !           106:          dumpchr(di, *p++);
        !           107: 
        !           108:      (*q->next->qinfo->putp) (q->next, bp);
        !           109:      dumpupdate(q);
        !           110: 
        !           111:      splx(ps);
        !           112: }
        !           113: 
        !           114: 
        !           115: dumpchr(di, c)
        !           116:      register struct dumpld *di;
        !           117:      char c;
        !           118: {
        !           119:      *(di->fillp)++ = c;
        !           120:      if (di->fillp >= di->base + di->size)
        !           121:           di->fillp = di->base;
        !           122: }
        !           123: 
        !           124: 
        !           125: dumpupdate(q)
        !           126:      register struct queue    *q;
        !           127: {
        !           128:      register struct queue    *qnext = q->next;
        !           129: 
        !           130:      q->flag |= qnext->flag & (QFULL|QWANTR|QBIGB) | backq(q)->flag & QDELIM;
        !           131:      qnext->flag |= q->flag & QWANTW;
        !           132:      q->count = qnext->count;
        !           133: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.