1: #
   2: 
   3: /*
   4:  * TM tape driver
   5:  */
   6: 
   7: #include <sys/param.h>
   8: #include <sys/inode.h>
   9: #include "saio.h"
  10: 
  11: struct device {
  12:     int tmer;
  13:     int tmcs;
  14:     int tmbc;
  15:     char    *tmba;
  16:     int tmdb;
  17:     int tmrd;
  18: };
  19: 
  20: #define TMADDR ((struct device *)0172520)
  21: 
  22: #define GO  01
  23: #define RCOM    02
  24: #define WCOM    04
  25: #define WEOF    06
  26: #define SFORW   010
  27: #define SREV    012
  28: #define WIRG    014
  29: #define REW 016
  30: #define DENS    060000      /* 9-channel */
  31: #define IENABLE 0100
  32: #define CRDY    0200
  33: #define GAPSD   010000
  34: #define TUR 1
  35: #define SDWN    010
  36: #define HARD    0102200 /* ILC, EOT, NXM */
  37: #define EOF 0040000
  38: 
  39: #define SSEEK   1
  40: #define SIO 2
  41: 
  42: 
  43: tmrew(io)
  44: register struct iob *io;
  45: {
  46:     tmstrategy(io, REW);
  47: }
  48: 
  49: tmopen(io)
  50: register struct iob *io;
  51: {
  52:     register skip;
  53: 
  54:     tmstrategy(io, REW);
  55:     skip = io->i_boff;
  56:     while (skip--) {
  57:         io->i_cc = 0;
  58:         while (tmstrategy(io, SFORW))
  59:             ;
  60:     }
  61: }
  62: tmstrategy(io, func)
  63: register struct iob *io;
  64: {
  65:     register int com, unit, errcnt;
  66: 
  67:     unit = io->i_unit;
  68:     errcnt = 0;
  69: retry:
  70:     tmquiet();
  71:     com = (unit<<8)|(segflag<<4)|DENS;
  72:     TMADDR->tmbc = -io->i_cc;
  73:     TMADDR->tmba = io->i_ma;
  74:     if (func == READ)
  75:         TMADDR->tmcs = com | RCOM | GO;
  76:     else if (func == WRITE)
  77:         TMADDR->tmcs = com | WCOM | GO;
  78:     else if (func == SREV) {
  79:         TMADDR->tmbc = -1;
  80:         TMADDR->tmcs = com | SREV | GO;
  81:         return(0);
  82:     } else
  83:         TMADDR->tmcs = com | func | GO;
  84:     while ((TMADDR->tmcs&CRDY) == 0)
  85:         ;
  86:     if (TMADDR->tmer&EOF)
  87:         return(0);
  88:     if (TMADDR->tmer < 0) {
  89:         if (errcnt == 0)
  90:             printf("tape error: er=%o", TMADDR->tmer);
  91:         if (errcnt==10) {
  92:             printf("\n");
  93:             return(-1);
  94:         }
  95:         errcnt++;
  96:         tmstrategy(io, SREV);
  97:         goto retry;
  98:     }
  99:     if (errcnt)
 100:         printf(" recovered by retry\n");
 101:     return( io->i_cc+TMADDR->tmbc );
 102: }
 103: 
 104: tmquiet()
 105: {
 106:     while ((TMADDR->tmcs&CRDY) == 0)
 107:         ;
 108:     while ((TMADDR->tmer&TUR) == 0)
 109:         ;
 110:     while ((TMADDR->tmer&SDWN) != 0)
 111:         ;
 112: }

Defined functions

tmopen defined in line 49; used 2 times
tmquiet defined in line 104; used 1 times
  • in line 70
tmrew defined in line 43; used 2 times
tmstrategy defined in line 62; used 6 times

Defined struct's

device defined in line 11; never used

Defined macros

CRDY defined in line 32; used 2 times
DENS defined in line 30; used 1 times
  • in line 71
EOF defined in line 37; used 1 times
  • in line 86
GAPSD defined in line 33; never used
GO defined in line 22; used 4 times
HARD defined in line 36; never used
IENABLE defined in line 31; never used
RCOM defined in line 23; used 1 times
  • in line 75
REW defined in line 29; used 2 times
SDWN defined in line 35; used 1 times
SFORW defined in line 26; used 1 times
  • in line 58
SIO defined in line 40; never used
SREV defined in line 27; used 3 times
SSEEK defined in line 39; never used
TMADDR defined in line 20; used 15 times
TUR defined in line 34; used 1 times
WCOM defined in line 24; used 1 times
  • in line 77
WEOF defined in line 25; never used
WIRG defined in line 28; never used
Last modified: 1979-05-24
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 767
Valid CSS Valid XHTML 1.0 Strict