Ignore:
Timestamp:
2016-07-22T08:24:47Z (8 years ago)
Author:
Jakub Jermar <jakub@…>
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.
Message:

Merge from lp:~jan.vesely/helenos/usb

File:
1 edited

Legend:

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

    r5b18137 rb4b534ac  
    6363static void usbmast_dump_sense(scsi_sense_data_t *sense_buf)
    6464{
    65         unsigned sense_key;
    66 
    67         sense_key = sense_buf->flags_key & 0x0f;
     65        const unsigned sense_key = sense_buf->flags_key & 0x0f;
    6866        printf("Got sense data. Sense key: 0x%x (%s), ASC 0x%02x, "
    6967            "ASCQ 0x%02x.\n", sense_key,
     
    7371}
    7472
     73static 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
    75103/** Run SCSI command.
    76104 *
     
    85113
    86114        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
    87122                rc = usb_massstor_cmd(mfun, 0xDEADBEEF, cmd);
    88123                if (rc != EOK) {
    89124                        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));
    91126                        return rc;
    92127                }
     
    96131
    97132                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));
    99134
    100135                rc = usbmast_request_sense(mfun, &sense_buf, sizeof(sense_buf));
     
    147182        if (rc != EOK) {
    148183                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));
    150185                return rc;
    151186        }
     
    153188        if (cmd.status != CMDS_GOOD) {
    154189                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));
    156191                return EIO;
    157192        }
     
    215250        if (rc != EOK || cmd.status != CMDS_GOOD) {
    216251                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));
    218253                return rc;
    219254        }
     
    257292        if (rc != EOK) {
    258293                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));
    260295                return rc;
    261296        }
     
    263298        if (cmd.status != CMDS_GOOD) {
    264299                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));
    266301                return EIO;
    267302        }
     
    314349        if (rc != EOK) {
    315350                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));
    317352                return rc;
    318353        }
     
    320355        if (cmd.status != CMDS_GOOD) {
    321356                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));
    323358                return EIO;
    324359        }
     
    370405        if (rc != EOK) {
    371406                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));
    373408                return rc;
    374409        }
     
    376411        if (cmd.status != CMDS_GOOD) {
    377412                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));
    379414                return EIO;
    380415        }
     
    394429int usbmast_sync_cache(usbmast_fun_t *mfun, uint64_t ba, size_t nblocks)
    395430{
    396         scsi_cmd_t cmd;
    397         scsi_cdb_sync_cache_10_t cdb;
    398         int rc;
    399 
    400431        if (ba > UINT32_MAX)
    401432                return ELIMIT;
     
    404435                return ELIMIT;
    405436
    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);
    416449
    417450        if (rc != EOK) {
    418451                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));
    420453                return rc;
    421454        }
     
    423456        if (cmd.status != CMDS_GOOD) {
    424457                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));
    426459                return EIO;
    427460        }
Note: See TracChangeset for help on using the changeset viewer.