vhost: introduce wrappers for some vDPA ops

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>
Acked-by: Adrián Moreno <amorenoz@redhat.com>
This commit is contained in:
Maxime Coquelin 2020-06-26 16:04:37 +02:00 committed by Ferruh Yigit
parent 08a4f9bab3
commit 8d44fc3a81
3 changed files with 103 additions and 0 deletions

View File

@ -226,6 +226,78 @@ __rte_experimental
int int
rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m); 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);
/**
* @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 * @warning
* @b EXPERIMENTAL: this API may change without prior notice * @b EXPERIMENTAL: this API may change without prior notice

View File

@ -69,4 +69,7 @@ EXPERIMENTAL {
rte_vhost_slave_config_change; rte_vhost_slave_config_change;
rte_vdpa_find_device_by_name; rte_vdpa_find_device_by_name;
rte_vdpa_get_rte_device; rte_vdpa_get_rte_device;
rte_vdpa_get_queue_num;
rte_vdpa_get_features;
rte_vdpa_get_protocol_features;
}; };

View File

@ -229,6 +229,34 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
return -1; 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 int
rte_vdpa_get_stats_names(struct rte_vdpa_device *dev, rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,
struct rte_vdpa_stat_name *stats_names, struct rte_vdpa_stat_name *stats_names,