adb: use adb_request() only for explicit requests
Currently adb_request() is called both for explicit ADB requests and internal autopoll requests via adb_poll(). Move the current functionality into do_adb_request() to be used internally and add a simple adb_request() wrapper for explicit requests. 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-15-mark.cave-ayland@ilande.co.uk>
This commit is contained in:
parent
3fe02cc8b3
commit
d2288b7584
|
@ -38,7 +38,8 @@ static void adb_device_reset(ADBDevice *d)
|
||||||
qdev_reset_all(DEVICE(d));
|
qdev_reset_all(DEVICE(d));
|
||||||
}
|
}
|
||||||
|
|
||||||
int adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf, int len)
|
static int do_adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf,
|
||||||
|
int len)
|
||||||
{
|
{
|
||||||
ADBDevice *d;
|
ADBDevice *d;
|
||||||
ADBDeviceClass *adc;
|
ADBDeviceClass *adc;
|
||||||
|
@ -83,6 +84,11 @@ int adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf, int len)
|
||||||
return ADB_RET_NOTPRESENT;
|
return ADB_RET_NOTPRESENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf, int len)
|
||||||
|
{
|
||||||
|
return do_adb_request(s, obuf, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
/* XXX: move that to cuda ? */
|
/* XXX: move that to cuda ? */
|
||||||
int adb_poll(ADBBusState *s, uint8_t *obuf, uint16_t poll_mask)
|
int adb_poll(ADBBusState *s, uint8_t *obuf, uint16_t poll_mask)
|
||||||
{
|
{
|
||||||
|
@ -98,7 +104,7 @@ int adb_poll(ADBBusState *s, uint8_t *obuf, uint16_t poll_mask)
|
||||||
d = s->devices[s->poll_index];
|
d = s->devices[s->poll_index];
|
||||||
if ((1 << d->devaddr) & poll_mask) {
|
if ((1 << d->devaddr) & poll_mask) {
|
||||||
buf[0] = ADB_READREG | (d->devaddr << 4);
|
buf[0] = ADB_READREG | (d->devaddr << 4);
|
||||||
olen = adb_request(s, obuf + 1, buf, 1);
|
olen = do_adb_request(s, obuf + 1, buf, 1);
|
||||||
/* if there is data, we poll again the same device */
|
/* if there is data, we poll again the same device */
|
||||||
if (olen > 0) {
|
if (olen > 0) {
|
||||||
s->status |= ADB_STATUS_POLLREPLY;
|
s->status |= ADB_STATUS_POLLREPLY;
|
||||||
|
|
Loading…
Reference in a new issue