Changeset b4b534ac in mainline for uspace/drv/bus/usb/usbmast/scsi_ms.c
- Timestamp:
- 2016-07-22T08:24:47Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f76d2c2
- Parents:
- 5b18137 (diff), 8351f9a4 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmast/scsi_ms.c
r5b18137 rb4b534ac 63 63 static void usbmast_dump_sense(scsi_sense_data_t *sense_buf) 64 64 { 65 unsigned sense_key; 66 67 sense_key = sense_buf->flags_key & 0x0f; 65 const unsigned sense_key = sense_buf->flags_key & 0x0f; 68 66 printf("Got sense data. Sense key: 0x%x (%s), ASC 0x%02x, " 69 67 "ASCQ 0x%02x.\n", sense_key, … … 73 71 } 74 72 73 static int usb_massstor_unit_ready(usbmast_fun_t *mfun) 74 { 75 scsi_cmd_t cmd; 76 scsi_cdb_test_unit_ready_t cdb; 77 int rc; 78 79 memset(&cdb, 0, sizeof(cdb)); 80 cdb.op_code = SCSI_CMD_TEST_UNIT_READY; 81 82 memset(&cmd, 0, sizeof(cmd)); 83 cmd.cdb = &cdb; 84 cmd.cdb_size = sizeof(cdb); 85 86 rc = usb_massstor_cmd(mfun, 0xDEADBEEF, &cmd); 87 88 if (rc != EOK) { 89 usb_log_error("Test Unit Ready failed on device %s: %s.", 90 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 91 return rc; 92 } 93 /* Ignore command error here. If there's something wrong 94 * with the device the following commands will fail too. 95 */ 96 if (cmd.status != CMDS_GOOD) 97 usb_log_warning("Test Unit Ready command failed on device %s.", 98 usb_device_get_name(mfun->mdev->usb_dev)); 99 100 return EOK; 101 } 102 75 103 /** Run SCSI command. 76 104 * … … 85 113 86 114 do { 115 rc = usb_massstor_unit_ready(mfun); 116 if (rc != EOK) { 117 usb_log_error("Inquiry transport failed, device %s: %s.\n", 118 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 119 return rc; 120 } 121 87 122 rc = usb_massstor_cmd(mfun, 0xDEADBEEF, cmd); 88 123 if (rc != EOK) { 89 124 usb_log_error("Inquiry transport failed, device %s: %s.\n", 90 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));125 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 91 126 return rc; 92 127 } … … 96 131 97 132 usb_log_error("SCSI command failed, device %s.\n", 98 ddf_dev_get_name(mfun->mdev->ddf_dev));133 usb_device_get_name(mfun->mdev->usb_dev)); 99 134 100 135 rc = usbmast_request_sense(mfun, &sense_buf, sizeof(sense_buf)); … … 147 182 if (rc != EOK) { 148 183 usb_log_error("Inquiry transport failed, device %s: %s.\n", 149 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));184 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 150 185 return rc; 151 186 } … … 153 188 if (cmd.status != CMDS_GOOD) { 154 189 usb_log_error("Inquiry command failed, device %s.\n", 155 ddf_dev_get_name(mfun->mdev->ddf_dev));190 usb_device_get_name(mfun->mdev->usb_dev)); 156 191 return EIO; 157 192 } … … 215 250 if (rc != EOK || cmd.status != CMDS_GOOD) { 216 251 usb_log_error("Request Sense failed, device %s: %s.\n", 217 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));252 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 218 253 return rc; 219 254 } … … 257 292 if (rc != EOK) { 258 293 usb_log_error("Read Capacity (10) transport failed, device %s: %s.\n", 259 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));294 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 260 295 return rc; 261 296 } … … 263 298 if (cmd.status != CMDS_GOOD) { 264 299 usb_log_error("Read Capacity (10) command failed, device %s.\n", 265 ddf_dev_get_name(mfun->mdev->ddf_dev));300 usb_device_get_name(mfun->mdev->usb_dev)); 266 301 return EIO; 267 302 } … … 314 349 if (rc != EOK) { 315 350 usb_log_error("Read (10) transport failed, device %s: %s.\n", 316 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));351 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 317 352 return rc; 318 353 } … … 320 355 if (cmd.status != CMDS_GOOD) { 321 356 usb_log_error("Read (10) command failed, device %s.\n", 322 ddf_dev_get_name(mfun->mdev->ddf_dev));357 usb_device_get_name(mfun->mdev->usb_dev)); 323 358 return EIO; 324 359 } … … 370 405 if (rc != EOK) { 371 406 usb_log_error("Write (10) transport failed, device %s: %s.\n", 372 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));407 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 373 408 return rc; 374 409 } … … 376 411 if (cmd.status != CMDS_GOOD) { 377 412 usb_log_error("Write (10) command failed, device %s.\n", 378 ddf_dev_get_name(mfun->mdev->ddf_dev));413 usb_device_get_name(mfun->mdev->usb_dev)); 379 414 return EIO; 380 415 } … … 394 429 int usbmast_sync_cache(usbmast_fun_t *mfun, uint64_t ba, size_t nblocks) 395 430 { 396 scsi_cmd_t cmd;397 scsi_cdb_sync_cache_10_t cdb;398 int rc;399 400 431 if (ba > UINT32_MAX) 401 432 return ELIMIT; … … 404 435 return ELIMIT; 405 436 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); 437 const scsi_cdb_sync_cache_10_t cdb = { 438 .op_code = SCSI_CMD_SYNC_CACHE_10, 439 .lba = host2uint32_t_be(ba), 440 .numlb = host2uint16_t_be(nblocks), 441 }; 442 443 scsi_cmd_t cmd = { 444 .cdb = &cdb, 445 .cdb_size = sizeof(cdb), 446 }; 447 448 const int rc = usbmast_run_cmd(mfun, &cmd); 416 449 417 450 if (rc != EOK) { 418 451 usb_log_error("Synchronize Cache (10) transport failed, device %s: %s.\n", 419 ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));452 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 420 453 return rc; 421 454 } … … 423 456 if (cmd.status != CMDS_GOOD) { 424 457 usb_log_error("Synchronize Cache (10) command failed, device %s.\n", 425 ddf_dev_get_name(mfun->mdev->ddf_dev));458 usb_device_get_name(mfun->mdev->usb_dev)); 426 459 return EIO; 427 460 }
Note:
See TracChangeset
for help on using the changeset viewer.