This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / arch / mips / tx4938 / common / irq_handler.S
1 /*
2  * linux/arch/mips/tx4938/common/handler.S
3  *
4  * Primary interrupt handler for tx4938 based systems
5  * Copyright (C) 2000-2001 Toshiba Corporation
6  *
7  * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the
8  * terms of the GNU General Public License version 2. This program is
9  * licensed "as is" without any warranty of any kind, whether express
10  * or implied.
11  *
12  * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com)
13  */
14 #include <asm/asm.h>
15 #include <asm/mipsregs.h>
16 #include <asm/addrspace.h>
17 #include <asm/regdef.h>
18 #include <asm/stackframe.h>
19 #include <asm/tx4938/rbtx4938.h>
20
21
22                 .align  5
23                 NESTED(tx4938_irq_handler, PT_SIZE, sp)
24                 SAVE_ALL
25                 CLI
26                 .set    at
27
28                 mfc0    t0, CP0_CAUSE
29                 mfc0    t1, CP0_STATUS
30                 and     t0, t1
31
32                 andi    t1, t0, STATUSF_IP7     /* cpu timer */
33                 bnez    t1, ll_ip7
34
35                 /* IP6..IP3 multiplexed -- do not use */
36
37                 andi    t1, t0, STATUSF_IP2     /* tx4938 pic */
38                 bnez    t1, ll_ip2
39
40                 andi    t1, t0, STATUSF_IP1     /* user line 1 */
41                 bnez    t1, ll_ip1
42
43                 andi    t1, t0, STATUSF_IP0     /* user line 0 */
44                 bnez    t1, ll_ip0
45
46                 .set    reorder
47
48                 nop
49                 END(tx4938_irq_handler)
50
51                 .align  5
52
53
54 ll_ip7:
55                 li      a0, TX4938_IRQ_CPU_TIMER
56                 move    a1, sp
57                 jal     do_IRQ
58                 j       ret_from_irq
59
60
61 ll_ip2:
62                 jal     tx4938_irq_nested
63                 nop
64                 beqz    v0, goto_spurious_interrupt
65                 nop
66                 move    a0, v0
67                 move    a1, sp
68                 jal     do_IRQ
69                 j       ret_from_irq
70
71 goto_spurious_interrupt:
72                 j       ret_from_irq
73
74 ll_ip1:
75                 li      a0, TX4938_IRQ_USER1
76                 move    a1, sp
77                 jal     do_IRQ
78                 j       ret_from_irq
79
80 ll_ip0:
81                 li      a0, TX4938_IRQ_USER0
82                 move    a1, sp
83                 jal     do_IRQ
84                 j       ret_from_irq