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