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