On 6/24/20 2:26 PM, Maxime Coquelin wrote:
> 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.coque...@redhat.com>
> ---
> lib/librte_vhost/rte_vdpa.h | 72 ++++++++++++++++++++++++++
> lib/librte_vhost/rte_vhost_version.map | 3 ++
> lib/librte_vhost/vdpa.c | 28 ++++++++++
> 3 files changed, 103 insertions(+)
>
> diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h
> index dbdc273702..eda56dd556 100644
> --- a/lib/librte_vhost/rte_vdpa.h
> +++ b/lib/librte_vhost/rte_vdpa.h
> @@ -226,6 +226,78 @@ __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
Here and in the comments of the following function declarations: s/vDP/vDPA/?
> + * @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);
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Synchronize the used ring from mediated ring to guest, log dirty
> + * page for each writeable buffer, caller should handle the used
> + * ring logging before device stop.
> + *
> + * @param vid
> + * vhost device id
> + * @param qid
> + * vhost queue id
> + * @param vring_m
> + * mediated virtio ring pointer
> + * @return
> + * number of synced used entries on success, -1 on failure
> + */
> +__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
> diff --git a/lib/librte_vhost/rte_vhost_version.map
> b/lib/librte_vhost/rte_vhost_version.map
> index d9124d0462..7a919102cf 100644
> --- a/lib/librte_vhost/rte_vhost_version.map
> +++ b/lib/librte_vhost/rte_vhost_version.map
> @@ -70,4 +70,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;
> };
> diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c
> index dc2a138009..d7f9839eb2 100644
> --- a/lib/librte_vhost/vdpa.c
> +++ b/lib/librte_vhost/vdpa.c
> @@ -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);
> +}
> +
> int
> rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,
> struct rte_vdpa_stat_name *stats_names,
>
Apart from the typo:
Acked-by: Adrián Moreno <amore...@redhat.com>
--
Adrián Moreno