summaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-12-03 17:47:58 +0100
committerAleksa Vuckovic <aleksav013@gmail.com>2022-12-03 17:47:58 +0100
commit0882221263aa14669946f57578d3ee014493f58f (patch)
tree2ca87631b3683ba8a7df8621bbb5f053ff8f165f /kernel/include
parentae5499137e377e08feb523c08b26495e79ed16df (diff)
scheduler base
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/process.h25
-rw-r--r--kernel/include/registers.h31
-rw-r--r--kernel/include/scheduler.h6
3 files changed, 60 insertions, 2 deletions
diff --git a/kernel/include/process.h b/kernel/include/process.h
new file mode 100644
index 0000000..7e8f59d
--- /dev/null
+++ b/kernel/include/process.h
@@ -0,0 +1,25 @@
+#ifndef PROCESS_H
+#define PROCESS_H
+
+#include <registers.h>
+#include <libk/list.h>
+
+#define STATUS_READY 0
+#define STATUS_RUNNING 1
+#define STATUS_WAITING 2
+
+struct process_t {
+ registers_t registers;
+ list_t* next;
+ uint32_t status;
+ uint32_t pid;
+ uint32_t time_using_cpu;
+};
+typedef struct process_t process_t;
+
+extern process_t process_list;
+extern process_t current_process;
+
+void create_process(uint64_t rip, uint64_t param1, uint64_t param2);
+
+#endif
diff --git a/kernel/include/registers.h b/kernel/include/registers.h
index a0c0949..373e557 100644
--- a/kernel/include/registers.h
+++ b/kernel/include/registers.h
@@ -3,6 +3,32 @@
#include <types.h>
+#define RAX 0x0
+#define RBX 0x8
+#define RCX 0x10
+#define RDX 0x18
+#define RSI 0x20
+#define RDI 0x28
+#define RSP 0x30
+#define RBP 0x38
+#define R8 0x40
+#define R9 0x48
+#define R10 0x50
+#define R11 0x58
+#define R12 0x60
+#define R13 0x68
+#define R14 0x70
+#define R15 0x78
+#define RIP 0x80
+#define RFLAGS 0x88
+#define CR3 0x90
+#define CS 0x98
+#define DS 0x9c
+#define SS 0x100
+#define ES 0x104
+#define FS 0x108
+#define GS 0x10c
+
struct registers_t {
uint64_t rax;
uint64_t rbx;
@@ -21,14 +47,15 @@ struct registers_t {
uint64_t r14;
uint64_t r15;
uint64_t rip;
+ uint64_t rflags;
+ uint64_t cr3;
uint16_t cs;
uint16_t ds;
uint16_t ss;
uint16_t es;
uint16_t fs;
uint16_t gs;
-};
+} __attribute__((packed, aligned(8)));
typedef struct registers_t registers_t;
-
#endif
diff --git a/kernel/include/scheduler.h b/kernel/include/scheduler.h
new file mode 100644
index 0000000..2f751f0
--- /dev/null
+++ b/kernel/include/scheduler.h
@@ -0,0 +1,6 @@
+#ifndef SCHEDULER_H
+#define SCHEDULER_H
+
+void scheduler(void);
+
+#endif