[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/22] adb: keep track of devices with pending data
From: |
Mark Cave-Ayland |
Subject: |
[PULL 12/22] adb: keep track of devices with pending data |
Date: |
Fri, 26 Jun 2020 10:23:07 +0100 |
Add a new pending variable to ADBBusState which is a bitmask indicating which
ADB devices have data to send. Update the bitmask every time that an ADB
request is executed.
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-13-mark.cave-ayland@ilande.co.uk>
---
hw/input/adb.c | 16 +++++++++++++++-
include/hw/input/adb.h | 1 +
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/hw/input/adb.c b/hw/input/adb.c
index bb36ce6fad..c1adb21e6b 100644
--- a/hw/input/adb.c
+++ b/hw/input/adb.c
@@ -41,6 +41,7 @@ static void adb_device_reset(ADBDevice *d)
int adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf, int len)
{
ADBDevice *d;
+ ADBDeviceClass *adc;
int devaddr, cmd, i;
cmd = buf[0] & 0xf;
@@ -51,14 +52,27 @@ int adb_request(ADBBusState *s, uint8_t *obuf, const
uint8_t *buf, int len)
}
return 0;
}
+
+ s->pending = 0;
+ for (i = 0; i < s->nb_devices; i++) {
+ d = s->devices[i];
+ adc = ADB_DEVICE_GET_CLASS(d);
+
+ if (adc->devhasdata(d)) {
+ s->pending |= (1 << d->devaddr);
+ }
+ }
+
devaddr = buf[0] >> 4;
for (i = 0; i < s->nb_devices; i++) {
d = s->devices[i];
+ adc = ADB_DEVICE_GET_CLASS(d);
+
if (d->devaddr == devaddr) {
- ADBDeviceClass *adc = ADB_DEVICE_GET_CLASS(d);
return adc->devreq(d, obuf, buf, len);
}
}
+
return ADB_RET_NOTPRESENT;
}
diff --git a/include/hw/input/adb.h b/include/hw/input/adb.h
index 9b80204e43..f1bc358d8e 100644
--- a/include/hw/input/adb.h
+++ b/include/hw/input/adb.h
@@ -76,6 +76,7 @@ struct ADBBusState {
/*< public >*/
ADBDevice *devices[MAX_ADB_DEVICES];
+ uint16_t pending;
int nb_devices;
int poll_index;
--
2.20.1
- [PULL 02/22] adb: fix adb-mouse read length and revert disable-reg3-direct-writes workaround, (continued)
- [PULL 02/22] adb: fix adb-mouse read length and revert disable-reg3-direct-writes workaround, Mark Cave-Ayland, 2020/06/26
- [PULL 03/22] cuda: convert ADB autopoll timer from ns to ms, Mark Cave-Ayland, 2020/06/26
- [PULL 04/22] pmu: fix duplicate autopoll mask variable, Mark Cave-Ayland, 2020/06/26
- [PULL 05/22] pmu: honour autopoll_rate_ms when rearming the ADB autopoll timer, Mark Cave-Ayland, 2020/06/26
- [PULL 06/22] adb: introduce realize/unrealize and VMStateDescription for ADB bus, Mark Cave-Ayland, 2020/06/26
- [PULL 07/22] adb: create autopoll variables directly within ADBBusState, Mark Cave-Ayland, 2020/06/26
- [PULL 08/22] cuda: convert to use ADBBusState internal autopoll variables, Mark Cave-Ayland, 2020/06/26
- [PULL 09/22] pmu: convert to use ADBBusState internal autopoll variables, Mark Cave-Ayland, 2020/06/26
- [PULL 10/22] mac_via: convert to use ADBBusState internal autopoll variables, Mark Cave-Ayland, 2020/06/26
- [PULL 11/22] adb: introduce new ADBDeviceHasData method to ADBDeviceClass, Mark Cave-Ayland, 2020/06/26
- [PULL 12/22] adb: keep track of devices with pending data,
Mark Cave-Ayland <=
- [PULL 13/22] adb: add status field for holding information about the last ADB request, Mark Cave-Ayland, 2020/06/26
- [PULL 14/22] adb: use adb_request() only for explicit requests, Mark Cave-Ayland, 2020/06/26
- [PULL 15/22] adb: add autopoll_blocked variable to block autopoll, Mark Cave-Ayland, 2020/06/26
- [PULL 16/22] cuda: add adb_autopoll_block() and adb_autopoll_unblock() functions, Mark Cave-Ayland, 2020/06/26
- [PULL 17/22] pmu: add adb_autopoll_block() and adb_autopoll_unblock() functions, Mark Cave-Ayland, 2020/06/26
- [PULL 18/22] mac_via: move VIA1 portB write logic into mos6522_q800_via1_write(), Mark Cave-Ayland, 2020/06/26
- [PULL 19/22] mac_via: rework ADB state machine to be compatible with both MacOS and Linux, Mark Cave-Ayland, 2020/06/26
- [PULL 20/22] adb: only call autopoll callbacks when autopoll is not blocked, Mark Cave-Ayland, 2020/06/26
- [PULL 21/22] adb: use adb_device prefix for ADB device trace events, Mark Cave-Ayland, 2020/06/26
- [PULL 22/22] adb: add ADB bus trace events, Mark Cave-Ayland, 2020/06/26