This function is useful for enabling KVM support in VMware VGA.

Signed-off-by: Anthony Liguori <[EMAIL PROTECTED]>

diff --git a/qemu/hw/vga.c b/qemu/hw/vga.c
index 222a39c..1cfc154 100644
--- a/qemu/hw/vga.c
+++ b/qemu/hw/vga.c
@@ -1813,6 +1813,36 @@ typedef struct PCIVGAState {
     VGAState vga_state;
 } PCIVGAState;
 
+void vga_update_vram_mapping(VGAState *s, unsigned long vga_ram_begin,
+                            unsigned long vga_ram_end)
+{
+    void *vram_pointer, *old_vram;
+
+    if (vga_ram_begin == s->map_addr &&
+       vga_ram_end   == s->map_end) {
+       return;
+    }
+
+    if (s->map_addr && s->map_end)
+       unset_vram_mapping(s->map_addr, s->map_end);
+    
+    vram_pointer = set_vram_mapping(vga_ram_begin, vga_ram_end);
+    if (!vram_pointer) {
+       fprintf(stderr, "set_vram_mapping failed\n");
+       s->map_addr = s->map_end = 0;
+    }
+    else {
+       old_vram = vga_update_vram((VGAState *)s, vram_pointer,
+                                  VGA_RAM_SIZE);
+       if (s->map_addr && s->map_end)
+           munmap(old_vram, s->map_end - s->map_addr);
+       else
+           qemu_free(old_vram);
+       s->map_addr = vga_ram_begin;
+       s->map_end  = vga_ram_end;
+    }
+}
+
 static void vga_map(PCIDevice *pci_dev, int region_num,
                     uint32_t addr, uint32_t size, int type)
 {
@@ -1822,37 +1852,8 @@ static void vga_map(PCIDevice *pci_dev, int region_num,
         cpu_register_physical_memory(addr, s->bios_size, s->bios_offset);
     } else {
         cpu_register_physical_memory(addr, s->vram_size, s->vram_offset);
-        if (kvm_enabled()) {
-            unsigned long vga_ram_begin, vga_ram_end;
-            void *vram_pointer, *old_vram;
-
-            vga_ram_begin = addr;
-            vga_ram_end   = addr + VGA_RAM_SIZE;
-
-            if (vga_ram_begin == s->map_addr &&
-                vga_ram_end   == s->map_end) {
-                return;
-            }
-
-            if (s->map_addr && s->map_end)
-                unset_vram_mapping(s->map_addr, s->map_end);
-
-            vram_pointer = set_vram_mapping(vga_ram_begin, vga_ram_end);
-            if (!vram_pointer) {
-                fprintf(stderr, "set_vram_mapping failed\n");
-                s->map_addr = s->map_end = 0;
-            }
-            else {
-                old_vram = vga_update_vram((VGAState *)s, vram_pointer,
-                                           VGA_RAM_SIZE);
-                if (s->map_addr && s->map_end)
-                    munmap(old_vram, s->map_end - s->map_addr);
-                else
-                    qemu_free(old_vram);
-                s->map_addr = vga_ram_begin;
-                s->map_end  = vga_ram_end;
-            }
-        }
+       if (kvm_enabled())
+           vga_update_vram_mapping(s, addr, addr + VGA_RAM_SIZE);
     }
 }
 
diff --git a/qemu/hw/vga_int.h b/qemu/hw/vga_int.h
index 196f8df..8d29205 100644
--- a/qemu/hw/vga_int.h
+++ b/qemu/hw/vga_int.h
@@ -192,5 +192,7 @@ void *set_vram_mapping(unsigned long begin, unsigned long 
end);
 int unset_vram_mapping(unsigned long begin, unsigned long end);
 
 void *vga_update_vram(VGAState *s, void *vga_ram_base, int vga_ram_size);
+void vga_update_vram_mapping(VGAState *s, unsigned long vga_ram_begin,
+                            unsigned long vga_ram_end);
 extern const uint8_t sr_mask[8];
 extern const uint8_t gr_mask[16];

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to