From a94f0c5ca2f0e3dba4a64f40c9d2e1149017d81d Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 10 Sep 2014 14:28:48 +0200 Subject: [PATCH] virtio-vga: add '-vga virtio' support Some convinience fluff: Add support for '-vga virtio', also add virtio-vga to the list of vga cards so '-device virtio-vga' will turn off the default vga. Written by Dave Airlie and Gerd Hoffmann. Signed-off-by: Dave Airlie Signed-off-by: Gerd Hoffmann --- hw/isa/isa-bus.c | 3 +++ hw/pci/pci.c | 2 ++ include/sysemu/sysemu.h | 2 +- qemu-options.hx | 4 +++- vl.c | 13 +++++++++++++ 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c index ec8e7decfc..43e0cd8ddd 100644 --- a/hw/isa/isa-bus.c +++ b/hw/isa/isa-bus.c @@ -179,6 +179,9 @@ ISADevice *isa_vga_init(ISABus *bus) case VGA_VMWARE: fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __func__); return NULL; + case VGA_VIRTIO: + fprintf(stderr, "%s: virtio-vga: no PCI bus\n", __func__); + return NULL; case VGA_NONE: default: return NULL; diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 750f3dacea..21580433d4 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -1698,6 +1698,8 @@ PCIDevice *pci_vga_init(PCIBus *bus) return pci_create_simple(bus, -1, "VGA"); case VGA_VMWARE: return pci_create_simple(bus, -1, "vmware-svga"); + case VGA_VIRTIO: + return pci_create_simple(bus, -1, "virtio-vga"); case VGA_NONE: default: /* Other non-PCI types. Checking for unsupported types is already done in vl.c. */ diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 853d90a317..7beb926870 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -104,7 +104,7 @@ extern int autostart; typedef enum { VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL, - VGA_TCX, VGA_CG3, VGA_DEVICE + VGA_TCX, VGA_CG3, VGA_DEVICE, VGA_VIRTIO, } VGAInterfaceType; extern int vga_interface_type; diff --git a/qemu-options.hx b/qemu-options.hx index 1d281f6818..c6221d4b58 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1103,7 +1103,7 @@ Rotate graphical output some deg left (only PXA LCD). ETEXI DEF("vga", HAS_ARG, QEMU_OPTION_vga, - "-vga [std|cirrus|vmware|qxl|xenfb|tcx|cg3|none]\n" + "-vga [std|cirrus|vmware|qxl|xenfb|tcx|cg3|virtio|none]\n" " select video card type\n", QEMU_ARCH_ALL) STEXI @item -vga @var{type} @@ -1136,6 +1136,8 @@ fixed resolution of 1024x768. (sun4m only) Sun cgthree framebuffer. This is a simple 8-bit framebuffer for sun4m machines available in both 1024x768 (OpenBIOS) and 1152x900 (OBP) resolutions aimed at people wishing to run older Solaris versions. +@item virtio +Virtio VGA card. @item none Disable VGA card. @end table diff --git a/vl.c b/vl.c index 9542095d95..2201e27fdc 100644 --- a/vl.c +++ b/vl.c @@ -231,6 +231,7 @@ static struct { { .driver = "isa-cirrus-vga", .flag = &default_vga }, { .driver = "vmware-svga", .flag = &default_vga }, { .driver = "qxl-vga", .flag = &default_vga }, + { .driver = "virtio-vga", .flag = &default_vga }, }; static QemuOptsList qemu_rtc_opts = { @@ -1884,6 +1885,11 @@ static bool cg3_vga_available(void) return object_class_by_name("cgthree"); } +static bool virtio_vga_available(void) +{ + return object_class_by_name("virtio-vga"); +} + static void select_vgahw (const char *p) { const char *opts; @@ -1910,6 +1916,13 @@ static void select_vgahw (const char *p) fprintf(stderr, "Error: VMWare SVGA not available\n"); exit(0); } + } else if (strstart(p, "virtio", &opts)) { + if (virtio_vga_available()) { + vga_interface_type = VGA_VIRTIO; + } else { + fprintf(stderr, "Error: Virtio VGA not available\n"); + exit(0); + } } else if (strstart(p, "xenfb", &opts)) { vga_interface_type = VGA_XENFB; } else if (strstart(p, "qxl", &opts)) {