qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC post-2.5 PATCH 4/5] linux-headers/vfio: Update for pro


From: Alex Williamson
Subject: [Qemu-devel] [RFC post-2.5 PATCH 4/5] linux-headers/vfio: Update for proposed capabilities list
Date: Mon, 23 Nov 2015 14:14:06 -0700
User-agent: StGit/0.17.1-dirty

Signed-off-by: Alex Williamson <address@hidden>
---
 linux-headers/linux/vfio.h |   53 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 52 insertions(+), 1 deletion(-)

diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h
index aa276bc..c3860f6 100644
--- a/linux-headers/linux/vfio.h
+++ b/linux-headers/linux/vfio.h
@@ -52,6 +52,33 @@
 #define VFIO_TYPE      (';')
 #define VFIO_BASE      100
 
+/*
+ * For extension of INFO ioctls, VFIO makes use of a capability chain
+ * designed after PCI/e capabilities.  A flag bit indicates whether
+ * this capability chain is supported and a field defined in the fixed
+ * structure defines the offset of the first capability in the chain.
+ * This field is only valid when the corresponding bit in the flags
+ * bitmap is set.  This offset field is relative to the start of the
+ * INFO buffer, as is the next field within each capability header.
+ * The id within the header is a shared address space per INFO ioctl,
+ * while the version field is specific to the capability id.  The
+ * contents following the header are specific to the capability id.
+ */
+struct vfio_info_cap_header {
+       __u16   id;             /* Identifies capability */
+       __u16   version;        /* Version specific to the capability ID */
+       __u32   next;           /* Offset of next capability */
+};
+
+/*
+ * Callers of INFO ioctls passing insufficiently sized buffers will see
+ * the capability chain flag bit set, a zero value for the first capability
+ * offset (if available within the provided argsz), and argsz will be
+ * updated to report the necessary buffer size.  For compatibility, the
+ * INFO ioctl will not report error in this case, but the capability chain
+ * will not be available.
+ */
+
 /* -------- IOCTLs for VFIO file descriptor (/dev/vfio/vfio) -------- */
 
 /**
@@ -187,13 +214,37 @@ struct vfio_region_info {
 #define VFIO_REGION_INFO_FLAG_READ     (1 << 0) /* Region supports read */
 #define VFIO_REGION_INFO_FLAG_WRITE    (1 << 1) /* Region supports write */
 #define VFIO_REGION_INFO_FLAG_MMAP     (1 << 2) /* Region supports mmap */
+#define VFIO_REGION_INFO_FLAG_CAPS     (1 << 3) /* Info supports caps */
        __u32   index;          /* Region index */
-       __u32   resv;           /* Reserved for alignment */
+       __u32   cap_offset;     /* Offset within info struct of first cap */
        __u64   size;           /* Region size (bytes) */
        __u64   offset;         /* Region offset from start of device fd */
 };
 #define VFIO_DEVICE_GET_REGION_INFO    _IO(VFIO_TYPE, VFIO_BASE + 8)
 
+/*
+ * The sparse mmap capability allows finer granularity of specifying areas
+ * within a region with mmap support.  When specified, the user should only
+ * mmap the offset ranges specified by the areas array.  mmaps outside of the
+ * areas specified may fail (such as the range covering a PCI MSI-X table) or
+ * may result in improper device behavior.
+ *
+ * The structures below define version 1 of this capability.
+ */
+#define VFIO_REGION_INFO_CAP_SPARSE_MMAP       1
+
+struct vfio_region_sparse_mmap_area {
+       __u64   offset; /* Offset of mmap'able area within region */
+       __u64   size;   /* Size of mmap'able area */
+};
+
+struct vfio_region_info_cap_sparse_mmap {
+       struct vfio_info_cap_header header;
+       __u32   nr_areas;
+       __u32   reserved;
+       struct vfio_region_sparse_mmap_area areas[];
+};
+
 /**
  * VFIO_DEVICE_GET_IRQ_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 9,
  *                                 struct vfio_irq_info)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]