Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Mar 1996 07:37:53 -0800
From:      "Justin T. Gibbs" <gibbs@freefall.freebsd.org>
To:        Jaye Mathisen <mrcpu@cdsnet.net>
Cc:        "Rodney W. Grimes" <rgrimes@gndrsh.aac.dev.com>, se@ZPR.Uni-Koeln.DE, questions@freebsd.org
Subject:   Re: NCR disk controller, hp disk 
Message-ID:  <199603121537.HAA22856@freefall.freebsd.org>
In-Reply-To: Your message of "Tue, 12 Mar 1996 00:14:43 PST." <Pine.BSF.3.91.960312001300.12818p-100000@schizo.cdsnet.net> 

next in thread | previous in thread | raw e-mail | index | archive | help
>
>Hmmm, I'm running with QUEUE_FULL_SUPPORTED against my RAID box and it 
>works OK.  I did see a queue full condition one time, but upgrading to 
>latest -current (as of back then) fixed it.

I thought that your RAID box wasn't working with the aic7xxx driver...

>Oh shoot.  I just built a kernel tonight with -current, and now it's 
>barfing when trying to sense the drive geometry.  A kernel from a few 
>days ago works fine.  I get an invalid SCB error or somesuch...

Yeah, I know.  I sent Satoshi a patch to try and see what it was I broke.
It seems to be solely a problem with aic7880 based cards.  I haven't
heard back from him yet.  Perhaps you can try the following patch and
see what's printed out?

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

Index: i386/scsi/aic7xxx.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/scsi/aic7xxx.c,v
retrieving revision 1.57
diff -c -r1.57 aic7xxx.c
*** aic7xxx.c	1996/03/11 02:48:41	1.57
--- aic7xxx.c	1996/03/11 17:19:02
***************
*** 1162,1181 ****
  			u_char channel;
  			PAUSE_SEQUENCER(ahc);
  			channel = inb(SBLKCTL + iobase);
! 			if( !(inb(SCSISEQ + iobase ) & SCSIRSTO)
  			 && (ahc->flags & AHC_TWIN) )
  			{
  				/* Its on the other bus */
  				channel ^= SELBUSB;
  			}
  			ahc_reset_channel(ahc, 
! 					  channel & SELBUSB ? 'B' : 'A',
  					  SCB_LIST_NULL,
  					  XS_BUSY,
  					  /* Initiate Reset */FALSE);
- 			ahc_run_done_queue(ahc);
  		}
! 		if (status & SELTO) {
  			u_char waiting;
  			u_char flags;
                          xs->error = XS_TIMEOUT;
--- 1162,1183 ----
  			u_char channel;
  			PAUSE_SEQUENCER(ahc);
  			channel = inb(SBLKCTL + iobase);
! 			if(!(inb(SCSISEQ + iobase ) & SCSIRSTO)
  			 && (ahc->flags & AHC_TWIN) )
  			{
  				/* Its on the other bus */
  				channel ^= SELBUSB;
  			}
+ 			channel = channel & SELBUSB ? 'B' : 'A';
+ 			printf("ahc%d: Someone reset channel %c\n",
+ 				channel);
  			ahc_reset_channel(ahc, 
! 					  channel,
  					  SCB_LIST_NULL,
  					  XS_BUSY,
  					  /* Initiate Reset */FALSE);
  		}
! 		else if (status & SELTO) {
  			u_char waiting;
  			u_char flags;
                          xs->error = XS_TIMEOUT;
***************
*** 2359,2365 ****
  		{
  			ahc_reset_current_bus(iobase);
  		}
! 		outb(CLRSINT1 + iobase, CLRSCSIRSTI);
  		outb(SBLKCTL + iobase, sblkctl);
  		UNPAUSE_SEQUENCER(ahc);
  	}
--- 2361,2368 ----
  		{
  			ahc_reset_current_bus(iobase);
  		}
! 		outb(CLRSINT1 + iobase, CLRSCSIRSTI|CLRSELTIMEO);
! 		outb(CLRINT + iobase, CLRSCSIINT);
  		outb(SBLKCTL + iobase, sblkctl);
  		UNPAUSE_SEQUENCER(ahc);
  	}
***************
*** 2369,2375 ****
  		{
  			ahc_reset_current_bus(iobase);
  		}
! 		outb(CLRSINT1 + iobase, CLRSCSIRSTI);
  		RESTART_SEQUENCER(ahc);
  	}
  	ahc_run_done_queue(ahc);
--- 2372,2379 ----
  		{
  			ahc_reset_current_bus(iobase);
  		}
! 		outb(CLRSINT1 + iobase, CLRSCSIRSTI|CLRSELTIMEO);
! 		outb(CLRINT + iobase, CLRSCSIINT);
  		RESTART_SEQUENCER(ahc);
  	}
  	ahc_run_done_queue(ahc);



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