diff options
Diffstat (limited to 'drivers/firewire/fw-sbp2.c')
-rw-r--r-- | drivers/firewire/fw-sbp2.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c index 4e42b73f1e3e..54cad3a5dfb8 100644 --- a/drivers/firewire/fw-sbp2.c +++ b/drivers/firewire/fw-sbp2.c @@ -968,11 +968,27 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done) return 0; } +static int sbp2_scsi_slave_alloc(struct scsi_device *sdev) +{ + struct fw_unit *unit = (struct fw_unit *)sdev->host->hostdata[0]; + struct sbp2_device *sd = unit->device.driver_data; + + sdev->allow_restart = 1; + + if (sd->workarounds & SBP2_WORKAROUND_INQUIRY_36) + sdev->inquiry_len = 36; + return 0; +} + static int sbp2_scsi_slave_configure(struct scsi_device *sdev) { struct fw_unit *unit = (struct fw_unit *)sdev->host->hostdata[0]; struct sbp2_device *sd = unit->device.driver_data; + sdev->use_10_for_rw = 1; + + if (sdev->type == TYPE_ROM) + sdev->use_10_for_ms = 1; if (sdev->type == TYPE_DISK && sd->workarounds & SBP2_WORKAROUND_MODE_SENSE_8) sdev->skip_ms_page_8 = 1; @@ -1004,6 +1020,7 @@ static struct scsi_host_template scsi_driver_template = { .name = "SBP-2 IEEE-1394", .proc_name = (char *)sbp2_driver_name, .queuecommand = sbp2_scsi_queuecommand, + .slave_alloc = sbp2_scsi_slave_alloc, .slave_configure = sbp2_scsi_slave_configure, .eh_abort_handler = sbp2_scsi_abort, .this_id = -1, |