Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Apr 1998 11:48:43 +0900
From:      Satoh Junichi <junichi@astec.co.jp>
To:        jeays@statcan.ca
Cc:        freebsd-stable@FreeBSD.ORG, junichi@astec.co.jp
Subject:   Re: ATAPI Zip drive
Message-ID:  <199804130248.LAA01315@kamui.astec.co.jp>
In-Reply-To: Your message of "Tue, 31 Mar 1998 17:32:21 %2B0900"
References:  <199803310832.RAA24379@tamtam.astec.co.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
----Next_Part(Mon_Apr_13_11:48:40_1998)--
Content-Type: Text/Plain; charset=us-ascii

> > When I attempt to mount either the CD-ROM or the ZIP drive, mount
> > hangs, and I have to interrupt it with ctrl-C.  If I do this
> > a second time, the system crashes.  (X stops.  Attempts to
> > log on through another tty don't work - characters entered after
> > the login prompt just get echoed to the screen.  It is big red
> > switch time!)
> 
> Hmm...  I don't know why.

I tested some combination of ATAPI devices, CD-ROM, ZIP and LS-120, on
an IDE channel. I found the kernel is down by combination of the 'accel'
and the 'intr' devices. For example, MATSUSHITA x24 CD-ROM drive and
IOMEGA ZIP drive:
===========================================================================
wdc1: unit 0 (atapi): <MATSHITA CR-587/7S13>, removable, accel, dma, iordis
                                                         ^^^^^
wdc1: unit 1 (atapi): <IOMEGA  ZIP 100       ATAPI/23.D>, removable, intr, 
                                                                     ^^^^
===========================================================================

Now, when one device supports the 'intr', the atapi driver also supports
it. It's not correct. The driver should *NOT* support it when the other
device doesn't support it.

I made a patch against the 2.2.6R atapi driver. After apply it, any
combinations are acceptable.
---
Junichi

----Next_Part(Mon_Apr_13_11:48:40_1998)--
Content-Type: Text/Plain; charset=us-ascii

diff -r -c isa.ORG/atapi.c isa/atapi.c
*** isa.ORG/atapi.c	Sat Jan 17 07:28:42 1998
--- isa/atapi.c	Sun Apr 12 17:10:54 1998
***************
*** 218,229 ****
  	switch (ap->drqtype) {
  	case AT_DRQT_MPROC: ata->slow = 1; break;
  	case AT_DRQT_INTR:  printf (", intr"); ata->intrcmd = 1; break;
! 	case AT_DRQT_ACCEL: printf (", accel"); break;
  	default:            printf (", drq%d", ap->drqtype);
  	}
  	/* When 'slow' is set, clear 'intrcmd' */
  	if (ata->slow)
  		ata->intrcmd = 0;
  
  	/* overlap operation supported */
  	if (ap->ovlapflag)
--- 218,235 ----
  	switch (ap->drqtype) {
  	case AT_DRQT_MPROC: ata->slow = 1; break;
  	case AT_DRQT_INTR:  printf (", intr"); ata->intrcmd = 1; break;
! 	case AT_DRQT_ACCEL: printf (", accel"); ata->accel = 1; break;
  	default:            printf (", drq%d", ap->drqtype);
  	}
  	/* When 'slow' is set, clear 'intrcmd' */
  	if (ata->slow)
  		ata->intrcmd = 0;
+ 
+ 	/* When 'accel' and 'intrcmd' are set, clear 'intrcmd' and set 'slow' */
+ 	if (ata->accel && ata->intrcmd) {
+ 		ata->intrcmd = 0;
+ 		ata->slow = 1;
+ 	}
  
  	/* overlap operation supported */
  	if (ap->ovlapflag)
diff -r -c isa.ORG/atapi.h isa/atapi.h
*** isa.ORG/atapi.h	Sat Jan 17 07:28:42 1998
--- isa/atapi.h	Sun Apr 12 17:12:37 1998
***************
*** 234,239 ****
--- 234,240 ----
  	u_char           cmd16 : 1;     /* 16-byte command flag */
  	u_char           intrcmd : 1;   /* interrupt before cmd flag */
  	u_char           slow : 1;      /* slow reaction device */
+ 	u_char           accel : 1;     /* accell reaction device */
  	u_char           attached[2];   /* units are attached to subdrivers */
  	struct atapi_params *params[2]; /* params for units 0,1 */
  	struct atapicmd *queue;         /* queue of commands to perform */

----Next_Part(Mon_Apr_13_11:48:40_1998)----

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message



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