X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fvhost%2Frte_vhost.h;h=c733f857c62bec13a0e08b44a61c7f574110a991;hb=1fd3de64ff47f8865f9cbd13bb8f20611beb3cfa;hp=d0a8ae31f2a549c882989ac99e20934e348d1b21;hpb=99a2dd955fba6e4cc23b77d590a033650ced9c45;p=dpdk.git diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h index d0a8ae31f2..c733f857c6 100644 --- a/lib/vhost/rte_vhost.h +++ b/lib/vhost/rte_vhost.h @@ -21,10 +21,12 @@ extern "C" { #endif +#ifndef __cplusplus /* These are not C++-aware. */ #include #include #include +#endif #define RTE_VHOST_USER_CLIENT (1ULL << 0) #define RTE_VHOST_USER_NO_RECONNECT (1ULL << 1) @@ -36,6 +38,7 @@ extern "C" { /* support only linear buffers (no chained mbufs) */ #define RTE_VHOST_USER_LINEARBUF_SUPPORT (1ULL << 6) #define RTE_VHOST_USER_ASYNC_COPY (1ULL << 7) +#define RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS (1ULL << 8) /* Features. */ #ifndef VIRTIO_NET_F_GUEST_ANNOUNCE @@ -112,6 +115,8 @@ extern "C" { #define VHOST_USER_F_PROTOCOL_FEATURES 30 #endif +#define RTE_MAX_VHOST_DEVICE 1024 + struct rte_vdpa_device; /** @@ -263,7 +268,7 @@ struct rte_vhost_user_extern_ops { /** * Device and vring operations. */ -struct vhost_device_ops { +struct rte_vhost_device_ops { int (*new_device)(int vid); /**< Add device. */ void (*destroy_device)(int vid); /**< Remove device. */ @@ -291,6 +296,31 @@ struct vhost_device_ops { void *reserved[1]; /**< Reserved for future extension */ }; +/** + * Power monitor condition. + */ +struct rte_vhost_power_monitor_cond { + /**< Address to monitor for changes */ + volatile void *addr; + /**< If the `mask` is non-zero, location pointed + * to by `addr` will be read and masked, then + * compared with this value. + */ + uint64_t val; + /**< 64-bit mask to extract value read from `addr` */ + uint64_t mask; + /**< Data size (in bytes) that will be read from the + * monitored memory location (`addr`). + */ + uint8_t size; + /**< If 1, and masked value that read from 'addr' equals + * 'val', the driver should skip core sleep. If 0, and + * masked value that read from 'addr' does not equal 'val', + * the driver should skip core sleep. + */ + uint8_t match; +}; + /** * Convert guest physical address to host virtual address * @@ -341,7 +371,6 @@ rte_vhost_gpa_to_vva(struct rte_vhost_memory *mem, uint64_t gpa) * @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) @@ -521,7 +550,6 @@ int rte_vhost_driver_get_features(const char *path, uint64_t *features); * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_driver_set_protocol_features(const char *path, uint64_t protocol_features); @@ -536,7 +564,6 @@ rte_vhost_driver_set_protocol_features(const char *path, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_driver_get_protocol_features(const char *path, uint64_t *protocol_features); @@ -551,7 +578,6 @@ rte_vhost_driver_get_protocol_features(const char *path, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num); @@ -584,7 +610,7 @@ rte_vhost_get_negotiated_protocol_features(int vid, /* Register callbacks. */ int rte_vhost_driver_callback_register(const char *path, - struct vhost_device_ops const * const ops); + struct rte_vhost_device_ops const * const ops); /** * @@ -767,7 +793,6 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_get_vhost_ring_inflight(int vid, uint16_t vring_idx, struct rte_vhost_ring_inflight *vring); @@ -775,7 +800,7 @@ rte_vhost_get_vhost_ring_inflight(int vid, uint16_t vring_idx, /** * Set split inflight descriptor. * - * This function save descriptors that has been comsumed in available + * This function save descriptors that has been consumed in available * ring * * @param vid @@ -787,7 +812,6 @@ rte_vhost_get_vhost_ring_inflight(int vid, uint16_t vring_idx, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_set_inflight_desc_split(int vid, uint16_t vring_idx, uint16_t idx); @@ -795,7 +819,7 @@ rte_vhost_set_inflight_desc_split(int vid, uint16_t vring_idx, /** * Set packed inflight descriptor and get corresponding inflight entry * - * This function save descriptors that has been comsumed + * This function save descriptors that has been consumed * * @param vid * vhost device ID @@ -810,7 +834,6 @@ rte_vhost_set_inflight_desc_split(int vid, uint16_t vring_idx, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_set_inflight_desc_packed(int vid, uint16_t vring_idx, uint16_t head, uint16_t last, uint16_t *inflight_entry); @@ -827,7 +850,6 @@ rte_vhost_set_inflight_desc_packed(int vid, uint16_t vring_idx, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_set_last_inflight_io_split(int vid, uint16_t vring_idx, uint16_t idx); @@ -847,7 +869,6 @@ rte_vhost_set_last_inflight_io_split(int vid, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_set_last_inflight_io_packed(int vid, uint16_t vring_idx, uint16_t head); @@ -866,7 +887,6 @@ rte_vhost_set_last_inflight_io_packed(int vid, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_clr_inflight_desc_split(int vid, uint16_t vring_idx, uint16_t last_used_idx, uint16_t idx); @@ -883,7 +903,6 @@ rte_vhost_clr_inflight_desc_split(int vid, uint16_t vring_idx, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_clr_inflight_desc_packed(int vid, uint16_t vring_idx, uint16_t head); @@ -913,6 +932,23 @@ int rte_vhost_vring_call(int vid, uint16_t vring_idx); */ uint32_t rte_vhost_rx_queue_count(int vid, uint16_t qid); +/** + * Get power monitor address of the vhost device + * + * @param vid + * vhost device ID + * @param queue_id + * vhost queue ID + * @param pmc + * power monitor condition + * @return + * 0 on success, -1 on failure + */ +__rte_experimental +int +rte_vhost_get_monitor_addr(int vid, uint16_t queue_id, + struct rte_vhost_power_monitor_cond *pmc); + /** * Get log base and log size of the vhost device * @@ -964,7 +1000,6 @@ rte_vhost_get_vring_base(int vid, uint16_t queue_id, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_get_vring_base_from_inflight(int vid, uint16_t queue_id, uint16_t *last_avail_idx, uint16_t *last_used_idx); @@ -999,7 +1034,6 @@ rte_vhost_set_vring_base(int vid, uint16_t queue_id, * @return * 0 on success, -1 on failure */ -__rte_experimental int rte_vhost_extern_callback_register(int vid, struct rte_vhost_user_extern_ops const * const ops, void *ctx);