|
@@ -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
|
|
|
};
|