root/arch/csky/include/asm/traps.h
/* SPDX-License-Identifier: GPL-2.0 */

#ifndef __ASM_CSKY_TRAPS_H
#define __ASM_CSKY_TRAPS_H

#include <linux/linkage.h>

#define VEC_RESET       0
#define VEC_ALIGN       1
#define VEC_ACCESS      2
#define VEC_ZERODIV     3
#define VEC_ILLEGAL     4
#define VEC_PRIV        5
#define VEC_TRACE       6
#define VEC_BREAKPOINT  7
#define VEC_UNRECOVER   8
#define VEC_SOFTRESET   9
#define VEC_AUTOVEC     10
#define VEC_FAUTOVEC    11
#define VEC_HWACCEL     12

#define VEC_TLBMISS     14
#define VEC_TLBMODIFIED 15

#define VEC_TRAP0       16
#define VEC_TRAP1       17
#define VEC_TRAP2       18
#define VEC_TRAP3       19

#define VEC_TLBINVALIDL 20
#define VEC_TLBINVALIDS 21

#define VEC_PRFL        29
#define VEC_FPE         30

extern void *vec_base[];

#define VEC_INIT(i, func) \
do { \
        vec_base[i] = (void *)func; \
} while (0)

void csky_alignment(struct pt_regs *regs);

asmlinkage void do_trap_unknown(struct pt_regs *regs);
asmlinkage void do_trap_zdiv(struct pt_regs *regs);
asmlinkage void do_trap_buserr(struct pt_regs *regs);
asmlinkage void do_trap_misaligned(struct pt_regs *regs);
asmlinkage void do_trap_bkpt(struct pt_regs *regs);
asmlinkage void do_trap_illinsn(struct pt_regs *regs);
asmlinkage void do_trap_fpe(struct pt_regs *regs);
asmlinkage void do_trap_priv(struct pt_regs *regs);
asmlinkage void trap_c(struct pt_regs *regs);

asmlinkage void do_notify_resume(struct pt_regs *regs,
                        unsigned long thread_info_flags);

asmlinkage void do_page_fault(struct pt_regs *regs);

#endif /* __ASM_CSKY_TRAPS_H */