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