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
;;
*)