Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / drivers / usb / serial / keyspan.c
1 /*
2   Keyspan USB to Serial Converter driver
3
4   (C) Copyright (C) 2000-2001   Hugh Blemings <hugh@blemings.org>
5   (C) Copyright (C) 2002        Greg Kroah-Hartman <greg@kroah.com>
6
7   This program is free software; you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation; either version 2 of the License, or
10   (at your option) any later version.
11
12   See http://misc.nu/hugh/keyspan.html for more information.
13
14   Code in this driver inspired by and in a number of places taken
15   from Brian Warner's original Keyspan-PDA driver.
16
17   This driver has been put together with the support of Innosys, Inc.
18   and Keyspan, Inc the manufacturers of the Keyspan USB-serial products.
19   Thanks Guys :)
20
21   Thanks to Paulus for miscellaneous tidy ups, some largish chunks
22   of much nicer and/or completely new code and (perhaps most uniquely)
23   having the patience to sit down and explain why and where he'd changed
24   stuff.
25
26   Tip 'o the hat to IBM (and previously Linuxcare :) for supporting
27   staff in their work on open source projects.
28
29   Change History
30
31     2003sep04   LPM (Keyspan) add support for new single port product USA19HS.
32                                 Improve setup message handling for all devices.
33
34     Wed Feb 19 22:00:00 PST 2003 (Jeffrey S. Laing <keyspan@jsl.com>)
35       Merged the current (1/31/03) Keyspan code with the current (2.4.21-pre4)
36       Linux source tree.  The Linux tree lacked support for the 49WLC and
37       others.  The Keyspan patches didn't work with the current kernel.
38
39     2003jan30   LPM     add support for the 49WLC and MPR
40
41     Wed Apr 25 12:00:00 PST 2002 (Keyspan)
42       Started with Hugh Blemings' code dated Jan 17, 2002.  All adapters
43       now supported (including QI and QW).  Modified port open, port
44       close, and send setup() logic to fix various data and endpoint
45       synchronization bugs and device LED status bugs.  Changed keyspan_
46       write_room() to accurately return transmit buffer availability.
47       Changed forwardingLength from 1 to 16 for all adapters.
48
49     Fri Oct 12 16:45:00 EST 2001
50       Preliminary USA-19QI and USA-28 support (both test OK for me, YMMV)
51
52     Wed Apr 25 12:00:00 PST 2002 (Keyspan)
53       Started with Hugh Blemings' code dated Jan 17, 2002.  All adapters
54       now supported (including QI and QW).  Modified port open, port
55       close, and send setup() logic to fix various data and endpoint
56       synchronization bugs and device LED status bugs.  Changed keyspan_
57       write_room() to accurately return transmit buffer availability.
58       Changed forwardingLength from 1 to 16 for all adapters.
59
60     Fri Oct 12 16:45:00 EST 2001
61       Preliminary USA-19QI and USA-28 support (both test OK for me, YMMV)
62
63     Mon Oct  8 14:29:00 EST 2001 hugh
64       Fixed bug that prevented mulitport devices operating correctly
65       if they weren't the first unit attached.
66
67     Sat Oct  6 12:31:21 EST 2001 hugh
68       Added support for USA-28XA and -28XB, misc cleanups, break support
69       for usa26 based models thanks to David Gibson.
70
71     Thu May 31 11:56:42 PDT 2001 gkh
72       switched from using spinlock to a semaphore
73
74     (04/08/2001) gb
75         Identify version on module load.
76
77     (11/01/2000) Adam J. Richter
78         usb_device_id table support.
79
80     Tue Oct 10 23:15:33 EST 2000 Hugh
81       Merged Paul's changes with my USA-49W mods.  Work in progress
82       still...
83
84     Wed Jul 19 14:00:42 EST 2000 gkh
85       Added module_init and module_exit functions to handle the fact that
86       this driver is a loadable module now.
87
88     Tue Jul 18 16:14:52 EST 2000 Hugh
89       Basic character input/output for USA-19 now mostly works,
90       fixed at 9600 baud for the moment.
91
92     Sat Jul  8 11:11:48 EST 2000 Hugh
93       First public release - nothing works except the firmware upload.
94       Tested on PPC and x86 architectures, seems to behave...
95 */
96
97
98 #include <linux/kernel.h>
99 #include <linux/jiffies.h>
100 #include <linux/errno.h>
101 #include <linux/init.h>
102 #include <linux/slab.h>
103 #include <linux/tty.h>
104 #include <linux/tty_driver.h>
105 #include <linux/tty_flip.h>
106 #include <linux/module.h>
107 #include <linux/spinlock.h>
108 #include <linux/firmware.h>
109 #include <linux/ihex.h>
110 #include <linux/uaccess.h>
111 #include <linux/usb.h>
112 #include <linux/usb/serial.h>
113 #include "keyspan.h"
114
115 static int debug;
116
117 /*
118  * Version Information
119  */
120 #define DRIVER_VERSION "v1.1.5"
121 #define DRIVER_AUTHOR "Hugh Blemings <hugh@misc.nu"
122 #define DRIVER_DESC "Keyspan USB to Serial Converter Driver"
123
124 #define INSTAT_BUFLEN   32
125 #define GLOCONT_BUFLEN  64
126 #define INDAT49W_BUFLEN 512
127
128         /* Per device and per port private data */
129 struct keyspan_serial_private {
130         const struct keyspan_device_details     *device_details;
131
132         struct urb      *instat_urb;
133         char            instat_buf[INSTAT_BUFLEN];
134
135         /* added to support 49wg, where data from all 4 ports comes in
136            on 1 EP and high-speed supported */
137         struct urb      *indat_urb;
138         char            indat_buf[INDAT49W_BUFLEN];
139
140         /* XXX this one probably will need a lock */
141         struct urb      *glocont_urb;
142         char            glocont_buf[GLOCONT_BUFLEN];
143         char            ctrl_buf[8];    /* for EP0 control message */
144 };
145
146 struct keyspan_port_private {
147         /* Keep track of which input & output endpoints to use */
148         int             in_flip;
149         int             out_flip;
150
151         /* Keep duplicate of device details in each port
152            structure as well - simplifies some of the
153            callback functions etc. */
154         const struct keyspan_device_details     *device_details;
155
156         /* Input endpoints and buffer for this port */
157         struct urb      *in_urbs[2];
158         char            in_buffer[2][64];
159         /* Output endpoints and buffer for this port */
160         struct urb      *out_urbs[2];
161         char            out_buffer[2][64];
162
163         /* Input ack endpoint */
164         struct urb      *inack_urb;
165         char            inack_buffer[1];
166
167         /* Output control endpoint */
168         struct urb      *outcont_urb;
169         char            outcont_buffer[64];
170
171         /* Settings for the port */
172         int             baud;
173         int             old_baud;
174         unsigned int    cflag;
175         unsigned int    old_cflag;
176         enum            {flow_none, flow_cts, flow_xon} flow_control;
177         int             rts_state;      /* Handshaking pins (outputs) */
178         int             dtr_state;
179         int             cts_state;      /* Handshaking pins (inputs) */
180         int             dsr_state;
181         int             dcd_state;
182         int             ri_state;
183         int             break_on;
184
185         unsigned long   tx_start_time[2];
186         int             resend_cont;    /* need to resend control packet */
187 };
188
189 /* Include Keyspan message headers.  All current Keyspan Adapters
190    make use of one of five message formats which are referred
191    to as USA-26, USA-28, USA-49, USA-90, USA-67 by Keyspan and
192    within this driver. */
193 #include "keyspan_usa26msg.h"
194 #include "keyspan_usa28msg.h"
195 #include "keyspan_usa49msg.h"
196 #include "keyspan_usa90msg.h"
197 #include "keyspan_usa67msg.h"
198
199
200 /* Functions used by new usb-serial code. */
201 static int __init keyspan_init(void)
202 {
203         int retval;
204         retval = usb_serial_register(&keyspan_pre_device);
205         if (retval)
206                 goto failed_pre_device_register;
207         retval = usb_serial_register(&keyspan_1port_device);
208         if (retval)
209                 goto failed_1port_device_register;
210         retval = usb_serial_register(&keyspan_2port_device);
211         if (retval)
212                 goto failed_2port_device_register;
213         retval = usb_serial_register(&keyspan_4port_device);
214         if (retval)
215                 goto failed_4port_device_register;
216         retval = usb_register(&keyspan_driver);
217         if (retval)
218                 goto failed_usb_register;
219
220         info(DRIVER_VERSION ":" DRIVER_DESC);
221
222         return 0;
223 failed_usb_register:
224         usb_serial_deregister(&keyspan_4port_device);
225 failed_4port_device_register:
226         usb_serial_deregister(&keyspan_2port_device);
227 failed_2port_device_register:
228         usb_serial_deregister(&keyspan_1port_device);
229 failed_1port_device_register:
230         usb_serial_deregister(&keyspan_pre_device);
231 failed_pre_device_register:
232         return retval;
233 }
234
235 static void __exit keyspan_exit(void)
236 {
237         usb_deregister(&keyspan_driver);
238         usb_serial_deregister(&keyspan_pre_device);
239         usb_serial_deregister(&keyspan_1port_device);
240         usb_serial_deregister(&keyspan_2port_device);
241         usb_serial_deregister(&keyspan_4port_device);
242 }
243
244 module_init(keyspan_init);
245 module_exit(keyspan_exit);
246
247 static void keyspan_break_ctl(struct tty_struct *tty, int break_state)
248 {
249         struct usb_serial_port *port = tty->driver_data;
250         struct keyspan_port_private     *p_priv;
251
252         dbg("%s", __func__);
253
254         p_priv = usb_get_serial_port_data(port);
255
256         if (break_state == -1)
257                 p_priv->break_on = 1;
258         else
259                 p_priv->break_on = 0;
260
261         keyspan_send_setup(port, 0);
262 }
263
264
265 static void keyspan_set_termios(struct tty_struct *tty,
266                 struct usb_serial_port *port, struct ktermios *old_termios)
267 {
268         int                             baud_rate, device_port;
269         struct keyspan_port_private     *p_priv;
270         const struct keyspan_device_details     *d_details;
271         unsigned int                    cflag;
272
273         dbg("%s", __func__);
274
275         p_priv = usb_get_serial_port_data(port);
276         d_details = p_priv->device_details;
277         cflag = tty->termios->c_cflag;
278         device_port = port->number - port->serial->minor;
279
280         /* Baud rate calculation takes baud rate as an integer
281            so other rates can be generated if desired. */
282         baud_rate = tty_get_baud_rate(tty);
283         /* If no match or invalid, don't change */
284         if (d_details->calculate_baud_rate(baud_rate, d_details->baudclk,
285                                 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
286                 /* FIXME - more to do here to ensure rate changes cleanly */
287                 /* FIXME - calcuate exact rate from divisor ? */
288                 p_priv->baud = baud_rate;
289         } else
290                 baud_rate = tty_termios_baud_rate(old_termios);
291
292         tty_encode_baud_rate(tty, baud_rate, baud_rate);
293         /* set CTS/RTS handshake etc. */
294         p_priv->cflag = cflag;
295         p_priv->flow_control = (cflag & CRTSCTS)? flow_cts: flow_none;
296
297         /* Mark/Space not supported */
298         tty->termios->c_cflag &= ~CMSPAR;
299
300         keyspan_send_setup(port, 0);
301 }
302
303 static int keyspan_tiocmget(struct tty_struct *tty, struct file *file)
304 {
305         struct usb_serial_port *port = tty->driver_data;
306         struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
307         unsigned int                    value;
308
309         value = ((p_priv->rts_state) ? TIOCM_RTS : 0) |
310                 ((p_priv->dtr_state) ? TIOCM_DTR : 0) |
311                 ((p_priv->cts_state) ? TIOCM_CTS : 0) |
312                 ((p_priv->dsr_state) ? TIOCM_DSR : 0) |
313                 ((p_priv->dcd_state) ? TIOCM_CAR : 0) |
314                 ((p_priv->ri_state) ? TIOCM_RNG : 0);
315
316         return value;
317 }
318
319 static int keyspan_tiocmset(struct tty_struct *tty, struct file *file,
320                             unsigned int set, unsigned int clear)
321 {
322         struct usb_serial_port *port = tty->driver_data;
323         struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
324
325         if (set & TIOCM_RTS)
326                 p_priv->rts_state = 1;
327         if (set & TIOCM_DTR)
328                 p_priv->dtr_state = 1;
329         if (clear & TIOCM_RTS)
330                 p_priv->rts_state = 0;
331         if (clear & TIOCM_DTR)
332                 p_priv->dtr_state = 0;
333         keyspan_send_setup(port, 0);
334         return 0;
335 }
336
337 /* Write function is similar for the four protocols used
338    with only a minor change for usa90 (usa19hs) required */
339 static int keyspan_write(struct tty_struct *tty,
340         struct usb_serial_port *port, const unsigned char *buf, int count)
341 {
342         struct keyspan_port_private     *p_priv;
343         const struct keyspan_device_details     *d_details;
344         int                             flip;
345         int                             left, todo;
346         struct urb                      *this_urb;
347         int                             err, maxDataLen, dataOffset;
348
349         p_priv = usb_get_serial_port_data(port);
350         d_details = p_priv->device_details;
351
352         if (d_details->msg_format == msg_usa90) {
353                 maxDataLen = 64;
354                 dataOffset = 0;
355         } else {
356                 maxDataLen = 63;
357                 dataOffset = 1;
358         }
359
360         dbg("%s - for port %d (%d chars), flip=%d",
361             __func__, port->number, count, p_priv->out_flip);
362
363         for (left = count; left > 0; left -= todo) {
364                 todo = left;
365                 if (todo > maxDataLen)
366                         todo = maxDataLen;
367
368                 flip = p_priv->out_flip;
369
370                 /* Check we have a valid urb/endpoint before we use it... */
371                 this_urb = p_priv->out_urbs[flip];
372                 if (this_urb == NULL) {
373                         /* no bulk out, so return 0 bytes written */
374                         dbg("%s - no output urb :(", __func__);
375                         return count;
376                 }
377
378                 dbg("%s - endpoint %d flip %d",
379                         __func__, usb_pipeendpoint(this_urb->pipe), flip);
380
381                 if (this_urb->status == -EINPROGRESS) {
382                         if (time_before(jiffies,
383                                         p_priv->tx_start_time[flip] + 10 * HZ))
384                                 break;
385                         usb_unlink_urb(this_urb);
386                         break;
387                 }
388
389                 /* First byte in buffer is "last flag" (except for usa19hx)
390                    - unused so for now so set to zero */
391                 ((char *)this_urb->transfer_buffer)[0] = 0;
392
393                 memcpy(this_urb->transfer_buffer + dataOffset, buf, todo);
394                 buf += todo;
395
396                 /* send the data out the bulk port */
397                 this_urb->transfer_buffer_length = todo + dataOffset;
398
399                 this_urb->dev = port->serial->dev;
400                 err = usb_submit_urb(this_urb, GFP_ATOMIC);
401                 if (err != 0)
402                         dbg("usb_submit_urb(write bulk) failed (%d)", err);
403                 p_priv->tx_start_time[flip] = jiffies;
404
405                 /* Flip for next time if usa26 or usa28 interface
406                    (not used on usa49) */
407                 p_priv->out_flip = (flip + 1) & d_details->outdat_endp_flip;
408         }
409
410         return count - left;
411 }
412
413 static void     usa26_indat_callback(struct urb *urb)
414 {
415         int                     i, err;
416         int                     endpoint;
417         struct usb_serial_port  *port;
418         struct tty_struct       *tty;
419         unsigned char           *data = urb->transfer_buffer;
420         int status = urb->status;
421
422         dbg("%s", __func__);
423
424         endpoint = usb_pipeendpoint(urb->pipe);
425
426         if (status) {
427                 dbg("%s - nonzero status: %x on endpoint %d.",
428                     __func__, status, endpoint);
429                 return;
430         }
431
432         port =  urb->context;
433         tty = port->port.tty;
434         if (tty && urb->actual_length) {
435                 /* 0x80 bit is error flag */
436                 if ((data[0] & 0x80) == 0) {
437                         /* no errors on individual bytes, only
438                            possible overrun err */
439                         if (data[0] & RXERROR_OVERRUN)
440                                 err = TTY_OVERRUN;
441                         else
442                                 err = 0;
443                         for (i = 1; i < urb->actual_length ; ++i)
444                                 tty_insert_flip_char(tty, data[i], err);
445                 } else {
446                         /* some bytes had errors, every byte has status */
447                         dbg("%s - RX error!!!!", __func__);
448                         for (i = 0; i + 1 < urb->actual_length; i += 2) {
449                                 int stat = data[i], flag = 0;
450                                 if (stat & RXERROR_OVERRUN)
451                                         flag |= TTY_OVERRUN;
452                                 if (stat & RXERROR_FRAMING)
453                                         flag |= TTY_FRAME;
454                                 if (stat & RXERROR_PARITY)
455                                         flag |= TTY_PARITY;
456                                 /* XXX should handle break (0x10) */
457                                 tty_insert_flip_char(tty, data[i+1], flag);
458                         }
459                 }
460                 tty_flip_buffer_push(tty);
461         }
462
463         /* Resubmit urb so we continue receiving */
464         urb->dev = port->serial->dev;
465         if (port->port.count) {
466                 err = usb_submit_urb(urb, GFP_ATOMIC);
467                 if (err != 0)
468                         dbg("%s - resubmit read urb failed. (%d)",
469                                         __func__, err);
470         }
471         return;
472 }
473
474 /* Outdat handling is common for all devices */
475 static void     usa2x_outdat_callback(struct urb *urb)
476 {
477         struct usb_serial_port *port;
478         struct keyspan_port_private *p_priv;
479
480         port =  urb->context;
481         p_priv = usb_get_serial_port_data(port);
482         dbg("%s - urb %d", __func__, urb == p_priv->out_urbs[1]);
483
484         if (port->port.count)
485                 usb_serial_port_softint(port);
486 }
487
488 static void     usa26_inack_callback(struct urb *urb)
489 {
490         dbg("%s", __func__);
491
492 }
493
494 static void     usa26_outcont_callback(struct urb *urb)
495 {
496         struct usb_serial_port *port;
497         struct keyspan_port_private *p_priv;
498
499         port =  urb->context;
500         p_priv = usb_get_serial_port_data(port);
501
502         if (p_priv->resend_cont) {
503                 dbg("%s - sending setup", __func__);
504                 keyspan_usa26_send_setup(port->serial, port,
505                                                 p_priv->resend_cont - 1);
506         }
507 }
508
509 static void     usa26_instat_callback(struct urb *urb)
510 {
511         unsigned char                           *data = urb->transfer_buffer;
512         struct keyspan_usa26_portStatusMessage  *msg;
513         struct usb_serial                       *serial;
514         struct usb_serial_port                  *port;
515         struct keyspan_port_private             *p_priv;
516         int old_dcd_state, err;
517         int status = urb->status;
518
519         serial =  urb->context;
520
521         if (status) {
522                 dbg("%s - nonzero status: %x", __func__, status);
523                 return;
524         }
525         if (urb->actual_length != 9) {
526                 dbg("%s - %d byte report??", __func__, urb->actual_length);
527                 goto exit;
528         }
529
530         msg = (struct keyspan_usa26_portStatusMessage *)data;
531
532 #if 0
533         dbg("%s - port status: port %d cts %d dcd %d dsr %d ri %d toff %d txoff %d rxen %d cr %d",
534             __func__, msg->port, msg->hskia_cts, msg->gpia_dcd, msg->dsr, msg->ri, msg->_txOff,
535             msg->_txXoff, msg->rxEnabled, msg->controlResponse);
536 #endif
537
538         /* Now do something useful with the data */
539
540
541         /* Check port number from message and retrieve private data */
542         if (msg->port >= serial->num_ports) {
543                 dbg("%s - Unexpected port number %d", __func__, msg->port);
544                 goto exit;
545         }
546         port = serial->port[msg->port];
547         p_priv = usb_get_serial_port_data(port);
548
549         /* Update handshaking pin state information */
550         old_dcd_state = p_priv->dcd_state;
551         p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
552         p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
553         p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
554         p_priv->ri_state = ((msg->ri) ? 1 : 0);
555
556         if (port->port.tty && !C_CLOCAL(port->port.tty)
557             && old_dcd_state != p_priv->dcd_state) {
558                 if (old_dcd_state)
559                         tty_hangup(port->port.tty);
560                 /*  else */
561                 /*      wake_up_interruptible(&p_priv->open_wait); */
562         }
563
564         /* Resubmit urb so we continue receiving */
565         urb->dev = serial->dev;
566         err = usb_submit_urb(urb, GFP_ATOMIC);
567         if (err != 0)
568                 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
569 exit: ;
570 }
571
572 static void     usa26_glocont_callback(struct urb *urb)
573 {
574         dbg("%s", __func__);
575 }
576
577
578 static void usa28_indat_callback(struct urb *urb)
579 {
580         int                     err;
581         struct usb_serial_port  *port;
582         struct tty_struct       *tty;
583         unsigned char           *data;
584         struct keyspan_port_private             *p_priv;
585         int status = urb->status;
586
587         dbg("%s", __func__);
588
589         port =  urb->context;
590         p_priv = usb_get_serial_port_data(port);
591         data = urb->transfer_buffer;
592
593         if (urb != p_priv->in_urbs[p_priv->in_flip])
594                 return;
595
596         do {
597                 if (status) {
598                         dbg("%s - nonzero status: %x on endpoint %d.",
599                             __func__, status, usb_pipeendpoint(urb->pipe));
600                         return;
601                 }
602
603                 port =  urb->context;
604                 p_priv = usb_get_serial_port_data(port);
605                 data = urb->transfer_buffer;
606
607                 tty = port->port.tty;
608                 if (urb->actual_length) {
609                         tty_insert_flip_string(tty, data, urb->actual_length);
610                         tty_flip_buffer_push(tty);
611                 }
612
613                 /* Resubmit urb so we continue receiving */
614                 urb->dev = port->serial->dev;
615                 if (port->port.count) {
616                         err = usb_submit_urb(urb, GFP_ATOMIC);
617                         if (err != 0)
618                                 dbg("%s - resubmit read urb failed. (%d)",
619                                                                 __func__, err);
620                 }
621                 p_priv->in_flip ^= 1;
622
623                 urb = p_priv->in_urbs[p_priv->in_flip];
624         } while (urb->status != -EINPROGRESS);
625 }
626
627 static void     usa28_inack_callback(struct urb *urb)
628 {
629         dbg("%s", __func__);
630 }
631
632 static void     usa28_outcont_callback(struct urb *urb)
633 {
634         struct usb_serial_port *port;
635         struct keyspan_port_private *p_priv;
636
637         port =  urb->context;
638         p_priv = usb_get_serial_port_data(port);
639
640         if (p_priv->resend_cont) {
641                 dbg("%s - sending setup", __func__);
642                 keyspan_usa28_send_setup(port->serial, port,
643                                                 p_priv->resend_cont - 1);
644         }
645 }
646
647 static void     usa28_instat_callback(struct urb *urb)
648 {
649         int                                     err;
650         unsigned char                           *data = urb->transfer_buffer;
651         struct keyspan_usa28_portStatusMessage  *msg;
652         struct usb_serial                       *serial;
653         struct usb_serial_port                  *port;
654         struct keyspan_port_private             *p_priv;
655         int old_dcd_state;
656         int status = urb->status;
657
658         serial =  urb->context;
659
660         if (status) {
661                 dbg("%s - nonzero status: %x", __func__, status);
662                 return;
663         }
664
665         if (urb->actual_length != sizeof(struct keyspan_usa28_portStatusMessage)) {
666                 dbg("%s - bad length %d", __func__, urb->actual_length);
667                 goto exit;
668         }
669
670         /*dbg("%s %x %x %x %x %x %x %x %x %x %x %x %x", __func__
671             data[0], data[1], data[2], data[3], data[4], data[5],
672             data[6], data[7], data[8], data[9], data[10], data[11]);*/
673
674         /* Now do something useful with the data */
675         msg = (struct keyspan_usa28_portStatusMessage *)data;
676
677         /* Check port number from message and retrieve private data */
678         if (msg->port >= serial->num_ports) {
679                 dbg("%s - Unexpected port number %d", __func__, msg->port);
680                 goto exit;
681         }
682         port = serial->port[msg->port];
683         p_priv = usb_get_serial_port_data(port);
684
685         /* Update handshaking pin state information */
686         old_dcd_state = p_priv->dcd_state;
687         p_priv->cts_state = ((msg->cts) ? 1 : 0);
688         p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
689         p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
690         p_priv->ri_state = ((msg->ri) ? 1 : 0);
691
692         if (port->port.tty && !C_CLOCAL(port->port.tty)
693             && old_dcd_state != p_priv->dcd_state) {
694                 if (old_dcd_state)
695                         tty_hangup(port->port.tty);
696                 /*  else */
697                 /*      wake_up_interruptible(&p_priv->open_wait); */
698         }
699
700                 /* Resubmit urb so we continue receiving */
701         urb->dev = serial->dev;
702         err = usb_submit_urb(urb, GFP_ATOMIC);
703         if (err != 0)
704                 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
705 exit: ;
706 }
707
708 static void     usa28_glocont_callback(struct urb *urb)
709 {
710         dbg("%s", __func__);
711 }
712
713
714 static void     usa49_glocont_callback(struct urb *urb)
715 {
716         struct usb_serial *serial;
717         struct usb_serial_port *port;
718         struct keyspan_port_private *p_priv;
719         int i;
720
721         dbg("%s", __func__);
722
723         serial =  urb->context;
724         for (i = 0; i < serial->num_ports; ++i) {
725                 port = serial->port[i];
726                 p_priv = usb_get_serial_port_data(port);
727
728                 if (p_priv->resend_cont) {
729                         dbg("%s - sending setup", __func__);
730                         keyspan_usa49_send_setup(serial, port,
731                                                 p_priv->resend_cont - 1);
732                         break;
733                 }
734         }
735 }
736
737         /* This is actually called glostat in the Keyspan
738            doco */
739 static void     usa49_instat_callback(struct urb *urb)
740 {
741         int                                     err;
742         unsigned char                           *data = urb->transfer_buffer;
743         struct keyspan_usa49_portStatusMessage  *msg;
744         struct usb_serial                       *serial;
745         struct usb_serial_port                  *port;
746         struct keyspan_port_private             *p_priv;
747         int old_dcd_state;
748         int status = urb->status;
749
750         dbg("%s", __func__);
751
752         serial =  urb->context;
753
754         if (status) {
755                 dbg("%s - nonzero status: %x", __func__, status);
756                 return;
757         }
758
759         if (urb->actual_length !=
760                         sizeof(struct keyspan_usa49_portStatusMessage)) {
761                 dbg("%s - bad length %d", __func__, urb->actual_length);
762                 goto exit;
763         }
764
765         /*dbg(" %x %x %x %x %x %x %x %x %x %x %x", __func__,
766             data[0], data[1], data[2], data[3], data[4], data[5],
767             data[6], data[7], data[8], data[9], data[10]);*/
768
769         /* Now do something useful with the data */
770         msg = (struct keyspan_usa49_portStatusMessage *)data;
771
772         /* Check port number from message and retrieve private data */
773         if (msg->portNumber >= serial->num_ports) {
774                 dbg("%s - Unexpected port number %d",
775                                         __func__, msg->portNumber);
776                 goto exit;
777         }
778         port = serial->port[msg->portNumber];
779         p_priv = usb_get_serial_port_data(port);
780
781         /* Update handshaking pin state information */
782         old_dcd_state = p_priv->dcd_state;
783         p_priv->cts_state = ((msg->cts) ? 1 : 0);
784         p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
785         p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
786         p_priv->ri_state = ((msg->ri) ? 1 : 0);
787
788         if (port->port.tty && !C_CLOCAL(port->port.tty)
789             && old_dcd_state != p_priv->dcd_state) {
790                 if (old_dcd_state)
791                         tty_hangup(port->port.tty);
792                 /*  else */
793                 /*      wake_up_interruptible(&p_priv->open_wait); */
794         }
795
796         /* Resubmit urb so we continue receiving */
797         urb->dev = serial->dev;
798
799         err = usb_submit_urb(urb, GFP_ATOMIC);
800         if (err != 0)
801                 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
802 exit:   ;
803 }
804
805 static void     usa49_inack_callback(struct urb *urb)
806 {
807         dbg("%s", __func__);
808 }
809
810 static void     usa49_indat_callback(struct urb *urb)
811 {
812         int                     i, err;
813         int                     endpoint;
814         struct usb_serial_port  *port;
815         struct tty_struct       *tty;
816         unsigned char           *data = urb->transfer_buffer;
817         int status = urb->status;
818
819         dbg("%s", __func__);
820
821         endpoint = usb_pipeendpoint(urb->pipe);
822
823         if (status) {
824                 dbg("%s - nonzero status: %x on endpoint %d.", __func__,
825                     status, endpoint);
826                 return;
827         }
828
829         port =  urb->context;
830         tty = port->port.tty;
831         if (tty && urb->actual_length) {
832                 /* 0x80 bit is error flag */
833                 if ((data[0] & 0x80) == 0) {
834                         /* no error on any byte */
835                         tty_insert_flip_string(tty, data + 1,
836                                                 urb->actual_length - 1);
837                 } else {
838                         /* some bytes had errors, every byte has status */
839                         for (i = 0; i + 1 < urb->actual_length; i += 2) {
840                                 int stat = data[i], flag = 0;
841                                 if (stat & RXERROR_OVERRUN)
842                                         flag |= TTY_OVERRUN;
843                                 if (stat & RXERROR_FRAMING)
844                                         flag |= TTY_FRAME;
845                                 if (stat & RXERROR_PARITY)
846                                         flag |= TTY_PARITY;
847                                 /* XXX should handle break (0x10) */
848                                 tty_insert_flip_char(tty, data[i+1], flag);
849                         }
850                 }
851                 tty_flip_buffer_push(tty);
852         }
853
854         /* Resubmit urb so we continue receiving */
855         urb->dev = port->serial->dev;
856         if (port->port.count) {
857                 err = usb_submit_urb(urb, GFP_ATOMIC);
858                 if (err != 0)
859                         dbg("%s - resubmit read urb failed. (%d)",
860                                                         __func__, err);
861         }
862 }
863
864 static void usa49wg_indat_callback(struct urb *urb)
865 {
866         int                     i, len, x, err;
867         struct usb_serial       *serial;
868         struct usb_serial_port  *port;
869         struct tty_struct       *tty;
870         unsigned char           *data = urb->transfer_buffer;
871         int status = urb->status;
872
873         dbg("%s", __func__);
874
875         serial = urb->context;
876
877         if (status) {
878                 dbg("%s - nonzero status: %x", __func__, status);
879                 return;
880         }
881
882         /* inbound data is in the form P#, len, status, data */
883         i = 0;
884         len = 0;
885
886         if (urb->actual_length) {
887                 while (i < urb->actual_length) {
888
889                         /* Check port number from message*/
890                         if (data[i] >= serial->num_ports) {
891                                 dbg("%s - Unexpected port number %d",
892                                         __func__, data[i]);
893                                 return;
894                         }
895                         port = serial->port[data[i++]];
896                         tty = port->port.tty;
897                         len = data[i++];
898
899                         /* 0x80 bit is error flag */
900                         if ((data[i] & 0x80) == 0) {
901                                 /* no error on any byte */
902                                 i++;
903                                 for (x = 1; x < len ; ++x)
904                                         if (port->port.count)
905                                                 tty_insert_flip_char(tty,
906                                                                 data[i++], 0);
907                                         else
908                                                 i++;
909                         } else {
910                                 /*
911                                  * some bytes had errors, every byte has status
912                                  */
913                                 for (x = 0; x + 1 < len; x += 2) {
914                                         int stat = data[i], flag = 0;
915                                         if (stat & RXERROR_OVERRUN)
916                                                 flag |= TTY_OVERRUN;
917                                         if (stat & RXERROR_FRAMING)
918                                                 flag |= TTY_FRAME;
919                                         if (stat & RXERROR_PARITY)
920                                                 flag |= TTY_PARITY;
921                                         /* XXX should handle break (0x10) */
922                                         if (port->port.count)
923                                                 tty_insert_flip_char(tty,
924                                                         data[i+1], flag);
925                                         i += 2;
926                                 }
927                         }
928                         if (port->port.count)
929                                 tty_flip_buffer_push(tty);
930                 }
931         }
932
933         /* Resubmit urb so we continue receiving */
934         urb->dev = serial->dev;
935
936         err = usb_submit_urb(urb, GFP_ATOMIC);
937         if (err != 0)
938                 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
939 }
940
941 /* not used, usa-49 doesn't have per-port control endpoints */
942 static void usa49_outcont_callback(struct urb *urb)
943 {
944         dbg("%s", __func__);
945 }
946
947 static void usa90_indat_callback(struct urb *urb)
948 {
949         int                     i, err;
950         int                     endpoint;
951         struct usb_serial_port  *port;
952         struct keyspan_port_private             *p_priv;
953         struct tty_struct       *tty;
954         unsigned char           *data = urb->transfer_buffer;
955         int status = urb->status;
956
957         dbg("%s", __func__);
958
959         endpoint = usb_pipeendpoint(urb->pipe);
960
961         if (status) {
962                 dbg("%s - nonzero status: %x on endpoint %d.",
963                     __func__, status, endpoint);
964                 return;
965         }
966
967         port =  urb->context;
968         p_priv = usb_get_serial_port_data(port);
969
970         tty = port->port.tty;
971         if (urb->actual_length) {
972                 /* if current mode is DMA, looks like usa28 format
973                    otherwise looks like usa26 data format */
974
975                 if (p_priv->baud > 57600)
976                         tty_insert_flip_string(tty, data, urb->actual_length);
977                 else {
978                         /* 0x80 bit is error flag */
979                         if ((data[0] & 0x80) == 0) {
980                                 /* no errors on individual bytes, only
981                                    possible overrun err*/
982                                 if (data[0] & RXERROR_OVERRUN)
983                                         err = TTY_OVERRUN;
984                                 else
985                                         err = 0;
986                                 for (i = 1; i < urb->actual_length ; ++i)
987                                         tty_insert_flip_char(tty, data[i],
988                                                                         err);
989                         }  else {
990                         /* some bytes had errors, every byte has status */
991                                 dbg("%s - RX error!!!!", __func__);
992                                 for (i = 0; i + 1 < urb->actual_length; i += 2) {
993                                         int stat = data[i], flag = 0;
994                                         if (stat & RXERROR_OVERRUN)
995                                                 flag |= TTY_OVERRUN;
996                                         if (stat & RXERROR_FRAMING)
997                                                 flag |= TTY_FRAME;
998                                         if (stat & RXERROR_PARITY)
999                                                 flag |= TTY_PARITY;
1000                                         /* XXX should handle break (0x10) */
1001                                         tty_insert_flip_char(tty, data[i+1],
1002                                                                         flag);
1003                                 }
1004                         }
1005                 }
1006                 tty_flip_buffer_push(tty);
1007         }
1008
1009         /* Resubmit urb so we continue receiving */
1010         urb->dev = port->serial->dev;
1011         if (port->port.count) {
1012                 err = usb_submit_urb(urb, GFP_ATOMIC);
1013                 if (err != 0)
1014                         dbg("%s - resubmit read urb failed. (%d)",
1015                                                         __func__, err);
1016         }
1017         return;
1018 }
1019
1020
1021 static void     usa90_instat_callback(struct urb *urb)
1022 {
1023         unsigned char                           *data = urb->transfer_buffer;
1024         struct keyspan_usa90_portStatusMessage  *msg;
1025         struct usb_serial                       *serial;
1026         struct usb_serial_port                  *port;
1027         struct keyspan_port_private             *p_priv;
1028         int old_dcd_state, err;
1029         int status = urb->status;
1030
1031         serial =  urb->context;
1032
1033         if (status) {
1034                 dbg("%s - nonzero status: %x", __func__, status);
1035                 return;
1036         }
1037         if (urb->actual_length < 14) {
1038                 dbg("%s - %d byte report??", __func__, urb->actual_length);
1039                 goto exit;
1040         }
1041
1042         msg = (struct keyspan_usa90_portStatusMessage *)data;
1043
1044         /* Now do something useful with the data */
1045
1046         port = serial->port[0];
1047         p_priv = usb_get_serial_port_data(port);
1048
1049         /* Update handshaking pin state information */
1050         old_dcd_state = p_priv->dcd_state;
1051         p_priv->cts_state = ((msg->cts) ? 1 : 0);
1052         p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
1053         p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
1054         p_priv->ri_state = ((msg->ri) ? 1 : 0);
1055
1056         if (port->port.tty && !C_CLOCAL(port->port.tty)
1057             && old_dcd_state != p_priv->dcd_state) {
1058                 if (old_dcd_state)
1059                         tty_hangup(port->port.tty);
1060                 /*  else */
1061                 /*      wake_up_interruptible(&p_priv->open_wait); */
1062         }
1063
1064         /* Resubmit urb so we continue receiving */
1065         urb->dev = serial->dev;
1066         err = usb_submit_urb(urb, GFP_ATOMIC);
1067         if (err != 0)
1068                 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
1069 exit:
1070         ;
1071 }
1072
1073 static void     usa90_outcont_callback(struct urb *urb)
1074 {
1075         struct usb_serial_port *port;
1076         struct keyspan_port_private *p_priv;
1077
1078         port =  urb->context;
1079         p_priv = usb_get_serial_port_data(port);
1080
1081         if (p_priv->resend_cont) {
1082                 dbg("%s - sending setup", __func__);
1083                 keyspan_usa90_send_setup(port->serial, port,
1084                                                 p_priv->resend_cont - 1);
1085         }
1086 }
1087
1088 /* Status messages from the 28xg */
1089 static void     usa67_instat_callback(struct urb *urb)
1090 {
1091         int                                     err;
1092         unsigned char                           *data = urb->transfer_buffer;
1093         struct keyspan_usa67_portStatusMessage  *msg;
1094         struct usb_serial                       *serial;
1095         struct usb_serial_port                  *port;
1096         struct keyspan_port_private             *p_priv;
1097         int old_dcd_state;
1098         int status = urb->status;
1099
1100         dbg("%s", __func__);
1101
1102         serial = urb->context;
1103
1104         if (status) {
1105                 dbg("%s - nonzero status: %x", __func__, status);
1106                 return;
1107         }
1108
1109         if (urb->actual_length !=
1110                         sizeof(struct keyspan_usa67_portStatusMessage)) {
1111                 dbg("%s - bad length %d", __func__, urb->actual_length);
1112                 return;
1113         }
1114
1115
1116         /* Now do something useful with the data */
1117         msg = (struct keyspan_usa67_portStatusMessage *)data;
1118
1119         /* Check port number from message and retrieve private data */
1120         if (msg->port >= serial->num_ports) {
1121                 dbg("%s - Unexpected port number %d", __func__, msg->port);
1122                 return;
1123         }
1124
1125         port = serial->port[msg->port];
1126         p_priv = usb_get_serial_port_data(port);
1127
1128         /* Update handshaking pin state information */
1129         old_dcd_state = p_priv->dcd_state;
1130         p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
1131         p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
1132
1133         if (port->port.tty && !C_CLOCAL(port->port.tty)
1134             && old_dcd_state != p_priv->dcd_state) {
1135                 if (old_dcd_state)
1136                         tty_hangup(port->port.tty);
1137                 /*  else */
1138                 /*      wake_up_interruptible(&p_priv->open_wait); */
1139         }
1140
1141         /* Resubmit urb so we continue receiving */
1142         urb->dev = serial->dev;
1143         err = usb_submit_urb(urb, GFP_ATOMIC);
1144         if (err != 0)
1145                 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
1146 }
1147
1148 static void usa67_glocont_callback(struct urb *urb)
1149 {
1150         struct usb_serial *serial;
1151         struct usb_serial_port *port;
1152         struct keyspan_port_private *p_priv;
1153         int i;
1154
1155         dbg("%s", __func__);
1156
1157         serial = urb->context;
1158         for (i = 0; i < serial->num_ports; ++i) {
1159                 port = serial->port[i];
1160                 p_priv = usb_get_serial_port_data(port);
1161
1162                 if (p_priv->resend_cont) {
1163                         dbg("%s - sending setup", __func__);
1164                         keyspan_usa67_send_setup(serial, port,
1165                                                 p_priv->resend_cont - 1);
1166                         break;
1167                 }
1168         }
1169 }
1170
1171 static int keyspan_write_room(struct tty_struct *tty)
1172 {
1173         struct usb_serial_port *port = tty->driver_data;
1174         struct keyspan_port_private     *p_priv;
1175         const struct keyspan_device_details     *d_details;
1176         int                             flip;
1177         int                             data_len;
1178         struct urb                      *this_urb;
1179
1180         dbg("%s", __func__);
1181         p_priv = usb_get_serial_port_data(port);
1182         d_details = p_priv->device_details;
1183
1184         /* FIXME: locking */
1185         if (d_details->msg_format == msg_usa90)
1186                 data_len = 64;
1187         else
1188                 data_len = 63;
1189
1190         flip = p_priv->out_flip;
1191
1192         /* Check both endpoints to see if any are available. */
1193         this_urb = p_priv->out_urbs[flip];
1194         if (this_urb != NULL) {
1195                 if (this_urb->status != -EINPROGRESS)
1196                         return data_len;
1197                 flip = (flip + 1) & d_details->outdat_endp_flip;
1198                 this_urb = p_priv->out_urbs[flip];
1199                 if (this_urb != NULL) {
1200                         if (this_urb->status != -EINPROGRESS)
1201                                 return data_len;
1202                 }
1203         }
1204         return 0;
1205 }
1206
1207
1208 static int keyspan_open(struct tty_struct *tty,
1209                         struct usb_serial_port *port, struct file *filp)
1210 {
1211         struct keyspan_port_private     *p_priv;
1212         struct keyspan_serial_private   *s_priv;
1213         struct usb_serial               *serial = port->serial;
1214         const struct keyspan_device_details     *d_details;
1215         int                             i, err;
1216         int                             baud_rate, device_port;
1217         struct urb                      *urb;
1218         unsigned int                    cflag = 0;
1219
1220         s_priv = usb_get_serial_data(serial);
1221         p_priv = usb_get_serial_port_data(port);
1222         d_details = p_priv->device_details;
1223
1224         dbg("%s - port%d.", __func__, port->number);
1225
1226         /* Set some sane defaults */
1227         p_priv->rts_state = 1;
1228         p_priv->dtr_state = 1;
1229         p_priv->baud = 9600;
1230
1231         /* force baud and lcr to be set on open */
1232         p_priv->old_baud = 0;
1233         p_priv->old_cflag = 0;
1234
1235         p_priv->out_flip = 0;
1236         p_priv->in_flip = 0;
1237
1238         /* Reset low level data toggle and start reading from endpoints */
1239         for (i = 0; i < 2; i++) {
1240                 urb = p_priv->in_urbs[i];
1241                 if (urb == NULL)
1242                         continue;
1243                 urb->dev = serial->dev;
1244
1245                 /* make sure endpoint data toggle is synchronized
1246                    with the device */
1247                 usb_clear_halt(urb->dev, urb->pipe);
1248                 err = usb_submit_urb(urb, GFP_KERNEL);
1249                 if (err != 0)
1250                         dbg("%s - submit urb %d failed (%d)",
1251                                                         __func__, i, err);
1252         }
1253
1254         /* Reset low level data toggle on out endpoints */
1255         for (i = 0; i < 2; i++) {
1256                 urb = p_priv->out_urbs[i];
1257                 if (urb == NULL)
1258                         continue;
1259                 urb->dev = serial->dev;
1260                 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1261                                                 usb_pipeout(urb->pipe), 0); */
1262         }
1263
1264         /* get the terminal config for the setup message now so we don't
1265          * need to send 2 of them */
1266
1267         device_port = port->number - port->serial->minor;
1268         if (tty) {
1269                 cflag = tty->termios->c_cflag;
1270                 /* Baud rate calculation takes baud rate as an integer
1271                    so other rates can be generated if desired. */
1272                 baud_rate = tty_get_baud_rate(tty);
1273                 /* If no match or invalid, leave as default */
1274                 if (baud_rate >= 0
1275                     && d_details->calculate_baud_rate(baud_rate, d_details->baudclk,
1276                                         NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
1277                         p_priv->baud = baud_rate;
1278                 }
1279         }
1280         /* set CTS/RTS handshake etc. */
1281         p_priv->cflag = cflag;
1282         p_priv->flow_control = (cflag & CRTSCTS)? flow_cts: flow_none;
1283
1284         keyspan_send_setup(port, 1);
1285         /* mdelay(100); */
1286         /* keyspan_set_termios(port, NULL); */
1287
1288         return 0;
1289 }
1290
1291 static inline void stop_urb(struct urb *urb)
1292 {
1293         if (urb && urb->status == -EINPROGRESS)
1294                 usb_kill_urb(urb);
1295 }
1296
1297 static void keyspan_close(struct tty_struct *tty,
1298                         struct usb_serial_port *port, struct file *filp)
1299 {
1300         int                     i;
1301         struct usb_serial       *serial = port->serial;
1302         struct keyspan_serial_private   *s_priv;
1303         struct keyspan_port_private     *p_priv;
1304
1305         dbg("%s", __func__);
1306         s_priv = usb_get_serial_data(serial);
1307         p_priv = usb_get_serial_port_data(port);
1308
1309         p_priv->rts_state = 0;
1310         p_priv->dtr_state = 0;
1311
1312         if (serial->dev) {
1313                 keyspan_send_setup(port, 2);
1314                 /* pilot-xfer seems to work best with this delay */
1315                 mdelay(100);
1316                 /* keyspan_set_termios(port, NULL); */
1317         }
1318
1319         /*while (p_priv->outcont_urb->status == -EINPROGRESS) {
1320                 dbg("%s - urb in progress", __func__);
1321         }*/
1322
1323         p_priv->out_flip = 0;
1324         p_priv->in_flip = 0;
1325
1326         if (serial->dev) {
1327                 /* Stop reading/writing urbs */
1328                 stop_urb(p_priv->inack_urb);
1329                 /* stop_urb(p_priv->outcont_urb); */
1330                 for (i = 0; i < 2; i++) {
1331                         stop_urb(p_priv->in_urbs[i]);
1332                         stop_urb(p_priv->out_urbs[i]);
1333                 }
1334         }
1335         port->port.tty = NULL;
1336 }
1337
1338 /* download the firmware to a pre-renumeration device */
1339 static int keyspan_fake_startup(struct usb_serial *serial)
1340 {
1341         int                             response;
1342         const struct ihex_binrec        *record;
1343         char                            *fw_name;
1344         const struct firmware           *fw;
1345
1346         dbg("Keyspan startup version %04x product %04x",
1347             le16_to_cpu(serial->dev->descriptor.bcdDevice),
1348             le16_to_cpu(serial->dev->descriptor.idProduct));
1349
1350         if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000)
1351                                                                 != 0x8000) {
1352                 dbg("Firmware already loaded.  Quitting.");
1353                 return 1;
1354         }
1355
1356                 /* Select firmware image on the basis of idProduct */
1357         switch (le16_to_cpu(serial->dev->descriptor.idProduct)) {
1358         case keyspan_usa28_pre_product_id:
1359                 fw_name = "keyspan/usa28.fw";
1360                 break;
1361
1362         case keyspan_usa28x_pre_product_id:
1363                 fw_name = "keyspan/usa28x.fw";
1364                 break;
1365
1366         case keyspan_usa28xa_pre_product_id:
1367                 fw_name = "keyspan/usa28xa.fw";
1368                 break;
1369
1370         case keyspan_usa28xb_pre_product_id:
1371                 fw_name = "keyspan/usa28xb.fw";
1372                 break;
1373
1374         case keyspan_usa19_pre_product_id:
1375                 fw_name = "keyspan/usa19.fw";
1376                 break;
1377
1378         case keyspan_usa19qi_pre_product_id:
1379                 fw_name = "keyspan/usa19qi.fw";
1380                 break;
1381
1382         case keyspan_mpr_pre_product_id:
1383                 fw_name = "keyspan/mpr.fw";
1384                 break;
1385
1386         case keyspan_usa19qw_pre_product_id:
1387                 fw_name = "keyspan/usa19qw.fw";
1388                 break;
1389
1390         case keyspan_usa18x_pre_product_id:
1391                 fw_name = "keyspan/usa18x.fw";
1392                 break;
1393
1394         case keyspan_usa19w_pre_product_id:
1395                 fw_name = "keyspan/usa19w.fw";
1396                 break;
1397
1398         case keyspan_usa49w_pre_product_id:
1399                 fw_name = "keyspan/usa49w.fw";
1400                 break;
1401
1402         case keyspan_usa49wlc_pre_product_id:
1403                 fw_name = "keyspan/usa49wlc.fw";
1404                 break;
1405
1406         default:
1407                 dev_err(&serial->dev->dev, "Unknown product ID (%04x)\n",
1408                         le16_to_cpu(serial->dev->descriptor.idProduct));
1409                 return 1;
1410         }
1411
1412         if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev)) {
1413                 dev_err(&serial->dev->dev, "Required keyspan firmware image (%s) unavailable.\n", fw_name);
1414                 return(1);
1415         }
1416
1417         dbg("Uploading Keyspan %s firmware.", fw_name);
1418
1419                 /* download the firmware image */
1420         response = ezusb_set_reset(serial, 1);
1421
1422         record = (const struct ihex_binrec *)fw->data;
1423
1424         while (record) {
1425                 response = ezusb_writememory(serial, be32_to_cpu(record->addr),
1426                                              (unsigned char *)record->data,
1427                                              be16_to_cpu(record->len), 0xa0);
1428                 if (response < 0) {
1429                         dev_err(&serial->dev->dev, "ezusb_writememory failed for Keyspan firmware (%d %04X %p %d)\n",
1430                                 response, be32_to_cpu(record->addr),
1431                                 record->data, be16_to_cpu(record->len));
1432                         break;
1433                 }
1434                 record = ihex_next_binrec(record);
1435         }
1436         release_firmware(fw);
1437                 /* bring device out of reset. Renumeration will occur in a
1438                    moment and the new device will bind to the real driver */
1439         response = ezusb_set_reset(serial, 0);
1440
1441         /* we don't want this device to have a driver assigned to it. */
1442         return 1;
1443 }
1444
1445 /* Helper functions used by keyspan_setup_urbs */
1446 static struct usb_endpoint_descriptor const *find_ep(struct usb_serial const *serial,
1447                                                      int endpoint)
1448 {
1449         struct usb_host_interface *iface_desc;
1450         struct usb_endpoint_descriptor *ep;
1451         int i;
1452
1453         iface_desc = serial->interface->cur_altsetting;
1454         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
1455                 ep = &iface_desc->endpoint[i].desc;
1456                 if (ep->bEndpointAddress == endpoint)
1457                         return ep;
1458         }
1459         dev_warn(&serial->interface->dev, "found no endpoint descriptor for "
1460                  "endpoint %x\n", endpoint);
1461         return NULL;
1462 }
1463
1464 static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint,
1465                                       int dir, void *ctx, char *buf, int len,
1466                                       void (*callback)(struct urb *))
1467 {
1468         struct urb *urb;
1469         struct usb_endpoint_descriptor const *ep_desc;
1470         char const *ep_type_name;
1471
1472         if (endpoint == -1)
1473                 return NULL;            /* endpoint not needed */
1474
1475         dbg("%s - alloc for endpoint %d.", __func__, endpoint);
1476         urb = usb_alloc_urb(0, GFP_KERNEL);             /* No ISO */
1477         if (urb == NULL) {
1478                 dbg("%s - alloc for endpoint %d failed.", __func__, endpoint);
1479                 return NULL;
1480         }
1481
1482         if (endpoint == 0) {
1483                 /* control EP filled in when used */
1484                 return urb;
1485         }
1486
1487         ep_desc = find_ep(serial, endpoint);
1488         if (!ep_desc) {
1489                 /* leak the urb, something's wrong and the callers don't care */
1490                 return urb;
1491         }
1492         if (usb_endpoint_xfer_int(ep_desc)) {
1493                 ep_type_name = "INT";
1494                 usb_fill_int_urb(urb, serial->dev,
1495                                  usb_sndintpipe(serial->dev, endpoint) | dir,
1496                                  buf, len, callback, ctx,
1497                                  ep_desc->bInterval);
1498         } else if (usb_endpoint_xfer_bulk(ep_desc)) {
1499                 ep_type_name = "BULK";
1500                 usb_fill_bulk_urb(urb, serial->dev,
1501                                   usb_sndbulkpipe(serial->dev, endpoint) | dir,
1502                                   buf, len, callback, ctx);
1503         } else {
1504                 dev_warn(&serial->interface->dev,
1505                          "unsupported endpoint type %x\n",
1506                          ep_desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK);
1507                 usb_free_urb(urb);
1508                 return NULL;
1509         }
1510
1511         dbg("%s - using urb %p for %s endpoint %x",
1512             __func__, urb, ep_type_name, endpoint);
1513         return urb;
1514 }
1515
1516 static struct callbacks {
1517         void    (*instat_callback)(struct urb *);
1518         void    (*glocont_callback)(struct urb *);
1519         void    (*indat_callback)(struct urb *);
1520         void    (*outdat_callback)(struct urb *);
1521         void    (*inack_callback)(struct urb *);
1522         void    (*outcont_callback)(struct urb *);
1523 } keyspan_callbacks[] = {
1524         {
1525                 /* msg_usa26 callbacks */
1526                 .instat_callback =      usa26_instat_callback,
1527                 .glocont_callback =     usa26_glocont_callback,
1528                 .indat_callback =       usa26_indat_callback,
1529                 .outdat_callback =      usa2x_outdat_callback,
1530                 .inack_callback =       usa26_inack_callback,
1531                 .outcont_callback =     usa26_outcont_callback,
1532         }, {
1533                 /* msg_usa28 callbacks */
1534                 .instat_callback =      usa28_instat_callback,
1535                 .glocont_callback =     usa28_glocont_callback,
1536                 .indat_callback =       usa28_indat_callback,
1537                 .outdat_callback =      usa2x_outdat_callback,
1538                 .inack_callback =       usa28_inack_callback,
1539                 .outcont_callback =     usa28_outcont_callback,
1540         }, {
1541                 /* msg_usa49 callbacks */
1542                 .instat_callback =      usa49_instat_callback,
1543                 .glocont_callback =     usa49_glocont_callback,
1544                 .indat_callback =       usa49_indat_callback,
1545                 .outdat_callback =      usa2x_outdat_callback,
1546                 .inack_callback =       usa49_inack_callback,
1547                 .outcont_callback =     usa49_outcont_callback,
1548         }, {
1549                 /* msg_usa90 callbacks */
1550                 .instat_callback =      usa90_instat_callback,
1551                 .glocont_callback =     usa28_glocont_callback,
1552                 .indat_callback =       usa90_indat_callback,
1553                 .outdat_callback =      usa2x_outdat_callback,
1554                 .inack_callback =       usa28_inack_callback,
1555                 .outcont_callback =     usa90_outcont_callback,
1556         }, {
1557                 /* msg_usa67 callbacks */
1558                 .instat_callback =      usa67_instat_callback,
1559                 .glocont_callback =     usa67_glocont_callback,
1560                 .indat_callback =       usa26_indat_callback,
1561                 .outdat_callback =      usa2x_outdat_callback,
1562                 .inack_callback =       usa26_inack_callback,
1563                 .outcont_callback =     usa26_outcont_callback,
1564         }
1565 };
1566
1567         /* Generic setup urbs function that uses
1568            data in device_details */
1569 static void keyspan_setup_urbs(struct usb_serial *serial)
1570 {
1571         int                             i, j;
1572         struct keyspan_serial_private   *s_priv;
1573         const struct keyspan_device_details     *d_details;
1574         struct usb_serial_port          *port;
1575         struct keyspan_port_private     *p_priv;
1576         struct callbacks                *cback;
1577         int                             endp;
1578
1579         dbg("%s", __func__);
1580
1581         s_priv = usb_get_serial_data(serial);
1582         d_details = s_priv->device_details;
1583
1584         /* Setup values for the various callback routines */
1585         cback = &keyspan_callbacks[d_details->msg_format];
1586
1587         /* Allocate and set up urbs for each one that is in use,
1588            starting with instat endpoints */
1589         s_priv->instat_urb = keyspan_setup_urb
1590                 (serial, d_details->instat_endpoint, USB_DIR_IN,
1591                  serial, s_priv->instat_buf, INSTAT_BUFLEN,
1592                  cback->instat_callback);
1593
1594         s_priv->indat_urb = keyspan_setup_urb
1595                 (serial, d_details->indat_endpoint, USB_DIR_IN,
1596                  serial, s_priv->indat_buf, INDAT49W_BUFLEN,
1597                  usa49wg_indat_callback);
1598
1599         s_priv->glocont_urb = keyspan_setup_urb
1600                 (serial, d_details->glocont_endpoint, USB_DIR_OUT,
1601                  serial, s_priv->glocont_buf, GLOCONT_BUFLEN,
1602                  cback->glocont_callback);
1603
1604         /* Setup endpoints for each port specific thing */
1605         for (i = 0; i < d_details->num_ports; i++) {
1606                 port = serial->port[i];
1607                 p_priv = usb_get_serial_port_data(port);
1608
1609                 /* Do indat endpoints first, once for each flip */
1610                 endp = d_details->indat_endpoints[i];
1611                 for (j = 0; j <= d_details->indat_endp_flip; ++j, ++endp) {
1612                         p_priv->in_urbs[j] = keyspan_setup_urb
1613                                 (serial, endp, USB_DIR_IN, port,
1614                                  p_priv->in_buffer[j], 64,
1615                                  cback->indat_callback);
1616                 }
1617                 for (; j < 2; ++j)
1618                         p_priv->in_urbs[j] = NULL;
1619
1620                 /* outdat endpoints also have flip */
1621                 endp = d_details->outdat_endpoints[i];
1622                 for (j = 0; j <= d_details->outdat_endp_flip; ++j, ++endp) {
1623                         p_priv->out_urbs[j] = keyspan_setup_urb
1624                                 (serial, endp, USB_DIR_OUT, port,
1625                                  p_priv->out_buffer[j], 64,
1626                                  cback->outdat_callback);
1627                 }
1628                 for (; j < 2; ++j)
1629                         p_priv->out_urbs[j] = NULL;
1630
1631                 /* inack endpoint */
1632                 p_priv->inack_urb = keyspan_setup_urb
1633                         (serial, d_details->inack_endpoints[i], USB_DIR_IN,
1634                          port, p_priv->inack_buffer, 1, cback->inack_callback);
1635
1636                 /* outcont endpoint */
1637                 p_priv->outcont_urb = keyspan_setup_urb
1638                         (serial, d_details->outcont_endpoints[i], USB_DIR_OUT,
1639                          port, p_priv->outcont_buffer, 64,
1640                          cback->outcont_callback);
1641         }
1642 }
1643
1644 /* usa19 function doesn't require prescaler */
1645 static int keyspan_usa19_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1646                                    u8 *rate_low, u8 *prescaler, int portnum)
1647 {
1648         u32     b16,    /* baud rate times 16 (actual rate used internally) */
1649                 div,    /* divisor */
1650                 cnt;    /* inverse of divisor (programmed into 8051) */
1651
1652         dbg("%s - %d.", __func__, baud_rate);
1653
1654         /* prevent divide by zero...  */
1655         b16 = baud_rate * 16L;
1656         if (b16 == 0)
1657                 return KEYSPAN_INVALID_BAUD_RATE;
1658         /* Any "standard" rate over 57k6 is marginal on the USA-19
1659            as we run out of divisor resolution. */
1660         if (baud_rate > 57600)
1661                 return KEYSPAN_INVALID_BAUD_RATE;
1662
1663         /* calculate the divisor and the counter (its inverse) */
1664         div = baudclk / b16;
1665         if (div == 0)
1666                 return KEYSPAN_INVALID_BAUD_RATE;
1667         else
1668                 cnt = 0 - div;
1669
1670         if (div > 0xffff)
1671                 return KEYSPAN_INVALID_BAUD_RATE;
1672
1673         /* return the counter values if non-null */
1674         if (rate_low)
1675                 *rate_low = (u8) (cnt & 0xff);
1676         if (rate_hi)
1677                 *rate_hi = (u8) ((cnt >> 8) & 0xff);
1678         if (rate_low && rate_hi)
1679                 dbg("%s - %d %02x %02x.",
1680                                 __func__, baud_rate, *rate_hi, *rate_low);
1681         return KEYSPAN_BAUD_RATE_OK;
1682 }
1683
1684 /* usa19hs function doesn't require prescaler */
1685 static int keyspan_usa19hs_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1686                                    u8 *rate_low, u8 *prescaler, int portnum)
1687 {
1688         u32     b16,    /* baud rate times 16 (actual rate used internally) */
1689                         div;    /* divisor */
1690
1691         dbg("%s - %d.", __func__, baud_rate);
1692
1693         /* prevent divide by zero...  */
1694         b16 = baud_rate * 16L;
1695         if (b16 == 0)
1696                 return KEYSPAN_INVALID_BAUD_RATE;
1697
1698         /* calculate the divisor */
1699         div = baudclk / b16;
1700         if (div == 0)
1701                 return KEYSPAN_INVALID_BAUD_RATE;
1702
1703         if (div > 0xffff)
1704                 return KEYSPAN_INVALID_BAUD_RATE;
1705
1706         /* return the counter values if non-null */
1707         if (rate_low)
1708                 *rate_low = (u8) (div & 0xff);
1709
1710         if (rate_hi)
1711                 *rate_hi = (u8) ((div >> 8) & 0xff);
1712
1713         if (rate_low && rate_hi)
1714                 dbg("%s - %d %02x %02x.",
1715                         __func__, baud_rate, *rate_hi, *rate_low);
1716
1717         return KEYSPAN_BAUD_RATE_OK;
1718 }
1719
1720 static int keyspan_usa19w_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1721                                     u8 *rate_low, u8 *prescaler, int portnum)
1722 {
1723         u32     b16,    /* baud rate times 16 (actual rate used internally) */
1724                 clk,    /* clock with 13/8 prescaler */
1725                 div,    /* divisor using 13/8 prescaler */
1726                 res,    /* resulting baud rate using 13/8 prescaler */
1727                 diff,   /* error using 13/8 prescaler */
1728                 smallest_diff;
1729         u8      best_prescaler;
1730         int     i;
1731
1732         dbg("%s - %d.", __func__, baud_rate);
1733
1734         /* prevent divide by zero */
1735         b16 = baud_rate * 16L;
1736         if (b16 == 0)
1737                 return KEYSPAN_INVALID_BAUD_RATE;
1738
1739         /* Calculate prescaler by trying them all and looking
1740            for best fit */
1741
1742         /* start with largest possible difference */
1743         smallest_diff = 0xffffffff;
1744
1745                 /* 0 is an invalid prescaler, used as a flag */
1746         best_prescaler = 0;
1747
1748         for (i = 8; i <= 0xff; ++i) {
1749                 clk = (baudclk * 8) / (u32) i;
1750
1751                 div = clk / b16;
1752                 if (div == 0)
1753                         continue;
1754
1755                 res = clk / div;
1756                 diff = (res > b16) ? (res-b16) : (b16-res);
1757
1758                 if (diff < smallest_diff) {
1759                         best_prescaler = i;
1760                         smallest_diff = diff;
1761                 }
1762         }
1763
1764         if (best_prescaler == 0)
1765                 return KEYSPAN_INVALID_BAUD_RATE;
1766
1767         clk = (baudclk * 8) / (u32) best_prescaler;
1768         div = clk / b16;
1769
1770         /* return the divisor and prescaler if non-null */
1771         if (rate_low)
1772                 *rate_low = (u8) (div & 0xff);
1773         if (rate_hi)
1774                 *rate_hi = (u8) ((div >> 8) & 0xff);
1775         if (prescaler) {
1776                 *prescaler = best_prescaler;
1777                 /*  dbg("%s - %d %d", __func__, *prescaler, div); */
1778         }
1779         return KEYSPAN_BAUD_RATE_OK;
1780 }
1781
1782         /* USA-28 supports different maximum baud rates on each port */
1783 static int keyspan_usa28_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1784                                     u8 *rate_low, u8 *prescaler, int portnum)
1785 {
1786         u32     b16,    /* baud rate times 16 (actual rate used internally) */
1787                 div,    /* divisor */
1788                 cnt;    /* inverse of divisor (programmed into 8051) */
1789
1790         dbg("%s - %d.", __func__, baud_rate);
1791
1792                 /* prevent divide by zero */
1793         b16 = baud_rate * 16L;
1794         if (b16 == 0)
1795                 return KEYSPAN_INVALID_BAUD_RATE;
1796
1797         /* calculate the divisor and the counter (its inverse) */
1798         div = KEYSPAN_USA28_BAUDCLK / b16;
1799         if (div == 0)
1800                 return KEYSPAN_INVALID_BAUD_RATE;
1801         else
1802                 cnt = 0 - div;
1803
1804         /* check for out of range, based on portnum,
1805            and return result */
1806         if (portnum == 0) {
1807                 if (div > 0xffff)
1808                         return KEYSPAN_INVALID_BAUD_RATE;
1809         } else {
1810                 if (portnum == 1) {
1811                         if (div > 0xff)
1812                                 return KEYSPAN_INVALID_BAUD_RATE;
1813                 } else
1814                         return KEYSPAN_INVALID_BAUD_RATE;
1815         }
1816
1817                 /* return the counter values if not NULL
1818                    (port 1 will ignore retHi) */
1819         if (rate_low)
1820                 *rate_low = (u8) (cnt & 0xff);
1821         if (rate_hi)
1822                 *rate_hi = (u8) ((cnt >> 8) & 0xff);
1823         dbg("%s - %d OK.", __func__, baud_rate);
1824         return KEYSPAN_BAUD_RATE_OK;
1825 }
1826
1827 static int keyspan_usa26_send_setup(struct usb_serial *serial,
1828                                     struct usb_serial_port *port,
1829                                     int reset_port)
1830 {
1831         struct keyspan_usa26_portControlMessage msg;
1832         struct keyspan_serial_private           *s_priv;
1833         struct keyspan_port_private             *p_priv;
1834         const struct keyspan_device_details     *d_details;
1835         int                                     outcont_urb;
1836         struct urb                              *this_urb;
1837         int                                     device_port, err;
1838
1839         dbg("%s reset=%d", __func__, reset_port);
1840
1841         s_priv = usb_get_serial_data(serial);
1842         p_priv = usb_get_serial_port_data(port);
1843         d_details = s_priv->device_details;
1844         device_port = port->number - port->serial->minor;
1845
1846         outcont_urb = d_details->outcont_endpoints[port->number];
1847         this_urb = p_priv->outcont_urb;
1848
1849         dbg("%s - endpoint %d", __func__, usb_pipeendpoint(this_urb->pipe));
1850
1851                 /* Make sure we have an urb then send the message */
1852         if (this_urb == NULL) {
1853                 dbg("%s - oops no urb.", __func__);
1854                 return -1;
1855         }
1856
1857         /* Save reset port val for resend.
1858            Don't overwrite resend for open/close condition. */
1859         if ((reset_port + 1) > p_priv->resend_cont)
1860                 p_priv->resend_cont = reset_port + 1;
1861         if (this_urb->status == -EINPROGRESS) {
1862                 /*  dbg("%s - already writing", __func__); */
1863                 mdelay(5);
1864                 return -1;
1865         }
1866
1867         memset(&msg, 0, sizeof(struct keyspan_usa26_portControlMessage));
1868
1869         /* Only set baud rate if it's changed */
1870         if (p_priv->old_baud != p_priv->baud) {
1871                 p_priv->old_baud = p_priv->baud;
1872                 msg.setClocking = 0xff;
1873                 if (d_details->calculate_baud_rate
1874                     (p_priv->baud, d_details->baudclk, &msg.baudHi,
1875                      &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1876                         dbg("%s - Invalid baud rate %d requested, using 9600.",
1877                                                 __func__, p_priv->baud);
1878                         msg.baudLo = 0;
1879                         msg.baudHi = 125;       /* Values for 9600 baud */
1880                         msg.prescaler = 10;
1881                 }
1882                 msg.setPrescaler = 0xff;
1883         }
1884
1885         msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
1886         switch (p_priv->cflag & CSIZE) {
1887         case CS5:
1888                 msg.lcr |= USA_DATABITS_5;
1889                 break;
1890         case CS6:
1891                 msg.lcr |= USA_DATABITS_6;
1892                 break;
1893         case CS7:
1894                 msg.lcr |= USA_DATABITS_7;
1895                 break;
1896         case CS8:
1897                 msg.lcr |= USA_DATABITS_8;
1898                 break;
1899         }
1900         if (p_priv->cflag & PARENB) {
1901                 /* note USA_PARITY_NONE == 0 */
1902                 msg.lcr |= (p_priv->cflag & PARODD)?
1903                         USA_PARITY_ODD : USA_PARITY_EVEN;
1904         }
1905         msg.setLcr = 0xff;
1906
1907         msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1908         msg.xonFlowControl = 0;
1909         msg.setFlowControl = 0xff;
1910         msg.forwardingLength = 16;
1911         msg.xonChar = 17;
1912         msg.xoffChar = 19;
1913
1914         /* Opening port */
1915         if (reset_port == 1) {
1916                 msg._txOn = 1;
1917                 msg._txOff = 0;
1918                 msg.txFlush = 0;
1919                 msg.txBreak = 0;
1920                 msg.rxOn = 1;
1921                 msg.rxOff = 0;
1922                 msg.rxFlush = 1;
1923                 msg.rxForward = 0;
1924                 msg.returnStatus = 0;
1925                 msg.resetDataToggle = 0xff;
1926         }
1927
1928         /* Closing port */
1929         else if (reset_port == 2) {
1930                 msg._txOn = 0;
1931                 msg._txOff = 1;
1932                 msg.txFlush = 0;
1933                 msg.txBreak = 0;
1934                 msg.rxOn = 0;
1935                 msg.rxOff = 1;
1936                 msg.rxFlush = 1;
1937                 msg.rxForward = 0;
1938                 msg.returnStatus = 0;
1939                 msg.resetDataToggle = 0;
1940         }
1941
1942         /* Sending intermediate configs */
1943         else {
1944                 msg._txOn = (!p_priv->break_on);
1945                 msg._txOff = 0;
1946                 msg.txFlush = 0;
1947                 msg.txBreak = (p_priv->break_on);
1948                 msg.rxOn = 0;
1949                 msg.rxOff = 0;
1950                 msg.rxFlush = 0;
1951                 msg.rxForward = 0;
1952                 msg.returnStatus = 0;
1953                 msg.resetDataToggle = 0x0;
1954         }
1955
1956         /* Do handshaking outputs */
1957         msg.setTxTriState_setRts = 0xff;
1958         msg.txTriState_rts = p_priv->rts_state;
1959
1960         msg.setHskoa_setDtr = 0xff;
1961         msg.hskoa_dtr = p_priv->dtr_state;
1962
1963         p_priv->resend_cont = 0;
1964         memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1965
1966         /* send the data out the device on control endpoint */
1967         this_urb->transfer_buffer_length = sizeof(msg);
1968
1969         this_urb->dev = serial->dev;
1970         err = usb_submit_urb(this_urb, GFP_ATOMIC);
1971         if (err != 0)
1972                 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
1973 #if 0
1974         else {
1975                 dbg("%s - usb_submit_urb(%d) OK %d bytes (end %d)", __func__
1976                     outcont_urb, this_urb->transfer_buffer_length,
1977                     usb_pipeendpoint(this_urb->pipe));
1978         }
1979 #endif
1980
1981         return 0;
1982 }
1983
1984 static int keyspan_usa28_send_setup(struct usb_serial *serial,
1985                                     struct usb_serial_port *port,
1986                                     int reset_port)
1987 {
1988         struct keyspan_usa28_portControlMessage msg;
1989         struct keyspan_serial_private           *s_priv;
1990         struct keyspan_port_private             *p_priv;
1991         const struct keyspan_device_details     *d_details;
1992         struct urb                              *this_urb;
1993         int                                     device_port, err;
1994
1995         dbg("%s", __func__);
1996
1997         s_priv = usb_get_serial_data(serial);
1998         p_priv = usb_get_serial_port_data(port);
1999         d_details = s_priv->device_details;
2000         device_port = port->number - port->serial->minor;
2001
2002         /* only do something if we have a bulk out endpoint */
2003         this_urb = p_priv->outcont_urb;
2004         if (this_urb == NULL) {
2005                 dbg("%s - oops no urb.", __func__);
2006                 return -1;
2007         }
2008
2009         /* Save reset port val for resend.
2010            Don't overwrite resend for open/close condition. */
2011         if ((reset_port + 1) > p_priv->resend_cont)
2012                 p_priv->resend_cont = reset_port + 1;
2013         if (this_urb->status == -EINPROGRESS) {
2014                 dbg("%s already writing", __func__);
2015                 mdelay(5);
2016                 return -1;
2017         }
2018
2019         memset(&msg, 0, sizeof(struct keyspan_usa28_portControlMessage));
2020
2021         msg.setBaudRate = 1;
2022         if (d_details->calculate_baud_rate(p_priv->baud, d_details->baudclk,
2023                 &msg.baudHi, &msg.baudLo, NULL, device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2024                 dbg("%s - Invalid baud rate requested %d.",
2025                                                 __func__, p_priv->baud);
2026                 msg.baudLo = 0xff;
2027                 msg.baudHi = 0xb2;      /* Values for 9600 baud */
2028         }
2029
2030         /* If parity is enabled, we must calculate it ourselves. */
2031         msg.parity = 0;         /* XXX for now */
2032
2033         msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2034         msg.xonFlowControl = 0;
2035
2036         /* Do handshaking outputs, DTR is inverted relative to RTS */
2037         msg.rts = p_priv->rts_state;
2038         msg.dtr = p_priv->dtr_state;
2039
2040         msg.forwardingLength = 16;
2041         msg.forwardMs = 10;
2042         msg.breakThreshold = 45;
2043         msg.xonChar = 17;
2044         msg.xoffChar = 19;
2045
2046         /*msg.returnStatus = 1;
2047         msg.resetDataToggle = 0xff;*/
2048         /* Opening port */
2049         if (reset_port == 1) {
2050                 msg._txOn = 1;
2051                 msg._txOff = 0;
2052                 msg.txFlush = 0;
2053                 msg.txForceXoff = 0;
2054                 msg.txBreak = 0;
2055                 msg.rxOn = 1;
2056                 msg.rxOff = 0;
2057                 msg.rxFlush = 1;
2058                 msg.rxForward = 0;
2059                 msg.returnStatus = 0;
2060                 msg.resetDataToggle = 0xff;
2061         }
2062         /* Closing port */
2063         else if (reset_port == 2) {
2064                 msg._txOn = 0;
2065                 msg._txOff = 1;
2066                 msg.txFlush = 0;
2067                 msg.txForceXoff = 0;
2068                 msg.txBreak = 0;
2069                 msg.rxOn = 0;
2070                 msg.rxOff = 1;
2071                 msg.rxFlush = 1;
2072                 msg.rxForward = 0;
2073                 msg.returnStatus = 0;
2074                 msg.resetDataToggle = 0;
2075         }
2076         /* Sending intermediate configs */
2077         else {
2078                 msg._txOn = (!p_priv->break_on);
2079                 msg._txOff = 0;
2080                 msg.txFlush = 0;
2081                 msg.txForceXoff = 0;
2082                 msg.txBreak = (p_priv->break_on);
2083                 msg.rxOn = 0;
2084                 msg.rxOff = 0;
2085                 msg.rxFlush = 0;
2086                 msg.rxForward = 0;
2087                 msg.returnStatus = 0;
2088                 msg.resetDataToggle = 0x0;
2089         }
2090
2091         p_priv->resend_cont = 0;
2092         memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2093
2094         /* send the data out the device on control endpoint */
2095         this_urb->transfer_buffer_length = sizeof(msg);
2096
2097         this_urb->dev = serial->dev;
2098         err = usb_submit_urb(this_urb, GFP_ATOMIC);
2099         if (err != 0)
2100                 dbg("%s - usb_submit_urb(setup) failed", __func__);
2101 #if 0
2102         else {
2103                 dbg("%s - usb_submit_urb(setup) OK %d bytes", __func__,
2104                     this_urb->transfer_buffer_length);
2105         }
2106 #endif
2107
2108         return 0;
2109 }
2110
2111 static int keyspan_usa49_send_setup(struct usb_serial *serial,
2112                                     struct usb_serial_port *port,
2113                                     int reset_port)
2114 {
2115         struct keyspan_usa49_portControlMessage msg;
2116         struct usb_ctrlrequest                  *dr = NULL;
2117         struct keyspan_serial_private           *s_priv;
2118         struct keyspan_port_private             *p_priv;
2119         const struct keyspan_device_details     *d_details;
2120         struct urb                              *this_urb;
2121         int                                     err, device_port;
2122
2123         dbg("%s", __func__);
2124
2125         s_priv = usb_get_serial_data(serial);
2126         p_priv = usb_get_serial_port_data(port);
2127         d_details = s_priv->device_details;
2128
2129         this_urb = s_priv->glocont_urb;
2130
2131         /* Work out which port within the device is being setup */
2132         device_port = port->number - port->serial->minor;
2133
2134         dbg("%s - endpoint %d port %d (%d)",
2135                         __func__, usb_pipeendpoint(this_urb->pipe),
2136                         port->number, device_port);
2137
2138                 /* Make sure we have an urb then send the message */
2139         if (this_urb == NULL) {
2140                 dbg("%s - oops no urb for port %d.", __func__, port->number);
2141                 return -1;
2142         }
2143
2144         /* Save reset port val for resend.
2145            Don't overwrite resend for open/close condition. */
2146         if ((reset_port + 1) > p_priv->resend_cont)
2147                 p_priv->resend_cont = reset_port + 1;
2148
2149         if (this_urb->status == -EINPROGRESS) {
2150                 /*  dbg("%s - already writing", __func__); */
2151                 mdelay(5);
2152                 return -1;
2153         }
2154
2155         memset(&msg, 0, sizeof(struct keyspan_usa49_portControlMessage));
2156
2157         /*msg.portNumber = port->number;*/
2158         msg.portNumber = device_port;
2159
2160         /* Only set baud rate if it's changed */
2161         if (p_priv->old_baud != p_priv->baud) {
2162                 p_priv->old_baud = p_priv->baud;
2163                 msg.setClocking = 0xff;
2164                 if (d_details->calculate_baud_rate
2165                     (p_priv->baud, d_details->baudclk, &msg.baudHi,
2166                      &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2167                         dbg("%s - Invalid baud rate %d requested, using 9600.",
2168                                                 __func__, p_priv->baud);
2169                         msg.baudLo = 0;
2170                         msg.baudHi = 125;       /* Values for 9600 baud */
2171                         msg.prescaler = 10;
2172                 }
2173                 /* msg.setPrescaler = 0xff; */
2174         }
2175
2176         msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
2177         switch (p_priv->cflag & CSIZE) {
2178         case CS5:
2179                 msg.lcr |= USA_DATABITS_5;
2180                 break;
2181         case CS6:
2182                 msg.lcr |= USA_DATABITS_6;
2183                 break;
2184         case CS7:
2185                 msg.lcr |= USA_DATABITS_7;
2186                 break;
2187         case CS8:
2188                 msg.lcr |= USA_DATABITS_8;
2189                 break;
2190         }
2191         if (p_priv->cflag & PARENB) {
2192                 /* note USA_PARITY_NONE == 0 */
2193                 msg.lcr |= (p_priv->cflag & PARODD)?
2194                         USA_PARITY_ODD : USA_PARITY_EVEN;
2195         }
2196         msg.setLcr = 0xff;
2197
2198         msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2199         msg.xonFlowControl = 0;
2200         msg.setFlowControl = 0xff;
2201
2202         msg.forwardingLength = 16;
2203         msg.xonChar = 17;
2204         msg.xoffChar = 19;
2205
2206         /* Opening port */
2207         if (reset_port == 1) {
2208                 msg._txOn = 1;
2209                 msg._txOff = 0;
2210                 msg.txFlush = 0;
2211                 msg.txBreak = 0;
2212                 msg.rxOn = 1;
2213                 msg.rxOff = 0;
2214                 msg.rxFlush = 1;
2215                 msg.rxForward = 0;
2216                 msg.returnStatus = 0;
2217                 msg.resetDataToggle = 0xff;
2218                 msg.enablePort = 1;
2219                 msg.disablePort = 0;
2220         }
2221         /* Closing port */
2222         else if (reset_port == 2) {
2223                 msg._txOn = 0;
2224                 msg._txOff = 1;
2225                 msg.txFlush = 0;
2226                 msg.txBreak = 0;
2227                 msg.rxOn = 0;
2228                 msg.rxOff = 1;
2229                 msg.rxFlush = 1;
2230                 msg.rxForward = 0;
2231                 msg.returnStatus = 0;
2232                 msg.resetDataToggle = 0;
2233                 msg.enablePort = 0;
2234                 msg.disablePort = 1;
2235         }
2236         /* Sending intermediate configs */
2237         else {
2238                 msg._txOn = (!p_priv->break_on);
2239                 msg._txOff = 0;
2240                 msg.txFlush = 0;
2241                 msg.txBreak = (p_priv->break_on);
2242                 msg.rxOn = 0;
2243                 msg.rxOff = 0;
2244                 msg.rxFlush = 0;
2245                 msg.rxForward = 0;
2246                 msg.returnStatus = 0;
2247                 msg.resetDataToggle = 0x0;
2248                 msg.enablePort = 0;
2249                 msg.disablePort = 0;
2250         }
2251
2252         /* Do handshaking outputs */
2253         msg.setRts = 0xff;
2254         msg.rts = p_priv->rts_state;
2255
2256         msg.setDtr = 0xff;
2257         msg.dtr = p_priv->dtr_state;
2258
2259         p_priv->resend_cont = 0;
2260
2261         /* if the device is a 49wg, we send control message on usb
2262            control EP 0 */
2263
2264         if (d_details->product_id == keyspan_usa49wg_product_id) {
2265                 dr = (void *)(s_priv->ctrl_buf);
2266                 dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT;
2267                 dr->bRequest = 0xB0;    /* 49wg control message */;
2268                 dr->wValue = 0;
2269                 dr->wIndex = 0;
2270                 dr->wLength = cpu_to_le16(sizeof(msg));
2271
2272                 memcpy(s_priv->glocont_buf, &msg, sizeof(msg));
2273
2274                 usb_fill_control_urb(this_urb, serial->dev,
2275                                 usb_sndctrlpipe(serial->dev, 0),
2276                                 (unsigned char *)dr, s_priv->glocont_buf,
2277                                 sizeof(msg), usa49_glocont_callback, serial);
2278
2279         } else {
2280                 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2281
2282                 /* send the data out the device on control endpoint */
2283                 this_urb->transfer_buffer_length = sizeof(msg);
2284
2285                 this_urb->dev = serial->dev;
2286         }
2287         err = usb_submit_urb(this_urb, GFP_ATOMIC);
2288         if (err != 0)
2289                 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
2290 #if 0
2291         else {
2292                 dbg("%s - usb_submit_urb(%d) OK %d bytes (end %d)", __func__,
2293                            outcont_urb, this_urb->transfer_buffer_length,
2294                            usb_pipeendpoint(this_urb->pipe));
2295         }
2296 #endif
2297
2298         return 0;
2299 }
2300
2301 static int keyspan_usa90_send_setup(struct usb_serial *serial,
2302                                     struct usb_serial_port *port,
2303                                     int reset_port)
2304 {
2305         struct keyspan_usa90_portControlMessage msg;
2306         struct keyspan_serial_private           *s_priv;
2307         struct keyspan_port_private             *p_priv;
2308         const struct keyspan_device_details     *d_details;
2309         struct urb                              *this_urb;
2310         int                                     err;
2311         u8                                              prescaler;
2312
2313         dbg("%s", __func__);
2314
2315         s_priv = usb_get_serial_data(serial);
2316         p_priv = usb_get_serial_port_data(port);
2317         d_details = s_priv->device_details;
2318
2319         /* only do something if we have a bulk out endpoint */
2320         this_urb = p_priv->outcont_urb;
2321         if (this_urb == NULL) {
2322                 dbg("%s - oops no urb.", __func__);
2323                 return -1;
2324         }
2325
2326         /* Save reset port val for resend.
2327            Don't overwrite resend for open/close condition. */
2328         if ((reset_port + 1) > p_priv->resend_cont)
2329                 p_priv->resend_cont = reset_port + 1;
2330         if (this_urb->status == -EINPROGRESS) {
2331                 dbg("%s already writing", __func__);
2332                 mdelay(5);
2333                 return -1;
2334         }
2335
2336         memset(&msg, 0, sizeof(struct keyspan_usa90_portControlMessage));
2337
2338         /* Only set baud rate if it's changed */
2339         if (p_priv->old_baud != p_priv->baud) {
2340                 p_priv->old_baud = p_priv->baud;
2341                 msg.setClocking = 0x01;
2342                 if (d_details->calculate_baud_rate
2343                     (p_priv->baud, d_details->baudclk, &msg.baudHi,
2344                      &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE) {
2345                         dbg("%s - Invalid baud rate %d requested, using 9600.",
2346                                                 __func__, p_priv->baud);
2347                         p_priv->baud = 9600;
2348                         d_details->calculate_baud_rate(p_priv->baud, d_details->baudclk,
2349                                 &msg.baudHi, &msg.baudLo, &prescaler, 0);
2350                 }
2351                 msg.setRxMode = 1;
2352                 msg.setTxMode = 1;
2353         }
2354
2355         /* modes must always be correctly specified */
2356         if (p_priv->baud > 57600) {
2357                 msg.rxMode = RXMODE_DMA;
2358                 msg.txMode = TXMODE_DMA;
2359         } else {
2360                 msg.rxMode = RXMODE_BYHAND;
2361                 msg.txMode = TXMODE_BYHAND;
2362         }
2363
2364         msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
2365         switch (p_priv->cflag & CSIZE) {
2366         case CS5:
2367                 msg.lcr |= USA_DATABITS_5;
2368                 break;
2369         case CS6:
2370                 msg.lcr |= USA_DATABITS_6;
2371                 break;
2372         case CS7:
2373                 msg.lcr |= USA_DATABITS_7;
2374                 break;
2375         case CS8:
2376                 msg.lcr |= USA_DATABITS_8;
2377                 break;
2378         }
2379         if (p_priv->cflag & PARENB) {
2380                 /* note USA_PARITY_NONE == 0 */
2381                 msg.lcr |= (p_priv->cflag & PARODD)?
2382                         USA_PARITY_ODD : USA_PARITY_EVEN;
2383         }
2384         if (p_priv->old_cflag != p_priv->cflag) {
2385                 p_priv->old_cflag = p_priv->cflag;
2386                 msg.setLcr = 0x01;
2387         }
2388
2389         if (p_priv->flow_control == flow_cts)
2390                 msg.txFlowControl = TXFLOW_CTS;
2391         msg.setTxFlowControl = 0x01;
2392         msg.setRxFlowControl = 0x01;
2393
2394         msg.rxForwardingLength = 16;
2395         msg.rxForwardingTimeout = 16;
2396         msg.txAckSetting = 0;
2397         msg.xonChar = 17;
2398         msg.xoffChar = 19;
2399
2400         /* Opening port */
2401         if (reset_port == 1) {
2402                 msg.portEnabled = 1;
2403                 msg.rxFlush = 1;
2404                 msg.txBreak = (p_priv->break_on);
2405         }
2406         /* Closing port */
2407         else if (reset_port == 2)
2408                 msg.portEnabled = 0;
2409         /* Sending intermediate configs */
2410         else {
2411                 if (port->port.count)
2412                         msg.portEnabled = 1;
2413                 msg.txBreak = (p_priv->break_on);
2414         }
2415
2416         /* Do handshaking outputs */
2417         msg.setRts = 0x01;
2418         msg.rts = p_priv->rts_state;
2419
2420         msg.setDtr = 0x01;
2421         msg.dtr = p_priv->dtr_state;
2422
2423         p_priv->resend_cont = 0;
2424         memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2425
2426         /* send the data out the device on control endpoint */
2427         this_urb->transfer_buffer_length = sizeof(msg);
2428
2429         this_urb->dev = serial->dev;
2430         err = usb_submit_urb(this_urb, GFP_ATOMIC);
2431         if (err != 0)
2432                 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
2433         return 0;
2434 }
2435
2436 static int keyspan_usa67_send_setup(struct usb_serial *serial,
2437                                     struct usb_serial_port *port,
2438                                     int reset_port)
2439 {
2440         struct keyspan_usa67_portControlMessage msg;
2441         struct keyspan_serial_private           *s_priv;
2442         struct keyspan_port_private             *p_priv;
2443         const struct keyspan_device_details     *d_details;
2444         struct urb                              *this_urb;
2445         int                                     err, device_port;
2446
2447         dbg("%s", __func__);
2448
2449         s_priv = usb_get_serial_data(serial);
2450         p_priv = usb_get_serial_port_data(port);
2451         d_details = s_priv->device_details;
2452
2453         this_urb = s_priv->glocont_urb;
2454
2455         /* Work out which port within the device is being setup */
2456         device_port = port->number - port->serial->minor;
2457
2458         /* Make sure we have an urb then send the message */
2459         if (this_urb == NULL) {
2460                 dbg("%s - oops no urb for port %d.", __func__,
2461                         port->number);
2462                 return -1;
2463         }
2464
2465         /* Save reset port val for resend.
2466            Don't overwrite resend for open/close condition. */
2467         if ((reset_port + 1) > p_priv->resend_cont)
2468                 p_priv->resend_cont = reset_port + 1;
2469         if (this_urb->status == -EINPROGRESS) {
2470                 /*  dbg("%s - already writing", __func__); */
2471                 mdelay(5);
2472                 return -1;
2473         }
2474
2475         memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage));
2476
2477         msg.port = device_port;
2478
2479         /* Only set baud rate if it's changed */
2480         if (p_priv->old_baud != p_priv->baud) {
2481                 p_priv->old_baud = p_priv->baud;
2482                 msg.setClocking = 0xff;
2483                 if (d_details->calculate_baud_rate
2484                     (p_priv->baud, d_details->baudclk, &msg.baudHi,
2485                      &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2486                         dbg("%s - Invalid baud rate %d requested, using 9600.",
2487                                                 __func__, p_priv->baud);
2488                         msg.baudLo = 0;
2489                         msg.baudHi = 125;       /* Values for 9600 baud */
2490                         msg.prescaler = 10;
2491                 }
2492                 msg.setPrescaler = 0xff;
2493         }
2494
2495         msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2496         switch (p_priv->cflag & CSIZE) {
2497         case CS5:
2498                 msg.lcr |= USA_DATABITS_5;
2499                 break;
2500         case CS6:
2501                 msg.lcr |= USA_DATABITS_6;
2502                 break;
2503         case CS7:
2504                 msg.lcr |= USA_DATABITS_7;
2505                 break;
2506         case CS8:
2507                 msg.lcr |= USA_DATABITS_8;
2508                 break;
2509         }
2510         if (p_priv->cflag & PARENB) {
2511                 /* note USA_PARITY_NONE == 0 */
2512                 msg.lcr |= (p_priv->cflag & PARODD)?
2513                                         USA_PARITY_ODD : USA_PARITY_EVEN;
2514         }
2515         msg.setLcr = 0xff;
2516
2517         msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2518         msg.xonFlowControl = 0;
2519         msg.setFlowControl = 0xff;
2520         msg.forwardingLength = 16;
2521         msg.xonChar = 17;
2522         msg.xoffChar = 19;
2523
2524         if (reset_port == 1) {
2525                 /* Opening port */
2526                 msg._txOn = 1;
2527                 msg._txOff = 0;
2528                 msg.txFlush = 0;
2529                 msg.txBreak = 0;
2530                 msg.rxOn = 1;
2531                 msg.rxOff = 0;
2532                 msg.rxFlush = 1;
2533                 msg.rxForward = 0;
2534                 msg.returnStatus = 0;
2535                 msg.resetDataToggle = 0xff;
2536         } else if (reset_port == 2) {
2537                 /* Closing port */
2538                 msg._txOn = 0;
2539                 msg._txOff = 1;
2540                 msg.txFlush = 0;
2541                 msg.txBreak = 0;
2542                 msg.rxOn = 0;
2543                 msg.rxOff = 1;
2544                 msg.rxFlush = 1;
2545                 msg.rxForward = 0;
2546                 msg.returnStatus = 0;
2547                 msg.resetDataToggle = 0;
2548         } else {
2549                 /* Sending intermediate configs */
2550                 msg._txOn = (!p_priv->break_on);
2551                 msg._txOff = 0;
2552                 msg.txFlush = 0;
2553                 msg.txBreak = (p_priv->break_on);
2554                 msg.rxOn = 0;
2555                 msg.rxOff = 0;
2556                 msg.rxFlush = 0;
2557                 msg.rxForward = 0;
2558                 msg.returnStatus = 0;
2559                 msg.resetDataToggle = 0x0;
2560         }
2561
2562         /* Do handshaking outputs */
2563         msg.setTxTriState_setRts = 0xff;
2564         msg.txTriState_rts = p_priv->rts_state;
2565
2566         msg.setHskoa_setDtr = 0xff;
2567         msg.hskoa_dtr = p_priv->dtr_state;
2568
2569         p_priv->resend_cont = 0;
2570
2571         memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2572
2573         /* send the data out the device on control endpoint */
2574         this_urb->transfer_buffer_length = sizeof(msg);
2575         this_urb->dev = serial->dev;
2576
2577         err = usb_submit_urb(this_urb, GFP_ATOMIC);
2578         if (err != 0)
2579                 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__,
2580                                 err);
2581         return 0;
2582 }
2583
2584 static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2585 {
2586         struct usb_serial *serial = port->serial;
2587         struct keyspan_serial_private *s_priv;
2588         const struct keyspan_device_details *d_details;
2589
2590         dbg("%s", __func__);
2591
2592         s_priv = usb_get_serial_data(serial);
2593         d_details = s_priv->device_details;
2594
2595         switch (d_details->msg_format) {
2596         case msg_usa26:
2597                 keyspan_usa26_send_setup(serial, port, reset_port);
2598                 break;
2599         case msg_usa28:
2600                 keyspan_usa28_send_setup(serial, port, reset_port);
2601                 break;
2602         case msg_usa49:
2603                 keyspan_usa49_send_setup(serial, port, reset_port);
2604                 break;
2605         case msg_usa90:
2606                 keyspan_usa90_send_setup(serial, port, reset_port);
2607                 break;
2608         case msg_usa67:
2609                 keyspan_usa67_send_setup(serial, port, reset_port);
2610                 break;
2611         }
2612 }
2613
2614
2615 /* Gets called by the "real" driver (ie once firmware is loaded
2616    and renumeration has taken place. */
2617 static int keyspan_startup(struct usb_serial *serial)
2618 {
2619         int                             i, err;
2620         struct usb_serial_port          *port;
2621         struct keyspan_serial_private   *s_priv;
2622         struct keyspan_port_private     *p_priv;
2623         const struct keyspan_device_details     *d_details;
2624
2625         dbg("%s", __func__);
2626
2627         for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i)
2628                 if (d_details->product_id ==
2629                                 le16_to_cpu(serial->dev->descriptor.idProduct))
2630                         break;
2631         if (d_details == NULL) {
2632                 dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
2633                     __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
2634                 return 1;
2635         }
2636
2637         /* Setup private data for serial driver */
2638         s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL);
2639         if (!s_priv) {
2640                 dbg("%s - kmalloc for keyspan_serial_private failed.",
2641                                                                 __func__);
2642                 return -ENOMEM;
2643         }
2644
2645         s_priv->device_details = d_details;
2646         usb_set_serial_data(serial, s_priv);
2647
2648         /* Now setup per port private data */
2649         for (i = 0; i < serial->num_ports; i++) {
2650                 port = serial->port[i];
2651                 p_priv = kzalloc(sizeof(struct keyspan_port_private),
2652                                                                 GFP_KERNEL);
2653                 if (!p_priv) {
2654                         dbg("%s - kmalloc for keyspan_port_private (%d) failed!.", __func__, i);
2655                         return 1;
2656                 }
2657                 p_priv->device_details = d_details;
2658                 usb_set_serial_port_data(port, p_priv);
2659         }
2660
2661         keyspan_setup_urbs(serial);
2662
2663         if (s_priv->instat_urb != NULL) {
2664                 s_priv->instat_urb->dev = serial->dev;
2665                 err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL);
2666                 if (err != 0)
2667                         dbg("%s - submit instat urb failed %d", __func__,
2668                                 err);
2669         }
2670         if (s_priv->indat_urb != NULL) {
2671                 s_priv->indat_urb->dev = serial->dev;
2672                 err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL);
2673                 if (err != 0)
2674                         dbg("%s - submit indat urb failed %d", __func__,
2675                                 err);
2676         }
2677
2678         return 0;
2679 }
2680
2681 static void keyspan_shutdown(struct usb_serial *serial)
2682 {
2683         int                             i, j;
2684         struct usb_serial_port          *port;
2685         struct keyspan_serial_private   *s_priv;
2686         struct keyspan_port_private     *p_priv;
2687
2688         dbg("%s", __func__);
2689
2690         s_priv = usb_get_serial_data(serial);
2691
2692         /* Stop reading/writing urbs */
2693         stop_urb(s_priv->instat_urb);
2694         stop_urb(s_priv->glocont_urb);
2695         stop_urb(s_priv->indat_urb);
2696         for (i = 0; i < serial->num_ports; ++i) {
2697                 port = serial->port[i];
2698                 p_priv = usb_get_serial_port_data(port);
2699                 stop_urb(p_priv->inack_urb);
2700                 stop_urb(p_priv->outcont_urb);
2701                 for (j = 0; j < 2; j++) {
2702                         stop_urb(p_priv->in_urbs[j]);
2703                         stop_urb(p_priv->out_urbs[j]);
2704                 }
2705         }
2706
2707         /* Now free them */
2708         usb_free_urb(s_priv->instat_urb);
2709         usb_free_urb(s_priv->indat_urb);
2710         usb_free_urb(s_priv->glocont_urb);
2711         for (i = 0; i < serial->num_ports; ++i) {
2712                 port = serial->port[i];
2713                 p_priv = usb_get_serial_port_data(port);
2714                 usb_free_urb(p_priv->inack_urb);
2715                 usb_free_urb(p_priv->outcont_urb);
2716                 for (j = 0; j < 2; j++) {
2717                         usb_free_urb(p_priv->in_urbs[j]);
2718                         usb_free_urb(p_priv->out_urbs[j]);
2719                 }
2720         }
2721
2722         /*  dbg("Freeing serial->private."); */
2723         kfree(s_priv);
2724
2725         /*  dbg("Freeing port->private."); */
2726         /* Now free per port private data */
2727         for (i = 0; i < serial->num_ports; i++) {
2728                 port = serial->port[i];
2729                 kfree(usb_get_serial_port_data(port));
2730         }
2731 }
2732
2733 MODULE_AUTHOR(DRIVER_AUTHOR);
2734 MODULE_DESCRIPTION(DRIVER_DESC);
2735 MODULE_LICENSE("GPL");
2736
2737 MODULE_FIRMWARE("keyspan/usa28.fw");
2738 MODULE_FIRMWARE("keyspan/usa28x.fw");
2739 MODULE_FIRMWARE("keyspan/usa28xa.fw");
2740 MODULE_FIRMWARE("keyspan/usa28xb.fw");
2741 MODULE_FIRMWARE("keyspan/usa19.fw");
2742 MODULE_FIRMWARE("keyspan/usa19qi.fw");
2743 MODULE_FIRMWARE("keyspan/mpr.fw");
2744 MODULE_FIRMWARE("keyspan/usa19qw.fw");
2745 MODULE_FIRMWARE("keyspan/usa18x.fw");
2746 MODULE_FIRMWARE("keyspan/usa19w.fw");
2747 MODULE_FIRMWARE("keyspan/usa49w.fw");
2748 MODULE_FIRMWARE("keyspan/usa49wlc.fw");
2749
2750 module_param(debug, bool, S_IRUGO | S_IWUSR);
2751 MODULE_PARM_DESC(debug, "Debug enabled or not");
2752