]> xenbits.xensource.com Git - qemu-xen-3.4-testing.git/commitdiff
passthrough: gfx_passthru: warning when vgabios rom has invalid checksum
authorIan Jackson <ian.jackson@eu.citrix.com>
Mon, 1 Mar 2010 16:14:50 +0000 (16:14 +0000)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Mon, 1 Mar 2010 16:14:50 +0000 (16:14 +0000)
In the native environment, the VGABIOS, the expansion ROM on the
graphics card, is placed into the 0C0000h address space, and then
executed. Of course, the checksum of the ROM must be valid.

After this initialization, the system BIOS, the actual BIOS of the M/B,
can resize the expansion ROM code to reduce the amount of occupied
space. If the system BIOS resizes it, a new checksum must be calculated
and stored in the ROM image that is on the RAM.

So, normally, shadowed VGABIOS, that is placed in 0C0000h, is already
modified and its checksum must be recalculated.

Qemu-dm copies 0C0000h's contents of the dom0 to guest's 0C0000h.
Guest re-uses dom0's used-up VGABIOS.

The problem that I mentioned is about this recalculated checksum.

System BIOS must guarantee the checksum after the resizing, but,
some M/B does not.
However, after adjusting the checksum, guest seems to work, and
current qemu-dm does so. The buggy system BIOS might just forgets
to recalculate.

Signed-off-by: Noboru Iwamatsu <n_iwamatsu@jp.fujitsu.com>
Acked-by: Weidong Han <weidong.han@intel.com>
hw/pass-through.c

index ecb3d6fab220730bfa45de7e610f12b41f2eaafe..fadd358fa30dc088a2e09b985d1c85aab960bfc2 100644 (file)
@@ -4262,7 +4262,10 @@ static int setup_vga_pt(void)
     for ( c = (char*)bios; c < ((char*)bios + bios_size); c++ )
         checksum += *c;
     if ( checksum )
+    {
         bios[bios_size - 1] -= checksum;
+        PT_LOG("vga bios checksum is adjusted!\n");
+    }
 
     cpu_physical_memory_rw(0xc0000, bios, bios_size, 1);