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