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