]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - arch/sh/include/asm/traps_32.h
Merge branch 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux...
[mirror_ubuntu-focal-kernel.git] / arch / sh / include / asm / traps_32.h
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);
46 asmlinkage void do_reserved_inst(void);
47 asmlinkage void do_illegal_slot_inst(void);
48 asmlinkage void do_exception_error(void);
49
50 #define BUILD_TRAP_HANDLER(name) \
51 asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5, \
52 unsigned long r6, unsigned long r7, \
53 struct pt_regs __regs)
54
55 #define TRAP_HANDLER_DECL \
56 struct pt_regs *regs = RELOC_HIDE(&__regs, 0); \
57 unsigned int vec = regs->tra; \
58 (void)vec;
59
60 #endif /* __ASM_SH_TRAPS_32_H */