Changeset e099f26 in mainline for uspace/drv/uhci-hcd/transfer_list.c


Ignore:
Timestamp:
2011-03-21T20:22:50Z (14 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c56c5b5b
Parents:
4fb6d9ee (diff), 31b568e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Development branch changes (including OHCI)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci-hcd/transfer_list.c

    r4fb6d9ee re099f26  
    3838
    3939static void transfer_list_remove_batch(
    40     transfer_list_t *instance, batch_t *batch);
     40    transfer_list_t *instance, usb_transfer_batch_t *batch);
    4141/*----------------------------------------------------------------------------*/
    4242/** Initialize transfer list structures.
     
    9191 * The batch is added to the end of the list and queue.
    9292 */
    93 void transfer_list_add_batch(transfer_list_t *instance, batch_t *batch)
     93void transfer_list_add_batch(transfer_list_t *instance, usb_transfer_batch_t *batch)
    9494{
    9595        assert(instance);
    9696        assert(batch);
    9797        usb_log_debug2("Queue %s: Adding batch(%p).\n", instance->name, batch);
    98 
    9998
    10099        fibril_mutex_lock(&instance->guard);
     
    107106        } else {
    108107                /* There is something scheduled */
    109                 batch_t *last = list_get_instance(
    110                     instance->batch_list.prev, batch_t, link);
    111                 last_qh = last->qh;
     108                usb_transfer_batch_t *last = list_get_instance(
     109                    instance->batch_list.prev, usb_transfer_batch_t, link);
     110                last_qh = batch_qh(last);
    112111        }
    113112        const uint32_t pa = addr_to_phys(batch->qh);
    114113        assert((pa & LINK_POINTER_ADDRESS_MASK) == pa);
    115114
    116         batch->qh->next = last_qh->next;
     115        /* keep link */
     116        batch_qh(batch)->next = last_qh->next;
    117117        qh_set_next_qh(last_qh, pa);
    118118
     
    120120        list_append(&batch->link, &instance->batch_list);
    121121
    122         batch_t *first = list_get_instance(
    123             instance->batch_list.next, batch_t, link);
     122        usb_transfer_batch_t *first = list_get_instance(
     123            instance->batch_list.next, usb_transfer_batch_t, link);
    124124        usb_log_debug("Batch(%p) added to queue %s, first is %p.\n",
    125125                batch, instance->name, first);
     
    146146        while (current != &instance->batch_list) {
    147147                link_t *next = current->next;
    148                 batch_t *batch = list_get_instance(current, batch_t, link);
     148                usb_transfer_batch_t *batch = list_get_instance(current, usb_transfer_batch_t, link);
    149149
    150150                if (batch_is_complete(batch)) {
     
    160160                link_t *item = done.next;
    161161                list_remove(item);
    162                 batch_t *batch = list_get_instance(item, batch_t, link);
     162                usb_transfer_batch_t *batch = list_get_instance(item, usb_transfer_batch_t, link);
    163163                batch->next_step(batch);
    164164        }
     
    174174        while (!list_empty(&instance->batch_list)) {
    175175                link_t *current = instance->batch_list.next;
    176                 batch_t *batch = list_get_instance(current, batch_t, link);
     176                usb_transfer_batch_t *batch = list_get_instance(current, usb_transfer_batch_t, link);
    177177                transfer_list_remove_batch(instance, batch);
    178                 batch_abort(batch);
     178                usb_transfer_batch_finish(batch, EIO);
    179179        }
    180180        fibril_mutex_unlock(&instance->guard);
     
    189189 * Does not lock the transfer list, caller is responsible for that.
    190190 */
    191 void transfer_list_remove_batch(transfer_list_t *instance, batch_t *batch)
    192 {
    193         assert(instance);
     191void transfer_list_remove_batch(transfer_list_t *instance, usb_transfer_batch_t *batch)
     192{
     193        assert(instance);
     194        assert(instance->queue_head);
    194195        assert(batch);
    195         assert(instance->queue_head);
    196         assert(batch->qh);
     196        assert(batch_qh(batch));
    197197        assert(fibril_mutex_is_locked(&instance->guard));
    198198
     
    205205                /* I'm the first one here */
    206206                assert((instance->queue_head->next & LINK_POINTER_ADDRESS_MASK)
    207                     == addr_to_phys(batch->qh));
    208                 instance->queue_head->next = batch->qh->next;
     207                    == addr_to_phys(bathc_qh(batch)));
     208                instance->queue_head->next = batch_qh(batch)->next;
    209209                qpos = "FIRST";
    210210        } else {
    211                 batch_t *prev =
    212                     list_get_instance(batch->link.prev, batch_t, link);
    213                 assert((prev->qh->next & LINK_POINTER_ADDRESS_MASK)
    214                     == addr_to_phys(batch->qh));
    215                 prev->qh->next = batch->qh->next;
     211                usb_transfer_batch_t *prev =
     212                    list_get_instance(batch->link.prev, usb_transfer_batch_t, link);
     213                assert((batch_qh(prev)->next & LINK_POINTER_ADDRESS_MASK)
     214                    == addr_to_phys(batch_qh(batch)));
     215                batch_qh(prev)->next = batch_qh(batch)->next;
    216216                qpos = "NOT FIRST";
    217217        }
     
    219219        list_remove(&batch->link);
    220220        usb_log_debug("Batch(%p) removed (%s) from %s, next %x.\n",
    221             batch, qpos, instance->name, batch->qh->next);
     221            batch, pos, instance->name, batch_qh(batch)->next);
    222222}
    223223/**
Note: See TracChangeset for help on using the changeset viewer.