linux/drivers/usb/renesas_usbhs/mod_gadget.c
<<
>>
Prefs
   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 */
  30struct usbhsg_request {
  31        struct usb_request      req;
  32        struct usbhs_pkt        pkt;
  33};
  34
  35#define EP_NAME_SIZE 8
  36struct usbhsg_gpriv;
  37struct 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
  47struct 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
  66struct 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 */
 126static 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
 144static 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
 157static 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
 172static 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 */
 195static 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 */
 225static 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
 238static 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
 258static 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 */
 268static 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
 286static 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
 299static 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 */
 309static 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
 319static 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
 356static 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
 371static 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
 383static 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
 399static 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 */
 409static 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 */
 463static 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
 469        gpriv->gadget.speed = usbhs_bus_get_speed(priv);
 470
 471        dev_dbg(dev, "state = %x : speed : %d\n",
 472                usbhs_status_get_device_state(irq_state),
 473                gpriv->gadget.speed);
 474
 475        return 0;
 476}
 477
 478static int usbhsg_irq_ctrl_stage(struct usbhs_priv *priv,
 479                                 struct usbhs_irq_state *irq_state)
 480{
 481        struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
 482        struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
 483        struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(dcp);
 484        struct device *dev = usbhsg_gpriv_to_dev(gpriv);
 485        struct usb_ctrlrequest ctrl;
 486        struct usbhsg_recip_handle *recip_handler = NULL;
 487        int stage = usbhs_status_get_ctrl_stage(irq_state);
 488        int ret = 0;
 489
 490        dev_dbg(dev, "stage = %d\n", stage);
 491
 492        /*
 493         * see Manual
 494         *
 495         *  "Operation"
 496         *  - "Interrupt Function"
 497         *    - "Control Transfer Stage Transition Interrupt"
 498         *      - Fig. "Control Transfer Stage Transitions"
 499         */
 500
 501        switch (stage) {
 502        case READ_DATA_STAGE:
 503                pipe->handler = &usbhs_fifo_pio_push_handler;
 504                break;
 505        case WRITE_DATA_STAGE:
 506                pipe->handler = &usbhs_fifo_pio_pop_handler;
 507                break;
 508        case NODATA_STATUS_STAGE:
 509                pipe->handler = &usbhs_ctrl_stage_end_handler;
 510                break;
 511        case READ_STATUS_STAGE:
 512        case WRITE_STATUS_STAGE:
 513                usbhs_dcp_control_transfer_done(pipe);
 514        default:
 515                return ret;
 516        }
 517
 518        /*
 519         * get usb request
 520         */
 521        usbhs_usbreq_get_val(priv, &ctrl);
 522
 523        switch (ctrl.bRequestType & USB_TYPE_MASK) {
 524        case USB_TYPE_STANDARD:
 525                switch (ctrl.bRequest) {
 526                case USB_REQ_CLEAR_FEATURE:
 527                        recip_handler = &req_clear_feature;
 528                        break;
 529                case USB_REQ_SET_FEATURE:
 530                        recip_handler = &req_set_feature;
 531                        break;
 532                case USB_REQ_GET_STATUS:
 533                        recip_handler = &req_get_status;
 534                        break;
 535                }
 536        }
 537
 538        /*
 539         * setup stage / run recip
 540         */
 541        if (recip_handler)
 542                ret = usbhsg_recip_run_handle(priv, recip_handler, &ctrl);
 543        else
 544                ret = gpriv->driver->setup(&gpriv->gadget, &ctrl);
 545
 546        if (ret < 0)
 547                usbhs_pipe_stall(pipe);
 548
 549        return ret;
 550}
 551
 552/*
 553 *
 554 *              usb_dcp_ops
 555 *
 556 */
 557static int usbhsg_pipe_disable(struct usbhsg_uep *uep)
 558{
 559        struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
 560        struct usbhs_pkt *pkt;
 561
 562        while (1) {
 563                pkt = usbhs_pkt_pop(pipe, NULL);
 564                if (!pkt)
 565                        break;
 566
 567                usbhsg_queue_pop(uep, usbhsg_pkt_to_ureq(pkt), -ESHUTDOWN);
 568        }
 569
 570        usbhs_pipe_disable(pipe);
 571
 572        return 0;
 573}
 574
 575/*
 576 *
 577 *              usb_ep_ops
 578 *
 579 */
 580static int usbhsg_ep_enable(struct usb_ep *ep,
 581                         const struct usb_endpoint_descriptor *desc)
 582{
 583        struct usbhsg_uep *uep   = usbhsg_ep_to_uep(ep);
 584        struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
 585        struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
 586        struct usbhs_pipe *pipe;
 587        int ret = -EIO;
 588        unsigned long flags;
 589
 590        usbhs_lock(priv, flags);
 591
 592        /*
 593         * if it already have pipe,
 594         * nothing to do
 595         */
 596        if (uep->pipe) {
 597                usbhs_pipe_clear(uep->pipe);
 598                usbhs_pipe_sequence_data0(uep->pipe);
 599                ret = 0;
 600                goto usbhsg_ep_enable_end;
 601        }
 602
 603        pipe = usbhs_pipe_malloc(priv,
 604                                 usb_endpoint_type(desc),
 605                                 usb_endpoint_dir_in(desc));
 606        if (pipe) {
 607                uep->pipe               = pipe;
 608                pipe->mod_private       = uep;
 609
 610                /* set epnum / maxp */
 611                usbhs_pipe_config_update(pipe, 0,
 612                                         usb_endpoint_num(desc),
 613                                         usb_endpoint_maxp(desc));
 614
 615                /*
 616                 * usbhs_fifo_dma_push/pop_handler try to
 617                 * use dmaengine if possible.
 618                 * It will use pio handler if impossible.
 619                 */
 620                if (usb_endpoint_dir_in(desc)) {
 621                        pipe->handler = &usbhs_fifo_dma_push_handler;
 622                } else {
 623                        pipe->handler = &usbhs_fifo_dma_pop_handler;
 624                        usbhs_xxxsts_clear(priv, BRDYSTS,
 625                                           usbhs_pipe_number(pipe));
 626                }
 627
 628                ret = 0;
 629        }
 630
 631usbhsg_ep_enable_end:
 632        usbhs_unlock(priv, flags);
 633
 634        return ret;
 635}
 636
 637static int usbhsg_ep_disable(struct usb_ep *ep)
 638{
 639        struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
 640        struct usbhs_pipe *pipe;
 641        unsigned long flags;
 642
 643        spin_lock_irqsave(&uep->lock, flags);
 644        pipe = usbhsg_uep_to_pipe(uep);
 645        if (!pipe)
 646                goto out;
 647
 648        usbhsg_pipe_disable(uep);
 649        usbhs_pipe_free(pipe);
 650
 651        uep->pipe->mod_private  = NULL;
 652        uep->pipe               = NULL;
 653
 654out:
 655        spin_unlock_irqrestore(&uep->lock, flags);
 656
 657        return 0;
 658}
 659
 660static struct usb_request *usbhsg_ep_alloc_request(struct usb_ep *ep,
 661                                                   gfp_t gfp_flags)
 662{
 663        struct usbhsg_request *ureq;
 664
 665        ureq = kzalloc(sizeof *ureq, gfp_flags);
 666        if (!ureq)
 667                return NULL;
 668
 669        usbhs_pkt_init(usbhsg_ureq_to_pkt(ureq));
 670
 671        return &ureq->req;
 672}
 673
 674static void usbhsg_ep_free_request(struct usb_ep *ep,
 675                                   struct usb_request *req)
 676{
 677        struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
 678
 679        WARN_ON(!list_empty(&ureq->pkt.node));
 680        kfree(ureq);
 681}
 682
 683static int usbhsg_ep_queue(struct usb_ep *ep, struct usb_request *req,
 684                          gfp_t gfp_flags)
 685{
 686        struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
 687        struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
 688        struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
 689        struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
 690
 691        /* param check */
 692        if (usbhsg_is_not_connected(gpriv)      ||
 693            unlikely(!gpriv->driver)            ||
 694            unlikely(!pipe))
 695                return -ESHUTDOWN;
 696
 697        usbhsg_queue_push(uep, ureq);
 698
 699        return 0;
 700}
 701
 702static int usbhsg_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
 703{
 704        struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
 705        struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
 706        struct usbhs_pipe *pipe;
 707        unsigned long flags;
 708
 709        spin_lock_irqsave(&uep->lock, flags);
 710        pipe = usbhsg_uep_to_pipe(uep);
 711        if (pipe)
 712                usbhs_pkt_pop(pipe, usbhsg_ureq_to_pkt(ureq));
 713
 714        /*
 715         * To dequeue a request, this driver should call the usbhsg_queue_pop()
 716         * even if the pipe is NULL.
 717         */
 718        usbhsg_queue_pop(uep, ureq, -ECONNRESET);
 719        spin_unlock_irqrestore(&uep->lock, flags);
 720
 721        return 0;
 722}
 723
 724static int __usbhsg_ep_set_halt_wedge(struct usb_ep *ep, int halt, int wedge)
 725{
 726        struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
 727        struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
 728        struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
 729        struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
 730        struct device *dev = usbhsg_gpriv_to_dev(gpriv);
 731        unsigned long flags;
 732
 733        usbhsg_pipe_disable(uep);
 734
 735        dev_dbg(dev, "set halt %d (pipe %d)\n",
 736                halt, usbhs_pipe_number(pipe));
 737
 738        /********************  spin lock ********************/
 739        usbhs_lock(priv, flags);
 740
 741        if (halt)
 742                usbhs_pipe_stall(pipe);
 743        else
 744                usbhs_pipe_disable(pipe);
 745
 746        if (halt && wedge)
 747                usbhsg_status_set(gpriv, USBHSG_STATUS_WEDGE);
 748        else
 749                usbhsg_status_clr(gpriv, USBHSG_STATUS_WEDGE);
 750
 751        usbhs_unlock(priv, flags);
 752        /********************  spin unlock ******************/
 753
 754        return 0;
 755}
 756
 757static int usbhsg_ep_set_halt(struct usb_ep *ep, int value)
 758{
 759        return __usbhsg_ep_set_halt_wedge(ep, value, 0);
 760}
 761
 762static int usbhsg_ep_set_wedge(struct usb_ep *ep)
 763{
 764        return __usbhsg_ep_set_halt_wedge(ep, 1, 1);
 765}
 766
 767static const struct usb_ep_ops usbhsg_ep_ops = {
 768        .enable         = usbhsg_ep_enable,
 769        .disable        = usbhsg_ep_disable,
 770
 771        .alloc_request  = usbhsg_ep_alloc_request,
 772        .free_request   = usbhsg_ep_free_request,
 773
 774        .queue          = usbhsg_ep_queue,
 775        .dequeue        = usbhsg_ep_dequeue,
 776
 777        .set_halt       = usbhsg_ep_set_halt,
 778        .set_wedge      = usbhsg_ep_set_wedge,
 779};
 780
 781/*
 782 *              pullup control
 783 */
 784static int usbhsg_can_pullup(struct usbhs_priv *priv)
 785{
 786        struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
 787
 788        return gpriv->driver &&
 789               usbhsg_status_has(gpriv, USBHSG_STATUS_SOFT_CONNECT);
 790}
 791
 792static void usbhsg_update_pullup(struct usbhs_priv *priv)
 793{
 794        if (usbhsg_can_pullup(priv))
 795                usbhs_sys_function_pullup(priv, 1);
 796        else
 797                usbhs_sys_function_pullup(priv, 0);
 798}
 799
 800/*
 801 *              usb module start/end
 802 */
 803static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
 804{
 805        struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
 806        struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
 807        struct usbhs_mod *mod = usbhs_mod_get_current(priv);
 808        struct device *dev = usbhs_priv_to_dev(priv);
 809        unsigned long flags;
 810        int ret = 0;
 811
 812        /********************  spin lock ********************/
 813        usbhs_lock(priv, flags);
 814
 815        usbhsg_status_set(gpriv, status);
 816        if (!(usbhsg_status_has(gpriv, USBHSG_STATUS_STARTED) &&
 817              usbhsg_status_has(gpriv, USBHSG_STATUS_REGISTERD)))
 818                ret = -1; /* not ready */
 819
 820        usbhs_unlock(priv, flags);
 821        /********************  spin unlock ********************/
 822
 823        if (ret < 0)
 824                return 0; /* not ready is not error */
 825
 826        /*
 827         * enable interrupt and systems if ready
 828         */
 829        dev_dbg(dev, "start gadget\n");
 830
 831        /*
 832         * pipe initialize and enable DCP
 833         */
 834        usbhs_fifo_init(priv);
 835        usbhs_pipe_init(priv,
 836                        usbhsg_dma_map_ctrl);
 837
 838        /* dcp init instead of usbhsg_ep_enable() */
 839        dcp->pipe               = usbhs_dcp_malloc(priv);
 840        dcp->pipe->mod_private  = dcp;
 841        usbhs_pipe_config_update(dcp->pipe, 0, 0, 64);
 842
 843        /*
 844         * system config enble
 845         * - HI speed
 846         * - function
 847         * - usb module
 848         */
 849        usbhs_sys_function_ctrl(priv, 1);
 850        usbhsg_update_pullup(priv);
 851
 852        /*
 853         * enable irq callback
 854         */
 855        mod->irq_dev_state      = usbhsg_irq_dev_state;
 856        mod->irq_ctrl_stage     = usbhsg_irq_ctrl_stage;
 857        usbhs_irq_callback_update(priv, mod);
 858
 859        return 0;
 860}
 861
 862static int usbhsg_try_stop(struct usbhs_priv *priv, u32 status)
 863{
 864        struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
 865        struct usbhs_mod *mod = usbhs_mod_get_current(priv);
 866        struct usbhsg_uep *uep;
 867        struct device *dev = usbhs_priv_to_dev(priv);
 868        unsigned long flags;
 869        int ret = 0, i;
 870
 871        /********************  spin lock ********************/
 872        usbhs_lock(priv, flags);
 873
 874        usbhsg_status_clr(gpriv, status);
 875        if (!usbhsg_status_has(gpriv, USBHSG_STATUS_STARTED) &&
 876            !usbhsg_status_has(gpriv, USBHSG_STATUS_REGISTERD))
 877                ret = -1; /* already done */
 878
 879        usbhs_unlock(priv, flags);
 880        /********************  spin unlock ********************/
 881
 882        if (ret < 0)
 883                return 0; /* already done is not error */
 884
 885        /*
 886         * disable interrupt and systems if 1st try
 887         */
 888        usbhs_fifo_quit(priv);
 889
 890        /* disable all irq */
 891        mod->irq_dev_state      = NULL;
 892        mod->irq_ctrl_stage     = NULL;
 893        usbhs_irq_callback_update(priv, mod);
 894
 895        gpriv->gadget.speed = USB_SPEED_UNKNOWN;
 896
 897        /* disable sys */
 898        usbhs_sys_set_test_mode(priv, 0);
 899        usbhs_sys_function_ctrl(priv, 0);
 900
 901        /* disable all eps */
 902        usbhsg_for_each_uep_with_dcp(uep, gpriv, i)
 903                usbhsg_ep_disable(&uep->ep);
 904
 905        dev_dbg(dev, "stop gadget\n");
 906
 907        return 0;
 908}
 909
 910/*
 911 * VBUS provided by the PHY
 912 */
 913static int usbhsm_phy_get_vbus(struct platform_device *pdev)
 914{
 915        struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev);
 916        struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
 917
 918        return  gpriv->vbus_active;
 919}
 920
 921static void usbhs_mod_phy_mode(struct usbhs_priv *priv)
 922{
 923        struct usbhs_mod_info *info = &priv->mod_info;
 924
 925        info->irq_vbus          = NULL;
 926        priv->pfunc.get_vbus    = usbhsm_phy_get_vbus;
 927
 928        usbhs_irq_callback_update(priv, NULL);
 929}
 930
 931/*
 932 *
 933 *              linux usb function
 934 *
 935 */
 936static int usbhsg_gadget_start(struct usb_gadget *gadget,
 937                struct usb_gadget_driver *driver)
 938{
 939        struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
 940        struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
 941        struct device *dev = usbhs_priv_to_dev(priv);
 942        int ret;
 943
 944        if (!driver             ||
 945            !driver->setup      ||
 946            driver->max_speed < USB_SPEED_FULL)
 947                return -EINVAL;
 948
 949        /* connect to bus through transceiver */
 950        if (!IS_ERR_OR_NULL(gpriv->transceiver)) {
 951                ret = otg_set_peripheral(gpriv->transceiver->otg,
 952                                        &gpriv->gadget);
 953                if (ret) {
 954                        dev_err(dev, "%s: can't bind to transceiver\n",
 955                                gpriv->gadget.name);
 956                        return ret;
 957                }
 958
 959                /* get vbus using phy versions */
 960                usbhs_mod_phy_mode(priv);
 961        }
 962
 963        /* first hook up the driver ... */
 964        gpriv->driver = driver;
 965
 966        return usbhsg_try_start(priv, USBHSG_STATUS_REGISTERD);
 967}
 968
 969static int usbhsg_gadget_stop(struct usb_gadget *gadget)
 970{
 971        struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
 972        struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
 973
 974        usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD);
 975
 976        if (!IS_ERR_OR_NULL(gpriv->transceiver))
 977                otg_set_peripheral(gpriv->transceiver->otg, NULL);
 978
 979        gpriv->driver = NULL;
 980
 981        return 0;
 982}
 983
 984/*
 985 *              usb gadget ops
 986 */
 987static int usbhsg_get_frame(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        return usbhs_frame_get_num(priv);
 993}
 994
 995static int usbhsg_pullup(struct usb_gadget *gadget, int is_on)
 996{
 997        struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
 998        struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
 999        unsigned long flags;
1000
1001        usbhs_lock(priv, flags);
1002        if (is_on)
1003                usbhsg_status_set(gpriv, USBHSG_STATUS_SOFT_CONNECT);
1004        else
1005                usbhsg_status_clr(gpriv, USBHSG_STATUS_SOFT_CONNECT);
1006        usbhsg_update_pullup(priv);
1007        usbhs_unlock(priv, flags);
1008
1009        return 0;
1010}
1011
1012static int usbhsg_set_selfpowered(struct usb_gadget *gadget, int is_self)
1013{
1014        struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
1015
1016        if (is_self)
1017                usbhsg_status_set(gpriv, USBHSG_STATUS_SELF_POWERED);
1018        else
1019                usbhsg_status_clr(gpriv, USBHSG_STATUS_SELF_POWERED);
1020
1021        gadget->is_selfpowered = (is_self != 0);
1022
1023        return 0;
1024}
1025
1026static int usbhsg_vbus_session(struct usb_gadget *gadget, int is_active)
1027{
1028        struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
1029        struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
1030        struct platform_device *pdev = usbhs_priv_to_pdev(priv);
1031
1032        gpriv->vbus_active = !!is_active;
1033
1034        renesas_usbhs_call_notify_hotplug(pdev);
1035
1036        return 0;
1037}
1038
1039static const struct usb_gadget_ops usbhsg_gadget_ops = {
1040        .get_frame              = usbhsg_get_frame,
1041        .set_selfpowered        = usbhsg_set_selfpowered,
1042        .udc_start              = usbhsg_gadget_start,
1043        .udc_stop               = usbhsg_gadget_stop,
1044        .pullup                 = usbhsg_pullup,
1045        .vbus_session           = usbhsg_vbus_session,
1046};
1047
1048static int usbhsg_start(struct usbhs_priv *priv)
1049{
1050        return usbhsg_try_start(priv, USBHSG_STATUS_STARTED);
1051}
1052
1053static int usbhsg_stop(struct usbhs_priv *priv)
1054{
1055        struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
1056
1057        /* cable disconnect */
1058        if (gpriv->driver &&
1059            gpriv->driver->disconnect)
1060                gpriv->driver->disconnect(&gpriv->gadget);
1061
1062        return usbhsg_try_stop(priv, USBHSG_STATUS_STARTED);
1063}
1064
1065int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
1066{
1067        struct usbhsg_gpriv *gpriv;
1068        struct usbhsg_uep *uep;
1069        struct device *dev = usbhs_priv_to_dev(priv);
1070        struct renesas_usbhs_driver_pipe_config *pipe_configs =
1071                                        usbhs_get_dparam(priv, pipe_configs);
1072        int pipe_size = usbhs_get_dparam(priv, pipe_size);
1073        int i;
1074        int ret;
1075
1076        gpriv = kzalloc(sizeof(struct usbhsg_gpriv), GFP_KERNEL);
1077        if (!gpriv)
1078                return -ENOMEM;
1079
1080        uep = kzalloc(sizeof(struct usbhsg_uep) * pipe_size, GFP_KERNEL);
1081        if (!uep) {
1082                ret = -ENOMEM;
1083                goto usbhs_mod_gadget_probe_err_gpriv;
1084        }
1085
1086        gpriv->transceiver = usb_get_phy(USB_PHY_TYPE_UNDEFINED);
1087        dev_info(dev, "%stransceiver found\n",
1088                 !IS_ERR(gpriv->transceiver) ? "" : "no ");
1089
1090        /*
1091         * CAUTION
1092         *
1093         * There is no guarantee that it is possible to access usb module here.
1094         * Don't accesses to it.
1095         * The accesse will be enable after "usbhsg_start"
1096         */
1097
1098        /*
1099         * register itself
1100         */
1101        usbhs_mod_register(priv, &gpriv->mod, USBHS_GADGET);
1102
1103        /* init gpriv */
1104        gpriv->mod.name         = "gadget";
1105        gpriv->mod.start        = usbhsg_start;
1106        gpriv->mod.stop         = usbhsg_stop;
1107        gpriv->uep              = uep;
1108        gpriv->uep_size         = pipe_size;
1109        usbhsg_status_init(gpriv);
1110
1111        /*
1112         * init gadget
1113         */
1114        gpriv->gadget.dev.parent        = dev;
1115        gpriv->gadget.name              = "renesas_usbhs_udc";
1116        gpriv->gadget.ops               = &usbhsg_gadget_ops;
1117        gpriv->gadget.max_speed         = USB_SPEED_HIGH;
1118        gpriv->gadget.quirk_avoids_skb_reserve = usbhs_get_dparam(priv,
1119                                                                has_usb_dmac);
1120
1121        INIT_LIST_HEAD(&gpriv->gadget.ep_list);
1122
1123        /*
1124         * init usb_ep
1125         */
1126        usbhsg_for_each_uep_with_dcp(uep, gpriv, i) {
1127                uep->gpriv      = gpriv;
1128                uep->pipe       = NULL;
1129                snprintf(uep->ep_name, EP_NAME_SIZE, "ep%d", i);
1130
1131                uep->ep.name            = uep->ep_name;
1132                uep->ep.ops             = &usbhsg_ep_ops;
1133                INIT_LIST_HEAD(&uep->ep.ep_list);
1134                spin_lock_init(&uep->lock);
1135
1136                /* init DCP */
1137                if (usbhsg_is_dcp(uep)) {
1138                        gpriv->gadget.ep0 = &uep->ep;
1139                        usb_ep_set_maxpacket_limit(&uep->ep, 64);
1140                        uep->ep.caps.type_control = true;
1141                } else {
1142                        /* init normal pipe */
1143                        if (pipe_configs[i].type == USB_ENDPOINT_XFER_ISOC)
1144                                uep->ep.caps.type_iso = true;
1145                        if (pipe_configs[i].type == USB_ENDPOINT_XFER_BULK)
1146                                uep->ep.caps.type_bulk = true;
1147                        if (pipe_configs[i].type == USB_ENDPOINT_XFER_INT)
1148                                uep->ep.caps.type_int = true;
1149                        usb_ep_set_maxpacket_limit(&uep->ep,
1150                                                   pipe_configs[i].bufsize);
1151                        list_add_tail(&uep->ep.ep_list, &gpriv->gadget.ep_list);
1152                }
1153                uep->ep.caps.dir_in = true;
1154                uep->ep.caps.dir_out = true;
1155        }
1156
1157        ret = usb_add_gadget_udc(dev, &gpriv->gadget);
1158        if (ret)
1159                goto err_add_udc;
1160
1161
1162        dev_info(dev, "gadget probed\n");
1163
1164        return 0;
1165
1166err_add_udc:
1167        kfree(gpriv->uep);
1168
1169usbhs_mod_gadget_probe_err_gpriv:
1170        kfree(gpriv);
1171
1172        return ret;
1173}
1174
1175void usbhs_mod_gadget_remove(struct usbhs_priv *priv)
1176{
1177        struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
1178
1179        usb_del_gadget_udc(&gpriv->gadget);
1180
1181        kfree(gpriv->uep);
1182        kfree(gpriv);
1183}
1184