Move the get_user_ctx_* helpers to ros/ (XCC)
[akaros.git] / kern / arch / riscv / ros / trapframe.h
1 #pragma once
2
3 #ifndef ROS_INC_TRAPFRAME_H
4 #error "Do not include include ros/arch/trapframe.h directly"
5 #endif
6
7 #include <ros/common.h>
8 #include <stdint.h>
9
10 struct hw_trapframe
11 {
12   uintptr_t gpr[32];
13   uintptr_t sr;
14   uintptr_t epc;
15   uintptr_t badvaddr;
16   long cause;
17 };
18
19 struct sw_trapframe {
20         /* TODO */
21 };
22
23 struct vm_trapframe {
24         /* TODO */
25 };
26
27 #define GPR_RA 1
28 #define GPR_SP 14
29 #define GPR_A0 18
30 #define GPR_A1 19
31
32 #error "fix this #define"
33 /* this is an error flag, reflected back in faults.  similar to flags that say
34  * if a PF was a write fault, read fault, or user fault. */
35 #define PF_VMR_BACKED (1 << 31)
36
37 typedef struct ancillary_state
38 {
39         uint64_t fpr[32];
40         uint32_t fsr;
41 } ancillary_state_t;
42
43 static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf)
44 {
45         #warning "fix me"
46         return 0;
47         //return hw_tf->tf_rip;
48 }
49
50 static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf)
51 {
52         /* do you even have frame pointers?  this is used for backtrace, but if you
53          * don't use FPs, we'll need to change up our parameters or something. */
54         #warning "fix me"
55         return 0;
56         //return hw_tf->tf_rbp;
57 }
58
59 static inline uintptr_t get_hwtf_sp(struct hw_trapframe *hw_tf)
60 {
61         /* do you even have frame pointers?  this is used for backtrace, but if you
62          * don't use FPs, we'll need to change up our parameters or something. */
63         #warning "fix me"
64         return 0;
65         //return hw_tf->tf_rsp;
66 }
67
68 static inline uintptr_t get_swtf_pc(struct sw_trapframe *sw_tf)
69 {
70         #warning "fix me"
71         return 0;
72         //return sw_tf->tf_rip;
73 }
74
75 static inline uintptr_t get_swtf_fp(struct sw_trapframe *sw_tf)
76 {
77         #warning "fix me"
78         return 0;
79         //return sw_tf->tf_rbp;
80 }
81
82 static inline uintptr_t get_swtf_sp(struct sw_trapframe *sw_tf)
83 {
84         #warning "fix me"
85         return 0;
86         //return sw_tf->tf_rsp;
87 }
88
89 static inline uintptr_t get_vmtf_pc(struct vm_trapframe *vm_tf)
90 {
91         #warning "fix me"
92         return 0;
93 }
94
95 static inline uintptr_t get_vmtf_fp(struct vm_trapframe *vm_tf)
96 {
97         #warning "fix me"
98         return 0;
99 }
100
101 static inline uintptr_t get_vmtf_sp(struct vm_trapframe *vm_tf)
102 {
103         #warning "fix me"
104         return 0;
105 }