ipc: end multiprocess thread during cleanup
[dpdk.git] / lib / vhost / rte_vhost.h
index fd372d5..2acb31d 100644 (file)
 extern "C" {
 #endif
 
+#ifndef __cplusplus
 /* These are not C++-aware. */
 #include <linux/vhost.h>
 #include <linux/virtio_ring.h>
 #include <linux/virtio_net.h>
+#endif
 
 #define RTE_VHOST_USER_CLIENT          (1ULL << 0)
 #define RTE_VHOST_USER_NO_RECONNECT    (1ULL << 1)
@@ -264,7 +266,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. */
 
@@ -292,6 +294,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
  *
@@ -581,7 +608,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);
 
 /**
  *
@@ -771,7 +798,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
@@ -790,7 +817,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
@@ -903,6 +930,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
  *