f-stack/dpdk/lib/librte_vhost/rte_vdpa.h

185 lines
4.6 KiB
C
Raw Normal View History

2019-06-25 11:12:58 +00:00
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2018 Intel Corporation
*/
#ifndef _RTE_VDPA_H_
#define _RTE_VDPA_H_
/**
* @file
*
* Device specific vhost lib
*/
2021-02-05 08:48:47 +00:00
/** Maximum name length for statistics counters */
#define RTE_VDPA_STATS_NAME_SIZE 64
2020-06-18 16:55:50 +00:00
2021-02-05 08:48:47 +00:00
struct rte_vdpa_device;
2019-06-25 11:12:58 +00:00
/**
2021-02-05 08:48:47 +00:00
* 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.
2019-06-25 11:12:58 +00:00
*/
2021-02-05 08:48:47 +00:00
struct rte_vdpa_stat {
uint64_t id; /**< The index in stats name array */
uint64_t value; /**< The statistic counter value */
2019-06-25 11:12:58 +00:00
};
/**
2021-02-05 08:48:47 +00:00
* 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
2019-06-25 11:12:58 +00:00
*/
2021-02-05 08:48:47 +00:00
struct rte_vdpa_stat_name {
char name[RTE_VDPA_STATS_NAME_SIZE]; /**< The statistic name */
2019-06-25 11:12:58 +00:00
};
/**
2021-02-05 08:48:47 +00:00
* 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
2019-06-25 11:12:58 +00:00
*/
2021-02-05 08:48:47 +00:00
struct rte_vdpa_device *
rte_vdpa_find_device_by_name(const char *name);
2019-06-25 11:12:58 +00:00
/**
2021-02-05 08:48:47 +00:00
* Get the generic device from the vdpa device
2019-06-25 11:12:58 +00:00
*
2021-02-05 08:48:47 +00:00
* @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);
/**
* Get number of queue pairs supported by the vDPA device
2019-06-25 11:12:58 +00:00
*
2021-02-05 08:48:47 +00:00
* @param dev
* vDP device pointer
* @param queue_num
* pointer on where the number of queue is stored
2019-06-25 11:12:58 +00:00
* @return
2021-02-05 08:48:47 +00:00
* 0 on success, -1 on failure
2019-06-25 11:12:58 +00:00
*/
2020-06-18 16:55:50 +00:00
int
2021-02-05 08:48:47 +00:00
rte_vdpa_get_queue_num(struct rte_vdpa_device *dev, uint32_t *queue_num);
2019-06-25 11:12:58 +00:00
/**
2021-02-05 08:48:47 +00:00
* Get the Virtio features supported by the vDPA device
2019-06-25 11:12:58 +00:00
*
2021-02-05 08:48:47 +00:00
* @param dev
* vDP device pointer
* @param features
* pointer on where the supported features are stored
2019-06-25 11:12:58 +00:00
* @return
2021-02-05 08:48:47 +00:00
* 0 on success, -1 on failure
2019-06-25 11:12:58 +00:00
*/
2020-06-18 16:55:50 +00:00
int
2021-02-05 08:48:47 +00:00
rte_vdpa_get_features(struct rte_vdpa_device *dev, uint64_t *features);
2019-06-25 11:12:58 +00:00
/**
2021-02-05 08:48:47 +00:00
* Get the Vhost-user protocol features supported by the vDPA device
2019-06-25 11:12:58 +00:00
*
2021-02-05 08:48:47 +00:00
* @param dev
* vDP device pointer
* @param features
* pointer on where the supported protocol features are stored
2019-06-25 11:12:58 +00:00
* @return
2021-02-05 08:48:47 +00:00
* 0 on success, -1 on failure
2019-06-25 11:12:58 +00:00
*/
2020-06-18 16:55:50 +00:00
int
2021-02-05 08:48:47 +00:00
rte_vdpa_get_protocol_features(struct rte_vdpa_device *dev, uint64_t *features);
2019-06-25 11:12:58 +00:00
/**
2021-02-05 08:48:47 +00:00
* 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.
2019-06-25 11:12:58 +00:00
*
2021-02-05 08:48:47 +00:00
* @param vid
* vhost device id
* @param qid
* vhost queue id
* @param vring_m
* mediated virtio ring pointer
2019-06-25 11:12:58 +00:00
* @return
2021-02-05 08:48:47 +00:00
* number of synced used entries on success, -1 on failure
2019-06-25 11:12:58 +00:00
*/
2021-02-05 08:48:47 +00:00
int
rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
2019-06-25 11:12:58 +00:00
/**
2021-02-05 08:48:47 +00:00
* Retrieve names of statistics of a vDPA device.
2019-06-25 11:12:58 +00:00
*
2021-02-05 08:48:47 +00:00
* There is an assumption that 'stat_names' and 'stats' arrays are matched
* by array index: stats_names[i].name => stats[i].value
2019-06-25 11:12:58 +00:00
*
2021-02-05 08:48:47 +00:00
* 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.
2019-06-25 11:12:58 +00:00
* @return
2021-02-05 08:48:47 +00:00
* A negative value on error, otherwise the number of entries filled in the
* stats name array.
2019-06-25 11:12:58 +00:00
*/
2020-06-18 16:55:50 +00:00
int
2021-02-05 08:48:47 +00:00
rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,
struct rte_vdpa_stat_name *stats_names,
unsigned int size);
2020-06-18 16:55:50 +00:00
/**
2021-02-05 08:48:47 +00:00
* Retrieve statistics of a vDPA device.
2020-06-18 16:55:50 +00:00
*
2021-02-05 08:48:47 +00:00
* There is an assumption that 'stat_names' and 'stats' arrays are matched
* by array index: stats_names[i].name => stats[i].value
2020-06-18 16:55:50 +00:00
*
2021-02-05 08:48:47 +00:00
* 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.
2020-06-18 16:55:50 +00:00
* @return
2021-02-05 08:48:47 +00:00
* A negative value on error, otherwise the number of entries filled in the
* stats table.
2020-06-18 16:55:50 +00:00
*/
int
2021-02-05 08:48:47 +00:00
rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid,
struct rte_vdpa_stat *stats, unsigned int n);
2020-06-18 16:55:50 +00:00
/**
2021-02-05 08:48:47 +00:00
* Reset statistics of a vDPA device.
2020-06-18 16:55:50 +00:00
*
2021-02-05 08:48:47 +00:00
* @param dev
* vDPA device pointer
2020-06-18 16:55:50 +00:00
* @param qid
2021-02-05 08:48:47 +00:00
* queue id
2020-06-18 16:55:50 +00:00
* @return
2021-02-05 08:48:47 +00:00
* 0 on success, a negative value on error.
2020-06-18 16:55:50 +00:00
*/
int
2021-02-05 08:48:47 +00:00
rte_vdpa_reset_stats(struct rte_vdpa_device *dev, uint16_t qid);
2019-06-25 11:12:58 +00:00
#endif /* _RTE_VDPA_H_ */