x86, setup: When restoring the screen, update boot_params.screen_info
When we restore the screen content after a mode change, we return the cursor to its former position. However, we need to also update boot_params.screen_info accordingly, so that the decompression code knows where on the screen the cursor is. Just in case the video BIOS does something extra screwy, read the cursor position back from the BIOS instead of relying on it doing the right thing. While we're at it, make sure we cap the cursor position to the new screen coordinates. Reported-by: Wim Osterholt <wim@djo.tudelft.nl> Bugzilla-Reference: http://bugzilla.kernel.org/show_bug.cgi?id=15329 Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
b0483e78e5
commit
f1f6baf8f1
1 changed files with 7 additions and 0 deletions
|
@ -298,11 +298,18 @@ static void restore_screen(void)
|
|||
}
|
||||
|
||||
/* Restore cursor position */
|
||||
if (saved.curx >= xs)
|
||||
saved.curx = xs-1;
|
||||
if (saved.cury >= ys)
|
||||
saved.cury = ys-1;
|
||||
|
||||
initregs(&ireg);
|
||||
ireg.ah = 0x02; /* Set cursor position */
|
||||
ireg.dh = saved.cury;
|
||||
ireg.dl = saved.curx;
|
||||
intcall(0x10, &ireg, NULL);
|
||||
|
||||
store_cursor_position();
|
||||
}
|
||||
|
||||
void set_video(void)
|
||||
|
|
Loading…
Reference in a new issue