Loading drivers/scsi/sym53c8xx_2/sym_glue.c +21 −94 Original line number Original line Diff line number Diff line Loading @@ -1171,112 +1171,36 @@ printk("sym_user_command: data=%ld\n", uc->data); #endif /* SYM_LINUX_USER_COMMAND_SUPPORT */ #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. * 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 sym_data *sym_data = shost_priv(shost); struct pci_dev *pdev = sym_data->pdev; struct pci_dev *pdev = sym_data->pdev; struct sym_hcb *np = sym_data->ncb; struct sym_hcb *np = sym_data->ncb; struct info_str info; info.buffer = ptr; seq_printf(m, "Chip " NAME53C "%s, device id 0x%x, " 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, "revision id 0x%x\n", np->s.chip_name, pdev->device, pdev->revision); pdev->device, pdev->revision); copy_info(&info, "At PCI address %s, IRQ %u\n", seq_printf(m, "At PCI address %s, IRQ %u\n", pci_name(pdev), pdev->irq); pci_name(pdev), pdev->irq); copy_info(&info, "Min. period factor %d, %s SCSI BUS%s\n", seq_printf(m, "Min. period factor %d, %s SCSI BUS%s\n", (int) (np->minsync_dt ? np->minsync_dt : np->minsync), (int) (np->minsync_dt ? np->minsync_dt : np->minsync), np->maxwide ? "Wide" : "Narrow", np->maxwide ? "Wide" : "Narrow", np->minsync_dt ? ", DT capable" : ""); np->minsync_dt ? ", DT capable" : ""); copy_info(&info, "Max. started commands %d, " seq_printf(m, "Max. started commands %d, " "max. commands per LUN %d\n", "max. commands per LUN %d\n", SYM_CONF_MAX_START, SYM_CONF_MAX_TAG); SYM_CONF_MAX_START, SYM_CONF_MAX_TAG); return info.pos > info.offset? info.pos - info.offset : 0; return 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); #else #else retv = -EINVAL; return -EINVAL; #endif #endif /* SYM_LINUX_USER_INFO_SUPPORT */ } } return retv; } #endif /* SYM_LINUX_PROC_INFO_SUPPORT */ #endif /* SYM_LINUX_PROC_INFO_SUPPORT */ /* /* Loading Loading @@ -1742,7 +1666,10 @@ static struct scsi_host_template sym2_template = { .use_clustering = ENABLE_CLUSTERING, .use_clustering = ENABLE_CLUSTERING, .max_sectors = 0xFFFF, .max_sectors = 0xFFFF, #ifdef SYM_LINUX_PROC_INFO_SUPPORT #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, .proc_name = NAME53C8XX, #endif #endif }; }; Loading Loading
drivers/scsi/sym53c8xx_2/sym_glue.c +21 −94 Original line number Original line Diff line number Diff line Loading @@ -1171,112 +1171,36 @@ printk("sym_user_command: data=%ld\n", uc->data); #endif /* SYM_LINUX_USER_COMMAND_SUPPORT */ #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. * 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 sym_data *sym_data = shost_priv(shost); struct pci_dev *pdev = sym_data->pdev; struct pci_dev *pdev = sym_data->pdev; struct sym_hcb *np = sym_data->ncb; struct sym_hcb *np = sym_data->ncb; struct info_str info; info.buffer = ptr; seq_printf(m, "Chip " NAME53C "%s, device id 0x%x, " 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, "revision id 0x%x\n", np->s.chip_name, pdev->device, pdev->revision); pdev->device, pdev->revision); copy_info(&info, "At PCI address %s, IRQ %u\n", seq_printf(m, "At PCI address %s, IRQ %u\n", pci_name(pdev), pdev->irq); pci_name(pdev), pdev->irq); copy_info(&info, "Min. period factor %d, %s SCSI BUS%s\n", seq_printf(m, "Min. period factor %d, %s SCSI BUS%s\n", (int) (np->minsync_dt ? np->minsync_dt : np->minsync), (int) (np->minsync_dt ? np->minsync_dt : np->minsync), np->maxwide ? "Wide" : "Narrow", np->maxwide ? "Wide" : "Narrow", np->minsync_dt ? ", DT capable" : ""); np->minsync_dt ? ", DT capable" : ""); copy_info(&info, "Max. started commands %d, " seq_printf(m, "Max. started commands %d, " "max. commands per LUN %d\n", "max. commands per LUN %d\n", SYM_CONF_MAX_START, SYM_CONF_MAX_TAG); SYM_CONF_MAX_START, SYM_CONF_MAX_TAG); return info.pos > info.offset? info.pos - info.offset : 0; return 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); #else #else retv = -EINVAL; return -EINVAL; #endif #endif /* SYM_LINUX_USER_INFO_SUPPORT */ } } return retv; } #endif /* SYM_LINUX_PROC_INFO_SUPPORT */ #endif /* SYM_LINUX_PROC_INFO_SUPPORT */ /* /* Loading Loading @@ -1742,7 +1666,10 @@ static struct scsi_host_template sym2_template = { .use_clustering = ENABLE_CLUSTERING, .use_clustering = ENABLE_CLUSTERING, .max_sectors = 0xFFFF, .max_sectors = 0xFFFF, #ifdef SYM_LINUX_PROC_INFO_SUPPORT #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, .proc_name = NAME53C8XX, #endif #endif }; }; Loading