Changeset e42dd32 in mainline for uspace/drv/ohci/batch.c


Ignore:
Timestamp:
2011-04-08T23:28:52Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f1be95c8
Parents:
b854e56
Message:

OCHI structures fixed, setup control transfer

File:
1 edited

Legend:

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

    rb854e56 re42dd32  
    4949} ohci_batch_t;
    5050
    51 static void batch_control(usb_transfer_batch_t *instance);
     51static void batch_control(usb_transfer_batch_t *instance,
     52    usb_direction_t data_dir, usb_direction_t status_dir);
    5253static void batch_call_in_and_dispose(usb_transfer_batch_t *instance);
    5354static void batch_call_out_and_dispose(usb_transfer_batch_t *instance);
     
    135136            instance->buffer_size);
    136137        instance->next_step = batch_call_out_and_dispose;
    137         batch_control(instance);
     138        batch_control(instance, USB_DIRECTION_OUT, USB_DIRECTION_IN);
    138139        usb_log_debug("Batch(%p) CONTROL WRITE initialized.\n", instance);
    139140}
     
    143144        assert(instance);
    144145        instance->next_step = batch_call_in_and_dispose;
    145         batch_control(instance);
     146        batch_control(instance, USB_DIRECTION_IN, USB_DIRECTION_OUT);
    146147        usb_log_debug("Batch(%p) CONTROL READ initialized.\n", instance);
    147148}
     
    194195}
    195196/*----------------------------------------------------------------------------*/
    196 static void batch_control(usb_transfer_batch_t *instance)
     197void batch_control(usb_transfer_batch_t *instance,
     198    usb_direction_t data_dir, usb_direction_t status_dir)
    197199{
    198200        assert(instance);
     
    200202        assert(data);
    201203        ed_init(data->ed, instance->ep);
     204        ed_add_tds(data->ed, &data->tds[0], &data->tds[data->td_count - 1]);
     205        usb_log_debug("Created ED: %x:%x:%x:%x.\n", data->ed->status,
     206            data->ed->td_tail, data->ed->td_head, data->ed->next);
     207        int toggle = 0;
     208        /* setup stage */
     209        td_init(&data->tds[0], USB_DIRECTION_BOTH, instance->setup_buffer,
     210                instance->setup_size, toggle);
     211        td_set_next(&data->tds[0], &data->tds[1]);
     212        usb_log_debug("Created SETUP TD: %x:%x:%x:%x.\n", data->tds[0].status,
     213            data->tds[0].cbp, data->tds[0].next, data->tds[0].be);
     214
     215        /* data stage */
     216        size_t td_current = 1;
     217        size_t remain_size = instance->buffer_size;
     218        char *transfer_buffer = instance->transport_buffer;
     219        while (remain_size > 0) {
     220                size_t transfer_size = remain_size > OHCI_TD_MAX_TRANSFER ?
     221                    OHCI_TD_MAX_TRANSFER : remain_size;
     222                toggle = 1 - toggle;
     223
     224                td_init(&data->tds[td_current], data_dir, transfer_buffer,
     225                    transfer_size, toggle);
     226                td_set_next(&data->tds[td_current], &data->tds[td_current + 1]);
     227                usb_log_debug("Created DATA TD: %x:%x:%x:%x.\n",
     228                    data->tds[td_current].status, data->tds[td_current].cbp,
     229                    data->tds[td_current].next, data->tds[td_current].be);
     230
     231                transfer_buffer += transfer_size;
     232                remain_size -= transfer_size;
     233                assert(td_current < data->td_count - 2);
     234                ++td_current;
     235        }
     236
     237        /* status stage */
     238        assert(td_current == data->td_count - 2);
     239        td_init(&data->tds[td_current], status_dir, NULL, 0, 1);
     240        usb_log_debug("Created STATUS TD: %x:%x:%x:%x.\n",
     241            data->tds[td_current].status, data->tds[td_current].cbp,
     242            data->tds[td_current].next, data->tds[td_current].be);
    202243}
    203244/*----------------------------------------------------------------------------*/
Note: See TracChangeset for help on using the changeset viewer.