Date: Thu, 9 Apr 1998 04:08:59 -0700 (PDT) From: deischen@iworks.InterWorks.org To: freebsd-gnats-submit@FreeBSD.ORG Subject: kern/6253: Atapi wait for command phase too short. Message-ID: <199804091108.EAA12289@hub.freebsd.org>
index | next in thread | raw e-mail
>Number: 6253
>Category: kern
>Synopsis: Atapi wait for command phase too short.
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Apr 9 04:10:01 PDT 1998
>Last-Modified:
>Originator: Daniel Eischen
>Organization:
>Release: 3.0-current
>Environment:
FreeBSD rigel 3.0-CURRENT FreeBSD 3.0-CURRENT #0: Sun Apr 5 18:33:42 EDT 1998
deischen@rigel:/opt/b/src/src/sys/compile/rigel1 i386
>Description:
I am unable to use the CD-ROM drive on my ChemUSA Chembook laptop
without changing the atapi.c to allow for a longer wait for DRQ
(see atapi_wait_cmd in atapi.c). After attempting to access the
CD-ROM drive (with mount), the process hangs and has to be killed.
Attempting to access the CD-ROM drive again will hang the system
forcing a hard reset.
Without having access to a CD-ROM drive, it is very difficult to install
FreeBSD, especially on a laptop where trying to get a network card
configured for the installation is almost impossible.
>How-To-Repeat:
Try to mount the CD-ROM drive.
>Fix:
I include a patch that raises the wait time from 50 to 75 usecs.
This should have no ill effects on devices that take less time
to change phase to PHASE_CMDOUT. For that matter, raising the
time to higher than 75 usecs might be warranted, especially in
FAILSAFE mode.
cvs diff: Diffing .
Index: atapi.c
===================================================================
RCS file: /opt/b/CVS/src/sys/i386/isa/atapi.c,v
retrieving revision 1.24
diff -c -r1.24 atapi.c
*** atapi.c 1998/03/01 18:57:27 1.24
--- atapi.c 1998/04/08 22:57:56
***************
*** 632,638 ****
int atapi_wait_cmd (struct atapi *ata, struct atapicmd *ac)
{
/* Wait for DRQ from 50 usec to 3 msec for slow devices */
! int cnt = ata->intrcmd ? 10000 : ata->slow ? 3000 : 50;
int ireason = 0, phase = 0;
/* Wait for command phase. */
--- 632,638 ----
int atapi_wait_cmd (struct atapi *ata, struct atapicmd *ac)
{
/* Wait for DRQ from 50 usec to 3 msec for slow devices */
! int cnt = ata->intrcmd ? 10000 : ata->slow ? 3000 : 75;
int ireason = 0, phase = 0;
/* Wait for command phase. */
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199804091108.EAA12289>
