New upstream version 18.02
[deb_dpdk.git] / drivers / net / virtio / virtio_user / virtio_user_dev.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2016 Intel Corporation
3  */
4
5 #ifndef _VIRTIO_USER_DEV_H
6 #define _VIRTIO_USER_DEV_H
7
8 #include <limits.h>
9 #include "../virtio_pci.h"
10 #include "../virtio_ring.h"
11 #include "vhost.h"
12
13 struct virtio_user_dev {
14         /* for vhost_user backend */
15         int             vhostfd;
16
17         /* for vhost_kernel backend */
18         char            *ifname;
19         int             *vhostfds;
20         int             *tapfds;
21
22         /* for both vhost_user and vhost_kernel */
23         int             callfds[VIRTIO_MAX_VIRTQUEUES];
24         int             kickfds[VIRTIO_MAX_VIRTQUEUES];
25         int             mac_specified;
26         uint32_t        max_queue_pairs;
27         uint32_t        queue_pairs;
28         uint32_t        queue_size;
29         uint64_t        features; /* the negotiated features with driver,
30                                    * and will be sync with device
31                                    */
32         uint64_t        device_features; /* supported features by device */
33         uint8_t         status;
34         uint8_t         port_id;
35         uint8_t         mac_addr[ETHER_ADDR_LEN];
36         char            path[PATH_MAX];
37         struct vring    vrings[VIRTIO_MAX_VIRTQUEUES];
38         struct virtio_user_backend_ops *ops;
39 };
40
41 int is_vhost_user_by_type(const char *path);
42 int virtio_user_start_device(struct virtio_user_dev *dev);
43 int virtio_user_stop_device(struct virtio_user_dev *dev);
44 int virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
45                          int cq, int queue_size, const char *mac, char **ifname);
46 void virtio_user_dev_uninit(struct virtio_user_dev *dev);
47 void virtio_user_handle_cq(struct virtio_user_dev *dev, uint16_t queue_idx);
48 #endif