Changeset 1ed3eb4 in mainline for uspace/drv/bus/usb/xhci/transfers.c


Ignore:
Timestamp:
2018-01-13T19:13:04Z (6 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2489353
Parents:
001778c
git-author:
Ondřej Hlavatý <aearsis@…> (2018-01-13 19:12:34)
git-committer:
Ondřej Hlavatý <aearsis@…> (2018-01-13 19:13:04)
Message:

usbhost: endpoint is identified also by its direction

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/xhci/transfers.c

    r001778c r1ed3eb4  
    258258
    259259        const usb_endpoint_t ep_num = ep_dci / 2;
    260         xhci_endpoint_t *ep = xhci_device_get_endpoint(dev, ep_num);
    261         if (!ep) {
    262                 usb_log_error("Transfer event on dropped endpoint %u of device "
    263                     XHCI_DEV_FMT, ep_num, XHCI_DEV_ARGS(*dev));
     260        const usb_endpoint_t dir = ep_dci % 2 ? USB_DIRECTION_IN : USB_DIRECTION_OUT;
     261        endpoint_t *ep_base = bus_find_endpoint(&dev->base, ep_num, dir);
     262        if (!ep_base) {
     263                usb_log_error("Transfer event on dropped endpoint %u %s of device "
     264                    XHCI_DEV_FMT, ep_num, usb_str_direction(dir), XHCI_DEV_ARGS(*dev));
    264265                return ENOENT;
    265266        }
    266         // No need to add reference for endpoint, it is held by the transfer batch.
     267        xhci_endpoint_t *ep = xhci_endpoint_get(ep_base);
    267268
    268269        /* FIXME: This is racy. Do we care? */
     
    270271
    271272        if (ep->base.transfer_type == USB_TRANSFER_ISOCHRONOUS) {
    272                 return isoch_handle_transfer_event(hc, ep, trb);
     273                isoch_handle_transfer_event(hc, ep, trb);
     274                endpoint_del_ref(&ep->base);
     275                return EOK;
    273276        }
    274277
     
    277280        if (!batch) {
    278281                fibril_mutex_unlock(&ep->base.guard);
     282                endpoint_del_ref(&ep->base);
    279283                return ENOENT;
    280284        }
     
    305309
    306310        usb_transfer_batch_finish(batch);
     311        endpoint_del_ref(&ep->base);
    307312        return EOK;
    308313}
Note: See TracChangeset for help on using the changeset viewer.