linux/drivers/usb/host/ehci-q.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2001-2004 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
  45static int
  46qtd_fill(struct ehci_hcd *ehci, struct ehci_qtd *qtd, dma_addr_t buf,
  47                  size_t len, 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_hc32(ehci, (u32)addr);
  54        qtd->hw_buf_hi[0] = cpu_to_hc32(ehci, (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_hc32(ehci, (u32)addr);
  66                        qtd->hw_buf_hi[i] = cpu_to_hc32(ehci,
  67                                        (u32)(addr >> 32));
  68                        buf += 0x1000;
  69                        if ((count + 0x1000) < len)
  70                                count += 0x1000;
  71                        else
  72                                count = len;
  73                }
  74
  75                /* short packets may only terminate transfers */
  76                if (count != len)
  77                        count -= (count % maxpacket);
  78        }
  79        qtd->hw_token = cpu_to_hc32(ehci, (count << 16) | token);
  80        qtd->length = count;
  81
  82        return count;
  83}
  84
  85/*-------------------------------------------------------------------------*/
  86
  87static inline void
  88qh_update (struct ehci_hcd *ehci, struct ehci_qh *qh, struct ehci_qtd *qtd)
  89{
  90        struct ehci_qh_hw *hw = qh->hw;
  91
  92        /* writes to an active overlay are unsafe */
  93        BUG_ON(qh->qh_state != QH_STATE_IDLE);
  94
  95        hw->hw_qtd_next = QTD_NEXT(ehci, qtd->qtd_dma);
  96        hw->hw_alt_next = EHCI_LIST_END(ehci);
  97
  98        /* Except for control endpoints, we make hardware maintain data
  99         * toggle (like OHCI) ... here (re)initialize the toggle in the QH,
 100         * and set the pseudo-toggle in udev. Only usb_clear_halt() will
 101         * ever clear it.
 102         */
 103        if (!(hw->hw_info1 & cpu_to_hc32(ehci, 1 << 14))) {
 104                unsigned        is_out, epnum;
 105
 106                is_out = !(qtd->hw_token & cpu_to_hc32(ehci, 1 << 8));
 107                epnum = (hc32_to_cpup(ehci, &hw->hw_info1) >> 8) & 0x0f;
 108                if (unlikely (!usb_gettoggle (qh->dev, epnum, is_out))) {
 109                        hw->hw_token &= ~cpu_to_hc32(ehci, QTD_TOGGLE);
 110                        usb_settoggle (qh->dev, epnum, is_out, 1);
 111                }
 112        }
 113
 114        /* HC must see latest qtd and qh data before we clear ACTIVE+HALT */
 115        wmb ();
 116        hw->hw_token &= cpu_to_hc32(ehci, QTD_TOGGLE | QTD_STS_PING);
 117}
 118
 119/* if it weren't for a common silicon quirk (writing the dummy into the qh
 120 * overlay, so qh->hw_token wrongly becomes inactive/halted), only fault
 121 * recovery (including urb dequeue) would need software changes to a QH...
 122 */
 123static void
 124qh_refresh (struct ehci_hcd *ehci, struct ehci_qh *qh)
 125{
 126        struct ehci_qtd *qtd;
 127
 128        if (list_empty (&qh->qtd_list))
 129                qtd = qh->dummy;
 130        else {
 131                qtd = list_entry (qh->qtd_list.next,
 132                                struct ehci_qtd, qtd_list);
 133                /* first qtd may already be partially processed */
 134                if (cpu_to_hc32(ehci, qtd->qtd_dma) == qh->hw->hw_current)
 135                        qtd = NULL;
 136        }
 137
 138        if (qtd)
 139                qh_update (ehci, qh, qtd);
 140}
 141
 142/*-------------------------------------------------------------------------*/
 143
 144static void qh_link_async(struct ehci_hcd *ehci, struct ehci_qh *qh);
 145
 146static void ehci_clear_tt_buffer_complete(struct usb_hcd *hcd,
 147                struct usb_host_endpoint *ep)
 148{
 149        struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
 150        struct ehci_qh          *qh = ep->hcpriv;
 151        unsigned long           flags;
 152
 153        spin_lock_irqsave(&ehci->lock, flags);
 154        qh->clearing_tt = 0;
 155        if (qh->qh_state == QH_STATE_IDLE && !list_empty(&qh->qtd_list)
 156                        && HC_IS_RUNNING(hcd->state))
 157                qh_link_async(ehci, qh);
 158        spin_unlock_irqrestore(&ehci->lock, flags);
 159}
 160
 161static void ehci_clear_tt_buffer(struct ehci_hcd *ehci, struct ehci_qh *qh,
 162                struct urb *urb, u32 token)
 163{
 164
 165        /* If an async split transaction gets an error or is unlinked,
 166         * the TT buffer may be left in an indeterminate state.  We
 167         * have to clear the TT buffer.
 168         *
 169         * Note: this routine is never called for Isochronous transfers.
 170         */
 171        if (urb->dev->tt && !usb_pipeint(urb->pipe) && !qh->clearing_tt) {
 172#ifdef DEBUG
 173                struct usb_device *tt = urb->dev->tt->hub;
 174                dev_dbg(&tt->dev,
 175                        "clear tt buffer port %d, a%d ep%d t%08x\n",
 176                        urb->dev->ttport, urb->dev->devnum,
 177                        usb_pipeendpoint(urb->pipe), token);
 178#endif /* DEBUG */
 179                if (!ehci_is_TDI(ehci)
 180                                || urb->dev->tt->hub !=
 181                                   ehci_to_hcd(ehci)->self.root_hub) {
 182                        if (usb_hub_clear_tt_buffer(urb) == 0)
 183                                qh->clearing_tt = 1;
 184                } else {
 185
 186                        /* REVISIT ARC-derived cores don't clear the root
 187                         * hub TT buffer in this way...
 188                         */
 189                }
 190        }
 191}
 192
 193static int qtd_copy_status (
 194        struct ehci_hcd *ehci,
 195        struct urb *urb,
 196        size_t length,
 197        u32 token
 198)
 199{
 200        int     status = -EINPROGRESS;
 201
 202        /* count IN/OUT bytes, not SETUP (even short packets) */
 203        if (likely (QTD_PID (token) != 2))
 204                urb->actual_length += length - QTD_LENGTH (token);
 205
 206        /* don't modify error codes */
 207        if (unlikely(urb->unlinked))
 208                return status;
 209
 210        /* force cleanup after short read; not always an error */
 211        if (unlikely (IS_SHORT_READ (token)))
 212                status = -EREMOTEIO;
 213
 214        /* serious "can't proceed" faults reported by the hardware */
 215        if (token & QTD_STS_HALT) {
 216                if (token & QTD_STS_BABBLE) {
 217                        /* FIXME "must" disable babbling device's port too */
 218                        status = -EOVERFLOW;
 219                /* CERR nonzero + halt --> stall */
 220                } else if (QTD_CERR(token)) {
 221                        status = -EPIPE;
 222
 223                /* In theory, more than one of the following bits can be set
 224                 * since they are sticky and the transaction is retried.
 225                 * Which to test first is rather arbitrary.
 226                 */
 227                } else if (token & QTD_STS_MMF) {
 228                        /* fs/ls interrupt xfer missed the complete-split */
 229                        status = -EPROTO;
 230                } else if (token & QTD_STS_DBE) {
 231                        status = (QTD_PID (token) == 1) /* IN ? */
 232                                ? -ENOSR  /* hc couldn't read data */
 233                                : -ECOMM; /* hc couldn't write data */
 234                } else if (token & QTD_STS_XACT) {
 235                        /* timeout, bad CRC, wrong PID, etc */
 236                        ehci_dbg(ehci, "devpath %s ep%d%s 3strikes\n",
 237                                urb->dev->devpath,
 238                                usb_pipeendpoint(urb->pipe),
 239                                usb_pipein(urb->pipe) ? "in" : "out");
 240                        status = -EPROTO;
 241                } else {        /* unknown */
 242                        status = -EPROTO;
 243                }
 244
 245                ehci_vdbg (ehci,
 246                        "dev%d ep%d%s qtd token %08x --> status %d\n",
 247                        usb_pipedevice (urb->pipe),
 248                        usb_pipeendpoint (urb->pipe),
 249                        usb_pipein (urb->pipe) ? "in" : "out",
 250                        token, status);
 251        }
 252
 253        return status;
 254}
 255
 256static void
 257ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status)
 258__releases(ehci->lock)
 259__acquires(ehci->lock)
 260{
 261        if (likely (urb->hcpriv != NULL)) {
 262                struct ehci_qh  *qh = (struct ehci_qh *) urb->hcpriv;
 263
 264                /* S-mask in a QH means it's an interrupt urb */
 265                if ((qh->hw->hw_info2 & cpu_to_hc32(ehci, QH_SMASK)) != 0) {
 266
 267                        /* ... update hc-wide periodic stats (for usbfs) */
 268                        ehci_to_hcd(ehci)->self.bandwidth_int_reqs--;
 269                }
 270                qh_put (qh);
 271        }
 272
 273        if (unlikely(urb->unlinked)) {
 274                COUNT(ehci->stats.unlink);
 275        } else {
 276                /* report non-error and short read status as zero */
 277                if (status == -EINPROGRESS || status == -EREMOTEIO)
 278                        status = 0;
 279                COUNT(ehci->stats.complete);
 280        }
 281
 282#ifdef EHCI_URB_TRACE
 283        ehci_dbg (ehci,
 284                "%s %s urb %p ep%d%s status %d len %d/%d\n",
 285                __func__, urb->dev->devpath, urb,
 286                usb_pipeendpoint (urb->pipe),
 287                usb_pipein (urb->pipe) ? "in" : "out",
 288                status,
 289                urb->actual_length, urb->transfer_buffer_length);
 290#endif
 291
 292        /* complete() can reenter this HCD */
 293        usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb);
 294        spin_unlock (&ehci->lock);
 295        usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status);
 296        spin_lock (&ehci->lock);
 297}
 298
 299static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh);
 300static void unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh);
 301
 302static int qh_schedule (struct ehci_hcd *ehci, struct ehci_qh *qh);
 303
 304/*
 305 * Process and free completed qtds for a qh, returning URBs to drivers.
 306 * Chases up to qh->hw_current.  Returns number of completions called,
 307 * indicating how much "real" work we did.
 308 */
 309static unsigned
 310qh_completions (struct ehci_hcd *ehci, struct ehci_qh *qh)
 311{
 312        struct ehci_qtd         *last, *end = qh->dummy;
 313        struct list_head        *entry, *tmp;
 314        int                     last_status;
 315        int                     stopped;
 316        unsigned                count = 0;
 317        u8                      state;
 318        const __le32            halt = HALT_BIT(ehci);
 319        struct ehci_qh_hw       *hw = qh->hw;
 320
 321        if (unlikely (list_empty (&qh->qtd_list)))
 322                return count;
 323
 324        /* completions (or tasks on other cpus) must never clobber HALT
 325         * till we've gone through and cleaned everything up, even when
 326         * they add urbs to this qh's queue or mark them for unlinking.
 327         *
 328         * NOTE:  unlinking expects to be done in queue order.
 329         *
 330         * It's a bug for qh->qh_state to be anything other than
 331         * QH_STATE_IDLE, unless our caller is scan_async() or
 332         * scan_periodic().
 333         */
 334        state = qh->qh_state;
 335        qh->qh_state = QH_STATE_COMPLETING;
 336        stopped = (state == QH_STATE_IDLE);
 337
 338 rescan:
 339        last = NULL;
 340        last_status = -EINPROGRESS;
 341        qh->needs_rescan = 0;
 342
 343        /* remove de-activated QTDs from front of queue.
 344         * after faults (including short reads), cleanup this urb
 345         * then let the queue advance.
 346         * if queue is stopped, handles unlinks.
 347         */
 348        list_for_each_safe (entry, tmp, &qh->qtd_list) {
 349                struct ehci_qtd *qtd;
 350                struct urb      *urb;
 351                u32             token = 0;
 352
 353                qtd = list_entry (entry, struct ehci_qtd, qtd_list);
 354                urb = qtd->urb;
 355
 356                /* clean up any state from previous QTD ...*/
 357                if (last) {
 358                        if (likely (last->urb != urb)) {
 359                                ehci_urb_done(ehci, last->urb, last_status);
 360                                count++;
 361                                last_status = -EINPROGRESS;
 362                        }
 363                        ehci_qtd_free (ehci, last);
 364                        last = NULL;
 365                }
 366
 367                /* ignore urbs submitted during completions we reported */
 368                if (qtd == end)
 369                        break;
 370
 371                /* hardware copies qtd out of qh overlay */
 372                rmb ();
 373                token = hc32_to_cpu(ehci, qtd->hw_token);
 374
 375                /* always clean up qtds the hc de-activated */
 376 retry_xacterr:
 377                if ((token & QTD_STS_ACTIVE) == 0) {
 378
 379                        /* on STALL, error, and short reads this urb must
 380                         * complete and all its qtds must be recycled.
 381                         */
 382                        if ((token & QTD_STS_HALT) != 0) {
 383
 384                                /* retry transaction errors until we
 385                                 * reach the software xacterr limit
 386                                 */
 387                                if ((token & QTD_STS_XACT) &&
 388                                                QTD_CERR(token) == 0 &&
 389                                                ++qh->xacterrs < QH_XACTERR_MAX &&
 390                                                !urb->unlinked) {
 391                                        ehci_dbg(ehci,
 392        "detected XactErr len %zu/%zu retry %d\n",
 393        qtd->length - QTD_LENGTH(token), qtd->length, qh->xacterrs);
 394
 395                                        /* reset the token in the qtd and the
 396                                         * qh overlay (which still contains
 397                                         * the qtd) so that we pick up from
 398                                         * where we left off
 399                                         */
 400                                        token &= ~QTD_STS_HALT;
 401                                        token |= QTD_STS_ACTIVE |
 402                                                        (EHCI_TUNE_CERR << 10);
 403                                        qtd->hw_token = cpu_to_hc32(ehci,
 404                                                        token);
 405                                        wmb();
 406                                        hw->hw_token = cpu_to_hc32(ehci,
 407                                                        token);
 408                                        goto retry_xacterr;
 409                                }
 410                                stopped = 1;
 411
 412                        /* magic dummy for some short reads; qh won't advance.
 413                         * that silicon quirk can kick in with this dummy too.
 414                         *
 415                         * other short reads won't stop the queue, including
 416                         * control transfers (status stage handles that) or
 417                         * most other single-qtd reads ... the queue stops if
 418                         * URB_SHORT_NOT_OK was set so the driver submitting
 419                         * the urbs could clean it up.
 420                         */
 421                        } else if (IS_SHORT_READ (token)
 422                                        && !(qtd->hw_alt_next
 423                                                & EHCI_LIST_END(ehci))) {
 424                                stopped = 1;
 425                                goto halt;
 426                        }
 427
 428                /* stop scanning when we reach qtds the hc is using */
 429                } else if (likely (!stopped
 430                                && HC_IS_RUNNING (ehci_to_hcd(ehci)->state))) {
 431                        break;
 432
 433                /* scan the whole queue for unlinks whenever it stops */
 434                } else {
 435                        stopped = 1;
 436
 437                        /* cancel everything if we halt, suspend, etc */
 438                        if (!HC_IS_RUNNING(ehci_to_hcd(ehci)->state))
 439                                last_status = -ESHUTDOWN;
 440
 441                        /* this qtd is active; skip it unless a previous qtd
 442                         * for its urb faulted, or its urb was canceled.
 443                         */
 444                        else if (last_status == -EINPROGRESS && !urb->unlinked)
 445                                continue;
 446
 447                        /* qh unlinked; token in overlay may be most current */
 448                        if (state == QH_STATE_IDLE
 449                                        && cpu_to_hc32(ehci, qtd->qtd_dma)
 450                                                == hw->hw_current) {
 451                                token = hc32_to_cpu(ehci, hw->hw_token);
 452
 453                                /* An unlink may leave an incomplete
 454                                 * async transaction in the TT buffer.
 455                                 * We have to clear it.
 456                                 */
 457                                ehci_clear_tt_buffer(ehci, qh, urb, token);
 458                        }
 459
 460                        /* force halt for unlinked or blocked qh, so we'll
 461                         * patch the qh later and so that completions can't
 462                         * activate it while we "know" it's stopped.
 463                         */
 464                        if ((halt & hw->hw_token) == 0) {
 465halt:
 466                                hw->hw_token |= halt;
 467                                wmb ();
 468                        }
 469                }
 470
 471                /* unless we already know the urb's status, collect qtd status
 472                 * and update count of bytes transferred.  in common short read
 473                 * cases with only one data qtd (including control transfers),
 474                 * queue processing won't halt.  but with two or more qtds (for
 475                 * example, with a 32 KB transfer), when the first qtd gets a
 476                 * short read the second must be removed by hand.
 477                 */
 478                if (last_status == -EINPROGRESS) {
 479                        last_status = qtd_copy_status(ehci, urb,
 480                                        qtd->length, token);
 481                        if (last_status == -EREMOTEIO
 482                                        && (qtd->hw_alt_next
 483                                                & EHCI_LIST_END(ehci)))
 484                                last_status = -EINPROGRESS;
 485
 486                        /* As part of low/full-speed endpoint-halt processing
 487                         * we must clear the TT buffer (11.17.5).
 488                         */
 489                        if (unlikely(last_status != -EINPROGRESS &&
 490                                        last_status != -EREMOTEIO)) {
 491                                /* The TT's in some hubs malfunction when they
 492                                 * receive this request following a STALL (they
 493                                 * stop sending isochronous packets).  Since a
 494                                 * STALL can't leave the TT buffer in a busy
 495                                 * state (if you believe Figures 11-48 - 11-51
 496                                 * in the USB 2.0 spec), we won't clear the TT
 497                                 * buffer in this case.  Strictly speaking this
 498                                 * is a violation of the spec.
 499                                 */
 500                                if (last_status != -EPIPE)
 501                                        ehci_clear_tt_buffer(ehci, qh, urb,
 502                                                        token);
 503                        }
 504                }
 505
 506                /* if we're removing something not at the queue head,
 507                 * patch the hardware queue pointer.
 508                 */
 509                if (stopped && qtd->qtd_list.prev != &qh->qtd_list) {
 510                        last = list_entry (qtd->qtd_list.prev,
 511                                        struct ehci_qtd, qtd_list);
 512                        last->hw_next = qtd->hw_next;
 513                }
 514
 515                /* remove qtd; it's recycled after possible urb completion */
 516                list_del (&qtd->qtd_list);
 517                last = qtd;
 518
 519                /* reinit the xacterr counter for the next qtd */
 520                qh->xacterrs = 0;
 521        }
 522
 523        /* last urb's completion might still need calling */
 524        if (likely (last != NULL)) {
 525                ehci_urb_done(ehci, last->urb, last_status);
 526                count++;
 527                ehci_qtd_free (ehci, last);
 528        }
 529
 530        /* Do we need to rescan for URBs dequeued during a giveback? */
 531        if (unlikely(qh->needs_rescan)) {
 532                /* If the QH is already unlinked, do the rescan now. */
 533                if (state == QH_STATE_IDLE)
 534                        goto rescan;
 535
 536                /* Otherwise we have to wait until the QH is fully unlinked.
 537                 * Our caller will start an unlink if qh->needs_rescan is
 538                 * set.  But if an unlink has already started, nothing needs
 539                 * to be done.
 540                 */
 541                if (state != QH_STATE_LINKED)
 542                        qh->needs_rescan = 0;
 543        }
 544
 545        /* restore original state; caller must unlink or relink */
 546        qh->qh_state = state;
 547
 548        /* be sure the hardware's done with the qh before refreshing
 549         * it after fault cleanup, or recovering from silicon wrongly
 550         * overlaying the dummy qtd (which reduces DMA chatter).
 551         */
 552        if (stopped != 0 || hw->hw_qtd_next == EHCI_LIST_END(ehci)) {
 553                switch (state) {
 554                case QH_STATE_IDLE:
 555                        qh_refresh(ehci, qh);
 556                        break;
 557                case QH_STATE_LINKED:
 558                        /* We won't refresh a QH that's linked (after the HC
 559                         * stopped the queue).  That avoids a race:
 560                         *  - HC reads first part of QH;
 561                         *  - CPU updates that first part and the token;
 562                         *  - HC reads rest of that QH, including token
 563                         * Result:  HC gets an inconsistent image, and then
 564                         * DMAs to/from the wrong memory (corrupting it).
 565                         *
 566                         * That should be rare for interrupt transfers,
 567                         * except maybe high bandwidth ...
 568                         */
 569
 570                        /* Tell the caller to start an unlink */
 571                        qh->needs_rescan = 1;
 572                        break;
 573                /* otherwise, unlink already started */
 574                }
 575        }
 576
 577        return count;
 578}
 579
 580/*-------------------------------------------------------------------------*/
 581
 582// high bandwidth multiplier, as encoded in highspeed endpoint descriptors
 583#define hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03))
 584// ... and packet size, for any kind of endpoint descriptor
 585#define max_packet(wMaxPacketSize) ((wMaxPacketSize) & 0x07ff)
 586
 587/*
 588 * reverse of qh_urb_transaction:  free a list of TDs.
 589 * used for cleanup after errors, before HC sees an URB's TDs.
 590 */
 591static void qtd_list_free (
 592        struct ehci_hcd         *ehci,
 593        struct urb              *urb,
 594        struct list_head        *qtd_list
 595) {
 596        struct list_head        *entry, *temp;
 597
 598        list_for_each_safe (entry, temp, qtd_list) {
 599                struct ehci_qtd *qtd;
 600
 601                qtd = list_entry (entry, struct ehci_qtd, qtd_list);
 602                list_del (&qtd->qtd_list);
 603                ehci_qtd_free (ehci, qtd);
 604        }
 605}
 606
 607/*
 608 * create a list of filled qtds for this URB; won't link into qh.
 609 */
 610static struct list_head *
 611qh_urb_transaction (
 612        struct ehci_hcd         *ehci,
 613        struct urb              *urb,
 614        struct list_head        *head,
 615        gfp_t                   flags
 616) {
 617        struct ehci_qtd         *qtd, *qtd_prev;
 618        dma_addr_t              buf;
 619        int                     len, maxpacket;
 620        int                     is_input;
 621        u32                     token;
 622
 623        /*
 624         * URBs map to sequences of QTDs:  one logical transaction
 625         */
 626        qtd = ehci_qtd_alloc (ehci, flags);
 627        if (unlikely (!qtd))
 628                return NULL;
 629        list_add_tail (&qtd->qtd_list, head);
 630        qtd->urb = urb;
 631
 632        token = QTD_STS_ACTIVE;
 633        token |= (EHCI_TUNE_CERR << 10);
 634        /* for split transactions, SplitXState initialized to zero */
 635
 636        len = urb->transfer_buffer_length;
 637        is_input = usb_pipein (urb->pipe);
 638        if (usb_pipecontrol (urb->pipe)) {
 639                /* SETUP pid */
 640                qtd_fill(ehci, qtd, urb->setup_dma,
 641                                sizeof (struct usb_ctrlrequest),
 642                                token | (2 /* "setup" */ << 8), 8);
 643
 644                /* ... and always at least one more pid */
 645                token ^= QTD_TOGGLE;
 646                qtd_prev = qtd;
 647                qtd = ehci_qtd_alloc (ehci, flags);
 648                if (unlikely (!qtd))
 649                        goto cleanup;
 650                qtd->urb = urb;
 651                qtd_prev->hw_next = QTD_NEXT(ehci, qtd->qtd_dma);
 652                list_add_tail (&qtd->qtd_list, head);
 653
 654                /* for zero length DATA stages, STATUS is always IN */
 655                if (len == 0)
 656                        token |= (1 /* "in" */ << 8);
 657        }
 658
 659        /*
 660         * data transfer stage:  buffer setup
 661         */
 662        buf = urb->transfer_dma;
 663
 664        if (is_input)
 665                token |= (1 /* "in" */ << 8);
 666        /* else it's already initted to "out" pid (0 << 8) */
 667
 668        maxpacket = max_packet(usb_maxpacket(urb->dev, urb->pipe, !is_input));
 669
 670        /*
 671         * buffer gets wrapped in one or more qtds;
 672         * last one may be "short" (including zero len)
 673         * and may serve as a control status ack
 674         */
 675        for (;;) {
 676                int this_qtd_len;
 677
 678                this_qtd_len = qtd_fill(ehci, qtd, buf, len, token, maxpacket);
 679                len -= this_qtd_len;
 680                buf += this_qtd_len;
 681
 682                /*
 683                 * short reads advance to a "magic" dummy instead of the next
 684                 * qtd ... that forces the queue to stop, for manual cleanup.
 685                 * (this will usually be overridden later.)
 686                 */
 687                if (is_input)
 688                        qtd->hw_alt_next = ehci->async->hw->hw_alt_next;
 689
 690                /* qh makes control packets use qtd toggle; maybe switch it */
 691                if ((maxpacket & (this_qtd_len + (maxpacket - 1))) == 0)
 692                        token ^= QTD_TOGGLE;
 693
 694                if (likely (len <= 0))
 695                        break;
 696
 697                qtd_prev = qtd;
 698                qtd = ehci_qtd_alloc (ehci, flags);
 699                if (unlikely (!qtd))
 700                        goto cleanup;
 701                qtd->urb = urb;
 702                qtd_prev->hw_next = QTD_NEXT(ehci, qtd->qtd_dma);
 703                list_add_tail (&qtd->qtd_list, head);
 704        }
 705
 706        /*
 707         * unless the caller requires manual cleanup after short reads,
 708         * have the alt_next mechanism keep the queue running after the
 709         * last data qtd (the only one, for control and most other cases).
 710         */
 711        if (likely ((urb->transfer_flags & URB_SHORT_NOT_OK) == 0
 712                                || usb_pipecontrol (urb->pipe)))
 713                qtd->hw_alt_next = EHCI_LIST_END(ehci);
 714
 715        /*
 716         * control requests may need a terminating data "status" ack;
 717         * bulk ones may need a terminating short packet (zero length).
 718         */
 719        if (likely (urb->transfer_buffer_length != 0)) {
 720                int     one_more = 0;
 721
 722                if (usb_pipecontrol (urb->pipe)) {
 723                        one_more = 1;
 724                        token ^= 0x0100;        /* "in" <--> "out"  */
 725                        token |= QTD_TOGGLE;    /* force DATA1 */
 726                } else if (usb_pipebulk (urb->pipe)
 727                                && (urb->transfer_flags & URB_ZERO_PACKET)
 728                                && !(urb->transfer_buffer_length % maxpacket)) {
 729                        one_more = 1;
 730                }
 731                if (one_more) {
 732                        qtd_prev = qtd;
 733                        qtd = ehci_qtd_alloc (ehci, flags);
 734                        if (unlikely (!qtd))
 735                                goto cleanup;
 736                        qtd->urb = urb;
 737                        qtd_prev->hw_next = QTD_NEXT(ehci, qtd->qtd_dma);
 738                        list_add_tail (&qtd->qtd_list, head);
 739
 740                        /* never any data in such packets */
 741                        qtd_fill(ehci, qtd, 0, 0, token, 0);
 742                }
 743        }
 744
 745        /* by default, enable interrupt on urb completion */
 746        if (likely (!(urb->transfer_flags & URB_NO_INTERRUPT)))
 747                qtd->hw_token |= cpu_to_hc32(ehci, QTD_IOC);
 748        return head;
 749
 750cleanup:
 751        qtd_list_free (ehci, urb, head);
 752        return NULL;
 753}
 754
 755/*-------------------------------------------------------------------------*/
 756
 757// Would be best to create all qh's from config descriptors,
 758// when each interface/altsetting is established.  Unlink
 759// any previous qh and cancel its urbs first; endpoints are
 760// implicitly reset then (data toggle too).
 761// That'd mean updating how usbcore talks to HCDs. (2.7?)
 762
 763
 764/*
 765 * Each QH holds a qtd list; a QH is used for everything except iso.
 766 *
 767 * For interrupt urbs, the scheduler must set the microframe scheduling
 768 * mask(s) each time the QH gets scheduled.  For highspeed, that's
 769 * just one microframe in the s-mask.  For split interrupt transactions
 770 * there are additional complications: c-mask, maybe FSTNs.
 771 */
 772static struct ehci_qh *
 773qh_make (
 774        struct ehci_hcd         *ehci,
 775        struct urb              *urb,
 776        gfp_t                   flags
 777) {
 778        struct ehci_qh          *qh = ehci_qh_alloc (ehci, flags);
 779        u32                     info1 = 0, info2 = 0;
 780        int                     is_input, type;
 781        int                     maxp = 0;
 782        struct usb_tt           *tt = urb->dev->tt;
 783        struct ehci_qh_hw       *hw;
 784
 785        if (!qh)
 786                return qh;
 787
 788        /*
 789         * init endpoint/device data for this QH
 790         */
 791        info1 |= usb_pipeendpoint (urb->pipe) << 8;
 792        info1 |= usb_pipedevice (urb->pipe) << 0;
 793
 794        is_input = usb_pipein (urb->pipe);
 795        type = usb_pipetype (urb->pipe);
 796        maxp = usb_maxpacket (urb->dev, urb->pipe, !is_input);
 797
 798        /* 1024 byte maxpacket is a hardware ceiling.  High bandwidth
 799         * acts like up to 3KB, but is built from smaller packets.
 800         */
 801        if (max_packet(maxp) > 1024) {
 802                ehci_dbg(ehci, "bogus qh maxpacket %d\n", max_packet(maxp));
 803                goto done;
 804        }
 805
 806        /* Compute interrupt scheduling parameters just once, and save.
 807         * - allowing for high bandwidth, how many nsec/uframe are used?
 808         * - split transactions need a second CSPLIT uframe; same question
 809         * - splits also need a schedule gap (for full/low speed I/O)
 810         * - qh has a polling interval
 811         *
 812         * For control/bulk requests, the HC or TT handles these.
 813         */
 814        if (type == PIPE_INTERRUPT) {
 815                qh->usecs = NS_TO_US(usb_calc_bus_time(USB_SPEED_HIGH,
 816                                is_input, 0,
 817                                hb_mult(maxp) * max_packet(maxp)));
 818                qh->start = NO_FRAME;
 819
 820                if (urb->dev->speed == USB_SPEED_HIGH) {
 821                        qh->c_usecs = 0;
 822                        qh->gap_uf = 0;
 823
 824                        qh->period = urb->interval >> 3;
 825                        if (qh->period == 0 && urb->interval != 1) {
 826                                /* NOTE interval 2 or 4 uframes could work.
 827                                 * But interval 1 scheduling is simpler, and
 828                                 * includes high bandwidth.
 829                                 */
 830                                dbg ("intr period %d uframes, NYET!",
 831                                                urb->interval);
 832                                goto done;
 833                        }
 834                } else {
 835                        int             think_time;
 836
 837                        /* gap is f(FS/LS transfer times) */
 838                        qh->gap_uf = 1 + usb_calc_bus_time (urb->dev->speed,
 839                                        is_input, 0, maxp) / (125 * 1000);
 840
 841                        /* FIXME this just approximates SPLIT/CSPLIT times */
 842                        if (is_input) {         // SPLIT, gap, CSPLIT+DATA
 843                                qh->c_usecs = qh->usecs + HS_USECS (0);
 844                                qh->usecs = HS_USECS (1);
 845                        } else {                // SPLIT+DATA, gap, CSPLIT
 846                                qh->usecs += HS_USECS (1);
 847                                qh->c_usecs = HS_USECS (0);
 848                        }
 849
 850                        think_time = tt ? tt->think_time : 0;
 851                        qh->tt_usecs = NS_TO_US (think_time +
 852                                        usb_calc_bus_time (urb->dev->speed,
 853                                        is_input, 0, max_packet (maxp)));
 854                        qh->period = urb->interval;
 855                }
 856        }
 857
 858        /* support for tt scheduling, and access to toggles */
 859        qh->dev = urb->dev;
 860
 861        /* using TT? */
 862        switch (urb->dev->speed) {
 863        case USB_SPEED_LOW:
 864                info1 |= (1 << 12);     /* EPS "low" */
 865                /* FALL THROUGH */
 866
 867        case USB_SPEED_FULL:
 868                /* EPS 0 means "full" */
 869                if (type != PIPE_INTERRUPT)
 870                        info1 |= (EHCI_TUNE_RL_TT << 28);
 871                if (type == PIPE_CONTROL) {
 872                        info1 |= (1 << 27);     /* for TT */
 873                        info1 |= 1 << 14;       /* toggle from qtd */
 874                }
 875                info1 |= maxp << 16;
 876
 877                info2 |= (EHCI_TUNE_MULT_TT << 30);
 878
 879                /* Some Freescale processors have an erratum in which the
 880                 * port number in the queue head was 0..N-1 instead of 1..N.
 881                 */
 882                if (ehci_has_fsl_portno_bug(ehci))
 883                        info2 |= (urb->dev->ttport-1) << 23;
 884                else
 885                        info2 |= urb->dev->ttport << 23;
 886
 887                /* set the address of the TT; for TDI's integrated
 888                 * root hub tt, leave it zeroed.
 889                 */
 890                if (tt && tt->hub != ehci_to_hcd(ehci)->self.root_hub)
 891                        info2 |= tt->hub->devnum << 16;
 892
 893                /* NOTE:  if (PIPE_INTERRUPT) { scheduler sets c-mask } */
 894
 895                break;
 896
 897        case USB_SPEED_HIGH:            /* no TT involved */
 898                info1 |= (2 << 12);     /* EPS "high" */
 899                if (type == PIPE_CONTROL) {
 900                        info1 |= (EHCI_TUNE_RL_HS << 28);
 901                        info1 |= 64 << 16;      /* usb2 fixed maxpacket */
 902                        info1 |= 1 << 14;       /* toggle from qtd */
 903                        info2 |= (EHCI_TUNE_MULT_HS << 30);
 904                } else if (type == PIPE_BULK) {
 905                        info1 |= (EHCI_TUNE_RL_HS << 28);
 906                        /* The USB spec says that high speed bulk endpoints
 907                         * always use 512 byte maxpacket.  But some device
 908                         * vendors decided to ignore that, and MSFT is happy
 909                         * to help them do so.  So now people expect to use
 910                         * such nonconformant devices with Linux too; sigh.
 911                         */
 912                        info1 |= max_packet(maxp) << 16;
 913                        info2 |= (EHCI_TUNE_MULT_HS << 30);
 914                } else {                /* PIPE_INTERRUPT */
 915                        info1 |= max_packet (maxp) << 16;
 916                        info2 |= hb_mult (maxp) << 30;
 917                }
 918                break;
 919        default:
 920                dbg ("bogus dev %p speed %d", urb->dev, urb->dev->speed);
 921done:
 922                qh_put (qh);
 923                return NULL;
 924        }
 925
 926        /* NOTE:  if (PIPE_INTERRUPT) { scheduler sets s-mask } */
 927
 928        /* init as live, toggle clear, advance to dummy */
 929        qh->qh_state = QH_STATE_IDLE;
 930        hw = qh->hw;
 931        hw->hw_info1 = cpu_to_hc32(ehci, info1);
 932        hw->hw_info2 = cpu_to_hc32(ehci, info2);
 933        usb_settoggle (urb->dev, usb_pipeendpoint (urb->pipe), !is_input, 1);
 934        qh_refresh (ehci, qh);
 935        return qh;
 936}
 937
 938/*-------------------------------------------------------------------------*/
 939
 940/* move qh (and its qtds) onto async queue; maybe enable queue.  */
 941
 942static void qh_link_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
 943{
 944        __hc32          dma = QH_NEXT(ehci, qh->qh_dma);
 945        struct ehci_qh  *head;
 946
 947        /* Don't link a QH if there's a Clear-TT-Buffer pending */
 948        if (unlikely(qh->clearing_tt))
 949                return;
 950
 951        WARN_ON(qh->qh_state != QH_STATE_IDLE);
 952
 953        /* (re)start the async schedule? */
 954        head = ehci->async;
 955        timer_action_done (ehci, TIMER_ASYNC_OFF);
 956        if (!head->qh_next.qh) {
 957                u32     cmd = ehci_readl(ehci, &ehci->regs->command);
 958
 959                if (!(cmd & CMD_ASE)) {
 960                        /* in case a clear of CMD_ASE didn't take yet */
 961                        (void)handshake(ehci, &ehci->regs->status,
 962                                        STS_ASS, 0, 150);
 963                        cmd |= CMD_ASE | CMD_RUN;
 964                        ehci_writel(ehci, cmd, &ehci->regs->command);
 965                        ehci_to_hcd(ehci)->state = HC_STATE_RUNNING;
 966                        /* posted write need not be known to HC yet ... */
 967                }
 968        }
 969
 970        /* clear halt and/or toggle; and maybe recover from silicon quirk */
 971        qh_refresh(ehci, qh);
 972
 973        /* splice right after start */
 974        qh->qh_next = head->qh_next;
 975        qh->hw->hw_next = head->hw->hw_next;
 976        wmb ();
 977
 978        head->qh_next.qh = qh;
 979        head->hw->hw_next = dma;
 980
 981        qh_get(qh);
 982        qh->xacterrs = 0;
 983        qh->qh_state = QH_STATE_LINKED;
 984        /* qtd completions reported later by interrupt */
 985}
 986
 987/*-------------------------------------------------------------------------*/
 988
 989/*
 990 * For control/bulk/interrupt, return QH with these TDs appended.
 991 * Allocates and initializes the QH if necessary.
 992 * Returns null if it can't allocate a QH it needs to.
 993 * If the QH has TDs (urbs) already, that's great.
 994 */
 995static struct ehci_qh *qh_append_tds (
 996        struct ehci_hcd         *ehci,
 997        struct urb              *urb,
 998        struct list_head        *qtd_list,
 999        int                     epnum,
1000        void                    **ptr
1001)
1002{
1003        struct ehci_qh          *qh = NULL;
1004        __hc32                  qh_addr_mask = cpu_to_hc32(ehci, 0x7f);
1005
1006        qh = (struct ehci_qh *) *ptr;
1007        if (unlikely (qh == NULL)) {
1008                /* can't sleep here, we have ehci->lock... */
1009                qh = qh_make (ehci, urb, GFP_ATOMIC);
1010                *ptr = qh;
1011        }
1012        if (likely (qh != NULL)) {
1013                struct ehci_qtd *qtd;
1014
1015                if (unlikely (list_empty (qtd_list)))
1016                        qtd = NULL;
1017                else
1018                        qtd = list_entry (qtd_list->next, struct ehci_qtd,
1019                                        qtd_list);
1020
1021                /* control qh may need patching ... */
1022                if (unlikely (epnum == 0)) {
1023
1024                        /* usb_reset_device() briefly reverts to address 0 */
1025                        if (usb_pipedevice (urb->pipe) == 0)
1026                                qh->hw->hw_info1 &= ~qh_addr_mask;
1027                }
1028
1029                /* just one way to queue requests: swap with the dummy qtd.
1030                 * only hc or qh_refresh() ever modify the overlay.
1031                 */
1032                if (likely (qtd != NULL)) {
1033                        struct ehci_qtd         *dummy;
1034                        dma_addr_t              dma;
1035                        __hc32                  token;
1036
1037                        /* to avoid racing the HC, use the dummy td instead of
1038                         * the first td of our list (becomes new dummy).  both
1039                         * tds stay deactivated until we're done, when the
1040                         * HC is allowed to fetch the old dummy (4.10.2).
1041                         */
1042                        token = qtd->hw_token;
1043                        qtd->hw_token = HALT_BIT(ehci);
1044                        wmb ();
1045                        dummy = qh->dummy;
1046
1047                        dma = dummy->qtd_dma;
1048                        *dummy = *qtd;
1049                        dummy->qtd_dma = dma;
1050
1051                        list_del (&qtd->qtd_list);
1052                        list_add (&dummy->qtd_list, qtd_list);
1053                        list_splice_tail(qtd_list, &qh->qtd_list);
1054
1055                        ehci_qtd_init(ehci, qtd, qtd->qtd_dma);
1056                        qh->dummy = qtd;
1057
1058                        /* hc must see the new dummy at list end */
1059                        dma = qtd->qtd_dma;
1060                        qtd = list_entry (qh->qtd_list.prev,
1061                                        struct ehci_qtd, qtd_list);
1062                        qtd->hw_next = QTD_NEXT(ehci, dma);
1063
1064                        /* let the hc process these next qtds */
1065                        wmb ();
1066                        dummy->hw_token = token;
1067
1068                        urb->hcpriv = qh_get (qh);
1069                }
1070        }
1071        return qh;
1072}
1073
1074/*-------------------------------------------------------------------------*/
1075
1076static int
1077submit_async (
1078        struct ehci_hcd         *ehci,
1079        struct urb              *urb,
1080        struct list_head        *qtd_list,
1081        gfp_t                   mem_flags
1082) {
1083        struct ehci_qtd         *qtd;
1084        int                     epnum;
1085        unsigned long           flags;
1086        struct ehci_qh          *qh = NULL;
1087        int                     rc;
1088
1089        qtd = list_entry (qtd_list->next, struct ehci_qtd, qtd_list);
1090        epnum = urb->ep->desc.bEndpointAddress;
1091
1092#ifdef EHCI_URB_TRACE
1093        ehci_dbg (ehci,
1094                "%s %s urb %p ep%d%s len %d, qtd %p [qh %p]\n",
1095                __func__, urb->dev->devpath, urb,
1096                epnum & 0x0f, (epnum & USB_DIR_IN) ? "in" : "out",
1097                urb->transfer_buffer_length,
1098                qtd, urb->ep->hcpriv);
1099#endif
1100
1101        spin_lock_irqsave (&ehci->lock, flags);
1102        if (unlikely(!test_bit(HCD_FLAG_HW_ACCESSIBLE,
1103                               &ehci_to_hcd(ehci)->flags))) {
1104                rc = -ESHUTDOWN;
1105                goto done;
1106        }
1107        rc = usb_hcd_link_urb_to_ep(ehci_to_hcd(ehci), urb);
1108        if (unlikely(rc))
1109                goto done;
1110
1111        qh = qh_append_tds(ehci, urb, qtd_list, epnum, &urb->ep->hcpriv);
1112        if (unlikely(qh == NULL)) {
1113                usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb);
1114                rc = -ENOMEM;
1115                goto done;
1116        }
1117
1118        /* Control/bulk operations through TTs don't need scheduling,
1119         * the HC and TT handle it when the TT has a buffer ready.
1120         */
1121        if (likely (qh->qh_state == QH_STATE_IDLE))
1122                qh_link_async(ehci, qh);
1123 done:
1124        spin_unlock_irqrestore (&ehci->lock, flags);
1125        if (unlikely (qh == NULL))
1126                qtd_list_free (ehci, urb, qtd_list);
1127        return rc;
1128}
1129
1130/*-------------------------------------------------------------------------*/
1131
1132/* the async qh for the qtds being reclaimed are now unlinked from the HC */
1133
1134static void end_unlink_async (struct ehci_hcd *ehci)
1135{
1136        struct ehci_qh          *qh = ehci->reclaim;
1137        struct ehci_qh          *next;
1138
1139        iaa_watchdog_done(ehci);
1140
1141        // qh->hw_next = cpu_to_hc32(qh->qh_dma);
1142        qh->qh_state = QH_STATE_IDLE;
1143        qh->qh_next.qh = NULL;
1144        qh_put (qh);                    // refcount from reclaim
1145
1146        /* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */
1147        next = qh->reclaim;
1148        ehci->reclaim = next;
1149        qh->reclaim = NULL;
1150
1151        qh_completions (ehci, qh);
1152
1153        if (!list_empty (&qh->qtd_list)
1154                        && HC_IS_RUNNING (ehci_to_hcd(ehci)->state))
1155                qh_link_async (ehci, qh);
1156        else {
1157                /* it's not free to turn the async schedule on/off; leave it
1158                 * active but idle for a while once it empties.
1159                 */
1160                if (HC_IS_RUNNING (ehci_to_hcd(ehci)->state)
1161                                && ehci->async->qh_next.qh == NULL)
1162                        timer_action (ehci, TIMER_ASYNC_OFF);
1163        }
1164        qh_put(qh);                     /* refcount from async list */
1165
1166        if (next) {
1167                ehci->reclaim = NULL;
1168                start_unlink_async (ehci, next);
1169        }
1170}
1171
1172/* makes sure the async qh will become idle */
1173/* caller must own ehci->lock */
1174
1175static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
1176{
1177        int             cmd = ehci_readl(ehci, &ehci->regs->command);
1178        struct ehci_qh  *prev;
1179
1180#ifdef DEBUG
1181        assert_spin_locked(&ehci->lock);
1182        if (ehci->reclaim
1183                        || (qh->qh_state != QH_STATE_LINKED
1184                                && qh->qh_state != QH_STATE_UNLINK_WAIT)
1185                        )
1186                BUG ();
1187#endif
1188
1189        /* stop async schedule right now? */
1190        if (unlikely (qh == ehci->async)) {
1191                /* can't get here without STS_ASS set */
1192                if (ehci_to_hcd(ehci)->state != HC_STATE_HALT
1193                                && !ehci->reclaim) {
1194                        /* ... and CMD_IAAD clear */
1195                        ehci_writel(ehci, cmd & ~CMD_ASE,
1196                                    &ehci->regs->command);
1197                        wmb ();
1198                        // handshake later, if we need to
1199                        timer_action_done (ehci, TIMER_ASYNC_OFF);
1200                }
1201                return;
1202        }
1203
1204        qh->qh_state = QH_STATE_UNLINK;
1205        ehci->reclaim = qh = qh_get (qh);
1206
1207        prev = ehci->async;
1208        while (prev->qh_next.qh != qh)
1209                prev = prev->qh_next.qh;
1210
1211        prev->hw->hw_next = qh->hw->hw_next;
1212        prev->qh_next = qh->qh_next;
1213        wmb ();
1214
1215        /* If the controller isn't running, we don't have to wait for it */
1216        if (unlikely(!HC_IS_RUNNING(ehci_to_hcd(ehci)->state))) {
1217                /* if (unlikely (qh->reclaim != 0))
1218                 *      this will recurse, probably not much
1219                 */
1220                end_unlink_async (ehci);
1221                return;
1222        }
1223
1224        cmd |= CMD_IAAD;
1225        ehci_writel(ehci, cmd, &ehci->regs->command);
1226        (void)ehci_readl(ehci, &ehci->regs->command);
1227        iaa_watchdog_start(ehci);
1228}
1229
1230/*-------------------------------------------------------------------------*/
1231
1232static void scan_async (struct ehci_hcd *ehci)
1233{
1234        struct ehci_qh          *qh;
1235        enum ehci_timer_action  action = TIMER_IO_WATCHDOG;
1236
1237        ehci->stamp = ehci_readl(ehci, &ehci->regs->frame_index);
1238        timer_action_done (ehci, TIMER_ASYNC_SHRINK);
1239rescan:
1240        qh = ehci->async->qh_next.qh;
1241        if (likely (qh != NULL)) {
1242                do {
1243                        /* clean any finished work for this qh */
1244                        if (!list_empty (&qh->qtd_list)
1245                                        && qh->stamp != ehci->stamp) {
1246                                int temp;
1247
1248                                /* unlinks could happen here; completion
1249                                 * reporting drops the lock.  rescan using
1250                                 * the latest schedule, but don't rescan
1251                                 * qhs we already finished (no looping).
1252                                 */
1253                                qh = qh_get (qh);
1254                                qh->stamp = ehci->stamp;
1255                                temp = qh_completions (ehci, qh);
1256                                if (qh->needs_rescan)
1257                                        unlink_async(ehci, qh);
1258                                qh_put (qh);
1259                                if (temp != 0) {
1260                                        goto rescan;
1261                                }
1262                        }
1263
1264                        /* unlink idle entries, reducing DMA usage as well
1265                         * as HCD schedule-scanning costs.  delay for any qh
1266                         * we just scanned, there's a not-unusual case that it
1267                         * doesn't stay idle for long.
1268                         * (plus, avoids some kind of re-activation race.)
1269                         */
1270                        if (list_empty(&qh->qtd_list)
1271                                        && qh->qh_state == QH_STATE_LINKED) {
1272                                if (!ehci->reclaim
1273                                        && ((ehci->stamp - qh->stamp) & 0x1fff)
1274                                                >= (EHCI_SHRINK_FRAMES * 8))
1275                                        start_unlink_async(ehci, qh);
1276                                else
1277                                        action = TIMER_ASYNC_SHRINK;
1278                        }
1279
1280                        qh = qh->qh_next.qh;
1281                } while (qh);
1282        }
1283        if (action == TIMER_ASYNC_SHRINK)
1284                timer_action (ehci, TIMER_ASYNC_SHRINK);
1285}
1286
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.