usb: renesas_usbhs: change arguments of dma_map_ctrl()
[cascardo/linux.git] / drivers / usb / renesas_usbhs / mod_gadget.c
1 /*
2  * Renesas USB driver
3  *
4  * Copyright (C) 2011 Renesas Solutions Corp.
5  * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
15  *
16  */
17 #include <linux/delay.h>
18 #include <linux/dma-mapping.h>
19 #include <linux/io.h>
20 #include <linux/module.h>
21 #include <linux/platform_device.h>
22 #include <linux/usb/ch9.h>
23 #include <linux/usb/gadget.h>
24 #include <linux/usb/otg.h>
25 #include "common.h"
26
27 /*
28  *              struct
29  */
30 struct usbhsg_request {
31         struct usb_request      req;
32         struct usbhs_pkt        pkt;
33 };
34
35 #define EP_NAME_SIZE 8
36 struct usbhsg_gpriv;
37 struct usbhsg_uep {
38         struct usb_ep            ep;
39         struct usbhs_pipe       *pipe;
40
41         char ep_name[EP_NAME_SIZE];
42
43         struct usbhsg_gpriv *gpriv;
44 };
45
46 struct usbhsg_gpriv {
47         struct usb_gadget        gadget;
48         struct usbhs_mod         mod;
49
50         struct usbhsg_uep       *uep;
51         int                      uep_size;
52
53         struct usb_gadget_driver        *driver;
54         struct usb_phy          *transceiver;
55         bool                     vbus_active;
56
57         u32     status;
58 #define USBHSG_STATUS_STARTED           (1 << 0)
59 #define USBHSG_STATUS_REGISTERD         (1 << 1)
60 #define USBHSG_STATUS_WEDGE             (1 << 2)
61 #define USBHSG_STATUS_SELF_POWERED      (1 << 3)
62 #define USBHSG_STATUS_SOFT_CONNECT      (1 << 4)
63 };
64
65 struct usbhsg_recip_handle {
66         char *name;
67         int (*device)(struct usbhs_priv *priv, struct usbhsg_uep *uep,
68                       struct usb_ctrlrequest *ctrl);
69         int (*interface)(struct usbhs_priv *priv, struct usbhsg_uep *uep,
70                          struct usb_ctrlrequest *ctrl);
71         int (*endpoint)(struct usbhs_priv *priv, struct usbhsg_uep *uep,
72                         struct usb_ctrlrequest *ctrl);
73 };
74
75 /*
76  *              macro
77  */
78 #define usbhsg_priv_to_gpriv(priv)                      \
79         container_of(                                   \
80                 usbhs_mod_get(priv, USBHS_GADGET),      \
81                 struct usbhsg_gpriv, mod)
82
83 #define __usbhsg_for_each_uep(start, pos, g, i) \
84         for ((i) = start;                                       \
85              ((i) < (g)->uep_size) && ((pos) = (g)->uep + (i)); \
86              (i)++)
87
88 #define usbhsg_for_each_uep(pos, gpriv, i)      \
89         __usbhsg_for_each_uep(1, pos, gpriv, i)
90
91 #define usbhsg_for_each_uep_with_dcp(pos, gpriv, i)     \
92         __usbhsg_for_each_uep(0, pos, gpriv, i)
93
94 #define usbhsg_gadget_to_gpriv(g)\
95         container_of(g, struct usbhsg_gpriv, gadget)
96
97 #define usbhsg_req_to_ureq(r)\
98         container_of(r, struct usbhsg_request, req)
99
100 #define usbhsg_ep_to_uep(e)             container_of(e, struct usbhsg_uep, ep)
101 #define usbhsg_gpriv_to_dev(gp)         usbhs_priv_to_dev((gp)->mod.priv)
102 #define usbhsg_gpriv_to_priv(gp)        ((gp)->mod.priv)
103 #define usbhsg_gpriv_to_dcp(gp)         ((gp)->uep)
104 #define usbhsg_gpriv_to_nth_uep(gp, i)  ((gp)->uep + i)
105 #define usbhsg_uep_to_gpriv(u)          ((u)->gpriv)
106 #define usbhsg_uep_to_pipe(u)           ((u)->pipe)
107 #define usbhsg_pipe_to_uep(p)           ((p)->mod_private)
108 #define usbhsg_is_dcp(u)                ((u) == usbhsg_gpriv_to_dcp((u)->gpriv))
109
110 #define usbhsg_ureq_to_pkt(u)           (&(u)->pkt)
111 #define usbhsg_pkt_to_ureq(i)   \
112         container_of(i, struct usbhsg_request, pkt)
113
114 #define usbhsg_is_not_connected(gp) ((gp)->gadget.speed == USB_SPEED_UNKNOWN)
115
116 /* status */
117 #define usbhsg_status_init(gp)   do {(gp)->status = 0; } while (0)
118 #define usbhsg_status_set(gp, b) (gp->status |=  b)
119 #define usbhsg_status_clr(gp, b) (gp->status &= ~b)
120 #define usbhsg_status_has(gp, b) (gp->status &   b)
121
122 /*
123  *              queue push/pop
124  */
125 static void __usbhsg_queue_pop(struct usbhsg_uep *uep,
126                                struct usbhsg_request *ureq,
127                                int status)
128 {
129         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
130         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
131         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
132         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
133
134         if (pipe)
135                 dev_dbg(dev, "pipe %d : queue pop\n", usbhs_pipe_number(pipe));
136
137         ureq->req.status = status;
138         spin_unlock(usbhs_priv_to_lock(priv));
139         usb_gadget_giveback_request(&uep->ep, &ureq->req);
140         spin_lock(usbhs_priv_to_lock(priv));
141 }
142
143 static void usbhsg_queue_pop(struct usbhsg_uep *uep,
144                              struct usbhsg_request *ureq,
145                              int status)
146 {
147         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
148         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
149         unsigned long flags;
150
151         usbhs_lock(priv, flags);
152         __usbhsg_queue_pop(uep, ureq, status);
153         usbhs_unlock(priv, flags);
154 }
155
156 static void usbhsg_queue_done(struct usbhs_priv *priv, struct usbhs_pkt *pkt)
157 {
158         struct usbhs_pipe *pipe = pkt->pipe;
159         struct usbhsg_uep *uep = usbhsg_pipe_to_uep(pipe);
160         struct usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt);
161         unsigned long flags;
162
163         ureq->req.actual = pkt->actual;
164
165         usbhs_lock(priv, flags);
166         if (uep)
167                 __usbhsg_queue_pop(uep, ureq, 0);
168         usbhs_unlock(priv, flags);
169 }
170
171 static void usbhsg_queue_push(struct usbhsg_uep *uep,
172                               struct usbhsg_request *ureq)
173 {
174         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
175         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
176         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
177         struct usbhs_pkt *pkt = usbhsg_ureq_to_pkt(ureq);
178         struct usb_request *req = &ureq->req;
179
180         req->actual = 0;
181         req->status = -EINPROGRESS;
182         usbhs_pkt_push(pipe, pkt, usbhsg_queue_done,
183                        req->buf, req->length, req->zero, -1);
184         usbhs_pkt_start(pipe);
185
186         dev_dbg(dev, "pipe %d : queue push (%d)\n",
187                 usbhs_pipe_number(pipe),
188                 req->length);
189 }
190
191 /*
192  *              dma map/unmap
193  */
194 static int usbhsg_dma_map_ctrl(struct device *dma_dev, struct usbhs_pkt *pkt,
195                                int map)
196 {
197         struct usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt);
198         struct usb_request *req = &ureq->req;
199         struct usbhs_pipe *pipe = pkt->pipe;
200         struct usbhsg_uep *uep = usbhsg_pipe_to_uep(pipe);
201         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
202         enum dma_data_direction dir;
203         int ret = 0;
204
205         dir = usbhs_pipe_is_dir_host(pipe);
206
207         if (map) {
208                 /* it can not use scatter/gather */
209                 WARN_ON(req->num_sgs);
210
211                 ret = usb_gadget_map_request(&gpriv->gadget, req, dir);
212                 if (ret < 0)
213                         return ret;
214
215                 pkt->dma = req->dma;
216         } else {
217                 usb_gadget_unmap_request(&gpriv->gadget, req, dir);
218         }
219
220         return ret;
221 }
222
223 /*
224  *              USB_TYPE_STANDARD / clear feature functions
225  */
226 static int usbhsg_recip_handler_std_control_done(struct usbhs_priv *priv,
227                                                  struct usbhsg_uep *uep,
228                                                  struct usb_ctrlrequest *ctrl)
229 {
230         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
231         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
232         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(dcp);
233
234         usbhs_dcp_control_transfer_done(pipe);
235
236         return 0;
237 }
238
239 static int usbhsg_recip_handler_std_clear_endpoint(struct usbhs_priv *priv,
240                                                    struct usbhsg_uep *uep,
241                                                    struct usb_ctrlrequest *ctrl)
242 {
243         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
244         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
245
246         if (!usbhsg_status_has(gpriv, USBHSG_STATUS_WEDGE)) {
247                 usbhs_pipe_disable(pipe);
248                 usbhs_pipe_sequence_data0(pipe);
249                 usbhs_pipe_enable(pipe);
250         }
251
252         usbhsg_recip_handler_std_control_done(priv, uep, ctrl);
253
254         usbhs_pkt_start(pipe);
255
256         return 0;
257 }
258
259 static struct usbhsg_recip_handle req_clear_feature = {
260         .name           = "clear feature",
261         .device         = usbhsg_recip_handler_std_control_done,
262         .interface      = usbhsg_recip_handler_std_control_done,
263         .endpoint       = usbhsg_recip_handler_std_clear_endpoint,
264 };
265
266 /*
267  *              USB_TYPE_STANDARD / set feature functions
268  */
269 static int usbhsg_recip_handler_std_set_device(struct usbhs_priv *priv,
270                                                  struct usbhsg_uep *uep,
271                                                  struct usb_ctrlrequest *ctrl)
272 {
273         switch (le16_to_cpu(ctrl->wValue)) {
274         case USB_DEVICE_TEST_MODE:
275                 usbhsg_recip_handler_std_control_done(priv, uep, ctrl);
276                 udelay(100);
277                 usbhs_sys_set_test_mode(priv, le16_to_cpu(ctrl->wIndex >> 8));
278                 break;
279         default:
280                 usbhsg_recip_handler_std_control_done(priv, uep, ctrl);
281                 break;
282         }
283
284         return 0;
285 }
286
287 static int usbhsg_recip_handler_std_set_endpoint(struct usbhs_priv *priv,
288                                                  struct usbhsg_uep *uep,
289                                                  struct usb_ctrlrequest *ctrl)
290 {
291         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
292
293         usbhs_pipe_stall(pipe);
294
295         usbhsg_recip_handler_std_control_done(priv, uep, ctrl);
296
297         return 0;
298 }
299
300 static struct usbhsg_recip_handle req_set_feature = {
301         .name           = "set feature",
302         .device         = usbhsg_recip_handler_std_set_device,
303         .interface      = usbhsg_recip_handler_std_control_done,
304         .endpoint       = usbhsg_recip_handler_std_set_endpoint,
305 };
306
307 /*
308  *              USB_TYPE_STANDARD / get status functions
309  */
310 static void __usbhsg_recip_send_complete(struct usb_ep *ep,
311                                          struct usb_request *req)
312 {
313         struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
314
315         /* free allocated recip-buffer/usb_request */
316         kfree(ureq->pkt.buf);
317         usb_ep_free_request(ep, req);
318 }
319
320 static void __usbhsg_recip_send_status(struct usbhsg_gpriv *gpriv,
321                                        unsigned short status)
322 {
323         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
324         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(dcp);
325         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
326         struct usb_request *req;
327         unsigned short *buf;
328
329         /* alloc new usb_request for recip */
330         req = usb_ep_alloc_request(&dcp->ep, GFP_ATOMIC);
331         if (!req) {
332                 dev_err(dev, "recip request allocation fail\n");
333                 return;
334         }
335
336         /* alloc recip data buffer */
337         buf = kmalloc(sizeof(*buf), GFP_ATOMIC);
338         if (!buf) {
339                 usb_ep_free_request(&dcp->ep, req);
340                 dev_err(dev, "recip data allocation fail\n");
341                 return;
342         }
343
344         /* recip data is status */
345         *buf = cpu_to_le16(status);
346
347         /* allocated usb_request/buffer will be freed */
348         req->complete   = __usbhsg_recip_send_complete;
349         req->buf        = buf;
350         req->length     = sizeof(*buf);
351         req->zero       = 0;
352
353         /* push packet */
354         pipe->handler = &usbhs_fifo_pio_push_handler;
355         usbhsg_queue_push(dcp, usbhsg_req_to_ureq(req));
356 }
357
358 static int usbhsg_recip_handler_std_get_device(struct usbhs_priv *priv,
359                                                struct usbhsg_uep *uep,
360                                                struct usb_ctrlrequest *ctrl)
361 {
362         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
363         unsigned short status = 0;
364
365         if (usbhsg_status_has(gpriv, USBHSG_STATUS_SELF_POWERED))
366                 status = 1 << USB_DEVICE_SELF_POWERED;
367
368         __usbhsg_recip_send_status(gpriv, status);
369
370         return 0;
371 }
372
373 static int usbhsg_recip_handler_std_get_interface(struct usbhs_priv *priv,
374                                                   struct usbhsg_uep *uep,
375                                                   struct usb_ctrlrequest *ctrl)
376 {
377         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
378         unsigned short status = 0;
379
380         __usbhsg_recip_send_status(gpriv, status);
381
382         return 0;
383 }
384
385 static int usbhsg_recip_handler_std_get_endpoint(struct usbhs_priv *priv,
386                                                  struct usbhsg_uep *uep,
387                                                  struct usb_ctrlrequest *ctrl)
388 {
389         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
390         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
391         unsigned short status = 0;
392
393         if (usbhs_pipe_is_stall(pipe))
394                 status = 1 << USB_ENDPOINT_HALT;
395
396         __usbhsg_recip_send_status(gpriv, status);
397
398         return 0;
399 }
400
401 static struct usbhsg_recip_handle req_get_status = {
402         .name           = "get status",
403         .device         = usbhsg_recip_handler_std_get_device,
404         .interface      = usbhsg_recip_handler_std_get_interface,
405         .endpoint       = usbhsg_recip_handler_std_get_endpoint,
406 };
407
408 /*
409  *              USB_TYPE handler
410  */
411 static int usbhsg_recip_run_handle(struct usbhs_priv *priv,
412                                    struct usbhsg_recip_handle *handler,
413                                    struct usb_ctrlrequest *ctrl)
414 {
415         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
416         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
417         struct usbhsg_uep *uep;
418         struct usbhs_pipe *pipe;
419         int recip = ctrl->bRequestType & USB_RECIP_MASK;
420         int nth = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
421         int ret = 0;
422         int (*func)(struct usbhs_priv *priv, struct usbhsg_uep *uep,
423                     struct usb_ctrlrequest *ctrl);
424         char *msg;
425
426         uep = usbhsg_gpriv_to_nth_uep(gpriv, nth);
427         pipe = usbhsg_uep_to_pipe(uep);
428         if (!pipe) {
429                 dev_err(dev, "wrong recip request\n");
430                 return -EINVAL;
431         }
432
433         switch (recip) {
434         case USB_RECIP_DEVICE:
435                 msg     = "DEVICE";
436                 func    = handler->device;
437                 break;
438         case USB_RECIP_INTERFACE:
439                 msg     = "INTERFACE";
440                 func    = handler->interface;
441                 break;
442         case USB_RECIP_ENDPOINT:
443                 msg     = "ENDPOINT";
444                 func    = handler->endpoint;
445                 break;
446         default:
447                 dev_warn(dev, "unsupported RECIP(%d)\n", recip);
448                 func = NULL;
449                 ret = -EINVAL;
450         }
451
452         if (func) {
453                 dev_dbg(dev, "%s (pipe %d :%s)\n", handler->name, nth, msg);
454                 ret = func(priv, uep, ctrl);
455         }
456
457         return ret;
458 }
459
460 /*
461  *              irq functions
462  *
463  * it will be called from usbhs_interrupt
464  */
465 static int usbhsg_irq_dev_state(struct usbhs_priv *priv,
466                                 struct usbhs_irq_state *irq_state)
467 {
468         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
469         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
470
471         gpriv->gadget.speed = usbhs_bus_get_speed(priv);
472
473         dev_dbg(dev, "state = %x : speed : %d\n",
474                 usbhs_status_get_device_state(irq_state),
475                 gpriv->gadget.speed);
476
477         return 0;
478 }
479
480 static int usbhsg_irq_ctrl_stage(struct usbhs_priv *priv,
481                                  struct usbhs_irq_state *irq_state)
482 {
483         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
484         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
485         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(dcp);
486         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
487         struct usb_ctrlrequest ctrl;
488         struct usbhsg_recip_handle *recip_handler = NULL;
489         int stage = usbhs_status_get_ctrl_stage(irq_state);
490         int ret = 0;
491
492         dev_dbg(dev, "stage = %d\n", stage);
493
494         /*
495          * see Manual
496          *
497          *  "Operation"
498          *  - "Interrupt Function"
499          *    - "Control Transfer Stage Transition Interrupt"
500          *      - Fig. "Control Transfer Stage Transitions"
501          */
502
503         switch (stage) {
504         case READ_DATA_STAGE:
505                 pipe->handler = &usbhs_fifo_pio_push_handler;
506                 break;
507         case WRITE_DATA_STAGE:
508                 pipe->handler = &usbhs_fifo_pio_pop_handler;
509                 break;
510         case NODATA_STATUS_STAGE:
511                 pipe->handler = &usbhs_ctrl_stage_end_handler;
512                 break;
513         case READ_STATUS_STAGE:
514         case WRITE_STATUS_STAGE:
515                 usbhs_dcp_control_transfer_done(pipe);
516         default:
517                 return ret;
518         }
519
520         /*
521          * get usb request
522          */
523         usbhs_usbreq_get_val(priv, &ctrl);
524
525         switch (ctrl.bRequestType & USB_TYPE_MASK) {
526         case USB_TYPE_STANDARD:
527                 switch (ctrl.bRequest) {
528                 case USB_REQ_CLEAR_FEATURE:
529                         recip_handler = &req_clear_feature;
530                         break;
531                 case USB_REQ_SET_FEATURE:
532                         recip_handler = &req_set_feature;
533                         break;
534                 case USB_REQ_GET_STATUS:
535                         recip_handler = &req_get_status;
536                         break;
537                 }
538         }
539
540         /*
541          * setup stage / run recip
542          */
543         if (recip_handler)
544                 ret = usbhsg_recip_run_handle(priv, recip_handler, &ctrl);
545         else
546                 ret = gpriv->driver->setup(&gpriv->gadget, &ctrl);
547
548         if (ret < 0)
549                 usbhs_pipe_stall(pipe);
550
551         return ret;
552 }
553
554 /*
555  *
556  *              usb_dcp_ops
557  *
558  */
559 static int usbhsg_pipe_disable(struct usbhsg_uep *uep)
560 {
561         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
562         struct usbhs_pkt *pkt;
563
564         while (1) {
565                 pkt = usbhs_pkt_pop(pipe, NULL);
566                 if (!pkt)
567                         break;
568
569                 usbhsg_queue_pop(uep, usbhsg_pkt_to_ureq(pkt), -ESHUTDOWN);
570         }
571
572         usbhs_pipe_disable(pipe);
573
574         return 0;
575 }
576
577 /*
578  *
579  *              usb_ep_ops
580  *
581  */
582 static int usbhsg_ep_enable(struct usb_ep *ep,
583                          const struct usb_endpoint_descriptor *desc)
584 {
585         struct usbhsg_uep *uep   = usbhsg_ep_to_uep(ep);
586         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
587         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
588         struct usbhs_pipe *pipe;
589         int ret = -EIO;
590
591         /*
592          * if it already have pipe,
593          * nothing to do
594          */
595         if (uep->pipe) {
596                 usbhs_pipe_clear(uep->pipe);
597                 usbhs_pipe_sequence_data0(uep->pipe);
598                 return 0;
599         }
600
601         pipe = usbhs_pipe_malloc(priv,
602                                  usb_endpoint_type(desc),
603                                  usb_endpoint_dir_in(desc));
604         if (pipe) {
605                 uep->pipe               = pipe;
606                 pipe->mod_private       = uep;
607
608                 /* set epnum / maxp */
609                 usbhs_pipe_config_update(pipe, 0,
610                                          usb_endpoint_num(desc),
611                                          usb_endpoint_maxp(desc));
612
613                 /*
614                  * usbhs_fifo_dma_push/pop_handler try to
615                  * use dmaengine if possible.
616                  * It will use pio handler if impossible.
617                  */
618                 if (usb_endpoint_dir_in(desc))
619                         pipe->handler = &usbhs_fifo_dma_push_handler;
620                 else
621                         pipe->handler = &usbhs_fifo_dma_pop_handler;
622
623                 ret = 0;
624         }
625
626         return ret;
627 }
628
629 static int usbhsg_ep_disable(struct usb_ep *ep)
630 {
631         struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
632         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
633
634         if (!pipe)
635                 return -EINVAL;
636
637         usbhsg_pipe_disable(uep);
638         usbhs_pipe_free(pipe);
639
640         uep->pipe->mod_private  = NULL;
641         uep->pipe               = NULL;
642
643         return 0;
644 }
645
646 static struct usb_request *usbhsg_ep_alloc_request(struct usb_ep *ep,
647                                                    gfp_t gfp_flags)
648 {
649         struct usbhsg_request *ureq;
650
651         ureq = kzalloc(sizeof *ureq, gfp_flags);
652         if (!ureq)
653                 return NULL;
654
655         usbhs_pkt_init(usbhsg_ureq_to_pkt(ureq));
656
657         return &ureq->req;
658 }
659
660 static void usbhsg_ep_free_request(struct usb_ep *ep,
661                                    struct usb_request *req)
662 {
663         struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
664
665         WARN_ON(!list_empty(&ureq->pkt.node));
666         kfree(ureq);
667 }
668
669 static int usbhsg_ep_queue(struct usb_ep *ep, struct usb_request *req,
670                           gfp_t gfp_flags)
671 {
672         struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
673         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
674         struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
675         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
676
677         /* param check */
678         if (usbhsg_is_not_connected(gpriv)      ||
679             unlikely(!gpriv->driver)            ||
680             unlikely(!pipe))
681                 return -ESHUTDOWN;
682
683         usbhsg_queue_push(uep, ureq);
684
685         return 0;
686 }
687
688 static int usbhsg_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
689 {
690         struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
691         struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
692         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
693
694         if (pipe)
695                 usbhs_pkt_pop(pipe, usbhsg_ureq_to_pkt(ureq));
696
697         /*
698          * To dequeue a request, this driver should call the usbhsg_queue_pop()
699          * even if the pipe is NULL.
700          */
701         usbhsg_queue_pop(uep, ureq, -ECONNRESET);
702
703         return 0;
704 }
705
706 static int __usbhsg_ep_set_halt_wedge(struct usb_ep *ep, int halt, int wedge)
707 {
708         struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
709         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
710         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
711         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
712         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
713         unsigned long flags;
714
715         usbhsg_pipe_disable(uep);
716
717         dev_dbg(dev, "set halt %d (pipe %d)\n",
718                 halt, usbhs_pipe_number(pipe));
719
720         /********************  spin lock ********************/
721         usbhs_lock(priv, flags);
722
723         if (halt)
724                 usbhs_pipe_stall(pipe);
725         else
726                 usbhs_pipe_disable(pipe);
727
728         if (halt && wedge)
729                 usbhsg_status_set(gpriv, USBHSG_STATUS_WEDGE);
730         else
731                 usbhsg_status_clr(gpriv, USBHSG_STATUS_WEDGE);
732
733         usbhs_unlock(priv, flags);
734         /********************  spin unlock ******************/
735
736         return 0;
737 }
738
739 static int usbhsg_ep_set_halt(struct usb_ep *ep, int value)
740 {
741         return __usbhsg_ep_set_halt_wedge(ep, value, 0);
742 }
743
744 static int usbhsg_ep_set_wedge(struct usb_ep *ep)
745 {
746         return __usbhsg_ep_set_halt_wedge(ep, 1, 1);
747 }
748
749 static struct usb_ep_ops usbhsg_ep_ops = {
750         .enable         = usbhsg_ep_enable,
751         .disable        = usbhsg_ep_disable,
752
753         .alloc_request  = usbhsg_ep_alloc_request,
754         .free_request   = usbhsg_ep_free_request,
755
756         .queue          = usbhsg_ep_queue,
757         .dequeue        = usbhsg_ep_dequeue,
758
759         .set_halt       = usbhsg_ep_set_halt,
760         .set_wedge      = usbhsg_ep_set_wedge,
761 };
762
763 /*
764  *              pullup control
765  */
766 static int usbhsg_can_pullup(struct usbhs_priv *priv)
767 {
768         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
769
770         return gpriv->driver &&
771                usbhsg_status_has(gpriv, USBHSG_STATUS_SOFT_CONNECT);
772 }
773
774 static void usbhsg_update_pullup(struct usbhs_priv *priv)
775 {
776         if (usbhsg_can_pullup(priv))
777                 usbhs_sys_function_pullup(priv, 1);
778         else
779                 usbhs_sys_function_pullup(priv, 0);
780 }
781
782 /*
783  *              usb module start/end
784  */
785 static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
786 {
787         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
788         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
789         struct usbhs_mod *mod = usbhs_mod_get_current(priv);
790         struct device *dev = usbhs_priv_to_dev(priv);
791         unsigned long flags;
792         int ret = 0;
793
794         /********************  spin lock ********************/
795         usbhs_lock(priv, flags);
796
797         usbhsg_status_set(gpriv, status);
798         if (!(usbhsg_status_has(gpriv, USBHSG_STATUS_STARTED) &&
799               usbhsg_status_has(gpriv, USBHSG_STATUS_REGISTERD)))
800                 ret = -1; /* not ready */
801
802         usbhs_unlock(priv, flags);
803         /********************  spin unlock ********************/
804
805         if (ret < 0)
806                 return 0; /* not ready is not error */
807
808         /*
809          * enable interrupt and systems if ready
810          */
811         dev_dbg(dev, "start gadget\n");
812
813         /*
814          * pipe initialize and enable DCP
815          */
816         usbhs_fifo_init(priv);
817         usbhs_pipe_init(priv,
818                         usbhsg_dma_map_ctrl);
819
820         /* dcp init instead of usbhsg_ep_enable() */
821         dcp->pipe               = usbhs_dcp_malloc(priv);
822         dcp->pipe->mod_private  = dcp;
823         usbhs_pipe_config_update(dcp->pipe, 0, 0, 64);
824
825         /*
826          * system config enble
827          * - HI speed
828          * - function
829          * - usb module
830          */
831         usbhs_sys_function_ctrl(priv, 1);
832         usbhsg_update_pullup(priv);
833
834         /*
835          * enable irq callback
836          */
837         mod->irq_dev_state      = usbhsg_irq_dev_state;
838         mod->irq_ctrl_stage     = usbhsg_irq_ctrl_stage;
839         usbhs_irq_callback_update(priv, mod);
840
841         return 0;
842 }
843
844 static int usbhsg_try_stop(struct usbhs_priv *priv, u32 status)
845 {
846         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
847         struct usbhs_mod *mod = usbhs_mod_get_current(priv);
848         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
849         struct device *dev = usbhs_priv_to_dev(priv);
850         unsigned long flags;
851         int ret = 0;
852
853         /********************  spin lock ********************/
854         usbhs_lock(priv, flags);
855
856         usbhsg_status_clr(gpriv, status);
857         if (!usbhsg_status_has(gpriv, USBHSG_STATUS_STARTED) &&
858             !usbhsg_status_has(gpriv, USBHSG_STATUS_REGISTERD))
859                 ret = -1; /* already done */
860
861         usbhs_unlock(priv, flags);
862         /********************  spin unlock ********************/
863
864         if (ret < 0)
865                 return 0; /* already done is not error */
866
867         /*
868          * disable interrupt and systems if 1st try
869          */
870         usbhs_fifo_quit(priv);
871
872         /* disable all irq */
873         mod->irq_dev_state      = NULL;
874         mod->irq_ctrl_stage     = NULL;
875         usbhs_irq_callback_update(priv, mod);
876
877         gpriv->gadget.speed = USB_SPEED_UNKNOWN;
878
879         /* disable sys */
880         usbhs_sys_set_test_mode(priv, 0);
881         usbhs_sys_function_ctrl(priv, 0);
882
883         usbhsg_ep_disable(&dcp->ep);
884
885         dev_dbg(dev, "stop gadget\n");
886
887         return 0;
888 }
889
890 /*
891  * VBUS provided by the PHY
892  */
893 static int usbhsm_phy_get_vbus(struct platform_device *pdev)
894 {
895         struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev);
896         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
897
898         return  gpriv->vbus_active;
899 }
900
901 static void usbhs_mod_phy_mode(struct usbhs_priv *priv)
902 {
903         struct usbhs_mod_info *info = &priv->mod_info;
904
905         info->irq_vbus          = NULL;
906         priv->pfunc.get_vbus    = usbhsm_phy_get_vbus;
907
908         usbhs_irq_callback_update(priv, NULL);
909 }
910
911 /*
912  *
913  *              linux usb function
914  *
915  */
916 static int usbhsg_gadget_start(struct usb_gadget *gadget,
917                 struct usb_gadget_driver *driver)
918 {
919         struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
920         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
921         struct device *dev = usbhs_priv_to_dev(priv);
922         int ret;
923
924         if (!driver             ||
925             !driver->setup      ||
926             driver->max_speed < USB_SPEED_FULL)
927                 return -EINVAL;
928
929         /* connect to bus through transceiver */
930         if (!IS_ERR_OR_NULL(gpriv->transceiver)) {
931                 ret = otg_set_peripheral(gpriv->transceiver->otg,
932                                         &gpriv->gadget);
933                 if (ret) {
934                         dev_err(dev, "%s: can't bind to transceiver\n",
935                                 gpriv->gadget.name);
936                         return ret;
937                 }
938
939                 /* get vbus using phy versions */
940                 usbhs_mod_phy_mode(priv);
941         }
942
943         /* first hook up the driver ... */
944         gpriv->driver = driver;
945
946         return usbhsg_try_start(priv, USBHSG_STATUS_REGISTERD);
947 }
948
949 static int usbhsg_gadget_stop(struct usb_gadget *gadget)
950 {
951         struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
952         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
953
954         usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD);
955
956         if (!IS_ERR_OR_NULL(gpriv->transceiver))
957                 otg_set_peripheral(gpriv->transceiver->otg, NULL);
958
959         gpriv->driver = NULL;
960
961         return 0;
962 }
963
964 /*
965  *              usb gadget ops
966  */
967 static int usbhsg_get_frame(struct usb_gadget *gadget)
968 {
969         struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
970         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
971
972         return usbhs_frame_get_num(priv);
973 }
974
975 static int usbhsg_pullup(struct usb_gadget *gadget, int is_on)
976 {
977         struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
978         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
979         unsigned long flags;
980
981         usbhs_lock(priv, flags);
982         if (is_on)
983                 usbhsg_status_set(gpriv, USBHSG_STATUS_SOFT_CONNECT);
984         else
985                 usbhsg_status_clr(gpriv, USBHSG_STATUS_SOFT_CONNECT);
986         usbhsg_update_pullup(priv);
987         usbhs_unlock(priv, flags);
988
989         return 0;
990 }
991
992 static int usbhsg_set_selfpowered(struct usb_gadget *gadget, int is_self)
993 {
994         struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
995
996         if (is_self)
997                 usbhsg_status_set(gpriv, USBHSG_STATUS_SELF_POWERED);
998         else
999                 usbhsg_status_clr(gpriv, USBHSG_STATUS_SELF_POWERED);
1000
1001         gadget->is_selfpowered = (is_self != 0);
1002
1003         return 0;
1004 }
1005
1006 static int usbhsg_vbus_session(struct usb_gadget *gadget, int is_active)
1007 {
1008         struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
1009         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
1010         struct platform_device *pdev = usbhs_priv_to_pdev(priv);
1011
1012         gpriv->vbus_active = !!is_active;
1013
1014         renesas_usbhs_call_notify_hotplug(pdev);
1015
1016         return 0;
1017 }
1018
1019 static const struct usb_gadget_ops usbhsg_gadget_ops = {
1020         .get_frame              = usbhsg_get_frame,
1021         .set_selfpowered        = usbhsg_set_selfpowered,
1022         .udc_start              = usbhsg_gadget_start,
1023         .udc_stop               = usbhsg_gadget_stop,
1024         .pullup                 = usbhsg_pullup,
1025         .vbus_session           = usbhsg_vbus_session,
1026 };
1027
1028 static int usbhsg_start(struct usbhs_priv *priv)
1029 {
1030         return usbhsg_try_start(priv, USBHSG_STATUS_STARTED);
1031 }
1032
1033 static int usbhsg_stop(struct usbhs_priv *priv)
1034 {
1035         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
1036
1037         /* cable disconnect */
1038         if (gpriv->driver &&
1039             gpriv->driver->disconnect)
1040                 gpriv->driver->disconnect(&gpriv->gadget);
1041
1042         return usbhsg_try_stop(priv, USBHSG_STATUS_STARTED);
1043 }
1044
1045 int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
1046 {
1047         struct usbhsg_gpriv *gpriv;
1048         struct usbhsg_uep *uep;
1049         struct device *dev = usbhs_priv_to_dev(priv);
1050         struct renesas_usbhs_driver_pipe_config *pipe_configs =
1051                                         usbhs_get_dparam(priv, pipe_configs);
1052         int pipe_size = usbhs_get_dparam(priv, pipe_size);
1053         int i;
1054         int ret;
1055
1056         gpriv = kzalloc(sizeof(struct usbhsg_gpriv), GFP_KERNEL);
1057         if (!gpriv) {
1058                 dev_err(dev, "Could not allocate gadget priv\n");
1059                 return -ENOMEM;
1060         }
1061
1062         uep = kzalloc(sizeof(struct usbhsg_uep) * pipe_size, GFP_KERNEL);
1063         if (!uep) {
1064                 dev_err(dev, "Could not allocate ep\n");
1065                 ret = -ENOMEM;
1066                 goto usbhs_mod_gadget_probe_err_gpriv;
1067         }
1068
1069         gpriv->transceiver = usb_get_phy(USB_PHY_TYPE_UNDEFINED);
1070         dev_info(dev, "%stransceiver found\n",
1071                  gpriv->transceiver ? "" : "no ");
1072
1073         /*
1074          * CAUTION
1075          *
1076          * There is no guarantee that it is possible to access usb module here.
1077          * Don't accesses to it.
1078          * The accesse will be enable after "usbhsg_start"
1079          */
1080
1081         /*
1082          * register itself
1083          */
1084         usbhs_mod_register(priv, &gpriv->mod, USBHS_GADGET);
1085
1086         /* init gpriv */
1087         gpriv->mod.name         = "gadget";
1088         gpriv->mod.start        = usbhsg_start;
1089         gpriv->mod.stop         = usbhsg_stop;
1090         gpriv->uep              = uep;
1091         gpriv->uep_size         = pipe_size;
1092         usbhsg_status_init(gpriv);
1093
1094         /*
1095          * init gadget
1096          */
1097         gpriv->gadget.dev.parent        = dev;
1098         gpriv->gadget.name              = "renesas_usbhs_udc";
1099         gpriv->gadget.ops               = &usbhsg_gadget_ops;
1100         gpriv->gadget.max_speed         = USB_SPEED_HIGH;
1101
1102         INIT_LIST_HEAD(&gpriv->gadget.ep_list);
1103
1104         /*
1105          * init usb_ep
1106          */
1107         usbhsg_for_each_uep_with_dcp(uep, gpriv, i) {
1108                 uep->gpriv      = gpriv;
1109                 uep->pipe       = NULL;
1110                 snprintf(uep->ep_name, EP_NAME_SIZE, "ep%d", i);
1111
1112                 uep->ep.name            = uep->ep_name;
1113                 uep->ep.ops             = &usbhsg_ep_ops;
1114                 INIT_LIST_HEAD(&uep->ep.ep_list);
1115
1116                 /* init DCP */
1117                 if (usbhsg_is_dcp(uep)) {
1118                         gpriv->gadget.ep0 = &uep->ep;
1119                         usb_ep_set_maxpacket_limit(&uep->ep, 64);
1120                         uep->ep.caps.type_control = true;
1121                 } else {
1122                         /* init normal pipe */
1123                         if (pipe_configs[i].type == USB_ENDPOINT_XFER_ISOC)
1124                                 uep->ep.caps.type_iso = true;
1125                         if (pipe_configs[i].type == USB_ENDPOINT_XFER_BULK)
1126                                 uep->ep.caps.type_bulk = true;
1127                         if (pipe_configs[i].type == USB_ENDPOINT_XFER_INT)
1128                                 uep->ep.caps.type_int = true;
1129                         usb_ep_set_maxpacket_limit(&uep->ep,
1130                                                    pipe_configs[i].bufsize);
1131                         list_add_tail(&uep->ep.ep_list, &gpriv->gadget.ep_list);
1132                 }
1133                 uep->ep.caps.dir_in = true;
1134                 uep->ep.caps.dir_out = true;
1135         }
1136
1137         ret = usb_add_gadget_udc(dev, &gpriv->gadget);
1138         if (ret)
1139                 goto err_add_udc;
1140
1141
1142         dev_info(dev, "gadget probed\n");
1143
1144         return 0;
1145
1146 err_add_udc:
1147         kfree(gpriv->uep);
1148
1149 usbhs_mod_gadget_probe_err_gpriv:
1150         kfree(gpriv);
1151
1152         return ret;
1153 }
1154
1155 void usbhs_mod_gadget_remove(struct usbhs_priv *priv)
1156 {
1157         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
1158
1159         usb_del_gadget_udc(&gpriv->gadget);
1160
1161         kfree(gpriv->uep);
1162         kfree(gpriv);
1163 }