Always keep floating point enabled on RISC-V
[akaros.git] / kern / arch / riscv / process.c
1 #include <arch/arch.h>
2 #include <trap.h>
3 #include <process.h>
4 #include <pmap.h>
5 #include <smp.h>
6
7 #include <string.h>
8 #include <assert.h>
9 #include <stdio.h>
10
11 /* TODO: handle user and kernel contexts */
12 void proc_pop_ctx(struct user_context *ctx)
13 {
14         struct hw_trapframe *tf = &ctx->tf.hw_tf;
15         assert(ctx->type == ROS_HW_CTX);
16         extern void env_pop_tf(struct hw_trapframe *tf)
17           __attribute__((noreturn));    /* in asm */
18         env_pop_tf(tf);
19 }
20
21 /* TODO: consider using a SW context */
22 void proc_init_ctx(struct user_context *ctx, uint32_t vcoreid, uintptr_t entryp,
23                    uintptr_t stack_top)
24 {
25         struct hw_trapframe *tf = &ctx->tf.hw_tf;
26         ctx->type = ROS_HW_CTX;
27
28         memset(tf, 0, sizeof(*tf));
29
30         tf->gpr[GPR_SP] = stack_top-64;
31         tf->sr = SR_U64 | SR_EF;
32
33         tf->epc = entryp;
34
35         /* Coupled closely with user's entry.S.  id is the vcoreid, which entry.S
36          * uses to determine what to do.  vcoreid == 0 is the main core/context. */
37         tf->gpr[GPR_A0] = vcoreid;
38 }
39
40 /* TODO: handle both HW and SW contexts */
41 void proc_secure_ctx(struct user_context *ctx)
42 {
43         struct hw_trapframe *tf = &ctx->tf.hw_tf;
44         ctx->type = ROS_HW_CTX;
45         tf->sr = SR_U64 | SR_EF;
46 }
47
48 /* Called when we are currently running an address space on our core and want to
49  * abandon it.  We need a known good pgdir before releasing the old one.  We
50  * decref, since current no longer tracks the proc (and current no longer
51  * protects the cr3).  We also need to clear out the TLS registers (before
52  * unmapping the address space!) */
53 void __abandon_core(void)
54 {
55         struct per_cpu_info *pcpui = &per_cpu_info[core_id()];
56         lcr3(boot_cr3);
57         proc_decref(pcpui->cur_proc);
58         pcpui->cur_proc = 0;
59 }