Linux Audio

Check our new training course

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