Skip to content

Commit

Permalink
firewire: sbp2: add support for disks >2 TB (and 16 bytes long CDBs)
Browse files Browse the repository at this point in the history
Increase the command ORB data structure to transport up to 16 bytes long
CDBs (instead of 12 bytes), and tell the SCSI mid layer about it.  This
is notably necessary for READ CAPACITY(16) and friends, i.e. support of
large disks.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
  • Loading branch information
Stefan Richter committed Jul 2, 2009
1 parent 6fdc037 commit af27194
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/firewire/sbp2.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,12 @@ static struct fw_device *target_device(struct sbp2_target *tgt)
#define SBP2_RETRY_LIMIT 0xf /* 15 retries */
#define SBP2_CYCLE_LIMIT (0xc8 << 12) /* 200 125us cycles */

/*
* There is no transport protocol limit to the CDB length, but we implement
* a fixed length only. 16 bytes is enough for disks larger than 2 TB.
*/
#define SBP2_MAX_CDB_SIZE 16

/*
* The default maximum s/g segment size of a FireWire controller is
* usually 0x10000, but SBP-2 only allows 0xffff. Since buffers have to
Expand Down Expand Up @@ -312,7 +318,7 @@ struct sbp2_command_orb {
struct sbp2_pointer next;
struct sbp2_pointer data_descriptor;
__be32 misc;
u8 command_block[12];
u8 command_block[SBP2_MAX_CDB_SIZE];
} request;
struct scsi_cmnd *cmd;
scsi_done_fn_t done;
Expand Down Expand Up @@ -1146,6 +1152,8 @@ static int sbp2_probe(struct device *dev)
if (fw_device_enable_phys_dma(device) < 0)
goto fail_shost_put;

shost->max_cmd_len = SBP2_MAX_CDB_SIZE;

if (scsi_add_host(shost, &unit->device) < 0)
goto fail_shost_put;

Expand Down

0 comments on commit af27194

Please sign in to comment.