1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#include <linux/io.h>
18#include <linux/list.h>
19#include <linux/module.h>
20#include <linux/platform_device.h>
21#include <linux/slab.h>
22#include <linux/usb.h>
23#include <linux/usb/hcd.h>
24#include "common.h"
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73struct usbhsh_request {
74 struct urb *urb;
75 struct usbhs_pkt pkt;
76};
77
78struct usbhsh_device {
79 struct usb_device *usbv;
80 struct list_head ep_list_head;
81};
82
83struct usbhsh_ep {
84 struct usbhs_pipe *pipe;
85 struct usbhsh_device *udev;
86 struct usb_host_endpoint *ep;
87 struct list_head ep_list;
88 unsigned int counter;
89};
90
91#define USBHSH_DEVICE_MAX 10
92#define USBHSH_PORT_MAX 7
93struct usbhsh_hpriv {
94 struct usbhs_mod mod;
95 struct usbhs_pipe *dcp;
96
97 struct usbhsh_device udev[USBHSH_DEVICE_MAX];
98
99 u32 port_stat;
100
101 struct completion setup_ack_done;
102};
103
104
105static const char usbhsh_hcd_name[] = "renesas_usbhs host";
106
107
108
109
110#define usbhsh_priv_to_hpriv(priv) \
111 container_of(usbhs_mod_get(priv, USBHS_HOST), struct usbhsh_hpriv, mod)
112
113#define __usbhsh_for_each_udev(start, pos, h, i) \
114 for ((i) = start; \
115 ((i) < USBHSH_DEVICE_MAX) && ((pos) = (h)->udev + (i)); \
116 (i)++)
117
118#define usbhsh_for_each_udev(pos, hpriv, i) \
119 __usbhsh_for_each_udev(1, pos, hpriv, i)
120
121#define usbhsh_for_each_udev_with_dev0(pos, hpriv, i) \
122 __usbhsh_for_each_udev(0, pos, hpriv, i)
123
124#define usbhsh_hcd_to_hpriv(h) (struct usbhsh_hpriv *)((h)->hcd_priv)
125#define usbhsh_hcd_to_dev(h) ((h)->self.controller)
126
127#define usbhsh_hpriv_to_priv(h) ((h)->mod.priv)
128#define usbhsh_hpriv_to_dcp(h) ((h)->dcp)
129#define usbhsh_hpriv_to_hcd(h) \
130 container_of((void *)h, struct usb_hcd, hcd_priv)
131
132#define usbhsh_ep_to_uep(u) ((u)->hcpriv)
133#define usbhsh_uep_to_pipe(u) ((u)->pipe)
134#define usbhsh_uep_to_udev(u) ((u)->udev)
135#define usbhsh_uep_to_ep(u) ((u)->ep)
136
137#define usbhsh_urb_to_ureq(u) ((u)->hcpriv)
138#define usbhsh_urb_to_usbv(u) ((u)->dev)
139
140#define usbhsh_usbv_to_udev(d) dev_get_drvdata(&(d)->dev)
141
142#define usbhsh_udev_to_usbv(h) ((h)->usbv)
143#define usbhsh_udev_is_used(h) usbhsh_udev_to_usbv(h)
144
145#define usbhsh_pipe_to_uep(p) ((p)->mod_private)
146
147#define usbhsh_device_parent(d) (usbhsh_usbv_to_udev((d)->usbv->parent))
148#define usbhsh_device_hubport(d) ((d)->usbv->portnum)
149#define usbhsh_device_number(h, d) ((int)((d) - (h)->udev))
150#define usbhsh_device_nth(h, d) ((h)->udev + d)
151#define usbhsh_device0(h) usbhsh_device_nth(h, 0)
152
153#define usbhsh_port_stat_init(h) ((h)->port_stat = 0)
154#define usbhsh_port_stat_set(h, s) ((h)->port_stat |= (s))
155#define usbhsh_port_stat_clear(h, s) ((h)->port_stat &= ~(s))
156#define usbhsh_port_stat_get(h) ((h)->port_stat)
157
158#define usbhsh_pkt_to_ureq(p) \
159 container_of((void *)p, struct usbhsh_request, pkt)
160
161
162
163
164static struct usbhsh_request *usbhsh_ureq_alloc(struct usbhsh_hpriv *hpriv,
165 struct urb *urb,
166 gfp_t mem_flags)
167{
168 struct usbhsh_request *ureq;
169 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
170 struct device *dev = usbhs_priv_to_dev(priv);
171
172 ureq = kzalloc(sizeof(struct usbhsh_request), mem_flags);
173 if (!ureq) {
174 dev_err(dev, "ureq alloc fail\n");
175 return NULL;
176 }
177
178 usbhs_pkt_init(&ureq->pkt);
179 ureq->urb = urb;
180 usbhsh_urb_to_ureq(urb) = ureq;
181
182 return ureq;
183}
184
185static void usbhsh_ureq_free(struct usbhsh_hpriv *hpriv,
186 struct usbhsh_request *ureq)
187{
188 usbhsh_urb_to_ureq(ureq->urb) = NULL;
189 ureq->urb = NULL;
190
191 kfree(ureq);
192}
193
194
195
196
197static int usbhsh_is_running(struct usbhsh_hpriv *hpriv)
198{
199
200
201
202
203
204
205
206 return (hpriv->mod.irq_attch == NULL);
207}
208
209
210
211
212static void usbhsh_endpoint_sequence_save(struct usbhsh_hpriv *hpriv,
213 struct urb *urb,
214 struct usbhs_pkt *pkt)
215{
216 int len = urb->actual_length;
217 int maxp = usb_endpoint_maxp(&urb->ep->desc);
218 int t = 0;
219
220
221 if (usb_pipecontrol(urb->pipe))
222 return;
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241 t = len / maxp;
242 if (len % maxp)
243 t++;
244 if (pkt->zero)
245 t++;
246 t %= 2;
247
248 if (t)
249 usb_dotoggle(urb->dev,
250 usb_pipeendpoint(urb->pipe),
251 usb_pipeout(urb->pipe));
252}
253
254static struct usbhsh_device *usbhsh_device_get(struct usbhsh_hpriv *hpriv,
255 struct urb *urb);
256
257static int usbhsh_pipe_attach(struct usbhsh_hpriv *hpriv,
258 struct urb *urb)
259{
260 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
261 struct usbhsh_ep *uep = usbhsh_ep_to_uep(urb->ep);
262 struct usbhsh_device *udev = usbhsh_device_get(hpriv, urb);
263 struct usbhs_pipe *pipe;
264 struct usb_endpoint_descriptor *desc = &urb->ep->desc;
265 struct device *dev = usbhs_priv_to_dev(priv);
266 unsigned long flags;
267 int dir_in_req = !!usb_pipein(urb->pipe);
268 int is_dcp = usb_endpoint_xfer_control(desc);
269 int i, dir_in;
270 int ret = -EBUSY;
271
272
273 usbhs_lock(priv, flags);
274
275
276
277
278
279 if (usbhsh_uep_to_pipe(uep)) {
280 ret = 0;
281 goto usbhsh_pipe_attach_done;
282 }
283
284 usbhs_for_each_pipe_with_dcp(pipe, priv, i) {
285
286
287 if (!usbhs_pipe_type_is(pipe, usb_endpoint_type(desc)))
288 continue;
289
290
291 if (!is_dcp) {
292 dir_in = !!usbhs_pipe_is_dir_in(pipe);
293 if (0 != (dir_in - dir_in_req))
294 continue;
295 }
296
297
298 if (usbhsh_pipe_to_uep(pipe))
299 continue;
300
301
302
303
304
305
306
307
308
309 usbhsh_uep_to_pipe(uep) = pipe;
310 usbhsh_pipe_to_uep(pipe) = uep;
311
312 usbhs_pipe_config_update(pipe,
313 usbhsh_device_number(hpriv, udev),
314 usb_endpoint_num(desc),
315 usb_endpoint_maxp(desc));
316
317 dev_dbg(dev, "%s [%d-%d(%s:%s)]\n", __func__,
318 usbhsh_device_number(hpriv, udev),
319 usb_endpoint_num(desc),
320 usbhs_pipe_name(pipe),
321 dir_in_req ? "in" : "out");
322
323 ret = 0;
324 break;
325 }
326
327usbhsh_pipe_attach_done:
328 if (0 == ret)
329 uep->counter++;
330
331 usbhs_unlock(priv, flags);
332
333
334 return ret;
335}
336
337static void usbhsh_pipe_detach(struct usbhsh_hpriv *hpriv,
338 struct usbhsh_ep *uep)
339{
340 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
341 struct usbhs_pipe *pipe;
342 struct device *dev = usbhs_priv_to_dev(priv);
343 unsigned long flags;
344
345 if (unlikely(!uep)) {
346 dev_err(dev, "no uep\n");
347 return;
348 }
349
350
351 usbhs_lock(priv, flags);
352
353 pipe = usbhsh_uep_to_pipe(uep);
354
355 if (unlikely(!pipe)) {
356 dev_err(dev, "uep doens't have pipe\n");
357 } else if (1 == uep->counter--) {
358 struct usb_host_endpoint *ep = usbhsh_uep_to_ep(uep);
359 struct usbhsh_device *udev = usbhsh_uep_to_udev(uep);
360
361
362 usbhsh_uep_to_pipe(uep) = NULL;
363 usbhsh_pipe_to_uep(pipe) = NULL;
364
365 dev_dbg(dev, "%s [%d-%d(%s)]\n", __func__,
366 usbhsh_device_number(hpriv, udev),
367 usb_endpoint_num(&ep->desc),
368 usbhs_pipe_name(pipe));
369 }
370
371 usbhs_unlock(priv, flags);
372
373}
374
375
376
377
378static int usbhsh_endpoint_attach(struct usbhsh_hpriv *hpriv,
379 struct urb *urb,
380 gfp_t mem_flags)
381{
382 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
383 struct usbhsh_device *udev = usbhsh_device_get(hpriv, urb);
384 struct usb_host_endpoint *ep = urb->ep;
385 struct usbhsh_ep *uep;
386 struct device *dev = usbhs_priv_to_dev(priv);
387 struct usb_endpoint_descriptor *desc = &ep->desc;
388 unsigned long flags;
389
390 uep = kzalloc(sizeof(struct usbhsh_ep), mem_flags);
391 if (!uep) {
392 dev_err(dev, "usbhsh_ep alloc fail\n");
393 return -ENOMEM;
394 }
395
396
397 usbhs_lock(priv, flags);
398
399
400
401
402 uep->counter = 0;
403 INIT_LIST_HEAD(&uep->ep_list);
404 list_add_tail(&uep->ep_list, &udev->ep_list_head);
405
406 usbhsh_uep_to_udev(uep) = udev;
407 usbhsh_uep_to_ep(uep) = ep;
408 usbhsh_ep_to_uep(ep) = uep;
409
410 usbhs_unlock(priv, flags);
411
412
413 dev_dbg(dev, "%s [%d-%d]\n", __func__,
414 usbhsh_device_number(hpriv, udev),
415 usb_endpoint_num(desc));
416
417 return 0;
418}
419
420static void usbhsh_endpoint_detach(struct usbhsh_hpriv *hpriv,
421 struct usb_host_endpoint *ep)
422{
423 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
424 struct device *dev = usbhs_priv_to_dev(priv);
425 struct usbhsh_ep *uep = usbhsh_ep_to_uep(ep);
426 unsigned long flags;
427
428 if (!uep)
429 return;
430
431 dev_dbg(dev, "%s [%d-%d]\n", __func__,
432 usbhsh_device_number(hpriv, usbhsh_uep_to_udev(uep)),
433 usb_endpoint_num(&ep->desc));
434
435 if (usbhsh_uep_to_pipe(uep))
436 usbhsh_pipe_detach(hpriv, uep);
437
438
439 usbhs_lock(priv, flags);
440
441
442 list_del_init(&uep->ep_list);
443
444 usbhsh_uep_to_udev(uep) = NULL;
445 usbhsh_uep_to_ep(uep) = NULL;
446 usbhsh_ep_to_uep(ep) = NULL;
447
448 usbhs_unlock(priv, flags);
449
450
451 kfree(uep);
452}
453
454static void usbhsh_endpoint_detach_all(struct usbhsh_hpriv *hpriv,
455 struct usbhsh_device *udev)
456{
457 struct usbhsh_ep *uep, *next;
458
459 list_for_each_entry_safe(uep, next, &udev->ep_list_head, ep_list)
460 usbhsh_endpoint_detach(hpriv, usbhsh_uep_to_ep(uep));
461}
462
463
464
465
466static int usbhsh_connected_to_rhdev(struct usb_hcd *hcd,
467 struct usbhsh_device *udev)
468{
469 struct usb_device *usbv = usbhsh_udev_to_usbv(udev);
470
471 return hcd->self.root_hub == usbv->parent;
472}
473
474static int usbhsh_device_has_endpoint(struct usbhsh_device *udev)
475{
476 return !list_empty(&udev->ep_list_head);
477}
478
479static struct usbhsh_device *usbhsh_device_get(struct usbhsh_hpriv *hpriv,
480 struct urb *urb)
481{
482 struct usb_device *usbv = usbhsh_urb_to_usbv(urb);
483 struct usbhsh_device *udev = usbhsh_usbv_to_udev(usbv);
484
485
486 if (!udev)
487 return NULL;
488
489
490 if (0 == usb_pipedevice(urb->pipe))
491 return usbhsh_device0(hpriv);
492
493
494 return udev;
495}
496
497static struct usbhsh_device *usbhsh_device_attach(struct usbhsh_hpriv *hpriv,
498 struct urb *urb)
499{
500 struct usbhsh_device *udev = NULL;
501 struct usbhsh_device *udev0 = usbhsh_device0(hpriv);
502 struct usbhsh_device *pos;
503 struct usb_hcd *hcd = usbhsh_hpriv_to_hcd(hpriv);
504 struct device *dev = usbhsh_hcd_to_dev(hcd);
505 struct usb_device *usbv = usbhsh_urb_to_usbv(urb);
506 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
507 unsigned long flags;
508 u16 upphub, hubport;
509 int i;
510
511
512
513
514
515
516
517
518 if (0 != usb_pipedevice(urb->pipe)) {
519 dev_err(dev, "%s fail: urb isn't pointing device0\n", __func__);
520 return NULL;
521 }
522
523
524 usbhs_lock(priv, flags);
525
526
527
528
529 usbhsh_for_each_udev(pos, hpriv, i) {
530 if (usbhsh_udev_is_used(pos))
531 continue;
532 udev = pos;
533 break;
534 }
535
536 if (udev) {
537
538
539
540
541
542 dev_set_drvdata(&usbv->dev, udev);
543 udev->usbv = usbv;
544 }
545
546 usbhs_unlock(priv, flags);
547
548
549 if (!udev) {
550 dev_err(dev, "no free usbhsh_device\n");
551 return NULL;
552 }
553
554 if (usbhsh_device_has_endpoint(udev)) {
555 dev_warn(dev, "udev have old endpoint\n");
556 usbhsh_endpoint_detach_all(hpriv, udev);
557 }
558
559 if (usbhsh_device_has_endpoint(udev0)) {
560 dev_warn(dev, "udev0 have old endpoint\n");
561 usbhsh_endpoint_detach_all(hpriv, udev0);
562 }
563
564
565 INIT_LIST_HEAD(&udev0->ep_list_head);
566 INIT_LIST_HEAD(&udev->ep_list_head);
567
568
569
570
571 usbhs_set_device_config(priv,
572 0, 0, 0, usbv->speed);
573
574
575
576
577 upphub = 0;
578 hubport = 0;
579 if (!usbhsh_connected_to_rhdev(hcd, udev)) {
580
581 struct usbhsh_device *parent = usbhsh_device_parent(udev);
582
583 upphub = usbhsh_device_number(hpriv, parent);
584 hubport = usbhsh_device_hubport(udev);
585
586 dev_dbg(dev, "%s connecte to Hub [%d:%d](%p)\n", __func__,
587 upphub, hubport, parent);
588 }
589
590 usbhs_set_device_config(priv,
591 usbhsh_device_number(hpriv, udev),
592 upphub, hubport, usbv->speed);
593
594 dev_dbg(dev, "%s [%d](%p)\n", __func__,
595 usbhsh_device_number(hpriv, udev), udev);
596
597 return udev;
598}
599
600static void usbhsh_device_detach(struct usbhsh_hpriv *hpriv,
601 struct usbhsh_device *udev)
602{
603 struct usb_hcd *hcd = usbhsh_hpriv_to_hcd(hpriv);
604 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
605 struct device *dev = usbhsh_hcd_to_dev(hcd);
606 struct usb_device *usbv = usbhsh_udev_to_usbv(udev);
607 unsigned long flags;
608
609 dev_dbg(dev, "%s [%d](%p)\n", __func__,
610 usbhsh_device_number(hpriv, udev), udev);
611
612 if (usbhsh_device_has_endpoint(udev)) {
613 dev_warn(dev, "udev still have endpoint\n");
614 usbhsh_endpoint_detach_all(hpriv, udev);
615 }
616
617
618
619
620
621
622
623 if (0 == usbhsh_device_number(hpriv, udev))
624 return;
625
626
627 usbhs_lock(priv, flags);
628
629
630
631
632
633
634 dev_set_drvdata(&usbv->dev, NULL);
635 udev->usbv = NULL;
636
637 usbhs_unlock(priv, flags);
638
639}
640
641
642
643
644static void usbhsh_queue_done(struct usbhs_priv *priv, struct usbhs_pkt *pkt)
645{
646 struct usbhsh_request *ureq = usbhsh_pkt_to_ureq(pkt);
647 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
648 struct usb_hcd *hcd = usbhsh_hpriv_to_hcd(hpriv);
649 struct urb *urb = ureq->urb;
650 struct device *dev = usbhs_priv_to_dev(priv);
651 int status = 0;
652
653 dev_dbg(dev, "%s\n", __func__);
654
655 if (!urb) {
656 dev_warn(dev, "pkt doesn't have urb\n");
657 return;
658 }
659
660 if (!usbhsh_is_running(hpriv))
661 status = -ESHUTDOWN;
662
663 urb->actual_length = pkt->actual;
664
665 usbhsh_endpoint_sequence_save(hpriv, urb, pkt);
666 usbhsh_ureq_free(hpriv, ureq);
667
668 usbhsh_pipe_detach(hpriv, usbhsh_ep_to_uep(urb->ep));
669
670 usb_hcd_unlink_urb_from_ep(hcd, urb);
671 usb_hcd_giveback_urb(hcd, urb, status);
672}
673
674static int usbhsh_queue_push(struct usb_hcd *hcd,
675 struct urb *urb,
676 gfp_t mem_flags)
677{
678 struct usbhsh_hpriv *hpriv = usbhsh_hcd_to_hpriv(hcd);
679 struct usbhsh_ep *uep = usbhsh_ep_to_uep(urb->ep);
680 struct usbhs_pipe *pipe = usbhsh_uep_to_pipe(uep);
681 struct device *dev = usbhsh_hcd_to_dev(hcd);
682 struct usbhsh_request *ureq;
683 void *buf;
684 int len, sequence;
685
686 if (usb_pipeisoc(urb->pipe)) {
687 dev_err(dev, "pipe iso is not supported now\n");
688 return -EIO;
689 }
690
691
692 ureq = usbhsh_ureq_alloc(hpriv, urb, mem_flags);
693 if (unlikely(!ureq)) {
694 dev_err(dev, "ureq alloc fail\n");
695 return -ENOMEM;
696 }
697
698 if (usb_pipein(urb->pipe))
699 pipe->handler = &usbhs_fifo_dma_pop_handler;
700 else
701 pipe->handler = &usbhs_fifo_dma_push_handler;
702
703 buf = (void *)(urb->transfer_buffer + urb->actual_length);
704 len = urb->transfer_buffer_length - urb->actual_length;
705
706 sequence = usb_gettoggle(urb->dev,
707 usb_pipeendpoint(urb->pipe),
708 usb_pipeout(urb->pipe));
709
710 dev_dbg(dev, "%s\n", __func__);
711 usbhs_pkt_push(pipe, &ureq->pkt, usbhsh_queue_done,
712 buf, len, (urb->transfer_flags & URB_ZERO_PACKET),
713 sequence);
714
715 usbhs_pkt_start(pipe);
716
717 return 0;
718}
719
720static void usbhsh_queue_force_pop(struct usbhs_priv *priv,
721 struct usbhs_pipe *pipe)
722{
723 struct usbhs_pkt *pkt;
724
725 while (1) {
726 pkt = usbhs_pkt_pop(pipe, NULL);
727 if (!pkt)
728 break;
729
730
731
732
733
734
735 usbhsh_queue_done(priv, pkt);
736 }
737}
738
739static void usbhsh_queue_force_pop_all(struct usbhs_priv *priv)
740{
741 struct usbhs_pipe *pos;
742 int i;
743
744 usbhs_for_each_pipe_with_dcp(pos, priv, i)
745 usbhsh_queue_force_pop(priv, pos);
746}
747
748
749
750
751static int usbhsh_is_request_address(struct urb *urb)
752{
753 struct usb_ctrlrequest *req;
754
755 req = (struct usb_ctrlrequest *)urb->setup_packet;
756
757 if ((DeviceOutRequest == req->bRequestType << 8) &&
758 (USB_REQ_SET_ADDRESS == req->bRequest))
759 return 1;
760 else
761 return 0;
762}
763
764static void usbhsh_setup_stage_packet_push(struct usbhsh_hpriv *hpriv,
765 struct urb *urb,
766 struct usbhs_pipe *pipe)
767{
768 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
769 struct usb_ctrlrequest req;
770 struct device *dev = usbhs_priv_to_dev(priv);
771
772
773
774
775
776
777
778 init_completion(&hpriv->setup_ack_done);
779
780
781 memcpy(&req, urb->setup_packet, sizeof(struct usb_ctrlrequest));
782
783
784
785
786
787
788
789 if (usbhsh_is_request_address(urb)) {
790 struct usb_device *usbv = usbhsh_urb_to_usbv(urb);
791 struct usbhsh_device *udev = usbhsh_usbv_to_udev(usbv);
792
793
794 req.wValue = usbhsh_device_number(hpriv, udev);
795 dev_dbg(dev, "create new address - %d\n", req.wValue);
796 }
797
798
799 usbhs_usbreq_set_val(priv, &req);
800
801
802
803
804 wait_for_completion(&hpriv->setup_ack_done);
805
806 dev_dbg(dev, "%s done\n", __func__);
807}
808
809
810
811
812static void usbhsh_data_stage_packet_done(struct usbhs_priv *priv,
813 struct usbhs_pkt *pkt)
814{
815 struct usbhsh_request *ureq = usbhsh_pkt_to_ureq(pkt);
816 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
817
818
819
820 usbhsh_ureq_free(hpriv, ureq);
821}
822
823static int usbhsh_data_stage_packet_push(struct usbhsh_hpriv *hpriv,
824 struct urb *urb,
825 struct usbhs_pipe *pipe,
826 gfp_t mem_flags)
827
828{
829 struct usbhsh_request *ureq;
830
831
832 ureq = usbhsh_ureq_alloc(hpriv, urb, mem_flags);
833 if (unlikely(!ureq))
834 return -ENOMEM;
835
836 if (usb_pipein(urb->pipe))
837 pipe->handler = &usbhs_dcp_data_stage_in_handler;
838 else
839 pipe->handler = &usbhs_dcp_data_stage_out_handler;
840
841 usbhs_pkt_push(pipe, &ureq->pkt,
842 usbhsh_data_stage_packet_done,
843 urb->transfer_buffer,
844 urb->transfer_buffer_length,
845 (urb->transfer_flags & URB_ZERO_PACKET),
846 -1);
847
848 return 0;
849}
850
851
852
853
854static int usbhsh_status_stage_packet_push(struct usbhsh_hpriv *hpriv,
855 struct urb *urb,
856 struct usbhs_pipe *pipe,
857 gfp_t mem_flags)
858{
859 struct usbhsh_request *ureq;
860
861
862 ureq = usbhsh_ureq_alloc(hpriv, urb, mem_flags);
863 if (unlikely(!ureq))
864 return -ENOMEM;
865
866 if (usb_pipein(urb->pipe))
867 pipe->handler = &usbhs_dcp_status_stage_in_handler;
868 else
869 pipe->handler = &usbhs_dcp_status_stage_out_handler;
870
871 usbhs_pkt_push(pipe, &ureq->pkt,
872 usbhsh_queue_done,
873 NULL,
874 urb->transfer_buffer_length,
875 0, -1);
876
877 return 0;
878}
879
880static int usbhsh_dcp_queue_push(struct usb_hcd *hcd,
881 struct urb *urb,
882 gfp_t mflags)
883{
884 struct usbhsh_hpriv *hpriv = usbhsh_hcd_to_hpriv(hcd);
885 struct usbhsh_ep *uep = usbhsh_ep_to_uep(urb->ep);
886 struct usbhs_pipe *pipe = usbhsh_uep_to_pipe(uep);
887 struct device *dev = usbhsh_hcd_to_dev(hcd);
888 int ret;
889
890 dev_dbg(dev, "%s\n", __func__);
891
892
893
894
895
896
897 usbhsh_setup_stage_packet_push(hpriv, urb, pipe);
898
899
900
901
902
903
904 if (urb->transfer_buffer_length) {
905 ret = usbhsh_data_stage_packet_push(hpriv, urb, pipe, mflags);
906 if (ret < 0) {
907 dev_err(dev, "data stage failed\n");
908 return ret;
909 }
910 }
911
912
913
914
915 ret = usbhsh_status_stage_packet_push(hpriv, urb, pipe, mflags);
916 if (ret < 0) {
917 dev_err(dev, "status stage failed\n");
918 return ret;
919 }
920
921
922
923
924 usbhs_pkt_start(pipe);
925
926 return 0;
927}
928
929
930
931
932static int usbhsh_dma_map_ctrl(struct device *dma_dev, struct usbhs_pkt *pkt,
933 int map)
934{
935 if (map) {
936 struct usbhsh_request *ureq = usbhsh_pkt_to_ureq(pkt);
937 struct urb *urb = ureq->urb;
938
939
940 if (urb->num_sgs)
941 return -EINVAL;
942
943 pkt->dma = urb->transfer_dma;
944 if (!pkt->dma)
945 return -EINVAL;
946 }
947
948 return 0;
949}
950
951
952
953
954static int usbhsh_host_start(struct usb_hcd *hcd)
955{
956 return 0;
957}
958
959static void usbhsh_host_stop(struct usb_hcd *hcd)
960{
961}
962
963static int usbhsh_urb_enqueue(struct usb_hcd *hcd,
964 struct urb *urb,
965 gfp_t mem_flags)
966{
967 struct usbhsh_hpriv *hpriv = usbhsh_hcd_to_hpriv(hcd);
968 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
969 struct device *dev = usbhs_priv_to_dev(priv);
970 struct usb_host_endpoint *ep = urb->ep;
971 struct usbhsh_device *new_udev = NULL;
972 int is_dir_in = usb_pipein(urb->pipe);
973 int ret;
974
975 dev_dbg(dev, "%s (%s)\n", __func__, is_dir_in ? "in" : "out");
976
977 if (!usbhsh_is_running(hpriv)) {
978 ret = -EIO;
979 dev_err(dev, "host is not running\n");
980 goto usbhsh_urb_enqueue_error_not_linked;
981 }
982
983 ret = usb_hcd_link_urb_to_ep(hcd, urb);
984 if (ret) {
985 dev_err(dev, "urb link failed\n");
986 goto usbhsh_urb_enqueue_error_not_linked;
987 }
988
989
990
991
992
993 if (!usbhsh_device_get(hpriv, urb)) {
994 new_udev = usbhsh_device_attach(hpriv, urb);
995 if (!new_udev) {
996 ret = -EIO;
997 dev_err(dev, "device attach failed\n");
998 goto usbhsh_urb_enqueue_error_not_linked;
999 }
1000 }
1001
1002
1003
1004
1005
1006 if (!usbhsh_ep_to_uep(ep)) {
1007 ret = usbhsh_endpoint_attach(hpriv, urb, mem_flags);
1008 if (ret < 0) {
1009 dev_err(dev, "endpoint attach failed\n");
1010 goto usbhsh_urb_enqueue_error_free_device;
1011 }
1012 }
1013
1014
1015
1016
1017
1018 ret = usbhsh_pipe_attach(hpriv, urb);
1019 if (ret < 0) {
1020 dev_err(dev, "pipe attach failed\n");
1021 goto usbhsh_urb_enqueue_error_free_endpoint;
1022 }
1023
1024
1025
1026
1027 if (usb_pipecontrol(urb->pipe))
1028 ret = usbhsh_dcp_queue_push(hcd, urb, mem_flags);
1029 else
1030 ret = usbhsh_queue_push(hcd, urb, mem_flags);
1031
1032 return ret;
1033
1034usbhsh_urb_enqueue_error_free_endpoint:
1035 usbhsh_endpoint_detach(hpriv, ep);
1036usbhsh_urb_enqueue_error_free_device:
1037 if (new_udev)
1038 usbhsh_device_detach(hpriv, new_udev);
1039usbhsh_urb_enqueue_error_not_linked:
1040
1041 dev_dbg(dev, "%s error\n", __func__);
1042
1043 return ret;
1044}
1045
1046static int usbhsh_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1047{
1048 struct usbhsh_hpriv *hpriv = usbhsh_hcd_to_hpriv(hcd);
1049 struct usbhsh_request *ureq = usbhsh_urb_to_ureq(urb);
1050
1051 if (ureq) {
1052 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
1053 struct usbhs_pkt *pkt = &ureq->pkt;
1054
1055 usbhs_pkt_pop(pkt->pipe, pkt);
1056 usbhsh_queue_done(priv, pkt);
1057 }
1058
1059 return 0;
1060}
1061
1062static void usbhsh_endpoint_disable(struct usb_hcd *hcd,
1063 struct usb_host_endpoint *ep)
1064{
1065 struct usbhsh_ep *uep = usbhsh_ep_to_uep(ep);
1066 struct usbhsh_device *udev;
1067 struct usbhsh_hpriv *hpriv;
1068
1069
1070
1071
1072
1073 if (!uep)
1074 return;
1075
1076 udev = usbhsh_uep_to_udev(uep);
1077 hpriv = usbhsh_hcd_to_hpriv(hcd);
1078
1079 usbhsh_endpoint_detach(hpriv, ep);
1080
1081
1082
1083
1084
1085 if (!usbhsh_device_has_endpoint(udev))
1086 usbhsh_device_detach(hpriv, udev);
1087}
1088
1089static int usbhsh_hub_status_data(struct usb_hcd *hcd, char *buf)
1090{
1091 struct usbhsh_hpriv *hpriv = usbhsh_hcd_to_hpriv(hcd);
1092 int roothub_id = 1;
1093
1094
1095
1096
1097
1098 if (usbhsh_port_stat_get(hpriv) & 0xFFFF0000)
1099 *buf = (1 << roothub_id);
1100 else
1101 *buf = 0;
1102
1103 return !!(*buf);
1104}
1105
1106static int __usbhsh_hub_hub_feature(struct usbhsh_hpriv *hpriv,
1107 u16 typeReq, u16 wValue,
1108 u16 wIndex, char *buf, u16 wLength)
1109{
1110 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
1111 struct device *dev = usbhs_priv_to_dev(priv);
1112
1113 switch (wValue) {
1114 case C_HUB_OVER_CURRENT:
1115 case C_HUB_LOCAL_POWER:
1116 dev_dbg(dev, "%s :: C_HUB_xx\n", __func__);
1117 return 0;
1118 }
1119
1120 return -EPIPE;
1121}
1122
1123static int __usbhsh_hub_port_feature(struct usbhsh_hpriv *hpriv,
1124 u16 typeReq, u16 wValue,
1125 u16 wIndex, char *buf, u16 wLength)
1126{
1127 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
1128 struct device *dev = usbhs_priv_to_dev(priv);
1129 int enable = (typeReq == SetPortFeature);
1130 int speed, i, timeout = 128;
1131 int roothub_id = 1;
1132
1133
1134 if (wIndex > roothub_id || wLength != 0)
1135 return -EPIPE;
1136
1137
1138 switch (wValue) {
1139 case USB_PORT_FEAT_POWER:
1140 usbhs_vbus_ctrl(priv, enable);
1141 dev_dbg(dev, "%s :: USB_PORT_FEAT_POWER\n", __func__);
1142 break;
1143
1144 case USB_PORT_FEAT_ENABLE:
1145 case USB_PORT_FEAT_SUSPEND:
1146 case USB_PORT_FEAT_C_ENABLE:
1147 case USB_PORT_FEAT_C_SUSPEND:
1148 case USB_PORT_FEAT_C_CONNECTION:
1149 case USB_PORT_FEAT_C_OVER_CURRENT:
1150 case USB_PORT_FEAT_C_RESET:
1151 dev_dbg(dev, "%s :: USB_PORT_FEAT_xxx\n", __func__);
1152 break;
1153
1154 case USB_PORT_FEAT_RESET:
1155 if (!enable)
1156 break;
1157
1158 usbhsh_port_stat_clear(hpriv,
1159 USB_PORT_STAT_HIGH_SPEED |
1160 USB_PORT_STAT_LOW_SPEED);
1161
1162 usbhsh_queue_force_pop_all(priv);
1163
1164 usbhs_bus_send_reset(priv);
1165 msleep(20);
1166 usbhs_bus_send_sof_enable(priv);
1167
1168 for (i = 0; i < timeout ; i++) {
1169 switch (usbhs_bus_get_speed(priv)) {
1170 case USB_SPEED_LOW:
1171 speed = USB_PORT_STAT_LOW_SPEED;
1172 goto got_usb_bus_speed;
1173 case USB_SPEED_HIGH:
1174 speed = USB_PORT_STAT_HIGH_SPEED;
1175 goto got_usb_bus_speed;
1176 case USB_SPEED_FULL:
1177 speed = 0;
1178 goto got_usb_bus_speed;
1179 }
1180
1181 msleep(20);
1182 }
1183 return -EPIPE;
1184
1185got_usb_bus_speed:
1186 usbhsh_port_stat_set(hpriv, speed);
1187 usbhsh_port_stat_set(hpriv, USB_PORT_STAT_ENABLE);
1188
1189 dev_dbg(dev, "%s :: USB_PORT_FEAT_RESET (speed = %d)\n",
1190 __func__, speed);
1191
1192
1193 return 0;
1194
1195 default:
1196 return -EPIPE;
1197 }
1198
1199
1200 if (enable)
1201 usbhsh_port_stat_set(hpriv, (1 << wValue));
1202 else
1203 usbhsh_port_stat_clear(hpriv, (1 << wValue));
1204
1205 return 0;
1206}
1207
1208static int __usbhsh_hub_get_status(struct usbhsh_hpriv *hpriv,
1209 u16 typeReq, u16 wValue,
1210 u16 wIndex, char *buf, u16 wLength)
1211{
1212 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
1213 struct usb_hub_descriptor *desc = (struct usb_hub_descriptor *)buf;
1214 struct device *dev = usbhs_priv_to_dev(priv);
1215 int roothub_id = 1;
1216
1217 switch (typeReq) {
1218 case GetHubStatus:
1219 dev_dbg(dev, "%s :: GetHubStatus\n", __func__);
1220
1221 *buf = 0x00;
1222 break;
1223
1224 case GetPortStatus:
1225 if (wIndex != roothub_id)
1226 return -EPIPE;
1227
1228 dev_dbg(dev, "%s :: GetPortStatus\n", __func__);
1229 *(__le32 *)buf = cpu_to_le32(usbhsh_port_stat_get(hpriv));
1230 break;
1231
1232 case GetHubDescriptor:
1233 desc->bDescriptorType = USB_DT_HUB;
1234 desc->bHubContrCurrent = 0;
1235 desc->bNbrPorts = roothub_id;
1236 desc->bDescLength = 9;
1237 desc->bPwrOn2PwrGood = 0;
1238 desc->wHubCharacteristics =
1239 cpu_to_le16(HUB_CHAR_INDV_PORT_LPSM | HUB_CHAR_NO_OCPM);
1240 desc->u.hs.DeviceRemovable[0] = (roothub_id << 1);
1241 desc->u.hs.DeviceRemovable[1] = ~0;
1242 dev_dbg(dev, "%s :: GetHubDescriptor\n", __func__);
1243 break;
1244 }
1245
1246 return 0;
1247}
1248
1249static int usbhsh_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
1250 u16 wIndex, char *buf, u16 wLength)
1251{
1252 struct usbhsh_hpriv *hpriv = usbhsh_hcd_to_hpriv(hcd);
1253 struct usbhs_priv *priv = usbhsh_hpriv_to_priv(hpriv);
1254 struct device *dev = usbhs_priv_to_dev(priv);
1255 int ret = -EPIPE;
1256
1257 switch (typeReq) {
1258
1259
1260 case ClearHubFeature:
1261 case SetHubFeature:
1262 ret = __usbhsh_hub_hub_feature(hpriv, typeReq,
1263 wValue, wIndex, buf, wLength);
1264 break;
1265
1266
1267 case SetPortFeature:
1268 case ClearPortFeature:
1269 ret = __usbhsh_hub_port_feature(hpriv, typeReq,
1270 wValue, wIndex, buf, wLength);
1271 break;
1272
1273
1274 case GetHubStatus:
1275 case GetPortStatus:
1276 case GetHubDescriptor:
1277 ret = __usbhsh_hub_get_status(hpriv, typeReq,
1278 wValue, wIndex, buf, wLength);
1279 break;
1280 }
1281
1282 dev_dbg(dev, "typeReq = %x, ret = %d, port_stat = %x\n",
1283 typeReq, ret, usbhsh_port_stat_get(hpriv));
1284
1285 return ret;
1286}
1287
1288static int usbhsh_bus_nop(struct usb_hcd *hcd)
1289{
1290
1291 return 0;
1292}
1293
1294static struct hc_driver usbhsh_driver = {
1295 .description = usbhsh_hcd_name,
1296 .hcd_priv_size = sizeof(struct usbhsh_hpriv),
1297
1298
1299
1300
1301 .flags = HCD_USB2,
1302
1303 .start = usbhsh_host_start,
1304 .stop = usbhsh_host_stop,
1305
1306
1307
1308
1309 .urb_enqueue = usbhsh_urb_enqueue,
1310 .urb_dequeue = usbhsh_urb_dequeue,
1311 .endpoint_disable = usbhsh_endpoint_disable,
1312
1313
1314
1315
1316 .hub_status_data = usbhsh_hub_status_data,
1317 .hub_control = usbhsh_hub_control,
1318 .bus_suspend = usbhsh_bus_nop,
1319 .bus_resume = usbhsh_bus_nop,
1320};
1321
1322
1323
1324
1325static int usbhsh_irq_attch(struct usbhs_priv *priv,
1326 struct usbhs_irq_state *irq_state)
1327{
1328 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
1329 struct device *dev = usbhs_priv_to_dev(priv);
1330
1331 dev_dbg(dev, "device attached\n");
1332
1333 usbhsh_port_stat_set(hpriv, USB_PORT_STAT_CONNECTION);
1334 usbhsh_port_stat_set(hpriv, USB_PORT_STAT_C_CONNECTION << 16);
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347 hpriv->mod.irq_attch = NULL;
1348 usbhs_irq_callback_update(priv, &hpriv->mod);
1349
1350 return 0;
1351}
1352
1353static int usbhsh_irq_dtch(struct usbhs_priv *priv,
1354 struct usbhs_irq_state *irq_state)
1355{
1356 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
1357 struct device *dev = usbhs_priv_to_dev(priv);
1358
1359 dev_dbg(dev, "device detached\n");
1360
1361 usbhsh_port_stat_clear(hpriv, USB_PORT_STAT_CONNECTION);
1362 usbhsh_port_stat_set(hpriv, USB_PORT_STAT_C_CONNECTION << 16);
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373 hpriv->mod.irq_attch = usbhsh_irq_attch;
1374 usbhs_irq_callback_update(priv, &hpriv->mod);
1375
1376
1377
1378
1379
1380 usbhsh_queue_force_pop_all(priv);
1381
1382 return 0;
1383}
1384
1385static int usbhsh_irq_setup_ack(struct usbhs_priv *priv,
1386 struct usbhs_irq_state *irq_state)
1387{
1388 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
1389 struct device *dev = usbhs_priv_to_dev(priv);
1390
1391 dev_dbg(dev, "setup packet OK\n");
1392
1393 complete(&hpriv->setup_ack_done);
1394
1395 return 0;
1396}
1397
1398static int usbhsh_irq_setup_err(struct usbhs_priv *priv,
1399 struct usbhs_irq_state *irq_state)
1400{
1401 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
1402 struct device *dev = usbhs_priv_to_dev(priv);
1403
1404 dev_dbg(dev, "setup packet Err\n");
1405
1406 complete(&hpriv->setup_ack_done);
1407
1408 return 0;
1409}
1410
1411
1412
1413
1414static void usbhsh_pipe_init_for_host(struct usbhs_priv *priv)
1415{
1416 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
1417 struct usbhs_pipe *pipe;
1418 struct renesas_usbhs_driver_pipe_config *pipe_configs =
1419 usbhs_get_dparam(priv, pipe_configs);
1420 int pipe_size = usbhs_get_dparam(priv, pipe_size);
1421 int old_type, dir_in, i;
1422
1423
1424 old_type = USB_ENDPOINT_XFER_CONTROL;
1425 for (i = 0; i < pipe_size; i++) {
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447 dir_in = (pipe_configs[i].type == old_type);
1448 old_type = pipe_configs[i].type;
1449
1450 if (USB_ENDPOINT_XFER_CONTROL == pipe_configs[i].type) {
1451 pipe = usbhs_dcp_malloc(priv);
1452 usbhsh_hpriv_to_dcp(hpriv) = pipe;
1453 } else {
1454 pipe = usbhs_pipe_malloc(priv,
1455 pipe_configs[i].type,
1456 dir_in);
1457 }
1458
1459 pipe->mod_private = NULL;
1460 }
1461}
1462
1463static int usbhsh_start(struct usbhs_priv *priv)
1464{
1465 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
1466 struct usb_hcd *hcd = usbhsh_hpriv_to_hcd(hpriv);
1467 struct usbhs_mod *mod = usbhs_mod_get_current(priv);
1468 struct device *dev = usbhs_priv_to_dev(priv);
1469 int ret;
1470
1471
1472 ret = usb_add_hcd(hcd, 0, 0);
1473 if (ret < 0)
1474 return 0;
1475 device_wakeup_enable(hcd->self.controller);
1476
1477
1478
1479
1480 usbhs_fifo_init(priv);
1481 usbhs_pipe_init(priv,
1482 usbhsh_dma_map_ctrl);
1483 usbhsh_pipe_init_for_host(priv);
1484
1485
1486
1487
1488
1489
1490
1491 usbhs_sys_host_ctrl(priv, 1);
1492
1493
1494
1495
1496 mod->irq_attch = usbhsh_irq_attch;
1497 mod->irq_dtch = usbhsh_irq_dtch;
1498 mod->irq_sack = usbhsh_irq_setup_ack;
1499 mod->irq_sign = usbhsh_irq_setup_err;
1500 usbhs_irq_callback_update(priv, mod);
1501
1502 dev_dbg(dev, "start host\n");
1503
1504 return ret;
1505}
1506
1507static int usbhsh_stop(struct usbhs_priv *priv)
1508{
1509 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
1510 struct usb_hcd *hcd = usbhsh_hpriv_to_hcd(hpriv);
1511 struct usbhs_mod *mod = usbhs_mod_get_current(priv);
1512 struct device *dev = usbhs_priv_to_dev(priv);
1513
1514
1515
1516
1517 mod->irq_attch = NULL;
1518 mod->irq_dtch = NULL;
1519 mod->irq_sack = NULL;
1520 mod->irq_sign = NULL;
1521 usbhs_irq_callback_update(priv, mod);
1522
1523 usb_remove_hcd(hcd);
1524
1525
1526 usbhs_sys_host_ctrl(priv, 0);
1527
1528 dev_dbg(dev, "quit host\n");
1529
1530 return 0;
1531}
1532
1533int usbhs_mod_host_probe(struct usbhs_priv *priv)
1534{
1535 struct usbhsh_hpriv *hpriv;
1536 struct usb_hcd *hcd;
1537 struct usbhsh_device *udev;
1538 struct device *dev = usbhs_priv_to_dev(priv);
1539 int i;
1540
1541
1542 hcd = usb_create_hcd(&usbhsh_driver, dev, usbhsh_hcd_name);
1543 if (!hcd) {
1544 dev_err(dev, "Failed to create hcd\n");
1545 return -ENOMEM;
1546 }
1547 hcd->has_tt = 1;
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557 hpriv = usbhsh_hcd_to_hpriv(hcd);
1558
1559
1560
1561
1562 usbhs_mod_register(priv, &hpriv->mod, USBHS_HOST);
1563
1564
1565 hpriv->mod.name = "host";
1566 hpriv->mod.start = usbhsh_start;
1567 hpriv->mod.stop = usbhsh_stop;
1568 usbhsh_port_stat_init(hpriv);
1569
1570
1571 usbhsh_for_each_udev_with_dev0(udev, hpriv, i) {
1572 udev->usbv = NULL;
1573 INIT_LIST_HEAD(&udev->ep_list_head);
1574 }
1575
1576 dev_info(dev, "host probed\n");
1577
1578 return 0;
1579}
1580
1581int usbhs_mod_host_remove(struct usbhs_priv *priv)
1582{
1583 struct usbhsh_hpriv *hpriv = usbhsh_priv_to_hpriv(priv);
1584 struct usb_hcd *hcd = usbhsh_hpriv_to_hcd(hpriv);
1585
1586 usb_put_hcd(hcd);
1587
1588 return 0;
1589}
1590