xref: /openbmc/linux/drivers/usb/serial/keyspan.c (revision 6ff58ae1)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3   Keyspan USB to Serial Converter driver
4 
5   (C) Copyright (C) 2000-2001	Hugh Blemings <hugh@blemings.org>
6   (C) Copyright (C) 2002	Greg Kroah-Hartman <greg@kroah.com>
7 
8   See http://blemings.org/hugh/keyspan.html for more information.
9 
10   Code in this driver inspired by and in a number of places taken
11   from Brian Warner's original Keyspan-PDA driver.
12 
13   This driver has been put together with the support of Innosys, Inc.
14   and Keyspan, Inc the manufacturers of the Keyspan USB-serial products.
15   Thanks Guys :)
16 
17   Thanks to Paulus for miscellaneous tidy ups, some largish chunks
18   of much nicer and/or completely new code and (perhaps most uniquely)
19   having the patience to sit down and explain why and where he'd changed
20   stuff.
21 
22   Tip 'o the hat to IBM (and previously Linuxcare :) for supporting
23   staff in their work on open source projects.
24 */
25 
26 
27 #include <linux/kernel.h>
28 #include <linux/jiffies.h>
29 #include <linux/errno.h>
30 #include <linux/slab.h>
31 #include <linux/tty.h>
32 #include <linux/tty_driver.h>
33 #include <linux/tty_flip.h>
34 #include <linux/module.h>
35 #include <linux/spinlock.h>
36 #include <linux/uaccess.h>
37 #include <linux/usb.h>
38 #include <linux/usb/serial.h>
39 #include <linux/usb/ezusb.h>
40 
41 #define DRIVER_AUTHOR "Hugh Blemings <hugh@misc.nu"
42 #define DRIVER_DESC "Keyspan USB to Serial Converter Driver"
43 
44 static void keyspan_send_setup(struct usb_serial_port *port, int reset_port);
45 
46 static 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);
50 static 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);
54 static 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);
58 static 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 
63 static int keyspan_usa28_send_setup(struct usb_serial *serial,
64 				    struct usb_serial_port *port,
65 				    int reset_port);
66 static int keyspan_usa26_send_setup(struct usb_serial *serial,
67 				    struct usb_serial_port *port,
68 				    int reset_port);
69 static int keyspan_usa49_send_setup(struct usb_serial *serial,
70 				    struct usb_serial_port *port,
71 				    int reset_port);
72 static int keyspan_usa90_send_setup(struct usb_serial *serial,
73 				    struct usb_serial_port *port,
74 				    int reset_port);
75 static 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 
135 struct 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 
186 static 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 
203 static 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 
220 static 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 
237 static 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 
254 static 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 
271 static 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 
288 static 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 
305 static 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 
322 static 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 
339 static 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 
356 static 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 
377 static 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 
394 static 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 
411 static 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 
428 static 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 
447 static 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 
477 MODULE_DEVICE_TABLE(usb, keyspan_ids_combined);
478 
479 /* usb_device_id table for the pre-firmware download keyspan devices */
480 static 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 
496 static 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 
507 static 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 
515 static 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 */
531 struct 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 
548 struct 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 
keyspan_break_ctl(struct tty_struct * tty,int break_state)602 static 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 
keyspan_set_termios(struct tty_struct * tty,struct usb_serial_port * port,const struct ktermios * old_termios)621 static 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 
keyspan_tiocmget(struct tty_struct * tty)658 static 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 
keyspan_tiocmset(struct tty_struct * tty,unsigned int set,unsigned int clear)674 static 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 */
keyspan_write(struct tty_struct * tty,struct usb_serial_port * port,const unsigned char * buf,int count)694 static 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 
usa26_indat_callback(struct urb * urb)767 static 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 */
usa2x_outdat_callback(struct urb * urb)827 static 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 
usa26_inack_callback(struct urb * urb)839 static void	usa26_inack_callback(struct urb *urb)
840 {
841 }
842 
usa26_outcont_callback(struct urb * urb)843 static 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 
usa26_instat_callback(struct urb * urb)858 static 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);
901 resubmit:
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);
906 exit: ;
907 }
908 
usa26_glocont_callback(struct urb * urb)909 static void	usa26_glocont_callback(struct urb *urb)
910 {
911 }
912 
913 
usa28_indat_callback(struct urb * urb)914 static 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 
usa28_inack_callback(struct urb * urb)957 static void	usa28_inack_callback(struct urb *urb)
958 {
959 }
960 
usa28_outcont_callback(struct urb * urb)961 static 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 
usa28_instat_callback(struct urb * urb)976 static 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);
1021 resubmit:
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);
1026 exit: ;
1027 }
1028 
usa28_glocont_callback(struct urb * urb)1029 static void	usa28_glocont_callback(struct urb *urb)
1030 {
1031 }
1032 
1033 
usa49_glocont_callback(struct urb * urb)1034 static 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 */
usa49_instat_callback(struct urb * urb)1059 static 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);
1106 resubmit:
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);
1111 exit:	;
1112 }
1113 
usa49_inack_callback(struct urb * urb)1114 static void	usa49_inack_callback(struct urb *urb)
1115 {
1116 }
1117 
usa49_indat_callback(struct urb * urb)1118 static 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 
usa49wg_indat_callback(struct urb * urb)1170 static 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 */
usa49_outcont_callback(struct urb * urb)1242 static void usa49_outcont_callback(struct urb *urb)
1243 {
1244 }
1245 
usa90_indat_callback(struct urb * urb)1246 static 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 
usa90_instat_callback(struct urb * urb)1318 static 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);
1358 resubmit:
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);
1363 exit:
1364 	;
1365 }
1366 
usa90_outcont_callback(struct urb * urb)1367 static 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 */
usa67_instat_callback(struct urb * urb)1383 static 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);
1430 resubmit:
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 
usa67_glocont_callback(struct urb * urb)1437 static 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 
keyspan_write_room(struct tty_struct * tty)1460 static 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 
keyspan_open(struct tty_struct * tty,struct usb_serial_port * port)1496 static 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 
keyspan_dtr_rts(struct usb_serial_port * port,int on)1570 static 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 
keyspan_close(struct usb_serial_port * port)1579 static 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 */
keyspan_fake_startup(struct usb_serial * serial)1604 static 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 */
find_ep(struct usb_serial const * serial,int endpoint)1690 static 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 
keyspan_setup_urb(struct usb_serial * serial,int endpoint,int dir,void * ctx,char * buf,int len,void (* callback)(struct urb *))1708 static 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 
1759 static 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 */
keyspan_setup_urbs(struct usb_serial * serial)1812 static 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 */
keyspan_usa19_calc_baud(struct usb_serial_port * port,u32 baud_rate,u32 baudclk,u8 * rate_hi,u8 * rate_low,u8 * prescaler,int portnum)1843 static 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 */
keyspan_usa19hs_calc_baud(struct usb_serial_port * port,u32 baud_rate,u32 baudclk,u8 * rate_hi,u8 * rate_low,u8 * prescaler,int portnum)1884 static 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 
keyspan_usa19w_calc_baud(struct usb_serial_port * port,u32 baud_rate,u32 baudclk,u8 * rate_hi,u8 * rate_low,u8 * prescaler,int portnum)1920 static 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 */
keyspan_usa28_calc_baud(struct usb_serial_port * port,u32 baud_rate,u32 baudclk,u8 * rate_hi,u8 * rate_low,u8 * prescaler,int portnum)1984 static 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 
keyspan_usa26_send_setup(struct usb_serial * serial,struct usb_serial_port * port,int reset_port)2029 static 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 
keyspan_usa28_send_setup(struct usb_serial * serial,struct usb_serial_port * port,int reset_port)2176 static 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 
keyspan_usa49_send_setup(struct usb_serial * serial,struct usb_serial_port * port,int reset_port)2295 static 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 
keyspan_usa90_send_setup(struct usb_serial * serial,struct usb_serial_port * port,int reset_port)2472 static 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 
keyspan_usa67_send_setup(struct usb_serial * serial,struct usb_serial_port * port,int reset_port)2602 static 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 
keyspan_send_setup(struct usb_serial_port * port,int reset_port)2745 static 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. */
keyspan_startup(struct usb_serial * serial)2776 static 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 
2831 err_ctrl_buf:
2832 	kfree(s_priv->glocont_buf);
2833 err_glocont_buf:
2834 	kfree(s_priv->indat_buf);
2835 err_indat_buf:
2836 	kfree(s_priv->instat_buf);
2837 err_instat_buf:
2838 	kfree(s_priv);
2839 
2840 	return -ENOMEM;
2841 }
2842 
keyspan_disconnect(struct usb_serial * serial)2843 static 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 
keyspan_release(struct usb_serial * serial)2854 static 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 
keyspan_port_probe(struct usb_serial_port * port)2876 static 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 
2958 err_free_inack_buffer:
2959 	kfree(p_priv->inack_buffer);
2960 err_free_out_buffer:
2961 	for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2962 		kfree(p_priv->out_buffer[i]);
2963 err_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 
keyspan_port_remove(struct usb_serial_port * port)2971 static 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. */
3003 static 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 
3014 static 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 
3038 static 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 
3062 static 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 
3086 static struct usb_serial_driver * const serial_drivers[] = {
3087 	&keyspan_pre_device, &keyspan_1port_device,
3088 	&keyspan_2port_device, &keyspan_4port_device, NULL
3089 };
3090 
3091 module_usb_serial_driver(serial_drivers, keyspan_ids_combined);
3092 
3093 MODULE_AUTHOR(DRIVER_AUTHOR);
3094 MODULE_DESCRIPTION(DRIVER_DESC);
3095 MODULE_LICENSE("GPL");
3096 
3097 MODULE_FIRMWARE("keyspan/usa28.fw");
3098 MODULE_FIRMWARE("keyspan/usa28x.fw");
3099 MODULE_FIRMWARE("keyspan/usa28xa.fw");
3100 MODULE_FIRMWARE("keyspan/usa28xb.fw");
3101 MODULE_FIRMWARE("keyspan/usa19.fw");
3102 MODULE_FIRMWARE("keyspan/usa19qi.fw");
3103 MODULE_FIRMWARE("keyspan/mpr.fw");
3104 MODULE_FIRMWARE("keyspan/usa19qw.fw");
3105 MODULE_FIRMWARE("keyspan/usa18x.fw");
3106 MODULE_FIRMWARE("keyspan/usa19w.fw");
3107 MODULE_FIRMWARE("keyspan/usa49w.fw");
3108 MODULE_FIRMWARE("keyspan/usa49wlc.fw");
3109