userns: Convert audit to work with user namespaces enabled
[firefly-linux-kernel-4.4.55.git] / drivers / usb / serial / digi_acceleport.c
1 /*
2 *  Digi AccelePort USB-4 and USB-2 Serial Converters
3 *
4 *  Copyright 2000 by Digi International
5 *
6 *  This program is free software; you can redistribute it and/or modify
7 *  it under the terms of the GNU General Public License as published by
8 *  the Free Software Foundation; either version 2 of the License, or
9 *  (at your option) any later version.
10 *
11 *  Shamelessly based on Brian Warner's keyspan_pda.c and Greg Kroah-Hartman's
12 *  usb-serial driver.
13 *
14 *  Peter Berger (pberger@brimson.com)
15 *  Al Borchers (borchers@steinerpoint.com)
16 */
17
18 #include <linux/kernel.h>
19 #include <linux/errno.h>
20 #include <linux/init.h>
21 #include <linux/slab.h>
22 #include <linux/tty.h>
23 #include <linux/tty_driver.h>
24 #include <linux/tty_flip.h>
25 #include <linux/module.h>
26 #include <linux/spinlock.h>
27 #include <linux/workqueue.h>
28 #include <linux/uaccess.h>
29 #include <linux/usb.h>
30 #include <linux/wait.h>
31 #include <linux/usb/serial.h>
32
33 /* Defines */
34
35 /*
36  * Version Information
37  */
38 #define DRIVER_VERSION "v1.80.1.2"
39 #define DRIVER_AUTHOR "Peter Berger <pberger@brimson.com>, Al Borchers <borchers@steinerpoint.com>"
40 #define DRIVER_DESC "Digi AccelePort USB-2/USB-4 Serial Converter driver"
41
42 /* port output buffer length -- must be <= transfer buffer length - 2 */
43 /* so we can be sure to send the full buffer in one urb */
44 #define DIGI_OUT_BUF_SIZE               8
45
46 /* port input buffer length -- must be >= transfer buffer length - 3 */
47 /* so we can be sure to hold at least one full buffer from one urb */
48 #define DIGI_IN_BUF_SIZE                64
49
50 /* retry timeout while sleeping */
51 #define DIGI_RETRY_TIMEOUT              (HZ/10)
52
53 /* timeout while waiting for tty output to drain in close */
54 /* this delay is used twice in close, so the total delay could */
55 /* be twice this value */
56 #define DIGI_CLOSE_TIMEOUT              (5*HZ)
57
58
59 /* AccelePort USB Defines */
60
61 /* ids */
62 #define DIGI_VENDOR_ID                  0x05c5
63 #define DIGI_2_ID                       0x0002  /* USB-2 */
64 #define DIGI_4_ID                       0x0004  /* USB-4 */
65
66 /* commands
67  * "INB": can be used on the in-band endpoint
68  * "OOB": can be used on the out-of-band endpoint
69  */
70 #define DIGI_CMD_SET_BAUD_RATE                  0       /* INB, OOB */
71 #define DIGI_CMD_SET_WORD_SIZE                  1       /* INB, OOB */
72 #define DIGI_CMD_SET_PARITY                     2       /* INB, OOB */
73 #define DIGI_CMD_SET_STOP_BITS                  3       /* INB, OOB */
74 #define DIGI_CMD_SET_INPUT_FLOW_CONTROL         4       /* INB, OOB */
75 #define DIGI_CMD_SET_OUTPUT_FLOW_CONTROL        5       /* INB, OOB */
76 #define DIGI_CMD_SET_DTR_SIGNAL                 6       /* INB, OOB */
77 #define DIGI_CMD_SET_RTS_SIGNAL                 7       /* INB, OOB */
78 #define DIGI_CMD_READ_INPUT_SIGNALS             8       /*      OOB */
79 #define DIGI_CMD_IFLUSH_FIFO                    9       /*      OOB */
80 #define DIGI_CMD_RECEIVE_ENABLE                 10      /* INB, OOB */
81 #define DIGI_CMD_BREAK_CONTROL                  11      /* INB, OOB */
82 #define DIGI_CMD_LOCAL_LOOPBACK                 12      /* INB, OOB */
83 #define DIGI_CMD_TRANSMIT_IDLE                  13      /* INB, OOB */
84 #define DIGI_CMD_READ_UART_REGISTER             14      /*      OOB */
85 #define DIGI_CMD_WRITE_UART_REGISTER            15      /* INB, OOB */
86 #define DIGI_CMD_AND_UART_REGISTER              16      /* INB, OOB */
87 #define DIGI_CMD_OR_UART_REGISTER               17      /* INB, OOB */
88 #define DIGI_CMD_SEND_DATA                      18      /* INB      */
89 #define DIGI_CMD_RECEIVE_DATA                   19      /* INB      */
90 #define DIGI_CMD_RECEIVE_DISABLE                20      /* INB      */
91 #define DIGI_CMD_GET_PORT_TYPE                  21      /*      OOB */
92
93 /* baud rates */
94 #define DIGI_BAUD_50                            0
95 #define DIGI_BAUD_75                            1
96 #define DIGI_BAUD_110                           2
97 #define DIGI_BAUD_150                           3
98 #define DIGI_BAUD_200                           4
99 #define DIGI_BAUD_300                           5
100 #define DIGI_BAUD_600                           6
101 #define DIGI_BAUD_1200                          7
102 #define DIGI_BAUD_1800                          8
103 #define DIGI_BAUD_2400                          9
104 #define DIGI_BAUD_4800                          10
105 #define DIGI_BAUD_7200                          11
106 #define DIGI_BAUD_9600                          12
107 #define DIGI_BAUD_14400                         13
108 #define DIGI_BAUD_19200                         14
109 #define DIGI_BAUD_28800                         15
110 #define DIGI_BAUD_38400                         16
111 #define DIGI_BAUD_57600                         17
112 #define DIGI_BAUD_76800                         18
113 #define DIGI_BAUD_115200                        19
114 #define DIGI_BAUD_153600                        20
115 #define DIGI_BAUD_230400                        21
116 #define DIGI_BAUD_460800                        22
117
118 /* arguments */
119 #define DIGI_WORD_SIZE_5                        0
120 #define DIGI_WORD_SIZE_6                        1
121 #define DIGI_WORD_SIZE_7                        2
122 #define DIGI_WORD_SIZE_8                        3
123
124 #define DIGI_PARITY_NONE                        0
125 #define DIGI_PARITY_ODD                         1
126 #define DIGI_PARITY_EVEN                        2
127 #define DIGI_PARITY_MARK                        3
128 #define DIGI_PARITY_SPACE                       4
129
130 #define DIGI_STOP_BITS_1                        0
131 #define DIGI_STOP_BITS_2                        1
132
133 #define DIGI_INPUT_FLOW_CONTROL_XON_XOFF        1
134 #define DIGI_INPUT_FLOW_CONTROL_RTS             2
135 #define DIGI_INPUT_FLOW_CONTROL_DTR             4
136
137 #define DIGI_OUTPUT_FLOW_CONTROL_XON_XOFF       1
138 #define DIGI_OUTPUT_FLOW_CONTROL_CTS            2
139 #define DIGI_OUTPUT_FLOW_CONTROL_DSR            4
140
141 #define DIGI_DTR_INACTIVE                       0
142 #define DIGI_DTR_ACTIVE                         1
143 #define DIGI_DTR_INPUT_FLOW_CONTROL             2
144
145 #define DIGI_RTS_INACTIVE                       0
146 #define DIGI_RTS_ACTIVE                         1
147 #define DIGI_RTS_INPUT_FLOW_CONTROL             2
148 #define DIGI_RTS_TOGGLE                         3
149
150 #define DIGI_FLUSH_TX                           1
151 #define DIGI_FLUSH_RX                           2
152 #define DIGI_RESUME_TX                          4 /* clears xoff condition */
153
154 #define DIGI_TRANSMIT_NOT_IDLE                  0
155 #define DIGI_TRANSMIT_IDLE                      1
156
157 #define DIGI_DISABLE                            0
158 #define DIGI_ENABLE                             1
159
160 #define DIGI_DEASSERT                           0
161 #define DIGI_ASSERT                             1
162
163 /* in band status codes */
164 #define DIGI_OVERRUN_ERROR                      4
165 #define DIGI_PARITY_ERROR                       8
166 #define DIGI_FRAMING_ERROR                      16
167 #define DIGI_BREAK_ERROR                        32
168
169 /* out of band status */
170 #define DIGI_NO_ERROR                           0
171 #define DIGI_BAD_FIRST_PARAMETER                1
172 #define DIGI_BAD_SECOND_PARAMETER               2
173 #define DIGI_INVALID_LINE                       3
174 #define DIGI_INVALID_OPCODE                     4
175
176 /* input signals */
177 #define DIGI_READ_INPUT_SIGNALS_SLOT            1
178 #define DIGI_READ_INPUT_SIGNALS_ERR             2
179 #define DIGI_READ_INPUT_SIGNALS_BUSY            4
180 #define DIGI_READ_INPUT_SIGNALS_PE              8
181 #define DIGI_READ_INPUT_SIGNALS_CTS             16
182 #define DIGI_READ_INPUT_SIGNALS_DSR             32
183 #define DIGI_READ_INPUT_SIGNALS_RI              64
184 #define DIGI_READ_INPUT_SIGNALS_DCD             128
185
186
187 /* Structures */
188
189 struct digi_serial {
190         spinlock_t ds_serial_lock;
191         struct usb_serial_port *ds_oob_port;    /* out-of-band port */
192         int ds_oob_port_num;                    /* index of out-of-band port */
193         int ds_device_started;
194 };
195
196 struct digi_port {
197         spinlock_t dp_port_lock;
198         int dp_port_num;
199         int dp_out_buf_len;
200         unsigned char dp_out_buf[DIGI_OUT_BUF_SIZE];
201         int dp_write_urb_in_use;
202         unsigned int dp_modem_signals;
203         wait_queue_head_t dp_modem_change_wait;
204         int dp_transmit_idle;
205         wait_queue_head_t dp_transmit_idle_wait;
206         int dp_throttled;
207         int dp_throttle_restart;
208         wait_queue_head_t dp_flush_wait;
209         wait_queue_head_t dp_close_wait;        /* wait queue for close */
210         struct work_struct dp_wakeup_work;
211         struct usb_serial_port *dp_port;
212 };
213
214
215 /* Local Function Declarations */
216
217 static void digi_wakeup_write(struct usb_serial_port *port);
218 static void digi_wakeup_write_lock(struct work_struct *work);
219 static int digi_write_oob_command(struct usb_serial_port *port,
220         unsigned char *buf, int count, int interruptible);
221 static int digi_write_inb_command(struct usb_serial_port *port,
222         unsigned char *buf, int count, unsigned long timeout);
223 static int digi_set_modem_signals(struct usb_serial_port *port,
224         unsigned int modem_signals, int interruptible);
225 static int digi_transmit_idle(struct usb_serial_port *port,
226         unsigned long timeout);
227 static void digi_rx_throttle(struct tty_struct *tty);
228 static void digi_rx_unthrottle(struct tty_struct *tty);
229 static void digi_set_termios(struct tty_struct *tty,
230                 struct usb_serial_port *port, struct ktermios *old_termios);
231 static void digi_break_ctl(struct tty_struct *tty, int break_state);
232 static int digi_tiocmget(struct tty_struct *tty);
233 static int digi_tiocmset(struct tty_struct *tty, unsigned int set,
234                 unsigned int clear);
235 static int digi_write(struct tty_struct *tty, struct usb_serial_port *port,
236                 const unsigned char *buf, int count);
237 static void digi_write_bulk_callback(struct urb *urb);
238 static int digi_write_room(struct tty_struct *tty);
239 static int digi_chars_in_buffer(struct tty_struct *tty);
240 static int digi_open(struct tty_struct *tty, struct usb_serial_port *port);
241 static void digi_close(struct usb_serial_port *port);
242 static void digi_dtr_rts(struct usb_serial_port *port, int on);
243 static int digi_startup_device(struct usb_serial *serial);
244 static int digi_startup(struct usb_serial *serial);
245 static void digi_disconnect(struct usb_serial *serial);
246 static void digi_release(struct usb_serial *serial);
247 static void digi_read_bulk_callback(struct urb *urb);
248 static int digi_read_inb_callback(struct urb *urb);
249 static int digi_read_oob_callback(struct urb *urb);
250
251
252 /* Statics */
253
254 static bool debug;
255
256 static const struct usb_device_id id_table_combined[] = {
257         { USB_DEVICE(DIGI_VENDOR_ID, DIGI_2_ID) },
258         { USB_DEVICE(DIGI_VENDOR_ID, DIGI_4_ID) },
259         { }                                             /* Terminating entry */
260 };
261
262 static const struct usb_device_id id_table_2[] = {
263         { USB_DEVICE(DIGI_VENDOR_ID, DIGI_2_ID) },
264         { }                                             /* Terminating entry */
265 };
266
267 static const struct usb_device_id id_table_4[] = {
268         { USB_DEVICE(DIGI_VENDOR_ID, DIGI_4_ID) },
269         { }                                             /* Terminating entry */
270 };
271
272 MODULE_DEVICE_TABLE(usb, id_table_combined);
273
274 /* device info needed for the Digi serial converter */
275
276 static struct usb_serial_driver digi_acceleport_2_device = {
277         .driver = {
278                 .owner =                THIS_MODULE,
279                 .name =                 "digi_2",
280         },
281         .description =                  "Digi 2 port USB adapter",
282         .id_table =                     id_table_2,
283         .num_ports =                    3,
284         .open =                         digi_open,
285         .close =                        digi_close,
286         .dtr_rts =                      digi_dtr_rts,
287         .write =                        digi_write,
288         .write_room =                   digi_write_room,
289         .write_bulk_callback =          digi_write_bulk_callback,
290         .read_bulk_callback =           digi_read_bulk_callback,
291         .chars_in_buffer =              digi_chars_in_buffer,
292         .throttle =                     digi_rx_throttle,
293         .unthrottle =                   digi_rx_unthrottle,
294         .set_termios =                  digi_set_termios,
295         .break_ctl =                    digi_break_ctl,
296         .tiocmget =                     digi_tiocmget,
297         .tiocmset =                     digi_tiocmset,
298         .attach =                       digi_startup,
299         .disconnect =                   digi_disconnect,
300         .release =                      digi_release,
301 };
302
303 static struct usb_serial_driver digi_acceleport_4_device = {
304         .driver = {
305                 .owner =                THIS_MODULE,
306                 .name =                 "digi_4",
307         },
308         .description =                  "Digi 4 port USB adapter",
309         .id_table =                     id_table_4,
310         .num_ports =                    4,
311         .open =                         digi_open,
312         .close =                        digi_close,
313         .write =                        digi_write,
314         .write_room =                   digi_write_room,
315         .write_bulk_callback =          digi_write_bulk_callback,
316         .read_bulk_callback =           digi_read_bulk_callback,
317         .chars_in_buffer =              digi_chars_in_buffer,
318         .throttle =                     digi_rx_throttle,
319         .unthrottle =                   digi_rx_unthrottle,
320         .set_termios =                  digi_set_termios,
321         .break_ctl =                    digi_break_ctl,
322         .tiocmget =                     digi_tiocmget,
323         .tiocmset =                     digi_tiocmset,
324         .attach =                       digi_startup,
325         .disconnect =                   digi_disconnect,
326         .release =                      digi_release,
327 };
328
329 static struct usb_serial_driver * const serial_drivers[] = {
330         &digi_acceleport_2_device, &digi_acceleport_4_device, NULL
331 };
332
333 /* Functions */
334
335 /*
336  *  Cond Wait Interruptible Timeout Irqrestore
337  *
338  *  Do spin_unlock_irqrestore and interruptible_sleep_on_timeout
339  *  so that wake ups are not lost if they occur between the unlock
340  *  and the sleep.  In other words, spin_unlock_irqrestore and
341  *  interruptible_sleep_on_timeout are "atomic" with respect to
342  *  wake ups.  This is used to implement condition variables.
343  *
344  *  interruptible_sleep_on_timeout is deprecated and has been replaced
345  *  with the equivalent code.
346  */
347
348 static long cond_wait_interruptible_timeout_irqrestore(
349         wait_queue_head_t *q, long timeout,
350         spinlock_t *lock, unsigned long flags)
351 __releases(lock)
352 {
353         DEFINE_WAIT(wait);
354
355         prepare_to_wait(q, &wait, TASK_INTERRUPTIBLE);
356         spin_unlock_irqrestore(lock, flags);
357         timeout = schedule_timeout(timeout);
358         finish_wait(q, &wait);
359
360         return timeout;
361 }
362
363
364 /*
365  *  Digi Wakeup Write
366  *
367  *  Wake up port, line discipline, and tty processes sleeping
368  *  on writes.
369  */
370
371 static void digi_wakeup_write_lock(struct work_struct *work)
372 {
373         struct digi_port *priv =
374                         container_of(work, struct digi_port, dp_wakeup_work);
375         struct usb_serial_port *port = priv->dp_port;
376         unsigned long flags;
377
378         spin_lock_irqsave(&priv->dp_port_lock, flags);
379         digi_wakeup_write(port);
380         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
381 }
382
383 static void digi_wakeup_write(struct usb_serial_port *port)
384 {
385         struct tty_struct *tty = tty_port_tty_get(&port->port);
386         if (tty) {
387                 tty_wakeup(tty);
388                 tty_kref_put(tty);
389         }
390 }
391
392
393 /*
394  *  Digi Write OOB Command
395  *
396  *  Write commands on the out of band port.  Commands are 4
397  *  bytes each, multiple commands can be sent at once, and
398  *  no command will be split across USB packets.  Returns 0
399  *  if successful, -EINTR if interrupted while sleeping and
400  *  the interruptible flag is true, or a negative error
401  *  returned by usb_submit_urb.
402  */
403
404 static int digi_write_oob_command(struct usb_serial_port *port,
405         unsigned char *buf, int count, int interruptible)
406 {
407
408         int ret = 0;
409         int len;
410         struct usb_serial_port *oob_port = (struct usb_serial_port *)((struct digi_serial *)(usb_get_serial_data(port->serial)))->ds_oob_port;
411         struct digi_port *oob_priv = usb_get_serial_port_data(oob_port);
412         unsigned long flags = 0;
413
414         dbg("digi_write_oob_command: TOP: port=%d, count=%d", oob_priv->dp_port_num, count);
415
416         spin_lock_irqsave(&oob_priv->dp_port_lock, flags);
417         while (count > 0) {
418                 while (oob_priv->dp_write_urb_in_use) {
419                         cond_wait_interruptible_timeout_irqrestore(
420                                 &oob_port->write_wait, DIGI_RETRY_TIMEOUT,
421                                 &oob_priv->dp_port_lock, flags);
422                         if (interruptible && signal_pending(current))
423                                 return -EINTR;
424                         spin_lock_irqsave(&oob_priv->dp_port_lock, flags);
425                 }
426
427                 /* len must be a multiple of 4, so commands are not split */
428                 len = min(count, oob_port->bulk_out_size);
429                 if (len > 4)
430                         len &= ~3;
431                 memcpy(oob_port->write_urb->transfer_buffer, buf, len);
432                 oob_port->write_urb->transfer_buffer_length = len;
433                 ret = usb_submit_urb(oob_port->write_urb, GFP_ATOMIC);
434                 if (ret == 0) {
435                         oob_priv->dp_write_urb_in_use = 1;
436                         count -= len;
437                         buf += len;
438                 }
439         }
440         spin_unlock_irqrestore(&oob_priv->dp_port_lock, flags);
441         if (ret)
442                 dev_err(&port->dev, "%s: usb_submit_urb failed, ret=%d\n",
443                         __func__, ret);
444         return ret;
445
446 }
447
448
449 /*
450  *  Digi Write In Band Command
451  *
452  *  Write commands on the given port.  Commands are 4
453  *  bytes each, multiple commands can be sent at once, and
454  *  no command will be split across USB packets.  If timeout
455  *  is non-zero, write in band command will return after
456  *  waiting unsuccessfully for the URB status to clear for
457  *  timeout ticks.  Returns 0 if successful, or a negative
458  *  error returned by digi_write.
459  */
460
461 static int digi_write_inb_command(struct usb_serial_port *port,
462         unsigned char *buf, int count, unsigned long timeout)
463 {
464         int ret = 0;
465         int len;
466         struct digi_port *priv = usb_get_serial_port_data(port);
467         unsigned char *data = port->write_urb->transfer_buffer;
468         unsigned long flags = 0;
469
470         dbg("digi_write_inb_command: TOP: port=%d, count=%d",
471                 priv->dp_port_num, count);
472
473         if (timeout)
474                 timeout += jiffies;
475         else
476                 timeout = ULONG_MAX;
477
478         spin_lock_irqsave(&priv->dp_port_lock, flags);
479         while (count > 0 && ret == 0) {
480                 while (priv->dp_write_urb_in_use &&
481                        time_before(jiffies, timeout)) {
482                         cond_wait_interruptible_timeout_irqrestore(
483                                 &port->write_wait, DIGI_RETRY_TIMEOUT,
484                                 &priv->dp_port_lock, flags);
485                         if (signal_pending(current))
486                                 return -EINTR;
487                         spin_lock_irqsave(&priv->dp_port_lock, flags);
488                 }
489
490                 /* len must be a multiple of 4 and small enough to */
491                 /* guarantee the write will send buffered data first, */
492                 /* so commands are in order with data and not split */
493                 len = min(count, port->bulk_out_size-2-priv->dp_out_buf_len);
494                 if (len > 4)
495                         len &= ~3;
496
497                 /* write any buffered data first */
498                 if (priv->dp_out_buf_len > 0) {
499                         data[0] = DIGI_CMD_SEND_DATA;
500                         data[1] = priv->dp_out_buf_len;
501                         memcpy(data + 2, priv->dp_out_buf,
502                                 priv->dp_out_buf_len);
503                         memcpy(data + 2 + priv->dp_out_buf_len, buf, len);
504                         port->write_urb->transfer_buffer_length
505                                 = priv->dp_out_buf_len + 2 + len;
506                 } else {
507                         memcpy(data, buf, len);
508                         port->write_urb->transfer_buffer_length = len;
509                 }
510
511                 ret = usb_submit_urb(port->write_urb, GFP_ATOMIC);
512                 if (ret == 0) {
513                         priv->dp_write_urb_in_use = 1;
514                         priv->dp_out_buf_len = 0;
515                         count -= len;
516                         buf += len;
517                 }
518
519         }
520         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
521
522         if (ret)
523                 dev_err(&port->dev,
524                         "%s: usb_submit_urb failed, ret=%d, port=%d\n",
525                         __func__, ret, priv->dp_port_num);
526         return ret;
527 }
528
529
530 /*
531  *  Digi Set Modem Signals
532  *
533  *  Sets or clears DTR and RTS on the port, according to the
534  *  modem_signals argument.  Use TIOCM_DTR and TIOCM_RTS flags
535  *  for the modem_signals argument.  Returns 0 if successful,
536  *  -EINTR if interrupted while sleeping, or a non-zero error
537  *  returned by usb_submit_urb.
538  */
539
540 static int digi_set_modem_signals(struct usb_serial_port *port,
541         unsigned int modem_signals, int interruptible)
542 {
543
544         int ret;
545         struct digi_port *port_priv = usb_get_serial_port_data(port);
546         struct usb_serial_port *oob_port = (struct usb_serial_port *) ((struct digi_serial *)(usb_get_serial_data(port->serial)))->ds_oob_port;
547         struct digi_port *oob_priv = usb_get_serial_port_data(oob_port);
548         unsigned char *data = oob_port->write_urb->transfer_buffer;
549         unsigned long flags = 0;
550
551
552         dbg("digi_set_modem_signals: TOP: port=%d, modem_signals=0x%x",
553                 port_priv->dp_port_num, modem_signals);
554
555         spin_lock_irqsave(&oob_priv->dp_port_lock, flags);
556         spin_lock(&port_priv->dp_port_lock);
557
558         while (oob_priv->dp_write_urb_in_use) {
559                 spin_unlock(&port_priv->dp_port_lock);
560                 cond_wait_interruptible_timeout_irqrestore(
561                         &oob_port->write_wait, DIGI_RETRY_TIMEOUT,
562                         &oob_priv->dp_port_lock, flags);
563                 if (interruptible && signal_pending(current))
564                         return -EINTR;
565                 spin_lock_irqsave(&oob_priv->dp_port_lock, flags);
566                 spin_lock(&port_priv->dp_port_lock);
567         }
568         data[0] = DIGI_CMD_SET_DTR_SIGNAL;
569         data[1] = port_priv->dp_port_num;
570         data[2] = (modem_signals & TIOCM_DTR) ?
571                                         DIGI_DTR_ACTIVE : DIGI_DTR_INACTIVE;
572         data[3] = 0;
573         data[4] = DIGI_CMD_SET_RTS_SIGNAL;
574         data[5] = port_priv->dp_port_num;
575         data[6] = (modem_signals & TIOCM_RTS) ?
576                                         DIGI_RTS_ACTIVE : DIGI_RTS_INACTIVE;
577         data[7] = 0;
578
579         oob_port->write_urb->transfer_buffer_length = 8;
580
581         ret = usb_submit_urb(oob_port->write_urb, GFP_ATOMIC);
582         if (ret == 0) {
583                 oob_priv->dp_write_urb_in_use = 1;
584                 port_priv->dp_modem_signals =
585                         (port_priv->dp_modem_signals&~(TIOCM_DTR|TIOCM_RTS))
586                         | (modem_signals&(TIOCM_DTR|TIOCM_RTS));
587         }
588         spin_unlock(&port_priv->dp_port_lock);
589         spin_unlock_irqrestore(&oob_priv->dp_port_lock, flags);
590         if (ret)
591                 dev_err(&port->dev, "%s: usb_submit_urb failed, ret=%d\n",
592                         __func__, ret);
593         return ret;
594 }
595
596 /*
597  *  Digi Transmit Idle
598  *
599  *  Digi transmit idle waits, up to timeout ticks, for the transmitter
600  *  to go idle.  It returns 0 if successful or a negative error.
601  *
602  *  There are race conditions here if more than one process is calling
603  *  digi_transmit_idle on the same port at the same time.  However, this
604  *  is only called from close, and only one process can be in close on a
605  *  port at a time, so its ok.
606  */
607
608 static int digi_transmit_idle(struct usb_serial_port *port,
609         unsigned long timeout)
610 {
611         int ret;
612         unsigned char buf[2];
613         struct digi_port *priv = usb_get_serial_port_data(port);
614         unsigned long flags = 0;
615
616         spin_lock_irqsave(&priv->dp_port_lock, flags);
617         priv->dp_transmit_idle = 0;
618         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
619
620         buf[0] = DIGI_CMD_TRANSMIT_IDLE;
621         buf[1] = 0;
622
623         timeout += jiffies;
624
625         ret = digi_write_inb_command(port, buf, 2, timeout - jiffies);
626         if (ret != 0)
627                 return ret;
628
629         spin_lock_irqsave(&priv->dp_port_lock, flags);
630
631         while (time_before(jiffies, timeout) && !priv->dp_transmit_idle) {
632                 cond_wait_interruptible_timeout_irqrestore(
633                         &priv->dp_transmit_idle_wait, DIGI_RETRY_TIMEOUT,
634                         &priv->dp_port_lock, flags);
635                 if (signal_pending(current))
636                         return -EINTR;
637                 spin_lock_irqsave(&priv->dp_port_lock, flags);
638         }
639         priv->dp_transmit_idle = 0;
640         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
641         return 0;
642
643 }
644
645
646 static void digi_rx_throttle(struct tty_struct *tty)
647 {
648         unsigned long flags;
649         struct usb_serial_port *port = tty->driver_data;
650         struct digi_port *priv = usb_get_serial_port_data(port);
651
652         /* stop receiving characters by not resubmitting the read urb */
653         spin_lock_irqsave(&priv->dp_port_lock, flags);
654         priv->dp_throttled = 1;
655         priv->dp_throttle_restart = 0;
656         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
657 }
658
659
660 static void digi_rx_unthrottle(struct tty_struct *tty)
661 {
662         int ret = 0;
663         unsigned long flags;
664         struct usb_serial_port *port = tty->driver_data;
665         struct digi_port *priv = usb_get_serial_port_data(port);
666
667         spin_lock_irqsave(&priv->dp_port_lock, flags);
668
669         /* restart read chain */
670         if (priv->dp_throttle_restart)
671                 ret = usb_submit_urb(port->read_urb, GFP_ATOMIC);
672
673         /* turn throttle off */
674         priv->dp_throttled = 0;
675         priv->dp_throttle_restart = 0;
676
677         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
678
679         if (ret)
680                 dev_err(&port->dev,
681                         "%s: usb_submit_urb failed, ret=%d, port=%d\n",
682                         __func__, ret, priv->dp_port_num);
683 }
684
685
686 static void digi_set_termios(struct tty_struct *tty,
687                 struct usb_serial_port *port, struct ktermios *old_termios)
688 {
689         struct digi_port *priv = usb_get_serial_port_data(port);
690         unsigned int iflag = tty->termios->c_iflag;
691         unsigned int cflag = tty->termios->c_cflag;
692         unsigned int old_iflag = old_termios->c_iflag;
693         unsigned int old_cflag = old_termios->c_cflag;
694         unsigned char buf[32];
695         unsigned int modem_signals;
696         int arg, ret;
697         int i = 0;
698         speed_t baud;
699
700         dbg("digi_set_termios: TOP: port=%d, iflag=0x%x, old_iflag=0x%x, cflag=0x%x, old_cflag=0x%x", priv->dp_port_num, iflag, old_iflag, cflag, old_cflag);
701
702         /* set baud rate */
703         baud = tty_get_baud_rate(tty);
704         if (baud != tty_termios_baud_rate(old_termios)) {
705                 arg = -1;
706
707                 /* reassert DTR and (maybe) RTS on transition from B0 */
708                 if ((old_cflag&CBAUD) == B0) {
709                         /* don't set RTS if using hardware flow control */
710                         /* and throttling input */
711                         modem_signals = TIOCM_DTR;
712                         if (!(tty->termios->c_cflag & CRTSCTS) ||
713                             !test_bit(TTY_THROTTLED, &tty->flags))
714                                 modem_signals |= TIOCM_RTS;
715                         digi_set_modem_signals(port, modem_signals, 1);
716                 }
717                 switch (baud) {
718                 /* drop DTR and RTS on transition to B0 */
719                 case 0: digi_set_modem_signals(port, 0, 1); break;
720                 case 50: arg = DIGI_BAUD_50; break;
721                 case 75: arg = DIGI_BAUD_75; break;
722                 case 110: arg = DIGI_BAUD_110; break;
723                 case 150: arg = DIGI_BAUD_150; break;
724                 case 200: arg = DIGI_BAUD_200; break;
725                 case 300: arg = DIGI_BAUD_300; break;
726                 case 600: arg = DIGI_BAUD_600; break;
727                 case 1200: arg = DIGI_BAUD_1200; break;
728                 case 1800: arg = DIGI_BAUD_1800; break;
729                 case 2400: arg = DIGI_BAUD_2400; break;
730                 case 4800: arg = DIGI_BAUD_4800; break;
731                 case 9600: arg = DIGI_BAUD_9600; break;
732                 case 19200: arg = DIGI_BAUD_19200; break;
733                 case 38400: arg = DIGI_BAUD_38400; break;
734                 case 57600: arg = DIGI_BAUD_57600; break;
735                 case 115200: arg = DIGI_BAUD_115200; break;
736                 case 230400: arg = DIGI_BAUD_230400; break;
737                 case 460800: arg = DIGI_BAUD_460800; break;
738                 default:
739                         arg = DIGI_BAUD_9600;
740                         baud = 9600;
741                         break;
742                 }
743                 if (arg != -1) {
744                         buf[i++] = DIGI_CMD_SET_BAUD_RATE;
745                         buf[i++] = priv->dp_port_num;
746                         buf[i++] = arg;
747                         buf[i++] = 0;
748                 }
749         }
750         /* set parity */
751         tty->termios->c_cflag &= ~CMSPAR;
752
753         if ((cflag&(PARENB|PARODD)) != (old_cflag&(PARENB|PARODD))) {
754                 if (cflag&PARENB) {
755                         if (cflag&PARODD)
756                                 arg = DIGI_PARITY_ODD;
757                         else
758                                 arg = DIGI_PARITY_EVEN;
759                 } else {
760                         arg = DIGI_PARITY_NONE;
761                 }
762                 buf[i++] = DIGI_CMD_SET_PARITY;
763                 buf[i++] = priv->dp_port_num;
764                 buf[i++] = arg;
765                 buf[i++] = 0;
766         }
767         /* set word size */
768         if ((cflag&CSIZE) != (old_cflag&CSIZE)) {
769                 arg = -1;
770                 switch (cflag&CSIZE) {
771                 case CS5: arg = DIGI_WORD_SIZE_5; break;
772                 case CS6: arg = DIGI_WORD_SIZE_6; break;
773                 case CS7: arg = DIGI_WORD_SIZE_7; break;
774                 case CS8: arg = DIGI_WORD_SIZE_8; break;
775                 default:
776                         dbg("digi_set_termios: can't handle word size %d",
777                                 (cflag&CSIZE));
778                         break;
779                 }
780
781                 if (arg != -1) {
782                         buf[i++] = DIGI_CMD_SET_WORD_SIZE;
783                         buf[i++] = priv->dp_port_num;
784                         buf[i++] = arg;
785                         buf[i++] = 0;
786                 }
787
788         }
789
790         /* set stop bits */
791         if ((cflag&CSTOPB) != (old_cflag&CSTOPB)) {
792
793                 if ((cflag&CSTOPB))
794                         arg = DIGI_STOP_BITS_2;
795                 else
796                         arg = DIGI_STOP_BITS_1;
797
798                 buf[i++] = DIGI_CMD_SET_STOP_BITS;
799                 buf[i++] = priv->dp_port_num;
800                 buf[i++] = arg;
801                 buf[i++] = 0;
802
803         }
804
805         /* set input flow control */
806         if ((iflag&IXOFF) != (old_iflag&IXOFF)
807             || (cflag&CRTSCTS) != (old_cflag&CRTSCTS)) {
808                 arg = 0;
809                 if (iflag&IXOFF)
810                         arg |= DIGI_INPUT_FLOW_CONTROL_XON_XOFF;
811                 else
812                         arg &= ~DIGI_INPUT_FLOW_CONTROL_XON_XOFF;
813
814                 if (cflag&CRTSCTS) {
815                         arg |= DIGI_INPUT_FLOW_CONTROL_RTS;
816
817                         /* On USB-4 it is necessary to assert RTS prior */
818                         /* to selecting RTS input flow control.  */
819                         buf[i++] = DIGI_CMD_SET_RTS_SIGNAL;
820                         buf[i++] = priv->dp_port_num;
821                         buf[i++] = DIGI_RTS_ACTIVE;
822                         buf[i++] = 0;
823
824                 } else {
825                         arg &= ~DIGI_INPUT_FLOW_CONTROL_RTS;
826                 }
827                 buf[i++] = DIGI_CMD_SET_INPUT_FLOW_CONTROL;
828                 buf[i++] = priv->dp_port_num;
829                 buf[i++] = arg;
830                 buf[i++] = 0;
831         }
832
833         /* set output flow control */
834         if ((iflag & IXON) != (old_iflag & IXON)
835             || (cflag & CRTSCTS) != (old_cflag & CRTSCTS)) {
836                 arg = 0;
837                 if (iflag & IXON)
838                         arg |= DIGI_OUTPUT_FLOW_CONTROL_XON_XOFF;
839                 else
840                         arg &= ~DIGI_OUTPUT_FLOW_CONTROL_XON_XOFF;
841
842                 if (cflag & CRTSCTS) {
843                         arg |= DIGI_OUTPUT_FLOW_CONTROL_CTS;
844                 } else {
845                         arg &= ~DIGI_OUTPUT_FLOW_CONTROL_CTS;
846                         tty->hw_stopped = 0;
847                 }
848
849                 buf[i++] = DIGI_CMD_SET_OUTPUT_FLOW_CONTROL;
850                 buf[i++] = priv->dp_port_num;
851                 buf[i++] = arg;
852                 buf[i++] = 0;
853         }
854
855         /* set receive enable/disable */
856         if ((cflag & CREAD) != (old_cflag & CREAD)) {
857                 if (cflag & CREAD)
858                         arg = DIGI_ENABLE;
859                 else
860                         arg = DIGI_DISABLE;
861
862                 buf[i++] = DIGI_CMD_RECEIVE_ENABLE;
863                 buf[i++] = priv->dp_port_num;
864                 buf[i++] = arg;
865                 buf[i++] = 0;
866         }
867         ret = digi_write_oob_command(port, buf, i, 1);
868         if (ret != 0)
869                 dbg("digi_set_termios: write oob failed, ret=%d", ret);
870         tty_encode_baud_rate(tty, baud, baud);
871 }
872
873
874 static void digi_break_ctl(struct tty_struct *tty, int break_state)
875 {
876         struct usb_serial_port *port = tty->driver_data;
877         unsigned char buf[4];
878
879         buf[0] = DIGI_CMD_BREAK_CONTROL;
880         buf[1] = 2;                             /* length */
881         buf[2] = break_state ? 1 : 0;
882         buf[3] = 0;                             /* pad */
883         digi_write_inb_command(port, buf, 4, 0);
884 }
885
886
887 static int digi_tiocmget(struct tty_struct *tty)
888 {
889         struct usb_serial_port *port = tty->driver_data;
890         struct digi_port *priv = usb_get_serial_port_data(port);
891         unsigned int val;
892         unsigned long flags;
893
894         spin_lock_irqsave(&priv->dp_port_lock, flags);
895         val = priv->dp_modem_signals;
896         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
897         return val;
898 }
899
900
901 static int digi_tiocmset(struct tty_struct *tty,
902                                         unsigned int set, unsigned int clear)
903 {
904         struct usb_serial_port *port = tty->driver_data;
905         struct digi_port *priv = usb_get_serial_port_data(port);
906         unsigned int val;
907         unsigned long flags;
908
909         spin_lock_irqsave(&priv->dp_port_lock, flags);
910         val = (priv->dp_modem_signals & ~clear) | set;
911         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
912         return digi_set_modem_signals(port, val, 1);
913 }
914
915
916 static int digi_write(struct tty_struct *tty, struct usb_serial_port *port,
917                                         const unsigned char *buf, int count)
918 {
919
920         int ret, data_len, new_len;
921         struct digi_port *priv = usb_get_serial_port_data(port);
922         unsigned char *data = port->write_urb->transfer_buffer;
923         unsigned long flags = 0;
924
925         dbg("digi_write: TOP: port=%d, count=%d, in_interrupt=%ld",
926                 priv->dp_port_num, count, in_interrupt());
927
928         /* copy user data (which can sleep) before getting spin lock */
929         count = min(count, port->bulk_out_size-2);
930         count = min(64, count);
931
932         /* be sure only one write proceeds at a time */
933         /* there are races on the port private buffer */
934         spin_lock_irqsave(&priv->dp_port_lock, flags);
935
936         /* wait for urb status clear to submit another urb */
937         if (priv->dp_write_urb_in_use) {
938                 /* buffer data if count is 1 (probably put_char) if possible */
939                 if (count == 1 && priv->dp_out_buf_len < DIGI_OUT_BUF_SIZE) {
940                         priv->dp_out_buf[priv->dp_out_buf_len++] = *buf;
941                         new_len = 1;
942                 } else {
943                         new_len = 0;
944                 }
945                 spin_unlock_irqrestore(&priv->dp_port_lock, flags);
946                 return new_len;
947         }
948
949         /* allow space for any buffered data and for new data, up to */
950         /* transfer buffer size - 2 (for command and length bytes) */
951         new_len = min(count, port->bulk_out_size-2-priv->dp_out_buf_len);
952         data_len = new_len + priv->dp_out_buf_len;
953
954         if (data_len == 0) {
955                 spin_unlock_irqrestore(&priv->dp_port_lock, flags);
956                 return 0;
957         }
958
959         port->write_urb->transfer_buffer_length = data_len+2;
960
961         *data++ = DIGI_CMD_SEND_DATA;
962         *data++ = data_len;
963
964         /* copy in buffered data first */
965         memcpy(data, priv->dp_out_buf, priv->dp_out_buf_len);
966         data += priv->dp_out_buf_len;
967
968         /* copy in new data */
969         memcpy(data, buf, new_len);
970
971         ret = usb_submit_urb(port->write_urb, GFP_ATOMIC);
972         if (ret == 0) {
973                 priv->dp_write_urb_in_use = 1;
974                 ret = new_len;
975                 priv->dp_out_buf_len = 0;
976         }
977
978         /* return length of new data written, or error */
979         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
980         if (ret < 0)
981                 dev_err_console(port,
982                         "%s: usb_submit_urb failed, ret=%d, port=%d\n",
983                         __func__, ret, priv->dp_port_num);
984         dbg("digi_write: returning %d", ret);
985         return ret;
986
987 }
988
989 static void digi_write_bulk_callback(struct urb *urb)
990 {
991
992         struct usb_serial_port *port = urb->context;
993         struct usb_serial *serial;
994         struct digi_port *priv;
995         struct digi_serial *serial_priv;
996         int ret = 0;
997         int status = urb->status;
998
999         /* port and serial sanity check */
1000         if (port == NULL || (priv = usb_get_serial_port_data(port)) == NULL) {
1001                 pr_err("%s: port or port->private is NULL, status=%d\n",
1002                         __func__, status);
1003                 return;
1004         }
1005         serial = port->serial;
1006         if (serial == NULL || (serial_priv = usb_get_serial_data(serial)) == NULL) {
1007                 dev_err(&port->dev,
1008                         "%s: serial or serial->private is NULL, status=%d\n",
1009                         __func__, status);
1010                 return;
1011         }
1012
1013         /* handle oob callback */
1014         if (priv->dp_port_num == serial_priv->ds_oob_port_num) {
1015                 dbg("digi_write_bulk_callback: oob callback");
1016                 spin_lock(&priv->dp_port_lock);
1017                 priv->dp_write_urb_in_use = 0;
1018                 wake_up_interruptible(&port->write_wait);
1019                 spin_unlock(&priv->dp_port_lock);
1020                 return;
1021         }
1022
1023         /* try to send any buffered data on this port */
1024         spin_lock(&priv->dp_port_lock);
1025         priv->dp_write_urb_in_use = 0;
1026         if (priv->dp_out_buf_len > 0) {
1027                 *((unsigned char *)(port->write_urb->transfer_buffer))
1028                         = (unsigned char)DIGI_CMD_SEND_DATA;
1029                 *((unsigned char *)(port->write_urb->transfer_buffer) + 1)
1030                         = (unsigned char)priv->dp_out_buf_len;
1031                 port->write_urb->transfer_buffer_length =
1032                                                 priv->dp_out_buf_len + 2;
1033                 memcpy(port->write_urb->transfer_buffer + 2, priv->dp_out_buf,
1034                         priv->dp_out_buf_len);
1035                 ret = usb_submit_urb(port->write_urb, GFP_ATOMIC);
1036                 if (ret == 0) {
1037                         priv->dp_write_urb_in_use = 1;
1038                         priv->dp_out_buf_len = 0;
1039                 }
1040         }
1041         /* wake up processes sleeping on writes immediately */
1042         digi_wakeup_write(port);
1043         /* also queue up a wakeup at scheduler time, in case we */
1044         /* lost the race in write_chan(). */
1045         schedule_work(&priv->dp_wakeup_work);
1046
1047         spin_unlock(&priv->dp_port_lock);
1048         if (ret && ret != -EPERM)
1049                 dev_err_console(port,
1050                         "%s: usb_submit_urb failed, ret=%d, port=%d\n",
1051                         __func__, ret, priv->dp_port_num);
1052 }
1053
1054 static int digi_write_room(struct tty_struct *tty)
1055 {
1056         struct usb_serial_port *port = tty->driver_data;
1057         struct digi_port *priv = usb_get_serial_port_data(port);
1058         int room;
1059         unsigned long flags = 0;
1060
1061         spin_lock_irqsave(&priv->dp_port_lock, flags);
1062
1063         if (priv->dp_write_urb_in_use)
1064                 room = 0;
1065         else
1066                 room = port->bulk_out_size - 2 - priv->dp_out_buf_len;
1067
1068         spin_unlock_irqrestore(&priv->dp_port_lock, flags);
1069         dbg("digi_write_room: port=%d, room=%d", priv->dp_port_num, room);
1070         return room;
1071
1072 }
1073
1074 static int digi_chars_in_buffer(struct tty_struct *tty)
1075 {
1076         struct usb_serial_port *port = tty->driver_data;
1077         struct digi_port *priv = usb_get_serial_port_data(port);
1078
1079         if (priv->dp_write_urb_in_use) {
1080                 dbg("digi_chars_in_buffer: port=%d, chars=%d",
1081                         priv->dp_port_num, port->bulk_out_size - 2);
1082                 /* return(port->bulk_out_size - 2); */
1083                 return 256;
1084         } else {
1085                 dbg("digi_chars_in_buffer: port=%d, chars=%d",
1086                         priv->dp_port_num, priv->dp_out_buf_len);
1087                 return priv->dp_out_buf_len;
1088         }
1089
1090 }
1091
1092 static void digi_dtr_rts(struct usb_serial_port *port, int on)
1093 {
1094         /* Adjust DTR and RTS */
1095         digi_set_modem_signals(port, on * (TIOCM_DTR|TIOCM_RTS), 1);
1096 }
1097
1098 static int digi_open(struct tty_struct *tty, struct usb_serial_port *port)
1099 {
1100         int ret;
1101         unsigned char buf[32];
1102         struct digi_port *priv = usb_get_serial_port_data(port);
1103         struct ktermios not_termios;
1104
1105         /* be sure the device is started up */
1106         if (digi_startup_device(port->serial) != 0)
1107                 return -ENXIO;
1108
1109         /* read modem signals automatically whenever they change */
1110         buf[0] = DIGI_CMD_READ_INPUT_SIGNALS;
1111         buf[1] = priv->dp_port_num;
1112         buf[2] = DIGI_ENABLE;
1113         buf[3] = 0;
1114
1115         /* flush fifos */
1116         buf[4] = DIGI_CMD_IFLUSH_FIFO;
1117         buf[5] = priv->dp_port_num;
1118         buf[6] = DIGI_FLUSH_TX | DIGI_FLUSH_RX;
1119         buf[7] = 0;
1120
1121         ret = digi_write_oob_command(port, buf, 8, 1);
1122         if (ret != 0)
1123                 dbg("digi_open: write oob failed, ret=%d", ret);
1124
1125         /* set termios settings */
1126         if (tty) {
1127                 not_termios.c_cflag = ~tty->termios->c_cflag;
1128                 not_termios.c_iflag = ~tty->termios->c_iflag;
1129                 digi_set_termios(tty, port, &not_termios);
1130         }
1131         return 0;
1132 }
1133
1134
1135 static void digi_close(struct usb_serial_port *port)
1136 {
1137         DEFINE_WAIT(wait);
1138         int ret;
1139         unsigned char buf[32];
1140         struct digi_port *priv = usb_get_serial_port_data(port);
1141
1142         mutex_lock(&port->serial->disc_mutex);
1143         /* if disconnected, just clear flags */
1144         if (port->serial->disconnected)
1145                 goto exit;
1146
1147         if (port->serial->dev) {
1148                 /* FIXME: Transmit idle belongs in the wait_unti_sent path */
1149                 digi_transmit_idle(port, DIGI_CLOSE_TIMEOUT);
1150
1151                 /* disable input flow control */
1152                 buf[0] = DIGI_CMD_SET_INPUT_FLOW_CONTROL;
1153                 buf[1] = priv->dp_port_num;
1154                 buf[2] = DIGI_DISABLE;
1155                 buf[3] = 0;
1156
1157                 /* disable output flow control */
1158                 buf[4] = DIGI_CMD_SET_OUTPUT_FLOW_CONTROL;
1159                 buf[5] = priv->dp_port_num;
1160                 buf[6] = DIGI_DISABLE;
1161                 buf[7] = 0;
1162
1163                 /* disable reading modem signals automatically */
1164                 buf[8] = DIGI_CMD_READ_INPUT_SIGNALS;
1165                 buf[9] = priv->dp_port_num;
1166                 buf[10] = DIGI_DISABLE;
1167                 buf[11] = 0;
1168
1169                 /* disable receive */
1170                 buf[12] = DIGI_CMD_RECEIVE_ENABLE;
1171                 buf[13] = priv->dp_port_num;
1172                 buf[14] = DIGI_DISABLE;
1173                 buf[15] = 0;
1174
1175                 /* flush fifos */
1176                 buf[16] = DIGI_CMD_IFLUSH_FIFO;
1177                 buf[17] = priv->dp_port_num;
1178                 buf[18] = DIGI_FLUSH_TX | DIGI_FLUSH_RX;
1179                 buf[19] = 0;
1180
1181                 ret = digi_write_oob_command(port, buf, 20, 0);
1182                 if (ret != 0)
1183                         dbg("digi_close: write oob failed, ret=%d", ret);
1184
1185                 /* wait for final commands on oob port to complete */
1186                 prepare_to_wait(&priv->dp_flush_wait, &wait,
1187                                                         TASK_INTERRUPTIBLE);
1188                 schedule_timeout(DIGI_CLOSE_TIMEOUT);
1189                 finish_wait(&priv->dp_flush_wait, &wait);
1190
1191                 /* shutdown any outstanding bulk writes */
1192                 usb_kill_urb(port->write_urb);
1193         }
1194 exit:
1195         spin_lock_irq(&priv->dp_port_lock);
1196         priv->dp_write_urb_in_use = 0;
1197         wake_up_interruptible(&priv->dp_close_wait);
1198         spin_unlock_irq(&priv->dp_port_lock);
1199         mutex_unlock(&port->serial->disc_mutex);
1200 }
1201
1202
1203 /*
1204  *  Digi Startup Device
1205  *
1206  *  Starts reads on all ports.  Must be called AFTER startup, with
1207  *  urbs initialized.  Returns 0 if successful, non-zero error otherwise.
1208  */
1209
1210 static int digi_startup_device(struct usb_serial *serial)
1211 {
1212         int i, ret = 0;
1213         struct digi_serial *serial_priv = usb_get_serial_data(serial);
1214         struct usb_serial_port *port;
1215
1216         /* be sure this happens exactly once */
1217         spin_lock(&serial_priv->ds_serial_lock);
1218         if (serial_priv->ds_device_started) {
1219                 spin_unlock(&serial_priv->ds_serial_lock);
1220                 return 0;
1221         }
1222         serial_priv->ds_device_started = 1;
1223         spin_unlock(&serial_priv->ds_serial_lock);
1224
1225         /* start reading from each bulk in endpoint for the device */
1226         /* set USB_DISABLE_SPD flag for write bulk urbs */
1227         for (i = 0; i < serial->type->num_ports + 1; i++) {
1228                 port = serial->port[i];
1229                 ret = usb_submit_urb(port->read_urb, GFP_KERNEL);
1230                 if (ret != 0) {
1231                         dev_err(&port->dev,
1232                                 "%s: usb_submit_urb failed, ret=%d, port=%d\n",
1233                                 __func__, ret, i);
1234                         break;
1235                 }
1236         }
1237         return ret;
1238 }
1239
1240
1241 static int digi_startup(struct usb_serial *serial)
1242 {
1243
1244         int i;
1245         struct digi_port *priv;
1246         struct digi_serial *serial_priv;
1247
1248         /* allocate the private data structures for all ports */
1249         /* number of regular ports + 1 for the out-of-band port */
1250         for (i = 0; i < serial->type->num_ports + 1; i++) {
1251                 /* allocate port private structure */
1252                 priv = kmalloc(sizeof(struct digi_port), GFP_KERNEL);
1253                 if (priv == NULL) {
1254                         while (--i >= 0)
1255                                 kfree(usb_get_serial_port_data(serial->port[i]));
1256                         return 1;                       /* error */
1257                 }
1258
1259                 /* initialize port private structure */
1260                 spin_lock_init(&priv->dp_port_lock);
1261                 priv->dp_port_num = i;
1262                 priv->dp_out_buf_len = 0;
1263                 priv->dp_write_urb_in_use = 0;
1264                 priv->dp_modem_signals = 0;
1265                 init_waitqueue_head(&priv->dp_modem_change_wait);
1266                 priv->dp_transmit_idle = 0;
1267                 init_waitqueue_head(&priv->dp_transmit_idle_wait);
1268                 priv->dp_throttled = 0;
1269                 priv->dp_throttle_restart = 0;
1270                 init_waitqueue_head(&priv->dp_flush_wait);
1271                 init_waitqueue_head(&priv->dp_close_wait);
1272                 INIT_WORK(&priv->dp_wakeup_work, digi_wakeup_write_lock);
1273                 priv->dp_port = serial->port[i];
1274                 /* initialize write wait queue for this port */
1275                 init_waitqueue_head(&serial->port[i]->write_wait);
1276
1277                 usb_set_serial_port_data(serial->port[i], priv);
1278         }
1279
1280         /* allocate serial private structure */
1281         serial_priv = kmalloc(sizeof(struct digi_serial), GFP_KERNEL);
1282         if (serial_priv == NULL) {
1283                 for (i = 0; i < serial->type->num_ports + 1; i++)
1284                         kfree(usb_get_serial_port_data(serial->port[i]));
1285                 return 1;                       /* error */
1286         }
1287
1288         /* initialize serial private structure */
1289         spin_lock_init(&serial_priv->ds_serial_lock);
1290         serial_priv->ds_oob_port_num = serial->type->num_ports;
1291         serial_priv->ds_oob_port = serial->port[serial_priv->ds_oob_port_num];
1292         serial_priv->ds_device_started = 0;
1293         usb_set_serial_data(serial, serial_priv);
1294
1295         return 0;
1296 }
1297
1298
1299 static void digi_disconnect(struct usb_serial *serial)
1300 {
1301         int i;
1302
1303         /* stop reads and writes on all ports */
1304         for (i = 0; i < serial->type->num_ports + 1; i++) {
1305                 usb_kill_urb(serial->port[i]->read_urb);
1306                 usb_kill_urb(serial->port[i]->write_urb);
1307         }
1308 }
1309
1310
1311 static void digi_release(struct usb_serial *serial)
1312 {
1313         int i;
1314
1315         /* free the private data structures for all ports */
1316         /* number of regular ports + 1 for the out-of-band port */
1317         for (i = 0; i < serial->type->num_ports + 1; i++)
1318                 kfree(usb_get_serial_port_data(serial->port[i]));
1319         kfree(usb_get_serial_data(serial));
1320 }
1321
1322
1323 static void digi_read_bulk_callback(struct urb *urb)
1324 {
1325         struct usb_serial_port *port = urb->context;
1326         struct digi_port *priv;
1327         struct digi_serial *serial_priv;
1328         int ret;
1329         int status = urb->status;
1330
1331         /* port sanity check, do not resubmit if port is not valid */
1332         if (port == NULL)
1333                 return;
1334         priv = usb_get_serial_port_data(port);
1335         if (priv == NULL) {
1336                 dev_err(&port->dev, "%s: port->private is NULL, status=%d\n",
1337                         __func__, status);
1338                 return;
1339         }
1340         if (port->serial == NULL ||
1341                 (serial_priv = usb_get_serial_data(port->serial)) == NULL) {
1342                 dev_err(&port->dev, "%s: serial is bad or serial->private "
1343                         "is NULL, status=%d\n", __func__, status);
1344                 return;
1345         }
1346
1347         /* do not resubmit urb if it has any status error */
1348         if (status) {
1349                 dev_err(&port->dev,
1350                         "%s: nonzero read bulk status: status=%d, port=%d\n",
1351                         __func__, status, priv->dp_port_num);
1352                 return;
1353         }
1354
1355         /* handle oob or inb callback, do not resubmit if error */
1356         if (priv->dp_port_num == serial_priv->ds_oob_port_num) {
1357                 if (digi_read_oob_callback(urb) != 0)
1358                         return;
1359         } else {
1360                 if (digi_read_inb_callback(urb) != 0)
1361                         return;
1362         }
1363
1364         /* continue read */
1365         ret = usb_submit_urb(urb, GFP_ATOMIC);
1366         if (ret != 0 && ret != -EPERM) {
1367                 dev_err(&port->dev,
1368                         "%s: failed resubmitting urb, ret=%d, port=%d\n",
1369                         __func__, ret, priv->dp_port_num);
1370         }
1371
1372 }
1373
1374 /*
1375  *  Digi Read INB Callback
1376  *
1377  *  Digi Read INB Callback handles reads on the in band ports, sending
1378  *  the data on to the tty subsystem.  When called we know port and
1379  *  port->private are not NULL and port->serial has been validated.
1380  *  It returns 0 if successful, 1 if successful but the port is
1381  *  throttled, and -1 if the sanity checks failed.
1382  */
1383
1384 static int digi_read_inb_callback(struct urb *urb)
1385 {
1386
1387         struct usb_serial_port *port = urb->context;
1388         struct tty_struct *tty;
1389         struct digi_port *priv = usb_get_serial_port_data(port);
1390         int opcode = ((unsigned char *)urb->transfer_buffer)[0];
1391         int len = ((unsigned char *)urb->transfer_buffer)[1];
1392         int port_status = ((unsigned char *)urb->transfer_buffer)[2];
1393         unsigned char *data = ((unsigned char *)urb->transfer_buffer) + 3;
1394         int flag, throttled;
1395         int status = urb->status;
1396
1397         /* do not process callbacks on closed ports */
1398         /* but do continue the read chain */
1399         if (urb->status == -ENOENT)
1400                 return 0;
1401
1402         /* short/multiple packet check */
1403         if (urb->actual_length != len + 2) {
1404                 dev_err(&port->dev, "%s: INCOMPLETE OR MULTIPLE PACKET, "
1405                         "status=%d, port=%d, opcode=%d, len=%d, "
1406                         "actual_length=%d, status=%d\n", __func__, status,
1407                         priv->dp_port_num, opcode, len, urb->actual_length,
1408                         port_status);
1409                 return -1;
1410         }
1411
1412         tty = tty_port_tty_get(&port->port);
1413         spin_lock(&priv->dp_port_lock);
1414
1415         /* check for throttle; if set, do not resubmit read urb */
1416         /* indicate the read chain needs to be restarted on unthrottle */
1417         throttled = priv->dp_throttled;
1418         if (throttled)
1419                 priv->dp_throttle_restart = 1;
1420
1421         /* receive data */
1422         if (tty && opcode == DIGI_CMD_RECEIVE_DATA) {
1423                 /* get flag from port_status */
1424                 flag = 0;
1425
1426                 /* overrun is special, not associated with a char */
1427                 if (port_status & DIGI_OVERRUN_ERROR)
1428                         tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1429
1430                 /* break takes precedence over parity, */
1431                 /* which takes precedence over framing errors */
1432                 if (port_status & DIGI_BREAK_ERROR)
1433                         flag = TTY_BREAK;
1434                 else if (port_status & DIGI_PARITY_ERROR)
1435                         flag = TTY_PARITY;
1436                 else if (port_status & DIGI_FRAMING_ERROR)
1437                         flag = TTY_FRAME;
1438
1439                 /* data length is len-1 (one byte of len is port_status) */
1440                 --len;
1441                 if (len > 0) {
1442                         tty_insert_flip_string_fixed_flag(tty, data, flag,
1443                                                                         len);
1444                         tty_flip_buffer_push(tty);
1445                 }
1446         }
1447         spin_unlock(&priv->dp_port_lock);
1448         tty_kref_put(tty);
1449
1450         if (opcode == DIGI_CMD_RECEIVE_DISABLE)
1451                 dbg("%s: got RECEIVE_DISABLE", __func__);
1452         else if (opcode != DIGI_CMD_RECEIVE_DATA)
1453                 dbg("%s: unknown opcode: %d", __func__, opcode);
1454
1455         return throttled ? 1 : 0;
1456
1457 }
1458
1459
1460 /*
1461  *  Digi Read OOB Callback
1462  *
1463  *  Digi Read OOB Callback handles reads on the out of band port.
1464  *  When called we know port and port->private are not NULL and
1465  *  the port->serial is valid.  It returns 0 if successful, and
1466  *  -1 if the sanity checks failed.
1467  */
1468
1469 static int digi_read_oob_callback(struct urb *urb)
1470 {
1471
1472         struct usb_serial_port *port = urb->context;
1473         struct usb_serial *serial = port->serial;
1474         struct tty_struct *tty;
1475         struct digi_port *priv = usb_get_serial_port_data(port);
1476         int opcode, line, status, val;
1477         int i;
1478         unsigned int rts;
1479
1480         /* handle each oob command */
1481         for (i = 0; i < urb->actual_length - 3;) {
1482                 opcode = ((unsigned char *)urb->transfer_buffer)[i++];
1483                 line = ((unsigned char *)urb->transfer_buffer)[i++];
1484                 status = ((unsigned char *)urb->transfer_buffer)[i++];
1485                 val = ((unsigned char *)urb->transfer_buffer)[i++];
1486
1487                 dbg("digi_read_oob_callback: opcode=%d, line=%d, status=%d, val=%d",
1488                         opcode, line, status, val);
1489
1490                 if (status != 0 || line >= serial->type->num_ports)
1491                         continue;
1492
1493                 port = serial->port[line];
1494
1495                 priv = usb_get_serial_port_data(port);
1496                 if (priv == NULL)
1497                         return -1;
1498
1499                 tty = tty_port_tty_get(&port->port);
1500
1501                 rts = 0;
1502                 if (tty)
1503                         rts = tty->termios->c_cflag & CRTSCTS;
1504                 
1505                 if (tty && opcode == DIGI_CMD_READ_INPUT_SIGNALS) {
1506                         spin_lock(&priv->dp_port_lock);
1507                         /* convert from digi flags to termiox flags */
1508                         if (val & DIGI_READ_INPUT_SIGNALS_CTS) {
1509                                 priv->dp_modem_signals |= TIOCM_CTS;
1510                                 /* port must be open to use tty struct */
1511                                 if (rts) {
1512                                         tty->hw_stopped = 0;
1513                                         digi_wakeup_write(port);
1514                                 }
1515                         } else {
1516                                 priv->dp_modem_signals &= ~TIOCM_CTS;
1517                                 /* port must be open to use tty struct */
1518                                 if (rts)
1519                                         tty->hw_stopped = 1;
1520                         }
1521                         if (val & DIGI_READ_INPUT_SIGNALS_DSR)
1522                                 priv->dp_modem_signals |= TIOCM_DSR;
1523                         else
1524                                 priv->dp_modem_signals &= ~TIOCM_DSR;
1525                         if (val & DIGI_READ_INPUT_SIGNALS_RI)
1526                                 priv->dp_modem_signals |= TIOCM_RI;
1527                         else
1528                                 priv->dp_modem_signals &= ~TIOCM_RI;
1529                         if (val & DIGI_READ_INPUT_SIGNALS_DCD)
1530                                 priv->dp_modem_signals |= TIOCM_CD;
1531                         else
1532                                 priv->dp_modem_signals &= ~TIOCM_CD;
1533
1534                         wake_up_interruptible(&priv->dp_modem_change_wait);
1535                         spin_unlock(&priv->dp_port_lock);
1536                 } else if (opcode == DIGI_CMD_TRANSMIT_IDLE) {
1537                         spin_lock(&priv->dp_port_lock);
1538                         priv->dp_transmit_idle = 1;
1539                         wake_up_interruptible(&priv->dp_transmit_idle_wait);
1540                         spin_unlock(&priv->dp_port_lock);
1541                 } else if (opcode == DIGI_CMD_IFLUSH_FIFO) {
1542                         wake_up_interruptible(&priv->dp_flush_wait);
1543                 }
1544                 tty_kref_put(tty);
1545         }
1546         return 0;
1547
1548 }
1549
1550 module_usb_serial_driver(serial_drivers, id_table_combined);
1551
1552 MODULE_AUTHOR(DRIVER_AUTHOR);
1553 MODULE_DESCRIPTION(DRIVER_DESC);
1554 MODULE_LICENSE("GPL");
1555
1556 module_param(debug, bool, S_IRUGO | S_IWUSR);
1557 MODULE_PARM_DESC(debug, "Debug enabled or not");