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