doc: announce crypto structures rework
[dpdk.git] / drivers / net / virtio / virtio_user / virtio_user_dev.c
index 6871cd4..450404b 100644 (file)
@@ -271,6 +271,8 @@ virtio_user_fill_intr_handle(struct virtio_user_dev *dev)
        eth_dev->intr_handle->nb_efd = dev->max_queue_pairs;
        eth_dev->intr_handle->max_intr = dev->max_queue_pairs + 1;
        eth_dev->intr_handle->type = RTE_INTR_HANDLE_VDEV;
+       if (dev->vhostfd >= 0)
+               eth_dev->intr_handle->fd = dev->vhostfd;
 
        return 0;
 }
@@ -284,12 +286,6 @@ virtio_user_dev_setup(struct virtio_user_dev *dev)
        dev->vhostfds = NULL;
        dev->tapfds = NULL;
 
-       if (virtio_user_dev_init_notify(dev) < 0)
-               return -1;
-
-       if (virtio_user_fill_intr_handle(dev) < 0)
-               return -1;
-
        if (is_vhost_user_by_type(dev->path)) {
                dev->ops = &ops_user;
        } else {
@@ -308,9 +304,37 @@ virtio_user_dev_setup(struct virtio_user_dev *dev)
                }
        }
 
-       return dev->ops->setup(dev);
+       if (dev->ops->setup(dev) < 0)
+               return -1;
+
+       if (virtio_user_dev_init_notify(dev) < 0)
+               return -1;
+
+       if (virtio_user_fill_intr_handle(dev) < 0)
+               return -1;
+
+       return 0;
 }
 
+/* Use below macro to filter features from vhost backend */
+#define VIRTIO_USER_SUPPORTED_FEATURES                 \
+       (1ULL << VIRTIO_NET_F_MAC               |       \
+        1ULL << VIRTIO_NET_F_STATUS            |       \
+        1ULL << VIRTIO_NET_F_MQ                |       \
+        1ULL << VIRTIO_NET_F_CTRL_MAC_ADDR     |       \
+        1ULL << VIRTIO_NET_F_CTRL_VQ           |       \
+        1ULL << VIRTIO_NET_F_CTRL_RX           |       \
+        1ULL << VIRTIO_NET_F_CTRL_VLAN         |       \
+        1ULL << VIRTIO_NET_F_CSUM              |       \
+        1ULL << VIRTIO_NET_F_HOST_TSO4         |       \
+        1ULL << VIRTIO_NET_F_HOST_TSO6         |       \
+        1ULL << VIRTIO_NET_F_MRG_RXBUF         |       \
+        1ULL << VIRTIO_RING_F_INDIRECT_DESC    |       \
+        1ULL << VIRTIO_NET_F_GUEST_CSUM        |       \
+        1ULL << VIRTIO_NET_F_GUEST_TSO4        |       \
+        1ULL << VIRTIO_NET_F_GUEST_TSO6        |       \
+        1ULL << VIRTIO_F_VERSION_1)
+
 int
 virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
                     int cq, int queue_size, const char *mac, char **ifname)
@@ -360,7 +384,10 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
        }
 
        /* The backend will not report this feature, we add it explicitly */
-       dev->device_features |= (1ull << VIRTIO_NET_F_STATUS);
+       if (is_vhost_user_by_type(dev->path))
+               dev->device_features |= (1ull << VIRTIO_NET_F_STATUS);
+
+       dev->device_features &= VIRTIO_USER_SUPPORTED_FEATURES;
 
        return 0;
 }