diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-13 22:31:43 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-13 22:31:43 -0400 |
| commit | 548506392b789f58b1556a6ffca917441e1d89fd (patch) | |
| tree | 58e4b747446ea64e7951e523353f58510b3a8b2f /proc/process.h | |
| parent | c5e3bb7917689bc9ed54fee23a143144fade802d (diff) | |
| download | jove-kernel-548506392b789f58b1556a6ffca917441e1d89fd.tar.gz jove-kernel-548506392b789f58b1556a6ffca917441e1d89fd.tar.bz2 jove-kernel-548506392b789f58b1556a6ffca917441e1d89fd.zip | |
ipc functions. work on process spawning
Diffstat (limited to 'proc/process.h')
| -rw-r--r-- | proc/process.h | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/proc/process.h b/proc/process.h index 21dbf8d..f566ba4 100644 --- a/proc/process.h +++ b/proc/process.h @@ -1,15 +1,18 @@ #ifndef _JOVE_HAL_PROCESS_H #define _JOVE_HAL_PROCESS_H 1 +#include "hal/memory.h" #include "hal/obj.h" #include "lib/rbtree.h" #include "api/process.h" +#include "proc/ipc.h" -struct pcb_mailbox -{ - jove_owned_obj_t *obj; - pid_t pid; -}; +#ifdef DEBUG_IPC +#include "lib/printf.h" +#define ipc_klogf(fmt, ...) kprintf("%s: " fmt, __func__, __VA_ARGS__) +#else +#define ipc_klogf(fmt, ...) +#endif struct pcb_header { @@ -24,7 +27,7 @@ struct pcb_header intmax_t state_code; size_t block_until; - struct pcb_mailbox send, recv; + struct port mailbox; void *ksp; }; @@ -43,8 +46,7 @@ jove_obj_t *pcb_getrootdir(pcb_t *pcb); jove_owned_obj_t *pcb_getpagedir(jove_owned_obj_t *rootdir_obj); jove_owned_obj_t *pcb_getself(jove_owned_obj_t *rootdir_obj); -struct pcb_mailbox *pcb_getmail_send(pcb_t *pcb); -struct pcb_mailbox *pcb_getmail_recv(pcb_t *pcb); +struct port *pcb_getport(pcb_t *pcb); enum pcb_state pcb_getstate(pcb_t *pcb); intmax_t pcb_getstatecode(pcb_t *pcb); @@ -57,6 +59,15 @@ pcb_t *pcb_frompid(pid_t pid); int pcb_send(pcb_t *pcb, pid_t target, jove_owned_obj_t *subject, size_t timeout); int pcb_recv(pcb_t *pcb, pid_t target, jove_owned_obj_t *dest_obj, size_t timeout); +physaddr_t pcb_get_syscall_stack(pcb_t *pcb); +physaddr_t pcb_get_interrupt_stack(pcb_t *pcb); + +physaddr_t pcb_set_syscall_stack(pcb_t *pcb, physaddr_t page); +physaddr_t pcb_set_interrupt_stack(pcb_t *pcb, physaddr_t page); + +void pcb_map_syscall_stack(pcb_t *pcb); +void pcb_map_interrupt_stack(pcb_t *pcb); + extern struct rbtree_node *pcb_tree; #endif |
