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