Changes in uspace/drv/bus/usb/usbmast/bo_trans.c [c53b58e:3e6a98c5] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmast/bo_trans.c
rc53b58e r3e6a98c5 65 65 { 66 66 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) { 79 80 ddir = USB_DIRECTION_IN; 81 dbuf = cmd->data_in; 80 82 dbuf_size = cmd->data_in_size; 81 dpipe = bulk_in_pipe; 83 } else { 84 assert(false); 82 85 } 83 86 … … 97 100 98 101 MASTLOG("Transferring data.\n"); 99 if (cmd->data_in) { 100 size_t act_size; 102 if (ddir == USB_DIRECTION_IN) { 101 103 /* 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); 104 105 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), 106 107 str_error(rc)); 107 } 108 if (cmd->data_out) { 108 } else { 109 109 /* 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), 113 113 str_error(rc)); 114 114 } … … 116 116 if (rc == ESTALL) { 117 117 /* 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 } 120 125 } else if (rc != EOK) { 121 126 return EIO; … … 158 163 case cbs_phase_error: 159 164 MASTLOG("Phase error\n"); 160 r c= EIO;165 retval = EIO; 161 166 break; 162 167 default: 163 r c= 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); 168 173 if (residue > dbuf_size) { 169 174 MASTLOG("residue > dbuf_size\n"); … … 179 184 */ 180 185 181 if ( cmd->data_in)186 if (ddir == USB_DIRECTION_IN) 182 187 cmd->rcvd_size = dbuf_size - residue; 183 188 184 return r c;189 return retval; 185 190 } 186 191 … … 192 197 int usb_massstor_reset(usbmast_dev_t *mdev) 193 198 { 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, 196 200 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); 198 202 } 199 203 … … 211 215 */ 212 216 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); 217 221 } 218 222 … … 232 236 uint8_t max_lun; 233 237 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, 236 239 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); 239 241 if (rc != EOK) { 240 242 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.