diff options
Diffstat (limited to 'drivers/scsi/sym53c8xx_2/sym_glue.c')
| -rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_glue.c | 115 | 
1 files changed, 21 insertions, 94 deletions
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c index 599568299fb..bac55f7f69f 100644 --- a/drivers/scsi/sym53c8xx_2/sym_glue.c +++ b/drivers/scsi/sym53c8xx_2/sym_glue.c @@ -1171,112 +1171,36 @@ printk("sym_user_command: data=%ld\n", uc->data);  #endif	/* SYM_LINUX_USER_COMMAND_SUPPORT */ -#ifdef SYM_LINUX_USER_INFO_SUPPORT -/* - *  Informations through the proc file system. - */ -struct info_str { -	char *buffer; -	int length; -	int offset; -	int pos; -}; - -static void copy_mem_info(struct info_str *info, char *data, int len) -{ -	if (info->pos + len > info->length) -		len = info->length - info->pos; - -	if (info->pos + len < info->offset) { -		info->pos += len; -		return; -	} -	if (info->pos < info->offset) { -		data += (info->offset - info->pos); -		len  -= (info->offset - info->pos); -	} - -	if (len > 0) { -		memcpy(info->buffer + info->pos, data, len); -		info->pos += len; -	} -} - -static int copy_info(struct info_str *info, char *fmt, ...) -{ -	va_list args; -	char buf[81]; -	int len; - -	va_start(args, fmt); -	len = vsprintf(buf, fmt, args); -	va_end(args); - -	copy_mem_info(info, buf, len); -	return len; -} -  /*   *  Copy formatted information into the input buffer.   */ -static int sym_host_info(struct Scsi_Host *shost, char *ptr, off_t offset, int len) +static int sym_show_info(struct seq_file *m, struct Scsi_Host *shost)  { +#ifdef SYM_LINUX_USER_INFO_SUPPORT  	struct sym_data *sym_data = shost_priv(shost);  	struct pci_dev *pdev = sym_data->pdev;  	struct sym_hcb *np = sym_data->ncb; -	struct info_str info; - -	info.buffer	= ptr; -	info.length	= len; -	info.offset	= offset; -	info.pos	= 0; -	copy_info(&info, "Chip " NAME53C "%s, device id 0x%x, " -			 "revision id 0x%x\n", np->s.chip_name, -			 pdev->device, pdev->revision); -	copy_info(&info, "At PCI address %s, IRQ %u\n", +	seq_printf(m, "Chip " NAME53C "%s, device id 0x%x, " +		 "revision id 0x%x\n", np->s.chip_name, +		 pdev->device, pdev->revision); +	seq_printf(m, "At PCI address %s, IRQ %u\n",  			 pci_name(pdev), pdev->irq); -	copy_info(&info, "Min. period factor %d, %s SCSI BUS%s\n", -			 (int) (np->minsync_dt ? np->minsync_dt : np->minsync), -			 np->maxwide ? "Wide" : "Narrow", -			 np->minsync_dt ? ", DT capable" : ""); +	seq_printf(m, "Min. period factor %d, %s SCSI BUS%s\n", +		 (int) (np->minsync_dt ? np->minsync_dt : np->minsync), +		 np->maxwide ? "Wide" : "Narrow", +		 np->minsync_dt ? ", DT capable" : ""); -	copy_info(&info, "Max. started commands %d, " -			 "max. commands per LUN %d\n", -			 SYM_CONF_MAX_START, SYM_CONF_MAX_TAG); +	seq_printf(m, "Max. started commands %d, " +		 "max. commands per LUN %d\n", +		 SYM_CONF_MAX_START, SYM_CONF_MAX_TAG); -	return info.pos > info.offset? info.pos - info.offset : 0; -} -#endif /* SYM_LINUX_USER_INFO_SUPPORT */ - -/* - *  Entry point of the scsi proc fs of the driver. - *  - func = 0 means read  (returns adapter infos) - *  - func = 1 means write (not yet merget from sym53c8xx) - */ -static int sym53c8xx_proc_info(struct Scsi_Host *shost, char *buffer, -			char **start, off_t offset, int length, int func) -{ -	int retv; - -	if (func) { -#ifdef	SYM_LINUX_USER_COMMAND_SUPPORT -		retv = sym_user_command(shost, buffer, length); -#else -		retv = -EINVAL; -#endif -	} else { -		if (start) -			*start = buffer; -#ifdef SYM_LINUX_USER_INFO_SUPPORT -		retv = sym_host_info(shost, buffer, offset, length); +	return 0;  #else -		retv = -EINVAL; -#endif -	} - -	return retv; +	return -EINVAL; +#endif /* SYM_LINUX_USER_INFO_SUPPORT */  } +  #endif /* SYM_LINUX_PROC_INFO_SUPPORT */  /* @@ -1742,7 +1666,10 @@ static struct scsi_host_template sym2_template = {  	.use_clustering		= ENABLE_CLUSTERING,  	.max_sectors		= 0xFFFF,  #ifdef SYM_LINUX_PROC_INFO_SUPPORT -	.proc_info		= sym53c8xx_proc_info, +	.show_info		= sym_show_info, +#ifdef	SYM_LINUX_USER_COMMAND_SUPPORT +	.write_info		= sym_user_command, +#endif  	.proc_name		= NAME53C8XX,  #endif  };  |