vgabios: Add support for vbe get/set line length function.
[seabios.git] / vgasrc / bochsvga.c
index 6cbbf9c8fddff1ec4a2016fffaa56bb356928800..2a4b0d5bb27e48f3d242d6fb601f0c5d683db4bd 100644 (file)
@@ -198,6 +198,40 @@ bochsvga_hires_enable(int enable)
     dispi_write(VBE_DISPI_INDEX_ENABLE, flags);
 }
 
+int
+bochsvga_get_window(struct vgamode_s *vmode_g, int window)
+{
+    if (window != 0)
+        return -1;
+    return dispi_read(VBE_DISPI_INDEX_BANK);
+}
+
+int
+bochsvga_set_window(struct vgamode_s *vmode_g, int window, int val)
+{
+    if (window != 0)
+        return -1;
+    dispi_write(VBE_DISPI_INDEX_BANK, val);
+    if (dispi_read(VBE_DISPI_INDEX_BANK) != val)
+        return -1;
+    return 0;
+}
+
+int
+bochsvga_get_linelength(struct vgamode_s *vmode_g)
+{
+    return dispi_read(VBE_DISPI_INDEX_VIRT_WIDTH) * vga_bpp(vmode_g) / 8;
+}
+
+int
+bochsvga_set_linelength(struct vgamode_s *vmode_g, int val)
+{
+    stdvga_set_linelength(vmode_g, val);
+    int pixels = (val * 8) / vga_bpp(vmode_g);
+    dispi_write(VBE_DISPI_INDEX_VIRT_WIDTH, pixels);
+    return 0;
+}
+
 static void
 bochsvga_clear_scr(void)
 {