]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
e839ca52 DH |
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 | ||
33 | static 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 | ||
43 | asmlinkage void do_address_error(struct pt_regs *regs, | |
44 | unsigned long writeaccess, | |
45 | unsigned long address); | |
a3c19514 BB |
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); | |
e839ca52 DH |
50 | |
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) | |
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 */ |