proc_fops: convert drivers/isdn/ to seq_file
[safe/jmp/linux-2.6] / drivers / isdn / hardware / avm / c4.c
index 6833301..de6e6b3 100644 (file)
@@ -11,6 +11,8 @@
 
 #include <linux/module.h>
 #include <linux/kernel.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 #include <linux/skbuff.h>
 #include <linux/delay.h>
 #include <linux/mm.h>
@@ -1062,19 +1064,18 @@ static char *c4_procinfo(struct capi_ctr *ctrl)
        return cinfo->infobuf;
 }
 
-static int c4_read_proc(char *page, char **start, off_t off,
-                       int count, int *eof, struct capi_ctr *ctrl)
+static int c4_proc_show(struct seq_file *m, void *v)
 {
+       struct capi_ctr *ctrl = m->private;
        avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
        avmcard *card = cinfo->card;
        u8 flag;
-       int len = 0;
        char *s;
 
-       len += sprintf(page+len, "%-16s %s\n", "name", card->name);
-       len += sprintf(page+len, "%-16s 0x%x\n", "io", card->port);
-       len += sprintf(page+len, "%-16s %d\n", "irq", card->irq);
-       len += sprintf(page+len, "%-16s 0x%lx\n", "membase", card->membase);
+       seq_printf(m, "%-16s %s\n", "name", card->name);
+       seq_printf(m, "%-16s 0x%x\n", "io", card->port);
+       seq_printf(m, "%-16s %d\n", "irq", card->irq);
+       seq_printf(m, "%-16s 0x%lx\n", "membase", card->membase);
        switch (card->cardtype) {
        case avm_b1isa: s = "B1 ISA"; break;
        case avm_b1pci: s = "B1 PCI"; break;
@@ -1087,18 +1088,18 @@ static int c4_read_proc(char *page, char **start, off_t off,
        case avm_c2: s = "C2"; break;
        default: s = "???"; break;
        }
-       len += sprintf(page+len, "%-16s %s\n", "type", s);
+       seq_printf(m, "%-16s %s\n", "type", s);
        if ((s = cinfo->version[VER_DRIVER]) != NULL)
-          len += sprintf(page+len, "%-16s %s\n", "ver_driver", s);
+               seq_printf(m, "%-16s %s\n", "ver_driver", s);
        if ((s = cinfo->version[VER_CARDTYPE]) != NULL)
-          len += sprintf(page+len, "%-16s %s\n", "ver_cardtype", s);
+               seq_printf(m, "%-16s %s\n", "ver_cardtype", s);
        if ((s = cinfo->version[VER_SERIAL]) != NULL)
-          len += sprintf(page+len, "%-16s %s\n", "ver_serial", s);
+               seq_printf(m, "%-16s %s\n", "ver_serial", s);
 
        if (card->cardtype != avm_m1) {
                flag = ((u8 *)(ctrl->profile.manu))[3];
                if (flag)
-                       len += sprintf(page+len, "%-16s%s%s%s%s%s%s%s\n",
+                       seq_printf(m, "%-16s%s%s%s%s%s%s%s\n",
                        "protocol",
                        (flag & 0x01) ? " DSS1" : "",
                        (flag & 0x02) ? " CT1" : "",
@@ -1112,7 +1113,7 @@ static int c4_read_proc(char *page, char **start, off_t off,
        if (card->cardtype != avm_m1) {
                flag = ((u8 *)(ctrl->profile.manu))[5];
                if (flag)
-                       len += sprintf(page+len, "%-16s%s%s%s%s\n",
+                       seq_printf(m, "%-16s%s%s%s%s\n",
                        "linetype",
                        (flag & 0x01) ? " point to point" : "",
                        (flag & 0x02) ? " point to multipoint" : "",
@@ -1120,16 +1121,24 @@ static int c4_read_proc(char *page, char **start, off_t off,
                        (flag & 0x04) ? " leased line with D-channel" : ""
                        );
        }
-       len += sprintf(page+len, "%-16s %s\n", "cardname", cinfo->cardname);
-
-       if (off+count >= len)
-          *eof = 1;
-       if (len < off)
-           return 0;
-       *start = page + off;
-       return ((count < len-off) ? count : len-off);
+       seq_printf(m, "%-16s %s\n", "cardname", cinfo->cardname);
+
+       return 0;
 }
 
+static int c4_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, c4_proc_show, PDE(inode)->data);
+}
+
+static const struct file_operations c4_proc_fops = {
+       .owner          = THIS_MODULE,
+       .open           = c4_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
 /* ------------------------------------------------------------- */
 
 static int c4_add_card(struct capicardparams *p, struct pci_dev *dev,
@@ -1201,7 +1210,7 @@ static int c4_add_card(struct capicardparams *p, struct pci_dev *dev,
                cinfo->capi_ctrl.load_firmware = c4_load_firmware;
                cinfo->capi_ctrl.reset_ctr     = c4_reset_ctr;
                cinfo->capi_ctrl.procinfo      = c4_procinfo;
-               cinfo->capi_ctrl.ctr_read_proc = c4_read_proc;
+               cinfo->capi_ctrl.proc_fops = &c4_proc_fops;
                strcpy(cinfo->capi_ctrl.name, card->name);
 
                retval = attach_capi_ctr(&cinfo->capi_ctrl);