aboutsummaryrefslogtreecommitdiffstats
path: root/vgasrc/bochsvga.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2012-01-27 20:37:45 -0500
committerKevin O'Connor <kevin@koconnor.net>2012-02-01 20:39:03 -0500
commitd61fc53a6037125183bec6ca4f3976d2396486be (patch)
tree5907196c7464d9c003e66e0e692a597adcaa203a /vgasrc/bochsvga.c
parent3876b531222c53124b0eb154fb331c0c662f5e09 (diff)
downloadseabios-d61fc53a6037125183bec6ca4f3976d2396486be.tar.gz
vgabios: Add support for VBE get/set display start function.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'vgasrc/bochsvga.c')
-rw-r--r--vgasrc/bochsvga.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/vgasrc/bochsvga.c b/vgasrc/bochsvga.c
index 2a4b0d5b..384e2cbf 100644
--- a/vgasrc/bochsvga.c
+++ b/vgasrc/bochsvga.c
@@ -232,6 +232,27 @@ bochsvga_set_linelength(struct vgamode_s *vmode_g, int val)
return 0;
}
+int
+bochsvga_get_displaystart(struct vgamode_s *vmode_g)
+{
+ int bpp = vga_bpp(vmode_g);
+ int linelength = dispi_read(VBE_DISPI_INDEX_VIRT_WIDTH) * bpp / 8;
+ int x = dispi_read(VBE_DISPI_INDEX_X_OFFSET);
+ int y = dispi_read(VBE_DISPI_INDEX_Y_OFFSET);
+ return x * bpp / 8 + linelength * y;
+}
+
+int
+bochsvga_set_displaystart(struct vgamode_s *vmode_g, int val)
+{
+ stdvga_set_displaystart(vmode_g, val);
+ int bpp = vga_bpp(vmode_g);
+ int linelength = dispi_read(VBE_DISPI_INDEX_VIRT_WIDTH) * bpp / 8;
+ dispi_write(VBE_DISPI_INDEX_X_OFFSET, (val % linelength) * 8 / bpp);
+ dispi_write(VBE_DISPI_INDEX_Y_OFFSET, val / linelength);
+ return 0;
+}
+
static void
bochsvga_clear_scr(void)
{