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
[email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel