ips: switch to ->show_info()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 31 Mar 2013 16:15:44 +0000 (12:15 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 9 Apr 2013 18:13:27 +0000 (14:13 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/scsi/ips.c
drivers/scsi/ips.h

index 9aa86a315a088c9a450e8ff061196349e5c13f34..3f9b335292dade69698b40462503eecece55e124 100644 (file)
@@ -326,10 +326,9 @@ static void ips_scmd_buf_write(struct scsi_cmnd * scmd, void *data,
 static void ips_scmd_buf_read(struct scsi_cmnd * scmd, void *data,
                              unsigned int count);
 
-static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int);
-static int ips_host_info(ips_ha_t *, char *, off_t, int);
-static void copy_mem_info(IPS_INFOSTR *, char *, int);
-static int copy_info(IPS_INFOSTR *, char *, ...);
+static int ips_write_info(struct Scsi_Host *, char *, int);
+static int ips_show_info(struct seq_file *, struct Scsi_Host *);
+static int ips_host_info(ips_ha_t *, struct seq_file *);
 static int ips_abort_init(ips_ha_t * ha, int index);
 static int ips_init_phase2(int index);
 
@@ -367,7 +366,8 @@ static struct scsi_host_template ips_driver_template = {
        .eh_abort_handler       = ips_eh_abort,
        .eh_host_reset_handler  = ips_eh_reset,
        .proc_name              = "ips",
-       .proc_info              = ips_proc_info,
+       .show_info              = ips_show_info,
+       .write_info             = ips_write_info,
        .slave_configure        = ips_slave_configure,
        .bios_param             = ips_biosparam,
        .this_id                = -1,
@@ -1433,25 +1433,12 @@ ips_info(struct Scsi_Host *SH)
        return (bp);
 }
 
-/****************************************************************************/
-/*                                                                          */
-/* Routine Name: ips_proc_info                                              */
-/*                                                                          */
-/* Routine Description:                                                     */
-/*                                                                          */
-/*   The passthru interface for the driver                                  */
-/*                                                                          */
-/****************************************************************************/
 static int
-ips_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset,
-             int length, int func)
+ips_write_info(struct Scsi_Host *host, char *buffer, int length)
 {
        int i;
-       int ret;
        ips_ha_t *ha = NULL;
 
-       METHOD_TRACE("ips_proc_info", 1);
-
        /* Find our host structure */
        for (i = 0; i < ips_next_controller; i++) {
                if (ips_sh[i]) {
@@ -1465,18 +1452,29 @@ ips_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset,
        if (!ha)
                return (-EINVAL);
 
-       if (func) {
-               /* write */
-               return (0);
-       } else {
-               /* read */
-               if (start)
-                       *start = buffer;
+       return 0;
+}
 
-               ret = ips_host_info(ha, buffer, offset, length);
+static int
+ips_show_info(struct seq_file *m, struct Scsi_Host *host)
+{
+       int i;
+       ips_ha_t *ha = NULL;
 
-               return (ret);
+       /* Find our host structure */
+       for (i = 0; i < ips_next_controller; i++) {
+               if (ips_sh[i]) {
+                       if (ips_sh[i] == host) {
+                               ha = (ips_ha_t *) ips_sh[i]->hostdata;
+                               break;
+                       }
+               }
        }
+
+       if (!ha)
+               return (-EINVAL);
+
+       return ips_host_info(ha, m);
 }
 
 /*--------------------------------------------------------------------------*/
@@ -2035,183 +2033,113 @@ ips_cleanup_passthru(ips_ha_t * ha, ips_scb_t * scb)
 /*                                                                          */
 /****************************************************************************/
 static int
-ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len)
+ips_host_info(ips_ha_t *ha, struct seq_file *m)
 {
-       IPS_INFOSTR info;
-
        METHOD_TRACE("ips_host_info", 1);
 
-       info.buffer = ptr;
-       info.length = len;
-       info.offset = offset;
-       info.pos = 0;
-       info.localpos = 0;
-
-       copy_info(&info, "\nIBM ServeRAID General Information:\n\n");
+       seq_printf(m, "\nIBM ServeRAID General Information:\n\n");
 
        if ((le32_to_cpu(ha->nvram->signature) == IPS_NVRAM_P5_SIG) &&
            (le16_to_cpu(ha->nvram->adapter_type) != 0))
-               copy_info(&info, "\tController Type                   : %s\n",
+               seq_printf(m, "\tController Type                   : %s\n",
                          ips_adapter_name[ha->ad_type - 1]);
        else
-               copy_info(&info,
+               seq_printf(m,
                          "\tController Type                   : Unknown\n");
 
        if (ha->io_addr)
-               copy_info(&info,
+               seq_printf(m,
                          "\tIO region                         : 0x%lx (%d bytes)\n",
                          ha->io_addr, ha->io_len);
 
        if (ha->mem_addr) {
-               copy_info(&info,
+               seq_printf(m,
                          "\tMemory region                     : 0x%lx (%d bytes)\n",
                          ha->mem_addr, ha->mem_len);
-               copy_info(&info,
+               seq_printf(m,
                          "\tShared memory address             : 0x%lx\n",
                          ha->mem_ptr);
        }
 
-       copy_info(&info, "\tIRQ number                        : %d\n", ha->pcidev->irq);
+       seq_printf(m, "\tIRQ number                        : %d\n", ha->pcidev->irq);
 
     /* For the Next 3 lines Check for Binary 0 at the end and don't include it if it's there. */
     /* That keeps everything happy for "text" operations on the proc file.                    */
 
        if (le32_to_cpu(ha->nvram->signature) == IPS_NVRAM_P5_SIG) {
        if (ha->nvram->bios_low[3] == 0) {
-            copy_info(&info,
-                                 "\tBIOS Version                      : %c%c%c%c%c%c%c\n",
-                                 ha->nvram->bios_high[0], ha->nvram->bios_high[1],
-                                 ha->nvram->bios_high[2], ha->nvram->bios_high[3],
-                                 ha->nvram->bios_low[0], ha->nvram->bios_low[1],
-                                 ha->nvram->bios_low[2]);
+               seq_printf(m,
+                         "\tBIOS Version                      : %c%c%c%c%c%c%c\n",
+                         ha->nvram->bios_high[0], ha->nvram->bios_high[1],
+                         ha->nvram->bios_high[2], ha->nvram->bios_high[3],
+                         ha->nvram->bios_low[0], ha->nvram->bios_low[1],
+                         ha->nvram->bios_low[2]);
 
         } else {
-                   copy_info(&info,
-                                 "\tBIOS Version                      : %c%c%c%c%c%c%c%c\n",
-                                 ha->nvram->bios_high[0], ha->nvram->bios_high[1],
-                                 ha->nvram->bios_high[2], ha->nvram->bios_high[3],
-                                 ha->nvram->bios_low[0], ha->nvram->bios_low[1],
-                                 ha->nvram->bios_low[2], ha->nvram->bios_low[3]);
+               seq_printf(m,
+                         "\tBIOS Version                      : %c%c%c%c%c%c%c%c\n",
+                         ha->nvram->bios_high[0], ha->nvram->bios_high[1],
+                         ha->nvram->bios_high[2], ha->nvram->bios_high[3],
+                         ha->nvram->bios_low[0], ha->nvram->bios_low[1],
+                         ha->nvram->bios_low[2], ha->nvram->bios_low[3]);
         }
 
     }
 
     if (ha->enq->CodeBlkVersion[7] == 0) {
-        copy_info(&info,
-                         "\tFirmware Version                  : %c%c%c%c%c%c%c\n",
-                         ha->enq->CodeBlkVersion[0], ha->enq->CodeBlkVersion[1],
-                         ha->enq->CodeBlkVersion[2], ha->enq->CodeBlkVersion[3],
-                         ha->enq->CodeBlkVersion[4], ha->enq->CodeBlkVersion[5],
-                         ha->enq->CodeBlkVersion[6]);
+        seq_printf(m,
+                 "\tFirmware Version                  : %c%c%c%c%c%c%c\n",
+                 ha->enq->CodeBlkVersion[0], ha->enq->CodeBlkVersion[1],
+                 ha->enq->CodeBlkVersion[2], ha->enq->CodeBlkVersion[3],
+                 ha->enq->CodeBlkVersion[4], ha->enq->CodeBlkVersion[5],
+                 ha->enq->CodeBlkVersion[6]);
     } else {
-        copy_info(&info,
-                         "\tFirmware Version                  : %c%c%c%c%c%c%c%c\n",
-                         ha->enq->CodeBlkVersion[0], ha->enq->CodeBlkVersion[1],
-                         ha->enq->CodeBlkVersion[2], ha->enq->CodeBlkVersion[3],
-                         ha->enq->CodeBlkVersion[4], ha->enq->CodeBlkVersion[5],
-                         ha->enq->CodeBlkVersion[6], ha->enq->CodeBlkVersion[7]);
+       seq_printf(m,
+                 "\tFirmware Version                  : %c%c%c%c%c%c%c%c\n",
+                 ha->enq->CodeBlkVersion[0], ha->enq->CodeBlkVersion[1],
+                 ha->enq->CodeBlkVersion[2], ha->enq->CodeBlkVersion[3],
+                 ha->enq->CodeBlkVersion[4], ha->enq->CodeBlkVersion[5],
+                 ha->enq->CodeBlkVersion[6], ha->enq->CodeBlkVersion[7]);
     }
 
     if (ha->enq->BootBlkVersion[7] == 0) {
-        copy_info(&info,
-                         "\tBoot Block Version                : %c%c%c%c%c%c%c\n",
-                         ha->enq->BootBlkVersion[0], ha->enq->BootBlkVersion[1],
-                         ha->enq->BootBlkVersion[2], ha->enq->BootBlkVersion[3],
-                         ha->enq->BootBlkVersion[4], ha->enq->BootBlkVersion[5],
-                         ha->enq->BootBlkVersion[6]);
+        seq_printf(m,
+                 "\tBoot Block Version                : %c%c%c%c%c%c%c\n",
+                 ha->enq->BootBlkVersion[0], ha->enq->BootBlkVersion[1],
+                 ha->enq->BootBlkVersion[2], ha->enq->BootBlkVersion[3],
+                 ha->enq->BootBlkVersion[4], ha->enq->BootBlkVersion[5],
+                 ha->enq->BootBlkVersion[6]);
     } else {
-        copy_info(&info,
-                         "\tBoot Block Version                : %c%c%c%c%c%c%c%c\n",
-                         ha->enq->BootBlkVersion[0], ha->enq->BootBlkVersion[1],
-                         ha->enq->BootBlkVersion[2], ha->enq->BootBlkVersion[3],
-                         ha->enq->BootBlkVersion[4], ha->enq->BootBlkVersion[5],
-                         ha->enq->BootBlkVersion[6], ha->enq->BootBlkVersion[7]);
+        seq_printf(m,
+                 "\tBoot Block Version                : %c%c%c%c%c%c%c%c\n",
+                 ha->enq->BootBlkVersion[0], ha->enq->BootBlkVersion[1],
+                 ha->enq->BootBlkVersion[2], ha->enq->BootBlkVersion[3],
+                 ha->enq->BootBlkVersion[4], ha->enq->BootBlkVersion[5],
+                 ha->enq->BootBlkVersion[6], ha->enq->BootBlkVersion[7]);
     }
 
-       copy_info(&info, "\tDriver Version                    : %s%s\n",
+       seq_printf(m, "\tDriver Version                    : %s%s\n",
                  IPS_VERSION_HIGH, IPS_VERSION_LOW);
 
-       copy_info(&info, "\tDriver Build                      : %d\n",
+       seq_printf(m, "\tDriver Build                      : %d\n",
                  IPS_BUILD_IDENT);
 
-       copy_info(&info, "\tMax Physical Devices              : %d\n",
+       seq_printf(m, "\tMax Physical Devices              : %d\n",
                  ha->enq->ucMaxPhysicalDevices);
-       copy_info(&info, "\tMax Active Commands               : %d\n",
+       seq_printf(m, "\tMax Active Commands               : %d\n",
                  ha->max_cmds);
-       copy_info(&info, "\tCurrent Queued Commands           : %d\n",
+       seq_printf(m, "\tCurrent Queued Commands           : %d\n",
                  ha->scb_waitlist.count);
-       copy_info(&info, "\tCurrent Active Commands           : %d\n",
+       seq_printf(m, "\tCurrent Active Commands           : %d\n",
                  ha->scb_activelist.count - ha->num_ioctl);
-       copy_info(&info, "\tCurrent Queued PT Commands        : %d\n",
+       seq_printf(m, "\tCurrent Queued PT Commands        : %d\n",
                  ha->copp_waitlist.count);
-       copy_info(&info, "\tCurrent Active PT Commands        : %d\n",
+       seq_printf(m, "\tCurrent Active PT Commands        : %d\n",
                  ha->num_ioctl);
 
-       copy_info(&info, "\n");
-
-       return (info.localpos);
-}
-
-/****************************************************************************/
-/*                                                                          */
-/* Routine Name: copy_mem_info                                              */
-/*                                                                          */
-/* Routine Description:                                                     */
-/*                                                                          */
-/*   Copy data into an IPS_INFOSTR structure                                */
-/*                                                                          */
-/****************************************************************************/
-static void
-copy_mem_info(IPS_INFOSTR * info, char *data, int len)
-{
-       METHOD_TRACE("copy_mem_info", 1);
-
-       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);
-               info->pos += (info->offset - info->pos);
-       }
-
-       if (info->localpos + len > info->length)
-               len = info->length - info->localpos;
+       seq_printf(m, "\n");
 
-       if (len > 0) {
-               memcpy(info->buffer + info->localpos, data, len);
-               info->pos += len;
-               info->localpos += len;
-       }
-}
-
-/****************************************************************************/
-/*                                                                          */
-/* Routine Name: copy_info                                                  */
-/*                                                                          */
-/* Routine Description:                                                     */
-/*                                                                          */
-/*   printf style wrapper for an info structure                             */
-/*                                                                          */
-/****************************************************************************/
-static int
-copy_info(IPS_INFOSTR * info, char *fmt, ...)
-{
-       va_list args;
-       char buf[128];
-       int len;
-
-       METHOD_TRACE("copy_info", 1);
-
-       va_start(args, fmt);
-       len = vsprintf(buf, fmt, args);
-       va_end(args);
-
-       copy_mem_info(info, buf, len);
-
-       return (len);
+       return 0;
 }
 
 /****************************************************************************/
index f2df0593332ba9ec0ed02de16a699e799bc21ed7..45b9566b928e1895553d85c98056f9aa65793dc5 100644 (file)
    /*
     * Scsi_Host Template
     */
-   static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int);
    static int ips_biosparam(struct scsi_device *sdev, struct block_device *bdev,
                sector_t capacity, int geom[]);
    static int ips_slave_configure(struct scsi_device *SDptr);
@@ -959,14 +958,6 @@ typedef union {
    IPS_ENH_SG_LIST  *enh_list;
 } IPS_SG_LIST;
 
-typedef struct _IPS_INFOSTR {
-   char *buffer;
-   int   length;
-   int   offset;
-   int   pos;
-   int   localpos;
-} IPS_INFOSTR;
-
 typedef struct {
    char *option_name;
    int  *option_flag;