/* These are not C++-aware. */
#include <linux/vhost.h>
#include <linux/virtio_ring.h>
+#include <linux/virtio_net.h>
#define RTE_VHOST_USER_CLIENT (1ULL << 0)
#define RTE_VHOST_USER_NO_RECONNECT (1ULL << 1)
RTE_VHOST_MSG_RESULT_OK = 0,
/* Message handling successful and reply prepared */
RTE_VHOST_MSG_RESULT_REPLY = 1,
+ /* Message not handled */
+ RTE_VHOST_MSG_RESULT_NOT_HANDLED,
};
/**
- * Function prototype for the vhost backend to handler specific vhost user
- * messages prior to the master message handling
+ * Function prototype for the vhost backend to handle specific vhost user
+ * messages.
*
* @param vid
* vhost device id
* @param msg
* Message pointer.
- * @param skip_master
- * If the handler requires skipping the master message handling, this variable
- * shall be written 1, otherwise 0.
* @return
- * VH_RESULT_OK on success, VH_RESULT_REPLY on success with reply,
- * VH_RESULT_ERR on failure
+ * RTE_VHOST_MSG_RESULT_OK on success,
+ * RTE_VHOST_MSG_RESULT_REPLY on success with reply,
+ * RTE_VHOST_MSG_RESULT_ERR on failure,
+ * RTE_VHOST_MSG_RESULT_NOT_HANDLED if message was not handled.
*/
-typedef enum rte_vhost_msg_result (*rte_vhost_msg_pre_handle)(int vid,
- void *msg, uint32_t *skip_master);
-
-/**
- * Function prototype for the vhost backend to handler specific vhost user
- * messages after the master message handling is done
- *
- * @param vid
- * vhost device id
- * @param msg
- * Message pointer.
- * @return
- * VH_RESULT_OK on success, VH_RESULT_REPLY on success with reply,
- * VH_RESULT_ERR on failure
- */
-typedef enum rte_vhost_msg_result (*rte_vhost_msg_post_handle)(int vid,
- void *msg);
+typedef enum rte_vhost_msg_result (*rte_vhost_msg_handle)(int vid, void *msg);
/**
* Optional vhost user message handlers.
*/
struct rte_vhost_user_extern_ops {
- rte_vhost_msg_pre_handle pre_msg_handle;
- rte_vhost_msg_post_handle post_msg_handle;
+ /* Called prior to the master message handling. */
+ rte_vhost_msg_handle pre_msg_handle;
+ /* Called after the master message handling. */
+ rte_vhost_msg_handle post_msg_handle;
};
/**
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_driver_attach_vdpa_device(const char *path, int did);
/**
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_driver_detach_vdpa_device(const char *path);
/**
* @return
* Device id, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_driver_get_vdpa_device_id(const char *path);
/**
*/
int rte_vhost_driver_get_features(const char *path, uint64_t *features);
+/**
+ * Set the protocol feature bits before feature negotiation.
+ *
+ * @param path
+ * The vhost-user socket file path
+ * @param protocol_features
+ * Supported protocol features
+ * @return
+ * 0 on success, -1 on failure
+ */
+__rte_experimental
+int
+rte_vhost_driver_set_protocol_features(const char *path,
+ uint64_t protocol_features);
+
/**
* Get the protocol feature bits before feature negotiation.
*
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_driver_get_protocol_features(const char *path,
uint64_t *protocol_features);
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num);
/**
* virtio queue index
*
* @return
- * num of avail entires left
+ * num of avail entries left
*/
uint16_t rte_vhost_avail_entries(int vid, uint16_t queue_id);
/**
* Get guest mem table: a list of memory regions.
*
- * An rte_vhost_vhost_memory object will be allocated internaly, to hold the
+ * An rte_vhost_vhost_memory object will be allocated internally, to hold the
* guest memory regions. Application should free it at destroy_device()
* callback.
*
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_get_log_base(int vid, uint64_t *log_base, uint64_t *log_size);
/**
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_get_vring_base(int vid, uint16_t queue_id,
uint16_t *last_avail_idx, uint16_t *last_used_idx);
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_set_vring_base(int vid, uint16_t queue_id,
uint16_t last_avail_idx, uint16_t last_used_idx);
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_extern_callback_register(int vid,
struct rte_vhost_user_extern_ops const * const ops, void *ctx);
* @return
* device id
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_get_vdpa_device_id(int vid);
#ifdef __cplusplus