x86: Rename VPD (XCC)
[akaros.git] / kern / include / ros / trapframe.h
1 #pragma once
2
3 #define ROS_INC_TRAPFRAME_H
4
5 #include <ros/arch/trapframe.h>
6
7 #define ROS_HW_CTX                              1
8 #define ROS_SW_CTX                              2
9 #define ROS_VM_CTX                              3
10
11 /* User-space context, either from a hardware event (IRQ, trap, etc), from a
12  * syscall, or virtual machine.  Each arch defines its types. */
13 struct user_context {
14         int                                                     type;
15         union {
16                 struct hw_trapframe             hw_tf;
17                 struct sw_trapframe             sw_tf;
18                 struct vm_trapframe             vm_tf;
19         } tf;
20 };
21
22 static inline uintptr_t get_user_ctx_pc(struct user_context *ctx)
23 {
24         switch (ctx->type) {
25         case ROS_HW_CTX:
26                 return get_hwtf_pc(&ctx->tf.hw_tf);
27         case ROS_SW_CTX:
28                 return get_swtf_pc(&ctx->tf.sw_tf);
29         case ROS_VM_CTX:
30                 return get_vmtf_pc(&ctx->tf.vm_tf);
31         }
32         return 0xf00baa;
33 }
34
35 static inline uintptr_t get_user_ctx_fp(struct user_context *ctx)
36 {
37         switch (ctx->type) {
38         case ROS_HW_CTX:
39                 return get_hwtf_fp(&ctx->tf.hw_tf);
40         case ROS_SW_CTX:
41                 return get_swtf_fp(&ctx->tf.sw_tf);
42         case ROS_VM_CTX:
43                 return get_vmtf_fp(&ctx->tf.vm_tf);
44         }
45         return 0xf00baa;
46 }
47
48 static inline uintptr_t get_user_ctx_sp(struct user_context *ctx)
49 {
50         switch (ctx->type) {
51         case ROS_HW_CTX:
52                 return get_hwtf_sp(&ctx->tf.hw_tf);
53         case ROS_SW_CTX:
54                 return get_swtf_sp(&ctx->tf.sw_tf);
55         case ROS_VM_CTX:
56                 return get_vmtf_sp(&ctx->tf.vm_tf);
57         }
58         return 0xf00baa;
59 }