Date: Wed, 05 Jun 1996 08:11:31 -0700 From: "Justin T. Gibbs" <gibbs@freefall.freebsd.org> To: Beck Peccoz Amedeo <gea@masternet.it> Cc: freebsd-current@FreeBSD.org Subject: Re: CD-ROM hags the machine Message-ID: <199606051511.IAA07388@freefall.freebsd.org> In-Reply-To: Your message of "Wed, 05 Jun 1996 11:04:29 %2B0200." <31B54D9D.41C67EA6@masternet.it>
next in thread | previous in thread | raw e-mail | index | archive | help
> The only way to get out of this is to shut the system down...
>
> I belive it's a software problem as:
>1) the CD-ROM works under two other operting systems on the same machine
>2) the CD-ROM works with 2.2 kernel.GENERIC
I'd be very surprised to see the same sources under a different
kernel config behave differently in this regard.
> Anyway my machine is configured as follows:
> - Controller SCSI Adaptech 2940 U/UW bios v1.21
> - HD SCSI Wide Seagate ST32550W (connected to the wide connector)
> - CD-ROM SCSI-II Sony CDU 76-S (connected to the standard connector)
>
> May this be due to actual VM problems? If not should I argue there's a
>bug in the ahc controller?
Its not a VM problem. Here's a patch I've put out to some driver testers
that may address this problem.
>--
>
>Beck-Peccoz Amedeo
>GEA Software S.r.l.
>Via Deffeyes, 1
>11025 Gressoney Saint Jean (AO)
>ITALY
>
>Tel. ++39-125-366302 Fax. ++39-125-366415
>
--
Justin T. Gibbs
===========================================
FreeBSD: Turning PCs into workstations
===========================================
Index: dev/aic7xxx/aic7xxx.seq
===================================================================
RCS file: /usr/cvs/src/sys/dev/aic7xxx/aic7xxx.seq,v
retrieving revision 1.40
diff -c -r1.40 aic7xxx.seq
*** aic7xxx.seq 1996/05/31 06:30:15 1.40
--- aic7xxx.seq 1996/06/04 20:06:33
***************
*** 83,88 ****
--- 83,93 ----
start:
and FLAGS,0x0f /* clear target specific flags */
mvi SCSISEQ,ENRSELI /* Always allow reselection */
+ clr SCSIRATE /*
+ * We don't know the target we will
+ * connect to, so default to narrow
+ * transfers to avoid parity problems.
+ */
poll_for_work:
/*
* Are we a twin channel device?
***************
*** 274,282 ****
set_sxfrctl0:
mov SXFRCTL0,SINDEX
! mov SCSISEQ,ALLZEROS /*
! * Don't allow (re)selections
! * until after the next busfree.
*/
mvi CLRSINT1,CLRBUSFREE
mvi CLRSINT0,0x60 /* CLRSELDI|CLRSELDO */
--- 279,287 ----
set_sxfrctl0:
mov SXFRCTL0,SINDEX
! mov SCSISEQ,ENAUTOATNP /*
! * ATN on parity errors
! * for "in" phases
*/
mvi CLRSINT1,CLRBUSFREE
mvi CLRSINT0,0x60 /* CLRSELDI|CLRSELDO */
***************
*** 499,508 ****
* a MESSAGE REJECT.
*/
p_mesgout_loop:
test SSTAT0,SPIORDY jz p_mesgout_loop
cmp DINDEX,1 jne p_mesgout_outb /* last byte? */
mvi CLRSINT1,CLRATNO /* drop ATN */
- test SSTAT1,PHASEMIS jnz p_mesgout_phasemis
p_mesgout_outb:
dec DINDEX
or CLRSINT0, CLRSPIORDY
--- 504,514 ----
* a MESSAGE REJECT.
*/
p_mesgout_loop:
+ test SSTAT1,PHASEMIS jnz p_mesgout_phasemis
test SSTAT0,SPIORDY jz p_mesgout_loop
+ test SSTAT1,PHASEMIS jnz p_mesgout_phasemis
cmp DINDEX,1 jne p_mesgout_outb /* last byte? */
mvi CLRSINT1,CLRATNO /* drop ATN */
p_mesgout_outb:
dec DINDEX
or CLRSINT0, CLRSPIORDY
***************
*** 866,871 ****
--- 872,878 ----
or CLRSINT0, CLRSPIORDY
mov NONE,SCSIDATL /*dummy read from latch to ACK*/
inb_next_wait:
+ test SSTAT1,PHASEMIS jnz mesgin_phasemis
test SSTAT0,SPIORDY jz inb_next_wait /* wait for next byte */
inb_first:
mov DINDEX,SINDEX
Index: i386/scsi/aic7xxx.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/scsi/aic7xxx.c,v
retrieving revision 1.72
diff -c -r1.72 aic7xxx.c
*** aic7xxx.c 1996/05/31 06:32:09 1.72
--- aic7xxx.c 1996/06/01 08:01:34
***************
*** 1744,1757 ****
printf("parity error during %s phase.\n", phase);
/*
! * Assert ATN if we got a parity error in an "in"
! * phase, and stuff the message buffer with
* the appropriate message. "In" phases have set
* mesg_out to something other than MSG_NOP.
*/
if(mesg_out != MSG_NOP) {
- u_char scsisig = AHC_INB(ahc, SCSISIGI);
- AHC_OUTB(ahc, SCSISIGO, scsisig | ATNO);
AHC_OUTB(ahc, MSG0, mesg_out);
AHC_OUTB(ahc, MSG_LEN, 1);
}
--- 1744,1756 ----
printf("parity error during %s phase.\n", phase);
/*
! * We've set the hardware to assert ATN if we
! * get a parity error on "in" phases, so all we
! * need to do is stuff the message buffer with
* the appropriate message. "In" phases have set
* mesg_out to something other than MSG_NOP.
*/
if(mesg_out != MSG_NOP) {
AHC_OUTB(ahc, MSG0, mesg_out);
AHC_OUTB(ahc, MSG_LEN, 1);
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199606051511.IAA07388>
