77e7614de9e2165434040707f12eb9ff77e78f35
[lunaix-os.git] / lunaix-os / includes / lunaix / pcontext.h
1 #ifndef __LUNAIX_CONTEXT_H
2 #define __LUNAIX_CONTEXT_H
3
4 struct exec_param;
5 struct regcontext;
6 struct pcontext;
7 typedef struct pcontext isr_param;
8
9 #include <lunaix/compiler.h>
10 #include <sys/interrupts.h>
11
12 struct transfer_context 
13 {
14     ptr_t inject;
15     struct {
16         struct pcontext isr;
17         struct exec_param eret;
18     } compact transfer;
19 };
20
21 bool
22 inject_transfer_context(ptr_t vm_mnt, struct transfer_context* tctx);
23
24 void
25 thread_setup_trasnfer(struct transfer_context* tctx, 
26                       ptr_t kstack_tp, ptr_t ustack_pt, 
27                       ptr_t entry, bool to_user);
28
29 static inline void
30 thread_create_user_transfer(struct transfer_context* tctx, 
31                             ptr_t kstack_tp, ptr_t ustack_pt, 
32                             ptr_t entry) 
33 {
34     thread_setup_trasnfer(tctx, kstack_tp, ustack_pt, entry, true);
35 }
36
37 static inline void
38 thread_create_kernel_transfer(struct transfer_context* tctx, 
39                             ptr_t kstack_tp,  ptr_t entry) 
40 {
41     thread_setup_trasnfer(tctx, kstack_tp, 0, entry, false);
42 }
43
44 #endif /* __LUNAIX_CONTEXT_H */