svn commit: r212580 - head/sys/dev/fb

[ Available lists | Index of svn-src-head | Month of Sep 2010 | Week of 13 Sep 2010 | Raw email | View thread | Wrap long lines | Reply ]
From
Jung-uk Kim <jkim@FreeBSD.org>
Date
13 Sep 2010 19:58:46
Subject
svn commit: r212580 - head/sys/dev/fb
Message-ID
201009131958.o8DJwkUr028908@svn.freebsd.org


[ Hide this part ]
Author: jkim
Date: Mon Sep 13 19:58:46 2010
New Revision: 212580
URL: http://svn.freebsd.org/changeset/base/212580

Log:
Fix segment:offset calculation of interrupt vector for relocated video BIOS
when the original offset is bigger than size of one page. X86BIOS macros
cannot be used here because it is assumed address is only linear in a page.

Tested by: netchild

Modified:
head/sys/dev/fb/vesa.c

Modified: head/sys/dev/fb/vesa.c
==============================================================================
--- head/sys/dev/fb/vesa.c Mon Sep 13 19:55:40 2010 (r212579)
+++ head/sys/dev/fb/vesa.c Mon Sep 13 19:58:46 2010 (r212580)
@@ -804,18 +804,16 @@ vesa_bios_init(void)
vbios = x86bios_get_orm(vesa_bios_offs);
if (vbios != NULL) {
vesa_bios_size = vbios[2] * 512;
- offs = BIOS_SADDRTOLADDR(vesa_bios_int10);
- if (offs > vesa_bios_offs &&
- offs < vesa_bios_offs + vesa_bios_size) {
+ if (((VESA_BIOS_OFFSET << 12) & 0xffff0000) ==
+ (vesa_bios_int10 & 0xffff0000) &&
+ vesa_bios_size > (vesa_bios_int10 & 0xffff)) {
vesa_bios = x86bios_alloc(&vesa_bios_offs,
vesa_bios_size, M_WAITOK);
memcpy(vesa_bios, vbios, vesa_bios_size);
- offs = offs - VESA_BIOS_OFFSET + vesa_bios_offs;
- offs = (X86BIOS_PHYSTOSEG(offs) << 16) +
- X86BIOS_PHYSTOOFF(offs);
+ offs = ((vesa_bios_offs << 12) & 0xffff0000) +
+ (vesa_bios_int10 & 0xffff);
x86bios_set_intr(0x10, offs);
- } else
- offs = vesa_bios_int10;
+ }
}
if (vesa_bios == NULL)
printf("VESA: failed to shadow video ROM\n");

Elapsed time: 0.109 seconds