Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6] / arch / mips / sgi-ip27 / ip27-irq-glue.S
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 1999 Ralf Baechle
7  * Copyright (C) 1999 Silicon Graphics, Inc.
8  */
9 #include <asm/asm.h>
10 #include <asm/mipsregs.h>
11 #include <asm/regdef.h>
12 #include <asm/stackframe.h>
13
14         .text
15         .align  5
16 NESTED(ip27_irq, PT_SIZE, sp)
17         SAVE_ALL
18         CLI
19
20         mfc0    s0, CP0_CAUSE
21         mfc0    t0, CP0_STATUS
22         and     s0, t0
23         move    a0, sp
24         PTR_LA  ra, ret_from_irq
25
26         /* First check for RT interrupt.  */
27         andi    t0, s0, CAUSEF_IP4
28         bnez    t0, ip4
29         andi    t0, s0, CAUSEF_IP2
30         bnez    t0, ip2
31         andi    t0, s0, CAUSEF_IP3
32         bnez    t0, ip3
33         andi    t0, s0, CAUSEF_IP5
34         bnez    t0, ip5
35         andi    t0, s0, CAUSEF_IP6
36         bnez    t0, ip6
37         j       ra
38
39 ip2:    j       ip27_do_irq_mask0       # PI_INT_PEND_0 or CC_PEND_{A|B}
40 ip3:    j       ip27_do_irq_mask1       # PI_INT_PEND_1
41 ip4:    j       ip27_rt_timer_interrupt
42 ip5:    j       ip27_prof_timer
43 ip6:    j       ip27_hub_error
44
45         END(ip27_irq)