* [Qemu-devel] [PATCH v2 0/6] virtio-gpu: pci support bits.
@ 2015-06-12 8:39 Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 1/6] virtio-gpu: fix error message Gerd Hoffmann
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-06-12 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Here is the code to add virtio-pci support for the virtio-gpu.
This time it goes on top of master, all dependencies are merged
upstream meanwhile. Yea! The only missing bit to make this
fully functional is the seabios update which is needed for a
working vgabios.
I plan to send a pull req early next week for patches 1-5.
Patch 6 carries a vgabios binary, for testing convinience.
Note that rebuilding this from the current roms/seabios
submodule (rel-1.8.1) will *not* work, you'll need the
upcoming 1.8.2 seabios release for that. Seabios update
pull request for this will follow after 1.8.2 is released,
and it will add the vgabios properly.
Gerd Hoffmann (6):
virtio-gpu: fix error message
virtio-gpu-pci: add virtio pci support
virtio-vga: add virtio gpu device with vga compatibility
virtio-vga: add '-vga virtio' support
virtio-vga: add vgabios configuration
[testing-only] virtio-vga: add vgabios binary
Makefile | 2 +-
default-configs/x86_64-softmmu.mak | 1 +
hw/display/Makefile.objs | 2 +
hw/display/vga-pci.c | 8 +-
hw/display/vga_int.h | 6 ++
hw/display/virtio-gpu-pci.c | 68 ++++++++++++++
hw/display/virtio-gpu.c | 2 +-
hw/display/virtio-vga.c | 175 +++++++++++++++++++++++++++++++++++++
hw/isa/isa-bus.c | 3 +
hw/pci/pci.c | 2 +
hw/virtio/virtio-pci.h | 14 +++
include/sysemu/sysemu.h | 2 +-
pc-bios/vgabios-virtio.bin | Bin 0 -> 38912 bytes
qemu-options.hx | 4 +-
roms/Makefile | 2 +-
roms/config.vga-virtio | 6 ++
vl.c | 13 +++
17 files changed, 301 insertions(+), 9 deletions(-)
create mode 100644 hw/display/virtio-gpu-pci.c
create mode 100644 hw/display/virtio-vga.c
create mode 100644 pc-bios/vgabios-virtio.bin
create mode 100644 roms/config.vga-virtio
--
1.8.3.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 1/6] virtio-gpu: fix error message
2015-06-12 8:39 [Qemu-devel] [PATCH v2 0/6] virtio-gpu: pci support bits Gerd Hoffmann
@ 2015-06-12 8:39 ` Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 2/6] virtio-gpu-pci: add virtio pci support Gerd Hoffmann
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-06-12 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Michael S. Tsirkin
iov limit was raised, but the error message still has the old limit ...
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/display/virtio-gpu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 4b10ca1..8c109b7 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -534,7 +534,7 @@ int virtio_gpu_create_mapping_iov(struct virtio_gpu_resource_attach_backing *ab,
if (ab->nr_entries > 16384) {
qemu_log_mask(LOG_GUEST_ERROR,
- "%s: nr_entries is too big (%d > 1024)\n",
+ "%s: nr_entries is too big (%d > 16384)\n",
__func__, ab->nr_entries);
return -1;
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 2/6] virtio-gpu-pci: add virtio pci support
2015-06-12 8:39 [Qemu-devel] [PATCH v2 0/6] virtio-gpu: pci support bits Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 1/6] virtio-gpu: fix error message Gerd Hoffmann
@ 2015-06-12 8:39 ` Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 3/6] virtio-vga: add virtio gpu device with vga compatibility Gerd Hoffmann
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-06-12 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Dave Airlie, Gerd Hoffmann, Michael S. Tsirkin
This patch adds virtio-gpu-pci, which is the pci proxy for the virtio
gpu device. With this patch in place virtio-gpu is functional. You
need a linux guest with a virtio-gpu driver though, and output will
appear pretty late in boot, once the kernel initialized drm and fbcon.
Written by Dave Airlie and Gerd Hoffmann.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/display/Makefile.objs | 1 +
hw/display/virtio-gpu-pci.c | 68 +++++++++++++++++++++++++++++++++++++++++++++
hw/virtio/virtio-pci.h | 14 ++++++++++
3 files changed, 83 insertions(+)
create mode 100644 hw/display/virtio-gpu-pci.c
diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
index 61c80f3..26284a1 100644
--- a/hw/display/Makefile.objs
+++ b/hw/display/Makefile.objs
@@ -36,3 +36,4 @@ obj-$(CONFIG_VGA) += vga.o
common-obj-$(CONFIG_QXL) += qxl.o qxl-logger.o qxl-render.o
obj-$(CONFIG_VIRTIO) += virtio-gpu.o
+obj-$(CONFIG_VIRTIO_PCI) += virtio-gpu-pci.o
diff --git a/hw/display/virtio-gpu-pci.c b/hw/display/virtio-gpu-pci.c
new file mode 100644
index 0000000..f0f25c7
--- /dev/null
+++ b/hw/display/virtio-gpu-pci.c
@@ -0,0 +1,68 @@
+/*
+ * Virtio video device
+ *
+ * Copyright Red Hat
+ *
+ * Authors:
+ * Dave Airlie
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ *
+ */
+#include "hw/pci/pci.h"
+#include "hw/virtio/virtio.h"
+#include "hw/virtio/virtio-bus.h"
+#include "hw/virtio/virtio-pci.h"
+#include "hw/virtio/virtio-gpu.h"
+
+static Property virtio_gpu_pci_properties[] = {
+ DEFINE_VIRTIO_GPU_PROPERTIES(VirtIOGPUPCI, vdev.conf),
+ DEFINE_VIRTIO_GPU_PCI_PROPERTIES(VirtIOPCIProxy),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
+static void virtio_gpu_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
+{
+ VirtIOGPUPCI *vgpu = VIRTIO_GPU_PCI(vpci_dev);
+ DeviceState *vdev = DEVICE(&vgpu->vdev);
+
+ qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+ /* force virtio-1.0 */
+ vpci_dev->flags &= ~VIRTIO_PCI_FLAG_DISABLE_MODERN;
+ vpci_dev->flags |= VIRTIO_PCI_FLAG_DISABLE_LEGACY;
+ object_property_set_bool(OBJECT(vdev), true, "realized", errp);
+}
+
+static void virtio_gpu_pci_class_init(ObjectClass *klass, void *data)
+{
+ DeviceClass *dc = DEVICE_CLASS(klass);
+ VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+ PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
+ dc->props = virtio_gpu_pci_properties;
+ k->realize = virtio_gpu_pci_realize;
+ pcidev_k->class_id = PCI_CLASS_DISPLAY_OTHER;
+}
+
+static void virtio_gpu_initfn(Object *obj)
+{
+ VirtIOGPUPCI *dev = VIRTIO_GPU_PCI(obj);
+ object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_GPU);
+ object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static const TypeInfo virtio_gpu_pci_info = {
+ .name = TYPE_VIRTIO_GPU_PCI,
+ .parent = TYPE_VIRTIO_PCI,
+ .instance_size = sizeof(VirtIOGPUPCI),
+ .instance_init = virtio_gpu_initfn,
+ .class_init = virtio_gpu_pci_class_init,
+};
+
+static void virtio_gpu_pci_register_types(void)
+{
+ type_register_static(&virtio_gpu_pci_info);
+}
+type_init(virtio_gpu_pci_register_types)
diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h
index d962125..96025ca 100644
--- a/hw/virtio/virtio-pci.h
+++ b/hw/virtio/virtio-pci.h
@@ -25,6 +25,7 @@
#include "hw/virtio/virtio-bus.h"
#include "hw/virtio/virtio-9p.h"
#include "hw/virtio/virtio-input.h"
+#include "hw/virtio/virtio-gpu.h"
#ifdef CONFIG_VIRTFS
#include "hw/9pfs/virtio-9p.h"
#endif
@@ -42,6 +43,7 @@ typedef struct VHostSCSIPCI VHostSCSIPCI;
typedef struct VirtIORngPCI VirtIORngPCI;
typedef struct VirtIOInputPCI VirtIOInputPCI;
typedef struct VirtIOInputHIDPCI VirtIOInputHIDPCI;
+typedef struct VirtIOGPUPCI VirtIOGPUPCI;
/* virtio-pci-bus */
@@ -261,6 +263,18 @@ struct VirtIOInputHIDPCI {
VirtIOInputHID vdev;
};
+/*
+ * virtio-gpu-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_GPU_PCI "virtio-gpu-pci"
+#define VIRTIO_GPU_PCI(obj) \
+ OBJECT_CHECK(VirtIOGPUPCI, (obj), TYPE_VIRTIO_GPU_PCI)
+
+struct VirtIOGPUPCI {
+ VirtIOPCIProxy parent_obj;
+ VirtIOGPU vdev;
+};
+
/* Virtio ABI version, if we increment this, we break the guest driver. */
#define VIRTIO_PCI_ABI_VERSION 0
--
1.8.3.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 3/6] virtio-vga: add virtio gpu device with vga compatibility
2015-06-12 8:39 [Qemu-devel] [PATCH v2 0/6] virtio-gpu: pci support bits Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 1/6] virtio-gpu: fix error message Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 2/6] virtio-gpu-pci: add virtio pci support Gerd Hoffmann
@ 2015-06-12 8:39 ` Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 4/6] virtio-vga: add '-vga virtio' support Gerd Hoffmann
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-06-12 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Dave Airlie, Gerd Hoffmann, Michael S. Tsirkin
This patch adds a virtio-vga device. It is simliar to virtio-gpu-pci,
but it also adds in vga compatibility, so guests without native
virtio-gpu support can drive the device in vga mode. It is compatible
with stdvga.
Written by Dave Airlie and Gerd Hoffmann.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
default-configs/x86_64-softmmu.mak | 1 +
hw/display/Makefile.objs | 1 +
hw/display/vga-pci.c | 8 +-
hw/display/vga_int.h | 6 ++
hw/display/virtio-vga.c | 175 +++++++++++++++++++++++++++++++++++++
5 files changed, 187 insertions(+), 4 deletions(-)
create mode 100644 hw/display/virtio-vga.c
diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak
index 2f2955b..62575eb 100644
--- a/default-configs/x86_64-softmmu.mak
+++ b/default-configs/x86_64-softmmu.mak
@@ -7,6 +7,7 @@ CONFIG_QXL=$(CONFIG_SPICE)
CONFIG_VGA_ISA=y
CONFIG_VGA_CIRRUS=y
CONFIG_VMWARE_VGA=y
+CONFIG_VIRTIO_VGA=y
CONFIG_VMMOUSE=y
CONFIG_SERIAL=y
CONFIG_PARALLEL=y
diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
index 26284a1..dd8ea76 100644
--- a/hw/display/Makefile.objs
+++ b/hw/display/Makefile.objs
@@ -37,3 +37,4 @@ common-obj-$(CONFIG_QXL) += qxl.o qxl-logger.o qxl-render.o
obj-$(CONFIG_VIRTIO) += virtio-gpu.o
obj-$(CONFIG_VIRTIO_PCI) += virtio-gpu-pci.o
+obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c
index 0ed44c7..1dfa331 100644
--- a/hw/display/vga-pci.c
+++ b/hw/display/vga-pci.c
@@ -204,10 +204,10 @@ static const MemoryRegionOps pci_vga_qext_ops = {
.endianness = DEVICE_LITTLE_ENDIAN,
};
-static void pci_std_vga_mmio_region_init(VGACommonState *s,
- MemoryRegion *parent,
- MemoryRegion *subs,
- bool qext)
+void pci_std_vga_mmio_region_init(VGACommonState *s,
+ MemoryRegion *parent,
+ MemoryRegion *subs,
+ bool qext)
{
memory_region_init_io(&subs[0], NULL, &pci_vga_ioport_ops, s,
"vga ioports remapped", PCI_VGA_IOPORT_SIZE);
diff --git a/hw/display/vga_int.h b/hw/display/vga_int.h
index fcfcc5f..40ba6a4 100644
--- a/hw/display/vga_int.h
+++ b/hw/display/vga_int.h
@@ -219,4 +219,10 @@ extern const uint8_t gr_mask[16];
extern const MemoryRegionOps vga_mem_ops;
+/* vga-pci.c */
+void pci_std_vga_mmio_region_init(VGACommonState *s,
+ MemoryRegion *parent,
+ MemoryRegion *subs,
+ bool qext);
+
#endif
diff --git a/hw/display/virtio-vga.c b/hw/display/virtio-vga.c
new file mode 100644
index 0000000..94f9d0e
--- /dev/null
+++ b/hw/display/virtio-vga.c
@@ -0,0 +1,175 @@
+#include "hw/hw.h"
+#include "hw/pci/pci.h"
+#include "ui/console.h"
+#include "vga_int.h"
+#include "hw/virtio/virtio-pci.h"
+
+/*
+ * virtio-vga: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_VGA "virtio-vga"
+#define VIRTIO_VGA(obj) \
+ OBJECT_CHECK(VirtIOVGA, (obj), TYPE_VIRTIO_VGA)
+
+typedef struct VirtIOVGA {
+ VirtIOPCIProxy parent_obj;
+ VirtIOGPU vdev;
+ VGACommonState vga;
+ MemoryRegion vga_mrs[3];
+} VirtIOVGA;
+
+static void virtio_vga_invalidate_display(void *opaque)
+{
+ VirtIOVGA *vvga = opaque;
+
+ if (vvga->vdev.enable) {
+ virtio_gpu_ops.invalidate(&vvga->vdev);
+ } else {
+ vvga->vga.hw_ops->invalidate(&vvga->vga);
+ }
+}
+
+static void virtio_vga_update_display(void *opaque)
+{
+ VirtIOVGA *vvga = opaque;
+
+ if (vvga->vdev.enable) {
+ virtio_gpu_ops.gfx_update(&vvga->vdev);
+ } else {
+ vvga->vga.hw_ops->gfx_update(&vvga->vga);
+ }
+}
+
+static void virtio_vga_text_update(void *opaque, console_ch_t *chardata)
+{
+ VirtIOVGA *vvga = opaque;
+
+ if (vvga->vdev.enable) {
+ if (virtio_gpu_ops.text_update) {
+ virtio_gpu_ops.text_update(&vvga->vdev, chardata);
+ }
+ } else {
+ if (vvga->vga.hw_ops->text_update) {
+ vvga->vga.hw_ops->text_update(&vvga->vga, chardata);
+ }
+ }
+}
+
+static int virtio_vga_ui_info(void *opaque, uint32_t idx, QemuUIInfo *info)
+{
+ VirtIOVGA *vvga = opaque;
+
+ if (virtio_gpu_ops.ui_info) {
+ return virtio_gpu_ops.ui_info(&vvga->vdev, idx, info);
+ }
+ return -1;
+}
+
+static const GraphicHwOps virtio_vga_ops = {
+ .invalidate = virtio_vga_invalidate_display,
+ .gfx_update = virtio_vga_update_display,
+ .text_update = virtio_vga_text_update,
+ .ui_info = virtio_vga_ui_info,
+};
+
+/* VGA device wrapper around PCI device around virtio GPU */
+static void virtio_vga_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
+{
+ VirtIOVGA *vvga = VIRTIO_VGA(vpci_dev);
+ VirtIOGPU *g = &vvga->vdev;
+ VGACommonState *vga = &vvga->vga;
+ uint32_t offset;
+
+ /* init vga compat bits */
+ vga->vram_size_mb = 8;
+ vga_common_init(vga, OBJECT(vpci_dev), false);
+ vga_init(vga, OBJECT(vpci_dev), pci_address_space(&vpci_dev->pci_dev),
+ pci_address_space_io(&vpci_dev->pci_dev), true);
+ pci_register_bar(&vpci_dev->pci_dev, 0,
+ PCI_BASE_ADDRESS_MEM_PREFETCH, &vga->vram);
+
+ /*
+ * Configure virtio bar and regions
+ *
+ * We use bar #2 for the mmio regions, to be compatible with stdvga.
+ * virtio regions are moved to the end of bar #2, to make room for
+ * the stdvga mmio registers at the start of bar #2.
+ */
+ vpci_dev->modern_mem_bar = 2;
+ vpci_dev->msix_bar = 4;
+ offset = memory_region_size(&vpci_dev->modern_bar);
+ offset -= vpci_dev->notify.size;
+ vpci_dev->notify.offset = offset;
+ offset -= vpci_dev->device.size;
+ vpci_dev->device.offset = offset;
+ offset -= vpci_dev->isr.size;
+ vpci_dev->isr.offset = offset;
+ offset -= vpci_dev->common.size;
+ vpci_dev->common.offset = offset;
+
+ /* init virtio bits */
+ qdev_set_parent_bus(DEVICE(g), BUS(&vpci_dev->bus));
+ /* force virtio-1.0 */
+ vpci_dev->flags &= ~VIRTIO_PCI_FLAG_DISABLE_MODERN;
+ vpci_dev->flags |= VIRTIO_PCI_FLAG_DISABLE_LEGACY;
+ object_property_set_bool(OBJECT(g), true, "realized", errp);
+
+ /* add stdvga mmio regions */
+ pci_std_vga_mmio_region_init(vga, &vpci_dev->modern_bar,
+ vvga->vga_mrs, true);
+
+ vga->con = g->scanout[0].con;
+ graphic_console_set_hwops(vga->con, &virtio_vga_ops, vvga);
+}
+
+static void virtio_vga_reset(DeviceState *dev)
+{
+ VirtIOVGA *vvga = VIRTIO_VGA(dev);
+ vvga->vdev.enable = 0;
+
+ vga_dirty_log_start(&vvga->vga);
+}
+
+static Property virtio_vga_properties[] = {
+ DEFINE_VIRTIO_GPU_PROPERTIES(VirtIOVGA, vdev.conf),
+ DEFINE_VIRTIO_GPU_PCI_PROPERTIES(VirtIOPCIProxy),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
+static void virtio_vga_class_init(ObjectClass *klass, void *data)
+{
+ DeviceClass *dc = DEVICE_CLASS(klass);
+ VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+ PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
+ dc->props = virtio_vga_properties;
+ dc->reset = virtio_vga_reset;
+ dc->hotpluggable = false;
+
+ k->realize = virtio_vga_realize;
+ pcidev_k->romfile = "vgabios-virtio.bin";
+ pcidev_k->class_id = PCI_CLASS_DISPLAY_VGA;
+}
+
+static void virtio_vga_inst_initfn(Object *obj)
+{
+ VirtIOVGA *dev = VIRTIO_VGA(obj);
+ object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_GPU);
+ object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_vga_info = {
+ .name = TYPE_VIRTIO_VGA,
+ .parent = TYPE_VIRTIO_PCI,
+ .instance_size = sizeof(struct VirtIOVGA),
+ .instance_init = virtio_vga_inst_initfn,
+ .class_init = virtio_vga_class_init,
+};
+
+static void virtio_vga_register_types(void)
+{
+ type_register_static(&virtio_vga_info);
+}
+
+type_init(virtio_vga_register_types)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 4/6] virtio-vga: add '-vga virtio' support
2015-06-12 8:39 [Qemu-devel] [PATCH v2 0/6] virtio-gpu: pci support bits Gerd Hoffmann
` (2 preceding siblings ...)
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 3/6] virtio-vga: add virtio gpu device with vga compatibility Gerd Hoffmann
@ 2015-06-12 8:39 ` Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 5/6] virtio-vga: add vgabios configuration Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 6/6] [testing-only] virtio-vga: add vgabios binary Gerd Hoffmann
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-06-12 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Dave Airlie, Paolo Bonzini, Gerd Hoffmann, Michael S. Tsirkin
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 <airlied@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
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 ec8e7de..43e0cd8 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 750f3da..2158043 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 853d90a..7beb926 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 1d281f6..c6221d4 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 9542095..2201e27 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)) {
--
1.8.3.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 5/6] virtio-vga: add vgabios configuration
2015-06-12 8:39 [Qemu-devel] [PATCH v2 0/6] virtio-gpu: pci support bits Gerd Hoffmann
` (3 preceding siblings ...)
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 4/6] virtio-vga: add '-vga virtio' support Gerd Hoffmann
@ 2015-06-12 8:39 ` Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 6/6] [testing-only] virtio-vga: add vgabios binary Gerd Hoffmann
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-06-12 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add seavgabios configuration for virtio-vga,
hook up the new vgabios in the makefiles.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
Makefile | 2 +-
roms/Makefile | 2 +-
roms/config.vga-virtio | 6 ++++++
3 files changed, 8 insertions(+), 2 deletions(-)
create mode 100644 roms/config.vga-virtio
diff --git a/Makefile b/Makefile
index 2d52536..3f97904 100644
--- a/Makefile
+++ b/Makefile
@@ -342,7 +342,7 @@ bepo cz
ifdef INSTALL_BLOBS
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
-vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin \
+vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.bin \
acpi-dsdt.aml q35-acpi-dsdt.aml \
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
diff --git a/roms/Makefile b/roms/Makefile
index 610b534..c76cd5b 100644
--- a/roms/Makefile
+++ b/roms/Makefile
@@ -1,5 +1,5 @@
-vgabios_variants := stdvga cirrus vmware qxl isavga
+vgabios_variants := stdvga cirrus vmware qxl isavga virtio
vgabios_targets := $(subst -isavga,,$(patsubst %,vgabios-%.bin,$(vgabios_variants)))
pxerom_variants := e1000 eepro100 ne2k_pci pcnet rtl8139 virtio
pxerom_targets := 8086100e 80861209 10500940 10222000 10ec8139 1af41000
diff --git a/roms/config.vga-virtio b/roms/config.vga-virtio
new file mode 100644
index 0000000..aa7a15b
--- /dev/null
+++ b/roms/config.vga-virtio
@@ -0,0 +1,6 @@
+CONFIG_BUILD_VGABIOS=y
+CONFIG_VGA_BOCHS=y
+CONFIG_VGA_PCI=y
+CONFIG_OVERRIDE_PCI_ID=y
+CONFIG_VGA_VID=0x1af4
+CONFIG_VGA_DID=0x1050
--
1.8.3.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 6/6] [testing-only] virtio-vga: add vgabios binary
2015-06-12 8:39 [Qemu-devel] [PATCH v2 0/6] virtio-gpu: pci support bits Gerd Hoffmann
` (4 preceding siblings ...)
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 5/6] virtio-vga: add vgabios configuration Gerd Hoffmann
@ 2015-06-12 8:39 ` Gerd Hoffmann
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-06-12 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add prebuilt vgabios-virtio.bin binary.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
pc-bios/vgabios-virtio.bin | Bin 0 -> 38912 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 pc-bios/vgabios-virtio.bin
diff --git a/pc-bios/vgabios-virtio.bin b/pc-bios/vgabios-virtio.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ef283a2137e17cf5e818eb347a7b5ab77cb8aeef
GIT binary patch
literal 38912
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
T^&ZWf`2UKIzvKD;j|2Y)FgWG@
literal 0
HcmV?d00001
--
1.8.3.1
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-06-12 8:41 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-12 8:39 [Qemu-devel] [PATCH v2 0/6] virtio-gpu: pci support bits Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 1/6] virtio-gpu: fix error message Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 2/6] virtio-gpu-pci: add virtio pci support Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 3/6] virtio-vga: add virtio gpu device with vga compatibility Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 4/6] virtio-vga: add '-vga virtio' support Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 5/6] virtio-vga: add vgabios configuration Gerd Hoffmann
2015-06-12 8:39 ` [Qemu-devel] [PATCH v2 6/6] [testing-only] virtio-vga: add vgabios binary Gerd Hoffmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).