summaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-27 01:59:33 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-27 01:59:33 +0100
commit15f3911599a8d005edee46247470afe2a7a0b4aa (patch)
tree3113b84e1ddddc1f4937ca5596d8e32aacc4f51f /kernel/include
parenta164ca67174ba6179170dea573479f23122513cc (diff)
almost done multitasking
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/idt.h3
-rw-r--r--kernel/include/process.h8
-rw-r--r--kernel/include/regs.h2
-rw-r--r--kernel/include/scheduler.h5
-rw-r--r--kernel/include/x86_64_regs.S5
5 files changed, 21 insertions, 2 deletions
diff --git a/kernel/include/idt.h b/kernel/include/idt.h
index 2d28be0..54b8ccb 100644
--- a/kernel/include/idt.h
+++ b/kernel/include/idt.h
@@ -30,7 +30,8 @@ void disable_interrupts(void);
void init_idt(void);
void load_idt(idtp *pointer);
void init_idt_table(void);
-void add_to_idt(uint16_t num, uint64_t offset, uint16_t selector, uint8_t type);
+void add_to_idt(uint16_t num, uint64_t offset, uint16_t selector, uint8_t type,
+ uint8_t ist);
extern idtp idt_pointer;
diff --git a/kernel/include/process.h b/kernel/include/process.h
index ff82924..14107c2 100644
--- a/kernel/include/process.h
+++ b/kernel/include/process.h
@@ -4,7 +4,7 @@
#include <types.h>
#include <libk/list.h>
-void save_context_to_rsp(uint64_t irq_rsp, uint64_t task_rsp);
+uint64_t save_context_from_rsp(uint64_t irq_rsp);
__attribute__((noreturn)) void restore_context_from_rsp(uint64_t task_rsp);
struct process_t {
@@ -16,6 +16,12 @@ typedef struct process_t process_t;
extern process_t process_queue;
extern process_t *curr_process;
+process_t *init_process(uint64_t priv_lvl, uint64_t rip, uint64_t argc,
+ uint64_t *argv);
+void process_init_wrapper(uint64_t rip, uint64_t argc, uint64_t *argv);
+__attribute__((noreturn)) void idle_thread(void);
+__attribute__((noreturn)) void idle_thread2(void);
+__attribute__((noreturn)) void remove_current_process(void);
__attribute__((noreturn)) void context_switch(uint64_t irq_rsp);
#endif
diff --git a/kernel/include/regs.h b/kernel/include/regs.h
index ec2ed89..67795ae 100644
--- a/kernel/include/regs.h
+++ b/kernel/include/regs.h
@@ -52,4 +52,6 @@ struct regs_t {
} __attribute__((packed));
typedef struct regs_t regs_t;
+void print_regs_from_rsp(uint64_t rsp);
+
#endif
diff --git a/kernel/include/scheduler.h b/kernel/include/scheduler.h
index 73a9d2b..79f462c 100644
--- a/kernel/include/scheduler.h
+++ b/kernel/include/scheduler.h
@@ -2,7 +2,12 @@
#define SCHEDULER_H
#include <process.h>
+#include <atomic.h>
+__attribute__((noreturn)) void init_scheduler(void);
process_t *scheduler(void);
+extern mutex_t scheduler_lock;
+extern uint32_t sched_init;
+
#endif
diff --git a/kernel/include/x86_64_regs.S b/kernel/include/x86_64_regs.S
index 644f4f8..a1d014d 100644
--- a/kernel/include/x86_64_regs.S
+++ b/kernel/include/x86_64_regs.S
@@ -1,3 +1,6 @@
+#ifndef X86_64_REGS_H
+#define X86_64_REGS_H
+
/* isr stack */
/* ss:rsp (original rsp) -> rflags -> cs -> rip */
@@ -99,3 +102,5 @@
pop %rcx
pop %rax
.endm
+
+#endif