Skip to content

Commit

Permalink
x86: fix usage of bios intcall()
Browse files Browse the repository at this point in the history
Some intcall() misuses the input biosregs as output in
cf06de7

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>
  • Loading branch information
Akinobu Mita authored and H. Peter Anvin committed Jul 4, 2009
1 parent 22a26e6 commit febe04d
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 4 deletions.
3 changes: 1 addition & 2 deletions arch/x86/boot/video-bios.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
4 changes: 2 additions & 2 deletions arch/x86/boot/video-vesa.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand All @@ -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) {
Expand Down

0 comments on commit febe04d

Please sign in to comment.