1: #
   2: /*
   3:  * RF disk driver
   4:  */
   5: 
   6: #include "../h/param.h"
   7: #include "../h/systm.h"
   8: #include "../h/buf.h"
   9: #include "../h/conf.h"
  10: #include "../h/dir.h"
  11: #include "../h/user.h"
  12: 
  13: struct device {
  14:     int rfcs;
  15:     int rfwc;
  16:     char    *rfba;
  17:     int rfda;
  18:     int rfdae;
  19: };
  20: 
  21: struct  buf rftab;
  22: struct  buf rrfbuf;
  23: 
  24: #define NRFBLK  1024
  25: #define RFADDR ((struct device *)0177460)
  26: 
  27: #define GO  01
  28: #define RCOM    04
  29: #define WCOM    02
  30: #define CTLCLR  0400
  31: #define IENABLE 0100
  32: 
  33: /*
  34:  * Monitoring device number
  35:  */
  36: #define DK_N    0
  37: 
  38: rfstrategy(bp)
  39: register struct buf *bp;
  40: {
  41:     if(bp->b_flags&B_PHYS)
  42:         mapalloc(bp);
  43:     if (bp->b_blkno >= NRFBLK*(minor(bp->b_dev)+1)) {
  44:         bp->b_flags |= B_ERROR;
  45:         iodone(bp);
  46:         return;
  47:     }
  48:     bp->av_forw = 0;
  49:     spl5();
  50:     if (rftab.b_actf == NULL)
  51:         rftab.b_actf = bp;
  52:     else
  53:         rftab.b_actl->av_forw = bp;
  54:     rftab.b_actl = bp;
  55:     if (rftab.b_active == NULL)
  56:         rfstart();
  57:     spl0();
  58: }
  59: 
  60: rfstart()
  61: {
  62:     register struct buf *bp;
  63:     register int com;
  64: 
  65:     if ((bp = rftab.b_actf) == NULL)
  66:         return;
  67:     rftab.b_active++;
  68:     RFADDR->rfda = (int)(bp->b_blkno<<8)&0177777;
  69:     RFADDR->rfdae = (int)(bp->b_blkno>>8)&037;
  70:     RFADDR->rfba = bp->b_un.b_addr;
  71:     RFADDR->rfwc = -(bp->b_bcount>>1);
  72:     com = (bp->b_xmem&3) << 4;
  73:     com |= (bp->b_flags & B_READ) ? RCOM+GO+IENABLE : WCOM+GO+IENABLE;
  74:     RFADDR->rfcs = com;
  75:     dk_busy |= 1<<DK_N;
  76:     dk_numb[DK_N] += 1;
  77:     com = (-bp->b_bcount>>5) & 03777;
  78:     dk_wds[DK_N] += com;
  79: }
  80: 
  81: rfintr()
  82: {
  83:     register struct buf *bp;
  84: 
  85:     if (rftab.b_active == NULL)
  86:         return;
  87:     dk_busy &= ~(1<<DK_N);
  88:     bp = rftab.b_actf;
  89:     rftab.b_active = NULL;
  90:     if (RFADDR->rfcs < 0) {     /* error bit */
  91:         deverror(bp, RFADDR->rfcs, RFADDR->rfdae);
  92:         RFADDR->rfcs = CTLCLR;
  93:         if (++rftab.b_errcnt <= 10) {
  94:             rfstart();
  95:             return;
  96:         }
  97:         bp->b_flags |= B_ERROR;
  98:     }
  99:     rftab.b_errcnt = 0;
 100:     rftab.b_actf = bp->av_forw;
 101:     bp->b_resid = 0;
 102:     iodone(bp);
 103:     rfstart();
 104: }
 105: 
 106: rfread(dev)
 107: {
 108: 
 109:     physio(rfstrategy, &rrfbuf, dev, B_READ);
 110: }
 111: 
 112: rfwrite(dev)
 113: {
 114: 
 115:     physio(rfstrategy, &rrfbuf, dev, B_WRITE);
 116: }

Defined functions

rfintr defined in line 81; never used
rfread defined in line 106; never used
rfstart defined in line 60; used 3 times
rfstrategy defined in line 38; used 2 times
rfwrite defined in line 112; never used

Defined variables

rftab defined in line 21; used 13 times
rrfbuf defined in line 22; used 2 times

Defined struct's

device defined in line 13; never used

Defined macros

CTLCLR defined in line 30; used 1 times
  • in line 92
DK_N defined in line 36; used 4 times
GO defined in line 27; used 2 times
  • in line 73(2)
IENABLE defined in line 31; used 2 times
  • in line 73(2)
NRFBLK defined in line 24; used 1 times
  • in line 43
RCOM defined in line 28; used 1 times
  • in line 73
RFADDR defined in line 25; used 9 times
WCOM defined in line 29; used 1 times
  • in line 73
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 743
Valid CSS Valid XHTML 1.0 Strict