diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2012-01-27 20:37:45 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2012-02-01 20:39:03 -0500 |
commit | d61fc53a6037125183bec6ca4f3976d2396486be (patch) | |
tree | 5907196c7464d9c003e66e0e692a597adcaa203a /vgasrc/bochsvga.c | |
parent | 3876b531222c53124b0eb154fb331c0c662f5e09 (diff) | |
download | seabios-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.c | 21 |
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) { |