提交 913f47ef 编写于 作者: M Mark Cave-Ayland

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: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Tested-by: NFinn Thain <fthain@telegraphics.com.au>
Acked-by: NLaurent Vivier <laurent@vivier.eu>
Message-Id: <20200623204936.24064-21-mark.cave-ayland@ilande.co.uk>
上级 975fcedd
......@@ -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) +
......
......@@ -615,11 +615,7 @@ static void adb_via_poll(void *opaque)
* received, however we must block autopoll until the point where
* the entire reply has been read back to the host
*/
if (adb_bus->autopoll_blocked) {
return;
} else {
adb_autopoll_block(adb_bus);
}
adb_autopoll_block(adb_bus);
m->adb_data_in_index = 0;
m->adb_data_out_index = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册