1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
--- fritz/src/driver.c.orig 2010-12-09 16:47:24.552314553 +0100
+++ fritz/src/driver.c 2010-12-09 16:53:16.040981703 +0100
@@ -48,6 +48,8 @@
#include "defs.h"
#include "lib.h"
#include "driver.h"
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
/*---------------------------------------------------------------------------*\
\*---------------------------------------------------------------------------*/
@@ -220,16 +220,6 @@
} /* kill_version */
/*---------------------------------------------------------------------------*\
-\*---------------------------------------------------------------------------*/
-static void pprintf (char * page, int * len, const char * fmt, ...) {
- va_list args;
-
- va_start (args, fmt);
- *len += vsprintf (page + *len, fmt, args);
- va_end (args);
-} /* pprintf */
-
-/*---------------------------------------------------------------------------*\
\*-C-------------------------------------------------------------------------*/
static inline int in_critical (void) {
@@ -490,39 +480,33 @@
/*---------------------------------------------------------------------------*\
\*---------------------------------------------------------------------------*/
-static int __kcapi ctr_info (
- char * page,
- char ** start,
- off_t ofs,
- int count,
- int * eof,
- struct capi_ctr * ctrl
-) {
+static int __kcapi ctr_info (struct seq_file *m, void *v)
+{
+ struct capi_ctr *ctrl = m->private;
card_t * card;
char * temp;
unsigned char flag;
- int len = 0;
assert (ctrl != NULL);
card = (card_t *) ctrl->driverdata;
assert (card != NULL);
- pprintf (page, &len, "%-16s %s\n", "name", SHORT_LOGO);
- pprintf (page, &len, "%-16s 0x%04x\n", "io", card->base);
- pprintf (page, &len, "%-16s %d\n", "irq", card->irq);
+ seq_printf(m, "%-16s %s\n", "name", SHORT_LOGO);
+ seq_printf(m, "%-16s 0x%04x\n", "io", card->base);
+ seq_printf(m, "%-16s %d\n", "irq", card->irq);
temp = card->version ? card->string[1] : "A1";
- pprintf (page, &len, "%-16s %s\n", "type", temp);
+ seq_printf(m, "%-16s %s\n", "type", temp);
temp = card->version ? card->string[0] : "-";
#if defined (__fcclassic__) || defined (__fcpcmcia__)
- pprintf (page, &len, "%-16s 0x%04x\n", "revision", card->info);
+ seq_printf(m, "%-16s 0x%04x\n", "revision", card->info);
#elif defined (__fcpci__)
- pprintf (page, &len, "%-16s %d\n", "class", card_id);
+ seq_printf(m, "%-16s %d\n", "class", card_id);
#endif
- pprintf (page, &len, "%-16s %s\n", "ver_driver", temp);
- pprintf (page, &len, "%-16s %s\n", "ver_cardtype", SHORT_LOGO);
+ seq_printf(m, "%-16s %s\n", "ver_driver", temp);
+ seq_printf(m, "%-16s %s\n", "ver_cardtype", SHORT_LOGO);
flag = ((unsigned char *) (ctrl->profile.manu))[3];
if (flag) {
- pprintf(page, &len, "%-16s%s%s%s%s%s%s%s\n", "protocol",
+ seq_printf(m, "%-16s%s%s%s%s%s%s%s\n", "protocol",
(flag & 0x01) ? " DSS1" : "",
(flag & 0x02) ? " CT1" : "",
(flag & 0x04) ? " VN3" : "",
@@ -534,21 +518,29 @@
}
flag = ((unsigned char *) (ctrl->profile.manu))[5];
if (flag) {
- pprintf(page, &len, "%-16s%s%s%s%s\n", "linetype",
+ seq_printf(m, "%-16s%s%s%s%s\n", "linetype",
(flag & 0x01) ? " point to point" : "",
(flag & 0x02) ? " point to multipoint" : "",
(flag & 0x08) ? " leased line without D-channel" : "",
(flag & 0x04) ? " leased line with D-channel" : ""
);
}
- if (len < ofs) {
- return 0;
- }
- *eof = 1;
- *start = page - ofs;
- return ((count < len - ofs) ? count : len - ofs);
+ return 0;
} /* ctr_info */
+static int ctr_proc_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, ctr_info, PDE(inode)->data);
+}
+
+const struct file_operations ctr_proc_fops = {
+ .owner = THIS_MODULE,
+ .open = ctr_proc_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
/*---------------------------------------------------------------------------*\
\*---------------------------------------------------------------------------*/
static void __kcapi reset_ctrl (struct capi_ctr * ctrl) {
@@ -626,7 +618,7 @@
ctrl->release_appl = release_appl;
ctrl->send_message = send_msg;
ctrl->procinfo = proc_info;
- ctrl->ctr_read_proc = ctr_info;
+ ctrl->proc_fops = &ctr_proc_fops;
if (0 != (res = attach_capi_ctr (ctrl))) {
dec_use_count ();
stop (card);
|