original comment: +Wilson03172004,marked due to this pci host does not support MWI
[linux-2.4.git] / drivers / usb / host / ehci-q.c
1 /*
2  * Copyright (c) 2001-2002 by David Brownell
3  * 
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License as published by the
6  * Free Software Foundation; either version 2 of the License, or (at your
7  * option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18
19 /* this file is part of ehci-hcd.c */
20
21 /*-------------------------------------------------------------------------*/
22
23 /*
24  * EHCI hardware queue manipulation ... the core.  QH/QTD manipulation.
25  *
26  * Control, bulk, and interrupt traffic all use "qh" lists.  They list "qtd"
27  * entries describing USB transactions, max 16-20kB/entry (with 4kB-aligned
28  * buffers needed for the larger number).  We use one QH per endpoint, queue
29  * multiple urbs (all three types) per endpoint.  URBs may need several qtds.
30  *
31  * ISO traffic uses "ISO TD" (itd, and sitd) records, and (along with
32  * interrupts) needs careful scheduling.  Performance improvements can be
33  * an ongoing challenge.  That's in "ehci-sched.c".
34  * 
35  * USB 1.1 devices are handled (a) by "companion" OHCI or UHCI root hubs,
36  * or otherwise through transaction translators (TTs) in USB 2.0 hubs using
37  * (b) special fields in qh entries or (c) split iso entries.  TTs will
38  * buffer low/full speed data so the host collects it at high speed.
39  */
40
41 /*-------------------------------------------------------------------------*/
42
43 /* fill a qtd, returning how much of the buffer we were able to queue up */
44
45 static int
46 qtd_fill (struct ehci_qtd *qtd, dma_addr_t buf, size_t len,
47                 int token, int maxpacket)
48 {
49         int     i, count;
50         u64     addr = buf;
51
52         /* one buffer entry per 4K ... first might be short or unaligned */
53         qtd->hw_buf [0] = cpu_to_le32 ((u32)addr);
54         qtd->hw_buf_hi [0] = cpu_to_le32 ((u32)(addr >> 32));
55         count = 0x1000 - (buf & 0x0fff);        /* rest of that page */
56         if (likely (len < count))               /* ... iff needed */
57                 count = len;
58         else {
59                 buf +=  0x1000;
60                 buf &= ~0x0fff;
61
62                 /* per-qtd limit: from 16K to 20K (best alignment) */
63                 for (i = 1; count < len && i < 5; i++) {
64                         addr = buf;
65                         qtd->hw_buf [i] = cpu_to_le32 ((u32)addr);
66                         qtd->hw_buf_hi [i] = cpu_to_le32 ((u32)(addr >> 32));
67 #if 0   //+Bing try try 12222004
68                         buf += 0x1000;
69                         if ((count + 0x1000) < len)
70                                 count += 0x1000;
71 #else
72                         buf += 0x4000;
73                         if ((count + 0x4000) < len)
74                                 count += 0x4000;
75 #endif
76                         else
77                                 count = len;
78                 }
79
80                 /* short packets may only terminate transfers */
81                 if (count != len)
82                         count -= (count % maxpacket);
83         }
84         qtd->hw_token = cpu_to_le32 ((count << 16) | token);
85         qtd->length = count;
86
87         return count;
88 }
89
90 /*-------------------------------------------------------------------------*/
91
92 static inline void
93 qh_update (struct ehci_hcd *ehci, struct ehci_qh *qh, struct ehci_qtd *qtd)
94 {
95         BUG_ON(qh->qh_state != QH_STATE_IDLE);
96
97         qh->hw_qtd_next = QTD_NEXT (qtd->qtd_dma);
98         qh->hw_alt_next = EHCI_LIST_END;
99
100         /* HC must see latest qtd and qh data before we clear ACTIVE+HALT */
101         wmb ();
102         qh->hw_token &= __constant_cpu_to_le32 (QTD_TOGGLE | QTD_STS_PING);
103 }
104
105 static void
106 qh_refresh (struct ehci_hcd *ehci, struct ehci_qh *qh)
107 {
108         struct ehci_qtd *qtd;
109
110         if (list_empty (&qh->qtd_list))
111                 qtd = qh->dummy;
112         else {
113                 qtd = list_entry (qh->qtd_list.next,
114                                 struct ehci_qtd, qtd_list);
115                 /* first qtd may already be partially processed */
116                 if (cpu_to_le32 (qtd->qtd_dma) == qh->hw_current)
117                         qtd = NULL;
118         }
119         if (qtd)
120                 qh_update (ehci, qh, qtd);
121 }
122
123 /*-------------------------------------------------------------------------*/
124
125 static void qtd_copy_status (
126         struct ehci_hcd *ehci,
127         struct urb *urb,
128         size_t length,
129         u32 token
130 )
131 {
132         /* count IN/OUT bytes, not SETUP (even short packets) */
133         if (likely (QTD_PID (token) != 2))
134                 urb->actual_length += length - QTD_LENGTH (token);
135
136         /* don't modify error codes */
137         if (unlikely (urb->status != -EINPROGRESS))
138                 return;
139
140         /* force cleanup after short read; not always an error */
141         if (unlikely (IS_SHORT_READ (token)))
142                 urb->status = -EREMOTEIO;
143
144         /* serious "can't proceed" faults reported by the hardware */
145         if (token & QTD_STS_HALT) {
146                 if (token & QTD_STS_BABBLE) {
147                         /* FIXME "must" disable babbling device's port too */
148                         urb->status = -EOVERFLOW;
149                 } else if (token & QTD_STS_MMF) {
150                         /* fs/ls interrupt xfer missed the complete-split */
151                         urb->status = -EPROTO;
152                 } else if (token & QTD_STS_DBE) {
153                         urb->status = (QTD_PID (token) == 1) /* IN ? */
154                                 ? -ENOSR  /* hc couldn't read data */
155                                 : -ECOMM; /* hc couldn't write data */
156                 } else if (token & QTD_STS_XACT) {
157                         /* timeout, bad crc, wrong PID, etc; retried */
158                         if (QTD_CERR (token))
159                                 urb->status = -EPIPE;
160                         else {
161                                 ehci_dbg (ehci, "devpath %s ep%d%s 3strikes\n",
162                                         urb->dev->devpath,
163                                         usb_pipeendpoint (urb->pipe),
164                                         usb_pipein (urb->pipe) ? "in" : "out");
165                                 urb->status = -EPROTO;
166                         }
167                 /* CERR nonzero + no errors + halt --> stall */
168                 } else if (QTD_CERR (token))
169                         urb->status = -EPIPE;
170                 else    /* unknown */
171                         urb->status = -EPROTO;
172
173                 ehci_vdbg (ehci,
174                         "dev%d ep%d%s qtd token %08x --> status %d\n",
175                         usb_pipedevice (urb->pipe),
176                         usb_pipeendpoint (urb->pipe),
177                         usb_pipein (urb->pipe) ? "in" : "out",
178                         token, urb->status);
179
180                 /* stall indicates some recovery action is needed */
181                 if (urb->status == -EPIPE) {
182                         int     pipe = urb->pipe;
183
184                         if (!usb_pipecontrol (pipe))
185                                 usb_endpoint_halt (urb->dev,
186                                         usb_pipeendpoint (pipe),
187                                         usb_pipeout (pipe));
188                         if (urb->dev->tt && !usb_pipeint (pipe)) {
189 #ifdef DEBUG
190                                 struct usb_device *tt = urb->dev->tt->hub;
191                                 dbg ("clear tt %s-%s p%d buffer, a%d ep%d",
192                                         tt->bus->bus_name, tt->devpath,
193                                         urb->dev->ttport, urb->dev->devnum,
194                                         usb_pipeendpoint (pipe));
195 #endif /* DEBUG */
196                                 usb_hub_tt_clear_buffer (urb->dev, pipe);
197                         }
198                 }
199         }
200 }
201
202 static void
203 ehci_urb_done (struct ehci_hcd *ehci, struct urb *urb, struct pt_regs *regs)
204 {
205 #ifdef  INTR_AUTOMAGIC
206         struct urb              *resubmit = 0;
207         struct usb_device       *dev = 0;
208 #endif
209
210         if (likely (urb->hcpriv != 0)) {
211                 struct ehci_qh  *qh = (struct ehci_qh *) urb->hcpriv;
212
213                 /* S-mask in a QH means it's an interrupt urb */
214                 if ((qh->hw_info2 & __constant_cpu_to_le32 (0x00ff)) != 0) {
215
216                         /* ... update hc-wide periodic stats (for usbfs) */
217                         hcd_to_bus (&ehci->hcd)->bandwidth_int_reqs--;
218
219 #ifdef  INTR_AUTOMAGIC
220                         if (!((urb->status == -ENOENT)
221                                         || (urb->status == -ECONNRESET))) {
222                                 resubmit = usb_get_urb (urb);
223                                 dev = urb->dev;
224                         }
225 #endif
226                 }
227                 qh_put (ehci, qh);
228         }
229
230         spin_lock (&urb->lock);
231         urb->hcpriv = 0;
232         switch (urb->status) {
233         case -EINPROGRESS:              /* success */
234                 urb->status = 0;
235         default:                        /* fault */
236                 COUNT (ehci->stats.complete);
237                 break;
238         case -EREMOTEIO:                /* fault or normal */
239                 if (!(urb->transfer_flags & URB_SHORT_NOT_OK))
240                         urb->status = 0;
241                 COUNT (ehci->stats.complete);
242                 break;
243         case -ECONNRESET:               /* canceled */
244         case -ENOENT:
245                 COUNT (ehci->stats.unlink);
246                 break;
247         }
248         spin_unlock (&urb->lock);
249
250 #ifdef EHCI_URB_TRACE
251         ehci_dbg (ehci,
252                 "%s %s urb %p ep%d%s status %d len %d/%d\n",
253                 __FUNCTION__, urb->dev->devpath, urb,
254                 usb_pipeendpoint (urb->pipe),
255                 usb_pipein (urb->pipe) ? "in" : "out",
256                 urb->status,
257                 urb->actual_length, urb->transfer_buffer_length);
258 #endif
259
260         /* complete() can reenter this HCD */
261         spin_unlock (&ehci->lock);
262         usb_hcd_giveback_urb (&ehci->hcd, urb, regs);
263
264 #ifdef  INTR_AUTOMAGIC
265         if (resubmit && ((urb->status == -ENOENT)
266                                 || (urb->status == -ECONNRESET))) {
267                 usb_put_urb (resubmit);
268                 resubmit = 0;
269         }
270         // device drivers will soon be doing something like this
271         if (resubmit) {
272                 int     status;
273
274                 resubmit->dev = dev;
275                 status = SUBMIT_URB (resubmit, SLAB_ATOMIC);
276                 if (status != 0)
277                         err ("can't resubmit interrupt urb %p: status %d",
278                                         resubmit, status);
279                 usb_put_urb (resubmit);
280         }
281 #endif
282
283         spin_lock (&ehci->lock);
284 }
285
286 static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh);
287 static void unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh);
288
289 /*
290  * Process and free completed qtds for a qh, returning URBs to drivers.
291  * Chases up to qh->hw_current.  Returns number of completions called,
292  * indicating how much "real" work we did.
293  */
294 #define HALT_BIT __constant_cpu_to_le32(QTD_STS_HALT)
295 static unsigned
296 qh_completions (struct ehci_hcd *ehci, struct ehci_qh *qh, struct pt_regs *regs)
297 {
298         struct ehci_qtd         *last = 0, *end = qh->dummy;
299         struct list_head        *entry, *tmp;
300         int                     stopped;
301         unsigned                count = 0;
302         int                     do_status = 0;
303         u8                      state;
304
305         if (unlikely (list_empty (&qh->qtd_list)))
306                 return count;
307
308         /* completions (or tasks on other cpus) must never clobber HALT
309          * till we've gone through and cleaned everything up, even when
310          * they add urbs to this qh's queue or mark them for unlinking.
311          *
312          * NOTE:  unlinking expects to be done in queue order.
313          */
314         state = qh->qh_state;
315         qh->qh_state = QH_STATE_COMPLETING;
316         stopped = (state == QH_STATE_IDLE);
317
318         /* remove de-activated QTDs from front of queue.
319          * after faults (including short reads), cleanup this urb
320          * then let the queue advance.
321          * if queue is stopped, handles unlinks.
322          */
323         list_for_each_safe (entry, tmp, &qh->qtd_list) {
324                 struct ehci_qtd *qtd;
325                 struct urb      *urb;
326                 u32             token = 0;
327
328                 qtd = list_entry (entry, struct ehci_qtd, qtd_list);
329                 urb = qtd->urb;
330
331                 /* clean up any state from previous QTD ...*/
332                 if (last) {
333                         if (likely (last->urb != urb)) {
334                                 ehci_urb_done (ehci, last->urb, regs);
335                                 count++;
336                         }
337                         ehci_qtd_free (ehci, last);
338                         last = 0;
339                 }
340
341                 /* ignore urbs submitted during completions we reported */
342                 if (qtd == end)
343                         break;
344
345                 /* hardware copies qtd out of qh overlay */
346                 rmb ();
347                 token = le32_to_cpu (qtd->hw_token);
348
349                 /* always clean up qtds the hc de-activated */
350                 if ((token & QTD_STS_ACTIVE) == 0) {
351
352                         if ((token & QTD_STS_HALT) != 0) {
353                                 stopped = 1;
354
355                         /* magic dummy for some short reads; qh won't advance */
356                         } else if (IS_SHORT_READ (token)
357                                         && (qh->hw_alt_next & QTD_MASK)
358                                                 == ehci->async->hw_alt_next) {
359                                 stopped = 1;
360                                 goto halt;
361                         }
362
363                 /* stop scanning when we reach qtds the hc is using */
364                 } else if (likely (!stopped
365                                 && HCD_IS_RUNNING (ehci->hcd.state))) {
366                         break;
367
368                 } else {
369                         stopped = 1;
370
371                         /* ignore active urbs unless some previous qtd
372                          * for the urb faulted (including short read) or
373                          * its urb was canceled.  we may patch qh or qtds.
374                          */
375                         if (likely (urb->status == -EINPROGRESS))
376                                 continue;
377                         
378                         /* issue status after short control reads */
379                         if (unlikely (do_status != 0)
380                                         && QTD_PID (token) == 0 /* OUT */) {
381                                 do_status = 0;
382                                 continue;
383                         }
384
385                         /* token in overlay may be most current */
386                         if (state == QH_STATE_IDLE
387                                         && cpu_to_le32 (qtd->qtd_dma)
388                                                 == qh->hw_current)
389                                 token = le32_to_cpu (qh->hw_token);
390
391                         /* force halt for unlinked or blocked qh, so we'll
392                          * patch the qh later and so that completions can't
393                          * activate it while we "know" it's stopped.
394                          */
395                         if ((HALT_BIT & qh->hw_token) == 0) {
396 halt:
397                                 qh->hw_token |= HALT_BIT;
398                                 wmb ();
399                         }
400                 }
401  
402                 /* remove it from the queue */
403                 spin_lock (&urb->lock);
404                 qtd_copy_status (ehci, urb, qtd->length, token);
405                 do_status = (urb->status == -EREMOTEIO)
406                                 && usb_pipecontrol (urb->pipe);
407                 spin_unlock (&urb->lock);
408
409                 if (stopped && qtd->qtd_list.prev != &qh->qtd_list) {
410                         last = list_entry (qtd->qtd_list.prev,
411                                         struct ehci_qtd, qtd_list);
412                         last->hw_next = qtd->hw_next;
413                 }
414                 list_del (&qtd->qtd_list);
415                 last = qtd;
416         }
417
418         /* last urb's completion might still need calling */
419         if (likely (last != 0)) {
420                 ehci_urb_done (ehci, last->urb, regs);
421                 count++;
422                 ehci_qtd_free (ehci, last);
423         }
424
425         /* restore original state; caller must unlink or relink */
426         qh->qh_state = state;
427
428         /* be sure the hardware's done with the qh before refreshing
429          * it after fault cleanup, or recovering from silicon wrongly
430          * overlaying the dummy qtd (which reduces DMA chatter).
431          */
432         if (stopped != 0 || qh->hw_qtd_next == EHCI_LIST_END) {
433                 switch (state) {
434                 case QH_STATE_IDLE:
435                         qh_refresh(ehci, qh);
436                         break;
437                 case QH_STATE_LINKED:
438                         unlink_async (ehci, qh);
439                         break;
440                 /* otherwise, unlink already started */
441                 }
442         }
443
444         return count;
445 }
446
447 /*-------------------------------------------------------------------------*/
448
449 // high bandwidth multiplier, as encoded in highspeed endpoint descriptors
450 #define hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03))
451 // ... and packet size, for any kind of endpoint descriptor
452 #define max_packet(wMaxPacketSize) ((wMaxPacketSize) & 0x07ff)
453
454 /*
455  * reverse of qh_urb_transaction:  free a list of TDs.
456  * used for cleanup after errors, before HC sees an URB's TDs.
457  */
458 static void qtd_list_free (
459         struct ehci_hcd         *ehci,
460         struct urb              *urb,
461         struct list_head        *qtd_list
462 ) {
463         struct list_head        *entry, *temp;
464
465         list_for_each_safe (entry, temp, qtd_list) {
466                 struct ehci_qtd *qtd;
467
468                 qtd = list_entry (entry, struct ehci_qtd, qtd_list);
469                 list_del (&qtd->qtd_list);
470                 ehci_qtd_free (ehci, qtd);
471         }
472 }
473
474 /*
475  * create a list of filled qtds for this URB; won't link into qh.
476  */
477 static struct list_head *
478 qh_urb_transaction (
479         struct ehci_hcd         *ehci,
480         struct urb              *urb,
481         struct list_head        *head,
482         int                     flags
483 ) {
484         struct ehci_qtd         *qtd, *qtd_prev;
485         dma_addr_t              buf;
486         int                     len, maxpacket;
487         int                     is_input;
488         u32                     token;
489
490         /*
491          * URBs map to sequences of QTDs:  one logical transaction
492          */
493         qtd = ehci_qtd_alloc (ehci, flags);
494         if (unlikely (!qtd))
495                 return 0;
496         list_add_tail (&qtd->qtd_list, head);
497         qtd->urb = urb;
498
499         token = QTD_STS_ACTIVE;
500         token |= (EHCI_TUNE_CERR << 10);
501         /* for split transactions, SplitXState initialized to zero */
502
503         len = urb->transfer_buffer_length;
504         is_input = usb_pipein (urb->pipe);
505         if (usb_pipecontrol (urb->pipe)) {
506                 /* SETUP pid */
507                 qtd_fill (qtd, urb->setup_dma, sizeof (struct usb_ctrlrequest),
508                         token | (2 /* "setup" */ << 8), 8);
509
510                 /* ... and always at least one more pid */
511                 token ^= QTD_TOGGLE;
512                 qtd_prev = qtd;
513                 qtd = ehci_qtd_alloc (ehci, flags);
514                 if (unlikely (!qtd))
515                         goto cleanup;
516                 qtd->urb = urb;
517                 qtd_prev->hw_next = QTD_NEXT (qtd->qtd_dma);
518                 list_add_tail (&qtd->qtd_list, head);
519         } 
520
521         /*
522          * data transfer stage:  buffer setup
523          */
524         if (likely (len > 0))
525                 buf = urb->transfer_dma;
526         else
527                 buf = 0;
528
529         // FIXME this 'buf' check break some zlps...
530         if (!buf || is_input)
531                 token |= (1 /* "in" */ << 8);
532         /* else it's already initted to "out" pid (0 << 8) */
533
534         maxpacket = max_packet(usb_maxpacket(urb->dev, urb->pipe, !is_input));
535
536         /*
537          * buffer gets wrapped in one or more qtds;
538          * last one may be "short" (including zero len)
539          * and may serve as a control status ack
540          */
541         for (;;) {
542                 int this_qtd_len;
543
544                 this_qtd_len = qtd_fill (qtd, buf, len, token, maxpacket);
545                 len -= this_qtd_len;
546                 buf += this_qtd_len;
547                 if (is_input)
548                         qtd->hw_alt_next = ehci->async->hw_alt_next;
549
550                 /* qh makes control packets use qtd toggle; maybe switch it */
551                 if ((maxpacket & (this_qtd_len + (maxpacket - 1))) == 0)
552                         token ^= QTD_TOGGLE;
553
554                 if (likely (len <= 0))
555                         break;
556
557                 qtd_prev = qtd;
558                 qtd = ehci_qtd_alloc (ehci, flags);
559                 if (unlikely (!qtd))
560                         goto cleanup;
561                 qtd->urb = urb;
562                 qtd_prev->hw_next = QTD_NEXT (qtd->qtd_dma);
563                 list_add_tail (&qtd->qtd_list, head);
564         }
565
566         /* unless the bulk/interrupt caller wants a chance to clean
567          * up after short reads, hc should advance qh past this urb
568          */
569         if (likely ((urb->transfer_flags & URB_SHORT_NOT_OK) == 0
570                                 || usb_pipecontrol (urb->pipe)))
571                 qtd->hw_alt_next = EHCI_LIST_END;
572
573         /*
574          * control requests may need a terminating data "status" ack;
575          * bulk ones may need a terminating short packet (zero length).
576          */
577         if (likely (buf != 0)) {
578                 int     one_more = 0;
579
580                 if (usb_pipecontrol (urb->pipe)) {
581                         one_more = 1;
582                         token ^= 0x0100;        /* "in" <--> "out"  */
583                         token |= QTD_TOGGLE;    /* force DATA1 */
584                 } else if (usb_pipebulk (urb->pipe)
585                                 && (urb->transfer_flags & URB_ZERO_PACKET)
586                                 && !(urb->transfer_buffer_length % maxpacket)) {
587                         one_more = 1;
588                 }
589                 if (one_more) {
590                         qtd_prev = qtd;
591                         qtd = ehci_qtd_alloc (ehci, flags);
592                         if (unlikely (!qtd))
593                                 goto cleanup;
594                         qtd->urb = urb;
595                         qtd_prev->hw_next = QTD_NEXT (qtd->qtd_dma);
596                         list_add_tail (&qtd->qtd_list, head);
597
598                         /* never any data in such packets */
599                         qtd_fill (qtd, 0, 0, token, 0);
600                 }
601         }
602
603         /* by default, enable interrupt on urb completion */
604         if (likely (!(urb->transfer_flags & URB_NO_INTERRUPT)))
605                 qtd->hw_token |= __constant_cpu_to_le32 (QTD_IOC);
606         return head;
607
608 cleanup:
609         qtd_list_free (ehci, urb, head);
610         return 0;
611 }
612
613 /*-------------------------------------------------------------------------*/
614
615 /*
616  * Hardware maintains data toggle (like OHCI) ... here we (re)initialize
617  * the hardware data toggle in the QH, and set the pseudo-toggle in udev
618  * so we can see if usb_clear_halt() was called.  NOP for control, since
619  * we set up qh->hw_info1 to always use the QTD toggle bits. 
620  */
621 static inline void
622 clear_toggle (struct usb_device *udev, int ep, int is_out, struct ehci_qh *qh)
623 {
624         vdbg ("clear toggle, dev %d ep 0x%x-%s",
625                 udev->devnum, ep, is_out ? "out" : "in");
626         qh->hw_token &= ~__constant_cpu_to_le32 (QTD_TOGGLE);
627         usb_settoggle (udev, ep, is_out, 1);
628 }
629
630 // Would be best to create all qh's from config descriptors,
631 // when each interface/altsetting is established.  Unlink
632 // any previous qh and cancel its urbs first; endpoints are
633 // implicitly reset then (data toggle too).
634 // That'd mean updating how usbcore talks to HCDs. (2.5?)
635
636
637 /*
638  * Each QH holds a qtd list; a QH is used for everything except iso.
639  *
640  * For interrupt urbs, the scheduler must set the microframe scheduling
641  * mask(s) each time the QH gets scheduled.  For highspeed, that's
642  * just one microframe in the s-mask.  For split interrupt transactions
643  * there are additional complications: c-mask, maybe FSTNs.
644  */
645 static struct ehci_qh *
646 qh_make (
647         struct ehci_hcd         *ehci,
648         struct urb              *urb,
649         int                     flags
650 ) {
651         struct ehci_qh          *qh = ehci_qh_alloc (ehci, flags);
652         u32                     info1 = 0, info2 = 0;
653         int                     is_input, type;
654         int                     maxp = 0;
655
656         if (!qh)
657                 return qh;
658
659         /*
660          * init endpoint/device data for this QH
661          */
662         info1 |= usb_pipeendpoint (urb->pipe) << 8;
663         info1 |= usb_pipedevice (urb->pipe) << 0;
664
665         is_input = usb_pipein (urb->pipe);
666         type = usb_pipetype (urb->pipe);
667         maxp = usb_maxpacket (urb->dev, urb->pipe, !is_input);
668
669         /* Compute interrupt scheduling parameters just once, and save.
670          * - allowing for high bandwidth, how many nsec/uframe are used?
671          * - split transactions need a second CSPLIT uframe; same question
672          * - splits also need a schedule gap (for full/low speed I/O)
673          * - qh has a polling interval
674          *
675          * For control/bulk requests, the HC or TT handles these.
676          */
677         if (type == PIPE_INTERRUPT) {
678                 qh->usecs = usb_calc_bus_time (USB_SPEED_HIGH, is_input, 0,
679                                 hb_mult (maxp) * max_packet (maxp));
680                 qh->start = NO_FRAME;
681
682                 if (urb->dev->speed == USB_SPEED_HIGH) {
683                         qh->c_usecs = 0;
684                         qh->gap_uf = 0;
685
686                         /* FIXME handle HS periods of less than 1 frame. */
687                         qh->period = urb->interval >> 3;
688                         if (qh->period < 1) {
689                                 dbg ("intr period %d uframes, NYET!",
690                                                 urb->interval);
691                                 goto done;
692                         }
693                 } else {
694                         /* gap is f(FS/LS transfer times) */
695                         qh->gap_uf = 1 + usb_calc_bus_time (urb->dev->speed,
696                                         is_input, 0, maxp) / (125 * 1000);
697
698                         /* FIXME this just approximates SPLIT/CSPLIT times */
699                         if (is_input) {         // SPLIT, gap, CSPLIT+DATA
700                                 qh->c_usecs = qh->usecs + HS_USECS (0);
701                                 qh->usecs = HS_USECS (1);
702                         } else {                // SPLIT+DATA, gap, CSPLIT
703                                 qh->usecs += HS_USECS (1);
704                                 qh->c_usecs = HS_USECS (0);
705                         }
706
707                         qh->period = urb->interval;
708                 }
709
710                 /* support for tt scheduling */
711                 // qh->dev = usb_get_dev (urb->dev);
712                 qh->dev = urb->dev;
713         }
714
715         /* using TT? */
716         switch (urb->dev->speed) {
717         case USB_SPEED_LOW:
718                 info1 |= (1 << 12);     /* EPS "low" */
719                 /* FALL THROUGH */
720
721         case USB_SPEED_FULL:
722                 /* EPS 0 means "full" */
723                 if (type != PIPE_INTERRUPT)
724                         info1 |= (EHCI_TUNE_RL_TT << 28);
725                 if (type == PIPE_CONTROL) {
726                         info1 |= (1 << 27);     /* for TT */
727                         info1 |= 1 << 14;       /* toggle from qtd */
728                 }
729                 info1 |= maxp << 16;
730
731                 info2 |= (EHCI_TUNE_MULT_TT << 30);
732                 info2 |= urb->dev->ttport << 23;
733                 info2 |= urb->dev->tt->hub->devnum << 16;
734
735                 /* NOTE:  if (PIPE_INTERRUPT) { scheduler sets c-mask } */
736
737                 break;
738
739         case USB_SPEED_HIGH:            /* no TT involved */
740                 info1 |= (2 << 12);     /* EPS "high" */
741                 if (type == PIPE_CONTROL) {
742                         info1 |= (EHCI_TUNE_RL_HS << 28);
743                         info1 |= 64 << 16;      /* usb2 fixed maxpacket */
744                         info1 |= 1 << 14;       /* toggle from qtd */
745                         info2 |= (EHCI_TUNE_MULT_HS << 30);
746                 } else if (type == PIPE_BULK) {
747                         info1 |= (EHCI_TUNE_RL_HS << 28);
748                         info1 |= 512 << 16;     /* usb2 fixed maxpacket */
749                         info2 |= (EHCI_TUNE_MULT_HS << 30);
750                 } else {                /* PIPE_INTERRUPT */
751                         info1 |= max_packet (maxp) << 16;
752                         info2 |= hb_mult (maxp) << 30;
753                 }
754                 break;
755         default:
756                 dbg ("bogus dev %p speed %d", urb->dev, urb->dev->speed);
757 done:
758                 qh_put (ehci, qh);
759                 return 0;
760         }
761
762         /* NOTE:  if (PIPE_INTERRUPT) { scheduler sets s-mask } */
763
764         /* init as live, toggle clear, advance to dummy */
765         qh->qh_state = QH_STATE_IDLE;
766         qh->hw_info1 = cpu_to_le32 (info1);
767         qh->hw_info2 = cpu_to_le32 (info2);
768         usb_settoggle (urb->dev, usb_pipeendpoint (urb->pipe), !is_input, 1);
769         qh_refresh (ehci, qh);
770         return qh;
771 }
772
773 /*-------------------------------------------------------------------------*/
774
775 /* move qh (and its qtds) onto async queue; maybe enable queue.  */
776
777 static void qh_link_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
778 {
779         u32             dma = QH_NEXT (qh->qh_dma);
780         struct ehci_qh  *head;
781
782         /* (re)start the async schedule? */
783         head = ehci->async;
784         timer_action_done (ehci, TIMER_ASYNC_OFF);
785         if (!head->qh_next.qh) {
786                 u32     cmd = readl (&ehci->regs->command);
787
788                 if (!(cmd & CMD_ASE)) {
789                         /* in case a clear of CMD_ASE didn't take yet */
790                         (void) handshake (&ehci->regs->status, STS_ASS, 0, 150);
791                         cmd |= CMD_ASE | CMD_RUN;
792                         writel (cmd, &ehci->regs->command);
793                         ehci->hcd.state = USB_STATE_RUNNING;
794                         /* posted write need not be known to HC yet ... */
795                 }
796         }
797
798         /* clear halt and/or toggle; and maybe recover from silicon quirk */
799         if (qh->qh_state == QH_STATE_IDLE)
800                 qh_refresh (ehci, qh);
801
802         /* splice right after start */
803         qh->qh_next = head->qh_next;
804         qh->hw_next = head->hw_next;
805         wmb ();
806
807         head->qh_next.qh = qh;
808         head->hw_next = dma;
809
810         qh->qh_state = QH_STATE_LINKED;
811         /* qtd completions reported later by interrupt */
812 }
813
814 /*-------------------------------------------------------------------------*/
815
816 #define QH_ADDR_MASK    __constant_le32_to_cpu(0x7f)
817
818 /*
819  * For control/bulk/interrupt, return QH with these TDs appended.
820  * Allocates and initializes the QH if necessary.
821  * Returns null if it can't allocate a QH it needs to.
822  * If the QH has TDs (urbs) already, that's great.
823  */
824 static struct ehci_qh *qh_append_tds (
825         struct ehci_hcd         *ehci,
826         struct urb              *urb,
827         struct list_head        *qtd_list,
828         int                     epnum,
829         void                    **ptr
830 )
831 {
832         struct ehci_qh          *qh = 0;
833
834         qh = (struct ehci_qh *) *ptr;
835         if (unlikely (qh == 0)) {
836                 /* can't sleep here, we have ehci->lock... */
837                 qh = qh_make (ehci, urb, SLAB_ATOMIC);
838                 *ptr = qh;
839         }
840         if (likely (qh != 0)) {
841                 struct ehci_qtd *qtd;
842
843                 if (unlikely (list_empty (qtd_list)))
844                         qtd = 0;
845                 else
846                         qtd = list_entry (qtd_list->next, struct ehci_qtd,
847                                         qtd_list);
848
849                 /* control qh may need patching after enumeration */
850                 if (unlikely (epnum == 0)) {
851                         /* set_address changes the address */
852                         if ((qh->hw_info1 & QH_ADDR_MASK) == 0)
853                                 qh->hw_info1 |= cpu_to_le32 (
854                                                 usb_pipedevice (urb->pipe));
855
856                         /* for full speed, ep0 maxpacket can grow */
857                         else if (!(qh->hw_info1
858                                         & __constant_cpu_to_le32 (0x3 << 12))) {
859                                 u32     info, max;
860
861                                 info = le32_to_cpu (qh->hw_info1);
862                                 max = urb->dev->descriptor.bMaxPacketSize0;
863                                 if (max > (0x07ff & (info >> 16))) {
864                                         info &= ~(0x07ff << 16);
865                                         info |= max << 16;
866                                         qh->hw_info1 = cpu_to_le32 (info);
867                                 }
868                         }
869
870                         /* usb_reset_device() briefly reverts to address 0 */
871                         if (usb_pipedevice (urb->pipe) == 0)
872                                 qh->hw_info1 &= ~QH_ADDR_MASK;
873                 }
874
875                 /* NOTE:  changing config or interface setting is not
876                  * supported without the 2.5 endpoint disable logic.
877                  */
878
879                 /* usb_clear_halt() means qh data toggle gets reset */
880                 if (unlikely (!usb_gettoggle (urb->dev,
881                                         (epnum & 0x0f), !(epnum & 0x10)))
882                                 && !usb_pipecontrol (urb->pipe)) {
883                         /* "never happens": drivers do stall cleanup right */
884                         if (qh->qh_state != QH_STATE_IDLE
885                                         && !list_empty (&qh->qtd_list)
886                                         && qh->qh_state != QH_STATE_COMPLETING)
887                                 ehci_warn (ehci, "clear toggle dev%d "
888                                                 "ep%d%s: not idle\n",
889                                                 usb_pipedevice (urb->pipe),
890                                                 epnum & 0x0f,
891                                                 usb_pipein (urb->pipe)
892                                                         ? "in" : "out");
893                         /* else we know this overlay write is safe */
894                         clear_toggle (urb->dev,
895                                 epnum & 0x0f, !(epnum & 0x10), qh);
896                 }
897
898                 /* just one way to queue requests: swap with the dummy qtd.
899                  * only hc or qh_completions() usually modify the overlay.
900                  */
901                 if (likely (qtd != 0)) {
902                         struct ehci_qtd         *dummy;
903                         dma_addr_t              dma;
904                         u32                     token;
905
906                         /* to avoid racing the HC, use the dummy td instead of
907                          * the first td of our list (becomes new dummy).  both
908                          * tds stay deactivated until we're done, when the
909                          * HC is allowed to fetch the old dummy (4.10.2).
910                          */
911                         token = qtd->hw_token;
912                         qtd->hw_token = HALT_BIT;
913                         wmb ();
914                         dummy = qh->dummy;
915
916                         dma = dummy->qtd_dma;
917                         *dummy = *qtd;
918                         dummy->qtd_dma = dma;
919
920                         list_del (&qtd->qtd_list);
921                         list_add (&dummy->qtd_list, qtd_list);
922                         __list_splice (qtd_list, qh->qtd_list.prev);
923
924                         ehci_qtd_init (qtd, qtd->qtd_dma);
925                         qh->dummy = qtd;
926
927                         /* hc must see the new dummy at list end */
928                         dma = qtd->qtd_dma;
929                         qtd = list_entry (qh->qtd_list.prev,
930                                         struct ehci_qtd, qtd_list);
931                         qtd->hw_next = QTD_NEXT (dma);
932
933                         /* let the hc process these next qtds */
934                         wmb ();
935                         dummy->hw_token = token;
936
937                         urb->hcpriv = qh_get (qh);
938                 }
939         }
940         return qh;
941 }
942
943 /*-------------------------------------------------------------------------*/
944
945 static int
946 submit_async (
947         struct ehci_hcd         *ehci,
948         struct urb              *urb,
949         struct list_head        *qtd_list,
950         int                     mem_flags
951 ) {
952         struct ehci_qtd         *qtd;
953         struct hcd_dev          *dev;
954         int                     epnum;
955         unsigned long           flags;
956         struct ehci_qh          *qh = 0;
957
958         qtd = list_entry (qtd_list->next, struct ehci_qtd, qtd_list);
959         dev = (struct hcd_dev *)urb->dev->hcpriv;
960         epnum = usb_pipeendpoint (urb->pipe);
961         if (usb_pipein (urb->pipe) && !usb_pipecontrol (urb->pipe))
962                 epnum |= 0x10;
963
964 #ifdef EHCI_URB_TRACE
965         ehci_dbg (ehci,
966                 "%s %s urb %p ep%d%s len %d, qtd %p [qh %p]\n",
967                 __FUNCTION__, urb->dev->devpath, urb,
968                 epnum & 0x0f, usb_pipein (urb->pipe) ? "in" : "out",
969                 urb->transfer_buffer_length,
970                 qtd, dev ? dev->ep [epnum] : (void *)~0);
971 #endif
972
973         spin_lock_irqsave (&ehci->lock, flags);
974         qh = qh_append_tds (ehci, urb, qtd_list, epnum, &dev->ep [epnum]);
975
976         /* Control/bulk operations through TTs don't need scheduling,
977          * the HC and TT handle it when the TT has a buffer ready.
978          */
979         if (likely (qh != 0)) {
980                 if (likely (qh->qh_state == QH_STATE_IDLE))
981                         qh_link_async (ehci, qh_get (qh));
982         }
983         spin_unlock_irqrestore (&ehci->lock, flags);
984         if (unlikely (qh == 0)) {
985                 qtd_list_free (ehci, urb, qtd_list);
986                 return -ENOMEM;
987         }
988         return 0;
989 }
990
991 /*-------------------------------------------------------------------------*/
992
993 /* the async qh for the qtds being reclaimed are now unlinked from the HC */
994
995 static void end_unlink_async (struct ehci_hcd *ehci, struct pt_regs *regs)
996 {
997         struct ehci_qh          *qh = ehci->reclaim;
998         struct ehci_qh          *next;
999
1000         timer_action_done (ehci, TIMER_IAA_WATCHDOG);
1001
1002         // qh->hw_next = cpu_to_le32 (qh->qh_dma);
1003         qh->qh_state = QH_STATE_IDLE;
1004         qh->qh_next.qh = 0;
1005         qh_put (ehci, qh);                      // refcount from reclaim 
1006
1007         /* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */
1008         next = qh->reclaim;
1009         ehci->reclaim = next;
1010         ehci->reclaim_ready = 0;
1011         qh->reclaim = 0;
1012
1013         qh_completions (ehci, qh, regs);
1014
1015         if (!list_empty (&qh->qtd_list)
1016                         && HCD_IS_RUNNING (ehci->hcd.state))
1017                 qh_link_async (ehci, qh);
1018         else {
1019                 qh_put (ehci, qh);              // refcount from async list
1020
1021                 /* it's not free to turn the async schedule on/off; leave it
1022                  * active but idle for a while once it empties.
1023                  */
1024                 if (HCD_IS_RUNNING (ehci->hcd.state)
1025                                 && ehci->async->qh_next.qh == 0)
1026                         timer_action (ehci, TIMER_ASYNC_OFF);
1027         }
1028
1029         if (next) {
1030                 ehci->reclaim = 0;
1031                 start_unlink_async (ehci, next);
1032         }
1033 }
1034
1035 /* makes sure the async qh will become idle */
1036 /* caller must own ehci->lock */
1037
1038 static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
1039 {
1040         int             cmd = readl (&ehci->regs->command);
1041         struct ehci_qh  *prev;
1042
1043 #ifdef DEBUG
1044         if (ehci->reclaim
1045                         || (qh->qh_state != QH_STATE_LINKED
1046                                 && qh->qh_state != QH_STATE_UNLINK_WAIT)
1047 #ifdef CONFIG_SMP
1048 // this macro lies except on SMP compiles
1049                         || !spin_is_locked (&ehci->lock)
1050 #endif
1051                         )
1052                 BUG ();
1053 #endif
1054
1055         /* stop async schedule right now? */
1056         if (unlikely (qh == ehci->async)) {
1057                 /* can't get here without STS_ASS set */
1058                 if (ehci->hcd.state != USB_STATE_HALT) {
1059                         writel (cmd & ~CMD_ASE, &ehci->regs->command);
1060                         wmb ();
1061                         // handshake later, if we need to
1062                 }
1063                 timer_action_done (ehci, TIMER_ASYNC_OFF);
1064                 return;
1065         } 
1066
1067         qh->qh_state = QH_STATE_UNLINK;
1068         ehci->reclaim = qh = qh_get (qh);
1069
1070         prev = ehci->async;
1071         while (prev->qh_next.qh != qh)
1072                 prev = prev->qh_next.qh;
1073
1074         prev->hw_next = qh->hw_next;
1075         prev->qh_next = qh->qh_next;
1076         wmb ();
1077
1078         if (unlikely (ehci->hcd.state == USB_STATE_HALT)) {
1079                 /* if (unlikely (qh->reclaim != 0))
1080                  *      this will recurse, probably not much
1081                  */
1082                 end_unlink_async (ehci, NULL);
1083                 return;
1084         }
1085
1086         ehci->reclaim_ready = 0;
1087         cmd |= CMD_IAAD;
1088         writel (cmd, &ehci->regs->command);
1089         (void) readl (&ehci->regs->command);
1090         timer_action (ehci, TIMER_IAA_WATCHDOG);
1091 }
1092
1093 /*-------------------------------------------------------------------------*/
1094
1095 static void
1096 scan_async (struct ehci_hcd *ehci, struct pt_regs *regs)
1097 {
1098         struct ehci_qh          *qh;
1099         enum ehci_timer_action  action = TIMER_IO_WATCHDOG;
1100
1101         if (!++(ehci->stamp))
1102                 ehci->stamp++;
1103         timer_action_done (ehci, TIMER_ASYNC_SHRINK);
1104 rescan:
1105         qh = ehci->async->qh_next.qh;
1106         if (likely (qh != 0)) {
1107                 do {
1108                         /* clean any finished work for this qh */
1109                         if (!list_empty (&qh->qtd_list)
1110                                         && qh->stamp != ehci->stamp) {
1111                                 int temp;
1112
1113                                 /* unlinks could happen here; completion
1114                                  * reporting drops the lock.  rescan using
1115                                  * the latest schedule, but don't rescan
1116                                  * qhs we already finished (no looping).
1117                                  */
1118                                 qh = qh_get (qh);
1119                                 qh->stamp = ehci->stamp;
1120                                 temp = qh_completions (ehci, qh, regs);
1121                                 qh_put (ehci, qh);
1122                                 if (temp != 0) {
1123                                         goto rescan;
1124                                 }
1125                         }
1126
1127                         /* unlink idle entries, reducing HC PCI usage as well
1128                          * as HCD schedule-scanning costs.  delay for any qh
1129                          * we just scanned, there's a not-unusual case that it
1130                          * doesn't stay idle for long.
1131                          * (plus, avoids some kind of re-activation race.)
1132                          */
1133                         if (list_empty (&qh->qtd_list)) {
1134                                 if (qh->stamp == ehci->stamp)
1135                                         action = TIMER_ASYNC_SHRINK;
1136                                 else if (!ehci->reclaim
1137                                             && qh->qh_state == QH_STATE_LINKED)
1138                                         start_unlink_async (ehci, qh);
1139                         }
1140
1141                         qh = qh->qh_next.qh;
1142                 } while (qh);
1143         }
1144         if (action == TIMER_ASYNC_SHRINK)
1145                 timer_action (ehci, TIMER_ASYNC_SHRINK);
1146 }