aboutsummaryrefslogtreecommitdiff
path: root/kernel/drivers/fb.c
diff options
context:
space:
mode:
authorMarvin Borner2021-05-20 20:41:24 +0200
committerMarvin Borner2021-05-20 20:41:24 +0200
commit298aaf63f15350e6248d5a96e8c6a63b0ec93e0f (patch)
tree952331f841b4d02d0b7189da716648df5cdb4d8e /kernel/drivers/fb.c
parentb22346a9b830b642e684e13cf4946d8ef8d8e1ca (diff)
Major restructuring
Diffstat (limited to 'kernel/drivers/fb.c')
-rw-r--r--kernel/drivers/fb.c79
1 files changed, 0 insertions, 79 deletions
diff --git a/kernel/drivers/fb.c b/kernel/drivers/fb.c
deleted file mode 100644
index 7ef1088..0000000
--- a/kernel/drivers/fb.c
+++ /dev/null
@@ -1,79 +0,0 @@
-// MIT License, Copyright (c) 2021 Marvin Borner
-
-#include <assert.h>
-#include <cpu.h>
-#include <def.h>
-#include <errno.h>
-#include <fb.h>
-#include <io.h>
-#include <mem.h>
-#include <mm.h>
-#include <multiboot.h>
-#include <str.h>
-#include <sys.h>
-
-#define FB_SIZE (vbe->height * vbe->pitch)
-
-struct vbe_basic {
- u8 stuff1[16];
- u16 pitch;
- u16 width;
- u16 height;
- u8 stuff2[18];
- u8 *fb;
- u8 stuff3[212];
-};
-
-PROTECTED static struct vbe_basic *vbe = NULL;
-
-static u32 fb_map_buffer(struct page_dir *dir)
-{
- assert(vbe);
- struct memory_range r =
- virtual_alloc(dir, memory_range_around((u32)vbe->fb, FB_SIZE), MEMORY_USER);
- return r.base;
-}
-
-static u32 fb_owner = 0;
-static res fb_ioctl(u32 request, void *arg1, void *arg2, void *arg3)
-{
- UNUSED(arg3);
-
- switch (request) {
- case IOCTL_FB_GET: {
- if (!vbe)
- return -ENOENT;
-
- u32 size = MIN(sizeof(*vbe), (u32)arg2);
- if (!memory_writable_range(memory_range(arg1, size)))
- return -EFAULT;
-
- if (fb_owner != 0 && proc_from_pid(fb_owner))
- return -EBUSY;
- fb_owner = proc_current()->pid;
-
- u32 fb = fb_map_buffer(proc_current()->page_dir);
-
- stac();
- memcpy(arg1, vbe, size);
- ((struct vbe_basic *)arg1)->fb = (u8 *)fb;
- clac();
-
- return EOK;
- }
- default:
- return -EINVAL;
- }
-}
-
-CLEAR void fb_install(void)
-{
- vbe = (void *)multiboot_vbe();
-
- struct io_dev *dev = zalloc(sizeof(*dev));
- dev->control = fb_ioctl;
- io_add(IO_FRAMEBUFFER, dev);
-
- // Set framebuffer range used to prevent unwanted writing
- physical_set_used(memory_range_around((u32)vbe->fb, FB_SIZE));
-}