From 15f3911599a8d005edee46247470afe2a7a0b4aa Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Mon, 27 Feb 2023 01:59:33 +0100 Subject: almost done multitasking --- kernel/include/idt.h | 3 ++- kernel/include/process.h | 8 +++++++- kernel/include/regs.h | 2 ++ kernel/include/scheduler.h | 5 +++++ kernel/include/x86_64_regs.S | 5 +++++ 5 files changed, 21 insertions(+), 2 deletions(-) (limited to 'kernel/include') 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 #include -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 +#include +__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 -- cgit v1.2.3