1*a9994687SGerd Hoffmann /* 2*a9994687SGerd Hoffmann * display support for mdev based vgpu devices 3*a9994687SGerd Hoffmann * 4*a9994687SGerd Hoffmann * Copyright Red Hat, Inc. 2017 5*a9994687SGerd Hoffmann * 6*a9994687SGerd Hoffmann * Authors: 7*a9994687SGerd Hoffmann * Gerd Hoffmann 8*a9994687SGerd Hoffmann * 9*a9994687SGerd Hoffmann * This work is licensed under the terms of the GNU GPL, version 2. See 10*a9994687SGerd Hoffmann * the COPYING file in the top-level directory. 11*a9994687SGerd Hoffmann */ 12*a9994687SGerd Hoffmann 13*a9994687SGerd Hoffmann #include "qemu/osdep.h" 14*a9994687SGerd Hoffmann #include <linux/vfio.h> 15*a9994687SGerd Hoffmann #include <sys/ioctl.h> 16*a9994687SGerd Hoffmann 17*a9994687SGerd Hoffmann #include "sysemu/sysemu.h" 18*a9994687SGerd Hoffmann #include "ui/console.h" 19*a9994687SGerd Hoffmann #include "qapi/error.h" 20*a9994687SGerd Hoffmann #include "pci.h" 21*a9994687SGerd Hoffmann 22*a9994687SGerd Hoffmann int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp) 23*a9994687SGerd Hoffmann { 24*a9994687SGerd Hoffmann struct vfio_device_gfx_plane_info probe; 25*a9994687SGerd Hoffmann int ret; 26*a9994687SGerd Hoffmann 27*a9994687SGerd Hoffmann memset(&probe, 0, sizeof(probe)); 28*a9994687SGerd Hoffmann probe.argsz = sizeof(probe); 29*a9994687SGerd Hoffmann probe.flags = VFIO_GFX_PLANE_TYPE_PROBE | VFIO_GFX_PLANE_TYPE_DMABUF; 30*a9994687SGerd Hoffmann ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_QUERY_GFX_PLANE, &probe); 31*a9994687SGerd Hoffmann if (ret == 0) { 32*a9994687SGerd Hoffmann error_setg(errp, "vfio-display: dmabuf support not implemented yet"); 33*a9994687SGerd Hoffmann return -1; 34*a9994687SGerd Hoffmann } 35*a9994687SGerd Hoffmann 36*a9994687SGerd Hoffmann memset(&probe, 0, sizeof(probe)); 37*a9994687SGerd Hoffmann probe.argsz = sizeof(probe); 38*a9994687SGerd Hoffmann probe.flags = VFIO_GFX_PLANE_TYPE_PROBE | VFIO_GFX_PLANE_TYPE_REGION; 39*a9994687SGerd Hoffmann ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_QUERY_GFX_PLANE, &probe); 40*a9994687SGerd Hoffmann if (ret == 0) { 41*a9994687SGerd Hoffmann error_setg(errp, "vfio-display: region support not implemented yet"); 42*a9994687SGerd Hoffmann return -1; 43*a9994687SGerd Hoffmann } 44*a9994687SGerd Hoffmann 45*a9994687SGerd Hoffmann if (vdev->display == ON_OFF_AUTO_AUTO) { 46*a9994687SGerd Hoffmann /* not an error in automatic mode */ 47*a9994687SGerd Hoffmann return 0; 48*a9994687SGerd Hoffmann } 49*a9994687SGerd Hoffmann 50*a9994687SGerd Hoffmann error_setg(errp, "vfio: device doesn't support any (known) display method"); 51*a9994687SGerd Hoffmann return -1; 52*a9994687SGerd Hoffmann } 53*a9994687SGerd Hoffmann 54*a9994687SGerd Hoffmann void vfio_display_finalize(VFIOPCIDevice *vdev) 55*a9994687SGerd Hoffmann { 56*a9994687SGerd Hoffmann } 57