summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/proc/process.c
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 /arch/x86_64/proc/process.c
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 'arch/x86_64/proc/process.c')
-rw-r--r--arch/x86_64/proc/process.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/arch/x86_64/proc/process.c b/arch/x86_64/proc/process.c
index 5935303..b10d538 100644
--- a/arch/x86_64/proc/process.c
+++ b/arch/x86_64/proc/process.c
@@ -40,3 +40,44 @@ processing_setup(void (*process_main))
scheduler_init(init_pcb_obj, process_main);
}
+
+inline physaddr_t
+pcb_get_syscall_stack(pcb_t *pcb)
+{
+ return pcb->syscall_page.pfn << 12;
+}
+
+inline physaddr_t
+pcb_get_interrupt_stack(pcb_t *pcb)
+{
+ return pcb->interrupt_page.pfn << 12;
+}
+
+physaddr_t
+pcb_set_syscall_stack(pcb_t *pcb, physaddr_t page)
+{
+ physaddr_t old_page = pcb_get_syscall_stack(pcb);
+ pcb->syscall_page.pfn = page >> 12;
+ pcb->syscall_page.p = 1;
+ pcb->syscall_page.rw = 1;
+ return old_page;
+}
+physaddr_t
+pcb_set_interrupt_stack(pcb_t *pcb, physaddr_t page)
+{
+ physaddr_t old_page = pcb_get_interrupt_stack(pcb);
+ pcb->interrupt_page.pfn = page >> 12;
+ pcb->interrupt_page.p = 1;
+ pcb->interrupt_page.rw = 1;
+ return old_page;
+}
+
+inline void pcb_map_syscall_stack(pcb_t *pcb)
+{
+ *__syscall_stack_mapping = pcb->syscall_page.value;
+}
+
+inline void pcb_map_interrupt_stack(pcb_t *pcb)
+{
+ *__interrupt_stack_mapping = pcb->interrupt_page.value;
+}