This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / arch / cris / arch-v10 / kernel / irq.c
index b2f16d6..c5e6348 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: irq.c,v 1.2 2004/06/09 05:30:27 starvik Exp $
+/* $Id: irq.c,v 1.1 2002/12/11 15:42:02 starvik Exp $
  *
  *     linux/arch/cris/kernel/irq.c
  *
@@ -23,8 +23,12 @@ irqvectptr irq_shortcuts[NR_IRQS]; /* vector of shortcut jumps after the irq pro
  */
 
 void
-set_int_vector(int n, irqvectptr addr)
+set_int_vector(int n, irqvectptr addr, irqvectptr saddr)
 {
+       /* remember the shortcut entry point, after the prologue */
+
+       irq_shortcuts[n] = saddr;
+
        etrax_irv->v[n + 0x20] = (irqvectptr)addr;
 }
 
@@ -102,6 +106,17 @@ static void (*interrupt[NR_IRQS])(void) = {
        IRQ31_interrupt
 };
 
+static void (*sinterrupt[NR_IRQS])(void) = {
+       NULL, NULL, sIRQ2_interrupt, sIRQ3_interrupt,
+       sIRQ4_interrupt, sIRQ5_interrupt, sIRQ6_interrupt, sIRQ7_interrupt,
+       sIRQ8_interrupt, sIRQ9_interrupt, sIRQ10_interrupt, sIRQ11_interrupt,
+       sIRQ12_interrupt, sIRQ13_interrupt, NULL, NULL, 
+       sIRQ16_interrupt, sIRQ17_interrupt, sIRQ18_interrupt, sIRQ19_interrupt, 
+       sIRQ20_interrupt, sIRQ21_interrupt, sIRQ22_interrupt, sIRQ23_interrupt, 
+       sIRQ24_interrupt, sIRQ25_interrupt, NULL, NULL, NULL, NULL, NULL,
+       sIRQ31_interrupt
+};
+
 static void (*bad_interrupt[NR_IRQS])(void) = {
         NULL, NULL,
        NULL, bad_IRQ3_interrupt,
@@ -122,12 +137,12 @@ static void (*bad_interrupt[NR_IRQS])(void) = {
 
 void arch_setup_irq(int irq)
 {
-  set_int_vector(irq, interrupt[irq]);
+  set_int_vector(irq, interrupt[irq], sinterrupt[irq]);
 }
 
 void arch_free_irq(int irq)
 {
-  set_int_vector(irq, bad_interrupt[irq]);
+  set_int_vector(irq, bad_interrupt[irq], 0);
 }
 
 void weird_irq(void);
@@ -172,20 +187,20 @@ init_IRQ(void)
         
        /* set all etrax irq's to the bad handlers */
        for (i = 2; i < NR_IRQS; i++)
-               set_int_vector(i, bad_interrupt[i]);
+               set_int_vector(i, bad_interrupt[i], 0);
         
        /* except IRQ 15 which is the multiple-IRQ handler on Etrax100 */
 
-       set_int_vector(15, multiple_interrupt);
+       set_int_vector(15, multiple_interrupt, 0);
        
        /* 0 and 1 which are special breakpoint/NMI traps */
 
-       set_int_vector(0, hwbreakpoint);
-       set_int_vector(1, IRQ1_interrupt);
+       set_int_vector(0, hwbreakpoint, 0);
+       set_int_vector(1, IRQ1_interrupt, 0);
 
        /* and irq 14 which is the mmu bus fault handler */
 
-       set_int_vector(14, mmu_bus_fault);
+       set_int_vector(14, mmu_bus_fault, 0);
 
        /* setup the system-call trap, which is reached by BREAK 13 */