aboutsummaryrefslogtreecommitdiff
path: root/hw/input
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2022-11-09 17:00:08 +0000
committerPeter Maydell <peter.maydell@linaro.org>2022-12-16 15:56:24 +0000
commit2bb3f9303706387a044fa68341550c676376055f (patch)
tree2aed7343cc1128ff2565299c505d7e6043c52570 /hw/input
parentc3141e21e3904408a527e9bbd08b8622f4ef8072 (diff)
downloadqemu-2bb3f9303706387a044fa68341550c676376055f.zip
qemu-2bb3f9303706387a044fa68341550c676376055f.tar.gz
qemu-2bb3f9303706387a044fa68341550c676376055f.tar.bz2
hw/input/ps2: Convert TYPE_PS2_DEVICE to 3-phase reset
Convert the parent class TYPE_PS2_DEVICE to 3-phase reset. Note that we need an 'exit' phase function as well as the usual 'hold' phase function, because changing outbound IRQ line state is only permitted in 'exit'. (Strictly speaking it's not supposed to be done in a legacy reset handler either, but you can often get away with it.) Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20221109170009.3498451-2-peter.maydell@linaro.org
Diffstat (limited to 'hw/input')
-rw-r--r--hw/input/ps2.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/hw/input/ps2.c b/hw/input/ps2.c
index 05cf711..47a5d68 100644
--- a/hw/input/ps2.c
+++ b/hw/input/ps2.c
@@ -1001,12 +1001,18 @@ void ps2_write_mouse(PS2MouseState *s, int val)
}
}
-static void ps2_reset(DeviceState *dev)
+static void ps2_reset_hold(Object *obj)
{
- PS2State *s = PS2_DEVICE(dev);
+ PS2State *s = PS2_DEVICE(obj);
s->write_cmd = -1;
ps2_reset_queue(s);
+}
+
+static void ps2_reset_exit(Object *obj)
+{
+ PS2State *s = PS2_DEVICE(obj);
+
ps2_lower_irq(s);
}
@@ -1281,8 +1287,10 @@ static void ps2_init(Object *obj)
static void ps2_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
+ ResettableClass *rc = RESETTABLE_CLASS(klass);
- dc->reset = ps2_reset;
+ rc->phases.hold = ps2_reset_hold;
+ rc->phases.exit = ps2_reset_exit;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}