Imported Upstream version 17.05
[deb_dpdk.git] / examples / vhost / main.h
index 6bb42e8..9a2aca3 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  *   BSD LICENSE
  *
- *   Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2010-2017 Intel Corporation. All rights reserved.
  *   All rights reserved.
  *
  *   Redistribution and use in source and binary forms, with or without
 
 #include <sys/queue.h>
 
+#include <rte_ether.h>
+
 /* Macros for printing using RTE_LOG */
 #define RTE_LOGTYPE_VHOST_CONFIG RTE_LOGTYPE_USER1
 #define RTE_LOGTYPE_VHOST_DATA   RTE_LOGTYPE_USER2
 #define RTE_LOGTYPE_VHOST_PORT   RTE_LOGTYPE_USER3
 
+enum {VIRTIO_RXQ, VIRTIO_TXQ, VIRTIO_QNUM};
+
+#define MAX_PKT_BURST 32               /* Max burst size for RX/TX */
+
 struct device_statistics {
        uint64_t        tx;
        uint64_t        tx_total;
@@ -48,6 +54,12 @@ struct device_statistics {
        rte_atomic64_t  rx_total_atomic;
 };
 
+struct vhost_queue {
+       struct rte_vhost_vring  vr;
+       uint16_t                last_avail_idx;
+       uint16_t                last_used_idx;
+};
+
 struct vhost_dev {
        /**< Number of memory regions for gpa to hpa translation. */
        uint32_t nregions_hpa;
@@ -65,9 +77,16 @@ struct vhost_dev {
        volatile uint8_t remove;
 
        int vid;
+       uint64_t features;
+       size_t hdr_len;
+       uint16_t nr_vrings;
+       struct rte_vhost_memory *mem;
        struct device_statistics stats;
        TAILQ_ENTRY(vhost_dev) global_vdev_entry;
        TAILQ_ENTRY(vhost_dev) lcore_vdev_entry;
+
+#define MAX_QUEUE_PAIRS        4
+       struct vhost_queue queues[MAX_QUEUE_PAIRS * 2];
 } __rte_cache_aligned;
 
 TAILQ_HEAD(vhost_dev_tailq_list, vhost_dev);
@@ -88,4 +107,15 @@ struct lcore_info {
        struct vhost_dev_tailq_list vdev_list;
 };
 
+/* we implement non-extra virtio net features */
+#define VIRTIO_NET_FEATURES    0
+
+void vs_vhost_net_setup(struct vhost_dev *dev);
+void vs_vhost_net_remove(struct vhost_dev *dev);
+uint16_t vs_enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id,
+                        struct rte_mbuf **pkts, uint32_t count);
+
+uint16_t vs_dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
+                        struct rte_mempool *mbuf_pool,
+                        struct rte_mbuf **pkts, uint16_t count);
 #endif /* _MAIN_H_ */