|
@@ -29,13 +29,6 @@
|
|
#define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS
|
|
#define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-/*
|
|
|
|
- * SCSI command lengths
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
-extern const unsigned char scsi_command_size[8];
|
|
|
|
-#define COMMAND_SIZE(opcode) scsi_command_size[((opcode) >> 5) & 7]
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Special value for scanning to specify scanning or rescanning of all
|
|
* Special value for scanning to specify scanning or rescanning of all
|
|
* possible channels, (target) ids, or luns on a given shost.
|
|
* possible channels, (target) ids, or luns on a given shost.
|
|
@@ -109,6 +102,7 @@ extern const unsigned char scsi_command_size[8];
|
|
#define MODE_SENSE_10 0x5a
|
|
#define MODE_SENSE_10 0x5a
|
|
#define PERSISTENT_RESERVE_IN 0x5e
|
|
#define PERSISTENT_RESERVE_IN 0x5e
|
|
#define PERSISTENT_RESERVE_OUT 0x5f
|
|
#define PERSISTENT_RESERVE_OUT 0x5f
|
|
|
|
+#define VARIABLE_LENGTH_CMD 0x7f
|
|
#define REPORT_LUNS 0xa0
|
|
#define REPORT_LUNS 0xa0
|
|
#define MAINTENANCE_IN 0xa3
|
|
#define MAINTENANCE_IN 0xa3
|
|
#define MOVE_MEDIUM 0xa5
|
|
#define MOVE_MEDIUM 0xa5
|
|
@@ -135,6 +129,38 @@ extern const unsigned char scsi_command_size[8];
|
|
#define ATA_16 0x85 /* 16-byte pass-thru */
|
|
#define ATA_16 0x85 /* 16-byte pass-thru */
|
|
#define ATA_12 0xa1 /* 12-byte pass-thru */
|
|
#define ATA_12 0xa1 /* 12-byte pass-thru */
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * SCSI command lengths
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#define SCSI_MAX_VARLEN_CDB_SIZE 260
|
|
|
|
+
|
|
|
|
+/* defined in T10 SCSI Primary Commands-2 (SPC2) */
|
|
|
|
+struct scsi_varlen_cdb_hdr {
|
|
|
|
+ u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
|
|
|
|
+ u8 control;
|
|
|
|
+ u8 misc[5];
|
|
|
|
+ u8 additional_cdb_length; /* total cdb length - 8 */
|
|
|
|
+ __be16 service_action;
|
|
|
|
+ /* service specific data follows */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static inline unsigned
|
|
|
|
+scsi_varlen_cdb_length(const void *hdr)
|
|
|
|
+{
|
|
|
|
+ return ((struct scsi_varlen_cdb_hdr *)hdr)->additional_cdb_length + 8;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+extern const unsigned char scsi_command_size_tbl[8];
|
|
|
|
+#define COMMAND_SIZE(opcode) scsi_command_size_tbl[((opcode) >> 5) & 7]
|
|
|
|
+
|
|
|
|
+static inline unsigned
|
|
|
|
+scsi_command_size(const unsigned char *cmnd)
|
|
|
|
+{
|
|
|
|
+ return (cmnd[0] == VARIABLE_LENGTH_CMD) ?
|
|
|
|
+ scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]);
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
|
|
* SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
|
|
* T10/1561-D Revision 4 Draft dated 7th November 2002.
|
|
* T10/1561-D Revision 4 Draft dated 7th November 2002.
|