rick@seismo.CSS.GOV (Rick Adams) (03/18/87)
Subject: 4.3 BSD only supports 4 tape drives of the same type Index: sys/vaxuba/tm.c 4.3BSD Description: 4.3 BSD only supports a maximum of 4 tape drives of the same type. This is because it only allows 2 bits in the minor device to specify the unit number. It also doesn't support tri-density tape drives with the ht driver (e.g. Emulex TC7000 with STC 1963) Repeat-By: Try and configure 7 tape drives Fix: Apply the following patch. Basically, all we are doing is moving the norewind bit from 04 to 040 so we can have up to 8 units per driver. You should also recompile /usr/src/bin/mt.c because /sys/h/mtio.h has changed. You will also need to remake the tape devices in /dev. *** /tmp/,RCSt1026450 Tue Mar 17 15:47:20 1987 --- /sys/vaxuba/tmscp.c Wed Feb 25 15:24:59 1987 *************** *** 209,216 **** /* filled in by the slave routine */ /* Bits in minor device */ ! #define TMSUNIT(dev) (minor(dev)&03) ! #define T_NOREWIND 04 #define T_HIDENSITY 010 /* Slave unit to controller mapping */ --- 209,216 ---- /* filled in by the slave routine */ /* Bits in minor device */ ! #define TMSUNIT(dev) (minor(dev)&07) ! #define T_NOREWIND 040 #define T_HIDENSITY 010 /* Slave unit to controller mapping */ *** /tmp/,RCSt1026450 Tue Mar 17 15:47:29 1987 --- /sys/vaxuba/ut.c Wed Feb 25 15:25:19 1987 *************** *** 52,59 **** #define MASKREG(reg) ((reg)&0xffff) /* bits in minor device */ ! #define TJUNIT(dev) (minor(dev)&03) ! #define T_NOREWIND 04 #define T_1600BPI 010 #define T_6250BPI 020 short utdens[] = { UT_NRZI, UT_PE, UT_GCR, UT_NRZI }; --- 52,59 ---- #define MASKREG(reg) ((reg)&0xffff) /* bits in minor device */ ! #define TJUNIT(dev) (minor(dev)&07) ! #define T_NOREWIND 040 #define T_1600BPI 010 #define T_6250BPI 020 short utdens[] = { UT_NRZI, UT_PE, UT_GCR, UT_NRZI }; *** /tmp/,RCSt1026506 Tue Mar 17 15:48:55 1987 --- /sys/vaxuba/ts.c Tue Mar 17 15:45:36 1987 *************** *** 67,74 **** { tsprobe, tsslave, tsattach, tsdgo, tsstd, "ts", tsdinfo, "zs", tsminfo, 0 }; /* bits in minor device */ ! #define TSUNIT(dev) (minor(dev)&03) ! #define T_NOREWIND 04 #define INF (daddr_t)1000000L --- 67,74 ---- { tsprobe, tsslave, tsattach, tsdgo, tsstd, "ts", tsdinfo, "zs", tsminfo, 0 }; /* bits in minor device */ ! #define TSUNIT(dev) (minor(dev)&07) ! #define T_NOREWIND 040 #define INF (daddr_t)1000000L *** /tmp/,RCSt1026524 Tue Mar 17 15:49:50 1987 --- /sys/vaxuba/tm.c Tue Mar 17 15:49:29 1987 *************** *** 74,82 **** { tmprobe, tmslave, tmattach, tmdgo, tmstd, "te", tedinfo, "tm", tmminfo, 0 }; /* bits in minor device */ ! #define TEUNIT(dev) (minor(dev)&03) #define TMUNIT(dev) (tetotm[TEUNIT(dev)]) ! #define T_NOREWIND 04 #define T_1600BPI 0x8 #define INF (daddr_t)1000000L --- 74,82 ---- { tmprobe, tmslave, tmattach, tmdgo, tmstd, "te", tedinfo, "tm", tmminfo, 0 }; /* bits in minor device */ ! #define TEUNIT(dev) (minor(dev)&07) #define TMUNIT(dev) (tetotm[TEUNIT(dev)]) ! #define T_NOREWIND 040 #define T_1600BPI 0x8 #define INF (daddr_t)1000000L *** /tmp/,RCSt1026579 Tue Mar 17 15:53:34 1987 --- /sys/vaxmba/mt.c Wed Feb 25 15:20:31 1987 *************** *** 56,63 **** /* Bits in minor device */ ! #define MUUNIT(dev) (minor(dev)&03) ! #define H_NOREWIND 04 #define H_6250BPI 010 #define MTUNIT(dev) (mutomt[MUUNIT(dev)]) --- 56,63 ---- /* Bits in minor device */ ! #define MUUNIT(dev) (minor(dev)&07) ! #define H_NOREWIND 040 #define H_6250BPI 010 #define MTUNIT(dev) (mutomt[MUUNIT(dev)]) *** /tmp/,RCSt1026603 Tue Mar 17 15:54:20 1987 --- /sys/vaxmba/ht.c Wed Feb 25 15:19:26 1987 *************** *** 52,60 **** #define MASKREG(r) ((r) & 0xffff) /* bits in minor device */ ! #define TUUNIT(dev) (minor(dev)&03) ! #define H_NOREWIND 04 ! #define H_1600BPI 08 #define HTUNIT(dev) (tutoht[TUUNIT(dev)]) --- 52,61 ---- #define MASKREG(r) ((r) & 0xffff) /* bits in minor device */ ! #define TUUNIT(dev) (minor(dev)&07) ! #define H_NOREWIND 040 ! #define H_1600BPI 010 ! #define H_6250BPI 020 #define HTUNIT(dev) (tutoht[TUUNIT(dev)]) *************** *** 127,134 **** return (EBUSY); olddens = sc->sc_dens; dens = sc->sc_dens = ! ((minor(dev)&H_1600BPI)?HTTC_1600BPI:HTTC_800BPI)| ! HTTC_PDP11|sc->sc_slave; htcommand(dev, HT_SENSE, 1); sc->sc_dens = olddens; if ((sc->sc_dsreg & HTDS_MOL) == 0) { --- 128,136 ---- return (EBUSY); olddens = sc->sc_dens; dens = sc->sc_dens = ! ((minor(dev)&H_6250BPI) ? HTTC_6250BPI : ! ((minor(dev)&H_1600BPI) ? HTTC_1600BPI : HTTC_800BPI)) ! | HTTC_PDP11 | sc->sc_slave; htcommand(dev, HT_SENSE, 1); sc->sc_dens = olddens; if ((sc->sc_dsreg & HTDS_MOL) == 0) { *** /tmp/,RCSt1026615 Tue Mar 17 15:54:36 1987 --- /sys/vaxmba/htreg.h Wed Feb 25 15:19:41 1987 *************** *** 103,108 **** --- 103,109 ---- /* bits 8-10 are density select */ #define HTTC_800BPI 0001400 /* in bits 8-10, dens=1600 */ #define HTTC_1600BPI 0002000 /* in bits 8-10, dens=800 */ + #define HTTC_6250BPI 0003400 /* in bits 8-10, dens=800 */ /* bits 4-7 are format select */ #define HTTC_PDP11 0000300 /* in bits 4-7, pdp11 normal format */ #define HTTC_EVEN 0000010 /* select even parity */ *** /tmp/,RCSt1026659 Tue Mar 17 15:56:15 1987 --- /sys/h/mtio.h Fri Aug 8 15:11:05 1986 *************** *** 63,67 **** #define MTIOCEEOT _IO(m, 4) /* enable EOT error */ #ifndef KERNEL ! #define DEFTAPE "/dev/rmt12" #endif --- 63,67 ---- #define MTIOCEEOT _IO(m, 4) /* enable EOT error */ #ifndef KERNEL ! #define DEFTAPE "/dev/nrmt8" #endif *** /dev/MAKEDEV.4.3 Wed May 14 22:11:18 1986 --- /dev/MAKEDEV Thu Jul 17 20:33:25 1986 *************** *** 75,98 **** esac case $unit in 0|1|2|3|4|5|6|7) ! four=`expr $unit + 4` ; eight=`expr $unit + 8` ! twelve=`expr $unit + 12`; twenty=`expr $unit + 20` /etc/mknod mt$unit b $blk $unit - /etc/mknod mt$four b $blk $four /etc/mknod mt$eight b $blk $eight ! /etc/mknod mt$twelve b $blk $twelve ! /etc/mknod nmt$unit b $blk $four ;: sanity w/pdp11 v7 ! /etc/mknod nmt$eight b $blk $twelve ;: ditto ! /etc/mknod nrmt$unit c $chr $four ;: sanity w/pdp11 v7 ! /etc/mknod nrmt$eight c $chr $twelve ;: ditto /etc/mknod rmt$unit c $chr $unit - /etc/mknod rmt$four c $chr $four /etc/mknod rmt$eight c $chr $eight - /etc/mknod rmt$twelve c $chr $twelve if [ $i = ut ] then /etc/mknod mt$twenty b $blk $twenty ! /etc/mknod rmt$twenty c $chr $twenty fi ;; *) --- 75,92 ---- esac case $unit in 0|1|2|3|4|5|6|7) ! nrew=`expr $unit + 32` ; eight=`expr $unit + 8` ! twelve=`expr $unit + 12`; nrew8=`expr $unit + 40` /etc/mknod mt$unit b $blk $unit /etc/mknod mt$eight b $blk $eight ! /etc/mknod nrmt$unit c $chr $nrew ;: sanity w/pdp11 v7 ! /etc/mknod nrmt$eight c $chr $nrew8 ;: ditto /etc/mknod rmt$unit c $chr $unit /etc/mknod rmt$eight c $chr $eight if [ $i = ut ] then /etc/mknod mt$twenty b $blk $twenty ! /etc/mknod rmt$nrew8 c $chr $twenty fi ;; *)