int (*new_connection)(int vid);
void (*destroy_connection)(int vid);
- void *reserved[2]; /**< Reserved for future extension */
+ /**
+ * This callback gets called each time a guest gets notified
+ * about waiting packets. This is the interrupt handling trough
+ * the eventfd_write(callfd), which can be used for counting these
+ * "slow" syscalls.
+ */
+ void (*guest_notified)(int vid);
+
+ void *reserved[1]; /**< Reserved for future extension */
};
/**
* @return
* the host virtual address on success, 0 on failure
*/
+__rte_experimental
static __rte_always_inline uint64_t
rte_vhost_va_from_guest_pa(struct rte_vhost_memory *mem,
uint64_t gpa, uint64_t *len)
* @param vid
* vhost device ID
* @param addr
- * the starting address for write
+ * the starting address for write (in guest physical address space)
* @param len
* the length to write
*/
* @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);
/**
* @return
* 0 on success, -1 on failure
*/
-int __rte_experimental
+__rte_experimental
+int
rte_vhost_driver_set_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_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);
/**
* @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