Changeset 2770b66 in mainline for uspace/drv/bus/usb/xhci/transfers.c


Ignore:
Timestamp:
2017-10-15T15:05:06Z (7 years ago)
Author:
Petr Manek <petr.manek@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
816f5f4
Parents:
20eaa82
Message:

Fixed few bugs related to control transfers and some deadlocks. Registering control endpoint with HelenOS. Can read out device descriptors through MID and initialize mouse driver!

File:
1 edited

Legend:

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

    r20eaa82 r2770b66  
    145145        transfer->batch = batch;
    146146        link_initialize(&transfer->link);
    147         transfer->hc_buffer = malloc32(batch->buffer_size);
     147        transfer->hc_buffer = batch->buffer_size > 0 ? malloc32(batch->buffer_size) : NULL;
    148148
    149149        return transfer;
     
    152152void xhci_transfer_fini(xhci_transfer_t* transfer) {
    153153        if (transfer) {
    154                 free32(transfer->hc_buffer);
     154                if (transfer->batch->buffer_size > 0)
     155                        free32(transfer->hc_buffer);
     156
     157                usb_transfer_batch_destroy(transfer->batch);
     158
    155159                free(transfer);
    156160        }
     
    179183        /* For the TRB formats, see xHCI specification 6.4.1.2 */
    180184        xhci_transfer_t *transfer = xhci_transfer_alloc(batch);
    181         memcpy(transfer->hc_buffer, batch->buffer, batch->buffer_size);
     185
     186        if (!transfer->direction) {
     187                // Sending stuff from host to device, we need to copy the actual data.
     188                memcpy(transfer->hc_buffer, batch->buffer, batch->buffer_size);
     189        }
    182190
    183191        xhci_trb_t trb_setup;
     
    318326        batch->transfered_size = batch->buffer_size - TRB_TRANSFER_LENGTH(*trb);
    319327        if (transfer->direction) {
     328                memcpy(batch->buffer, transfer->hc_buffer, batch->buffer_size);
     329
    320330                /* Device-to-host, IN */
    321331                if (batch->callback_in)
Note: See TracChangeset for help on using the changeset viewer.