diff options
author | Marvin Borner | 2021-05-20 22:18:35 +0200 |
---|---|---|
committer | Marvin Borner | 2021-05-20 22:19:20 +0200 |
commit | d8d17375291f89d37cad43df36c11d9c132e23be (patch) | |
tree | ed6ba70ac6bd6b4e50dde6e1a0b2d62b7881e721 /kernel/features | |
parent | 298aaf63f15350e6248d5a96e8c6a63b0ec93e0f (diff) |
Added BGA driver and generic FB wrapper
Diffstat (limited to 'kernel/features')
-rw-r--r-- | kernel/features/fb.c | 32 | ||||
-rw-r--r-- | kernel/features/io.c | 11 | ||||
-rw-r--r-- | kernel/features/mm.c | 4 |
3 files changed, 37 insertions, 10 deletions
diff --git a/kernel/features/fb.c b/kernel/features/fb.c new file mode 100644 index 0000000..08d99df --- /dev/null +++ b/kernel/features/fb.c @@ -0,0 +1,32 @@ +// MIT License, Copyright (c) 2021 Marvin Borner + +#include <def.h> +#include <drivers/bga.h> +#include <drivers/vbe.h> +#include <fb.h> +#include <multiboot.h> +#include <print.h> + +#define FB_SIZE (generic->height * generic->pitch) + +u32 fb_map_buffer(struct page_dir *dir, struct fb_generic *generic) +{ + struct memory_range r = + virtual_alloc(dir, memory_range_around((u32)generic->fb, FB_SIZE), MEMORY_USER); + return r.base; +} + +CLEAR void fb_protect(struct fb_generic *generic) +{ + physical_set_used(memory_range_around((u32)generic->fb, FB_SIZE)); +} + +CLEAR void fb_install(void) +{ + if (bga_available()) + bga_install(); + else if (multiboot_vbe()) + vbe_install(multiboot_vbe()); + else + panic("No framebuffer driver found!\n"); +} diff --git a/kernel/features/io.c b/kernel/features/io.c index 4bbc4e0..28388ae 100644 --- a/kernel/features/io.c +++ b/kernel/features/io.c @@ -3,12 +3,14 @@ #include <assert.h> #include <bus.h> #include <def.h> +#include <drivers/bga.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 <fb.h> #include <io.h> #include <list.h> #include <logger.h> @@ -232,17 +234,10 @@ CLEAR void io_install(void) } /** - * Framebuffer detection - */ - - u32 vbe = multiboot_vbe(); - if (vbe) - vbe_install(vbe); - - /** * Other devices */ + fb_install(); timer_install(); logger_install(); bus_install(); diff --git a/kernel/features/mm.c b/kernel/features/mm.c index 81645af..227ba0a 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 <drivers/cpu.h> #include <def.h> -#include <errno.h> +#include <drivers/cpu.h> #include <drivers/vbe.h> +#include <errno.h> #include <mem.h> #include <mm.h> #include <multiboot.h> |