diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-28 13:43:53 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-28 13:43:53 -0500 |
commit | f6a0b5cd34d6e922cc7258c5429fb0f17508ceb6 (patch) | |
tree | 0fae4978f63219b30ae0039a6a05c93df950fd37 | |
parent | d6cd4715e21508bebbb1928c91d628bd65f5de5f (diff) | |
parent | 8e92dc767abb58357e696a48fc3d8ce615a9c01a (diff) |
Merge branch 'x86-setup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-setup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
x86, setup: Don't skip mode setting for the standard VGA modes
x86-64, setup: Inhibit decompressor output if video info is invalid
x86, setup: When restoring the screen, update boot_params.screen_info
-rw-r--r-- | arch/x86/boot/compressed/misc.c | 2 | ||||
-rw-r--r-- | arch/x86/boot/video-vga.c | 9 | ||||
-rw-r--r-- | arch/x86/boot/video.c | 7 |
3 files changed, 8 insertions, 10 deletions
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c index 88042e812d3c..51e240779a44 100644 --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c | |||
@@ -180,11 +180,9 @@ static void __putstr(int error, const char *s) | |||
180 | return; | 180 | return; |
181 | #endif | 181 | #endif |
182 | 182 | ||
183 | #ifdef CONFIG_X86_32 | ||
184 | if (real_mode->screen_info.orig_video_mode == 0 && | 183 | if (real_mode->screen_info.orig_video_mode == 0 && |
185 | lines == 0 && cols == 0) | 184 | lines == 0 && cols == 0) |
186 | return; | 185 | return; |
187 | #endif | ||
188 | 186 | ||
189 | x = real_mode->screen_info.orig_x; | 187 | x = real_mode->screen_info.orig_x; |
190 | y = real_mode->screen_info.orig_y; | 188 | y = real_mode->screen_info.orig_y; |
diff --git a/arch/x86/boot/video-vga.c b/arch/x86/boot/video-vga.c index 819caa1f2008..ed7aeff786b2 100644 --- a/arch/x86/boot/video-vga.c +++ b/arch/x86/boot/video-vga.c | |||
@@ -42,22 +42,15 @@ static u8 vga_set_basic_mode(void) | |||
42 | { | 42 | { |
43 | struct biosregs ireg, oreg; | 43 | struct biosregs ireg, oreg; |
44 | u16 ax; | 44 | u16 ax; |
45 | u8 rows; | ||
46 | u8 mode; | 45 | u8 mode; |
47 | 46 | ||
48 | initregs(&ireg); | 47 | initregs(&ireg); |
49 | 48 | ||
49 | /* Query current mode */ | ||
50 | ax = 0x0f00; | 50 | ax = 0x0f00; |
51 | intcall(0x10, &ireg, &oreg); | 51 | intcall(0x10, &ireg, &oreg); |
52 | mode = oreg.al; | 52 | mode = oreg.al; |
53 | 53 | ||
54 | set_fs(0); | ||
55 | rows = rdfs8(0x484); /* rows minus one */ | ||
56 | |||
57 | if ((oreg.ax == 0x5003 || oreg.ax == 0x5007) && | ||
58 | (rows == 0 || rows == 24)) | ||
59 | return mode; | ||
60 | |||
61 | if (mode != 3 && mode != 7) | 54 | if (mode != 3 && mode != 7) |
62 | mode = 3; | 55 | mode = 3; |
63 | 56 | ||
diff --git a/arch/x86/boot/video.c b/arch/x86/boot/video.c index f767164cd5df..43eda284d27f 100644 --- a/arch/x86/boot/video.c +++ b/arch/x86/boot/video.c | |||
@@ -298,11 +298,18 @@ static void restore_screen(void) | |||
298 | } | 298 | } |
299 | 299 | ||
300 | /* Restore cursor position */ | 300 | /* Restore cursor position */ |
301 | if (saved.curx >= xs) | ||
302 | saved.curx = xs-1; | ||
303 | if (saved.cury >= ys) | ||
304 | saved.cury = ys-1; | ||
305 | |||
301 | initregs(&ireg); | 306 | initregs(&ireg); |
302 | ireg.ah = 0x02; /* Set cursor position */ | 307 | ireg.ah = 0x02; /* Set cursor position */ |
303 | ireg.dh = saved.cury; | 308 | ireg.dh = saved.cury; |
304 | ireg.dl = saved.curx; | 309 | ireg.dl = saved.curx; |
305 | intcall(0x10, &ireg, NULL); | 310 | intcall(0x10, &ireg, NULL); |
311 | |||
312 | store_cursor_position(); | ||
306 | } | 313 | } |
307 | 314 | ||
308 | void set_video(void) | 315 | void set_video(void) |