diff options
author | Marvin Borner | 2021-05-20 20:41:24 +0200 |
---|---|---|
committer | Marvin Borner | 2021-05-20 20:41:24 +0200 |
commit | 298aaf63f15350e6248d5a96e8c6a63b0ec93e0f (patch) | |
tree | 952331f841b4d02d0b7189da716648df5cdb4d8e | |
parent | b22346a9b830b642e684e13cf4946d8ef8d8e1ca (diff) |
Major restructuring
-rw-r--r-- | kernel/Makefile | 2 | ||||
-rw-r--r-- | kernel/drivers/acpi.c | 4 | ||||
-rw-r--r-- | kernel/drivers/cpu.c | 2 | ||||
-rw-r--r-- | kernel/drivers/gdt.c | 2 | ||||
-rw-r--r-- | kernel/drivers/ide.c | 8 | ||||
-rw-r--r-- | kernel/drivers/interrupts.c | 6 | ||||
-rw-r--r-- | kernel/drivers/mbr.c | 4 | ||||
-rw-r--r-- | kernel/drivers/pci.c | 4 | ||||
-rw-r--r-- | kernel/drivers/ps2/keyboard.c | 6 | ||||
-rw-r--r-- | kernel/drivers/ps2/mouse.c | 6 | ||||
-rw-r--r-- | kernel/drivers/ps2/ps2.c | 4 | ||||
-rw-r--r-- | kernel/drivers/rtc.c | 6 | ||||
-rw-r--r-- | kernel/drivers/rtl8139.c | 8 | ||||
-rw-r--r-- | kernel/drivers/serial.c | 4 | ||||
-rw-r--r-- | kernel/drivers/timer.c | 8 | ||||
-rw-r--r-- | kernel/drivers/vbe.c (renamed from kernel/drivers/fb.c) | 16 | ||||
-rw-r--r-- | kernel/drivers/vmware.c | 6 | ||||
-rw-r--r-- | kernel/features/bus.c | 2 | ||||
-rw-r--r-- | kernel/features/fs.c | 6 | ||||
-rw-r--r-- | kernel/features/io.c | 30 | ||||
-rw-r--r-- | kernel/features/load.c | 2 | ||||
-rw-r--r-- | kernel/features/logger.c | 4 | ||||
-rw-r--r-- | kernel/features/mm.c | 4 | ||||
-rw-r--r-- | kernel/features/net.c | 8 | ||||
-rw-r--r-- | kernel/features/proc.c | 6 | ||||
-rw-r--r-- | kernel/features/syscall.c | 6 | ||||
-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.h | 8 | ||||
-rw-r--r-- | kernel/inc/fs.h | 4 | ||||
-rw-r--r-- | kernel/inc/io.h | 2 | ||||
-rw-r--r-- | kernel/inc/mm.h | 2 | ||||
-rw-r--r-- | kernel/inc/proc.h | 2 | ||||
-rw-r--r-- | kernel/main.c | 14 | ||||
-rw-r--r-- | kernel/multiboot.c | 35 | ||||
-rw-r--r-- | libs/libc/crypto.c | 2 | ||||
-rw-r--r-- | libs/libc/mem.c | 54 | ||||
-rw-r--r-- | libs/libc/print.c | 4 | ||||
-rw-r--r-- | libs/libc/rand.c | 2 | ||||
-rw-r--r-- | libs/libc/str.c | 2 |
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) { |