Changeset 7190bbc in mainline for uspace/drv/bus/usb/usbmast/bo_trans.c
- Timestamp:
- 2011-07-15T20:22:32Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e6b32a8
- Parents:
- 89d3f3c7
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmast/bo_trans.c
r89d3f3c7 r7190bbc 42 42 #include "bo_trans.h" 43 43 #include "cmdw.h" 44 #include "usbmast.h" 44 45 45 46 bool usb_mast_verbose = false; … … 54 55 /** Send command via bulk-only transport. 55 56 * 57 * @param mfun Mass storage function 56 58 * @param tag Command block wrapper tag (automatically compared 57 59 * with answer) … … 66 68 * @return Error code 67 69 */ 68 static int usb_massstor_cmd(usb _device_t *dev, uint32_t tag, uint8_t lun,70 static int usb_massstor_cmd(usbmast_fun_t *mfun, uint32_t tag, uint8_t lun, 69 71 const void *cmd, size_t cmd_size, usb_direction_t ddir, void *dbuf, 70 72 size_t dbuf_size, size_t *xferred_size) … … 72 74 int rc; 73 75 size_t act_size; 74 usb_pipe_t *bulk_in_pipe = dev->pipes[BULK_IN_EP].pipe;75 usb_pipe_t *bulk_out_pipe = dev->pipes[BULK_OUT_EP].pipe;76 usb_pipe_t *bulk_in_pipe = mfun->usb_dev->pipes[BULK_IN_EP].pipe; 77 usb_pipe_t *bulk_out_pipe = mfun->usb_dev->pipes[BULK_OUT_EP].pipe; 76 78 77 79 /* Prepare CBW - command block wrapper */ … … 165 167 /** Perform data-in command. 166 168 * 169 * @param mfun Mass storage function 167 170 * @param tag Command block wrapper tag (automatically compared with 168 171 * answer) … … 176 179 * @return Error code 177 180 */ 178 int usb_massstor_data_in(usb _device_t *dev, uint32_t tag, uint8_t lun,181 int usb_massstor_data_in(usbmast_fun_t *mfun, uint32_t tag, uint8_t lun, 179 182 const void *cmd, size_t cmd_size, void *dbuf, size_t dbuf_size, size_t *proc_size) 180 183 { 181 return usb_massstor_cmd( dev, tag, lun, cmd, cmd_size, USB_DIRECTION_IN,184 return usb_massstor_cmd(mfun, tag, lun, cmd, cmd_size, USB_DIRECTION_IN, 182 185 dbuf, dbuf_size, proc_size); 183 186 } … … 185 188 /** Perform data-out command. 186 189 * 190 * @param mfun Mass storage function 187 191 * @param tag Command block wrapper tag (automatically compared with 188 192 * answer) … … 196 200 * @return Error code 197 201 */ 198 int usb_massstor_data_out(usb _device_t *dev, uint32_t tag, uint8_t lun,202 int usb_massstor_data_out(usbmast_fun_t *mfun, uint32_t tag, uint8_t lun, 199 203 const void *cmd, size_t cmd_size, const void *data, size_t data_size, 200 204 size_t *proc_size) 201 205 { 202 return usb_massstor_cmd( dev, tag, lun, cmd, cmd_size, USB_DIRECTION_OUT,206 return usb_massstor_cmd(mfun, tag, lun, cmd, cmd_size, USB_DIRECTION_OUT, 203 207 (void *) data, data_size, proc_size); 204 208 } … … 206 210 /** Perform bulk-only mass storage reset. 207 211 * 208 * @param dev Device to be reseted.209 * @return Error code.210 */ 211 int usb_massstor_reset(usb _device_t *dev)212 { 213 return usb_control_request_set(& dev->ctrl_pipe,212 * @param mfun Mass storage function 213 * @return Error code 214 */ 215 int usb_massstor_reset(usbmast_fun_t *mfun) 216 { 217 return usb_control_request_set(&mfun->usb_dev->ctrl_pipe, 214 218 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 215 0xFF, 0, dev->interface_no, NULL, 0);219 0xFF, 0, mfun->usb_dev->interface_no, NULL, 0); 216 220 } 217 221 … … 221 225 * would reappear on next transaction somehow. 222 226 * 223 * @param dev Device to be reseted.224 */ 225 void usb_massstor_reset_recovery(usb _device_t *dev)227 * @param mfun Mass storage function 228 */ 229 void usb_massstor_reset_recovery(usbmast_fun_t *mfun) 226 230 { 227 231 /* We would ignore errors here because if this fails 228 232 * we are doomed anyway and any following transaction would fail. 229 233 */ 230 usb_massstor_reset(dev); 231 usb_pipe_clear_halt(&dev->ctrl_pipe, dev->pipes[BULK_IN_EP].pipe); 232 usb_pipe_clear_halt(&dev->ctrl_pipe, dev->pipes[BULK_OUT_EP].pipe); 234 usb_massstor_reset(mfun); 235 usb_pipe_clear_halt(&mfun->usb_dev->ctrl_pipe, 236 mfun->usb_dev->pipes[BULK_IN_EP].pipe); 237 usb_pipe_clear_halt(&mfun->usb_dev->ctrl_pipe, 238 mfun->usb_dev->pipes[BULK_OUT_EP].pipe); 233 239 } 234 240 … … 241 247 * You shall rather use usb_masstor_get_lun_count. 242 248 * 243 * @param dev Mass storage device.244 * @return Error code of maximum LUN (index, not count).245 */ 246 int usb_massstor_get_max_lun(usb _device_t *dev)249 * @param mfun Mass storage function 250 * @return Error code of maximum LUN (index, not count) 251 */ 252 int usb_massstor_get_max_lun(usbmast_fun_t *mfun) 247 253 { 248 254 uint8_t max_lun; 249 255 size_t data_recv_len; 250 int rc = usb_control_request_get(& dev->ctrl_pipe,256 int rc = usb_control_request_get(&mfun->usb_dev->ctrl_pipe, 251 257 USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE, 252 0xFE, 0, dev->interface_no, &max_lun, 1, &data_recv_len);258 0xFE, 0, mfun->usb_dev->interface_no, &max_lun, 1, &data_recv_len); 253 259 if (rc != EOK) { 254 260 return rc; … … 265 271 * (typically that shall not be a problem). 266 272 * 267 * @param dev Mass storage device.268 * @return Number of LUNs.269 */ 270 size_t usb_masstor_get_lun_count(usb _device_t *dev)271 { 272 int max_lun = usb_massstor_get_max_lun( dev);273 * @param mfun Mass storage function 274 * @return Number of LUNs 275 */ 276 size_t usb_masstor_get_lun_count(usbmast_fun_t *mfun) 277 { 278 int max_lun = usb_massstor_get_max_lun(mfun); 273 279 if (max_lun < 0) { 274 280 max_lun = 1;
Note:
See TracChangeset
for help on using the changeset viewer.