Linux Audio

Check our new training course

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