Merge branches 'release' and 'throttling-domains' into release
[linux-2.6] / drivers / usb / gadget / serial.c
1 /*
2  * g_serial.c -- USB gadget serial driver
3  *
4  * Copyright 2003 (C) Al Borchers (alborchers@steinerpoint.com)
5  *
6  * This code is based in part on the Gadget Zero driver, which
7  * is Copyright (C) 2003 by David Brownell, all rights reserved.
8  *
9  * This code also borrows from usbserial.c, which is
10  * Copyright (C) 1999 - 2002 Greg Kroah-Hartman (greg@kroah.com)
11  * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
12  * Copyright (C) 2000 Al Borchers (alborchers@steinerpoint.com)
13  *
14  * This software is distributed under the terms of the GNU General
15  * Public License ("GPL") as published by the Free Software Foundation,
16  * either version 2 of that License or (at your option) any later version.
17  *
18  */
19
20 #include <linux/kernel.h>
21 #include <linux/utsname.h>
22 #include <linux/device.h>
23 #include <linux/tty.h>
24 #include <linux/tty_flip.h>
25
26 #include <linux/usb/ch9.h>
27 #include <linux/usb/cdc.h>
28 #include <linux/usb/gadget.h>
29
30 #include "gadget_chips.h"
31
32
33 /* Defines */
34
35 #define GS_VERSION_STR                  "v2.2"
36 #define GS_VERSION_NUM                  0x0202
37
38 #define GS_LONG_NAME                    "Gadget Serial"
39 #define GS_SHORT_NAME                   "g_serial"
40
41 #define GS_MAJOR                        127
42 #define GS_MINOR_START                  0
43
44 #define GS_NUM_PORTS                    16
45
46 #define GS_NUM_CONFIGS                  1
47 #define GS_NO_CONFIG_ID                 0
48 #define GS_BULK_CONFIG_ID               1
49 #define GS_ACM_CONFIG_ID                2
50
51 #define GS_MAX_NUM_INTERFACES           2
52 #define GS_BULK_INTERFACE_ID            0
53 #define GS_CONTROL_INTERFACE_ID         0
54 #define GS_DATA_INTERFACE_ID            1
55
56 #define GS_MAX_DESC_LEN                 256
57
58 #define GS_DEFAULT_READ_Q_SIZE          32
59 #define GS_DEFAULT_WRITE_Q_SIZE         32
60
61 #define GS_DEFAULT_WRITE_BUF_SIZE       8192
62 #define GS_TMP_BUF_SIZE                 8192
63
64 #define GS_CLOSE_TIMEOUT                15
65
66 #define GS_DEFAULT_USE_ACM              0
67
68 #define GS_DEFAULT_DTE_RATE             9600
69 #define GS_DEFAULT_DATA_BITS            8
70 #define GS_DEFAULT_PARITY               USB_CDC_NO_PARITY
71 #define GS_DEFAULT_CHAR_FORMAT          USB_CDC_1_STOP_BITS
72
73 /* maxpacket and other transfer characteristics vary by speed. */
74 static inline struct usb_endpoint_descriptor *
75 choose_ep_desc(struct usb_gadget *g, struct usb_endpoint_descriptor *hs,
76                 struct usb_endpoint_descriptor *fs)
77 {
78         if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
79                 return hs;
80         return fs;
81 }
82
83
84 /* debug settings */
85 #ifdef DEBUG
86 static int debug = 1;
87 #else
88 #define debug 0
89 #endif
90
91 #define gs_debug(format, arg...) \
92         do { if (debug) pr_debug(format, ## arg); } while (0)
93 #define gs_debug_level(level, format, arg...) \
94         do { if (debug >= level) pr_debug(format, ## arg); } while (0)
95
96
97 /* Thanks to NetChip Technologies for donating this product ID.
98  *
99  * DO NOT REUSE THESE IDs with a protocol-incompatible driver!!  Ever!!
100  * Instead:  allocate your own, using normal USB-IF procedures.
101  */
102 #define GS_VENDOR_ID                    0x0525  /* NetChip */
103 #define GS_PRODUCT_ID                   0xa4a6  /* Linux-USB Serial Gadget */
104 #define GS_CDC_PRODUCT_ID               0xa4a7  /* ... as CDC-ACM */
105
106 #define GS_LOG2_NOTIFY_INTERVAL         5       /* 1 << 5 == 32 msec */
107 #define GS_NOTIFY_MAXPACKET             8
108
109
110 /* Structures */
111
112 struct gs_dev;
113
114 /* circular buffer */
115 struct gs_buf {
116         unsigned int            buf_size;
117         char                    *buf_buf;
118         char                    *buf_get;
119         char                    *buf_put;
120 };
121
122 /* list of requests */
123 struct gs_req_entry {
124         struct list_head        re_entry;
125         struct usb_request      *re_req;
126 };
127
128 /* the port structure holds info for each port, one for each minor number */
129 struct gs_port {
130         struct gs_dev           *port_dev;      /* pointer to device struct */
131         struct tty_struct       *port_tty;      /* pointer to tty struct */
132         spinlock_t              port_lock;
133         int                     port_num;
134         int                     port_open_count;
135         int                     port_in_use;    /* open/close in progress */
136         wait_queue_head_t       port_write_wait;/* waiting to write */
137         struct gs_buf           *port_write_buf;
138         struct usb_cdc_line_coding      port_line_coding;
139 };
140
141 /* the device structure holds info for the USB device */
142 struct gs_dev {
143         struct usb_gadget       *dev_gadget;    /* gadget device pointer */
144         spinlock_t              dev_lock;       /* lock for set/reset config */
145         int                     dev_config;     /* configuration number */
146         struct usb_ep           *dev_notify_ep; /* address of notify endpoint */
147         struct usb_ep           *dev_in_ep;     /* address of in endpoint */
148         struct usb_ep           *dev_out_ep;    /* address of out endpoint */
149         struct usb_endpoint_descriptor          /* descriptor of notify ep */
150                                 *dev_notify_ep_desc;
151         struct usb_endpoint_descriptor          /* descriptor of in endpoint */
152                                 *dev_in_ep_desc;
153         struct usb_endpoint_descriptor          /* descriptor of out endpoint */
154                                 *dev_out_ep_desc;
155         struct usb_request      *dev_ctrl_req;  /* control request */
156         struct list_head        dev_req_list;   /* list of write requests */
157         int                     dev_sched_port; /* round robin port scheduled */
158         struct gs_port          *dev_port[GS_NUM_PORTS]; /* the ports */
159 };
160
161
162 /* Functions */
163
164 /* module */
165 static int __init gs_module_init(void);
166 static void __exit gs_module_exit(void);
167
168 /* tty driver */
169 static int gs_open(struct tty_struct *tty, struct file *file);
170 static void gs_close(struct tty_struct *tty, struct file *file);
171 static int gs_write(struct tty_struct *tty,
172         const unsigned char *buf, int count);
173 static void gs_put_char(struct tty_struct *tty, unsigned char ch);
174 static void gs_flush_chars(struct tty_struct *tty);
175 static int gs_write_room(struct tty_struct *tty);
176 static int gs_chars_in_buffer(struct tty_struct *tty);
177 static void gs_throttle(struct tty_struct * tty);
178 static void gs_unthrottle(struct tty_struct * tty);
179 static void gs_break(struct tty_struct *tty, int break_state);
180 static int  gs_ioctl(struct tty_struct *tty, struct file *file,
181         unsigned int cmd, unsigned long arg);
182 static void gs_set_termios(struct tty_struct *tty, struct ktermios *old);
183
184 static int gs_send(struct gs_dev *dev);
185 static int gs_send_packet(struct gs_dev *dev, char *packet,
186         unsigned int size);
187 static int gs_recv_packet(struct gs_dev *dev, char *packet,
188         unsigned int size);
189 static void gs_read_complete(struct usb_ep *ep, struct usb_request *req);
190 static void gs_write_complete(struct usb_ep *ep, struct usb_request *req);
191
192 /* gadget driver */
193 static int gs_bind(struct usb_gadget *gadget);
194 static void gs_unbind(struct usb_gadget *gadget);
195 static int gs_setup(struct usb_gadget *gadget,
196         const struct usb_ctrlrequest *ctrl);
197 static int gs_setup_standard(struct usb_gadget *gadget,
198         const struct usb_ctrlrequest *ctrl);
199 static int gs_setup_class(struct usb_gadget *gadget,
200         const struct usb_ctrlrequest *ctrl);
201 static void gs_setup_complete(struct usb_ep *ep, struct usb_request *req);
202 static void gs_disconnect(struct usb_gadget *gadget);
203 static int gs_set_config(struct gs_dev *dev, unsigned config);
204 static void gs_reset_config(struct gs_dev *dev);
205 static int gs_build_config_buf(u8 *buf, struct usb_gadget *g,
206                 u8 type, unsigned int index, int is_otg);
207
208 static struct usb_request *gs_alloc_req(struct usb_ep *ep, unsigned int len,
209         gfp_t kmalloc_flags);
210 static void gs_free_req(struct usb_ep *ep, struct usb_request *req);
211
212 static struct gs_req_entry *gs_alloc_req_entry(struct usb_ep *ep, unsigned len,
213         gfp_t kmalloc_flags);
214 static void gs_free_req_entry(struct usb_ep *ep, struct gs_req_entry *req);
215
216 static int gs_alloc_ports(struct gs_dev *dev, gfp_t kmalloc_flags);
217 static void gs_free_ports(struct gs_dev *dev);
218
219 /* circular buffer */
220 static struct gs_buf *gs_buf_alloc(unsigned int size, gfp_t kmalloc_flags);
221 static void gs_buf_free(struct gs_buf *gb);
222 static void gs_buf_clear(struct gs_buf *gb);
223 static unsigned int gs_buf_data_avail(struct gs_buf *gb);
224 static unsigned int gs_buf_space_avail(struct gs_buf *gb);
225 static unsigned int gs_buf_put(struct gs_buf *gb, const char *buf,
226         unsigned int count);
227 static unsigned int gs_buf_get(struct gs_buf *gb, char *buf,
228         unsigned int count);
229
230 /* external functions */
231 extern int net2280_set_fifo_mode(struct usb_gadget *gadget, int mode);
232
233
234 /* Globals */
235
236 static struct gs_dev *gs_device;
237
238 static const char *EP_IN_NAME;
239 static const char *EP_OUT_NAME;
240 static const char *EP_NOTIFY_NAME;
241
242 static struct mutex gs_open_close_lock[GS_NUM_PORTS];
243
244 static unsigned int read_q_size = GS_DEFAULT_READ_Q_SIZE;
245 static unsigned int write_q_size = GS_DEFAULT_WRITE_Q_SIZE;
246
247 static unsigned int write_buf_size = GS_DEFAULT_WRITE_BUF_SIZE;
248
249 static unsigned int use_acm = GS_DEFAULT_USE_ACM;
250
251
252 /* tty driver struct */
253 static const struct tty_operations gs_tty_ops = {
254         .open =                 gs_open,
255         .close =                gs_close,
256         .write =                gs_write,
257         .put_char =             gs_put_char,
258         .flush_chars =          gs_flush_chars,
259         .write_room =           gs_write_room,
260         .ioctl =                gs_ioctl,
261         .set_termios =          gs_set_termios,
262         .throttle =             gs_throttle,
263         .unthrottle =           gs_unthrottle,
264         .break_ctl =            gs_break,
265         .chars_in_buffer =      gs_chars_in_buffer,
266 };
267 static struct tty_driver *gs_tty_driver;
268
269 /* gadget driver struct */
270 static struct usb_gadget_driver gs_gadget_driver = {
271 #ifdef CONFIG_USB_GADGET_DUALSPEED
272         .speed =                USB_SPEED_HIGH,
273 #else
274         .speed =                USB_SPEED_FULL,
275 #endif /* CONFIG_USB_GADGET_DUALSPEED */
276         .function =             GS_LONG_NAME,
277         .bind =                 gs_bind,
278         .unbind =               gs_unbind,
279         .setup =                gs_setup,
280         .disconnect =           gs_disconnect,
281         .driver = {
282                 .name =         GS_SHORT_NAME,
283         },
284 };
285
286
287 /* USB descriptors */
288
289 #define GS_MANUFACTURER_STR_ID  1
290 #define GS_PRODUCT_STR_ID       2
291 #define GS_SERIAL_STR_ID        3
292 #define GS_BULK_CONFIG_STR_ID   4
293 #define GS_ACM_CONFIG_STR_ID    5
294 #define GS_CONTROL_STR_ID       6
295 #define GS_DATA_STR_ID          7
296
297 /* static strings, in UTF-8 */
298 static char manufacturer[50];
299 static struct usb_string gs_strings[] = {
300         { GS_MANUFACTURER_STR_ID, manufacturer },
301         { GS_PRODUCT_STR_ID, GS_LONG_NAME },
302         { GS_SERIAL_STR_ID, "0" },
303         { GS_BULK_CONFIG_STR_ID, "Gadget Serial Bulk" },
304         { GS_ACM_CONFIG_STR_ID, "Gadget Serial CDC ACM" },
305         { GS_CONTROL_STR_ID, "Gadget Serial Control" },
306         { GS_DATA_STR_ID, "Gadget Serial Data" },
307         {  } /* end of list */
308 };
309
310 static struct usb_gadget_strings gs_string_table = {
311         .language =             0x0409, /* en-us */
312         .strings =              gs_strings,
313 };
314
315 static struct usb_device_descriptor gs_device_desc = {
316         .bLength =              USB_DT_DEVICE_SIZE,
317         .bDescriptorType =      USB_DT_DEVICE,
318         .bcdUSB =               __constant_cpu_to_le16(0x0200),
319         .bDeviceSubClass =      0,
320         .bDeviceProtocol =      0,
321         .idVendor =             __constant_cpu_to_le16(GS_VENDOR_ID),
322         .idProduct =            __constant_cpu_to_le16(GS_PRODUCT_ID),
323         .iManufacturer =        GS_MANUFACTURER_STR_ID,
324         .iProduct =             GS_PRODUCT_STR_ID,
325         .iSerialNumber =        GS_SERIAL_STR_ID,
326         .bNumConfigurations =   GS_NUM_CONFIGS,
327 };
328
329 static struct usb_otg_descriptor gs_otg_descriptor = {
330         .bLength =              sizeof(gs_otg_descriptor),
331         .bDescriptorType =      USB_DT_OTG,
332         .bmAttributes =         USB_OTG_SRP,
333 };
334
335 static struct usb_config_descriptor gs_bulk_config_desc = {
336         .bLength =              USB_DT_CONFIG_SIZE,
337         .bDescriptorType =      USB_DT_CONFIG,
338         /* .wTotalLength computed dynamically */
339         .bNumInterfaces =       1,
340         .bConfigurationValue =  GS_BULK_CONFIG_ID,
341         .iConfiguration =       GS_BULK_CONFIG_STR_ID,
342         .bmAttributes =         USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
343         .bMaxPower =            1,
344 };
345
346 static struct usb_config_descriptor gs_acm_config_desc = {
347         .bLength =              USB_DT_CONFIG_SIZE,
348         .bDescriptorType =      USB_DT_CONFIG,
349         /* .wTotalLength computed dynamically */
350         .bNumInterfaces =       2,
351         .bConfigurationValue =  GS_ACM_CONFIG_ID,
352         .iConfiguration =       GS_ACM_CONFIG_STR_ID,
353         .bmAttributes =         USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
354         .bMaxPower =            1,
355 };
356
357 static const struct usb_interface_descriptor gs_bulk_interface_desc = {
358         .bLength =              USB_DT_INTERFACE_SIZE,
359         .bDescriptorType =      USB_DT_INTERFACE,
360         .bInterfaceNumber =     GS_BULK_INTERFACE_ID,
361         .bNumEndpoints =        2,
362         .bInterfaceClass =      USB_CLASS_CDC_DATA,
363         .bInterfaceSubClass =   0,
364         .bInterfaceProtocol =   0,
365         .iInterface =           GS_DATA_STR_ID,
366 };
367
368 static const struct usb_interface_descriptor gs_control_interface_desc = {
369         .bLength =              USB_DT_INTERFACE_SIZE,
370         .bDescriptorType =      USB_DT_INTERFACE,
371         .bInterfaceNumber =     GS_CONTROL_INTERFACE_ID,
372         .bNumEndpoints =        1,
373         .bInterfaceClass =      USB_CLASS_COMM,
374         .bInterfaceSubClass =   USB_CDC_SUBCLASS_ACM,
375         .bInterfaceProtocol =   USB_CDC_ACM_PROTO_AT_V25TER,
376         .iInterface =           GS_CONTROL_STR_ID,
377 };
378
379 static const struct usb_interface_descriptor gs_data_interface_desc = {
380         .bLength =              USB_DT_INTERFACE_SIZE,
381         .bDescriptorType =      USB_DT_INTERFACE,
382         .bInterfaceNumber =     GS_DATA_INTERFACE_ID,
383         .bNumEndpoints =        2,
384         .bInterfaceClass =      USB_CLASS_CDC_DATA,
385         .bInterfaceSubClass =   0,
386         .bInterfaceProtocol =   0,
387         .iInterface =           GS_DATA_STR_ID,
388 };
389
390 static const struct usb_cdc_header_desc gs_header_desc = {
391         .bLength =              sizeof(gs_header_desc),
392         .bDescriptorType =      USB_DT_CS_INTERFACE,
393         .bDescriptorSubType =   USB_CDC_HEADER_TYPE,
394         .bcdCDC =               __constant_cpu_to_le16(0x0110),
395 };
396
397 static const struct usb_cdc_call_mgmt_descriptor gs_call_mgmt_descriptor = {
398         .bLength =              sizeof(gs_call_mgmt_descriptor),
399         .bDescriptorType =      USB_DT_CS_INTERFACE,
400         .bDescriptorSubType =   USB_CDC_CALL_MANAGEMENT_TYPE,
401         .bmCapabilities =       0,
402         .bDataInterface =       1,      /* index of data interface */
403 };
404
405 static struct usb_cdc_acm_descriptor gs_acm_descriptor = {
406         .bLength =              sizeof(gs_acm_descriptor),
407         .bDescriptorType =      USB_DT_CS_INTERFACE,
408         .bDescriptorSubType =   USB_CDC_ACM_TYPE,
409         .bmCapabilities =       0,
410 };
411
412 static const struct usb_cdc_union_desc gs_union_desc = {
413         .bLength =              sizeof(gs_union_desc),
414         .bDescriptorType =      USB_DT_CS_INTERFACE,
415         .bDescriptorSubType =   USB_CDC_UNION_TYPE,
416         .bMasterInterface0 =    0,      /* index of control interface */
417         .bSlaveInterface0 =     1,      /* index of data interface */
418 };
419
420 static struct usb_endpoint_descriptor gs_fullspeed_notify_desc = {
421         .bLength =              USB_DT_ENDPOINT_SIZE,
422         .bDescriptorType =      USB_DT_ENDPOINT,
423         .bEndpointAddress =     USB_DIR_IN,
424         .bmAttributes =         USB_ENDPOINT_XFER_INT,
425         .wMaxPacketSize =       __constant_cpu_to_le16(GS_NOTIFY_MAXPACKET),
426         .bInterval =            1 << GS_LOG2_NOTIFY_INTERVAL,
427 };
428
429 static struct usb_endpoint_descriptor gs_fullspeed_in_desc = {
430         .bLength =              USB_DT_ENDPOINT_SIZE,
431         .bDescriptorType =      USB_DT_ENDPOINT,
432         .bEndpointAddress =     USB_DIR_IN,
433         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
434 };
435
436 static struct usb_endpoint_descriptor gs_fullspeed_out_desc = {
437         .bLength =              USB_DT_ENDPOINT_SIZE,
438         .bDescriptorType =      USB_DT_ENDPOINT,
439         .bEndpointAddress =     USB_DIR_OUT,
440         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
441 };
442
443 static const struct usb_descriptor_header *gs_bulk_fullspeed_function[] = {
444         (struct usb_descriptor_header *) &gs_otg_descriptor,
445         (struct usb_descriptor_header *) &gs_bulk_interface_desc,
446         (struct usb_descriptor_header *) &gs_fullspeed_in_desc,
447         (struct usb_descriptor_header *) &gs_fullspeed_out_desc,
448         NULL,
449 };
450
451 static const struct usb_descriptor_header *gs_acm_fullspeed_function[] = {
452         (struct usb_descriptor_header *) &gs_otg_descriptor,
453         (struct usb_descriptor_header *) &gs_control_interface_desc,
454         (struct usb_descriptor_header *) &gs_header_desc,
455         (struct usb_descriptor_header *) &gs_call_mgmt_descriptor,
456         (struct usb_descriptor_header *) &gs_acm_descriptor,
457         (struct usb_descriptor_header *) &gs_union_desc,
458         (struct usb_descriptor_header *) &gs_fullspeed_notify_desc,
459         (struct usb_descriptor_header *) &gs_data_interface_desc,
460         (struct usb_descriptor_header *) &gs_fullspeed_in_desc,
461         (struct usb_descriptor_header *) &gs_fullspeed_out_desc,
462         NULL,
463 };
464
465 static struct usb_endpoint_descriptor gs_highspeed_notify_desc = {
466         .bLength =              USB_DT_ENDPOINT_SIZE,
467         .bDescriptorType =      USB_DT_ENDPOINT,
468         .bEndpointAddress =     USB_DIR_IN,
469         .bmAttributes =         USB_ENDPOINT_XFER_INT,
470         .wMaxPacketSize =       __constant_cpu_to_le16(GS_NOTIFY_MAXPACKET),
471         .bInterval =            GS_LOG2_NOTIFY_INTERVAL+4,
472 };
473
474 static struct usb_endpoint_descriptor gs_highspeed_in_desc = {
475         .bLength =              USB_DT_ENDPOINT_SIZE,
476         .bDescriptorType =      USB_DT_ENDPOINT,
477         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
478         .wMaxPacketSize =       __constant_cpu_to_le16(512),
479 };
480
481 static struct usb_endpoint_descriptor gs_highspeed_out_desc = {
482         .bLength =              USB_DT_ENDPOINT_SIZE,
483         .bDescriptorType =      USB_DT_ENDPOINT,
484         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
485         .wMaxPacketSize =       __constant_cpu_to_le16(512),
486 };
487
488 static struct usb_qualifier_descriptor gs_qualifier_desc = {
489         .bLength =              sizeof(struct usb_qualifier_descriptor),
490         .bDescriptorType =      USB_DT_DEVICE_QUALIFIER,
491         .bcdUSB =               __constant_cpu_to_le16 (0x0200),
492         /* assumes ep0 uses the same value for both speeds ... */
493         .bNumConfigurations =   GS_NUM_CONFIGS,
494 };
495
496 static const struct usb_descriptor_header *gs_bulk_highspeed_function[] = {
497         (struct usb_descriptor_header *) &gs_otg_descriptor,
498         (struct usb_descriptor_header *) &gs_bulk_interface_desc,
499         (struct usb_descriptor_header *) &gs_highspeed_in_desc,
500         (struct usb_descriptor_header *) &gs_highspeed_out_desc,
501         NULL,
502 };
503
504 static const struct usb_descriptor_header *gs_acm_highspeed_function[] = {
505         (struct usb_descriptor_header *) &gs_otg_descriptor,
506         (struct usb_descriptor_header *) &gs_control_interface_desc,
507         (struct usb_descriptor_header *) &gs_header_desc,
508         (struct usb_descriptor_header *) &gs_call_mgmt_descriptor,
509         (struct usb_descriptor_header *) &gs_acm_descriptor,
510         (struct usb_descriptor_header *) &gs_union_desc,
511         (struct usb_descriptor_header *) &gs_highspeed_notify_desc,
512         (struct usb_descriptor_header *) &gs_data_interface_desc,
513         (struct usb_descriptor_header *) &gs_highspeed_in_desc,
514         (struct usb_descriptor_header *) &gs_highspeed_out_desc,
515         NULL,
516 };
517
518
519 /* Module */
520 MODULE_DESCRIPTION(GS_LONG_NAME);
521 MODULE_AUTHOR("Al Borchers");
522 MODULE_LICENSE("GPL");
523
524 #ifdef DEBUG
525 module_param(debug, int, S_IRUGO|S_IWUSR);
526 MODULE_PARM_DESC(debug, "Enable debugging, 0=off, 1=on");
527 #endif
528
529 module_param(read_q_size, uint, S_IRUGO);
530 MODULE_PARM_DESC(read_q_size, "Read request queue size, default=32");
531
532 module_param(write_q_size, uint, S_IRUGO);
533 MODULE_PARM_DESC(write_q_size, "Write request queue size, default=32");
534
535 module_param(write_buf_size, uint, S_IRUGO);
536 MODULE_PARM_DESC(write_buf_size, "Write buffer size, default=8192");
537
538 module_param(use_acm, uint, S_IRUGO);
539 MODULE_PARM_DESC(use_acm, "Use CDC ACM, 0=no, 1=yes, default=no");
540
541 module_init(gs_module_init);
542 module_exit(gs_module_exit);
543
544 /*
545 *  gs_module_init
546 *
547 *  Register as a USB gadget driver and a tty driver.
548 */
549 static int __init gs_module_init(void)
550 {
551         int i;
552         int retval;
553
554         retval = usb_gadget_register_driver(&gs_gadget_driver);
555         if (retval) {
556                 pr_err("gs_module_init: cannot register gadget driver, "
557                         "ret=%d\n", retval);
558                 return retval;
559         }
560
561         gs_tty_driver = alloc_tty_driver(GS_NUM_PORTS);
562         if (!gs_tty_driver)
563                 return -ENOMEM;
564         gs_tty_driver->owner = THIS_MODULE;
565         gs_tty_driver->driver_name = GS_SHORT_NAME;
566         gs_tty_driver->name = "ttygs";
567         gs_tty_driver->major = GS_MAJOR;
568         gs_tty_driver->minor_start = GS_MINOR_START;
569         gs_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
570         gs_tty_driver->subtype = SERIAL_TYPE_NORMAL;
571         gs_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
572         gs_tty_driver->init_termios = tty_std_termios;
573         gs_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
574         tty_set_operations(gs_tty_driver, &gs_tty_ops);
575
576         for (i=0; i < GS_NUM_PORTS; i++)
577                 mutex_init(&gs_open_close_lock[i]);
578
579         retval = tty_register_driver(gs_tty_driver);
580         if (retval) {
581                 usb_gadget_unregister_driver(&gs_gadget_driver);
582                 put_tty_driver(gs_tty_driver);
583                 pr_err("gs_module_init: cannot register tty driver, "
584                                 "ret=%d\n", retval);
585                 return retval;
586         }
587
588         pr_info("gs_module_init: %s %s loaded\n",
589                         GS_LONG_NAME, GS_VERSION_STR);
590         return 0;
591 }
592
593 /*
594 * gs_module_exit
595 *
596 * Unregister as a tty driver and a USB gadget driver.
597 */
598 static void __exit gs_module_exit(void)
599 {
600         tty_unregister_driver(gs_tty_driver);
601         put_tty_driver(gs_tty_driver);
602         usb_gadget_unregister_driver(&gs_gadget_driver);
603
604         pr_info("gs_module_exit: %s %s unloaded\n",
605                         GS_LONG_NAME, GS_VERSION_STR);
606 }
607
608 /* TTY Driver */
609
610 /*
611  * gs_open
612  */
613 static int gs_open(struct tty_struct *tty, struct file *file)
614 {
615         int port_num;
616         unsigned long flags;
617         struct gs_port *port;
618         struct gs_dev *dev;
619         struct gs_buf *buf;
620         struct mutex *mtx;
621         int ret;
622
623         port_num = tty->index;
624
625         gs_debug("gs_open: (%d,%p,%p)\n", port_num, tty, file);
626
627         if (port_num < 0 || port_num >= GS_NUM_PORTS) {
628                 pr_err("gs_open: (%d,%p,%p) invalid port number\n",
629                         port_num, tty, file);
630                 return -ENODEV;
631         }
632
633         dev = gs_device;
634
635         if (dev == NULL) {
636                 pr_err("gs_open: (%d,%p,%p) NULL device pointer\n",
637                         port_num, tty, file);
638                 return -ENODEV;
639         }
640
641         mtx = &gs_open_close_lock[port_num];
642         if (mutex_lock_interruptible(mtx)) {
643                 pr_err("gs_open: (%d,%p,%p) interrupted waiting for mutex\n",
644                         port_num, tty, file);
645                 return -ERESTARTSYS;
646         }
647
648         spin_lock_irqsave(&dev->dev_lock, flags);
649
650         if (dev->dev_config == GS_NO_CONFIG_ID) {
651                 pr_err("gs_open: (%d,%p,%p) device is not connected\n",
652                         port_num, tty, file);
653                 ret = -ENODEV;
654                 goto exit_unlock_dev;
655         }
656
657         port = dev->dev_port[port_num];
658
659         if (port == NULL) {
660                 pr_err("gs_open: (%d,%p,%p) NULL port pointer\n",
661                         port_num, tty, file);
662                 ret = -ENODEV;
663                 goto exit_unlock_dev;
664         }
665
666         spin_lock(&port->port_lock);
667         spin_unlock(&dev->dev_lock);
668
669         if (port->port_dev == NULL) {
670                 pr_err("gs_open: (%d,%p,%p) port disconnected (1)\n",
671                         port_num, tty, file);
672                 ret = -EIO;
673                 goto exit_unlock_port;
674         }
675
676         if (port->port_open_count > 0) {
677                 ++port->port_open_count;
678                 gs_debug("gs_open: (%d,%p,%p) already open\n",
679                         port_num, tty, file);
680                 ret = 0;
681                 goto exit_unlock_port;
682         }
683
684         tty->driver_data = NULL;
685
686         /* mark port as in use, we can drop port lock and sleep if necessary */
687         port->port_in_use = 1;
688
689         /* allocate write buffer on first open */
690         if (port->port_write_buf == NULL) {
691                 spin_unlock_irqrestore(&port->port_lock, flags);
692                 buf = gs_buf_alloc(write_buf_size, GFP_KERNEL);
693                 spin_lock_irqsave(&port->port_lock, flags);
694
695                 /* might have been disconnected while asleep, check */
696                 if (port->port_dev == NULL) {
697                         pr_err("gs_open: (%d,%p,%p) port disconnected (2)\n",
698                                 port_num, tty, file);
699                         port->port_in_use = 0;
700                         ret = -EIO;
701                         goto exit_unlock_port;
702                 }
703
704                 if ((port->port_write_buf=buf) == NULL) {
705                         pr_err("gs_open: (%d,%p,%p) cannot allocate "
706                                 "port write buffer\n",
707                                 port_num, tty, file);
708                         port->port_in_use = 0;
709                         ret = -ENOMEM;
710                         goto exit_unlock_port;
711                 }
712
713         }
714
715         /* wait for carrier detect (not implemented) */
716
717         /* might have been disconnected while asleep, check */
718         if (port->port_dev == NULL) {
719                 pr_err("gs_open: (%d,%p,%p) port disconnected (3)\n",
720                         port_num, tty, file);
721                 port->port_in_use = 0;
722                 ret = -EIO;
723                 goto exit_unlock_port;
724         }
725
726         tty->driver_data = port;
727         port->port_tty = tty;
728         port->port_open_count = 1;
729         port->port_in_use = 0;
730
731         gs_debug("gs_open: (%d,%p,%p) completed\n", port_num, tty, file);
732
733         ret = 0;
734
735 exit_unlock_port:
736         spin_unlock_irqrestore(&port->port_lock, flags);
737         mutex_unlock(mtx);
738         return ret;
739
740 exit_unlock_dev:
741         spin_unlock_irqrestore(&dev->dev_lock, flags);
742         mutex_unlock(mtx);
743         return ret;
744
745 }
746
747 /*
748  * gs_close
749  */
750
751 #define GS_WRITE_FINISHED_EVENT_SAFELY(p)                       \
752 ({                                                              \
753         int cond;                                               \
754                                                                 \
755         spin_lock_irq(&(p)->port_lock);                         \
756         cond = !(p)->port_dev || !gs_buf_data_avail((p)->port_write_buf); \
757         spin_unlock_irq(&(p)->port_lock);                       \
758         cond;                                                   \
759 })
760
761 static void gs_close(struct tty_struct *tty, struct file *file)
762 {
763         struct gs_port *port = tty->driver_data;
764         struct mutex *mtx;
765
766         if (port == NULL) {
767                 pr_err("gs_close: NULL port pointer\n");
768                 return;
769         }
770
771         gs_debug("gs_close: (%d,%p,%p)\n", port->port_num, tty, file);
772
773         mtx = &gs_open_close_lock[port->port_num];
774         mutex_lock(mtx);
775
776         spin_lock_irq(&port->port_lock);
777
778         if (port->port_open_count == 0) {
779                 pr_err("gs_close: (%d,%p,%p) port is already closed\n",
780                         port->port_num, tty, file);
781                 goto exit;
782         }
783
784         if (port->port_open_count > 1) {
785                 --port->port_open_count;
786                 goto exit;
787         }
788
789         /* free disconnected port on final close */
790         if (port->port_dev == NULL) {
791                 kfree(port);
792                 goto exit;
793         }
794
795         /* mark port as closed but in use, we can drop port lock */
796         /* and sleep if necessary */
797         port->port_in_use = 1;
798         port->port_open_count = 0;
799
800         /* wait for write buffer to drain, or */
801         /* at most GS_CLOSE_TIMEOUT seconds */
802         if (gs_buf_data_avail(port->port_write_buf) > 0) {
803                 spin_unlock_irq(&port->port_lock);
804                 wait_event_interruptible_timeout(port->port_write_wait,
805                                         GS_WRITE_FINISHED_EVENT_SAFELY(port),
806                                         GS_CLOSE_TIMEOUT * HZ);
807                 spin_lock_irq(&port->port_lock);
808         }
809
810         /* free disconnected port on final close */
811         /* (might have happened during the above sleep) */
812         if (port->port_dev == NULL) {
813                 kfree(port);
814                 goto exit;
815         }
816
817         gs_buf_clear(port->port_write_buf);
818
819         tty->driver_data = NULL;
820         port->port_tty = NULL;
821         port->port_in_use = 0;
822
823         gs_debug("gs_close: (%d,%p,%p) completed\n",
824                 port->port_num, tty, file);
825
826 exit:
827         spin_unlock_irq(&port->port_lock);
828         mutex_unlock(mtx);
829 }
830
831 /*
832  * gs_write
833  */
834 static int gs_write(struct tty_struct *tty, const unsigned char *buf, int count)
835 {
836         unsigned long flags;
837         struct gs_port *port = tty->driver_data;
838         int ret;
839
840         if (port == NULL) {
841                 pr_err("gs_write: NULL port pointer\n");
842                 return -EIO;
843         }
844
845         gs_debug("gs_write: (%d,%p) writing %d bytes\n", port->port_num, tty,
846                 count);
847
848         if (count == 0)
849                 return 0;
850
851         spin_lock_irqsave(&port->port_lock, flags);
852
853         if (port->port_dev == NULL) {
854                 pr_err("gs_write: (%d,%p) port is not connected\n",
855                         port->port_num, tty);
856                 ret = -EIO;
857                 goto exit;
858         }
859
860         if (port->port_open_count == 0) {
861                 pr_err("gs_write: (%d,%p) port is closed\n",
862                         port->port_num, tty);
863                 ret = -EBADF;
864                 goto exit;
865         }
866
867         count = gs_buf_put(port->port_write_buf, buf, count);
868
869         spin_unlock_irqrestore(&port->port_lock, flags);
870
871         gs_send(gs_device);
872
873         gs_debug("gs_write: (%d,%p) wrote %d bytes\n", port->port_num, tty,
874                 count);
875
876         return count;
877
878 exit:
879         spin_unlock_irqrestore(&port->port_lock, flags);
880         return ret;
881 }
882
883 /*
884  * gs_put_char
885  */
886 static void gs_put_char(struct tty_struct *tty, unsigned char ch)
887 {
888         unsigned long flags;
889         struct gs_port *port = tty->driver_data;
890
891         if (port == NULL) {
892                 pr_err("gs_put_char: NULL port pointer\n");
893                 return;
894         }
895
896         gs_debug("gs_put_char: (%d,%p) char=0x%x, called from %p\n",
897                 port->port_num, tty, ch, __builtin_return_address(0));
898
899         spin_lock_irqsave(&port->port_lock, flags);
900
901         if (port->port_dev == NULL) {
902                 pr_err("gs_put_char: (%d,%p) port is not connected\n",
903                         port->port_num, tty);
904                 goto exit;
905         }
906
907         if (port->port_open_count == 0) {
908                 pr_err("gs_put_char: (%d,%p) port is closed\n",
909                         port->port_num, tty);
910                 goto exit;
911         }
912
913         gs_buf_put(port->port_write_buf, &ch, 1);
914
915 exit:
916         spin_unlock_irqrestore(&port->port_lock, flags);
917 }
918
919 /*
920  * gs_flush_chars
921  */
922 static void gs_flush_chars(struct tty_struct *tty)
923 {
924         unsigned long flags;
925         struct gs_port *port = tty->driver_data;
926
927         if (port == NULL) {
928                 pr_err("gs_flush_chars: NULL port pointer\n");
929                 return;
930         }
931
932         gs_debug("gs_flush_chars: (%d,%p)\n", port->port_num, tty);
933
934         spin_lock_irqsave(&port->port_lock, flags);
935
936         if (port->port_dev == NULL) {
937                 pr_err("gs_flush_chars: (%d,%p) port is not connected\n",
938                         port->port_num, tty);
939                 goto exit;
940         }
941
942         if (port->port_open_count == 0) {
943                 pr_err("gs_flush_chars: (%d,%p) port is closed\n",
944                         port->port_num, tty);
945                 goto exit;
946         }
947
948         spin_unlock_irqrestore(&port->port_lock, flags);
949
950         gs_send(gs_device);
951
952         return;
953
954 exit:
955         spin_unlock_irqrestore(&port->port_lock, flags);
956 }
957
958 /*
959  * gs_write_room
960  */
961 static int gs_write_room(struct tty_struct *tty)
962 {
963
964         int room = 0;
965         unsigned long flags;
966         struct gs_port *port = tty->driver_data;
967
968
969         if (port == NULL)
970                 return 0;
971
972         spin_lock_irqsave(&port->port_lock, flags);
973
974         if (port->port_dev != NULL && port->port_open_count > 0
975         && port->port_write_buf != NULL)
976                 room = gs_buf_space_avail(port->port_write_buf);
977
978         spin_unlock_irqrestore(&port->port_lock, flags);
979
980         gs_debug("gs_write_room: (%d,%p) room=%d\n",
981                 port->port_num, tty, room);
982
983         return room;
984 }
985
986 /*
987  * gs_chars_in_buffer
988  */
989 static int gs_chars_in_buffer(struct tty_struct *tty)
990 {
991         int chars = 0;
992         unsigned long flags;
993         struct gs_port *port = tty->driver_data;
994
995         if (port == NULL)
996                 return 0;
997
998         spin_lock_irqsave(&port->port_lock, flags);
999
1000         if (port->port_dev != NULL && port->port_open_count > 0
1001         && port->port_write_buf != NULL)
1002                 chars = gs_buf_data_avail(port->port_write_buf);
1003
1004         spin_unlock_irqrestore(&port->port_lock, flags);
1005
1006         gs_debug("gs_chars_in_buffer: (%d,%p) chars=%d\n",
1007                 port->port_num, tty, chars);
1008
1009         return chars;
1010 }
1011
1012 /*
1013  * gs_throttle
1014  */
1015 static void gs_throttle(struct tty_struct *tty)
1016 {
1017 }
1018
1019 /*
1020  * gs_unthrottle
1021  */
1022 static void gs_unthrottle(struct tty_struct *tty)
1023 {
1024 }
1025
1026 /*
1027  * gs_break
1028  */
1029 static void gs_break(struct tty_struct *tty, int break_state)
1030 {
1031 }
1032
1033 /*
1034  * gs_ioctl
1035  */
1036 static int gs_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg)
1037 {
1038         struct gs_port *port = tty->driver_data;
1039
1040         if (port == NULL) {
1041                 pr_err("gs_ioctl: NULL port pointer\n");
1042                 return -EIO;
1043         }
1044
1045         gs_debug("gs_ioctl: (%d,%p,%p) cmd=0x%4.4x, arg=%lu\n",
1046                 port->port_num, tty, file, cmd, arg);
1047
1048         /* handle ioctls */
1049
1050         /* could not handle ioctl */
1051         return -ENOIOCTLCMD;
1052 }
1053
1054 /*
1055  * gs_set_termios
1056  */
1057 static void gs_set_termios(struct tty_struct *tty, struct ktermios *old)
1058 {
1059 }
1060
1061 /*
1062 * gs_send
1063 *
1064 * This function finds available write requests, calls
1065 * gs_send_packet to fill these packets with data, and
1066 * continues until either there are no more write requests
1067 * available or no more data to send.  This function is
1068 * run whenever data arrives or write requests are available.
1069 */
1070 static int gs_send(struct gs_dev *dev)
1071 {
1072         int ret,len;
1073         unsigned long flags;
1074         struct usb_ep *ep;
1075         struct usb_request *req;
1076         struct gs_req_entry *req_entry;
1077
1078         if (dev == NULL) {
1079                 pr_err("gs_send: NULL device pointer\n");
1080                 return -ENODEV;
1081         }
1082
1083         spin_lock_irqsave(&dev->dev_lock, flags);
1084
1085         ep = dev->dev_in_ep;
1086
1087         while(!list_empty(&dev->dev_req_list)) {
1088
1089                 req_entry = list_entry(dev->dev_req_list.next,
1090                         struct gs_req_entry, re_entry);
1091
1092                 req = req_entry->re_req;
1093
1094                 len = gs_send_packet(dev, req->buf, ep->maxpacket);
1095
1096                 if (len > 0) {
1097                         gs_debug_level(3, "gs_send: len=%d, 0x%2.2x "
1098                                         "0x%2.2x 0x%2.2x ...\n", len,
1099                                         *((unsigned char *)req->buf),
1100                                         *((unsigned char *)req->buf+1),
1101                                         *((unsigned char *)req->buf+2));
1102                         list_del(&req_entry->re_entry);
1103                         req->length = len;
1104                         spin_unlock_irqrestore(&dev->dev_lock, flags);
1105                         if ((ret=usb_ep_queue(ep, req, GFP_ATOMIC))) {
1106                                 pr_err(
1107                                 "gs_send: cannot queue read request, ret=%d\n",
1108                                         ret);
1109                                 spin_lock_irqsave(&dev->dev_lock, flags);
1110                                 break;
1111                         }
1112                         spin_lock_irqsave(&dev->dev_lock, flags);
1113                 } else {
1114                         break;
1115                 }
1116
1117         }
1118
1119         spin_unlock_irqrestore(&dev->dev_lock, flags);
1120
1121         return 0;
1122 }
1123
1124 /*
1125  * gs_send_packet
1126  *
1127  * If there is data to send, a packet is built in the given
1128  * buffer and the size is returned.  If there is no data to
1129  * send, 0 is returned.  If there is any error a negative
1130  * error number is returned.
1131  *
1132  * Called during USB completion routine, on interrupt time.
1133  *
1134  * We assume that disconnect will not happen until all completion
1135  * routines have completed, so we can assume that the dev_port
1136  * array does not change during the lifetime of this function.
1137  */
1138 static int gs_send_packet(struct gs_dev *dev, char *packet, unsigned int size)
1139 {
1140         unsigned int len;
1141         struct gs_port *port;
1142
1143         /* TEMPORARY -- only port 0 is supported right now */
1144         port = dev->dev_port[0];
1145
1146         if (port == NULL) {
1147                 pr_err("gs_send_packet: port=%d, NULL port pointer\n", 0);
1148                 return -EIO;
1149         }
1150
1151         spin_lock(&port->port_lock);
1152
1153         len = gs_buf_data_avail(port->port_write_buf);
1154         if (len < size)
1155                 size = len;
1156
1157         if (size == 0)
1158                 goto exit;
1159
1160         size = gs_buf_get(port->port_write_buf, packet, size);
1161
1162         if (port->port_tty)
1163                 wake_up_interruptible(&port->port_tty->write_wait);
1164
1165 exit:
1166         spin_unlock(&port->port_lock);
1167         return size;
1168 }
1169
1170 /*
1171  * gs_recv_packet
1172  *
1173  * Called for each USB packet received.  Reads the packet
1174  * header and stuffs the data in the appropriate tty buffer.
1175  * Returns 0 if successful, or a negative error number.
1176  *
1177  * Called during USB completion routine, on interrupt time.
1178  *
1179  * We assume that disconnect will not happen until all completion
1180  * routines have completed, so we can assume that the dev_port
1181  * array does not change during the lifetime of this function.
1182  */
1183 static int gs_recv_packet(struct gs_dev *dev, char *packet, unsigned int size)
1184 {
1185         unsigned int len;
1186         struct gs_port *port;
1187         int ret;
1188         struct tty_struct *tty;
1189
1190         /* TEMPORARY -- only port 0 is supported right now */
1191         port = dev->dev_port[0];
1192
1193         if (port == NULL) {
1194                 pr_err("gs_recv_packet: port=%d, NULL port pointer\n",
1195                         port->port_num);
1196                 return -EIO;
1197         }
1198
1199         spin_lock(&port->port_lock);
1200
1201         if (port->port_open_count == 0) {
1202                 pr_err("gs_recv_packet: port=%d, port is closed\n",
1203                         port->port_num);
1204                 ret = -EIO;
1205                 goto exit;
1206         }
1207
1208
1209         tty = port->port_tty;
1210
1211         if (tty == NULL) {
1212                 pr_err("gs_recv_packet: port=%d, NULL tty pointer\n",
1213                         port->port_num);
1214                 ret = -EIO;
1215                 goto exit;
1216         }
1217
1218         if (port->port_tty->magic != TTY_MAGIC) {
1219                 pr_err("gs_recv_packet: port=%d, bad tty magic\n",
1220                         port->port_num);
1221                 ret = -EIO;
1222                 goto exit;
1223         }
1224
1225         len = tty_buffer_request_room(tty, size);
1226         if (len > 0) {
1227                 tty_insert_flip_string(tty, packet, len);
1228                 tty_flip_buffer_push(port->port_tty);
1229                 wake_up_interruptible(&port->port_tty->read_wait);
1230         }
1231         ret = 0;
1232 exit:
1233         spin_unlock(&port->port_lock);
1234         return ret;
1235 }
1236
1237 /*
1238 * gs_read_complete
1239 */
1240 static void gs_read_complete(struct usb_ep *ep, struct usb_request *req)
1241 {
1242         int ret;
1243         struct gs_dev *dev = ep->driver_data;
1244
1245         if (dev == NULL) {
1246                 pr_err("gs_read_complete: NULL device pointer\n");
1247                 return;
1248         }
1249
1250         switch(req->status) {
1251         case 0:
1252                 /* normal completion */
1253                 gs_recv_packet(dev, req->buf, req->actual);
1254 requeue:
1255                 req->length = ep->maxpacket;
1256                 if ((ret=usb_ep_queue(ep, req, GFP_ATOMIC))) {
1257                         pr_err(
1258                         "gs_read_complete: cannot queue read request, ret=%d\n",
1259                                 ret);
1260                 }
1261                 break;
1262
1263         case -ESHUTDOWN:
1264                 /* disconnect */
1265                 gs_debug("gs_read_complete: shutdown\n");
1266                 gs_free_req(ep, req);
1267                 break;
1268
1269         default:
1270                 /* unexpected */
1271                 pr_err(
1272                 "gs_read_complete: unexpected status error, status=%d\n",
1273                         req->status);
1274                 goto requeue;
1275                 break;
1276         }
1277 }
1278
1279 /*
1280 * gs_write_complete
1281 */
1282 static void gs_write_complete(struct usb_ep *ep, struct usb_request *req)
1283 {
1284         struct gs_dev *dev = ep->driver_data;
1285         struct gs_req_entry *gs_req = req->context;
1286
1287         if (dev == NULL) {
1288                 pr_err("gs_write_complete: NULL device pointer\n");
1289                 return;
1290         }
1291
1292         switch(req->status) {
1293         case 0:
1294                 /* normal completion */
1295 requeue:
1296                 if (gs_req == NULL) {
1297                         pr_err("gs_write_complete: NULL request pointer\n");
1298                         return;
1299                 }
1300
1301                 spin_lock(&dev->dev_lock);
1302                 list_add(&gs_req->re_entry, &dev->dev_req_list);
1303                 spin_unlock(&dev->dev_lock);
1304
1305                 gs_send(dev);
1306
1307                 break;
1308
1309         case -ESHUTDOWN:
1310                 /* disconnect */
1311                 gs_debug("gs_write_complete: shutdown\n");
1312                 gs_free_req(ep, req);
1313                 break;
1314
1315         default:
1316                 pr_err(
1317                 "gs_write_complete: unexpected status error, status=%d\n",
1318                         req->status);
1319                 goto requeue;
1320                 break;
1321         }
1322 }
1323
1324 /* Gadget Driver */
1325
1326 /*
1327  * gs_bind
1328  *
1329  * Called on module load.  Allocates and initializes the device
1330  * structure and a control request.
1331  */
1332 static int __init gs_bind(struct usb_gadget *gadget)
1333 {
1334         int ret;
1335         struct usb_ep *ep;
1336         struct gs_dev *dev;
1337         int gcnum;
1338
1339         /* Some controllers can't support CDC ACM:
1340          * - sh doesn't support multiple interfaces or configs;
1341          * - sa1100 doesn't have a third interrupt endpoint
1342          */
1343         if (gadget_is_sh(gadget) || gadget_is_sa1100(gadget))
1344                 use_acm = 0;
1345
1346         gcnum = usb_gadget_controller_number(gadget);
1347         if (gcnum >= 0)
1348                 gs_device_desc.bcdDevice =
1349                                 cpu_to_le16(GS_VERSION_NUM | gcnum);
1350         else {
1351                 pr_warning("gs_bind: controller '%s' not recognized\n",
1352                         gadget->name);
1353                 /* unrecognized, but safe unless bulk is REALLY quirky */
1354                 gs_device_desc.bcdDevice =
1355                         __constant_cpu_to_le16(GS_VERSION_NUM|0x0099);
1356         }
1357
1358         usb_ep_autoconfig_reset(gadget);
1359
1360         ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc);
1361         if (!ep)
1362                 goto autoconf_fail;
1363         EP_IN_NAME = ep->name;
1364         ep->driver_data = ep;   /* claim the endpoint */
1365
1366         ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc);
1367         if (!ep)
1368                 goto autoconf_fail;
1369         EP_OUT_NAME = ep->name;
1370         ep->driver_data = ep;   /* claim the endpoint */
1371
1372         if (use_acm) {
1373                 ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc);
1374                 if (!ep) {
1375                         pr_err("gs_bind: cannot run ACM on %s\n", gadget->name);
1376                         goto autoconf_fail;
1377                 }
1378                 gs_device_desc.idProduct = __constant_cpu_to_le16(
1379                                                 GS_CDC_PRODUCT_ID),
1380                 EP_NOTIFY_NAME = ep->name;
1381                 ep->driver_data = ep;   /* claim the endpoint */
1382         }
1383
1384         gs_device_desc.bDeviceClass = use_acm
1385                 ? USB_CLASS_COMM : USB_CLASS_VENDOR_SPEC;
1386         gs_device_desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
1387
1388         if (gadget_is_dualspeed(gadget)) {
1389                 gs_qualifier_desc.bDeviceClass = use_acm
1390                         ? USB_CLASS_COMM : USB_CLASS_VENDOR_SPEC;
1391                 /* assume ep0 uses the same packet size for both speeds */
1392                 gs_qualifier_desc.bMaxPacketSize0 =
1393                         gs_device_desc.bMaxPacketSize0;
1394                 /* assume endpoints are dual-speed */
1395                 gs_highspeed_notify_desc.bEndpointAddress =
1396                         gs_fullspeed_notify_desc.bEndpointAddress;
1397                 gs_highspeed_in_desc.bEndpointAddress =
1398                         gs_fullspeed_in_desc.bEndpointAddress;
1399                 gs_highspeed_out_desc.bEndpointAddress =
1400                         gs_fullspeed_out_desc.bEndpointAddress;
1401         }
1402
1403         usb_gadget_set_selfpowered(gadget);
1404
1405         if (gadget_is_otg(gadget)) {
1406                 gs_otg_descriptor.bmAttributes |= USB_OTG_HNP,
1407                 gs_bulk_config_desc.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
1408                 gs_acm_config_desc.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
1409         }
1410
1411         gs_device = dev = kzalloc(sizeof(struct gs_dev), GFP_KERNEL);
1412         if (dev == NULL)
1413                 return -ENOMEM;
1414
1415         snprintf(manufacturer, sizeof(manufacturer), "%s %s with %s",
1416                 init_utsname()->sysname, init_utsname()->release,
1417                 gadget->name);
1418
1419         dev->dev_gadget = gadget;
1420         spin_lock_init(&dev->dev_lock);
1421         INIT_LIST_HEAD(&dev->dev_req_list);
1422         set_gadget_data(gadget, dev);
1423
1424         if ((ret=gs_alloc_ports(dev, GFP_KERNEL)) != 0) {
1425                 pr_err("gs_bind: cannot allocate ports\n");
1426                 gs_unbind(gadget);
1427                 return ret;
1428         }
1429
1430         /* preallocate control response and buffer */
1431         dev->dev_ctrl_req = gs_alloc_req(gadget->ep0, GS_MAX_DESC_LEN,
1432                 GFP_KERNEL);
1433         if (dev->dev_ctrl_req == NULL) {
1434                 gs_unbind(gadget);
1435                 return -ENOMEM;
1436         }
1437         dev->dev_ctrl_req->complete = gs_setup_complete;
1438
1439         gadget->ep0->driver_data = dev;
1440
1441         pr_info("gs_bind: %s %s bound\n",
1442                 GS_LONG_NAME, GS_VERSION_STR);
1443
1444         return 0;
1445
1446 autoconf_fail:
1447         pr_err("gs_bind: cannot autoconfigure on %s\n", gadget->name);
1448         return -ENODEV;
1449 }
1450
1451 /*
1452  * gs_unbind
1453  *
1454  * Called on module unload.  Frees the control request and device
1455  * structure.
1456  */
1457 static void /* __init_or_exit */ gs_unbind(struct usb_gadget *gadget)
1458 {
1459         struct gs_dev *dev = get_gadget_data(gadget);
1460
1461         gs_device = NULL;
1462
1463         /* read/write requests already freed, only control request remains */
1464         if (dev != NULL) {
1465                 if (dev->dev_ctrl_req != NULL) {
1466                         gs_free_req(gadget->ep0, dev->dev_ctrl_req);
1467                         dev->dev_ctrl_req = NULL;
1468                 }
1469                 gs_free_ports(dev);
1470                 if (dev->dev_notify_ep)
1471                         usb_ep_disable(dev->dev_notify_ep);
1472                 if (dev->dev_in_ep)
1473                         usb_ep_disable(dev->dev_in_ep);
1474                 if (dev->dev_out_ep)
1475                         usb_ep_disable(dev->dev_out_ep);
1476                 kfree(dev);
1477                 set_gadget_data(gadget, NULL);
1478         }
1479
1480         pr_info("gs_unbind: %s %s unbound\n", GS_LONG_NAME,
1481                 GS_VERSION_STR);
1482 }
1483
1484 /*
1485  * gs_setup
1486  *
1487  * Implements all the control endpoint functionality that's not
1488  * handled in hardware or the hardware driver.
1489  *
1490  * Returns the size of the data sent to the host, or a negative
1491  * error number.
1492  */
1493 static int gs_setup(struct usb_gadget *gadget,
1494         const struct usb_ctrlrequest *ctrl)
1495 {
1496         int ret = -EOPNOTSUPP;
1497         struct gs_dev *dev = get_gadget_data(gadget);
1498         struct usb_request *req = dev->dev_ctrl_req;
1499         u16 wIndex = le16_to_cpu(ctrl->wIndex);
1500         u16 wValue = le16_to_cpu(ctrl->wValue);
1501         u16 wLength = le16_to_cpu(ctrl->wLength);
1502
1503         switch (ctrl->bRequestType & USB_TYPE_MASK) {
1504         case USB_TYPE_STANDARD:
1505                 ret = gs_setup_standard(gadget,ctrl);
1506                 break;
1507
1508         case USB_TYPE_CLASS:
1509                 ret = gs_setup_class(gadget,ctrl);
1510                 break;
1511
1512         default:
1513                 pr_err("gs_setup: unknown request, type=%02x, request=%02x, "
1514                         "value=%04x, index=%04x, length=%d\n",
1515                         ctrl->bRequestType, ctrl->bRequest,
1516                         wValue, wIndex, wLength);
1517                 break;
1518         }
1519
1520         /* respond with data transfer before status phase? */
1521         if (ret >= 0) {
1522                 req->length = ret;
1523                 req->zero = ret < wLength
1524                                 && (ret % gadget->ep0->maxpacket) == 0;
1525                 ret = usb_ep_queue(gadget->ep0, req, GFP_ATOMIC);
1526                 if (ret < 0) {
1527                         pr_err("gs_setup: cannot queue response, ret=%d\n",
1528                                 ret);
1529                         req->status = 0;
1530                         gs_setup_complete(gadget->ep0, req);
1531                 }
1532         }
1533
1534         /* device either stalls (ret < 0) or reports success */
1535         return ret;
1536 }
1537
1538 static int gs_setup_standard(struct usb_gadget *gadget,
1539         const struct usb_ctrlrequest *ctrl)
1540 {
1541         int ret = -EOPNOTSUPP;
1542         struct gs_dev *dev = get_gadget_data(gadget);
1543         struct usb_request *req = dev->dev_ctrl_req;
1544         u16 wIndex = le16_to_cpu(ctrl->wIndex);
1545         u16 wValue = le16_to_cpu(ctrl->wValue);
1546         u16 wLength = le16_to_cpu(ctrl->wLength);
1547
1548         switch (ctrl->bRequest) {
1549         case USB_REQ_GET_DESCRIPTOR:
1550                 if (ctrl->bRequestType != USB_DIR_IN)
1551                         break;
1552
1553                 switch (wValue >> 8) {
1554                 case USB_DT_DEVICE:
1555                         ret = min(wLength,
1556                                 (u16)sizeof(struct usb_device_descriptor));
1557                         memcpy(req->buf, &gs_device_desc, ret);
1558                         break;
1559
1560                 case USB_DT_DEVICE_QUALIFIER:
1561                         if (!gadget_is_dualspeed(gadget))
1562                                 break;
1563                         ret = min(wLength,
1564                                 (u16)sizeof(struct usb_qualifier_descriptor));
1565                         memcpy(req->buf, &gs_qualifier_desc, ret);
1566                         break;
1567
1568                 case USB_DT_OTHER_SPEED_CONFIG:
1569                         if (!gadget_is_dualspeed(gadget))
1570                                 break;
1571                         /* fall through */
1572                 case USB_DT_CONFIG:
1573                         ret = gs_build_config_buf(req->buf, gadget,
1574                                 wValue >> 8, wValue & 0xff,
1575                                 gadget_is_otg(gadget));
1576                         if (ret >= 0)
1577                                 ret = min(wLength, (u16)ret);
1578                         break;
1579
1580                 case USB_DT_STRING:
1581                         /* wIndex == language code. */
1582                         ret = usb_gadget_get_string(&gs_string_table,
1583                                 wValue & 0xff, req->buf);
1584                         if (ret >= 0)
1585                                 ret = min(wLength, (u16)ret);
1586                         break;
1587                 }
1588                 break;
1589
1590         case USB_REQ_SET_CONFIGURATION:
1591                 if (ctrl->bRequestType != 0)
1592                         break;
1593                 spin_lock(&dev->dev_lock);
1594                 ret = gs_set_config(dev, wValue);
1595                 spin_unlock(&dev->dev_lock);
1596                 break;
1597
1598         case USB_REQ_GET_CONFIGURATION:
1599                 if (ctrl->bRequestType != USB_DIR_IN)
1600                         break;
1601                 *(u8 *)req->buf = dev->dev_config;
1602                 ret = min(wLength, (u16)1);
1603                 break;
1604
1605         case USB_REQ_SET_INTERFACE:
1606                 if (ctrl->bRequestType != USB_RECIP_INTERFACE
1607                                 || !dev->dev_config
1608                                 || wIndex >= GS_MAX_NUM_INTERFACES)
1609                         break;
1610                 if (dev->dev_config == GS_BULK_CONFIG_ID
1611                                 && wIndex != GS_BULK_INTERFACE_ID)
1612                         break;
1613                 /* no alternate interface settings */
1614                 if (wValue != 0)
1615                         break;
1616                 spin_lock(&dev->dev_lock);
1617                 /* PXA hardware partially handles SET_INTERFACE;
1618                  * we need to kluge around that interference.  */
1619                 if (gadget_is_pxa(gadget)) {
1620                         ret = gs_set_config(dev, use_acm ?
1621                                 GS_ACM_CONFIG_ID : GS_BULK_CONFIG_ID);
1622                         goto set_interface_done;
1623                 }
1624                 if (dev->dev_config != GS_BULK_CONFIG_ID
1625                                 && wIndex == GS_CONTROL_INTERFACE_ID) {
1626                         if (dev->dev_notify_ep) {
1627                                 usb_ep_disable(dev->dev_notify_ep);
1628                                 usb_ep_enable(dev->dev_notify_ep, dev->dev_notify_ep_desc);
1629                         }
1630                 } else {
1631                         usb_ep_disable(dev->dev_in_ep);
1632                         usb_ep_disable(dev->dev_out_ep);
1633                         usb_ep_enable(dev->dev_in_ep, dev->dev_in_ep_desc);
1634                         usb_ep_enable(dev->dev_out_ep, dev->dev_out_ep_desc);
1635                 }
1636                 ret = 0;
1637 set_interface_done:
1638                 spin_unlock(&dev->dev_lock);
1639                 break;
1640
1641         case USB_REQ_GET_INTERFACE:
1642                 if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE)
1643                 || dev->dev_config == GS_NO_CONFIG_ID)
1644                         break;
1645                 if (wIndex >= GS_MAX_NUM_INTERFACES
1646                                 || (dev->dev_config == GS_BULK_CONFIG_ID
1647                                 && wIndex != GS_BULK_INTERFACE_ID)) {
1648                         ret = -EDOM;
1649                         break;
1650                 }
1651                 /* no alternate interface settings */
1652                 *(u8 *)req->buf = 0;
1653                 ret = min(wLength, (u16)1);
1654                 break;
1655
1656         default:
1657                 pr_err("gs_setup: unknown standard request, type=%02x, "
1658                         "request=%02x, value=%04x, index=%04x, length=%d\n",
1659                         ctrl->bRequestType, ctrl->bRequest,
1660                         wValue, wIndex, wLength);
1661                 break;
1662         }
1663
1664         return ret;
1665 }
1666
1667 static int gs_setup_class(struct usb_gadget *gadget,
1668         const struct usb_ctrlrequest *ctrl)
1669 {
1670         int ret = -EOPNOTSUPP;
1671         struct gs_dev *dev = get_gadget_data(gadget);
1672         struct gs_port *port = dev->dev_port[0];        /* ACM only has one port */
1673         struct usb_request *req = dev->dev_ctrl_req;
1674         u16 wIndex = le16_to_cpu(ctrl->wIndex);
1675         u16 wValue = le16_to_cpu(ctrl->wValue);
1676         u16 wLength = le16_to_cpu(ctrl->wLength);
1677
1678         switch (ctrl->bRequest) {
1679         case USB_CDC_REQ_SET_LINE_CODING:
1680                 /* FIXME Submit req to read the data; have its completion
1681                  * handler copy that data to port->port_line_coding (iff
1682                  * it's valid) and maybe pass it on.  Until then, fail.
1683                  */
1684                 pr_warning("gs_setup: set_line_coding "
1685                                 "unuspported\n");
1686                 break;
1687
1688         case USB_CDC_REQ_GET_LINE_CODING:
1689                 port = dev->dev_port[0];        /* ACM only has one port */
1690                 ret = min(wLength,
1691                         (u16)sizeof(struct usb_cdc_line_coding));
1692                 if (port) {
1693                         spin_lock(&port->port_lock);
1694                         memcpy(req->buf, &port->port_line_coding, ret);
1695                         spin_unlock(&port->port_lock);
1696                 }
1697                 break;
1698
1699         case USB_CDC_REQ_SET_CONTROL_LINE_STATE:
1700                 /* FIXME Submit req to read the data; have its completion
1701                  * handler use that to set the state (iff it's valid) and
1702                  * maybe pass it on.  Until then, fail.
1703                  */
1704                 pr_warning("gs_setup: set_control_line_state "
1705                                 "unuspported\n");
1706                 break;
1707
1708         default:
1709                 pr_err("gs_setup: unknown class request, "
1710                                 "type=%02x, request=%02x, value=%04x, "
1711                                 "index=%04x, length=%d\n",
1712                         ctrl->bRequestType, ctrl->bRequest,
1713                         wValue, wIndex, wLength);
1714                 break;
1715         }
1716
1717         return ret;
1718 }
1719
1720 /*
1721  * gs_setup_complete
1722  */
1723 static void gs_setup_complete(struct usb_ep *ep, struct usb_request *req)
1724 {
1725         if (req->status || req->actual != req->length) {
1726                 pr_err("gs_setup_complete: status error, status=%d, "
1727                         "actual=%d, length=%d\n",
1728                         req->status, req->actual, req->length);
1729         }
1730 }
1731
1732 /*
1733  * gs_disconnect
1734  *
1735  * Called when the device is disconnected.  Frees the closed
1736  * ports and disconnects open ports.  Open ports will be freed
1737  * on close.  Then reallocates the ports for the next connection.
1738  */
1739 static void gs_disconnect(struct usb_gadget *gadget)
1740 {
1741         unsigned long flags;
1742         struct gs_dev *dev = get_gadget_data(gadget);
1743
1744         spin_lock_irqsave(&dev->dev_lock, flags);
1745
1746         gs_reset_config(dev);
1747
1748         /* free closed ports and disconnect open ports */
1749         /* (open ports will be freed when closed) */
1750         gs_free_ports(dev);
1751
1752         /* re-allocate ports for the next connection */
1753         if (gs_alloc_ports(dev, GFP_ATOMIC) != 0)
1754                 pr_err("gs_disconnect: cannot re-allocate ports\n");
1755
1756         spin_unlock_irqrestore(&dev->dev_lock, flags);
1757
1758         pr_info("gs_disconnect: %s disconnected\n", GS_LONG_NAME);
1759 }
1760
1761 /*
1762  * gs_set_config
1763  *
1764  * Configures the device by enabling device specific
1765  * optimizations, setting up the endpoints, allocating
1766  * read and write requests and queuing read requests.
1767  *
1768  * The device lock must be held when calling this function.
1769  */
1770 static int gs_set_config(struct gs_dev *dev, unsigned config)
1771 {
1772         int i;
1773         int ret = 0;
1774         struct usb_gadget *gadget = dev->dev_gadget;
1775         struct usb_ep *ep;
1776         struct usb_endpoint_descriptor *ep_desc;
1777         struct usb_request *req;
1778         struct gs_req_entry *req_entry;
1779
1780         if (dev == NULL) {
1781                 pr_err("gs_set_config: NULL device pointer\n");
1782                 return 0;
1783         }
1784
1785         if (config == dev->dev_config)
1786                 return 0;
1787
1788         gs_reset_config(dev);
1789
1790         switch (config) {
1791         case GS_NO_CONFIG_ID:
1792                 return 0;
1793         case GS_BULK_CONFIG_ID:
1794                 if (use_acm)
1795                         return -EINVAL;
1796                 /* device specific optimizations */
1797                 if (gadget_is_net2280(gadget))
1798                         net2280_set_fifo_mode(gadget, 1);
1799                 break;
1800         case GS_ACM_CONFIG_ID:
1801                 if (!use_acm)
1802                         return -EINVAL;
1803                 /* device specific optimizations */
1804                 if (gadget_is_net2280(gadget))
1805                         net2280_set_fifo_mode(gadget, 1);
1806                 break;
1807         default:
1808                 return -EINVAL;
1809         }
1810
1811         dev->dev_config = config;
1812
1813         gadget_for_each_ep(ep, gadget) {
1814
1815                 if (EP_NOTIFY_NAME
1816                 && strcmp(ep->name, EP_NOTIFY_NAME) == 0) {
1817                         ep_desc = choose_ep_desc(gadget,
1818                                 &gs_highspeed_notify_desc,
1819                                 &gs_fullspeed_notify_desc);
1820                         ret = usb_ep_enable(ep,ep_desc);
1821                         if (ret == 0) {
1822                                 ep->driver_data = dev;
1823                                 dev->dev_notify_ep = ep;
1824                                 dev->dev_notify_ep_desc = ep_desc;
1825                         } else {
1826                                 pr_err("gs_set_config: cannot enable NOTIFY "
1827                                         "endpoint %s, ret=%d\n",
1828                                         ep->name, ret);
1829                                 goto exit_reset_config;
1830                         }
1831                 }
1832
1833                 else if (strcmp(ep->name, EP_IN_NAME) == 0) {
1834                         ep_desc = choose_ep_desc(gadget,
1835                                 &gs_highspeed_in_desc,
1836                                 &gs_fullspeed_in_desc);
1837                         ret = usb_ep_enable(ep,ep_desc);
1838                         if (ret == 0) {
1839                                 ep->driver_data = dev;
1840                                 dev->dev_in_ep = ep;
1841                                 dev->dev_in_ep_desc = ep_desc;
1842                         } else {
1843                                 pr_err("gs_set_config: cannot enable IN "
1844                                         "endpoint %s, ret=%d\n",
1845                                         ep->name, ret);
1846                                 goto exit_reset_config;
1847                         }
1848                 }
1849
1850                 else if (strcmp(ep->name, EP_OUT_NAME) == 0) {
1851                         ep_desc = choose_ep_desc(gadget,
1852                                 &gs_highspeed_out_desc,
1853                                 &gs_fullspeed_out_desc);
1854                         ret = usb_ep_enable(ep,ep_desc);
1855                         if (ret == 0) {
1856                                 ep->driver_data = dev;
1857                                 dev->dev_out_ep = ep;
1858                                 dev->dev_out_ep_desc = ep_desc;
1859                         } else {
1860                                 pr_err("gs_set_config: cannot enable OUT "
1861                                         "endpoint %s, ret=%d\n",
1862                                         ep->name, ret);
1863                                 goto exit_reset_config;
1864                         }
1865                 }
1866
1867         }
1868
1869         if (dev->dev_in_ep == NULL || dev->dev_out_ep == NULL
1870         || (config != GS_BULK_CONFIG_ID && dev->dev_notify_ep == NULL)) {
1871                 pr_err("gs_set_config: cannot find endpoints\n");
1872                 ret = -ENODEV;
1873                 goto exit_reset_config;
1874         }
1875
1876         /* allocate and queue read requests */
1877         ep = dev->dev_out_ep;
1878         for (i=0; i<read_q_size && ret == 0; i++) {
1879                 if ((req=gs_alloc_req(ep, ep->maxpacket, GFP_ATOMIC))) {
1880                         req->complete = gs_read_complete;
1881                         if ((ret=usb_ep_queue(ep, req, GFP_ATOMIC))) {
1882                                 pr_err("gs_set_config: cannot queue read "
1883                                         "request, ret=%d\n", ret);
1884                         }
1885                 } else {
1886                         pr_err("gs_set_config: cannot allocate "
1887                                         "read requests\n");
1888                         ret = -ENOMEM;
1889                         goto exit_reset_config;
1890                 }
1891         }
1892
1893         /* allocate write requests, and put on free list */
1894         ep = dev->dev_in_ep;
1895         for (i=0; i<write_q_size; i++) {
1896                 if ((req_entry=gs_alloc_req_entry(ep, ep->maxpacket, GFP_ATOMIC))) {
1897                         req_entry->re_req->complete = gs_write_complete;
1898                         list_add(&req_entry->re_entry, &dev->dev_req_list);
1899                 } else {
1900                         pr_err("gs_set_config: cannot allocate "
1901                                         "write requests\n");
1902                         ret = -ENOMEM;
1903                         goto exit_reset_config;
1904                 }
1905         }
1906
1907         pr_info("gs_set_config: %s configured, %s speed %s config\n",
1908                 GS_LONG_NAME,
1909                 gadget->speed == USB_SPEED_HIGH ? "high" : "full",
1910                 config == GS_BULK_CONFIG_ID ? "BULK" : "CDC-ACM");
1911
1912         return 0;
1913
1914 exit_reset_config:
1915         gs_reset_config(dev);
1916         return ret;
1917 }
1918
1919 /*
1920  * gs_reset_config
1921  *
1922  * Mark the device as not configured, disable all endpoints,
1923  * which forces completion of pending I/O and frees queued
1924  * requests, and free the remaining write requests on the
1925  * free list.
1926  *
1927  * The device lock must be held when calling this function.
1928  */
1929 static void gs_reset_config(struct gs_dev *dev)
1930 {
1931         struct gs_req_entry *req_entry;
1932
1933         if (dev == NULL) {
1934                 pr_err("gs_reset_config: NULL device pointer\n");
1935                 return;
1936         }
1937
1938         if (dev->dev_config == GS_NO_CONFIG_ID)
1939                 return;
1940
1941         dev->dev_config = GS_NO_CONFIG_ID;
1942
1943         /* free write requests on the free list */
1944         while(!list_empty(&dev->dev_req_list)) {
1945                 req_entry = list_entry(dev->dev_req_list.next,
1946                         struct gs_req_entry, re_entry);
1947                 list_del(&req_entry->re_entry);
1948                 gs_free_req_entry(dev->dev_in_ep, req_entry);
1949         }
1950
1951         /* disable endpoints, forcing completion of pending i/o; */
1952         /* completion handlers free their requests in this case */
1953         if (dev->dev_notify_ep) {
1954                 usb_ep_disable(dev->dev_notify_ep);
1955                 dev->dev_notify_ep = NULL;
1956         }
1957         if (dev->dev_in_ep) {
1958                 usb_ep_disable(dev->dev_in_ep);
1959                 dev->dev_in_ep = NULL;
1960         }
1961         if (dev->dev_out_ep) {
1962                 usb_ep_disable(dev->dev_out_ep);
1963                 dev->dev_out_ep = NULL;
1964         }
1965 }
1966
1967 /*
1968  * gs_build_config_buf
1969  *
1970  * Builds the config descriptors in the given buffer and returns the
1971  * length, or a negative error number.
1972  */
1973 static int gs_build_config_buf(u8 *buf, struct usb_gadget *g,
1974         u8 type, unsigned int index, int is_otg)
1975 {
1976         int len;
1977         int high_speed = 0;
1978         const struct usb_config_descriptor *config_desc;
1979         const struct usb_descriptor_header **function;
1980
1981         if (index >= gs_device_desc.bNumConfigurations)
1982                 return -EINVAL;
1983
1984         /* other speed switches high and full speed */
1985         if (gadget_is_dualspeed(g)) {
1986                 high_speed = (g->speed == USB_SPEED_HIGH);
1987                 if (type == USB_DT_OTHER_SPEED_CONFIG)
1988                         high_speed = !high_speed;
1989         }
1990
1991         if (use_acm) {
1992                 config_desc = &gs_acm_config_desc;
1993                 function = high_speed
1994                         ? gs_acm_highspeed_function
1995                         : gs_acm_fullspeed_function;
1996         } else {
1997                 config_desc = &gs_bulk_config_desc;
1998                 function = high_speed
1999                         ? gs_bulk_highspeed_function
2000                         : gs_bulk_fullspeed_function;
2001         }
2002
2003         /* for now, don't advertise srp-only devices */
2004         if (!is_otg)
2005                 function++;
2006
2007         len = usb_gadget_config_buf(config_desc, buf, GS_MAX_DESC_LEN, function);
2008         if (len < 0)
2009                 return len;
2010
2011         ((struct usb_config_descriptor *)buf)->bDescriptorType = type;
2012
2013         return len;
2014 }
2015
2016 /*
2017  * gs_alloc_req
2018  *
2019  * Allocate a usb_request and its buffer.  Returns a pointer to the
2020  * usb_request or NULL if there is an error.
2021  */
2022 static struct usb_request *
2023 gs_alloc_req(struct usb_ep *ep, unsigned int len, gfp_t kmalloc_flags)
2024 {
2025         struct usb_request *req;
2026
2027         if (ep == NULL)
2028                 return NULL;
2029
2030         req = usb_ep_alloc_request(ep, kmalloc_flags);
2031
2032         if (req != NULL) {
2033                 req->length = len;
2034                 req->buf = kmalloc(len, kmalloc_flags);
2035                 if (req->buf == NULL) {
2036                         usb_ep_free_request(ep, req);
2037                         return NULL;
2038                 }
2039         }
2040
2041         return req;
2042 }
2043
2044 /*
2045  * gs_free_req
2046  *
2047  * Free a usb_request and its buffer.
2048  */
2049 static void gs_free_req(struct usb_ep *ep, struct usb_request *req)
2050 {
2051         if (ep != NULL && req != NULL) {
2052                 kfree(req->buf);
2053                 usb_ep_free_request(ep, req);
2054         }
2055 }
2056
2057 /*
2058  * gs_alloc_req_entry
2059  *
2060  * Allocates a request and its buffer, using the given
2061  * endpoint, buffer len, and kmalloc flags.
2062  */
2063 static struct gs_req_entry *
2064 gs_alloc_req_entry(struct usb_ep *ep, unsigned len, gfp_t kmalloc_flags)
2065 {
2066         struct gs_req_entry     *req;
2067
2068         req = kmalloc(sizeof(struct gs_req_entry), kmalloc_flags);
2069         if (req == NULL)
2070                 return NULL;
2071
2072         req->re_req = gs_alloc_req(ep, len, kmalloc_flags);
2073         if (req->re_req == NULL) {
2074                 kfree(req);
2075                 return NULL;
2076         }
2077
2078         req->re_req->context = req;
2079
2080         return req;
2081 }
2082
2083 /*
2084  * gs_free_req_entry
2085  *
2086  * Frees a request and its buffer.
2087  */
2088 static void gs_free_req_entry(struct usb_ep *ep, struct gs_req_entry *req)
2089 {
2090         if (ep != NULL && req != NULL) {
2091                 if (req->re_req != NULL)
2092                         gs_free_req(ep, req->re_req);
2093                 kfree(req);
2094         }
2095 }
2096
2097 /*
2098  * gs_alloc_ports
2099  *
2100  * Allocate all ports and set the gs_dev struct to point to them.
2101  * Return 0 if successful, or a negative error number.
2102  *
2103  * The device lock is normally held when calling this function.
2104  */
2105 static int gs_alloc_ports(struct gs_dev *dev, gfp_t kmalloc_flags)
2106 {
2107         int i;
2108         struct gs_port *port;
2109
2110         if (dev == NULL)
2111                 return -EIO;
2112
2113         for (i=0; i<GS_NUM_PORTS; i++) {
2114                 if ((port=kzalloc(sizeof(struct gs_port), kmalloc_flags)) == NULL)
2115                         return -ENOMEM;
2116
2117                 port->port_dev = dev;
2118                 port->port_num = i;
2119                 port->port_line_coding.dwDTERate = cpu_to_le32(GS_DEFAULT_DTE_RATE);
2120                 port->port_line_coding.bCharFormat = GS_DEFAULT_CHAR_FORMAT;
2121                 port->port_line_coding.bParityType = GS_DEFAULT_PARITY;
2122                 port->port_line_coding.bDataBits = GS_DEFAULT_DATA_BITS;
2123                 spin_lock_init(&port->port_lock);
2124                 init_waitqueue_head(&port->port_write_wait);
2125
2126                 dev->dev_port[i] = port;
2127         }
2128
2129         return 0;
2130 }
2131
2132 /*
2133  * gs_free_ports
2134  *
2135  * Free all closed ports.  Open ports are disconnected by
2136  * freeing their write buffers, setting their device pointers
2137  * and the pointers to them in the device to NULL.  These
2138  * ports will be freed when closed.
2139  *
2140  * The device lock is normally held when calling this function.
2141  */
2142 static void gs_free_ports(struct gs_dev *dev)
2143 {
2144         int i;
2145         unsigned long flags;
2146         struct gs_port *port;
2147
2148         if (dev == NULL)
2149                 return;
2150
2151         for (i=0; i<GS_NUM_PORTS; i++) {
2152                 if ((port=dev->dev_port[i]) != NULL) {
2153                         dev->dev_port[i] = NULL;
2154
2155                         spin_lock_irqsave(&port->port_lock, flags);
2156
2157                         if (port->port_write_buf != NULL) {
2158                                 gs_buf_free(port->port_write_buf);
2159                                 port->port_write_buf = NULL;
2160                         }
2161
2162                         if (port->port_open_count > 0 || port->port_in_use) {
2163                                 port->port_dev = NULL;
2164                                 wake_up_interruptible(&port->port_write_wait);
2165                                 if (port->port_tty) {
2166                                         wake_up_interruptible(&port->port_tty->read_wait);
2167                                         wake_up_interruptible(&port->port_tty->write_wait);
2168                                 }
2169                                 spin_unlock_irqrestore(&port->port_lock, flags);
2170                         } else {
2171                                 spin_unlock_irqrestore(&port->port_lock, flags);
2172                                 kfree(port);
2173                         }
2174
2175                 }
2176         }
2177 }
2178
2179 /* Circular Buffer */
2180
2181 /*
2182  * gs_buf_alloc
2183  *
2184  * Allocate a circular buffer and all associated memory.
2185  */
2186 static struct gs_buf *gs_buf_alloc(unsigned int size, gfp_t kmalloc_flags)
2187 {
2188         struct gs_buf *gb;
2189
2190         if (size == 0)
2191                 return NULL;
2192
2193         gb = kmalloc(sizeof(struct gs_buf), kmalloc_flags);
2194         if (gb == NULL)
2195                 return NULL;
2196
2197         gb->buf_buf = kmalloc(size, kmalloc_flags);
2198         if (gb->buf_buf == NULL) {
2199                 kfree(gb);
2200                 return NULL;
2201         }
2202
2203         gb->buf_size = size;
2204         gb->buf_get = gb->buf_put = gb->buf_buf;
2205
2206         return gb;
2207 }
2208
2209 /*
2210  * gs_buf_free
2211  *
2212  * Free the buffer and all associated memory.
2213  */
2214 static void gs_buf_free(struct gs_buf *gb)
2215 {
2216         if (gb) {
2217                 kfree(gb->buf_buf);
2218                 kfree(gb);
2219         }
2220 }
2221
2222 /*
2223  * gs_buf_clear
2224  *
2225  * Clear out all data in the circular buffer.
2226  */
2227 static void gs_buf_clear(struct gs_buf *gb)
2228 {
2229         if (gb != NULL)
2230                 gb->buf_get = gb->buf_put;
2231                 /* equivalent to a get of all data available */
2232 }
2233
2234 /*
2235  * gs_buf_data_avail
2236  *
2237  * Return the number of bytes of data available in the circular
2238  * buffer.
2239  */
2240 static unsigned int gs_buf_data_avail(struct gs_buf *gb)
2241 {
2242         if (gb != NULL)
2243                 return (gb->buf_size + gb->buf_put - gb->buf_get) % gb->buf_size;
2244         else
2245                 return 0;
2246 }
2247
2248 /*
2249  * gs_buf_space_avail
2250  *
2251  * Return the number of bytes of space available in the circular
2252  * buffer.
2253  */
2254 static unsigned int gs_buf_space_avail(struct gs_buf *gb)
2255 {
2256         if (gb != NULL)
2257                 return (gb->buf_size + gb->buf_get - gb->buf_put - 1) % gb->buf_size;
2258         else
2259                 return 0;
2260 }
2261
2262 /*
2263  * gs_buf_put
2264  *
2265  * Copy data data from a user buffer and put it into the circular buffer.
2266  * Restrict to the amount of space available.
2267  *
2268  * Return the number of bytes copied.
2269  */
2270 static unsigned int
2271 gs_buf_put(struct gs_buf *gb, const char *buf, unsigned int count)
2272 {
2273         unsigned int len;
2274
2275         if (gb == NULL)
2276                 return 0;
2277
2278         len  = gs_buf_space_avail(gb);
2279         if (count > len)
2280                 count = len;
2281
2282         if (count == 0)
2283                 return 0;
2284
2285         len = gb->buf_buf + gb->buf_size - gb->buf_put;
2286         if (count > len) {
2287                 memcpy(gb->buf_put, buf, len);
2288                 memcpy(gb->buf_buf, buf+len, count - len);
2289                 gb->buf_put = gb->buf_buf + count - len;
2290         } else {
2291                 memcpy(gb->buf_put, buf, count);
2292                 if (count < len)
2293                         gb->buf_put += count;
2294                 else /* count == len */
2295                         gb->buf_put = gb->buf_buf;
2296         }
2297
2298         return count;
2299 }
2300
2301 /*
2302  * gs_buf_get
2303  *
2304  * Get data from the circular buffer and copy to the given buffer.
2305  * Restrict to the amount of data available.
2306  *
2307  * Return the number of bytes copied.
2308  */
2309 static unsigned int
2310 gs_buf_get(struct gs_buf *gb, char *buf, unsigned int count)
2311 {
2312         unsigned int len;
2313
2314         if (gb == NULL)
2315                 return 0;
2316
2317         len = gs_buf_data_avail(gb);
2318         if (count > len)
2319                 count = len;
2320
2321         if (count == 0)
2322                 return 0;
2323
2324         len = gb->buf_buf + gb->buf_size - gb->buf_get;
2325         if (count > len) {
2326                 memcpy(buf, gb->buf_get, len);
2327                 memcpy(buf+len, gb->buf_buf, count - len);
2328                 gb->buf_get = gb->buf_buf + count - len;
2329         } else {
2330                 memcpy(buf, gb->buf_get, count);
2331                 if (count < len)
2332                         gb->buf_get += count;
2333                 else /* count == len */
2334                         gb->buf_get = gb->buf_buf;
2335         }
2336
2337         return count;
2338 }