From afeb7e4f00eff33e9e1cfcb766825e7c87f5f1d1 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sun, 21 Feb 2021 15:45:41 +0100 Subject: Activated SSE/FPU features for better performance --- kernel/drivers/fpu.c | 24 ------------------------ kernel/drivers/mouse.c | 4 ++++ kernel/features/proc.c | 4 ++++ kernel/inc/proc.h | 2 +- kernel/main.c | 1 + 5 files changed, 10 insertions(+), 25 deletions(-) delete mode 100644 kernel/drivers/fpu.c (limited to 'kernel') diff --git a/kernel/drivers/fpu.c b/kernel/drivers/fpu.c deleted file mode 100644 index e61e267..0000000 --- a/kernel/drivers/fpu.c +++ /dev/null @@ -1,24 +0,0 @@ -// MIT License, Copyright (c) 2020 Marvin Borner - -#include - -void set_fpu_cw(const u16 cw) -{ - __asm__ volatile("fldcw %0" ::"m"(cw)); -} - -void fpu_install(void) -{ - __asm__ volatile("clts"); - u32 t = 0; - __asm__ volatile("mov %%cr0, %0" : "=r"(t)); - t &= (u32) ~(1 << 2); - t |= (1 << 1); - __asm__ volatile("mov %0, %%cr0" ::"r"(t)); - - __asm__ volatile("mov %%cr4, %0" : "=r"(t)); - t |= 3 << 9; - __asm__ volatile("mov %0, %%cr4" ::"r"(t)); - - __asm__ volatile("fninit"); -} diff --git a/kernel/drivers/mouse.c b/kernel/drivers/mouse.c index 6f329aa..e2f7311 100644 --- a/kernel/drivers/mouse.c +++ b/kernel/drivers/mouse.c @@ -116,6 +116,10 @@ void mouse_install(void) mouse_serial_wait(1); outb(0x60, status); + // Use default settings + mouse_serial_write(0xF6); + mouse_serial_read(); + // Enable mousewheel mouse_serial_write(0xF2); mouse_serial_read(); diff --git a/kernel/features/proc.c b/kernel/features/proc.c index 0c8f75c..d5cc82c 100644 --- a/kernel/features/proc.c +++ b/kernel/features/proc.c @@ -68,6 +68,9 @@ void scheduler(struct regs *regs) regs->eflags = EFLAGS_ALWAYS | EFLAGS_INTERRUPTS; } + if (current == idle_proc) + quantum = 0; + /* printf("{%d}", ((struct proc *)current->data)->pid); */ } @@ -481,6 +484,7 @@ void proc_init(void) ((u32 *)_esp)[0] = argc; // First argument (argc) ((u32 *)_esp)[1] = (u32)argv; // Second argument (argv) + printf("Jumping to userspace!\n"); proc_jump_userspace(); while (1) { }; diff --git a/kernel/inc/proc.h b/kernel/inc/proc.h index a727210..cd74b40 100644 --- a/kernel/inc/proc.h +++ b/kernel/inc/proc.h @@ -9,7 +9,7 @@ #include #include -#define PROC_QUANTUM 42 // Milliseconds or something // TODO +#define PROC_QUANTUM 10 // Milliseconds or something // TODO #define EFLAGS_ALWAYS 0x2 // Always one #define EFLAGS_INTERRUPTS 0x200 // Enable interrupts diff --git a/kernel/main.c b/kernel/main.c index 5216401..dea92d7 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -27,6 +27,7 @@ void kernel_main(struct vid_info *vid_info) serial_print("\nKernel was compiled at " __TIME__ " on " __DATE__ "\n"); serial_print("Serial connected.\n"); + cpu_enable_features(); cpu_print(); // Install drivers -- cgit v1.2.3