Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Aug 1997 08:51:00 -0600
From:      "Justin T. Gibbs" <gibbs@plutotech.com>
Cc:        current@FreeBSD.org, stable@FreeBSD.org
Subject:   Re: Possible aic7xxx fix. 
Message-ID:  <199708121450.IAA15534@pluto.plutotech.com>
In-Reply-To: Your message of "Mon, 11 Aug 1997 22:48:26 MDT."

next in thread | raw e-mail | index | archive | help
There was a small bug in the last patch I sent out.  Please try this
one instead.  Thanks to Tor Egge for pointing out the problem.

--
Justin T. Gibbs
===========================================
  FreeBSD - Turning PCs into workstations
===========================================

Index: dev/aic7xxx/aic7xxx.reg
===================================================================
RCS file: /usr/cvs/src/sys/dev/aic7xxx/aic7xxx.reg,v
retrieving revision 1.4
diff -c -r1.4 aic7xxx.reg
*** aic7xxx.reg	1997/06/27 19:38:39	1.4
--- aic7xxx.reg	1997/08/12 14:25:35
***************
*** 1079,1084 ****
--- 1079,1099 ----
  	CUR_SCBID {
  		size		1
  	}
+ 	/*
+ 	 * Running count of commands placed in
+ 	 * the QOUTFIFO.  This is cleared by the
+ 	 * kernel driver every FIFODEPTH commands.
+ 	 */
+ 	CMDOUTCNT {
+ 		size		1
+ 	}
+ 	/*
+ 	 * Maximum number of entries allowed in
+ 	 * the QOUT/INFIFO.
+ 	 */
+ 	FIFODEPTH {
+ 		size		1
+ 	}
  	ARG_1 {
  		size		1
  		mask	SEND_MSG	0x80
Index: dev/aic7xxx/aic7xxx.seq
===================================================================
RCS file: /usr/cvs/src/sys/dev/aic7xxx/aic7xxx.seq,v
retrieving revision 1.74
diff -c -r1.74 aic7xxx.seq
*** aic7xxx.seq	1997/06/27 19:38:42	1.74
--- aic7xxx.seq	1997/08/12 14:25:35
***************
*** 643,648 ****
--- 643,657 ----
  
  complete:
  	/* Post the SCB and issue an interrupt */
+ .if ( SCB_PAGING )
+ 	/*
+ 	 * Spin loop until there is space
+ 	 * in the QOUTFIFO.
+ 	 */
+ 	mov	A, FIFODEPTH;
+ 	cmp	CMDOUTCNT, A	je .;
+ 	inc	CMDOUTCNT;
+ .endif
  	mov	QOUTFIFO,SCB_TAG;
  	mvi	INTSTAT,CMDCMPLT;
  	test	SCB_CONTROL, ABORT_SCB jz dma_next_scb;
Index: i386/scsi/aic7xxx.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/scsi/aic7xxx.c,v
retrieving revision 1.120
diff -c -r1.120 aic7xxx.c
*** aic7xxx.c	1997/07/20 16:21:34	1.120
--- aic7xxx.c	1997/08/12 14:42:25
***************
*** 784,789 ****
--- 784,802 ----
  
  		int_cleared = 0;
  		while (qoutcnt = (ahc_inb(ahc, QOUTCNT) & ahc->qcntmask)) {
+ 			if ((ahc->flags & AHC_PAGESCBS) != 0) {
+ 				ahc->cmdoutcnt += qoutcnt;
+ 				if (ahc->cmdoutcnt >= ahc->qfullcount) {
+ 					/*
+ 					 * Since paging only occurs on
+ 					 * aic78X0 chips, we can use
+ 					 * Auto Access Pause to clear
+ 					 * the command count.
+ 					 */
+ 					ahc_outb(ahc, CMDOUTCNT, 0);
+ 					ahc->cmdoutcnt = 0;
+ 				}
+ 			}
  			for (; qoutcnt > 0; qoutcnt--) {
  				scb_index = ahc_inb(ahc, QOUTFIFO);
  				scb = ahc->scb_data->scbarray[scb_index];
***************
*** 2305,2310 ****
--- 2318,2326 ----
  	 * their QCount registers.
  	 */
  	ahc_outb(ahc, QCNTMASK, ahc->qcntmask);
+ 
+ 	ahc_outb(ahc, FIFODEPTH, ahc->qfullcount);
+ 	ahc_outb(ahc, CMDOUTCNT, 0);
  
  	/* We don't have any waiting selections */
  	ahc_outb(ahc, WAITING_SCBH, SCB_LIST_NULL);
Index: i386/scsi/aic7xxx.h
===================================================================
RCS file: /usr/cvs/src/sys/i386/scsi/aic7xxx.h,v
retrieving revision 1.41
diff -c -r1.41 aic7xxx.h
*** aic7xxx.h	1997/06/27 19:39:20	1.41
--- aic7xxx.h	1997/08/12 14:25:36
***************
*** 265,270 ****
--- 265,271 ----
  					 * waiting for space in the QINFIFO.
  					 */
  	u_int8_t	activescbs;
+ 	u_int8_t	cmdoutcnt;
  	u_int16_t	needsdtr_orig;	/* Targets we initiate sync neg with */
  	u_int16_t	needwdtr_orig;	/* Targets we initiate wide neg with */
  	u_int16_t	needsdtr;	/* Current list of negotiated targets */





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