1386561f8SAndrew Jones /* SPDX-License-Identifier: GPL-2.0-only */ 2386561f8SAndrew Jones #ifndef _ASMRISCV_PROCESSOR_H_ 3386561f8SAndrew Jones #define _ASMRISCV_PROCESSOR_H_ 4386561f8SAndrew Jones #include <asm/csr.h> 5386561f8SAndrew Jones #include <asm/ptrace.h> 6386561f8SAndrew Jones 7386561f8SAndrew Jones #define EXCEPTION_CAUSE_MAX 16 8386561f8SAndrew Jones 9386561f8SAndrew Jones typedef void (*exception_fn)(struct pt_regs *); 10386561f8SAndrew Jones 11386561f8SAndrew Jones struct thread_info { 12386561f8SAndrew Jones int cpu; 13386561f8SAndrew Jones unsigned long hartid; 14*db0ae91cSAndrew Jones unsigned long isa[1]; 15386561f8SAndrew Jones exception_fn exception_handlers[EXCEPTION_CAUSE_MAX]; 16386561f8SAndrew Jones }; 17386561f8SAndrew Jones 18386561f8SAndrew Jones static inline struct thread_info *current_thread_info(void) 19386561f8SAndrew Jones { 20386561f8SAndrew Jones return (struct thread_info *)csr_read(CSR_SSCRATCH); 21386561f8SAndrew Jones } 22386561f8SAndrew Jones 23386561f8SAndrew Jones void install_exception_handler(unsigned long cause, void (*handler)(struct pt_regs *)); 24386561f8SAndrew Jones void do_handle_exception(struct pt_regs *regs); 25386561f8SAndrew Jones void thread_info_init(void); 26386561f8SAndrew Jones 27386561f8SAndrew Jones void show_regs(struct pt_regs *regs); 28386561f8SAndrew Jones 29386561f8SAndrew Jones #endif /* _ASMRISCV_PROCESSOR_H_ */ 30