diff options
Diffstat (limited to 'include/scsi')
| -rw-r--r-- | include/scsi/scsi.h | 3 | ||||
| -rw-r--r-- | include/scsi/scsi_dbg.h | 74 | ||||
| -rw-r--r-- | include/scsi/scsi_device.h | 22 | ||||
| -rw-r--r-- | include/scsi/scsi_host.h | 3 | ||||
| -rw-r--r-- | include/scsi/scsi_tcq.h | 3 | 
5 files changed, 86 insertions, 19 deletions
| diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 8a7f8ad58aac..d0a66aa1868d 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h @@ -195,6 +195,9 @@ enum scsi_timeouts {  #define	ATA_16		      0x85	/* 16-byte pass-thru */  #define	ATA_12		      0xa1	/* 12-byte pass-thru */ +/* Vendor specific CDBs start here */ +#define VENDOR_SPECIFIC_CDB 0xc0 +  /*   *	SCSI command lengths   */ diff --git a/include/scsi/scsi_dbg.h b/include/scsi/scsi_dbg.h index 7982795df595..f8170e90b49d 100644 --- a/include/scsi/scsi_dbg.h +++ b/include/scsi/scsi_dbg.h @@ -5,8 +5,11 @@ struct scsi_cmnd;  struct scsi_device;  struct scsi_sense_hdr; +#define SCSI_LOG_BUFSIZE 128 +  extern void scsi_print_command(struct scsi_cmnd *); -extern void __scsi_print_command(const unsigned char *, size_t); +extern size_t __scsi_format_command(char *, size_t, +				   const unsigned char *, size_t);  extern void scsi_show_extd_sense(const struct scsi_device *, const char *,  				 unsigned char, unsigned char);  extern void scsi_show_sense_hdr(const struct scsi_device *, const char *, @@ -17,12 +20,73 @@ extern void scsi_print_sense(const struct scsi_cmnd *);  extern void __scsi_print_sense(const struct scsi_device *, const char *name,  			       const unsigned char *sense_buffer,  			       int sense_len); -extern void scsi_print_result(struct scsi_cmnd *, const char *, int); -extern const char *scsi_hostbyte_string(int); -extern const char *scsi_driverbyte_string(int); -extern const char *scsi_mlreturn_string(int); +extern void scsi_print_result(const struct scsi_cmnd *, const char *, int); + +#ifdef CONFIG_SCSI_CONSTANTS +extern bool scsi_opcode_sa_name(int, int, const char **, const char **);  extern const char *scsi_sense_key_string(unsigned char);  extern const char *scsi_extd_sense_format(unsigned char, unsigned char,  					  const char **); +extern const char *scsi_mlreturn_string(int); +extern const char *scsi_hostbyte_string(int); +extern const char *scsi_driverbyte_string(int); +#else +static inline bool +scsi_opcode_sa_name(int cmd, int sa, +		    const char **cdb_name, const char **sa_name) +{ +	*cdb_name = NULL; +	switch (cmd) { +	case VARIABLE_LENGTH_CMD: +	case MAINTENANCE_IN: +	case MAINTENANCE_OUT: +	case PERSISTENT_RESERVE_IN: +	case PERSISTENT_RESERVE_OUT: +	case SERVICE_ACTION_IN_12: +	case SERVICE_ACTION_OUT_12: +	case SERVICE_ACTION_BIDIRECTIONAL: +	case SERVICE_ACTION_IN_16: +	case SERVICE_ACTION_OUT_16: +	case EXTENDED_COPY: +	case RECEIVE_COPY_RESULTS: +		*sa_name = NULL; +		return true; +	default: +		return false; +	} +} + +static inline const char * +scsi_sense_key_string(unsigned char key) +{ +	return NULL; +} + +static inline const char * +scsi_extd_sense_format(unsigned char asc, unsigned char ascq, const char **fmt) +{ +	*fmt = NULL; +	return NULL; +} + +static inline const char * +scsi_mlreturn_string(int result) +{ +	return NULL; +} + +static inline const char * +scsi_hostbyte_string(int result) +{ +	return NULL; +} + +static inline const char * +scsi_driverbyte_string(int result) +{ +	return NULL; +} + +#endif  #endif /* _SCSI_SCSI_DBG_H */ diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 3a4edd1f7dbb..a4c9336811d1 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h @@ -230,9 +230,6 @@ struct scsi_dh_data {  #define transport_class_to_sdev(class_dev) \  	to_scsi_device(class_dev->parent) -#define sdev_printk(prefix, sdev, fmt, a...)	\ -	dev_printk(prefix, &(sdev)->sdev_gendev, fmt, ##a) -  #define sdev_dbg(sdev, fmt, a...) \  	dev_dbg(&(sdev)->sdev_gendev, fmt, ##a) @@ -240,16 +237,15 @@ struct scsi_dh_data {   * like scmd_printk, but the device name is passed in   * as a string pointer   */ -#define sdev_prefix_printk(l, sdev, p, fmt, a...)			\ -	(p) ?								\ -	sdev_printk(l, sdev, "[%s] " fmt, p, ##a) :			\ -	sdev_printk(l, sdev, fmt, ##a) - -#define scmd_printk(prefix, scmd, fmt, a...)				\ -        (scmd)->request->rq_disk ?					\ -	sdev_printk(prefix, (scmd)->device, "[%s] " fmt,		\ -		    (scmd)->request->rq_disk->disk_name, ##a) :		\ -	sdev_printk(prefix, (scmd)->device, fmt, ##a) +__printf(4, 5) void +sdev_prefix_printk(const char *, const struct scsi_device *, const char *, +		const char *, ...); + +#define sdev_printk(l, sdev, fmt, a...)				\ +	sdev_prefix_printk(l, sdev, NULL, fmt, ##a) + +__printf(3, 4) void +scmd_printk(const char *, const struct scsi_cmnd *, const char *, ...);  #define scmd_dbg(scmd, fmt, a...)					   \  	do {								   \ diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 019e66858ce6..e113c757d555 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -402,6 +402,9 @@ struct scsi_host_template {  	 */  	unsigned char present; +	/* If use block layer to manage tags, this is tag allocation policy */ +	int tag_alloc_policy; +  	/*  	 * Let the block layer assigns tags to all commands.  	 */ diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h index 9708b28bd2aa..b27977e8aaed 100644 --- a/include/scsi/scsi_tcq.h +++ b/include/scsi/scsi_tcq.h @@ -66,7 +66,8 @@ static inline int scsi_init_shared_tag_map(struct Scsi_Host *shost, int depth)  	 * devices on the shared host (for libata)  	 */  	if (!shost->bqt) { -		shost->bqt = blk_init_tags(depth); +		shost->bqt = blk_init_tags(depth, +			shost->hostt->tag_alloc_policy);  		if (!shost->bqt)  			return -ENOMEM;  	} |