hso: Use a more common logging style
[cascardo/linux.git] / drivers / net / usb / hso.c
1 /******************************************************************************
2  *
3  * Driver for Option High Speed Mobile Devices.
4  *
5  *  Copyright (C) 2008 Option International
6  *                     Filip Aben <f.aben@option.com>
7  *                     Denis Joseph Barrow <d.barow@option.com>
8  *                     Jan Dumon <j.dumon@option.com>
9  *  Copyright (C) 2007 Andrew Bird (Sphere Systems Ltd)
10  *                      <ajb@spheresystems.co.uk>
11  *  Copyright (C) 2008 Greg Kroah-Hartman <gregkh@suse.de>
12  *  Copyright (C) 2008 Novell, Inc.
13  *
14  *  This program is free software; you can redistribute it and/or modify
15  *  it under the terms of the GNU General Public License version 2 as
16  *  published by the Free Software Foundation.
17  *
18  *  This program is distributed in the hope that it will be useful,
19  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
20  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  *  GNU General Public License for more details.
22  *
23  *  You should have received a copy of the GNU General Public License
24  *  along with this program; if not, write to the Free Software
25  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
26  *  USA
27  *
28  *
29  *****************************************************************************/
30
31 /******************************************************************************
32  *
33  * Description of the device:
34  *
35  * Interface 0: Contains the IP network interface on the bulk end points.
36  *              The multiplexed serial ports are using the interrupt and
37  *              control endpoints.
38  *              Interrupt contains a bitmap telling which multiplexed
39  *              serialport needs servicing.
40  *
41  * Interface 1: Diagnostics port, uses bulk only, do not submit urbs until the
42  *              port is opened, as this have a huge impact on the network port
43  *              throughput.
44  *
45  * Interface 2: Standard modem interface - circuit switched interface, this
46  *              can be used to make a standard ppp connection however it
47  *              should not be used in conjunction with the IP network interface
48  *              enabled for USB performance reasons i.e. if using this set
49  *              ideally disable_net=1.
50  *
51  *****************************************************************************/
52
53 #include <linux/sched.h>
54 #include <linux/slab.h>
55 #include <linux/init.h>
56 #include <linux/delay.h>
57 #include <linux/netdevice.h>
58 #include <linux/module.h>
59 #include <linux/ethtool.h>
60 #include <linux/usb.h>
61 #include <linux/tty.h>
62 #include <linux/tty_driver.h>
63 #include <linux/tty_flip.h>
64 #include <linux/kmod.h>
65 #include <linux/rfkill.h>
66 #include <linux/ip.h>
67 #include <linux/uaccess.h>
68 #include <linux/usb/cdc.h>
69 #include <net/arp.h>
70 #include <asm/byteorder.h>
71 #include <linux/serial_core.h>
72 #include <linux/serial.h>
73
74
75 #define MOD_AUTHOR                      "Option Wireless"
76 #define MOD_DESCRIPTION                 "USB High Speed Option driver"
77 #define MOD_LICENSE                     "GPL"
78
79 #define HSO_MAX_NET_DEVICES             10
80 #define HSO__MAX_MTU                    2048
81 #define DEFAULT_MTU                     1500
82 #define DEFAULT_MRU                     1500
83
84 #define CTRL_URB_RX_SIZE                1024
85 #define CTRL_URB_TX_SIZE                64
86
87 #define BULK_URB_RX_SIZE                4096
88 #define BULK_URB_TX_SIZE                8192
89
90 #define MUX_BULK_RX_BUF_SIZE            HSO__MAX_MTU
91 #define MUX_BULK_TX_BUF_SIZE            HSO__MAX_MTU
92 #define MUX_BULK_RX_BUF_COUNT           4
93 #define USB_TYPE_OPTION_VENDOR          0x20
94
95 /* These definitions are used with the struct hso_net flags element */
96 /* - use *_bit operations on it. (bit indices not values.) */
97 #define HSO_NET_RUNNING                 0
98
99 #define HSO_NET_TX_TIMEOUT              (HZ*10)
100
101 #define HSO_SERIAL_MAGIC                0x48534f31
102
103 /* Number of ttys to handle */
104 #define HSO_SERIAL_TTY_MINORS           256
105
106 #define MAX_RX_URBS                     2
107
108 /*****************************************************************************/
109 /* Debugging functions                                                       */
110 /*****************************************************************************/
111 #define hso_dbg(lvl, fmt, ...)                                          \
112 do {                                                                    \
113         if ((lvl) & debug)                                              \
114                 pr_info("[%d:%s] " fmt,                                 \
115                         __LINE__, __func__, ##__VA_ARGS__);             \
116 } while (0)
117
118 /*****************************************************************************/
119 /* Enumerators                                                               */
120 /*****************************************************************************/
121 enum pkt_parse_state {
122         WAIT_IP,
123         WAIT_DATA,
124         WAIT_SYNC
125 };
126
127 /*****************************************************************************/
128 /* Structs                                                                   */
129 /*****************************************************************************/
130
131 struct hso_shared_int {
132         struct usb_endpoint_descriptor *intr_endp;
133         void *shared_intr_buf;
134         struct urb *shared_intr_urb;
135         struct usb_device *usb;
136         int use_count;
137         int ref_count;
138         struct mutex shared_int_lock;
139 };
140
141 struct hso_net {
142         struct hso_device *parent;
143         struct net_device *net;
144         struct rfkill *rfkill;
145         char name[24];
146
147         struct usb_endpoint_descriptor *in_endp;
148         struct usb_endpoint_descriptor *out_endp;
149
150         struct urb *mux_bulk_rx_urb_pool[MUX_BULK_RX_BUF_COUNT];
151         struct urb *mux_bulk_tx_urb;
152         void *mux_bulk_rx_buf_pool[MUX_BULK_RX_BUF_COUNT];
153         void *mux_bulk_tx_buf;
154
155         struct sk_buff *skb_rx_buf;
156         struct sk_buff *skb_tx_buf;
157
158         enum pkt_parse_state rx_parse_state;
159         spinlock_t net_lock;
160
161         unsigned short rx_buf_size;
162         unsigned short rx_buf_missing;
163         struct iphdr rx_ip_hdr;
164
165         unsigned long flags;
166 };
167
168 enum rx_ctrl_state{
169         RX_IDLE,
170         RX_SENT,
171         RX_PENDING
172 };
173
174 #define BM_REQUEST_TYPE (0xa1)
175 #define B_NOTIFICATION  (0x20)
176 #define W_VALUE         (0x0)
177 #define W_LENGTH        (0x2)
178
179 #define B_OVERRUN       (0x1<<6)
180 #define B_PARITY        (0x1<<5)
181 #define B_FRAMING       (0x1<<4)
182 #define B_RING_SIGNAL   (0x1<<3)
183 #define B_BREAK         (0x1<<2)
184 #define B_TX_CARRIER    (0x1<<1)
185 #define B_RX_CARRIER    (0x1<<0)
186
187 struct hso_serial_state_notification {
188         u8 bmRequestType;
189         u8 bNotification;
190         u16 wValue;
191         u16 wIndex;
192         u16 wLength;
193         u16 UART_state_bitmap;
194 } __packed;
195
196 struct hso_tiocmget {
197         struct mutex mutex;
198         wait_queue_head_t waitq;
199         int    intr_completed;
200         struct usb_endpoint_descriptor *endp;
201         struct urb *urb;
202         struct hso_serial_state_notification serial_state_notification;
203         u16    prev_UART_state_bitmap;
204         struct uart_icount icount;
205 };
206
207
208 struct hso_serial {
209         struct hso_device *parent;
210         int magic;
211         u8 minor;
212
213         struct hso_shared_int *shared_int;
214
215         /* rx/tx urb could be either a bulk urb or a control urb depending
216            on which serial port it is used on. */
217         struct urb *rx_urb[MAX_RX_URBS];
218         u8 num_rx_urbs;
219         u8 *rx_data[MAX_RX_URBS];
220         u16 rx_data_length;     /* should contain allocated length */
221
222         struct urb *tx_urb;
223         u8 *tx_data;
224         u8 *tx_buffer;
225         u16 tx_data_length;     /* should contain allocated length */
226         u16 tx_data_count;
227         u16 tx_buffer_count;
228         struct usb_ctrlrequest ctrl_req_tx;
229         struct usb_ctrlrequest ctrl_req_rx;
230
231         struct usb_endpoint_descriptor *in_endp;
232         struct usb_endpoint_descriptor *out_endp;
233
234         enum rx_ctrl_state rx_state;
235         u8 rts_state;
236         u8 dtr_state;
237         unsigned tx_urb_used:1;
238
239         struct tty_port port;
240         /* from usb_serial_port */
241         spinlock_t serial_lock;
242
243         int (*write_data) (struct hso_serial *serial);
244         struct hso_tiocmget  *tiocmget;
245         /* Hacks required to get flow control
246          * working on the serial receive buffers
247          * so as not to drop characters on the floor.
248          */
249         int  curr_rx_urb_idx;
250         u8   rx_urb_filled[MAX_RX_URBS];
251         struct tasklet_struct unthrottle_tasklet;
252 };
253
254 struct hso_device {
255         union {
256                 struct hso_serial *dev_serial;
257                 struct hso_net *dev_net;
258         } port_data;
259
260         u32 port_spec;
261
262         u8 is_active;
263         u8 usb_gone;
264         struct work_struct async_get_intf;
265         struct work_struct async_put_intf;
266
267         struct usb_device *usb;
268         struct usb_interface *interface;
269
270         struct device *dev;
271         struct kref ref;
272         struct mutex mutex;
273 };
274
275 /* Type of interface */
276 #define HSO_INTF_MASK           0xFF00
277 #define HSO_INTF_MUX            0x0100
278 #define HSO_INTF_BULK           0x0200
279
280 /* Type of port */
281 #define HSO_PORT_MASK           0xFF
282 #define HSO_PORT_NO_PORT        0x0
283 #define HSO_PORT_CONTROL        0x1
284 #define HSO_PORT_APP            0x2
285 #define HSO_PORT_GPS            0x3
286 #define HSO_PORT_PCSC           0x4
287 #define HSO_PORT_APP2           0x5
288 #define HSO_PORT_GPS_CONTROL    0x6
289 #define HSO_PORT_MSD            0x7
290 #define HSO_PORT_VOICE          0x8
291 #define HSO_PORT_DIAG2          0x9
292 #define HSO_PORT_DIAG           0x10
293 #define HSO_PORT_MODEM          0x11
294 #define HSO_PORT_NETWORK        0x12
295
296 /* Additional device info */
297 #define HSO_INFO_MASK           0xFF000000
298 #define HSO_INFO_CRC_BUG        0x01000000
299
300 /*****************************************************************************/
301 /* Prototypes                                                                */
302 /*****************************************************************************/
303 /* Serial driver functions */
304 static int hso_serial_tiocmset(struct tty_struct *tty,
305                                unsigned int set, unsigned int clear);
306 static void ctrl_callback(struct urb *urb);
307 static int put_rxbuf_data(struct urb *urb, struct hso_serial *serial);
308 static void hso_kick_transmit(struct hso_serial *serial);
309 /* Helper functions */
310 static int hso_mux_submit_intr_urb(struct hso_shared_int *mux_int,
311                                    struct usb_device *usb, gfp_t gfp);
312 static void handle_usb_error(int status, const char *function,
313                              struct hso_device *hso_dev);
314 static struct usb_endpoint_descriptor *hso_get_ep(struct usb_interface *intf,
315                                                   int type, int dir);
316 static int hso_get_mux_ports(struct usb_interface *intf, unsigned char *ports);
317 static void hso_free_interface(struct usb_interface *intf);
318 static int hso_start_serial_device(struct hso_device *hso_dev, gfp_t flags);
319 static int hso_stop_serial_device(struct hso_device *hso_dev);
320 static int hso_start_net_device(struct hso_device *hso_dev);
321 static void hso_free_shared_int(struct hso_shared_int *shared_int);
322 static int hso_stop_net_device(struct hso_device *hso_dev);
323 static void hso_serial_ref_free(struct kref *ref);
324 static void hso_std_serial_read_bulk_callback(struct urb *urb);
325 static int hso_mux_serial_read(struct hso_serial *serial);
326 static void async_get_intf(struct work_struct *data);
327 static void async_put_intf(struct work_struct *data);
328 static int hso_put_activity(struct hso_device *hso_dev);
329 static int hso_get_activity(struct hso_device *hso_dev);
330 static void tiocmget_intr_callback(struct urb *urb);
331 /*****************************************************************************/
332 /* Helping functions                                                         */
333 /*****************************************************************************/
334
335 /* #define DEBUG */
336
337 static inline struct hso_net *dev2net(struct hso_device *hso_dev)
338 {
339         return hso_dev->port_data.dev_net;
340 }
341
342 static inline struct hso_serial *dev2ser(struct hso_device *hso_dev)
343 {
344         return hso_dev->port_data.dev_serial;
345 }
346
347 /* Debugging functions */
348 #ifdef DEBUG
349 static void dbg_dump(int line_count, const char *func_name, unsigned char *buf,
350                      unsigned int len)
351 {
352         static char name[255];
353
354         sprintf(name, "hso[%d:%s]", line_count, func_name);
355         print_hex_dump_bytes(name, DUMP_PREFIX_NONE, buf, len);
356 }
357
358 #define DUMP(buf_, len_)        \
359         dbg_dump(__LINE__, __func__, (unsigned char *)buf_, len_)
360
361 #define DUMP1(buf_, len_)                       \
362         do {                                    \
363                 if (0x01 & debug)               \
364                         DUMP(buf_, len_);       \
365         } while (0)
366 #else
367 #define DUMP(buf_, len_)
368 #define DUMP1(buf_, len_)
369 #endif
370
371 /* module parameters */
372 static int debug;
373 static int tty_major;
374 static int disable_net;
375
376 /* driver info */
377 static const char driver_name[] = "hso";
378 static const char tty_filename[] = "ttyHS";
379 static const char *version = __FILE__ ": " MOD_AUTHOR;
380 /* the usb driver itself (registered in hso_init) */
381 static struct usb_driver hso_driver;
382 /* serial structures */
383 static struct tty_driver *tty_drv;
384 static struct hso_device *serial_table[HSO_SERIAL_TTY_MINORS];
385 static struct hso_device *network_table[HSO_MAX_NET_DEVICES];
386 static spinlock_t serial_table_lock;
387
388 static const s32 default_port_spec[] = {
389         HSO_INTF_MUX | HSO_PORT_NETWORK,
390         HSO_INTF_BULK | HSO_PORT_DIAG,
391         HSO_INTF_BULK | HSO_PORT_MODEM,
392         0
393 };
394
395 static const s32 icon321_port_spec[] = {
396         HSO_INTF_MUX | HSO_PORT_NETWORK,
397         HSO_INTF_BULK | HSO_PORT_DIAG2,
398         HSO_INTF_BULK | HSO_PORT_MODEM,
399         HSO_INTF_BULK | HSO_PORT_DIAG,
400         0
401 };
402
403 #define default_port_device(vendor, product)    \
404         USB_DEVICE(vendor, product),    \
405                 .driver_info = (kernel_ulong_t)default_port_spec
406
407 #define icon321_port_device(vendor, product)    \
408         USB_DEVICE(vendor, product),    \
409                 .driver_info = (kernel_ulong_t)icon321_port_spec
410
411 /* list of devices we support */
412 static const struct usb_device_id hso_ids[] = {
413         {default_port_device(0x0af0, 0x6711)},
414         {default_port_device(0x0af0, 0x6731)},
415         {default_port_device(0x0af0, 0x6751)},
416         {default_port_device(0x0af0, 0x6771)},
417         {default_port_device(0x0af0, 0x6791)},
418         {default_port_device(0x0af0, 0x6811)},
419         {default_port_device(0x0af0, 0x6911)},
420         {default_port_device(0x0af0, 0x6951)},
421         {default_port_device(0x0af0, 0x6971)},
422         {default_port_device(0x0af0, 0x7011)},
423         {default_port_device(0x0af0, 0x7031)},
424         {default_port_device(0x0af0, 0x7051)},
425         {default_port_device(0x0af0, 0x7071)},
426         {default_port_device(0x0af0, 0x7111)},
427         {default_port_device(0x0af0, 0x7211)},
428         {default_port_device(0x0af0, 0x7251)},
429         {default_port_device(0x0af0, 0x7271)},
430         {default_port_device(0x0af0, 0x7311)},
431         {default_port_device(0x0af0, 0xc031)},  /* Icon-Edge */
432         {icon321_port_device(0x0af0, 0xd013)},  /* Module HSxPA */
433         {icon321_port_device(0x0af0, 0xd031)},  /* Icon-321 */
434         {icon321_port_device(0x0af0, 0xd033)},  /* Icon-322 */
435         {USB_DEVICE(0x0af0, 0x7301)},           /* GE40x */
436         {USB_DEVICE(0x0af0, 0x7361)},           /* GE40x */
437         {USB_DEVICE(0x0af0, 0x7381)},           /* GE40x */
438         {USB_DEVICE(0x0af0, 0x7401)},           /* GI 0401 */
439         {USB_DEVICE(0x0af0, 0x7501)},           /* GTM 382 */
440         {USB_DEVICE(0x0af0, 0x7601)},           /* GE40x */
441         {USB_DEVICE(0x0af0, 0x7701)},
442         {USB_DEVICE(0x0af0, 0x7706)},
443         {USB_DEVICE(0x0af0, 0x7801)},
444         {USB_DEVICE(0x0af0, 0x7901)},
445         {USB_DEVICE(0x0af0, 0x7A01)},
446         {USB_DEVICE(0x0af0, 0x7A05)},
447         {USB_DEVICE(0x0af0, 0x8200)},
448         {USB_DEVICE(0x0af0, 0x8201)},
449         {USB_DEVICE(0x0af0, 0x8300)},
450         {USB_DEVICE(0x0af0, 0x8302)},
451         {USB_DEVICE(0x0af0, 0x8304)},
452         {USB_DEVICE(0x0af0, 0x8400)},
453         {USB_DEVICE(0x0af0, 0x8600)},
454         {USB_DEVICE(0x0af0, 0x8800)},
455         {USB_DEVICE(0x0af0, 0x8900)},
456         {USB_DEVICE(0x0af0, 0x9000)},
457         {USB_DEVICE(0x0af0, 0x9200)},           /* Option GTM671WFS */
458         {USB_DEVICE(0x0af0, 0xd035)},
459         {USB_DEVICE(0x0af0, 0xd055)},
460         {USB_DEVICE(0x0af0, 0xd155)},
461         {USB_DEVICE(0x0af0, 0xd255)},
462         {USB_DEVICE(0x0af0, 0xd057)},
463         {USB_DEVICE(0x0af0, 0xd157)},
464         {USB_DEVICE(0x0af0, 0xd257)},
465         {USB_DEVICE(0x0af0, 0xd357)},
466         {USB_DEVICE(0x0af0, 0xd058)},
467         {USB_DEVICE(0x0af0, 0xc100)},
468         {}
469 };
470 MODULE_DEVICE_TABLE(usb, hso_ids);
471
472 /* Sysfs attribute */
473 static ssize_t hso_sysfs_show_porttype(struct device *dev,
474                                        struct device_attribute *attr,
475                                        char *buf)
476 {
477         struct hso_device *hso_dev = dev_get_drvdata(dev);
478         char *port_name;
479
480         if (!hso_dev)
481                 return 0;
482
483         switch (hso_dev->port_spec & HSO_PORT_MASK) {
484         case HSO_PORT_CONTROL:
485                 port_name = "Control";
486                 break;
487         case HSO_PORT_APP:
488                 port_name = "Application";
489                 break;
490         case HSO_PORT_APP2:
491                 port_name = "Application2";
492                 break;
493         case HSO_PORT_GPS:
494                 port_name = "GPS";
495                 break;
496         case HSO_PORT_GPS_CONTROL:
497                 port_name = "GPS Control";
498                 break;
499         case HSO_PORT_PCSC:
500                 port_name = "PCSC";
501                 break;
502         case HSO_PORT_DIAG:
503                 port_name = "Diagnostic";
504                 break;
505         case HSO_PORT_DIAG2:
506                 port_name = "Diagnostic2";
507                 break;
508         case HSO_PORT_MODEM:
509                 port_name = "Modem";
510                 break;
511         case HSO_PORT_NETWORK:
512                 port_name = "Network";
513                 break;
514         default:
515                 port_name = "Unknown";
516                 break;
517         }
518
519         return sprintf(buf, "%s\n", port_name);
520 }
521 static DEVICE_ATTR(hsotype, S_IRUGO, hso_sysfs_show_porttype, NULL);
522
523 static struct attribute *hso_serial_dev_attrs[] = {
524         &dev_attr_hsotype.attr,
525         NULL
526 };
527
528 ATTRIBUTE_GROUPS(hso_serial_dev);
529
530 static int hso_urb_to_index(struct hso_serial *serial, struct urb *urb)
531 {
532         int idx;
533
534         for (idx = 0; idx < serial->num_rx_urbs; idx++)
535                 if (serial->rx_urb[idx] == urb)
536                         return idx;
537         dev_err(serial->parent->dev, "hso_urb_to_index failed\n");
538         return -1;
539 }
540
541 /* converts mux value to a port spec value */
542 static u32 hso_mux_to_port(int mux)
543 {
544         u32 result;
545
546         switch (mux) {
547         case 0x1:
548                 result = HSO_PORT_CONTROL;
549                 break;
550         case 0x2:
551                 result = HSO_PORT_APP;
552                 break;
553         case 0x4:
554                 result = HSO_PORT_PCSC;
555                 break;
556         case 0x8:
557                 result = HSO_PORT_GPS;
558                 break;
559         case 0x10:
560                 result = HSO_PORT_APP2;
561                 break;
562         default:
563                 result = HSO_PORT_NO_PORT;
564         }
565         return result;
566 }
567
568 /* converts port spec value to a mux value */
569 static u32 hso_port_to_mux(int port)
570 {
571         u32 result;
572
573         switch (port & HSO_PORT_MASK) {
574         case HSO_PORT_CONTROL:
575                 result = 0x0;
576                 break;
577         case HSO_PORT_APP:
578                 result = 0x1;
579                 break;
580         case HSO_PORT_PCSC:
581                 result = 0x2;
582                 break;
583         case HSO_PORT_GPS:
584                 result = 0x3;
585                 break;
586         case HSO_PORT_APP2:
587                 result = 0x4;
588                 break;
589         default:
590                 result = 0x0;
591         }
592         return result;
593 }
594
595 static struct hso_serial *get_serial_by_shared_int_and_type(
596                                         struct hso_shared_int *shared_int,
597                                         int mux)
598 {
599         int i, port;
600
601         port = hso_mux_to_port(mux);
602
603         for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) {
604                 if (serial_table[i] &&
605                     (dev2ser(serial_table[i])->shared_int == shared_int) &&
606                     ((serial_table[i]->port_spec & HSO_PORT_MASK) == port)) {
607                         return dev2ser(serial_table[i]);
608                 }
609         }
610
611         return NULL;
612 }
613
614 static struct hso_serial *get_serial_by_index(unsigned index)
615 {
616         struct hso_serial *serial = NULL;
617         unsigned long flags;
618
619         spin_lock_irqsave(&serial_table_lock, flags);
620         if (serial_table[index])
621                 serial = dev2ser(serial_table[index]);
622         spin_unlock_irqrestore(&serial_table_lock, flags);
623
624         return serial;
625 }
626
627 static int get_free_serial_index(void)
628 {
629         int index;
630         unsigned long flags;
631
632         spin_lock_irqsave(&serial_table_lock, flags);
633         for (index = 0; index < HSO_SERIAL_TTY_MINORS; index++) {
634                 if (serial_table[index] == NULL) {
635                         spin_unlock_irqrestore(&serial_table_lock, flags);
636                         return index;
637                 }
638         }
639         spin_unlock_irqrestore(&serial_table_lock, flags);
640
641         printk(KERN_ERR "%s: no free serial devices in table\n", __func__);
642         return -1;
643 }
644
645 static void set_serial_by_index(unsigned index, struct hso_serial *serial)
646 {
647         unsigned long flags;
648
649         spin_lock_irqsave(&serial_table_lock, flags);
650         if (serial)
651                 serial_table[index] = serial->parent;
652         else
653                 serial_table[index] = NULL;
654         spin_unlock_irqrestore(&serial_table_lock, flags);
655 }
656
657 static void handle_usb_error(int status, const char *function,
658                              struct hso_device *hso_dev)
659 {
660         char *explanation;
661
662         switch (status) {
663         case -ENODEV:
664                 explanation = "no device";
665                 break;
666         case -ENOENT:
667                 explanation = "endpoint not enabled";
668                 break;
669         case -EPIPE:
670                 explanation = "endpoint stalled";
671                 break;
672         case -ENOSPC:
673                 explanation = "not enough bandwidth";
674                 break;
675         case -ESHUTDOWN:
676                 explanation = "device disabled";
677                 break;
678         case -EHOSTUNREACH:
679                 explanation = "device suspended";
680                 break;
681         case -EINVAL:
682         case -EAGAIN:
683         case -EFBIG:
684         case -EMSGSIZE:
685                 explanation = "internal error";
686                 break;
687         case -EILSEQ:
688         case -EPROTO:
689         case -ETIME:
690         case -ETIMEDOUT:
691                 explanation = "protocol error";
692                 if (hso_dev)
693                         usb_queue_reset_device(hso_dev->interface);
694                 break;
695         default:
696                 explanation = "unknown status";
697                 break;
698         }
699
700         /* log a meaningful explanation of an USB status */
701         hso_dbg(0x1, "%s: received USB status - %s (%d)\n",
702                 function, explanation, status);
703 }
704
705 /* Network interface functions */
706
707 /* called when net interface is brought up by ifconfig */
708 static int hso_net_open(struct net_device *net)
709 {
710         struct hso_net *odev = netdev_priv(net);
711         unsigned long flags = 0;
712
713         if (!odev) {
714                 dev_err(&net->dev, "No net device !\n");
715                 return -ENODEV;
716         }
717
718         odev->skb_tx_buf = NULL;
719
720         /* setup environment */
721         spin_lock_irqsave(&odev->net_lock, flags);
722         odev->rx_parse_state = WAIT_IP;
723         odev->rx_buf_size = 0;
724         odev->rx_buf_missing = sizeof(struct iphdr);
725         spin_unlock_irqrestore(&odev->net_lock, flags);
726
727         /* We are up and running. */
728         set_bit(HSO_NET_RUNNING, &odev->flags);
729         hso_start_net_device(odev->parent);
730
731         /* Tell the kernel we are ready to start receiving from it */
732         netif_start_queue(net);
733
734         return 0;
735 }
736
737 /* called when interface is brought down by ifconfig */
738 static int hso_net_close(struct net_device *net)
739 {
740         struct hso_net *odev = netdev_priv(net);
741
742         /* we don't need the queue anymore */
743         netif_stop_queue(net);
744         /* no longer running */
745         clear_bit(HSO_NET_RUNNING, &odev->flags);
746
747         hso_stop_net_device(odev->parent);
748
749         /* done */
750         return 0;
751 }
752
753 /* USB tells is xmit done, we should start the netqueue again */
754 static void write_bulk_callback(struct urb *urb)
755 {
756         struct hso_net *odev = urb->context;
757         int status = urb->status;
758
759         /* Sanity check */
760         if (!odev || !test_bit(HSO_NET_RUNNING, &odev->flags)) {
761                 dev_err(&urb->dev->dev, "%s: device not running\n", __func__);
762                 return;
763         }
764
765         /* Do we still have a valid kernel network device? */
766         if (!netif_device_present(odev->net)) {
767                 dev_err(&urb->dev->dev, "%s: net device not present\n",
768                         __func__);
769                 return;
770         }
771
772         /* log status, but don't act on it, we don't need to resubmit anything
773          * anyhow */
774         if (status)
775                 handle_usb_error(status, __func__, odev->parent);
776
777         hso_put_activity(odev->parent);
778
779         /* Tell the network interface we are ready for another frame */
780         netif_wake_queue(odev->net);
781 }
782
783 /* called by kernel when we need to transmit a packet */
784 static netdev_tx_t hso_net_start_xmit(struct sk_buff *skb,
785                                             struct net_device *net)
786 {
787         struct hso_net *odev = netdev_priv(net);
788         int result;
789
790         /* Tell the kernel, "No more frames 'til we are done with this one." */
791         netif_stop_queue(net);
792         if (hso_get_activity(odev->parent) == -EAGAIN) {
793                 odev->skb_tx_buf = skb;
794                 return NETDEV_TX_OK;
795         }
796
797         /* log if asked */
798         DUMP1(skb->data, skb->len);
799         /* Copy it from kernel memory to OUR memory */
800         memcpy(odev->mux_bulk_tx_buf, skb->data, skb->len);
801         hso_dbg(0x1, "len: %d/%d\n", skb->len, MUX_BULK_TX_BUF_SIZE);
802
803         /* Fill in the URB for shipping it out. */
804         usb_fill_bulk_urb(odev->mux_bulk_tx_urb,
805                           odev->parent->usb,
806                           usb_sndbulkpipe(odev->parent->usb,
807                                           odev->out_endp->
808                                           bEndpointAddress & 0x7F),
809                           odev->mux_bulk_tx_buf, skb->len, write_bulk_callback,
810                           odev);
811
812         /* Deal with the Zero Length packet problem, I hope */
813         odev->mux_bulk_tx_urb->transfer_flags |= URB_ZERO_PACKET;
814
815         /* Send the URB on its merry way. */
816         result = usb_submit_urb(odev->mux_bulk_tx_urb, GFP_ATOMIC);
817         if (result) {
818                 dev_warn(&odev->parent->interface->dev,
819                         "failed mux_bulk_tx_urb %d\n", result);
820                 net->stats.tx_errors++;
821                 netif_start_queue(net);
822         } else {
823                 net->stats.tx_packets++;
824                 net->stats.tx_bytes += skb->len;
825         }
826         dev_kfree_skb(skb);
827         /* we're done */
828         return NETDEV_TX_OK;
829 }
830
831 static const struct ethtool_ops ops = {
832         .get_link = ethtool_op_get_link
833 };
834
835 /* called when a packet did not ack after watchdogtimeout */
836 static void hso_net_tx_timeout(struct net_device *net)
837 {
838         struct hso_net *odev = netdev_priv(net);
839
840         if (!odev)
841                 return;
842
843         /* Tell syslog we are hosed. */
844         dev_warn(&net->dev, "Tx timed out.\n");
845
846         /* Tear the waiting frame off the list */
847         if (odev->mux_bulk_tx_urb &&
848             (odev->mux_bulk_tx_urb->status == -EINPROGRESS))
849                 usb_unlink_urb(odev->mux_bulk_tx_urb);
850
851         /* Update statistics */
852         net->stats.tx_errors++;
853 }
854
855 /* make a real packet from the received USB buffer */
856 static void packetizeRx(struct hso_net *odev, unsigned char *ip_pkt,
857                         unsigned int count, unsigned char is_eop)
858 {
859         unsigned short temp_bytes;
860         unsigned short buffer_offset = 0;
861         unsigned short frame_len;
862         unsigned char *tmp_rx_buf;
863
864         /* log if needed */
865         hso_dbg(0x1, "Rx %d bytes\n", count);
866         DUMP(ip_pkt, min(128, (int)count));
867
868         while (count) {
869                 switch (odev->rx_parse_state) {
870                 case WAIT_IP:
871                         /* waiting for IP header. */
872                         /* wanted bytes - size of ip header */
873                         temp_bytes =
874                             (count <
875                              odev->rx_buf_missing) ? count : odev->
876                             rx_buf_missing;
877
878                         memcpy(((unsigned char *)(&odev->rx_ip_hdr)) +
879                                odev->rx_buf_size, ip_pkt + buffer_offset,
880                                temp_bytes);
881
882                         odev->rx_buf_size += temp_bytes;
883                         buffer_offset += temp_bytes;
884                         odev->rx_buf_missing -= temp_bytes;
885                         count -= temp_bytes;
886
887                         if (!odev->rx_buf_missing) {
888                                 /* header is complete allocate an sk_buffer and
889                                  * continue to WAIT_DATA */
890                                 frame_len = ntohs(odev->rx_ip_hdr.tot_len);
891
892                                 if ((frame_len > DEFAULT_MRU) ||
893                                     (frame_len < sizeof(struct iphdr))) {
894                                         dev_err(&odev->net->dev,
895                                                 "Invalid frame (%d) length\n",
896                                                 frame_len);
897                                         odev->rx_parse_state = WAIT_SYNC;
898                                         continue;
899                                 }
900                                 /* Allocate an sk_buff */
901                                 odev->skb_rx_buf = netdev_alloc_skb(odev->net,
902                                                                     frame_len);
903                                 if (!odev->skb_rx_buf) {
904                                         /* We got no receive buffer. */
905                                         hso_dbg(0x1, "could not allocate memory\n");
906                                         odev->rx_parse_state = WAIT_SYNC;
907                                         continue;
908                                 }
909
910                                 /* Copy what we got so far. make room for iphdr
911                                  * after tail. */
912                                 tmp_rx_buf =
913                                     skb_put(odev->skb_rx_buf,
914                                             sizeof(struct iphdr));
915                                 memcpy(tmp_rx_buf, (char *)&(odev->rx_ip_hdr),
916                                        sizeof(struct iphdr));
917
918                                 /* ETH_HLEN */
919                                 odev->rx_buf_size = sizeof(struct iphdr);
920
921                                 /* Filip actually use .tot_len */
922                                 odev->rx_buf_missing =
923                                     frame_len - sizeof(struct iphdr);
924                                 odev->rx_parse_state = WAIT_DATA;
925                         }
926                         break;
927
928                 case WAIT_DATA:
929                         temp_bytes = (count < odev->rx_buf_missing)
930                                         ? count : odev->rx_buf_missing;
931
932                         /* Copy the rest of the bytes that are left in the
933                          * buffer into the waiting sk_buf. */
934                         /* Make room for temp_bytes after tail. */
935                         tmp_rx_buf = skb_put(odev->skb_rx_buf, temp_bytes);
936                         memcpy(tmp_rx_buf, ip_pkt + buffer_offset, temp_bytes);
937
938                         odev->rx_buf_missing -= temp_bytes;
939                         count -= temp_bytes;
940                         buffer_offset += temp_bytes;
941                         odev->rx_buf_size += temp_bytes;
942                         if (!odev->rx_buf_missing) {
943                                 /* Packet is complete. Inject into stack. */
944                                 /* We have IP packet here */
945                                 odev->skb_rx_buf->protocol = cpu_to_be16(ETH_P_IP);
946                                 skb_reset_mac_header(odev->skb_rx_buf);
947
948                                 /* Ship it off to the kernel */
949                                 netif_rx(odev->skb_rx_buf);
950                                 /* No longer our buffer. */
951                                 odev->skb_rx_buf = NULL;
952
953                                 /* update out statistics */
954                                 odev->net->stats.rx_packets++;
955
956                                 odev->net->stats.rx_bytes += odev->rx_buf_size;
957
958                                 odev->rx_buf_size = 0;
959                                 odev->rx_buf_missing = sizeof(struct iphdr);
960                                 odev->rx_parse_state = WAIT_IP;
961                         }
962                         break;
963
964                 case WAIT_SYNC:
965                         hso_dbg(0x1, " W_S\n");
966                         count = 0;
967                         break;
968                 default:
969                         hso_dbg(0x1, "\n");
970                         count--;
971                         break;
972                 }
973         }
974
975         /* Recovery mechanism for WAIT_SYNC state. */
976         if (is_eop) {
977                 if (odev->rx_parse_state == WAIT_SYNC) {
978                         odev->rx_parse_state = WAIT_IP;
979                         odev->rx_buf_size = 0;
980                         odev->rx_buf_missing = sizeof(struct iphdr);
981                 }
982         }
983 }
984
985 static void fix_crc_bug(struct urb *urb, __le16 max_packet_size)
986 {
987         static const u8 crc_check[4] = { 0xDE, 0xAD, 0xBE, 0xEF };
988         u32 rest = urb->actual_length % le16_to_cpu(max_packet_size);
989
990         if (((rest == 5) || (rest == 6)) &&
991             !memcmp(((u8 *)urb->transfer_buffer) + urb->actual_length - 4,
992                     crc_check, 4)) {
993                 urb->actual_length -= 4;
994         }
995 }
996
997 /* Moving data from usb to kernel (in interrupt state) */
998 static void read_bulk_callback(struct urb *urb)
999 {
1000         struct hso_net *odev = urb->context;
1001         struct net_device *net;
1002         int result;
1003         int status = urb->status;
1004
1005         /* is al ok?  (Filip: Who's Al ?) */
1006         if (status) {
1007                 handle_usb_error(status, __func__, odev->parent);
1008                 return;
1009         }
1010
1011         /* Sanity check */
1012         if (!odev || !test_bit(HSO_NET_RUNNING, &odev->flags)) {
1013                 hso_dbg(0x1, "BULK IN callback but driver is not active!\n");
1014                 return;
1015         }
1016         usb_mark_last_busy(urb->dev);
1017
1018         net = odev->net;
1019
1020         if (!netif_device_present(net)) {
1021                 /* Somebody killed our network interface... */
1022                 return;
1023         }
1024
1025         if (odev->parent->port_spec & HSO_INFO_CRC_BUG)
1026                 fix_crc_bug(urb, odev->in_endp->wMaxPacketSize);
1027
1028         /* do we even have a packet? */
1029         if (urb->actual_length) {
1030                 /* Handle the IP stream, add header and push it onto network
1031                  * stack if the packet is complete. */
1032                 spin_lock(&odev->net_lock);
1033                 packetizeRx(odev, urb->transfer_buffer, urb->actual_length,
1034                             (urb->transfer_buffer_length >
1035                              urb->actual_length) ? 1 : 0);
1036                 spin_unlock(&odev->net_lock);
1037         }
1038
1039         /* We are done with this URB, resubmit it. Prep the USB to wait for
1040          * another frame. Reuse same as received. */
1041         usb_fill_bulk_urb(urb,
1042                           odev->parent->usb,
1043                           usb_rcvbulkpipe(odev->parent->usb,
1044                                           odev->in_endp->
1045                                           bEndpointAddress & 0x7F),
1046                           urb->transfer_buffer, MUX_BULK_RX_BUF_SIZE,
1047                           read_bulk_callback, odev);
1048
1049         /* Give this to the USB subsystem so it can tell us when more data
1050          * arrives. */
1051         result = usb_submit_urb(urb, GFP_ATOMIC);
1052         if (result)
1053                 dev_warn(&odev->parent->interface->dev,
1054                          "%s failed submit mux_bulk_rx_urb %d\n", __func__,
1055                          result);
1056 }
1057
1058 /* Serial driver functions */
1059
1060 static void hso_init_termios(struct ktermios *termios)
1061 {
1062         /*
1063          * The default requirements for this device are:
1064          */
1065         termios->c_iflag &=
1066                 ~(IGNBRK        /* disable ignore break */
1067                 | BRKINT        /* disable break causes interrupt */
1068                 | PARMRK        /* disable mark parity errors */
1069                 | ISTRIP        /* disable clear high bit of input characters */
1070                 | INLCR         /* disable translate NL to CR */
1071                 | IGNCR         /* disable ignore CR */
1072                 | ICRNL         /* disable translate CR to NL */
1073                 | IXON);        /* disable enable XON/XOFF flow control */
1074
1075         /* disable postprocess output characters */
1076         termios->c_oflag &= ~OPOST;
1077
1078         termios->c_lflag &=
1079                 ~(ECHO          /* disable echo input characters */
1080                 | ECHONL        /* disable echo new line */
1081                 | ICANON        /* disable erase, kill, werase, and rprnt
1082                                    special characters */
1083                 | ISIG          /* disable interrupt, quit, and suspend special
1084                                    characters */
1085                 | IEXTEN);      /* disable non-POSIX special characters */
1086
1087         termios->c_cflag &=
1088                 ~(CSIZE         /* no size */
1089                 | PARENB        /* disable parity bit */
1090                 | CBAUD         /* clear current baud rate */
1091                 | CBAUDEX);     /* clear current buad rate */
1092
1093         termios->c_cflag |= CS8;        /* character size 8 bits */
1094
1095         /* baud rate 115200 */
1096         tty_termios_encode_baud_rate(termios, 115200, 115200);
1097 }
1098
1099 static void _hso_serial_set_termios(struct tty_struct *tty,
1100                                     struct ktermios *old)
1101 {
1102         struct hso_serial *serial = tty->driver_data;
1103
1104         if (!serial) {
1105                 printk(KERN_ERR "%s: no tty structures", __func__);
1106                 return;
1107         }
1108
1109         hso_dbg(0x8, "port %d\n", serial->minor);
1110
1111         /*
1112          *      Fix up unsupported bits
1113          */
1114         tty->termios.c_iflag &= ~IXON; /* disable enable XON/XOFF flow control */
1115
1116         tty->termios.c_cflag &=
1117                 ~(CSIZE         /* no size */
1118                 | PARENB        /* disable parity bit */
1119                 | CBAUD         /* clear current baud rate */
1120                 | CBAUDEX);     /* clear current buad rate */
1121
1122         tty->termios.c_cflag |= CS8;    /* character size 8 bits */
1123
1124         /* baud rate 115200 */
1125         tty_encode_baud_rate(tty, 115200, 115200);
1126 }
1127
1128 static void hso_resubmit_rx_bulk_urb(struct hso_serial *serial, struct urb *urb)
1129 {
1130         int result;
1131         /* We are done with this URB, resubmit it. Prep the USB to wait for
1132          * another frame */
1133         usb_fill_bulk_urb(urb, serial->parent->usb,
1134                           usb_rcvbulkpipe(serial->parent->usb,
1135                                           serial->in_endp->
1136                                           bEndpointAddress & 0x7F),
1137                           urb->transfer_buffer, serial->rx_data_length,
1138                           hso_std_serial_read_bulk_callback, serial);
1139         /* Give this to the USB subsystem so it can tell us when more data
1140          * arrives. */
1141         result = usb_submit_urb(urb, GFP_ATOMIC);
1142         if (result) {
1143                 dev_err(&urb->dev->dev, "%s failed submit serial rx_urb %d\n",
1144                         __func__, result);
1145         }
1146 }
1147
1148
1149
1150
1151 static void put_rxbuf_data_and_resubmit_bulk_urb(struct hso_serial *serial)
1152 {
1153         int count;
1154         struct urb *curr_urb;
1155
1156         while (serial->rx_urb_filled[serial->curr_rx_urb_idx]) {
1157                 curr_urb = serial->rx_urb[serial->curr_rx_urb_idx];
1158                 count = put_rxbuf_data(curr_urb, serial);
1159                 if (count == -1)
1160                         return;
1161                 if (count == 0) {
1162                         serial->curr_rx_urb_idx++;
1163                         if (serial->curr_rx_urb_idx >= serial->num_rx_urbs)
1164                                 serial->curr_rx_urb_idx = 0;
1165                         hso_resubmit_rx_bulk_urb(serial, curr_urb);
1166                 }
1167         }
1168 }
1169
1170 static void put_rxbuf_data_and_resubmit_ctrl_urb(struct hso_serial *serial)
1171 {
1172         int count = 0;
1173         struct urb *urb;
1174
1175         urb = serial->rx_urb[0];
1176         if (serial->port.count > 0) {
1177                 count = put_rxbuf_data(urb, serial);
1178                 if (count == -1)
1179                         return;
1180         }
1181         /* Re issue a read as long as we receive data. */
1182
1183         if (count == 0 && ((urb->actual_length != 0) ||
1184                            (serial->rx_state == RX_PENDING))) {
1185                 serial->rx_state = RX_SENT;
1186                 hso_mux_serial_read(serial);
1187         } else
1188                 serial->rx_state = RX_IDLE;
1189 }
1190
1191
1192 /* read callback for Diag and CS port */
1193 static void hso_std_serial_read_bulk_callback(struct urb *urb)
1194 {
1195         struct hso_serial *serial = urb->context;
1196         int status = urb->status;
1197
1198         hso_dbg(0x8, "--- Got serial_read_bulk callback %02x ---\n", status);
1199
1200         /* sanity check */
1201         if (!serial) {
1202                 hso_dbg(0x1, "serial == NULL\n");
1203                 return;
1204         }
1205         if (status) {
1206                 handle_usb_error(status, __func__, serial->parent);
1207                 return;
1208         }
1209
1210         hso_dbg(0x1, "Actual length = %d\n", urb->actual_length);
1211         DUMP1(urb->transfer_buffer, urb->actual_length);
1212
1213         /* Anyone listening? */
1214         if (serial->port.count == 0)
1215                 return;
1216
1217         if (serial->parent->port_spec & HSO_INFO_CRC_BUG)
1218                 fix_crc_bug(urb, serial->in_endp->wMaxPacketSize);
1219         /* Valid data, handle RX data */
1220         spin_lock(&serial->serial_lock);
1221         serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 1;
1222         put_rxbuf_data_and_resubmit_bulk_urb(serial);
1223         spin_unlock(&serial->serial_lock);
1224 }
1225
1226 /*
1227  * This needs to be a tasklet otherwise we will
1228  * end up recursively calling this function.
1229  */
1230 static void hso_unthrottle_tasklet(struct hso_serial *serial)
1231 {
1232         unsigned long flags;
1233
1234         spin_lock_irqsave(&serial->serial_lock, flags);
1235         if ((serial->parent->port_spec & HSO_INTF_MUX))
1236                 put_rxbuf_data_and_resubmit_ctrl_urb(serial);
1237         else
1238                 put_rxbuf_data_and_resubmit_bulk_urb(serial);
1239         spin_unlock_irqrestore(&serial->serial_lock, flags);
1240 }
1241
1242 static  void hso_unthrottle(struct tty_struct *tty)
1243 {
1244         struct hso_serial *serial = tty->driver_data;
1245
1246         tasklet_hi_schedule(&serial->unthrottle_tasklet);
1247 }
1248
1249 /* open the requested serial port */
1250 static int hso_serial_open(struct tty_struct *tty, struct file *filp)
1251 {
1252         struct hso_serial *serial = get_serial_by_index(tty->index);
1253         int result;
1254
1255         /* sanity check */
1256         if (serial == NULL || serial->magic != HSO_SERIAL_MAGIC) {
1257                 WARN_ON(1);
1258                 tty->driver_data = NULL;
1259                 hso_dbg(0x1, "Failed to open port\n");
1260                 return -ENODEV;
1261         }
1262
1263         mutex_lock(&serial->parent->mutex);
1264         result = usb_autopm_get_interface(serial->parent->interface);
1265         if (result < 0)
1266                 goto err_out;
1267
1268         hso_dbg(0x1, "Opening %d\n", serial->minor);
1269
1270         /* setup */
1271         tty->driver_data = serial;
1272         tty_port_tty_set(&serial->port, tty);
1273
1274         /* check for port already opened, if not set the termios */
1275         serial->port.count++;
1276         if (serial->port.count == 1) {
1277                 serial->rx_state = RX_IDLE;
1278                 /* Force default termio settings */
1279                 _hso_serial_set_termios(tty, NULL);
1280                 tasklet_init(&serial->unthrottle_tasklet,
1281                              (void (*)(unsigned long))hso_unthrottle_tasklet,
1282                              (unsigned long)serial);
1283                 result = hso_start_serial_device(serial->parent, GFP_KERNEL);
1284                 if (result) {
1285                         hso_stop_serial_device(serial->parent);
1286                         serial->port.count--;
1287                 } else {
1288                         kref_get(&serial->parent->ref);
1289                 }
1290         } else {
1291                 hso_dbg(0x1, "Port was already open\n");
1292         }
1293
1294         usb_autopm_put_interface(serial->parent->interface);
1295
1296         /* done */
1297         if (result)
1298                 hso_serial_tiocmset(tty, TIOCM_RTS | TIOCM_DTR, 0);
1299 err_out:
1300         mutex_unlock(&serial->parent->mutex);
1301         return result;
1302 }
1303
1304 /* close the requested serial port */
1305 static void hso_serial_close(struct tty_struct *tty, struct file *filp)
1306 {
1307         struct hso_serial *serial = tty->driver_data;
1308         u8 usb_gone;
1309
1310         hso_dbg(0x1, "Closing serial port\n");
1311
1312         /* Open failed, no close cleanup required */
1313         if (serial == NULL)
1314                 return;
1315
1316         mutex_lock(&serial->parent->mutex);
1317         usb_gone = serial->parent->usb_gone;
1318
1319         if (!usb_gone)
1320                 usb_autopm_get_interface(serial->parent->interface);
1321
1322         /* reset the rts and dtr */
1323         /* do the actual close */
1324         serial->port.count--;
1325
1326         if (serial->port.count <= 0) {
1327                 serial->port.count = 0;
1328                 tty_port_tty_set(&serial->port, NULL);
1329                 if (!usb_gone)
1330                         hso_stop_serial_device(serial->parent);
1331                 tasklet_kill(&serial->unthrottle_tasklet);
1332         }
1333
1334         if (!usb_gone)
1335                 usb_autopm_put_interface(serial->parent->interface);
1336
1337         mutex_unlock(&serial->parent->mutex);
1338 }
1339
1340 /* close the requested serial port */
1341 static int hso_serial_write(struct tty_struct *tty, const unsigned char *buf,
1342                             int count)
1343 {
1344         struct hso_serial *serial = tty->driver_data;
1345         int space, tx_bytes;
1346         unsigned long flags;
1347
1348         /* sanity check */
1349         if (serial == NULL) {
1350                 printk(KERN_ERR "%s: serial is NULL\n", __func__);
1351                 return -ENODEV;
1352         }
1353
1354         spin_lock_irqsave(&serial->serial_lock, flags);
1355
1356         space = serial->tx_data_length - serial->tx_buffer_count;
1357         tx_bytes = (count < space) ? count : space;
1358
1359         if (!tx_bytes)
1360                 goto out;
1361
1362         memcpy(serial->tx_buffer + serial->tx_buffer_count, buf, tx_bytes);
1363         serial->tx_buffer_count += tx_bytes;
1364
1365 out:
1366         spin_unlock_irqrestore(&serial->serial_lock, flags);
1367
1368         hso_kick_transmit(serial);
1369         /* done */
1370         return tx_bytes;
1371 }
1372
1373 /* how much room is there for writing */
1374 static int hso_serial_write_room(struct tty_struct *tty)
1375 {
1376         struct hso_serial *serial = tty->driver_data;
1377         int room;
1378         unsigned long flags;
1379
1380         spin_lock_irqsave(&serial->serial_lock, flags);
1381         room = serial->tx_data_length - serial->tx_buffer_count;
1382         spin_unlock_irqrestore(&serial->serial_lock, flags);
1383
1384         /* return free room */
1385         return room;
1386 }
1387
1388 static void hso_serial_cleanup(struct tty_struct *tty)
1389 {
1390         struct hso_serial *serial = tty->driver_data;
1391
1392         if (!serial)
1393                 return;
1394
1395         kref_put(&serial->parent->ref, hso_serial_ref_free);
1396 }
1397
1398 /* setup the term */
1399 static void hso_serial_set_termios(struct tty_struct *tty, struct ktermios *old)
1400 {
1401         struct hso_serial *serial = tty->driver_data;
1402         unsigned long flags;
1403
1404         if (old)
1405                 hso_dbg(0x16, "Termios called with: cflags new[%d] - old[%d]\n",
1406                         tty->termios.c_cflag, old->c_cflag);
1407
1408         /* the actual setup */
1409         spin_lock_irqsave(&serial->serial_lock, flags);
1410         if (serial->port.count)
1411                 _hso_serial_set_termios(tty, old);
1412         else
1413                 tty->termios = *old;
1414         spin_unlock_irqrestore(&serial->serial_lock, flags);
1415
1416         /* done */
1417 }
1418
1419 /* how many characters in the buffer */
1420 static int hso_serial_chars_in_buffer(struct tty_struct *tty)
1421 {
1422         struct hso_serial *serial = tty->driver_data;
1423         int chars;
1424         unsigned long flags;
1425
1426         /* sanity check */
1427         if (serial == NULL)
1428                 return 0;
1429
1430         spin_lock_irqsave(&serial->serial_lock, flags);
1431         chars = serial->tx_buffer_count;
1432         spin_unlock_irqrestore(&serial->serial_lock, flags);
1433
1434         return chars;
1435 }
1436 static int tiocmget_submit_urb(struct hso_serial *serial,
1437                                struct hso_tiocmget *tiocmget,
1438                                struct usb_device *usb)
1439 {
1440         int result;
1441
1442         if (serial->parent->usb_gone)
1443                 return -ENODEV;
1444         usb_fill_int_urb(tiocmget->urb, usb,
1445                          usb_rcvintpipe(usb,
1446                                         tiocmget->endp->
1447                                         bEndpointAddress & 0x7F),
1448                          &tiocmget->serial_state_notification,
1449                          sizeof(struct hso_serial_state_notification),
1450                          tiocmget_intr_callback, serial,
1451                          tiocmget->endp->bInterval);
1452         result = usb_submit_urb(tiocmget->urb, GFP_ATOMIC);
1453         if (result) {
1454                 dev_warn(&usb->dev, "%s usb_submit_urb failed %d\n", __func__,
1455                          result);
1456         }
1457         return result;
1458
1459 }
1460
1461 static void tiocmget_intr_callback(struct urb *urb)
1462 {
1463         struct hso_serial *serial = urb->context;
1464         struct hso_tiocmget *tiocmget;
1465         int status = urb->status;
1466         u16 UART_state_bitmap, prev_UART_state_bitmap;
1467         struct uart_icount *icount;
1468         struct hso_serial_state_notification *serial_state_notification;
1469         struct usb_device *usb;
1470         struct usb_interface *interface;
1471         int if_num;
1472
1473         /* Sanity checks */
1474         if (!serial)
1475                 return;
1476         if (status) {
1477                 handle_usb_error(status, __func__, serial->parent);
1478                 return;
1479         }
1480
1481         /* tiocmget is only supported on HSO_PORT_MODEM */
1482         tiocmget = serial->tiocmget;
1483         if (!tiocmget)
1484                 return;
1485         BUG_ON((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM);
1486
1487         usb = serial->parent->usb;
1488         interface = serial->parent->interface;
1489
1490         if_num = interface->cur_altsetting->desc.bInterfaceNumber;
1491
1492         /* wIndex should be the USB interface number of the port to which the
1493          * notification applies, which should always be the Modem port.
1494          */
1495         serial_state_notification = &tiocmget->serial_state_notification;
1496         if (serial_state_notification->bmRequestType != BM_REQUEST_TYPE ||
1497             serial_state_notification->bNotification != B_NOTIFICATION ||
1498             le16_to_cpu(serial_state_notification->wValue) != W_VALUE ||
1499             le16_to_cpu(serial_state_notification->wIndex) != if_num ||
1500             le16_to_cpu(serial_state_notification->wLength) != W_LENGTH) {
1501                 dev_warn(&usb->dev,
1502                          "hso received invalid serial state notification\n");
1503                 DUMP(serial_state_notification,
1504                      sizeof(struct hso_serial_state_notification));
1505         } else {
1506
1507                 UART_state_bitmap = le16_to_cpu(serial_state_notification->
1508                                                 UART_state_bitmap);
1509                 prev_UART_state_bitmap = tiocmget->prev_UART_state_bitmap;
1510                 icount = &tiocmget->icount;
1511                 spin_lock(&serial->serial_lock);
1512                 if ((UART_state_bitmap & B_OVERRUN) !=
1513                    (prev_UART_state_bitmap & B_OVERRUN))
1514                         icount->parity++;
1515                 if ((UART_state_bitmap & B_PARITY) !=
1516                    (prev_UART_state_bitmap & B_PARITY))
1517                         icount->parity++;
1518                 if ((UART_state_bitmap & B_FRAMING) !=
1519                    (prev_UART_state_bitmap & B_FRAMING))
1520                         icount->frame++;
1521                 if ((UART_state_bitmap & B_RING_SIGNAL) &&
1522                    !(prev_UART_state_bitmap & B_RING_SIGNAL))
1523                         icount->rng++;
1524                 if ((UART_state_bitmap & B_BREAK) !=
1525                    (prev_UART_state_bitmap & B_BREAK))
1526                         icount->brk++;
1527                 if ((UART_state_bitmap & B_TX_CARRIER) !=
1528                    (prev_UART_state_bitmap & B_TX_CARRIER))
1529                         icount->dsr++;
1530                 if ((UART_state_bitmap & B_RX_CARRIER) !=
1531                    (prev_UART_state_bitmap & B_RX_CARRIER))
1532                         icount->dcd++;
1533                 tiocmget->prev_UART_state_bitmap = UART_state_bitmap;
1534                 spin_unlock(&serial->serial_lock);
1535                 tiocmget->intr_completed = 1;
1536                 wake_up_interruptible(&tiocmget->waitq);
1537         }
1538         memset(serial_state_notification, 0,
1539                sizeof(struct hso_serial_state_notification));
1540         tiocmget_submit_urb(serial,
1541                             tiocmget,
1542                             serial->parent->usb);
1543 }
1544
1545 /*
1546  * next few functions largely stolen from drivers/serial/serial_core.c
1547  */
1548 /* Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
1549  * - mask passed in arg for lines of interest
1550  *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
1551  * Caller should use TIOCGICOUNT to see which one it was
1552  */
1553 static int
1554 hso_wait_modem_status(struct hso_serial *serial, unsigned long arg)
1555 {
1556         DECLARE_WAITQUEUE(wait, current);
1557         struct uart_icount cprev, cnow;
1558         struct hso_tiocmget  *tiocmget;
1559         int ret;
1560
1561         tiocmget = serial->tiocmget;
1562         if (!tiocmget)
1563                 return -ENOENT;
1564         /*
1565          * note the counters on entry
1566          */
1567         spin_lock_irq(&serial->serial_lock);
1568         memcpy(&cprev, &tiocmget->icount, sizeof(struct uart_icount));
1569         spin_unlock_irq(&serial->serial_lock);
1570         add_wait_queue(&tiocmget->waitq, &wait);
1571         for (;;) {
1572                 spin_lock_irq(&serial->serial_lock);
1573                 memcpy(&cnow, &tiocmget->icount, sizeof(struct uart_icount));
1574                 spin_unlock_irq(&serial->serial_lock);
1575                 set_current_state(TASK_INTERRUPTIBLE);
1576                 if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
1577                     ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
1578                     ((arg & TIOCM_CD)  && (cnow.dcd != cprev.dcd))) {
1579                         ret = 0;
1580                         break;
1581                 }
1582                 schedule();
1583                 /* see if a signal did it */
1584                 if (signal_pending(current)) {
1585                         ret = -ERESTARTSYS;
1586                         break;
1587                 }
1588                 cprev = cnow;
1589         }
1590         __set_current_state(TASK_RUNNING);
1591         remove_wait_queue(&tiocmget->waitq, &wait);
1592
1593         return ret;
1594 }
1595
1596 /*
1597  * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
1598  * Return: write counters to the user passed counter struct
1599  * NB: both 1->0 and 0->1 transitions are counted except for
1600  *     RI where only 0->1 is counted.
1601  */
1602 static int hso_get_count(struct tty_struct *tty,
1603                   struct serial_icounter_struct *icount)
1604 {
1605         struct uart_icount cnow;
1606         struct hso_serial *serial = tty->driver_data;
1607         struct hso_tiocmget  *tiocmget = serial->tiocmget;
1608
1609         memset(icount, 0, sizeof(struct serial_icounter_struct));
1610
1611         if (!tiocmget)
1612                  return -ENOENT;
1613         spin_lock_irq(&serial->serial_lock);
1614         memcpy(&cnow, &tiocmget->icount, sizeof(struct uart_icount));
1615         spin_unlock_irq(&serial->serial_lock);
1616
1617         icount->cts         = cnow.cts;
1618         icount->dsr         = cnow.dsr;
1619         icount->rng         = cnow.rng;
1620         icount->dcd         = cnow.dcd;
1621         icount->rx          = cnow.rx;
1622         icount->tx          = cnow.tx;
1623         icount->frame       = cnow.frame;
1624         icount->overrun     = cnow.overrun;
1625         icount->parity      = cnow.parity;
1626         icount->brk         = cnow.brk;
1627         icount->buf_overrun = cnow.buf_overrun;
1628
1629         return 0;
1630 }
1631
1632
1633 static int hso_serial_tiocmget(struct tty_struct *tty)
1634 {
1635         int retval;
1636         struct hso_serial *serial = tty->driver_data;
1637         struct hso_tiocmget  *tiocmget;
1638         u16 UART_state_bitmap;
1639
1640         /* sanity check */
1641         if (!serial) {
1642                 hso_dbg(0x1, "no tty structures\n");
1643                 return -EINVAL;
1644         }
1645         spin_lock_irq(&serial->serial_lock);
1646         retval = ((serial->rts_state) ? TIOCM_RTS : 0) |
1647             ((serial->dtr_state) ? TIOCM_DTR : 0);
1648         tiocmget = serial->tiocmget;
1649         if (tiocmget) {
1650
1651                 UART_state_bitmap = le16_to_cpu(
1652                         tiocmget->prev_UART_state_bitmap);
1653                 if (UART_state_bitmap & B_RING_SIGNAL)
1654                         retval |=  TIOCM_RNG;
1655                 if (UART_state_bitmap & B_RX_CARRIER)
1656                         retval |=  TIOCM_CD;
1657                 if (UART_state_bitmap & B_TX_CARRIER)
1658                         retval |=  TIOCM_DSR;
1659         }
1660         spin_unlock_irq(&serial->serial_lock);
1661         return retval;
1662 }
1663
1664 static int hso_serial_tiocmset(struct tty_struct *tty,
1665                                unsigned int set, unsigned int clear)
1666 {
1667         int val = 0;
1668         unsigned long flags;
1669         int if_num;
1670         struct hso_serial *serial = tty->driver_data;
1671         struct usb_interface *interface;
1672
1673         /* sanity check */
1674         if (!serial) {
1675                 hso_dbg(0x1, "no tty structures\n");
1676                 return -EINVAL;
1677         }
1678
1679         if ((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM)
1680                 return -EINVAL;
1681
1682         interface = serial->parent->interface;
1683         if_num = interface->cur_altsetting->desc.bInterfaceNumber;
1684
1685         spin_lock_irqsave(&serial->serial_lock, flags);
1686         if (set & TIOCM_RTS)
1687                 serial->rts_state = 1;
1688         if (set & TIOCM_DTR)
1689                 serial->dtr_state = 1;
1690
1691         if (clear & TIOCM_RTS)
1692                 serial->rts_state = 0;
1693         if (clear & TIOCM_DTR)
1694                 serial->dtr_state = 0;
1695
1696         if (serial->dtr_state)
1697                 val |= 0x01;
1698         if (serial->rts_state)
1699                 val |= 0x02;
1700
1701         spin_unlock_irqrestore(&serial->serial_lock, flags);
1702
1703         return usb_control_msg(serial->parent->usb,
1704                                usb_rcvctrlpipe(serial->parent->usb, 0), 0x22,
1705                                0x21, val, if_num, NULL, 0,
1706                                USB_CTRL_SET_TIMEOUT);
1707 }
1708
1709 static int hso_serial_ioctl(struct tty_struct *tty,
1710                             unsigned int cmd, unsigned long arg)
1711 {
1712         struct hso_serial *serial = tty->driver_data;
1713         int ret = 0;
1714         hso_dbg(0x8, "IOCTL cmd: %d, arg: %ld\n", cmd, arg);
1715
1716         if (!serial)
1717                 return -ENODEV;
1718         switch (cmd) {
1719         case TIOCMIWAIT:
1720                 ret = hso_wait_modem_status(serial, arg);
1721                 break;
1722         default:
1723                 ret = -ENOIOCTLCMD;
1724                 break;
1725         }
1726         return ret;
1727 }
1728
1729
1730 /* starts a transmit */
1731 static void hso_kick_transmit(struct hso_serial *serial)
1732 {
1733         u8 *temp;
1734         unsigned long flags;
1735         int res;
1736
1737         spin_lock_irqsave(&serial->serial_lock, flags);
1738         if (!serial->tx_buffer_count)
1739                 goto out;
1740
1741         if (serial->tx_urb_used)
1742                 goto out;
1743
1744         /* Wakeup USB interface if necessary */
1745         if (hso_get_activity(serial->parent) == -EAGAIN)
1746                 goto out;
1747
1748         /* Switch pointers around to avoid memcpy */
1749         temp = serial->tx_buffer;
1750         serial->tx_buffer = serial->tx_data;
1751         serial->tx_data = temp;
1752         serial->tx_data_count = serial->tx_buffer_count;
1753         serial->tx_buffer_count = 0;
1754
1755         /* If temp is set, it means we switched buffers */
1756         if (temp && serial->write_data) {
1757                 res = serial->write_data(serial);
1758                 if (res >= 0)
1759                         serial->tx_urb_used = 1;
1760         }
1761 out:
1762         spin_unlock_irqrestore(&serial->serial_lock, flags);
1763 }
1764
1765 /* make a request (for reading and writing data to muxed serial port) */
1766 static int mux_device_request(struct hso_serial *serial, u8 type, u16 port,
1767                               struct urb *ctrl_urb,
1768                               struct usb_ctrlrequest *ctrl_req,
1769                               u8 *ctrl_urb_data, u32 size)
1770 {
1771         int result;
1772         int pipe;
1773
1774         /* Sanity check */
1775         if (!serial || !ctrl_urb || !ctrl_req) {
1776                 printk(KERN_ERR "%s: Wrong arguments\n", __func__);
1777                 return -EINVAL;
1778         }
1779
1780         /* initialize */
1781         ctrl_req->wValue = 0;
1782         ctrl_req->wIndex = cpu_to_le16(hso_port_to_mux(port));
1783         ctrl_req->wLength = cpu_to_le16(size);
1784
1785         if (type == USB_CDC_GET_ENCAPSULATED_RESPONSE) {
1786                 /* Reading command */
1787                 ctrl_req->bRequestType = USB_DIR_IN |
1788                                          USB_TYPE_OPTION_VENDOR |
1789                                          USB_RECIP_INTERFACE;
1790                 ctrl_req->bRequest = USB_CDC_GET_ENCAPSULATED_RESPONSE;
1791                 pipe = usb_rcvctrlpipe(serial->parent->usb, 0);
1792         } else {
1793                 /* Writing command */
1794                 ctrl_req->bRequestType = USB_DIR_OUT |
1795                                          USB_TYPE_OPTION_VENDOR |
1796                                          USB_RECIP_INTERFACE;
1797                 ctrl_req->bRequest = USB_CDC_SEND_ENCAPSULATED_COMMAND;
1798                 pipe = usb_sndctrlpipe(serial->parent->usb, 0);
1799         }
1800         /* syslog */
1801         hso_dbg(0x2, "%s command (%02x) len: %d, port: %d\n",
1802                 type == USB_CDC_GET_ENCAPSULATED_RESPONSE ? "Read" : "Write",
1803                 ctrl_req->bRequestType, ctrl_req->wLength, port);
1804
1805         /* Load ctrl urb */
1806         ctrl_urb->transfer_flags = 0;
1807         usb_fill_control_urb(ctrl_urb,
1808                              serial->parent->usb,
1809                              pipe,
1810                              (u8 *) ctrl_req,
1811                              ctrl_urb_data, size, ctrl_callback, serial);
1812         /* Send it on merry way */
1813         result = usb_submit_urb(ctrl_urb, GFP_ATOMIC);
1814         if (result) {
1815                 dev_err(&ctrl_urb->dev->dev,
1816                         "%s failed submit ctrl_urb %d type %d\n", __func__,
1817                         result, type);
1818                 return result;
1819         }
1820
1821         /* done */
1822         return size;
1823 }
1824
1825 /* called by intr_callback when read occurs */
1826 static int hso_mux_serial_read(struct hso_serial *serial)
1827 {
1828         if (!serial)
1829                 return -EINVAL;
1830
1831         /* clean data */
1832         memset(serial->rx_data[0], 0, CTRL_URB_RX_SIZE);
1833         /* make the request */
1834
1835         if (serial->num_rx_urbs != 1) {
1836                 dev_err(&serial->parent->interface->dev,
1837                         "ERROR: mux'd reads with multiple buffers "
1838                         "not possible\n");
1839                 return 0;
1840         }
1841         return mux_device_request(serial,
1842                                   USB_CDC_GET_ENCAPSULATED_RESPONSE,
1843                                   serial->parent->port_spec & HSO_PORT_MASK,
1844                                   serial->rx_urb[0],
1845                                   &serial->ctrl_req_rx,
1846                                   serial->rx_data[0], serial->rx_data_length);
1847 }
1848
1849 /* used for muxed serial port callback (muxed serial read) */
1850 static void intr_callback(struct urb *urb)
1851 {
1852         struct hso_shared_int *shared_int = urb->context;
1853         struct hso_serial *serial;
1854         unsigned char *port_req;
1855         int status = urb->status;
1856         int i;
1857
1858         usb_mark_last_busy(urb->dev);
1859
1860         /* sanity check */
1861         if (!shared_int)
1862                 return;
1863
1864         /* status check */
1865         if (status) {
1866                 handle_usb_error(status, __func__, NULL);
1867                 return;
1868         }
1869         hso_dbg(0x8, "--- Got intr callback 0x%02X ---\n", status);
1870
1871         /* what request? */
1872         port_req = urb->transfer_buffer;
1873         hso_dbg(0x8, "port_req = 0x%.2X\n", *port_req);
1874         /* loop over all muxed ports to find the one sending this */
1875         for (i = 0; i < 8; i++) {
1876                 /* max 8 channels on MUX */
1877                 if (*port_req & (1 << i)) {
1878                         serial = get_serial_by_shared_int_and_type(shared_int,
1879                                                                    (1 << i));
1880                         if (serial != NULL) {
1881                                 hso_dbg(0x1, "Pending read interrupt on port %d\n",
1882                                         i);
1883                                 spin_lock(&serial->serial_lock);
1884                                 if (serial->rx_state == RX_IDLE &&
1885                                         serial->port.count > 0) {
1886                                         /* Setup and send a ctrl req read on
1887                                          * port i */
1888                                         if (!serial->rx_urb_filled[0]) {
1889                                                 serial->rx_state = RX_SENT;
1890                                                 hso_mux_serial_read(serial);
1891                                         } else
1892                                                 serial->rx_state = RX_PENDING;
1893                                 } else {
1894                                         hso_dbg(0x1, "Already a read pending on port %d or port not open\n",
1895                                                 i);
1896                                 }
1897                                 spin_unlock(&serial->serial_lock);
1898                         }
1899                 }
1900         }
1901         /* Resubmit interrupt urb */
1902         hso_mux_submit_intr_urb(shared_int, urb->dev, GFP_ATOMIC);
1903 }
1904
1905 /* called for writing to muxed serial port */
1906 static int hso_mux_serial_write_data(struct hso_serial *serial)
1907 {
1908         if (NULL == serial)
1909                 return -EINVAL;
1910
1911         return mux_device_request(serial,
1912                                   USB_CDC_SEND_ENCAPSULATED_COMMAND,
1913                                   serial->parent->port_spec & HSO_PORT_MASK,
1914                                   serial->tx_urb,
1915                                   &serial->ctrl_req_tx,
1916                                   serial->tx_data, serial->tx_data_count);
1917 }
1918
1919 /* write callback for Diag and CS port */
1920 static void hso_std_serial_write_bulk_callback(struct urb *urb)
1921 {
1922         struct hso_serial *serial = urb->context;
1923         int status = urb->status;
1924
1925         /* sanity check */
1926         if (!serial) {
1927                 hso_dbg(0x1, "serial == NULL\n");
1928                 return;
1929         }
1930
1931         spin_lock(&serial->serial_lock);
1932         serial->tx_urb_used = 0;
1933         spin_unlock(&serial->serial_lock);
1934         if (status) {
1935                 handle_usb_error(status, __func__, serial->parent);
1936                 return;
1937         }
1938         hso_put_activity(serial->parent);
1939         tty_port_tty_wakeup(&serial->port);
1940         hso_kick_transmit(serial);
1941
1942         hso_dbg(0x1, "\n");
1943 }
1944
1945 /* called for writing diag or CS serial port */
1946 static int hso_std_serial_write_data(struct hso_serial *serial)
1947 {
1948         int count = serial->tx_data_count;
1949         int result;
1950
1951         usb_fill_bulk_urb(serial->tx_urb,
1952                           serial->parent->usb,
1953                           usb_sndbulkpipe(serial->parent->usb,
1954                                           serial->out_endp->
1955                                           bEndpointAddress & 0x7F),
1956                           serial->tx_data, serial->tx_data_count,
1957                           hso_std_serial_write_bulk_callback, serial);
1958
1959         result = usb_submit_urb(serial->tx_urb, GFP_ATOMIC);
1960         if (result) {
1961                 dev_warn(&serial->parent->usb->dev,
1962                          "Failed to submit urb - res %d\n", result);
1963                 return result;
1964         }
1965
1966         return count;
1967 }
1968
1969 /* callback after read or write on muxed serial port */
1970 static void ctrl_callback(struct urb *urb)
1971 {
1972         struct hso_serial *serial = urb->context;
1973         struct usb_ctrlrequest *req;
1974         int status = urb->status;
1975
1976         /* sanity check */
1977         if (!serial)
1978                 return;
1979
1980         spin_lock(&serial->serial_lock);
1981         serial->tx_urb_used = 0;
1982         spin_unlock(&serial->serial_lock);
1983         if (status) {
1984                 handle_usb_error(status, __func__, serial->parent);
1985                 return;
1986         }
1987
1988         /* what request? */
1989         req = (struct usb_ctrlrequest *)(urb->setup_packet);
1990         hso_dbg(0x8, "--- Got muxed ctrl callback 0x%02X ---\n", status);
1991         hso_dbg(0x8, "Actual length of urb = %d\n", urb->actual_length);
1992         DUMP1(urb->transfer_buffer, urb->actual_length);
1993
1994         if (req->bRequestType ==
1995             (USB_DIR_IN | USB_TYPE_OPTION_VENDOR | USB_RECIP_INTERFACE)) {
1996                 /* response to a read command */
1997                 serial->rx_urb_filled[0] = 1;
1998                 spin_lock(&serial->serial_lock);
1999                 put_rxbuf_data_and_resubmit_ctrl_urb(serial);
2000                 spin_unlock(&serial->serial_lock);
2001         } else {
2002                 hso_put_activity(serial->parent);
2003                 tty_port_tty_wakeup(&serial->port);
2004                 /* response to a write command */
2005                 hso_kick_transmit(serial);
2006         }
2007 }
2008
2009 /* handle RX data for serial port */
2010 static int put_rxbuf_data(struct urb *urb, struct hso_serial *serial)
2011 {
2012         struct tty_struct *tty;
2013         int count;
2014
2015         /* Sanity check */
2016         if (urb == NULL || serial == NULL) {
2017                 hso_dbg(0x1, "serial = NULL\n");
2018                 return -2;
2019         }
2020
2021         tty = tty_port_tty_get(&serial->port);
2022
2023         if (tty && tty_throttled(tty)) {
2024                 tty_kref_put(tty);
2025                 return -1;
2026         }
2027
2028         /* Push data to tty */
2029         hso_dbg(0x1, "data to push to tty\n");
2030         count = tty_buffer_request_room(&serial->port, urb->actual_length);
2031         if (count >= urb->actual_length) {
2032                 tty_insert_flip_string(&serial->port, urb->transfer_buffer,
2033                                        urb->actual_length);
2034                 tty_flip_buffer_push(&serial->port);
2035         } else {
2036                 dev_warn(&serial->parent->usb->dev,
2037                          "dropping data, %d bytes lost\n", urb->actual_length);
2038         }
2039
2040         tty_kref_put(tty);
2041
2042         serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 0;
2043
2044         return 0;
2045 }
2046
2047
2048 /* Base driver functions */
2049
2050 static void hso_log_port(struct hso_device *hso_dev)
2051 {
2052         char *port_type;
2053         char port_dev[20];
2054
2055         switch (hso_dev->port_spec & HSO_PORT_MASK) {
2056         case HSO_PORT_CONTROL:
2057                 port_type = "Control";
2058                 break;
2059         case HSO_PORT_APP:
2060                 port_type = "Application";
2061                 break;
2062         case HSO_PORT_GPS:
2063                 port_type = "GPS";
2064                 break;
2065         case HSO_PORT_GPS_CONTROL:
2066                 port_type = "GPS control";
2067                 break;
2068         case HSO_PORT_APP2:
2069                 port_type = "Application2";
2070                 break;
2071         case HSO_PORT_PCSC:
2072                 port_type = "PCSC";
2073                 break;
2074         case HSO_PORT_DIAG:
2075                 port_type = "Diagnostic";
2076                 break;
2077         case HSO_PORT_DIAG2:
2078                 port_type = "Diagnostic2";
2079                 break;
2080         case HSO_PORT_MODEM:
2081                 port_type = "Modem";
2082                 break;
2083         case HSO_PORT_NETWORK:
2084                 port_type = "Network";
2085                 break;
2086         default:
2087                 port_type = "Unknown";
2088                 break;
2089         }
2090         if ((hso_dev->port_spec & HSO_PORT_MASK) == HSO_PORT_NETWORK) {
2091                 sprintf(port_dev, "%s", dev2net(hso_dev)->net->name);
2092         } else
2093                 sprintf(port_dev, "/dev/%s%d", tty_filename,
2094                         dev2ser(hso_dev)->minor);
2095
2096         dev_dbg(&hso_dev->interface->dev, "HSO: Found %s port %s\n",
2097                 port_type, port_dev);
2098 }
2099
2100 static int hso_start_net_device(struct hso_device *hso_dev)
2101 {
2102         int i, result = 0;
2103         struct hso_net *hso_net = dev2net(hso_dev);
2104
2105         if (!hso_net)
2106                 return -ENODEV;
2107
2108         /* send URBs for all read buffers */
2109         for (i = 0; i < MUX_BULK_RX_BUF_COUNT; i++) {
2110
2111                 /* Prep a receive URB */
2112                 usb_fill_bulk_urb(hso_net->mux_bulk_rx_urb_pool[i],
2113                                   hso_dev->usb,
2114                                   usb_rcvbulkpipe(hso_dev->usb,
2115                                                   hso_net->in_endp->
2116                                                   bEndpointAddress & 0x7F),
2117                                   hso_net->mux_bulk_rx_buf_pool[i],
2118                                   MUX_BULK_RX_BUF_SIZE, read_bulk_callback,
2119                                   hso_net);
2120
2121                 /* Put it out there so the device can send us stuff */
2122                 result = usb_submit_urb(hso_net->mux_bulk_rx_urb_pool[i],
2123                                         GFP_NOIO);
2124                 if (result)
2125                         dev_warn(&hso_dev->usb->dev,
2126                                 "%s failed mux_bulk_rx_urb[%d] %d\n", __func__,
2127                                 i, result);
2128         }
2129
2130         return result;
2131 }
2132
2133 static int hso_stop_net_device(struct hso_device *hso_dev)
2134 {
2135         int i;
2136         struct hso_net *hso_net = dev2net(hso_dev);
2137
2138         if (!hso_net)
2139                 return -ENODEV;
2140
2141         for (i = 0; i < MUX_BULK_RX_BUF_COUNT; i++) {
2142                 if (hso_net->mux_bulk_rx_urb_pool[i])
2143                         usb_kill_urb(hso_net->mux_bulk_rx_urb_pool[i]);
2144
2145         }
2146         if (hso_net->mux_bulk_tx_urb)
2147                 usb_kill_urb(hso_net->mux_bulk_tx_urb);
2148
2149         return 0;
2150 }
2151
2152 static int hso_start_serial_device(struct hso_device *hso_dev, gfp_t flags)
2153 {
2154         int i, result = 0;
2155         struct hso_serial *serial = dev2ser(hso_dev);
2156
2157         if (!serial)
2158                 return -ENODEV;
2159
2160         /* If it is not the MUX port fill in and submit a bulk urb (already
2161          * allocated in hso_serial_start) */
2162         if (!(serial->parent->port_spec & HSO_INTF_MUX)) {
2163                 for (i = 0; i < serial->num_rx_urbs; i++) {
2164                         usb_fill_bulk_urb(serial->rx_urb[i],
2165                                           serial->parent->usb,
2166                                           usb_rcvbulkpipe(serial->parent->usb,
2167                                                           serial->in_endp->
2168                                                           bEndpointAddress &
2169                                                           0x7F),
2170                                           serial->rx_data[i],
2171                                           serial->rx_data_length,
2172                                           hso_std_serial_read_bulk_callback,
2173                                           serial);
2174                         result = usb_submit_urb(serial->rx_urb[i], flags);
2175                         if (result) {
2176                                 dev_warn(&serial->parent->usb->dev,
2177                                          "Failed to submit urb - res %d\n",
2178                                          result);
2179                                 break;
2180                         }
2181                 }
2182         } else {
2183                 mutex_lock(&serial->shared_int->shared_int_lock);
2184                 if (!serial->shared_int->use_count) {
2185                         result =
2186                             hso_mux_submit_intr_urb(serial->shared_int,
2187                                                     hso_dev->usb, flags);
2188                 }
2189                 serial->shared_int->use_count++;
2190                 mutex_unlock(&serial->shared_int->shared_int_lock);
2191         }
2192         if (serial->tiocmget)
2193                 tiocmget_submit_urb(serial,
2194                                     serial->tiocmget,
2195                                     serial->parent->usb);
2196         return result;
2197 }
2198
2199 static int hso_stop_serial_device(struct hso_device *hso_dev)
2200 {
2201         int i;
2202         struct hso_serial *serial = dev2ser(hso_dev);
2203         struct hso_tiocmget  *tiocmget;
2204
2205         if (!serial)
2206                 return -ENODEV;
2207
2208         for (i = 0; i < serial->num_rx_urbs; i++) {
2209                 if (serial->rx_urb[i]) {
2210                         usb_kill_urb(serial->rx_urb[i]);
2211                         serial->rx_urb_filled[i] = 0;
2212                 }
2213         }
2214         serial->curr_rx_urb_idx = 0;
2215
2216         if (serial->tx_urb)
2217                 usb_kill_urb(serial->tx_urb);
2218
2219         if (serial->shared_int) {
2220                 mutex_lock(&serial->shared_int->shared_int_lock);
2221                 if (serial->shared_int->use_count &&
2222                     (--serial->shared_int->use_count == 0)) {
2223                         struct urb *urb;
2224
2225                         urb = serial->shared_int->shared_intr_urb;
2226                         if (urb)
2227                                 usb_kill_urb(urb);
2228                 }
2229                 mutex_unlock(&serial->shared_int->shared_int_lock);
2230         }
2231         tiocmget = serial->tiocmget;
2232         if (tiocmget) {
2233                 wake_up_interruptible(&tiocmget->waitq);
2234                 usb_kill_urb(tiocmget->urb);
2235         }
2236
2237         return 0;
2238 }
2239
2240 static void hso_serial_tty_unregister(struct hso_serial *serial)
2241 {
2242         tty_unregister_device(tty_drv, serial->minor);
2243 }
2244
2245 static void hso_serial_common_free(struct hso_serial *serial)
2246 {
2247         int i;
2248
2249         for (i = 0; i < serial->num_rx_urbs; i++) {
2250                 /* unlink and free RX URB */
2251                 usb_free_urb(serial->rx_urb[i]);
2252                 /* free the RX buffer */
2253                 kfree(serial->rx_data[i]);
2254         }
2255
2256         /* unlink and free TX URB */
2257         usb_free_urb(serial->tx_urb);
2258         kfree(serial->tx_buffer);
2259         kfree(serial->tx_data);
2260         tty_port_destroy(&serial->port);
2261 }
2262
2263 static int hso_serial_common_create(struct hso_serial *serial, int num_urbs,
2264                                     int rx_size, int tx_size)
2265 {
2266         struct device *dev;
2267         int minor;
2268         int i;
2269
2270         tty_port_init(&serial->port);
2271
2272         minor = get_free_serial_index();
2273         if (minor < 0)
2274                 goto exit;
2275
2276         /* register our minor number */
2277         serial->parent->dev = tty_port_register_device_attr(&serial->port,
2278                         tty_drv, minor, &serial->parent->interface->dev,
2279                         serial->parent, hso_serial_dev_groups);
2280         dev = serial->parent->dev;
2281
2282         /* fill in specific data for later use */
2283         serial->minor = minor;
2284         serial->magic = HSO_SERIAL_MAGIC;
2285         spin_lock_init(&serial->serial_lock);
2286         serial->num_rx_urbs = num_urbs;
2287
2288         /* RX, allocate urb and initialize */
2289
2290         /* prepare our RX buffer */
2291         serial->rx_data_length = rx_size;
2292         for (i = 0; i < serial->num_rx_urbs; i++) {
2293                 serial->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
2294                 if (!serial->rx_urb[i])
2295                         goto exit;
2296                 serial->rx_urb[i]->transfer_buffer = NULL;
2297                 serial->rx_urb[i]->transfer_buffer_length = 0;
2298                 serial->rx_data[i] = kzalloc(serial->rx_data_length,
2299                                              GFP_KERNEL);
2300                 if (!serial->rx_data[i])
2301                         goto exit;
2302         }
2303
2304         /* TX, allocate urb and initialize */
2305         serial->tx_urb = usb_alloc_urb(0, GFP_KERNEL);
2306         if (!serial->tx_urb)
2307                 goto exit;
2308         serial->tx_urb->transfer_buffer = NULL;
2309         serial->tx_urb->transfer_buffer_length = 0;
2310         /* prepare our TX buffer */
2311         serial->tx_data_count = 0;
2312         serial->tx_buffer_count = 0;
2313         serial->tx_data_length = tx_size;
2314         serial->tx_data = kzalloc(serial->tx_data_length, GFP_KERNEL);
2315         if (!serial->tx_data)
2316                 goto exit;
2317
2318         serial->tx_buffer = kzalloc(serial->tx_data_length, GFP_KERNEL);
2319         if (!serial->tx_buffer)
2320                 goto exit;
2321
2322         return 0;
2323 exit:
2324         hso_serial_tty_unregister(serial);
2325         hso_serial_common_free(serial);
2326         return -1;
2327 }
2328
2329 /* Creates a general hso device */
2330 static struct hso_device *hso_create_device(struct usb_interface *intf,
2331                                             int port_spec)
2332 {
2333         struct hso_device *hso_dev;
2334
2335         hso_dev = kzalloc(sizeof(*hso_dev), GFP_ATOMIC);
2336         if (!hso_dev)
2337                 return NULL;
2338
2339         hso_dev->port_spec = port_spec;
2340         hso_dev->usb = interface_to_usbdev(intf);
2341         hso_dev->interface = intf;
2342         kref_init(&hso_dev->ref);
2343         mutex_init(&hso_dev->mutex);
2344
2345         INIT_WORK(&hso_dev->async_get_intf, async_get_intf);
2346         INIT_WORK(&hso_dev->async_put_intf, async_put_intf);
2347
2348         return hso_dev;
2349 }
2350
2351 /* Removes a network device in the network device table */
2352 static int remove_net_device(struct hso_device *hso_dev)
2353 {
2354         int i;
2355
2356         for (i = 0; i < HSO_MAX_NET_DEVICES; i++) {
2357                 if (network_table[i] == hso_dev) {
2358                         network_table[i] = NULL;
2359                         break;
2360                 }
2361         }
2362         if (i == HSO_MAX_NET_DEVICES)
2363                 return -1;
2364         return 0;
2365 }
2366
2367 /* Frees our network device */
2368 static void hso_free_net_device(struct hso_device *hso_dev)
2369 {
2370         int i;
2371         struct hso_net *hso_net = dev2net(hso_dev);
2372
2373         if (!hso_net)
2374                 return;
2375
2376         remove_net_device(hso_net->parent);
2377
2378         if (hso_net->net)
2379                 unregister_netdev(hso_net->net);
2380
2381         /* start freeing */
2382         for (i = 0; i < MUX_BULK_RX_BUF_COUNT; i++) {
2383                 usb_free_urb(hso_net->mux_bulk_rx_urb_pool[i]);
2384                 kfree(hso_net->mux_bulk_rx_buf_pool[i]);
2385                 hso_net->mux_bulk_rx_buf_pool[i] = NULL;
2386         }
2387         usb_free_urb(hso_net->mux_bulk_tx_urb);
2388         kfree(hso_net->mux_bulk_tx_buf);
2389         hso_net->mux_bulk_tx_buf = NULL;
2390
2391         if (hso_net->net)
2392                 free_netdev(hso_net->net);
2393
2394         kfree(hso_dev);
2395 }
2396
2397 static const struct net_device_ops hso_netdev_ops = {
2398         .ndo_open       = hso_net_open,
2399         .ndo_stop       = hso_net_close,
2400         .ndo_start_xmit = hso_net_start_xmit,
2401         .ndo_tx_timeout = hso_net_tx_timeout,
2402 };
2403
2404 /* initialize the network interface */
2405 static void hso_net_init(struct net_device *net)
2406 {
2407         struct hso_net *hso_net = netdev_priv(net);
2408
2409         hso_dbg(0x1, "sizeof hso_net is %zu\n", sizeof(*hso_net));
2410
2411         /* fill in the other fields */
2412         net->netdev_ops = &hso_netdev_ops;
2413         net->watchdog_timeo = HSO_NET_TX_TIMEOUT;
2414         net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
2415         net->type = ARPHRD_NONE;
2416         net->mtu = DEFAULT_MTU - 14;
2417         net->tx_queue_len = 10;
2418         net->ethtool_ops = &ops;
2419
2420         /* and initialize the semaphore */
2421         spin_lock_init(&hso_net->net_lock);
2422 }
2423
2424 /* Adds a network device in the network device table */
2425 static int add_net_device(struct hso_device *hso_dev)
2426 {
2427         int i;
2428
2429         for (i = 0; i < HSO_MAX_NET_DEVICES; i++) {
2430                 if (network_table[i] == NULL) {
2431                         network_table[i] = hso_dev;
2432                         break;
2433                 }
2434         }
2435         if (i == HSO_MAX_NET_DEVICES)
2436                 return -1;
2437         return 0;
2438 }
2439
2440 static int hso_rfkill_set_block(void *data, bool blocked)
2441 {
2442         struct hso_device *hso_dev = data;
2443         int enabled = !blocked;
2444         int rv;
2445
2446         mutex_lock(&hso_dev->mutex);
2447         if (hso_dev->usb_gone)
2448                 rv = 0;
2449         else
2450                 rv = usb_control_msg(hso_dev->usb, usb_rcvctrlpipe(hso_dev->usb, 0),
2451                                        enabled ? 0x82 : 0x81, 0x40, 0, 0, NULL, 0,
2452                                        USB_CTRL_SET_TIMEOUT);
2453         mutex_unlock(&hso_dev->mutex);
2454         return rv;
2455 }
2456
2457 static const struct rfkill_ops hso_rfkill_ops = {
2458         .set_block = hso_rfkill_set_block,
2459 };
2460
2461 /* Creates and sets up everything for rfkill */
2462 static void hso_create_rfkill(struct hso_device *hso_dev,
2463                              struct usb_interface *interface)
2464 {
2465         struct hso_net *hso_net = dev2net(hso_dev);
2466         struct device *dev = &hso_net->net->dev;
2467         static u32 rfkill_counter;
2468
2469         snprintf(hso_net->name, sizeof(hso_net->name), "hso-%d",
2470                  rfkill_counter++);
2471
2472         hso_net->rfkill = rfkill_alloc(hso_net->name,
2473                                        &interface_to_usbdev(interface)->dev,
2474                                        RFKILL_TYPE_WWAN,
2475                                        &hso_rfkill_ops, hso_dev);
2476         if (!hso_net->rfkill) {
2477                 dev_err(dev, "%s - Out of memory\n", __func__);
2478                 return;
2479         }
2480         if (rfkill_register(hso_net->rfkill) < 0) {
2481                 rfkill_destroy(hso_net->rfkill);
2482                 hso_net->rfkill = NULL;
2483                 dev_err(dev, "%s - Failed to register rfkill\n", __func__);
2484                 return;
2485         }
2486 }
2487
2488 static struct device_type hso_type = {
2489         .name   = "wwan",
2490 };
2491
2492 /* Creates our network device */
2493 static struct hso_device *hso_create_net_device(struct usb_interface *interface,
2494                                                 int port_spec)
2495 {
2496         int result, i;
2497         struct net_device *net;
2498         struct hso_net *hso_net;
2499         struct hso_device *hso_dev;
2500
2501         hso_dev = hso_create_device(interface, port_spec);
2502         if (!hso_dev)
2503                 return NULL;
2504
2505         /* allocate our network device, then we can put in our private data */
2506         /* call hso_net_init to do the basic initialization */
2507         net = alloc_netdev(sizeof(struct hso_net), "hso%d", NET_NAME_UNKNOWN,
2508                            hso_net_init);
2509         if (!net) {
2510                 dev_err(&interface->dev, "Unable to create ethernet device\n");
2511                 goto exit;
2512         }
2513
2514         hso_net = netdev_priv(net);
2515
2516         hso_dev->port_data.dev_net = hso_net;
2517         hso_net->net = net;
2518         hso_net->parent = hso_dev;
2519
2520         hso_net->in_endp = hso_get_ep(interface, USB_ENDPOINT_XFER_BULK,
2521                                       USB_DIR_IN);
2522         if (!hso_net->in_endp) {
2523                 dev_err(&interface->dev, "Can't find BULK IN endpoint\n");
2524                 goto exit;
2525         }
2526         hso_net->out_endp = hso_get_ep(interface, USB_ENDPOINT_XFER_BULK,
2527                                        USB_DIR_OUT);
2528         if (!hso_net->out_endp) {
2529                 dev_err(&interface->dev, "Can't find BULK OUT endpoint\n");
2530                 goto exit;
2531         }
2532         SET_NETDEV_DEV(net, &interface->dev);
2533         SET_NETDEV_DEVTYPE(net, &hso_type);
2534
2535         /* registering our net device */
2536         result = register_netdev(net);
2537         if (result) {
2538                 dev_err(&interface->dev, "Failed to register device\n");
2539                 goto exit;
2540         }
2541
2542         /* start allocating */
2543         for (i = 0; i < MUX_BULK_RX_BUF_COUNT; i++) {
2544                 hso_net->mux_bulk_rx_urb_pool[i] = usb_alloc_urb(0, GFP_KERNEL);
2545                 if (!hso_net->mux_bulk_rx_urb_pool[i])
2546                         goto exit;
2547                 hso_net->mux_bulk_rx_buf_pool[i] = kzalloc(MUX_BULK_RX_BUF_SIZE,
2548                                                            GFP_KERNEL);
2549                 if (!hso_net->mux_bulk_rx_buf_pool[i])
2550                         goto exit;
2551         }
2552         hso_net->mux_bulk_tx_urb = usb_alloc_urb(0, GFP_KERNEL);
2553         if (!hso_net->mux_bulk_tx_urb)
2554                 goto exit;
2555         hso_net->mux_bulk_tx_buf = kzalloc(MUX_BULK_TX_BUF_SIZE, GFP_KERNEL);
2556         if (!hso_net->mux_bulk_tx_buf)
2557                 goto exit;
2558
2559         add_net_device(hso_dev);
2560
2561         hso_log_port(hso_dev);
2562
2563         hso_create_rfkill(hso_dev, interface);
2564
2565         return hso_dev;
2566 exit:
2567         hso_free_net_device(hso_dev);
2568         return NULL;
2569 }
2570
2571 static void hso_free_tiomget(struct hso_serial *serial)
2572 {
2573         struct hso_tiocmget *tiocmget;
2574         if (!serial)
2575                 return;
2576         tiocmget = serial->tiocmget;
2577         if (tiocmget) {
2578                 usb_free_urb(tiocmget->urb);
2579                 tiocmget->urb = NULL;
2580                 serial->tiocmget = NULL;
2581                 kfree(tiocmget);
2582         }
2583 }
2584
2585 /* Frees an AT channel ( goes for both mux and non-mux ) */
2586 static void hso_free_serial_device(struct hso_device *hso_dev)
2587 {
2588         struct hso_serial *serial = dev2ser(hso_dev);
2589
2590         if (!serial)
2591                 return;
2592
2593         hso_serial_common_free(serial);
2594
2595         if (serial->shared_int) {
2596                 mutex_lock(&serial->shared_int->shared_int_lock);
2597                 if (--serial->shared_int->ref_count == 0)
2598                         hso_free_shared_int(serial->shared_int);
2599                 else
2600                         mutex_unlock(&serial->shared_int->shared_int_lock);
2601         }
2602         hso_free_tiomget(serial);
2603         kfree(serial);
2604         kfree(hso_dev);
2605 }
2606
2607 /* Creates a bulk AT channel */
2608 static struct hso_device *hso_create_bulk_serial_device(
2609                         struct usb_interface *interface, int port)
2610 {
2611         struct hso_device *hso_dev;
2612         struct hso_serial *serial;
2613         int num_urbs;
2614         struct hso_tiocmget *tiocmget;
2615
2616         hso_dev = hso_create_device(interface, port);
2617         if (!hso_dev)
2618                 return NULL;
2619
2620         serial = kzalloc(sizeof(*serial), GFP_KERNEL);
2621         if (!serial)
2622                 goto exit;
2623
2624         serial->parent = hso_dev;
2625         hso_dev->port_data.dev_serial = serial;
2626
2627         if ((port & HSO_PORT_MASK) == HSO_PORT_MODEM) {
2628                 num_urbs = 2;
2629                 serial->tiocmget = kzalloc(sizeof(struct hso_tiocmget),
2630                                            GFP_KERNEL);
2631                 /* it isn't going to break our heart if serial->tiocmget
2632                  *  allocation fails don't bother checking this.
2633                  */
2634                 if (serial->tiocmget) {
2635                         tiocmget = serial->tiocmget;
2636                         tiocmget->urb = usb_alloc_urb(0, GFP_KERNEL);
2637                         if (tiocmget->urb) {
2638                                 mutex_init(&tiocmget->mutex);
2639                                 init_waitqueue_head(&tiocmget->waitq);
2640                                 tiocmget->endp = hso_get_ep(
2641                                         interface,
2642                                         USB_ENDPOINT_XFER_INT,
2643                                         USB_DIR_IN);
2644                         } else
2645                                 hso_free_tiomget(serial);
2646                 }
2647         }
2648         else
2649                 num_urbs = 1;
2650
2651         if (hso_serial_common_create(serial, num_urbs, BULK_URB_RX_SIZE,
2652                                      BULK_URB_TX_SIZE))
2653                 goto exit;
2654
2655         serial->in_endp = hso_get_ep(interface, USB_ENDPOINT_XFER_BULK,
2656                                      USB_DIR_IN);
2657         if (!serial->in_endp) {
2658                 dev_err(&interface->dev, "Failed to find BULK IN ep\n");
2659                 goto exit2;
2660         }
2661
2662         if (!
2663             (serial->out_endp =
2664              hso_get_ep(interface, USB_ENDPOINT_XFER_BULK, USB_DIR_OUT))) {
2665                 dev_err(&interface->dev, "Failed to find BULK IN ep\n");
2666                 goto exit2;
2667         }
2668
2669         serial->write_data = hso_std_serial_write_data;
2670
2671         /* and record this serial */
2672         set_serial_by_index(serial->minor, serial);
2673
2674         /* setup the proc dirs and files if needed */
2675         hso_log_port(hso_dev);
2676
2677         /* done, return it */
2678         return hso_dev;
2679
2680 exit2:
2681         hso_serial_tty_unregister(serial);
2682         hso_serial_common_free(serial);
2683 exit:
2684         hso_free_tiomget(serial);
2685         kfree(serial);
2686         kfree(hso_dev);
2687         return NULL;
2688 }
2689
2690 /* Creates a multiplexed AT channel */
2691 static
2692 struct hso_device *hso_create_mux_serial_device(struct usb_interface *interface,
2693                                                 int port,
2694                                                 struct hso_shared_int *mux)
2695 {
2696         struct hso_device *hso_dev;
2697         struct hso_serial *serial;
2698         int port_spec;
2699
2700         port_spec = HSO_INTF_MUX;
2701         port_spec &= ~HSO_PORT_MASK;
2702
2703         port_spec |= hso_mux_to_port(port);
2704         if ((port_spec & HSO_PORT_MASK) == HSO_PORT_NO_PORT)
2705                 return NULL;
2706
2707         hso_dev = hso_create_device(interface, port_spec);
2708         if (!hso_dev)
2709                 return NULL;
2710
2711         serial = kzalloc(sizeof(*serial), GFP_KERNEL);
2712         if (!serial)
2713                 goto exit;
2714
2715         hso_dev->port_data.dev_serial = serial;
2716         serial->parent = hso_dev;
2717
2718         if (hso_serial_common_create
2719             (serial, 1, CTRL_URB_RX_SIZE, CTRL_URB_TX_SIZE))
2720                 goto exit;
2721
2722         serial->tx_data_length--;
2723         serial->write_data = hso_mux_serial_write_data;
2724
2725         serial->shared_int = mux;
2726         mutex_lock(&serial->shared_int->shared_int_lock);
2727         serial->shared_int->ref_count++;
2728         mutex_unlock(&serial->shared_int->shared_int_lock);
2729
2730         /* and record this serial */
2731         set_serial_by_index(serial->minor, serial);
2732
2733         /* setup the proc dirs and files if needed */
2734         hso_log_port(hso_dev);
2735
2736         /* done, return it */
2737         return hso_dev;
2738
2739 exit:
2740         if (serial) {
2741                 tty_unregister_device(tty_drv, serial->minor);
2742                 kfree(serial);
2743         }
2744         kfree(hso_dev);
2745         return NULL;
2746
2747 }
2748
2749 static void hso_free_shared_int(struct hso_shared_int *mux)
2750 {
2751         usb_free_urb(mux->shared_intr_urb);
2752         kfree(mux->shared_intr_buf);
2753         mutex_unlock(&mux->shared_int_lock);
2754         kfree(mux);
2755 }
2756
2757 static
2758 struct hso_shared_int *hso_create_shared_int(struct usb_interface *interface)
2759 {
2760         struct hso_shared_int *mux = kzalloc(sizeof(*mux), GFP_KERNEL);
2761
2762         if (!mux)
2763                 return NULL;
2764
2765         mux->intr_endp = hso_get_ep(interface, USB_ENDPOINT_XFER_INT,
2766                                     USB_DIR_IN);
2767         if (!mux->intr_endp) {
2768                 dev_err(&interface->dev, "Can't find INT IN endpoint\n");
2769                 goto exit;
2770         }
2771
2772         mux->shared_intr_urb = usb_alloc_urb(0, GFP_KERNEL);
2773         if (!mux->shared_intr_urb)
2774                 goto exit;
2775         mux->shared_intr_buf =
2776                 kzalloc(le16_to_cpu(mux->intr_endp->wMaxPacketSize),
2777                         GFP_KERNEL);
2778         if (!mux->shared_intr_buf)
2779                 goto exit;
2780
2781         mutex_init(&mux->shared_int_lock);
2782
2783         return mux;
2784
2785 exit:
2786         kfree(mux->shared_intr_buf);
2787         usb_free_urb(mux->shared_intr_urb);
2788         kfree(mux);
2789         return NULL;
2790 }
2791
2792 /* Gets the port spec for a certain interface */
2793 static int hso_get_config_data(struct usb_interface *interface)
2794 {
2795         struct usb_device *usbdev = interface_to_usbdev(interface);
2796         u8 *config_data = kmalloc(17, GFP_KERNEL);
2797         u32 if_num = interface->cur_altsetting->desc.bInterfaceNumber;
2798         s32 result;
2799
2800         if (!config_data)
2801                 return -ENOMEM;
2802         if (usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0),
2803                             0x86, 0xC0, 0, 0, config_data, 17,
2804                             USB_CTRL_SET_TIMEOUT) != 0x11) {
2805                 kfree(config_data);
2806                 return -EIO;
2807         }
2808
2809         switch (config_data[if_num]) {
2810         case 0x0:
2811                 result = 0;
2812                 break;
2813         case 0x1:
2814                 result = HSO_PORT_DIAG;
2815                 break;
2816         case 0x2:
2817                 result = HSO_PORT_GPS;
2818                 break;
2819         case 0x3:
2820                 result = HSO_PORT_GPS_CONTROL;
2821                 break;
2822         case 0x4:
2823                 result = HSO_PORT_APP;
2824                 break;
2825         case 0x5:
2826                 result = HSO_PORT_APP2;
2827                 break;
2828         case 0x6:
2829                 result = HSO_PORT_CONTROL;
2830                 break;
2831         case 0x7:
2832                 result = HSO_PORT_NETWORK;
2833                 break;
2834         case 0x8:
2835                 result = HSO_PORT_MODEM;
2836                 break;
2837         case 0x9:
2838                 result = HSO_PORT_MSD;
2839                 break;
2840         case 0xa:
2841                 result = HSO_PORT_PCSC;
2842                 break;
2843         case 0xb:
2844                 result = HSO_PORT_VOICE;
2845                 break;
2846         default:
2847                 result = 0;
2848         }
2849
2850         if (result)
2851                 result |= HSO_INTF_BULK;
2852
2853         if (config_data[16] & 0x1)
2854                 result |= HSO_INFO_CRC_BUG;
2855
2856         kfree(config_data);
2857         return result;
2858 }
2859
2860 /* called once for each interface upon device insertion */
2861 static int hso_probe(struct usb_interface *interface,
2862                      const struct usb_device_id *id)
2863 {
2864         int mux, i, if_num, port_spec;
2865         unsigned char port_mask;
2866         struct hso_device *hso_dev = NULL;
2867         struct hso_shared_int *shared_int;
2868         struct hso_device *tmp_dev = NULL;
2869
2870         if (interface->cur_altsetting->desc.bInterfaceClass != 0xFF) {
2871                 dev_err(&interface->dev, "Not our interface\n");
2872                 return -ENODEV;
2873         }
2874
2875         if_num = interface->cur_altsetting->desc.bInterfaceNumber;
2876
2877         /* Get the interface/port specification from either driver_info or from
2878          * the device itself */
2879         if (id->driver_info)
2880                 port_spec = ((u32 *)(id->driver_info))[if_num];
2881         else
2882                 port_spec = hso_get_config_data(interface);
2883
2884         /* Check if we need to switch to alt interfaces prior to port
2885          * configuration */
2886         if (interface->num_altsetting > 1)
2887                 usb_set_interface(interface_to_usbdev(interface), if_num, 1);
2888         interface->needs_remote_wakeup = 1;
2889
2890         /* Allocate new hso device(s) */
2891         switch (port_spec & HSO_INTF_MASK) {
2892         case HSO_INTF_MUX:
2893                 if ((port_spec & HSO_PORT_MASK) == HSO_PORT_NETWORK) {
2894                         /* Create the network device */
2895                         if (!disable_net) {
2896                                 hso_dev = hso_create_net_device(interface,
2897                                                                 port_spec);
2898                                 if (!hso_dev)
2899                                         goto exit;
2900                                 tmp_dev = hso_dev;
2901                         }
2902                 }
2903
2904                 if (hso_get_mux_ports(interface, &port_mask))
2905                         /* TODO: de-allocate everything */
2906                         goto exit;
2907
2908                 shared_int = hso_create_shared_int(interface);
2909                 if (!shared_int)
2910                         goto exit;
2911
2912                 for (i = 1, mux = 0; i < 0x100; i = i << 1, mux++) {
2913                         if (port_mask & i) {
2914                                 hso_dev = hso_create_mux_serial_device(
2915                                                 interface, i, shared_int);
2916                                 if (!hso_dev)
2917                                         goto exit;
2918                         }
2919                 }
2920
2921                 if (tmp_dev)
2922                         hso_dev = tmp_dev;
2923                 break;
2924
2925         case HSO_INTF_BULK:
2926                 /* It's a regular bulk interface */
2927                 if ((port_spec & HSO_PORT_MASK) == HSO_PORT_NETWORK) {
2928                         if (!disable_net)
2929                                 hso_dev =
2930                                     hso_create_net_device(interface, port_spec);
2931                 } else {
2932                         hso_dev =
2933                             hso_create_bulk_serial_device(interface, port_spec);
2934                 }
2935                 if (!hso_dev)
2936                         goto exit;
2937                 break;
2938         default:
2939                 goto exit;
2940         }
2941
2942         /* save our data pointer in this device */
2943         usb_set_intfdata(interface, hso_dev);
2944
2945         /* done */
2946         return 0;
2947 exit:
2948         hso_free_interface(interface);
2949         return -ENODEV;
2950 }
2951
2952 /* device removed, cleaning up */
2953 static void hso_disconnect(struct usb_interface *interface)
2954 {
2955         hso_free_interface(interface);
2956
2957         /* remove reference of our private data */
2958         usb_set_intfdata(interface, NULL);
2959 }
2960
2961 static void async_get_intf(struct work_struct *data)
2962 {
2963         struct hso_device *hso_dev =
2964             container_of(data, struct hso_device, async_get_intf);
2965         usb_autopm_get_interface(hso_dev->interface);
2966 }
2967
2968 static void async_put_intf(struct work_struct *data)
2969 {
2970         struct hso_device *hso_dev =
2971             container_of(data, struct hso_device, async_put_intf);
2972         usb_autopm_put_interface(hso_dev->interface);
2973 }
2974
2975 static int hso_get_activity(struct hso_device *hso_dev)
2976 {
2977         if (hso_dev->usb->state == USB_STATE_SUSPENDED) {
2978                 if (!hso_dev->is_active) {
2979                         hso_dev->is_active = 1;
2980                         schedule_work(&hso_dev->async_get_intf);
2981                 }
2982         }
2983
2984         if (hso_dev->usb->state != USB_STATE_CONFIGURED)
2985                 return -EAGAIN;
2986
2987         usb_mark_last_busy(hso_dev->usb);
2988
2989         return 0;
2990 }
2991
2992 static int hso_put_activity(struct hso_device *hso_dev)
2993 {
2994         if (hso_dev->usb->state != USB_STATE_SUSPENDED) {
2995                 if (hso_dev->is_active) {
2996                         hso_dev->is_active = 0;
2997                         schedule_work(&hso_dev->async_put_intf);
2998                         return -EAGAIN;
2999                 }
3000         }
3001         hso_dev->is_active = 0;
3002         return 0;
3003 }
3004
3005 /* called by kernel when we need to suspend device */
3006 static int hso_suspend(struct usb_interface *iface, pm_message_t message)
3007 {
3008         int i, result;
3009
3010         /* Stop all serial ports */
3011         for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) {
3012                 if (serial_table[i] && (serial_table[i]->interface == iface)) {
3013                         result = hso_stop_serial_device(serial_table[i]);
3014                         if (result)
3015                                 goto out;
3016                 }
3017         }
3018
3019         /* Stop all network ports */
3020         for (i = 0; i < HSO_MAX_NET_DEVICES; i++) {
3021                 if (network_table[i] &&
3022                     (network_table[i]->interface == iface)) {
3023                         result = hso_stop_net_device(network_table[i]);
3024                         if (result)
3025                                 goto out;
3026                 }
3027         }
3028
3029 out:
3030         return 0;
3031 }
3032
3033 /* called by kernel when we need to resume device */
3034 static int hso_resume(struct usb_interface *iface)
3035 {
3036         int i, result = 0;
3037         struct hso_net *hso_net;
3038
3039         /* Start all serial ports */
3040         for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) {
3041                 if (serial_table[i] && (serial_table[i]->interface == iface)) {
3042                         if (dev2ser(serial_table[i])->port.count) {
3043                                 result =
3044                                     hso_start_serial_device(serial_table[i], GFP_NOIO);
3045                                 hso_kick_transmit(dev2ser(serial_table[i]));
3046                                 if (result)
3047                                         goto out;
3048                         }
3049                 }
3050         }
3051
3052         /* Start all network ports */
3053         for (i = 0; i < HSO_MAX_NET_DEVICES; i++) {
3054                 if (network_table[i] &&
3055                     (network_table[i]->interface == iface)) {
3056                         hso_net = dev2net(network_table[i]);
3057                         if (hso_net->flags & IFF_UP) {
3058                                 /* First transmit any lingering data,
3059                                    then restart the device. */
3060                                 if (hso_net->skb_tx_buf) {
3061                                         dev_dbg(&iface->dev,
3062                                                 "Transmitting"
3063                                                 " lingering data\n");
3064                                         hso_net_start_xmit(hso_net->skb_tx_buf,
3065                                                            hso_net->net);
3066                                         hso_net->skb_tx_buf = NULL;
3067                                 }
3068                                 result = hso_start_net_device(network_table[i]);
3069                                 if (result)
3070                                         goto out;
3071                         }
3072                 }
3073         }
3074
3075 out:
3076         return result;
3077 }
3078
3079 static void hso_serial_ref_free(struct kref *ref)
3080 {
3081         struct hso_device *hso_dev = container_of(ref, struct hso_device, ref);
3082
3083         hso_free_serial_device(hso_dev);
3084 }
3085
3086 static void hso_free_interface(struct usb_interface *interface)
3087 {
3088         struct hso_serial *serial;
3089         int i;
3090
3091         for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) {
3092                 if (serial_table[i] &&
3093                     (serial_table[i]->interface == interface)) {
3094                         serial = dev2ser(serial_table[i]);
3095                         tty_port_tty_hangup(&serial->port, false);
3096                         mutex_lock(&serial->parent->mutex);
3097                         serial->parent->usb_gone = 1;
3098                         mutex_unlock(&serial->parent->mutex);
3099                         cancel_work_sync(&serial_table[i]->async_put_intf);
3100                         cancel_work_sync(&serial_table[i]->async_get_intf);
3101                         hso_serial_tty_unregister(serial);
3102                         kref_put(&serial_table[i]->ref, hso_serial_ref_free);
3103                         set_serial_by_index(i, NULL);
3104                 }
3105         }
3106
3107         for (i = 0; i < HSO_MAX_NET_DEVICES; i++) {
3108                 if (network_table[i] &&
3109                     (network_table[i]->interface == interface)) {
3110                         struct rfkill *rfk = dev2net(network_table[i])->rfkill;
3111                         /* hso_stop_net_device doesn't stop the net queue since
3112                          * traffic needs to start it again when suspended */
3113                         netif_stop_queue(dev2net(network_table[i])->net);
3114                         hso_stop_net_device(network_table[i]);
3115                         cancel_work_sync(&network_table[i]->async_put_intf);
3116                         cancel_work_sync(&network_table[i]->async_get_intf);
3117                         if (rfk) {
3118                                 rfkill_unregister(rfk);
3119                                 rfkill_destroy(rfk);
3120                         }
3121                         hso_free_net_device(network_table[i]);
3122                 }
3123         }
3124 }
3125
3126 /* Helper functions */
3127
3128 /* Get the endpoint ! */
3129 static struct usb_endpoint_descriptor *hso_get_ep(struct usb_interface *intf,
3130                                                   int type, int dir)
3131 {
3132         int i;
3133         struct usb_host_interface *iface = intf->cur_altsetting;
3134         struct usb_endpoint_descriptor *endp;
3135
3136         for (i = 0; i < iface->desc.bNumEndpoints; i++) {
3137                 endp = &iface->endpoint[i].desc;
3138                 if (((endp->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == dir) &&
3139                     (usb_endpoint_type(endp) == type))
3140                         return endp;
3141         }
3142
3143         return NULL;
3144 }
3145
3146 /* Get the byte that describes which ports are enabled */
3147 static int hso_get_mux_ports(struct usb_interface *intf, unsigned char *ports)
3148 {
3149         int i;
3150         struct usb_host_interface *iface = intf->cur_altsetting;
3151
3152         if (iface->extralen == 3) {
3153                 *ports = iface->extra[2];
3154                 return 0;
3155         }
3156
3157         for (i = 0; i < iface->desc.bNumEndpoints; i++) {
3158                 if (iface->endpoint[i].extralen == 3) {
3159                         *ports = iface->endpoint[i].extra[2];
3160                         return 0;
3161                 }
3162         }
3163
3164         return -1;
3165 }
3166
3167 /* interrupt urb needs to be submitted, used for serial read of muxed port */
3168 static int hso_mux_submit_intr_urb(struct hso_shared_int *shared_int,
3169                                    struct usb_device *usb, gfp_t gfp)
3170 {
3171         int result;
3172
3173         usb_fill_int_urb(shared_int->shared_intr_urb, usb,
3174                          usb_rcvintpipe(usb,
3175                                 shared_int->intr_endp->bEndpointAddress & 0x7F),
3176                          shared_int->shared_intr_buf,
3177                          1,
3178                          intr_callback, shared_int,
3179                          shared_int->intr_endp->bInterval);
3180
3181         result = usb_submit_urb(shared_int->shared_intr_urb, gfp);
3182         if (result)
3183                 dev_warn(&usb->dev, "%s failed mux_intr_urb %d\n", __func__,
3184                         result);
3185
3186         return result;
3187 }
3188
3189 /* operations setup of the serial interface */
3190 static const struct tty_operations hso_serial_ops = {
3191         .open = hso_serial_open,
3192         .close = hso_serial_close,
3193         .write = hso_serial_write,
3194         .write_room = hso_serial_write_room,
3195         .cleanup = hso_serial_cleanup,
3196         .ioctl = hso_serial_ioctl,
3197         .set_termios = hso_serial_set_termios,
3198         .chars_in_buffer = hso_serial_chars_in_buffer,
3199         .tiocmget = hso_serial_tiocmget,
3200         .tiocmset = hso_serial_tiocmset,
3201         .get_icount = hso_get_count,
3202         .unthrottle = hso_unthrottle
3203 };
3204
3205 static struct usb_driver hso_driver = {
3206         .name = driver_name,
3207         .probe = hso_probe,
3208         .disconnect = hso_disconnect,
3209         .id_table = hso_ids,
3210         .suspend = hso_suspend,
3211         .resume = hso_resume,
3212         .reset_resume = hso_resume,
3213         .supports_autosuspend = 1,
3214         .disable_hub_initiated_lpm = 1,
3215 };
3216
3217 static int __init hso_init(void)
3218 {
3219         int i;
3220         int result;
3221
3222         /* put it in the log */
3223         printk(KERN_INFO "hso: %s\n", version);
3224
3225         /* Initialise the serial table semaphore and table */
3226         spin_lock_init(&serial_table_lock);
3227         for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++)
3228                 serial_table[i] = NULL;
3229
3230         /* allocate our driver using the proper amount of supported minors */
3231         tty_drv = alloc_tty_driver(HSO_SERIAL_TTY_MINORS);
3232         if (!tty_drv)
3233                 return -ENOMEM;
3234
3235         /* fill in all needed values */
3236         tty_drv->driver_name = driver_name;
3237         tty_drv->name = tty_filename;
3238
3239         /* if major number is provided as parameter, use that one */
3240         if (tty_major)
3241                 tty_drv->major = tty_major;
3242
3243         tty_drv->minor_start = 0;
3244         tty_drv->type = TTY_DRIVER_TYPE_SERIAL;
3245         tty_drv->subtype = SERIAL_TYPE_NORMAL;
3246         tty_drv->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
3247         tty_drv->init_termios = tty_std_termios;
3248         hso_init_termios(&tty_drv->init_termios);
3249         tty_set_operations(tty_drv, &hso_serial_ops);
3250
3251         /* register the tty driver */
3252         result = tty_register_driver(tty_drv);
3253         if (result) {
3254                 printk(KERN_ERR "%s - tty_register_driver failed(%d)\n",
3255                         __func__, result);
3256                 goto err_free_tty;
3257         }
3258
3259         /* register this module as an usb driver */
3260         result = usb_register(&hso_driver);
3261         if (result) {
3262                 printk(KERN_ERR "Could not register hso driver? error: %d\n",
3263                         result);
3264                 goto err_unreg_tty;
3265         }
3266
3267         /* done */
3268         return 0;
3269 err_unreg_tty:
3270         tty_unregister_driver(tty_drv);
3271 err_free_tty:
3272         put_tty_driver(tty_drv);
3273         return result;
3274 }
3275
3276 static void __exit hso_exit(void)
3277 {
3278         printk(KERN_INFO "hso: unloaded\n");
3279
3280         tty_unregister_driver(tty_drv);
3281         put_tty_driver(tty_drv);
3282         /* deregister the usb driver */
3283         usb_deregister(&hso_driver);
3284 }
3285
3286 /* Module definitions */
3287 module_init(hso_init);
3288 module_exit(hso_exit);
3289
3290 MODULE_AUTHOR(MOD_AUTHOR);
3291 MODULE_DESCRIPTION(MOD_DESCRIPTION);
3292 MODULE_LICENSE(MOD_LICENSE);
3293
3294 /* change the debug level (eg: insmod hso.ko debug=0x04) */
3295 MODULE_PARM_DESC(debug, "debug level mask [0x01 | 0x02 | 0x04 | 0x08 | 0x10]");
3296 module_param(debug, int, S_IRUGO | S_IWUSR);
3297
3298 /* set the major tty number (eg: insmod hso.ko tty_major=245) */
3299 MODULE_PARM_DESC(tty_major, "Set the major tty number");
3300 module_param(tty_major, int, S_IRUGO | S_IWUSR);
3301
3302 /* disable network interface (eg: insmod hso.ko disable_net=1) */
3303 MODULE_PARM_DESC(disable_net, "Disable the network interface");
3304 module_param(disable_net, int, S_IRUGO | S_IWUSR);