xref: /linux/drivers/usb/serial/keyspan.c (revision f7511d5f66f01fc451747b24e79f3ada7a3af9af)
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", __func__, port->number);
248 }
249 
250 
251 static void keyspan_rx_unthrottle (struct usb_serial_port *port)
252 {
253 	dbg("%s - port %d", __func__, 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", __func__);
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", __func__);
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 	    __func__, 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 :(", __func__);
393 			return count;
394 		}
395 
396 		dbg("%s - endpoint %d flip %d", __func__, 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", __func__);
439 
440 	endpoint = usb_pipeendpoint(urb->pipe);
441 
442 	if (status) {
443 		dbg("%s - nonzero status: %x on endpoint %d.",
444 		    __func__, status, endpoint);
445 		return;
446 	}
447 
448 	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!!!!", __func__);
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)", __func__, 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 =  urb->context;
494 	p_priv = usb_get_serial_port_data(port);
495 	dbg ("%s - urb %d", __func__, 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", __func__);
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 =  urb->context;
513 	p_priv = usb_get_serial_port_data(port);
514 
515 	if (p_priv->resend_cont) {
516 		dbg ("%s - sending setup", __func__);
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 =  urb->context;
532 
533 	if (status) {
534 		dbg("%s - nonzero status: %x", __func__, status);
535 		return;
536 	}
537 	if (urb->actual_length != 9) {
538 		dbg("%s - %d byte report??", __func__, 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 	    __func__, 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", __func__, 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)", __func__, err);
580 	}
581 exit: ;
582 }
583 
584 static void	usa26_glocont_callback(struct urb *urb)
585 {
586 	dbg ("%s", __func__);
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", __func__);
601 
602 	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 			    __func__, status, usb_pipeendpoint(urb->pipe));
613 			return;
614 		}
615 
616 		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)", __func__, 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", __func__);
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 =  urb->context;
651 	p_priv = usb_get_serial_port_data(port);
652 
653 	if (p_priv->resend_cont) {
654 		dbg ("%s - sending setup", __func__);
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 =  urb->context;
671 
672 	if (status) {
673 		dbg("%s - nonzero status: %x", __func__, status);
674 		return;
675 	}
676 
677 	if (urb->actual_length != sizeof(struct keyspan_usa28_portStatusMessage)) {
678 		dbg("%s - bad length %d", __func__, urb->actual_length);
679 		goto exit;
680 	}
681 
682 	/*dbg("%s %x %x %x %x %x %x %x %x %x %x %x %x", __func__
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", __func__, 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)", __func__, err);
717 	}
718 exit: ;
719 }
720 
721 static void	usa28_glocont_callback(struct urb *urb)
722 {
723 	dbg ("%s", __func__);
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", __func__);
735 
736 	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", __func__);
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", __func__);
763 
764 	serial =  urb->context;
765 
766 	if (status) {
767 		dbg("%s - nonzero status: %x", __func__, status);
768 		return;
769 	}
770 
771 	if (urb->actual_length != sizeof(struct keyspan_usa49_portStatusMessage)) {
772 		dbg("%s - bad length %d", __func__, urb->actual_length);
773 		goto exit;
774 	}
775 
776 	/*dbg(" %x %x %x %x %x %x %x %x %x %x %x", __func__,
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", __func__, 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)", __func__, err);
811 	}
812 exit:	;
813 }
814 
815 static void	usa49_inack_callback(struct urb *urb)
816 {
817 	dbg ("%s", __func__);
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", __func__);
830 
831 	endpoint = usb_pipeendpoint(urb->pipe);
832 
833 	if (status) {
834 		dbg("%s - nonzero status: %x on endpoint %d.", __func__,
835 		    status, endpoint);
836 		return;
837 	}
838 
839 	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)", __func__, 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", __func__);
883 
884 	serial = urb->context;
885 
886 	if (status) {
887 		dbg("%s - nonzero status: %x", __func__, 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 					__func__, 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)", __func__, 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", __func__);
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", __func__);
967 
968 	endpoint = usb_pipeendpoint(urb->pipe);
969 
970 	if (status) {
971 		dbg("%s - nonzero status: %x on endpoint %d.",
972 		    __func__, status, endpoint);
973 		return;
974 	}
975 
976 	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!!!!", __func__);
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)", __func__, 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 =  urb->context;
1041 
1042 	if (status) {
1043 		dbg("%s - nonzero status: %x", __func__, status);
1044 		return;
1045 	}
1046 	if (urb->actual_length < 14) {
1047 		dbg("%s - %d byte report??", __func__, 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)", __func__, 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 =  urb->context;
1088 	p_priv = usb_get_serial_port_data(port);
1089 
1090 	if (p_priv->resend_cont) {
1091 		dbg ("%s - sending setup", __func__);
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", __func__);
1109 
1110 	serial = urb->context;
1111 
1112 	if (status) {
1113 		dbg("%s - nonzero status: %x", __func__, status);
1114 		return;
1115 	}
1116 
1117 	if (urb->actual_length != sizeof(struct keyspan_usa67_portStatusMessage)) {
1118 		dbg("%s - bad length %d", __func__, 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", __func__, 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)", __func__, 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", __func__);
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", __func__);
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", __func__);
1187 	p_priv = usb_get_serial_port_data(port);
1188 	d_details = p_priv->device_details;
1189 
1190 	/* FIXME: locking */
1191 	if (d_details->msg_format == msg_usa90)
1192    		data_len = 64;
1193 	else
1194 		data_len = 63;
1195 
1196 	flip = p_priv->out_flip;
1197 
1198 	/* Check both endpoints to see if any are available. */
1199 	if ((this_urb = p_priv->out_urbs[flip]) != NULL) {
1200 		if (this_urb->status != -EINPROGRESS)
1201 			return (data_len);
1202 		flip = (flip + 1) & d_details->outdat_endp_flip;
1203 		if ((this_urb = p_priv->out_urbs[flip]) != NULL)
1204 			if (this_urb->status != -EINPROGRESS)
1205 				return (data_len);
1206 	}
1207 	return 0;
1208 }
1209 
1210 
1211 static int keyspan_chars_in_buffer (struct usb_serial_port *port)
1212 {
1213 	return 0;
1214 }
1215 
1216 
1217 static int keyspan_open (struct usb_serial_port *port, struct file *filp)
1218 {
1219 	struct keyspan_port_private 	*p_priv;
1220 	struct keyspan_serial_private 	*s_priv;
1221 	struct usb_serial 		*serial = port->serial;
1222 	const struct keyspan_device_details	*d_details;
1223 	int				i, err;
1224 	int				baud_rate, device_port;
1225 	struct urb			*urb;
1226 	unsigned int			cflag;
1227 
1228 	s_priv = usb_get_serial_data(serial);
1229 	p_priv = usb_get_serial_port_data(port);
1230 	d_details = p_priv->device_details;
1231 
1232 	dbg("%s - port%d.", __func__, port->number);
1233 
1234 	/* Set some sane defaults */
1235 	p_priv->rts_state = 1;
1236 	p_priv->dtr_state = 1;
1237 	p_priv->baud = 9600;
1238 
1239 	/* force baud and lcr to be set on open */
1240 	p_priv->old_baud = 0;
1241 	p_priv->old_cflag = 0;
1242 
1243 	p_priv->out_flip = 0;
1244 	p_priv->in_flip = 0;
1245 
1246 	/* Reset low level data toggle and start reading from endpoints */
1247 	for (i = 0; i < 2; i++) {
1248 		if ((urb = p_priv->in_urbs[i]) == NULL)
1249 			continue;
1250 		urb->dev = serial->dev;
1251 
1252 		/* make sure endpoint data toggle is synchronized with the device */
1253 
1254 		usb_clear_halt(urb->dev, urb->pipe);
1255 
1256 		if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
1257 			dbg("%s - submit urb %d failed (%d)", __func__, i, err);
1258 		}
1259 	}
1260 
1261 	/* Reset low level data toggle on out endpoints */
1262 	for (i = 0; i < 2; i++) {
1263 		if ((urb = p_priv->out_urbs[i]) == NULL)
1264 			continue;
1265 		urb->dev = serial->dev;
1266 		/* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe), 0); */
1267 	}
1268 
1269 	/* get the terminal config for the setup message now so we don't
1270 	 * need to send 2 of them */
1271 
1272 	cflag = port->tty->termios->c_cflag;
1273 	device_port = port->number - port->serial->minor;
1274 
1275 	/* Baud rate calculation takes baud rate as an integer
1276 	   so other rates can be generated if desired. */
1277 	baud_rate = tty_get_baud_rate(port->tty);
1278 	/* If no match or invalid, leave as default */
1279 	if (baud_rate >= 0
1280 	    && d_details->calculate_baud_rate(baud_rate, d_details->baudclk,
1281 				NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
1282 		p_priv->baud = baud_rate;
1283 	}
1284 
1285 	/* set CTS/RTS handshake etc. */
1286 	p_priv->cflag = cflag;
1287 	p_priv->flow_control = (cflag & CRTSCTS)? flow_cts: flow_none;
1288 
1289 	keyspan_send_setup(port, 1);
1290 	//mdelay(100);
1291 	//keyspan_set_termios(port, NULL);
1292 
1293 	return 0;
1294 }
1295 
1296 static inline void stop_urb(struct urb *urb)
1297 {
1298 	if (urb && urb->status == -EINPROGRESS)
1299 		usb_kill_urb(urb);
1300 }
1301 
1302 static void keyspan_close(struct usb_serial_port *port, struct file *filp)
1303 {
1304 	int			i;
1305 	struct usb_serial	*serial = port->serial;
1306 	struct keyspan_serial_private 	*s_priv;
1307 	struct keyspan_port_private 	*p_priv;
1308 
1309 	dbg("%s", __func__);
1310 	s_priv = usb_get_serial_data(serial);
1311 	p_priv = usb_get_serial_port_data(port);
1312 
1313 	p_priv->rts_state = 0;
1314 	p_priv->dtr_state = 0;
1315 
1316 	if (serial->dev) {
1317 		keyspan_send_setup(port, 2);
1318 		/* pilot-xfer seems to work best with this delay */
1319 		mdelay(100);
1320 		// keyspan_set_termios(port, NULL);
1321 	}
1322 
1323 	/*while (p_priv->outcont_urb->status == -EINPROGRESS) {
1324 		dbg("%s - urb in progress", __func__);
1325 	}*/
1326 
1327 	p_priv->out_flip = 0;
1328 	p_priv->in_flip = 0;
1329 
1330 	if (serial->dev) {
1331 		/* Stop reading/writing urbs */
1332 		stop_urb(p_priv->inack_urb);
1333 		/* stop_urb(p_priv->outcont_urb); */
1334 		for (i = 0; i < 2; i++) {
1335 			stop_urb(p_priv->in_urbs[i]);
1336 			stop_urb(p_priv->out_urbs[i]);
1337 		}
1338 	}
1339 	port->tty = NULL;
1340 }
1341 
1342 
1343 	/* download the firmware to a pre-renumeration device */
1344 static int keyspan_fake_startup (struct usb_serial *serial)
1345 {
1346 	int 				response;
1347 	const struct ezusb_hex_record 	*record;
1348 	char				*fw_name;
1349 
1350 	dbg("Keyspan startup version %04x product %04x",
1351 	    le16_to_cpu(serial->dev->descriptor.bcdDevice),
1352 	    le16_to_cpu(serial->dev->descriptor.idProduct));
1353 
1354 	if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000) != 0x8000) {
1355 		dbg("Firmware already loaded.  Quitting.");
1356 		return(1);
1357 	}
1358 
1359 		/* Select firmware image on the basis of idProduct */
1360 	switch (le16_to_cpu(serial->dev->descriptor.idProduct)) {
1361 	case keyspan_usa28_pre_product_id:
1362 		record = &keyspan_usa28_firmware[0];
1363 		fw_name = "USA28";
1364 		break;
1365 
1366 	case keyspan_usa28x_pre_product_id:
1367 		record = &keyspan_usa28x_firmware[0];
1368 		fw_name = "USA28X";
1369 		break;
1370 
1371 	case keyspan_usa28xa_pre_product_id:
1372 		record = &keyspan_usa28xa_firmware[0];
1373 		fw_name = "USA28XA";
1374 		break;
1375 
1376 	case keyspan_usa28xb_pre_product_id:
1377 		record = &keyspan_usa28xb_firmware[0];
1378 		fw_name = "USA28XB";
1379 		break;
1380 
1381 	case keyspan_usa19_pre_product_id:
1382 		record = &keyspan_usa19_firmware[0];
1383 		fw_name = "USA19";
1384 		break;
1385 
1386 	case keyspan_usa19qi_pre_product_id:
1387 		record = &keyspan_usa19qi_firmware[0];
1388 		fw_name = "USA19QI";
1389 		break;
1390 
1391 	case keyspan_mpr_pre_product_id:
1392 		record = &keyspan_mpr_firmware[0];
1393 		fw_name = "MPR";
1394 		break;
1395 
1396 	case keyspan_usa19qw_pre_product_id:
1397 		record = &keyspan_usa19qw_firmware[0];
1398 		fw_name = "USA19QI";
1399 		break;
1400 
1401 	case keyspan_usa18x_pre_product_id:
1402 		record = &keyspan_usa18x_firmware[0];
1403 		fw_name = "USA18X";
1404 		break;
1405 
1406 	case keyspan_usa19w_pre_product_id:
1407 		record = &keyspan_usa19w_firmware[0];
1408 		fw_name = "USA19W";
1409 		break;
1410 
1411 	case keyspan_usa49w_pre_product_id:
1412 		record = &keyspan_usa49w_firmware[0];
1413 		fw_name = "USA49W";
1414 		break;
1415 
1416 	case keyspan_usa49wlc_pre_product_id:
1417 		record = &keyspan_usa49wlc_firmware[0];
1418 		fw_name = "USA49WLC";
1419 		break;
1420 
1421 	default:
1422 		record = NULL;
1423 		fw_name = "Unknown";
1424 		break;
1425 	}
1426 
1427 	if (record == NULL) {
1428 		dev_err(&serial->dev->dev, "Required keyspan firmware image (%s) unavailable.\n", fw_name);
1429 		return(1);
1430 	}
1431 
1432 	dbg("Uploading Keyspan %s firmware.", fw_name);
1433 
1434 		/* download the firmware image */
1435 	response = ezusb_set_reset(serial, 1);
1436 
1437 	while(record->address != 0xffff) {
1438 		response = ezusb_writememory(serial, record->address,
1439 					     (unsigned char *)record->data,
1440 					     record->data_size, 0xa0);
1441 		if (response < 0) {
1442 			dev_err(&serial->dev->dev, "ezusb_writememory failed for Keyspan"
1443 				"firmware (%d %04X %p %d)\n",
1444 				response,
1445 				record->address, record->data, record->data_size);
1446 			break;
1447 		}
1448 		record++;
1449 	}
1450 		/* bring device out of reset. Renumeration will occur in a
1451 		   moment and the new device will bind to the real driver */
1452 	response = ezusb_set_reset(serial, 0);
1453 
1454 	/* we don't want this device to have a driver assigned to it. */
1455 	return (1);
1456 }
1457 
1458 /* Helper functions used by keyspan_setup_urbs */
1459 static struct usb_endpoint_descriptor const *find_ep(struct usb_serial const *serial,
1460 						     int endpoint)
1461 {
1462 	struct usb_host_interface *iface_desc;
1463 	struct usb_endpoint_descriptor *ep;
1464 	int i;
1465 
1466 	iface_desc = serial->interface->cur_altsetting;
1467 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
1468 		ep = &iface_desc->endpoint[i].desc;
1469 		if (ep->bEndpointAddress == endpoint)
1470 			return ep;
1471 	}
1472 	dev_warn(&serial->interface->dev, "found no endpoint descriptor for "
1473 		 "endpoint %x\n", endpoint);
1474 	return NULL;
1475 }
1476 
1477 static struct urb *keyspan_setup_urb (struct usb_serial *serial, int endpoint,
1478 				      int dir, void *ctx, char *buf, int len,
1479 				      void (*callback)(struct urb *))
1480 {
1481 	struct urb *urb;
1482 	struct usb_endpoint_descriptor const *ep_desc;
1483 	char const *ep_type_name;
1484 
1485 	if (endpoint == -1)
1486 		return NULL;		/* endpoint not needed */
1487 
1488 	dbg ("%s - alloc for endpoint %d.", __func__, endpoint);
1489 	urb = usb_alloc_urb(0, GFP_KERNEL);		/* No ISO */
1490 	if (urb == NULL) {
1491 		dbg ("%s - alloc for endpoint %d failed.", __func__, endpoint);
1492 		return NULL;
1493 	}
1494 
1495 	if (endpoint == 0) {
1496 		/* control EP filled in when used */
1497 		return urb;
1498 	}
1499 
1500 	ep_desc = find_ep(serial, endpoint);
1501 	if (!ep_desc) {
1502 		/* leak the urb, something's wrong and the callers don't care */
1503 		return urb;
1504 	}
1505 	if (usb_endpoint_xfer_int(ep_desc)) {
1506 		ep_type_name = "INT";
1507 		usb_fill_int_urb(urb, serial->dev,
1508 				 usb_sndintpipe(serial->dev, endpoint) | dir,
1509 				 buf, len, callback, ctx,
1510 				 ep_desc->bInterval);
1511 	} else if (usb_endpoint_xfer_bulk(ep_desc)) {
1512 		ep_type_name = "BULK";
1513 		usb_fill_bulk_urb(urb, serial->dev,
1514 				  usb_sndbulkpipe(serial->dev, endpoint) | dir,
1515 				  buf, len, callback, ctx);
1516 	} else {
1517 		dev_warn(&serial->interface->dev,
1518 			 "unsupported endpoint type %x\n",
1519 			 ep_desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK);
1520 		usb_free_urb(urb);
1521 		return NULL;
1522 	}
1523 
1524 	dbg("%s - using urb %p for %s endpoint %x",
1525 	    __func__, urb, ep_type_name, endpoint);
1526 	return urb;
1527 }
1528 
1529 static struct callbacks {
1530 	void	(*instat_callback)(struct urb *);
1531 	void	(*glocont_callback)(struct urb *);
1532 	void	(*indat_callback)(struct urb *);
1533 	void	(*outdat_callback)(struct urb *);
1534 	void	(*inack_callback)(struct urb *);
1535 	void	(*outcont_callback)(struct urb *);
1536 } keyspan_callbacks[] = {
1537 	{
1538 		/* msg_usa26 callbacks */
1539 		.instat_callback =	usa26_instat_callback,
1540 		.glocont_callback =	usa26_glocont_callback,
1541 		.indat_callback =	usa26_indat_callback,
1542 		.outdat_callback =	usa2x_outdat_callback,
1543 		.inack_callback =	usa26_inack_callback,
1544 		.outcont_callback =	usa26_outcont_callback,
1545 	}, {
1546 		/* msg_usa28 callbacks */
1547 		.instat_callback =	usa28_instat_callback,
1548 		.glocont_callback =	usa28_glocont_callback,
1549 		.indat_callback =	usa28_indat_callback,
1550 		.outdat_callback =	usa2x_outdat_callback,
1551 		.inack_callback =	usa28_inack_callback,
1552 		.outcont_callback =	usa28_outcont_callback,
1553 	}, {
1554 		/* msg_usa49 callbacks */
1555 		.instat_callback =	usa49_instat_callback,
1556 		.glocont_callback =	usa49_glocont_callback,
1557 		.indat_callback =	usa49_indat_callback,
1558 		.outdat_callback =	usa2x_outdat_callback,
1559 		.inack_callback =	usa49_inack_callback,
1560 		.outcont_callback =	usa49_outcont_callback,
1561 	}, {
1562 		/* msg_usa90 callbacks */
1563 		.instat_callback =	usa90_instat_callback,
1564 		.glocont_callback =	usa28_glocont_callback,
1565 		.indat_callback =	usa90_indat_callback,
1566 		.outdat_callback =	usa2x_outdat_callback,
1567 		.inack_callback =	usa28_inack_callback,
1568 		.outcont_callback =	usa90_outcont_callback,
1569 	}, {
1570 		/* msg_usa67 callbacks */
1571 		.instat_callback =	usa67_instat_callback,
1572 		.glocont_callback =	usa67_glocont_callback,
1573 		.indat_callback =	usa26_indat_callback,
1574 		.outdat_callback =	usa2x_outdat_callback,
1575 		.inack_callback =	usa26_inack_callback,
1576 		.outcont_callback =	usa26_outcont_callback,
1577 	}
1578 };
1579 
1580 	/* Generic setup urbs function that uses
1581 	   data in device_details */
1582 static void keyspan_setup_urbs(struct usb_serial *serial)
1583 {
1584 	int				i, j;
1585 	struct keyspan_serial_private 	*s_priv;
1586 	const struct keyspan_device_details	*d_details;
1587 	struct usb_serial_port		*port;
1588 	struct keyspan_port_private	*p_priv;
1589 	struct callbacks		*cback;
1590 	int				endp;
1591 
1592 	dbg ("%s", __func__);
1593 
1594 	s_priv = usb_get_serial_data(serial);
1595 	d_details = s_priv->device_details;
1596 
1597 		/* Setup values for the various callback routines */
1598 	cback = &keyspan_callbacks[d_details->msg_format];
1599 
1600 		/* Allocate and set up urbs for each one that is in use,
1601 		   starting with instat endpoints */
1602 	s_priv->instat_urb = keyspan_setup_urb
1603 		(serial, d_details->instat_endpoint, USB_DIR_IN,
1604 		 serial, s_priv->instat_buf, INSTAT_BUFLEN,
1605 		 cback->instat_callback);
1606 
1607 	s_priv->indat_urb = keyspan_setup_urb
1608 		(serial, d_details->indat_endpoint, USB_DIR_IN,
1609 		 serial, s_priv->indat_buf, INDAT49W_BUFLEN,
1610 		 usa49wg_indat_callback);
1611 
1612 	s_priv->glocont_urb = keyspan_setup_urb
1613 		(serial, d_details->glocont_endpoint, USB_DIR_OUT,
1614 		 serial, s_priv->glocont_buf, GLOCONT_BUFLEN,
1615 		 cback->glocont_callback);
1616 
1617 		/* Setup endpoints for each port specific thing */
1618 	for (i = 0; i < d_details->num_ports; i ++) {
1619 		port = serial->port[i];
1620 		p_priv = usb_get_serial_port_data(port);
1621 
1622 		/* Do indat endpoints first, once for each flip */
1623 		endp = d_details->indat_endpoints[i];
1624 		for (j = 0; j <= d_details->indat_endp_flip; ++j, ++endp) {
1625 			p_priv->in_urbs[j] = keyspan_setup_urb
1626 				(serial, endp, USB_DIR_IN, port,
1627 				 p_priv->in_buffer[j], 64,
1628 				 cback->indat_callback);
1629 		}
1630 		for (; j < 2; ++j)
1631 			p_priv->in_urbs[j] = NULL;
1632 
1633 		/* outdat endpoints also have flip */
1634 		endp = d_details->outdat_endpoints[i];
1635 		for (j = 0; j <= d_details->outdat_endp_flip; ++j, ++endp) {
1636 			p_priv->out_urbs[j] = keyspan_setup_urb
1637 				(serial, endp, USB_DIR_OUT, port,
1638 				 p_priv->out_buffer[j], 64,
1639 				 cback->outdat_callback);
1640 		}
1641 		for (; j < 2; ++j)
1642 			p_priv->out_urbs[j] = NULL;
1643 
1644 		/* inack endpoint */
1645 		p_priv->inack_urb = keyspan_setup_urb
1646 			(serial, d_details->inack_endpoints[i], USB_DIR_IN,
1647 			 port, p_priv->inack_buffer, 1, cback->inack_callback);
1648 
1649 		/* outcont endpoint */
1650 		p_priv->outcont_urb = keyspan_setup_urb
1651 			(serial, d_details->outcont_endpoints[i], USB_DIR_OUT,
1652 			 port, p_priv->outcont_buffer, 64,
1653 			 cback->outcont_callback);
1654 	}
1655 
1656 }
1657 
1658 /* usa19 function doesn't require prescaler */
1659 static int keyspan_usa19_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1660 				   u8 *rate_low, u8 *prescaler, int portnum)
1661 {
1662 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1663 		div,	/* divisor */
1664 		cnt;	/* inverse of divisor (programmed into 8051) */
1665 
1666 	dbg ("%s - %d.", __func__, baud_rate);
1667 
1668 		/* prevent divide by zero...  */
1669 	if( (b16 = (baud_rate * 16L)) == 0) {
1670 		return (KEYSPAN_INVALID_BAUD_RATE);
1671 	}
1672 
1673 		/* Any "standard" rate over 57k6 is marginal on the USA-19
1674 		   as we run out of divisor resolution. */
1675 	if (baud_rate > 57600) {
1676 		return (KEYSPAN_INVALID_BAUD_RATE);
1677 	}
1678 
1679 		/* calculate the divisor and the counter (its inverse) */
1680 	if( (div = (baudclk / b16)) == 0) {
1681 		return (KEYSPAN_INVALID_BAUD_RATE);
1682 	}
1683 	else {
1684 		cnt = 0 - div;
1685 	}
1686 
1687 	if(div > 0xffff) {
1688 		return (KEYSPAN_INVALID_BAUD_RATE);
1689 	}
1690 
1691 		/* return the counter values if non-null */
1692 	if (rate_low) {
1693 		*rate_low = (u8) (cnt & 0xff);
1694 	}
1695 	if (rate_hi) {
1696 		*rate_hi = (u8) ((cnt >> 8) & 0xff);
1697 	}
1698 	if (rate_low && rate_hi) {
1699 		dbg ("%s - %d %02x %02x.", __func__, baud_rate, *rate_hi, *rate_low);
1700 	}
1701 
1702 	return (KEYSPAN_BAUD_RATE_OK);
1703 }
1704 
1705 /* usa19hs function doesn't require prescaler */
1706 static int keyspan_usa19hs_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1707 				   u8 *rate_low, u8 *prescaler, int portnum)
1708 {
1709 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1710 			div;	/* divisor */
1711 
1712 	dbg ("%s - %d.", __func__, baud_rate);
1713 
1714 		/* prevent divide by zero...  */
1715 	if( (b16 = (baud_rate * 16L)) == 0)
1716 		return (KEYSPAN_INVALID_BAUD_RATE);
1717 
1718 
1719 
1720 		/* calculate the divisor */
1721 	if( (div = (baudclk / b16)) == 0)
1722 		return (KEYSPAN_INVALID_BAUD_RATE);
1723 
1724 	if(div > 0xffff)
1725 		return (KEYSPAN_INVALID_BAUD_RATE);
1726 
1727 		/* return the counter values if non-null */
1728 	if (rate_low)
1729 		*rate_low = (u8) (div & 0xff);
1730 
1731 	if (rate_hi)
1732 		*rate_hi = (u8) ((div >> 8) & 0xff);
1733 
1734 	if (rate_low && rate_hi)
1735 		dbg ("%s - %d %02x %02x.", __func__, baud_rate, *rate_hi, *rate_low);
1736 
1737 	return (KEYSPAN_BAUD_RATE_OK);
1738 }
1739 
1740 static int keyspan_usa19w_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1741 				    u8 *rate_low, u8 *prescaler, int portnum)
1742 {
1743 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1744 		clk,	/* clock with 13/8 prescaler */
1745 		div,	/* divisor using 13/8 prescaler */
1746 		res,	/* resulting baud rate using 13/8 prescaler */
1747 		diff,	/* error using 13/8 prescaler */
1748 		smallest_diff;
1749 	u8	best_prescaler;
1750 	int	i;
1751 
1752 	dbg ("%s - %d.", __func__, baud_rate);
1753 
1754 		/* prevent divide by zero */
1755 	if( (b16 = baud_rate * 16L) == 0) {
1756 		return (KEYSPAN_INVALID_BAUD_RATE);
1757 	}
1758 
1759 		/* Calculate prescaler by trying them all and looking
1760 		   for best fit */
1761 
1762 		/* start with largest possible difference */
1763 	smallest_diff = 0xffffffff;
1764 
1765 		/* 0 is an invalid prescaler, used as a flag */
1766 	best_prescaler = 0;
1767 
1768 	for(i = 8; i <= 0xff; ++i) {
1769 		clk = (baudclk * 8) / (u32) i;
1770 
1771 		if( (div = clk / b16) == 0) {
1772 			continue;
1773 		}
1774 
1775 		res = clk / div;
1776 		diff= (res > b16) ? (res-b16) : (b16-res);
1777 
1778 		if(diff < smallest_diff) {
1779 			best_prescaler = i;
1780 			smallest_diff = diff;
1781 		}
1782 	}
1783 
1784 	if(best_prescaler == 0) {
1785 		return (KEYSPAN_INVALID_BAUD_RATE);
1786 	}
1787 
1788 	clk = (baudclk * 8) / (u32) best_prescaler;
1789 	div = clk / b16;
1790 
1791 		/* return the divisor and prescaler if non-null */
1792 	if (rate_low) {
1793 		*rate_low = (u8) (div & 0xff);
1794 	}
1795 	if (rate_hi) {
1796 		*rate_hi = (u8) ((div >> 8) & 0xff);
1797 	}
1798 	if (prescaler) {
1799 		*prescaler = best_prescaler;
1800 		/*  dbg("%s - %d %d", __func__, *prescaler, div); */
1801 	}
1802 	return (KEYSPAN_BAUD_RATE_OK);
1803 }
1804 
1805 	/* USA-28 supports different maximum baud rates on each port */
1806 static int keyspan_usa28_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1807 				    u8 *rate_low, u8 *prescaler, int portnum)
1808 {
1809 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1810 		div,	/* divisor */
1811 		cnt;	/* inverse of divisor (programmed into 8051) */
1812 
1813 	dbg ("%s - %d.", __func__, baud_rate);
1814 
1815 		/* prevent divide by zero */
1816 	if ((b16 = baud_rate * 16L) == 0)
1817 		return (KEYSPAN_INVALID_BAUD_RATE);
1818 
1819 		/* calculate the divisor and the counter (its inverse) */
1820 	if ((div = (KEYSPAN_USA28_BAUDCLK / b16)) == 0) {
1821 		return (KEYSPAN_INVALID_BAUD_RATE);
1822 	}
1823 	else {
1824 		cnt = 0 - div;
1825 	}
1826 
1827 		/* check for out of range, based on portnum,
1828 		   and return result */
1829 	if(portnum == 0) {
1830 		if(div > 0xffff)
1831 			return (KEYSPAN_INVALID_BAUD_RATE);
1832 	}
1833 	else {
1834 		if(portnum == 1) {
1835 			if(div > 0xff) {
1836 				return (KEYSPAN_INVALID_BAUD_RATE);
1837 			}
1838 		}
1839 		else {
1840 			return (KEYSPAN_INVALID_BAUD_RATE);
1841 		}
1842 	}
1843 
1844 		/* return the counter values if not NULL
1845 		   (port 1 will ignore retHi) */
1846 	if (rate_low) {
1847 		*rate_low = (u8) (cnt & 0xff);
1848 	}
1849 	if (rate_hi) {
1850 		*rate_hi = (u8) ((cnt >> 8) & 0xff);
1851 	}
1852 	dbg ("%s - %d OK.", __func__, baud_rate);
1853 	return (KEYSPAN_BAUD_RATE_OK);
1854 }
1855 
1856 static int keyspan_usa26_send_setup(struct usb_serial *serial,
1857 				    struct usb_serial_port *port,
1858 				    int reset_port)
1859 {
1860 	struct keyspan_usa26_portControlMessage	msg;
1861 	struct keyspan_serial_private 		*s_priv;
1862 	struct keyspan_port_private 		*p_priv;
1863 	const struct keyspan_device_details	*d_details;
1864 	int 					outcont_urb;
1865 	struct urb				*this_urb;
1866 	int 					device_port, err;
1867 
1868 	dbg ("%s reset=%d", __func__, reset_port);
1869 
1870 	s_priv = usb_get_serial_data(serial);
1871 	p_priv = usb_get_serial_port_data(port);
1872 	d_details = s_priv->device_details;
1873 	device_port = port->number - port->serial->minor;
1874 
1875 	outcont_urb = d_details->outcont_endpoints[port->number];
1876 	this_urb = p_priv->outcont_urb;
1877 
1878 	dbg("%s - endpoint %d", __func__, usb_pipeendpoint(this_urb->pipe));
1879 
1880 		/* Make sure we have an urb then send the message */
1881 	if (this_urb == NULL) {
1882 		dbg("%s - oops no urb.", __func__);
1883 		return -1;
1884 	}
1885 
1886 	/* Save reset port val for resend.
1887 	   Don't overwrite resend for open/close condition. */
1888 	if ((reset_port + 1) > p_priv->resend_cont)
1889 		p_priv->resend_cont = reset_port + 1;
1890 	if (this_urb->status == -EINPROGRESS) {
1891 		/*  dbg ("%s - already writing", __func__); */
1892 		mdelay(5);
1893 		return(-1);
1894 	}
1895 
1896 	memset(&msg, 0, sizeof (struct keyspan_usa26_portControlMessage));
1897 
1898 		/* Only set baud rate if it's changed */
1899 	if (p_priv->old_baud != p_priv->baud) {
1900 		p_priv->old_baud = p_priv->baud;
1901 		msg.setClocking = 0xff;
1902 		if (d_details->calculate_baud_rate
1903 		    (p_priv->baud, d_details->baudclk, &msg.baudHi,
1904 		     &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE ) {
1905 			dbg("%s - Invalid baud rate %d requested, using 9600.", __func__,
1906 			    p_priv->baud);
1907 			msg.baudLo = 0;
1908 			msg.baudHi = 125;	/* Values for 9600 baud */
1909 			msg.prescaler = 10;
1910 		}
1911 		msg.setPrescaler = 0xff;
1912 	}
1913 
1914 	msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
1915 	switch (p_priv->cflag & CSIZE) {
1916 	case CS5:
1917 		msg.lcr |= USA_DATABITS_5;
1918 		break;
1919 	case CS6:
1920 		msg.lcr |= USA_DATABITS_6;
1921 		break;
1922 	case CS7:
1923 		msg.lcr |= USA_DATABITS_7;
1924 		break;
1925 	case CS8:
1926 		msg.lcr |= USA_DATABITS_8;
1927 		break;
1928 	}
1929 	if (p_priv->cflag & PARENB) {
1930 		/* note USA_PARITY_NONE == 0 */
1931 		msg.lcr |= (p_priv->cflag & PARODD)?
1932 			USA_PARITY_ODD: USA_PARITY_EVEN;
1933 	}
1934 	msg.setLcr = 0xff;
1935 
1936 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1937 	msg.xonFlowControl = 0;
1938 	msg.setFlowControl = 0xff;
1939 	msg.forwardingLength = 16;
1940 	msg.xonChar = 17;
1941 	msg.xoffChar = 19;
1942 
1943 	/* Opening port */
1944 	if (reset_port == 1) {
1945 		msg._txOn = 1;
1946 		msg._txOff = 0;
1947 		msg.txFlush = 0;
1948 		msg.txBreak = 0;
1949 		msg.rxOn = 1;
1950 		msg.rxOff = 0;
1951 		msg.rxFlush = 1;
1952 		msg.rxForward = 0;
1953 		msg.returnStatus = 0;
1954 		msg.resetDataToggle = 0xff;
1955 	}
1956 
1957 	/* Closing port */
1958 	else if (reset_port == 2) {
1959 		msg._txOn = 0;
1960 		msg._txOff = 1;
1961 		msg.txFlush = 0;
1962 		msg.txBreak = 0;
1963 		msg.rxOn = 0;
1964 		msg.rxOff = 1;
1965 		msg.rxFlush = 1;
1966 		msg.rxForward = 0;
1967 		msg.returnStatus = 0;
1968 		msg.resetDataToggle = 0;
1969 	}
1970 
1971 	/* Sending intermediate configs */
1972 	else {
1973 		msg._txOn = (! p_priv->break_on);
1974 		msg._txOff = 0;
1975 		msg.txFlush = 0;
1976 		msg.txBreak = (p_priv->break_on);
1977 		msg.rxOn = 0;
1978 		msg.rxOff = 0;
1979 		msg.rxFlush = 0;
1980 		msg.rxForward = 0;
1981 		msg.returnStatus = 0;
1982 		msg.resetDataToggle = 0x0;
1983 	}
1984 
1985 		/* Do handshaking outputs */
1986 	msg.setTxTriState_setRts = 0xff;
1987 	msg.txTriState_rts = p_priv->rts_state;
1988 
1989 	msg.setHskoa_setDtr = 0xff;
1990 	msg.hskoa_dtr = p_priv->dtr_state;
1991 
1992 	p_priv->resend_cont = 0;
1993 	memcpy (this_urb->transfer_buffer, &msg, sizeof(msg));
1994 
1995 	/* send the data out the device on control endpoint */
1996 	this_urb->transfer_buffer_length = sizeof(msg);
1997 
1998 	this_urb->dev = serial->dev;
1999 	if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) {
2000 		dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
2001 	}
2002 #if 0
2003 	else {
2004 		dbg("%s - usb_submit_urb(%d) OK %d bytes (end %d)", __func__
2005 		    outcont_urb, this_urb->transfer_buffer_length,
2006 		    usb_pipeendpoint(this_urb->pipe));
2007 	}
2008 #endif
2009 
2010 	return 0;
2011 }
2012 
2013 static int keyspan_usa28_send_setup(struct usb_serial *serial,
2014 				    struct usb_serial_port *port,
2015 				    int reset_port)
2016 {
2017 	struct keyspan_usa28_portControlMessage	msg;
2018 	struct keyspan_serial_private	 	*s_priv;
2019 	struct keyspan_port_private 		*p_priv;
2020 	const struct keyspan_device_details	*d_details;
2021 	struct urb				*this_urb;
2022 	int 					device_port, err;
2023 
2024 	dbg ("%s", __func__);
2025 
2026 	s_priv = usb_get_serial_data(serial);
2027 	p_priv = usb_get_serial_port_data(port);
2028 	d_details = s_priv->device_details;
2029 	device_port = port->number - port->serial->minor;
2030 
2031 	/* only do something if we have a bulk out endpoint */
2032 	if ((this_urb = p_priv->outcont_urb) == NULL) {
2033 		dbg("%s - oops no urb.", __func__);
2034 		return -1;
2035 	}
2036 
2037 	/* Save reset port val for resend.
2038 	   Don't overwrite resend for open/close condition. */
2039 	if ((reset_port + 1) > p_priv->resend_cont)
2040 		p_priv->resend_cont = reset_port + 1;
2041 	if (this_urb->status == -EINPROGRESS) {
2042 		dbg ("%s already writing", __func__);
2043 		mdelay(5);
2044 		return(-1);
2045 	}
2046 
2047 	memset(&msg, 0, sizeof (struct keyspan_usa28_portControlMessage));
2048 
2049 	msg.setBaudRate = 1;
2050 	if (d_details->calculate_baud_rate(p_priv->baud, d_details->baudclk,
2051 		&msg.baudHi, &msg.baudLo, NULL, device_port) == KEYSPAN_INVALID_BAUD_RATE ) {
2052 		dbg("%s - Invalid baud rate requested %d.", __func__, p_priv->baud);
2053 		msg.baudLo = 0xff;
2054 		msg.baudHi = 0xb2;	/* Values for 9600 baud */
2055 	}
2056 
2057 	/* If parity is enabled, we must calculate it ourselves. */
2058 	msg.parity = 0;		/* XXX for now */
2059 
2060 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2061 	msg.xonFlowControl = 0;
2062 
2063 	/* Do handshaking outputs, DTR is inverted relative to RTS */
2064 	msg.rts = p_priv->rts_state;
2065 	msg.dtr = p_priv->dtr_state;
2066 
2067 	msg.forwardingLength = 16;
2068 	msg.forwardMs = 10;
2069 	msg.breakThreshold = 45;
2070 	msg.xonChar = 17;
2071 	msg.xoffChar = 19;
2072 
2073 	/*msg.returnStatus = 1;
2074 	msg.resetDataToggle = 0xff;*/
2075 	/* Opening port */
2076 	if (reset_port == 1) {
2077 		msg._txOn = 1;
2078 		msg._txOff = 0;
2079 		msg.txFlush = 0;
2080 		msg.txForceXoff = 0;
2081 		msg.txBreak = 0;
2082 		msg.rxOn = 1;
2083 		msg.rxOff = 0;
2084 		msg.rxFlush = 1;
2085 		msg.rxForward = 0;
2086 		msg.returnStatus = 0;
2087 		msg.resetDataToggle = 0xff;
2088 	}
2089 	/* Closing port */
2090 	else if (reset_port == 2) {
2091 		msg._txOn = 0;
2092 		msg._txOff = 1;
2093 		msg.txFlush = 0;
2094 		msg.txForceXoff = 0;
2095 		msg.txBreak = 0;
2096 		msg.rxOn = 0;
2097 		msg.rxOff = 1;
2098 		msg.rxFlush = 1;
2099 		msg.rxForward = 0;
2100 		msg.returnStatus = 0;
2101 		msg.resetDataToggle = 0;
2102 	}
2103 	/* Sending intermediate configs */
2104 	else {
2105 		msg._txOn = (! p_priv->break_on);
2106 		msg._txOff = 0;
2107 		msg.txFlush = 0;
2108 		msg.txForceXoff = 0;
2109 		msg.txBreak = (p_priv->break_on);
2110 		msg.rxOn = 0;
2111 		msg.rxOff = 0;
2112 		msg.rxFlush = 0;
2113 		msg.rxForward = 0;
2114 		msg.returnStatus = 0;
2115 		msg.resetDataToggle = 0x0;
2116 	}
2117 
2118 	p_priv->resend_cont = 0;
2119 	memcpy (this_urb->transfer_buffer, &msg, sizeof(msg));
2120 
2121 	/* send the data out the device on control endpoint */
2122 	this_urb->transfer_buffer_length = sizeof(msg);
2123 
2124 	this_urb->dev = serial->dev;
2125 	if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) {
2126 		dbg("%s - usb_submit_urb(setup) failed", __func__);
2127 	}
2128 #if 0
2129 	else {
2130 		dbg("%s - usb_submit_urb(setup) OK %d bytes", __func__,
2131 		    this_urb->transfer_buffer_length);
2132 	}
2133 #endif
2134 
2135 	return 0;
2136 }
2137 
2138 static int keyspan_usa49_send_setup(struct usb_serial *serial,
2139 				    struct usb_serial_port *port,
2140 				    int reset_port)
2141 {
2142 	struct keyspan_usa49_portControlMessage	msg;
2143 	struct usb_ctrlrequest 			*dr = NULL;
2144 	struct keyspan_serial_private 		*s_priv;
2145 	struct keyspan_port_private 		*p_priv;
2146 	const struct keyspan_device_details	*d_details;
2147 	struct urb				*this_urb;
2148 	int 					err, device_port;
2149 
2150 	dbg ("%s", __func__);
2151 
2152 	s_priv = usb_get_serial_data(serial);
2153 	p_priv = usb_get_serial_port_data(port);
2154 	d_details = s_priv->device_details;
2155 
2156 	this_urb = s_priv->glocont_urb;
2157 
2158 	/* Work out which port within the device is being setup */
2159 	device_port = port->number - port->serial->minor;
2160 
2161 	dbg("%s - endpoint %d port %d (%d)",__func__, usb_pipeendpoint(this_urb->pipe), port->number, device_port);
2162 
2163 		/* Make sure we have an urb then send the message */
2164 	if (this_urb == NULL) {
2165 		dbg("%s - oops no urb for port %d.", __func__, port->number);
2166 		return -1;
2167 	}
2168 
2169 	/* Save reset port val for resend.
2170 	   Don't overwrite resend for open/close condition. */
2171 	if ((reset_port + 1) > p_priv->resend_cont)
2172 		p_priv->resend_cont = reset_port + 1;
2173 
2174 	if (this_urb->status == -EINPROGRESS) {
2175 		/*  dbg ("%s - already writing", __func__); */
2176 		mdelay(5);
2177 		return(-1);
2178 	}
2179 
2180 	memset(&msg, 0, sizeof (struct keyspan_usa49_portControlMessage));
2181 
2182 	/*msg.portNumber = port->number;*/
2183 	msg.portNumber = device_port;
2184 
2185 		/* Only set baud rate if it's changed */
2186 	if (p_priv->old_baud != p_priv->baud) {
2187 		p_priv->old_baud = p_priv->baud;
2188 		msg.setClocking = 0xff;
2189 		if (d_details->calculate_baud_rate
2190 		    (p_priv->baud, d_details->baudclk, &msg.baudHi,
2191 		     &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE ) {
2192 			dbg("%s - Invalid baud rate %d requested, using 9600.", __func__,
2193 			    p_priv->baud);
2194 			msg.baudLo = 0;
2195 			msg.baudHi = 125;	/* Values for 9600 baud */
2196 			msg.prescaler = 10;
2197 		}
2198 		//msg.setPrescaler = 0xff;
2199 	}
2200 
2201 	msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
2202 	switch (p_priv->cflag & CSIZE) {
2203 	case CS5:
2204 		msg.lcr |= USA_DATABITS_5;
2205 		break;
2206 	case CS6:
2207 		msg.lcr |= USA_DATABITS_6;
2208 		break;
2209 	case CS7:
2210 		msg.lcr |= USA_DATABITS_7;
2211 		break;
2212 	case CS8:
2213 		msg.lcr |= USA_DATABITS_8;
2214 		break;
2215 	}
2216 	if (p_priv->cflag & PARENB) {
2217 		/* note USA_PARITY_NONE == 0 */
2218 		msg.lcr |= (p_priv->cflag & PARODD)?
2219 			USA_PARITY_ODD: USA_PARITY_EVEN;
2220 	}
2221 	msg.setLcr = 0xff;
2222 
2223 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2224 	msg.xonFlowControl = 0;
2225 	msg.setFlowControl = 0xff;
2226 
2227 	msg.forwardingLength = 16;
2228 	msg.xonChar = 17;
2229 	msg.xoffChar = 19;
2230 
2231 	/* Opening port */
2232 	if (reset_port == 1) {
2233 		msg._txOn = 1;
2234 		msg._txOff = 0;
2235 		msg.txFlush = 0;
2236 		msg.txBreak = 0;
2237 		msg.rxOn = 1;
2238 		msg.rxOff = 0;
2239 		msg.rxFlush = 1;
2240 		msg.rxForward = 0;
2241 		msg.returnStatus = 0;
2242 		msg.resetDataToggle = 0xff;
2243 		msg.enablePort = 1;
2244 		msg.disablePort = 0;
2245 	}
2246 	/* Closing port */
2247 	else if (reset_port == 2) {
2248 		msg._txOn = 0;
2249 		msg._txOff = 1;
2250 		msg.txFlush = 0;
2251 		msg.txBreak = 0;
2252 		msg.rxOn = 0;
2253 		msg.rxOff = 1;
2254 		msg.rxFlush = 1;
2255 		msg.rxForward = 0;
2256 		msg.returnStatus = 0;
2257 		msg.resetDataToggle = 0;
2258 		msg.enablePort = 0;
2259 		msg.disablePort = 1;
2260 	}
2261 	/* Sending intermediate configs */
2262 	else {
2263 		msg._txOn = (! p_priv->break_on);
2264 		msg._txOff = 0;
2265 		msg.txFlush = 0;
2266 		msg.txBreak = (p_priv->break_on);
2267 		msg.rxOn = 0;
2268 		msg.rxOff = 0;
2269 		msg.rxFlush = 0;
2270 		msg.rxForward = 0;
2271 		msg.returnStatus = 0;
2272 		msg.resetDataToggle = 0x0;
2273 		msg.enablePort = 0;
2274 		msg.disablePort = 0;
2275 	}
2276 
2277 		/* Do handshaking outputs */
2278 	msg.setRts = 0xff;
2279 	msg.rts = p_priv->rts_state;
2280 
2281 	msg.setDtr = 0xff;
2282 	msg.dtr = p_priv->dtr_state;
2283 
2284 	p_priv->resend_cont = 0;
2285 
2286 	/* if the device is a 49wg, we send control message on usb control EP 0 */
2287 
2288 	if (d_details->product_id == keyspan_usa49wg_product_id) {
2289 		dr = (void *)(s_priv->ctrl_buf);
2290 		dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT;
2291 		dr->bRequest = 0xB0;	/* 49wg control message */;
2292 		dr->wValue = 0;
2293 		dr->wIndex = 0;
2294 		dr->wLength = cpu_to_le16(sizeof(msg));
2295 
2296 		memcpy (s_priv->glocont_buf, &msg, sizeof(msg));
2297 
2298 		usb_fill_control_urb(this_urb, serial->dev, usb_sndctrlpipe(serial->dev, 0),
2299 			     (unsigned char *)dr, s_priv->glocont_buf, sizeof(msg),
2300 			     usa49_glocont_callback, serial);
2301 
2302 	} else {
2303 		memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2304 
2305 		/* send the data out the device on control endpoint */
2306 		this_urb->transfer_buffer_length = sizeof(msg);
2307 
2308 		this_urb->dev = serial->dev;
2309 	}
2310 	if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) {
2311 		dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
2312 	}
2313 #if 0
2314 	else {
2315 		dbg("%s - usb_submit_urb(%d) OK %d bytes (end %d)", __func__,
2316 			   outcont_urb, this_urb->transfer_buffer_length,
2317 			   usb_pipeendpoint(this_urb->pipe));
2318 	}
2319 #endif
2320 
2321 	return 0;
2322 }
2323 
2324 static int keyspan_usa90_send_setup(struct usb_serial *serial,
2325 				    struct usb_serial_port *port,
2326 				    int reset_port)
2327 {
2328 	struct keyspan_usa90_portControlMessage	msg;
2329 	struct keyspan_serial_private 		*s_priv;
2330 	struct keyspan_port_private 		*p_priv;
2331 	const struct keyspan_device_details	*d_details;
2332 	struct urb				*this_urb;
2333 	int 					err;
2334 	u8						prescaler;
2335 
2336 	dbg ("%s", __func__);
2337 
2338 	s_priv = usb_get_serial_data(serial);
2339 	p_priv = usb_get_serial_port_data(port);
2340 	d_details = s_priv->device_details;
2341 
2342 	/* only do something if we have a bulk out endpoint */
2343 	if ((this_urb = p_priv->outcont_urb) == NULL) {
2344 		dbg("%s - oops no urb.", __func__);
2345 		return -1;
2346 	}
2347 
2348 	/* Save reset port val for resend.
2349 	   Don't overwrite resend for open/close condition. */
2350 	if ((reset_port + 1) > p_priv->resend_cont)
2351 		p_priv->resend_cont = reset_port + 1;
2352 	if (this_urb->status == -EINPROGRESS) {
2353 		dbg ("%s already writing", __func__);
2354 		mdelay(5);
2355 		return(-1);
2356 	}
2357 
2358 	memset(&msg, 0, sizeof (struct keyspan_usa90_portControlMessage));
2359 
2360 	/* Only set baud rate if it's changed */
2361 	if (p_priv->old_baud != p_priv->baud) {
2362 		p_priv->old_baud = p_priv->baud;
2363 		msg.setClocking = 0x01;
2364 		if (d_details->calculate_baud_rate
2365 		    (p_priv->baud, d_details->baudclk, &msg.baudHi,
2366 		     &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE ) {
2367 			dbg("%s - Invalid baud rate %d requested, using 9600.", __func__,
2368 			    p_priv->baud);
2369 			p_priv->baud = 9600;
2370 			d_details->calculate_baud_rate (p_priv->baud, d_details->baudclk,
2371 				&msg.baudHi, &msg.baudLo, &prescaler, 0);
2372 		}
2373 		msg.setRxMode = 1;
2374 		msg.setTxMode = 1;
2375 	}
2376 
2377 	/* modes must always be correctly specified */
2378 	if (p_priv->baud > 57600)
2379 	{
2380 		msg.rxMode = RXMODE_DMA;
2381 		msg.txMode = TXMODE_DMA;
2382 	}
2383 	else
2384 	{
2385 		msg.rxMode = RXMODE_BYHAND;
2386 		msg.txMode = TXMODE_BYHAND;
2387 	}
2388 
2389 	msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
2390 	switch (p_priv->cflag & CSIZE) {
2391 	case CS5:
2392 		msg.lcr |= USA_DATABITS_5;
2393 		break;
2394 	case CS6:
2395 		msg.lcr |= USA_DATABITS_6;
2396 		break;
2397 	case CS7:
2398 		msg.lcr |= USA_DATABITS_7;
2399 		break;
2400 	case CS8:
2401 		msg.lcr |= USA_DATABITS_8;
2402 		break;
2403 	}
2404 	if (p_priv->cflag & PARENB) {
2405 		/* note USA_PARITY_NONE == 0 */
2406 		msg.lcr |= (p_priv->cflag & PARODD)?
2407 			USA_PARITY_ODD: USA_PARITY_EVEN;
2408 	}
2409 	if (p_priv->old_cflag != p_priv->cflag) {
2410 		p_priv->old_cflag = p_priv->cflag;
2411 		msg.setLcr = 0x01;
2412 	}
2413 
2414 	if (p_priv->flow_control == flow_cts)
2415 		msg.txFlowControl = TXFLOW_CTS;
2416 	msg.setTxFlowControl = 0x01;
2417 	msg.setRxFlowControl = 0x01;
2418 
2419 	msg.rxForwardingLength = 16;
2420 	msg.rxForwardingTimeout = 16;
2421 	msg.txAckSetting = 0;
2422 	msg.xonChar = 17;
2423 	msg.xoffChar = 19;
2424 
2425 	/* Opening port */
2426 	if (reset_port == 1) {
2427 		msg.portEnabled = 1;
2428 		msg.rxFlush = 1;
2429 		msg.txBreak = (p_priv->break_on);
2430 	}
2431 	/* Closing port */
2432 	else if (reset_port == 2) {
2433 		msg.portEnabled = 0;
2434 	}
2435 	/* Sending intermediate configs */
2436 	else {
2437 		if (port->open_count)
2438 			msg.portEnabled = 1;
2439 		msg.txBreak = (p_priv->break_on);
2440 	}
2441 
2442 	/* Do handshaking outputs */
2443 	msg.setRts = 0x01;
2444 	msg.rts = p_priv->rts_state;
2445 
2446 	msg.setDtr = 0x01;
2447 	msg.dtr = p_priv->dtr_state;
2448 
2449 	p_priv->resend_cont = 0;
2450 	memcpy (this_urb->transfer_buffer, &msg, sizeof(msg));
2451 
2452 	/* send the data out the device on control endpoint */
2453 	this_urb->transfer_buffer_length = sizeof(msg);
2454 
2455 	this_urb->dev = serial->dev;
2456 	if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) {
2457 		dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
2458 	}
2459 	return 0;
2460 }
2461 
2462 static int keyspan_usa67_send_setup(struct usb_serial *serial,
2463 				    struct usb_serial_port *port,
2464 				    int reset_port)
2465 {
2466 	struct keyspan_usa67_portControlMessage	msg;
2467 	struct keyspan_serial_private 		*s_priv;
2468 	struct keyspan_port_private 		*p_priv;
2469 	const struct keyspan_device_details	*d_details;
2470 	struct urb				*this_urb;
2471 	int 					err, device_port;
2472 
2473 	dbg ("%s", __func__);
2474 
2475 	s_priv = usb_get_serial_data(serial);
2476 	p_priv = usb_get_serial_port_data(port);
2477 	d_details = s_priv->device_details;
2478 
2479 	this_urb = s_priv->glocont_urb;
2480 
2481 	/* Work out which port within the device is being setup */
2482 	device_port = port->number - port->serial->minor;
2483 
2484 	/* Make sure we have an urb then send the message */
2485 	if (this_urb == NULL) {
2486 		dbg("%s - oops no urb for port %d.", __func__,
2487 			port->number);
2488 		return -1;
2489 	}
2490 
2491 	/* Save reset port val for resend.
2492 	   Don't overwrite resend for open/close condition. */
2493 	if ((reset_port + 1) > p_priv->resend_cont)
2494 		p_priv->resend_cont = reset_port + 1;
2495 	if (this_urb->status == -EINPROGRESS) {
2496 		/*  dbg ("%s - already writing", __func__); */
2497 		mdelay(5);
2498 		return(-1);
2499 	}
2500 
2501 	memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage));
2502 
2503 	msg.port = device_port;
2504 
2505 	/* Only set baud rate if it's changed */
2506 	if (p_priv->old_baud != p_priv->baud) {
2507 		p_priv->old_baud = p_priv->baud;
2508 		msg.setClocking = 0xff;
2509 		if (d_details->calculate_baud_rate
2510 		    (p_priv->baud, d_details->baudclk, &msg.baudHi,
2511 		     &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE ) {
2512 			dbg("%s - Invalid baud rate %d requested, using 9600.", __func__,
2513 			    p_priv->baud);
2514 			msg.baudLo = 0;
2515 			msg.baudHi = 125;	/* Values for 9600 baud */
2516 			msg.prescaler = 10;
2517 		}
2518 		msg.setPrescaler = 0xff;
2519 	}
2520 
2521 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2522 	switch (p_priv->cflag & CSIZE) {
2523 	case CS5:
2524 		msg.lcr |= USA_DATABITS_5;
2525 		break;
2526 	case CS6:
2527 		msg.lcr |= USA_DATABITS_6;
2528 		break;
2529 	case CS7:
2530 		msg.lcr |= USA_DATABITS_7;
2531 		break;
2532 	case CS8:
2533 		msg.lcr |= USA_DATABITS_8;
2534 		break;
2535 	}
2536 	if (p_priv->cflag & PARENB) {
2537 		/* note USA_PARITY_NONE == 0 */
2538 		msg.lcr |= (p_priv->cflag & PARODD)?
2539 			USA_PARITY_ODD: USA_PARITY_EVEN;
2540 	}
2541 	msg.setLcr = 0xff;
2542 
2543 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2544 	msg.xonFlowControl = 0;
2545 	msg.setFlowControl = 0xff;
2546 	msg.forwardingLength = 16;
2547 	msg.xonChar = 17;
2548 	msg.xoffChar = 19;
2549 
2550 	if (reset_port == 1) {
2551 		/* Opening port */
2552 		msg._txOn = 1;
2553 		msg._txOff = 0;
2554 		msg.txFlush = 0;
2555 		msg.txBreak = 0;
2556 		msg.rxOn = 1;
2557 		msg.rxOff = 0;
2558 		msg.rxFlush = 1;
2559 		msg.rxForward = 0;
2560 		msg.returnStatus = 0;
2561 		msg.resetDataToggle = 0xff;
2562 	} else if (reset_port == 2) {
2563 		/* Closing port */
2564 		msg._txOn = 0;
2565 		msg._txOff = 1;
2566 		msg.txFlush = 0;
2567 		msg.txBreak = 0;
2568 		msg.rxOn = 0;
2569 		msg.rxOff = 1;
2570 		msg.rxFlush = 1;
2571 		msg.rxForward = 0;
2572 		msg.returnStatus = 0;
2573 		msg.resetDataToggle = 0;
2574 	} else {
2575 		/* Sending intermediate configs */
2576 		msg._txOn = (! p_priv->break_on);
2577 		msg._txOff = 0;
2578 		msg.txFlush = 0;
2579 		msg.txBreak = (p_priv->break_on);
2580 		msg.rxOn = 0;
2581 		msg.rxOff = 0;
2582 		msg.rxFlush = 0;
2583 		msg.rxForward = 0;
2584 		msg.returnStatus = 0;
2585 		msg.resetDataToggle = 0x0;
2586 	}
2587 
2588 	/* Do handshaking outputs */
2589 	msg.setTxTriState_setRts = 0xff;
2590 	msg.txTriState_rts = p_priv->rts_state;
2591 
2592 	msg.setHskoa_setDtr = 0xff;
2593 	msg.hskoa_dtr = p_priv->dtr_state;
2594 
2595 	p_priv->resend_cont = 0;
2596 
2597 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2598 
2599 	/* send the data out the device on control endpoint */
2600 	this_urb->transfer_buffer_length = sizeof(msg);
2601 	this_urb->dev = serial->dev;
2602 
2603 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
2604 	if (err != 0)
2605 		dbg("%s - usb_submit_urb(setup) failed (%d)", __func__,
2606 				err);
2607 	return 0;
2608 }
2609 
2610 static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2611 {
2612 	struct usb_serial *serial = port->serial;
2613 	struct keyspan_serial_private *s_priv;
2614 	const struct keyspan_device_details *d_details;
2615 
2616 	dbg ("%s", __func__);
2617 
2618 	s_priv = usb_get_serial_data(serial);
2619 	d_details = s_priv->device_details;
2620 
2621 	switch (d_details->msg_format) {
2622 	case msg_usa26:
2623 		keyspan_usa26_send_setup(serial, port, reset_port);
2624 		break;
2625 	case msg_usa28:
2626 		keyspan_usa28_send_setup(serial, port, reset_port);
2627 		break;
2628 	case msg_usa49:
2629 		keyspan_usa49_send_setup(serial, port, reset_port);
2630 		break;
2631 	case msg_usa90:
2632 		keyspan_usa90_send_setup(serial, port, reset_port);
2633 		break;
2634 	case msg_usa67:
2635 		keyspan_usa67_send_setup(serial, port, reset_port);
2636 		break;
2637 	}
2638 }
2639 
2640 
2641 /* Gets called by the "real" driver (ie once firmware is loaded
2642    and renumeration has taken place. */
2643 static int keyspan_startup (struct usb_serial *serial)
2644 {
2645 	int				i, err;
2646 	struct usb_serial_port		*port;
2647 	struct keyspan_serial_private 	*s_priv;
2648 	struct keyspan_port_private	*p_priv;
2649 	const struct keyspan_device_details	*d_details;
2650 
2651 	dbg("%s", __func__);
2652 
2653 	for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i)
2654 		if (d_details->product_id == le16_to_cpu(serial->dev->descriptor.idProduct))
2655 			break;
2656 	if (d_details == NULL) {
2657 		dev_err(&serial->dev->dev, "%s - unknown product id %x\n", __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
2658 		return 1;
2659 	}
2660 
2661 	/* Setup private data for serial driver */
2662 	s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL);
2663 	if (!s_priv) {
2664 		dbg("%s - kmalloc for keyspan_serial_private failed.", __func__);
2665 		return -ENOMEM;
2666 	}
2667 
2668 	s_priv->device_details = d_details;
2669 	usb_set_serial_data(serial, s_priv);
2670 
2671 	/* Now setup per port private data */
2672 	for (i = 0; i < serial->num_ports; i++) {
2673 		port = serial->port[i];
2674 		p_priv = kzalloc(sizeof(struct keyspan_port_private), GFP_KERNEL);
2675 		if (!p_priv) {
2676 			dbg("%s - kmalloc for keyspan_port_private (%d) failed!.", __func__, i);
2677 			return (1);
2678 		}
2679 		p_priv->device_details = d_details;
2680 		usb_set_serial_port_data(port, p_priv);
2681 	}
2682 
2683 	keyspan_setup_urbs(serial);
2684 
2685 	if (s_priv->instat_urb != NULL) {
2686 		s_priv->instat_urb->dev = serial->dev;
2687 		err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL);
2688 		if (err != 0)
2689 			dbg("%s - submit instat urb failed %d", __func__,
2690 				err);
2691 	}
2692 	if (s_priv->indat_urb != NULL) {
2693 		s_priv->indat_urb->dev = serial->dev;
2694 		err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL);
2695 		if (err != 0)
2696 			dbg("%s - submit indat urb failed %d", __func__,
2697 				err);
2698 	}
2699 
2700 	return 0;
2701 }
2702 
2703 static void keyspan_shutdown (struct usb_serial *serial)
2704 {
2705 	int				i, j;
2706 	struct usb_serial_port		*port;
2707 	struct keyspan_serial_private 	*s_priv;
2708 	struct keyspan_port_private	*p_priv;
2709 
2710 	dbg("%s", __func__);
2711 
2712 	s_priv = usb_get_serial_data(serial);
2713 
2714 	/* Stop reading/writing urbs */
2715 	stop_urb(s_priv->instat_urb);
2716 	stop_urb(s_priv->glocont_urb);
2717 	stop_urb(s_priv->indat_urb);
2718 	for (i = 0; i < serial->num_ports; ++i) {
2719 		port = serial->port[i];
2720 		p_priv = usb_get_serial_port_data(port);
2721 		stop_urb(p_priv->inack_urb);
2722 		stop_urb(p_priv->outcont_urb);
2723 		for (j = 0; j < 2; j++) {
2724 			stop_urb(p_priv->in_urbs[j]);
2725 			stop_urb(p_priv->out_urbs[j]);
2726 		}
2727 	}
2728 
2729 	/* Now free them */
2730 	usb_free_urb(s_priv->instat_urb);
2731 	usb_free_urb(s_priv->indat_urb);
2732 	usb_free_urb(s_priv->glocont_urb);
2733 	for (i = 0; i < serial->num_ports; ++i) {
2734 		port = serial->port[i];
2735 		p_priv = usb_get_serial_port_data(port);
2736 		usb_free_urb(p_priv->inack_urb);
2737 		usb_free_urb(p_priv->outcont_urb);
2738 		for (j = 0; j < 2; j++) {
2739 			usb_free_urb(p_priv->in_urbs[j]);
2740 			usb_free_urb(p_priv->out_urbs[j]);
2741 		}
2742 	}
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_param(debug, bool, S_IRUGO | S_IWUSR);
2760 MODULE_PARM_DESC(debug, "Debug enabled or not");
2761 
2762