Linux Audio

Check our new training course

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