aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2021-05-20 20:41:24 +0200
committerMarvin Borner2021-05-20 20:41:24 +0200
commit298aaf63f15350e6248d5a96e8c6a63b0ec93e0f (patch)
tree952331f841b4d02d0b7189da716648df5cdb4d8e
parentb22346a9b830b642e684e13cf4946d8ef8d8e1ca (diff)
Major restructuring
-rw-r--r--kernel/Makefile2
-rw-r--r--kernel/drivers/acpi.c4
-rw-r--r--kernel/drivers/cpu.c2
-rw-r--r--kernel/drivers/gdt.c2
-rw-r--r--kernel/drivers/ide.c8
-rw-r--r--kernel/drivers/interrupts.c6
-rw-r--r--kernel/drivers/mbr.c4
-rw-r--r--kernel/drivers/pci.c4
-rw-r--r--kernel/drivers/ps2/keyboard.c6
-rw-r--r--kernel/drivers/ps2/mouse.c6
-rw-r--r--kernel/drivers/ps2/ps2.c4
-rw-r--r--kernel/drivers/rtc.c6
-rw-r--r--kernel/drivers/rtl8139.c8
-rw-r--r--kernel/drivers/serial.c4
-rw-r--r--kernel/drivers/timer.c8
-rw-r--r--kernel/drivers/vbe.c (renamed from kernel/drivers/fb.c)16
-rw-r--r--kernel/drivers/vmware.c6
-rw-r--r--kernel/features/bus.c2
-rw-r--r--kernel/features/fs.c6
-rw-r--r--kernel/features/io.c30
-rw-r--r--kernel/features/load.c2
-rw-r--r--kernel/features/logger.c4
-rw-r--r--kernel/features/mm.c4
-rw-r--r--kernel/features/net.c8
-rw-r--r--kernel/features/proc.c6
-rw-r--r--kernel/features/syscall.c6
-rw-r--r--kernel/inc/drivers/acpi.h (renamed from kernel/inc/acpi.h)0
-rw-r--r--kernel/inc/drivers/cpu.h (renamed from kernel/inc/cpu.h)0
-rw-r--r--kernel/inc/drivers/gdt.h (renamed from kernel/inc/gdt.h)0
-rw-r--r--kernel/inc/drivers/ide.h (renamed from kernel/inc/ide.h)0
-rw-r--r--kernel/inc/drivers/interrupts.h (renamed from kernel/inc/interrupts.h)0
-rw-r--r--kernel/inc/drivers/mbr.h (renamed from kernel/inc/mbr.h)0
-rw-r--r--kernel/inc/drivers/pci.h (renamed from kernel/inc/pci.h)0
-rw-r--r--kernel/inc/drivers/ps2.h (renamed from kernel/inc/ps2.h)0
-rw-r--r--kernel/inc/drivers/rtc.h (renamed from kernel/inc/rtc.h)0
-rw-r--r--kernel/inc/drivers/rtl8139.h (renamed from kernel/inc/rtl8139.h)0
-rw-r--r--kernel/inc/drivers/serial.h (renamed from kernel/inc/serial.h)0
-rw-r--r--kernel/inc/drivers/timer.h (renamed from kernel/inc/timer.h)2
-rw-r--r--kernel/inc/drivers/vbe.h (renamed from kernel/inc/fb.h)6
-rw-r--r--kernel/inc/drivers/vmware.h (renamed from kernel/inc/vmware.h)0
-rw-r--r--kernel/inc/fpu.h8
-rw-r--r--kernel/inc/fs.h4
-rw-r--r--kernel/inc/io.h2
-rw-r--r--kernel/inc/mm.h2
-rw-r--r--kernel/inc/proc.h2
-rw-r--r--kernel/main.c14
-rw-r--r--kernel/multiboot.c35
-rw-r--r--libs/libc/crypto.c2
-rw-r--r--libs/libc/mem.c54
-rw-r--r--libs/libc/print.c4
-rw-r--r--libs/libc/rand.c2
-rw-r--r--libs/libc/str.c2
52 files changed, 134 insertions, 169 deletions
diff --git a/kernel/Makefile b/kernel/Makefile
index 14fc055..853f03f 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -12,7 +12,7 @@ COBJS = entry_asm.o \
drivers/rtc.o \
drivers/mbr.o \
drivers/ide.o \
- drivers/fb.o \
+ drivers/vbe.o \
drivers/timer.o \
drivers/vmware.o \
drivers/ps2/ps2.o \
diff --git a/kernel/drivers/acpi.c b/kernel/drivers/acpi.c
index b8dad22..6860a43 100644
--- a/kernel/drivers/acpi.c
+++ b/kernel/drivers/acpi.c
@@ -1,8 +1,8 @@
// MIT License, Copyright (c) 2020 Marvin Borner
-#include <acpi.h>
+#include <drivers/acpi.h>
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <mem.h>
#include <print.h>
diff --git a/kernel/drivers/cpu.c b/kernel/drivers/cpu.c
index 296e73a..8927d1d 100644
--- a/kernel/drivers/cpu.c
+++ b/kernel/drivers/cpu.c
@@ -2,7 +2,7 @@
// This file is a wrapper around some CPU asm calls
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <mem.h>
#include <print.h>
diff --git a/kernel/drivers/gdt.c b/kernel/drivers/gdt.c
index 0e8086f..aa76f2f 100644
--- a/kernel/drivers/gdt.c
+++ b/kernel/drivers/gdt.c
@@ -2,7 +2,7 @@
#include <assert.h>
#include <def.h>
-#include <gdt.h>
+#include <drivers/gdt.h>
#include <mem.h>
#define GDT_MAX_LIMIT 0xffff
diff --git a/kernel/drivers/ide.c b/kernel/drivers/ide.c
index ea02d9d..9e09860 100644
--- a/kernel/drivers/ide.c
+++ b/kernel/drivers/ide.c
@@ -1,13 +1,13 @@
// MIT License, Copyright (c) 2020 Marvin Borner
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <fs.h>
-#include <ide.h>
-#include <mbr.h>
+#include <drivers/ide.h>
+#include <drivers/mbr.h>
#include <mem.h>
-#include <pci.h>
+#include <drivers/pci.h>
#include <print.h>
#include <str.h>
diff --git a/kernel/drivers/interrupts.c b/kernel/drivers/interrupts.c
index 5b57e56..e9ab0ce 100644
--- a/kernel/drivers/interrupts.c
+++ b/kernel/drivers/interrupts.c
@@ -2,14 +2,14 @@
// TODO: Remove some magic numbers
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <mem.h>
#include <mm.h>
#include <print.h>
#include <proc.h>
-#include <serial.h>
+#include <drivers/serial.h>
/**
* IDT
diff --git a/kernel/drivers/mbr.c b/kernel/drivers/mbr.c
index c85061d..c9eba15 100644
--- a/kernel/drivers/mbr.c
+++ b/kernel/drivers/mbr.c
@@ -2,8 +2,8 @@
#include <def.h>
#include <fs.h>
-#include <ide.h>
-#include <mbr.h>
+#include <drivers/ide.h>
+#include <drivers/mbr.h>
#include <mem.h>
#include <print.h>
#include <str.h>
diff --git a/kernel/drivers/pci.c b/kernel/drivers/pci.c
index 829f5b9..55806c2 100644
--- a/kernel/drivers/pci.c
+++ b/kernel/drivers/pci.c
@@ -2,10 +2,10 @@
// Uses parts of the ToAruOS Project, released under the terms of the NCSA
// Copyright (C) 2011-2018 K. Lange
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <mem.h>
-#include <pci.h>
+#include <drivers/pci.h>
CLEAR void pci_write_field(u32 device, int field, u32 value)
{
diff --git a/kernel/drivers/ps2/keyboard.c b/kernel/drivers/ps2/keyboard.c
index be057d7..bddb280 100644
--- a/kernel/drivers/ps2/keyboard.c
+++ b/kernel/drivers/ps2/keyboard.c
@@ -1,14 +1,14 @@
// MIT License, Copyright (c) 2020 Marvin Borner
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <errno.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <io.h>
#include <mem.h>
#include <print.h>
#include <proc.h>
-#include <ps2.h>
+#include <drivers/ps2.h>
#include <stack.h>
#include <str.h>
#include <sys.h>
diff --git a/kernel/drivers/ps2/mouse.c b/kernel/drivers/ps2/mouse.c
index abca0a8..2942e34 100644
--- a/kernel/drivers/ps2/mouse.c
+++ b/kernel/drivers/ps2/mouse.c
@@ -1,14 +1,14 @@
// MIT License, Copyright (c) 2020 Marvin Borner
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <errno.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <io.h>
#include <mem.h>
#include <print.h>
#include <proc.h>
-#include <ps2.h>
+#include <drivers/ps2.h>
#include <stack.h>
#include <str.h>
#include <sys.h>
diff --git a/kernel/drivers/ps2/ps2.c b/kernel/drivers/ps2/ps2.c
index 076a0bf..f8d849b 100644
--- a/kernel/drivers/ps2/ps2.c
+++ b/kernel/drivers/ps2/ps2.c
@@ -1,10 +1,10 @@
// MIT License, Copyright (c) 2021 Marvin Borner
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <print.h>
-#include <ps2.h>
+#include <drivers/ps2.h>
#define PS2_TIMEOUT 100
diff --git a/kernel/drivers/rtc.c b/kernel/drivers/rtc.c
index 2da61da..63d9461 100644
--- a/kernel/drivers/rtc.c
+++ b/kernel/drivers/rtc.c
@@ -1,12 +1,12 @@
// MIT License, Copyright (c) 2021 Marvin Borner
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <fs.h>
#include <mem.h>
-#include <rtc.h>
+#include <drivers/rtc.h>
#include <str.h>
-#include <timer.h>
+#include <drivers/timer.h>
static u8 rtc_busy(void)
{
diff --git a/kernel/drivers/rtl8139.c b/kernel/drivers/rtl8139.c
index 753bd6a..fdbc0c8 100644
--- a/kernel/drivers/rtl8139.c
+++ b/kernel/drivers/rtl8139.c
@@ -2,14 +2,14 @@
// Uses parts of the ToAruOS Project, released under the terms of the NCSA
// Copyright (C) 2011-2018 K. Lange
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <mem.h>
#include <net.h>
-#include <pci.h>
+#include <drivers/pci.h>
#include <print.h>
-#include <rtl8139.h>
+#include <drivers/rtl8139.h>
static int rtl_irq = 0;
static u8 mac[6] = { 0 };
diff --git a/kernel/drivers/serial.c b/kernel/drivers/serial.c
index 06403f6..95ac02d 100644
--- a/kernel/drivers/serial.c
+++ b/kernel/drivers/serial.c
@@ -1,9 +1,9 @@
// MIT License, Copyright (c) 2020 Marvin Borner
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
-#include <serial.h>
+#include <drivers/serial.h>
#include <str.h>
#define PORT 0x3f8
diff --git a/kernel/drivers/timer.c b/kernel/drivers/timer.c
index 176b499..c586088 100644
--- a/kernel/drivers/timer.c
+++ b/kernel/drivers/timer.c
@@ -1,13 +1,13 @@
// MIT License, Copyright (c) 2020 Marvin Borner
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <io.h>
#include <mem.h>
#include <proc.h>
-#include <rtc.h>
-#include <timer.h>
+#include <drivers/rtc.h>
+#include <drivers/timer.h>
static u32 timer_ticks = 0;
PROTECTED static u8 call_scheduler = 0;
diff --git a/kernel/drivers/fb.c b/kernel/drivers/vbe.c
index 7ef1088..b384936 100644
--- a/kernel/drivers/fb.c
+++ b/kernel/drivers/vbe.c
@@ -1,10 +1,10 @@
// MIT License, Copyright (c) 2021 Marvin Borner
#include <assert.h>
-#include <cpu.h>
#include <def.h>
+#include <drivers/cpu.h>
+#include <drivers/vbe.h>
#include <errno.h>
-#include <fb.h>
#include <io.h>
#include <mem.h>
#include <mm.h>
@@ -26,7 +26,7 @@ struct vbe_basic {
PROTECTED static struct vbe_basic *vbe = NULL;
-static u32 fb_map_buffer(struct page_dir *dir)
+static u32 vbe_map_buffer(struct page_dir *dir)
{
assert(vbe);
struct memory_range r =
@@ -35,7 +35,7 @@ static u32 fb_map_buffer(struct page_dir *dir)
}
static u32 fb_owner = 0;
-static res fb_ioctl(u32 request, void *arg1, void *arg2, void *arg3)
+static res vbe_control(u32 request, void *arg1, void *arg2, void *arg3)
{
UNUSED(arg3);
@@ -52,7 +52,7 @@ static res fb_ioctl(u32 request, void *arg1, void *arg2, void *arg3)
return -EBUSY;
fb_owner = proc_current()->pid;
- u32 fb = fb_map_buffer(proc_current()->page_dir);
+ u32 fb = vbe_map_buffer(proc_current()->page_dir);
stac();
memcpy(arg1, vbe, size);
@@ -66,12 +66,12 @@ static res fb_ioctl(u32 request, void *arg1, void *arg2, void *arg3)
}
}
-CLEAR void fb_install(void)
+CLEAR void vbe_install(u32 data)
{
- vbe = (void *)multiboot_vbe();
+ vbe = (void *)data;
struct io_dev *dev = zalloc(sizeof(*dev));
- dev->control = fb_ioctl;
+ dev->control = vbe_control;
io_add(IO_FRAMEBUFFER, dev);
// Set framebuffer range used to prevent unwanted writing
diff --git a/kernel/drivers/vmware.c b/kernel/drivers/vmware.c
index c82042f..6f95d02 100644
--- a/kernel/drivers/vmware.c
+++ b/kernel/drivers/vmware.c
@@ -2,13 +2,13 @@
// VMWare extensions/backdoors for better VM integration
#include <def.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <io.h>
#include <mem.h>
#include <print.h>
-#include <ps2.h>
+#include <drivers/ps2.h>
#include <stack.h>
-#include <vmware.h>
+#include <drivers/vmware.h>
#define VMWARE_CMD_VERSION 0x0a
diff --git a/kernel/features/bus.c b/kernel/features/bus.c
index 4a09fc0..d58cee3 100644
--- a/kernel/features/bus.c
+++ b/kernel/features/bus.c
@@ -2,7 +2,7 @@
#include <assert.h>
#include <bus.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <crypto.h>
#include <def.h>
#include <errno.h>
diff --git a/kernel/features/fs.c b/kernel/features/fs.c
index 7d62c61..c5ebfcd 100644
--- a/kernel/features/fs.c
+++ b/kernel/features/fs.c
@@ -1,13 +1,13 @@
// MIT License, Copyright (c) 2020 Marvin Borner
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <crypto.h>
#include <def.h>
#include <errno.h>
#include <fs.h>
-#include <ide.h>
-#include <mbr.h>
+#include <drivers/ide.h>
+#include <drivers/mbr.h>
#include <mem.h>
#include <mm.h>
#include <print.h>
diff --git a/kernel/features/io.c b/kernel/features/io.c
index bc7977a..4bbc4e0 100644
--- a/kernel/features/io.c
+++ b/kernel/features/io.c
@@ -2,22 +2,23 @@
#include <assert.h>
#include <bus.h>
-#include <cpu.h>
#include <def.h>
-#include <fb.h>
-#include <interrupts.h>
+#include <drivers/cpu.h>
+#include <drivers/interrupts.h>
+#include <drivers/ps2.h>
+#include <drivers/timer.h>
+#include <drivers/vbe.h>
+#include <drivers/vmware.h>
#include <io.h>
#include <list.h>
#include <logger.h>
#include <mem.h>
#include <mm.h>
+#include <multiboot.h>
#include <proc.h>
-#include <ps2.h>
#include <rand.h>
#include <str.h>
#include <syscall.h>
-#include <timer.h>
-#include <vmware.h>
struct io_listener {
u32 group;
@@ -211,6 +212,10 @@ CLEAR void io_install(void)
for (u32 i = 0; i < IO_MAX; i++)
io_listeners[i] = list_new();
+ /**
+ * Keyboard & mouse detection
+ */
+
ps2_detect();
u8 ps2_keyboard = ps2_keyboard_detect();
@@ -226,8 +231,19 @@ CLEAR void io_install(void)
ps2_mouse_install(ps2_mouse);
}
+ /**
+ * Framebuffer detection
+ */
+
+ u32 vbe = multiboot_vbe();
+ if (vbe)
+ vbe_install(vbe);
+
+ /**
+ * Other devices
+ */
+
timer_install();
logger_install();
- fb_install();
bus_install();
}
diff --git a/kernel/features/load.c b/kernel/features/load.c
index 645c4d2..1059240 100644
--- a/kernel/features/load.c
+++ b/kernel/features/load.c
@@ -1,6 +1,6 @@
// MIT License, Copyright (c) 2020 Marvin Borner
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <errno.h>
#include <fs.h>
#include <load.h>
diff --git a/kernel/features/logger.c b/kernel/features/logger.c
index 7db9a82..23efa93 100644
--- a/kernel/features/logger.c
+++ b/kernel/features/logger.c
@@ -1,13 +1,13 @@
// MIT License, Copyright (c) 2021 Marvin Borner
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <errno.h>
#include <io.h>
#include <logger.h>
#include <mem.h>
#include <print.h>
-#include <serial.h>
+#include <drivers/serial.h>
static res logger_write(const void *buf, u32 offset, u32 count)
{
diff --git a/kernel/features/mm.c b/kernel/features/mm.c
index 0f80fda..81645af 100644
--- a/kernel/features/mm.c
+++ b/kernel/features/mm.c
@@ -2,10 +2,10 @@
// MIT License, Copyright (c) 2021 Marvin Borner
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <errno.h>
-#include <fb.h>
+#include <drivers/vbe.h>
#include <mem.h>
#include <mm.h>
#include <multiboot.h>
diff --git a/kernel/features/net.c b/kernel/features/net.c
index 530837b..9e40ea6 100644
--- a/kernel/features/net.c
+++ b/kernel/features/net.c
@@ -1,18 +1,18 @@
// MIT License, Copyright (c) 2020 Marvin Borner
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <def.h>
#include <list.h>
#include <mem.h>
#include <net.h>
-#include <pci.h>
+#include <drivers/pci.h>
#include <print.h>
#include <rand.h>
-#include <rtl8139.h>
+#include <drivers/rtl8139.h>
#include <socket.h>
#include <str.h>
-#include <timer.h>
+#include <drivers/timer.h>
static u32 current_ip_addr = 0;
static u32 gateway_addr = 0;
diff --git a/kernel/features/proc.c b/kernel/features/proc.c
index 4dd90c8..019b0ed 100644
--- a/kernel/features/proc.c
+++ b/kernel/features/proc.c
@@ -1,10 +1,10 @@
// MIT License, Copyright (c) 2020 Marvin Borner
#include <assert.h>
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <errno.h>
#include <fs.h>
-#include <gdt.h>
+#include <drivers/gdt.h>
#include <load.h>
#include <mem.h>
#include <mm.h>
@@ -12,7 +12,7 @@
#include <proc.h>
#include <stack.h>
#include <str.h>
-#include <timer.h>
+#include <drivers/timer.h>
#define PROC(node) ((struct proc *)node->data)
diff --git a/kernel/features/syscall.c b/kernel/features/syscall.c
index b66cd2e..b376a13 100644
--- a/kernel/features/syscall.c
+++ b/kernel/features/syscall.c
@@ -1,9 +1,9 @@
// MIT License, Copyright (c) 2020 Marvin Borner
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <errno.h>
#include <fs.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <io.h>
#include <load.h>
#include <mem.h>
@@ -14,7 +14,7 @@
#include <str.h>
#include <sys.h>
#include <syscall.h>
-#include <timer.h>
+#include <drivers/timer.h>
static void syscall_handler(struct regs *r)
{
diff --git a/kernel/inc/acpi.h b/kernel/inc/drivers/acpi.h
index 29dcd32..29dcd32 100644
--- a/kernel/inc/acpi.h
+++ b/kernel/inc/drivers/acpi.h
diff --git a/kernel/inc/cpu.h b/kernel/inc/drivers/cpu.h
index 7ac6074..7ac6074 100644
--- a/kernel/inc/cpu.h
+++ b/kernel/inc/drivers/cpu.h
diff --git a/kernel/inc/gdt.h b/kernel/inc/drivers/gdt.h
index 7b9c65a..7b9c65a 100644
--- a/kernel/inc/gdt.h
+++ b/kernel/inc/drivers/gdt.h
diff --git a/kernel/inc/ide.h b/kernel/inc/drivers/ide.h
index dbe0652..dbe0652 100644
--- a/kernel/inc/ide.h
+++ b/kernel/inc/drivers/ide.h
diff --git a/kernel/inc/interrupts.h b/kernel/inc/drivers/interrupts.h
index 7c0c1e7..7c0c1e7 100644
--- a/kernel/inc/interrupts.h
+++ b/kernel/inc/drivers/interrupts.h
diff --git a/kernel/inc/mbr.h b/kernel/inc/drivers/mbr.h
index 07f6da0..07f6da0 100644
--- a/kernel/inc/mbr.h
+++ b/kernel/inc/drivers/mbr.h
diff --git a/kernel/inc/pci.h b/kernel/inc/drivers/pci.h
index 9429f29..9429f29 100644
--- a/kernel/inc/pci.h
+++ b/kernel/inc/drivers/pci.h
diff --git a/kernel/inc/ps2.h b/kernel/inc/drivers/ps2.h
index 5db8b57..5db8b57 100644
--- a/kernel/inc/ps2.h
+++ b/kernel/inc/drivers/ps2.h
diff --git a/kernel/inc/rtc.h b/kernel/inc/drivers/rtc.h
index 44a9c9e..44a9c9e 100644
--- a/kernel/inc/rtc.h
+++ b/kernel/inc/drivers/rtc.h
diff --git a/kernel/inc/rtl8139.h b/kernel/inc/drivers/rtl8139.h
index 0d748af..0d748af 100644
--- a/kernel/inc/rtl8139.h
+++ b/kernel/inc/drivers/rtl8139.h
diff --git a/kernel/inc/serial.h b/kernel/inc/drivers/serial.h
index 72c9dc1..72c9dc1 100644
--- a/kernel/inc/serial.h
+++ b/kernel/inc/drivers/serial.h
diff --git a/kernel/inc/timer.h b/kernel/inc/drivers/timer.h
index 0712e37..9ff23f8 100644
--- a/kernel/inc/timer.h
+++ b/kernel/inc/drivers/timer.h
@@ -4,7 +4,7 @@
#define TIMER_H
#include <def.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
u32 timer_get(void);
void timer_wait(u32 ticks);
diff --git a/kernel/inc/fb.h b/kernel/inc/drivers/vbe.h
index b3486e0..5b2275a 100644
--- a/kernel/inc/fb.h
+++ b/kernel/inc/drivers/vbe.h
@@ -1,10 +1,10 @@
// MIT License, Copyright (c) 2021 Marvin Borner
-#ifndef FB_H
-#define FB_H
+#ifndef VBE_H
+#define VBE_H
#include <mm.h>
-void fb_install(void) NONNULL;
+void vbe_install(u32 data) NONNULL;
#endif
diff --git a/kernel/inc/vmware.h b/kernel/inc/drivers/vmware.h
index 243c624..243c624 100644
--- a/kernel/inc/vmware.h
+++ b/kernel/inc/drivers/vmware.h
diff --git a/kernel/inc/fpu.h b/kernel/inc/fpu.h
deleted file mode 100644
index d3ec8d9..0000000
--- a/kernel/inc/fpu.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// MIT License, Copyright (c) 2020 Marvin Borner
-
-#ifndef FPU_H
-#define FPU_H
-
-void fpu_install(void);
-
-#endif
diff --git a/kernel/inc/fs.h b/kernel/inc/fs.h
index a1cb696..1ea4b21 100644
--- a/kernel/inc/fs.h
+++ b/kernel/inc/fs.h
@@ -21,8 +21,6 @@ struct vfs_dev {
void *data;
res (*read)(void *buf, u32 offset, u32 count, struct vfs_dev *dev) NONNULL;
res (*write)(const void *buf, u32 offset, u32 count, struct vfs_dev *dev) NONNULL;
- res (*ioctl)(u32 request, void *arg1, void *arg2, void *arg3, struct vfs_dev *dev)
- ATTR((nonnull(5)));
};
/**
@@ -40,8 +38,6 @@ struct vfs {
struct vfs_dev *dev) NONNULL;
res (*write)(const char *path, const void *buf, u32 offset, u32 count,
struct vfs_dev *dev) NONNULL;
- res (*ioctl)(const char *path, u32 request, void *arg1, void *arg2, void *arg3,
- struct vfs_dev *dev) ATTR((nonnull(1, 6)));
res (*stat)(const char *path, struct stat *buf, struct vfs_dev *dev) NONNULL;
res (*block)(const char *path, u32 func_ptr, struct vfs_dev *dev) NONNULL;
res (*perm)(const char *path, enum vfs_perm perm, struct vfs_dev *dev) NONNULL;
diff --git a/kernel/inc/io.h b/kernel/inc/io.h
index b3e8b9b..275fcae 100644
--- a/kernel/inc/io.h
+++ b/kernel/inc/io.h
@@ -4,7 +4,7 @@
#define IO_H
#include <def.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <proc.h>
#include <sys.h>
diff --git a/kernel/inc/mm.h b/kernel/inc/mm.h
index a8116e6..8f6f06a 100644
--- a/kernel/inc/mm.h
+++ b/kernel/inc/mm.h
@@ -5,7 +5,7 @@
#include <def.h>
#include <errno.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
struct memory_range {
u32 base;
diff --git a/kernel/inc/proc.h b/kernel/inc/proc.h
index 582ca22..1144782 100644
--- a/kernel/inc/proc.h
+++ b/kernel/inc/proc.h
@@ -4,7 +4,7 @@
#define PROC_H
#include <def.h>
-#include <interrupts.h>
+#include <drivers/interrupts.h>
#include <list.h>
#include <stack.h>
#include <sys.h>
diff --git a/kernel/main.c b/kernel/main.c
index 93bfc29..76d8412 100644
--- a/kernel/main.c
+++ b/kernel/main.c
@@ -1,20 +1,20 @@
// MIT License, Copyright (c) 2020 Marvin Borner
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <fs.h>
-#include <gdt.h>
-#include <ide.h>
-#include <interrupts.h>
+#include <drivers/gdt.h>
+#include <drivers/ide.h>
+#include <drivers/interrupts.h>
#include <io.h>
#include <load.h>
#include <mem.h>
#include <mm.h>
#include <multiboot.h>
#include <net.h>
-#include <pci.h>
+#include <drivers/pci.h>
#include <rand.h>
-#include <rtc.h>
-#include <serial.h>
+#include <drivers/rtc.h>
+#include <drivers/serial.h>
#include <syscall.h>
PROTECTED extern u32 __stack_chk_guard;
diff --git a/kernel/multiboot.c b/kernel/multiboot.c
index 4c3e3d0..02a05cf 100644
--- a/kernel/multiboot.c
+++ b/kernel/multiboot.c
@@ -2,12 +2,13 @@
#include <assert.h>
#include <def.h>
+#include <drivers/serial.h>
#include <mem.h>
#include <mm.h>
#include <multiboot.h>
-#include <serial.h>
PROTECTED static struct multiboot_info *info = NULL;
+PROTECTED static u8 vbe_available = 0;
PROTECTED static char vbe[256] = { 0 };
CLEAR static void multiboot_parse_cmdline(const char *line)
@@ -22,25 +23,11 @@ CLEAR static void multiboot_parse_cmdline(const char *line)
start += 3;
}
}
-
- assert(info->flags & MULTIBOOT_INFO_VBE_INFO);
- memcpy(vbe, (void *)info->vbe_mode_info, sizeof(vbe));
-}
-
-CLEAR void multiboot_init(u32 magic, u32 addr)
-{
- assert(magic == MULTIBOOT_MAGIC);
- info = (void *)addr;
-
- if (info->flags & MULTIBOOT_INFO_CMDLINE)
- multiboot_parse_cmdline((const char *)info->cmdline);
-
- serial_print("Kernel was compiled at " __TIME__ " on " __DATE__ "\n");
}
CLEAR u32 multiboot_vbe(void)
{
- return (u32)vbe;
+ return vbe_available ? (u32)vbe : 0;
}
CLEAR void multiboot_mmap(void)
@@ -69,3 +56,19 @@ CLEAR void multiboot_mmap(void)
physical_set_total(total);
}
+
+CLEAR void multiboot_init(u32 magic, u32 addr)
+{
+ assert(magic == MULTIBOOT_MAGIC);
+ info = (void *)addr;
+
+ if (info->flags & MULTIBOOT_INFO_CMDLINE)
+ multiboot_parse_cmdline((const char *)info->cmdline);
+
+ if (info->flags & MULTIBOOT_INFO_VBE_INFO) {
+ memcpy(vbe, (void *)info->vbe_mode_info, sizeof(vbe));
+ vbe_available = 1;
+ }
+
+ serial_print("Kernel was compiled at " __TIME__ " on " __DATE__ "\n");
+}
diff --git a/libs/libc/crypto.c b/libs/libc/crypto.c
index c2d51ba..7681e80 100644
--- a/libs/libc/crypto.c
+++ b/libs/libc/crypto.c
@@ -167,7 +167,7 @@ u32 crc32(u32 crc, const void *buf, u32 size)
#ifdef KERNEL
-#include <cpu.h>
+#include <drivers/cpu.h>
u32 crc32_user(u32 crc, const void *buf, u32 size)
{
stac();
diff --git a/libs/libc/mem.c b/libs/libc/mem.c
index babec3a..080c88d 100644
--- a/libs/libc/mem.c
+++ b/libs/libc/mem.c
@@ -7,38 +7,6 @@
void *memcpy(void *dest, const void *src, u32 n)
{
-#ifdef USER
- // Inspired by Jeko at osdev
- u8 *dest_byte = dest;
- const u8 *src_byte = src;
- for (u32 i = 0; i < n / 16; i++) {
- __asm__ volatile("movups (%0), %%xmm0\n"
- "movntdq %%xmm0, (%1)\n" ::"r"(src_byte),
- "r"(dest_byte)
- : "memory");
-
- src_byte += 16;
- dest_byte += 16;
- }
-
- if (n & 7) {
- n = n & 7;
-
- int d0, d1, d2;
- __asm__ volatile("rep ; movsl\n\t"
- "testb $2,%b4\n\t"
- "je 1f\n\t"
- "movsw\n"
- "1:\ttestb $1,%b4\n\t"
- "je 2f\n\t"
- "movsb\n"
- "2:"
- : "=&c"(d0), "=&D"(d1), "=&S"(d2)
- : "0"(n / 4), "q"(n), "1"((long)dest_byte), "2"((long)src_byte)
- : "memory");
- }
- return dest_byte;
-#else
// Inspired by jgraef at osdev
u32 num_dwords = n / 4;
u32 num_bytes = n % 4;
@@ -47,25 +15,20 @@ void *memcpy(void *dest, const void *src, u32 n)
u8 *dest8 = ((u8 *)dest) + num_dwords * 4;
const u8 *src8 = ((const u8 *)src) + num_dwords * 4;
- // TODO: What's faster?
__asm__ volatile("rep movsl\n"
: "=S"(src32), "=D"(dest32), "=c"(num_dwords)
: "S"(src32), "D"(dest32), "c"(num_dwords)
: "memory");
- /* for (u32 i = 0; i < num_dwords; i++) { */
- /* dest32[i] = src32[i]; */
- /* } */
-
- for (u32 i = 0; i < num_bytes; i++) {
+ for (u32 i = 0; i < num_bytes; i++)
dest8[i] = src8[i];
- }
+
return dest;
-#endif
}
void *memset(void *dest, u32 val, u32 n)
{
+ // Inspired by jgraef at osdev
u32 uval = val;
u32 num_dwords = n / 4;
u32 num_bytes = n % 4;
@@ -74,19 +37,14 @@ void *memset(void *dest, u32 val, u32 n)
u8 val8 = (u8)val;
u32 val32 = uval | (uval << 8) | (uval << 16) | (uval << 24);
- // TODO: What's faster?
__asm__ volatile("rep stosl\n"
: "=D"(dest32), "=c"(num_dwords)
: "D"(dest32), "c"(num_dwords), "a"(val32)
: "memory");
- /* for (u32 i = 0; i < num_dwords; i++) { */
- /* dest32[i] = val32; */
- /* } */
-
- for (u32 i = 0; i < num_bytes; i++) {
+ for (u32 i = 0; i < num_bytes; i++)
dest8[i] = val8;
- }
+
return dest;
}
@@ -122,7 +80,7 @@ u8 mememp(const u8 *buf, u32 n)
#ifdef KERNEL
-#include <cpu.h>
+#include <drivers/cpu.h>
void *memcpy_user(void *dest, const void *src, u32 n)
{
diff --git a/libs/libc/print.c b/libs/libc/print.c
index 463fef6..46483cd 100644
--- a/libs/libc/print.c
+++ b/libs/libc/print.c
@@ -187,10 +187,10 @@ int print(const char *str)
// The kernel prints everything into the serial console
-#include <cpu.h>
+#include <drivers/cpu.h>
#include <mm.h>
#include <proc.h>
-#include <serial.h>
+#include <drivers/serial.h>
static void print_kernel(const char *str)
{
diff --git a/libs/libc/rand.c b/libs/libc/rand.c
index 268a21f..ae715b0 100644
--- a/libs/libc/rand.c
+++ b/libs/libc/rand.c
@@ -5,7 +5,7 @@
#include <rand.h>
#ifdef KERNEL
-#include <cpu.h>
+#include <drivers/cpu.h>
#endif
static u32 g_seed = 1;
diff --git a/libs/libc/str.c b/libs/libc/str.c
index 9a30e92..9e1bb2f 100644
--- a/libs/libc/str.c
+++ b/libs/libc/str.c
@@ -231,7 +231,7 @@ const char *strerror(u32 error)
#ifdef KERNEL
-#include <cpu.h>
+#include <drivers/cpu.h>
u32 strlen_user(const char *str)
{