Commit 6fd69d3c authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Linus Torvalds

proc tty: switch usb-serial to ->proc_fops

Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
Cc: Alan 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 d196a949
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/tty_flip.h> #include <linux/tty_flip.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/seq_file.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/list.h> #include <linux/list.h>
...@@ -421,57 +422,52 @@ static int serial_break(struct tty_struct *tty, int break_state) ...@@ -421,57 +422,52 @@ static int serial_break(struct tty_struct *tty, int break_state)
return 0; return 0;
} }
static int serial_read_proc(char *page, char **start, off_t off, int count, static int serial_proc_show(struct seq_file *m, void *v)
int *eof, void *data)
{ {
struct usb_serial *serial; struct usb_serial *serial;
int length = 0;
int i; int i;
off_t begin = 0;
char tmp[40]; char tmp[40];
dbg("%s", __func__); dbg("%s", __func__);
length += sprintf(page, "usbserinfo:1.0 driver:2.0\n"); seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) { for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
serial = usb_serial_get_by_index(i); serial = usb_serial_get_by_index(i);
if (serial == NULL) if (serial == NULL)
continue; continue;
length += sprintf(page+length, "%d:", i); seq_printf(m, "%d:", i);
if (serial->type->driver.owner) if (serial->type->driver.owner)
length += sprintf(page+length, " module:%s", seq_printf(m, " module:%s",
module_name(serial->type->driver.owner)); module_name(serial->type->driver.owner));
length += sprintf(page+length, " name:\"%s\"", seq_printf(m, " name:\"%s\"",
serial->type->description); serial->type->description);
length += sprintf(page+length, " vendor:%04x product:%04x", seq_printf(m, " vendor:%04x product:%04x",
le16_to_cpu(serial->dev->descriptor.idVendor), le16_to_cpu(serial->dev->descriptor.idVendor),
le16_to_cpu(serial->dev->descriptor.idProduct)); le16_to_cpu(serial->dev->descriptor.idProduct));
length += sprintf(page+length, " num_ports:%d", seq_printf(m, " num_ports:%d", serial->num_ports);
serial->num_ports); seq_printf(m, " port:%d", i - serial->minor + 1);
length += sprintf(page+length, " port:%d",
i - serial->minor + 1);
usb_make_path(serial->dev, tmp, sizeof(tmp)); usb_make_path(serial->dev, tmp, sizeof(tmp));
length += sprintf(page+length, " path:%s", tmp); seq_printf(m, " path:%s", tmp);
length += sprintf(page+length, "\n"); seq_putc(m, '\n');
if ((length + begin) > (off + count)) {
usb_serial_put(serial);
goto done;
}
if ((length + begin) < off) {
begin += length;
length = 0;
}
usb_serial_put(serial); usb_serial_put(serial);
} }
*eof = 1; return 0;
done:
if (off >= (length + begin))
return 0;
*start = page + (off-begin);
return (count < begin+length-off) ? count : begin+length-off;
} }
static int serial_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, serial_proc_show, NULL);
}
static const struct file_operations serial_proc_fops = {
.owner = THIS_MODULE,
.open = serial_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static int serial_tiocmget(struct tty_struct *tty, struct file *file) static int serial_tiocmget(struct tty_struct *tty, struct file *file)
{ {
struct usb_serial_port *port = tty->driver_data; struct usb_serial_port *port = tty->driver_data;
...@@ -1113,9 +1109,9 @@ static const struct tty_operations serial_ops = { ...@@ -1113,9 +1109,9 @@ static const struct tty_operations serial_ops = {
.unthrottle = serial_unthrottle, .unthrottle = serial_unthrottle,
.break_ctl = serial_break, .break_ctl = serial_break,
.chars_in_buffer = serial_chars_in_buffer, .chars_in_buffer = serial_chars_in_buffer,
.read_proc = serial_read_proc,
.tiocmget = serial_tiocmget, .tiocmget = serial_tiocmget,
.tiocmset = serial_tiocmset, .tiocmset = serial_tiocmset,
.proc_fops = &serial_proc_fops,
}; };
struct tty_driver *usb_serial_tty_driver; struct tty_driver *usb_serial_tty_driver;
......
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