Warning: This file is not a C or C++ file. It does not have highlighting.
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 | |
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); |
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); |
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 */ |
62 |
Warning: This file is not a C or C++ file. It does not have highlighting.