> -----Original Message----- > From: Gerd Hoffmann [mailto:kra...@redhat.com] > Sent: Wednesday, January 31, 2018 8:12 PM > To: qemu-devel@nongnu.org > Cc: Alex Williamson <alex.william...@redhat.com>; Zhang, Tina > <tina.zh...@intel.com>; intel-gvt-...@lists.freedesktop.org; Kirti Wankhede > <kwankh...@nvidia.com>; Gerd Hoffmann <kra...@redhat.com> > Subject: [RfC PATCH v2 4/5] vfio/display: core & wireup > > Infrastructure for display support. Must be enabled using 'display' property. > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > --- > hw/vfio/pci.h | 3 +++ > hw/vfio/display.c | 51 > +++++++++++++++++++++++++++++++++++++++++++++++++++ > hw/vfio/pci.c | 9 +++++++++ > hw/vfio/Makefile.objs | 2 +- > 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 > hw/vfio/display.c > > diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index a8fb3b3422..8f3295188c > 100644 > --- a/hw/vfio/pci.h > +++ b/hw/vfio/pci.h > @@ -130,6 +130,7 @@ typedef struct VFIOPCIDevice { #define > VFIO_FEATURE_ENABLE_IGD_OPREGION_BIT 2 #define > VFIO_FEATURE_ENABLE_IGD_OPREGION \ > (1 << VFIO_FEATURE_ENABLE_IGD_OPREGION_BIT) > + OnOffAuto display; > int32_t bootindex; > uint32_t igd_gms; > uint8_t pm_cap; > @@ -169,4 +170,6 @@ int vfio_pci_igd_opregion_init(VFIOPCIDevice *vdev, > struct vfio_region_info *info, > Error **errp); > > +int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp); > + > #endif /* HW_VFIO_VFIO_PCI_H */ > diff --git a/hw/vfio/display.c b/hw/vfio/display.c new file mode 100644 index > 0000000000..4ba93ea251 > --- /dev/null > +++ b/hw/vfio/display.c > @@ -0,0 +1,51 @@ > +/* > + * display support for mdev based vgpu devices > + * > + * Copyright Red Hat, Inc. 2017 > + * > + * Authors: > + * Gerd Hoffmann > + * > + * This work is licensed under the terms of the GNU GPL, version 2. > +See > + * the COPYING file in the top-level directory. > + */ > + > +#include "qemu/osdep.h" > +#include <linux/vfio.h> > +#include <sys/ioctl.h> > + > +#include "sysemu/sysemu.h" > +#include "ui/console.h" > +#include "pci.h" > + > +int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp) { > + struct vfio_device_gfx_plane_info probe; > + int ret; > + > + memset(&probe, 0, sizeof(probe)); > + probe.argsz = sizeof(probe); > + probe.flags = VFIO_GFX_PLANE_TYPE_PROBE | > VFIO_GFX_PLANE_TYPE_DMABUF; > + ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_QUERY_GFX_PLANE, &probe); > + if (ret == 0) { > + error_setg(errp, "vfio-display: dmabuf support not implemented yet"); > + return -1; > + } > + > + memset(&probe, 0, sizeof(probe)); > + probe.argsz = sizeof(probe); > + probe.flags = VFIO_GFX_PLANE_TYPE_PROBE | > VFIO_GFX_PLANE_TYPE_REGION; > + ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_QUERY_GFX_PLANE, &probe); > + if (ret == 0) { > + error_setg(errp, "vfio-display: region support not implemented yet"); > + return -1; > + } > + > + if (vdev->display == ON_OFF_AUTO_AUTO) { > + /* not an error in automatic mode */ > + return 0; > + } > + > + error_setg(errp, "vfio: device doesn't support any (known) display > method"); > + return -1; > +} > diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 2c71295125..cd5310c7ce > 100644 > --- a/hw/vfio/pci.c > +++ b/hw/vfio/pci.c > @@ -2873,6 +2873,13 @@ static void vfio_realize(PCIDevice *pdev, Error > **errp) > } > } > > + if (vdev->display != ON_OFF_AUTO_OFF) { > + ret = vfio_display_probe(vdev, errp); > + if (ret) { > + goto out_teardown; > + } > + } > + > vfio_register_err_notifier(vdev); > vfio_register_req_notifier(vdev); > vfio_setup_resetfn_quirk(vdev); > @@ -2977,6 +2984,8 @@ static void vfio_instance_init(Object *obj) static > Property vfio_pci_dev_properties[] = { > DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIOPCIDevice, host), > DEFINE_PROP_STRING("sysfsdev", VFIOPCIDevice, vbasedev.sysfsdev), > + DEFINE_PROP_ON_OFF_AUTO("display", VFIOPCIDevice, > + display, ON_OFF_AUTO_AUTO), Not "x-display"?
BR, Tina > DEFINE_PROP_UINT32("x-intx-mmap-timeout-ms", VFIOPCIDevice, > intx.mmap_timeout, 1100), > DEFINE_PROP_BIT("x-vga", VFIOPCIDevice, features, diff --git > a/hw/vfio/Makefile.objs b/hw/vfio/Makefile.objs index > c3ab9097f1..a2e7a0a7cf 100644 > --- a/hw/vfio/Makefile.objs > +++ b/hw/vfio/Makefile.objs > @@ -1,6 +1,6 @@ > ifeq ($(CONFIG_LINUX), y) > obj-$(CONFIG_SOFTMMU) += common.o > -obj-$(CONFIG_PCI) += pci.o pci-quirks.o > +obj-$(CONFIG_PCI) += pci.o pci-quirks.o display.o > obj-$(CONFIG_VFIO_CCW) += ccw.o > obj-$(CONFIG_SOFTMMU) += platform.o > obj-$(CONFIG_VFIO_XGMAC) += calxeda-xgmac.o > -- > 2.9.3