浏览代码

ieee1394: sbp2: add support for disks >2 TB (and 16 bytes long CDBs)

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>
Stefan Richter 16 年之前
父节点
当前提交
ebbb16bffa
共有 2 个文件被更改,包括 8 次插入1 次删除
  1. 1 0
      drivers/ieee1394/sbp2.c
  2. 7 1
      drivers/ieee1394/sbp2.h

+ 1 - 0
drivers/ieee1394/sbp2.c

@@ -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;

+ 7 - 1
drivers/ieee1394/sbp2.h

@@ -24,6 +24,12 @@
 
 #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