Changeset 3f3afb9 in mainline for uspace/drv/ohci/batch.c


Ignore:
Timestamp:
2011-04-11T20:38:37Z (13 years ago)
Author:
Matus Dekanek <smekideki@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1324ff3, a39cfb8
Parents:
58226b4 (diff), d91645ab (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:

forgotten hub port powering

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/ohci/batch.c

    r58226b4 r3f3afb9  
    5151static void batch_control(usb_transfer_batch_t *instance,
    5252    usb_direction_t data_dir, usb_direction_t status_dir);
     53static void batch_data(usb_transfer_batch_t *instance);
    5354static void batch_call_in_and_dispose(usb_transfer_batch_t *instance);
    5455static void batch_call_out_and_dispose(usb_transfer_batch_t *instance);
     
    134135        assert(data);
    135136        size_t tds = data->td_count - 1;
    136         usb_log_debug2("Batch(%p) checking %d td(s) for completion.\n",
     137        usb_log_debug("Batch(%p) checking %d td(s) for completion.\n",
    137138            instance, tds);
     139        usb_log_debug("ED: %x:%x:%x:%x.\n",
     140            data->ed->status, data->ed->td_head, data->ed->td_tail,
     141            data->ed->next);
    138142        size_t i = 0;
    139143        for (; i < tds; ++i) {
    140                 if (!td_is_finished(&data->tds[i]))
     144                usb_log_debug("TD %d: %x:%x:%x:%x.\n", i,
     145                    data->tds[i].status, data->tds[i].cbp, data->tds[i].next,
     146                    data->tds[i].be);
     147                if (!td_is_finished(&data->tds[i])) {
    141148                        return false;
     149                }
    142150                instance->error = td_error(&data->tds[i]);
    143151                /* FIXME: calculate real transfered size */
     
    177185        assert(instance->direction == USB_DIRECTION_IN);
    178186        instance->next_step = batch_call_in_and_dispose;
    179         /* TODO: implement */
     187        batch_data(instance);
    180188        usb_log_debug("Batch(%p) INTERRUPT IN initialized.\n", instance);
    181189}
     
    189197            instance->buffer_size);
    190198        instance->next_step = batch_call_out_and_dispose;
    191         /* TODO: implement */
     199        batch_data(instance);
    192200        usb_log_debug("Batch(%p) INTERRUPT OUT initialized.\n", instance);
    193201}
     
    198206        instance->direction = USB_DIRECTION_IN;
    199207        instance->next_step = batch_call_in_and_dispose;
    200         /* TODO: implement */
     208        batch_data(instance);
    201209        usb_log_debug("Batch(%p) BULK IN initialized.\n", instance);
    202210}
     
    207215        instance->direction = USB_DIRECTION_IN;
    208216        instance->next_step = batch_call_in_and_dispose;
    209         /* TODO: implement */
     217        batch_data(instance);
    210218        usb_log_debug("Batch(%p) BULK IN initialized.\n", instance);
    211219}
     
    227235        ed_init(data->ed, instance->ep);
    228236        ed_add_tds(data->ed, &data->tds[0], &data->tds[data->td_count - 1]);
    229         usb_log_debug("Created ED: %x:%x:%x:%x.\n", data->ed->status,
    230             data->ed->td_tail, data->ed->td_head, data->ed->next);
     237        usb_log_debug("Created ED(%p): %x:%x:%x:%x.\n", data->ed,
     238            data->ed->status, data->ed->td_tail, data->ed->td_head,
     239            data->ed->next);
    231240        int toggle = 0;
    232241        /* setup stage */
     
    267276}
    268277/*----------------------------------------------------------------------------*/
     278void batch_data(usb_transfer_batch_t *instance)
     279{
     280        assert(instance);
     281        ohci_batch_t *data = instance->private_data;
     282        assert(data);
     283        ed_init(data->ed, instance->ep);
     284        ed_add_tds(data->ed, &data->tds[0], &data->tds[data->td_count - 1]);
     285        usb_log_debug("Created ED(%p): %x:%x:%x:%x.\n", data->ed,
     286            data->ed->status, data->ed->td_tail, data->ed->td_head,
     287            data->ed->next);
     288
     289        /* data stage */
     290        size_t td_current = 0;
     291        size_t remain_size = instance->buffer_size;
     292        char *transfer_buffer = instance->transport_buffer;
     293        while (remain_size > 0) {
     294                size_t transfer_size = remain_size > OHCI_TD_MAX_TRANSFER ?
     295                    OHCI_TD_MAX_TRANSFER : remain_size;
     296
     297                td_init(&data->tds[td_current], instance->ep->direction,
     298                    transfer_buffer, transfer_size, -1);
     299                td_set_next(&data->tds[td_current], &data->tds[td_current + 1]);
     300                usb_log_debug("Created DATA TD: %x:%x:%x:%x.\n",
     301                    data->tds[td_current].status, data->tds[td_current].cbp,
     302                    data->tds[td_current].next, data->tds[td_current].be);
     303
     304                transfer_buffer += transfer_size;
     305                remain_size -= transfer_size;
     306                assert(td_current < data->td_count);
     307                ++td_current;
     308        }
     309}
     310/*----------------------------------------------------------------------------*/
    269311/** Helper function calls callback and correctly disposes of batch structure.
    270312 *
Note: See TracChangeset for help on using the changeset viewer.