Adding vmexits to proc.
[akaros.git] / kern / arch / riscv / trap.h
1 #ifndef ROS_ARCH_TRAP_H
2 #define ROS_ARCH_TRAP_H
3
4 #ifdef __riscv64
5 # define SIZEOF_HW_TRAPFRAME (36*8)
6 #else
7 # define SIZEOF_HW_TRAPFRAME (36*4)
8 #endif
9
10 #ifndef __ASSEMBLER__
11
12 #ifndef ROS_KERN_TRAP_H
13 #error "Do not include include arch/trap.h directly"
14 #endif
15
16 #include <ros/trapframe.h>
17 #include <arch/arch.h>
18
19 /* Kernel message interrupt vector.  ignored, for the most part */
20 #define I_KERNEL_MSG 255
21 #warning "make sure this poke vector is okay"
22 /* this is for an ipi that just wakes a core, but has no handler (for now) */
23 #define I_POKE_CORE 254
24
25 static inline bool in_kernel(struct hw_trapframe *hw_tf)
26 {
27         return hw_tf->sr & SR_PS;
28 }
29
30 static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf)
31 {
32         #warning "fix me"
33         return 0;
34         //return hw_tf->tf_rip;
35 }
36
37 static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf)
38 {
39         /* do you even have frame pointers?  this is used for backtrace, but if you
40          * don't use FPs, we'll need to change up our parameters or something. */
41         #warning "fix me"
42         return 0;
43         //return hw_tf->tf_rbp;
44 }
45
46 static inline uintptr_t get_swtf_pc(struct sw_trapframe *sw_tf)
47 {
48         #warning "fix me"
49         return 0;
50         //return sw_tf->tf_rip;
51 }
52
53 static inline uintptr_t get_swtf_fp(struct sw_trapframe *sw_tf)
54 {
55         #warning "fix me"
56         return 0;
57         //return sw_tf->tf_rbp;
58 }
59
60 static inline void __attribute__((always_inline))
61 set_stack_pointer(uintptr_t sp)
62 {
63         asm volatile("move sp, %0" : : "r"(sp) : "memory");
64 }
65
66 static inline void __attribute__((always_inline))
67 set_frame_pointer(uintptr_t fp)
68 {
69         #warning "brho is just guessing here."
70         asm volatile("move fp, %0" : : "r"(fp) : "memory");
71 }
72
73 void handle_trap(struct hw_trapframe *hw_tf);
74 int emulate_fpu(struct hw_trapframe *hw_tf);
75
76 #endif
77
78 #endif