ehci-q.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:27k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 2001-2002 by David Brownell
  3.  * 
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of the GNU General Public License as published by the
  6.  * Free Software Foundation; either version 2 of the License, or (at your
  7.  * option) any later version.
  8.  *
  9.  * This program is distributed in the hope that it will be useful, but
  10.  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11.  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12.  * for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software Foundation,
  16.  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  */
  18. /* this file is part of ehci-hcd.c */
  19. /*-------------------------------------------------------------------------*/
  20. /*
  21.  * EHCI hardware queue manipulation ... the core.  QH/QTD manipulation.
  22.  *
  23.  * Control, bulk, and interrupt traffic all use "qh" lists.  They list "qtd"
  24.  * entries describing USB transactions, max 16-20kB/entry (with 4kB-aligned
  25.  * buffers needed for the larger number).  We use one QH per endpoint, queue
  26.  * multiple (bulk or control) urbs per endpoint.  URBs may need several qtds.
  27.  * A scheduled interrupt qh always (for now) has one qtd, one urb.
  28.  *
  29.  * ISO traffic uses "ISO TD" (itd, and sitd) records, and (along with
  30.  * interrupts) needs careful scheduling.  Performance improvements can be
  31.  * an ongoing challenge.  That's in "ehci-sched.c".
  32.  * 
  33.  * USB 1.1 devices are handled (a) by "companion" OHCI or UHCI root hubs,
  34.  * or otherwise through transaction translators (TTs) in USB 2.0 hubs using
  35.  * (b) special fields in qh entries or (c) split iso entries.  TTs will
  36.  * buffer low/full speed data so the host collects it at high speed.
  37.  */
  38. /*-------------------------------------------------------------------------*/
  39. /* fill a qtd, returning how much of the buffer we were able to queue up */
  40. static int
  41. qtd_fill (struct ehci_qtd *qtd, dma_addr_t buf, size_t len, int token)
  42. {
  43. int i, count;
  44. /* one buffer entry per 4K ... first might be short or unaligned */
  45. qtd->hw_buf [0] = cpu_to_le32 (buf);
  46. count = 0x1000 - (buf & 0x0fff); /* rest of that page */
  47. if (likely (len < count)) /* ... iff needed */
  48. count = len;
  49. else {
  50. buf +=  0x1000;
  51. buf &= ~0x0fff;
  52. /* per-qtd limit: from 16K to 20K (best alignment) */
  53. for (i = 1; count < len && i < 5; i++) {
  54. u64 addr = buf;
  55. qtd->hw_buf [i] = cpu_to_le32 ((u32)addr);
  56. qtd->hw_buf_hi [i] = cpu_to_le32 ((u32)(addr >> 32));
  57. buf += 0x1000;
  58. if ((count + 0x1000) < len)
  59. count += 0x1000;
  60. else
  61. count = len;
  62. }
  63. }
  64. qtd->hw_token = cpu_to_le32 ((count << 16) | token);
  65. qtd->length = count;
  66. #if 0
  67. vdbg ("  qtd_fill %p, token %8x bytes %d dma %x",
  68. qtd, le32_to_cpu (qtd->hw_token), count, qtd->hw_buf [0]);
  69. #endif
  70. return count;
  71. }
  72. /*-------------------------------------------------------------------------*/
  73. /* update halted (but potentially linked) qh */
  74. static inline void qh_update (struct ehci_qh *qh, struct ehci_qtd *qtd)
  75. {
  76. qh->hw_current = 0;
  77. qh->hw_qtd_next = QTD_NEXT (qtd->qtd_dma);
  78. qh->hw_alt_next = EHCI_LIST_END;
  79. /* HC must see latest qtd and qh data before we clear ACTIVE+HALT */
  80. wmb ();
  81. qh->hw_token &= __constant_cpu_to_le32 (QTD_TOGGLE | QTD_STS_PING);
  82. }
  83. /*-------------------------------------------------------------------------*/
  84. static inline void qtd_copy_status (struct urb *urb, size_t length, u32 token)
  85. {
  86. /* count IN/OUT bytes, not SETUP (even short packets) */
  87. if (likely (QTD_PID (token) != 2))
  88. urb->actual_length += length - QTD_LENGTH (token);
  89. /* don't modify error codes */
  90. if (unlikely (urb->status == -EINPROGRESS && (token & QTD_STS_HALT))) {
  91. if (token & QTD_STS_BABBLE) {
  92. /* FIXME "must" disable babbling device's port too */
  93. urb->status = -EOVERFLOW;
  94. } else if (token & QTD_STS_MMF) {
  95. /* fs/ls interrupt xfer missed the complete-split */
  96. urb->status = -EPROTO;
  97. } else if (token & QTD_STS_DBE) {
  98. urb->status = (QTD_PID (token) == 1) /* IN ? */
  99. ? -ENOSR  /* hc couldn't read data */
  100. : -ECOMM; /* hc couldn't write data */
  101. } else if (token & QTD_STS_XACT) {
  102. /* timeout, bad crc, wrong PID, etc; retried */
  103. if (QTD_CERR (token))
  104. urb->status = -EPIPE;
  105. else {
  106. dbg ("3strikes");
  107. urb->status = -EPROTO;
  108. }
  109. /* CERR nonzero + no errors + halt --> stall */
  110. } else if (QTD_CERR (token))
  111. urb->status = -EPIPE;
  112. else /* unknown */
  113. urb->status = -EPROTO;
  114. dbg ("ep %d-%s qtd token %08x --> status %d",
  115. /* devpath */
  116. usb_pipeendpoint (urb->pipe),
  117. usb_pipein (urb->pipe) ? "in" : "out",
  118. token, urb->status);
  119. /* stall indicates some recovery action is needed */
  120. if (urb->status == -EPIPE) {
  121. int pipe = urb->pipe;
  122. if (!usb_pipecontrol (pipe))
  123. usb_endpoint_halt (urb->dev,
  124. usb_pipeendpoint (pipe),
  125. usb_pipeout (pipe));
  126. if (urb->dev->tt && !usb_pipeint (pipe)) {
  127. err ("must CLEAR_TT_BUFFER, hub port %d%s addr %d ep %d",
  128.     urb->dev->ttport, /* devpath */
  129.     urb->dev->tt->multi ? "" : " (all-ports TT)",
  130.     urb->dev->devnum, usb_pipeendpoint (urb->pipe));
  131. // FIXME something (khubd?) should make the hub
  132. // CLEAR_TT_BUFFER ASAP, it's blocking other
  133. // fs/ls requests... hub_tt_clear_buffer() ?
  134. }
  135. }
  136. }
  137. }
  138. static void ehci_urb_complete (
  139. struct ehci_hcd *ehci,
  140. dma_addr_t addr,
  141. struct urb *urb
  142. ) {
  143. if (urb->transfer_buffer_length && usb_pipein (urb->pipe))
  144. pci_dma_sync_single (ehci->hcd.pdev, addr,
  145. urb->transfer_buffer_length,
  146. PCI_DMA_FROMDEVICE);
  147. /* cleanse status if we saw no error */
  148. if (likely (urb->status == -EINPROGRESS)) {
  149. if (urb->actual_length != urb->transfer_buffer_length
  150. && (urb->transfer_flags & USB_DISABLE_SPD))
  151. urb->status = -EREMOTEIO;
  152. else
  153. urb->status = 0;
  154. }
  155. /* only report unlinks once */
  156. if (likely (urb->status != -ENOENT && urb->status != -ENOTCONN))
  157. urb->complete (urb);
  158. }
  159. /* urb->lock ignored from here on (hcd is done with urb) */
  160. static void ehci_urb_done (
  161. struct ehci_hcd *ehci,
  162. dma_addr_t addr,
  163. struct urb *urb
  164. ) {
  165. if (urb->transfer_buffer_length)
  166. pci_unmap_single (ehci->hcd.pdev,
  167. addr,
  168. urb->transfer_buffer_length,
  169. usb_pipein (urb->pipe)
  170.     ? PCI_DMA_FROMDEVICE
  171.     : PCI_DMA_TODEVICE);
  172. if (likely (urb->hcpriv != 0)) {
  173. qh_put (ehci, (struct ehci_qh *) urb->hcpriv);
  174. urb->hcpriv = 0;
  175. }
  176. if (likely (urb->status == -EINPROGRESS)) {
  177. if (urb->actual_length != urb->transfer_buffer_length
  178. && (urb->transfer_flags & USB_DISABLE_SPD))
  179. urb->status = -EREMOTEIO;
  180. else
  181. urb->status = 0;
  182. }
  183. /* hand off urb ownership */
  184. usb_hcd_giveback_urb (&ehci->hcd, urb);
  185. }
  186. /*
  187.  * Process completed qtds for a qh, issuing completions if needed.
  188.  * When freeing:  frees qtds, unmaps buf, returns URB to driver.
  189.  * When not freeing (queued periodic qh):  retain qtds, mapping, and urb.
  190.  * Races up to qh->hw_current; returns number of urb completions.
  191.  */
  192. static int
  193. qh_completions (
  194. struct ehci_hcd *ehci,
  195. struct ehci_qh *qh,
  196. int freeing
  197. ) {
  198. struct ehci_qtd *qtd, *last;
  199. struct list_head *next, *qtd_list = &qh->qtd_list;
  200. int unlink = 0, halted = 0;
  201. unsigned long flags;
  202. int retval = 0;
  203. spin_lock_irqsave (&ehci->lock, flags);
  204. if (unlikely (list_empty (qtd_list))) {
  205. spin_unlock_irqrestore (&ehci->lock, flags);
  206. return retval;
  207. }
  208. /* scan QTDs till end of list, or we reach an active one */
  209. for (qtd = list_entry (qtd_list->next, struct ehci_qtd, qtd_list),
  210.      last = 0, next = 0;
  211. next != qtd_list;
  212. last = qtd, qtd = list_entry (next,
  213. struct ehci_qtd, qtd_list)) {
  214. struct urb *urb = qtd->urb;
  215. u32 token = 0;
  216. /* clean up any state from previous QTD ...*/
  217. if (last) {
  218. if (likely (last->urb != urb)) {
  219. /* complete() can reenter this HCD */
  220. spin_unlock_irqrestore (&ehci->lock, flags);
  221. if (likely (freeing != 0))
  222. ehci_urb_done (ehci, last->buf_dma,
  223. last->urb);
  224. else
  225. ehci_urb_complete (ehci, last->buf_dma,
  226. last->urb);
  227. spin_lock_irqsave (&ehci->lock, flags);
  228. retval++;
  229. }
  230. /* qh overlays can have HC's old cached copies of
  231.  * next qtd ptrs, if an URB was queued afterwards.
  232.  */
  233. if (cpu_to_le32 (last->qtd_dma) == qh->hw_current
  234. && last->hw_next != qh->hw_qtd_next) {
  235. qh->hw_alt_next = last->hw_alt_next;
  236. qh->hw_qtd_next = last->hw_next;
  237. }
  238. if (likely (freeing != 0))
  239. ehci_qtd_free (ehci, last);
  240. last = 0;
  241. }
  242. next = qtd->qtd_list.next;
  243. /* QTDs at tail may be active if QH+HC are running,
  244.  * or when unlinking some urbs queued to this QH
  245.  */
  246. token = le32_to_cpu (qtd->hw_token);
  247. halted = halted
  248. || (__constant_cpu_to_le32 (QTD_STS_HALT)
  249. & qh->hw_token) != 0
  250. || (ehci->hcd.state == USB_STATE_HALT)
  251. || (qh->qh_state == QH_STATE_IDLE);
  252. /* fault: unlink the rest, since this qtd saw an error? */
  253. if (unlikely ((token & QTD_STS_HALT) != 0)) {
  254. freeing = unlink = 1;
  255. /* status copied below */
  256. /* QH halts only because of fault (above) or unlink (here). */
  257. } else if (unlikely (halted != 0)) {
  258. /* unlinking everything because of HC shutdown? */
  259. if (ehci->hcd.state == USB_STATE_HALT) {
  260. freeing = unlink = 1;
  261. /* explicit unlink, maybe starting here? */
  262. } else if (qh->qh_state == QH_STATE_IDLE
  263. && (urb->status == -ECONNRESET
  264. || urb->status == -ENOENT)) {
  265. freeing = unlink = 1;
  266. /* QH halted to unlink urbs _after_ this?  */
  267. } else if (!unlink && (token & QTD_STS_ACTIVE) != 0) {
  268. qtd = 0;
  269. continue;
  270. }
  271. /* unlink the rest?  once we start unlinking, after
  272.  * a fault or explicit unlink, we unlink all later
  273.  * urbs.  usb spec requires that.
  274.  */
  275. if (unlink && urb->status == -EINPROGRESS)
  276. urb->status = -ECONNRESET;
  277. /* Else QH is active, so we must not modify QTDs
  278.  * that HC may be working on.  No more qtds to check.
  279.  */
  280. } else if (unlikely ((token & QTD_STS_ACTIVE) != 0)) {
  281. next = qtd_list;
  282. qtd = 0;
  283. continue;
  284. }
  285. spin_lock (&urb->lock);
  286. qtd_copy_status (urb, qtd->length, token);
  287. spin_unlock (&urb->lock);
  288. /*
  289.  * NOTE:  this won't work right with interrupt urbs that
  290.  * need multiple qtds ... only the first scan of qh->qtd_list
  291.  * starts at the right qtd, yet multiple scans could happen
  292.  * for transfers that are scheduled across multiple uframes. 
  293.  * (Such schedules are not currently allowed!)
  294.  */
  295. if (likely (freeing != 0))
  296. list_del (&qtd->qtd_list);
  297. else {
  298. /* restore everything the HC could change
  299.  * from an interrupt QTD
  300.  */
  301. qtd->hw_token = (qtd->hw_token
  302. & __constant_cpu_to_le32 (0x8300))
  303. | cpu_to_le32 (qtd->length << 16)
  304. | __constant_cpu_to_le32 (QTD_STS_ACTIVE
  305. | (EHCI_TUNE_CERR << 10));
  306. qtd->hw_buf [0] &= ~__constant_cpu_to_le32 (0x0fff);
  307. /* this offset, and the length above,
  308.  * are likely wrong on QTDs #2..N
  309.  */
  310. qtd->hw_buf [0] |= cpu_to_le32 (0x0fff & qtd->buf_dma);
  311. }
  312. #if 0
  313. if (urb->status == -EINPROGRESS)
  314. vdbg ("  qtd %p ok, urb %p, token %8x, len %d",
  315. qtd, urb, token, urb->actual_length);
  316. else
  317. vdbg ("urb %p status %d, qtd %p, token %8x, len %d",
  318. urb, urb->status, qtd, token,
  319. urb->actual_length);
  320. #endif
  321. /* SETUP for control urb? */
  322. if (unlikely (QTD_PID (token) == 2))
  323. pci_unmap_single (ehci->hcd.pdev,
  324. qtd->buf_dma, sizeof (struct usb_ctrlrequest),
  325. PCI_DMA_TODEVICE);
  326. }
  327. /* patch up list head? */
  328. if (unlikely (halted && !list_empty (qtd_list))) {
  329. qh_update (qh, list_entry (qtd_list->next,
  330. struct ehci_qtd, qtd_list));
  331. }
  332. spin_unlock_irqrestore (&ehci->lock, flags);
  333. /* last urb's completion might still need calling */
  334. if (likely (last != 0)) {
  335. if (likely (freeing != 0)) {
  336. ehci_urb_done (ehci, last->buf_dma, last->urb);
  337. ehci_qtd_free (ehci, last);
  338. } else
  339. ehci_urb_complete (ehci, last->buf_dma, last->urb);
  340. retval++;
  341. }
  342. return retval;
  343. }
  344. /*-------------------------------------------------------------------------*/
  345. /*
  346.  * reverse of qh_urb_transaction:  free a list of TDs.
  347.  * used for cleanup after errors, before HC sees an URB's TDs.
  348.  */
  349. static void qtd_list_free (
  350. struct ehci_hcd *ehci,
  351. struct urb *urb,
  352. struct list_head *qtd_list
  353. ) {
  354. struct list_head *entry, *temp;
  355. int unmapped = 0;
  356. list_for_each_safe (entry, temp, qtd_list) {
  357. struct ehci_qtd *qtd;
  358. qtd = list_entry (entry, struct ehci_qtd, qtd_list);
  359. list_del (&qtd->qtd_list);
  360. if (unmapped != 2) {
  361. int direction;
  362. size_t size;
  363. /* for ctrl unmap twice: SETUP and DATA;
  364.  * else (bulk, intr) just once: DATA
  365.  */
  366. if (!unmapped++ && usb_pipecontrol (urb->pipe)) {
  367. direction = PCI_DMA_TODEVICE;
  368. size = sizeof (struct usb_ctrlrequest);
  369. } else {
  370. direction = usb_pipein (urb->pipe)
  371. ? PCI_DMA_FROMDEVICE
  372. : PCI_DMA_TODEVICE;
  373. size = qtd->urb->transfer_buffer_length;
  374. unmapped++;
  375. }
  376. if (qtd->buf_dma)
  377. pci_unmap_single (ehci->hcd.pdev,
  378. qtd->buf_dma,
  379. size, direction);
  380. }
  381. ehci_qtd_free (ehci, qtd);
  382. }
  383. }
  384. /*
  385.  * create a list of filled qtds for this URB; won't link into qh.
  386.  */
  387. static struct list_head *
  388. qh_urb_transaction (
  389. struct ehci_hcd *ehci,
  390. struct urb *urb,
  391. struct list_head *head,
  392. int flags
  393. ) {
  394. struct ehci_qtd *qtd, *qtd_prev;
  395. dma_addr_t buf, map_buf;
  396. int len, maxpacket;
  397. u32 token;
  398. /*
  399.  * URBs map to sequences of QTDs:  one logical transaction
  400.  */
  401. qtd = ehci_qtd_alloc (ehci, flags);
  402. if (unlikely (!qtd))
  403. return 0;
  404. qtd_prev = 0;
  405. list_add_tail (&qtd->qtd_list, head);
  406. qtd->urb = urb;
  407. token = QTD_STS_ACTIVE;
  408. token |= (EHCI_TUNE_CERR << 10);
  409. /* for split transactions, SplitXState initialized to zero */
  410. if (usb_pipecontrol (urb->pipe)) {
  411. /* control request data is passed in the "setup" pid */
  412. qtd->buf_dma = pci_map_single (
  413. ehci->hcd.pdev,
  414. urb->setup_packet,
  415. sizeof (struct usb_ctrlrequest),
  416. PCI_DMA_TODEVICE);
  417. if (unlikely (!qtd->buf_dma))
  418. goto cleanup;
  419. /* SETUP pid */
  420. qtd_fill (qtd, qtd->buf_dma, sizeof (struct usb_ctrlrequest),
  421. token | (2 /* "setup" */ << 8));
  422. /* ... and always at least one more pid */
  423. token ^= QTD_TOGGLE;
  424. qtd_prev = qtd;
  425. qtd = ehci_qtd_alloc (ehci, flags);
  426. if (unlikely (!qtd))
  427. goto cleanup;
  428. qtd->urb = urb;
  429. qtd_prev->hw_next = QTD_NEXT (qtd->qtd_dma);
  430. list_add_tail (&qtd->qtd_list, head);
  431. /*
  432.  * data transfer stage:  buffer setup
  433.  */
  434. len = urb->transfer_buffer_length;
  435. if (likely (len > 0)) {
  436. buf = map_buf = pci_map_single (ehci->hcd.pdev,
  437. urb->transfer_buffer, len,
  438. usb_pipein (urb->pipe)
  439.     ? PCI_DMA_FROMDEVICE
  440.     : PCI_DMA_TODEVICE);
  441. if (unlikely (!buf))
  442. goto cleanup;
  443. } else
  444. buf = map_buf = 0;
  445. if (!buf || usb_pipein (urb->pipe))
  446. token |= (1 /* "in" */ << 8);
  447. /* else it's already initted to "out" pid (0 << 8) */
  448. maxpacket = usb_maxpacket (urb->dev, urb->pipe,
  449. usb_pipeout (urb->pipe));
  450. /*
  451.  * buffer gets wrapped in one or more qtds;
  452.  * last one may be "short" (including zero len)
  453.  * and may serve as a control status ack
  454.  */
  455. for (;;) {
  456. int this_qtd_len;
  457. qtd->urb = urb;
  458. qtd->buf_dma = map_buf;
  459. this_qtd_len = qtd_fill (qtd, buf, len, token);
  460. len -= this_qtd_len;
  461. buf += this_qtd_len;
  462. /* qh makes control packets use qtd toggle; maybe switch it */
  463. if ((maxpacket & (this_qtd_len + (maxpacket - 1))) == 0)
  464. token ^= QTD_TOGGLE;
  465. if (likely (len <= 0))
  466. break;
  467. qtd_prev = qtd;
  468. qtd = ehci_qtd_alloc (ehci, flags);
  469. if (unlikely (!qtd))
  470. goto cleanup;
  471. qtd->urb = urb;
  472. qtd_prev->hw_next = QTD_NEXT (qtd->qtd_dma);
  473. list_add_tail (&qtd->qtd_list, head);
  474. }
  475. /*
  476.  * control requests may need a terminating data "status" ack;
  477.  * bulk ones may need a terminating short packet (zero length).
  478.  */
  479. if (likely (buf != 0)) {
  480. int one_more = 0;
  481. if (usb_pipecontrol (urb->pipe)) {
  482. one_more = 1;
  483. token ^= 0x0100; /* "in" <--> "out"  */
  484. token |= QTD_TOGGLE; /* force DATA1 */
  485. } else if (usb_pipebulk (urb->pipe)
  486. && (urb->transfer_flags & USB_ZERO_PACKET)
  487. && !(urb->transfer_buffer_length % maxpacket)) {
  488. one_more = 1;
  489. }
  490. if (one_more) {
  491. qtd_prev = qtd;
  492. qtd = ehci_qtd_alloc (ehci, flags);
  493. if (unlikely (!qtd))
  494. goto cleanup;
  495. qtd->urb = urb;
  496. qtd_prev->hw_next = QTD_NEXT (qtd->qtd_dma);
  497. list_add_tail (&qtd->qtd_list, head);
  498. /* never any data in such packets */
  499. qtd_fill (qtd, 0, 0, token);
  500. }
  501. }
  502. /* by default, enable interrupt on urb completion */
  503. if (likely (!(urb->transfer_flags & URB_NO_INTERRUPT)))
  504. qtd->hw_token |= __constant_cpu_to_le32 (QTD_IOC);
  505. return head;
  506. cleanup:
  507. qtd_list_free (ehci, urb, head);
  508. return 0;
  509. }
  510. /*-------------------------------------------------------------------------*/
  511. /*
  512.  * Hardware maintains data toggle (like OHCI) ... here we (re)initialize
  513.  * the hardware data toggle in the QH, and set the pseudo-toggle in udev
  514.  * so we can see if usb_clear_halt() was called.  NOP for control, since
  515.  * we set up qh->hw_info1 to always use the QTD toggle bits. 
  516.  */
  517. static inline void
  518. clear_toggle (struct usb_device *udev, int ep, int is_out, struct ehci_qh *qh)
  519. {
  520. vdbg ("clear toggle, dev %d ep 0x%x-%s",
  521. udev->devnum, ep, is_out ? "out" : "in");
  522. qh->hw_token &= ~__constant_cpu_to_le32 (QTD_TOGGLE);
  523. usb_settoggle (udev, ep, is_out, 1);
  524. }
  525. // Would be best to create all qh's from config descriptors,
  526. // when each interface/altsetting is established.  Unlink
  527. // any previous qh and cancel its urbs first; endpoints are
  528. // implicitly reset then (data toggle too).
  529. // That'd mean updating how usbcore talks to HCDs. (2.5?)
  530. /*
  531.  * Each QH holds a qtd list; a QH is used for everything except iso.
  532.  *
  533.  * For interrupt urbs, the scheduler must set the microframe scheduling
  534.  * mask(s) each time the QH gets scheduled.  For highspeed, that's
  535.  * just one microframe in the s-mask.  For split interrupt transactions
  536.  * there are additional complications: c-mask, maybe FSTNs.
  537.  */
  538. static struct ehci_qh *
  539. ehci_qh_make (
  540. struct ehci_hcd *ehci,
  541. struct urb *urb,
  542. struct list_head *qtd_list,
  543. int flags
  544. ) {
  545. struct ehci_qh *qh = ehci_qh_alloc (ehci, flags);
  546. u32 info1 = 0, info2 = 0;
  547. if (!qh)
  548. return qh;
  549. /*
  550.  * init endpoint/device data for this QH
  551.  */
  552. info1 |= usb_pipeendpoint (urb->pipe) << 8;
  553. info1 |= usb_pipedevice (urb->pipe) << 0;
  554. /* using TT? */
  555. switch (urb->dev->speed) {
  556. case USB_SPEED_LOW:
  557. info1 |= (1 << 12); /* EPS "low" */
  558. /* FALL THROUGH */
  559. case USB_SPEED_FULL:
  560. /* EPS 0 means "full" */
  561. info1 |= (EHCI_TUNE_RL_TT << 28);
  562. if (usb_pipecontrol (urb->pipe)) {
  563. info1 |= (1 << 27); /* for TT */
  564. info1 |= 1 << 14; /* toggle from qtd */
  565. }
  566. info1 |= usb_maxpacket (urb->dev, urb->pipe,
  567. usb_pipeout (urb->pipe)) << 16;
  568. info2 |= (EHCI_TUNE_MULT_TT << 30);
  569. info2 |= urb->dev->ttport << 23;
  570. info2 |= urb->dev->tt->hub->devnum << 16;
  571. /* NOTE:  if (usb_pipeint (urb->pipe)) { scheduler sets c-mask }
  572.  * ... and a 0.96 scheduler might use FSTN nodes too
  573.  */
  574. break;
  575. case USB_SPEED_HIGH: /* no TT involved */
  576. info1 |= (2 << 12); /* EPS "high" */
  577. info1 |= (EHCI_TUNE_RL_HS << 28);
  578. if (usb_pipecontrol (urb->pipe)) {
  579. info1 |= 64 << 16; /* usb2 fixed maxpacket */
  580. info1 |= 1 << 14; /* toggle from qtd */
  581. info2 |= (EHCI_TUNE_MULT_HS << 30);
  582. } else if (usb_pipebulk (urb->pipe)) {
  583. info1 |= 512 << 16; /* usb2 fixed maxpacket */
  584. info2 |= (EHCI_TUNE_MULT_HS << 30);
  585. } else {
  586. u32 temp;
  587. temp = usb_maxpacket (urb->dev, urb->pipe,
  588. usb_pipeout (urb->pipe));
  589. info1 |= (temp & 0x3ff) << 16; /* maxpacket */
  590. /* HS intr can be "high bandwidth" */
  591. temp = 1 + ((temp >> 11) & 0x03);
  592. info2 |= temp << 30; /* mult */
  593. }
  594. break;
  595. default:
  596. #ifdef DEBUG
  597. BUG ();
  598. #else
  599. ;
  600. #endif
  601. }
  602. /* NOTE:  if (usb_pipeint (urb->pipe)) { scheduler sets s-mask } */
  603. qh->qh_state = QH_STATE_IDLE;
  604. qh->hw_info1 = cpu_to_le32 (info1);
  605. qh->hw_info2 = cpu_to_le32 (info2);
  606. /* initialize sw and hw queues with these qtds */
  607. list_splice (qtd_list, &qh->qtd_list);
  608. qh_update (qh, list_entry (qtd_list->next, struct ehci_qtd, qtd_list));
  609. /* initialize data toggle state */
  610. if (!usb_pipecontrol (urb->pipe))
  611. clear_toggle (urb->dev,
  612. usb_pipeendpoint (urb->pipe),
  613. usb_pipeout (urb->pipe),
  614. qh);
  615. return qh;
  616. }
  617. /*-------------------------------------------------------------------------*/
  618. /* move qh (and its qtds) onto async queue; maybe enable queue.  */
  619. static void qh_link_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
  620. {
  621. u32 dma = QH_NEXT (qh->qh_dma);
  622. struct ehci_qh *q;
  623. if (unlikely (!(q = ehci->async))) {
  624. u32 cmd = readl (&ehci->regs->command);
  625. /* in case a clear of CMD_ASE didn't take yet */
  626. while (readl (&ehci->regs->status) & STS_ASS)
  627. udelay (100);
  628. qh->hw_info1 |= __constant_cpu_to_le32 (QH_HEAD); /* [4.8] */
  629. qh->qh_next.qh = qh;
  630. qh->hw_next = dma;
  631. wmb ();
  632. ehci->async = qh;
  633. writel ((u32)qh->qh_dma, &ehci->regs->async_next);
  634. cmd |= CMD_ASE | CMD_RUN;
  635. writel (cmd, &ehci->regs->command);
  636. ehci->hcd.state = USB_STATE_RUNNING;
  637. /* posted write need not be known to HC yet ... */
  638. } else {
  639. /* splice right after "start" of ring */
  640. qh->hw_info1 &= ~__constant_cpu_to_le32 (QH_HEAD); /* [4.8] */
  641. qh->qh_next = q->qh_next;
  642. qh->hw_next = q->hw_next;
  643. wmb ();
  644. q->qh_next.qh = qh;
  645. q->hw_next = dma;
  646. }
  647. qh->qh_state = QH_STATE_LINKED;
  648. /* qtd completions reported later by interrupt */
  649. }
  650. /*-------------------------------------------------------------------------*/
  651. static int
  652. submit_async (
  653. struct ehci_hcd *ehci,
  654. struct urb *urb,
  655. struct list_head *qtd_list,
  656. int mem_flags
  657. ) {
  658. struct ehci_qtd *qtd;
  659. struct hcd_dev *dev;
  660. int epnum;
  661. unsigned long flags;
  662. struct ehci_qh *qh = 0;
  663. qtd = list_entry (qtd_list->next, struct ehci_qtd, qtd_list);
  664. dev = (struct hcd_dev *)urb->dev->hcpriv;
  665. epnum = usb_pipeendpoint (urb->pipe);
  666. if (usb_pipein (urb->pipe))
  667. epnum |= 0x10;
  668. vdbg ("%s: submit_async urb %p len %d ep %d-%s qtd %p [qh %p]",
  669. ehci->hcd.bus_name, urb, urb->transfer_buffer_length,
  670. epnum & 0x0f, (epnum & 0x10) ? "in" : "out",
  671. qtd, dev ? dev->ep [epnum] : (void *)~0);
  672. spin_lock_irqsave (&ehci->lock, flags);
  673. qh = (struct ehci_qh *) dev->ep [epnum];
  674. if (likely (qh != 0)) {
  675. u32 hw_next = QTD_NEXT (qtd->qtd_dma);
  676. /* maybe patch the qh used for set_address */
  677. if (unlikely (epnum == 0
  678. && le32_to_cpu (qh->hw_info1 & 0x7f) == 0))
  679. qh->hw_info1 |= cpu_to_le32 (usb_pipedevice(urb->pipe));
  680. /* is an URB is queued to this qh already? */
  681. if (unlikely (!list_empty (&qh->qtd_list))) {
  682. struct ehci_qtd *last_qtd;
  683. int short_rx = 0;
  684. /* update the last qtd's "next" pointer */
  685. // dbg_qh ("non-empty qh", ehci, qh);
  686. last_qtd = list_entry (qh->qtd_list.prev,
  687. struct ehci_qtd, qtd_list);
  688. last_qtd->hw_next = hw_next;
  689. /* previous urb allows short rx? maybe optimize. */
  690. if (!(last_qtd->urb->transfer_flags & USB_DISABLE_SPD)
  691. && (epnum & 0x10)) {
  692. // only the last QTD for now
  693. last_qtd->hw_alt_next = hw_next;
  694. short_rx = 1;
  695. }
  696. /* Adjust any old copies in qh overlay too.
  697.  * Interrupt code must cope with case of HC having it
  698.  * cached, and clobbering these updates.
  699.  * ... complicates getting rid of extra interrupts!
  700.  */
  701. if (qh->hw_current == cpu_to_le32 (last_qtd->qtd_dma)) {
  702. wmb ();
  703. qh->hw_qtd_next = hw_next;
  704. if (short_rx)
  705. qh->hw_alt_next = hw_next
  706.      | (qh->hw_alt_next & 0x1e);
  707. vdbg ("queue to qh %p, patch", qh);
  708. }
  709. /* no URB queued */
  710. } else {
  711. // dbg_qh ("empty qh", ehci, qh);
  712. /* NOTE: we already canceled any queued URBs
  713.  * when the endpoint halted.
  714.  */
  715. /* usb_clear_halt() means qh data toggle gets reset */
  716. if (usb_pipebulk (urb->pipe)
  717. && unlikely (!usb_gettoggle (urb->dev,
  718. (epnum & 0x0f),
  719. !(epnum & 0x10)))) {
  720. clear_toggle (urb->dev,
  721. epnum & 0x0f, !(epnum & 0x10), qh);
  722. }
  723. qh_update (qh, qtd);
  724. }
  725. list_splice (qtd_list, qh->qtd_list.prev);
  726. } else {
  727. /* can't sleep here, we have ehci->lock... */
  728. qh = ehci_qh_make (ehci, urb, qtd_list, SLAB_ATOMIC);
  729. if (likely (qh != 0)) {
  730. // dbg_qh ("new qh", ehci, qh);
  731. dev->ep [epnum] = qh;
  732. }
  733. }
  734. /* Control/bulk operations through TTs don't need scheduling,
  735.  * the HC and TT handle it when the TT has a buffer ready.
  736.  */
  737. if (likely (qh != 0)) {
  738. urb->hcpriv = qh_get (qh);
  739. if (likely (qh->qh_state == QH_STATE_IDLE))
  740. qh_link_async (ehci, qh_get (qh));
  741. }
  742. spin_unlock_irqrestore (&ehci->lock, flags);
  743. if (unlikely (qh == 0)) {
  744. qtd_list_free (ehci, urb, qtd_list);
  745. return -ENOMEM;
  746. }
  747. return 0;
  748. }
  749. /*-------------------------------------------------------------------------*/
  750. /* the async qh for the qtds being reclaimed are now unlinked from the HC */
  751. /* caller must not own ehci->lock */
  752. static void end_unlink_async (struct ehci_hcd *ehci)
  753. {
  754. struct ehci_qh *qh = ehci->reclaim;
  755. qh->qh_state = QH_STATE_IDLE;
  756. qh->qh_next.qh = 0;
  757. qh_put (ehci, qh); // refcount from reclaim 
  758. ehci->reclaim = 0;
  759. ehci->reclaim_ready = 0;
  760. qh_completions (ehci, qh, 1);
  761. // unlink any urb should now unlink all following urbs, so that
  762. // relinking only happens for urbs before the unlinked ones.
  763. if (!list_empty (&qh->qtd_list)
  764. && HCD_IS_RUNNING (ehci->hcd.state))
  765. qh_link_async (ehci, qh);
  766. else
  767. qh_put (ehci, qh); // refcount from async list
  768. }
  769. /* makes sure the async qh will become idle */
  770. /* caller must own ehci->lock */
  771. static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
  772. {
  773. int cmd = readl (&ehci->regs->command);
  774. struct ehci_qh *prev;
  775. #ifdef DEBUG
  776. if (ehci->reclaim
  777. || !ehci->async
  778. || qh->qh_state != QH_STATE_LINKED
  779. #ifdef CONFIG_SMP
  780. // this macro lies except on SMP compiles
  781. || !spin_is_locked (&ehci->lock)
  782. #endif
  783. )
  784. BUG ();
  785. #endif
  786. qh->qh_state = QH_STATE_UNLINK;
  787. ehci->reclaim = qh = qh_get (qh);
  788. // dbg_qh ("start unlink", ehci, qh);
  789. /* Remove the last QH (qhead)?  Stop async schedule first. */
  790. if (unlikely (qh == ehci->async && qh->qh_next.qh == qh)) {
  791. /* can't get here without STS_ASS set */
  792. if (ehci->hcd.state != USB_STATE_HALT) {
  793. if (cmd & CMD_PSE)
  794. writel (cmd & ~CMD_ASE, &ehci->regs->command);
  795. else {
  796. ehci_ready (ehci);
  797. while (readl (&ehci->regs->status) & STS_ASS)
  798. udelay (100);
  799. }
  800. }
  801. qh->qh_next.qh = ehci->async = 0;
  802. ehci->reclaim_ready = 1;
  803. tasklet_schedule (&ehci->tasklet);
  804. return;
  805. if (unlikely (ehci->hcd.state == USB_STATE_HALT)) {
  806. ehci->reclaim_ready = 1;
  807. tasklet_schedule (&ehci->tasklet);
  808. return;
  809. }
  810. prev = ehci->async;
  811. while (prev->qh_next.qh != qh && prev->qh_next.qh != ehci->async)
  812. prev = prev->qh_next.qh;
  813. #ifdef DEBUG
  814. if (prev->qh_next.qh != qh)
  815. BUG ();
  816. #endif
  817. if (qh->hw_info1 & __constant_cpu_to_le32 (QH_HEAD)) {
  818. ehci->async = prev;
  819. prev->hw_info1 |= __constant_cpu_to_le32 (QH_HEAD);
  820. }
  821. prev->hw_next = qh->hw_next;
  822. prev->qh_next = qh->qh_next;
  823. wmb ();
  824. ehci->reclaim_ready = 0;
  825. cmd |= CMD_IAAD;
  826. writel (cmd, &ehci->regs->command);
  827. /* posted write need not be known to HC yet ... */
  828. }
  829. /*-------------------------------------------------------------------------*/
  830. static void scan_async (struct ehci_hcd *ehci)
  831. {
  832. struct ehci_qh *qh;
  833. unsigned long flags;
  834. spin_lock_irqsave (&ehci->lock, flags);
  835. rescan:
  836. qh = ehci->async;
  837. if (likely (qh != 0)) {
  838. do {
  839. /* clean any finished work for this qh */
  840. if (!list_empty (&qh->qtd_list)) {
  841. // dbg_qh ("scan_async", ehci, qh);
  842. qh = qh_get (qh);
  843. spin_unlock_irqrestore (&ehci->lock, flags);
  844. /* concurrent unlink could happen here */
  845. qh_completions (ehci, qh, 1);
  846. spin_lock_irqsave (&ehci->lock, flags);
  847. qh_put (ehci, qh);
  848. }
  849. /* unlink idle entries (reduces PCI usage) */
  850. if (list_empty (&qh->qtd_list) && !ehci->reclaim) {
  851. if (qh->qh_next.qh != qh) {
  852. // dbg ("irq/empty");
  853. start_unlink_async (ehci, qh);
  854. } else {
  855. // FIXME:  arrange to stop
  856. // after it's been idle a while.
  857. }
  858. }
  859. qh = qh->qh_next.qh;
  860. if (!qh) /* unlinked? */
  861. goto rescan;
  862. } while (qh != ehci->async);
  863. }
  864. spin_unlock_irqrestore (&ehci->lock, flags);
  865. }