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