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