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;
}
|