summaryrefslogtreecommitdiffstats
path: root/proc/process.h
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-10-13 22:31:43 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-10-13 22:31:43 -0400
commit548506392b789f58b1556a6ffca917441e1d89fd (patch)
tree58e4b747446ea64e7951e523353f58510b3a8b2f /proc/process.h
parentc5e3bb7917689bc9ed54fee23a143144fade802d (diff)
downloadjove-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.h27
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