Make cursor positioning work by using both halves of the VGA cursor
authorJonathan A. Kollasch <jakllsch@kollasch.net>
Mon, 11 Aug 2008 17:19:10 +0000 (17:19 +0000)
committerJordan Crouse <jordan.crouse@amd.com>
Mon, 11 Aug 2008 17:19:10 +0000 (17:19 +0000)
position register.

Have vga_scroll_up() and vga_clear_line() present row/column arguments to
the VIDEO() macro in the right order.

Signed-off-by: Jonathan A. Kollasch <jakllsch@kollasch.net>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3498 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

payloads/libpayload/drivers/video/vga.c

index 388c7b1ee72c1ae27db7cda7c7d4f2fb3b8a675b..540e6733891e75a372244c34ed26e4c621cb955c 100644 (file)
@@ -54,7 +54,7 @@ static void vga_get_cursor(unsigned int *x, unsigned int *y, unsigned int *en)
 {
        unsigned int addr;
        addr = ((unsigned int) crtc_read(0x0E)) << 8;
-       addr += crtc_read(0x0E);
+       addr += crtc_read(0x0F);
 
        *x = addr % VIDEO_COLS;
        *y = addr / VIDEO_COLS;
@@ -68,7 +68,7 @@ static void vga_set_cursor(unsigned int x, unsigned int y)
 
        addr = x + (VIDEO_COLS * y);
        crtc_write(addr >> 8, 0x0E);
-       crtc_write(addr, 0x0E);
+       crtc_write(addr, 0x0F);
 }
 
 static void vga_enable_cursor(int state)
@@ -87,7 +87,7 @@ static void vga_enable_cursor(int state)
 static void vga_clear_line(u8 row, u8 ch, u8 attr)
 {
        int col;
-       u16 *ptr = VIDEO(0, row);
+       u16 *ptr = VIDEO(row, 0);
 
        for(col = 0; col < VIDEO_COLS; col++)
                ptr[col] = ((attr & 0xFF) << 8) | (ch & 0xFF);
@@ -95,7 +95,7 @@ static void vga_clear_line(u8 row, u8 ch, u8 attr)
 
 static void vga_scroll_up(void)
 {
-       u16 *src = VIDEO(0,1);
+       u16 *src = VIDEO(1,0);
        u16 *dst = VIDEO(0,0);
        int i;