X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/6c506d8916fb114675e93d0e2cb20831d4022294..d1b1c8d9119229dbeed06cd252917e54a1cb77f6:/lunaix-os/includes/lunaix/hart_state.h diff --git a/lunaix-os/includes/lunaix/hart_state.h b/lunaix-os/includes/lunaix/hart_state.h new file mode 100644 index 0000000..a9172bd --- /dev/null +++ b/lunaix-os/includes/lunaix/hart_state.h @@ -0,0 +1,43 @@ +#ifndef __LUNAIX_CONTEXT_H +#define __LUNAIX_CONTEXT_H + +struct exec_param; +struct regcontext; +struct hart_state; + +#include +#include + +struct hart_transition +{ + ptr_t inject; + struct { + struct hart_state state; + struct exec_param eret; + } compact transfer; +}; + +bool +install_hart_transition(ptr_t vm_mnt, struct hart_transition* tctx); + +void +hart_prepare_transition(struct hart_transition* tctx, + ptr_t kstack_tp, ptr_t ustack_pt, + ptr_t entry, bool to_user); + +static inline void +hart_user_transfer(struct hart_transition* tctx, + ptr_t kstack_tp, ptr_t ustack_pt, + ptr_t entry) +{ + hart_prepare_transition(tctx, kstack_tp, ustack_pt, entry, true); +} + +static inline void +hart_kernel_transfer(struct hart_transition* tctx, + ptr_t kstack_tp, ptr_t entry) +{ + hart_prepare_transition(tctx, kstack_tp, 0, entry, false); +} + +#endif /* __LUNAIX_CONTEXT_H */