1 /*
2 * USB Serial Converter driver
3 *
4 * Copyright (C) 1999 - 2002 Greg Kroah-Hartman (greg@kroah.com)
5 * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
6 * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License version
10 * 2 as published by the Free Software Foundation.
11 *
12 * This driver was originally based on the ACM driver by Armin Fuerst (which was
13 * based on a driver by Brad Keryan)
14 *
15 * See Documentation/usb/usb-serial.txt for more information on using this driver
16 *
17 * (10/10/2001) gkh
18 * usb_serial_disconnect() now sets the serial->dev pointer is to NULL to
19 * help prevent child drivers from accessing the device since it is now
20 * gone.
21 *
22 * (09/13/2001) gkh
23 * Moved generic driver initialize after we have registered with the USB
24 * core. Thanks to Randy Dunlap for pointing this problem out.
25 *
26 * (07/03/2001) gkh
27 * Fixed module paramater size. Thanks to John Brockmeyer for the pointer.
28 * Fixed vendor and product getting defined through the MODULE_PARM macro
29 * if the Generic driver wasn't compiled in.
30 * Fixed problem with generic_shutdown() not being called for drivers that
31 * don't have a shutdown() function.
32 *
33 * (06/06/2001) gkh
34 * added evil hack that is needed for the prolific pl2303 device due to the
35 * crazy way its endpoints are set up.
36 *
37 * (05/30/2001) gkh
38 * switched from using spinlock to a semaphore, which fixes lots of problems.
39 *
40 * (04/08/2001) gb
41 * Identify version on module load.
42 *
43 * 2001_02_05 gkh
44 * Fixed buffer overflows bug with the generic serial driver. Thanks to
45 * Todd Squires <squirest@ct0.com> for fixing this.
46 *
47 * (01/10/2001) gkh
48 * Fixed bug where the generic serial adaptor grabbed _any_ device that was
49 * offered to it.
50 *
51 * (12/12/2000) gkh
52 * Removed MOD_INC and MOD_DEC from poll and disconnect functions, and
53 * moved them to the serial_open and serial_close functions.
54 * Also fixed bug with there not being a MOD_DEC for the generic driver
55 * (thanks to Gary Brubaker for finding this.)
56 *
57 * (11/29/2000) gkh
58 * Small NULL pointer initialization cleanup which saves a bit of disk image
59 *
60 * (11/01/2000) Adam J. Richter
61 * instead of using idVendor/idProduct pairs, usb serial drivers
62 * now identify their hardware interest with usb_device_id tables,
63 * which they usually have anyhow for use with MODULE_DEVICE_TABLE.
64 *
65 * (10/05/2000) gkh
66 * Fixed bug with urb->dev not being set properly, now that the usb
67 * core needs it.
68 *
69 * (09/11/2000) gkh
70 * Removed DEBUG #ifdefs with call to usb_serial_debug_data
71 *
72 * (08/28/2000) gkh
73 * Added port_lock to port structure.
74 * Added locks for SMP safeness to generic driver
75 * Fixed the ability to open a generic device's port more than once.
76 *
77 * (07/23/2000) gkh
78 * Added bulk_out_endpointAddress to port structure.
79 *
80 * (07/19/2000) gkh, pberger, and borchers
81 * Modifications to allow usb-serial drivers to be modules.
82 *
83 * (07/03/2000) gkh
84 * Added more debugging to serial_ioctl call
85 *
86 * (06/25/2000) gkh
87 * Changed generic_write_bulk_callback to not call wake_up_interruptible
88 * directly, but to have port_softint do it at a safer time.
89 *
90 * (06/23/2000) gkh
91 * Cleaned up debugging statements in a quest to find UHCI timeout bug.
92 *
93 * (05/22/2000) gkh
94 * Changed the makefile, enabling the big CONFIG_USB_SERIAL_SOMTHING to be
95 * removed from the individual device source files.
96 *
97 * (05/03/2000) gkh
98 * Added the Digi Acceleport driver from Al Borchers and Peter Berger.
99 *
100 * (05/02/2000) gkh
101 * Changed devfs and tty register code to work properly now. This was based on
102 * the ACM driver changes by Vojtech Pavlik.
103 *
104 * (04/27/2000) Ryan VanderBijl
105 * Put calls to *_paranoia_checks into one function.
106 *
107 * (04/23/2000) gkh
108 * Fixed bug that Randy Dunlap found for Generic devices with no bulk out ports.
109 * Moved when the startup code printed out the devices that are supported.
110 *
111 * (04/19/2000) gkh
112 * Added driver for ZyXEL omni.net lcd plus ISDN TA
113 * Made startup info message specify which drivers were compiled in.
114 *
115 * (04/03/2000) gkh
116 * Changed the probe process to remove the module unload races.
117 * Changed where the tty layer gets initialized to have devfs work nicer.
118 * Added initial devfs support.
119 *
120 * (03/26/2000) gkh
121 * Split driver up into device specific pieces.
122 *
123 * (03/19/2000) gkh
124 * Fixed oops that could happen when device was removed while a program
125 * was talking to the device.
126 * Removed the static urbs and now all urbs are created and destroyed
127 * dynamically.
128 * Reworked the internal interface. Now everything is based on the
129 * usb_serial_port structure instead of the larger usb_serial structure.
130 * This fixes the bug that a multiport device could not have more than
131 * one port open at one time.
132 *
133 * (03/17/2000) gkh
134 * Added config option for debugging messages.
135 * Added patch for keyspan pda from Brian Warner.
136 *
137 * (03/06/2000) gkh
138 * Added the keyspan pda code from Brian Warner <warner@lothar.com>
139 * Moved a bunch of the port specific stuff into its own structure. This
140 * is in anticipation of the true multiport devices (there's a bug if you
141 * try to access more than one port of any multiport device right now)
142 *
143 * (02/21/2000) gkh
144 * Made it so that any serial devices only have to specify which functions
145 * they want to overload from the generic function calls (great,
146 * inheritance in C, in a driver, just what I wanted...)
147 * Added support for set_termios and ioctl function calls. No drivers take
148 * advantage of this yet.
149 * Removed the #ifdef MODULE, now there is no module specific code.
150 * Cleaned up a few comments in usb-serial.h that were wrong (thanks again
151 * to Miles Lott).
152 * Small fix to get_free_serial.
153 *
154 * (02/14/2000) gkh
155 * Removed the Belkin and Peracom functionality from the driver due to
156 * the lack of support from the vendor, and me not wanting people to
157 * accidenatly buy the device, expecting it to work with Linux.
158 * Added read_bulk_callback and write_bulk_callback to the type structure
159 * for the needs of the FTDI and WhiteHEAT driver.
160 * Changed all reverences to FTDI to FTDI_SIO at the request of Bill
161 * Ryder.
162 * Changed the output urb size back to the max endpoint size to make
163 * the ftdi_sio driver have it easier, and due to the fact that it didn't
164 * really increase the speed any.
165 *
166 * (02/11/2000) gkh
167 * Added VISOR_FUNCTION_CONSOLE to the visor startup function. This was a
168 * patch from Miles Lott (milos@insync.net).
169 * Fixed bug with not restoring the minor range that a device grabs, if
170 * the startup function fails (thanks Miles for finding this).
171 *
172 * (02/05/2000) gkh
173 * Added initial framework for the Keyspan PDA serial converter so that
174 * Brian Warner has a place to put his code.
175 * Made the ezusb specific functions generic enough that different
176 * devices can use them (whiteheat and keyspan_pda both need them).
177 * Split out a whole bunch of structure and other stuff to a seperate
178 * usb-serial.h file.
179 * Made the Visor connection messages a little more understandable, now
180 * that Miles Lott (milos@insync.net) has gotten the Generic channel to
181 * work. Also made them always show up in the log file.
182 *
183 * (01/25/2000) gkh
184 * Added initial framework for FTDI serial converter so that Bill Ryder
185 * has a place to put his code.
186 * Added the vendor specific info from Handspring. Now we can print out
187 * informational debug messages as well as understand what is happening.
188 *
189 * (01/23/2000) gkh
190 * Fixed problem of crash when trying to open a port that didn't have a
191 * device assigned to it. Made the minor node finding a little smarter,
192 * now it looks to find a continous space for the new device.
193 *
194 * (01/21/2000) gkh
195 * Fixed bug in visor_startup with patch from Miles Lott (milos@insync.net)
196 * Fixed get_serial_by_minor which was all messed up for multi port
197 * devices. Fixed multi port problem for generic devices. Now the number
198 * of ports is determined by the number of bulk out endpoints for the
199 * generic device.
200 *
201 * (01/19/2000) gkh
202 * Removed lots of cruft that was around from the old (pre urb) driver
203 * interface.
204 * Made the serial_table dynamic. This should save lots of memory when
205 * the number of minor nodes goes up to 256.
206 * Added initial support for devices that have more than one port.
207 * Added more debugging comments for the Visor, and added a needed
208 * set_configuration call.
209 *
210 * (01/17/2000) gkh
211 * Fixed the WhiteHEAT firmware (my processing tool had a bug)
212 * and added new debug loader firmware for it.
213 * Removed the put_char function as it isn't really needed.
214 * Added visor startup commands as found by the Win98 dump.
215 *
216 * (01/13/2000) gkh
217 * Fixed the vendor id for the generic driver to the one I meant it to be.
218 *
219 * (01/12/2000) gkh
220 * Forget the version numbering...that's pretty useless...
221 * Made the driver able to be compiled so that the user can select which
222 * converter they want to use. This allows people who only want the Visor
223 * support to not pay the memory size price of the WhiteHEAT.
224 * Fixed bug where the generic driver (idVendor=0000 and idProduct=0000)
225 * grabbed the root hub. Not good.
226 *
227 * version 0.4.0 (01/10/2000) gkh
228 * Added whiteheat.h containing the firmware for the ConnectTech WhiteHEAT
229 * device. Added startup function to allow firmware to be downloaded to
230 * a device if it needs to be.
231 * Added firmware download logic to the WhiteHEAT device.
232 * Started to add #defines to split up the different drivers for potential
233 * configuration option.
234 *
235 * version 0.3.1 (12/30/99) gkh
236 * Fixed problems with urb for bulk out.
237 * Added initial support for multiple sets of endpoints. This enables
238 * the Handspring Visor to be attached successfully. Only the first
239 * bulk in / bulk out endpoint pair is being used right now.
240 *
241 * version 0.3.0 (12/27/99) gkh
242 * Added initial support for the Handspring Visor based on a patch from
243 * Miles Lott (milos@sneety.insync.net)
244 * Cleaned up the code a bunch and converted over to using urbs only.
245 *
246 * version 0.2.3 (12/21/99) gkh
247 * Added initial support for the Connect Tech WhiteHEAT converter.
248 * Incremented the number of ports in expectation of getting the
249 * WhiteHEAT to work properly (4 ports per connection).
250 * Added notification on insertion and removal of what port the
251 * device is/was connected to (and what kind of device it was).
252 *
253 * version 0.2.2 (12/16/99) gkh
254 * Changed major number to the new allocated number. We're legal now!
255 *
256 * version 0.2.1 (12/14/99) gkh
257 * Fixed bug that happens when device node is opened when there isn't a
258 * device attached to it. Thanks to marek@webdesign.no for noticing this.
259 *
260 * version 0.2.0 (11/10/99) gkh
261 * Split up internals to make it easier to add different types of serial
262 * converters to the code.
263 * Added a "generic" driver that gets it's vendor and product id
264 * from when the module is loaded. Thanks to David E. Nelson (dnelson@jump.net)
265 * for the idea and sample code (from the usb scanner driver.)
266 * Cleared up any licensing questions by releasing it under the GNU GPL.
267 *
268 * version 0.1.2 (10/25/99) gkh
269 * Fixed bug in detecting device.
270 *
271 * version 0.1.1 (10/05/99) gkh
272 * Changed the major number to not conflict with anything else.
273 *
274 * version 0.1 (09/28/99) gkh
275 * Can recognize the two different devices and start up a read from
276 * device when asked to. Writes also work. No control signals yet, this
277 * all is vendor specific data (i.e. no spec), also no control for
278 * different baud rates or other bit settings.
279 * Currently we are using the same devid as the acm driver. This needs
280 * to change.
281 *
282 */
283
284 #include <linux/config.h>
285 #include <linux/kernel.h>
286 #include <linux/sched.h>
287 #include <linux/signal.h>
288 #include <linux/errno.h>
289 #include <linux/poll.h>
290 #include <linux/init.h>
291 #include <linux/slab.h>
292 #include <linux/fcntl.h>
293 #include <linux/tty.h>
294 #include <linux/tty_driver.h>
295 #include <linux/tty_flip.h>
296 #include <linux/module.h>
297 #include <linux/spinlock.h>
298 #include <linux/list.h>
299 #include <linux/smp_lock.h>
300 #include <linux/usb.h>
301
302 #ifdef CONFIG_USB_SERIAL_DEBUG
303 static int debug = 1;
304 #else
305 static int debug;
306 #endif
307
308 #include "usb-serial.h"
309 #include "pl2303.h"
310
311 /*
312 * Version Information
313 */
314 #define DRIVER_VERSION "v1.4"
315 #define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux-usb/"
316 #define DRIVER_DESC "USB Serial Driver core"
317
318 /* function prototypes for a "generic" type serial converter (no flow control, not all endpoints needed) */
319 /* need to always compile these in, as some of the other devices use these functions as their own. */
320 /* if a driver does not provide a function pointer, the generic function will be called. */
321 static int generic_open (struct usb_serial_port *port, struct file *filp);
322 static void generic_close (struct usb_serial_port *port, struct file *filp);
323 static int generic_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count);
324 static int generic_write_room (struct usb_serial_port *port);
325 static int generic_chars_in_buffer (struct usb_serial_port *port);
326 static void generic_read_bulk_callback (struct urb *urb);
327 static void generic_write_bulk_callback (struct urb *urb);
328 static void generic_shutdown (struct usb_serial *serial);
329
330
331 #ifdef CONFIG_USB_SERIAL_GENERIC
332 static __u16 vendor = 0x05f9;
333 static __u16 product = 0xffff;
334
335 static struct usb_device_id generic_device_ids[2]; /* Initially all zeroes. */
336
337 /* All of the device info needed for the Generic Serial Converter */
338 static struct usb_serial_device_type generic_device = {
339 .owner = THIS_MODULE,
340 .name = "Generic",
341 .id_table = generic_device_ids,
342 .num_interrupt_in = NUM_DONT_CARE,
343 .num_bulk_in = NUM_DONT_CARE,
344 .num_bulk_out = NUM_DONT_CARE,
345 .num_ports = 1,
346 .shutdown = generic_shutdown,
347 };
348 #endif
349
350 /*
351 * The post kludge structures and variables.
352 */
353 #define POST_BSIZE 100 /* little below 128 in total */
354 struct usb_serial_post_job {
355 struct list_head link;
356 struct usb_serial_port *port;
357 int len;
358 char buff[POST_BSIZE];
359 };
360 static spinlock_t post_lock = SPIN_LOCK_UNLOCKED; /* Also covers ->ref */
361 static struct list_head post_list = LIST_HEAD_INIT(post_list);
362 static struct tq_struct post_task;
363
364 /* local function prototypes */
365 static int serial_open (struct tty_struct *tty, struct file * filp);
366 static void serial_close (struct tty_struct *tty, struct file * filp);
367 static int __serial_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count);
368 static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count);
369 static int serial_post_job(struct usb_serial_port *port, int from_user,
370 int gfp, const unsigned char *buf, int count);
371 static int serial_post_one(struct usb_serial_port *port, int from_user,
372 int gfp, const unsigned char *buf, int count);
373 static int serial_write_room (struct tty_struct *tty);
374 static int serial_chars_in_buffer (struct tty_struct *tty);
375 static void serial_throttle (struct tty_struct * tty);
376 static void serial_unthrottle (struct tty_struct * tty);
377 static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg);
378 static void serial_set_termios (struct tty_struct *tty, struct termios * old);
379 static void serial_shutdown (struct usb_serial *serial);
380
381 static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum,
382 const struct usb_device_id *id);
383 static void usb_serial_disconnect(struct usb_device *dev, void *ptr);
384
385 static struct usb_driver usb_serial_driver = {
386 .name = "serial",
387 .probe = usb_serial_probe,
388 .disconnect = usb_serial_disconnect,
389 .id_table = NULL, /* check all devices */
390 };
391
392 /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
393 the MODULE_DEVICE_TABLE declarations in each serial driver
394 cause the "hotplug" program to pull in whatever module is necessary
395 via modprobe, and modprobe will load usbserial because the serial
396 drivers depend on it.
397 */
398
399
400 static int serial_refcount;
401 static struct tty_driver serial_tty_driver;
402 static struct tty_struct * serial_tty[SERIAL_TTY_MINORS];
403 static struct termios * serial_termios[SERIAL_TTY_MINORS];
404 static struct termios * serial_termios_locked[SERIAL_TTY_MINORS];
405 static struct usb_serial *serial_table[SERIAL_TTY_MINORS]; /* initially all NULL */
406
407
408 static LIST_HEAD(usb_serial_driver_list);
409
410
usb_serial_get_serial(struct usb_serial_port * port,const char * function)411 struct usb_serial *usb_serial_get_serial(struct usb_serial_port *port,
412 const char *function)
413 {
414
415 /* if no port was specified, or it fails a paranoia check */
416 if (!port ||
417 port_paranoia_check (port, function) ||
418 serial_paranoia_check (port->serial, function)) {
419 return NULL;
420 }
421
422 /* disconnected, cut off all operations */
423 if (port->serial->dev == NULL)
424 return NULL;
425
426 return port->serial;
427 }
428
429
get_serial_by_minor(unsigned int minor)430 static struct usb_serial *get_serial_by_minor (unsigned int minor)
431 {
432 return serial_table[minor];
433 }
434
435
get_free_serial(int num_ports,int * minor)436 static struct usb_serial *get_free_serial (int num_ports, int *minor)
437 {
438 struct usb_serial *serial = NULL;
439 int i, j;
440 int good_spot;
441
442 dbg("%s %d", __FUNCTION__, num_ports);
443
444 *minor = 0;
445 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
446 if (serial_table[i])
447 continue;
448
449 good_spot = 1;
450 for (j = 1; j <= num_ports-1; ++j)
451 if (serial_table[i+j])
452 good_spot = 0;
453 if (good_spot == 0)
454 continue;
455
456 if (!(serial = kmalloc(sizeof(struct usb_serial), GFP_KERNEL))) {
457 err("%s - Out of memory", __FUNCTION__);
458 return NULL;
459 }
460 memset(serial, 0, sizeof(struct usb_serial));
461 serial->magic = USB_SERIAL_MAGIC;
462 serial_table[i] = serial;
463 *minor = i;
464 dbg("%s - minor base = %d", __FUNCTION__, *minor);
465 for (i = *minor+1; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i)
466 serial_table[i] = serial;
467 return serial;
468 }
469 return NULL;
470 }
471
return_serial(struct usb_serial * serial)472 static void return_serial (struct usb_serial *serial)
473 {
474 int i;
475
476 dbg("%s", __FUNCTION__);
477
478 if (serial == NULL)
479 return;
480
481 for (i = 0; i < serial->num_ports; ++i) {
482 serial_table[serial->minor + i] = NULL;
483 }
484
485 return;
486 }
487
488 /*
489 * A regular foo_put(), except a) it's open-coded without kref, and
490 * b) it's not the only place which does --serial->ref (due to locking).
491 *
492 * This does not do an equivalent of return_serial() because serial_table[]
493 * has a lifetime from probe to disconnect.
494 */
serial_put(struct usb_serial * serial)495 static void serial_put(struct usb_serial *serial)
496 {
497 unsigned long flags;
498
499 spin_lock_irqsave(&post_lock, flags);
500 if (--serial->ref == 0)
501 kfree(serial);
502 spin_unlock_irqrestore(&post_lock, flags);
503 }
504
505 /*
506 * The post kludge.
507 *
508 * Our component drivers are hideously buggy and written by people
509 * who have difficulty understanding the concept of spinlocks.
510 * There were so many races and lockups that Greg K-H made a watershed
511 * decision to provide what is essentially a single-threaded sandbox
512 * for component drivers, protected by a semaphore. It helped a lot, but
513 * for one little problem: when tty->low_latency is set, line disciplines
514 * can call ->write from an interrupt, where the semaphore oopses.
515 *
516 * Rather than open the whole can of worms again, we just post writes
517 * into a helper which can sleep.
518 *
519 * Kernel 2.6 has a proper fix. It replaces semaphores with proper locking.
520 */
post_helper(void * arg)521 static void post_helper(void *arg)
522 {
523 struct list_head *pos;
524 struct usb_serial_post_job *job;
525 struct usb_serial_port *port;
526 struct usb_serial *serial;
527 unsigned long flags;
528
529 spin_lock_irqsave(&post_lock, flags);
530 pos = post_list.next;
531 while (pos != &post_list) {
532 job = list_entry(pos, struct usb_serial_post_job, link);
533 port = job->port;
534 /* get_usb_serial checks serial->dev, so cannot be used */
535 serial = port->serial;
536 if (port->write_busy) {
537 dbg("%s - port %d busy", __FUNCTION__, port->number);
538 pos = pos->next;
539 continue;
540 }
541 list_del(&job->link);
542 spin_unlock_irqrestore(&post_lock, flags);
543
544 down(&port->sem);
545 dbg("%s - port %d len %d backlog %d", __FUNCTION__,
546 port->number, job->len, port->write_backlog);
547 if (serial->dev != NULL) {
548 int rc;
549 int sent = 0;
550 while (sent < job->len) {
551 rc = __serial_write(port, 0, job->buff + sent, job->len - sent);
552 if ((rc < 0) || signal_pending(current))
553 break;
554 sent += rc;
555 if ((sent < job->len) && current->need_resched)
556 schedule();
557 }
558 }
559 up(&port->sem);
560
561 spin_lock_irqsave(&post_lock, flags);
562 port->write_backlog -= job->len;
563 kfree(job);
564 if (--serial->ref == 0)
565 kfree(serial);
566 /* Have to reset because we dropped spinlock */
567 pos = post_list.next;
568 }
569 spin_unlock_irqrestore(&post_lock, flags);
570 }
571
572 #ifdef USES_EZUSB_FUNCTIONS
573 /* EZ-USB Control and Status Register. Bit 0 controls 8051 reset */
574 #define CPUCS_REG 0x7F92
575
ezusb_writememory(struct usb_serial * serial,int address,unsigned char * data,int length,__u8 bRequest)576 int ezusb_writememory (struct usb_serial *serial, int address, unsigned char *data, int length, __u8 bRequest)
577 {
578 int result;
579 unsigned char *transfer_buffer;
580
581 /* dbg("ezusb_writememory %x, %d", address, length); */
582 if (!serial->dev) {
583 dbg("%s - no physical device present, failing.", __FUNCTION__);
584 return -ENODEV;
585 }
586
587 transfer_buffer = kmalloc (length, GFP_KERNEL);
588 if (!transfer_buffer) {
589 err("%s - kmalloc(%d) failed.", __FUNCTION__, length);
590 return -ENOMEM;
591 }
592 memcpy (transfer_buffer, data, length);
593 result = usb_control_msg (serial->dev, usb_sndctrlpipe(serial->dev, 0), bRequest, 0x40, address, 0, transfer_buffer, length, 3*HZ);
594 kfree (transfer_buffer);
595 return result;
596 }
597
ezusb_set_reset(struct usb_serial * serial,unsigned char reset_bit)598 int ezusb_set_reset (struct usb_serial *serial, unsigned char reset_bit)
599 {
600 int response;
601 dbg("%s - %d", __FUNCTION__, reset_bit);
602 response = ezusb_writememory (serial, CPUCS_REG, &reset_bit, 1, 0xa0);
603 if (response < 0) {
604 err("%s- %d failed", __FUNCTION__, reset_bit);
605 }
606 return response;
607 }
608
609 #endif /* USES_EZUSB_FUNCTIONS */
610
611 /*****************************************************************************
612 * Driver tty interface functions
613 *****************************************************************************/
serial_open(struct tty_struct * tty,struct file * filp)614 static int serial_open (struct tty_struct *tty, struct file * filp)
615 {
616 struct usb_serial *serial;
617 struct usb_serial_port *port;
618 unsigned int portNumber;
619 int retval = 0;
620 unsigned long flags;
621
622 dbg("%s", __FUNCTION__);
623
624 /* initialize the pointer incase something fails */
625 tty->driver_data = NULL;
626
627 /*
628 * In a sane refcounting system, this would've been called serial_get().
629 */
630 spin_lock_irqsave(&post_lock, flags);
631 /* get the serial object associated with this tty pointer */
632 serial = get_serial_by_minor (MINOR(tty->device));
633 if (serial_paranoia_check(serial, __FUNCTION__) || serial->dev == NULL) {
634 spin_unlock_irqrestore(&post_lock, flags);
635 return -ENODEV;
636 }
637 serial->ref++; /* Protect the port->sem from kfree() */
638 spin_unlock_irqrestore(&post_lock, flags);
639
640 /* set up our port structure making the tty driver remember our port object, and us it */
641 portNumber = MINOR(tty->device) - serial->minor;
642 port = &serial->port[portNumber];
643 tty->driver_data = port;
644
645 down (&port->sem);
646 port->tty = tty;
647
648 /* lock this module before we call it */
649 if (serial->type->owner)
650 __MOD_INC_USE_COUNT(serial->type->owner);
651
652 ++port->open_count;
653 if (port->open_count == 1) {
654 /* only call the device specific open if this
655 * is the first time the port is opened */
656 if (serial->type->open)
657 retval = serial->type->open(port, filp);
658 else
659 retval = generic_open(port, filp);
660 }
661
662 if (retval) {
663 port->open_count = 0;
664 if (serial->type->owner)
665 __MOD_DEC_USE_COUNT(serial->type->owner);
666 }
667
668 up (&port->sem);
669 if (retval)
670 serial_put(serial);
671 return retval;
672 }
673
__serial_close(struct usb_serial_port * port,struct file * filp)674 static void __serial_close(struct usb_serial_port *port, struct file *filp)
675 {
676
677 if (!port->open_count) {
678 err("%s - port %d: not open", __FUNCTION__, port->number);
679 return;
680 }
681
682 --port->open_count;
683 if (port->open_count <= 0) {
684 /* only call the device specific close if this
685 * port is being closed by the last owner */
686 if (port->serial->type->close)
687 port->serial->type->close(port, filp);
688 else
689 generic_close(port, filp);
690 port->open_count = 0;
691 if (port->tty) {
692 port->tty->driver_data = NULL;
693 port->tty = NULL;
694 }
695 }
696
697 if (port->serial->type->owner)
698 __MOD_DEC_USE_COUNT(port->serial->type->owner);
699 }
700
serial_close(struct tty_struct * tty,struct file * filp)701 static void serial_close(struct tty_struct *tty, struct file * filp)
702 {
703 struct usb_serial_port *port;
704 struct usb_serial *serial;
705
706 if ((port = tty->driver_data) == NULL) {
707 /* This happens if someone opened us with O_NDELAY */
708 return;
709 }
710 if ((serial = port->serial) == NULL) {
711 err("%s - port %d: not open (count %d)", __FUNCTION__, port->number, port->open_count);
712 return;
713 }
714
715 dbg("%s - port %d", __FUNCTION__, port->number);
716
717 tty->closing = 1;
718 if (serial->dev != NULL) {
719 /* In most drivers, this is set with setserial */
720 /** if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE) **/
721 tty_wait_until_sent(tty, /** info->closing_wait **/ 30*HZ);
722 }
723
724 down (&port->sem);
725 __serial_close(port, filp);
726 up (&port->sem);
727
728 serial_put(serial);
729 tty->closing = 0;
730 }
731
__serial_write(struct usb_serial_port * port,int from_user,const unsigned char * buf,int count)732 static int __serial_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count)
733 {
734 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
735 int retval = -EINVAL;
736
737 if (!serial)
738 return -ENODEV;
739
740 dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count);
741
742 if (!port->open_count) {
743 dbg("%s - port not open", __FUNCTION__);
744 goto exit;
745 }
746
747 /* pass on to the driver specific version of this function if it is available */
748 if (serial->type->write)
749 retval = serial->type->write(port, from_user, buf, count);
750 else
751 retval = generic_write(port, from_user, buf, count);
752
753 exit:
754 return retval;
755 }
756
serial_write(struct tty_struct * tty,int from_user,const unsigned char * buf,int count)757 static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count)
758 {
759 struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
760 int rc;
761
762 if (!port)
763 return -ENODEV;
764
765 if (!in_interrupt()) {
766 /*
767 * Run post_list to reduce a possiblity of reordered writes.
768 * Tasks can make keventd to sleep, sometimes for a long time.
769 */
770 post_helper(NULL);
771
772 down(&port->sem);
773 /*
774 * This happens when a line discipline asks how much room
775 * we have, gets 64, then tries to perform two writes
776 * for a byte each. First write takes whole URB, second
777 * write hits this check.
778 */
779 if (port->write_busy) {
780 up(&port->sem);
781 return serial_post_job(port, from_user, GFP_KERNEL,
782 buf, count);
783 }
784
785 rc = __serial_write(port, from_user, buf, count);
786 up(&port->sem);
787 return rc;
788 }
789
790 if (from_user) {
791 /*
792 * This is a BUG-able offense because we cannot
793 * pagefault while in_interrupt, but we want to see
794 * something in dmesg rather than just blinking LEDs.
795 */
796 err("user data in interrupt write");
797 return -EINVAL;
798 }
799
800 return serial_post_job(port, 0, GFP_ATOMIC, buf, count);
801 }
802
serial_post_job(struct usb_serial_port * port,int from_user,int gfp,const unsigned char * buf,int count)803 static int serial_post_job(struct usb_serial_port *port, int from_user,
804 int gfp, const unsigned char *buf, int count)
805 {
806 int done = 0, length;
807 int rc;
808
809 if (port == NULL)
810 return -EPIPE;
811
812 if (count >= 512) {
813 static int rate = 0;
814 /*
815 * Data loss due to extreme circumstances.
816 * It's a ususal thing on serial to lose characters, isn't it?
817 * Neener, neener! Actually, it's probably an echo loop anyway.
818 * Only happens when getty starts talking to Visor.
819 */
820 if (++rate % 1000 < 3) {
821 err("too much data (%d) from %s", count,
822 from_user? "user": "kernel");
823 }
824 count = 512;
825 }
826
827 while (done < count) {
828 length = count - done;
829 if (length > POST_BSIZE)
830 length = POST_BSIZE;
831 if (length > port->bulk_out_size)
832 length = port->bulk_out_size;
833
834 rc = serial_post_one(port, from_user, gfp, buf + done, length);
835 if (rc <= 0) {
836 if (done != 0)
837 return done;
838 return rc;
839 }
840 done += rc;
841 }
842
843 return done;
844 }
845
serial_post_one(struct usb_serial_port * port,int from_user,int gfp,const unsigned char * buf,int count)846 static int serial_post_one(struct usb_serial_port *port, int from_user,
847 int gfp, const unsigned char *buf, int count)
848 {
849 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
850 struct usb_serial_post_job *job;
851 unsigned long flags;
852
853 if (!serial)
854 return -ENODEV;
855
856 dbg("%s - port %d user %d count %d", __FUNCTION__, port->number, from_user, count);
857
858 job = kmalloc(sizeof(struct usb_serial_post_job), gfp);
859 if (job == NULL)
860 return -ENOMEM;
861
862 job->port = port;
863 if (count >= POST_BSIZE)
864 count = POST_BSIZE;
865 job->len = count;
866
867 if (from_user) {
868 if (copy_from_user(job->buff, buf, count)) {
869 kfree(job);
870 return -EFAULT;
871 }
872 } else {
873 memcpy(job->buff, buf, count);
874 }
875
876 spin_lock_irqsave(&post_lock, flags);
877 port->write_backlog += count;
878 list_add_tail(&job->link, &post_list);
879 serial->ref++; /* Protect the port->sem from kfree() */
880 schedule_task(&post_task);
881 spin_unlock_irqrestore(&post_lock, flags);
882
883 return count;
884 }
885
serial_write_room(struct tty_struct * tty)886 static int serial_write_room (struct tty_struct *tty)
887 {
888 struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
889 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
890 int retval = -EINVAL;
891
892 if (!serial)
893 return -ENODEV;
894
895 if (in_interrupt()) {
896 retval = 0;
897 if (!port->write_busy && port->write_backlog == 0)
898 retval = port->bulk_out_size;
899 dbg("%s - returns %d", __FUNCTION__, retval);
900 return retval;
901 }
902
903 down (&port->sem);
904
905 dbg("%s - port %d", __FUNCTION__, port->number);
906
907 if (!port->open_count) {
908 dbg("%s - port not open", __FUNCTION__);
909 goto exit;
910 }
911
912 /* pass on to the driver specific version of this function if it is available */
913 if (serial->type->write_room)
914 retval = serial->type->write_room(port);
915 else
916 retval = generic_write_room(port);
917
918 exit:
919 up (&port->sem);
920 return retval;
921 }
922
serial_chars_in_buffer(struct tty_struct * tty)923 static int serial_chars_in_buffer (struct tty_struct *tty)
924 {
925 struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
926 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
927 int retval = -EINVAL;
928
929 if (!serial)
930 return -ENODEV;
931
932 down (&port->sem);
933
934 if (!port->open_count) {
935 dbg("%s - port %d: not open", __FUNCTION__, port->number);
936 goto exit;
937 }
938
939 /* pass on to the driver specific version of this function if it is available */
940 if (serial->type->chars_in_buffer)
941 retval = serial->type->chars_in_buffer(port);
942 else
943 retval = generic_chars_in_buffer(port);
944
945 exit:
946 up (&port->sem);
947 return retval;
948 }
949
serial_throttle(struct tty_struct * tty)950 static void serial_throttle (struct tty_struct * tty)
951 {
952 struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
953 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
954
955 if (!serial)
956 return;
957
958 down (&port->sem);
959
960 dbg("%s - port %d", __FUNCTION__, port->number);
961
962 if (!port->open_count) {
963 dbg ("%s - port not open", __FUNCTION__);
964 goto exit;
965 }
966
967 /* pass on to the driver specific version of this function */
968 if (serial->type->throttle)
969 serial->type->throttle(port);
970
971 exit:
972 up (&port->sem);
973 }
974
serial_unthrottle(struct tty_struct * tty)975 static void serial_unthrottle (struct tty_struct * tty)
976 {
977 struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
978 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
979
980 if (!serial)
981 return;
982
983 down (&port->sem);
984
985 dbg("%s - port %d", __FUNCTION__, port->number);
986
987 if (!port->open_count) {
988 dbg("%s - port not open", __FUNCTION__);
989 goto exit;
990 }
991
992 /* pass on to the driver specific version of this function */
993 if (serial->type->unthrottle)
994 serial->type->unthrottle(port);
995
996 exit:
997 up (&port->sem);
998 }
999
serial_ioctl(struct tty_struct * tty,struct file * file,unsigned int cmd,unsigned long arg)1000 static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg)
1001 {
1002 struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
1003 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
1004 int retval = -ENODEV;
1005
1006 if (!serial)
1007 return -ENODEV;
1008
1009 down (&port->sem);
1010
1011 dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd);
1012
1013 if (!port->open_count) {
1014 dbg ("%s - port not open", __FUNCTION__);
1015 goto exit;
1016 }
1017
1018 /* pass on to the driver specific version of this function if it is available */
1019 if (serial->type->ioctl)
1020 retval = serial->type->ioctl(port, file, cmd, arg);
1021 else
1022 retval = -ENOIOCTLCMD;
1023
1024 exit:
1025 up (&port->sem);
1026 return retval;
1027 }
1028
serial_set_termios(struct tty_struct * tty,struct termios * old)1029 static void serial_set_termios (struct tty_struct *tty, struct termios * old)
1030 {
1031 struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
1032 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
1033
1034 if (!serial)
1035 return;
1036
1037 down (&port->sem);
1038
1039 dbg("%s - port %d", __FUNCTION__, port->number);
1040
1041 if (!port->open_count) {
1042 dbg("%s - port not open", __FUNCTION__);
1043 goto exit;
1044 }
1045
1046 /* pass on to the driver specific version of this function if it is available */
1047 if (serial->type->set_termios)
1048 serial->type->set_termios(port, old);
1049
1050 exit:
1051 up (&port->sem);
1052 }
1053
serial_break(struct tty_struct * tty,int break_state)1054 static void serial_break (struct tty_struct *tty, int break_state)
1055 {
1056 struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
1057 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
1058
1059 if (!serial)
1060 return;
1061
1062 down (&port->sem);
1063
1064 dbg("%s - port %d", __FUNCTION__, port->number);
1065
1066 if (!port->open_count) {
1067 dbg("%s - port not open", __FUNCTION__);
1068 goto exit;
1069 }
1070
1071 /* pass on to the driver specific version of this function if it is available */
1072 if (serial->type->break_ctl)
1073 serial->type->break_ctl(port, break_state);
1074
1075 exit:
1076 up (&port->sem);
1077 }
1078
serial_shutdown(struct usb_serial * serial)1079 static void serial_shutdown (struct usb_serial *serial)
1080 {
1081 dbg ("%s", __FUNCTION__);
1082
1083 if (serial->type->shutdown)
1084 serial->type->shutdown(serial);
1085 else
1086 generic_shutdown(serial);
1087 }
1088
serial_read_proc(char * page,char ** start,off_t off,int count,int * eof,void * data)1089 static int serial_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data)
1090 {
1091 struct usb_serial *serial;
1092 int length = 0;
1093 int i;
1094 off_t begin = 0;
1095 char tmp[40];
1096
1097 dbg("%s", __FUNCTION__);
1098 length += sprintf (page, "usbserinfo:1.0 driver:%s\n", DRIVER_VERSION);
1099 for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
1100 serial = get_serial_by_minor(i);
1101 if (serial == NULL)
1102 continue;
1103
1104 length += sprintf (page+length, "%d:", i);
1105 if (serial->type->owner)
1106 length += sprintf (page+length, " module:%s", serial->type->owner->name);
1107 length += sprintf (page+length, " name:\"%s\"", serial->type->name);
1108 length += sprintf (page+length, " vendor:%04x product:%04x", serial->vendor, serial->product);
1109 length += sprintf (page+length, " num_ports:%d", serial->num_ports);
1110 length += sprintf (page+length, " port:%d", i - serial->minor + 1);
1111
1112 usb_make_path(serial->dev, tmp, sizeof(tmp));
1113 length += sprintf (page+length, " path:%s", tmp);
1114
1115 length += sprintf (page+length, "\n");
1116 if ((length + begin) > (off + count))
1117 goto done;
1118 if ((length + begin) < off) {
1119 begin += length;
1120 length = 0;
1121 }
1122 }
1123 *eof = 1;
1124 done:
1125 if (off >= (length + begin))
1126 return 0;
1127 *start = page + (off-begin);
1128 return ((count < begin+length-off) ? count : begin+length-off);
1129 }
1130
1131 /*****************************************************************************
1132 * generic devices specific driver functions
1133 *****************************************************************************/
generic_open(struct usb_serial_port * port,struct file * filp)1134 static int generic_open (struct usb_serial_port *port, struct file *filp)
1135 {
1136 struct usb_serial *serial = port->serial;
1137 int result = 0;
1138
1139 if (port_paranoia_check (port, __FUNCTION__))
1140 return -ENODEV;
1141
1142 dbg("%s - port %d", __FUNCTION__, port->number);
1143
1144 /* force low_latency on so that our tty_push actually forces the data through,
1145 otherwise it is scheduled, and with high data rates (like with OHCI) data
1146 can get lost. */
1147 if (port->tty)
1148 port->tty->low_latency = 1;
1149
1150 /* if we have a bulk interrupt, start reading from it */
1151 if (serial->num_bulk_in) {
1152 /* Start reading from the device */
1153 usb_fill_bulk_urb (port->read_urb, serial->dev,
1154 usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
1155 port->read_urb->transfer_buffer,
1156 port->read_urb->transfer_buffer_length,
1157 ((serial->type->read_bulk_callback) ?
1158 serial->type->read_bulk_callback :
1159 generic_read_bulk_callback),
1160 port);
1161 result = usb_submit_urb(port->read_urb);
1162 if (result)
1163 err("%s - failed resubmitting read urb, error %d", __FUNCTION__, result);
1164 }
1165
1166 return result;
1167 }
1168
generic_cleanup(struct usb_serial_port * port)1169 static void generic_cleanup (struct usb_serial_port *port)
1170 {
1171 struct usb_serial *serial = port->serial;
1172
1173 dbg("%s - port %d", __FUNCTION__, port->number);
1174
1175 if (serial->dev) {
1176 /* shutdown any bulk reads that might be going on */
1177 if (serial->num_bulk_out)
1178 usb_unlink_urb (port->write_urb);
1179 if (serial->num_bulk_in)
1180 usb_unlink_urb (port->read_urb);
1181 }
1182 }
1183
generic_close(struct usb_serial_port * port,struct file * filp)1184 static void generic_close (struct usb_serial_port *port, struct file * filp)
1185 {
1186 dbg("%s - port %d", __FUNCTION__, port->number);
1187 generic_cleanup (port);
1188 }
1189
generic_write(struct usb_serial_port * port,int from_user,const unsigned char * buf,int count)1190 static int generic_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count)
1191 {
1192 struct usb_serial *serial = port->serial;
1193 int result;
1194 unsigned long flags;
1195
1196 if (count == 0) {
1197 dbg("%s - write request of 0 bytes", __FUNCTION__);
1198 return (0);
1199 }
1200 if (count < 0) {
1201 err("%s - port %d: write request of %d bytes", __FUNCTION__,
1202 port->number, count);
1203 return (0);
1204 }
1205
1206 /* only do something if we have a bulk out endpoint */
1207 if (serial->num_bulk_out) {
1208 if (port->write_busy) {
1209 /* Happens when two threads run port_helper. Watch. */
1210 info("%s - already writing", __FUNCTION__);
1211 return (0);
1212 }
1213
1214 count = (count > port->bulk_out_size) ? port->bulk_out_size : count;
1215
1216 if (from_user) {
1217 if (copy_from_user(port->write_urb->transfer_buffer, buf, count))
1218 return -EFAULT;
1219 } else {
1220 memcpy (port->write_urb->transfer_buffer, buf, count);
1221 }
1222 dbg("%s - port %d [%d]", __FUNCTION__, port->number, count);
1223
1224 /* set up our urb */
1225 usb_fill_bulk_urb (port->write_urb, serial->dev,
1226 usb_sndbulkpipe (serial->dev,
1227 port->bulk_out_endpointAddress),
1228 port->write_urb->transfer_buffer, count,
1229 ((serial->type->write_bulk_callback) ?
1230 serial->type->write_bulk_callback :
1231 generic_write_bulk_callback), port);
1232
1233 /* send the data out the bulk port */
1234 port->write_busy = 1;
1235 result = usb_submit_urb(port->write_urb);
1236 if (result) {
1237 err("%s - port %d: failed submitting write urb (%d)",
1238 __FUNCTION__, port->number, result);
1239 port->write_busy = 0;
1240 spin_lock_irqsave(&post_lock, flags);
1241 if (port->write_backlog != 0)
1242 schedule_task(&post_task);
1243 spin_unlock_irqrestore(&post_lock, flags);
1244
1245 } else
1246 result = count;
1247
1248 return result;
1249 }
1250
1251 /* no bulk out, so return 0 bytes written */
1252 return (0);
1253 }
1254
generic_write_room(struct usb_serial_port * port)1255 static int generic_write_room (struct usb_serial_port *port)
1256 {
1257 struct usb_serial *serial = port->serial;
1258 int room = 0;
1259
1260 if (serial->num_bulk_out) {
1261 if (!port->write_busy && port->write_backlog == 0)
1262 room = port->bulk_out_size;
1263 }
1264
1265 dbg("%s - port %d, returns %d", __FUNCTION__, port->number, room);
1266 return (room);
1267 }
1268
generic_chars_in_buffer(struct usb_serial_port * port)1269 static int generic_chars_in_buffer (struct usb_serial_port *port)
1270 {
1271 struct usb_serial *serial = port->serial;
1272 int chars = 0;
1273
1274 dbg("%s - port %d", __FUNCTION__, port->number);
1275
1276 if (serial->num_bulk_out) {
1277 if (port->write_busy)
1278 chars += port->write_urb->transfer_buffer_length;
1279 chars += port->write_backlog; /* spin_lock... Baah */
1280 }
1281
1282 dbg("%s - returns %d", __FUNCTION__, chars);
1283 return (chars);
1284 }
1285
generic_read_bulk_callback(struct urb * urb)1286 static void generic_read_bulk_callback (struct urb *urb)
1287 {
1288 struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
1289 struct usb_serial *serial = port->serial;
1290 struct tty_struct *tty;
1291 unsigned char *data = urb->transfer_buffer;
1292 int i;
1293 int result;
1294
1295 if (!serial) {
1296 err("%s - null serial pointer, exiting", __FUNCTION__);
1297 return;
1298 }
1299
1300 if (urb->status) {
1301 dbg("%s - nonzero read bulk status received: %d, pipe 0x%x",
1302 __FUNCTION__, urb->status, urb->pipe);
1303 return;
1304 }
1305
1306 dbg("%s - port %d", __FUNCTION__, port->number);
1307
1308 usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data);
1309
1310 tty = port->tty;
1311 if (tty && urb->actual_length) {
1312 for (i = 0; i < urb->actual_length ; ++i) {
1313 /* if we insert more than TTY_FLIPBUF_SIZE characters, we drop them. */
1314 if(tty->flip.count >= TTY_FLIPBUF_SIZE) {
1315 tty_flip_buffer_push(tty);
1316 }
1317 /* this doesn't actually push the data through unless tty->low_latency is set */
1318 tty_insert_flip_char(tty, data[i], 0);
1319 }
1320 tty_flip_buffer_push(tty);
1321 }
1322
1323 if (serial->dev == NULL)
1324 return;
1325
1326 /* Continue trying to always read */
1327 usb_fill_bulk_urb (port->read_urb, serial->dev,
1328 usb_rcvbulkpipe (serial->dev,
1329 port->bulk_in_endpointAddress),
1330 port->read_urb->transfer_buffer,
1331 port->read_urb->transfer_buffer_length,
1332 ((serial->type->read_bulk_callback) ?
1333 serial->type->read_bulk_callback :
1334 generic_read_bulk_callback), port);
1335 result = usb_submit_urb(port->read_urb);
1336 if (result)
1337 err("%s - failed resubmitting read urb, error %d", __FUNCTION__, result);
1338 }
1339
generic_write_bulk_callback(struct urb * urb)1340 static void generic_write_bulk_callback (struct urb *urb)
1341 {
1342 struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
1343
1344 dbg("%s - port %d", __FUNCTION__, port->number);
1345
1346 port->write_busy = 0;
1347 wmb();
1348
1349 if (urb->status) {
1350 dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
1351 }
1352
1353 queue_task(&port->tqueue, &tq_immediate);
1354 mark_bh(IMMEDIATE_BH);
1355
1356 return;
1357 }
1358
generic_shutdown(struct usb_serial * serial)1359 static void generic_shutdown (struct usb_serial *serial)
1360 {
1361 int i;
1362
1363 dbg("%s", __FUNCTION__);
1364
1365 /* stop reads and writes on all ports */
1366 for (i=0; i < serial->num_ports; ++i) {
1367 generic_cleanup (&serial->port[i]);
1368 }
1369 }
1370
port_softint(void * private)1371 static void port_softint(void *private)
1372 {
1373 struct usb_serial_port *port = (struct usb_serial_port *)private;
1374 struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
1375 struct tty_struct *tty;
1376 unsigned long flags;
1377 struct tty_ldisc *ld;
1378
1379 dbg("%s - port %d", __FUNCTION__, port->number);
1380
1381 if (!serial)
1382 return;
1383
1384 spin_lock_irqsave(&post_lock, flags);
1385 if (port->write_backlog != 0)
1386 schedule_task(&post_task);
1387 spin_unlock_irqrestore(&post_lock, flags);
1388
1389 tty = port->tty;
1390 if (!tty)
1391 return;
1392
1393 if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP))) {
1394 ld = tty_ldisc_ref(tty);
1395 if(ld) {
1396 if(ld->write_wakeup) {
1397 ld->write_wakeup(tty);
1398 dbg("%s - write wakeup call.", __FUNCTION__);
1399 }
1400 tty_ldisc_deref(ld);
1401 }
1402 }
1403
1404 wake_up_interruptible(&tty->write_wait);
1405 }
1406
1407
usb_serial_probe(struct usb_device * dev,unsigned int ifnum,const struct usb_device_id * id)1408 static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum,
1409 const struct usb_device_id *id)
1410 {
1411 struct usb_serial *serial = NULL;
1412 struct usb_serial_port *port;
1413 struct usb_interface *interface;
1414 struct usb_interface_descriptor *iface_desc;
1415 struct usb_endpoint_descriptor *endpoint;
1416 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
1417 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
1418 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
1419 struct usb_serial_device_type *type = NULL;
1420 struct list_head *tmp;
1421 int found;
1422 int minor;
1423 int buffer_size;
1424 int i;
1425 int num_interrupt_in = 0;
1426 int num_bulk_in = 0;
1427 int num_bulk_out = 0;
1428 int num_ports;
1429 int max_endpoints;
1430 const struct usb_device_id *id_pattern = NULL;
1431 unsigned long flags;
1432
1433 /* loop through our list of known serial converters, and see if this
1434 device matches. */
1435 found = 0;
1436 interface = &dev->actconfig->interface[ifnum];
1437 list_for_each (tmp, &usb_serial_driver_list) {
1438 type = list_entry(tmp, struct usb_serial_device_type, driver_list);
1439 id_pattern = usb_match_id(dev, interface, type->id_table);
1440 if (id_pattern != NULL) {
1441 dbg("descriptor matches");
1442 found = 1;
1443 break;
1444 }
1445 }
1446 if (!found) {
1447 /* no match */
1448 dbg("none matched");
1449 return(NULL);
1450 }
1451
1452 /* descriptor matches, let's find the endpoints needed */
1453 /* check out the endpoints */
1454 iface_desc = &interface->altsetting[0];
1455 for (i = 0; i < iface_desc->bNumEndpoints; ++i) {
1456 endpoint = &iface_desc->endpoint[i];
1457
1458 if ((endpoint->bEndpointAddress & 0x80) &&
1459 ((endpoint->bmAttributes & 3) == 0x02)) {
1460 /* we found a bulk in endpoint */
1461 dbg("found bulk in");
1462 bulk_in_endpoint[num_bulk_in] = endpoint;
1463 ++num_bulk_in;
1464 }
1465
1466 if (((endpoint->bEndpointAddress & 0x80) == 0x00) &&
1467 ((endpoint->bmAttributes & 3) == 0x02)) {
1468 /* we found a bulk out endpoint */
1469 dbg("found bulk out");
1470 bulk_out_endpoint[num_bulk_out] = endpoint;
1471 ++num_bulk_out;
1472 }
1473
1474 if ((endpoint->bEndpointAddress & 0x80) &&
1475 ((endpoint->bmAttributes & 3) == 0x03)) {
1476 /* we found a interrupt in endpoint */
1477 dbg("found interrupt in");
1478 interrupt_in_endpoint[num_interrupt_in] = endpoint;
1479 ++num_interrupt_in;
1480 }
1481 }
1482
1483 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
1484 /* BEGIN HORRIBLE HACK FOR PL2303 */
1485 /* this is needed due to the looney way its endpoints are set up */
1486 if (((dev->descriptor.idVendor == PL2303_VENDOR_ID) &&
1487 (dev->descriptor.idProduct == PL2303_PRODUCT_ID)) ||
1488 ((dev->descriptor.idVendor == ATEN_VENDOR_ID) &&
1489 (dev->descriptor.idProduct == ATEN_PRODUCT_ID))) {
1490 if (ifnum == 1) {
1491 /* check out the endpoints of the other interface*/
1492 struct usb_interface *other_iface;
1493
1494 other_iface = &dev->actconfig->interface[ifnum ^ 1];
1495 iface_desc = &other_iface->altsetting[0];
1496 for (i = 0; i < iface_desc->bNumEndpoints; ++i) {
1497 endpoint = &iface_desc->endpoint[i];
1498 if ((endpoint->bEndpointAddress & 0x80) &&
1499 ((endpoint->bmAttributes & 3) == 0x03)) {
1500 /* we found a interrupt in endpoint */
1501 dbg("found interrupt in for Prolific device on separate interface");
1502 interrupt_in_endpoint[num_interrupt_in] = endpoint;
1503 ++num_interrupt_in;
1504 }
1505 }
1506 }
1507
1508 /* Now make sure the PL-2303 is configured correctly.
1509 * If not, give up now and hope this hack will work
1510 * properly during a later invocation of usb_serial_probe
1511 */
1512 if (num_bulk_in == 0 || num_bulk_out == 0) {
1513 info("PL-2303 hack: descriptors matched but endpoints did not");
1514 return NULL;
1515 }
1516 }
1517 /* END HORRIBLE HACK FOR PL2303 */
1518 #endif
1519
1520 /* found all that we need */
1521 info("%s converter detected", type->name);
1522
1523 #ifdef CONFIG_USB_SERIAL_GENERIC
1524 if (type == &generic_device) {
1525 num_ports = num_bulk_out;
1526 if (num_ports == 0) {
1527 err("Generic device with no bulk out, not allowed.");
1528 return NULL;
1529 }
1530 } else
1531 #endif
1532 num_ports = type->num_ports;
1533
1534 serial = get_free_serial (num_ports, &minor);
1535 if (serial == NULL) {
1536 err("No more free serial devices");
1537 return NULL;
1538 }
1539
1540 serial->dev = dev;
1541 serial->type = type;
1542 serial->interface = interface;
1543 serial->minor = minor;
1544 serial->num_ports = num_ports;
1545 serial->num_bulk_in = num_bulk_in;
1546 serial->num_bulk_out = num_bulk_out;
1547 serial->num_interrupt_in = num_interrupt_in;
1548 serial->vendor = dev->descriptor.idVendor;
1549 serial->product = dev->descriptor.idProduct;
1550
1551 /* set up the endpoint information */
1552 for (i = 0; i < num_bulk_in; ++i) {
1553 endpoint = bulk_in_endpoint[i];
1554 port = &serial->port[i];
1555 port->read_urb = usb_alloc_urb (0);
1556 if (!port->read_urb) {
1557 err("No free urbs available");
1558 goto probe_error;
1559 }
1560 buffer_size = endpoint->wMaxPacketSize;
1561 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
1562 port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
1563 if (!port->bulk_in_buffer) {
1564 err("Couldn't allocate bulk_in_buffer");
1565 goto probe_error;
1566 }
1567 usb_fill_bulk_urb (port->read_urb, dev,
1568 usb_rcvbulkpipe (dev,
1569 endpoint->bEndpointAddress),
1570 port->bulk_in_buffer, buffer_size,
1571 ((serial->type->read_bulk_callback) ?
1572 serial->type->read_bulk_callback :
1573 generic_read_bulk_callback),
1574 port);
1575 }
1576
1577 for (i = 0; i < num_bulk_out; ++i) {
1578 endpoint = bulk_out_endpoint[i];
1579 port = &serial->port[i];
1580 port->write_urb = usb_alloc_urb(0);
1581 if (!port->write_urb) {
1582 err("No free urbs available");
1583 goto probe_error;
1584 }
1585 buffer_size = endpoint->wMaxPacketSize;
1586 port->bulk_out_size = buffer_size;
1587 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
1588 port->bulk_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
1589 if (!port->bulk_out_buffer) {
1590 err("Couldn't allocate bulk_out_buffer");
1591 goto probe_error;
1592 }
1593 usb_fill_bulk_urb (port->write_urb, dev,
1594 usb_sndbulkpipe (dev,
1595 endpoint->bEndpointAddress),
1596 port->bulk_out_buffer, buffer_size,
1597 ((serial->type->write_bulk_callback) ?
1598 serial->type->write_bulk_callback :
1599 generic_write_bulk_callback),
1600 port);
1601 }
1602
1603 for (i = 0; i < num_interrupt_in; ++i) {
1604 endpoint = interrupt_in_endpoint[i];
1605 port = &serial->port[i];
1606 port->interrupt_in_urb = usb_alloc_urb(0);
1607 if (!port->interrupt_in_urb) {
1608 err("No free urbs available");
1609 goto probe_error;
1610 }
1611 buffer_size = endpoint->wMaxPacketSize;
1612 port->interrupt_in_endpointAddress = endpoint->bEndpointAddress;
1613 port->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
1614 if (!port->interrupt_in_buffer) {
1615 err("Couldn't allocate interrupt_in_buffer");
1616 goto probe_error;
1617 }
1618 usb_fill_int_urb (port->interrupt_in_urb, dev,
1619 usb_rcvintpipe (dev,
1620 endpoint->bEndpointAddress),
1621 port->interrupt_in_buffer, buffer_size,
1622 serial->type->read_int_callback, port,
1623 endpoint->bInterval);
1624 }
1625
1626 /* initialize some parts of the port structures */
1627 /* we don't use num_ports here cauz some devices have more endpoint pairs than ports */
1628 max_endpoints = max(num_bulk_in, num_bulk_out);
1629 max_endpoints = max(max_endpoints, num_interrupt_in);
1630 max_endpoints = max(max_endpoints, (int)serial->num_ports);
1631 dbg("%s - setting up %d port structures for this device", __FUNCTION__, max_endpoints);
1632 for (i = 0; i < max_endpoints; ++i) {
1633 port = &serial->port[i];
1634 port->number = i + serial->minor;
1635 port->serial = serial;
1636 port->magic = USB_SERIAL_PORT_MAGIC;
1637 port->tqueue.routine = port_softint;
1638 port->tqueue.data = port;
1639 init_MUTEX (&port->sem);
1640 }
1641
1642 spin_lock_irqsave(&post_lock, flags);
1643 serial->ref = 1;
1644 spin_unlock_irqrestore(&post_lock, flags);
1645
1646 /* if this device type has a startup function, call it */
1647 if (type->startup) {
1648 i = type->startup (serial);
1649 if (i < 0)
1650 goto startup_error;
1651 if (i > 0)
1652 return serial;
1653 }
1654
1655 /* initialize the devfs nodes for this device and let the user know what ports we are bound to */
1656 for (i = 0; i < serial->num_ports; ++i) {
1657 tty_register_devfs (&serial_tty_driver, 0, serial->port[i].number);
1658 info("%s converter now attached to ttyUSB%d (or usb/tts/%d for devfs)",
1659 type->name, serial->port[i].number, serial->port[i].number);
1660 }
1661
1662 return serial; /* success */
1663
1664
1665 startup_error:
1666 spin_lock_irqsave(&post_lock, flags);
1667 if (serial->ref != 1) {
1668 err("bug in component startup: ref %d\n", serial->ref);
1669 }
1670 spin_unlock_irqrestore(&post_lock, flags);
1671 probe_error:
1672 for (i = 0; i < num_bulk_in; ++i) {
1673 port = &serial->port[i];
1674 if (port->read_urb)
1675 usb_free_urb (port->read_urb);
1676 if (port->bulk_in_buffer)
1677 kfree (port->bulk_in_buffer);
1678 }
1679 for (i = 0; i < num_bulk_out; ++i) {
1680 port = &serial->port[i];
1681 if (port->write_urb)
1682 usb_free_urb (port->write_urb);
1683 if (port->bulk_out_buffer)
1684 kfree (port->bulk_out_buffer);
1685 }
1686 for (i = 0; i < num_interrupt_in; ++i) {
1687 port = &serial->port[i];
1688 if (port->interrupt_in_urb)
1689 usb_free_urb (port->interrupt_in_urb);
1690 if (port->interrupt_in_buffer)
1691 kfree (port->interrupt_in_buffer);
1692 }
1693
1694 /* return the minor range that this device had */
1695 return_serial (serial);
1696
1697 /* free up any memory that we allocated */
1698 kfree (serial);
1699 return NULL;
1700 }
1701
usb_serial_disconnect(struct usb_device * dev,void * ptr)1702 static void usb_serial_disconnect(struct usb_device *dev, void *ptr)
1703 {
1704 struct usb_serial *serial = (struct usb_serial *) ptr;
1705 struct usb_serial_port *port;
1706 int i;
1707
1708 dbg ("%s", __FUNCTION__);
1709 if (serial) {
1710 for (i = 0; i < serial->num_ports; ++i) {
1711 port = &serial->port[i];
1712 down (&port->sem);
1713 if (port->tty != NULL)
1714 tty_hangup(port->tty);
1715 up (&port->sem);
1716 }
1717 serial_shutdown (serial);
1718
1719 /* fail all future close/read/write/ioctl/etc calls */
1720 serial->dev = NULL;
1721 wmb();
1722
1723 for (i = 0; i < serial->num_bulk_in; ++i) {
1724 port = &serial->port[i];
1725 if (port->read_urb) {
1726 usb_unlink_urb (port->read_urb);
1727 usb_free_urb (port->read_urb);
1728 }
1729 if (port->bulk_in_buffer)
1730 kfree (port->bulk_in_buffer);
1731 }
1732 for (i = 0; i < serial->num_bulk_out; ++i) {
1733 port = &serial->port[i];
1734 if (port->write_urb) {
1735 usb_unlink_urb (port->write_urb);
1736 usb_free_urb (port->write_urb);
1737 }
1738 if (port->bulk_out_buffer)
1739 kfree (port->bulk_out_buffer);
1740 }
1741 for (i = 0; i < serial->num_interrupt_in; ++i) {
1742 port = &serial->port[i];
1743 if (port->interrupt_in_urb) {
1744 usb_unlink_urb (port->interrupt_in_urb);
1745 usb_free_urb (port->interrupt_in_urb);
1746 }
1747 if (port->interrupt_in_buffer)
1748 kfree (port->interrupt_in_buffer);
1749 }
1750
1751 for (i = 0; i < serial->num_ports; ++i) {
1752 tty_unregister_devfs (&serial_tty_driver, serial->port[i].number);
1753 info("%s converter now disconnected from ttyUSB%d", serial->type->name, serial->port[i].number);
1754 }
1755
1756 /* return the minor range that this device had */
1757 return_serial (serial);
1758
1759 /* free up any memory that we allocated */
1760 serial_put (serial);
1761
1762 } else {
1763 info("device disconnected");
1764 }
1765
1766 }
1767
1768
1769 static struct tty_driver serial_tty_driver = {
1770 .magic = TTY_DRIVER_MAGIC,
1771 .driver_name = "usb-serial",
1772 #ifndef CONFIG_DEVFS_FS
1773 .name = "ttyUSB",
1774 #else
1775 .name = "usb/tts/%d",
1776 #endif
1777 .major = SERIAL_TTY_MAJOR,
1778 .minor_start = 0,
1779 .num = SERIAL_TTY_MINORS,
1780 .type = TTY_DRIVER_TYPE_SERIAL,
1781 .subtype = SERIAL_TYPE_NORMAL,
1782 .flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS,
1783
1784 .refcount = &serial_refcount,
1785 .table = serial_tty,
1786 .termios = serial_termios,
1787 .termios_locked = serial_termios_locked,
1788
1789 .open = serial_open,
1790 .close = serial_close,
1791 .write = serial_write,
1792 .write_room = serial_write_room,
1793 .ioctl = serial_ioctl,
1794 .set_termios = serial_set_termios,
1795 .throttle = serial_throttle,
1796 .unthrottle = serial_unthrottle,
1797 .break_ctl = serial_break,
1798 .chars_in_buffer = serial_chars_in_buffer,
1799 .read_proc = serial_read_proc,
1800 };
1801
1802
usb_serial_init(void)1803 static int __init usb_serial_init(void)
1804 {
1805 int i;
1806 int result;
1807
1808 /* Initalize our global data */
1809 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
1810 serial_table[i] = NULL;
1811 }
1812 post_task.routine = post_helper;
1813
1814 /* register the tty driver */
1815 serial_tty_driver.init_termios = tty_std_termios;
1816 serial_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1817 if (tty_register_driver (&serial_tty_driver)) {
1818 err("%s - failed to register tty driver", __FUNCTION__);
1819 return -1;
1820 }
1821
1822 /* register the USB driver */
1823 result = usb_register(&usb_serial_driver);
1824 if (result < 0) {
1825 tty_unregister_driver(&serial_tty_driver);
1826 err("usb_register failed for the usb-serial driver. Error number %d", result);
1827 return -1;
1828 }
1829
1830 #ifdef CONFIG_USB_SERIAL_GENERIC
1831 generic_device_ids[0].idVendor = vendor;
1832 generic_device_ids[0].idProduct = product;
1833 generic_device_ids[0].match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT;
1834 /* register our generic driver with ourselves */
1835 usb_serial_register (&generic_device);
1836 #endif
1837
1838 info(DRIVER_DESC " " DRIVER_VERSION);
1839
1840 return 0;
1841 }
1842
1843
usb_serial_exit(void)1844 static void __exit usb_serial_exit(void)
1845 {
1846
1847 #ifdef CONFIG_USB_SERIAL_GENERIC
1848 /* remove our generic driver */
1849 usb_serial_deregister (&generic_device);
1850 #endif
1851
1852 usb_deregister(&usb_serial_driver);
1853 tty_unregister_driver(&serial_tty_driver);
1854
1855 while (!list_empty(&usb_serial_driver_list)) {
1856 err("%s - module is in use, hanging...", __FUNCTION__);
1857 msleep(5000);
1858 }
1859 }
1860
1861
1862 module_init(usb_serial_init);
1863 module_exit(usb_serial_exit);
1864
1865
usb_serial_register(struct usb_serial_device_type * new_device)1866 int usb_serial_register(struct usb_serial_device_type *new_device)
1867 {
1868 /* Add this device to our list of devices */
1869 list_add(&new_device->driver_list, &usb_serial_driver_list);
1870
1871 info ("USB Serial support registered for %s", new_device->name);
1872
1873 usb_scan_devices();
1874
1875 return 0;
1876 }
1877
1878
usb_serial_deregister(struct usb_serial_device_type * device)1879 void usb_serial_deregister(struct usb_serial_device_type *device)
1880 {
1881 struct usb_serial *serial;
1882 int i;
1883
1884 info("USB Serial deregistering driver %s", device->name);
1885
1886 /* clear out the serial_table if the device is attached to a port */
1887 for(i = 0; i < SERIAL_TTY_MINORS; ++i) {
1888 serial = serial_table[i];
1889 if ((serial != NULL) && (serial->type == device)) {
1890 usb_driver_release_interface (&usb_serial_driver, serial->interface);
1891 usb_serial_disconnect (NULL, serial);
1892 }
1893 }
1894
1895 list_del(&device->driver_list);
1896 }
1897
1898
1899
1900 /* If the usb-serial core is built into the core, the usb-serial drivers
1901 need these symbols to load properly as modules. */
1902 EXPORT_SYMBOL(usb_serial_register);
1903 EXPORT_SYMBOL(usb_serial_deregister);
1904 #ifdef USES_EZUSB_FUNCTIONS
1905 EXPORT_SYMBOL(ezusb_writememory);
1906 EXPORT_SYMBOL(ezusb_set_reset);
1907 #endif
1908 EXPORT_SYMBOL(usb_serial_get_serial);
1909
1910 /* Module information */
1911 MODULE_AUTHOR( DRIVER_AUTHOR );
1912 MODULE_DESCRIPTION( DRIVER_DESC );
1913 MODULE_LICENSE("GPL");
1914
1915 MODULE_PARM(debug, "i");
1916 MODULE_PARM_DESC(debug, "Debug enabled or not");
1917
1918 #ifdef CONFIG_USB_SERIAL_GENERIC
1919 MODULE_PARM(vendor, "h");
1920 MODULE_PARM_DESC(vendor, "User specified USB idVendor");
1921
1922 MODULE_PARM(product, "h");
1923 MODULE_PARM_DESC(product, "User specified USB idProduct");
1924 #endif
1925