ieee1394: sbp2: add support for disks >2 TB (and 16 bytes long CDBs)
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Tue, 30 Jun 2009 18:28:31 +0000 (20:28 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Thu, 2 Jul 2009 19:27:01 +0000 (21:27 +0200)
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>
drivers/ieee1394/sbp2.c
drivers/ieee1394/sbp2.h

index a51ab233342de0f3e9fbf4be79d499ca3ab044cd..f599f493473946561f6a96aae546a6d8b92619b4 100644 (file)
@@ -880,6 +880,7 @@ static struct sbp2_lu *sbp2_alloc_device(struct unit_directory *ud)
        }
 
        shost->hostdata[0] = (unsigned long)lu;
+       shost->max_cmd_len = SBP2_MAX_CDB_SIZE;
 
        if (!scsi_add_host(shost, &ud->device)) {
                lu->shost = shost;
index c5036f1cc5b0d674155ea2a89087e9ba5e981eb5..64a3a66a8a396fdc45d0e09d4f663cacb528f714 100644 (file)
 
 #define SBP2_DEVICE_NAME               "sbp2"
 
+/*
+ * 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
+
 /*
  * SBP-2 specific definitions
  */
@@ -51,7 +57,7 @@ struct sbp2_command_orb {
        u32 data_descriptor_hi;
        u32 data_descriptor_lo;
        u32 misc;
-       u8 cdb[12];
+       u8 cdb[SBP2_MAX_CDB_SIZE];
 } __attribute__((packed));
 
 #define SBP2_LOGIN_REQUEST             0x0