linux/drivers/usb/gadget/goku_udc.c
<<
>>
Prefs
   1/*
   2 * Toshiba TC86C001 ("Goku-S") USB Device Controller driver
   3 *
   4 * Copyright (C) 2000-2002 Lineo
   5 *      by Stuart Lynne, Tom Rushworth, and Bruce Balden
   6 * Copyright (C) 2002 Toshiba Corporation
   7 * Copyright (C) 2003 MontaVista Software (source@mvista.com)
   8 *
   9 * This file is licensed under the terms of the GNU General Public
  10 * License version 2.  This program is licensed "as is" without any
  11 * warranty of any kind, whether express or implied.
  12 */
  13
  14/*
  15 * This device has ep0 and three semi-configurable bulk/interrupt endpoints.
  16 *
  17 *  - Endpoint numbering is fixed: ep{1,2,3}-bulk
  18 *  - Gadget drivers can choose ep maxpacket (8/16/32/64)
  19 *  - Gadget drivers can choose direction (IN, OUT)
  20 *  - DMA works with ep1 (OUT transfers) and ep2 (IN transfers).
  21 */
  22
  23// #define      VERBOSE         /* extra debug messages (success too) */
  24// #define      USB_TRACE       /* packet-level success messages */
  25
  26#include <linux/kernel.h>
  27#include <linux/module.h>
  28#include <linux/pci.h>
  29#include <linux/delay.h>
  30#include <linux/ioport.h>
  31#include <linux/slab.h>
  32#include <linux/errno.h>
  33#include <linux/init.h>
  34#include <linux/timer.h>
  35#include <linux/list.h>
  36#include <linux/interrupt.h>
  37#include <linux/proc_fs.h>
  38#include <linux/seq_file.h>
  39#include <linux/device.h>
  40#include <linux/usb/ch9.h>
  41#include <linux/usb/gadget.h>
  42#include <linux/prefetch.h>
  43
  44#include <asm/byteorder.h>
  45#include <asm/io.h>
  46#include <asm/irq.h>
  47#include <asm/unaligned.h>
  48
  49
  50#include "goku_udc.h"
  51
  52#define DRIVER_DESC             "TC86C001 USB Device Controller"
  53#define DRIVER_VERSION          "30-Oct 2003"
  54
  55static const char driver_name [] = "goku_udc";
  56static const char driver_desc [] = DRIVER_DESC;
  57
  58MODULE_AUTHOR("source@mvista.com");
  59MODULE_DESCRIPTION(DRIVER_DESC);
  60MODULE_LICENSE("GPL");
  61
  62
  63/*
  64 * IN dma behaves ok under testing, though the IN-dma abort paths don't
  65 * seem to behave quite as expected.  Used by default.
  66 *
  67 * OUT dma documents design problems handling the common "short packet"
  68 * transfer termination policy; it couldn't be enabled by default, even
  69 * if the OUT-dma abort problems had a resolution.
  70 */
  71static unsigned use_dma = 1;
  72
  73#if 0
  74//#include <linux/moduleparam.h>
  75/* "modprobe goku_udc use_dma=1" etc
  76 *      0 to disable dma
  77 *      1 to use IN dma only (normal operation)
  78 *      2 to use IN and OUT dma
  79 */
  80module_param(use_dma, uint, S_IRUGO);
  81#endif
  82
  83/*-------------------------------------------------------------------------*/
  84
  85static void nuke(struct goku_ep *, int status);
  86
  87static inline void
  88command(struct goku_udc_regs __iomem *regs, int command, unsigned epnum)
  89{
  90        writel(COMMAND_EP(epnum) | command, &regs->Command);
  91        udelay(300);
  92}
  93
  94static int
  95goku_ep_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
  96{
  97        struct goku_udc *dev;
  98        struct goku_ep  *ep;
  99        u32             mode;
 100        u16             max;
 101        unsigned long   flags;
 102
 103        ep = container_of(_ep, struct goku_ep, ep);
 104        if (!_ep || !desc
 105                        || desc->bDescriptorType != USB_DT_ENDPOINT)
 106                return -EINVAL;
 107        dev = ep->dev;
 108        if (ep == &dev->ep[0])
 109                return -EINVAL;
 110        if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
 111                return -ESHUTDOWN;
 112        if (ep->num != usb_endpoint_num(desc))
 113                return -EINVAL;
 114
 115        switch (usb_endpoint_type(desc)) {
 116        case USB_ENDPOINT_XFER_BULK:
 117        case USB_ENDPOINT_XFER_INT:
 118                break;
 119        default:
 120                return -EINVAL;
 121        }
 122
 123        if ((readl(ep->reg_status) & EPxSTATUS_EP_MASK)
 124                        != EPxSTATUS_EP_INVALID)
 125                return -EBUSY;
 126
 127        /* enabling the no-toggle interrupt mode would need an api hook */
 128        mode = 0;
 129        max = get_unaligned_le16(&desc->wMaxPacketSize);
 130        switch (max) {
 131        case 64:        mode++;
 132        case 32:        mode++;
 133        case 16:        mode++;
 134        case 8:         mode <<= 3;
 135                        break;
 136        default:
 137                return -EINVAL;
 138        }
 139        mode |= 2 << 1;         /* bulk, or intr-with-toggle */
 140
 141        /* ep1/ep2 dma direction is chosen early; it works in the other
 142         * direction, with pio.  be cautious with out-dma.
 143         */
 144        ep->is_in = usb_endpoint_dir_in(desc);
 145        if (ep->is_in) {
 146                mode |= 1;
 147                ep->dma = (use_dma != 0) && (ep->num == UDC_MSTRD_ENDPOINT);
 148        } else {
 149                ep->dma = (use_dma == 2) && (ep->num == UDC_MSTWR_ENDPOINT);
 150                if (ep->dma)
 151                        DBG(dev, "%s out-dma hides short packets\n",
 152                                ep->ep.name);
 153        }
 154
 155        spin_lock_irqsave(&ep->dev->lock, flags);
 156
 157        /* ep1 and ep2 can do double buffering and/or dma */
 158        if (ep->num < 3) {
 159                struct goku_udc_regs __iomem    *regs = ep->dev->regs;
 160                u32                             tmp;
 161
 162                /* double buffer except (for now) with pio in */
 163                tmp = ((ep->dma || !ep->is_in)
 164                                ? 0x10  /* double buffered */
 165                                : 0x11  /* single buffer */
 166                        ) << ep->num;
 167                tmp |= readl(&regs->EPxSingle);
 168                writel(tmp, &regs->EPxSingle);
 169
 170                tmp = (ep->dma ? 0x10/*dma*/ : 0x11/*pio*/) << ep->num;
 171                tmp |= readl(&regs->EPxBCS);
 172                writel(tmp, &regs->EPxBCS);
 173        }
 174        writel(mode, ep->reg_mode);
 175        command(ep->dev->regs, COMMAND_RESET, ep->num);
 176        ep->ep.maxpacket = max;
 177        ep->stopped = 0;
 178        ep->ep.desc = desc;
 179        spin_unlock_irqrestore(&ep->dev->lock, flags);
 180
 181        DBG(dev, "enable %s %s %s maxpacket %u\n", ep->ep.name,
 182                ep->is_in ? "IN" : "OUT",
 183                ep->dma ? "dma" : "pio",
 184                max);
 185
 186        return 0;
 187}
 188
 189static void ep_reset(struct goku_udc_regs __iomem *regs, struct goku_ep *ep)
 190{
 191        struct goku_udc         *dev = ep->dev;
 192
 193        if (regs) {
 194                command(regs, COMMAND_INVALID, ep->num);
 195                if (ep->num) {
 196                        if (ep->num == UDC_MSTWR_ENDPOINT)
 197                                dev->int_enable &= ~(INT_MSTWREND
 198                                                        |INT_MSTWRTMOUT);
 199                        else if (ep->num == UDC_MSTRD_ENDPOINT)
 200                                dev->int_enable &= ~INT_MSTRDEND;
 201                        dev->int_enable &= ~INT_EPxDATASET (ep->num);
 202                } else
 203                        dev->int_enable &= ~INT_EP0;
 204                writel(dev->int_enable, &regs->int_enable);
 205                readl(&regs->int_enable);
 206                if (ep->num < 3) {
 207                        struct goku_udc_regs __iomem    *r = ep->dev->regs;
 208                        u32                             tmp;
 209
 210                        tmp = readl(&r->EPxSingle);
 211                        tmp &= ~(0x11 << ep->num);
 212                        writel(tmp, &r->EPxSingle);
 213
 214                        tmp = readl(&r->EPxBCS);
 215                        tmp &= ~(0x11 << ep->num);
 216                        writel(tmp, &r->EPxBCS);
 217                }
 218                /* reset dma in case we're still using it */
 219                if (ep->dma) {
 220                        u32     master;
 221
 222                        master = readl(&regs->dma_master) & MST_RW_BITS;
 223                        if (ep->num == UDC_MSTWR_ENDPOINT) {
 224                                master &= ~MST_W_BITS;
 225                                master |= MST_WR_RESET;
 226                        } else {
 227                                master &= ~MST_R_BITS;
 228                                master |= MST_RD_RESET;
 229                        }
 230                        writel(master, &regs->dma_master);
 231                }
 232        }
 233
 234        ep->ep.maxpacket = MAX_FIFO_SIZE;
 235        ep->ep.desc = NULL;
 236        ep->stopped = 1;
 237        ep->irqs = 0;
 238        ep->dma = 0;
 239}
 240
 241static int goku_ep_disable(struct usb_ep *_ep)
 242{
 243        struct goku_ep  *ep;
 244        struct goku_udc *dev;
 245        unsigned long   flags;
 246
 247        ep = container_of(_ep, struct goku_ep, ep);
 248        if (!_ep || !ep->ep.desc)
 249                return -ENODEV;
 250        dev = ep->dev;
 251        if (dev->ep0state == EP0_SUSPEND)
 252                return -EBUSY;
 253
 254        VDBG(dev, "disable %s\n", _ep->name);
 255
 256        spin_lock_irqsave(&dev->lock, flags);
 257        nuke(ep, -ESHUTDOWN);
 258        ep_reset(dev->regs, ep);
 259        spin_unlock_irqrestore(&dev->lock, flags);
 260
 261        return 0;
 262}
 263
 264/*-------------------------------------------------------------------------*/
 265
 266static struct usb_request *
 267goku_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
 268{
 269        struct goku_request     *req;
 270
 271        if (!_ep)
 272                return NULL;
 273        req = kzalloc(sizeof *req, gfp_flags);
 274        if (!req)
 275                return NULL;
 276
 277        INIT_LIST_HEAD(&req->queue);
 278        return &req->req;
 279}
 280
 281static void
 282goku_free_request(struct usb_ep *_ep, struct usb_request *_req)
 283{
 284        struct goku_request     *req;
 285
 286        if (!_ep || !_req)
 287                return;
 288
 289        req = container_of(_req, struct goku_request, req);
 290        WARN_ON(!list_empty(&req->queue));
 291        kfree(req);
 292}
 293
 294/*-------------------------------------------------------------------------*/
 295
 296static void
 297done(struct goku_ep *ep, struct goku_request *req, int status)
 298{
 299        struct goku_udc         *dev;
 300        unsigned                stopped = ep->stopped;
 301
 302        list_del_init(&req->queue);
 303
 304        if (likely(req->req.status == -EINPROGRESS))
 305                req->req.status = status;
 306        else
 307                status = req->req.status;
 308
 309        dev = ep->dev;
 310
 311        if (ep->dma)
 312                usb_gadget_unmap_request(&dev->gadget, &req->req, ep->is_in);
 313
 314#ifndef USB_TRACE
 315        if (status && status != -ESHUTDOWN)
 316#endif
 317                VDBG(dev, "complete %s req %p stat %d len %u/%u\n",
 318                        ep->ep.name, &req->req, status,
 319                        req->req.actual, req->req.length);
 320
 321        /* don't modify queue heads during completion callback */
 322        ep->stopped = 1;
 323        spin_unlock(&dev->lock);
 324        req->req.complete(&ep->ep, &req->req);
 325        spin_lock(&dev->lock);
 326        ep->stopped = stopped;
 327}
 328
 329/*-------------------------------------------------------------------------*/
 330
 331static inline int
 332write_packet(u32 __iomem *fifo, u8 *buf, struct goku_request *req, unsigned max)
 333{
 334        unsigned        length, count;
 335
 336        length = min(req->req.length - req->req.actual, max);
 337        req->req.actual += length;
 338
 339        count = length;
 340        while (likely(count--))
 341                writel(*buf++, fifo);
 342        return length;
 343}
 344
 345// return:  0 = still running, 1 = completed, negative = errno
 346static int write_fifo(struct goku_ep *ep, struct goku_request *req)
 347{
 348        struct goku_udc *dev = ep->dev;
 349        u32             tmp;
 350        u8              *buf;
 351        unsigned        count;
 352        int             is_last;
 353
 354        tmp = readl(&dev->regs->DataSet);
 355        buf = req->req.buf + req->req.actual;
 356        prefetch(buf);
 357
 358        dev = ep->dev;
 359        if (unlikely(ep->num == 0 && dev->ep0state != EP0_IN))
 360                return -EL2HLT;
 361
 362        /* NOTE:  just single-buffered PIO-IN for now.  */
 363        if (unlikely((tmp & DATASET_A(ep->num)) != 0))
 364                return 0;
 365
 366        /* clear our "packet available" irq */
 367        if (ep->num != 0)
 368                writel(~INT_EPxDATASET(ep->num), &dev->regs->int_status);
 369
 370        count = write_packet(ep->reg_fifo, buf, req, ep->ep.maxpacket);
 371
 372        /* last packet often short (sometimes a zlp, especially on ep0) */
 373        if (unlikely(count != ep->ep.maxpacket)) {
 374                writel(~(1<<ep->num), &dev->regs->EOP);
 375                if (ep->num == 0) {
 376                        dev->ep[0].stopped = 1;
 377                        dev->ep0state = EP0_STATUS;
 378                }
 379                is_last = 1;
 380        } else {
 381                if (likely(req->req.length != req->req.actual)
 382                                || req->req.zero)
 383                        is_last = 0;
 384                else
 385                        is_last = 1;
 386        }
 387#if 0           /* printk seemed to trash is_last...*/
 388//#ifdef USB_TRACE
 389        VDBG(dev, "wrote %s %u bytes%s IN %u left %p\n",
 390                ep->ep.name, count, is_last ? "/last" : "",
 391                req->req.length - req->req.actual, req);
 392#endif
 393
 394        /* requests complete when all IN data is in the FIFO,
 395         * or sometimes later, if a zlp was needed.
 396         */
 397        if (is_last) {
 398                done(ep, req, 0);
 399                return 1;
 400        }
 401
 402        return 0;
 403}
 404
 405static int read_fifo(struct goku_ep *ep, struct goku_request *req)
 406{
 407        struct goku_udc_regs __iomem    *regs;
 408        u32                             size, set;
 409        u8                              *buf;
 410        unsigned                        bufferspace, is_short, dbuff;
 411
 412        regs = ep->dev->regs;
 413top:
 414        buf = req->req.buf + req->req.actual;
 415        prefetchw(buf);
 416
 417        if (unlikely(ep->num == 0 && ep->dev->ep0state != EP0_OUT))
 418                return -EL2HLT;
 419
 420        dbuff = (ep->num == 1 || ep->num == 2);
 421        do {
 422                /* ack dataset irq matching the status we'll handle */
 423                if (ep->num != 0)
 424                        writel(~INT_EPxDATASET(ep->num), &regs->int_status);
 425
 426                set = readl(&regs->DataSet) & DATASET_AB(ep->num);
 427                size = readl(&regs->EPxSizeLA[ep->num]);
 428                bufferspace = req->req.length - req->req.actual;
 429
 430                /* usually do nothing without an OUT packet */
 431                if (likely(ep->num != 0 || bufferspace != 0)) {
 432                        if (unlikely(set == 0))
 433                                break;
 434                        /* use ep1/ep2 double-buffering for OUT */
 435                        if (!(size & PACKET_ACTIVE))
 436                                size = readl(&regs->EPxSizeLB[ep->num]);
 437                        if (!(size & PACKET_ACTIVE))    /* "can't happen" */
 438                                break;
 439                        size &= DATASIZE;       /* EPxSizeH == 0 */
 440
 441                /* ep0out no-out-data case for set_config, etc */
 442                } else
 443                        size = 0;
 444
 445                /* read all bytes from this packet */
 446                req->req.actual += size;
 447                is_short = (size < ep->ep.maxpacket);
 448#ifdef USB_TRACE
 449                VDBG(ep->dev, "read %s %u bytes%s OUT req %p %u/%u\n",
 450                        ep->ep.name, size, is_short ? "/S" : "",
 451                        req, req->req.actual, req->req.length);
 452#endif
 453                while (likely(size-- != 0)) {
 454                        u8      byte = (u8) readl(ep->reg_fifo);
 455
 456                        if (unlikely(bufferspace == 0)) {
 457                                /* this happens when the driver's buffer
 458                                 * is smaller than what the host sent.
 459                                 * discard the extra data in this packet.
 460                                 */
 461                                if (req->req.status != -EOVERFLOW)
 462                                        DBG(ep->dev, "%s overflow %u\n",
 463                                                ep->ep.name, size);
 464                                req->req.status = -EOVERFLOW;
 465                        } else {
 466                                *buf++ = byte;
 467                                bufferspace--;
 468                        }
 469                }
 470
 471                /* completion */
 472                if (unlikely(is_short || req->req.actual == req->req.length)) {
 473                        if (unlikely(ep->num == 0)) {
 474                                /* non-control endpoints now usable? */
 475                                if (ep->dev->req_config)
 476                                        writel(ep->dev->configured
 477                                                        ? USBSTATE_CONFIGURED
 478                                                        : 0,
 479                                                &regs->UsbState);
 480                                /* ep0out status stage */
 481                                writel(~(1<<0), &regs->EOP);
 482                                ep->stopped = 1;
 483                                ep->dev->ep0state = EP0_STATUS;
 484                        }
 485                        done(ep, req, 0);
 486
 487                        /* empty the second buffer asap */
 488                        if (dbuff && !list_empty(&ep->queue)) {
 489                                req = list_entry(ep->queue.next,
 490                                                struct goku_request, queue);
 491                                goto top;
 492                        }
 493                        return 1;
 494                }
 495        } while (dbuff);
 496        return 0;
 497}
 498
 499static inline void
 500pio_irq_enable(struct goku_udc *dev,
 501                struct goku_udc_regs __iomem *regs, int epnum)
 502{
 503        dev->int_enable |= INT_EPxDATASET (epnum);
 504        writel(dev->int_enable, &regs->int_enable);
 505        /* write may still be posted */
 506}
 507
 508static inline void
 509pio_irq_disable(struct goku_udc *dev,
 510                struct goku_udc_regs __iomem *regs, int epnum)
 511{
 512        dev->int_enable &= ~INT_EPxDATASET (epnum);
 513        writel(dev->int_enable, &regs->int_enable);
 514        /* write may still be posted */
 515}
 516
 517static inline void
 518pio_advance(struct goku_ep *ep)
 519{
 520        struct goku_request     *req;
 521
 522        if (unlikely(list_empty (&ep->queue)))
 523                return;
 524        req = list_entry(ep->queue.next, struct goku_request, queue);
 525        (ep->is_in ? write_fifo : read_fifo)(ep, req);
 526}
 527
 528
 529/*-------------------------------------------------------------------------*/
 530
 531// return:  0 = q running, 1 = q stopped, negative = errno
 532static int start_dma(struct goku_ep *ep, struct goku_request *req)
 533{
 534        struct goku_udc_regs __iomem    *regs = ep->dev->regs;
 535        u32                             master;
 536        u32                             start = req->req.dma;
 537        u32                             end = start + req->req.length - 1;
 538
 539        master = readl(&regs->dma_master) & MST_RW_BITS;
 540
 541        /* re-init the bits affecting IN dma; careful with zlps */
 542        if (likely(ep->is_in)) {
 543                if (unlikely(master & MST_RD_ENA)) {
 544                        DBG (ep->dev, "start, IN active dma %03x!!\n",
 545                                master);
 546//                      return -EL2HLT;
 547                }
 548                writel(end, &regs->in_dma_end);
 549                writel(start, &regs->in_dma_start);
 550
 551                master &= ~MST_R_BITS;
 552                if (unlikely(req->req.length == 0))
 553                        master = MST_RD_ENA | MST_RD_EOPB;
 554                else if ((req->req.length % ep->ep.maxpacket) != 0
 555                                        || req->req.zero)
 556                        master = MST_RD_ENA | MST_EOPB_ENA;
 557                else
 558                        master = MST_RD_ENA | MST_EOPB_DIS;
 559
 560                ep->dev->int_enable |= INT_MSTRDEND;
 561
 562        /* Goku DMA-OUT merges short packets, which plays poorly with
 563         * protocols where short packets mark the transfer boundaries.
 564         * The chip supports a nonstandard policy with INT_MSTWRTMOUT,
 565         * ending transfers after 3 SOFs; we don't turn it on.
 566         */
 567        } else {
 568                if (unlikely(master & MST_WR_ENA)) {
 569                        DBG (ep->dev, "start, OUT active dma %03x!!\n",
 570                                master);
 571//                      return -EL2HLT;
 572                }
 573                writel(end, &regs->out_dma_end);
 574                writel(start, &regs->out_dma_start);
 575
 576                master &= ~MST_W_BITS;
 577                master |= MST_WR_ENA | MST_TIMEOUT_DIS;
 578
 579                ep->dev->int_enable |= INT_MSTWREND|INT_MSTWRTMOUT;
 580        }
 581
 582        writel(master, &regs->dma_master);
 583        writel(ep->dev->int_enable, &regs->int_enable);
 584        return 0;
 585}
 586
 587static void dma_advance(struct goku_udc *dev, struct goku_ep *ep)
 588{
 589        struct goku_request             *req;
 590        struct goku_udc_regs __iomem    *regs = ep->dev->regs;
 591        u32                             master;
 592
 593        master = readl(&regs->dma_master);
 594
 595        if (unlikely(list_empty(&ep->queue))) {
 596stop:
 597                if (ep->is_in)
 598                        dev->int_enable &= ~INT_MSTRDEND;
 599                else
 600                        dev->int_enable &= ~(INT_MSTWREND|INT_MSTWRTMOUT);
 601                writel(dev->int_enable, &regs->int_enable);
 602                return;
 603        }
 604        req = list_entry(ep->queue.next, struct goku_request, queue);
 605
 606        /* normal hw dma completion (not abort) */
 607        if (likely(ep->is_in)) {
 608                if (unlikely(master & MST_RD_ENA))
 609                        return;
 610                req->req.actual = readl(&regs->in_dma_current);
 611        } else {
 612                if (unlikely(master & MST_WR_ENA))
 613                        return;
 614
 615                /* hardware merges short packets, and also hides packet
 616                 * overruns.  a partial packet MAY be in the fifo here.
 617                 */
 618                req->req.actual = readl(&regs->out_dma_current);
 619        }
 620        req->req.actual -= req->req.dma;
 621        req->req.actual++;
 622
 623#ifdef USB_TRACE
 624        VDBG(dev, "done %s %s dma, %u/%u bytes, req %p\n",
 625                ep->ep.name, ep->is_in ? "IN" : "OUT",
 626                req->req.actual, req->req.length, req);
 627#endif
 628        done(ep, req, 0);
 629        if (list_empty(&ep->queue))
 630                goto stop;
 631        req = list_entry(ep->queue.next, struct goku_request, queue);
 632        (void) start_dma(ep, req);
 633}
 634
 635static void abort_dma(struct goku_ep *ep, int status)
 636{
 637        struct goku_udc_regs __iomem    *regs = ep->dev->regs;
 638        struct goku_request             *req;
 639        u32                             curr, master;
 640
 641        /* NAK future host requests, hoping the implicit delay lets the
 642         * dma engine finish reading (or writing) its latest packet and
 643         * empty the dma buffer (up to 16 bytes).
 644         *
 645         * This avoids needing to clean up a partial packet in the fifo;
 646         * we can't do that for IN without side effects to HALT and TOGGLE.
 647         */
 648        command(regs, COMMAND_FIFO_DISABLE, ep->num);
 649        req = list_entry(ep->queue.next, struct goku_request, queue);
 650        master = readl(&regs->dma_master) & MST_RW_BITS;
 651
 652        /* FIXME using these resets isn't usably documented. this may
 653         * not work unless it's followed by disabling the endpoint.
 654         *
 655         * FIXME the OUT reset path doesn't even behave consistently.
 656         */
 657        if (ep->is_in) {
 658                if (unlikely((readl(&regs->dma_master) & MST_RD_ENA) == 0))
 659                        goto finished;
 660                curr = readl(&regs->in_dma_current);
 661
 662                writel(curr, &regs->in_dma_end);
 663                writel(curr, &regs->in_dma_start);
 664
 665                master &= ~MST_R_BITS;
 666                master |= MST_RD_RESET;
 667                writel(master, &regs->dma_master);
 668
 669                if (readl(&regs->dma_master) & MST_RD_ENA)
 670                        DBG(ep->dev, "IN dma active after reset!\n");
 671
 672        } else {
 673                if (unlikely((readl(&regs->dma_master) & MST_WR_ENA) == 0))
 674                        goto finished;
 675                curr = readl(&regs->out_dma_current);
 676
 677                writel(curr, &regs->out_dma_end);
 678                writel(curr, &regs->out_dma_start);
 679
 680                master &= ~MST_W_BITS;
 681                master |= MST_WR_RESET;
 682                writel(master, &regs->dma_master);
 683
 684                if (readl(&regs->dma_master) & MST_WR_ENA)
 685                        DBG(ep->dev, "OUT dma active after reset!\n");
 686        }
 687        req->req.actual = (curr - req->req.dma) + 1;
 688        req->req.status = status;
 689
 690        VDBG(ep->dev, "%s %s %s %d/%d\n", __func__, ep->ep.name,
 691                ep->is_in ? "IN" : "OUT",
 692                req->req.actual, req->req.length);
 693
 694        command(regs, COMMAND_FIFO_ENABLE, ep->num);
 695
 696        return;
 697
 698finished:
 699        /* dma already completed; no abort needed */
 700        command(regs, COMMAND_FIFO_ENABLE, ep->num);
 701        req->req.actual = req->req.length;
 702        req->req.status = 0;
 703}
 704
 705/*-------------------------------------------------------------------------*/
 706
 707static int
 708goku_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
 709{
 710        struct goku_request     *req;
 711        struct goku_ep          *ep;
 712        struct goku_udc         *dev;
 713        unsigned long           flags;
 714        int                     status;
 715
 716        /* always require a cpu-view buffer so pio works */
 717        req = container_of(_req, struct goku_request, req);
 718        if (unlikely(!_req || !_req->complete
 719                        || !_req->buf || !list_empty(&req->queue)))
 720                return -EINVAL;
 721        ep = container_of(_ep, struct goku_ep, ep);
 722        if (unlikely(!_ep || (!ep->ep.desc && ep->num != 0)))
 723                return -EINVAL;
 724        dev = ep->dev;
 725        if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN))
 726                return -ESHUTDOWN;
 727
 728        /* can't touch registers when suspended */
 729        if (dev->ep0state == EP0_SUSPEND)
 730                return -EBUSY;
 731
 732        /* set up dma mapping in case the caller didn't */
 733        if (ep->dma) {
 734                status = usb_gadget_map_request(&dev->gadget, &req->req,
 735                                ep->is_in);
 736                if (status)
 737                        return status;
 738        }
 739
 740#ifdef USB_TRACE
 741        VDBG(dev, "%s queue req %p, len %u buf %p\n",
 742                        _ep->name, _req, _req->length, _req->buf);
 743#endif
 744
 745        spin_lock_irqsave(&dev->lock, flags);
 746
 747        _req->status = -EINPROGRESS;
 748        _req->actual = 0;
 749
 750        /* for ep0 IN without premature status, zlp is required and
 751         * writing EOP starts the status stage (OUT).
 752         */
 753        if (unlikely(ep->num == 0 && ep->is_in))
 754                _req->zero = 1;
 755
 756        /* kickstart this i/o queue? */
 757        status = 0;
 758        if (list_empty(&ep->queue) && likely(!ep->stopped)) {
 759                /* dma:  done after dma completion IRQ (or error)
 760                 * pio:  done after last fifo operation
 761                 */
 762                if (ep->dma)
 763                        status = start_dma(ep, req);
 764                else
 765                        status = (ep->is_in ? write_fifo : read_fifo)(ep, req);
 766
 767                if (unlikely(status != 0)) {
 768                        if (status > 0)
 769                                status = 0;
 770                        req = NULL;
 771                }
 772
 773        } /* else pio or dma irq handler advances the queue. */
 774
 775        if (likely(req != NULL))
 776                list_add_tail(&req->queue, &ep->queue);
 777
 778        if (likely(!list_empty(&ep->queue))
 779                        && likely(ep->num != 0)
 780                        && !ep->dma
 781                        && !(dev->int_enable & INT_EPxDATASET (ep->num)))
 782                pio_irq_enable(dev, dev->regs, ep->num);
 783
 784        spin_unlock_irqrestore(&dev->lock, flags);
 785
 786        /* pci writes may still be posted */
 787        return status;
 788}
 789
 790/* dequeue ALL requests */
 791static void nuke(struct goku_ep *ep, int status)
 792{
 793        struct goku_request     *req;
 794
 795        ep->stopped = 1;
 796        if (list_empty(&ep->queue))
 797                return;
 798        if (ep->dma)
 799                abort_dma(ep, status);
 800        while (!list_empty(&ep->queue)) {
 801                req = list_entry(ep->queue.next, struct goku_request, queue);
 802                done(ep, req, status);
 803        }
 804}
 805
 806/* dequeue JUST ONE request */
 807static int goku_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 808{
 809        struct goku_request     *req;
 810        struct goku_ep          *ep;
 811        struct goku_udc         *dev;
 812        unsigned long           flags;
 813
 814        ep = container_of(_ep, struct goku_ep, ep);
 815        if (!_ep || !_req || (!ep->ep.desc && ep->num != 0))
 816                return -EINVAL;
 817        dev = ep->dev;
 818        if (!dev->driver)
 819                return -ESHUTDOWN;
 820
 821        /* we can't touch (dma) registers when suspended */
 822        if (dev->ep0state == EP0_SUSPEND)
 823                return -EBUSY;
 824
 825        VDBG(dev, "%s %s %s %s %p\n", __func__, _ep->name,
 826                ep->is_in ? "IN" : "OUT",
 827                ep->dma ? "dma" : "pio",
 828                _req);
 829
 830        spin_lock_irqsave(&dev->lock, flags);
 831
 832        /* make sure it's actually queued on this endpoint */
 833        list_for_each_entry (req, &ep->queue, queue) {
 834                if (&req->req == _req)
 835                        break;
 836        }
 837        if (&req->req != _req) {
 838                spin_unlock_irqrestore (&dev->lock, flags);
 839                return -EINVAL;
 840        }
 841
 842        if (ep->dma && ep->queue.next == &req->queue && !ep->stopped) {
 843                abort_dma(ep, -ECONNRESET);
 844                done(ep, req, -ECONNRESET);
 845                dma_advance(dev, ep);
 846        } else if (!list_empty(&req->queue))
 847                done(ep, req, -ECONNRESET);
 848        else
 849                req = NULL;
 850        spin_unlock_irqrestore(&dev->lock, flags);
 851
 852        return req ? 0 : -EOPNOTSUPP;
 853}
 854
 855/*-------------------------------------------------------------------------*/
 856
 857static void goku_clear_halt(struct goku_ep *ep)
 858{
 859        // assert (ep->num !=0)
 860        VDBG(ep->dev, "%s clear halt\n", ep->ep.name);
 861        command(ep->dev->regs, COMMAND_SETDATA0, ep->num);
 862        command(ep->dev->regs, COMMAND_STALL_CLEAR, ep->num);
 863        if (ep->stopped) {
 864                ep->stopped = 0;
 865                if (ep->dma) {
 866                        struct goku_request     *req;
 867
 868                        if (list_empty(&ep->queue))
 869                                return;
 870                        req = list_entry(ep->queue.next, struct goku_request,
 871                                                queue);
 872                        (void) start_dma(ep, req);
 873                } else
 874                        pio_advance(ep);
 875        }
 876}
 877
 878static int goku_set_halt(struct usb_ep *_ep, int value)
 879{
 880        struct goku_ep  *ep;
 881        unsigned long   flags;
 882        int             retval = 0;
 883
 884        if (!_ep)
 885                return -ENODEV;
 886        ep = container_of (_ep, struct goku_ep, ep);
 887
 888        if (ep->num == 0) {
 889                if (value) {
 890                        ep->dev->ep0state = EP0_STALL;
 891                        ep->dev->ep[0].stopped = 1;
 892                } else
 893                        return -EINVAL;
 894
 895        /* don't change EPxSTATUS_EP_INVALID to READY */
 896        } else if (!ep->ep.desc) {
 897                DBG(ep->dev, "%s %s inactive?\n", __func__, ep->ep.name);
 898                return -EINVAL;
 899        }
 900
 901        spin_lock_irqsave(&ep->dev->lock, flags);
 902        if (!list_empty(&ep->queue))
 903                retval = -EAGAIN;
 904        else if (ep->is_in && value
 905                        /* data in (either) packet buffer? */
 906                        && (readl(&ep->dev->regs->DataSet)
 907                                        & DATASET_AB(ep->num)))
 908                retval = -EAGAIN;
 909        else if (!value)
 910                goku_clear_halt(ep);
 911        else {
 912                ep->stopped = 1;
 913                VDBG(ep->dev, "%s set halt\n", ep->ep.name);
 914                command(ep->dev->regs, COMMAND_STALL, ep->num);
 915                readl(ep->reg_status);
 916        }
 917        spin_unlock_irqrestore(&ep->dev->lock, flags);
 918        return retval;
 919}
 920
 921static int goku_fifo_status(struct usb_ep *_ep)
 922{
 923        struct goku_ep                  *ep;
 924        struct goku_udc_regs __iomem    *regs;
 925        u32                             size;
 926
 927        if (!_ep)
 928                return -ENODEV;
 929        ep = container_of(_ep, struct goku_ep, ep);
 930
 931        /* size is only reported sanely for OUT */
 932        if (ep->is_in)
 933                return -EOPNOTSUPP;
 934
 935        /* ignores 16-byte dma buffer; SizeH == 0 */
 936        regs = ep->dev->regs;
 937        size = readl(&regs->EPxSizeLA[ep->num]) & DATASIZE;
 938        size += readl(&regs->EPxSizeLB[ep->num]) & DATASIZE;
 939        VDBG(ep->dev, "%s %s %u\n", __func__, ep->ep.name, size);
 940        return size;
 941}
 942
 943static void goku_fifo_flush(struct usb_ep *_ep)
 944{
 945        struct goku_ep                  *ep;
 946        struct goku_udc_regs __iomem    *regs;
 947        u32                             size;
 948
 949        if (!_ep)
 950                return;
 951        ep = container_of(_ep, struct goku_ep, ep);
 952        VDBG(ep->dev, "%s %s\n", __func__, ep->ep.name);
 953
 954        /* don't change EPxSTATUS_EP_INVALID to READY */
 955        if (!ep->ep.desc && ep->num != 0) {
 956                DBG(ep->dev, "%s %s inactive?\n", __func__, ep->ep.name);
 957                return;
 958        }
 959
 960        regs = ep->dev->regs;
 961        size = readl(&regs->EPxSizeLA[ep->num]);
 962        size &= DATASIZE;
 963
 964        /* Non-desirable behavior:  FIFO_CLEAR also clears the
 965         * endpoint halt feature.  For OUT, we _could_ just read
 966         * the bytes out (PIO, if !ep->dma); for in, no choice.
 967         */
 968        if (size)
 969                command(regs, COMMAND_FIFO_CLEAR, ep->num);
 970}
 971
 972static struct usb_ep_ops goku_ep_ops = {
 973        .enable         = goku_ep_enable,
 974        .disable        = goku_ep_disable,
 975
 976        .alloc_request  = goku_alloc_request,
 977        .free_request   = goku_free_request,
 978
 979        .queue          = goku_queue,
 980        .dequeue        = goku_dequeue,
 981
 982        .set_halt       = goku_set_halt,
 983        .fifo_status    = goku_fifo_status,
 984        .fifo_flush     = goku_fifo_flush,
 985};
 986
 987/*-------------------------------------------------------------------------*/
 988
 989static int goku_get_frame(struct usb_gadget *_gadget)
 990{
 991        return -EOPNOTSUPP;
 992}
 993
 994static int goku_udc_start(struct usb_gadget *g,
 995                struct usb_gadget_driver *driver);
 996static int goku_udc_stop(struct usb_gadget *g,
 997                struct usb_gadget_driver *driver);
 998
 999static const struct usb_gadget_ops goku_ops = {
1000        .get_frame      = goku_get_frame,
1001        .udc_start      = goku_udc_start,
1002        .udc_stop       = goku_udc_stop,
1003        // no remote wakeup
1004        // not selfpowered
1005};
1006
1007/*-------------------------------------------------------------------------*/
1008
1009static inline const char *dmastr(void)
1010{
1011        if (use_dma == 0)
1012                return "(dma disabled)";
1013        else if (use_dma == 2)
1014                return "(dma IN and OUT)";
1015        else
1016                return "(dma IN)";
1017}
1018
1019#ifdef CONFIG_USB_GADGET_DEBUG_FILES
1020
1021static const char proc_node_name [] = "driver/udc";
1022
1023#define FOURBITS "%s%s%s%s"
1024#define EIGHTBITS FOURBITS FOURBITS
1025
1026static void dump_intmask(struct seq_file *m, const char *label, u32 mask)
1027{
1028        /* int_status is the same format ... */
1029        seq_printf(m,
1030                "%s %05X =" FOURBITS EIGHTBITS EIGHTBITS "\n",
1031                label, mask,
1032                (mask & INT_PWRDETECT) ? " power" : "",
1033                (mask & INT_SYSERROR) ? " sys" : "",
1034                (mask & INT_MSTRDEND) ? " in-dma" : "",
1035                (mask & INT_MSTWRTMOUT) ? " wrtmo" : "",
1036
1037                (mask & INT_MSTWREND) ? " out-dma" : "",
1038                (mask & INT_MSTWRSET) ? " wrset" : "",
1039                (mask & INT_ERR) ? " err" : "",
1040                (mask & INT_SOF) ? " sof" : "",
1041
1042                (mask & INT_EP3NAK) ? " ep3nak" : "",
1043                (mask & INT_EP2NAK) ? " ep2nak" : "",
1044                (mask & INT_EP1NAK) ? " ep1nak" : "",
1045                (mask & INT_EP3DATASET) ? " ep3" : "",
1046
1047                (mask & INT_EP2DATASET) ? " ep2" : "",
1048                (mask & INT_EP1DATASET) ? " ep1" : "",
1049                (mask & INT_STATUSNAK) ? " ep0snak" : "",
1050                (mask & INT_STATUS) ? " ep0status" : "",
1051
1052                (mask & INT_SETUP) ? " setup" : "",
1053                (mask & INT_ENDPOINT0) ? " ep0" : "",
1054                (mask & INT_USBRESET) ? " reset" : "",
1055                (mask & INT_SUSPEND) ? " suspend" : "");
1056}
1057
1058
1059static int udc_proc_read(struct seq_file *m, void *v)
1060{
1061        struct goku_udc                 *dev = m->private;
1062        struct goku_udc_regs __iomem    *regs = dev->regs;
1063        unsigned long                   flags;
1064        int                             i, is_usb_connected;
1065        u32                             tmp;
1066
1067        local_irq_save(flags);
1068
1069        /* basic device status */
1070        tmp = readl(&regs->power_detect);
1071        is_usb_connected = tmp & PW_DETECT;
1072        seq_printf(m,
1073                "%s - %s\n"
1074                "%s version: %s %s\n"
1075                "Gadget driver: %s\n"
1076                "Host %s, %s\n"
1077                "\n",
1078                pci_name(dev->pdev), driver_desc,
1079                driver_name, DRIVER_VERSION, dmastr(),
1080                dev->driver ? dev->driver->driver.name : "(none)",
1081                is_usb_connected
1082                        ? ((tmp & PW_PULLUP) ? "full speed" : "powered")
1083                        : "disconnected",
1084                ({const char *state;
1085                switch(dev->ep0state){
1086                case EP0_DISCONNECT:    state = "ep0_disconnect"; break;
1087                case EP0_IDLE:          state = "ep0_idle"; break;
1088                case EP0_IN:            state = "ep0_in"; break;
1089                case EP0_OUT:           state = "ep0_out"; break;
1090                case EP0_STATUS:        state = "ep0_status"; break;
1091                case EP0_STALL:         state = "ep0_stall"; break;
1092                case EP0_SUSPEND:       state = "ep0_suspend"; break;
1093                default:                state = "ep0_?"; break;
1094                } state; })
1095                );
1096
1097        dump_intmask(m, "int_status", readl(&regs->int_status));
1098        dump_intmask(m, "int_enable", readl(&regs->int_enable));
1099
1100        if (!is_usb_connected || !dev->driver || (tmp & PW_PULLUP) == 0)
1101                goto done;
1102
1103        /* registers for (active) device and ep0 */
1104        if (seq_printf(m, "\nirqs %lu\ndataset %02x "
1105                        "single.bcs %02x.%02x state %x addr %u\n",
1106                        dev->irqs, readl(&regs->DataSet),
1107                        readl(&regs->EPxSingle), readl(&regs->EPxBCS),
1108                        readl(&regs->UsbState),
1109                        readl(&regs->address)) < 0)
1110                goto done;
1111
1112        tmp = readl(&regs->dma_master);
1113        if (seq_printf(m,
1114                "dma %03X =" EIGHTBITS "%s %s\n", tmp,
1115                (tmp & MST_EOPB_DIS) ? " eopb-" : "",
1116                (tmp & MST_EOPB_ENA) ? " eopb+" : "",
1117                (tmp & MST_TIMEOUT_DIS) ? " tmo-" : "",
1118                (tmp & MST_TIMEOUT_ENA) ? " tmo+" : "",
1119
1120                (tmp & MST_RD_EOPB) ? " eopb" : "",
1121                (tmp & MST_RD_RESET) ? " in_reset" : "",
1122                (tmp & MST_WR_RESET) ? " out_reset" : "",
1123                (tmp & MST_RD_ENA) ? " IN" : "",
1124
1125                (tmp & MST_WR_ENA) ? " OUT" : "",
1126                (tmp & MST_CONNECTION)
1127                        ? "ep1in/ep2out"
1128                        : "ep1out/ep2in") < 0)
1129                goto done;
1130
1131        /* dump endpoint queues */
1132        for (i = 0; i < 4; i++) {
1133                struct goku_ep          *ep = &dev->ep [i];
1134                struct goku_request     *req;
1135
1136                if (i && !ep->ep.desc)
1137                        continue;
1138
1139                tmp = readl(ep->reg_status);
1140                if (seq_printf(m,
1141                        "%s %s max %u %s, irqs %lu, "
1142                        "status %02x (%s) " FOURBITS "\n",
1143                        ep->ep.name,
1144                        ep->is_in ? "in" : "out",
1145                        ep->ep.maxpacket,
1146                        ep->dma ? "dma" : "pio",
1147                        ep->irqs,
1148                        tmp, ({ char *s;
1149                        switch (tmp & EPxSTATUS_EP_MASK) {
1150                        case EPxSTATUS_EP_READY:
1151                                s = "ready"; break;
1152                        case EPxSTATUS_EP_DATAIN:
1153                                s = "packet"; break;
1154                        case EPxSTATUS_EP_FULL:
1155                                s = "full"; break;
1156                        case EPxSTATUS_EP_TX_ERR:       // host will retry
1157                                s = "tx_err"; break;
1158                        case EPxSTATUS_EP_RX_ERR:
1159                                s = "rx_err"; break;
1160                        case EPxSTATUS_EP_BUSY:         /* ep0 only */
1161                                s = "busy"; break;
1162                        case EPxSTATUS_EP_STALL:
1163                                s = "stall"; break;
1164                        case EPxSTATUS_EP_INVALID:      // these "can't happen"
1165                                s = "invalid"; break;
1166                        default:
1167                                s = "?"; break;
1168                        }; s; }),
1169                        (tmp & EPxSTATUS_TOGGLE) ? "data1" : "data0",
1170                        (tmp & EPxSTATUS_SUSPEND) ? " suspend" : "",
1171                        (tmp & EPxSTATUS_FIFO_DISABLE) ? " disable" : "",
1172                        (tmp & EPxSTATUS_STAGE_ERROR) ? " ep0stat" : ""
1173                        ) < 0)
1174                        goto done;
1175
1176                if (list_empty(&ep->queue)) {
1177                        if (seq_puts(m, "\t(nothing queued)\n") < 0)
1178                                goto done;
1179                        continue;
1180                }
1181                list_for_each_entry(req, &ep->queue, queue) {
1182                        if (ep->dma && req->queue.prev == &ep->queue) {
1183                                if (i == UDC_MSTRD_ENDPOINT)
1184                                        tmp = readl(&regs->in_dma_current);
1185                                else
1186                                        tmp = readl(&regs->out_dma_current);
1187                                tmp -= req->req.dma;
1188                                tmp++;
1189                        } else
1190                                tmp = req->req.actual;
1191
1192                        if (seq_printf(m,
1193                                "\treq %p len %u/%u buf %p\n",
1194                                &req->req, tmp, req->req.length,
1195                                req->req.buf) < 0)
1196                                goto done;
1197                }
1198        }
1199
1200done:
1201        local_irq_restore(flags);
1202        return 0;
1203}
1204
1205/*
1206 * seq_file wrappers for procfile show routines.
1207 */
1208static int udc_proc_open(struct inode *inode, struct file *file)
1209{
1210        return single_open(file, udc_proc_read, PDE_DATA(file_inode(file)));
1211}
1212
1213static const struct file_operations udc_proc_fops = {
1214        .open           = udc_proc_open,
1215        .read           = seq_read,
1216        .llseek         = seq_lseek,
1217        .release        = single_release,
1218};
1219
1220#endif  /* CONFIG_USB_GADGET_DEBUG_FILES */
1221
1222/*-------------------------------------------------------------------------*/
1223
1224static void udc_reinit (struct goku_udc *dev)
1225{
1226        static char *names [] = { "ep0", "ep1-bulk", "ep2-bulk", "ep3-bulk" };
1227
1228        unsigned i;
1229
1230        INIT_LIST_HEAD (&dev->gadget.ep_list);
1231        dev->gadget.ep0 = &dev->ep [0].ep;
1232        dev->gadget.speed = USB_SPEED_UNKNOWN;
1233        dev->ep0state = EP0_DISCONNECT;
1234        dev->irqs = 0;
1235
1236        for (i = 0; i < 4; i++) {
1237                struct goku_ep  *ep = &dev->ep[i];
1238
1239                ep->num = i;
1240                ep->ep.name = names[i];
1241                ep->reg_fifo = &dev->regs->ep_fifo [i];
1242                ep->reg_status = &dev->regs->ep_status [i];
1243                ep->reg_mode = &dev->regs->ep_mode[i];
1244
1245                ep->ep.ops = &goku_ep_ops;
1246                list_add_tail (&ep->ep.ep_list, &dev->gadget.ep_list);
1247                ep->dev = dev;
1248                INIT_LIST_HEAD (&ep->queue);
1249
1250                ep_reset(NULL, ep);
1251        }
1252
1253        dev->ep[0].reg_mode = NULL;
1254        dev->ep[0].ep.maxpacket = MAX_EP0_SIZE;
1255        list_del_init (&dev->ep[0].ep.ep_list);
1256}
1257
1258static void udc_reset(struct goku_udc *dev)
1259{
1260        struct goku_udc_regs __iomem    *regs = dev->regs;
1261
1262        writel(0, &regs->power_detect);
1263        writel(0, &regs->int_enable);
1264        readl(&regs->int_enable);
1265        dev->int_enable = 0;
1266
1267        /* deassert reset, leave USB D+ at hi-Z (no pullup)
1268         * don't let INT_PWRDETECT sequence begin
1269         */
1270        udelay(250);
1271        writel(PW_RESETB, &regs->power_detect);
1272        readl(&regs->int_enable);
1273}
1274
1275static void ep0_start(struct goku_udc *dev)
1276{
1277        struct goku_udc_regs __iomem    *regs = dev->regs;
1278        unsigned                        i;
1279
1280        VDBG(dev, "%s\n", __func__);
1281
1282        udc_reset(dev);
1283        udc_reinit (dev);
1284        //writel(MST_EOPB_ENA | MST_TIMEOUT_ENA, &regs->dma_master);
1285
1286        /* hw handles set_address, set_feature, get_status; maybe more */
1287        writel(   G_REQMODE_SET_INTF | G_REQMODE_GET_INTF
1288                | G_REQMODE_SET_CONF | G_REQMODE_GET_CONF
1289                | G_REQMODE_GET_DESC
1290                | G_REQMODE_CLEAR_FEAT
1291                , &regs->reqmode);
1292
1293        for (i = 0; i < 4; i++)
1294                dev->ep[i].irqs = 0;
1295
1296        /* can't modify descriptors after writing UsbReady */
1297        for (i = 0; i < DESC_LEN; i++)
1298                writel(0, &regs->descriptors[i]);
1299        writel(0, &regs->UsbReady);
1300
1301        /* expect ep0 requests when the host drops reset */
1302        writel(PW_RESETB | PW_PULLUP, &regs->power_detect);
1303        dev->int_enable = INT_DEVWIDE | INT_EP0;
1304        writel(dev->int_enable, &dev->regs->int_enable);
1305        readl(&regs->int_enable);
1306        dev->gadget.speed = USB_SPEED_FULL;
1307        dev->ep0state = EP0_IDLE;
1308}
1309
1310static void udc_enable(struct goku_udc *dev)
1311{
1312        /* start enumeration now, or after power detect irq */
1313        if (readl(&dev->regs->power_detect) & PW_DETECT)
1314                ep0_start(dev);
1315        else {
1316                DBG(dev, "%s\n", __func__);
1317                dev->int_enable = INT_PWRDETECT;
1318                writel(dev->int_enable, &dev->regs->int_enable);
1319        }
1320}
1321
1322/*-------------------------------------------------------------------------*/
1323
1324/* keeping it simple:
1325 * - one bus driver, initted first;
1326 * - one function driver, initted second
1327 */
1328
1329/* when a driver is successfully registered, it will receive
1330 * control requests including set_configuration(), which enables
1331 * non-control requests.  then usb traffic follows until a
1332 * disconnect is reported.  then a host may connect again, or
1333 * the driver might get unbound.
1334 */
1335static int goku_udc_start(struct usb_gadget *g,
1336                struct usb_gadget_driver *driver)
1337{
1338        struct goku_udc *dev = to_goku_udc(g);
1339
1340        /* hook up the driver */
1341        driver->driver.bus = NULL;
1342        dev->driver = driver;
1343
1344        /*
1345         * then enable host detection and ep0; and we're ready
1346         * for set_configuration as well as eventual disconnect.
1347         */
1348        udc_enable(dev);
1349
1350        return 0;
1351}
1352
1353static void
1354stop_activity(struct goku_udc *dev, struct usb_gadget_driver *driver)
1355{
1356        unsigned        i;
1357
1358        DBG (dev, "%s\n", __func__);
1359
1360        if (dev->gadget.speed == USB_SPEED_UNKNOWN)
1361                driver = NULL;
1362
1363        /* disconnect gadget driver after quiesceing hw and the driver */
1364        udc_reset (dev);
1365        for (i = 0; i < 4; i++)
1366                nuke(&dev->ep [i], -ESHUTDOWN);
1367
1368        if (dev->driver)
1369                udc_enable(dev);
1370}
1371
1372static int goku_udc_stop(struct usb_gadget *g,
1373                struct usb_gadget_driver *driver)
1374{
1375        struct goku_udc *dev = to_goku_udc(g);
1376        unsigned long   flags;
1377
1378        spin_lock_irqsave(&dev->lock, flags);
1379        dev->driver = NULL;
1380        stop_activity(dev, driver);
1381        spin_unlock_irqrestore(&dev->lock, flags);
1382
1383        return 0;
1384}
1385
1386/*-------------------------------------------------------------------------*/
1387
1388static void ep0_setup(struct goku_udc *dev)
1389{
1390        struct goku_udc_regs __iomem    *regs = dev->regs;
1391        struct usb_ctrlrequest          ctrl;
1392        int                             tmp;
1393
1394        /* read SETUP packet and enter DATA stage */
1395        ctrl.bRequestType = readl(&regs->bRequestType);
1396        ctrl.bRequest = readl(&regs->bRequest);
1397        ctrl.wValue  = cpu_to_le16((readl(&regs->wValueH)  << 8)
1398                                        | readl(&regs->wValueL));
1399        ctrl.wIndex  = cpu_to_le16((readl(&regs->wIndexH)  << 8)
1400                                        | readl(&regs->wIndexL));
1401        ctrl.wLength = cpu_to_le16((readl(&regs->wLengthH) << 8)
1402                                        | readl(&regs->wLengthL));
1403        writel(0, &regs->SetupRecv);
1404
1405        nuke(&dev->ep[0], 0);
1406        dev->ep[0].stopped = 0;
1407        if (likely(ctrl.bRequestType & USB_DIR_IN)) {
1408                dev->ep[0].is_in = 1;
1409                dev->ep0state = EP0_IN;
1410                /* detect early status stages */
1411                writel(ICONTROL_STATUSNAK, &dev->regs->IntControl);
1412        } else {
1413                dev->ep[0].is_in = 0;
1414                dev->ep0state = EP0_OUT;
1415
1416                /* NOTE:  CLEAR_FEATURE is done in software so that we can
1417                 * synchronize transfer restarts after bulk IN stalls.  data
1418                 * won't even enter the fifo until the halt is cleared.
1419                 */
1420                switch (ctrl.bRequest) {
1421                case USB_REQ_CLEAR_FEATURE:
1422                        switch (ctrl.bRequestType) {
1423                        case USB_RECIP_ENDPOINT:
1424                                tmp = le16_to_cpu(ctrl.wIndex) & 0x0f;
1425                                /* active endpoint */
1426                                if (tmp > 3 ||
1427                                    (!dev->ep[tmp].ep.desc && tmp != 0))
1428                                        goto stall;
1429                                if (ctrl.wIndex & cpu_to_le16(
1430                                                USB_DIR_IN)) {
1431                                        if (!dev->ep[tmp].is_in)
1432                                                goto stall;
1433                                } else {
1434                                        if (dev->ep[tmp].is_in)
1435                                                goto stall;
1436                                }
1437                                if (ctrl.wValue != cpu_to_le16(
1438                                                USB_ENDPOINT_HALT))
1439                                        goto stall;
1440                                if (tmp)
1441                                        goku_clear_halt(&dev->ep[tmp]);
1442succeed:
1443                                /* start ep0out status stage */
1444                                writel(~(1<<0), &regs->EOP);
1445                                dev->ep[0].stopped = 1;
1446                                dev->ep0state = EP0_STATUS;
1447                                return;
1448                        case USB_RECIP_DEVICE:
1449                                /* device remote wakeup: always clear */
1450                                if (ctrl.wValue != cpu_to_le16(1))
1451                                        goto stall;
1452                                VDBG(dev, "clear dev remote wakeup\n");
1453                                goto succeed;
1454                        case USB_RECIP_INTERFACE:
1455                                goto stall;
1456                        default:                /* pass to gadget driver */
1457                                break;
1458                        }
1459                        break;
1460                default:
1461                        break;
1462                }
1463        }
1464
1465#ifdef USB_TRACE
1466        VDBG(dev, "SETUP %02x.%02x v%04x i%04x l%04x\n",
1467                ctrl.bRequestType, ctrl.bRequest,
1468                le16_to_cpu(ctrl.wValue), le16_to_cpu(ctrl.wIndex),
1469                le16_to_cpu(ctrl.wLength));
1470#endif
1471
1472        /* hw wants to know when we're configured (or not) */
1473        dev->req_config = (ctrl.bRequest == USB_REQ_SET_CONFIGURATION
1474                                && ctrl.bRequestType == USB_RECIP_DEVICE);
1475        if (unlikely(dev->req_config))
1476                dev->configured = (ctrl.wValue != cpu_to_le16(0));
1477
1478        /* delegate everything to the gadget driver.
1479         * it may respond after this irq handler returns.
1480         */
1481        spin_unlock (&dev->lock);
1482        tmp = dev->driver->setup(&dev->gadget, &ctrl);
1483        spin_lock (&dev->lock);
1484        if (unlikely(tmp < 0)) {
1485stall:
1486#ifdef USB_TRACE
1487                VDBG(dev, "req %02x.%02x protocol STALL; err %d\n",
1488                                ctrl.bRequestType, ctrl.bRequest, tmp);
1489#endif
1490                command(regs, COMMAND_STALL, 0);
1491                dev->ep[0].stopped = 1;
1492                dev->ep0state = EP0_STALL;
1493        }
1494
1495        /* expect at least one data or status stage irq */
1496}
1497
1498#define ACK(irqbit) { \
1499                stat &= ~irqbit; \
1500                writel(~irqbit, &regs->int_status); \
1501                handled = 1; \
1502                }
1503
1504static irqreturn_t goku_irq(int irq, void *_dev)
1505{
1506        struct goku_udc                 *dev = _dev;
1507        struct goku_udc_regs __iomem    *regs = dev->regs;
1508        struct goku_ep                  *ep;
1509        u32                             stat, handled = 0;
1510        unsigned                        i, rescans = 5;
1511
1512        spin_lock(&dev->lock);
1513
1514rescan:
1515        stat = readl(&regs->int_status) & dev->int_enable;
1516        if (!stat)
1517                goto done;
1518        dev->irqs++;
1519
1520        /* device-wide irqs */
1521        if (unlikely(stat & INT_DEVWIDE)) {
1522                if (stat & INT_SYSERROR) {
1523                        ERROR(dev, "system error\n");
1524                        stop_activity(dev, dev->driver);
1525                        stat = 0;
1526                        handled = 1;
1527                        // FIXME have a neater way to prevent re-enumeration
1528                        dev->driver = NULL;
1529                        goto done;
1530                }
1531                if (stat & INT_PWRDETECT) {
1532                        writel(~stat, &regs->int_status);
1533                        if (readl(&dev->regs->power_detect) & PW_DETECT) {
1534                                VDBG(dev, "connect\n");
1535                                ep0_start(dev);
1536                        } else {
1537                                DBG(dev, "disconnect\n");
1538                                if (dev->gadget.speed == USB_SPEED_FULL)
1539                                        stop_activity(dev, dev->driver);
1540                                dev->ep0state = EP0_DISCONNECT;
1541                                dev->int_enable = INT_DEVWIDE;
1542                                writel(dev->int_enable, &dev->regs->int_enable);
1543                        }
1544                        stat = 0;
1545                        handled = 1;
1546                        goto done;
1547                }
1548                if (stat & INT_SUSPEND) {
1549                        ACK(INT_SUSPEND);
1550                        if (readl(&regs->ep_status[0]) & EPxSTATUS_SUSPEND) {
1551                                switch (dev->ep0state) {
1552                                case EP0_DISCONNECT:
1553                                case EP0_SUSPEND:
1554                                        goto pm_next;
1555                                default:
1556                                        break;
1557                                }
1558                                DBG(dev, "USB suspend\n");
1559                                dev->ep0state = EP0_SUSPEND;
1560                                if (dev->gadget.speed != USB_SPEED_UNKNOWN
1561                                                && dev->driver
1562                                                && dev->driver->suspend) {
1563                                        spin_unlock(&dev->lock);
1564                                        dev->driver->suspend(&dev->gadget);
1565                                        spin_lock(&dev->lock);
1566                                }
1567                        } else {
1568                                if (dev->ep0state != EP0_SUSPEND) {
1569                                        DBG(dev, "bogus USB resume %d\n",
1570                                                dev->ep0state);
1571                                        goto pm_next;
1572                                }
1573                                DBG(dev, "USB resume\n");
1574                                dev->ep0state = EP0_IDLE;
1575                                if (dev->gadget.speed != USB_SPEED_UNKNOWN
1576                                                && dev->driver
1577                                                && dev->driver->resume) {
1578                                        spin_unlock(&dev->lock);
1579                                        dev->driver->resume(&dev->gadget);
1580                                        spin_lock(&dev->lock);
1581                                }
1582                        }
1583                }
1584pm_next:
1585                if (stat & INT_USBRESET) {              /* hub reset done */
1586                        ACK(INT_USBRESET);
1587                        INFO(dev, "USB reset done, gadget %s\n",
1588                                dev->driver->driver.name);
1589                }
1590                // and INT_ERR on some endpoint's crc/bitstuff/... problem
1591        }
1592
1593        /* progress ep0 setup, data, or status stages.
1594         * no transition {EP0_STATUS, EP0_STALL} --> EP0_IDLE; saves irqs
1595         */
1596        if (stat & INT_SETUP) {
1597                ACK(INT_SETUP);
1598                dev->ep[0].irqs++;
1599                ep0_setup(dev);
1600        }
1601        if (stat & INT_STATUSNAK) {
1602                ACK(INT_STATUSNAK|INT_ENDPOINT0);
1603                if (dev->ep0state == EP0_IN) {
1604                        ep = &dev->ep[0];
1605                        ep->irqs++;
1606                        nuke(ep, 0);
1607                        writel(~(1<<0), &regs->EOP);
1608                        dev->ep0state = EP0_STATUS;
1609                }
1610        }
1611        if (stat & INT_ENDPOINT0) {
1612                ACK(INT_ENDPOINT0);
1613                ep = &dev->ep[0];
1614                ep->irqs++;
1615                pio_advance(ep);
1616        }
1617
1618        /* dma completion */
1619        if (stat & INT_MSTRDEND) {      /* IN */
1620                ACK(INT_MSTRDEND);
1621                ep = &dev->ep[UDC_MSTRD_ENDPOINT];
1622                ep->irqs++;
1623                dma_advance(dev, ep);
1624        }
1625        if (stat & INT_MSTWREND) {      /* OUT */
1626                ACK(INT_MSTWREND);
1627                ep = &dev->ep[UDC_MSTWR_ENDPOINT];
1628                ep->irqs++;
1629                dma_advance(dev, ep);
1630        }
1631        if (stat & INT_MSTWRTMOUT) {    /* OUT */
1632                ACK(INT_MSTWRTMOUT);
1633                ep = &dev->ep[UDC_MSTWR_ENDPOINT];
1634                ep->irqs++;
1635                ERROR(dev, "%s write timeout ?\n", ep->ep.name);
1636                // reset dma? then dma_advance()
1637        }
1638
1639        /* pio */
1640        for (i = 1; i < 4; i++) {
1641                u32             tmp = INT_EPxDATASET(i);
1642
1643                if (!(stat & tmp))
1644                        continue;
1645                ep = &dev->ep[i];
1646                pio_advance(ep);
1647                if (list_empty (&ep->queue))
1648                        pio_irq_disable(dev, regs, i);
1649                stat &= ~tmp;
1650                handled = 1;
1651                ep->irqs++;
1652        }
1653
1654        if (rescans--)
1655                goto rescan;
1656
1657done:
1658        (void)readl(&regs->int_enable);
1659        spin_unlock(&dev->lock);
1660        if (stat)
1661                DBG(dev, "unhandled irq status: %05x (%05x, %05x)\n", stat,
1662                                readl(&regs->int_status), dev->int_enable);
1663        return IRQ_RETVAL(handled);
1664}
1665
1666#undef ACK
1667
1668/*-------------------------------------------------------------------------*/
1669
1670static void gadget_release(struct device *_dev)
1671{
1672        struct goku_udc *dev = dev_get_drvdata(_dev);
1673
1674        kfree(dev);
1675}
1676
1677/* tear down the binding between this driver and the pci device */
1678
1679static void goku_remove(struct pci_dev *pdev)
1680{
1681        struct goku_udc         *dev = pci_get_drvdata(pdev);
1682
1683        DBG(dev, "%s\n", __func__);
1684
1685        usb_del_gadget_udc(&dev->gadget);
1686
1687        BUG_ON(dev->driver);
1688
1689#ifdef CONFIG_USB_GADGET_DEBUG_FILES
1690        remove_proc_entry(proc_node_name, NULL);
1691#endif
1692        if (dev->regs)
1693                udc_reset(dev);
1694        if (dev->got_irq)
1695                free_irq(pdev->irq, dev);
1696        if (dev->regs)
1697                iounmap(dev->regs);
1698        if (dev->got_region)
1699                release_mem_region(pci_resource_start (pdev, 0),
1700                                pci_resource_len (pdev, 0));
1701        if (dev->enabled)
1702                pci_disable_device(pdev);
1703
1704        pci_set_drvdata(pdev, NULL);
1705        dev->regs = NULL;
1706
1707        INFO(dev, "unbind\n");
1708}
1709
1710/* wrap this driver around the specified pci device, but
1711 * don't respond over USB until a gadget driver binds to us.
1712 */
1713
1714static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1715{
1716        struct goku_udc         *dev = NULL;
1717        unsigned long           resource, len;
1718        void __iomem            *base = NULL;
1719        int                     retval;
1720
1721        if (!pdev->irq) {
1722                printk(KERN_ERR "Check PCI %s IRQ setup!\n", pci_name(pdev));
1723                retval = -ENODEV;
1724                goto err;
1725        }
1726
1727        /* alloc, and start init */
1728        dev = kzalloc (sizeof *dev, GFP_KERNEL);
1729        if (dev == NULL){
1730                pr_debug("enomem %s\n", pci_name(pdev));
1731                retval = -ENOMEM;
1732                goto err;
1733        }
1734
1735        spin_lock_init(&dev->lock);
1736        dev->pdev = pdev;
1737        dev->gadget.ops = &goku_ops;
1738        dev->gadget.max_speed = USB_SPEED_FULL;
1739
1740        /* the "gadget" abstracts/virtualizes the controller */
1741        dev->gadget.name = driver_name;
1742
1743        /* now all the pci goodies ... */
1744        retval = pci_enable_device(pdev);
1745        if (retval < 0) {
1746                DBG(dev, "can't enable, %d\n", retval);
1747                goto err;
1748        }
1749        dev->enabled = 1;
1750
1751        resource = pci_resource_start(pdev, 0);
1752        len = pci_resource_len(pdev, 0);
1753        if (!request_mem_region(resource, len, driver_name)) {
1754                DBG(dev, "controller already in use\n");
1755                retval = -EBUSY;
1756                goto err;
1757        }
1758        dev->got_region = 1;
1759
1760        base = ioremap_nocache(resource, len);
1761        if (base == NULL) {
1762                DBG(dev, "can't map memory\n");
1763                retval = -EFAULT;
1764                goto err;
1765        }
1766        dev->regs = (struct goku_udc_regs __iomem *) base;
1767
1768        pci_set_drvdata(pdev, dev);
1769        INFO(dev, "%s\n", driver_desc);
1770        INFO(dev, "version: " DRIVER_VERSION " %s\n", dmastr());
1771        INFO(dev, "irq %d, pci mem %p\n", pdev->irq, base);
1772
1773        /* init to known state, then setup irqs */
1774        udc_reset(dev);
1775        udc_reinit (dev);
1776        if (request_irq(pdev->irq, goku_irq, IRQF_SHARED,
1777                        driver_name, dev) != 0) {
1778                DBG(dev, "request interrupt %d failed\n", pdev->irq);
1779                retval = -EBUSY;
1780                goto err;
1781        }
1782        dev->got_irq = 1;
1783        if (use_dma)
1784                pci_set_master(pdev);
1785
1786
1787#ifdef CONFIG_USB_GADGET_DEBUG_FILES
1788        proc_create_data(proc_node_name, 0, NULL, &udc_proc_fops, dev);
1789#endif
1790
1791        retval = usb_add_gadget_udc_release(&pdev->dev, &dev->gadget,
1792                        gadget_release);
1793        if (retval)
1794                goto err;
1795
1796        return 0;
1797
1798err:
1799        if (dev)
1800                goku_remove (pdev);
1801        return retval;
1802}
1803
1804
1805/*-------------------------------------------------------------------------*/
1806
1807static const struct pci_device_id pci_ids[] = { {
1808        .class =        ((PCI_CLASS_SERIAL_USB << 8) | 0xfe),
1809        .class_mask =   ~0,
1810        .vendor =       0x102f,         /* Toshiba */
1811        .device =       0x0107,         /* this UDC */
1812        .subvendor =    PCI_ANY_ID,
1813        .subdevice =    PCI_ANY_ID,
1814
1815}, { /* end: all zeroes */ }
1816};
1817MODULE_DEVICE_TABLE (pci, pci_ids);
1818
1819static struct pci_driver goku_pci_driver = {
1820        .name =         (char *) driver_name,
1821        .id_table =     pci_ids,
1822
1823        .probe =        goku_probe,
1824        .remove =       goku_remove,
1825
1826        /* FIXME add power management support */
1827};
1828
1829module_pci_driver(goku_pci_driver);
1830