Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

amiserial: switch to ->[sg]et_serial()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro b129cbc9 0aad5ad5

+33 -45
+33 -45
drivers/tty/amiserial.c
··· 996 996 * ------------------------------------------------------------ 997 997 */ 998 998 999 - static int get_serial_info(struct tty_struct *tty, struct serial_state *state, 1000 - struct serial_struct __user * retinfo) 999 + static int get_serial_info(struct tty_struct *tty, struct serial_struct *ss) 1001 1000 { 1002 - struct serial_struct tmp; 1003 - 1004 - memset(&tmp, 0, sizeof(tmp)); 1001 + struct serial_state *state = tty->driver_data; 1002 + 1005 1003 tty_lock(tty); 1006 - tmp.line = tty->index; 1007 - tmp.port = state->port; 1008 - tmp.flags = state->tport.flags; 1009 - tmp.xmit_fifo_size = state->xmit_fifo_size; 1010 - tmp.baud_base = state->baud_base; 1011 - tmp.close_delay = state->tport.close_delay; 1012 - tmp.closing_wait = state->tport.closing_wait; 1013 - tmp.custom_divisor = state->custom_divisor; 1004 + ss->line = tty->index; 1005 + ss->port = state->port; 1006 + ss->flags = state->tport.flags; 1007 + ss->xmit_fifo_size = state->xmit_fifo_size; 1008 + ss->baud_base = state->baud_base; 1009 + ss->close_delay = state->tport.close_delay; 1010 + ss->closing_wait = state->tport.closing_wait; 1011 + ss->custom_divisor = state->custom_divisor; 1014 1012 tty_unlock(tty); 1015 - if (copy_to_user(retinfo,&tmp,sizeof(*retinfo))) 1016 - return -EFAULT; 1017 1013 return 0; 1018 1014 } 1019 1015 1020 - static int set_serial_info(struct tty_struct *tty, struct serial_state *state, 1021 - struct serial_struct __user * new_info) 1016 + static int set_serial_info(struct tty_struct *tty, struct serial_struct *ss) 1022 1017 { 1018 + struct serial_state *state = tty->driver_data; 1023 1019 struct tty_port *port = &state->tport; 1024 - struct serial_struct new_serial; 1025 1020 bool change_spd; 1026 1021 int retval = 0; 1027 1022 1028 - if (copy_from_user(&new_serial,new_info,sizeof(new_serial))) 1029 - return -EFAULT; 1030 - 1031 1023 tty_lock(tty); 1032 - change_spd = ((new_serial.flags ^ port->flags) & ASYNC_SPD_MASK) || 1033 - new_serial.custom_divisor != state->custom_divisor; 1034 - if (new_serial.irq || new_serial.port != state->port || 1035 - new_serial.xmit_fifo_size != state->xmit_fifo_size) { 1024 + change_spd = ((ss->flags ^ port->flags) & ASYNC_SPD_MASK) || 1025 + ss->custom_divisor != state->custom_divisor; 1026 + if (ss->irq || ss->port != state->port || 1027 + ss->xmit_fifo_size != state->xmit_fifo_size) { 1036 1028 tty_unlock(tty); 1037 1029 return -EINVAL; 1038 1030 } 1039 1031 1040 1032 if (!serial_isroot()) { 1041 - if ((new_serial.baud_base != state->baud_base) || 1042 - (new_serial.close_delay != port->close_delay) || 1043 - (new_serial.xmit_fifo_size != state->xmit_fifo_size) || 1044 - ((new_serial.flags & ~ASYNC_USR_MASK) != 1033 + if ((ss->baud_base != state->baud_base) || 1034 + (ss->close_delay != port->close_delay) || 1035 + (ss->xmit_fifo_size != state->xmit_fifo_size) || 1036 + ((ss->flags & ~ASYNC_USR_MASK) != 1045 1037 (port->flags & ~ASYNC_USR_MASK))) { 1046 1038 tty_unlock(tty); 1047 1039 return -EPERM; 1048 1040 } 1049 1041 port->flags = ((port->flags & ~ASYNC_USR_MASK) | 1050 - (new_serial.flags & ASYNC_USR_MASK)); 1051 - state->custom_divisor = new_serial.custom_divisor; 1042 + (ss->flags & ASYNC_USR_MASK)); 1043 + state->custom_divisor = ss->custom_divisor; 1052 1044 goto check_and_exit; 1053 1045 } 1054 1046 1055 - if (new_serial.baud_base < 9600) { 1047 + if (ss->baud_base < 9600) { 1056 1048 tty_unlock(tty); 1057 1049 return -EINVAL; 1058 1050 } ··· 1054 1062 * At this point, we start making changes..... 1055 1063 */ 1056 1064 1057 - state->baud_base = new_serial.baud_base; 1065 + state->baud_base = ss->baud_base; 1058 1066 port->flags = ((port->flags & ~ASYNC_FLAGS) | 1059 - (new_serial.flags & ASYNC_FLAGS)); 1060 - state->custom_divisor = new_serial.custom_divisor; 1061 - port->close_delay = new_serial.close_delay * HZ/100; 1062 - port->closing_wait = new_serial.closing_wait * HZ/100; 1067 + (ss->flags & ASYNC_FLAGS)); 1068 + state->custom_divisor = ss->custom_divisor; 1069 + port->close_delay = ss->close_delay * HZ/100; 1070 + port->closing_wait = ss->closing_wait * HZ/100; 1063 1071 port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0; 1064 1072 1065 1073 check_and_exit: 1066 1074 if (tty_port_initialized(port)) { 1067 1075 if (change_spd) { 1068 1076 /* warn about deprecation unless clearing */ 1069 - if (new_serial.flags & ASYNC_SPD_MASK) 1077 + if (ss->flags & ASYNC_SPD_MASK) 1070 1078 dev_warn_ratelimited(tty->dev, "use of SPD flags is deprecated\n"); 1071 1079 change_speed(tty, state, NULL); 1072 1080 } ··· 1075 1083 tty_unlock(tty); 1076 1084 return retval; 1077 1085 } 1078 - 1079 1086 1080 1087 /* 1081 1088 * get_lsr_info - get line status register info ··· 1215 1224 if (serial_paranoia_check(info, tty->name, "rs_ioctl")) 1216 1225 return -ENODEV; 1217 1226 1218 - if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && 1219 - (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) && 1227 + if ((cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) && 1220 1228 (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) { 1221 1229 if (tty_io_error(tty)) 1222 1230 return -EIO; 1223 1231 } 1224 1232 1225 1233 switch (cmd) { 1226 - case TIOCGSERIAL: 1227 - return get_serial_info(tty, info, argp); 1228 - case TIOCSSERIAL: 1229 - return set_serial_info(tty, info, argp); 1230 1234 case TIOCSERCONFIG: 1231 1235 return 0; 1232 1236 ··· 1593 1607 .tiocmget = rs_tiocmget, 1594 1608 .tiocmset = rs_tiocmset, 1595 1609 .get_icount = rs_get_icount, 1610 + .set_serial = set_serial_info, 1611 + .get_serial = get_serial_info, 1596 1612 .proc_show = rs_proc_show, 1597 1613 }; 1598 1614