Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[cris-mirror.git] / arch / sh / include / asm / traps_32.h
blob8c5bbb7b6053cf7b63133a9b4820bee9ef8d9d79
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_SH_TRAPS_32_H
3 #define __ASM_SH_TRAPS_32_H
5 #include <linux/types.h>
6 #include <asm/mmu.h>
8 #ifdef CONFIG_CPU_HAS_SR_RB
9 #define lookup_exception_vector() \
10 ({ \
11 unsigned long _vec; \
13 __asm__ __volatile__ ( \
14 "stc r2_bank, %0\n\t" \
15 : "=r" (_vec) \
16 ); \
18 _vec; \
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 ); \
29 _vec; \
31 #endif
33 static inline void trigger_address_error(void)
35 __asm__ __volatile__ (
36 "ldc %0, sr\n\t"
37 "mov.l @%1, %0"
39 : "r" (0x10000000), "r" (0x80000001)
43 asmlinkage void do_address_error(struct pt_regs *regs,
44 unsigned long writeaccess,
45 unsigned long address);
46 asmlinkage void do_divide_error(unsigned long r4);
47 asmlinkage void do_reserved_inst(void);
48 asmlinkage void do_illegal_slot_inst(void);
49 asmlinkage void do_exception_error(void);
51 #define BUILD_TRAP_HANDLER(name) \
52 asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5, \
53 unsigned long r6, unsigned long r7, \
54 struct pt_regs __regs)
56 #define TRAP_HANDLER_DECL \
57 struct pt_regs *regs = RELOC_HIDE(&__regs, 0); \
58 unsigned int vec = regs->tra; \
59 (void)vec;
61 #endif /* __ASM_SH_TRAPS_32_H */