Changeset dd8b6a8 in mainline for uspace/drv
- Timestamp:
- 2014-08-27T23:56:16Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 95fe55ca
- Parents:
- f27f3fd
- Location:
- uspace/drv/bus/usb/usbmast
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmast/main.c
rf27f3fd rdd8b6a8 85 85 static int usbmast_bd_close(bd_srv_t *); 86 86 static int usbmast_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t); 87 static int usbmast_bd_sync_cache(bd_srv_t *, aoff64_t, size_t); 87 88 static int usbmast_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *, size_t); 88 89 static int usbmast_bd_get_block_size(bd_srv_t *, size_t *); … … 93 94 .close = usbmast_bd_close, 94 95 .read_blocks = usbmast_bd_read_blocks, 96 .sync_cache = usbmast_bd_sync_cache, 95 97 .write_blocks = usbmast_bd_write_blocks, 96 98 .get_block_size = usbmast_bd_get_block_size, … … 338 340 } 339 341 342 /** Synchronize blocks to nonvolatile storage. */ 343 static int usbmast_bd_sync_cache(bd_srv_t *bd, uint64_t ba, size_t cnt) 344 { 345 usbmast_fun_t *mfun = bd_srv_usbmast(bd); 346 347 return usbmast_sync_cache(mfun, ba, cnt); 348 } 349 340 350 /** Write blocks to the device. */ 341 351 static int usbmast_bd_write_blocks(bd_srv_t *bd, uint64_t ba, size_t cnt, -
uspace/drv/bus/usb/usbmast/scsi_ms.c
rf27f3fd rdd8b6a8 383 383 } 384 384 385 /** Perform SCSI Synchronize Cache command on USB mass storage device. 386 * 387 * @param mfun Mass storage function 388 * @param ba Address of first block 389 * @param nblocks Number of blocks to read 390 * @param data Data to write 391 * 392 * @return Error code 393 */ 394 int usbmast_sync_cache(usbmast_fun_t *mfun, uint64_t ba, size_t nblocks) 395 { 396 scsi_cmd_t cmd; 397 scsi_cdb_sync_cache_10_t cdb; 398 int rc; 399 400 if (ba > UINT32_MAX) 401 return ELIMIT; 402 403 if (nblocks > UINT16_MAX) 404 return ELIMIT; 405 406 memset(&cdb, 0, sizeof(cdb)); 407 cdb.op_code = SCSI_CMD_SYNC_CACHE_10; 408 cdb.lba = host2uint32_t_be(ba); 409 cdb.numlb = host2uint16_t_be(nblocks); 410 411 memset(&cmd, 0, sizeof(cmd)); 412 cmd.cdb = &cdb; 413 cmd.cdb_size = sizeof(cdb); 414 415 rc = usbmast_run_cmd(mfun, &cmd); 416 417 if (rc != EOK) { 418 usb_log_error("Synchronize Cache (10) transport failed, device %s: %s.\n", 419 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc)); 420 return rc; 421 } 422 423 if (cmd.status != CMDS_GOOD) { 424 usb_log_error("Synchronize Cache (10) command failed, device %s.\n", 425 ddf_dev_get_name(mfun->mdev->ddf_dev)); 426 return EIO; 427 } 428 429 return EOK; 430 } 431 385 432 /** 386 433 * @} -
uspace/drv/bus/usb/usbmast/scsi_ms.h
rf27f3fd rdd8b6a8 64 64 extern int usbmast_read(usbmast_fun_t *, uint64_t, size_t, void *); 65 65 extern int usbmast_write(usbmast_fun_t *, uint64_t, size_t, const void *); 66 extern int usbmast_sync_cache(usbmast_fun_t *, uint64_t, size_t); 66 67 extern const char *usbmast_scsi_dev_type_str(unsigned); 67 68
Note:
See TracChangeset
for help on using the changeset viewer.
