1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 #ifndef __ASM_CSKY_TRAPS_H
4 #define __ASM_CSKY_TRAPS_H
5 
6 #include <linux/linkage.h>
7 
8 #define VEC_RESET	0
9 #define VEC_ALIGN	1
10 #define VEC_ACCESS	2
11 #define VEC_ZERODIV	3
12 #define VEC_ILLEGAL	4
13 #define VEC_PRIV	5
14 #define VEC_TRACE	6
15 #define VEC_BREAKPOINT	7
16 #define VEC_UNRECOVER	8
17 #define VEC_SOFTRESET	9
18 #define VEC_AUTOVEC	10
19 #define VEC_FAUTOVEC	11
20 #define VEC_HWACCEL	12
21 
22 #define	VEC_TLBMISS	14
23 #define	VEC_TLBMODIFIED	15
24 
25 #define VEC_TRAP0	16
26 #define VEC_TRAP1	17
27 #define VEC_TRAP2	18
28 #define VEC_TRAP3	19
29 
30 #define	VEC_TLBINVALIDL	20
31 #define	VEC_TLBINVALIDS	21
32 
33 #define VEC_PRFL	29
34 #define VEC_FPE		30
35 
36 extern void *vec_base[];
37 
38 #define VEC_INIT(i, func) \
39 do { \
40 	vec_base[i] = (void *)func; \
41 } while (0)
42 
43 void csky_alignment(struct pt_regs *regs);
44 
45 asmlinkage void do_trap_unknown(struct pt_regs *regs);
46 asmlinkage void do_trap_zdiv(struct pt_regs *regs);
47 asmlinkage void do_trap_buserr(struct pt_regs *regs);
48 asmlinkage void do_trap_misaligned(struct pt_regs *regs);
49 asmlinkage void do_trap_bkpt(struct pt_regs *regs);
50 asmlinkage void do_trap_illinsn(struct pt_regs *regs);
51 asmlinkage void do_trap_fpe(struct pt_regs *regs);
52 asmlinkage void do_trap_priv(struct pt_regs *regs);
53 asmlinkage void trap_c(struct pt_regs *regs);
54 
55 asmlinkage void do_notify_resume(struct pt_regs *regs,
56 			unsigned long thread_info_flags);
57 
58 void trap_init(void);
59 
60 #endif /* __ASM_CSKY_TRAPS_H */
61