Linux Audio

Check our new training course

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