X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fmips%2Flasat%2Finterrupt.c;fp=arch%2Fmips%2Flasat%2Finterrupt.c;h=852a41901a5e623eae2eb1b1eadec7e7699182b6;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=456be8fc961a293772b2e2280280bced6ffca27d;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/arch/mips/lasat/interrupt.c b/arch/mips/lasat/interrupt.c index 456be8fc9..852a41901 100644 --- a/arch/mips/lasat/interrupt.c +++ b/arch/mips/lasat/interrupt.c @@ -27,13 +27,14 @@ #include #include #include -#include #include static volatile int *lasat_int_status = NULL; static volatile int *lasat_int_mask = NULL; static volatile int lasat_int_mask_shift; +extern asmlinkage void lasatIRQ(void); + void disable_lasat_irq(unsigned int irq_nr) { unsigned long flags; @@ -69,7 +70,7 @@ static void end_lasat_irq(unsigned int irq) enable_lasat_irq(irq); } -static struct irq_chip lasat_irq_type = { +static struct hw_interrupt_type lasat_irq_type = { .typename = "Lasat", .startup = startup_lasat_irq, .shutdown = shutdown_lasat_irq, @@ -108,17 +109,11 @@ static unsigned long get_int_status_200(void) return int_status; } -asmlinkage void plat_irq_dispatch(struct pt_regs *regs) +void lasat_hw0_irqdispatch(struct pt_regs *regs) { unsigned long int_status; - unsigned int cause = read_c0_cause(); int irq; - if (cause & CAUSEF_IP7) { /* R4000 count / compare IRQ */ - ll_timer_interrupt(7, regs); - return; - } - int_status = get_int_status(); /* if int_status == 0, then the interrupt has already been cleared */ @@ -152,10 +147,13 @@ void __init arch_init_irq(void) panic("arch_init_irq: mips_machtype incorrect"); } + /* Now safe to set the exception vector. */ + set_except_vector(0, lasatIRQ); + for (i = 0; i <= LASATINT_END; i++) { irq_desc[i].status = IRQ_DISABLED; irq_desc[i].action = 0; irq_desc[i].depth = 1; - irq_desc[i].chip = &lasat_irq_type; + irq_desc[i].handler = &lasat_irq_type; } }