Loading drivers/usb/serial/usb-serial.c +27 −31 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <linux/tty_flip.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/seq_file.h> #include <linux/spinlock.h> #include <linux/mutex.h> #include <linux/list.h> Loading Loading @@ -421,57 +422,52 @@ static int serial_break(struct tty_struct *tty, int break_state) return 0; } static int serial_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) static int serial_proc_show(struct seq_file *m, void *v) { struct usb_serial *serial; int length = 0; int i; off_t begin = 0; char tmp[40]; dbg("%s", __func__); length += sprintf(page, "usbserinfo:1.0 driver:2.0\n"); for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) { seq_puts(m, "usbserinfo:1.0 driver:2.0\n"); for (i = 0; i < SERIAL_TTY_MINORS; ++i) { serial = usb_serial_get_by_index(i); if (serial == NULL) continue; length += sprintf(page+length, "%d:", i); seq_printf(m, "%d:", i); if (serial->type->driver.owner) length += sprintf(page+length, " module:%s", seq_printf(m, " module:%s", module_name(serial->type->driver.owner)); length += sprintf(page+length, " name:\"%s\"", seq_printf(m, " name:\"%s\"", 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.idProduct)); length += sprintf(page+length, " num_ports:%d", serial->num_ports); length += sprintf(page+length, " port:%d", i - serial->minor + 1); seq_printf(m, " num_ports:%d", serial->num_ports); seq_printf(m, " port:%d", i - serial->minor + 1); 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"); if ((length + begin) > (off + count)) { seq_putc(m, '\n'); usb_serial_put(serial); goto done; } if ((length + begin) < off) { begin += length; length = 0; } usb_serial_put(serial); } *eof = 1; 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) { struct usb_serial_port *port = tty->driver_data; Loading Loading @@ -1113,9 +1109,9 @@ static const struct tty_operations serial_ops = { .unthrottle = serial_unthrottle, .break_ctl = serial_break, .chars_in_buffer = serial_chars_in_buffer, .read_proc = serial_read_proc, .tiocmget = serial_tiocmget, .tiocmset = serial_tiocmset, .proc_fops = &serial_proc_fops, }; struct tty_driver *usb_serial_tty_driver; Loading Loading
drivers/usb/serial/usb-serial.c +27 −31 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <linux/tty_flip.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/seq_file.h> #include <linux/spinlock.h> #include <linux/mutex.h> #include <linux/list.h> Loading Loading @@ -421,57 +422,52 @@ static int serial_break(struct tty_struct *tty, int break_state) return 0; } static int serial_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) static int serial_proc_show(struct seq_file *m, void *v) { struct usb_serial *serial; int length = 0; int i; off_t begin = 0; char tmp[40]; dbg("%s", __func__); length += sprintf(page, "usbserinfo:1.0 driver:2.0\n"); for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) { seq_puts(m, "usbserinfo:1.0 driver:2.0\n"); for (i = 0; i < SERIAL_TTY_MINORS; ++i) { serial = usb_serial_get_by_index(i); if (serial == NULL) continue; length += sprintf(page+length, "%d:", i); seq_printf(m, "%d:", i); if (serial->type->driver.owner) length += sprintf(page+length, " module:%s", seq_printf(m, " module:%s", module_name(serial->type->driver.owner)); length += sprintf(page+length, " name:\"%s\"", seq_printf(m, " name:\"%s\"", 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.idProduct)); length += sprintf(page+length, " num_ports:%d", serial->num_ports); length += sprintf(page+length, " port:%d", i - serial->minor + 1); seq_printf(m, " num_ports:%d", serial->num_ports); seq_printf(m, " port:%d", i - serial->minor + 1); 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"); if ((length + begin) > (off + count)) { seq_putc(m, '\n'); usb_serial_put(serial); goto done; } if ((length + begin) < off) { begin += length; length = 0; } usb_serial_put(serial); } *eof = 1; 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) { struct usb_serial_port *port = tty->driver_data; Loading Loading @@ -1113,9 +1109,9 @@ static const struct tty_operations serial_ops = { .unthrottle = serial_unthrottle, .break_ctl = serial_break, .chars_in_buffer = serial_chars_in_buffer, .read_proc = serial_read_proc, .tiocmget = serial_tiocmget, .tiocmset = serial_tiocmset, .proc_fops = &serial_proc_fops, }; struct tty_driver *usb_serial_tty_driver; Loading