qemu-ppc
[Top][All Lists]
Advanced

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

Re: [Qemu-ppc] [Qemu-devel] [PATCH 1/2] Add a generic vga device type fo


From: Mark Wu
Subject: Re: [Qemu-ppc] [Qemu-devel] [PATCH 1/2] Add a generic vga device type for that specified by '-device'
Date: Thu, 06 Mar 2014 21:37:54 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0

On 02/28/2014 09:03 PM, Paolo Bonzini wrote:
Il 28/02/2014 13:45, Mark Wu ha scritto:
Some machine (like ppc) initialization code determines if it has vga
configured according to vga_interface_type. In the original code,
vga_interface_type is evaluated to VGA_NONE even if a vga is added
by '-device VGA'. It causes the machine not aware of the graphics
device configured. This patch adds a new vga device type to indicate
that it has a vga device, but the machine code doesn't need to care
about its initialization.

Can you use memory_region_present and look (for example) for a device that owns I/O port 0x3d4?
Thanks for your reply! I need confirm I am understanding your comments correctly. I think you're suggesting to traverse the pci devices and check if it owns the I/O port 0x3d4 to detect if the vga device is initialized. But it seems not be able to resolve the bug. Because the machine initialization code runs before the generic device initialization, the I/O port 0x3d4 will not be registered at the time machine initializes. So it can't change the return value of pci_vga_init. The return value is checked in ppc code, which causes the bug.

Please correct me if my understanding on your comments is wrong. Thanks!





Paolo

Signed-off-by: Mark Wu <address@hidden>
---
 include/sysemu/sysemu.h | 2 +-
 vl.c                    | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 495dae8..a21205f 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -103,7 +103,7 @@ typedef enum DisplayType
 extern int autostart;

 typedef enum {
-    VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL,
+ VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL, VGA_DEVICE
 } VGAInterfaceType;

 extern int vga_interface_type;
diff --git a/vl.c b/vl.c
index 1d27b34..06a4253 100644
--- a/vl.c
+++ b/vl.c
@@ -226,6 +226,7 @@ static int default_floppy = 1;
 static int default_cdrom = 1;
 static int default_sdcard = 1;
 static int default_vga = 1;
+static int has_defaults = 1;

 static struct {
     const char *driver;
@@ -2066,7 +2067,11 @@ static void select_vgahw (const char *p)
             fprintf(stderr, "Error: QXL VGA not available\n");
             exit(0);
         }
-    } else if (!strstart(p, "none", &opts)) {
+    } else if (strstart(p, "none", &opts)) {
+        if (!has_defaults && !default_vga) {
+            vga_interface_type = VGA_DEVICE;
+        }
+    } else {
     invalid_vga:
         fprintf(stderr, "Unknown vga type: %s\n", p);
         exit(1);
@@ -3672,6 +3677,7 @@ int main(int argc, char **argv, char **envp)
                 default_cdrom = 0;
                 default_sdcard = 0;
                 default_vga = 0;
+                has_defaults = 0;
                 break;
             case QEMU_OPTION_xen_domid:
                 if (!(xen_available())) {







reply via email to

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