mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
hw/input/ps2: keep QemuInputHandlerState in PS2State
Track the input handled state, and dispose it on unrealize. Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
@@ -1233,7 +1233,16 @@ static const QemuInputHandler ps2_keyboard_handler = {
|
||||
|
||||
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 = {
|
||||
@@ -1245,7 +1254,16 @@ 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)
|
||||
@@ -1255,6 +1273,7 @@ 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;
|
||||
@@ -1274,6 +1293,7 @@ static void ps2_mouse_class_init(ObjectClass *klass, const void *data)
|
||||
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;
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#define HW_PS2_H
|
||||
|
||||
#include "hw/core/sysbus.h"
|
||||
#include "ui/input.h"
|
||||
|
||||
#define PS2_MOUSE_BUTTON_LEFT 0x01
|
||||
#define PS2_MOUSE_BUTTON_RIGHT 0x02
|
||||
@@ -59,6 +60,7 @@ struct PS2State {
|
||||
PS2Queue queue;
|
||||
int32_t write_cmd;
|
||||
qemu_irq irq;
|
||||
QemuInputHandlerState *hs;
|
||||
};
|
||||
|
||||
#define TYPE_PS2_DEVICE "ps2-device"
|
||||
|
||||
Reference in New Issue
Block a user