summaryrefslogtreecommitdiff
path: root/kernel/src
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/scheduler/process.c38
-rw-r--r--kernel/src/scheduler/switch_process.S113
2 files changed, 0 insertions, 151 deletions
diff --git a/kernel/src/scheduler/process.c b/kernel/src/scheduler/process.c
deleted file mode 100644
index 92c6ab3..0000000
--- a/kernel/src/scheduler/process.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <types.h>
-#include <registers.h>
-#include <heap.h>
-#include <process.h>
-
-process_t process_list;
-process_t current_process;
-
-void create_process(uint64_t rip, uint64_t param1, uint64_t param2)
-{
- process_t* process = (process_t*)kalloc(sizeof(process_t));
- registers_t* regs = &process->registers;
- regs->rax = 0;
- regs->rbx = 0;
- regs->rcx = 0;
- regs->rdx = 0;
- regs->rsi = 0;
- regs->rdi = 0;
- regs->rsp = 0;
- regs->rbp = 0;
- regs->r8 = 0;
- regs->r9 = 0;
- regs->r10 = 0;
- regs->r11 = 0;
- regs->r12 = 0;
- regs->r13 = 0;
- regs->r14 = 0;
- regs->r15 = 0;
- regs->rflags = 0;
-
- uint64_t stack_size = 4*4096;
- regs->rsp = (uint64_t)kalloc(4*4096) + stack_size - 8;
- regs->rip = rip;
- regs->rdi = param1;
- regs->rsi = param2;
- process->status = STATUS_READY;
- process->time_using_cpu = 0;
-}
diff --git a/kernel/src/scheduler/switch_process.S b/kernel/src/scheduler/switch_process.S
deleted file mode 100644
index 7209d37..0000000
--- a/kernel/src/scheduler/switch_process.S
+++ /dev/null
@@ -1,113 +0,0 @@
-.extern current_process
-.extern schedule
-
-.text
-
-.set RAX, 0x0
-.set RBX, 0x8
-.set RCX, 0x10
-.set RDX, 0x18
-.set RSI, 0x20
-.set RDI, 0x28
-.set RSP, 0x30
-.set RBP, 0x38
-.set R8, 0x40
-.set R9, 0x48
-.set R10, 0x50
-.set R11, 0x58
-.set R12, 0x60
-.set R13, 0x68
-.set R14, 0x70
-.set R15, 0x78
-.set RIP, 0x80
-.set RFLAGS, 0x88
-.set CR3, 0x90
-.set CS, 0x98
-.set DS, 0x9c
-.set SS, 0x100
-.set ES, 0x104
-.set FS, 0x108
-.set GS, 0x10c
-
-.macro save_regs
- mov %rax, RAX(%rsp)
- mov %rbx, RBX(%rsp)
- mov %rax, RAX(%rsp)
- mov %rbx, RBX(%rsp)
- mov %rcx, RCX(%rsp)
- mov %rdx, RDX(%rsp)
- mov %rsi, RSI(%rsp)
- mov %rdi, RDI(%rsp)
-# mov %rsp, RSP(%rsp)
- mov %rbp, RBP(%rsp)
- mov %r8, R8(%rsp)
- mov %r9, R9(%rsp)
- mov %r10, R10(%rsp)
- mov %r11, R11(%rsp)
- mov %r12, R12(%rsp)
- mov %r13, R13(%rsp)
- mov %r14, R14(%rsp)
- mov %r15, R15(%rsp)
-# mov %rip, RIP(%rsp)
-
- pushfq
- pop %rax
- mov %rax, RFLAGS(%rsp)
-
-# mov %cr3, CR3(%rsp)
- mov %cs, CS(%rsp)
- mov %ds, DS(%rsp)
- mov %ss, SS(%rsp)
- mov %es, ES(%rsp)
- mov %fs, FS(%rsp)
- mov %gs, GS(%rsp)
-.endm
-
-.macro restore_regs
- mov RBX(%rsp), %rbx
- mov RAX(%rsp), %rax
- mov RBX(%rsp), %rbx
- mov RCX(%rsp), %rcx
- mov RDX(%rsp), %rdx
- mov RSI(%rsp), %rsi
- mov RDI(%rsp), %rdi
-# mov RSP(%rsp), %rsp
- mov RBP(%rsp), %rbp
- mov R8(%rsp), %r8
- mov R9(%rsp), %r9
- mov R10(%rsp), %r10
- mov R11(%rsp), %r11
- mov R12(%rsp), %r12
- mov R13(%rsp), %r13
- mov R14(%rsp), %r14
- mov R15(%rsp), %r15
-# mov RIP(%rsp), %rip
-
- mov RFLAGS(%rsp), %rax
- push %rax
- popfq
-
- mov RAX(%rsp), %rax
-
-# mov CR3(%rsp), %cr3
- mov CS(%rsp), %cs
- mov DS(%rsp), %ds
- mov SS(%rsp), %ss
- mov ES(%rsp), %es
- mov FS(%rsp), %fs
- mov GS(%rsp), %gs
-.endm
-
-
-.global switch_process
-switch_process:
- # save current process context
- mov current_process, %rsp
- save_regs
-
- # get which process is next
- call schedule
-
- # restore next process context
- mov current_process, %rsp
- restore_regs