From: Dave A. <ai...@us...> - 2003-05-29 13:29:56
|
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; } |