a97eb9a4b3f2ae654a2d7f8a87a79c9e75270265
[akaros.git] / kern / arch / sparc / process.c
1 #include <arch/arch.h>
2 #include <arch/trap.h>
3 #include <process.h>
4 #include <frontend.h>
5 #include <pmap.h>
6 #include <smp.h>
7
8 #include <string.h>
9 #include <assert.h>
10 #include <stdio.h>
11
12 #ifdef __SHARC__
13 #pragma nosharc
14 #endif
15
16 void
17 proc_init_trapframe(trapframe_t *tf, uint32_t vcoreid,
18                     uint32_t entryp, uint32_t stack_top)
19 {
20         memset(tf,0,sizeof(*tf));
21
22         tf->psr = PSR_S; // but PS = 0
23         tf->gpr[14] = stack_top-96;
24         tf->asr13 = vcoreid;
25
26         tf->pc = entryp;
27         tf->npc = entryp+4;
28 }
29
30 /* For cases that we won't return from a syscall via the normal path, and need
31  * to set the syscall return value in the registers manually.  Like in a syscall
32  * moving to RUNNING_M */
33 void proc_set_syscall_retval(trapframe_t *SAFE tf, intreg_t value)
34 {
35         tf->gpr[8] = value;
36 }