Update of /cvsroot/linux-vax/kernel-2.4/drivers/scsi
In directory sc8-pr-cvs1:/tmp/cvs-serv29801
Modified Files:
vax-5380.c
Log Message:
DA: see can we support two SCSI interfaces...
Index: vax-5380.c
===================================================================
RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/scsi/vax-5380.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- vax-5380.c 22 Feb 2001 22:18:17 -0000 1.3
+++ vax-5380.c 29 May 2003 13:29:52 -0000 1.4
@@ -54,6 +54,9 @@
/*
* $Log$
+ * Revision 1.4 2003/05/29 13:29:52 airlied
+ * DA: see can we support two SCSI interfaces...
+ *
* Revision 1.3 2001/02/22 22:18:17 airlied
* vsa->vsbus
*
@@ -88,17 +91,17 @@
#include <linux/init.h>
#include <asm/vsa.h>
+#define TRY_TWO_IFS 1
/* set this to 0 for external SCSI */
#define INTERNAL_SCSI 1
static void do_vax_5380_intr_ack(int irq, void *dev_id, struct pt_regs *regs)
{
do_vax_5380_intr(irq, dev_id, regs);
-#if INTERNAL_SCSI
- vsbus_clear_int(1);
-#else
- vsbus_clear_int(0);
-#endif
+ if (irq == 0xfe)
+ vsbus_clear_int(1);
+ else
+ vsbus_clear_int(0);
}
/*
@@ -116,59 +119,67 @@
int __init vax_5380_detect(Scsi_Host_Template * tpnt) {
- struct Scsi_Host *instance;
- unsigned long base;
+ struct Scsi_Host *instance[2];
+ unsigned long base[2];
+ int num_hosts, i;
tpnt->proc_name = "vax5380";
tpnt->proc_info = vax_5380_proc_info;
-#if INTERNAL_SCSI
- base = 0x200c0080;
+#if TRY_TWO_IFS
+ num_hosts = 2;
#else
- base = 0x200c0180;
+ num_hosts = 1;
#endif
- instance = scsi_register (tpnt, sizeof(struct NCR5380_hostdata));
- instance->base = (unsigned long) ioremap(base, 0x80);
-
- NCR5380_init(instance, 0);
-
#if INTERNAL_SCSI
- instance->irq = 0xfe;
+ base[0]=0x200c0080;
+ base[1]=0x200c0180;
#else
- instance->irq = 0xff;
+ base[0]=0x200c0180;
+ base[1]=0x200c0080;
#endif
+ for ( i=0 ; i<num_hosts ; i++ ) {
+ instance[i] = scsi_register (tpnt, sizeof(struct NCR5380_hostdata));
+ instance[i]->base = (unsigned long) ioremap(base[i], 0x80);
+
+ NCR5380_init(instance[i], 0);
+
+ if (base[i] == 0x200c0080)
+ instance[i]->irq = 0xfe;
+ else
+ instance[i]->irq = 0xff;
+
#if defined(VDEBUG) && (VDEBUG & VDEBUG_INIT)
- printk("scsi%d : irq = %d\n", instance->host_no, instance->irq);
+ printk("scsi%d : irq = %d\n", instance[i]->host_no, instance[i]->irq);
#endif
#if 1
- if (request_irq(instance->irq, do_vax_5380_intr_ack, SA_INTERRUPT, "vax-5380", NULL)) {
- printk("scsi%d : IRQ%d not free, interrupts disabled\n",
- instance->host_no, instance->irq);
- instance->irq = IRQ_NONE;
+ if (request_irq(instance[i]->irq, do_vax_5380_intr_ack, SA_INTERRUPT, "vax-5380", NULL)) {
+ printk("scsi%d : IRQ%d not free, interrupts disabled\n",
+ instance[i]->host_no, instance[i]->irq);
+ instance[i]->irq = IRQ_NONE;
+ }
+
+ if (instance[i]->irq != IRQ_NONE) {
+ if (instance[i]->irq == 0xfe)
+ vsbus_enable_int(1);
+ else
+ vsbus_enable_int(0);
+ }
+#endif
+
+ printk("scsi%d : at 0x%08lx", instance[i]->host_no, instance[i]->base);
+ if (instance[i]->irq == IRQ_NONE)
+ printk (" interrupts disabled");
+ else
+ printk (" irq %d", instance[i]->irq);
+ printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
+ CAN_QUEUE, CMD_PER_LUN, VAX_5380_PUBLIC_RELEASE);
+ NCR5380_print_options(instance[i]);
+ printk("\n");
}
-
- if (instance->irq != IRQ_NONE) {
-#if INTERNAL_SCSI
- vsbus_enable_int(1);
-#else
- vsbus_enable_int(0);
-#endif
- }
-#endif
-
- printk("scsi%d : at 0x%08lx", instance->host_no, instance->base);
- if (instance->irq == IRQ_NONE)
- printk (" interrupts disabled");
- else
- printk (" irq %d", instance->irq);
- printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
- CAN_QUEUE, CMD_PER_LUN, VAX_5380_PUBLIC_RELEASE);
- NCR5380_print_options(instance);
- printk("\n");
-
return 1;
}
|