1 /* 2 * Copyright (c) 2001-2004 by David Brownell 3 * Copyright (c) 2003 Michal Sojka, for high-speed iso transfers 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License as published by the 7 * Free Software Foundation; either version 2 of the License, or (at your 8 * option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software Foundation, 17 * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 */ 19 20 /* this file is part of ehci-hcd.c */ 21 22 /*-------------------------------------------------------------------------*/ 23 24 /* 25 * EHCI scheduled transaction support: interrupt, iso, split iso 26 * These are called "periodic" transactions in the EHCI spec. 27 * 28 * Note that for interrupt transfers, the QH/QTD manipulation is shared 29 * with the "asynchronous" transaction support (control/bulk transfers). 30 * The only real difference is in how interrupt transfers are scheduled. 31 * 32 * For ISO, we make an "iso_stream" head to serve the same role as a QH. 33 * It keeps track of every ITD (or SITD) that's linked, and holds enough 34 * pre-calculated schedule data to make appending to the queue be quick. 35 */ 36 37 static int ehci_get_frame (struct usb_hcd *hcd); 38 39 #ifdef CONFIG_PCI 40 41 static unsigned ehci_read_frame_index(struct ehci_hcd *ehci) 42 { 43 unsigned uf; 44 45 /* 46 * The MosChip MCS9990 controller updates its microframe counter 47 * a little before the frame counter, and occasionally we will read 48 * the invalid intermediate value. Avoid problems by checking the 49 * microframe number (the low-order 3 bits); if they are 0 then 50 * re-read the register to get the correct value. 51 */ 52 uf = ehci_readl(ehci, &ehci->regs->frame_index); 53 if (unlikely(ehci->frame_index_bug && ((uf & 7) == 0))) 54 uf = ehci_readl(ehci, &ehci->regs->frame_index); 55 return uf; 56 } 57 58 #endif 59 60 /*-------------------------------------------------------------------------*/ 61 62 /* 63 * periodic_next_shadow - return "next" pointer on shadow list 64 * @periodic: host pointer to qh/itd/sitd 65 * @tag: hardware tag for type of this record 66 */ 67 static union ehci_shadow * 68 periodic_next_shadow(struct ehci_hcd *ehci, union ehci_shadow *periodic, 69 __hc32 tag) 70 { 71 switch (hc32_to_cpu(ehci, tag)) { 72 case Q_TYPE_QH: 73 return &periodic->qh->qh_next; 74 case Q_TYPE_FSTN: 75 return &periodic->fstn->fstn_next; 76 case Q_TYPE_ITD: 77 return &periodic->itd->itd_next; 78 // case Q_TYPE_SITD: 79 default: 80 return &periodic->sitd->sitd_next; 81 } 82 } 83 84 static __hc32 * 85 shadow_next_periodic(struct ehci_hcd *ehci, union ehci_shadow *periodic, 86 __hc32 tag) 87 { 88 switch (hc32_to_cpu(ehci, tag)) { 89 /* our ehci_shadow.qh is actually software part */ 90 case Q_TYPE_QH: 91 return &periodic->qh->hw->hw_next; 92 /* others are hw parts */ 93 default: 94 return periodic->hw_next; 95 } 96 } 97 98 /* caller must hold ehci->lock */ 99 static void periodic_unlink (struct ehci_hcd *ehci, unsigned frame, void *ptr) 100 { 101 union ehci_shadow *prev_p = &ehci->pshadow[frame]; 102 __hc32 *hw_p = &ehci->periodic[frame]; 103 union ehci_shadow here = *prev_p; 104 105 /* find predecessor of "ptr"; hw and shadow lists are in sync */ 106 while (here.ptr && here.ptr != ptr) { 107 prev_p = periodic_next_shadow(ehci, prev_p, 108 Q_NEXT_TYPE(ehci, *hw_p)); 109 hw_p = shadow_next_periodic(ehci, &here, 110 Q_NEXT_TYPE(ehci, *hw_p)); 111 here = *prev_p; 112 } 113 /* an interrupt entry (at list end) could have been shared */ 114 if (!here.ptr) 115 return; 116 117 /* update shadow and hardware lists ... the old "next" pointers 118 * from ptr may still be in use, the caller updates them. 119 */ 120 *prev_p = *periodic_next_shadow(ehci, &here, 121 Q_NEXT_TYPE(ehci, *hw_p)); 122 123 if (!ehci->use_dummy_qh || 124 *shadow_next_periodic(ehci, &here, Q_NEXT_TYPE(ehci, *hw_p)) 125 != EHCI_LIST_END(ehci)) 126 *hw_p = *shadow_next_periodic(ehci, &here, 127 Q_NEXT_TYPE(ehci, *hw_p)); 128 else 129 *hw_p = ehci->dummy->qh_dma; 130 } 131 132 /* how many of the uframe's 125 usecs are allocated? */ 133 static unsigned short 134 periodic_usecs (struct ehci_hcd *ehci, unsigned frame, unsigned uframe) 135 { 136 __hc32 *hw_p = &ehci->periodic [frame]; 137 union ehci_shadow *q = &ehci->pshadow [frame]; 138 unsigned usecs = 0; 139 struct ehci_qh_hw *hw; 140 141 while (q->ptr) { 142 switch (hc32_to_cpu(ehci, Q_NEXT_TYPE(ehci, *hw_p))) { 143 case Q_TYPE_QH: 144 hw = q->qh->hw; 145 /* is it in the S-mask? */ 146 if (hw->hw_info2 & cpu_to_hc32(ehci, 1 << uframe)) 147 usecs += q->qh->usecs; 148 /* ... or C-mask? */ 149 if (hw->hw_info2 & cpu_to_hc32(ehci, 150 1 << (8 + uframe))) 151 usecs += q->qh->c_usecs; 152 hw_p = &hw->hw_next; 153 q = &q->qh->qh_next; 154 break; 155 // case Q_TYPE_FSTN: 156 default: 157 /* for "save place" FSTNs, count the relevant INTR 158 * bandwidth from the previous frame 159 */ 160 if (q->fstn->hw_prev != EHCI_LIST_END(ehci)) { 161 ehci_dbg (ehci, "ignoring FSTN cost ...\n"); 162 } 163 hw_p = &q->fstn->hw_next; 164 q = &q->fstn->fstn_next; 165 break; 166 case Q_TYPE_ITD: 167 if (q->itd->hw_transaction[uframe]) 168 usecs += q->itd->stream->usecs; 169 hw_p = &q->itd->hw_next; 170 q = &q->itd->itd_next; 171 break; 172 case Q_TYPE_SITD: 173 /* is it in the S-mask? (count SPLIT, DATA) */ 174 if (q->sitd->hw_uframe & cpu_to_hc32(ehci, 175 1 << uframe)) { 176 if (q->sitd->hw_fullspeed_ep & 177 cpu_to_hc32(ehci, 1<<31)) 178 usecs += q->sitd->stream->usecs; 179 else /* worst case for OUT start-split */ 180 usecs += HS_USECS_ISO (188); 181 } 182 183 /* ... C-mask? (count CSPLIT, DATA) */ 184 if (q->sitd->hw_uframe & 185 cpu_to_hc32(ehci, 1 << (8 + uframe))) { 186 /* worst case for IN complete-split */ 187 usecs += q->sitd->stream->c_usecs; 188 } 189 190 hw_p = &q->sitd->hw_next; 191 q = &q->sitd->sitd_next; 192 break; 193 } 194 } 195 #ifdef DEBUG 196 if (usecs > ehci->uframe_periodic_max) 197 ehci_err (ehci, "uframe %d sched overrun: %d usecs\n", 198 frame * 8 + uframe, usecs); 199 #endif 200 return usecs; 201 } 202 203 /*-------------------------------------------------------------------------*/ 204 205 static int same_tt (struct usb_device *dev1, struct usb_device *dev2) 206 { 207 if (!dev1->tt || !dev2->tt) 208 return 0; 209 if (dev1->tt != dev2->tt) 210 return 0; 211 if (dev1->tt->multi) 212 return dev1->ttport == dev2->ttport; 213 else 214 return 1; 215 } 216 217 #ifdef CONFIG_USB_EHCI_TT_NEWSCHED 218 219 /* Which uframe does the low/fullspeed transfer start in? 220 * 221 * The parameter is the mask of ssplits in "H-frame" terms 222 * and this returns the transfer start uframe in "B-frame" terms, 223 * which allows both to match, e.g. a ssplit in "H-frame" uframe 0 224 * will cause a transfer in "B-frame" uframe 0. "B-frames" lag 225 * "H-frames" by 1 uframe. See the EHCI spec sec 4.5 and figure 4.7. 226 */ 227 static inline unsigned char tt_start_uframe(struct ehci_hcd *ehci, __hc32 mask) 228 { 229 unsigned char smask = QH_SMASK & hc32_to_cpu(ehci, mask); 230 if (!smask) { 231 ehci_err(ehci, "invalid empty smask!\n"); 232 /* uframe 7 can't have bw so this will indicate failure */ 233 return 7; 234 } 235 return ffs(smask) - 1; 236 } 237 238 static const unsigned char 239 max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 30, 0 }; 240 241 /* carryover low/fullspeed bandwidth that crosses uframe boundries */ 242 static inline void carryover_tt_bandwidth(unsigned short tt_usecs[8]) 243 { 244 int i; 245 for (i=0; i<7; i++) { 246 if (max_tt_usecs[i] < tt_usecs[i]) { 247 tt_usecs[i+1] += tt_usecs[i] - max_tt_usecs[i]; 248 tt_usecs[i] = max_tt_usecs[i]; 249 } 250 } 251 } 252 253 /* How many of the tt's periodic downstream 1000 usecs are allocated? 254 * 255 * While this measures the bandwidth in terms of usecs/uframe, 256 * the low/fullspeed bus has no notion of uframes, so any particular 257 * low/fullspeed transfer can "carry over" from one uframe to the next, 258 * since the TT just performs downstream transfers in sequence. 259 * 260 * For example two separate 100 usec transfers can start in the same uframe, 261 * and the second one would "carry over" 75 usecs into the next uframe. 262 */ 263 static void 264 periodic_tt_usecs ( 265 struct ehci_hcd *ehci, 266 struct usb_device *dev, 267 unsigned frame, 268 unsigned short tt_usecs[8] 269 ) 270 { 271 __hc32 *hw_p = &ehci->periodic [frame]; 272 union ehci_shadow *q = &ehci->pshadow [frame]; 273 unsigned char uf; 274 275 memset(tt_usecs, 0, 16); 276 277 while (q->ptr) { 278 switch (hc32_to_cpu(ehci, Q_NEXT_TYPE(ehci, *hw_p))) { 279 case Q_TYPE_ITD: 280 hw_p = &q->itd->hw_next; 281 q = &q->itd->itd_next; 282 continue; 283 case Q_TYPE_QH: 284 if (same_tt(dev, q->qh->dev)) { 285 uf = tt_start_uframe(ehci, q->qh->hw->hw_info2); 286 tt_usecs[uf] += q->qh->tt_usecs; 287 } 288 hw_p = &q->qh->hw->hw_next; 289 q = &q->qh->qh_next; 290 continue; 291 case Q_TYPE_SITD: 292 if (same_tt(dev, q->sitd->urb->dev)) { 293 uf = tt_start_uframe(ehci, q->sitd->hw_uframe); 294 tt_usecs[uf] += q->sitd->stream->tt_usecs; 295 } 296 hw_p = &q->sitd->hw_next; 297 q = &q->sitd->sitd_next; 298 continue; 299 // case Q_TYPE_FSTN: 300 default: 301 ehci_dbg(ehci, "ignoring periodic frame %d FSTN\n", 302 frame); 303 hw_p = &q->fstn->hw_next; 304 q = &q->fstn->fstn_next; 305 } 306 } 307 308 carryover_tt_bandwidth(tt_usecs); 309 310 if (max_tt_usecs[7] < tt_usecs[7]) 311 ehci_err(ehci, "frame %d tt sched overrun: %d usecs\n", 312 frame, tt_usecs[7] - max_tt_usecs[7]); 313 } 314 315 /* 316 * Return true if the device's tt's downstream bus is available for a 317 * periodic transfer of the specified length (usecs), starting at the 318 * specified frame/uframe. Note that (as summarized in section 11.19 319 * of the usb 2.0 spec) TTs can buffer multiple transactions for each 320 * uframe. 321 * 322 * The uframe parameter is when the fullspeed/lowspeed transfer 323 * should be executed in "B-frame" terms, which is the same as the 324 * highspeed ssplit's uframe (which is in "H-frame" terms). For example 325 * a ssplit in "H-frame" 0 causes a transfer in "B-frame" 0. 326 * See the EHCI spec sec 4.5 and fig 4.7. 327 * 328 * This checks if the full/lowspeed bus, at the specified starting uframe, 329 * has the specified bandwidth available, according to rules listed 330 * in USB 2.0 spec section 11.18.1 fig 11-60. 331 * 332 * This does not check if the transfer would exceed the max ssplit 333 * limit of 16, specified in USB 2.0 spec section 11.18.4 requirement #4, 334 * since proper scheduling limits ssplits to less than 16 per uframe. 335 */ 336 static int tt_available ( 337 struct ehci_hcd *ehci, 338 unsigned period, 339 struct usb_device *dev, 340 unsigned frame, 341 unsigned uframe, 342 u16 usecs 343 ) 344 { 345 if ((period == 0) || (uframe >= 7)) /* error */ 346 return 0; 347 348 for (; frame < ehci->periodic_size; frame += period) { 349 unsigned short tt_usecs[8]; 350 351 periodic_tt_usecs (ehci, dev, frame, tt_usecs); 352 353 ehci_vdbg(ehci, "tt frame %d check %d usecs start uframe %d in" 354 " schedule %d/%d/%d/%d/%d/%d/%d/%d\n", 355 frame, usecs, uframe, 356 tt_usecs[0], tt_usecs[1], tt_usecs[2], tt_usecs[3], 357 tt_usecs[4], tt_usecs[5], tt_usecs[6], tt_usecs[7]); 358 359 if (max_tt_usecs[uframe] <= tt_usecs[uframe]) { 360 ehci_vdbg(ehci, "frame %d uframe %d fully scheduled\n", 361 frame, uframe); 362 return 0; 363 } 364 365 /* special case for isoc transfers larger than 125us: 366 * the first and each subsequent fully used uframe 367 * must be empty, so as to not illegally delay 368 * already scheduled transactions 369 */ 370 if (125 < usecs) { 371 int ufs = (usecs / 125); 372 int i; 373 for (i = uframe; i < (uframe + ufs) && i < 8; i++) 374 if (0 < tt_usecs[i]) { 375 ehci_vdbg(ehci, 376 "multi-uframe xfer can't fit " 377 "in frame %d uframe %d\n", 378 frame, i); 379 return 0; 380 } 381 } 382 383 tt_usecs[uframe] += usecs; 384 385 carryover_tt_bandwidth(tt_usecs); 386 387 /* fail if the carryover pushed bw past the last uframe's limit */ 388 if (max_tt_usecs[7] < tt_usecs[7]) { 389 ehci_vdbg(ehci, 390 "tt unavailable usecs %d frame %d uframe %d\n", 391 usecs, frame, uframe); 392 return 0; 393 } 394 } 395 396 return 1; 397 } 398 399 #else 400 401 /* return true iff the device's transaction translator is available 402 * for a periodic transfer starting at the specified frame, using 403 * all the uframes in the mask. 404 */ 405 static int tt_no_collision ( 406 struct ehci_hcd *ehci, 407 unsigned period, 408 struct usb_device *dev, 409 unsigned frame, 410 u32 uf_mask 411 ) 412 { 413 if (period == 0) /* error */ 414 return 0; 415 416 /* note bandwidth wastage: split never follows csplit 417 * (different dev or endpoint) until the next uframe. 418 * calling convention doesn't make that distinction. 419 */ 420 for (; frame < ehci->periodic_size; frame += period) { 421 union ehci_shadow here; 422 __hc32 type; 423 struct ehci_qh_hw *hw; 424 425 here = ehci->pshadow [frame]; 426 type = Q_NEXT_TYPE(ehci, ehci->periodic [frame]); 427 while (here.ptr) { 428 switch (hc32_to_cpu(ehci, type)) { 429 case Q_TYPE_ITD: 430 type = Q_NEXT_TYPE(ehci, here.itd->hw_next); 431 here = here.itd->itd_next; 432 continue; 433 case Q_TYPE_QH: 434 hw = here.qh->hw; 435 if (same_tt (dev, here.qh->dev)) { 436 u32 mask; 437 438 mask = hc32_to_cpu(ehci, 439 hw->hw_info2); 440 /* "knows" no gap is needed */ 441 mask |= mask >> 8; 442 if (mask & uf_mask) 443 break; 444 } 445 type = Q_NEXT_TYPE(ehci, hw->hw_next); 446 here = here.qh->qh_next; 447 continue; 448 case Q_TYPE_SITD: 449 if (same_tt (dev, here.sitd->urb->dev)) { 450 u16 mask; 451 452 mask = hc32_to_cpu(ehci, here.sitd 453 ->hw_uframe); 454 /* FIXME assumes no gap for IN! */ 455 mask |= mask >> 8; 456 if (mask & uf_mask) 457 break; 458 } 459 type = Q_NEXT_TYPE(ehci, here.sitd->hw_next); 460 here = here.sitd->sitd_next; 461 continue; 462 // case Q_TYPE_FSTN: 463 default: 464 ehci_dbg (ehci, 465 "periodic frame %d bogus type %d\n", 466 frame, type); 467 } 468 469 /* collision or error */ 470 return 0; 471 } 472 } 473 474 /* no collision */ 475 return 1; 476 } 477 478 #endif /* CONFIG_USB_EHCI_TT_NEWSCHED */ 479 480 /*-------------------------------------------------------------------------*/ 481 482 static void enable_periodic(struct ehci_hcd *ehci) 483 { 484 if (ehci->periodic_count++) 485 return; 486 487 /* Stop waiting to turn off the periodic schedule */ 488 ehci->enabled_hrtimer_events &= ~BIT(EHCI_HRTIMER_DISABLE_PERIODIC); 489 490 /* Don't start the schedule until PSS is 0 */ 491 ehci_poll_PSS(ehci); 492 turn_on_io_watchdog(ehci); 493 } 494 495 static void disable_periodic(struct ehci_hcd *ehci) 496 { 497 if (--ehci->periodic_count) 498 return; 499 500 /* Don't turn off the schedule until PSS is 1 */ 501 ehci_poll_PSS(ehci); 502 } 503 504 /*-------------------------------------------------------------------------*/ 505 506 /* periodic schedule slots have iso tds (normal or split) first, then a 507 * sparse tree for active interrupt transfers. 508 * 509 * this just links in a qh; caller guarantees uframe masks are set right. 510 * no FSTN support (yet; ehci 0.96+) 511 */ 512 static void qh_link_periodic(struct ehci_hcd *ehci, struct ehci_qh *qh) 513 { 514 unsigned i; 515 unsigned period = qh->period; 516 517 dev_dbg (&qh->dev->dev, 518 "link qh%d-%04x/%p start %d [%d/%d us]\n", 519 period, hc32_to_cpup(ehci, &qh->hw->hw_info2) 520 & (QH_CMASK | QH_SMASK), 521 qh, qh->start, qh->usecs, qh->c_usecs); 522 523 /* high bandwidth, or otherwise every microframe */ 524 if (period == 0) 525 period = 1; 526 527 for (i = qh->start; i < ehci->periodic_size; i += period) { 528 union ehci_shadow *prev = &ehci->pshadow[i]; 529 __hc32 *hw_p = &ehci->periodic[i]; 530 union ehci_shadow here = *prev; 531 __hc32 type = 0; 532 533 /* skip the iso nodes at list head */ 534 while (here.ptr) { 535 type = Q_NEXT_TYPE(ehci, *hw_p); 536 if (type == cpu_to_hc32(ehci, Q_TYPE_QH)) 537 break; 538 prev = periodic_next_shadow(ehci, prev, type); 539 hw_p = shadow_next_periodic(ehci, &here, type); 540 here = *prev; 541 } 542 543 /* sorting each branch by period (slow-->fast) 544 * enables sharing interior tree nodes 545 */ 546 while (here.ptr && qh != here.qh) { 547 if (qh->period > here.qh->period) 548 break; 549 prev = &here.qh->qh_next; 550 hw_p = &here.qh->hw->hw_next; 551 here = *prev; 552 } 553 /* link in this qh, unless some earlier pass did that */ 554 if (qh != here.qh) { 555 qh->qh_next = here; 556 if (here.qh) 557 qh->hw->hw_next = *hw_p; 558 wmb (); 559 prev->qh = qh; 560 *hw_p = QH_NEXT (ehci, qh->qh_dma); 561 } 562 } 563 qh->qh_state = QH_STATE_LINKED; 564 qh->xacterrs = 0; 565 566 /* update per-qh bandwidth for usbfs */ 567 ehci_to_hcd(ehci)->self.bandwidth_allocated += qh->period 568 ? ((qh->usecs + qh->c_usecs) / qh->period) 569 : (qh->usecs * 8); 570 571 list_add(&qh->intr_node, &ehci->intr_qh_list); 572 573 /* maybe enable periodic schedule processing */ 574 ++ehci->intr_count; 575 enable_periodic(ehci); 576 } 577 578 static void qh_unlink_periodic(struct ehci_hcd *ehci, struct ehci_qh *qh) 579 { 580 unsigned i; 581 unsigned period; 582 583 /* 584 * If qh is for a low/full-speed device, simply unlinking it 585 * could interfere with an ongoing split transaction. To unlink 586 * it safely would require setting the QH_INACTIVATE bit and 587 * waiting at least one frame, as described in EHCI 4.12.2.5. 588 * 589 * We won't bother with any of this. Instead, we assume that the 590 * only reason for unlinking an interrupt QH while the current URB 591 * is still active is to dequeue all the URBs (flush the whole 592 * endpoint queue). 593 * 594 * If rebalancing the periodic schedule is ever implemented, this 595 * approach will no longer be valid. 596 */ 597 598 /* high bandwidth, or otherwise part of every microframe */ 599 if ((period = qh->period) == 0) 600 period = 1; 601 602 for (i = qh->start; i < ehci->periodic_size; i += period) 603 periodic_unlink (ehci, i, qh); 604 605 /* update per-qh bandwidth for usbfs */ 606 ehci_to_hcd(ehci)->self.bandwidth_allocated -= qh->period 607 ? ((qh->usecs + qh->c_usecs) / qh->period) 608 : (qh->usecs * 8); 609 610 dev_dbg (&qh->dev->dev, 611 "unlink qh%d-%04x/%p start %d [%d/%d us]\n", 612 qh->period, 613 hc32_to_cpup(ehci, &qh->hw->hw_info2) & (QH_CMASK | QH_SMASK), 614 qh, qh->start, qh->usecs, qh->c_usecs); 615 616 /* qh->qh_next still "live" to HC */ 617 qh->qh_state = QH_STATE_UNLINK; 618 qh->qh_next.ptr = NULL; 619 620 if (ehci->qh_scan_next == qh) 621 ehci->qh_scan_next = list_entry(qh->intr_node.next, 622 struct ehci_qh, intr_node); 623 list_del(&qh->intr_node); 624 } 625 626 static void start_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh) 627 { 628 /* If the QH isn't linked then there's nothing we can do 629 * unless we were called during a giveback, in which case 630 * qh_completions() has to deal with it. 631 */ 632 if (qh->qh_state != QH_STATE_LINKED) { 633 if (qh->qh_state == QH_STATE_COMPLETING) 634 qh->needs_rescan = 1; 635 return; 636 } 637 638 qh_unlink_periodic (ehci, qh); 639 640 /* Make sure the unlinks are visible before starting the timer */ 641 wmb(); 642 643 /* 644 * The EHCI spec doesn't say how long it takes the controller to 645 * stop accessing an unlinked interrupt QH. The timer delay is 646 * 9 uframes; presumably that will be long enough. 647 */ 648 qh->unlink_cycle = ehci->intr_unlink_cycle; 649 650 /* New entries go at the end of the intr_unlink list */ 651 if (ehci->intr_unlink) 652 ehci->intr_unlink_last->unlink_next = qh; 653 else 654 ehci->intr_unlink = qh; 655 ehci->intr_unlink_last = qh; 656 657 if (ehci->intr_unlinking) 658 ; /* Avoid recursive calls */ 659 else if (ehci->rh_state < EHCI_RH_RUNNING) 660 ehci_handle_intr_unlinks(ehci); 661 else if (ehci->intr_unlink == qh) { 662 ehci_enable_event(ehci, EHCI_HRTIMER_UNLINK_INTR, true); 663 ++ehci->intr_unlink_cycle; 664 } 665 } 666 667 static void end_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh) 668 { 669 struct ehci_qh_hw *hw = qh->hw; 670 int rc; 671 672 qh->qh_state = QH_STATE_IDLE; 673 hw->hw_next = EHCI_LIST_END(ehci); 674 675 qh_completions(ehci, qh); 676 677 /* reschedule QH iff another request is queued */ 678 if (!list_empty(&qh->qtd_list) && ehci->rh_state == EHCI_RH_RUNNING) { 679 rc = qh_schedule(ehci, qh); 680 681 /* An error here likely indicates handshake failure 682 * or no space left in the schedule. Neither fault 683 * should happen often ... 684 * 685 * FIXME kill the now-dysfunctional queued urbs 686 */ 687 if (rc != 0) 688 ehci_err(ehci, "can't reschedule qh %p, err %d\n", 689 qh, rc); 690 } 691 692 /* maybe turn off periodic schedule */ 693 --ehci->intr_count; 694 disable_periodic(ehci); 695 } 696 697 /*-------------------------------------------------------------------------*/ 698 699 static int check_period ( 700 struct ehci_hcd *ehci, 701 unsigned frame, 702 unsigned uframe, 703 unsigned period, 704 unsigned usecs 705 ) { 706 int claimed; 707 708 /* complete split running into next frame? 709 * given FSTN support, we could sometimes check... 710 */ 711 if (uframe >= 8) 712 return 0; 713 714 /* convert "usecs we need" to "max already claimed" */ 715 usecs = ehci->uframe_periodic_max - usecs; 716 717 /* we "know" 2 and 4 uframe intervals were rejected; so 718 * for period 0, check _every_ microframe in the schedule. 719 */ 720 if (unlikely (period == 0)) { 721 do { 722 for (uframe = 0; uframe < 7; uframe++) { 723 claimed = periodic_usecs (ehci, frame, uframe); 724 if (claimed > usecs) 725 return 0; 726 } 727 } while ((frame += 1) < ehci->periodic_size); 728 729 /* just check the specified uframe, at that period */ 730 } else { 731 do { 732 claimed = periodic_usecs (ehci, frame, uframe); 733 if (claimed > usecs) 734 return 0; 735 } while ((frame += period) < ehci->periodic_size); 736 } 737 738 // success! 739 return 1; 740 } 741 742 static int check_intr_schedule ( 743 struct ehci_hcd *ehci, 744 unsigned frame, 745 unsigned uframe, 746 const struct ehci_qh *qh, 747 __hc32 *c_maskp 748 ) 749 { 750 int retval = -ENOSPC; 751 u8 mask = 0; 752 753 if (qh->c_usecs && uframe >= 6) /* FSTN territory? */ 754 goto done; 755 756 if (!check_period (ehci, frame, uframe, qh->period, qh->usecs)) 757 goto done; 758 if (!qh->c_usecs) { 759 retval = 0; 760 *c_maskp = 0; 761 goto done; 762 } 763 764 #ifdef CONFIG_USB_EHCI_TT_NEWSCHED 765 if (tt_available (ehci, qh->period, qh->dev, frame, uframe, 766 qh->tt_usecs)) { 767 unsigned i; 768 769 /* TODO : this may need FSTN for SSPLIT in uframe 5. */ 770 for (i=uframe+1; i<8 && i<uframe+4; i++) 771 if (!check_period (ehci, frame, i, 772 qh->period, qh->c_usecs)) 773 goto done; 774 else 775 mask |= 1 << i; 776 777 retval = 0; 778 779 *c_maskp = cpu_to_hc32(ehci, mask << 8); 780 } 781 #else 782 /* Make sure this tt's buffer is also available for CSPLITs. 783 * We pessimize a bit; probably the typical full speed case 784 * doesn't need the second CSPLIT. 785 * 786 * NOTE: both SPLIT and CSPLIT could be checked in just 787 * one smart pass... 788 */ 789 mask = 0x03 << (uframe + qh->gap_uf); 790 *c_maskp = cpu_to_hc32(ehci, mask << 8); 791 792 mask |= 1 << uframe; 793 if (tt_no_collision (ehci, qh->period, qh->dev, frame, mask)) { 794 if (!check_period (ehci, frame, uframe + qh->gap_uf + 1, 795 qh->period, qh->c_usecs)) 796 goto done; 797 if (!check_period (ehci, frame, uframe + qh->gap_uf, 798 qh->period, qh->c_usecs)) 799 goto done; 800 retval = 0; 801 } 802 #endif 803 done: 804 return retval; 805 } 806 807 /* "first fit" scheduling policy used the first time through, 808 * or when the previous schedule slot can't be re-used. 809 */ 810 static int qh_schedule(struct ehci_hcd *ehci, struct ehci_qh *qh) 811 { 812 int status; 813 unsigned uframe; 814 __hc32 c_mask; 815 unsigned frame; /* 0..(qh->period - 1), or NO_FRAME */ 816 struct ehci_qh_hw *hw = qh->hw; 817 818 qh_refresh(ehci, qh); 819 hw->hw_next = EHCI_LIST_END(ehci); 820 frame = qh->start; 821 822 /* reuse the previous schedule slots, if we can */ 823 if (frame < qh->period) { 824 uframe = ffs(hc32_to_cpup(ehci, &hw->hw_info2) & QH_SMASK); 825 status = check_intr_schedule (ehci, frame, --uframe, 826 qh, &c_mask); 827 } else { 828 uframe = 0; 829 c_mask = 0; 830 status = -ENOSPC; 831 } 832 833 /* else scan the schedule to find a group of slots such that all 834 * uframes have enough periodic bandwidth available. 835 */ 836 if (status) { 837 /* "normal" case, uframing flexible except with splits */ 838 if (qh->period) { 839 int i; 840 841 for (i = qh->period; status && i > 0; --i) { 842 frame = ++ehci->random_frame % qh->period; 843 for (uframe = 0; uframe < 8; uframe++) { 844 status = check_intr_schedule (ehci, 845 frame, uframe, qh, 846 &c_mask); 847 if (status == 0) 848 break; 849 } 850 } 851 852 /* qh->period == 0 means every uframe */ 853 } else { 854 frame = 0; 855 status = check_intr_schedule (ehci, 0, 0, qh, &c_mask); 856 } 857 if (status) 858 goto done; 859 qh->start = frame; 860 861 /* reset S-frame and (maybe) C-frame masks */ 862 hw->hw_info2 &= cpu_to_hc32(ehci, ~(QH_CMASK | QH_SMASK)); 863 hw->hw_info2 |= qh->period 864 ? cpu_to_hc32(ehci, 1 << uframe) 865 : cpu_to_hc32(ehci, QH_SMASK); 866 hw->hw_info2 |= c_mask; 867 } else 868 ehci_dbg (ehci, "reused qh %p schedule\n", qh); 869 870 /* stuff into the periodic schedule */ 871 qh_link_periodic(ehci, qh); 872 done: 873 return status; 874 } 875 876 static int intr_submit ( 877 struct ehci_hcd *ehci, 878 struct urb *urb, 879 struct list_head *qtd_list, 880 gfp_t mem_flags 881 ) { 882 unsigned epnum; 883 unsigned long flags; 884 struct ehci_qh *qh; 885 int status; 886 struct list_head empty; 887 888 /* get endpoint and transfer/schedule data */ 889 epnum = urb->ep->desc.bEndpointAddress; 890 891 spin_lock_irqsave (&ehci->lock, flags); 892 893 if (unlikely(!HCD_HW_ACCESSIBLE(ehci_to_hcd(ehci)))) { 894 status = -ESHUTDOWN; 895 goto done_not_linked; 896 } 897 status = usb_hcd_link_urb_to_ep(ehci_to_hcd(ehci), urb); 898 if (unlikely(status)) 899 goto done_not_linked; 900 901 /* get qh and force any scheduling errors */ 902 INIT_LIST_HEAD (&empty); 903 qh = qh_append_tds(ehci, urb, &empty, epnum, &urb->ep->hcpriv); 904 if (qh == NULL) { 905 status = -ENOMEM; 906 goto done; 907 } 908 if (qh->qh_state == QH_STATE_IDLE) { 909 if ((status = qh_schedule (ehci, qh)) != 0) 910 goto done; 911 } 912 913 /* then queue the urb's tds to the qh */ 914 qh = qh_append_tds(ehci, urb, qtd_list, epnum, &urb->ep->hcpriv); 915 BUG_ON (qh == NULL); 916 917 /* ... update usbfs periodic stats */ 918 ehci_to_hcd(ehci)->self.bandwidth_int_reqs++; 919 920 done: 921 if (unlikely(status)) 922 usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb); 923 done_not_linked: 924 spin_unlock_irqrestore (&ehci->lock, flags); 925 if (status) 926 qtd_list_free (ehci, urb, qtd_list); 927 928 return status; 929 } 930 931 static void scan_intr(struct ehci_hcd *ehci) 932 { 933 struct ehci_qh *qh; 934 935 list_for_each_entry_safe(qh, ehci->qh_scan_next, &ehci->intr_qh_list, 936 intr_node) { 937 rescan: 938 /* clean any finished work for this qh */ 939 if (!list_empty(&qh->qtd_list)) { 940 int temp; 941 942 /* 943 * Unlinks could happen here; completion reporting 944 * drops the lock. That's why ehci->qh_scan_next 945 * always holds the next qh to scan; if the next qh 946 * gets unlinked then ehci->qh_scan_next is adjusted 947 * in qh_unlink_periodic(). 948 */ 949 temp = qh_completions(ehci, qh); 950 if (unlikely(qh->needs_rescan || 951 (list_empty(&qh->qtd_list) && 952 qh->qh_state == QH_STATE_LINKED))) 953 start_unlink_intr(ehci, qh); 954 else if (temp != 0) 955 goto rescan; 956 } 957 } 958 } 959 960 /*-------------------------------------------------------------------------*/ 961 962 /* ehci_iso_stream ops work with both ITD and SITD */ 963 964 static struct ehci_iso_stream * 965 iso_stream_alloc (gfp_t mem_flags) 966 { 967 struct ehci_iso_stream *stream; 968 969 stream = kzalloc(sizeof *stream, mem_flags); 970 if (likely (stream != NULL)) { 971 INIT_LIST_HEAD(&stream->td_list); 972 INIT_LIST_HEAD(&stream->free_list); 973 stream->next_uframe = -1; 974 } 975 return stream; 976 } 977 978 static void 979 iso_stream_init ( 980 struct ehci_hcd *ehci, 981 struct ehci_iso_stream *stream, 982 struct usb_device *dev, 983 int pipe, 984 unsigned interval 985 ) 986 { 987 static const u8 smask_out [] = { 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f }; 988 989 u32 buf1; 990 unsigned epnum, maxp; 991 int is_input; 992 long bandwidth; 993 994 /* 995 * this might be a "high bandwidth" highspeed endpoint, 996 * as encoded in the ep descriptor's wMaxPacket field 997 */ 998 epnum = usb_pipeendpoint (pipe); 999 is_input = usb_pipein (pipe) ? USB_DIR_IN : 0; 1000 maxp = usb_maxpacket(dev, pipe, !is_input); 1001 if (is_input) { 1002 buf1 = (1 << 11); 1003 } else { 1004 buf1 = 0; 1005 } 1006 1007 /* knows about ITD vs SITD */ 1008 if (dev->speed == USB_SPEED_HIGH) { 1009 unsigned multi = hb_mult(maxp); 1010 1011 stream->highspeed = 1; 1012 1013 maxp = max_packet(maxp); 1014 buf1 |= maxp; 1015 maxp *= multi; 1016 1017 stream->buf0 = cpu_to_hc32(ehci, (epnum << 8) | dev->devnum); 1018 stream->buf1 = cpu_to_hc32(ehci, buf1); 1019 stream->buf2 = cpu_to_hc32(ehci, multi); 1020 1021 /* usbfs wants to report the average usecs per frame tied up 1022 * when transfers on this endpoint are scheduled ... 1023 */ 1024 stream->usecs = HS_USECS_ISO (maxp); 1025 bandwidth = stream->usecs * 8; 1026 bandwidth /= interval; 1027 1028 } else { 1029 u32 addr; 1030 int think_time; 1031 int hs_transfers; 1032 1033 addr = dev->ttport << 24; 1034 if (!ehci_is_TDI(ehci) 1035 || (dev->tt->hub != 1036 ehci_to_hcd(ehci)->self.root_hub)) 1037 addr |= dev->tt->hub->devnum << 16; 1038 addr |= epnum << 8; 1039 addr |= dev->devnum; 1040 stream->usecs = HS_USECS_ISO (maxp); 1041 think_time = dev->tt ? dev->tt->think_time : 0; 1042 stream->tt_usecs = NS_TO_US (think_time + usb_calc_bus_time ( 1043 dev->speed, is_input, 1, maxp)); 1044 hs_transfers = max (1u, (maxp + 187) / 188); 1045 if (is_input) { 1046 u32 tmp; 1047 1048 addr |= 1 << 31; 1049 stream->c_usecs = stream->usecs; 1050 stream->usecs = HS_USECS_ISO (1); 1051 stream->raw_mask = 1; 1052 1053 /* c-mask as specified in USB 2.0 11.18.4 3.c */ 1054 tmp = (1 << (hs_transfers + 2)) - 1; 1055 stream->raw_mask |= tmp << (8 + 2); 1056 } else 1057 stream->raw_mask = smask_out [hs_transfers - 1]; 1058 bandwidth = stream->usecs + stream->c_usecs; 1059 bandwidth /= interval << 3; 1060 1061 /* stream->splits gets created from raw_mask later */ 1062 stream->address = cpu_to_hc32(ehci, addr); 1063 } 1064 stream->bandwidth = bandwidth; 1065 1066 stream->udev = dev; 1067 1068 stream->bEndpointAddress = is_input | epnum; 1069 stream->interval = interval; 1070 stream->maxp = maxp; 1071 } 1072 1073 static struct ehci_iso_stream * 1074 iso_stream_find (struct ehci_hcd *ehci, struct urb *urb) 1075 { 1076 unsigned epnum; 1077 struct ehci_iso_stream *stream; 1078 struct usb_host_endpoint *ep; 1079 unsigned long flags; 1080 1081 epnum = usb_pipeendpoint (urb->pipe); 1082 if (usb_pipein(urb->pipe)) 1083 ep = urb->dev->ep_in[epnum]; 1084 else 1085 ep = urb->dev->ep_out[epnum]; 1086 1087 spin_lock_irqsave (&ehci->lock, flags); 1088 stream = ep->hcpriv; 1089 1090 if (unlikely (stream == NULL)) { 1091 stream = iso_stream_alloc(GFP_ATOMIC); 1092 if (likely (stream != NULL)) { 1093 ep->hcpriv = stream; 1094 stream->ep = ep; 1095 iso_stream_init(ehci, stream, urb->dev, urb->pipe, 1096 urb->interval); 1097 } 1098 1099 /* if dev->ep [epnum] is a QH, hw is set */ 1100 } else if (unlikely (stream->hw != NULL)) { 1101 ehci_dbg (ehci, "dev %s ep%d%s, not iso??\n", 1102 urb->dev->devpath, epnum, 1103 usb_pipein(urb->pipe) ? "in" : "out"); 1104 stream = NULL; 1105 } 1106 1107 spin_unlock_irqrestore (&ehci->lock, flags); 1108 return stream; 1109 } 1110 1111 /*-------------------------------------------------------------------------*/ 1112 1113 /* ehci_iso_sched ops can be ITD-only or SITD-only */ 1114 1115 static struct ehci_iso_sched * 1116 iso_sched_alloc (unsigned packets, gfp_t mem_flags) 1117 { 1118 struct ehci_iso_sched *iso_sched; 1119 int size = sizeof *iso_sched; 1120 1121 size += packets * sizeof (struct ehci_iso_packet); 1122 iso_sched = kzalloc(size, mem_flags); 1123 if (likely (iso_sched != NULL)) { 1124 INIT_LIST_HEAD (&iso_sched->td_list); 1125 } 1126 return iso_sched; 1127 } 1128 1129 static inline void 1130 itd_sched_init( 1131 struct ehci_hcd *ehci, 1132 struct ehci_iso_sched *iso_sched, 1133 struct ehci_iso_stream *stream, 1134 struct urb *urb 1135 ) 1136 { 1137 unsigned i; 1138 dma_addr_t dma = urb->transfer_dma; 1139 1140 /* how many uframes are needed for these transfers */ 1141 iso_sched->span = urb->number_of_packets * stream->interval; 1142 1143 /* figure out per-uframe itd fields that we'll need later 1144 * when we fit new itds into the schedule. 1145 */ 1146 for (i = 0; i < urb->number_of_packets; i++) { 1147 struct ehci_iso_packet *uframe = &iso_sched->packet [i]; 1148 unsigned length; 1149 dma_addr_t buf; 1150 u32 trans; 1151 1152 length = urb->iso_frame_desc [i].length; 1153 buf = dma + urb->iso_frame_desc [i].offset; 1154 1155 trans = EHCI_ISOC_ACTIVE; 1156 trans |= buf & 0x0fff; 1157 if (unlikely (((i + 1) == urb->number_of_packets)) 1158 && !(urb->transfer_flags & URB_NO_INTERRUPT)) 1159 trans |= EHCI_ITD_IOC; 1160 trans |= length << 16; 1161 uframe->transaction = cpu_to_hc32(ehci, trans); 1162 1163 /* might need to cross a buffer page within a uframe */ 1164 uframe->bufp = (buf & ~(u64)0x0fff); 1165 buf += length; 1166 if (unlikely ((uframe->bufp != (buf & ~(u64)0x0fff)))) 1167 uframe->cross = 1; 1168 } 1169 } 1170 1171 static void 1172 iso_sched_free ( 1173 struct ehci_iso_stream *stream, 1174 struct ehci_iso_sched *iso_sched 1175 ) 1176 { 1177 if (!iso_sched) 1178 return; 1179 // caller must hold ehci->lock! 1180 list_splice (&iso_sched->td_list, &stream->free_list); 1181 kfree (iso_sched); 1182 } 1183 1184 static int 1185 itd_urb_transaction ( 1186 struct ehci_iso_stream *stream, 1187 struct ehci_hcd *ehci, 1188 struct urb *urb, 1189 gfp_t mem_flags 1190 ) 1191 { 1192 struct ehci_itd *itd; 1193 dma_addr_t itd_dma; 1194 int i; 1195 unsigned num_itds; 1196 struct ehci_iso_sched *sched; 1197 unsigned long flags; 1198 1199 sched = iso_sched_alloc (urb->number_of_packets, mem_flags); 1200 if (unlikely (sched == NULL)) 1201 return -ENOMEM; 1202 1203 itd_sched_init(ehci, sched, stream, urb); 1204 1205 if (urb->interval < 8) 1206 num_itds = 1 + (sched->span + 7) / 8; 1207 else 1208 num_itds = urb->number_of_packets; 1209 1210 /* allocate/init ITDs */ 1211 spin_lock_irqsave (&ehci->lock, flags); 1212 for (i = 0; i < num_itds; i++) { 1213 1214 /* 1215 * Use iTDs from the free list, but not iTDs that may 1216 * still be in use by the hardware. 1217 */ 1218 if (likely(!list_empty(&stream->free_list))) { 1219 itd = list_first_entry(&stream->free_list, 1220 struct ehci_itd, itd_list); 1221 if (itd->frame == ehci->now_frame) 1222 goto alloc_itd; 1223 list_del (&itd->itd_list); 1224 itd_dma = itd->itd_dma; 1225 } else { 1226 alloc_itd: 1227 spin_unlock_irqrestore (&ehci->lock, flags); 1228 itd = dma_pool_alloc (ehci->itd_pool, mem_flags, 1229 &itd_dma); 1230 spin_lock_irqsave (&ehci->lock, flags); 1231 if (!itd) { 1232 iso_sched_free(stream, sched); 1233 spin_unlock_irqrestore(&ehci->lock, flags); 1234 return -ENOMEM; 1235 } 1236 } 1237 1238 memset (itd, 0, sizeof *itd); 1239 itd->itd_dma = itd_dma; 1240 list_add (&itd->itd_list, &sched->td_list); 1241 } 1242 spin_unlock_irqrestore (&ehci->lock, flags); 1243 1244 /* temporarily store schedule info in hcpriv */ 1245 urb->hcpriv = sched; 1246 urb->error_count = 0; 1247 return 0; 1248 } 1249 1250 /*-------------------------------------------------------------------------*/ 1251 1252 static inline int 1253 itd_slot_ok ( 1254 struct ehci_hcd *ehci, 1255 u32 mod, 1256 u32 uframe, 1257 u8 usecs, 1258 u32 period 1259 ) 1260 { 1261 uframe %= period; 1262 do { 1263 /* can't commit more than uframe_periodic_max usec */ 1264 if (periodic_usecs (ehci, uframe >> 3, uframe & 0x7) 1265 > (ehci->uframe_periodic_max - usecs)) 1266 return 0; 1267 1268 /* we know urb->interval is 2^N uframes */ 1269 uframe += period; 1270 } while (uframe < mod); 1271 return 1; 1272 } 1273 1274 static inline int 1275 sitd_slot_ok ( 1276 struct ehci_hcd *ehci, 1277 u32 mod, 1278 struct ehci_iso_stream *stream, 1279 u32 uframe, 1280 struct ehci_iso_sched *sched, 1281 u32 period_uframes 1282 ) 1283 { 1284 u32 mask, tmp; 1285 u32 frame, uf; 1286 1287 mask = stream->raw_mask << (uframe & 7); 1288 1289 /* for IN, don't wrap CSPLIT into the next frame */ 1290 if (mask & ~0xffff) 1291 return 0; 1292 1293 /* check bandwidth */ 1294 uframe %= period_uframes; 1295 frame = uframe >> 3; 1296 1297 #ifdef CONFIG_USB_EHCI_TT_NEWSCHED 1298 /* The tt's fullspeed bus bandwidth must be available. 1299 * tt_available scheduling guarantees 10+% for control/bulk. 1300 */ 1301 uf = uframe & 7; 1302 if (!tt_available(ehci, period_uframes >> 3, 1303 stream->udev, frame, uf, stream->tt_usecs)) 1304 return 0; 1305 #else 1306 /* tt must be idle for start(s), any gap, and csplit. 1307 * assume scheduling slop leaves 10+% for control/bulk. 1308 */ 1309 if (!tt_no_collision(ehci, period_uframes >> 3, 1310 stream->udev, frame, mask)) 1311 return 0; 1312 #endif 1313 1314 /* this multi-pass logic is simple, but performance may 1315 * suffer when the schedule data isn't cached. 1316 */ 1317 do { 1318 u32 max_used; 1319 1320 frame = uframe >> 3; 1321 uf = uframe & 7; 1322 1323 /* check starts (OUT uses more than one) */ 1324 max_used = ehci->uframe_periodic_max - stream->usecs; 1325 for (tmp = stream->raw_mask & 0xff; tmp; tmp >>= 1, uf++) { 1326 if (periodic_usecs (ehci, frame, uf) > max_used) 1327 return 0; 1328 } 1329 1330 /* for IN, check CSPLIT */ 1331 if (stream->c_usecs) { 1332 uf = uframe & 7; 1333 max_used = ehci->uframe_periodic_max - stream->c_usecs; 1334 do { 1335 tmp = 1 << uf; 1336 tmp <<= 8; 1337 if ((stream->raw_mask & tmp) == 0) 1338 continue; 1339 if (periodic_usecs (ehci, frame, uf) 1340 > max_used) 1341 return 0; 1342 } while (++uf < 8); 1343 } 1344 1345 /* we know urb->interval is 2^N uframes */ 1346 uframe += period_uframes; 1347 } while (uframe < mod); 1348 1349 stream->splits = cpu_to_hc32(ehci, stream->raw_mask << (uframe & 7)); 1350 return 1; 1351 } 1352 1353 /* 1354 * This scheduler plans almost as far into the future as it has actual 1355 * periodic schedule slots. (Affected by TUNE_FLS, which defaults to 1356 * "as small as possible" to be cache-friendlier.) That limits the size 1357 * transfers you can stream reliably; avoid more than 64 msec per urb. 1358 * Also avoid queue depths of less than ehci's worst irq latency (affected 1359 * by the per-urb URB_NO_INTERRUPT hint, the log2_irq_thresh module parameter, 1360 * and other factors); or more than about 230 msec total (for portability, 1361 * given EHCI_TUNE_FLS and the slop). Or, write a smarter scheduler! 1362 */ 1363 1364 #define SCHEDULE_SLOP 80 /* microframes */ 1365 1366 static int 1367 iso_stream_schedule ( 1368 struct ehci_hcd *ehci, 1369 struct urb *urb, 1370 struct ehci_iso_stream *stream 1371 ) 1372 { 1373 u32 now, next, start, period, span; 1374 int status; 1375 unsigned mod = ehci->periodic_size << 3; 1376 struct ehci_iso_sched *sched = urb->hcpriv; 1377 1378 period = urb->interval; 1379 span = sched->span; 1380 if (!stream->highspeed) { 1381 period <<= 3; 1382 span <<= 3; 1383 } 1384 1385 if (span > mod - SCHEDULE_SLOP) { 1386 ehci_dbg (ehci, "iso request %p too long\n", urb); 1387 status = -EFBIG; 1388 goto fail; 1389 } 1390 1391 now = ehci_read_frame_index(ehci) & (mod - 1); 1392 1393 /* Typical case: reuse current schedule, stream is still active. 1394 * Hopefully there are no gaps from the host falling behind 1395 * (irq delays etc), but if there are we'll take the next 1396 * slot in the schedule, implicitly assuming URB_ISO_ASAP. 1397 */ 1398 if (likely (!list_empty (&stream->td_list))) { 1399 u32 excess; 1400 1401 /* For high speed devices, allow scheduling within the 1402 * isochronous scheduling threshold. For full speed devices 1403 * and Intel PCI-based controllers, don't (work around for 1404 * Intel ICH9 bug). 1405 */ 1406 if (!stream->highspeed && ehci->fs_i_thresh) 1407 next = now + ehci->i_thresh; 1408 else 1409 next = now; 1410 1411 /* Fell behind (by up to twice the slop amount)? 1412 * We decide based on the time of the last currently-scheduled 1413 * slot, not the time of the next available slot. 1414 */ 1415 excess = (stream->next_uframe - period - next) & (mod - 1); 1416 if (excess >= mod - 2 * SCHEDULE_SLOP) 1417 start = next + excess - mod + period * 1418 DIV_ROUND_UP(mod - excess, period); 1419 else 1420 start = next + excess + period; 1421 if (start - now >= mod) { 1422 ehci_dbg(ehci, "request %p would overflow (%d+%d >= %d)\n", 1423 urb, start - now - period, period, 1424 mod); 1425 status = -EFBIG; 1426 goto fail; 1427 } 1428 } 1429 1430 /* need to schedule; when's the next (u)frame we could start? 1431 * this is bigger than ehci->i_thresh allows; scheduling itself 1432 * isn't free, the slop should handle reasonably slow cpus. it 1433 * can also help high bandwidth if the dma and irq loads don't 1434 * jump until after the queue is primed. 1435 */ 1436 else { 1437 int done = 0; 1438 start = SCHEDULE_SLOP + (now & ~0x07); 1439 1440 /* NOTE: assumes URB_ISO_ASAP, to limit complexity/bugs */ 1441 1442 /* find a uframe slot with enough bandwidth. 1443 * Early uframes are more precious because full-speed 1444 * iso IN transfers can't use late uframes, 1445 * and therefore they should be allocated last. 1446 */ 1447 next = start; 1448 start += period; 1449 do { 1450 start--; 1451 /* check schedule: enough space? */ 1452 if (stream->highspeed) { 1453 if (itd_slot_ok(ehci, mod, start, 1454 stream->usecs, period)) 1455 done = 1; 1456 } else { 1457 if ((start % 8) >= 6) 1458 continue; 1459 if (sitd_slot_ok(ehci, mod, stream, 1460 start, sched, period)) 1461 done = 1; 1462 } 1463 } while (start > next && !done); 1464 1465 /* no room in the schedule */ 1466 if (!done) { 1467 ehci_dbg(ehci, "iso resched full %p (now %d max %d)\n", 1468 urb, now, now + mod); 1469 status = -ENOSPC; 1470 goto fail; 1471 } 1472 } 1473 1474 /* Tried to schedule too far into the future? */ 1475 if (unlikely(start - now + span - period 1476 >= mod - 2 * SCHEDULE_SLOP)) { 1477 ehci_dbg(ehci, "request %p would overflow (%d+%d >= %d)\n", 1478 urb, start - now, span - period, 1479 mod - 2 * SCHEDULE_SLOP); 1480 status = -EFBIG; 1481 goto fail; 1482 } 1483 1484 stream->next_uframe = start & (mod - 1); 1485 1486 /* report high speed start in uframes; full speed, in frames */ 1487 urb->start_frame = stream->next_uframe; 1488 if (!stream->highspeed) 1489 urb->start_frame >>= 3; 1490 1491 /* Make sure scan_isoc() sees these */ 1492 if (ehci->isoc_count == 0) 1493 ehci->next_frame = now >> 3; 1494 return 0; 1495 1496 fail: 1497 iso_sched_free(stream, sched); 1498 urb->hcpriv = NULL; 1499 return status; 1500 } 1501 1502 /*-------------------------------------------------------------------------*/ 1503 1504 static inline void 1505 itd_init(struct ehci_hcd *ehci, struct ehci_iso_stream *stream, 1506 struct ehci_itd *itd) 1507 { 1508 int i; 1509 1510 /* it's been recently zeroed */ 1511 itd->hw_next = EHCI_LIST_END(ehci); 1512 itd->hw_bufp [0] = stream->buf0; 1513 itd->hw_bufp [1] = stream->buf1; 1514 itd->hw_bufp [2] = stream->buf2; 1515 1516 for (i = 0; i < 8; i++) 1517 itd->index[i] = -1; 1518 1519 /* All other fields are filled when scheduling */ 1520 } 1521 1522 static inline void 1523 itd_patch( 1524 struct ehci_hcd *ehci, 1525 struct ehci_itd *itd, 1526 struct ehci_iso_sched *iso_sched, 1527 unsigned index, 1528 u16 uframe 1529 ) 1530 { 1531 struct ehci_iso_packet *uf = &iso_sched->packet [index]; 1532 unsigned pg = itd->pg; 1533 1534 // BUG_ON (pg == 6 && uf->cross); 1535 1536 uframe &= 0x07; 1537 itd->index [uframe] = index; 1538 1539 itd->hw_transaction[uframe] = uf->transaction; 1540 itd->hw_transaction[uframe] |= cpu_to_hc32(ehci, pg << 12); 1541 itd->hw_bufp[pg] |= cpu_to_hc32(ehci, uf->bufp & ~(u32)0); 1542 itd->hw_bufp_hi[pg] |= cpu_to_hc32(ehci, (u32)(uf->bufp >> 32)); 1543 1544 /* iso_frame_desc[].offset must be strictly increasing */ 1545 if (unlikely (uf->cross)) { 1546 u64 bufp = uf->bufp + 4096; 1547 1548 itd->pg = ++pg; 1549 itd->hw_bufp[pg] |= cpu_to_hc32(ehci, bufp & ~(u32)0); 1550 itd->hw_bufp_hi[pg] |= cpu_to_hc32(ehci, (u32)(bufp >> 32)); 1551 } 1552 } 1553 1554 static inline void 1555 itd_link (struct ehci_hcd *ehci, unsigned frame, struct ehci_itd *itd) 1556 { 1557 union ehci_shadow *prev = &ehci->pshadow[frame]; 1558 __hc32 *hw_p = &ehci->periodic[frame]; 1559 union ehci_shadow here = *prev; 1560 __hc32 type = 0; 1561 1562 /* skip any iso nodes which might belong to previous microframes */ 1563 while (here.ptr) { 1564 type = Q_NEXT_TYPE(ehci, *hw_p); 1565 if (type == cpu_to_hc32(ehci, Q_TYPE_QH)) 1566 break; 1567 prev = periodic_next_shadow(ehci, prev, type); 1568 hw_p = shadow_next_periodic(ehci, &here, type); 1569 here = *prev; 1570 } 1571 1572 itd->itd_next = here; 1573 itd->hw_next = *hw_p; 1574 prev->itd = itd; 1575 itd->frame = frame; 1576 wmb (); 1577 *hw_p = cpu_to_hc32(ehci, itd->itd_dma | Q_TYPE_ITD); 1578 } 1579 1580 /* fit urb's itds into the selected schedule slot; activate as needed */ 1581 static void itd_link_urb( 1582 struct ehci_hcd *ehci, 1583 struct urb *urb, 1584 unsigned mod, 1585 struct ehci_iso_stream *stream 1586 ) 1587 { 1588 int packet; 1589 unsigned next_uframe, uframe, frame; 1590 struct ehci_iso_sched *iso_sched = urb->hcpriv; 1591 struct ehci_itd *itd; 1592 1593 next_uframe = stream->next_uframe & (mod - 1); 1594 1595 if (unlikely (list_empty(&stream->td_list))) { 1596 ehci_to_hcd(ehci)->self.bandwidth_allocated 1597 += stream->bandwidth; 1598 ehci_vdbg (ehci, 1599 "schedule devp %s ep%d%s-iso period %d start %d.%d\n", 1600 urb->dev->devpath, stream->bEndpointAddress & 0x0f, 1601 (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out", 1602 urb->interval, 1603 next_uframe >> 3, next_uframe & 0x7); 1604 } 1605 1606 if (ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs == 0) { 1607 if (ehci->amd_pll_fix == 1) 1608 usb_amd_quirk_pll_disable(); 1609 } 1610 1611 ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs++; 1612 1613 /* fill iTDs uframe by uframe */ 1614 for (packet = 0, itd = NULL; packet < urb->number_of_packets; ) { 1615 if (itd == NULL) { 1616 /* ASSERT: we have all necessary itds */ 1617 // BUG_ON (list_empty (&iso_sched->td_list)); 1618 1619 /* ASSERT: no itds for this endpoint in this uframe */ 1620 1621 itd = list_entry (iso_sched->td_list.next, 1622 struct ehci_itd, itd_list); 1623 list_move_tail (&itd->itd_list, &stream->td_list); 1624 itd->stream = stream; 1625 itd->urb = urb; 1626 itd_init (ehci, stream, itd); 1627 } 1628 1629 uframe = next_uframe & 0x07; 1630 frame = next_uframe >> 3; 1631 1632 itd_patch(ehci, itd, iso_sched, packet, uframe); 1633 1634 next_uframe += stream->interval; 1635 next_uframe &= mod - 1; 1636 packet++; 1637 1638 /* link completed itds into the schedule */ 1639 if (((next_uframe >> 3) != frame) 1640 || packet == urb->number_of_packets) { 1641 itd_link(ehci, frame & (ehci->periodic_size - 1), itd); 1642 itd = NULL; 1643 } 1644 } 1645 stream->next_uframe = next_uframe; 1646 1647 /* don't need that schedule data any more */ 1648 iso_sched_free (stream, iso_sched); 1649 urb->hcpriv = NULL; 1650 1651 ++ehci->isoc_count; 1652 enable_periodic(ehci); 1653 } 1654 1655 #define ISO_ERRS (EHCI_ISOC_BUF_ERR | EHCI_ISOC_BABBLE | EHCI_ISOC_XACTERR) 1656 1657 /* Process and recycle a completed ITD. Return true iff its urb completed, 1658 * and hence its completion callback probably added things to the hardware 1659 * schedule. 1660 * 1661 * Note that we carefully avoid recycling this descriptor until after any 1662 * completion callback runs, so that it won't be reused quickly. That is, 1663 * assuming (a) no more than two urbs per frame on this endpoint, and also 1664 * (b) only this endpoint's completions submit URBs. It seems some silicon 1665 * corrupts things if you reuse completed descriptors very quickly... 1666 */ 1667 static bool itd_complete(struct ehci_hcd *ehci, struct ehci_itd *itd) 1668 { 1669 struct urb *urb = itd->urb; 1670 struct usb_iso_packet_descriptor *desc; 1671 u32 t; 1672 unsigned uframe; 1673 int urb_index = -1; 1674 struct ehci_iso_stream *stream = itd->stream; 1675 struct usb_device *dev; 1676 bool retval = false; 1677 1678 /* for each uframe with a packet */ 1679 for (uframe = 0; uframe < 8; uframe++) { 1680 if (likely (itd->index[uframe] == -1)) 1681 continue; 1682 urb_index = itd->index[uframe]; 1683 desc = &urb->iso_frame_desc [urb_index]; 1684 1685 t = hc32_to_cpup(ehci, &itd->hw_transaction [uframe]); 1686 itd->hw_transaction [uframe] = 0; 1687 1688 /* report transfer status */ 1689 if (unlikely (t & ISO_ERRS)) { 1690 urb->error_count++; 1691 if (t & EHCI_ISOC_BUF_ERR) 1692 desc->status = usb_pipein (urb->pipe) 1693 ? -ENOSR /* hc couldn't read */ 1694 : -ECOMM; /* hc couldn't write */ 1695 else if (t & EHCI_ISOC_BABBLE) 1696 desc->status = -EOVERFLOW; 1697 else /* (t & EHCI_ISOC_XACTERR) */ 1698 desc->status = -EPROTO; 1699 1700 /* HC need not update length with this error */ 1701 if (!(t & EHCI_ISOC_BABBLE)) { 1702 desc->actual_length = EHCI_ITD_LENGTH(t); 1703 urb->actual_length += desc->actual_length; 1704 } 1705 } else if (likely ((t & EHCI_ISOC_ACTIVE) == 0)) { 1706 desc->status = 0; 1707 desc->actual_length = EHCI_ITD_LENGTH(t); 1708 urb->actual_length += desc->actual_length; 1709 } else { 1710 /* URB was too late */ 1711 desc->status = -EXDEV; 1712 } 1713 } 1714 1715 /* handle completion now? */ 1716 if (likely ((urb_index + 1) != urb->number_of_packets)) 1717 goto done; 1718 1719 /* ASSERT: it's really the last itd for this urb 1720 list_for_each_entry (itd, &stream->td_list, itd_list) 1721 BUG_ON (itd->urb == urb); 1722 */ 1723 1724 /* give urb back to the driver; completion often (re)submits */ 1725 dev = urb->dev; 1726 ehci_urb_done(ehci, urb, 0); 1727 retval = true; 1728 urb = NULL; 1729 1730 --ehci->isoc_count; 1731 disable_periodic(ehci); 1732 1733 ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; 1734 if (ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs == 0) { 1735 if (ehci->amd_pll_fix == 1) 1736 usb_amd_quirk_pll_enable(); 1737 } 1738 1739 if (unlikely(list_is_singular(&stream->td_list))) { 1740 ehci_to_hcd(ehci)->self.bandwidth_allocated 1741 -= stream->bandwidth; 1742 ehci_vdbg (ehci, 1743 "deschedule devp %s ep%d%s-iso\n", 1744 dev->devpath, stream->bEndpointAddress & 0x0f, 1745 (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out"); 1746 } 1747 1748 done: 1749 itd->urb = NULL; 1750 1751 /* Add to the end of the free list for later reuse */ 1752 list_move_tail(&itd->itd_list, &stream->free_list); 1753 1754 /* Recycle the iTDs when the pipeline is empty (ep no longer in use) */ 1755 if (list_empty(&stream->td_list)) { 1756 list_splice_tail_init(&stream->free_list, 1757 &ehci->cached_itd_list); 1758 start_free_itds(ehci); 1759 } 1760 1761 return retval; 1762 } 1763 1764 /*-------------------------------------------------------------------------*/ 1765 1766 static int itd_submit (struct ehci_hcd *ehci, struct urb *urb, 1767 gfp_t mem_flags) 1768 { 1769 int status = -EINVAL; 1770 unsigned long flags; 1771 struct ehci_iso_stream *stream; 1772 1773 /* Get iso_stream head */ 1774 stream = iso_stream_find (ehci, urb); 1775 if (unlikely (stream == NULL)) { 1776 ehci_dbg (ehci, "can't get iso stream\n"); 1777 return -ENOMEM; 1778 } 1779 if (unlikely (urb->interval != stream->interval)) { 1780 ehci_dbg (ehci, "can't change iso interval %d --> %d\n", 1781 stream->interval, urb->interval); 1782 goto done; 1783 } 1784 1785 #ifdef EHCI_URB_TRACE 1786 ehci_dbg (ehci, 1787 "%s %s urb %p ep%d%s len %d, %d pkts %d uframes [%p]\n", 1788 __func__, urb->dev->devpath, urb, 1789 usb_pipeendpoint (urb->pipe), 1790 usb_pipein (urb->pipe) ? "in" : "out", 1791 urb->transfer_buffer_length, 1792 urb->number_of_packets, urb->interval, 1793 stream); 1794 #endif 1795 1796 /* allocate ITDs w/o locking anything */ 1797 status = itd_urb_transaction (stream, ehci, urb, mem_flags); 1798 if (unlikely (status < 0)) { 1799 ehci_dbg (ehci, "can't init itds\n"); 1800 goto done; 1801 } 1802 1803 /* schedule ... need to lock */ 1804 spin_lock_irqsave (&ehci->lock, flags); 1805 if (unlikely(!HCD_HW_ACCESSIBLE(ehci_to_hcd(ehci)))) { 1806 status = -ESHUTDOWN; 1807 goto done_not_linked; 1808 } 1809 status = usb_hcd_link_urb_to_ep(ehci_to_hcd(ehci), urb); 1810 if (unlikely(status)) 1811 goto done_not_linked; 1812 status = iso_stream_schedule(ehci, urb, stream); 1813 if (likely (status == 0)) 1814 itd_link_urb (ehci, urb, ehci->periodic_size << 3, stream); 1815 else 1816 usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb); 1817 done_not_linked: 1818 spin_unlock_irqrestore (&ehci->lock, flags); 1819 done: 1820 return status; 1821 } 1822 1823 /*-------------------------------------------------------------------------*/ 1824 1825 /* 1826 * "Split ISO TDs" ... used for USB 1.1 devices going through the 1827 * TTs in USB 2.0 hubs. These need microframe scheduling. 1828 */ 1829 1830 static inline void 1831 sitd_sched_init( 1832 struct ehci_hcd *ehci, 1833 struct ehci_iso_sched *iso_sched, 1834 struct ehci_iso_stream *stream, 1835 struct urb *urb 1836 ) 1837 { 1838 unsigned i; 1839 dma_addr_t dma = urb->transfer_dma; 1840 1841 /* how many frames are needed for these transfers */ 1842 iso_sched->span = urb->number_of_packets * stream->interval; 1843 1844 /* figure out per-frame sitd fields that we'll need later 1845 * when we fit new sitds into the schedule. 1846 */ 1847 for (i = 0; i < urb->number_of_packets; i++) { 1848 struct ehci_iso_packet *packet = &iso_sched->packet [i]; 1849 unsigned length; 1850 dma_addr_t buf; 1851 u32 trans; 1852 1853 length = urb->iso_frame_desc [i].length & 0x03ff; 1854 buf = dma + urb->iso_frame_desc [i].offset; 1855 1856 trans = SITD_STS_ACTIVE; 1857 if (((i + 1) == urb->number_of_packets) 1858 && !(urb->transfer_flags & URB_NO_INTERRUPT)) 1859 trans |= SITD_IOC; 1860 trans |= length << 16; 1861 packet->transaction = cpu_to_hc32(ehci, trans); 1862 1863 /* might need to cross a buffer page within a td */ 1864 packet->bufp = buf; 1865 packet->buf1 = (buf + length) & ~0x0fff; 1866 if (packet->buf1 != (buf & ~(u64)0x0fff)) 1867 packet->cross = 1; 1868 1869 /* OUT uses multiple start-splits */ 1870 if (stream->bEndpointAddress & USB_DIR_IN) 1871 continue; 1872 length = (length + 187) / 188; 1873 if (length > 1) /* BEGIN vs ALL */ 1874 length |= 1 << 3; 1875 packet->buf1 |= length; 1876 } 1877 } 1878 1879 static int 1880 sitd_urb_transaction ( 1881 struct ehci_iso_stream *stream, 1882 struct ehci_hcd *ehci, 1883 struct urb *urb, 1884 gfp_t mem_flags 1885 ) 1886 { 1887 struct ehci_sitd *sitd; 1888 dma_addr_t sitd_dma; 1889 int i; 1890 struct ehci_iso_sched *iso_sched; 1891 unsigned long flags; 1892 1893 iso_sched = iso_sched_alloc (urb->number_of_packets, mem_flags); 1894 if (iso_sched == NULL) 1895 return -ENOMEM; 1896 1897 sitd_sched_init(ehci, iso_sched, stream, urb); 1898 1899 /* allocate/init sITDs */ 1900 spin_lock_irqsave (&ehci->lock, flags); 1901 for (i = 0; i < urb->number_of_packets; i++) { 1902 1903 /* NOTE: for now, we don't try to handle wraparound cases 1904 * for IN (using sitd->hw_backpointer, like a FSTN), which 1905 * means we never need two sitds for full speed packets. 1906 */ 1907 1908 /* 1909 * Use siTDs from the free list, but not siTDs that may 1910 * still be in use by the hardware. 1911 */ 1912 if (likely(!list_empty(&stream->free_list))) { 1913 sitd = list_first_entry(&stream->free_list, 1914 struct ehci_sitd, sitd_list); 1915 if (sitd->frame == ehci->now_frame) 1916 goto alloc_sitd; 1917 list_del (&sitd->sitd_list); 1918 sitd_dma = sitd->sitd_dma; 1919 } else { 1920 alloc_sitd: 1921 spin_unlock_irqrestore (&ehci->lock, flags); 1922 sitd = dma_pool_alloc (ehci->sitd_pool, mem_flags, 1923 &sitd_dma); 1924 spin_lock_irqsave (&ehci->lock, flags); 1925 if (!sitd) { 1926 iso_sched_free(stream, iso_sched); 1927 spin_unlock_irqrestore(&ehci->lock, flags); 1928 return -ENOMEM; 1929 } 1930 } 1931 1932 memset (sitd, 0, sizeof *sitd); 1933 sitd->sitd_dma = sitd_dma; 1934 list_add (&sitd->sitd_list, &iso_sched->td_list); 1935 } 1936 1937 /* temporarily store schedule info in hcpriv */ 1938 urb->hcpriv = iso_sched; 1939 urb->error_count = 0; 1940 1941 spin_unlock_irqrestore (&ehci->lock, flags); 1942 return 0; 1943 } 1944 1945 /*-------------------------------------------------------------------------*/ 1946 1947 static inline void 1948 sitd_patch( 1949 struct ehci_hcd *ehci, 1950 struct ehci_iso_stream *stream, 1951 struct ehci_sitd *sitd, 1952 struct ehci_iso_sched *iso_sched, 1953 unsigned index 1954 ) 1955 { 1956 struct ehci_iso_packet *uf = &iso_sched->packet [index]; 1957 u64 bufp = uf->bufp; 1958 1959 sitd->hw_next = EHCI_LIST_END(ehci); 1960 sitd->hw_fullspeed_ep = stream->address; 1961 sitd->hw_uframe = stream->splits; 1962 sitd->hw_results = uf->transaction; 1963 sitd->hw_backpointer = EHCI_LIST_END(ehci); 1964 1965 bufp = uf->bufp; 1966 sitd->hw_buf[0] = cpu_to_hc32(ehci, bufp); 1967 sitd->hw_buf_hi[0] = cpu_to_hc32(ehci, bufp >> 32); 1968 1969 sitd->hw_buf[1] = cpu_to_hc32(ehci, uf->buf1); 1970 if (uf->cross) 1971 bufp += 4096; 1972 sitd->hw_buf_hi[1] = cpu_to_hc32(ehci, bufp >> 32); 1973 sitd->index = index; 1974 } 1975 1976 static inline void 1977 sitd_link (struct ehci_hcd *ehci, unsigned frame, struct ehci_sitd *sitd) 1978 { 1979 /* note: sitd ordering could matter (CSPLIT then SSPLIT) */ 1980 sitd->sitd_next = ehci->pshadow [frame]; 1981 sitd->hw_next = ehci->periodic [frame]; 1982 ehci->pshadow [frame].sitd = sitd; 1983 sitd->frame = frame; 1984 wmb (); 1985 ehci->periodic[frame] = cpu_to_hc32(ehci, sitd->sitd_dma | Q_TYPE_SITD); 1986 } 1987 1988 /* fit urb's sitds into the selected schedule slot; activate as needed */ 1989 static void sitd_link_urb( 1990 struct ehci_hcd *ehci, 1991 struct urb *urb, 1992 unsigned mod, 1993 struct ehci_iso_stream *stream 1994 ) 1995 { 1996 int packet; 1997 unsigned next_uframe; 1998 struct ehci_iso_sched *sched = urb->hcpriv; 1999 struct ehci_sitd *sitd; 2000 2001 next_uframe = stream->next_uframe; 2002 2003 if (list_empty(&stream->td_list)) { 2004 /* usbfs ignores TT bandwidth */ 2005 ehci_to_hcd(ehci)->self.bandwidth_allocated 2006 += stream->bandwidth; 2007 ehci_vdbg (ehci, 2008 "sched devp %s ep%d%s-iso [%d] %dms/%04x\n", 2009 urb->dev->devpath, stream->bEndpointAddress & 0x0f, 2010 (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out", 2011 (next_uframe >> 3) & (ehci->periodic_size - 1), 2012 stream->interval, hc32_to_cpu(ehci, stream->splits)); 2013 } 2014 2015 if (ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs == 0) { 2016 if (ehci->amd_pll_fix == 1) 2017 usb_amd_quirk_pll_disable(); 2018 } 2019 2020 ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs++; 2021 2022 /* fill sITDs frame by frame */ 2023 for (packet = 0, sitd = NULL; 2024 packet < urb->number_of_packets; 2025 packet++) { 2026 2027 /* ASSERT: we have all necessary sitds */ 2028 BUG_ON (list_empty (&sched->td_list)); 2029 2030 /* ASSERT: no itds for this endpoint in this frame */ 2031 2032 sitd = list_entry (sched->td_list.next, 2033 struct ehci_sitd, sitd_list); 2034 list_move_tail (&sitd->sitd_list, &stream->td_list); 2035 sitd->stream = stream; 2036 sitd->urb = urb; 2037 2038 sitd_patch(ehci, stream, sitd, sched, packet); 2039 sitd_link(ehci, (next_uframe >> 3) & (ehci->periodic_size - 1), 2040 sitd); 2041 2042 next_uframe += stream->interval << 3; 2043 } 2044 stream->next_uframe = next_uframe & (mod - 1); 2045 2046 /* don't need that schedule data any more */ 2047 iso_sched_free (stream, sched); 2048 urb->hcpriv = NULL; 2049 2050 ++ehci->isoc_count; 2051 enable_periodic(ehci); 2052 } 2053 2054 /*-------------------------------------------------------------------------*/ 2055 2056 #define SITD_ERRS (SITD_STS_ERR | SITD_STS_DBE | SITD_STS_BABBLE \ 2057 | SITD_STS_XACT | SITD_STS_MMF) 2058 2059 /* Process and recycle a completed SITD. Return true iff its urb completed, 2060 * and hence its completion callback probably added things to the hardware 2061 * schedule. 2062 * 2063 * Note that we carefully avoid recycling this descriptor until after any 2064 * completion callback runs, so that it won't be reused quickly. That is, 2065 * assuming (a) no more than two urbs per frame on this endpoint, and also 2066 * (b) only this endpoint's completions submit URBs. It seems some silicon 2067 * corrupts things if you reuse completed descriptors very quickly... 2068 */ 2069 static bool sitd_complete(struct ehci_hcd *ehci, struct ehci_sitd *sitd) 2070 { 2071 struct urb *urb = sitd->urb; 2072 struct usb_iso_packet_descriptor *desc; 2073 u32 t; 2074 int urb_index = -1; 2075 struct ehci_iso_stream *stream = sitd->stream; 2076 struct usb_device *dev; 2077 bool retval = false; 2078 2079 urb_index = sitd->index; 2080 desc = &urb->iso_frame_desc [urb_index]; 2081 t = hc32_to_cpup(ehci, &sitd->hw_results); 2082 2083 /* report transfer status */ 2084 if (t & SITD_ERRS) { 2085 urb->error_count++; 2086 if (t & SITD_STS_DBE) 2087 desc->status = usb_pipein (urb->pipe) 2088 ? -ENOSR /* hc couldn't read */ 2089 : -ECOMM; /* hc couldn't write */ 2090 else if (t & SITD_STS_BABBLE) 2091 desc->status = -EOVERFLOW; 2092 else /* XACT, MMF, etc */ 2093 desc->status = -EPROTO; 2094 } else { 2095 desc->status = 0; 2096 desc->actual_length = desc->length - SITD_LENGTH(t); 2097 urb->actual_length += desc->actual_length; 2098 } 2099 2100 /* handle completion now? */ 2101 if ((urb_index + 1) != urb->number_of_packets) 2102 goto done; 2103 2104 /* ASSERT: it's really the last sitd for this urb 2105 list_for_each_entry (sitd, &stream->td_list, sitd_list) 2106 BUG_ON (sitd->urb == urb); 2107 */ 2108 2109 /* give urb back to the driver; completion often (re)submits */ 2110 dev = urb->dev; 2111 ehci_urb_done(ehci, urb, 0); 2112 retval = true; 2113 urb = NULL; 2114 2115 --ehci->isoc_count; 2116 disable_periodic(ehci); 2117 2118 ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; 2119 if (ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs == 0) { 2120 if (ehci->amd_pll_fix == 1) 2121 usb_amd_quirk_pll_enable(); 2122 } 2123 2124 if (list_is_singular(&stream->td_list)) { 2125 ehci_to_hcd(ehci)->self.bandwidth_allocated 2126 -= stream->bandwidth; 2127 ehci_vdbg (ehci, 2128 "deschedule devp %s ep%d%s-iso\n", 2129 dev->devpath, stream->bEndpointAddress & 0x0f, 2130 (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out"); 2131 } 2132 2133 done: 2134 sitd->urb = NULL; 2135 2136 /* Add to the end of the free list for later reuse */ 2137 list_move_tail(&sitd->sitd_list, &stream->free_list); 2138 2139 /* Recycle the siTDs when the pipeline is empty (ep no longer in use) */ 2140 if (list_empty(&stream->td_list)) { 2141 list_splice_tail_init(&stream->free_list, 2142 &ehci->cached_sitd_list); 2143 start_free_itds(ehci); 2144 } 2145 2146 return retval; 2147 } 2148 2149 2150 static int sitd_submit (struct ehci_hcd *ehci, struct urb *urb, 2151 gfp_t mem_flags) 2152 { 2153 int status = -EINVAL; 2154 unsigned long flags; 2155 struct ehci_iso_stream *stream; 2156 2157 /* Get iso_stream head */ 2158 stream = iso_stream_find (ehci, urb); 2159 if (stream == NULL) { 2160 ehci_dbg (ehci, "can't get iso stream\n"); 2161 return -ENOMEM; 2162 } 2163 if (urb->interval != stream->interval) { 2164 ehci_dbg (ehci, "can't change iso interval %d --> %d\n", 2165 stream->interval, urb->interval); 2166 goto done; 2167 } 2168 2169 #ifdef EHCI_URB_TRACE 2170 ehci_dbg (ehci, 2171 "submit %p dev%s ep%d%s-iso len %d\n", 2172 urb, urb->dev->devpath, 2173 usb_pipeendpoint (urb->pipe), 2174 usb_pipein (urb->pipe) ? "in" : "out", 2175 urb->transfer_buffer_length); 2176 #endif 2177 2178 /* allocate SITDs */ 2179 status = sitd_urb_transaction (stream, ehci, urb, mem_flags); 2180 if (status < 0) { 2181 ehci_dbg (ehci, "can't init sitds\n"); 2182 goto done; 2183 } 2184 2185 /* schedule ... need to lock */ 2186 spin_lock_irqsave (&ehci->lock, flags); 2187 if (unlikely(!HCD_HW_ACCESSIBLE(ehci_to_hcd(ehci)))) { 2188 status = -ESHUTDOWN; 2189 goto done_not_linked; 2190 } 2191 status = usb_hcd_link_urb_to_ep(ehci_to_hcd(ehci), urb); 2192 if (unlikely(status)) 2193 goto done_not_linked; 2194 status = iso_stream_schedule(ehci, urb, stream); 2195 if (status == 0) 2196 sitd_link_urb (ehci, urb, ehci->periodic_size << 3, stream); 2197 else 2198 usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb); 2199 done_not_linked: 2200 spin_unlock_irqrestore (&ehci->lock, flags); 2201 done: 2202 return status; 2203 } 2204 2205 /*-------------------------------------------------------------------------*/ 2206 2207 static void scan_isoc(struct ehci_hcd *ehci) 2208 { 2209 unsigned uf, now_frame, frame; 2210 unsigned fmask = ehci->periodic_size - 1; 2211 bool modified, live; 2212 2213 /* 2214 * When running, scan from last scan point up to "now" 2215 * else clean up by scanning everything that's left. 2216 * Touches as few pages as possible: cache-friendly. 2217 */ 2218 if (ehci->rh_state >= EHCI_RH_RUNNING) { 2219 uf = ehci_read_frame_index(ehci); 2220 now_frame = (uf >> 3) & fmask; 2221 live = true; 2222 } else { 2223 now_frame = (ehci->next_frame - 1) & fmask; 2224 live = false; 2225 } 2226 ehci->now_frame = now_frame; 2227 2228 frame = ehci->next_frame; 2229 for (;;) { 2230 union ehci_shadow q, *q_p; 2231 __hc32 type, *hw_p; 2232 2233 restart: 2234 /* scan each element in frame's queue for completions */ 2235 q_p = &ehci->pshadow [frame]; 2236 hw_p = &ehci->periodic [frame]; 2237 q.ptr = q_p->ptr; 2238 type = Q_NEXT_TYPE(ehci, *hw_p); 2239 modified = false; 2240 2241 while (q.ptr != NULL) { 2242 switch (hc32_to_cpu(ehci, type)) { 2243 case Q_TYPE_ITD: 2244 /* If this ITD is still active, leave it for 2245 * later processing ... check the next entry. 2246 * No need to check for activity unless the 2247 * frame is current. 2248 */ 2249 if (frame == now_frame && live) { 2250 rmb(); 2251 for (uf = 0; uf < 8; uf++) { 2252 if (q.itd->hw_transaction[uf] & 2253 ITD_ACTIVE(ehci)) 2254 break; 2255 } 2256 if (uf < 8) { 2257 q_p = &q.itd->itd_next; 2258 hw_p = &q.itd->hw_next; 2259 type = Q_NEXT_TYPE(ehci, 2260 q.itd->hw_next); 2261 q = *q_p; 2262 break; 2263 } 2264 } 2265 2266 /* Take finished ITDs out of the schedule 2267 * and process them: recycle, maybe report 2268 * URB completion. HC won't cache the 2269 * pointer for much longer, if at all. 2270 */ 2271 *q_p = q.itd->itd_next; 2272 if (!ehci->use_dummy_qh || 2273 q.itd->hw_next != EHCI_LIST_END(ehci)) 2274 *hw_p = q.itd->hw_next; 2275 else 2276 *hw_p = ehci->dummy->qh_dma; 2277 type = Q_NEXT_TYPE(ehci, q.itd->hw_next); 2278 wmb(); 2279 modified = itd_complete (ehci, q.itd); 2280 q = *q_p; 2281 break; 2282 case Q_TYPE_SITD: 2283 /* If this SITD is still active, leave it for 2284 * later processing ... check the next entry. 2285 * No need to check for activity unless the 2286 * frame is current. 2287 */ 2288 if (((frame == now_frame) || 2289 (((frame + 1) & fmask) == now_frame)) 2290 && live 2291 && (q.sitd->hw_results & 2292 SITD_ACTIVE(ehci))) { 2293 2294 q_p = &q.sitd->sitd_next; 2295 hw_p = &q.sitd->hw_next; 2296 type = Q_NEXT_TYPE(ehci, 2297 q.sitd->hw_next); 2298 q = *q_p; 2299 break; 2300 } 2301 2302 /* Take finished SITDs out of the schedule 2303 * and process them: recycle, maybe report 2304 * URB completion. 2305 */ 2306 *q_p = q.sitd->sitd_next; 2307 if (!ehci->use_dummy_qh || 2308 q.sitd->hw_next != EHCI_LIST_END(ehci)) 2309 *hw_p = q.sitd->hw_next; 2310 else 2311 *hw_p = ehci->dummy->qh_dma; 2312 type = Q_NEXT_TYPE(ehci, q.sitd->hw_next); 2313 wmb(); 2314 modified = sitd_complete (ehci, q.sitd); 2315 q = *q_p; 2316 break; 2317 default: 2318 ehci_dbg(ehci, "corrupt type %d frame %d shadow %p\n", 2319 type, frame, q.ptr); 2320 // BUG (); 2321 /* FALL THROUGH */ 2322 case Q_TYPE_QH: 2323 case Q_TYPE_FSTN: 2324 /* End of the iTDs and siTDs */ 2325 q.ptr = NULL; 2326 break; 2327 } 2328 2329 /* assume completion callbacks modify the queue */ 2330 if (unlikely(modified && ehci->isoc_count > 0)) 2331 goto restart; 2332 } 2333 2334 /* Stop when we have reached the current frame */ 2335 if (frame == now_frame) 2336 break; 2337 frame = (frame + 1) & fmask; 2338 } 2339 ehci->next_frame = now_frame; 2340 } 2341