[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 04/11] pckbd: split out interrupt line changing code
From: |
Volker Rümelin |
Subject: |
[PATCH v3 04/11] pckbd: split out interrupt line changing code |
Date: |
Sat, 15 May 2021 13:32:47 +0200 |
Split out the interrupt line changing code from kbd_update_irq().
This is a preparation for the next patch. There is no functional
change.
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/input/pckbd.c | 32 ++++++++++++++++++++++----------
1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c
index dde85ba6c6..90b33954a8 100644
--- a/hw/input/pckbd.c
+++ b/hw/input/pckbd.c
@@ -148,15 +148,34 @@ typedef struct KBDState {
hwaddr mask;
} KBDState;
-/* update irq and KBD_STAT_[MOUSE_]OBF */
/* XXX: not generating the irqs if KBD_MODE_DISABLE_KBD is set may be
incorrect, but it avoids having to simulate exact delays */
-static void kbd_update_irq(KBDState *s)
+static void kbd_update_irq_lines(KBDState *s)
{
int irq_kbd_level, irq_mouse_level;
irq_kbd_level = 0;
irq_mouse_level = 0;
+
+ if (s->status & KBD_STAT_OBF) {
+ if (s->status & KBD_STAT_MOUSE_OBF) {
+ if (s->mode & KBD_MODE_MOUSE_INT) {
+ irq_mouse_level = 1;
+ }
+ } else {
+ if ((s->mode & KBD_MODE_KBD_INT) &&
+ !(s->mode & KBD_MODE_DISABLE_KBD)) {
+ irq_kbd_level = 1;
+ }
+ }
+ }
+ qemu_set_irq(s->irq_kbd, irq_kbd_level);
+ qemu_set_irq(s->irq_mouse, irq_mouse_level);
+}
+
+/* update irq and KBD_STAT_[MOUSE_]OBF */
+static void kbd_update_irq(KBDState *s)
+{
s->status &= ~(KBD_STAT_OBF | KBD_STAT_MOUSE_OBF);
s->outport &= ~(KBD_OUT_OBF | KBD_OUT_MOUSE_OBF);
if (s->pending) {
@@ -166,16 +185,9 @@ static void kbd_update_irq(KBDState *s)
if (s->pending == KBD_PENDING_AUX) {
s->status |= KBD_STAT_MOUSE_OBF;
s->outport |= KBD_OUT_MOUSE_OBF;
- if (s->mode & KBD_MODE_MOUSE_INT)
- irq_mouse_level = 1;
- } else {
- if ((s->mode & KBD_MODE_KBD_INT) &&
- !(s->mode & KBD_MODE_DISABLE_KBD))
- irq_kbd_level = 1;
}
}
- qemu_set_irq(s->irq_kbd, irq_kbd_level);
- qemu_set_irq(s->irq_mouse, irq_mouse_level);
+ kbd_update_irq_lines(s);
}
static void kbd_update_kbd_irq(void *opaque, int level)
--
2.26.2
- [PATCH v3 00/11] PS/2 controller related fixes, Volker Rümelin, 2021/05/15
- [PATCH v3 01/11] ps2: fix mouse stream corruption, Volker Rümelin, 2021/05/15
- [PATCH v3 04/11] pckbd: split out interrupt line changing code,
Volker Rümelin <=
- [PATCH v3 03/11] ps2: don't deassert irq twice if queue is empty, Volker Rümelin, 2021/05/15
- [PATCH v3 05/11] pckbd: don't update OBF flags if KBD_STAT_OBF is set, Volker Rümelin, 2021/05/15
- [PATCH v3 08/11] pckbd: add controller response queue, Volker Rümelin, 2021/05/15
- [PATCH v3 02/11] ps2: don't raise an interrupt if queue is full, Volker Rümelin, 2021/05/15
- [PATCH v3 06/11] pckbd: PS/2 keyboard throttle, Volker Rümelin, 2021/05/15
- [PATCH v3 09/11] pckbd: add function kbd_pending(), Volker Rümelin, 2021/05/15
- [PATCH v3 07/11] pckbd: add state variable for interrupt source, Volker Rümelin, 2021/05/15
- [PATCH v3 10/11] pckbd: correctly disable PS/2 communication, Volker Rümelin, 2021/05/15