]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/mips/galileo-boards/ev96100/irq.c
[MIPS] Rewrite all the assembler interrupt handlers to C.
[linux-2.6-omap-h63xx.git] / arch / mips / galileo-boards / ev96100 / irq.c
index 383801dd1b956d9700a07d87a4a0f380feb5b23c..ee5d6720f23bf614c8a6ea18ae985a5386e4f894 100644 (file)
@@ -40,8 +40,6 @@
 #include <linux/interrupt.h>
 #include <asm/irq_cpu.h>
 
-extern asmlinkage void ev96100IRQ(void);
-
 static inline unsigned int ffz8(unsigned int word)
 {
        unsigned long k;
@@ -54,13 +52,26 @@ static inline unsigned int ffz8(unsigned int word)
        return k;
 }
 
+extern void mips_timer_interrupt(struct pt_regs *regs);
+
 asmlinkage void ev96100_cpu_irq(unsigned int pending, struct pt_regs *regs)
 {
        do_IRQ(ffz8(pending >> 8), regs);
 }
 
+asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
+{
+       unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;
+
+       if (pending & CAUSEF_IP7)
+               mips_timer_interrupt(regs);
+       else if (pending)
+               ev96100_cpu_irq(pending, regs);
+       else
+               spurious_interrupt(regs);
+}
+
 void __init arch_init_irq(void)
 {
-       set_except_vector(0, ev96100IRQ);
        mips_cpu_irq_init(0);
 }