cdc-acm.c (6097a07411005c0184cf90256743c784079198fc) | cdc-acm.c (ba2d8ce9db0a61505362bb17b8899df3d3326146) |
---|---|
1/* 2 * cdc-acm.c 3 * 4 * Copyright (c) 1999 Armin Fuerst <fuerst@in.tum.de> 5 * Copyright (c) 1999 Pavel Machek <pavel@ucw.cz> 6 * Copyright (c) 1999 Johannes Erdfelt <johannes@erdfelt.com> 7 * Copyright (c) 2000 Vojtech Pavlik <vojtech@suse.cz> 8 * Copyright (c) 2004 Oliver Neukum <oliver@neukum.name> --- 773 unchanged lines hidden (view full) --- 782 783 if (!info) 784 return -EINVAL; 785 786 memset(&tmp, 0, sizeof(tmp)); 787 tmp.flags = ASYNC_LOW_LATENCY; 788 tmp.xmit_fifo_size = acm->writesize; 789 tmp.baud_base = le32_to_cpu(acm->line.dwDTERate); | 1/* 2 * cdc-acm.c 3 * 4 * Copyright (c) 1999 Armin Fuerst <fuerst@in.tum.de> 5 * Copyright (c) 1999 Pavel Machek <pavel@ucw.cz> 6 * Copyright (c) 1999 Johannes Erdfelt <johannes@erdfelt.com> 7 * Copyright (c) 2000 Vojtech Pavlik <vojtech@suse.cz> 8 * Copyright (c) 2004 Oliver Neukum <oliver@neukum.name> --- 773 unchanged lines hidden (view full) --- 782 783 if (!info) 784 return -EINVAL; 785 786 memset(&tmp, 0, sizeof(tmp)); 787 tmp.flags = ASYNC_LOW_LATENCY; 788 tmp.xmit_fifo_size = acm->writesize; 789 tmp.baud_base = le32_to_cpu(acm->line.dwDTERate); |
790 tmp.close_delay = acm->port.close_delay / 10; 791 tmp.closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ? 792 ASYNC_CLOSING_WAIT_NONE : 793 acm->port.closing_wait / 10; |
|
790 791 if (copy_to_user(info, &tmp, sizeof(tmp))) 792 return -EFAULT; 793 else 794 return 0; 795} 796 | 794 795 if (copy_to_user(info, &tmp, sizeof(tmp))) 796 return -EFAULT; 797 else 798 return 0; 799} 800 |
801static int set_serial_info(struct acm *acm, 802 struct serial_struct __user *newinfo) 803{ 804 struct serial_struct new_serial; 805 unsigned int closing_wait, close_delay; 806 int retval = 0; 807 808 if (copy_from_user(&new_serial, newinfo, sizeof(new_serial))) 809 return -EFAULT; 810 811 close_delay = new_serial.close_delay * 10; 812 closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ? 813 ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10; 814 815 mutex_lock(&acm->port.mutex); 816 817 if (!capable(CAP_SYS_ADMIN)) { 818 if ((close_delay != acm->port.close_delay) || 819 (closing_wait != acm->port.closing_wait)) 820 retval = -EPERM; 821 else 822 retval = -EOPNOTSUPP; 823 } else { 824 acm->port.close_delay = close_delay; 825 acm->port.closing_wait = closing_wait; 826 } 827 828 mutex_unlock(&acm->port.mutex); 829 return retval; 830} 831 |
|
797static int acm_tty_ioctl(struct tty_struct *tty, 798 unsigned int cmd, unsigned long arg) 799{ 800 struct acm *acm = tty->driver_data; 801 int rv = -ENOIOCTLCMD; 802 803 switch (cmd) { 804 case TIOCGSERIAL: /* gets serial port data */ 805 rv = get_serial_info(acm, (struct serial_struct __user *) arg); 806 break; | 832static int acm_tty_ioctl(struct tty_struct *tty, 833 unsigned int cmd, unsigned long arg) 834{ 835 struct acm *acm = tty->driver_data; 836 int rv = -ENOIOCTLCMD; 837 838 switch (cmd) { 839 case TIOCGSERIAL: /* gets serial port data */ 840 rv = get_serial_info(acm, (struct serial_struct __user *) arg); 841 break; |
842 case TIOCSSERIAL: 843 rv = set_serial_info(acm, (struct serial_struct __user *) arg); 844 break; |
|
807 } 808 809 return rv; 810} 811 812static const __u32 acm_tty_speed[] = { 813 0, 50, 75, 110, 134, 150, 200, 300, 600, 814 1200, 1800, 2400, 4800, 9600, 19200, 38400, --- 953 unchanged lines hidden --- | 845 } 846 847 return rv; 848} 849 850static const __u32 acm_tty_speed[] = { 851 0, 50, 75, 110, 134, 150, 200, 300, 600, 852 1200, 1800, 2400, 4800, 9600, 19200, 38400, --- 953 unchanged lines hidden --- |