Merge branch 'multitouch' into device-groups
[cascardo/linux.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, unsigned long r5,
46                                 unsigned long r6, unsigned long r7,
47                                 struct pt_regs __regs);
48 asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5,
49                                 unsigned long r6, unsigned long r7,
50                                 struct pt_regs __regs);
51 asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5,
52                                 unsigned long r6, unsigned long r7,
53                                 struct pt_regs __regs);
54 asmlinkage void do_exception_error(unsigned long r4, unsigned long r5,
55                                    unsigned long r6, unsigned long r7,
56                                    struct pt_regs __regs);
57
58 #define BUILD_TRAP_HANDLER(name)                                        \
59 asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5, \
60                                     unsigned long r6, unsigned long r7, \
61                                     struct pt_regs __regs)
62
63 #define TRAP_HANDLER_DECL                               \
64         struct pt_regs *regs = RELOC_HIDE(&__regs, 0);  \
65         unsigned int vec = regs->tra;                   \
66         (void)vec;
67
68 #endif /* __ASM_SH_TRAPS_32_H */