[10/14] vhost: introduce wrappers for some vDPA ops
Checks
Commit Message
This patch is preliminary work to make the vDPA device
structure opaque to the user application. Some callbacks
of the vDPA devices are used to query capabilities before
attaching to a Vhost port. This patch introduces wrappers
for these ops.
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
lib/librte_vhost/rte_vdpa.h | 52 ++++++++++++++++++++++++++
lib/librte_vhost/rte_vhost_version.map | 3 ++
lib/librte_vhost/vdpa.c | 28 ++++++++++++++
3 files changed, 83 insertions(+)
@@ -185,4 +185,56 @@ rte_vhost_host_notifier_ctrl(int vid, bool enable);
__rte_experimental
int
rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Get number of queue pairs supported by the vDPA device
+ *
+ * @param dev
+ * vDP device pointer
+ * @param queue_num
+ * pointer on where the number of queue is stored
+ * @return
+ * 0 on success, -1 on failure
+ */
+__rte_experimental
+int
+rte_vdpa_get_queue_num(struct rte_vdpa_device *dev, uint32_t *queue_num);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Get the Virtio features supported by the vDPA device
+ *
+ * @param dev
+ * vDP device pointer
+ * @param features
+ * pointer on where the supported features are stored
+ * @return
+ * 0 on success, -1 on failure
+ */
+__rte_experimental
+int
+rte_vdpa_get_features(struct rte_vdpa_device *dev, uint64_t *features);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Get the Vhost-user protocol features supported by the vDPA device
+ *
+ * @param dev
+ * vDP device pointer
+ * @param features
+ * pointer on where the supported protocol features are stored
+ * @return
+ * 0 on success, -1 on failure
+ */
+__rte_experimental
+int
+rte_vdpa_get_protocol_features(struct rte_vdpa_device *dev, uint64_t *features);
+
#endif /* _RTE_VDPA_H_ */
@@ -67,4 +67,7 @@ EXPERIMENTAL {
rte_vhost_slave_config_change;
rte_vdpa_find_device_by_name;
rte_vdpa_get_rte_device;
+ rte_vdpa_get_queue_num;
+ rte_vdpa_get_features;
+ rte_vdpa_get_protocol_features;
};
@@ -229,6 +229,34 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
return -1;
}
+int
+rte_vdpa_get_queue_num(struct rte_vdpa_device *dev, uint32_t *queue_num)
+{
+ if (dev == NULL || dev->ops == NULL || dev->ops->get_queue_num == NULL)
+ return -1;
+
+ return dev->ops->get_queue_num(dev, queue_num);
+}
+
+int
+rte_vdpa_get_features(struct rte_vdpa_device *dev, uint64_t *features)
+{
+ if (dev == NULL || dev->ops == NULL || dev->ops->get_features == NULL)
+ return -1;
+
+ return dev->ops->get_features(dev, features);
+}
+
+int
+rte_vdpa_get_protocol_features(struct rte_vdpa_device *dev, uint64_t *features)
+{
+ if (dev == NULL || dev->ops == NULL ||
+ dev->ops->get_protocol_features == NULL)
+ return -1;
+
+ return dev->ops->get_protocol_features(dev, features);
+}
+
static int
vdpa_dev_match(struct rte_vdpa_device *dev,
const struct rte_device *rte_dev)