The ps2_mouse property of vmmouse is still pointer type which is defined by DEFINE_PROP_PTR. But qdev pointer property should be avoided. Convert it into QOM link relationship
Signed-off-by: Zihan Yang <whois.zihan.y...@gmail.com> --- hw/i386/pc.c | 2 +- hw/i386/vmmouse.c | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index ccc50ba..63f49b2 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1598,7 +1598,7 @@ void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi, } if (vmmouse) { DeviceState *dev = DEVICE(vmmouse); - qdev_prop_set_ptr(dev, "ps2_mouse", i8042); + object_property_set_link(OBJECT(dev), OBJECT(i8042), "ps2_mouse", NULL); qdev_init_nofail(dev); } port92 = isa_create_simple(isa_bus, "port92"); diff --git a/hw/i386/vmmouse.c b/hw/i386/vmmouse.c index 65ef553..49d4170 100644 --- a/hw/i386/vmmouse.c +++ b/hw/i386/vmmouse.c @@ -26,6 +26,8 @@ #include "ui/console.h" #include "hw/i386/pc.h" #include "hw/qdev.h" +#include "hw/input/pckbd.h" +#include "qapi/error.h" /* debug only vmmouse */ //#define DEBUG_VMMOUSE @@ -271,10 +273,15 @@ static void vmmouse_realizefn(DeviceState *dev, Error **errp) vmport_register(VMMOUSE_DATA, vmmouse_ioport_read, s); } -static Property vmmouse_properties[] = { - DEFINE_PROP_PTR("ps2_mouse", VMMouseState, ps2_mouse), - DEFINE_PROP_END_OF_LIST(), -}; +static void vmmouse_initfn(Object *obj) +{ + VMMouseState *s = VMMOUSE(obj); + + object_property_add_link(obj, "ps2_mouse", TYPE_I8042, + (Object **)&s->ps2_mouse, + qdev_prop_allow_set_link_before_realize, + 0, &error_abort); +} static void vmmouse_class_initfn(ObjectClass *klass, void *data) { @@ -283,15 +290,13 @@ static void vmmouse_class_initfn(ObjectClass *klass, void *data) dc->realize = vmmouse_realizefn; dc->reset = vmmouse_reset; dc->vmsd = &vmstate_vmmouse; - dc->props = vmmouse_properties; - /* Reason: pointer property "ps2_mouse" */ - dc->user_creatable = false; } static const TypeInfo vmmouse_info = { .name = TYPE_VMMOUSE, .parent = TYPE_ISA_DEVICE, .instance_size = sizeof(VMMouseState), + .instance_init = vmmouse_initfn, .class_init = vmmouse_class_initfn, }; -- 2.7.4