summaryrefslogtreecommitdiff
path: root/kernel/src/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/cpu')
-rw-r--r--kernel/src/cpu/io.c5
-rw-r--r--kernel/src/cpu/tss.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/kernel/src/cpu/io.c b/kernel/src/cpu/io.c
index 1a68f08..a5adfd6 100644
--- a/kernel/src/cpu/io.c
+++ b/kernel/src/cpu/io.c
@@ -12,3 +12,8 @@ void outb(uint32_t port, uint8_t value)
{
__asm__ volatile ("outb %%al, %%dx;" : : "d"(port), "a"(value));
}
+
+void io_wait(void)
+{
+ outb(0x80, 0);
+}
diff --git a/kernel/src/cpu/tss.c b/kernel/src/cpu/tss.c
index 0dfa18e..d2c16d3 100644
--- a/kernel/src/cpu/tss.c
+++ b/kernel/src/cpu/tss.c
@@ -12,9 +12,10 @@ void load_tss()
void init_tss()
{
+ memset(&tss, 0, sizeof(tss_type));
tss.iopb = sizeof(tss_type);
- uint64_t stack = (uint64_t)kalloc(4096*4);
- stack = (uint64_t)kalloc(4096*4) + 8;
+ uint32_t stack_size = 4096*4;
+ uint64_t stack = (uint64_t)kalloc(stack_size) + stack_size - 8;
tss.rsp0_low = (uint32_t)stack;
tss.rsp0_high = (uint32_t)(stack >> 32);