hw/virtio: derive vhost-user-input from vhost-user-base
This patch derives vhost-user-input from vhost-user-base class, so make the input stub as a simpler boilerplate wrapper. With the refactoring, vhost-user-input adds the property 'chardev', this leads to conflict with the vhost-user-input-pci adds the same property. To resolve the error, remove the duplicate property from vhost-user-input-pci. Signed-off-by: Leo Yan <leo.yan@linaro.org> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Message-Id: <20231120043721.50555-5-leo.yan@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20240104210945.1223134-12-alex.bennee@linaro.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
87c7fb7819
commit
bad38726e9
@ -30,9 +30,6 @@ static void vhost_user_input_pci_instance_init(Object *obj)
|
||||
|
||||
virtio_instance_init_common(obj, &dev->vhi, sizeof(dev->vhi),
|
||||
TYPE_VHOST_USER_INPUT);
|
||||
|
||||
object_property_add_alias(obj, "chardev",
|
||||
OBJECT(&dev->vhi), "chardev");
|
||||
}
|
||||
|
||||
static const VirtioPCIDeviceTypeInfo vhost_user_input_pci_info = {
|
||||
|
@ -5,83 +5,25 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
#include "hw/virtio/virtio-input.h"
|
||||
|
||||
static int vhost_input_config_change(struct vhost_dev *dev)
|
||||
{
|
||||
error_report("vhost-user-input: unhandled backend config change");
|
||||
return -1;
|
||||
}
|
||||
|
||||
static const VhostDevConfigOps config_ops = {
|
||||
.vhost_dev_config_notifier = vhost_input_config_change,
|
||||
static Property vinput_properties[] = {
|
||||
DEFINE_PROP_CHR("chardev", VHostUserBase, chardev),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
static void vhost_input_realize(DeviceState *dev, Error **errp)
|
||||
static void vinput_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
VHostUserInput *vhi = VHOST_USER_INPUT(dev);
|
||||
VirtIOInput *vinput = VIRTIO_INPUT(dev);
|
||||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||
VHostUserBase *vub = VHOST_USER_BASE(dev);
|
||||
VHostUserBaseClass *vubc = VHOST_USER_BASE_GET_CLASS(dev);
|
||||
|
||||
vhost_dev_set_config_notifier(&vhi->vhost->dev, &config_ops);
|
||||
vinput->cfg_size = sizeof_field(virtio_input_config, u);
|
||||
if (vhost_user_backend_dev_init(vhi->vhost, vdev, 2, errp) == -1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* Fixed for input device */
|
||||
vub->virtio_id = VIRTIO_ID_INPUT;
|
||||
vub->num_vqs = 2;
|
||||
vub->vq_size = 4;
|
||||
vub->config_size = sizeof(virtio_input_config);
|
||||
|
||||
static void vhost_input_change_active(VirtIOInput *vinput)
|
||||
{
|
||||
VHostUserInput *vhi = VHOST_USER_INPUT(vinput);
|
||||
|
||||
if (vinput->active) {
|
||||
vhost_user_backend_start(vhi->vhost);
|
||||
} else {
|
||||
vhost_user_backend_stop(vhi->vhost);
|
||||
}
|
||||
}
|
||||
|
||||
static void vhost_input_get_config(VirtIODevice *vdev, uint8_t *config_data)
|
||||
{
|
||||
VirtIOInput *vinput = VIRTIO_INPUT(vdev);
|
||||
VHostUserInput *vhi = VHOST_USER_INPUT(vdev);
|
||||
Error *local_err = NULL;
|
||||
int ret;
|
||||
|
||||
memset(config_data, 0, vinput->cfg_size);
|
||||
|
||||
ret = vhost_dev_get_config(&vhi->vhost->dev, config_data, vinput->cfg_size,
|
||||
&local_err);
|
||||
if (ret) {
|
||||
error_report_err(local_err);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void vhost_input_set_config(VirtIODevice *vdev,
|
||||
const uint8_t *config_data)
|
||||
{
|
||||
VHostUserInput *vhi = VHOST_USER_INPUT(vdev);
|
||||
int ret;
|
||||
|
||||
ret = vhost_dev_set_config(&vhi->vhost->dev, config_data,
|
||||
0, sizeof(virtio_input_config),
|
||||
VHOST_SET_CONFIG_TYPE_FRONTEND);
|
||||
if (ret) {
|
||||
error_report("vhost-user-input: set device config space failed");
|
||||
return;
|
||||
}
|
||||
|
||||
virtio_notify_config(vdev);
|
||||
}
|
||||
|
||||
static struct vhost_dev *vhost_input_get_vhost(VirtIODevice *vdev)
|
||||
{
|
||||
VHostUserInput *vhi = VHOST_USER_INPUT(vdev);
|
||||
return &vhi->vhost->dev;
|
||||
vubc->parent_realize(dev, errp);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_vhost_input = {
|
||||
@ -91,40 +33,20 @@ static const VMStateDescription vmstate_vhost_input = {
|
||||
|
||||
static void vhost_input_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
VirtIOInputClass *vic = VIRTIO_INPUT_CLASS(klass);
|
||||
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
|
||||
VHostUserBaseClass *vubc = VHOST_USER_BASE_CLASS(klass);
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->vmsd = &vmstate_vhost_input;
|
||||
vdc->get_config = vhost_input_get_config;
|
||||
vdc->set_config = vhost_input_set_config;
|
||||
vdc->get_vhost = vhost_input_get_vhost;
|
||||
vic->realize = vhost_input_realize;
|
||||
vic->change_active = vhost_input_change_active;
|
||||
}
|
||||
|
||||
static void vhost_input_init(Object *obj)
|
||||
{
|
||||
VHostUserInput *vhi = VHOST_USER_INPUT(obj);
|
||||
|
||||
vhi->vhost = VHOST_USER_BACKEND(object_new(TYPE_VHOST_USER_BACKEND));
|
||||
object_property_add_alias(obj, "chardev",
|
||||
OBJECT(vhi->vhost), "chardev");
|
||||
}
|
||||
|
||||
static void vhost_input_finalize(Object *obj)
|
||||
{
|
||||
VHostUserInput *vhi = VHOST_USER_INPUT(obj);
|
||||
|
||||
object_unref(OBJECT(vhi->vhost));
|
||||
device_class_set_props(dc, vinput_properties);
|
||||
device_class_set_parent_realize(dc, vinput_realize,
|
||||
&vubc->parent_realize);
|
||||
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
|
||||
}
|
||||
|
||||
static const TypeInfo vhost_input_info = {
|
||||
.name = TYPE_VHOST_USER_INPUT,
|
||||
.parent = TYPE_VIRTIO_INPUT,
|
||||
.parent = TYPE_VHOST_USER_BASE,
|
||||
.instance_size = sizeof(VHostUserInput),
|
||||
.instance_init = vhost_input_init,
|
||||
.instance_finalize = vhost_input_finalize,
|
||||
.class_init = vhost_input_class_init,
|
||||
};
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
#ifndef QEMU_VIRTIO_INPUT_H
|
||||
#define QEMU_VIRTIO_INPUT_H
|
||||
|
||||
#include "hw/virtio/vhost-user.h"
|
||||
#include "hw/virtio/vhost-user-base.h"
|
||||
#include "ui/input.h"
|
||||
#include "sysemu/vhost-user-backend.h"
|
||||
|
||||
@ -97,9 +99,7 @@ struct VirtIOInputHost {
|
||||
};
|
||||
|
||||
struct VHostUserInput {
|
||||
VirtIOInput parent_obj;
|
||||
|
||||
VhostUserBackend *vhost;
|
||||
VHostUserBase parent_obj;
|
||||
};
|
||||
|
||||
void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event);
|
||||
|
Loading…
Reference in New Issue
Block a user