public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: "Justin T. Gibbs" <gibbs@scsiguy.com>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: linux-scsi@vger.kernel.org
Subject: Re: Aic7xxx and Aic79xx driver updates.
Date: Tue, 07 Jan 2003 20:46:35 -0700	[thread overview]
Message-ID: <679640000.1041997595@aslan.btc.adaptec.com> (raw)
In-Reply-To: <175810000.1041300864@aslan.btc.adaptec.com>

[-- Attachment #1: Type: text/plain, Size: 407 bytes --]

I've uploaded a new "bk send" file relative to the 2.5.X repository.
I've also attached the output from "Documentation/.../bksend".  The
"bk send" version can be found here:

http://people.FreeBSD.org/~gibbs/linux/SRC/aic79xx-linux-2.5-bksend.gz

This should correct the false positives some have seen with the 
mmapped I/O test on some of the older controllers that the aic7xxx
driver supports.

--
Justin

[-- Attachment #2: bksend.out --]
[-- Type: application/octet-stream, Size: 39794 bytes --]

You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================


ChangeSet@1.893.1.4, 2003-01-07 19:58:41-07:00, gibbs@overdrive.btc.adaptec.com
  aic7xxx and aic79xx driver updates:
  
  	o Correct memory mapped I/O test for legacy controllers
  	  that do not have the "auto-access-pause" feature.
  	o Prevent NMIs from triggering should the MMAP I/O test fail.
  	o Fix aic7770 (EISA/VLB) controller regression.
  	o Kill a few compiler warnings.

ChangeSet@1.893.1.3, 2003-01-07 19:40:37-07:00, gibbs@overdrive.btc.adaptec.com
  aic7xxx and aic79xx drivers Correct several DV issues:
  
   o Do not fallback to a wide speed if the device does not support
     wide transfers.
  
   o Don't bother allocating target instances for wide IDs on narrow
     controllers.
  
   o Add a few additional diagnostics to aid in tracking down DV bugs.

ChangeSet@1.893.1.2, 2003-01-07 19:32:07-07:00, gibbs@overdrive.btc.adaptec.com
  aic7xxx/aicasm:
     Remove the numerical_value portion of the grammer which is no
     longer referenced.  This eliminates a yacc warning.

ChangeSet@1.897, 2003-01-07 18:31:40-08:00, anton@samba.org
  [PATCH] small module patch
  
  Add a missing inline, shows up when modules are turned off.

ChangeSet@1.893.1.1, 2003-01-07 19:29:46-07:00, gibbs@overdrive.btc.adaptec.com
  Update the aic7xxx Makefile so that the register information tables
  are not rebuilt on every build.
  
  Use better Kbuild rule style for building firmware.
  
  Submitted by: Sam Ravnborg <sam@ravnborg.org>

ChangeSet@1.896, 2003-01-07 16:41:22-08:00, greg@kroah.com
  PCI hotplug: clean up the try_module_get() logic a bit.

ChangeSet@1.895, 2003-01-07 16:29:23-08:00, greg@kroah.com
  PCI: properly unregister a PCI device if it is removed.
  
  This is only used by pci hotplug and cardbus systems.

ChangeSet@1.894, 2003-01-07 16:24:14-08:00, greg@kroah.com
  IBM PCI Hotplug: fix compile time error due to find_bus() function name.


 Makefile                    |   49 ++++++++++++++---------------
 aic79xx_core.c              |   16 +++++----
 aic79xx_osm.c               |   25 +++++++++++++-
 aic79xx_osm.h               |   13 ++++---
 aic79xx_osm_pci.c           |    5 ++
 aic79xx_pci.c               |   25 ++++++++++----
 aic7xxx.h                   |    3 -
 aic7xxx.reg                 |    4 +-
 aic7xxx.seq                 |    4 +-
 aic7xxx_core.c              |   74 ++++++++------------------------------------
 aic7xxx_osm.c               |   29 ++++++++++++++---
 aic7xxx_osm.h               |   15 ++++----
 aic7xxx_osm_pci.c           |    6 +--
 aic7xxx_pci.c               |   34 +++++++++++++-------
 aic7xxx_reg.h_shipped       |    5 +-
 aic7xxx_reg_print.c_shipped |    4 +-
 aic7xxx_seq.h_shipped       |    4 +-
 aicasm/aicasm_gram.y        |   15 +-------
 18 files changed, 173 insertions(+), 157 deletions(-)


diff -Nru a/drivers/scsi/aic7xxx/Makefile b/drivers/scsi/aic7xxx/Makefile
--- a/drivers/scsi/aic7xxx/Makefile	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/Makefile	Tue Jan  7 20:41:22 2003
@@ -1,7 +1,7 @@
 #
 # Makefile for the Linux aic7xxx SCSI driver.
 #
-# $Id: //depot/linux-aic79xx-2.5.0/drivers/scsi/aic7xxx/Makefile#3 $
+# $Id: //depot/linux-aic79xx-2.5.0/drivers/scsi/aic7xxx/Makefile#5 $
 #
 
 # Let kbuild descend into aicasm when cleaning
@@ -44,40 +44,39 @@
 
 $(obj)/aic7xxx_core.o: $(obj)/aic7xxx_seq.h
 $(obj)/aic79xx_core.o: $(obj)/aic79xx_seq.h
+$(obj)/aic79xx_reg_print.c: $(src)/aic79xx_reg_print.c_shipped
+$(obj)/aic7xxx_reg_print.c: $(src)/aic7xxx_reg_print.c_shipped
 
 $(addprefix $(obj)/,$(aic7xxx-y)): $(obj)/aic7xxx_reg.h
 $(addprefix $(obj)/,$(aic79xx-y)): $(obj)/aic79xx_reg.h
 
+aic7xxx-gen-$(CONFIG_AIC7XXX_BUILD_FIRMWARE)	:= $(obj)/aic7xxx_seq.h \
+						   $(obj)/aic7xxx_reg.h
+aic7xxx-gen-$(CONFIG_AIC7XXX_REG_PRETTY_PRINT)	+= $(obj)/aic7xxx_reg_print.c
+
+aicasm-7xxx-opts-$(CONFIG_AIC7XXX_REG_PRETTY_PRINT) := \
+	-p $(obj)/aic7xxx_reg_print.c -i aic7xxx_osm.h
+
 ifeq ($(CONFIG_AIC7XXX_BUILD_FIRMWARE),y)
-aic7xxx_gen = $(obj)/aic7xxx_seq.h $(obj)/aic7xxx_reg.h
-ifeq ($(CONFIG_AIC7XXX_REG_PRETTY_PRINT),y)
-aic7xxx_gen += $(obj)/aic7xxx_reg_print.c
-aic7xxx_asm_cmd = $(obj)/aicasm/aicasm -I$(src) -r $(obj)/aic7xxx_reg.h \
-		 -p $(obj)/aic7xxx_reg_print.c -i aic7xxx_osm.h	   \
-		 -o $(obj)/aic7xxx_seq.h $(src)/aic7xxx.seq
-else
-aic7xxx_asm_cmd = $(obj)/aicasm/aicasm -I$(src) -r $(obj)/aic7xxx_reg.h \
-		 -o $(obj)/aic7xxx_seq.h $(src)/aic7xxx.seq
+$(aic7xxx-gen-y): $(src)/aic7xxx.seq $(src)/aic7xxx.reg $(obj)/aicasm/aicasm
+	$(obj)/aicasm/aicasm -I$(src) -r $(obj)/aic7xxx_reg.h \
+			      $(aicasm-7xxx-opts-y) -o $(obj)/aic7xxx_seq.h \
+			      $(src)/aic7xxx.seq
 endif
 
-$(aic7xxx_gen): $(src)/aic7xxx.seq $(src)/aic7xxx.reg $(obj)/aicasm/aicasm
-	$(aic7xxx_asm_cmd)
-endif
+aic79xx-gen-$(CONFIG_AIC79XX_BUILD_FIRMWARE)	:= $(obj)/aic79xx_seq.h \
+						   $(obj)/aic79xx_reg.h
+aic79xx-gen-$(CONFIG_AIC79XX_REG_PRETTY_PRINT)	+= $(obj)/aic79xx_reg_print.c
+
+aicasm-79xx-opts-$(CONFIG_AIC79XX_REG_PRETTY_PRINT) := \
+	-p $(obj)/aic79xx_reg_print.c -i aic79xx_osm.h
 
 ifeq ($(CONFIG_AIC79XX_BUILD_FIRMWARE),y)
-aic79xx_gen = $(obj)/aic79xx_seq.h $(obj)/aic79xx_reg.h
-ifeq ($(CONFIG_AIC79XX_REG_PRETTY_PRINT),y)
-aic79xx_gen += $(obj)/aic79xx_reg_print.c
-aic79xx_asm_cmd = $(obj)/aicasm/aicasm -I$(src) -r $(obj)/aic79xx_reg.h \
-		 -p $(obj)/aic79xx_reg_print.c -i aic79xx_osm.h	   \
-		 -o $(obj)/aic79xx_seq.h $(src)/aic79xx.seq
-else
-aic79xx_asm_cmd = $(obj)/aicasm/aicasm -I$(src) -r $(obj)/aic79xx_reg.h \
-		 -o $(obj)/aic79xx_seq.h $(src)/aic79xx.seq
+$(aic79xx-gen-y): $(src)/aic79xx.seq $(src)/aic79xx.reg $(obj)/aicasm/aicasm
+	$(obj)/aicasm/aicasm -I$(src) -r $(obj)/aic79xx_reg.h \
+			      $(aicasm-79xx-opts-y) -o $(obj)/aic79xx_seq.h \
+			      $(src)/aic79xx.seq
 endif
-$(aic79xx_gen): $(src)/aic79xx.seq $(src)/aic79xx.reg $(obj)/aicasm/aicasm
-	$(aic79xx_asm_cmd)
-endif 
 
 $(obj)/aicasm/aicasm: $(src)/aicasm/*.[chyl]
 	$(MAKE) -C $(src)/aicasm
diff -Nru a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c
--- a/drivers/scsi/aic7xxx/aic79xx_core.c	Tue Jan  7 20:41:21 2003
+++ b/drivers/scsi/aic7xxx/aic79xx_core.c	Tue Jan  7 20:41:21 2003
@@ -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.c#148 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#150 $
  *
  * $FreeBSD$
  */
@@ -2321,13 +2321,13 @@
 
 	/* Skip all PACED only entries if IU is not available */
 	if ((*ppr_options & MSG_EXT_PPR_IU_REQ) == 0
-	 && maxsync < AHD_SYNCRATE_DT)
-		maxsync = AHD_SYNCRATE_DT;
+	 && *period < AHD_SYNCRATE_DT)
+		*period = AHD_SYNCRATE_DT;
 
 	/* Skip all DT only entries if DT is not available */
 	if ((*ppr_options & MSG_EXT_PPR_DT_REQ) == 0
-	 && maxsync < AHD_SYNCRATE_ULTRA2)
-		maxsync = AHD_SYNCRATE_ULTRA2;
+	 && *period < AHD_SYNCRATE_ULTRA2)
+		*period = AHD_SYNCRATE_ULTRA2;
 }
 
 /*
@@ -5680,7 +5680,8 @@
 			       /*lowaddr*/BUS_SPACE_MAXADDR,
 			       /*highaddr*/BUS_SPACE_MAXADDR,
 			       /*filter*/NULL, /*filterarg*/NULL,
-			       /*maxsize*/MAXBSIZE, /*nsegments*/AHD_NSEG,
+			       /*maxsize*/(AHD_NSEG - 1) * PAGE_SIZE,
+			       /*nsegments*/AHD_NSEG,
 			       /*maxsegsz*/AHD_MAXTRANSFER_SIZE,
 			       /*flags*/BUS_DMA_ALLOCNOW,
 			       &ahd->buffer_dmat) != 0) {
@@ -7856,7 +7857,8 @@
 #ifdef AHD_DEBUG
 	if ((ahd_debug & AHD_SHOW_MISC) != 0) {
 		ahd_print_path(ahd, scb);
-		printf("Handled Residual of %d bytes\n", resid);
+		printf("Handled %sResidual of %d bytes\n",
+		       (scb->flags & SCB_SENSE) ? "Sense " : "", resid);
 	}
 #endif
 }
diff -Nru a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c	Tue Jan  7 20:41:21 2003
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c	Tue Jan  7 20:41:21 2003
@@ -1,7 +1,7 @@
 /*
  * Adaptec AIC79xx device driver for Linux.
  *
- * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#103 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#104 $
  *
  * --------------------------------------------------------------------------
  * Copyright (c) 1994-2000 Justin T. Gibbs.
@@ -2058,7 +2058,7 @@
 	 * negotiation will occur for the first command, and DV
 	 * will comence should that first command be successful.
 	 */
-	for (target = 0; target < AHD_NUM_TARGETS; target++)
+	for (target = 0; target < host->max_id; target++)
 		ahd_linux_alloc_target(ahd, 0, target);
 	ahd_intr_enable(ahd, TRUE);
 	ahd_linux_start_dv(ahd);
@@ -2883,6 +2883,23 @@
 				break;
 			}
 
+#ifdef AHD_DEBUG
+			if (ahd_debug & AHD_SHOW_DV) {
+				int i;
+
+				ahd_print_devinfo(ahd, devinfo);
+				printf("Inquiry buffer mismatch:");
+				for (i = 0; i < AHD_LINUX_DV_INQ_LEN; i++) {
+					if ((i & 0xF) == 0)
+						printf("\n        ");
+					printf("0x%x:0x0%x ",
+					       ((uint8_t *)targ->inq_data)[i], 
+					       targ->dv_buffer[i]);
+				}
+				printf("\n");
+			}
+#endif
+
 			if (ahd_linux_dv_fallback(ahd, devinfo) != 0) {
 				AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
 				break;
@@ -3525,6 +3542,8 @@
 		targ->dv_next_narrow_period = MAX(period, AHD_SYNCRATE_ULTRA2);
 	if (targ->dv_next_wide_period == 0)
 		targ->dv_next_wide_period = period;
+	if (targ->dv_max_width == 0)
+		targ->dv_max_width = width;
 	if (targ->dv_max_ppr_options == 0)
 		targ->dv_max_ppr_options = ppr_options;
 	if (targ->dv_last_ppr_options == 0)
@@ -3619,7 +3638,7 @@
 				period++;
 			}
 		} else if ((ahd->features & AHD_WIDE) != 0
-			&& tinfo->user.width != 0
+			&& targ->dv_max_width != 0
 			&& wide_speed >= fallback_speed
 			&& (targ->dv_next_wide_period <= AHD_ASYNC_XFER_PERIOD
 			 || period >= AHD_ASYNC_XFER_PERIOD)) {
diff -Nru a/drivers/scsi/aic7xxx/aic79xx_osm.h b/drivers/scsi/aic7xxx/aic79xx_osm.h
--- a/drivers/scsi/aic7xxx/aic79xx_osm.h	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.h	Tue Jan  7 20:41:22 2003
@@ -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#99 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#102 $
  *
  */
 #ifndef _AIC79XX_LINUX_H_
@@ -288,7 +288,7 @@
 #include <linux/smp.h>
 #endif
 
-#define AIC79XX_DRIVER_VERSION "1.3.0.ALPHA6"
+#define AIC79XX_DRIVER_VERSION "1.3.0.BETA2"
 
 /**************************** Front End Queues ********************************/
 /*
@@ -458,10 +458,11 @@
 	/*
 	 * The next "fallback" period to use for narrow/wide transfers.
 	 */
-	u_int			  dv_next_narrow_period;
-	u_int			  dv_next_wide_period;
-	u_int			  dv_max_ppr_options;
-	u_int			  dv_last_ppr_options;
+	uint8_t			  dv_next_narrow_period;
+	uint8_t			  dv_next_wide_period;
+	uint8_t			  dv_max_width;
+	uint8_t			  dv_max_ppr_options;
+	uint8_t			  dv_last_ppr_options;
 	u_int			  dv_echo_size;
 	ahd_dv_state		  dv_state;
 	u_int			  dv_state_retry;
diff -Nru a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
--- a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c	Tue Jan  7 20:41:22 2003
@@ -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_pci.c#19 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm_pci.c#20 $
  */
 
 #include "aic79xx_osm.h"
@@ -170,6 +170,9 @@
 			ahd->platform_data->hw_dma_mask =
 			    (bus_addr_t)(0x7FFFFFFFFFULL & (bus_addr_t)~0);
 		}
+	} else {
+		ahd_pci_set_dma_mask(pdev, 0xFFFFFFFF);
+		ahd->platform_data->hw_dma_mask = 0xFFFFFFFF;
 	}
 #endif
 	ahd->dev_softc = pci;
diff -Nru a/drivers/scsi/aic7xxx/aic79xx_pci.c b/drivers/scsi/aic7xxx/aic79xx_pci.c
--- a/drivers/scsi/aic7xxx/aic79xx_pci.c	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic79xx_pci.c	Tue Jan  7 20:41:22 2003
@@ -38,7 +38,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_pci.c#60 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic79xx_pci.c#61 $
  *
  * $FreeBSD$
  */
@@ -379,15 +379,20 @@
 ahd_pci_test_register_access(struct ahd_softc *ahd)
 {
 	ahd_mode_state	saved_modes;
+	uint32_t	cmd;
 	int		error;
-	uint8_t		seqctl;
+	uint8_t		hcntrl;
 
 	saved_modes = ahd_save_modes(ahd);
 	error = EIO;
 
-	/* Enable PCI error interrupt status */
-	seqctl = ahd_inb(ahd, SEQCTL0);
-	ahd_outb(ahd, SEQCTL0, seqctl & ~FAILDIS);
+	/*
+	 * Enable PCI error interrupt status, but suppress NMIs
+	 * generated by SERR raised due to target aborts.
+	 */
+	cmd = ahd_pci_read_config(ahd->dev_softc, PCIR_COMMAND, /*bytes*/2);
+	ahd_pci_write_config(ahd->dev_softc, PCIR_COMMAND,
+			     cmd & ~PCIM_CMD_SERRESPEN, /*bytes*/2);
 
 	/*
 	 * First a simple test to see if any
@@ -397,7 +402,8 @@
 	 * be zero so it is a good register to
 	 * use for this test.
 	 */
-	if (ahd_inb(ahd, HCNTRL) == 0xFF)
+	hcntrl = ahd_inb(ahd, HCNTRL);
+	if (hcntrl == 0xFF)
 		goto fail;
 
 	/*
@@ -407,6 +413,10 @@
 	 * either, so look for data corruption and/or flaged
 	 * PCI errors.
 	 */
+	ahd_outb(ahd, HCNTRL, hcntrl|PAUSE);
+	while (ahd_is_paused(ahd) == 0)
+		;
+	ahd_outb(ahd, SEQCTL0, PERRORDIS);
 	ahd_outl(ahd, SRAM_BASE, 0x5aa555aa);
 	if (ahd_inl(ahd, SRAM_BASE) != 0x5aa555aa)
 		goto fail;
@@ -440,7 +450,8 @@
 	}
 
 	ahd_restore_modes(ahd, saved_modes);
-	ahd_outb(ahd, SEQCTL0, seqctl);
+	ahd_outb(ahd, SEQCTL0, PERRORDIS|FAILDIS);
+	ahd_pci_write_config(ahd->dev_softc, PCIR_COMMAND, cmd, /*bytes*/2);
 	return (error);
 }
 
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx.h b/drivers/scsi/aic7xxx/aic7xxx.h
--- a/drivers/scsi/aic7xxx/aic7xxx.h	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx.h	Tue Jan  7 20:41:22 2003
@@ -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.h#66 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.h#67 $
  *
  * $FreeBSD$
  */
@@ -1053,7 +1053,6 @@
 	u_int			  pci_cachesize;
 
 	u_int			  stack_size;
-	uint16_t		 *saved_stack;
 
 	/* Per-Unit descriptive information */
 	const char		 *description;
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx.reg b/drivers/scsi/aic7xxx/aic7xxx.reg
--- a/drivers/scsi/aic7xxx/aic7xxx.reg	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx.reg	Tue Jan  7 20:41:22 2003
@@ -39,7 +39,7 @@
  *
  * $FreeBSD$
  */
-VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#36 $"
+VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#37 $"
 
 /*
  * This file is processed by the aic7xxx_asm utility for use in assembling
@@ -672,6 +672,8 @@
 	address			0x06f
 	access_mode RO
 }
+
+const	STACK_SIZE	4
 
 /*
  * Board Control (p. 3-43)
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx.seq b/drivers/scsi/aic7xxx/aic7xxx.seq
--- a/drivers/scsi/aic7xxx/aic7xxx.seq	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx.seq	Tue Jan  7 20:41:22 2003
@@ -40,7 +40,7 @@
  * $FreeBSD$
  */
 
-VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#52 $"
+VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#53 $"
 PATCH_ARG_LIST = "struct ahc_softc *ahc"
 PREFIX = "ahc_"
 
@@ -70,7 +70,7 @@
 	 * Turn off the selection hardware.  We need to reset the
 	 * selection request in order to perform a new selection.
 	 */
-	and	SCSISEQ, TEMODE|ENSELI|ENRSELI|ENAUTOATNP, SCSISEQ;
+	and	SCSISEQ, TEMODE|ENSELI|ENRSELI|ENAUTOATNP;
 	and	SIMODE1, ~ENBUSFREE;
 poll_for_work:
 	call	clear_target_state;
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_core.c b/drivers/scsi/aic7xxx/aic7xxx_core.c
--- a/drivers/scsi/aic7xxx/aic7xxx_core.c	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_core.c	Tue Jan  7 20:41:22 2003
@@ -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#105 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#108 $
  *
  * $FreeBSD$
  */
@@ -230,7 +230,6 @@
 					u_int start_instr, u_int *skip_addr);
 static void		ahc_download_instr(struct ahc_softc *ahc,
 					   u_int instrptr, uint8_t *dconsts);
-static int		ahc_probe_stack_size(struct ahc_softc *ahc);
 #ifdef AHC_TARGET_MODE
 static void		ahc_queue_lstate_event(struct ahc_softc *ahc,
 					       struct ahc_tmode_lstate *lstate,
@@ -1166,6 +1165,13 @@
 			       ahc_name(ahc), scbptr, scb_index);
 			ahc_dump_card_state(ahc);
 		} else {
+#ifdef AHC_DEBUG
+			if ((ahc_debug & AHC_SHOW_SELTO) != 0) {
+				ahc_print_path(ahc, scb);
+				printf("Saw Selection Timeout for SCB 0x%x\n",
+				       scb_index);
+			}
+#endif
 			/*
 			 * Force a renegotiation with this target just in
 			 * case the cable was pulled and will later be
@@ -1178,13 +1184,6 @@
 			ahc_force_renegotiation(ahc);
 			ahc_set_transaction_status(scb, CAM_SEL_TIMEOUT);
 			ahc_freeze_devq(ahc, scb);
-#ifdef AHC_DEBUG
-			if ((ahc_debug & AHC_SHOW_SELTO) != 0) {
-				ahc_print_path(ahc, scb);
-				printf("Saw Selection Timeout for SCB 0x%x\n",
-				       scb_index);
-			}
-#endif
 		}
 		ahc_outb(ahc, CLRINT, CLRSCSIINT);
 		ahc_restart(ahc);
@@ -4005,8 +4004,6 @@
 		free(ahc->name, M_DEVBUF);
 	if (ahc->seep_config != NULL)
 		free(ahc->seep_config, M_DEVBUF);
-	if (ahc->saved_stack != NULL)
-		free(ahc->saved_stack, M_DEVBUF);
 #ifndef __FreeBSD__
 	free(ahc, M_DEVBUF);
 #endif
@@ -4542,12 +4539,6 @@
 	size_t	 driver_data_size;
 	uint32_t physaddr;
 
-	ahc->stack_size = ahc_probe_stack_size(ahc);
-	ahc->saved_stack = malloc(ahc->stack_size * sizeof(uint16_t),
-				  M_DEVBUF, M_NOWAIT);
-	if (ahc->saved_stack == NULL)
-		return (ENOMEM);
-
 #ifdef AHC_DEBUG_SEQUENCER
 	ahc->flags |= AHC_SEQUENCER_DEBUG;
 #endif
@@ -4602,7 +4593,8 @@
 			       /*lowaddr*/BUS_SPACE_MAXADDR,
 			       /*highaddr*/BUS_SPACE_MAXADDR,
 			       /*filter*/NULL, /*filterarg*/NULL,
-			       /*maxsize*/MAXBSIZE, /*nsegments*/AHC_NSEG,
+			       /*maxsize*/(AHC_NSEG - 1) * PAGE_SIZE,
+			       /*nsegments*/AHC_NSEG,
 			       /*maxsegsz*/AHC_MAXTRANSFER_SIZE,
 			       /*flags*/BUS_DMA_ALLOCNOW,
 			       &ahc->buffer_dmat) != 0) {
@@ -6275,7 +6267,8 @@
 #ifdef AHC_DEBUG
 	if ((ahc_debug & AHC_SHOW_MISC) != 0) {
 		ahc_print_path(ahc, scb);
-		printf("Handled Residual of %d bytes\n", resid);
+		printf("Handled %sResidual of %d bytes\n",
+		       (scb->flags & SCB_SENSE) ? "Sense " : "", resid);
 	}
 #endif
 }
@@ -6655,41 +6648,6 @@
 	}
 }
 
-static int
-ahc_probe_stack_size(struct ahc_softc *ahc)
-{
-	int last_probe;
-
-	last_probe = 0;
-	while (1) {
-		int i;
-
-		/*
-		 * We avoid using 0 as a pattern to avoid
-		 * confusion if the stack implementation
-		 * "back-fills" with zeros when "poping'
-		 * entries.
-		 */
-		for (i = 1; i <= last_probe+1; i++) {
-		       ahc_outb(ahc, STACK, i & 0xFF);
-		       ahc_outb(ahc, STACK, (i >> 8) & 0xFF);
-		}
-
-		/* Verify */
-		for (i = last_probe+1; i > 0; i--) {
-			u_int stack_entry;
-
-			stack_entry = ahc_inb(ahc, STACK)
-				    |(ahc_inb(ahc, STACK) << 8);
-			if (stack_entry != i)
-				goto sized;
-		}
-		last_probe++;
-	}
-sized:
-	return (last_probe);
-}
-
 int
 ahc_print_register(ahc_reg_parse_entry_t *table, u_int num_entries,
 		   const char *name, u_int address, u_int value,
@@ -6768,6 +6726,7 @@
 	cur_col = 0;
 	if ((ahc->features & AHC_DT) != 0)
 		ahc_scsisigi_print(ahc_inb(ahc, SCSISIGI), &cur_col, 50);
+	ahc_error_print(ahc_inb(ahc, ERROR), &cur_col, 50);
 	ahc_scsiphase_print(ahc_inb(ahc, SCSIPHASE), &cur_col, 50);
 	ahc_scsibusl_print(ahc_inb(ahc, SCSIBUSL), &cur_col, 50);
 	ahc_lastphase_print(ahc_inb(ahc, LASTPHASE), &cur_col, 50);
@@ -6787,11 +6746,8 @@
 	if (cur_col != 0)
 		printf("\n");
 	printf("STACK:");
-	for (i = 0; i < ahc->stack_size; i++) {
-		ahc->saved_stack[i] =
-		    ahc_inb(ahc, STACK)|(ahc_inb(ahc, STACK) << 8);
-	       printf(" 0x%x", ahc->saved_stack[i]);
-	}
+	for (i = 0; i < STACK_SIZE; i++)
+	       printf(" 0x%x", ahc_inb(ahc, STACK)|(ahc_inb(ahc, STACK) << 8));
 	printf("\nSCB count = %d\n", ahc->scb_data->numscbs);
 	printf("Kernel NEXTQSCB = %d\n", ahc->next_queued_scb->hscb->tag);
 	printf("Card NEXTQSCB = %d\n", ahc_inb(ahc, NEXT_QUEUED_SCB));
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c	Tue Jan  7 20:41:21 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c	Tue Jan  7 20:41:21 2003
@@ -1,7 +1,7 @@
 /*
  * Adaptec AIC7xxx device driver for Linux.
  *
- * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#166 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#169 $
  *
  * Copyright (c) 1994 John Aycock
  *   The University of Calgary Department of Computer Science.
@@ -576,6 +576,7 @@
 static void ahc_linux_setup_tag_info(char *p, char *end, char *s);
 static void ahc_linux_setup_tag_info_global(char *p);
 static void ahc_linux_setup_dv(char *p, char *end, char *s);
+static int  aic7xxx_setup(char *s);
 static int  ahc_linux_next_unit(void);
 static void ahc_runq_tasklet(unsigned long data);
 static int  ahc_linux_halt(struct notifier_block *nb, u_long event, void *buf);
@@ -1297,6 +1298,7 @@
 	 */
 	.max_sectors		= 8192,
 #endif
+#if defined CONFIG_HIGHIO || LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
 /* Assume RedHat Distribution with its different HIGHIO conventions. */
 	.can_dma_32		= 1,
@@ -1304,6 +1306,7 @@
 #else
 	.highmem_io		= 1,
 #endif
+#endif
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
 	.name			= "aic7xxx",
 	.slave_alloc		= ahc_linux_slave_alloc,
@@ -1764,7 +1767,7 @@
  * to a parameter with a ':' between the parameter and the value.
  * ie. aic7xxx=stpwlev:1,extended
  */
-int
+static int
 aic7xxx_setup(char *s)
 {
 	int	i, n;
@@ -1888,7 +1891,7 @@
 	 * negotiation will occur for the first command, and DV
 	 * will comence should that first command be successful.
 	 */
-	for (target = 0; target < AHC_NUM_TARGETS; target++) {
+	for (target = 0; target < host->max_id*host->max_channel+1; target++) {
 		u_int channel;
 
 		channel = 0;
@@ -2732,6 +2735,22 @@
 				AHC_SET_DV_STATE(ahc, targ, AHC_DV_STATE_EXIT);
 				break;
 			}
+#ifdef AHC_DEBUG
+			if (ahc_debug & AHC_SHOW_DV) {
+				int i;
+
+				ahc_print_devinfo(ahc, devinfo);
+				printf("Inquiry buffer mismatch:");
+				for (i = 0; i < AHC_LINUX_DV_INQ_LEN; i++) {
+					if ((i & 0xF) == 0)
+						printf("\n        ");
+					printf("0x%x:0x0%x ",
+					       ((uint8_t *)targ->inq_data)[i], 
+					       targ->dv_buffer[i]);
+				}
+				printf("\n");
+			}
+#endif
 
 			if (ahc_linux_fallback(ahc, devinfo) != 0) {
 				AHC_SET_DV_STATE(ahc, targ, AHC_DV_STATE_EXIT);
@@ -3365,6 +3384,8 @@
 		targ->dv_next_narrow_period = MAX(period, AHC_SYNCRATE_ULTRA2);
 	if (targ->dv_next_wide_period == 0)
 		targ->dv_next_wide_period = period;
+	if (targ->dv_max_width == 0)
+		targ->dv_max_width = width;
 	if (targ->dv_max_ppr_options == 0)
 		targ->dv_max_ppr_options = ppr_options;
 	if (targ->dv_last_ppr_options == 0)
@@ -3459,7 +3480,7 @@
 				period++;
 			}
 		} else if ((ahc->features & AHC_WIDE) != 0
-			&& tinfo->user.width != 0
+			&& targ->dv_max_width != 0
 			&& wide_speed >= fallback_speed
 			&& (targ->dv_next_wide_period <= AHC_ASYNC_XFER_PERIOD
 			 || period >= AHC_ASYNC_XFER_PERIOD)) {
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_osm.h b/drivers/scsi/aic7xxx/aic7xxx_osm.h
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.h	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.h	Tue Jan  7 20:41:22 2003
@@ -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#114 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#118 $
  *
  */
 #ifndef _AIC7XXX_LINUX_H_
@@ -72,7 +72,6 @@
 #endif
 #include <linux/module.h>
 #include <asm/byteorder.h>
-#include <asm/io.h>
 
 #ifndef KERNEL_VERSION
 #define KERNEL_VERSION(x,y,z) (((x)<<16)+((y)<<8)+(z))
@@ -302,7 +301,7 @@
 #include <linux/smp.h>
 #endif
 
-#define AIC7XXX_DRIVER_VERSION "6.2.25"
+#define AIC7XXX_DRIVER_VERSION "6.2.26"
 
 /**************************** Front End Queues ********************************/
 /*
@@ -472,10 +471,11 @@
 	/*
 	 * The next "fallback" period to use for narrow/wide transfers.
 	 */
-	u_int			  dv_next_narrow_period;
-	u_int			  dv_next_wide_period;
-	u_int			  dv_max_ppr_options;
-	u_int			  dv_last_ppr_options;
+	uint8_t			  dv_next_narrow_period;
+	uint8_t			  dv_next_wide_period;
+	uint8_t			  dv_max_width;
+	uint8_t			  dv_max_ppr_options;
+	uint8_t			  dv_last_ppr_options;
 	u_int			  dv_echo_size;
 	ahc_dv_state		  dv_state;
 	u_int			  dv_state_retry;
@@ -864,6 +864,7 @@
 #define PCIM_CMD_BUSMASTEREN	0x0004
 #define PCIM_CMD_MWRICEN	0x0010
 #define PCIM_CMD_PERRESPEN	0x0040
+#define	PCIM_CMD_SERRESPEN	0x0100
 #define PCIR_STATUS		0x06
 #define PCIR_REVID		0x08
 #define PCIR_PROGIF		0x09
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
--- a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c	Tue Jan  7 20:41:22 2003
@@ -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/aic7xxx_osm_pci.c#42 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c#43 $
  */
 
 #include "aic7xxx_osm.h"
@@ -167,8 +167,8 @@
 		ahc->platform_data->hw_dma_mask =
 		    (bus_addr_t)(0x7FFFFFFFFFULL & (bus_addr_t)~0);
 	} else {
-		ahc_pci_set_dma_mask(pdev, 0xffffffffULL);
-		ahc->platform_data->hw_dma_mask = 0xffffffffULL;
+		ahc_pci_set_dma_mask(pdev, 0xFFFFFFFF);
+		ahc->platform_data->hw_dma_mask = 0xFFFFFFFF;
 	}
 #endif
 	ahc->dev_softc = pci;
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_pci.c b/drivers/scsi/aic7xxx/aic7xxx_pci.c
--- a/drivers/scsi/aic7xxx/aic7xxx_pci.c	Tue Jan  7 20:41:21 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_pci.c	Tue Jan  7 20:41:21 2003
@@ -39,7 +39,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_pci.c#54 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_pci.c#55 $
  *
  * $FreeBSD$
  */
@@ -1202,15 +1202,20 @@
 int
 ahc_pci_test_register_access(struct ahc_softc *ahc)
 {
-	int	error;
-	u_int	status1;
-	uint8_t	seqctl;
+	int	 error;
+	u_int	 status1;
+	uint32_t cmd;
+	uint8_t	 hcntrl;
 
 	error = EIO;
 
-	/* Enable PCI error interrupt status */
-	seqctl = ahc_inb(ahc, SEQCTL);
-	ahc_outb(ahc, SEQCTL, seqctl & ~FAILDIS);
+	/*
+	 * Enable PCI error interrupt status, but suppress NMIs
+	 * generated by SERR raised due to target aborts.
+	 */
+	cmd = ahc_pci_read_config(ahc->dev_softc, PCIR_COMMAND, /*bytes*/2);
+	ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND,
+			     cmd & ~PCIM_CMD_SERRESPEN, /*bytes*/2);
 
 	/*
 	 * First a simple test to see if any
@@ -1220,7 +1225,8 @@
 	 * be zero so it is a good register to
 	 * use for this test.
 	 */
-	if (ahc_inb(ahc, HCNTRL) == 0xFF)
+	hcntrl = ahc_inb(ahc, HCNTRL);
+	if (hcntrl == 0xFF)
 		goto fail;
 
 	/*
@@ -1230,8 +1236,13 @@
 	 * either, so look for data corruption and/or flagged
 	 * PCI errors.
 	 */
-	ahc_outl(ahc, SRAM_BASE, 0x5aa555aa);
-	if (ahc_inl(ahc, SRAM_BASE) != 0x5aa555aa)
+	ahc_outb(ahc, HCNTRL, hcntrl|PAUSE);
+	while (ahc_is_paused(ahc) == 0)
+		;
+	ahc_outb(ahc, SEQCTL, PERRORDIS);
+	ahc_outb(ahc, SCBPTR, 0);
+	ahc_outl(ahc, SCB_BASE, 0x5aa555aa);
+	if (ahc_inl(ahc, SCB_BASE) != 0x5aa555aa)
 		goto fail;
 
 	status1 = ahc_pci_read_config(ahc->dev_softc,
@@ -1248,7 +1259,8 @@
 	ahc_pci_write_config(ahc->dev_softc, PCIR_STATUS + 1,
 			     status1, /*bytes*/1);
 	ahc_outb(ahc, CLRINT, CLRPARERR);
-	ahc_outb(ahc, SEQCTL, seqctl);
+	ahc_outb(ahc, SEQCTL, PERRORDIS|FAILDIS);
+	ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, cmd, /*bytes*/2);
 	return (error);
 }
 
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_reg.h_shipped b/drivers/scsi/aic7xxx/aic7xxx_reg.h_shipped
--- a/drivers/scsi/aic7xxx/aic7xxx_reg.h_shipped	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_reg.h_shipped	Tue Jan  7 20:41:22 2003
@@ -2,8 +2,8 @@
  * DO NOT EDIT - This file is automatically generated
  *		 from the following source files:
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#52 $
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#36 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#53 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#37 $
  */
 typedef int (ahc_reg_print_t)(u_int, u_int *, u_int);
 typedef struct ahc_reg_parse_entry {
@@ -1779,6 +1779,7 @@
 #define	MAX_OFFSET	0xff
 #define	BUS_16_BIT	0x01
 #define	SCB_UPLOAD_SIZE	0x20
+#define	STACK_SIZE	0x04
 
 
 /* Downloaded Constant Definitions */
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_reg_print.c_shipped b/drivers/scsi/aic7xxx/aic7xxx_reg_print.c_shipped
--- a/drivers/scsi/aic7xxx/aic7xxx_reg_print.c_shipped	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_reg_print.c_shipped	Tue Jan  7 20:41:22 2003
@@ -2,8 +2,8 @@
  * DO NOT EDIT - This file is automatically generated
  *		 from the following source files:
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#52 $
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#36 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#53 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#37 $
  */
 
 #include "aic7xxx_osm.h"
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped b/drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped
--- a/drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped	Tue Jan  7 20:41:22 2003
+++ b/drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped	Tue Jan  7 20:41:22 2003
@@ -2,8 +2,8 @@
  * DO NOT EDIT - This file is automatically generated
  *		 from the following source files:
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#52 $
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#36 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#53 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#37 $
  */
 static uint8_t seqprog[] = {
 	0xb2, 0x00, 0x00, 0x08,
diff -Nru a/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y b/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
--- a/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y	Tue Jan  7 20:41:21 2003
+++ b/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y	Tue Jan  7 20:41:22 2003
@@ -38,7 +38,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_gram.y#28 $
+ * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_gram.y#29 $
  *
  * $FreeBSD$
  */
@@ -209,7 +209,7 @@
 
 %type <value> export ret f1_opcode f2_opcode jmp_jc_jnc_call jz_jnz je_jne
 
-%type <value> numerical_value mode_value mode_list macro_arglist
+%type <value> mode_value mode_list macro_arglist
 
 %left '|'
 %left '&'
@@ -781,17 +781,6 @@
 		}
 		$$ = $1 + 1;
 		add_macro_arg($3, $1);
-	}
-;
-
-numerical_value:
-	T_NUMBER
-	{
-		$$ = $1;
-	}
-|	'-' T_NUMBER
-	{
-		$$ = -$2;
 	}
 ;
 

===================================================================


This BitKeeper patch contains the following changesets:
1.893..1.893.1.4
## Wrapped with gzip_uu ##


begin 664 bkpatch12837
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
*[2]EW9025G$`````
`
end

       reply	other threads:[~2003-01-08  3:46 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200212210334.gBL3Yi111607@localhost.localdomain>
     [not found] ` <175810000.1041300864@aslan.btc.adaptec.com>
2003-01-08  3:46   ` Justin T. Gibbs [this message]
2003-01-08  3:49     ` Aic7xxx and Aic79xx driver updates Justin T. Gibbs
2003-05-01 22:28 Aic7xxx and Aic79xx Driver Updates Justin T. Gibbs
2003-05-02  0:17 ` Willy Tarreau
2003-05-02  4:25   ` Justin T. Gibbs
2003-05-02  5:56     ` Willy Tarreau
2003-05-02 14:30 ` James Bottomley
2003-05-02 17:51   ` Justin T. Gibbs
2003-05-02 18:07     ` James Bottomley
2003-05-02 18:19       ` Linus Torvalds
2003-05-03 23:03         ` Justin T. Gibbs
2003-05-03 23:01       ` Justin T. Gibbs

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=679640000.1041997595@aslan.btc.adaptec.com \
    --to=gibbs@scsiguy.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=torvalds@transmeta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox