Ignore:
Timestamp:
2017-12-29T12:10:56Z (6 years ago)
Author:
Petr Manek <petr.manek@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5c75456
Parents:
415c5116
Message:

uhci: moved offline call from usbhost, terminating hanging transfers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/uhci/transfer_list.c

    r415c5116 r5dfb70c9  
    202202}
    203203
     204/** Walk the list and finish all batches of a specified device with EINTR.
     205 *
     206 * @param[in] instance List to use.
     207 * @param[in] address Address of the specified device. Other addresses are skipped.
     208 */
     209void transfer_list_abort_device(transfer_list_t *instance, usb_address_t address)
     210{
     211        fibril_mutex_lock(&instance->guard);
     212        link_t *current = list_first(&instance->batch_list);
     213        while (current && current != &instance->batch_list.head && !list_empty(&instance->batch_list)) {
     214                link_t * const next = current->next;
     215                uhci_transfer_batch_t *batch =
     216                    uhci_transfer_batch_from_link(current);
     217
     218                if (batch->base.target.address == address) {
     219                        transfer_list_remove_batch(instance, batch);
     220                        endpoint_abort(batch->base.ep);
     221                }
     222
     223                current = next;
     224        }
     225        fibril_mutex_unlock(&instance->guard);
     226}
     227
    204228/** Remove a transfer batch from the list and queue.
    205229 *
Note: See TracChangeset for help on using the changeset viewer.