From owner-freebsd-current Wed Jun 5 08:11:37 1996 Return-Path: owner-current Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id IAA07422 for current-outgoing; Wed, 5 Jun 1996 08:11:37 -0700 (PDT) Received: from freefall.freebsd.org (localhost.cdrom.com [127.0.0.1]) by freefall.freebsd.org (8.7.5/8.7.3) with ESMTP id IAA07388; Wed, 5 Jun 1996 08:11:31 -0700 (PDT) Message-Id: <199606051511.IAA07388@freefall.freebsd.org> To: Beck Peccoz Amedeo cc: freebsd-current@FreeBSD.org Subject: Re: CD-ROM hags the machine In-reply-to: Your message of "Wed, 05 Jun 1996 11:04:29 +0200." <31B54D9D.41C67EA6@masternet.it> Date: Wed, 05 Jun 1996 08:11:31 -0700 From: "Justin T. Gibbs" Sender: owner-current@FreeBSD.org X-Loop: FreeBSD.org Precedence: bulk > 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); }