Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Jul 1996 13:06:32 +0200 (MET DST)
From:      J Wunsch <j@uriah.heep.sax.de>
To:        freebsd-scsi@freebsd.org
Cc:        jbh@labyrinth.net.au (John Hartley)
Subject:   Re: tandberg scsi tape + FreeBSD 2.1/2.0.5
Message-ID:  <199607171106.NAA03732@uriah.heep.sax.de>
In-Reply-To: <199607160641.QAA13198@minotaur.labyrinth.net.au> from John Hartley at "Jul 16, 96 04:41:25 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
As John Hartley wrote:

> >>> Output <<<
> 
> Present Mode:   Density = 0x00         Blocksize = 1024 bytes
> ---------available modes---------
> Mode 0:         Density = 0x00         Blocksize variable
> Mode 1:         Density = QIC-320      Blocksize variable
> Mode 2:         Density = QIC-150      Blocksize variable
> Mode 3:         Density = QIC-120      Blocksize variable

Ick.  This is weird (and it cannot work this way).  Neither this
blocksize nor this density will be accepted by the drive.  As long as
you're getting this, all other attempts are in vaine.

However, this looks as if the `rogue' code wouldn't work as expected.
(Sorry, i cannot reproduce this, this code has been taken out
meanwhile.  The entire rogue handling has been moved out to
scsiconf.c, that's what is #ifdef NEW_SCSICONF for you.)

Something like

	mt -f /dev/st0ctl.0 blocksize 0
	mt -f /dev/st0ctl.0 density 0x15

is the least that must work.  Try experimenting with this.

> >I wonder whether we should always use the following kludge:
> >
> >@@ -1530,7 +1530,9 @@
> > 	scsi_cmd.length = dat_len;
> > 	dat.header.blk_desc_len = sizeof(struct blk_desc);
> > 	dat.header.dev_spec |= SMH_DSP_BUFF_MODE_ON;
> >-	dat.blk_desc.density = st->density;
> >+	dat.blk_desc.density =
> >+		st->density? st->density:
> >+			     0x7f /* use previous density */;
> > 	if (st->flags & ST_FIXEDBLOCKS) {
> > 		scsi_uto3b(st->blksiz, dat.blk_desc.blklen);
> > 	}
> >
> >
> >
> 
> I didn't try this as the previous test failed!!

Hmm, no, if you kill the rogue entry, the above _should_ work
nevertheless.  (As long as the rogue entry is there, it seems the
kernel uses 1024 byte blocksize, but i remember that this wasn't the
case before for your drive.)

> I guess the question is is what is it that the FreeBSD drivers are doing
> that is different from the dos ASPI and Windows NT tape driver???

The BSD driver should perhaps by default not even try to MODE SELECT
the drive.  That's what it is constantly getting wrong in your case.
Look here:

> Jul 16 17:09:38 qwiff /kernel: st0(ahc0:2:0): command: 15,0,0,0,c,0-[12 bytes]
> Jul 16 17:09:38 qwiff /kernel: ------------------------------
> Jul 16 17:09:38 qwiff /kernel: 000: 00 00 10 08 00 00 00 00 00 00 04 00 
> Jul 16 17:09:38 qwiff /kernel: ------------------------------

That's the interesting line.  It should actually look:

> Jul 16 17:09:38 qwiff /kernel: 000: 00 00 10 08 15 00 00 00 00 00 00 00 
                                                  ^^                ^^

-- 
cheers, J"org

joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199607171106.NAA03732>