2 USB Driver layer for GSM modems
6 This driver is free software; you can redistribute it and/or modify
7 it under the terms of Version 2 of the GNU General Public License as
8 published by the Free Software Foundation.
12 History: see the git log.
16 This driver exists because the "normal" serial driver doesn't work too well
17 with GSM modems. Issues:
18 - data loss -- one single Receive URB is not nearly enough
19 - controlling the baud rate doesn't make sense
23 #define DRIVER_DESC "USB Driver for GSM modems"
25 #include <linux/kernel.h>
26 #include <linux/jiffies.h>
27 #include <linux/errno.h>
28 #include <linux/slab.h>
29 #include <linux/tty.h>
30 #include <linux/tty_flip.h>
31 #include <linux/module.h>
32 #include <linux/bitops.h>
33 #include <linux/uaccess.h>
34 #include <linux/usb.h>
35 #include <linux/usb/serial.h>
36 #include <linux/serial.h>
40 * Generate DTR/RTS signals on the port using the SET_CONTROL_LINE_STATE request
43 static int usb_wwan_send_setup(struct usb_serial_port *port)
45 struct usb_serial *serial = port->serial;
46 struct usb_wwan_port_private *portdata;
51 portdata = usb_get_serial_port_data(port);
53 if (portdata->dtr_state)
55 if (portdata->rts_state)
58 ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
60 res = usb_autopm_get_interface(serial->interface);
64 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
65 0x22, 0x21, val, ifnum, NULL, 0,
66 USB_CTRL_SET_TIMEOUT);
68 usb_autopm_put_interface(port->serial->interface);
73 void usb_wwan_dtr_rts(struct usb_serial_port *port, int on)
75 struct usb_wwan_port_private *portdata;
76 struct usb_wwan_intf_private *intfdata;
78 intfdata = usb_get_serial_data(port->serial);
80 if (!intfdata->use_send_setup)
83 portdata = usb_get_serial_port_data(port);
85 portdata->rts_state = on;
86 portdata->dtr_state = on;
88 usb_wwan_send_setup(port);
90 EXPORT_SYMBOL(usb_wwan_dtr_rts);
92 int usb_wwan_tiocmget(struct tty_struct *tty)
94 struct usb_serial_port *port = tty->driver_data;
96 struct usb_wwan_port_private *portdata;
98 portdata = usb_get_serial_port_data(port);
100 value = ((portdata->rts_state) ? TIOCM_RTS : 0) |
101 ((portdata->dtr_state) ? TIOCM_DTR : 0) |
102 ((portdata->cts_state) ? TIOCM_CTS : 0) |
103 ((portdata->dsr_state) ? TIOCM_DSR : 0) |
104 ((portdata->dcd_state) ? TIOCM_CAR : 0) |
105 ((portdata->ri_state) ? TIOCM_RNG : 0);
109 EXPORT_SYMBOL(usb_wwan_tiocmget);
111 int usb_wwan_tiocmset(struct tty_struct *tty,
112 unsigned int set, unsigned int clear)
114 struct usb_serial_port *port = tty->driver_data;
115 struct usb_wwan_port_private *portdata;
116 struct usb_wwan_intf_private *intfdata;
118 portdata = usb_get_serial_port_data(port);
119 intfdata = usb_get_serial_data(port->serial);
121 if (!intfdata->use_send_setup)
124 /* FIXME: what locks portdata fields ? */
126 portdata->rts_state = 1;
128 portdata->dtr_state = 1;
130 if (clear & TIOCM_RTS)
131 portdata->rts_state = 0;
132 if (clear & TIOCM_DTR)
133 portdata->dtr_state = 0;
134 return usb_wwan_send_setup(port);
136 EXPORT_SYMBOL(usb_wwan_tiocmset);
138 static int get_serial_info(struct usb_serial_port *port,
139 struct serial_struct __user *retinfo)
141 struct serial_struct tmp;
146 memset(&tmp, 0, sizeof(tmp));
147 tmp.line = port->minor;
148 tmp.port = port->port_number;
149 tmp.baud_base = tty_get_baud_rate(port->port.tty);
150 tmp.close_delay = port->port.close_delay / 10;
151 tmp.closing_wait = port->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
152 ASYNC_CLOSING_WAIT_NONE :
153 port->port.closing_wait / 10;
155 if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
160 static int set_serial_info(struct usb_serial_port *port,
161 struct serial_struct __user *newinfo)
163 struct serial_struct new_serial;
164 unsigned int closing_wait, close_delay;
167 if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
170 close_delay = new_serial.close_delay * 10;
171 closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
172 ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10;
174 mutex_lock(&port->port.mutex);
176 if (!capable(CAP_SYS_ADMIN)) {
177 if ((close_delay != port->port.close_delay) ||
178 (closing_wait != port->port.closing_wait))
181 retval = -EOPNOTSUPP;
183 port->port.close_delay = close_delay;
184 port->port.closing_wait = closing_wait;
187 mutex_unlock(&port->port.mutex);
191 int usb_wwan_ioctl(struct tty_struct *tty,
192 unsigned int cmd, unsigned long arg)
194 struct usb_serial_port *port = tty->driver_data;
196 dev_dbg(&port->dev, "%s cmd 0x%04x\n", __func__, cmd);
200 return get_serial_info(port,
201 (struct serial_struct __user *) arg);
203 return set_serial_info(port,
204 (struct serial_struct __user *) arg);
209 dev_dbg(&port->dev, "%s arg not supported\n", __func__);
213 EXPORT_SYMBOL(usb_wwan_ioctl);
215 int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
216 const unsigned char *buf, int count)
218 struct usb_wwan_port_private *portdata;
219 struct usb_wwan_intf_private *intfdata;
222 struct urb *this_urb = NULL; /* spurious */
226 portdata = usb_get_serial_port_data(port);
227 intfdata = usb_get_serial_data(port->serial);
229 dev_dbg(&port->dev, "%s: write (%d chars)\n", __func__, count);
233 for (i = 0; left > 0 && i < N_OUT_URB; i++) {
235 if (todo > OUT_BUFLEN)
238 this_urb = portdata->out_urbs[i];
239 if (test_and_set_bit(i, &portdata->out_busy)) {
240 if (time_before(jiffies,
241 portdata->tx_start_time[i] + 10 * HZ))
243 usb_unlink_urb(this_urb);
246 dev_dbg(&port->dev, "%s: endpoint %d buf %d\n", __func__,
247 usb_pipeendpoint(this_urb->pipe), i);
249 err = usb_autopm_get_interface_async(port->serial->interface);
251 clear_bit(i, &portdata->out_busy);
256 memcpy(this_urb->transfer_buffer, buf, todo);
257 this_urb->transfer_buffer_length = todo;
259 spin_lock_irqsave(&intfdata->susp_lock, flags);
260 if (intfdata->suspended) {
261 usb_anchor_urb(this_urb, &portdata->delayed);
262 spin_unlock_irqrestore(&intfdata->susp_lock, flags);
264 intfdata->in_flight++;
265 spin_unlock_irqrestore(&intfdata->susp_lock, flags);
266 err = usb_submit_urb(this_urb, GFP_ATOMIC);
269 "%s: submit urb %d failed: %d\n",
271 clear_bit(i, &portdata->out_busy);
272 spin_lock_irqsave(&intfdata->susp_lock, flags);
273 intfdata->in_flight--;
274 spin_unlock_irqrestore(&intfdata->susp_lock,
276 usb_autopm_put_interface_async(port->serial->interface);
281 portdata->tx_start_time[i] = jiffies;
287 dev_dbg(&port->dev, "%s: wrote (did %d)\n", __func__, count);
290 EXPORT_SYMBOL(usb_wwan_write);
292 static void usb_wwan_indat_callback(struct urb *urb)
296 struct usb_serial_port *port;
298 unsigned char *data = urb->transfer_buffer;
299 int status = urb->status;
301 endpoint = usb_pipeendpoint(urb->pipe);
306 dev_dbg(dev, "%s: nonzero status: %d on endpoint %02x.\n",
307 __func__, status, endpoint);
309 if (urb->actual_length) {
310 tty_insert_flip_string(&port->port, data,
312 tty_flip_buffer_push(&port->port);
314 dev_dbg(dev, "%s: empty read urb received\n", __func__);
316 /* Resubmit urb so we continue receiving */
317 err = usb_submit_urb(urb, GFP_ATOMIC);
319 if (err != -EPERM && err != -ENODEV) {
320 dev_err(dev, "%s: resubmit read urb failed. (%d)\n",
322 /* busy also in error unless we are killed */
323 usb_mark_last_busy(port->serial->dev);
326 usb_mark_last_busy(port->serial->dev);
330 static void usb_wwan_outdat_callback(struct urb *urb)
332 struct usb_serial_port *port;
333 struct usb_wwan_port_private *portdata;
334 struct usb_wwan_intf_private *intfdata;
338 intfdata = usb_get_serial_data(port->serial);
340 usb_serial_port_softint(port);
341 usb_autopm_put_interface_async(port->serial->interface);
342 portdata = usb_get_serial_port_data(port);
343 spin_lock(&intfdata->susp_lock);
344 intfdata->in_flight--;
345 spin_unlock(&intfdata->susp_lock);
347 for (i = 0; i < N_OUT_URB; ++i) {
348 if (portdata->out_urbs[i] == urb) {
349 smp_mb__before_atomic();
350 clear_bit(i, &portdata->out_busy);
356 int usb_wwan_write_room(struct tty_struct *tty)
358 struct usb_serial_port *port = tty->driver_data;
359 struct usb_wwan_port_private *portdata;
362 struct urb *this_urb;
364 portdata = usb_get_serial_port_data(port);
366 for (i = 0; i < N_OUT_URB; i++) {
367 this_urb = portdata->out_urbs[i];
368 if (this_urb && !test_bit(i, &portdata->out_busy))
369 data_len += OUT_BUFLEN;
372 dev_dbg(&port->dev, "%s: %d\n", __func__, data_len);
375 EXPORT_SYMBOL(usb_wwan_write_room);
377 int usb_wwan_chars_in_buffer(struct tty_struct *tty)
379 struct usb_serial_port *port = tty->driver_data;
380 struct usb_wwan_port_private *portdata;
383 struct urb *this_urb;
385 portdata = usb_get_serial_port_data(port);
387 for (i = 0; i < N_OUT_URB; i++) {
388 this_urb = portdata->out_urbs[i];
389 /* FIXME: This locking is insufficient as this_urb may
390 go unused during the test */
391 if (this_urb && test_bit(i, &portdata->out_busy))
392 data_len += this_urb->transfer_buffer_length;
394 dev_dbg(&port->dev, "%s: %d\n", __func__, data_len);
397 EXPORT_SYMBOL(usb_wwan_chars_in_buffer);
399 int usb_wwan_open(struct tty_struct *tty, struct usb_serial_port *port)
401 struct usb_wwan_port_private *portdata;
402 struct usb_wwan_intf_private *intfdata;
403 struct usb_serial *serial = port->serial;
407 portdata = usb_get_serial_port_data(port);
408 intfdata = usb_get_serial_data(serial);
410 if (port->interrupt_in_urb) {
411 err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
413 dev_err(&port->dev, "%s: submit int urb failed: %d\n",
418 /* Start reading from the IN endpoint */
419 for (i = 0; i < N_IN_URB; i++) {
420 urb = portdata->in_urbs[i];
423 err = usb_submit_urb(urb, GFP_KERNEL);
426 "%s: submit read urb %d failed: %d\n",
431 spin_lock_irq(&intfdata->susp_lock);
432 if (++intfdata->open_ports == 1)
433 serial->interface->needs_remote_wakeup = 1;
434 spin_unlock_irq(&intfdata->susp_lock);
435 /* this balances a get in the generic USB serial code */
436 usb_autopm_put_interface(serial->interface);
440 EXPORT_SYMBOL(usb_wwan_open);
442 static void unbusy_queued_urb(struct urb *urb,
443 struct usb_wwan_port_private *portdata)
447 for (i = 0; i < N_OUT_URB; i++) {
448 if (urb == portdata->out_urbs[i]) {
449 clear_bit(i, &portdata->out_busy);
455 void usb_wwan_close(struct usb_serial_port *port)
458 struct usb_serial *serial = port->serial;
459 struct usb_wwan_port_private *portdata;
460 struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);
463 portdata = usb_get_serial_port_data(port);
466 * Need to take susp_lock to make sure port is not already being
467 * resumed, but no need to hold it due to initialized
469 spin_lock_irq(&intfdata->susp_lock);
470 if (--intfdata->open_ports == 0)
471 serial->interface->needs_remote_wakeup = 0;
472 spin_unlock_irq(&intfdata->susp_lock);
475 urb = usb_get_from_anchor(&portdata->delayed);
478 unbusy_queued_urb(urb, portdata);
479 usb_autopm_put_interface_async(serial->interface);
482 for (i = 0; i < N_IN_URB; i++)
483 usb_kill_urb(portdata->in_urbs[i]);
484 for (i = 0; i < N_OUT_URB; i++)
485 usb_kill_urb(portdata->out_urbs[i]);
486 usb_kill_urb(port->interrupt_in_urb);
488 usb_autopm_get_interface_no_resume(serial->interface);
490 EXPORT_SYMBOL(usb_wwan_close);
492 static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
494 int dir, void *ctx, char *buf, int len,
495 void (*callback) (struct urb *))
497 struct usb_serial *serial = port->serial;
500 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
504 usb_fill_bulk_urb(urb, serial->dev,
505 usb_sndbulkpipe(serial->dev, endpoint) | dir,
506 buf, len, callback, ctx);
511 int usb_wwan_port_probe(struct usb_serial_port *port)
513 struct usb_wwan_port_private *portdata;
518 if (!port->bulk_in_size || !port->bulk_out_size)
521 portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
525 init_usb_anchor(&portdata->delayed);
527 for (i = 0; i < N_IN_URB; i++) {
528 buffer = (u8 *)__get_free_page(GFP_KERNEL);
531 portdata->in_buffer[i] = buffer;
533 urb = usb_wwan_setup_urb(port, port->bulk_in_endpointAddress,
536 usb_wwan_indat_callback);
537 portdata->in_urbs[i] = urb;
540 for (i = 0; i < N_OUT_URB; i++) {
541 buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);
543 goto bail_out_error2;
544 portdata->out_buffer[i] = buffer;
546 urb = usb_wwan_setup_urb(port, port->bulk_out_endpointAddress,
549 usb_wwan_outdat_callback);
550 portdata->out_urbs[i] = urb;
553 usb_set_serial_port_data(port, portdata);
558 for (i = 0; i < N_OUT_URB; i++) {
559 usb_free_urb(portdata->out_urbs[i]);
560 kfree(portdata->out_buffer[i]);
563 for (i = 0; i < N_IN_URB; i++) {
564 usb_free_urb(portdata->in_urbs[i]);
565 free_page((unsigned long)portdata->in_buffer[i]);
571 EXPORT_SYMBOL_GPL(usb_wwan_port_probe);
573 int usb_wwan_port_remove(struct usb_serial_port *port)
576 struct usb_wwan_port_private *portdata;
578 portdata = usb_get_serial_port_data(port);
579 usb_set_serial_port_data(port, NULL);
581 for (i = 0; i < N_IN_URB; i++) {
582 usb_free_urb(portdata->in_urbs[i]);
583 free_page((unsigned long)portdata->in_buffer[i]);
585 for (i = 0; i < N_OUT_URB; i++) {
586 usb_free_urb(portdata->out_urbs[i]);
587 kfree(portdata->out_buffer[i]);
594 EXPORT_SYMBOL(usb_wwan_port_remove);
597 static void stop_urbs(struct usb_serial *serial)
600 struct usb_serial_port *port;
601 struct usb_wwan_port_private *portdata;
603 for (i = 0; i < serial->num_ports; ++i) {
604 port = serial->port[i];
605 portdata = usb_get_serial_port_data(port);
608 for (j = 0; j < N_IN_URB; j++)
609 usb_kill_urb(portdata->in_urbs[j]);
610 for (j = 0; j < N_OUT_URB; j++)
611 usb_kill_urb(portdata->out_urbs[j]);
612 usb_kill_urb(port->interrupt_in_urb);
616 int usb_wwan_suspend(struct usb_serial *serial, pm_message_t message)
618 struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);
620 spin_lock_irq(&intfdata->susp_lock);
621 if (PMSG_IS_AUTO(message)) {
622 if (intfdata->in_flight) {
623 spin_unlock_irq(&intfdata->susp_lock);
627 intfdata->suspended = 1;
628 spin_unlock_irq(&intfdata->susp_lock);
634 EXPORT_SYMBOL(usb_wwan_suspend);
636 /* Caller must hold susp_lock. */
637 static int usb_wwan_submit_delayed_urbs(struct usb_serial_port *port)
639 struct usb_serial *serial = port->serial;
640 struct usb_wwan_intf_private *data = usb_get_serial_data(serial);
641 struct usb_wwan_port_private *portdata;
646 portdata = usb_get_serial_port_data(port);
649 urb = usb_get_from_anchor(&portdata->delayed);
653 err = usb_submit_urb(urb, GFP_ATOMIC);
655 dev_err(&port->dev, "%s: submit urb failed: %d\n",
658 unbusy_queued_urb(urb, portdata);
659 usb_autopm_put_interface_async(serial->interface);
671 int usb_wwan_resume(struct usb_serial *serial)
674 struct usb_serial_port *port;
675 struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);
676 struct usb_wwan_port_private *portdata;
681 spin_lock_irq(&intfdata->susp_lock);
682 for (i = 0; i < serial->num_ports; i++) {
683 port = serial->port[i];
685 if (!tty_port_initialized(&port->port))
688 portdata = usb_get_serial_port_data(port);
690 if (port->interrupt_in_urb) {
691 err = usb_submit_urb(port->interrupt_in_urb,
695 "%s: submit int urb failed: %d\n",
701 err = usb_wwan_submit_delayed_urbs(port);
705 for (j = 0; j < N_IN_URB; j++) {
706 urb = portdata->in_urbs[j];
707 err = usb_submit_urb(urb, GFP_ATOMIC);
710 "%s: submit read urb %d failed: %d\n",
716 intfdata->suspended = 0;
717 spin_unlock_irq(&intfdata->susp_lock);
724 EXPORT_SYMBOL(usb_wwan_resume);
727 MODULE_AUTHOR(DRIVER_AUTHOR);
728 MODULE_DESCRIPTION(DRIVER_DESC);
729 MODULE_LICENSE("GPL");