Linux Audio

Check our new training course

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