x86: Userspace code to restart ROS TFs
[akaros.git] / user / include / sparc / hart.h
1 #ifndef PARLIB_ARCH_HART_H
2 #define PARLIB_ARCH_HART_H
3
4 #include <ros/common.h>
5 #include <ros/arch/trapframe.h>
6
7 /* Pops an ROS kernel-provided TF, reanabling notifications at the same time.
8  * A Userspace scheduler can call this when transitioning off the transition
9  * stack.
10  *
11  * Here's how x86 does it:
12  * Basically, it sets up the future stack pointer to have extra stuff after it,
13  * and then it pops the registers, then pops the new context's stack
14  * pointer.  Then it uses the extra stuff (the new PC is on the stack, the
15  * location of notif_enabled, and a clobbered work register) to enable notifs,
16  * restore the work reg, and then "ret".
17  *
18  * The important thing is that it can a notification after it enables
19  * notifications, and when it gets resumed it can ultimately run the new
20  * context.  Enough state is saved in the running context and stack to continue
21  * running. */
22 static inline void pop_ros_tf(struct user_trapframe *tf, bool *notif_en_loc)
23 {
24         // TODO: whatever sparc needs.
25 }
26
27 #endif /* PARLIB_ARCH_HART_H */