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
36extern void *vec_base[];
37
38#define VEC_INIT(i, func) \
39do { \
40	vec_base[i] = (void *)func; \
41} while (0)
42
43void csky_alignment(struct pt_regs *regs);
44
45asmlinkage void do_trap_unknown(struct pt_regs *regs);
46asmlinkage void do_trap_zdiv(struct pt_regs *regs);
47asmlinkage void do_trap_buserr(struct pt_regs *regs);
48asmlinkage void do_trap_misaligned(struct pt_regs *regs);
49asmlinkage void do_trap_bkpt(struct pt_regs *regs);
50asmlinkage void do_trap_illinsn(struct pt_regs *regs);
51asmlinkage void do_trap_fpe(struct pt_regs *regs);
52asmlinkage void do_trap_priv(struct pt_regs *regs);
53asmlinkage void trap_c(struct pt_regs *regs);
54
55asmlinkage void do_notify_resume(struct pt_regs *regs,
56			unsigned long thread_info_flags);
57
58asmlinkage void do_page_fault(struct pt_regs *regs);
59
60#endif /* __ASM_CSKY_TRAPS_H */
61