summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/include/io.h1
-rw-r--r--kernel/include/keyboard.h2
-rw-r--r--kernel/src/cpu/io.c5
-rw-r--r--kernel/src/cpu/tss.c5
-rw-r--r--kernel/src/devices/keyboard.c11
-rw-r--r--kernel/src/main.c2
-rw-r--r--kernel/src/sys/userspace_asm.S2
7 files changed, 25 insertions, 3 deletions
diff --git a/kernel/include/io.h b/kernel/include/io.h
index d47abb3..8e5ac0f 100644
--- a/kernel/include/io.h
+++ b/kernel/include/io.h
@@ -5,5 +5,6 @@
uint8_t inb(uint32_t port);
void outb(uint32_t port, uint8_t value);
+void io_wait(void);
#endif
diff --git a/kernel/include/keyboard.h b/kernel/include/keyboard.h
index e8dc774..8b4085a 100644
--- a/kernel/include/keyboard.h
+++ b/kernel/include/keyboard.h
@@ -4,8 +4,10 @@
#include <types.h>
#define KEYBOARD_DATA_PORT 0x60
+#define KEYBOARD_CMD_PORT 0x60
#define KEYBOARD_STATUS_PORT 0x64
void keyboard_handler(void);
+void init_keyboard(void);
#endif
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);
diff --git a/kernel/src/devices/keyboard.c b/kernel/src/devices/keyboard.c
index 0a2e364..73c052c 100644
--- a/kernel/src/devices/keyboard.c
+++ b/kernel/src/devices/keyboard.c
@@ -15,6 +15,17 @@ bool is_pressed[128];
#define BUFFER_SIZE 10000
stdbuff* keyboard_buffer;
+void init_keyboard()
+{
+// outb(KEYBOARD_CMD_PORT, 0xF3);
+// io_wait();
+// outb(KEYBOARD_DATA_PORT, 0x00);
+// io_wait();
+// while (!(inb(KEYBOARD_STATUS_PORT) & 1)) {}
+// if (inb(KEYBOARD_DATA_PORT) == 0xFA)
+// printf("[keyboard init]\n");
+}
+
void keyboard_handler()
{
if (keyboard_buffer == NULL) {
diff --git a/kernel/src/main.c b/kernel/src/main.c
index ae2e0ee..b568f8f 100644
--- a/kernel/src/main.c
+++ b/kernel/src/main.c
@@ -26,7 +26,9 @@ int kernel_main(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic)
init_paging();
init_heap();
read_mb2(multiboot_bootinfo, multiboot_magic);
+ clear_screen(main_fb);
// framebuffer is enabled from this point
+ init_keyboard();
init_timer(TICKS_PER_SECOND);
init_idt();
disc_init();
diff --git a/kernel/src/sys/userspace_asm.S b/kernel/src/sys/userspace_asm.S
index 02181bd..4431a84 100644
--- a/kernel/src/sys/userspace_asm.S
+++ b/kernel/src/sys/userspace_asm.S
@@ -23,7 +23,7 @@ jump_userspace:
wrmsr
mov $0xc0000081, %rcx
rdmsr
- mov $0x00100008, %edx
+ mov $0x00130008, %edx
wrmsr
movabs $begin_userspace, %rcx