Ignore:
Timestamp:
2014-09-12T05:25:57Z (10 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
83062ff
Parents:
8e7c9fe
Message:

usbmast: Fix cache sync command

the code was obviously never run, let alone tested
add cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbmast/bo_trans.c

    r8e7c9fe rc53b58e  
    6565{
    6666        int rc;
    67         int retval = EOK;
    68         size_t act_size;
     67
     68        if (cmd->data_in && cmd->data_out)
     69                return EINVAL;
     70
    6971        usb_pipe_t *bulk_in_pipe = mfun->mdev->bulk_in_pipe;
    7072        usb_pipe_t *bulk_out_pipe = mfun->mdev->bulk_out_pipe;
    71         usb_direction_t ddir;
    72         void *dbuf;
    73         size_t dbuf_size;
    74 
    75         if (cmd->data_out != NULL && cmd->data_in == NULL) {
    76                 ddir = USB_DIRECTION_OUT;
    77                 dbuf = (void *)cmd->data_out;
    78                 dbuf_size = cmd->data_out_size;
    79         } else if (cmd->data_out == NULL && cmd->data_in != NULL) {
     73
     74        usb_pipe_t *dpipe = bulk_out_pipe;
     75        usb_direction_t ddir = USB_DIRECTION_OUT;
     76        size_t dbuf_size = cmd->data_out_size;
     77
     78        if (cmd->data_in) {
    8079                ddir = USB_DIRECTION_IN;
    81                 dbuf = cmd->data_in;
    8280                dbuf_size = cmd->data_in_size;
    83         } else {
    84                 assert(false);
     81                dpipe = bulk_in_pipe;
    8582        }
    8683
     
    10097
    10198        MASTLOG("Transferring data.\n");
    102         if (ddir == USB_DIRECTION_IN) {
     99        if (cmd->data_in) {
     100                size_t act_size;
    103101                /* Recieve data from the device. */
    104                 rc = usb_pipe_read(bulk_in_pipe, dbuf, dbuf_size, &act_size);
     102                rc = usb_pipe_read(dpipe, cmd->data_in, cmd->data_in_size,
     103                    &act_size);
    105104                MASTLOG("Received %zu bytes (%s): %s.\n", act_size,
    106                     usb_debug_str_buffer((uint8_t *) dbuf, act_size, 0),
     105                    usb_debug_str_buffer(cmd->data_in, act_size, 0),
    107106                    str_error(rc));
    108         } else {
     107        }
     108        if (cmd->data_out) {
    109109                /* Send data to the device. */
    110                 rc = usb_pipe_write(bulk_out_pipe, dbuf, dbuf_size);
    111                 MASTLOG("Sent %zu bytes (%s): %s.\n", act_size,
    112                     usb_debug_str_buffer((uint8_t *) dbuf, act_size, 0),
     110                rc = usb_pipe_write(dpipe, cmd->data_out, cmd->data_out_size);
     111                MASTLOG("Sent %zu bytes (%s): %s.\n", cmd->data_out_size,
     112                    usb_debug_str_buffer(cmd->data_out, cmd->data_out_size, 0),
    113113                    str_error(rc));
    114114        }
     
    116116        if (rc == ESTALL) {
    117117                /* Clear stall condition and continue below to read CSW. */
    118                 if (ddir == USB_DIRECTION_IN) {
    119                         usb_pipe_clear_halt(
    120                             usb_device_get_default_pipe(mfun->mdev->usb_dev),
    121                             bulk_in_pipe);
    122                 } else {
    123                         usb_pipe_clear_halt(
    124                             usb_device_get_default_pipe(mfun->mdev->usb_dev),
    125                             bulk_out_pipe);
    126                 }
     118                usb_pipe_clear_halt(
     119                    usb_device_get_default_pipe(mfun->mdev->usb_dev), dpipe);
    127120        } else if (rc != EOK) {
    128121                return EIO;
     
    165158        case cbs_phase_error:
    166159                MASTLOG("Phase error\n");
    167                 retval = EIO;
     160                rc = EIO;
    168161                break;
    169162        default:
    170                 retval = EIO;
    171                 break;
    172         }
    173 
    174         size_t residue = (size_t) uint32_usb2host(csw.dCSWDataResidue);
     163                rc = EIO;
     164                break;
     165        }
     166
     167        const size_t residue = uint32_usb2host(csw.dCSWDataResidue);
    175168        if (residue > dbuf_size) {
    176169                MASTLOG("residue > dbuf_size\n");
     
    186179         */
    187180
    188         if (ddir == USB_DIRECTION_IN)
     181        if (cmd->data_in)
    189182                cmd->rcvd_size = dbuf_size - residue;
    190183
    191         return retval;
     184        return rc;
    192185}
    193186
Note: See TracChangeset for help on using the changeset viewer.