diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-09-05 23:54:12 +0200 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-09-07 17:46:10 +0200 |
| commit | 956bb743a3ba6939aaff2372fc45628cda6a9840 (patch) | |
| tree | 0d1fd304eb584c892e28e43bbc851cf66786d9da /kernel/src/cpu/tss.c | |
| parent | 59f86fe8dd237e50c7fea03b506125e3abff0157 (diff) | |
userspace finally working
Diffstat (limited to 'kernel/src/cpu/tss.c')
| -rw-r--r-- | kernel/src/cpu/tss.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/src/cpu/tss.c b/kernel/src/cpu/tss.c index c7f9dc2..843c114 100644 --- a/kernel/src/cpu/tss.c +++ b/kernel/src/cpu/tss.c @@ -1,15 +1,22 @@ #include <tss.h> +#include <heap.h> +#include <libk/stdio.h> tss_type tss; void load_tss() { - __asm__ volatile ("mov $0x28, %ax; ltr %ax;"); + __asm__ volatile ("push %rax; mov $0x28, %ax; ltr %ax; pop %rax;"); } void init_tss() { tss.iopb = sizeof(tss_type); + uint64_t stack = (uint64_t)kalloc(4096*4); + stack = (uint64_t)kalloc(4096*4) + 8; + tss.rsp0_low = (uint32_t)stack; + tss.rsp0_high = (uint32_t)(stack >> 32); load_tss(); + printf("rsp0 addr in tss: 0x%x\n", stack); } |
