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