hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/tty/isicom.c
....@@ -553,7 +553,6 @@
553553
554554 tty = tty_port_tty_get(&port->port);
555555 if (tty == NULL) {
556
- word_count = byte_count >> 1;
557556 while (byte_count > 1) {
558557 inw(base);
559558 byte_count -= 2;
....@@ -1091,34 +1090,33 @@
10911090 }
10921091
10931092 static int isicom_set_serial_info(struct tty_struct *tty,
1094
- struct serial_struct __user *info)
1093
+ struct serial_struct *ss)
10951094 {
10961095 struct isi_port *port = tty->driver_data;
1097
- struct serial_struct newinfo;
10981096 int reconfig_port;
10991097
1100
- if (copy_from_user(&newinfo, info, sizeof(newinfo)))
1101
- return -EFAULT;
1098
+ if (isicom_paranoia_check(port, tty->name, "isicom_ioctl"))
1099
+ return -ENODEV;
11021100
11031101 mutex_lock(&port->port.mutex);
11041102 reconfig_port = ((port->port.flags & ASYNC_SPD_MASK) !=
1105
- (newinfo.flags & ASYNC_SPD_MASK));
1103
+ (ss->flags & ASYNC_SPD_MASK));
11061104
11071105 if (!capable(CAP_SYS_ADMIN)) {
1108
- if ((newinfo.close_delay != port->port.close_delay) ||
1109
- (newinfo.closing_wait != port->port.closing_wait) ||
1110
- ((newinfo.flags & ~ASYNC_USR_MASK) !=
1106
+ if ((ss->close_delay != port->port.close_delay) ||
1107
+ (ss->closing_wait != port->port.closing_wait) ||
1108
+ ((ss->flags & ~ASYNC_USR_MASK) !=
11111109 (port->port.flags & ~ASYNC_USR_MASK))) {
11121110 mutex_unlock(&port->port.mutex);
11131111 return -EPERM;
11141112 }
11151113 port->port.flags = ((port->port.flags & ~ASYNC_USR_MASK) |
1116
- (newinfo.flags & ASYNC_USR_MASK));
1114
+ (ss->flags & ASYNC_USR_MASK));
11171115 } else {
1118
- port->port.close_delay = newinfo.close_delay;
1119
- port->port.closing_wait = newinfo.closing_wait;
1116
+ port->port.close_delay = ss->close_delay;
1117
+ port->port.closing_wait = ss->closing_wait;
11201118 port->port.flags = ((port->port.flags & ~ASYNC_FLAGS) |
1121
- (newinfo.flags & ASYNC_FLAGS));
1119
+ (ss->flags & ASYNC_FLAGS));
11221120 }
11231121 if (reconfig_port) {
11241122 unsigned long flags;
....@@ -1130,46 +1128,24 @@
11301128 return 0;
11311129 }
11321130
1133
-static int isicom_get_serial_info(struct isi_port *port,
1134
- struct serial_struct __user *info)
1135
-{
1136
- struct serial_struct out_info;
1137
-
1138
- mutex_lock(&port->port.mutex);
1139
- memset(&out_info, 0, sizeof(out_info));
1140
-/* out_info.type = ? */
1141
- out_info.line = port - isi_ports;
1142
- out_info.port = port->card->base;
1143
- out_info.irq = port->card->irq;
1144
- out_info.flags = port->port.flags;
1145
-/* out_info.baud_base = ? */
1146
- out_info.close_delay = port->port.close_delay;
1147
- out_info.closing_wait = port->port.closing_wait;
1148
- mutex_unlock(&port->port.mutex);
1149
- if (copy_to_user(info, &out_info, sizeof(out_info)))
1150
- return -EFAULT;
1151
- return 0;
1152
-}
1153
-
1154
-static int isicom_ioctl(struct tty_struct *tty,
1155
- unsigned int cmd, unsigned long arg)
1131
+static int isicom_get_serial_info(struct tty_struct *tty,
1132
+ struct serial_struct *ss)
11561133 {
11571134 struct isi_port *port = tty->driver_data;
1158
- void __user *argp = (void __user *)arg;
11591135
11601136 if (isicom_paranoia_check(port, tty->name, "isicom_ioctl"))
11611137 return -ENODEV;
11621138
1163
- switch (cmd) {
1164
- case TIOCGSERIAL:
1165
- return isicom_get_serial_info(port, argp);
1166
-
1167
- case TIOCSSERIAL:
1168
- return isicom_set_serial_info(tty, argp);
1169
-
1170
- default:
1171
- return -ENOIOCTLCMD;
1172
- }
1139
+ mutex_lock(&port->port.mutex);
1140
+/* ss->type = ? */
1141
+ ss->line = port - isi_ports;
1142
+ ss->port = port->card->base;
1143
+ ss->irq = port->card->irq;
1144
+ ss->flags = port->port.flags;
1145
+/* ss->baud_base = ? */
1146
+ ss->close_delay = port->port.close_delay;
1147
+ ss->closing_wait = port->port.closing_wait;
1148
+ mutex_unlock(&port->port.mutex);
11731149 return 0;
11741150 }
11751151
....@@ -1273,7 +1249,6 @@
12731249 .flush_chars = isicom_flush_chars,
12741250 .write_room = isicom_write_room,
12751251 .chars_in_buffer = isicom_chars_in_buffer,
1276
- .ioctl = isicom_ioctl,
12771252 .set_termios = isicom_set_termios,
12781253 .throttle = isicom_throttle,
12791254 .unthrottle = isicom_unthrottle,
....@@ -1284,6 +1259,8 @@
12841259 .tiocmget = isicom_tiocmget,
12851260 .tiocmset = isicom_tiocmset,
12861261 .break_ctl = isicom_send_break,
1262
+ .get_serial = isicom_get_serial_info,
1263
+ .set_serial = isicom_set_serial_info,
12871264 };
12881265
12891266 static const struct tty_port_operations isicom_port_ops = {
....@@ -1537,7 +1514,7 @@
15371514 static int isicom_probe(struct pci_dev *pdev,
15381515 const struct pci_device_id *ent)
15391516 {
1540
- unsigned int uninitialized_var(signature), index;
1517
+ unsigned int signature, index;
15411518 int retval = -EPERM;
15421519 struct isi_board *board = NULL;
15431520