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;
