Sync up drivers/scsi/aic7xxx
PATCH 11/28 Sync up drivers/scsi/aic7xxx
Sync up drivers/scsi/aic7xxx/. (2316-2391)
==== //depot/aic7xxx/aic7xxx/aic79xx.seq#102 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.seq ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.seq renamed from tmp/tmp.26512.0 +37 -14
@@ -40,7 +40,7 @@ * $FreeBSD$ */ -VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#102 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#104 $" PATCH_ARG_LIST = "struct ahd_softc *ahd" PREFIX = "ahd_"
@@ -90,6 +90,13 @@ test SSTAT2, NONPACKREQ jz . + 2; call unexpected_nonpkt_phase_find_ctxt; if ((ahd->bugs & AHD_FAINT_LED_BUG) != 0) { + /* + * On Rev A. hardware, the busy LED is only + * turned on automaically during selections + * and re-selections. Make the LED status + * more useful by forcing it to be on so + * long as one of our data FIFOs is active. + */ and A, FIFO0FREE|FIFO1FREE, DFFSTAT; cmp A, FIFO0FREE|FIFO1FREE jne . + 3; and SBLKCTL, ~DIAGLEDEN|DIAGLEDON;
@@ -180,26 +187,18 @@ * bad SCSI status (currently only for underruns), we * queue the SCB for normal completion. Otherwise, we * wait until any select-out activity has halted, and - * then notify the host so that the transaction can be - * dealt with. + * then queue the completion. */ - test SCB_SCSI_STATUS, 0xff jnz scbdma_notify_host; - and CCSCBCTL, ~(CCARREN|CCSCBEN); - bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2; - bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2; - bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret; -scbdma_notify_host: + test SCB_SCSI_STATUS, 0xff jz scbdma_queue_completion; SET_MODE(M_SCSI, M_SCSI) test SCSISEQ0, ENSELO jnz return; test SSTAT0, (SELDO|SELINGO) jnz return; SET_MODE(M_CCHAN, M_CCHAN) - /* - * Remove SCB and notify host. - */ +scbdma_queue_completion: and CCSCBCTL, ~(CCARREN|CCSCBEN); bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2; - SET_SEQINTCODE(BAD_SCB_STATUS) - ret; + bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2; + bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret; fill_qoutfifo_dmadone: and CCSCBCTL, ~(CCARREN|CCSCBEN); call qoutfifo_updated;
@@ -491,6 +490,18 @@ SET_DST_MODE M_SCSI; select_in: if ((ahd->bugs & AHD_FAINT_LED_BUG) != 0) { + /* + * On Rev A. hardware, the busy LED is only + * turned on automaically during selections + * and re-selections. Make the LED status + * more useful by forcing it to be on from + * the point of selection until our idle + * loop determines that neither of our FIFOs + * are busy. This handles the non-packetized + * case nicely as we will not return to the + * idle loop until the busfree at the end of + * each transaction. + */ or SBLKCTL, DIAGLEDEN|DIAGLEDON; } if ((ahd->bugs & AHD_BUSFREEREV_BUG) != 0) {
@@ -531,6 +542,18 @@ SET_DST_MODE M_SCSI; select_out: if ((ahd->bugs & AHD_FAINT_LED_BUG) != 0) { + /* + * On Rev A. hardware, the busy LED is only + * turned on automaically during selections + * and re-selections. Make the LED status + * more useful by forcing it to be on from + * the point of re-selection until our idle + * loop determines that neither of our FIFOs + * are busy. This handles the non-packetized + * case nicely as we will not return to the + * idle loop until the busfree at the end of + * each transaction. + */ or SBLKCTL, DIAGLEDEN|DIAGLEDON; } BEGIN_CRITICAL;
==== //depot/aic7xxx/aic7xxx/aic79xx.c#210 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_core.c ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_core.c renamed from tmp/tmp.26512.1 +242 -249
703 lines not on this page · raw message
==== //depot/aic7xxx/aic7xxx/aic79xx_inline.h#54 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_inline.h ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_inline.h renamed from tmp/tmp.26512.2 +10 -1
@@ -37,7 +37,7 @@* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * -* $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#54 $ +* $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#55 $ * * $FreeBSD$ */
@@ -522,12 +522,21 @@static __inlineuint16_t ahd_inw (struct ahd_softc *ahd,u_int port) { +/* +* Read high byte first as some registers increment +* or have other side effects when the low byte is +* read. +*/ return ((ahd_inb (ahd, port+1 ) <<8 ) |ahd_inb (ahd, port)); }static __inlinevoid ahd_outw (struct ahd_softc *ahd,u_int port,u_int value) { +/* +* Write low byte first to accomodate registers +* such as PRGMCNT where the order maters. +*/ ahd_outb (ahd, port, value &0xFF );ahd_outb (ahd, port+1 , (value >>8 ) &0xFF ); }
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#146 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_osm.h ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_osm.h renamed from tmp/tmp.26512.3 +2 -2
@@ -36,7 +36,7 @@* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * -* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#146 $ +* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#147 $ * */ #ifndef _AIC79XX_LINUX_H_
@@ -132,7 +132,7 @@#define AHD_SCSI_HAS_HOST_LOCK 0#endif -#define AIC79XX_DRIVER_VERSION "2.0.1" +#define AIC79XX_DRIVER_VERSION "2.0.2"/********************* Definitions Required by the Core ***********************/ /*
==== //depot/aic7xxx/aic7xxx/aic7xxx.seq#57 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx.seq ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx.seq renamed from tmp/tmp.26512.4 +2 -2
@@ -40,7 +40,7 @@ * $FreeBSD$ */ -VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#57 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#58 $" PATCH_ARG_LIST = "struct ahc_softc *ahc" PREFIX = "ahc_"
@@ -1098,7 +1098,7 @@ test SCB_RESIDUAL_DATACNT[3], SG_LAST_SEG jz dma_mid_sg; if ((ahc->flags & AHC_TARGETROLE) != 0) { test SSTAT0, TARGET jz dma_last_sg; - if ((ahc->flags & AHC_TMODE_WIDEODD_BUG) != 0) { + if ((ahc->bugs & AHC_TMODE_WIDEODD_BUG) != 0) { test DMAPARAMS, DIRECTION jz dma_mid_sg; } }
==== //depot/aic7xxx/aic7xxx/aic7xxx.c#140 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_core.c ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_core.c renamed from tmp/tmp.26512.5 +14 -2
@@ -37,7 +37,7 @@* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * -* $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#140 $ +* $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#141 $ * * $FreeBSD$ */
@@ -6929,8 +6929,8 @@* Been down this road before. * Do a full bus reset. */ -bus_reset:aic_set_transaction_status (scb,CAM_CMD_TIMEOUT ); +bus_reset: found =ahc_reset_channel (ahc, channel,/*Initiate Reset*/ TRUE); printf("%s: Issued Channel %c Bus Reset. "
@@ -7023,6 +7023,18 @@printf ("BDR message in message buffer\n" ); active_scb->flags |=SCB_DEVICE_RESET ;aic_scb_timer_reset (scb,2 *1000000 ); + }else if (last_phase !=P_BUSFREE + && (ahc_inb (ahc,SSTAT1 ) &REQINIT ) ==0 ) { +/* +* SCB is not identified, there +* is no pending REQ, and the sequencer +* has not seen a busfree. Looks like +* a stuck connection waiting to +* go busfree. Reset the bus. +*/ +printf ("%s: Connection stuck awaiting busfree or " +"Identify Msg.\n" ,ahc_name (ahc)); + goto bus_reset; }else {int disconnected;
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#245 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.c ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.c renamed from tmp/tmp.26512.6 +5 -1
@@ -1,7 +1,7 @@/* * Adaptec AIC7xxx device driver for Linux. * -* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#245 $ +* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#246 $ * * Copyright (c) 1994 John Aycock * The University of Calgary Department of Computer Science.
@@ -1506,6 +1506,7 @@/* Still equal. Sort by BIOS address, ioport, or bus/slot/func. */ switch (rvalue) { +#ifdef CONFIG_PCI case AHC_PCI : {char primary_channel;
@@ -1538,6 +1539,8 @@ value =1 ;break ; } +#endif +#ifdef CONFIG_EISA case AHC_EISA :if ((rahc->flags &AHC_BIOS_ENABLED ) !=0 ) { value = rahc->platform_data->bios_address
@@ -1547,6 +1550,7 @@ - lahc->bsh.ioport; }break ; +#endif default :panic ("ahc_softc_sort: invalid bus type" ); }
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#158 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.h ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.h renamed from tmp/tmp.26512.7 +2 -2
@@ -53,7 +53,7 @@* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * -* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#158 $ +* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#159 $ * */ #ifndef _AIC7XXX_LINUX_H_
@@ -148,7 +148,7 @@#define AHC_SCSI_HAS_HOST_LOCK 0#endif -#define AIC7XXX_DRIVER_VERSION "6.2.37" +#define AIC7XXX_DRIVER_VERSION "6.3.0"/********************* Definitions Required by the Core ***********************/ /*
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aicasm/Makefile#14 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aicasm/Makefile ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aicasm/Makefile renamed from tmp/tmp.26512.8 +8 -0
@@ -49,11 +49,19 @@ clean: rm -f $(clean-files) +# Create a dependency chain in generated files +# to avoid concurrent invocations of the single +# rule that builds them all. +aicasm_gram.c: aicasm_gram.h aicasm_gram.c aicasm_gram.h: aicasm_gram.y $(YACC) $(YFLAGS) -b $(<:.y=) $< mv $(<:.y=).tab.c $(<:.y=.c) mv $(<:.y=).tab.h $(<:.y=.h) +# Create a dependency chain in generated files +# to avoid concurrent invocations of the single +# rule that builds them all. +aicasm_macro_gram.c: aicasm_macro_gram.h aicasm_macro_gram.c aicasm_macro_gram.h: aicasm_macro_gram.y $(YACC) $(YFLAGS) -b $(<:.y=) -p mm $< mv $(<:.y=).tab.c $(<:.y=.c)
==== //depot/aic7xxx/aic7xxx/aicasm/aicasm.c#22 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aicasm/aicasm.c ====
home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aicasm/aicasm.c renamed from tmp/tmp.26512.9 +16 -7
@@ -37,7 +37,7 @@* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * -* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm.c#22 $ +* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm.c#23 $ * * $FreeBSD$ */
@@ -609,10 +609,10 @@while (line < cur_instr->srcline) {fgets (buf,sizeof (buf), ifile); -fprintf (listfile,"\t\t%s" , buf); +fprintf (listfile," \t%s" , buf); line++; } - fprintf(listfile, "%03x %02x%02x%02x%02x", instrptr, + fprintf(listfile, "%04x %02x%02x%02x%02x", instrptr, #if BYTE_ORDER == LITTLE_ENDIAN cur_instr->format.bytes[0], cur_instr->format.bytes[1],
@@ -624,14 +624,23 @@ cur_instr->format.bytes[1 ], cur_instr->format.bytes[0]);#endif -fgets (buf,sizeof (buf), ifile); -fprintf (listfile,"\t%s" , buf); - line++; +/* +* Macro expansions can cause several instructions +* to be output for a single source line. Only +* advance the line once in these cases. +*/ +if (line == cur_instr->srcline) { +fgets (buf,sizeof (buf), ifile); +fprintf (listfile,"\t%s" , buf); + line++; + }else { +fprintf (listfile,"\n" ); + } instrptr++; }/* Dump the remainder of the file */ while (fgets (buf,sizeof (buf), ifile) !=NULL ) -fprintf (listfile,"\t\t%s" , buf); +fprintf (listfile," %s" , buf);fclose (ifile); }