summaryrefslogtreecommitdiffstats
path: root/hw/input
diff options
context:
space:
mode:
authorMark Cave-Ayland2020-06-23 22:49:34 +0200
committerMark Cave-Ayland2020-06-26 11:13:52 +0200
commit913f47ef96990fc72135ec604b6bb1fe2d1e389a (patch)
tree4f1179ad28c0d891952e4d343595cfbe0f5e3207 /hw/input
parentmac_via: rework ADB state machine to be compatible with both MacOS and Linux (diff)
downloadqemu-913f47ef96990fc72135ec604b6bb1fe2d1e389a.tar.gz
qemu-913f47ef96990fc72135ec604b6bb1fe2d1e389a.tar.xz
qemu-913f47ef96990fc72135ec604b6bb1fe2d1e389a.zip
adb: only call autopoll callbacks when autopoll is not blocked
Handle this at the ADB bus level so that individual implementations do not need to handle this themselves. Finally add an assert() into adb_request() to prevent developers from accidentally making an explicit ADB request without blocking autopoll. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Tested-by: Finn Thain <fthain@telegraphics.com.au> Acked-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20200623204936.24064-21-mark.cave-ayland@ilande.co.uk>
Diffstat (limited to 'hw/input')
-rw-r--r--hw/input/adb.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/hw/input/adb.c b/hw/input/adb.c
index 70aa1f4570..fe0f6c7ef3 100644
--- a/hw/input/adb.c
+++ b/hw/input/adb.c
@@ -86,10 +86,11 @@ static int do_adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf,
int adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf, int len)
{
+ assert(s->autopoll_blocked);
+
return do_adb_request(s, obuf, buf, len);
}
-/* XXX: move that to cuda ? */
int adb_poll(ADBBusState *s, uint8_t *obuf, uint16_t poll_mask)
{
ADBDevice *d;
@@ -181,7 +182,9 @@ static void adb_autopoll(void *opaque)
{
ADBBusState *s = opaque;
- s->autopoll_cb(s->autopoll_cb_opaque);
+ if (!s->autopoll_blocked) {
+ s->autopoll_cb(s->autopoll_cb_opaque);
+ }
timer_mod(s->autopoll_timer,
qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) +