qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 13/14] Allow cirrus VGA to be initialized multiple t


From: Zachary Amsden
Subject: [Qemu-devel] [PATCH 13/14] Allow cirrus VGA to be initialized multiple times; only the first init takes the ISA memory region and hardware I/O ports.
Date: Thu, 30 Jul 2009 00:15:11 -1000

Signed-off-by: Zachary Amsden <address@hidden>
---
 hw/cirrus_vga.c |   37 +++++++++++++++++++++----------------
 1 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c
index d7874f0..c0cf088 100644
--- a/hw/cirrus_vga.c
+++ b/hw/cirrus_vga.c
@@ -3153,6 +3153,7 @@ static void cirrus_init_common(CirrusVGAState * s, int 
device_id, int is_pci)
 {
     int i;
     static int inited;
+    static int idx = 0;
 
     if (!inited) {
         inited = 1;
@@ -3181,25 +3182,28 @@ static void cirrus_init_common(CirrusVGAState * s, int 
device_id, int is_pci)
             s->bustype = CIRRUS_BUSTYPE_ISA;
     }
 
-    register_ioport_write(0x3c0, 16, 1, vga_ioport_write, s);
+    if (idx == 0) {
+        register_ioport_write(0x3c0, 16, 1, vga_ioport_write, s);
 
-    register_ioport_write(0x3b4, 2, 1, vga_ioport_write, s);
-    register_ioport_write(0x3d4, 2, 1, vga_ioport_write, s);
-    register_ioport_write(0x3ba, 1, 1, vga_ioport_write, s);
-    register_ioport_write(0x3da, 1, 1, vga_ioport_write, s);
+        register_ioport_write(0x3b4, 2, 1, vga_ioport_write, s);
+        register_ioport_write(0x3d4, 2, 1, vga_ioport_write, s);
+        register_ioport_write(0x3ba, 1, 1, vga_ioport_write, s);
+        register_ioport_write(0x3da, 1, 1, vga_ioport_write, s);
 
-    register_ioport_read(0x3c0, 16, 1, vga_ioport_read, s);
+        register_ioport_read(0x3c0, 16, 1, vga_ioport_read, s);
 
-    register_ioport_read(0x3b4, 2, 1, vga_ioport_read, s);
-    register_ioport_read(0x3d4, 2, 1, vga_ioport_read, s);
-    register_ioport_read(0x3ba, 1, 1, vga_ioport_read, s);
-    register_ioport_read(0x3da, 1, 1, vga_ioport_read, s);
+        register_ioport_read(0x3b4, 2, 1, vga_ioport_read, s);
+        register_ioport_read(0x3d4, 2, 1, vga_ioport_read, s);
+        register_ioport_read(0x3ba, 1, 1, vga_ioport_read, s);
+        register_ioport_read(0x3da, 1, 1, vga_ioport_read, s);
+        s->vga.vram_phys = isa_mem_base + VGA_ISA_ADDRESS;
 
-    s->vga.vram_phys = isa_mem_base + VGA_ISA_ADDRESS;
-    s->vga.vga_io_memory = cpu_register_io_memory(cirrus_vga_mem_read,
-                                                  cirrus_vga_mem_write, s);
-    cpu_register_physical_memory(s->vga.vram_phys, VGA_VRAM_SIZE, 
s->vga.vga_io_memory);
-    qemu_register_coalesced_mmio(s->vga.vram_phys, VGA_VRAM_SIZE);
+        s->vga.vga_io_memory = cpu_register_io_memory(cirrus_vga_mem_read,
+                                                      cirrus_vga_mem_write, s);
+        cpu_register_physical_memory(s->vga.vram_phys, VGA_VRAM_SIZE,
+                                     s->vga.vga_io_memory);
+        qemu_register_coalesced_mmio(s->vga.vram_phys, VGA_VRAM_SIZE);
+    }
 
     /* I/O handler for LFB */
     s->cirrus_linear_io_addr =
@@ -3229,7 +3233,8 @@ static void cirrus_init_common(CirrusVGAState * s, int 
device_id, int is_pci)
 
     qemu_register_reset(cirrus_reset, 0, s);
     cirrus_reset(s);
-    register_savevm("cirrus_vga", 0, 2, cirrus_vga_save, cirrus_vga_load, s);
+    register_savevm("cirrus_vga", idx, 2, cirrus_vga_save, cirrus_vga_load, s);
+    idx++;
 }
 
 /***************************************
-- 
1.6.2.5





reply via email to

[Prev in Thread] Current Thread [Next in Thread]