X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_vhost%2Frte_vdpa.h;h=f074ec0c4a6f96be5520849e12950fda8d8e630f;hb=8fc9eaaac7181bdfc024230a63a89d550c625dd0;hp=90465ca2655b0a2a92865c5b1f729ae78190d063;hpb=d7280c9fffcb54cc7fdde9a001c650ed01eeb0fa;p=dpdk.git diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h index 90465ca265..f074ec0c4a 100644 --- a/lib/librte_vhost/rte_vdpa.h +++ b/lib/librte_vhost/rte_vdpa.h @@ -11,77 +11,174 @@ * Device specific vhost lib */ -#include -#include "rte_vhost.h" +/** Maximum name length for statistics counters */ +#define RTE_VDPA_STATS_NAME_SIZE 64 -#define MAX_VDPA_NAME_LEN 128 +struct rte_vdpa_device; -enum vdpa_addr_type { - PCI_ADDR, - VDPA_ADDR_MAX +/** + * A vDPA device statistic structure + * + * This structure is used by rte_vdpa_stats_get() to provide + * statistics from the HW vDPA device. + * + * It maps a name id, corresponding to an index in the array returned + * by rte_vdpa_get_stats_names, to a statistic value. + */ +struct rte_vdpa_stat { + uint64_t id; /**< The index in stats name array */ + uint64_t value; /**< The statistic counter value */ }; -struct rte_vdpa_dev_addr { - enum vdpa_addr_type type; - union { - uint8_t __dummy[64]; - struct rte_pci_addr pci_addr; - }; +/** + * A name element for statistics + * + * An array of this structure is returned by rte_vdpa_get_stats_names + * It lists the names of extended statistics for a PMD. The rte_vdpa_stat + * structure references these names by their array index + */ +struct rte_vdpa_stat_name { + char name[RTE_VDPA_STATS_NAME_SIZE]; /**< The statistic name */ }; -struct rte_vdpa_dev_ops { - /* Get capabilities of this device */ - int (*get_queue_num)(int did, uint32_t *queue_num); - int (*get_features)(int did, uint64_t *features); - int (*get_protocol_features)(int did, uint64_t *protocol_features); - - /* Driver configure/close the device */ - int (*dev_conf)(int vid); - int (*dev_close)(int vid); - - /* Enable/disable this vring */ - int (*set_vring_state)(int vid, int vring, int state); - - /* Set features when changed */ - int (*set_features)(int vid); - - /* Destination operations when migration done */ - int (*migration_done)(int vid); - - /* Get the vfio group fd */ - int (*get_vfio_group_fd)(int vid); - - /* Get the vfio device fd */ - int (*get_vfio_device_fd)(int vid); - - /* Get the notify area info of the queue */ - int (*get_notify_area)(int vid, int qid, - uint64_t *offset, uint64_t *size); +/** + * Find the device id of a vdpa device from its name + * + * @param name + * the vdpa device name + * @return + * vDPA device pointer on success, NULL on failure + */ +struct rte_vdpa_device * +rte_vdpa_find_device_by_name(const char *name); - /* Reserved for future extension */ - void *reserved[5]; -}; +/** + * Get the generic device from the vdpa device + * + * @param vdpa_dev + * the vdpa device pointer + * @return + * generic device pointer on success, NULL on failure + */ +struct rte_device * +rte_vdpa_get_rte_device(struct rte_vdpa_device *vdpa_dev); -struct rte_vdpa_device { - struct rte_vdpa_dev_addr addr; - struct rte_vdpa_dev_ops *ops; -} __rte_cache_aligned; +/** + * 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 + */ +int +rte_vdpa_get_queue_num(struct rte_vdpa_device *dev, uint32_t *queue_num); -/* Register a vdpa device, return did if successful, -1 on failure */ -int __rte_experimental -rte_vdpa_register_device(struct rte_vdpa_dev_addr *addr, - struct rte_vdpa_dev_ops *ops); +/** + * 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 + */ +int +rte_vdpa_get_features(struct rte_vdpa_device *dev, uint64_t *features); -/* Unregister a vdpa device, return -1 on failure */ -int __rte_experimental -rte_vdpa_unregister_device(int did); +/** + * 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 + */ +int +rte_vdpa_get_protocol_features(struct rte_vdpa_device *dev, uint64_t *features); -/* Find did of a vdpa device, return -1 on failure */ -int __rte_experimental -rte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr); +/** + * 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 + */ +int +rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m); -/* Find a vdpa device based on did */ -struct rte_vdpa_device * __rte_experimental -rte_vdpa_get_device(int did); +/** + * Retrieve names of statistics of a vDPA device. + * + * There is an assumption that 'stat_names' and 'stats' arrays are matched + * by array index: stats_names[i].name => stats[i].value + * + * And the array index is same with id field of 'struct rte_vdpa_stat': + * stats[i].id == i + * + * @param dev + * vDPA device pointer + * @param stats_names + * array of at least size elements to be filled. + * If set to NULL, the function returns the required number of elements. + * @param size + * The number of elements in stats_names array. + * @return + * A negative value on error, otherwise the number of entries filled in the + * stats name array. + */ +int +rte_vdpa_get_stats_names(struct rte_vdpa_device *dev, + struct rte_vdpa_stat_name *stats_names, + unsigned int size); +/** + * Retrieve statistics of a vDPA device. + * + * There is an assumption that 'stat_names' and 'stats' arrays are matched + * by array index: stats_names[i].name => stats[i].value + * + * And the array index is same with id field of 'struct rte_vdpa_stat': + * stats[i].id == i + * + * @param dev + * vDPA device pointer + * @param qid + * queue id + * @param stats + * A pointer to a table of structure of type rte_vdpa_stat to be filled with + * device statistics ids and values. + * @param n + * The number of elements in stats array. + * @return + * A negative value on error, otherwise the number of entries filled in the + * stats table. + */ +int +rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid, + struct rte_vdpa_stat *stats, unsigned int n); +/** + * Reset statistics of a vDPA device. + * + * @param dev + * vDPA device pointer + * @param qid + * queue id + * @return + * 0 on success, a negative value on error. + */ +int +rte_vdpa_reset_stats(struct rte_vdpa_device *dev, uint16_t qid); #endif /* _RTE_VDPA_H_ */