diff options
Diffstat (limited to 'include/scsi/scsi.h')
| -rw-r--r-- | include/scsi/scsi.h | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 1f74bcd603fe..32742c4563de 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
| @@ -30,13 +30,6 @@ | |||
| 30 | #endif | 30 | #endif |
| 31 | 31 | ||
| 32 | /* | 32 | /* |
| 33 | * SCSI command lengths | ||
| 34 | */ | ||
| 35 | |||
| 36 | extern const unsigned char scsi_command_size[8]; | ||
| 37 | #define COMMAND_SIZE(opcode) scsi_command_size[((opcode) >> 5) & 7] | ||
| 38 | |||
| 39 | /* | ||
| 40 | * Special value for scanning to specify scanning or rescanning of all | 33 | * Special value for scanning to specify scanning or rescanning of all |
| 41 | * possible channels, (target) ids, or luns on a given shost. | 34 | * possible channels, (target) ids, or luns on a given shost. |
| 42 | */ | 35 | */ |
| @@ -109,6 +102,7 @@ extern const unsigned char scsi_command_size[8]; | |||
| 109 | #define MODE_SENSE_10 0x5a | 102 | #define MODE_SENSE_10 0x5a |
| 110 | #define PERSISTENT_RESERVE_IN 0x5e | 103 | #define PERSISTENT_RESERVE_IN 0x5e |
| 111 | #define PERSISTENT_RESERVE_OUT 0x5f | 104 | #define PERSISTENT_RESERVE_OUT 0x5f |
| 105 | #define VARIABLE_LENGTH_CMD 0x7f | ||
| 112 | #define REPORT_LUNS 0xa0 | 106 | #define REPORT_LUNS 0xa0 |
| 113 | #define MAINTENANCE_IN 0xa3 | 107 | #define MAINTENANCE_IN 0xa3 |
| 114 | #define MOVE_MEDIUM 0xa5 | 108 | #define MOVE_MEDIUM 0xa5 |
| @@ -136,6 +130,38 @@ extern const unsigned char scsi_command_size[8]; | |||
| 136 | #define ATA_12 0xa1 /* 12-byte pass-thru */ | 130 | #define ATA_12 0xa1 /* 12-byte pass-thru */ |
| 137 | 131 | ||
| 138 | /* | 132 | /* |
| 133 | * SCSI command lengths | ||
| 134 | */ | ||
| 135 | |||
| 136 | #define SCSI_MAX_VARLEN_CDB_SIZE 260 | ||
| 137 | |||
| 138 | /* defined in T10 SCSI Primary Commands-2 (SPC2) */ | ||
| 139 | struct scsi_varlen_cdb_hdr { | ||
| 140 | u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */ | ||
| 141 | u8 control; | ||
| 142 | u8 misc[5]; | ||
| 143 | u8 additional_cdb_length; /* total cdb length - 8 */ | ||
| 144 | __be16 service_action; | ||
| 145 | /* service specific data follows */ | ||
| 146 | }; | ||
| 147 | |||
| 148 | static inline unsigned | ||
| 149 | scsi_varlen_cdb_length(const void *hdr) | ||
| 150 | { | ||
| 151 | return ((struct scsi_varlen_cdb_hdr *)hdr)->additional_cdb_length + 8; | ||
| 152 | } | ||
| 153 | |||
| 154 | extern const unsigned char scsi_command_size_tbl[8]; | ||
| 155 | #define COMMAND_SIZE(opcode) scsi_command_size_tbl[((opcode) >> 5) & 7] | ||
| 156 | |||
| 157 | static inline unsigned | ||
| 158 | scsi_command_size(const unsigned char *cmnd) | ||
| 159 | { | ||
| 160 | return (cmnd[0] == VARIABLE_LENGTH_CMD) ? | ||
| 161 | scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]); | ||
| 162 | } | ||
| 163 | |||
| 164 | /* | ||
| 139 | * SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft | 165 | * SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft |
| 140 | * T10/1561-D Revision 4 Draft dated 7th November 2002. | 166 | * T10/1561-D Revision 4 Draft dated 7th November 2002. |
| 141 | */ | 167 | */ |
