:: commit a7a168a6828087a0a2fd537c3a8ce5d7cf8dd582

mintsuki <mintsuki@protonmail.com> — 2021-03-02 05:21

parents: 689e82dba7

fb: Abstract framebuffer API

diff --git a/stage23/drivers/vbe.c b/stage23/drivers/vbe.c
index 726cc49d..2cb420b5 100644
--- a/stage23/drivers/vbe.c
+++ b/stage23/drivers/vbe.c
@@ -168,7 +168,7 @@ static struct resolution fallback_resolutions[] = {
     { 640,  480, 32 }
 };
 
-bool init_vbe(struct vbe_framebuffer_info *ret,
+bool init_vbe(struct fb_info *ret,
               uint16_t target_width, uint16_t target_height, uint16_t target_bpp) {
     print("vbe: Initialising...\n");
 
diff --git a/stage23/drivers/vbe.h b/stage23/drivers/vbe.h
index b13d0060..a212e486 100644
--- a/stage23/drivers/vbe.h
+++ b/stage23/drivers/vbe.h
@@ -3,23 +3,9 @@
 
 #include <stdint.h>
 #include <stdbool.h>
+#include <lib/fb.h>
 
-struct vbe_framebuffer_info {
-    uint8_t  memory_model;
-    uint32_t framebuffer_addr;
-    uint16_t framebuffer_pitch;
-    uint16_t framebuffer_width;
-    uint16_t framebuffer_height;
-    uint16_t framebuffer_bpp;
-    uint8_t  red_mask_size;
-    uint8_t  red_mask_shift;
-    uint8_t  green_mask_size;
-    uint8_t  green_mask_shift;
-    uint8_t  blue_mask_size;
-    uint8_t  blue_mask_shift;
-};
-
-bool init_vbe(struct vbe_framebuffer_info *ret,
+bool init_vbe(struct fb_info *ret,
               uint16_t target_width, uint16_t target_height, uint16_t target_bpp);
 
 #endif
diff --git a/stage23/lib/fb.c b/stage23/lib/fb.c
new file mode 100644
index 00000000..23a424b0
--- /dev/null
+++ b/stage23/lib/fb.c
@@ -0,0 +1,9 @@
+#include <stdint.h>
+#include <stdbool.h>
+#include <lib/fb.h>
+#include <drivers/vbe.h>
+
+bool fb_init(struct fb_info *ret,
+             uint16_t target_width, uint16_t target_height, uint16_t target_bpp) {
+    return init_vbe(ret, target_width, target_height, target_bpp);
+}
diff --git a/stage23/lib/fb.h b/stage23/lib/fb.h
new file mode 100644
index 00000000..e00cc51c
--- /dev/null
+++ b/stage23/lib/fb.h
@@ -0,0 +1,24 @@
+#ifndef __LIB__FB_H__
+#define __LIB__FB_H__
+
+#include <stdint.h>
+
+struct fb_info {
+    uint8_t  memory_model;
+    uint32_t framebuffer_addr;
+    uint16_t framebuffer_pitch;
+    uint16_t framebuffer_width;
+    uint16_t framebuffer_height;
+    uint16_t framebuffer_bpp;
+    uint8_t  red_mask_size;
+    uint8_t  red_mask_shift;
+    uint8_t  green_mask_size;
+    uint8_t  green_mask_shift;
+    uint8_t  blue_mask_size;
+    uint8_t  blue_mask_shift;
+};
+
+bool fb_init(struct fb_info *ret,
+             uint16_t target_width, uint16_t target_height, uint16_t target_bpp);
+
+#endif
diff --git a/stage23/lib/gterm.c b/stage23/lib/gterm.c
index 6642c1dd..2ef88ce5 100644
--- a/stage23/lib/gterm.c
+++ b/stage23/lib/gterm.c
@@ -6,6 +6,7 @@
 #include <lib/config.h>
 #include <lib/print.h>
 #include <lib/uri.h>
+#include <lib/fb.h>
 #include <mm/mtrr.h>
 #include <mm/pmm.h>
 
@@ -14,7 +15,7 @@
 #define VGA_FONT_GLYPHS 256
 #define VGA_FONT_MAX    (VGA_FONT_HEIGHT * VGA_FONT_GLYPHS)
 
-static struct vbe_framebuffer_info fbinfo;
+static struct fb_info fbinfo;
 static uint32_t *gterm_framebuffer;
 static uint16_t  gterm_pitch;
 static uint16_t  gterm_width;
@@ -351,7 +352,7 @@ bool gterm_init(int *_rows, int *_cols, uint32_t *_colours, int _margin, int _ma
     // We force bpp to 32
     req_bpp = 32;
 
-    init_vbe(&fbinfo, req_width, req_height, req_bpp);
+    fb_init(&fbinfo, req_width, req_height, req_bpp);
 
     // Ensure this is xRGB8888, we only support that for the menu
     if (fbinfo.red_mask_size    != 8
diff --git a/stage23/protos/stivale.c b/stage23/protos/stivale.c
index 26baef6d..a596f0bc 100644
--- a/stage23/protos/stivale.c
+++ b/stage23/protos/stivale.c
@@ -12,7 +12,7 @@
 #include <lib/rand.h>
 #include <lib/real.h>
 #include <lib/uri.h>
-#include <drivers/vbe.h>
+#include <lib/fb.h>
 #include <lib/term.h>
 #include <sys/pic.h>
 #include <sys/cpu.h>
@@ -172,8 +172,8 @@ void stivale_load(char *config, char *cmdline) {
         if (resolution != NULL)
             parse_resolution(&req_width, &req_height, &req_bpp, resolution);
 
-        struct vbe_framebuffer_info fbinfo;
-        if (!init_vbe(&fbinfo, req_width, req_height, req_bpp))
+        struct fb_info fbinfo;
+        if (!fb_init(&fbinfo, req_width, req_height, req_bpp))
             panic("stivale: Unable to set video mode");
 
         stivale_struct.framebuffer_addr    = (uint64_t)fbinfo.framebuffer_addr;
diff --git a/stage23/protos/stivale2.c b/stage23/protos/stivale2.c
index 6f354ff1..a2129035 100644
--- a/stage23/protos/stivale2.c
+++ b/stage23/protos/stivale2.c
@@ -15,7 +15,7 @@
 #include <lib/uri.h>
 #include <sys/smp.h>
 #include <sys/cpu.h>
-#include <drivers/vbe.h>
+#include <lib/fb.h>
 #include <lib/term.h>
 #include <sys/pic.h>
 #include <sys/lapic.h>
@@ -256,8 +256,8 @@ void stivale2_load(char *config, char *cmdline, bool pxe) {
         if (resolution != NULL)
             parse_resolution(&req_width, &req_height, &req_bpp, resolution);
 
-        struct vbe_framebuffer_info fbinfo;
-        if (init_vbe(&fbinfo, req_width, req_height, req_bpp)) {
+        struct fb_info fbinfo;
+        if (fb_init(&fbinfo, req_width, req_height, req_bpp)) {
             struct stivale2_struct_tag_framebuffer *tag = ext_mem_alloc(sizeof(struct stivale2_struct_tag_framebuffer));
             tag->tag.identifier = STIVALE2_STRUCT_TAG_FRAMEBUFFER_ID;
 
tab: 248 wrap: offon