static void ps2_kbd_realize(DeviceState *dev, Error **errp)
{
- qemu_input_handler_register(dev, &ps2_keyboard_handler);
+ PS2State *s = PS2_DEVICE(dev);
+
+ s->hs = qemu_input_handler_register(dev, &ps2_keyboard_handler);
+}
+
+static void ps2_kbd_unrealize(DeviceState *dev)
+{
+ PS2State *s = PS2_DEVICE(dev);
+
+ g_clear_pointer(&s->hs, qemu_input_handler_unregister);
}
static const QemuInputHandler ps2_mouse_handler = {
static void ps2_mouse_realize(DeviceState *dev, Error **errp)
{
- qemu_input_handler_register(dev, &ps2_mouse_handler);
+ PS2State *s = PS2_DEVICE(dev);
+
+ s->hs = qemu_input_handler_register(dev, &ps2_mouse_handler);
+}
+
+static void ps2_mouse_unrealize(DeviceState *dev)
+{
+ PS2State *s = PS2_DEVICE(dev);
+
+ g_clear_pointer(&s->hs, qemu_input_handler_unregister);
}
static void ps2_kbd_class_init(ObjectClass *klass, const void *data)
PS2DeviceClass *ps2dc = PS2_DEVICE_CLASS(klass);
dc->realize = ps2_kbd_realize;
+ dc->unrealize = ps2_kbd_unrealize;
resettable_class_set_parent_phases(rc, NULL, ps2_kbd_reset_hold, NULL,
&ps2dc->parent_phases);
dc->vmsd = &vmstate_ps2_keyboard;
PS2DeviceClass *ps2dc = PS2_DEVICE_CLASS(klass);
dc->realize = ps2_mouse_realize;
+ dc->unrealize = ps2_mouse_unrealize;
resettable_class_set_parent_phases(rc, NULL, ps2_mouse_reset_hold, NULL,
&ps2dc->parent_phases);
dc->vmsd = &vmstate_ps2_mouse;