diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2009-07-01 11:13:07 +0900 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-07-04 12:56:32 -0700 |
commit | febe04de3be4bf66f9339d8847db2806d99fd164 (patch) | |
tree | e1143d42fc562326196b3eeead563c70449dc019 /arch/x86/boot | |
parent | 22a26e6663008e1fc4d1467aaff7e775124bce31 (diff) | |
download | op-kernel-dev-febe04de3be4bf66f9339d8847db2806d99fd164.zip op-kernel-dev-febe04de3be4bf66f9339d8847db2806d99fd164.tar.gz |
x86: fix usage of bios intcall()
Some intcall() misuses the input biosregs as output in
cf06de7b9cdd3efee7a59dced1977b3c21d43732
This fixes the problem vga=ask boot option doesn't show enough modes.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
LKML-Reference: <20090701021307.GA3127@localhost.localdomain>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/boot')
-rw-r--r-- | arch/x86/boot/video-bios.c | 3 | ||||
-rw-r--r-- | arch/x86/boot/video-vesa.c | 4 |
2 files changed, 3 insertions, 4 deletions
diff --git a/arch/x86/boot/video-bios.c b/arch/x86/boot/video-bios.c index d660be4..49e0c18 100644 --- a/arch/x86/boot/video-bios.c +++ b/arch/x86/boot/video-bios.c @@ -37,14 +37,13 @@ static int set_bios_mode(u8 mode) ireg.al = mode; /* AH=0x00 Set Video Mode */ intcall(0x10, &ireg, NULL); - ireg.ah = 0x0f; /* Get Current Video Mode */ intcall(0x10, &ireg, &oreg); do_restore = 1; /* Assume video contents were lost */ /* Not all BIOSes are clean with the top bit */ - new_mode = ireg.al & 0x7f; + new_mode = oreg.al & 0x7f; if (new_mode == mode) return 0; /* Mode change OK */ diff --git a/arch/x86/boot/video-vesa.c b/arch/x86/boot/video-vesa.c index c700147..275dd17 100644 --- a/arch/x86/boot/video-vesa.c +++ b/arch/x86/boot/video-vesa.c @@ -45,7 +45,7 @@ static int vesa_probe(void) ireg.di = (size_t)&vginfo; intcall(0x10, &ireg, &oreg); - if (ireg.ax != 0x004f || + if (oreg.ax != 0x004f || vginfo.signature != VESA_MAGIC || vginfo.version < 0x0102) return 0; /* Not present */ @@ -70,7 +70,7 @@ static int vesa_probe(void) ireg.di = (size_t)&vminfo; intcall(0x10, &ireg, &oreg); - if (ireg.ax != 0x004f) + if (oreg.ax != 0x004f) continue; if ((vminfo.mode_attr & 0x15) == 0x05) { |