X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fmips%2Fmomentum%2Fjaguar_atx%2Firq.c;h=2efb25aa1aed10363fde84e3e5bb9a4c4bfd1476;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=cc25cbcb4bb236acdd74b7204fd32a4dca7464b1;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/arch/mips/momentum/jaguar_atx/irq.c b/arch/mips/momentum/jaguar_atx/irq.c index cc25cbcb4..2efb25aa1 100644 --- a/arch/mips/momentum/jaguar_atx/irq.c +++ b/arch/mips/momentum/jaguar_atx/irq.c @@ -10,7 +10,7 @@ * Copyright 2001 MontaVista Software Inc. * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net * - * Copyright (C) 2000, 2001 Ralf Baechle (ralf@gnu.org) + * Copyright (C) 2000, 01, 06 Ralf Baechle (ralf@linux-mips.org) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -38,14 +38,43 @@ #include #include #include +#include -extern asmlinkage void jaguar_handle_int(void); +asmlinkage void plat_irq_dispatch(void) +{ + unsigned int pending = read_c0_cause() & read_c0_status(); + + if (pending & STATUSF_IP0) + do_IRQ(0); + else if (pending & STATUSF_IP1) + do_IRQ(1); + else if (pending & STATUSF_IP2) + do_IRQ(2); + else if (pending & STATUSF_IP3) + do_IRQ(3); + else if (pending & STATUSF_IP4) + do_IRQ(4); + else if (pending & STATUSF_IP5) + do_IRQ(5); + else if (pending & STATUSF_IP6) + do_IRQ(6); + else if (pending & STATUSF_IP7) + ll_timer_interrupt(7); + else { + /* + * Now look at the extended interrupts + */ + pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; + if (pending & STATUSF_IP8) + ll_mv64340_irq(); + } +} static struct irqaction cascade_mv64340 = { - no_action, SA_INTERRUPT, CPU_MASK_NONE, "MV64340-Cascade", NULL, NULL + no_action, IRQF_DISABLED, CPU_MASK_NONE, "MV64340-Cascade", NULL, NULL }; -void __init init_IRQ(void) +void __init arch_init_irq(void) { /* * Clear all of the interrupts while we change the able around a bit. @@ -53,9 +82,6 @@ void __init init_IRQ(void) */ clear_c0_status(ST0_IM); - /* Sets the first-level interrupt dispatcher. */ - set_except_vector(0, jaguar_handle_int); - init_generic_irq(); mips_cpu_irq_init(0); rm7k_cpu_irq_init(8);