xref: /kvm-unit-tests/lib/riscv/asm/processor.h (revision db0ae91cbd57a92abcce6c032b979dd9035d42d8)
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