From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40471) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YR1Fw-0007B2-9a for qemu-devel@nongnu.org; Thu, 26 Feb 2015 11:25:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YR1Fr-00009P-Fv for qemu-devel@nongnu.org; Thu, 26 Feb 2015 11:25:43 -0500 Received: from mx1.redhat.com ([209.132.183.28]:36236) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YR1Fr-00009J-93 for qemu-devel@nongnu.org; Thu, 26 Feb 2015 11:25:39 -0500 Message-ID: <54EF48FF.7030603@redhat.com> Date: Thu, 26 Feb 2015 11:25:35 -0500 From: Max Reitz MIME-Version: 1.0 References: <1424687012-18524-1-git-send-email-kraxel@redhat.com> <1424687012-18524-8-git-send-email-kraxel@redhat.com> In-Reply-To: <1424687012-18524-8-git-send-email-kraxel@redhat.com> Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RfC PATCH 07/15] virtio-gpu-pci: add virtio pci support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann , qemu-devel@nongnu.org Cc: Dave Airlie , Anthony Liguori , "Michael S. Tsirkin" On 2015-02-23 at 05:23, Gerd Hoffmann wrote: > 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 > Signed-off-by: Gerd Hoffmann > --- > hw/display/Makefile.objs | 1 + > hw/display/virtio-gpu-pci.c | 71 +++++++++++++++++++++++++++++++++++++++++++++ > hw/virtio/virtio-pci.h | 15 ++++++++++ > include/hw/pci/pci.h | 1 + > 4 files changed, 88 insertions(+) > create mode 100644 hw/display/virtio-gpu-pci.c > > diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs > index 6990634..ab6b791 100644 > --- a/hw/display/Makefile.objs > +++ b/hw/display/Makefile.objs > @@ -35,3 +35,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..77c5e06 > --- /dev/null > +++ b/hw/display/virtio-gpu-pci.c > @@ -0,0 +1,71 @@ > +/* > + * 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 int virtio_gpu_pci_init(VirtIOPCIProxy *vpci_dev) > +{ > + VirtIOGPUPCI *vgpu = VIRTIO_GPU_PCI(vpci_dev); > + DeviceState *vdev = DEVICE(&vgpu->vdev); > + > + qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus)); > + if (qdev_init(vdev) < 0) { > + return -1; > + } > + return 0; > +} > + > +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->init = virtio_gpu_pci_init; > + pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; > + pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_GPU; > + pcidev_k->revision = VIRTIO_PCI_ABI_VERSION; > + 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 a273c33..edb4752 100644 > --- a/hw/virtio/virtio-pci.h > +++ b/hw/virtio/virtio-pci.h > @@ -24,6 +24,7 @@ > #include "hw/virtio/virtio-balloon.h" > #include "hw/virtio/virtio-bus.h" > #include "hw/virtio/virtio-9p.h" > +#include "hw/virtio/virtio-gpu.h" > #ifdef CONFIG_VIRTFS > #include "hw/9pfs/virtio-9p.h" > #endif > @@ -39,6 +40,7 @@ typedef struct VirtIOSerialPCI VirtIOSerialPCI; > typedef struct VirtIONetPCI VirtIONetPCI; > typedef struct VHostSCSIPCI VHostSCSIPCI; > typedef struct VirtIORngPCI VirtIORngPCI; > +typedef struct VirtIOGPUPCI VirtIOGPUPCI; > > /* virtio-pci-bus */ > > @@ -227,6 +229,19 @@ struct VirtIORngPCI { > VirtIORNG 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 > > diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h > index bdee464..4a18ef5 100644 > --- a/include/hw/pci/pci.h > +++ b/include/hw/pci/pci.h > @@ -81,6 +81,7 @@ > #define PCI_DEVICE_ID_VIRTIO_SCSI 0x1004 > #define PCI_DEVICE_ID_VIRTIO_RNG 0x1005 > #define PCI_DEVICE_ID_VIRTIO_9P 0x1009 > +#define PCI_DEVICE_ID_VIRTIO_GPU 0x1010 > > #define PCI_VENDOR_ID_REDHAT 0x1b36 > #define PCI_DEVICE_ID_REDHAT_BRIDGE 0x0001 Would you mind adding this to docs/specs/pci-ids.txt? Max