Make cursor positioning work by using both halves of the
VGA cursor 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>
-This line, and those below, will be ignored--
M    libpayload/drivers/vga.c
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3186 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
			
			
This commit is contained in:
		
				
					committed by
					
						
						Jordan Crouse
					
				
			
			
				
	
			
			
			
						parent
						
							661e380a75
						
					
				
				
					commit
					b0e3f39a39
				
			@@ -64,7 +64,7 @@ static void vga_get_cursor_pos(void)
 | 
				
			|||||||
	unsigned int addr;
 | 
						unsigned int addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	addr = ((unsigned int)crtc_read(0x0E)) << 8;
 | 
						addr = ((unsigned int)crtc_read(0x0E)) << 8;
 | 
				
			||||||
	addr += crtc_read(0x0E);
 | 
						addr += crtc_read(0x0F);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cursorx = addr % WIDTH;
 | 
						cursorx = addr % WIDTH;
 | 
				
			||||||
	cursory = addr / WIDTH;
 | 
						cursory = addr / WIDTH;
 | 
				
			||||||
@@ -93,7 +93,7 @@ static void vga_fixup_cursor(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	addr = cursorx + (WIDTH * cursory);
 | 
						addr = cursorx + (WIDTH * cursory);
 | 
				
			||||||
	crtc_write(addr >> 8, 0x0E);
 | 
						crtc_write(addr >> 8, 0x0E);
 | 
				
			||||||
	crtc_write(addr, 0x0E);
 | 
						crtc_write(addr, 0x0F);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void vga_cursor_enable(int state)
 | 
					void vga_cursor_enable(int state)
 | 
				
			||||||
@@ -115,7 +115,7 @@ void vga_cursor_enable(int state)
 | 
				
			|||||||
void vga_clear_line(uint8_t row, uint8_t ch, uint8_t attr)
 | 
					void vga_clear_line(uint8_t row, uint8_t ch, uint8_t attr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int col;
 | 
						int col;
 | 
				
			||||||
	uint16_t *ptr = VIDEO(0, row);
 | 
						uint16_t *ptr = VIDEO(row, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (col = 0; col < WIDTH; col++)
 | 
						for (col = 0; col < WIDTH; col++)
 | 
				
			||||||
		ptr[col] = ((attr & 0xFF) << 8) | (ch & 0xFF);
 | 
							ptr[col] = ((attr & 0xFF) << 8) | (ch & 0xFF);
 | 
				
			||||||
@@ -123,7 +123,7 @@ void vga_clear_line(uint8_t row, uint8_t ch, uint8_t attr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void vga_scroll_up(void)
 | 
					static void vga_scroll_up(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint16_t *src = VIDEO(0, 1);
 | 
						uint16_t *src = VIDEO(1, 0);
 | 
				
			||||||
	uint16_t *dst = VIDEO(0, 0);
 | 
						uint16_t *dst = VIDEO(0, 0);
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user