From: Dave A. <ai...@us...> - 2001-06-17 11:43:49
|
Update of /cvsroot/linux-vax/kernel-2.4/drivers/vsbus In directory usw-pr-cvs1:/tmp/cvs-serv6885/drivers/vsbus Modified Files: vsbus.c Log Message: DA: added autoprobe support for vsbus to dz/vaxlance.. needs a lot of testing on machines that aren't mine Index: vsbus.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/vsbus/vsbus.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- vsbus.c 2001/02/26 11:31:35 1.3 +++ vsbus.c 2001/06/17 11:43:45 1.4 @@ -8,6 +8,9 @@ */ #include <asm/vsa.h> #include <asm/io.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/bitops.h> struct vsbus { struct vs_cpu *vs_cpu_ptr; @@ -17,10 +20,22 @@ int vsbus_setup(void) { + unsigned long irqs; + sys_vs.vs_cpu_ptr=(void *)ioremap(VSA_BASE_REGS, 128); - sys_vs.vs_cpu_ptr->vc_intclr=0xFF; + irqs=probe_irq_on(); + sys_vs.vs_cpu_ptr->vc_intmsk=0; + sys_vs.vs_cpu_ptr->vc_intclr=0xFF; + // printk("vsbus: Getting Interrupt Mask\n"); + udelay(100000); + sys_vs.vs_mask=sys_vs.vs_cpu_ptr->vc_intreq; + sys_vs.vs_cpu_ptr->vc_intmsk=0; /*~sys_vs.vs_mask;*/ + + probe_irq_off(irqs); + printk("vsbus: interrupt mask %x\n", sys_vs.vs_mask); + return 0; } @@ -38,7 +53,26 @@ return 0; } -int vsbus_probe_irq(void) +int vsbus_disable_int(int bit_nr) { + sys_vs.vs_cpu_ptr->vc_intmsk&=~(1<<bit_nr); return 0; +} + +int vsbus_probe_irq_on(void) +{ + printk("vsbus: probing set mask ~%2X\n", sys_vs.vs_mask); + sys_vs.vs_cpu_ptr->vc_intmsk = sys_vs.vs_mask; + sys_vs.vs_cpu_ptr->vc_intclr=0xff; + return 0; +} + +unsigned char vsbus_probe_irq_report(void) +{ + unsigned char x, y; + + x=sys_vs.vs_cpu_ptr->vc_intreq; + y = x & ~sys_vs.vs_mask; + printk("vsbus: probe returning %2X, %2X\n", x, ffs(y)); + return ffs(y)-1; } |