Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
[linux-2.6] / arch / mips / gt64120 / ev64120 / int-handler.S
1 /*
2  * int-handler.S
3  *
4  * Based on the cobalt handler.
5  */
6 #include <asm/asm.h>
7 #include <asm/mipsregs.h>
8 #include <asm/addrspace.h>
9 #include <asm/regdef.h>
10 #include <asm/stackframe.h>
11
12 /*
13  * galileo_handle_int -
14  *      We check for the timer first, then check PCI ints A and D.
15  *      Then check for serial IRQ and fall through.
16  */
17                 .align  5
18                 .set    reorder
19                 .set    noat
20                 NESTED(galileo_handle_int, PT_SIZE, sp)
21                 SAVE_ALL
22                 CLI
23                 .set    at
24                 mfc0    t0,CP0_CAUSE
25                 mfc0    t2,CP0_STATUS
26
27                 and     t0,t2
28
29                 andi    t1,t0,STATUSF_IP4 /* int2 hardware line (timer) */
30                 bnez    t1,ll_gt64120_irq
31                 andi    t1,t0,STATUSF_IP2 /* int0 hardware line */
32                 bnez    t1,ll_pci_intA
33                 andi    t1,t0,STATUSF_IP5 /* int3 hardware line */
34                 bnez    t1,ll_pci_intD
35                 andi    t1,t0,STATUSF_IP6 /* int4 hardware line */
36                 bnez    t1,ll_serial_irq
37                 andi    t1,t0,STATUSF_IP7 /* compare int */
38                 bnez    t1,ll_compare_irq
39                 nop
40
41     /* wrong alarm or masked ... */
42                 j       spurious_interrupt
43                 nop
44                 END(galileo_handle_int)
45
46
47                 .align  5
48                 .set    reorder
49 ll_gt64120_irq:
50                 li      a0,4
51                 move    a1,sp
52                 jal     do_IRQ
53                 nop
54                 j       ret_from_irq
55                 nop
56
57                 .align  5
58                 .set    reorder
59 ll_compare_irq:
60                 li      a0,7
61                 move    a1,sp
62                 jal     do_IRQ
63                 nop
64                 j       ret_from_irq
65                 nop
66
67                 .align  5
68                 .set    reorder
69 ll_pci_intA:
70                 move    a0,sp
71                 jal     pci_intA
72                 nop
73                 j       ret_from_irq
74                 nop
75
76 #if 0
77                 .align  5
78                 .set    reorder
79 ll_pci_intB:
80                 move    a0,sp
81                 jal     pci_intB
82                 nop
83                 j       ret_from_irq
84                 nop
85
86                 .align  5
87                 .set    reorder
88 ll_pci_intC:
89                 move    a0,sp
90                 jal     pci_intC
91                 nop
92                 j       ret_from_irq
93                 nop
94 #endif
95
96                 .align  5
97                 .set    reorder
98 ll_pci_intD:
99                 move    a0,sp
100                 jal     pci_intD
101                 nop
102                 j       ret_from_irq
103                 nop
104
105                 .align  5
106                 .set    reorder
107 ll_serial_irq:
108                 li      a0,6
109                 move    a1,sp
110                 jal     do_IRQ
111                 nop
112                 j       ret_from_irq
113                 nop