import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / arch / mips / galileo-boards / ev96100 / int-handler.S
1 #include <asm/asm.h>
2 #include <asm/mipsregs.h>
3 #include <asm/regdef.h>
4 #include <asm/stackframe.h>
5
6         .set    noat
7         .align  5
8
9 NESTED(ev96100IRQ, PT_SIZE, sp)
10         SAVE_ALL
11         CLI                             # Important: mark KERNEL mode !
12
13         mfc0    t0, CP0_CAUSE           # get pending interrupts
14         mfc0    t1, CP0_STATUS          # get enabled interrupts
15         and     t0, t1                  # isolate allowed ones
16
17         # FIX ME add R7000 extensions
18         andi    t0,0xff00               # isolate pending bits
19         andi    a0, t0, CAUSEF_IP7
20         beq     a0, zero, 1f
21         move    a0, sp
22         jal     mips_timer_interrupt
23         j       ret_from_irq
24
25 1:      beqz    t0, 3f                  # spurious interrupt
26         move    a0, t0
27         move    a1, sp                  # delay slot
28         jal     ev96100_cpu_irq
29         j       ret_from_irq
30
31 3:      j       spurious_interrupt
32         END(ev96100IRQ)