Commit 2e8567bb authored by Antonios Motakis's avatar Antonios Motakis Committed by Alex Williamson
Browse files

vfio/platform: return info for bound device



A VFIO userspace driver will start by opening the VFIO device
that corresponds to an IOMMU group, and will use the ioctl interface
to get the basic device info, such as number of memory regions and
interrupts, and their properties. This patch enables the
VFIO_DEVICE_GET_INFO ioctl call.
Signed-off-by: default avatarAntonios Motakis <a.motakis@virtualopensystems.com>
[Baptiste Reynal: added include in vfio_platform_common.c]
Signed-off-by: default avatarBaptiste Reynal <b.reynal@virtualopensystems.com>
Reviewed-by: default avatarEric Auger <eric.auger@linaro.org>
Tested-by: default avatarEric Auger <eric.auger@linaro.org>
Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent b13329ad
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/uaccess.h>
#include <linux/vfio.h> #include <linux/vfio.h>
#include "vfio_platform_private.h" #include "vfio_platform_private.h"
...@@ -38,10 +39,27 @@ static int vfio_platform_open(void *device_data) ...@@ -38,10 +39,27 @@ static int vfio_platform_open(void *device_data)
static long vfio_platform_ioctl(void *device_data, static long vfio_platform_ioctl(void *device_data,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
if (cmd == VFIO_DEVICE_GET_INFO) struct vfio_platform_device *vdev = device_data;
return -EINVAL; unsigned long minsz;
if (cmd == VFIO_DEVICE_GET_INFO) {
struct vfio_device_info info;
minsz = offsetofend(struct vfio_device_info, num_irqs);
if (copy_from_user(&info, (void __user *)arg, minsz))
return -EFAULT;
if (info.argsz < minsz)
return -EINVAL;
info.flags = vdev->flags;
info.num_regions = 0;
info.num_irqs = 0;
return copy_to_user((void __user *)arg, &info, minsz);
else if (cmd == VFIO_DEVICE_GET_REGION_INFO) } else if (cmd == VFIO_DEVICE_GET_REGION_INFO)
return -EINVAL; return -EINVAL;
else if (cmd == VFIO_DEVICE_GET_IRQ_INFO) else if (cmd == VFIO_DEVICE_GET_IRQ_INFO)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment