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