Linux Audio

Check our new training course

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