linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / mips / ite-boards / generic / irq.c
index cb59ca4..e67f961 100644 (file)
 
 #define ALLINTS_NOTIMER (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4)
 
+void disable_it8172_irq(unsigned int irq_nr);
+void enable_it8172_irq(unsigned int irq_nr);
+
 extern void set_debug_traps(void);
 extern void mips_timer_interrupt(int irq, struct pt_regs *regs);
+extern asmlinkage void it8172_IRQ(void);
 
 struct it8172_intc_regs volatile *it8172_hw0_icregs =
        (struct it8172_intc_regs volatile *)(KSEG1ADDR(IT8172_PCI_IO_BASE + IT_INTC_BASE));
@@ -133,7 +137,7 @@ static void end_ite_irq(unsigned int irq)
                enable_it8172_irq(irq);
 }
 
-static struct irq_chip it8172_irq_type = {
+static struct hw_interrupt_type it8172_irq_type = {
        .typename = "ITE8172",
        .startup = startup_ite_irq,
        .shutdown = shutdown_ite_irq,
@@ -153,7 +157,7 @@ static void ack_none(unsigned int irq) { }
 #define shutdown_none  disable_none
 #define end_none       enable_none
 
-static struct irq_chip cp0_irq_type = {
+static struct hw_interrupt_type cp0_irq_type = {
        .typename = "CP0 Count",
        .startup = startup_none,
        .shutdown = shutdown_none,
@@ -177,6 +181,8 @@ void __init arch_init_irq(void)
        int i;
         unsigned long flags;
 
+        set_except_vector(0, it8172_IRQ);
+
        /* mask all interrupts */
        it8172_hw0_icregs->lb_mask  = 0xffff;
        it8172_hw0_icregs->lpc_mask = 0xffff;
@@ -208,10 +214,10 @@ void __init arch_init_irq(void)
 #endif
 
        for (i = 0; i <= IT8172_LAST_IRQ; i++) {
-               irq_desc[i].chip = &it8172_irq_type;
+               irq_desc[i].handler = &it8172_irq_type;
                spin_lock_init(&irq_desc[i].lock);
        }
-       irq_desc[MIPS_CPU_TIMER_IRQ].chip = &cp0_irq_type;
+       irq_desc[MIPS_CPU_TIMER_IRQ].handler = &cp0_irq_type;
        set_c0_status(ALLINTS_NOTIMER);
 }
 
@@ -276,18 +282,6 @@ void it8172_hw0_irqdispatch(struct pt_regs *regs)
        do_IRQ(irq, regs);
 }
 
-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
-{
-       unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;
-
-       if (!pending)
-               mips_spurious_interrupt(regs);
-       else if (pending & CAUSEF_IP7)
-               ll_timer_interrupt(127, regs);
-       else if (pending & CAUSEF_IP2)
-               it8172_hw0_irqdispatch(regs);
-}
-
 void show_pending_irqs(void)
 {
        fputs("intstatus:  ");