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