[comp.os.minix] Support for Adaptec ACB-2070A RLL disk controller

backstro@silver.bacs.indiana.edu (Dave White) (03/08/88)

In response to a number of requests, here are the diffs needed to
bring up MINIX-PC on a Zenith Z-150 running an Adaptec ACB-2070A
controller and using a Seagate ST-238 drive.

The ACB-2070A looks, acts and smells a lot like the standard XT
controller;  Adaptec's documentation claims it will run PC/IX!  In any
case, Dan Dugger's Zenith mods were installed first, and left in when
the other patches brought the drive up.  Why fix it if it isn't broken?

=== cut here, apply to /bin/sh ===
sed 's/^X //' >winidiff <<SHAR-EOF
X 1a2,17
X >  * This version of the driver contains Dan Dugger's Z-150 modifications
X >  * to the com_out() function.
X >  *
X >  * It also contains some minor hacks to support the Adaptec ACB-2070a
X >  * RLL controller, marked with a HERE.
X >  * 
X >  * things hacked so far:
X >  *  NR_SECTORS changed from 0x11 to 0x19 -- 25 sectors/track
X >  * things to check further:
X >  *  are ports the same for IBM/DTC and ACB2070a?
X >  *	-- apparently
X >  *  are we reading the partition table correctly?
X >  *	-- we're ignoring it for the moment
X >  *  how should we handle the on-disk parameter [BIOS?]
X >  *      -- find out from Adaptec how to read the bugger
X >  *
X 60a77
X > #if 0
X 62c79,81
X < 
X ---
X > #endif
X > /* HERE */
X > #define NR_SECTORS      0x19    /* number of sectors per track, Adaptec */
X 526a546,569
X > 
X > /*
X > From: n0ano@wldrdg.UUCP (Don Dugger)
X > Date: 13 Apr 87 17:28:28 GMT
X > Organization: Wildridge Consulting,  Boulder, CO
X > 
X > Having recently installed MINIX on my Zenith 150 I discovered that
X > I had a read-only hard disk.  When writing, every few blocks would
X > confuse the driver which would try to reset the disk (a very lengthy
X > process) and would frequently not write out the block.  After debugging
X > the Zenith BIOS I came up with the following fix which seems to correct
X > the problem.  Using this fix I have copied all of the MINIX source
X > to my hard disk and I've recompiled the kernel about a half-dozen
X > times, all with no errors.  The fix is a new version of routine
X > `com_out' for the file `kernel/wini.c'.  Just replace `com_out' with
X > this one, recompile the kernel and the hard disk should work.
X > 
X > Don Dugger
X > Wildridge Consulting
X > ...nbires!onecom!wldrdg!n0ano
X > 
X > */
X > 
X > 
X 535d577
X < 	port_out(WIN_SELECT, mode);
X 537c579,580
X < 	for (i=0; i<MAX_WIN_RETRY; i++) {
X ---
X > 	port_out(WIN_SELECT, mode);
X > 	for (i=0; i<300; i++) {
X 539c582
X < 		if ((r & 0x0F) == 0x0D)
X ---
X > 		if (r & 8)
X 542c585
X < 	if (i == MAX_WIN_RETRY) {
X ---
X > 	if (i == 300) {
X 547c590,605
X < 	for (i=0; i<6; i++)
X ---
X > 	for (i=0; i<6; i++) {
X > 		for (;;) {
X > 			port_in(WIN_STATUS, &r);
X > 			if (r & 1)
X > 				break;
X > 			if ((r & 8) == 0) {
X > 				w_need_reset = TRUE;
X > 				unlock();
X > 				return(ERR);
X > 			}
X > 		}
X > 		if ((r & 0xe) != 0xc) {
X > 			w_need_reset = TRUE;
X > 			unlock();
X > 			return(ERR);
X > 		}
X 548a607
X > 	}
X 550,555c609
X < 	port_in(WIN_STATUS, &r);
X < 	if (r & 1) {
X < 		w_need_reset = TRUE;
X < 		return(ERR);
X < 	} else
X < 		return(OK);
X ---
X > 	return(OK);
SHAR-EOF
sed 's/^X //' >fsckdiff <<SHAR-EOF
X 9a10
X > #define HERE			/* fixes for Adaptec ACB-2070a */
X 11d11
X < 
X 1852a1853,1856
X > #ifdef HERE
X > 			cylsiz = 100;	/* 4 heads -- ST-238-specific */
X > 			tracksiz = 25;
X > #else
X 1854a1859
X > #endif
SHAR-EOF
--
backstro@silver.bacs.indiana.edu