xref: /qemu/include/system/vhost-user-backend.h (revision f24bb7287ddbdfd9b75fe782c366abc7939a4190)
1*f24bb728SMarc-André Lureau /*
2*f24bb728SMarc-André Lureau  * QEMU vhost-user backend
3*f24bb728SMarc-André Lureau  *
4*f24bb728SMarc-André Lureau  * Copyright (C) 2018 Red Hat Inc
5*f24bb728SMarc-André Lureau  *
6*f24bb728SMarc-André Lureau  * Authors:
7*f24bb728SMarc-André Lureau  *  Marc-André Lureau <marcandre.lureau@redhat.com>
8*f24bb728SMarc-André Lureau  *
9*f24bb728SMarc-André Lureau  * This work is licensed under the terms of the GNU GPL, version 2 or later.
10*f24bb728SMarc-André Lureau  * See the COPYING file in the top-level directory.
11*f24bb728SMarc-André Lureau  */
12*f24bb728SMarc-André Lureau #ifndef QEMU_VHOST_USER_BACKEND_H
13*f24bb728SMarc-André Lureau #define QEMU_VHOST_USER_BACKEND_H
14*f24bb728SMarc-André Lureau 
15*f24bb728SMarc-André Lureau #include "qom/object.h"
16*f24bb728SMarc-André Lureau #include "exec/memory.h"
17*f24bb728SMarc-André Lureau #include "qemu/option.h"
18*f24bb728SMarc-André Lureau #include "qemu/bitmap.h"
19*f24bb728SMarc-André Lureau #include "hw/virtio/vhost.h"
20*f24bb728SMarc-André Lureau #include "hw/virtio/vhost-user.h"
21*f24bb728SMarc-André Lureau #include "chardev/char-fe.h"
22*f24bb728SMarc-André Lureau #include "io/channel.h"
23*f24bb728SMarc-André Lureau 
24*f24bb728SMarc-André Lureau #define TYPE_VHOST_USER_BACKEND "vhost-user-backend"
25*f24bb728SMarc-André Lureau #define VHOST_USER_BACKEND(obj) \
26*f24bb728SMarc-André Lureau     OBJECT_CHECK(VhostUserBackend, (obj), TYPE_VHOST_USER_BACKEND)
27*f24bb728SMarc-André Lureau #define VHOST_USER_BACKEND_GET_CLASS(obj) \
28*f24bb728SMarc-André Lureau     OBJECT_GET_CLASS(VhostUserBackendClass, (obj), TYPE_VHOST_USER_BACKEND)
29*f24bb728SMarc-André Lureau #define VHOST_USER_BACKEND_CLASS(klass) \
30*f24bb728SMarc-André Lureau     OBJECT_CLASS_CHECK(VhostUserBackendClass, (klass), TYPE_VHOST_USER_BACKEND)
31*f24bb728SMarc-André Lureau 
32*f24bb728SMarc-André Lureau typedef struct VhostUserBackend VhostUserBackend;
33*f24bb728SMarc-André Lureau typedef struct VhostUserBackendClass VhostUserBackendClass;
34*f24bb728SMarc-André Lureau 
35*f24bb728SMarc-André Lureau struct VhostUserBackendClass {
36*f24bb728SMarc-André Lureau     ObjectClass parent_class;
37*f24bb728SMarc-André Lureau };
38*f24bb728SMarc-André Lureau 
39*f24bb728SMarc-André Lureau struct VhostUserBackend {
40*f24bb728SMarc-André Lureau     /* private */
41*f24bb728SMarc-André Lureau     Object parent;
42*f24bb728SMarc-André Lureau 
43*f24bb728SMarc-André Lureau     char *chr_name;
44*f24bb728SMarc-André Lureau     CharBackend chr;
45*f24bb728SMarc-André Lureau     VhostUserState vhost_user;
46*f24bb728SMarc-André Lureau     struct vhost_dev dev;
47*f24bb728SMarc-André Lureau     VirtIODevice *vdev;
48*f24bb728SMarc-André Lureau     bool started;
49*f24bb728SMarc-André Lureau     bool completed;
50*f24bb728SMarc-André Lureau };
51*f24bb728SMarc-André Lureau 
52*f24bb728SMarc-André Lureau int vhost_user_backend_dev_init(VhostUserBackend *b, VirtIODevice *vdev,
53*f24bb728SMarc-André Lureau                                 unsigned nvqs, Error **errp);
54*f24bb728SMarc-André Lureau void vhost_user_backend_start(VhostUserBackend *b);
55*f24bb728SMarc-André Lureau void vhost_user_backend_stop(VhostUserBackend *b);
56*f24bb728SMarc-André Lureau 
57*f24bb728SMarc-André Lureau #endif
58