Ignore:
File:
1 edited

Legend:

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

    r3e6a98c5 rc53b58e  
    6565{
    6666        int rc;
    67         int retval = EOK;
    68         size_t act_size;
    69         usb_pipe_t *bulk_in_pipe = &mfun->mdev->usb_dev->pipes[BULK_IN_EP].pipe;
    70         usb_pipe_t *bulk_out_pipe = &mfun->mdev->usb_dev->pipes[BULK_OUT_EP].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) {
     67
     68        if (cmd->data_in && cmd->data_out)
     69                return EINVAL;
     70
     71        usb_pipe_t *bulk_in_pipe = mfun->mdev->bulk_in_pipe;
     72        usb_pipe_t *bulk_out_pipe = mfun->mdev->bulk_out_pipe;
     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(&mfun->mdev->usb_dev->ctrl_pipe,
    120                             &mfun->mdev->usb_dev->pipes[BULK_IN_EP].pipe);
    121                 } else {
    122                         usb_pipe_clear_halt(&mfun->mdev->usb_dev->ctrl_pipe,
    123                             &mfun->mdev->usb_dev->pipes[BULK_OUT_EP].pipe);
    124                 }
     118                usb_pipe_clear_halt(
     119                    usb_device_get_default_pipe(mfun->mdev->usb_dev), dpipe);
    125120        } else if (rc != EOK) {
    126121                return EIO;
     
    163158        case cbs_phase_error:
    164159                MASTLOG("Phase error\n");
    165                 retval = EIO;
     160                rc = EIO;
    166161                break;
    167162        default:
    168                 retval = EIO;
    169                 break;
    170         }
    171 
    172         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);
    173168        if (residue > dbuf_size) {
    174169                MASTLOG("residue > dbuf_size\n");
     
    184179         */
    185180
    186         if (ddir == USB_DIRECTION_IN)
     181        if (cmd->data_in)
    187182                cmd->rcvd_size = dbuf_size - residue;
    188183
    189         return retval;
     184        return rc;
    190185}
    191186
     
    197192int usb_massstor_reset(usbmast_dev_t *mdev)
    198193{
    199         return usb_control_request_set(&mdev->usb_dev->ctrl_pipe,
     194        return usb_control_request_set(
     195            usb_device_get_default_pipe(mdev->usb_dev),
    200196            USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,
    201             0xFF, 0, mdev->usb_dev->interface_no, NULL, 0);
     197            0xFF, 0, usb_device_get_iface_number(mdev->usb_dev), NULL, 0);
    202198}
    203199
     
    215211         */
    216212        usb_massstor_reset(mdev);
    217         usb_pipe_clear_halt(&mdev->usb_dev->ctrl_pipe,
    218             &mdev->usb_dev->pipes[BULK_IN_EP].pipe);
    219         usb_pipe_clear_halt(&mdev->usb_dev->ctrl_pipe,
    220             &mdev->usb_dev->pipes[BULK_OUT_EP].pipe);
     213        usb_pipe_clear_halt(usb_device_get_default_pipe(mdev->usb_dev),
     214            mdev->bulk_in_pipe);
     215        usb_pipe_clear_halt(usb_device_get_default_pipe(mdev->usb_dev),
     216            mdev->bulk_out_pipe);
    221217}
    222218
     
    236232        uint8_t max_lun;
    237233        size_t data_recv_len;
    238         int rc = usb_control_request_get(&mdev->usb_dev->ctrl_pipe,
     234        int rc = usb_control_request_get(
     235            usb_device_get_default_pipe(mdev->usb_dev),
    239236            USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,
    240             0xFE, 0, mdev->usb_dev->interface_no, &max_lun, 1, &data_recv_len);
     237            0xFE, 0, usb_device_get_iface_number(mdev->usb_dev), &max_lun, 1,
     238            &data_recv_len);
    241239        if (rc != EOK) {
    242240                return rc;
Note: See TracChangeset for help on using the changeset viewer.