vserver 1.9.5.x5
[linux-2.6.git] / arch / mips / pmc-sierra / yosemite / irq-handler.S
index ebe2e64..33b9c40 100644 (file)
@@ -1,6 +1,7 @@
 /*
- * Copyright 2003 PMC-Sierra Inc.
+ * Copyright 2003, 04 PMC-Sierra Inc.
  * Author: Manish Lachwani (lachwani@pmc-sierra.com
+ * Copyright 2004 Ralf Baechle (ralf@linux-mips.org)
  *
  * First-level interrupt router for the PMC-Sierra Titan board
  *
                CLI
                .set    at
                .set    noreorder
+               la      ra, ret_from_irq
                mfc0    t0, CP0_CAUSE
                mfc0    t2, CP0_STATUS
 
                and     t0, t2
 
+               andi    t2, t0, STATUSF_IP7     /* INTB5 hardware line */
+               bnez    t2, ll_timer_irq        /* Timer */
                andi    t1, t0, STATUSF_IP2     /* INTB0 hardware line */
                bnez    t1, ll_pcia_irq         /* 64-bit PCI */
-               andi    t1, t0, STATUSF_IP3     /* INTB1 hardware line */
-               bnez    t1, ll_pcib_irq         /* second 64-bit PCI slot */
+               andi    t2, t0, STATUSF_IP3     /* INTB1 hardware line */
+               bnez    t2, ll_pcib_irq         /* second 64-bit PCI slot */
                andi    t1, t0, STATUSF_IP4     /* INTB2 hardware line */
                bnez    t1, ll_duart_irq        /* UART */
-               andi    t1, t0, STATUSF_IP5     /* SMP inter-core interrupts */
-               bnez    t1, ll_smp_irq
+               andi    t2, t0, STATUSF_IP5     /* SMP inter-core interrupts */
+               bnez    t2, ll_smp_irq
                andi    t1, t0, STATUSF_IP6
                bnez    t1, ll_ht_irq           /* Hypertransport */
-               andi    t1, t0, STATUSF_IP7     /* INTB5 hardware line */
-               bnez    t1, ll_timer_irq        /* Timer */
 
-               nop
-               nop
-
-               /* Extended interrupts */
-                mfc0    t0, CP0_CAUSE
-                cfc0    t1, CP0_S1_INTCONTROL
-
-                sll     t2, t1, 8
-
-                and     t0, t2
-                srl     t0, t0, 16
-
-               .set    reorder
-
-               j       spurious_interrupt
-               nop
+               move    a0, sp
+               j       do_extended_irq
                END(titan_handle_int)
 
+               .set    reorder
                .align  5
 
 ll_pcia_irq:
                li      a0, 2
                move    a1, sp
 #ifdef CONFIG_HYPERTRANSPORT
-               jal     ll_ht_smp_irq_handler
+               j       ll_ht_smp_irq_handler
 #else
-               jal     do_IRQ
+               j       do_IRQ
 #endif
-               j       ret_from_irq
 
 ll_pcib_irq:
                li      a0, 3
                move    a1, sp
-               jal     do_IRQ
-               j       ret_from_irq
+               j       do_IRQ
 
 ll_duart_irq:
                li      a0, 4
                move    a1, sp
-               jal     do_IRQ
-               j       ret_from_irq
+               j       do_IRQ
 
 ll_smp_irq:
                li      a0, 5
                move    a1, sp
 #ifdef CONFIG_SMP
-               jal     jaguar_mailbox_irq
+               j       titan_mailbox_irq
 #else
-               jal     do_IRQ
+               j       do_IRQ
 #endif
-               j       ret_from_irq
 
 ll_ht_irq:
                li      a0, 6
                move    a1, sp
-               jal     ll_ht_smp_irq_handler
-               j       ret_from_irq
+               j       ll_ht_smp_irq_handler
 
 ll_timer_irq:
                li      a0, 7
                move    a1, sp
-               jal     do_IRQ
-               j       ret_from_irq
+               j       do_IRQ