1*62759896SAlex Bennée /*
2*62759896SAlex Bennée  * Vhost-user generic virtio device
3*62759896SAlex Bennée  *
4*62759896SAlex Bennée  * Copyright (c) 2023 Linaro Ltd
5*62759896SAlex Bennée  *
6*62759896SAlex Bennée  * SPDX-License-Identifier: GPL-2.0-or-later
7*62759896SAlex Bennée  */
8*62759896SAlex Bennée 
9*62759896SAlex Bennée #ifndef QEMU_VHOST_USER_BASE_H
10*62759896SAlex Bennée #define QEMU_VHOST_USER_BASE_H
11*62759896SAlex Bennée 
12*62759896SAlex Bennée #include "hw/virtio/vhost.h"
13*62759896SAlex Bennée #include "hw/virtio/vhost-user.h"
14*62759896SAlex Bennée 
15*62759896SAlex Bennée #define TYPE_VHOST_USER_BASE "vhost-user-base"
16*62759896SAlex Bennée 
17*62759896SAlex Bennée OBJECT_DECLARE_TYPE(VHostUserBase, VHostUserBaseClass, VHOST_USER_BASE)
18*62759896SAlex Bennée 
19*62759896SAlex Bennée struct VHostUserBase {
20*62759896SAlex Bennée     VirtIODevice parent_obj;
21*62759896SAlex Bennée 
22*62759896SAlex Bennée     /* Properties */
23*62759896SAlex Bennée     CharBackend chardev;
24*62759896SAlex Bennée     uint16_t virtio_id;
25*62759896SAlex Bennée     uint32_t num_vqs;
26*62759896SAlex Bennée     uint32_t vq_size; /* can't exceed VIRTIO_QUEUE_MAX */
27*62759896SAlex Bennée     uint32_t config_size;
28*62759896SAlex Bennée     /* State tracking */
29*62759896SAlex Bennée     VhostUserState vhost_user;
30*62759896SAlex Bennée     struct vhost_virtqueue *vhost_vq;
31*62759896SAlex Bennée     struct vhost_dev vhost_dev;
32*62759896SAlex Bennée     GPtrArray *vqs;
33*62759896SAlex Bennée     bool connected;
34*62759896SAlex Bennée };
35*62759896SAlex Bennée 
36*62759896SAlex Bennée /*
37*62759896SAlex Bennée  * Needed so we can use the base realize after specialisation
38*62759896SAlex Bennée  * tweaks
39*62759896SAlex Bennée  */
40*62759896SAlex Bennée struct VHostUserBaseClass {
41*62759896SAlex Bennée     VirtioDeviceClass parent_class;
42*62759896SAlex Bennée 
43*62759896SAlex Bennée     DeviceRealize parent_realize;
44*62759896SAlex Bennée };
45*62759896SAlex Bennée 
46*62759896SAlex Bennée 
47*62759896SAlex Bennée #define TYPE_VHOST_USER_DEVICE "vhost-user-device"
48*62759896SAlex Bennée 
49*62759896SAlex Bennée #endif /* QEMU_VHOST_USER_BASE_H */
50