]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - arch/mips/gt64120/ev64120/int-handler.S
[MIPS] Fix the crime against humanity that mipsIRQ.S is.
[linux-2.6-omap-h63xx.git] / 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                 jal     spurious_interrupt
43                 nop
44                 j       ret_from_irq
45                 END(galileo_handle_int)
46
47
48                 .align  5
49                 .set    reorder
50 ll_gt64120_irq:
51                 li      a0,4
52                 move    a1,sp
53                 jal     do_IRQ
54                 nop
55                 j       ret_from_irq
56                 nop
57
58                 .align  5
59                 .set    reorder
60 ll_compare_irq:
61                 li      a0,7
62                 move    a1,sp
63                 jal     do_IRQ
64                 nop
65                 j       ret_from_irq
66                 nop
67
68                 .align  5
69                 .set    reorder
70 ll_pci_intA:
71                 move    a0,sp
72                 jal     pci_intA
73                 nop
74                 j       ret_from_irq
75                 nop
76
77 #if 0
78                 .align  5
79                 .set    reorder
80 ll_pci_intB:
81                 move    a0,sp
82                 jal     pci_intB
83                 nop
84                 j       ret_from_irq
85                 nop
86
87                 .align  5
88                 .set    reorder
89 ll_pci_intC:
90                 move    a0,sp
91                 jal     pci_intC
92                 nop
93                 j       ret_from_irq
94                 nop
95 #endif
96
97                 .align  5
98                 .set    reorder
99 ll_pci_intD:
100                 move    a0,sp
101                 jal     pci_intD
102                 nop
103                 j       ret_from_irq
104                 nop
105
106                 .align  5
107                 .set    reorder
108 ll_serial_irq:
109                 li      a0,6
110                 move    a1,sp
111                 jal     do_IRQ
112                 nop
113                 j       ret_from_irq
114                 nop