# 2.11BSD#431 - /usr/src/sys/pdpstand/conf.c

##### Functions

    devclose          X
    deveovchk         X
    devlabel          X
    devname           X
    devopen           X
    devread           X
    devseek           X
    devwrite          X
    nullsys           X

##### Variables

    ADJcsr            X
    devsw             X
    ndevsw            X

       1: /*
       2:  * Copyright (c) 1986 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  *
       6:  *	@(#)conf.c	2.7 (2.11BSD) 1997/11/7
       7:  */
       8:
       9: #include "../h/param.h"
      10: #include "saio.h"
      11:
      12:     int nullsys();
      13:
      14: extern  int xpstrategy(), xpopen(), xpclose(), xplabel();
      15: extern  int brstrategy(), bropen();
      16: extern  int rkstrategy(), rkopen();
      17: extern  int rxstrategy(), rxopen();
      18: extern  int hkstrategy(), hkopen(), hklabel();
      19: extern  int rlstrategy(), rlopen(), rllabel();
      20: extern  int sistrategy(), siopen();
      21: extern  int rastrategy(), raopen(), raclose(), ralabel();
      22: extern  int tmstrategy(), tmopen(), tmclose(), tmseek();
      23: extern  int htstrategy(), htopen(), htclose(), htseek();
      24: extern  int tsstrategy(), tsopen(), tsclose(), tsseek();
      25: extern  int tmscpstrategy(), tmscpopen(), tmscpclose(), tmscpseek();
      26:
      27: extern  caddr_t *XPcsr[], *BRcsr[], *RKcsr[], *HKcsr[], *RLcsr[], *RXcsr[];
      28: extern  caddr_t *SIcsr[], *RAcsr[], *TMcsr[], *HTcsr[], *TScsr[], *TMScsr[];
      29:
      30: /*
      31:  * NOTE!  This table must be in major device number order.  See /sys/pdp/conf.c
      32:  *	  for the major device numbers.
      33: */
      34:
      35: struct devsw devsw[] = {
      36:     "ht",   htstrategy, htopen,     htclose,    HTcsr, /* 0 */
      37:     nullsys, htseek,
      38:     "tm",   tmstrategy, tmopen,     tmclose,    TMcsr, /* 1 */
      39:     nullsys, tmseek,
      40:     "ts",   tsstrategy, tsopen,     tsclose,    TScsr, /* 2 */
      41:     nullsys, tsseek,
      42:     "ram",  nullsys,    nullsys,    nullsys,    0,     /* 3 */
      43:     nullsys, nullsys,
      44:     "hk",   hkstrategy, hkopen,     nullsys,    HKcsr, /* 4 */
      45:     hklabel, nullsys,
      46:     "ra",   rastrategy, raopen,     raclose,    RAcsr, /* 5 */
      47:     ralabel, nullsys,
      48:     "rk",   rkstrategy, rkopen,     nullsys,    RKcsr, /* 6 */
      49:     nullsys, nullsys,
      50:     "rl",   rlstrategy, rlopen,     nullsys,    RLcsr, /* 7 */
      51:     rllabel, nullsys,
      52:     "rx",   rxstrategy, rxopen,     nullsys,    RXcsr, /* 8 */
      53:     nullsys, nullsys,
      54:     "si",   sistrategy, siopen,     nullsys,    SIcsr, /* 9 */
      55:     nullsys, nullsys,
      56:     "xp",   xpstrategy, xpopen,     xpclose,    XPcsr, /* 10 */
      57:     xplabel, nullsys,
      58:     "br",   brstrategy, bropen,     nullsys,    BRcsr, /* 11 */
      59:     nullsys, nullsys,
      60:     "tms",  tmscpstrategy,  tmscpopen,  tmscpclose, TMScsr,/* 12 */
      61:     nullsys, tmscpseek,
      62:     0,  0,      0,      0,      0,
      63:     nullsys, nullsys,
      64: };
      65:
      66:     int ndevsw = (sizeof (devsw) / sizeof (devsw[0])) - 1;
      67:
      68:     char    ADJcsr[] =
      69:         {
      70:         0,  /* HT = 0 */
      71:         2,  /* TM = 1 */
      72:         2,  /* TS = 2 */
      73:         0,  /* RAM = 3 */
      74:         0,  /* HK = 4 */
      75:         0,  /* RA = 5 */
      76:         4,  /* RK = 6 */
      77:         0,  /* RL = 7 */
      78:         0,  /* RX = 8 */
      79:         0,  /* XP/SI = 9 */
      80:         0,  /* XP = 10 */
      81:         4,  /* BR =11 */
      82:         0,  /* TMS = 12 */
      83:         };
      84:
      85: devread(io)
      86:     register struct iob *io;
      87: {
      88:
      89:     return((*devsw[io->i_ino.i_dev].dv_strategy)(io, READ));
      90: }
      91:
      92: devwrite(io)
      93:     register struct iob *io;
      94: {
      95:     return((*devsw[io->i_ino.i_dev].dv_strategy)(io, WRITE));
      96: }
      97:
      98: devopen(io)
      99:     register struct iob *io;
     100: {
     101:     return((*devsw[io->i_ino.i_dev].dv_open)(io));
     102: }
     103:
     104: devclose(io)
     105:     register struct iob *io;
     106: {
     107:     (*devsw[io->i_ino.i_dev].dv_close)(io);
     108: }
     109:
     110: /*
     111:  * Call the 'seek' entry for a tape device.  Seeking only works for 1kb
     112:  * records - which is how the executables are stored - not for the dump
     113:  * or tar files on a boot tape.
     114: */
     115: devseek(io, space)
     116:     register struct iob *io;
     117:     int space;
     118:     {
     119:     return((*devsw[io->i_ino.i_dev].dv_seek)(io, space));
     120:     }
     121:
     122: devlabel(io, fnc)
     123:     register struct iob *io;
     124:     int fnc;
     125:     {
     126:     int (*dvlab)() = devsw[io->i_ino.i_dev].dv_label;
     127:     int (*strat)() = devsw[io->i_ino.i_dev].dv_strategy;
     128:     register struct disklabel *lp;
     129:     register struct partition *pi;
     130:
     131:     switch  (fnc)
     132:         {
     133:         case    WRITELABEL:
     134:             return(writelabel(io, strat));
     135:         case    READLABEL:
     136:             return(readlabel(io, strat));
     137:         case    DEFAULTLABEL:
     138: /*
     139:  * Zero out the label buffer and then assign defaults common to all drivers.
     140:  * Many of these are rarely (if ever) changed.  The 'a' partition is set up
     141:  * to be one sector past the label sector - the driver is expected to change
     142:  * this to span the volume once the size is known.
     143: */
     144:             lp = &io->i_label;
     145:             pi = &lp->d_partitions[0];
     146:             bzero(lp, sizeof (struct disklabel));
     147:             lp->d_npartitions = 1;
     148:             pi->p_offset = 0;
     149:             pi->p_size = LABELSECTOR + 1;
     150:             pi->p_fsize = DEV_BSIZE;
     151:             pi->p_frag = 1;
     152:             pi->p_fstype = FS_V71K;
     153:             strcpy(lp->d_packname, "DEFAULT");
     154:             lp->d_secsize = 512;
     155:             lp->d_interleave = 1;
     156:             lp->d_rpm = 3600;
     157: /*
     158:  * param.h declares BBSIZE to be DEV_BSIZE which is 1kb.  This is _wrong_,
     159:  * the boot block size (what the bootroms read) is 512.  The disklabel(8)
     160:  * program explicitly sets d_bbsize to 512 so we do the same thing here.
     161:  *
     162:  * What a mess - when the 1k filesystem was created there should have been
     163:  * a (clearer) distinction made between '(hardware) sectors' and
     164:  * '(filesystem) blocks'.  Sigh.
     165: */
     166:             lp->d_bbsize = 512;
     167:             lp->d_sbsize = SBSIZE;
     168:             return((*dvlab)(io));
     169:         default:
     170:             printf("devlabel: bad fnc %d\n");
     171:             return(-1);
     172:         }
     173:     }
     174:
     175: /*
     176:  * Common routine to print out the full device name in the form:
     177:  *
     178:  *	dev(ctlr,unit,part)
     179:  *
     180:  * Have to do it the hard way since there's no sprintf to call.  Register
     181:  * oriented string copies are small though.
     182: */
     183:
     184: char    *
     185: devname(io)
     186:     register struct iob *io;
     187:     {
     188:     static  char    dname[16];
     189:     register char *cp, *dp;
     190:
     191:     cp = dname;
     192:     dp = devsw[io->i_ino.i_dev].dv_name;
     193:     while   (*cp = *dp++)
     194:         cp++;
     195:     *cp++ = '(';
     196:     dp = itoa(io->i_ctlr);
     197:     while   (*cp = *dp++)
     198:         cp++;
     199:     *cp++ = ',';
     200:     dp = itoa(io->i_unit);
     201:     while   (*cp = *dp++)
     202:         cp++;
     203:     *cp++ = ',';
     204:     dp = itoa(io->i_part);
     205:     while   (*cp = *dp++)
     206:         cp++;
     207:     *cp++ = ')';
     208:     *cp++ = '\0';
     209:     return(dname);
     210:     }
     211: /*
     212:  * Check for end of volume.  Actually this checks for end of partition.
     213:  * Since this is almost always called when reading unlabeled disks (treating
     214:  * a floppy as a short tape for example) it's effectively an EOV check.
     215: */
     216:
     217: deveovchk(io)
     218:     register struct iob *io;
     219:     {
     220:     register struct partition *pi;
     221:     daddr_t  sz, eov;
     222:
     223:     pi = &io->i_label.d_partitions[io->i_part];
     224:     sz = io->i_cc / 512;
     225: /*
     226:  * i_bn already has the p_offset added in, thus we have to add in the partition
     227:  * offset when calculating the end point.
     228: */
     229:     eov = pi->p_offset + pi->p_size;
     230:     if  (io->i_bn + sz > eov)
     231:         {
     232:         sz = eov - io->i_bn;
     233:         if  (sz == 0)
     234:             return(0);  /* EOF */
     235: /*
     236:  * Probably should call this EOF too since there is no 'errno' to specify
     237:  * what type of error has happened.
     238: */
     239:         if  (sz < 0)
     240:             return(-1);
     241:         io->i_cc = dbtob(sz);
     242:         }
     243:     return(1);
     244:     }
     245:
     246: nullsys()
     247: {
     248:     return(-1);
     249: }

#### Defined functions

devclose defined in line 104; used 1 times

- in /usr/src/sys/pdpstand/sys.c line 594

deveovchk defined in line 217; used 4 times

- in /usr/src/sys/pdpstand/hk.c line 42
- in /usr/src/sys/pdpstand/ra.c line 197
- in /usr/src/sys/pdpstand/rl.c line 67
- in /usr/src/sys/pdpstand/xp.c line 79

devlabel defined in line 122; used 9 times

- in /usr/src/sys/pdpstand/disklabel.c line 54, 73, 109, 120
- in /usr/src/sys/pdpstand/hk.c line 124
- in /usr/src/sys/pdpstand/label.c line 62
- in /usr/src/sys/pdpstand/ra.c line 104
- in /usr/src/sys/pdpstand/rl.c line 143
- in /usr/src/sys/pdpstand/xp.c line 54

devname defined in line 184; used 30 times

- in /usr/src/sys/pdpstand/br.c line 52, 89
- in /usr/src/sys/pdpstand/hk.c line 93
- in /usr/src/sys/pdpstand/ht.c line 135
- in /usr/src/sys/pdpstand/label.c line 52, 61-69(3), 99
- in /usr/src/sys/pdpstand/ra.c line 95, 124, 175-180(2), 186, 256
- in /usr/src/sys/pdpstand/rk.c line 53
- in /usr/src/sys/pdpstand/rl.c line 117, 190
- in /usr/src/sys/pdpstand/rx.c line 98
- in /usr/src/sys/pdpstand/saio.h line 73
- in /usr/src/sys/pdpstand/si.c line 81
- in /usr/src/sys/pdpstand/tm.c line 106
- in /usr/src/sys/pdpstand/tmscp.c line 136, 149, 226, 258
- in /usr/src/sys/pdpstand/ts.c line 129
- in /usr/src/sys/pdpstand/xp.c line 110, 228, 265

devopen defined in line 98; used 1 times

- in /usr/src/sys/pdpstand/sys.c line 558

devread defined in line 85; used 5 times

- in /usr/src/sys/pdpstand/sys.c line 81, 203, 272, 352, 413

devseek defined in line 115; used 1 times

- in /usr/src/sys/pdpstand/sys.c line 314

devwrite defined in line 92; used 1 times

- in /usr/src/sys/pdpstand/sys.c line 451

nullsys defined in line 246; used 30 times

- in line 12, 37-63(29)

#### Defined variables

ADJcsr defined in line 68; used 4 times

- in /usr/src/sys/pdpstand/boot.c line 137, 231
- in /usr/src/sys/pdpstand/srt0.s line 16, 78

devsw defined in line 35; used 24 times

- in line 66(2), 89, 95, 101, 107, 119, 126-127(2), 192
- in /usr/src/sys/pdpstand/boot.c line 139-148(5), 157-159(2), 230
- in /usr/src/sys/pdpstand/disklabel.c line 76
- in /usr/src/sys/pdpstand/srt0.s line 16, 67
- in /usr/src/sys/pdpstand/sys.c line 481, 510, 652

ndevsw defined in line 66; used 1 times

- in /usr/src/sys/pdpstand/boot.c line 135

Last modified: 1997-11-08 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1458 |