Commit 444697d6 authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Linus Torvalds

proc tty: switch cyclades to ->proc_fops

Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
Acked-by: default avatarAlan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ae149b6b
...@@ -657,6 +657,7 @@ ...@@ -657,6 +657,7 @@
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/seq_file.h>
static void cy_throttle(struct tty_struct *tty); static void cy_throttle(struct tty_struct *tty);
static void cy_send_xchar(struct tty_struct *tty, char ch); static void cy_send_xchar(struct tty_struct *tty, char ch);
...@@ -868,8 +869,6 @@ static int cyz_issue_cmd(struct cyclades_card *, __u32, __u8, __u32); ...@@ -868,8 +869,6 @@ static int cyz_issue_cmd(struct cyclades_card *, __u32, __u8, __u32);
static unsigned detect_isa_irq(void __iomem *); static unsigned detect_isa_irq(void __iomem *);
#endif /* CONFIG_ISA */ #endif /* CONFIG_ISA */
static int cyclades_get_proc_info(char *, char **, off_t, int, int *, void *);
#ifndef CONFIG_CYZ_INTR #ifndef CONFIG_CYZ_INTR
static void cyz_poll(unsigned long); static void cyz_poll(unsigned long);
...@@ -5216,31 +5215,22 @@ static struct pci_driver cy_pci_driver = { ...@@ -5216,31 +5215,22 @@ static struct pci_driver cy_pci_driver = {
}; };
#endif #endif
static int static int cyclades_proc_show(struct seq_file *m, void *v)
cyclades_get_proc_info(char *buf, char **start, off_t offset, int length,
int *eof, void *data)
{ {
struct cyclades_port *info; struct cyclades_port *info;
unsigned int i, j; unsigned int i, j;
int len = 0;
off_t begin = 0;
off_t pos = 0;
int size;
__u32 cur_jifs = jiffies; __u32 cur_jifs = jiffies;
size = sprintf(buf, "Dev TimeOpen BytesOut IdleOut BytesIn " seq_puts(m, "Dev TimeOpen BytesOut IdleOut BytesIn "
"IdleIn Overruns Ldisc\n"); "IdleIn Overruns Ldisc\n");
pos += size;
len += size;
/* Output one line for each known port */ /* Output one line for each known port */
for (i = 0; i < NR_CARDS; i++) for (i = 0; i < NR_CARDS; i++)
for (j = 0; j < cy_card[i].nports; j++) { for (j = 0; j < cy_card[i].nports; j++) {
info = &cy_card[i].ports[j]; info = &cy_card[i].ports[j];
if (info->port.count) if (info->port.count)
size = sprintf(buf + len, "%3d %8lu %10lu %8lu " seq_printf(m, "%3d %8lu %10lu %8lu "
"%10lu %8lu %9lu %6ld\n", info->line, "%10lu %8lu %9lu %6ld\n", info->line,
(cur_jifs - info->idle_stats.in_use) / (cur_jifs - info->idle_stats.in_use) /
HZ, info->idle_stats.xmit_bytes, HZ, info->idle_stats.xmit_bytes,
...@@ -5251,30 +5241,26 @@ cyclades_get_proc_info(char *buf, char **start, off_t offset, int length, ...@@ -5251,30 +5241,26 @@ cyclades_get_proc_info(char *buf, char **start, off_t offset, int length,
/* FIXME: double check locking */ /* FIXME: double check locking */
(long)info->port.tty->ldisc.ops->num); (long)info->port.tty->ldisc.ops->num);
else else
size = sprintf(buf + len, "%3d %8lu %10lu %8lu " seq_printf(m, "%3d %8lu %10lu %8lu "
"%10lu %8lu %9lu %6ld\n", "%10lu %8lu %9lu %6ld\n",
info->line, 0L, 0L, 0L, 0L, 0L, 0L, 0L); info->line, 0L, 0L, 0L, 0L, 0L, 0L, 0L);
len += size;
pos = begin + len;
if (pos < offset) {
len = 0;
begin = pos;
}
if (pos > offset + length)
goto done;
} }
*eof = 1; return 0;
done: }
*start = buf + (offset - begin); /* Start of wanted data */
len -= (offset - begin); /* Start slop */ static int cyclades_proc_open(struct inode *inode, struct file *file)
if (len > length) {
len = length; /* Ending slop */ return single_open(file, cyclades_proc_show, NULL);
if (len < 0)
len = 0;
return len;
} }
static const struct file_operations cyclades_proc_fops = {
.owner = THIS_MODULE,
.open = cyclades_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
/* The serial driver boot-time initialization code! /* The serial driver boot-time initialization code!
Hardware I/O ports are mapped to character special devices on a Hardware I/O ports are mapped to character special devices on a
first found, first allocated manner. That is, this code searches first found, first allocated manner. That is, this code searches
...@@ -5311,9 +5297,9 @@ static const struct tty_operations cy_ops = { ...@@ -5311,9 +5297,9 @@ static const struct tty_operations cy_ops = {
.hangup = cy_hangup, .hangup = cy_hangup,
.break_ctl = cy_break, .break_ctl = cy_break,
.wait_until_sent = cy_wait_until_sent, .wait_until_sent = cy_wait_until_sent,
.read_proc = cyclades_get_proc_info,
.tiocmget = cy_tiocmget, .tiocmget = cy_tiocmget,
.tiocmset = cy_tiocmset, .tiocmset = cy_tiocmset,
.proc_fops = &cyclades_proc_fops,
}; };
static int __init cy_init(void) static int __init cy_init(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment