diff options
Diffstat (limited to 'kernel/features/fb.c')
-rw-r--r-- | kernel/features/fb.c | 32 |
1 files changed, 32 insertions, 0 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"); +} |