Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Based on arch/arm/include/asm/exception.h
0004  *
0005  * Copyright (C) 2012 ARM Ltd.
0006  */
0007 #ifndef __ASM_EXCEPTION_H
0008 #define __ASM_EXCEPTION_H
0009 
0010 #include <asm/esr.h>
0011 #include <asm/kprobes.h>
0012 #include <asm/ptrace.h>
0013 
0014 #include <linux/interrupt.h>
0015 
0016 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
0017 #define __exception_irq_entry   __irq_entry
0018 #else
0019 #define __exception_irq_entry   __kprobes
0020 #endif
0021 
0022 static inline unsigned long disr_to_esr(u64 disr)
0023 {
0024     unsigned long esr = ESR_ELx_EC_SERROR << ESR_ELx_EC_SHIFT;
0025 
0026     if ((disr & DISR_EL1_IDS) == 0)
0027         esr |= (disr & DISR_EL1_ESR_MASK);
0028     else
0029         esr |= (disr & ESR_ELx_ISS_MASK);
0030 
0031     return esr;
0032 }
0033 
0034 asmlinkage void handle_bad_stack(struct pt_regs *regs);
0035 
0036 asmlinkage void el1t_64_sync_handler(struct pt_regs *regs);
0037 asmlinkage void el1t_64_irq_handler(struct pt_regs *regs);
0038 asmlinkage void el1t_64_fiq_handler(struct pt_regs *regs);
0039 asmlinkage void el1t_64_error_handler(struct pt_regs *regs);
0040 
0041 asmlinkage void el1h_64_sync_handler(struct pt_regs *regs);
0042 asmlinkage void el1h_64_irq_handler(struct pt_regs *regs);
0043 asmlinkage void el1h_64_fiq_handler(struct pt_regs *regs);
0044 asmlinkage void el1h_64_error_handler(struct pt_regs *regs);
0045 
0046 asmlinkage void el0t_64_sync_handler(struct pt_regs *regs);
0047 asmlinkage void el0t_64_irq_handler(struct pt_regs *regs);
0048 asmlinkage void el0t_64_fiq_handler(struct pt_regs *regs);
0049 asmlinkage void el0t_64_error_handler(struct pt_regs *regs);
0050 
0051 asmlinkage void el0t_32_sync_handler(struct pt_regs *regs);
0052 asmlinkage void el0t_32_irq_handler(struct pt_regs *regs);
0053 asmlinkage void el0t_32_fiq_handler(struct pt_regs *regs);
0054 asmlinkage void el0t_32_error_handler(struct pt_regs *regs);
0055 
0056 asmlinkage void call_on_irq_stack(struct pt_regs *regs,
0057                   void (*func)(struct pt_regs *));
0058 asmlinkage void asm_exit_to_user_mode(struct pt_regs *regs);
0059 
0060 void do_mem_abort(unsigned long far, unsigned long esr, struct pt_regs *regs);
0061 void do_undefinstr(struct pt_regs *regs);
0062 void do_bti(struct pt_regs *regs);
0063 void do_debug_exception(unsigned long addr_if_watchpoint, unsigned long esr,
0064             struct pt_regs *regs);
0065 void do_fpsimd_acc(unsigned long esr, struct pt_regs *regs);
0066 void do_sve_acc(unsigned long esr, struct pt_regs *regs);
0067 void do_sme_acc(unsigned long esr, struct pt_regs *regs);
0068 void do_fpsimd_exc(unsigned long esr, struct pt_regs *regs);
0069 void do_sysinstr(unsigned long esr, struct pt_regs *regs);
0070 void do_sp_pc_abort(unsigned long addr, unsigned long esr, struct pt_regs *regs);
0071 void bad_el0_sync(struct pt_regs *regs, int reason, unsigned long esr);
0072 void do_cp15instr(unsigned long esr, struct pt_regs *regs);
0073 void do_el0_svc(struct pt_regs *regs);
0074 void do_el0_svc_compat(struct pt_regs *regs);
0075 void do_ptrauth_fault(struct pt_regs *regs, unsigned long esr);
0076 void do_serror(struct pt_regs *regs, unsigned long esr);
0077 void do_notify_resume(struct pt_regs *regs, unsigned long thread_flags);
0078 
0079 void panic_bad_stack(struct pt_regs *regs, unsigned long esr, unsigned long far);
0080 #endif  /* __ASM_EXCEPTION_H */