Merge remote-tracking branches 'asoc/fix/rcar', 'asoc/fix/rt5670' and 'asoc/fix/wm894...
[cascardo/linux.git] / drivers / usb / usbip / vudc_dev.c
1 /*
2  * Copyright (C) 2015 Karol Kosik <karo9@interia.eu>
3  * Copyright (C) 2015-2016 Samsung Electronics
4  *               Igor Kotrasinski <i.kotrasinsk@samsung.com>
5  *               Krzysztof Opasiak <k.opasiak@samsung.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <linux/device.h>
22 #include <linux/kernel.h>
23 #include <linux/list.h>
24 #include <linux/platform_device.h>
25 #include <linux/usb.h>
26 #include <linux/usb/gadget.h>
27 #include <linux/usb/hcd.h>
28 #include <linux/kthread.h>
29 #include <linux/file.h>
30 #include <linux/byteorder/generic.h>
31
32 #include "usbip_common.h"
33 #include "vudc.h"
34
35 #define VIRTUAL_ENDPOINTS (1 /* ep0 */ + 15 /* in eps */ + 15 /* out eps */)
36
37 /* urb-related structures alloc / free */
38
39
40 static void free_urb(struct urb *urb)
41 {
42         if (!urb)
43                 return;
44
45         kfree(urb->setup_packet);
46         urb->setup_packet = NULL;
47
48         kfree(urb->transfer_buffer);
49         urb->transfer_buffer = NULL;
50
51         usb_free_urb(urb);
52 }
53
54 struct urbp *alloc_urbp(void)
55 {
56         struct urbp *urb_p;
57
58         urb_p = kzalloc(sizeof(*urb_p), GFP_KERNEL);
59         if (!urb_p)
60                 return urb_p;
61
62         urb_p->urb = NULL;
63         urb_p->ep = NULL;
64         INIT_LIST_HEAD(&urb_p->urb_entry);
65         return urb_p;
66 }
67
68 static void free_urbp(struct urbp *urb_p)
69 {
70         kfree(urb_p);
71 }
72
73 void free_urbp_and_urb(struct urbp *urb_p)
74 {
75         if (!urb_p)
76                 return;
77         free_urb(urb_p->urb);
78         free_urbp(urb_p);
79 }
80
81
82 /* utilities ; almost verbatim from dummy_hcd.c */
83
84 /* called with spinlock held */
85 static void nuke(struct vudc *udc, struct vep *ep)
86 {
87         struct vrequest *req;
88
89         while (!list_empty(&ep->req_queue)) {
90                 req = list_first_entry(&ep->req_queue, struct vrequest,
91                                        req_entry);
92                 list_del_init(&req->req_entry);
93                 req->req.status = -ESHUTDOWN;
94
95                 spin_unlock(&udc->lock);
96                 usb_gadget_giveback_request(&ep->ep, &req->req);
97                 spin_lock(&udc->lock);
98         }
99 }
100
101 /* caller must hold lock */
102 static void stop_activity(struct vudc *udc)
103 {
104         int i;
105         struct urbp *urb_p, *tmp;
106
107         udc->address = 0;
108
109         for (i = 0; i < VIRTUAL_ENDPOINTS; i++)
110                 nuke(udc, &udc->ep[i]);
111
112         list_for_each_entry_safe(urb_p, tmp, &udc->urb_queue, urb_entry) {
113                 list_del(&urb_p->urb_entry);
114                 free_urbp_and_urb(urb_p);
115         }
116 }
117
118 struct vep *vudc_find_endpoint(struct vudc *udc, u8 address)
119 {
120         int i;
121
122         if ((address & ~USB_DIR_IN) == 0)
123                 return &udc->ep[0];
124
125         for (i = 1; i < VIRTUAL_ENDPOINTS; i++) {
126                 struct vep *ep = &udc->ep[i];
127
128                 if (!ep->desc)
129                         continue;
130                 if (ep->desc->bEndpointAddress == address)
131                         return ep;
132         }
133         return NULL;
134 }
135
136 /* gadget ops */
137
138 /* FIXME - this will probably misbehave when suspend/resume is added */
139 static int vgadget_get_frame(struct usb_gadget *_gadget)
140 {
141         struct timeval now;
142         struct vudc *udc = usb_gadget_to_vudc(_gadget);
143
144         do_gettimeofday(&now);
145         return ((now.tv_sec - udc->start_time.tv_sec) * 1000 +
146                         (now.tv_usec - udc->start_time.tv_usec) / 1000)
147                         % 0x7FF;
148 }
149
150 static int vgadget_set_selfpowered(struct usb_gadget *_gadget, int value)
151 {
152         struct vudc *udc = usb_gadget_to_vudc(_gadget);
153
154         if (value)
155                 udc->devstatus |= (1 << USB_DEVICE_SELF_POWERED);
156         else
157                 udc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED);
158         return 0;
159 }
160
161 static int vgadget_pullup(struct usb_gadget *_gadget, int value)
162 {
163         struct vudc *udc = usb_gadget_to_vudc(_gadget);
164         unsigned long flags;
165         int ret;
166
167
168         spin_lock_irqsave(&udc->lock, flags);
169         value = !!value;
170         if (value == udc->pullup)
171                 goto unlock;
172
173         udc->pullup = value;
174         if (value) {
175                 udc->gadget.speed = min_t(u8, USB_SPEED_HIGH,
176                                            udc->driver->max_speed);
177                 udc->ep[0].ep.maxpacket = 64;
178                 /*
179                  * This is the first place where we can ask our
180                  * gadget driver for descriptors.
181                  */
182                 ret = get_gadget_descs(udc);
183                 if (ret) {
184                         dev_err(&udc->gadget.dev, "Unable go get desc: %d", ret);
185                         goto unlock;
186                 }
187
188                 spin_unlock_irqrestore(&udc->lock, flags);
189                 usbip_start_eh(&udc->ud);
190         } else {
191                 /* Invalidate descriptors */
192                 udc->desc_cached = 0;
193
194                 spin_unlock_irqrestore(&udc->lock, flags);
195                 usbip_event_add(&udc->ud, VUDC_EVENT_REMOVED);
196                 usbip_stop_eh(&udc->ud); /* Wait for eh completion */
197         }
198
199         return 0;
200
201 unlock:
202         spin_unlock_irqrestore(&udc->lock, flags);
203         return 0;
204 }
205
206 static int vgadget_udc_start(struct usb_gadget *g,
207                 struct usb_gadget_driver *driver)
208 {
209         struct vudc *udc = usb_gadget_to_vudc(g);
210         unsigned long flags;
211
212         spin_lock_irqsave(&udc->lock, flags);
213         udc->driver = driver;
214         udc->pullup = udc->connected = udc->desc_cached = 0;
215         spin_unlock_irqrestore(&udc->lock, flags);
216
217         return 0;
218 }
219
220 static int vgadget_udc_stop(struct usb_gadget *g)
221 {
222         struct vudc *udc = usb_gadget_to_vudc(g);
223         unsigned long flags;
224
225         spin_lock_irqsave(&udc->lock, flags);
226         udc->driver = NULL;
227         spin_unlock_irqrestore(&udc->lock, flags);
228         return 0;
229 }
230
231 static const struct usb_gadget_ops vgadget_ops = {
232         .get_frame      = vgadget_get_frame,
233         .set_selfpowered = vgadget_set_selfpowered,
234         .pullup         = vgadget_pullup,
235         .udc_start      = vgadget_udc_start,
236         .udc_stop       = vgadget_udc_stop,
237 };
238
239
240 /* endpoint ops */
241
242 static int vep_enable(struct usb_ep *_ep,
243                 const struct usb_endpoint_descriptor *desc)
244 {
245         struct vep *ep;
246         struct vudc *udc;
247         unsigned maxp;
248         unsigned long flags;
249
250         ep = to_vep(_ep);
251         udc = ep_to_vudc(ep);
252
253         if (!_ep || !desc || ep->desc || _ep->caps.type_control
254                         || desc->bDescriptorType != USB_DT_ENDPOINT)
255                 return -EINVAL;
256
257         if (!udc->driver)
258                 return -ESHUTDOWN;
259
260         spin_lock_irqsave(&udc->lock, flags);
261
262         maxp = usb_endpoint_maxp(desc) & 0x7ff;
263         _ep->maxpacket = maxp;
264         ep->desc = desc;
265         ep->type = usb_endpoint_type(desc);
266         ep->halted = ep->wedged = 0;
267
268         spin_unlock_irqrestore(&udc->lock, flags);
269
270         return 0;
271 }
272
273 static int vep_disable(struct usb_ep *_ep)
274 {
275         struct vep *ep;
276         struct vudc *udc;
277         unsigned long flags;
278
279         ep = to_vep(_ep);
280         udc = ep_to_vudc(ep);
281         if (!_ep || !ep->desc || _ep->caps.type_control)
282                 return -EINVAL;
283
284         spin_lock_irqsave(&udc->lock, flags);
285         ep->desc = NULL;
286         nuke(udc, ep);
287         spin_unlock_irqrestore(&udc->lock, flags);
288
289         return 0;
290 }
291
292 static struct usb_request *vep_alloc_request(struct usb_ep *_ep,
293                 gfp_t mem_flags)
294 {
295         struct vep *ep;
296         struct vrequest *req;
297
298         if (!_ep)
299                 return NULL;
300         ep = to_vep(_ep);
301
302         req = kzalloc(sizeof(*req), mem_flags);
303         if (!req)
304                 return NULL;
305
306         INIT_LIST_HEAD(&req->req_entry);
307
308         return &req->req;
309 }
310
311 static void vep_free_request(struct usb_ep *_ep, struct usb_request *_req)
312 {
313         struct vrequest *req;
314
315         if (WARN_ON(!_ep || !_req))
316                 return;
317
318         req = to_vrequest(_req);
319         kfree(req);
320 }
321
322 static int vep_queue(struct usb_ep *_ep, struct usb_request *_req,
323                 gfp_t mem_flags)
324 {
325         struct vep *ep;
326         struct vrequest *req;
327         struct vudc *udc;
328         unsigned long flags;
329
330         if (!_ep || !_req)
331                 return -EINVAL;
332
333         ep = to_vep(_ep);
334         req = to_vrequest(_req);
335         udc = ep_to_vudc(ep);
336
337         spin_lock_irqsave(&udc->lock, flags);
338         _req->actual = 0;
339         _req->status = -EINPROGRESS;
340
341         list_add_tail(&req->req_entry, &ep->req_queue);
342         spin_unlock_irqrestore(&udc->lock, flags);
343
344         return 0;
345 }
346
347 static int vep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
348 {
349         struct vep *ep;
350         struct vrequest *req;
351         struct vudc *udc;
352         struct vrequest *lst;
353         unsigned long flags;
354         int ret = -EINVAL;
355
356         if (!_ep || !_req)
357                 return ret;
358
359         ep = to_vep(_ep);
360         req = to_vrequest(_req);
361         udc = req->udc;
362
363         if (!udc->driver)
364                 return -ESHUTDOWN;
365
366         spin_lock_irqsave(&udc->lock, flags);
367         list_for_each_entry(lst, &ep->req_queue, req_entry) {
368                 if (&lst->req == _req) {
369                         list_del_init(&lst->req_entry);
370                         _req->status = -ECONNRESET;
371                         ret = 0;
372                         break;
373                 }
374         }
375         spin_unlock_irqrestore(&udc->lock, flags);
376
377         if (ret == 0)
378                 usb_gadget_giveback_request(_ep, _req);
379
380         return ret;
381 }
382
383 static int
384 vep_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedged)
385 {
386         struct vep *ep;
387         struct vudc *udc;
388         unsigned long flags;
389         int ret = 0;
390
391         ep = to_vep(_ep);
392         if (!_ep)
393                 return -EINVAL;
394
395         udc = ep_to_vudc(ep);
396         if (!udc->driver)
397                 return -ESHUTDOWN;
398
399         spin_lock_irqsave(&udc->lock, flags);
400         if (!value)
401                 ep->halted = ep->wedged = 0;
402         else if (ep->desc && (ep->desc->bEndpointAddress & USB_DIR_IN) &&
403                         !list_empty(&ep->req_queue))
404                 ret = -EAGAIN;
405         else {
406                 ep->halted = 1;
407                 if (wedged)
408                         ep->wedged = 1;
409         }
410
411         spin_unlock_irqrestore(&udc->lock, flags);
412         return ret;
413 }
414
415 static int
416 vep_set_halt(struct usb_ep *_ep, int value)
417 {
418         return vep_set_halt_and_wedge(_ep, value, 0);
419 }
420
421 static int vep_set_wedge(struct usb_ep *_ep)
422 {
423         return vep_set_halt_and_wedge(_ep, 1, 1);
424 }
425
426 static const struct usb_ep_ops vep_ops = {
427         .enable         = vep_enable,
428         .disable        = vep_disable,
429
430         .alloc_request  = vep_alloc_request,
431         .free_request   = vep_free_request,
432
433         .queue          = vep_queue,
434         .dequeue        = vep_dequeue,
435
436         .set_halt       = vep_set_halt,
437         .set_wedge      = vep_set_wedge,
438 };
439
440
441 /* shutdown / reset / error handlers */
442
443 static void vudc_shutdown(struct usbip_device *ud)
444 {
445         struct vudc *udc = container_of(ud, struct vudc, ud);
446         int call_disconnect = 0;
447         unsigned long flags;
448
449         dev_dbg(&udc->pdev->dev, "device shutdown");
450         if (ud->tcp_socket)
451                 kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR);
452
453         if (ud->tcp_tx) {
454                 kthread_stop_put(ud->tcp_rx);
455                 ud->tcp_rx = NULL;
456         }
457         if (ud->tcp_tx) {
458                 kthread_stop_put(ud->tcp_tx);
459                 ud->tcp_tx = NULL;
460         }
461
462         if (ud->tcp_socket) {
463                 sockfd_put(ud->tcp_socket);
464                 ud->tcp_socket = NULL;
465         }
466
467         spin_lock_irqsave(&udc->lock, flags);
468         stop_activity(udc);
469         if (udc->connected && udc->driver->disconnect)
470                 call_disconnect = 1;
471         udc->connected = 0;
472         spin_unlock_irqrestore(&udc->lock, flags);
473         if (call_disconnect)
474                 udc->driver->disconnect(&udc->gadget);
475 }
476
477 static void vudc_device_reset(struct usbip_device *ud)
478 {
479         struct vudc *udc = container_of(ud, struct vudc, ud);
480         unsigned long flags;
481
482         dev_dbg(&udc->pdev->dev, "device reset");
483         spin_lock_irqsave(&udc->lock, flags);
484         stop_activity(udc);
485         spin_unlock_irqrestore(&udc->lock, flags);
486         if (udc->driver)
487                 usb_gadget_udc_reset(&udc->gadget, udc->driver);
488         spin_lock_irqsave(&ud->lock, flags);
489         ud->status = SDEV_ST_AVAILABLE;
490         spin_unlock_irqrestore(&ud->lock, flags);
491 }
492
493 static void vudc_device_unusable(struct usbip_device *ud)
494 {
495         unsigned long flags;
496
497         spin_lock_irqsave(&ud->lock, flags);
498         ud->status = SDEV_ST_ERROR;
499         spin_unlock_irqrestore(&ud->lock, flags);
500 }
501
502 /* device setup / cleanup */
503
504 struct vudc_device *alloc_vudc_device(int devid)
505 {
506         struct vudc_device *udc_dev = NULL;
507
508         udc_dev = kzalloc(sizeof(*udc_dev), GFP_KERNEL);
509         if (!udc_dev)
510                 goto out;
511
512         INIT_LIST_HEAD(&udc_dev->dev_entry);
513
514         udc_dev->pdev = platform_device_alloc(GADGET_NAME, devid);
515         if (!udc_dev->pdev) {
516                 kfree(udc_dev);
517                 udc_dev = NULL;
518         }
519
520 out:
521         return udc_dev;
522 }
523
524 void put_vudc_device(struct vudc_device *udc_dev)
525 {
526         platform_device_put(udc_dev->pdev);
527         kfree(udc_dev);
528 }
529
530 static int init_vudc_hw(struct vudc *udc)
531 {
532         int i;
533         struct usbip_device *ud = &udc->ud;
534         struct vep *ep;
535
536         udc->ep = kcalloc(VIRTUAL_ENDPOINTS, sizeof(*udc->ep), GFP_KERNEL);
537         if (!udc->ep)
538                 goto nomem_ep;
539
540         INIT_LIST_HEAD(&udc->gadget.ep_list);
541
542         /* create ep0 and 15 in, 15 out general purpose eps */
543         for (i = 0; i < VIRTUAL_ENDPOINTS; ++i) {
544                 int is_out = i % 2;
545                 int num = (i + 1) / 2;
546
547                 ep = &udc->ep[i];
548
549                 sprintf(ep->name, "ep%d%s", num,
550                         i ? (is_out ? "out" : "in") : "");
551                 ep->ep.name = ep->name;
552                 if (i == 0) {
553                         ep->ep.caps.type_control = true;
554                         ep->ep.caps.dir_out = true;
555                         ep->ep.caps.dir_in = true;
556                 } else {
557                         ep->ep.caps.type_iso = true;
558                         ep->ep.caps.type_int = true;
559                         ep->ep.caps.type_bulk = true;
560                 }
561
562                 if (is_out)
563                         ep->ep.caps.dir_out = true;
564                 else
565                         ep->ep.caps.dir_in = true;
566
567                 ep->ep.ops = &vep_ops;
568                 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
569                 ep->halted = ep->wedged = ep->already_seen =
570                         ep->setup_stage = 0;
571                 usb_ep_set_maxpacket_limit(&ep->ep, ~0);
572                 ep->ep.max_streams = 16;
573                 ep->gadget = &udc->gadget;
574                 ep->desc = NULL;
575                 INIT_LIST_HEAD(&ep->req_queue);
576         }
577
578         spin_lock_init(&udc->lock);
579         spin_lock_init(&udc->lock_tx);
580         INIT_LIST_HEAD(&udc->urb_queue);
581         INIT_LIST_HEAD(&udc->tx_queue);
582         init_waitqueue_head(&udc->tx_waitq);
583
584         spin_lock_init(&ud->lock);
585         ud->status = SDEV_ST_AVAILABLE;
586         ud->side = USBIP_VUDC;
587
588         ud->eh_ops.shutdown = vudc_shutdown;
589         ud->eh_ops.reset    = vudc_device_reset;
590         ud->eh_ops.unusable = vudc_device_unusable;
591
592         udc->gadget.ep0 = &udc->ep[0].ep;
593         list_del_init(&udc->ep[0].ep.ep_list);
594
595         v_init_timer(udc);
596         return 0;
597
598 nomem_ep:
599                 return -ENOMEM;
600 }
601
602 static void cleanup_vudc_hw(struct vudc *udc)
603 {
604         kfree(udc->ep);
605 }
606
607 /* platform driver ops */
608
609 int vudc_probe(struct platform_device *pdev)
610 {
611         struct vudc *udc;
612         int ret = -ENOMEM;
613
614         udc = kzalloc(sizeof(*udc), GFP_KERNEL);
615         if (!udc)
616                 goto out;
617
618         udc->gadget.name = GADGET_NAME;
619         udc->gadget.ops = &vgadget_ops;
620         udc->gadget.max_speed = USB_SPEED_HIGH;
621         udc->gadget.dev.parent = &pdev->dev;
622         udc->pdev = pdev;
623
624         ret = init_vudc_hw(udc);
625         if (ret)
626                 goto err_init_vudc_hw;
627
628         ret = usb_add_gadget_udc(&pdev->dev, &udc->gadget);
629         if (ret < 0)
630                 goto err_add_udc;
631
632         ret = sysfs_create_group(&pdev->dev.kobj, &vudc_attr_group);
633         if (ret) {
634                 dev_err(&udc->pdev->dev, "create sysfs files\n");
635                 goto err_sysfs;
636         }
637
638         platform_set_drvdata(pdev, udc);
639
640         return ret;
641
642 err_sysfs:
643         usb_del_gadget_udc(&udc->gadget);
644 err_add_udc:
645         cleanup_vudc_hw(udc);
646 err_init_vudc_hw:
647         kfree(udc);
648 out:
649         return ret;
650 }
651
652 int vudc_remove(struct platform_device *pdev)
653 {
654         struct vudc *udc = platform_get_drvdata(pdev);
655
656         sysfs_remove_group(&pdev->dev.kobj, &vudc_attr_group);
657         usb_del_gadget_udc(&udc->gadget);
658         cleanup_vudc_hw(udc);
659         kfree(udc);
660         return 0;
661 }