patch-2.4.19 linux-2.4.19/drivers/scsi/sun3_scsi.c
Next file: linux-2.4.19/drivers/scsi/sun3x_esp.c
Previous file: linux-2.4.19/drivers/scsi/sun3_NCR5380.c
Back to the patch index
Back to the overall index
- Lines: 125
- Date:
Fri Aug 2 17:39:44 2002
- Orig file:
linux-2.4.18/drivers/scsi/sun3_scsi.c
- Orig date:
Mon Feb 25 11:38:04 2002
diff -urN linux-2.4.18/drivers/scsi/sun3_scsi.c linux-2.4.19/drivers/scsi/sun3_scsi.c
@@ -80,8 +80,10 @@
#include "NCR5380.h"
#include "constants.h"
+/* #define OLDDMA */
+
#define USE_WRAPPER
-#define RESET_BOOT
+/*#define RESET_BOOT */
#define DRIVER_SETUP
#define NDEBUG 0
@@ -94,7 +96,7 @@
#undef DRIVER_SETUP
#endif
-#undef SUPPORT_TAGS
+/* #define SUPPORT_TAGS */
#define ENABLE_IRQ() enable_irq( IRQ_SUN3_SCSI );
@@ -126,7 +128,9 @@
static volatile unsigned char *sun3_scsi_regp;
static volatile struct sun3_dma_regs *dregs;
+#ifdef OLDDMA
static unsigned char *dmabuf = NULL; /* dma memory buffer */
+#endif
static struct sun3_udc_regs *udc_regs = NULL;
static unsigned char *sun3_dma_orig_addr = NULL;
static unsigned long sun3_dma_orig_count = 0;
@@ -260,7 +264,7 @@
#endif
#ifdef SUPPORT_TAGS
if (setup_use_tagged_queuing < 0)
- setup_use_tagged_queuing = DEFAULT_USE_TAGGED_QUEUING;
+ setup_use_tagged_queuing = USE_TAGGED_QUEUING;
#endif
instance = scsi_register (tpnt, sizeof(struct NCR5380_hostdata));
@@ -310,6 +314,11 @@
dregs->fifo_count = 0;
called = 1;
+
+#ifdef RESET_BOOT
+ sun3_scsi_reset_boot(instance);
+#endif
+
return 1;
}
@@ -341,7 +350,7 @@
printk( "Sun3 SCSI: resetting the SCSI bus..." );
/* switch off SCSI IRQ - catch an interrupt without IRQ bit set else */
- sun3_disable_irq( IRQ_SUN3_SCSI );
+// sun3_disable_irq( IRQ_SUN3_SCSI );
/* get in phase */
NCR5380_write( TARGET_COMMAND_REG,
@@ -361,7 +370,7 @@
barrier();
/* switch on SCSI IRQ again */
- sun3_enable_irq( IRQ_SUN3_SCSI );
+// sun3_enable_irq( IRQ_SUN3_SCSI );
printk( " done\n" );
}
@@ -427,8 +436,12 @@
#else
void *addr;
+ if(sun3_dma_orig_addr != NULL)
+ dvma_unmap(sun3_dma_orig_addr);
+
// addr = sun3_dvma_page((unsigned long)data, (unsigned long)dmabuf);
addr = (void *)dvma_map((unsigned long) data, count);
+
sun3_dma_orig_addr = addr;
sun3_dma_orig_count = count;
#endif
@@ -454,7 +467,6 @@
dregs->csr &= ~CSR_FIFO;
dregs->csr |= CSR_FIFO;
-
if(dregs->fifo_count != count) {
printk("scsi%d: fifo_mismatch %04x not %04x\n",
default_instance->host_no, dregs->fifo_count,
@@ -533,10 +545,10 @@
int ret = 0;
sun3_dma_active = 0;
-
+#if 1
// check to empty the fifo on a read
if(!write_flag) {
- int tmo = 200000; /* 2 sec */
+ int tmo = 20000; /* .2 sec */
while(1) {
if(dregs->csr & CSR_FIFO_EMPTY)
@@ -549,6 +561,7 @@
}
}
+#endif
count = sun3scsi_dma_count(default_instance);
#ifdef OLDDMA
@@ -588,6 +601,7 @@
}
dvma_unmap(sun3_dma_orig_addr);
+ sun3_dma_orig_addr = NULL;
#endif
sun3_udc_write(UDC_RESET, UDC_CSR);
dregs->fifo_count = 0;
@@ -609,3 +623,4 @@
#include "scsi_module.c"
+MODULE_LICENSE("GPL");
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)