aboutsummaryrefslogtreecommitdiff
path: root/kernel/features
diff options
context:
space:
mode:
authorMarvin Borner2021-05-20 22:18:35 +0200
committerMarvin Borner2021-05-20 22:19:20 +0200
commitd8d17375291f89d37cad43df36c11d9c132e23be (patch)
treeed6ba70ac6bd6b4e50dde6e1a0b2d62b7881e721 /kernel/features
parent298aaf63f15350e6248d5a96e8c6a63b0ec93e0f (diff)
Added BGA driver and generic FB wrapper
Diffstat (limited to 'kernel/features')
-rw-r--r--kernel/features/fb.c32
-rw-r--r--kernel/features/io.c11
-rw-r--r--kernel/features/mm.c4
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>