diff options
Diffstat (limited to 'hw/usb')
-rw-r--r-- | hw/usb/hcd-musb.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/hw/usb/hcd-musb.c b/hw/usb/hcd-musb.c index 40809f610e..61cc87894e 100644 --- a/hw/usb/hcd-musb.c +++ b/hw/usb/hcd-musb.c @@ -554,8 +554,10 @@ static void musb_schedule_cb(USBPort *port, USBPacket *packey) timeout = ep->timeout[dir]; else if (ep->interrupt[dir]) timeout = 8; - else - return musb_cb_tick(ep); + else { + musb_cb_tick(ep); + return; + } if (!ep->intv_timer[dir]) ep->intv_timer[dir] = timer_new_ns(QEMU_CLOCK_VIRTUAL, musb_cb_tick, ep); @@ -772,9 +774,11 @@ static void musb_rx_packet_complete(USBPacket *packey, void *opaque) /* NAK timeouts are only generated in Bulk transfers and * Data-errors in Isochronous. */ - if (ep->interrupt[1]) - return musb_packet(s, ep, epnum, USB_TOKEN_IN, - packey->iov.size, musb_rx_packet_complete, 1); + if (ep->interrupt[1]) { + musb_packet(s, ep, epnum, USB_TOKEN_IN, + packey->iov.size, musb_rx_packet_complete, 1); + return; + } ep->csr[1] |= MGC_M_RXCSR_DATAERROR; if (!epnum) @@ -864,8 +868,7 @@ static void musb_tx_rdy(MUSBState *s, int epnum) * but it doesn't make sense for us to do that. */ } - return musb_packet(s, ep, epnum, pid, - total, musb_tx_packet_complete, 0); + musb_packet(s, ep, epnum, pid, total, musb_tx_packet_complete, 0); } static void musb_rx_req(MUSBState *s, int epnum) @@ -929,8 +932,7 @@ static void musb_rx_req(MUSBState *s, int epnum) } #endif - return musb_packet(s, ep, epnum, USB_TOKEN_IN, - total, musb_rx_packet_complete, 1); + musb_packet(s, ep, epnum, USB_TOKEN_IN, total, musb_rx_packet_complete, 1); } static uint8_t musb_read_fifo(MUSBEndPoint *ep) |