Commit | Line | Data |
---|---|---|
caab277b | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
10b663ae CM |
2 | /* |
3 | * Based on arch/arm/include/asm/exception.h | |
4 | * | |
5 | * Copyright (C) 2012 ARM Ltd. | |
10b663ae CM |
6 | */ |
7 | #ifndef __ASM_EXCEPTION_H | |
8 | #define __ASM_EXCEPTION_H | |
9 | ||
68ddbf09 | 10 | #include <asm/esr.h> |
b6e43c0e | 11 | #include <asm/kprobes.h> |
e540e0a7 | 12 | #include <asm/ptrace.h> |
68ddbf09 | 13 | |
be7635e7 | 14 | #include <linux/interrupt.h> |
9a5ad7d0 | 15 | |
9a5ad7d0 JL |
16 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
17 | #define __exception_irq_entry __irq_entry | |
18 | #else | |
b6e43c0e | 19 | #define __exception_irq_entry __kprobes |
9a5ad7d0 | 20 | #endif |
10b663ae | 21 | |
68ddbf09 JM |
22 | static inline u32 disr_to_esr(u64 disr) |
23 | { | |
24 | unsigned int esr = ESR_ELx_EC_SERROR << ESR_ELx_EC_SHIFT; | |
25 | ||
26 | if ((disr & DISR_EL1_IDS) == 0) | |
27 | esr |= (disr & DISR_EL1_ESR_MASK); | |
28 | else | |
29 | esr |= (disr & ESR_ELx_ISS_MASK); | |
30 | ||
31 | return esr; | |
32 | } | |
33 | ||
2671828c | 34 | asmlinkage void enter_from_user_mode(void); |
afa7c0e5 JM |
35 | void do_mem_abort(unsigned long addr, unsigned int esr, struct pt_regs *regs); |
36 | void do_sp_pc_abort(unsigned long addr, unsigned int esr, struct pt_regs *regs); | |
37 | void do_undefinstr(struct pt_regs *regs); | |
e540e0a7 | 38 | asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr); |
afa7c0e5 JM |
39 | void do_debug_exception(unsigned long addr_if_watchpoint, unsigned int esr, |
40 | struct pt_regs *regs); | |
41 | void do_fpsimd_acc(unsigned int esr, struct pt_regs *regs); | |
42 | void do_sve_acc(unsigned int esr, struct pt_regs *regs); | |
43 | void do_fpsimd_exc(unsigned int esr, struct pt_regs *regs); | |
44 | void do_sysinstr(unsigned int esr, struct pt_regs *regs); | |
45 | void do_sp_pc_abort(unsigned long addr, unsigned int esr, struct pt_regs *regs); | |
46 | void bad_el0_sync(struct pt_regs *regs, int reason, unsigned int esr); | |
47 | void do_cp15instr(unsigned int esr, struct pt_regs *regs); | |
48 | void el0_svc_handler(struct pt_regs *regs); | |
49 | void el0_svc_compat_handler(struct pt_regs *regs); | |
50 | void do_el0_ia_bp_hardening(unsigned long addr, unsigned int esr, | |
51 | struct pt_regs *regs); | |
2671828c | 52 | |
10b663ae | 53 | #endif /* __ASM_EXCEPTION_H */ |