aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2006-04-03 12:56:36 -0400
committerRalf Baechle <ralf@linux-mips.org>2006-04-18 22:14:21 -0400
commite4ac58afdfac792c0583af30dbd9eae53e24c78b (patch)
tree7517bef2c515fc630e4d3d238867b91cde96f558 /arch/mips/kernel
parentd35d473c25d43d7db3e5e18b66d558d2a631cca8 (diff)
[MIPS] Rewrite all the assembler interrupt handlers to C.
Saves like 1,600 lines of code, is way easier to debug, compilers frequently do a better job than the cut and paste type of handlers many boards had. And finally having all the stuff done in a single place also means alot of bug potencial for the MT ASE is gone. The only surviving handler in assembler is the DECstation one; I hope Maciej will rewrite it. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel')
-rw-r--r--arch/mips/kernel/genex.S14
-rw-r--r--arch/mips/kernel/traps.c2
2 files changed, 16 insertions, 0 deletions
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S
index 13f22d1d0e8b..04418b6568b0 100644
--- a/arch/mips/kernel/genex.S
+++ b/arch/mips/kernel/genex.S
@@ -122,6 +122,20 @@ handle_vcei:
122 .set pop 122 .set pop
123 END(except_vec3_r4000) 123 END(except_vec3_r4000)
124 124
125 __FINIT
126
127 .align 5
128NESTED(handle_int, PT_SIZE, sp)
129 SAVE_ALL
130 CLI
131
132 PTR_LA ra, ret_from_irq
133 move a0, sp
134 j plat_irq_dispatch
135 END(handle_int)
136
137 __INIT
138
125/* 139/*
126 * Special interrupt vector for MIPS64 ISA & embedded MIPS processors. 140 * Special interrupt vector for MIPS64 ISA & embedded MIPS processors.
127 * This is a dedicated interrupt exception vector which reduces the 141 * This is a dedicated interrupt exception vector which reduces the
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 857319085255..61efc61c45e2 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -42,6 +42,7 @@
42#include <asm/watch.h> 42#include <asm/watch.h>
43#include <asm/types.h> 43#include <asm/types.h>
44 44
45extern asmlinkage void handle_int(void);
45extern asmlinkage void handle_tlbm(void); 46extern asmlinkage void handle_tlbm(void);
46extern asmlinkage void handle_tlbl(void); 47extern asmlinkage void handle_tlbl(void);
47extern asmlinkage void handle_tlbs(void); 48extern asmlinkage void handle_tlbs(void);
@@ -1296,6 +1297,7 @@ void __init trap_init(void)
1296 if (board_be_init) 1297 if (board_be_init)
1297 board_be_init(); 1298 board_be_init();
1298 1299
1300 set_except_vector(0, handle_int);
1299 set_except_vector(1, handle_tlbm); 1301 set_except_vector(1, handle_tlbm);
1300 set_except_vector(2, handle_tlbl); 1302 set_except_vector(2, handle_tlbl);
1301 set_except_vector(3, handle_tlbs); 1303 set_except_vector(3, handle_tlbs);