[comp.os.minix] 1.5 hard disks and shoelace

wilson (Paul Wilson) (10/01/90)

I have been busy trying to get the hard disk drivers and shoelace up
and running on Minix 1.5.10 and have a few observations to share and one
problem to solve.

Firstly, I was not initially able to get shoelace to boot a Minix image
containing the bios_wini.c hard disk driver. Everything went fine until
time for the driver process to perform its initialization. At this point
the light came on on the hard disk drive and everything froze. My first
thought was that shoelace had managed to clobber the hard disk IRQ vector
for the hard disk bios. Some diagnostic printf statements in the driver
soon revealed that this was not the case. In the end I was able to fix the
problem by invoking a bios reset of the controller. I did this by sending 
an "alternate reset" call to the bios before the parameter table is read.
This required a call to bios13 with AH set to "0D" and DL set to the drive
number. If you are using two drives, it should be done for each drive in
turn.

Now, on to my remaining problem; I cannot get the xt_wini.c driver to
work correctly with my hardware. It is very close but I still have one
remaining problem. The hardware is an Adaptec 8 bit RLL controller board
and the disk is a Mitsubishi MR535. Unfortunately, I do not remember the
mdel number of the controller and I do not have that information available
to me at the office. The problem is that I can read the first 38 Meg or so
 of the disk but, if I try to read anything higher than that, I get an
unrecoverable disk error. Specifically, the disk makes noises like it might
be tryining to seek to a non-existant cylinder and then the driver gives up.
I did find that the driver was confused over maximum head number (4) versus
number of heads (5) causing it to calculate the cylinder number incorrectly.
When I fixed this, the block number at which the problem occurred changed
(as expected) but the cylinder number at which the problem occurred
also changed (not expected). The problem does not occur at a place that
seems likely. Specifically, it occurs in the middle of a track, not at head 0
and, most significantly, not when the leftmost 1 in the cylinder number
propagates to the left. Unfortunately, I do not have any documentation
on the disk controller card so I am reduced to poking around based on
what I know of the disk bios operation and what I can figure out from
the xt_wini.c code. Anyone have any suggestions as to how to solve
this problem ?

Paul Wilson
( ...!uunet!van-bc!mdivax1!wilson)

rdc30med@nmrdc1.nmrdc.nnmc.navy.mil (LCDR Michael E. Dobson) (10/02/90)

What do you have NR_SECTORS defined to?  Most RLL controllers use 26
sectors but some use 25.  From the description of the errors you get, this
sounds like it could be the problem.  I was using two different XTs with RRL
controllers that (as one would guess) required different values for NR_SECTORS.
This caused me no end of trouble until I got kernels built with the correct
values for each machine.

One nice thing about shoelace.  If you boot from the kernel pieces, ie fs, mm
and kernel, you can quickly test this out by compiling xt_wini with 
-DNR_SECTORS=25 or 26 and relinking the kernel.
-- 
Mike Dobson, Sys Admin for      | Internet: rdc30med@nmrdc1.nmrdc.nnmc.navy.mil
nmrdc1.nmrdc.nnmc.navy.mil      | UUCP:   ...uunet!mimsy!nmrdc1!rdc30med
AT&T 3B2/600G Sys V R 3.2.2     | BITNET:   dobson@usuhsb.bitnet
WIN/TCP for 3B2                 | MCI-Mail: 377-2719 or 0003772719@mcimail.com

wilson (Paul Wilson) (10/04/90)

Michael Dobson asks whether I have changed NR_SECTORS.
I have set NR_SECTORS to 25 which is the value that the controller
expects. Unfortunately, I forgot to include this information
in my original posting.

Paul Wilson
(...!uunet!van-bc!mdivax1!wilson)