aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2010-01-24 16:29:44 -0800
committerH. Peter Anvin <hpa@zytor.com>2010-01-24 16:29:44 -0800
commit2f75bbc83c94b5aed67e89244ffba3fde9e347bb (patch)
treedf93011e2f6954906e69121db2d1a726d67740cb
parent95e6215b6f1d31eebdb1ddeb4c13007c5af30c23 (diff)
parentaab6f6014b1719db0254f108d89bb0b6750c822a (diff)
downloadsyslinux.git-2f75bbc83c94b5aed67e89244ffba3fde9e347bb.tar.gz
syslinux.git-2f75bbc83c94b5aed67e89244ffba3fde9e347bb.tar.xz
syslinux.git-2f75bbc83c94b5aed67e89244ffba3fde9e347bb.zip
Merge commit 'origin/master' into fsc
-rw-r--r--com32/lib/syslinux/load_linux.c3
-rw-r--r--core/bootsect.inc6
-rw-r--r--core/runkernel.inc16
3 files changed, 20 insertions, 5 deletions
diff --git a/com32/lib/syslinux/load_linux.c b/com32/lib/syslinux/load_linux.c
index db985163..df793625 100644
--- a/com32/lib/syslinux/load_linux.c
+++ b/com32/lib/syslinux/load_linux.c
@@ -253,6 +253,9 @@ int syslinux_boot_linux(void *kernel_buf, size_t kernel_size,
case 'n': /* "normal" */
video_mode = 0xffff;
break;
+ case 'c': /* "current" */
+ video_mode = 0x0f04;
+ break;
default:
video_mode = strtoul(arg, NULL, 0);
break;
diff --git a/core/bootsect.inc b/core/bootsect.inc
index 23b4fdb4..b8102cd5 100644
--- a/core/bootsect.inc
+++ b/core/bootsect.inc
@@ -120,6 +120,12 @@ replace_bootstrap:
; Prepare for shutting down
;
call vgaclearmode
+
+;
+; We jump here when loading a kernel image, so that we don't reset
+; the screen mode in "quiet" mode
+;
+replace_bootstrap_noclearmode:
call cleanup_hardware
;
diff --git a/core/runkernel.inc b/core/runkernel.inc
index 68ab9fac..568b9658 100644
--- a/core/runkernel.inc
+++ b/core/runkernel.inc
@@ -138,15 +138,18 @@ parse_cmdline:
jmp .next_opt
opt_vga:
- mov eax,[es:di-1]
+ mov ax,[es:di-1]
mov bx,-1
- cmp eax,'=nor' ; vga=normal
+ cmp ax,'=nor' ; vga=normal
je .vc0
dec bx ; bx <- -2
- cmp eax,'=ext' ; vga=ext
+ cmp ax,'=ext' ; vga=ext
je .vc0
dec bx ; bx <- -3
- cmp eax,'=ask' ; vga=ask
+ cmp ax,'=ask' ; vga=ask
+ je .vc0
+ mov bx,0x0f04 ; bx <- 0x0f04 (current mode)
+ cmp ax,'=cur' ; vga=current
je .vc0
call parseint_esdi ; vga=<number>
jc .skip ; Not an integer
@@ -454,7 +457,10 @@ setup_move:
; BX points to the final real mode segment, and will be loaded
; into DS.
- jmp replace_bootstrap
+
+ test byte [QuietBoot],01h ; Don't clear the mode if quiet
+ jz replace_bootstrap
+ jmp replace_bootstrap_noclearmode
run_linux_kernel:
;