Subject: Re: 3/60 Not Booting?
To: Mike Dugas <mad@Poseidon.Token.Net>
From: Volker Seebode <vas@plesnik.bonsai.de>
List: port-sun3
Date: 10/01/1996 12:50:06
On Mon, 30 Sep 1996, Mike Dugas wrote:

> Date: Mon, 30 Sep 1996 13:00:32 -0400 (EDT)
> From: Mike Dugas <mad@Poseidon.Token.Net>
> To: "Gordon W. Ross" <gwr@mc.com>
> Cc: port-sun3@NetBSD.ORG
> Subject: Re: 3/60 Not Booting?
> 
> 
> 
> On Mon, 30 Sep 1996, Gordon W. Ross wrote:
> 
> > > Date: Sun, 29 Sep 1996 22:47:17 -0400
> > > From: Mike Dugas <mad@Poseidon.Token.Net>
> > > 
> > > Hello-
> > > 
> > > I have a Sun 3/60 I am trying to get running (it should have been running
> > > yesterday, really), but I have a problem.  I'm making the tapes on my Linux
> > > box, and they boot fine, so I know it's reading them properly, but when
> > > I try to boot the boot tape, I get this:
> > > 
> > > Auto-boot in progress...
> > > 
> > > EEPROM boot device...st(0,0,0)
> > > >> NetBSD tapeboot [$Revision 1.3 $]
> > > 466260+284056+87436+[41688+45445]exec: short read
> > > tapeboot: 1: Input/output error
> > > tapeboot: segment? [1]
> > >
> > > And my cursor sits on the last line waiting for my input.
> > >  What should I do?
> > 
> > Just press enter.
> > 
> 
> I've tried everything.  I've pressed enter, I've typed 2, I've typed 3,
> I can't get it to work at all.  I even went to the extent of pulling
> memory, and making the tape and having mt write the eof at the end of each
> tape segment.  I can't get it to work AT ALL.
> 
I've got the same machine and exactly the same problem. Fortunately I
found a way using tapeboot by putting the different segments on different
tapes. Bug in tapeboot?
Perhaps you might try to boot your sun via NFS. I've got it running
booting from a FreeBSD server with a patched mountd.

BTW: there is another problem concerning the tape driver. Any time
a SOFT ERROR occurs, NetBSD panics with "done > todo".

scsi/st.c, line 1680-1690 netbsd-current:
>>>>>>>>>>>>>>>>>>>>
        /*
         * Get the sense fields and work out what code
         */
        if (sense->error_code & SSD_ERRCODE_VALID)
                info = _4btol(sense->info);
        else
                info = xs->datalen;     /* bad choice if fixed blocks */
        if ((sense->error_code & SSD_ERRCODE) != 0x70)
                return -1;      /* let the generic code handle it */
        if (st->flags & ST_FIXEDBLOCKS) {
                xs->resid = info * st->blksize;
<<<<<<<<<<<<<<<<<<<<<

So if (sense->error_code & SSD_ERRCODE_VALID) == 0 and
      (st->flags & FIXEDBLOCKS) != 0,
xs->resid will be assigned to xs->datalen*st->blksize! I inserted an
if-statement and now it works:
>>>>>
        if (st->flags & ST_FIXEDBLOCKS) {
		if (sense->error_code & SSD_ERRCODE_VALID) /* <---- */
                	xs->resid = info * st->blksize;
<<<<<
--
Volker Seebode                               |  Email: vas@plesnik.bonsai.de |