diff options
Diffstat (limited to 'kernel/include')
| -rw-r--r-- | kernel/include/idt.h | 3 | ||||
| -rw-r--r-- | kernel/include/process.h | 8 | ||||
| -rw-r--r-- | kernel/include/regs.h | 2 | ||||
| -rw-r--r-- | kernel/include/scheduler.h | 5 | ||||
| -rw-r--r-- | kernel/include/x86_64_regs.S | 5 |
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 |
