cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mod_host.c (37441B)


      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}