diff options
| author | Ralf Baechle <ralf@linux-mips.org> | 2006-04-03 12:56:36 -0400 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2006-04-18 22:14:21 -0400 |
| commit | e4ac58afdfac792c0583af30dbd9eae53e24c78b (patch) | |
| tree | 7517bef2c515fc630e4d3d238867b91cde96f558 /arch/mips/kernel | |
| parent | d35d473c25d43d7db3e5e18b66d558d2a631cca8 (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.S | 14 | ||||
| -rw-r--r-- | arch/mips/kernel/traps.c | 2 |
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 | ||
| 128 | NESTED(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 | ||
| 45 | extern asmlinkage void handle_int(void); | ||
| 45 | extern asmlinkage void handle_tlbm(void); | 46 | extern asmlinkage void handle_tlbm(void); |
| 46 | extern asmlinkage void handle_tlbl(void); | 47 | extern asmlinkage void handle_tlbl(void); |
| 47 | extern asmlinkage void handle_tlbs(void); | 48 | extern 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); |
