1 #ifndef __ASM_SH_TRAPS_32_H 2 #define __ASM_SH_TRAPS_32_H 3 4 #include <linux/types.h> 5 #include <asm/mmu.h> 6 7 #ifdef CONFIG_CPU_HAS_SR_RB 8 #define lookup_exception_vector() \ 9 ({ \ 10 unsigned long _vec; \ 11 \ 12 __asm__ __volatile__ ( \ 13 "stc r2_bank, %0\n\t" \ 14 : "=r" (_vec) \ 15 ); \ 16 \ 17 _vec; \ 18 }) 19 #else 20 #define lookup_exception_vector() \ 21 ({ \ 22 unsigned long _vec; \ 23 __asm__ __volatile__ ( \ 24 "mov r4, %0\n\t" \ 25 : "=r" (_vec) \ 26 ); \ 27 \ 28 _vec; \ 29 }) 30 #endif 31 32 static inline void trigger_address_error(void) 33 { 34 __asm__ __volatile__ ( 35 "ldc %0, sr\n\t" 36 "mov.l @%1, %0" 37 : 38 : "r" (0x10000000), "r" (0x80000001) 39 ); 40 } 41 42 asmlinkage void do_address_error(struct pt_regs *regs, 43 unsigned long writeaccess, 44 unsigned long address); 45 asmlinkage void do_divide_error(unsigned long r4, unsigned long r5, 46 unsigned long r6, unsigned long r7, 47 struct pt_regs __regs); 48 asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5, 49 unsigned long r6, unsigned long r7, 50 struct pt_regs __regs); 51 asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5, 52 unsigned long r6, unsigned long r7, 53 struct pt_regs __regs); 54 asmlinkage void do_exception_error(unsigned long r4, unsigned long r5, 55 unsigned long r6, unsigned long r7, 56 struct pt_regs __regs); 57 58 #define BUILD_TRAP_HANDLER(name) \ 59 asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5, \ 60 unsigned long r6, unsigned long r7, \ 61 struct pt_regs __regs) 62 63 #define TRAP_HANDLER_DECL \ 64 struct pt_regs *regs = RELOC_HIDE(&__regs, 0); \ 65 unsigned int vec = regs->tra; \ 66 (void)vec; 67 68 #endif /* __ASM_SH_TRAPS_32_H */ 69