]> xenbits.xensource.com Git - people/andrewcoop/seabios.git/commitdiff
cbvga: factor out cbvga_setup_modes()
authorGerd Hoffmann <kraxel@redhat.com>
Wed, 30 May 2018 20:50:42 +0000 (22:50 +0200)
committerGerd Hoffmann <kraxel@redhat.com>
Mon, 2 Jul 2018 14:34:21 +0000 (16:34 +0200)
Factor out generic data structure setup code from cbvga_setup().

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
(cherry picked from commit 4d70b24b86012e382cf551ce72c2dd6c92a6d1fa)

vgasrc/cbvga.c
vgasrc/vgautil.h

index f85989a232df187f654b2964f41c1b45b34a3863..9ae97d5f5106d5163a4017e68ed063ec6cc3fa5f 100644 (file)
@@ -232,10 +232,40 @@ struct cb_framebuffer {
     u8 reserved_mask_size;
 };
 
+void
+cbvga_setup_modes(u64 addr, u8 bpp, u32 xlines, u32 ylines, u32 linelength)
+{
+    int i;
+
+    SET_VGA(CBmode, 0x140);
+    SET_VGA(VBE_framebuffer, addr);
+    SET_VGA(VBE_total_memory, linelength * ylines);
+    SET_VGA(CBlinelength, linelength);
+    SET_VGA(CBmodeinfo.memmodel, MM_DIRECT);
+    SET_VGA(CBmodeinfo.width, xlines);
+    SET_VGA(CBmodeinfo.height, ylines);
+    SET_VGA(CBmodeinfo.depth, bpp);
+    SET_VGA(CBmodeinfo.cwidth, 8);
+    SET_VGA(CBmodeinfo.cheight, 16);
+    memcpy_far(get_global_seg(), &CBemulinfo
+               , get_global_seg(), &CBmodeinfo, sizeof(CBemulinfo));
+
+    // Validate modes
+    for (i = 0; i < ARRAY_SIZE(cbvesa_modes); i++) {
+        struct cbvga_mode_s *cbmode_g = &cbvesa_modes[i];
+        /* Skip VBE modes that doesn't fit into coreboot's framebuffer */
+        if ((GET_GLOBAL(cbmode_g->info.height) > ylines)
+            || (GET_GLOBAL(cbmode_g->info.width) > xlines)
+            || (GET_GLOBAL(cbmode_g->info.depth) != bpp)) {
+            dprintf(3, "Removing mode %x\n", GET_GLOBAL(cbmode_g->mode));
+            SET_VGA(cbmode_g->mode, 0xffff);
+        }
+    }
+}
+
 int
 cbvga_setup(void)
 {
-    int i;
     dprintf(1, "coreboot vga init\n");
 
     if (GET_GLOBAL(HaveRunInit))
@@ -277,29 +307,6 @@ cbvga_setup(void)
         return -1;
     }
 
-    SET_VGA(CBmode, 0x140);
-    SET_VGA(VBE_framebuffer, addr);
-    SET_VGA(VBE_total_memory, linelength * ylines);
-    SET_VGA(CBlinelength, linelength);
-    SET_VGA(CBmodeinfo.memmodel, MM_DIRECT);
-    SET_VGA(CBmodeinfo.width, xlines);
-    SET_VGA(CBmodeinfo.height, ylines);
-    SET_VGA(CBmodeinfo.depth, bpp);
-    SET_VGA(CBmodeinfo.cwidth, 8);
-    SET_VGA(CBmodeinfo.cheight, 16);
-    memcpy_far(get_global_seg(), &CBemulinfo
-               , get_global_seg(), &CBmodeinfo, sizeof(CBemulinfo));
-
-    // Validate modes
-    for (i = 0; i < ARRAY_SIZE(cbvesa_modes); i++) {
-        struct cbvga_mode_s *cbmode_g = &cbvesa_modes[i];
-        /* Skip VBE modes that doesn't fit into coreboot's framebuffer */
-        if ((GET_GLOBAL(cbmode_g->info.height) > ylines)
-            || (GET_GLOBAL(cbmode_g->info.width) > xlines)
-            || (GET_GLOBAL(cbmode_g->info.depth) != bpp)) {
-            dprintf(3, "Removing mode %x\n", GET_GLOBAL(cbmode_g->mode));
-            SET_VGA(cbmode_g->mode, 0xffff);
-        }
-    }
+    cbvga_setup_modes(addr, bpp, xlines, ylines, linelength);
     return 0;
 }
index fae5fbaeefb91c90e1963d2ba17b6b0c769ce486..e02ad3e66fc17abdb6c5045f49b6a304987ed958 100644 (file)
@@ -18,6 +18,7 @@ int cbvga_set_dacformat(struct vgamode_s *vmode_g, int val);
 int cbvga_save_restore(int cmd, u16 seg, void *data);
 int cbvga_set_mode(struct vgamode_s *vmode_g, int flags);
 int cbvga_get_linesize(struct vgamode_s *vmode_g);
+void cbvga_setup_modes(u64 addr, u8 bpp, u32 xlines, u32 ylines, u32 linelength);
 int cbvga_setup(void);
 
 // clext.c