1: /*
   2:  * RP04/RP06 disk driver
   3:  */
   4: 
   5: #include <sys/param.h>
   6: #include <sys/inode.h>
   7: #include "saio.h"
   8: 
   9: struct  device
  10: {
  11:     union {
  12:         int w;
  13:         char    c[2];
  14:     } hpcs1;        /* Control and Status register 1 */
  15:     int hpwc;       /* Word count register */
  16:     caddr_t hpba;       /* UNIBUS address register */
  17:     int hpda;       /* Desired address register */
  18:     union {
  19:         int w;
  20:         char    c[2];
  21:     } hpcs2;        /* Control and Status register 2*/
  22:     int hpds;       /* Drive Status */
  23:     int hper1;      /* Error register 1 */
  24:     int hpas;       /* Attention Summary */
  25:     int hpla;       /* Look ahead */
  26:     int hpdb;       /* Data buffer */
  27:     int hpmr;       /* Maintenance register */
  28:     int hpdt;       /* Drive type */
  29:     int hpsn;       /* Serial number */
  30:     int hpof;       /* Offset register */
  31:     int hpdc;       /* Desired Cylinder address register*/
  32:     int hpcc;       /* Current Cylinder */
  33:     int hper2;      /* Error register 2 */
  34:     int hper3;      /* Error register 3 */
  35:     int hpec1;      /* Burst error bit position */
  36:     int hpec2;      /* Burst error bit pattern */
  37:     int hpbae;      /* 11/70 bus extension */
  38:     int hpcs3;
  39: };
  40: 
  41: #define HPADDR  ((struct device *)0176700)
  42: #define NSECT   22
  43: #define NTRAC   19
  44: #define SDIST   2
  45: #define RDIST   6
  46: 
  47: #define P400    020
  48: #define M400    0220
  49: #define P800    040
  50: #define M800    0240
  51: #define P1200   060
  52: #define M1200   0260
  53: 
  54: #define GO  01
  55: #define PRESET  020
  56: #define RTC 016
  57: #define OFFSET  014
  58: #define SEARCH  030
  59: #define RECAL   06
  60: #define DCLR    010
  61: #define WCOM    060
  62: #define RCOM    070
  63: 
  64: #define IE  0100
  65: #define PIP 020000
  66: #define DRY 0200
  67: #define ERR 040000
  68: #define TRE 040000
  69: #define DCK 0100000
  70: #define WLE 04000
  71: #define ECH 0100
  72: #define VV  0100
  73: #define FMT22   010000
  74: 
  75: hpstrategy(io, func)
  76: register struct iob *io;
  77: {
  78:     register unit;
  79:     register i;
  80:     daddr_t bn;
  81:     int sn, cn, tn;
  82: 
  83:     if (((unit = io->i_unit) & 04) == 0)
  84:         bn = io->i_bn;
  85:     else {
  86:         unit &= 03;
  87:         bn = io->i_bn;
  88:         bn -= io->i_boff;
  89:         i = unit + 1;
  90:         unit = bn%i;
  91:         bn /= i;
  92:         bn += io->i_boff;
  93:     }
  94: 
  95:     HPADDR->hpcs2.w = unit;
  96: 
  97:     if((HPADDR->hpds & VV) == 0) {
  98:         HPADDR->hpcs1.c[0] = PRESET|GO;
  99:         HPADDR->hpof = FMT22;
 100:     }
 101:     cn = bn/(NSECT*NTRAC);
 102:     sn = bn%(NSECT*NTRAC);
 103:     tn = sn/NSECT;
 104:     sn = sn%NSECT;
 105: 
 106:     HPADDR->hpdc = cn;
 107:     HPADDR->hpda = (tn << 8) + sn;
 108:     HPADDR->hpba = io->i_ma;
 109:     HPADDR->hpwc = -(io->i_cc>>1);
 110:     unit = (segflag << 8) | GO;
 111:     if (func == READ)
 112:         unit |= RCOM;
 113:     else if (func == WRITE)
 114:         unit |= WCOM;
 115:     HPADDR->hpcs1.w = unit;
 116:     while ((HPADDR->hpcs1.w&DRY) == 0)
 117:             ;
 118:     if (HPADDR->hpcs1.w & TRE) {
 119:         printf("disk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o\n",
 120:             cn, tn, sn, HPADDR->hpcs2, HPADDR->hper1);
 121:         return(-1);
 122:     }
 123:     return(io->i_cc);
 124: }

Defined functions

hpstrategy defined in line 75; used 2 times

Defined struct's

device defined in line 9; never used

Defined macros

DCK defined in line 69; never used
DCLR defined in line 60; never used
DRY defined in line 66; used 1 times
ECH defined in line 71; never used
ERR defined in line 67; never used
FMT22 defined in line 73; used 1 times
  • in line 99
GO defined in line 54; used 2 times
HPADDR defined in line 41; used 13 times
IE defined in line 64; never used
M1200 defined in line 52; never used
M400 defined in line 48; never used
M800 defined in line 50; never used
NSECT defined in line 42; used 4 times
NTRAC defined in line 43; used 2 times
OFFSET defined in line 57; never used
P1200 defined in line 51; never used
P400 defined in line 47; never used
P800 defined in line 49; never used
PIP defined in line 65; never used
PRESET defined in line 55; used 1 times
  • in line 98
RCOM defined in line 62; used 1 times
RDIST defined in line 45; never used
RECAL defined in line 59; never used
RTC defined in line 56; never used
SDIST defined in line 44; never used
SEARCH defined in line 58; never used
TRE defined in line 68; used 1 times
VV defined in line 72; used 1 times
  • in line 97
WCOM defined in line 61; used 1 times
WLE defined in line 70; never used
Last modified: 1979-05-16
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 615
Valid CSS Valid XHTML 1.0 Strict