Ignore:
File:
1 edited

Legend:

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

    rc53b58e r3e6a98c5  
    6565{
    6666        int rc;
    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) {
     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) {
    7980                ddir = USB_DIRECTION_IN;
     81                dbuf = cmd->data_in;
    8082                dbuf_size = cmd->data_in_size;
    81                 dpipe = bulk_in_pipe;
     83        } else {
     84                assert(false);
    8285        }
    8386
     
    97100
    98101        MASTLOG("Transferring data.\n");
    99         if (cmd->data_in) {
    100                 size_t act_size;
     102        if (ddir == USB_DIRECTION_IN) {
    101103                /* Recieve data from the device. */
    102                 rc = usb_pipe_read(dpipe, cmd->data_in, cmd->data_in_size,
    103                     &act_size);
     104                rc = usb_pipe_read(bulk_in_pipe, dbuf, dbuf_size, &act_size);
    104105                MASTLOG("Received %zu bytes (%s): %s.\n", act_size,
    105                     usb_debug_str_buffer(cmd->data_in, act_size, 0),
     106                    usb_debug_str_buffer((uint8_t *) dbuf, act_size, 0),
    106107                    str_error(rc));
    107         }
    108         if (cmd->data_out) {
     108        } else {
    109109                /* Send data to the device. */
    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),
     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),
    113113                    str_error(rc));
    114114        }
     
    116116        if (rc == ESTALL) {
    117117                /* Clear stall condition and continue below to read CSW. */
    118                 usb_pipe_clear_halt(
    119                     usb_device_get_default_pipe(mfun->mdev->usb_dev), dpipe);
     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                }
    120125        } else if (rc != EOK) {
    121126                return EIO;
     
    158163        case cbs_phase_error:
    159164                MASTLOG("Phase error\n");
    160                 rc = EIO;
     165                retval = EIO;
    161166                break;
    162167        default:
    163                 rc = EIO;
    164                 break;
    165         }
    166 
    167         const size_t residue = uint32_usb2host(csw.dCSWDataResidue);
     168                retval = EIO;
     169                break;
     170        }
     171
     172        size_t residue = (size_t) uint32_usb2host(csw.dCSWDataResidue);
    168173        if (residue > dbuf_size) {
    169174                MASTLOG("residue > dbuf_size\n");
     
    179184         */
    180185
    181         if (cmd->data_in)
     186        if (ddir == USB_DIRECTION_IN)
    182187                cmd->rcvd_size = dbuf_size - residue;
    183188
    184         return rc;
     189        return retval;
    185190}
    186191
     
    192197int usb_massstor_reset(usbmast_dev_t *mdev)
    193198{
    194         return usb_control_request_set(
    195             usb_device_get_default_pipe(mdev->usb_dev),
     199        return usb_control_request_set(&mdev->usb_dev->ctrl_pipe,
    196200            USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,
    197             0xFF, 0, usb_device_get_iface_number(mdev->usb_dev), NULL, 0);
     201            0xFF, 0, mdev->usb_dev->interface_no, NULL, 0);
    198202}
    199203
     
    211215         */
    212216        usb_massstor_reset(mdev);
    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);
     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);
    217221}
    218222
     
    232236        uint8_t max_lun;
    233237        size_t data_recv_len;
    234         int rc = usb_control_request_get(
    235             usb_device_get_default_pipe(mdev->usb_dev),
     238        int rc = usb_control_request_get(&mdev->usb_dev->ctrl_pipe,
    236239            USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE,
    237             0xFE, 0, usb_device_get_iface_number(mdev->usb_dev), &max_lun, 1,
    238             &data_recv_len);
     240            0xFE, 0, mdev->usb_dev->interface_no, &max_lun, 1, &data_recv_len);
    239241        if (rc != EOK) {
    240242                return rc;
Note: See TracChangeset for help on using the changeset viewer.