X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Fvhost%2Frte_vhost.h;h=af0afbcf60e066bc04bc4a8c0f2f7484adadbb6e;hb=f01ca13fca6dde68fa3962269c5cddb7e8e7f1d7;hp=d0a8ae31f2a549c882989ac99e20934e348d1b21;hpb=99a2dd955fba6e4cc23b77d590a033650ced9c45;p=dpdk.git diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h index d0a8ae31f2..af0afbcf60 100644 --- a/lib/vhost/rte_vhost.h +++ b/lib/vhost/rte_vhost.h @@ -36,6 +36,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 @@ -263,7 +264,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 +292,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 +367,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 +546,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 +560,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 +574,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 +606,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 +789,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); @@ -787,7 +808,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); @@ -810,7 +830,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 +846,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 +865,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 +883,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 +899,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 +928,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 +996,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 +1030,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);