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