hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/usb/serial/usb_wwan.c
....@@ -132,38 +132,33 @@
132132 }
133133 EXPORT_SYMBOL(usb_wwan_tiocmset);
134134
135
-static int get_serial_info(struct usb_serial_port *port,
136
- struct serial_struct __user *retinfo)
135
+int usb_wwan_get_serial_info(struct tty_struct *tty,
136
+ struct serial_struct *ss)
137137 {
138
- struct serial_struct tmp;
138
+ struct usb_serial_port *port = tty->driver_data;
139139
140
- memset(&tmp, 0, sizeof(tmp));
141
- tmp.line = port->minor;
142
- tmp.port = port->port_number;
143
- tmp.baud_base = tty_get_baud_rate(port->port.tty);
144
- tmp.close_delay = port->port.close_delay / 10;
145
- tmp.closing_wait = port->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
140
+ ss->line = port->minor;
141
+ ss->port = port->port_number;
142
+ ss->baud_base = tty_get_baud_rate(port->port.tty);
143
+ ss->close_delay = jiffies_to_msecs(port->port.close_delay) / 10;
144
+ ss->closing_wait = port->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
146145 ASYNC_CLOSING_WAIT_NONE :
147
- port->port.closing_wait / 10;
148
-
149
- if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
150
- return -EFAULT;
146
+ jiffies_to_msecs(port->port.closing_wait) / 10;
151147 return 0;
152148 }
149
+EXPORT_SYMBOL(usb_wwan_get_serial_info);
153150
154
-static int set_serial_info(struct usb_serial_port *port,
155
- struct serial_struct __user *newinfo)
151
+int usb_wwan_set_serial_info(struct tty_struct *tty,
152
+ struct serial_struct *ss)
156153 {
157
- struct serial_struct new_serial;
154
+ struct usb_serial_port *port = tty->driver_data;
158155 unsigned int closing_wait, close_delay;
159156 int retval = 0;
160157
161
- if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
162
- return -EFAULT;
163
-
164
- close_delay = new_serial.close_delay * 10;
165
- closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
166
- ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10;
158
+ close_delay = msecs_to_jiffies(ss->close_delay * 10);
159
+ closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
160
+ ASYNC_CLOSING_WAIT_NONE :
161
+ msecs_to_jiffies(ss->closing_wait * 10);
167162
168163 mutex_lock(&port->port.mutex);
169164
....@@ -181,30 +176,7 @@
181176 mutex_unlock(&port->port.mutex);
182177 return retval;
183178 }
184
-
185
-int usb_wwan_ioctl(struct tty_struct *tty,
186
- unsigned int cmd, unsigned long arg)
187
-{
188
- struct usb_serial_port *port = tty->driver_data;
189
-
190
- dev_dbg(&port->dev, "%s cmd 0x%04x\n", __func__, cmd);
191
-
192
- switch (cmd) {
193
- case TIOCGSERIAL:
194
- return get_serial_info(port,
195
- (struct serial_struct __user *) arg);
196
- case TIOCSSERIAL:
197
- return set_serial_info(port,
198
- (struct serial_struct __user *) arg);
199
- default:
200
- break;
201
- }
202
-
203
- dev_dbg(&port->dev, "%s arg not supported\n", __func__);
204
-
205
- return -ENOIOCTLCMD;
206
-}
207
-EXPORT_SYMBOL(usb_wwan_ioctl);
179
+EXPORT_SYMBOL(usb_wwan_set_serial_info);
208180
209181 int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
210182 const unsigned char *buf, int count)
....@@ -463,7 +435,8 @@
463435
464436 /*
465437 * Need to take susp_lock to make sure port is not already being
466
- * resumed, but no need to hold it due to initialized
438
+ * resumed, but no need to hold it due to the tty-port initialized
439
+ * flag.
467440 */
468441 spin_lock_irq(&intfdata->susp_lock);
469442 if (--intfdata->open_ports == 0)
....@@ -496,7 +469,6 @@
496469 struct usb_serial *serial = port->serial;
497470 struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);
498471 struct urb *urb;
499
- struct usb_device_descriptor *desc = &serial->dev->descriptor;
500472
501473 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
502474 if (!urb)
....@@ -509,11 +481,6 @@
509481 if (intfdata->use_zlp && dir == USB_DIR_OUT)
510482 urb->transfer_flags |= URB_ZERO_PACKET;
511483
512
- if (dir == USB_DIR_OUT) {
513
- if ((desc->idVendor == cpu_to_le16(0x1286) &&
514
- desc->idProduct == cpu_to_le16(0x4e3c)))
515
- urb->transfer_flags |= URB_ZERO_PACKET;
516
- }
517484 return urb;
518485 }
519486