Procdata uses user_contexts (XCC)
[akaros.git] / kern / arch / riscv / process.c
index a4a0a29..0f09b36 100644 (file)
@@ -8,9 +8,22 @@
 #include <assert.h>
 #include <stdio.h>
 
-void proc_init_trapframe(trapframe_t *tf, uint32_t vcoreid,
-                         uintptr_t entryp, uintptr_t stack_top)
+/* TODO: handle user and kernel contexts */
+void proc_pop_ctx(struct user_context *ctx)
 {
+       struct hw_trapframe *tf = &ctx->tf.hw_tf;
+       assert(ctx->type = ROS_HW_CTX);
+       extern void env_pop_tf(struct hw_trapframe *tf);        /* in asm */
+       env_pop_tf(tf);
+}
+
+/* TODO: consider using a SW context */
+void proc_init_ctx(struct user_context *ctx, uint32_t vcoreid, uintptr_t entryp,
+                   uintptr_t stack_top)
+{
+       struct hw_trapframe *tf = &ctx->tf.hw_tf;
+       ctx->type = ROS_HW_CTX;
+
        memset(tf, 0, sizeof(*tf));
 
        tf->gpr[30] = stack_top-64;
@@ -23,8 +36,11 @@ void proc_init_trapframe(trapframe_t *tf, uint32_t vcoreid,
        tf->gpr[4] = vcoreid;
 }
 
-void proc_secure_trapframe(struct trapframe *tf)
+/* TODO: handle both HW and SW contexts */
+void proc_secure_ctx(struct user_context *ctx)
 {
+       struct hw_trapframe *tf = &ctx->tf.hw_tf;
+       ctx->type = ROS_HW_CTX;
        tf->sr = SR_U64;
 }