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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Universal Host Controller Interface driver for USB.
  3.  *
  4.  * Maintainer: Johannes Erdfelt <johannes@erdfelt.com>
  5.  *
  6.  * (C) Copyright 1999 Linus Torvalds
  7.  * (C) Copyright 1999-2002 Johannes Erdfelt, johannes@erdfelt.com
  8.  * (C) Copyright 1999 Randy Dunlap
  9.  * (C) Copyright 1999 Georg Acher, acher@in.tum.de
  10.  * (C) Copyright 1999 Deti Fliegl, deti@fliegl.de
  11.  * (C) Copyright 1999 Thomas Sailer, sailer@ife.ee.ethz.ch
  12.  * (C) Copyright 1999 Roman Weissgaerber, weissg@vienna.at
  13.  * (C) Copyright 2000 Yggdrasil Computing, Inc. (port of new PCI interface
  14.  *               support from usb-ohci.c by Adam Richter, adam@yggdrasil.com).
  15.  * (C) Copyright 1999 Gregory P. Smith (from usb-ohci.c)
  16.  *
  17.  * Intel documents this fairly well, and as far as I know there
  18.  * are no royalties or anything like that, but even so there are
  19.  * people who decided that they want to do the same thing in a
  20.  * completely different way.
  21.  *
  22.  * WARNING! The USB documentation is downright evil. Most of it
  23.  * is just crap, written by a committee. You're better off ignoring
  24.  * most of it, the important stuff is:
  25.  *  - the low-level protocol (fairly simple but lots of small details)
  26.  *  - working around the horridness of the rest
  27.  */
  28. #include <linux/config.h>
  29. #include <linux/module.h>
  30. #include <linux/pci.h>
  31. #include <linux/kernel.h>
  32. #include <linux/init.h>
  33. #include <linux/delay.h>
  34. #include <linux/ioport.h>
  35. #include <linux/sched.h>
  36. #include <linux/slab.h>
  37. #include <linux/smp_lock.h>
  38. #include <linux/errno.h>
  39. #include <linux/unistd.h>
  40. #include <linux/interrupt.h>
  41. #include <linux/spinlock.h>
  42. #include <linux/proc_fs.h>
  43. #ifdef CONFIG_USB_DEBUG
  44. #define DEBUG
  45. #else
  46. #undef DEBUG
  47. #endif
  48. #include <linux/usb.h>
  49. #include <asm/uaccess.h>
  50. #include <asm/io.h>
  51. #include <asm/irq.h>
  52. #include <asm/system.h>
  53. #include "uhci.h"
  54. #include <linux/pm.h>
  55. #include "hcd.h"
  56. /*
  57.  * Version Information
  58.  */
  59. #define DRIVER_VERSION "v1.1"
  60. #define DRIVER_AUTHOR "Linus 'Frodo Rabbit' Torvalds, Johannes Erdfelt, Randy Dunlap, Georg Acher, Deti Fliegl, Thomas Sailer, Roman Weissgaerber"
  61. #define DRIVER_DESC "USB Universal Host Controller Interface driver"
  62. /*
  63.  * debug = 0, no debugging messages
  64.  * debug = 1, dump failed URB's except for stalls
  65.  * debug = 2, dump all failed URB's (including stalls)
  66.  *            show all queues in /proc/uhci/hc*
  67.  * debug = 3, show all TD's in URB's when dumping
  68.  */
  69. #ifdef DEBUG
  70. static int debug = 1;
  71. #else
  72. static int debug = 0;
  73. #endif
  74. MODULE_PARM(debug, "i");
  75. MODULE_PARM_DESC(debug, "Debug level");
  76. static char *errbuf;
  77. #define ERRBUF_LEN    (PAGE_SIZE * 8)
  78. #include "uhci-debug.h"
  79. static kmem_cache_t *uhci_up_cachep; /* urb_priv */
  80. static int rh_submit_urb(struct urb *urb);
  81. static int rh_unlink_urb(struct urb *urb);
  82. static int uhci_get_current_frame_number(struct usb_device *dev);
  83. static int uhci_unlink_urb(struct urb *urb);
  84. static void uhci_unlink_generic(struct uhci *uhci, struct urb *urb);
  85. static void uhci_call_completion(struct urb *urb);
  86. static int  ports_active(struct uhci *uhci);
  87. static void suspend_hc(struct uhci *uhci);
  88. static void wakeup_hc(struct uhci *uhci);
  89. /* If a transfer is still active after this much time, turn off FSBR */
  90. #define IDLE_TIMEOUT (HZ / 20) /* 50 ms */
  91. #define FSBR_DELAY (HZ / 20) /* 50 ms */
  92. /* When we timeout an idle transfer for FSBR, we'll switch it over to */
  93. /* depth first traversal. We'll do it in groups of this number of TD's */
  94. /* to make sure it doesn't hog all of the bandwidth */
  95. #define DEPTH_INTERVAL 5
  96. #define MAX_URB_LOOP 2048 /* Maximum number of linked URB's */
  97. /*
  98.  * Only the USB core should call uhci_alloc_dev and uhci_free_dev
  99.  */
  100. static int uhci_alloc_dev(struct usb_device *dev)
  101. {
  102. return 0;
  103. }
  104. static int uhci_free_dev(struct usb_device *dev)
  105. {
  106. return 0;
  107. }
  108. /*
  109.  * Technically, updating td->status here is a race, but it's not really a
  110.  * problem. The worst that can happen is that we set the IOC bit again
  111.  * generating a spurios interrupt. We could fix this by creating another
  112.  * QH and leaving the IOC bit always set, but then we would have to play
  113.  * games with the FSBR code to make sure we get the correct order in all
  114.  * the cases. I don't think it's worth the effort
  115.  */
  116. static inline void uhci_set_next_interrupt(struct uhci *uhci)
  117. {
  118. unsigned long flags;
  119. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  120. uhci->skel_term_td->status |= TD_CTRL_IOC;
  121. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  122. }
  123. static inline void uhci_clear_next_interrupt(struct uhci *uhci)
  124. {
  125. unsigned long flags;
  126. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  127. uhci->skel_term_td->status &= ~TD_CTRL_IOC;
  128. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  129. }
  130. static inline void uhci_add_complete(struct urb *urb)
  131. {
  132. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  133. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  134. unsigned long flags;
  135. spin_lock_irqsave(&uhci->complete_list_lock, flags);
  136. list_add(&urbp->complete_list, &uhci->complete_list);
  137. spin_unlock_irqrestore(&uhci->complete_list_lock, flags);
  138. }
  139. static struct uhci_td *uhci_alloc_td(struct uhci *uhci, struct usb_device *dev)
  140. {
  141. dma_addr_t dma_handle;
  142. struct uhci_td *td;
  143. td = pci_pool_alloc(uhci->td_pool, GFP_DMA | GFP_ATOMIC, &dma_handle);
  144. if (!td)
  145. return NULL;
  146. td->dma_handle = dma_handle;
  147. td->link = UHCI_PTR_TERM;
  148. td->buffer = 0;
  149. td->frame = -1;
  150. td->dev = dev;
  151. INIT_LIST_HEAD(&td->list);
  152. INIT_LIST_HEAD(&td->fl_list);
  153. usb_inc_dev_use(dev);
  154. return td;
  155. }
  156. static void inline uhci_fill_td(struct uhci_td *td, __u32 status,
  157. __u32 info, __u32 buffer)
  158. {
  159. td->status = status;
  160. td->info = info;
  161. td->buffer = buffer;
  162. }
  163. static void uhci_insert_td(struct uhci *uhci, struct uhci_td *skeltd, struct uhci_td *td)
  164. {
  165. unsigned long flags;
  166. struct uhci_td *ltd;
  167. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  168. ltd = list_entry(skeltd->fl_list.prev, struct uhci_td, fl_list);
  169. td->link = ltd->link;
  170. mb();
  171. ltd->link = td->dma_handle;
  172. list_add_tail(&td->fl_list, &skeltd->fl_list);
  173. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  174. }
  175. /*
  176.  * We insert Isochronous transfers directly into the frame list at the
  177.  * beginning
  178.  * The layout looks as follows:
  179.  * frame list pointer -> iso td's (if any) ->
  180.  * periodic interrupt td (if frame 0) -> irq td's -> control qh -> bulk qh
  181.  */
  182. static void uhci_insert_td_frame_list(struct uhci *uhci, struct uhci_td *td, unsigned framenum)
  183. {
  184. unsigned long flags;
  185. framenum %= UHCI_NUMFRAMES;
  186. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  187. td->frame = framenum;
  188. /* Is there a TD already mapped there? */
  189. if (uhci->fl->frame_cpu[framenum]) {
  190. struct uhci_td *ftd, *ltd;
  191. ftd = uhci->fl->frame_cpu[framenum];
  192. ltd = list_entry(ftd->fl_list.prev, struct uhci_td, fl_list);
  193. list_add_tail(&td->fl_list, &ftd->fl_list);
  194. td->link = ltd->link;
  195. mb();
  196. ltd->link = td->dma_handle;
  197. } else {
  198. td->link = uhci->fl->frame[framenum];
  199. mb();
  200. uhci->fl->frame[framenum] = td->dma_handle;
  201. uhci->fl->frame_cpu[framenum] = td;
  202. }
  203. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  204. }
  205. static void uhci_remove_td(struct uhci *uhci, struct uhci_td *td)
  206. {
  207. unsigned long flags;
  208. /* If it's not inserted, don't remove it */
  209. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  210. if (td->frame == -1 && list_empty(&td->fl_list))
  211. goto out;
  212. if (td->frame != -1 && uhci->fl->frame_cpu[td->frame] == td) {
  213. if (list_empty(&td->fl_list)) {
  214. uhci->fl->frame[td->frame] = td->link;
  215. uhci->fl->frame_cpu[td->frame] = NULL;
  216. } else {
  217. struct uhci_td *ntd;
  218. ntd = list_entry(td->fl_list.next, struct uhci_td, fl_list);
  219. uhci->fl->frame[td->frame] = ntd->dma_handle;
  220. uhci->fl->frame_cpu[td->frame] = ntd;
  221. }
  222. } else {
  223. struct uhci_td *ptd;
  224. ptd = list_entry(td->fl_list.prev, struct uhci_td, fl_list);
  225. ptd->link = td->link;
  226. }
  227. mb();
  228. td->link = UHCI_PTR_TERM;
  229. list_del_init(&td->fl_list);
  230. td->frame = -1;
  231. out:
  232. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  233. }
  234. /*
  235.  * Inserts a td into qh list at the top.
  236.  */
  237. static void uhci_insert_tds_in_qh(struct uhci_qh *qh, struct urb *urb, int breadth)
  238. {
  239. struct list_head *tmp, *head;
  240. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  241. struct uhci_td *td, *ptd;
  242. if (list_empty(&urbp->td_list))
  243. return;
  244. head = &urbp->td_list;
  245. tmp = head->next;
  246. /* Ordering isn't important here yet since the QH hasn't been */
  247. /*  inserted into the schedule yet */
  248. td = list_entry(tmp, struct uhci_td, list);
  249. /* Add the first TD to the QH element pointer */
  250. qh->element = td->dma_handle | (breadth ? 0 : UHCI_PTR_DEPTH);
  251. ptd = td;
  252. /* Then link the rest of the TD's */
  253. tmp = tmp->next;
  254. while (tmp != head) {
  255. td = list_entry(tmp, struct uhci_td, list);
  256. tmp = tmp->next;
  257. ptd->link = td->dma_handle | (breadth ? 0 : UHCI_PTR_DEPTH);
  258. ptd = td;
  259. }
  260. ptd->link = UHCI_PTR_TERM;
  261. }
  262. static void uhci_free_td(struct uhci *uhci, struct uhci_td *td)
  263. {
  264. if (!list_empty(&td->list) || !list_empty(&td->fl_list))
  265. dbg("td is still in URB list!");
  266. if (td->dev)
  267. usb_dec_dev_use(td->dev);
  268. pci_pool_free(uhci->td_pool, td, td->dma_handle);
  269. }
  270. static struct uhci_qh *uhci_alloc_qh(struct uhci *uhci, struct usb_device *dev)
  271. {
  272. dma_addr_t dma_handle;
  273. struct uhci_qh *qh;
  274. qh = pci_pool_alloc(uhci->qh_pool, GFP_DMA | GFP_ATOMIC, &dma_handle);
  275. if (!qh)
  276. return NULL;
  277. qh->dma_handle = dma_handle;
  278. qh->element = UHCI_PTR_TERM;
  279. qh->link = UHCI_PTR_TERM;
  280. qh->dev = dev;
  281. qh->urbp = NULL;
  282. INIT_LIST_HEAD(&qh->list);
  283. INIT_LIST_HEAD(&qh->remove_list);
  284. usb_inc_dev_use(dev);
  285. return qh;
  286. }
  287. static void uhci_free_qh(struct uhci *uhci, struct uhci_qh *qh)
  288. {
  289. if (!list_empty(&qh->list))
  290. dbg("qh list not empty!");
  291. if (!list_empty(&qh->remove_list))
  292. dbg("qh still in remove_list!");
  293. if (qh->dev)
  294. usb_dec_dev_use(qh->dev);
  295. pci_pool_free(uhci->qh_pool, qh, qh->dma_handle);
  296. }
  297. /*
  298.  * MUST be called with uhci->frame_list_lock acquired
  299.  */
  300. static void _uhci_insert_qh(struct uhci *uhci, struct uhci_qh *skelqh, struct urb *urb)
  301. {
  302. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  303. struct list_head *head, *tmp;
  304. struct uhci_qh *lqh;
  305. /* Grab the last QH */
  306. lqh = list_entry(skelqh->list.prev, struct uhci_qh, list);
  307. if (lqh->urbp) {
  308. head = &lqh->urbp->queue_list;
  309. tmp = head->next;
  310. while (head != tmp) {
  311. struct urb_priv *turbp =
  312. list_entry(tmp, struct urb_priv, queue_list);
  313. tmp = tmp->next;
  314. turbp->qh->link = urbp->qh->dma_handle | UHCI_PTR_QH;
  315. }
  316. }
  317. head = &urbp->queue_list;
  318. tmp = head->next;
  319. while (head != tmp) {
  320. struct urb_priv *turbp =
  321. list_entry(tmp, struct urb_priv, queue_list);
  322. tmp = tmp->next;
  323. turbp->qh->link = lqh->link;
  324. }
  325. urbp->qh->link = lqh->link;
  326. mb(); /* Ordering is important */
  327. lqh->link = urbp->qh->dma_handle | UHCI_PTR_QH;
  328. list_add_tail(&urbp->qh->list, &skelqh->list);
  329. }
  330. static void uhci_insert_qh(struct uhci *uhci, struct uhci_qh *skelqh, struct urb *urb)
  331. {
  332. unsigned long flags;
  333. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  334. _uhci_insert_qh(uhci, skelqh, urb);
  335. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  336. }
  337. static void uhci_remove_qh(struct uhci *uhci, struct uhci_qh *qh)
  338. {
  339. unsigned long flags;
  340. struct uhci_qh *pqh;
  341. if (!qh)
  342. return;
  343. qh->urbp = NULL;
  344. /* Only go through the hoops if it's actually linked in */
  345. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  346. if (!list_empty(&qh->list)) {
  347. pqh = list_entry(qh->list.prev, struct uhci_qh, list);
  348. if (pqh->urbp) {
  349. struct list_head *head, *tmp;
  350. head = &pqh->urbp->queue_list;
  351. tmp = head->next;
  352. while (head != tmp) {
  353. struct urb_priv *turbp =
  354. list_entry(tmp, struct urb_priv, queue_list);
  355. tmp = tmp->next;
  356. turbp->qh->link = qh->link;
  357. }
  358. }
  359. pqh->link = qh->link;
  360. mb();
  361. qh->element = qh->link = UHCI_PTR_TERM;
  362. list_del_init(&qh->list);
  363. }
  364. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  365. spin_lock_irqsave(&uhci->qh_remove_list_lock, flags);
  366. /* Check to see if the remove list is empty. Set the IOC bit */
  367. /* to force an interrupt so we can remove the QH */
  368. if (list_empty(&uhci->qh_remove_list))
  369. uhci_set_next_interrupt(uhci);
  370. list_add(&qh->remove_list, &uhci->qh_remove_list);
  371. spin_unlock_irqrestore(&uhci->qh_remove_list_lock, flags);
  372. }
  373. static int uhci_fixup_toggle(struct urb *urb, unsigned int toggle)
  374. {
  375. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  376. struct list_head *head, *tmp;
  377. head = &urbp->td_list;
  378. tmp = head->next;
  379. while (head != tmp) {
  380. struct uhci_td *td = list_entry(tmp, struct uhci_td, list);
  381. tmp = tmp->next;
  382. if (toggle)
  383. td->info |= TD_TOKEN_TOGGLE;
  384. else
  385. td->info &= ~TD_TOKEN_TOGGLE;
  386. toggle ^= 1;
  387. }
  388. return toggle;
  389. }
  390. /* This function will append one URB's QH to another URB's QH. This is for */
  391. /*  USB_QUEUE_BULK support for bulk transfers and soon implicitily for */
  392. /*  control transfers */
  393. static void uhci_append_queued_urb(struct uhci *uhci, struct urb *eurb, struct urb *urb)
  394. {
  395. struct urb_priv *eurbp, *urbp, *furbp, *lurbp;
  396. struct list_head *tmp;
  397. struct uhci_td *lltd;
  398. unsigned long flags;
  399. eurbp = eurb->hcpriv;
  400. urbp = urb->hcpriv;
  401. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  402. /* Find the first URB in the queue */
  403. if (eurbp->queued) {
  404. struct list_head *head = &eurbp->queue_list;
  405. tmp = head->next;
  406. while (tmp != head) {
  407. struct urb_priv *turbp =
  408. list_entry(tmp, struct urb_priv, queue_list);
  409. if (!turbp->queued)
  410. break;
  411. tmp = tmp->next;
  412. }
  413. } else
  414. tmp = &eurbp->queue_list;
  415. furbp = list_entry(tmp, struct urb_priv, queue_list);
  416. lurbp = list_entry(furbp->queue_list.prev, struct urb_priv, queue_list);
  417. lltd = list_entry(lurbp->td_list.prev, struct uhci_td, list);
  418. usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe),
  419. uhci_fixup_toggle(urb, uhci_toggle(lltd->info) ^ 1));
  420. /* All qh's in the queue need to link to the next queue */
  421. urbp->qh->link = eurbp->qh->link;
  422. mb(); /* Make sure we flush everything */
  423. /* Only support bulk right now, so no depth */
  424. lltd->link = urbp->qh->dma_handle | UHCI_PTR_QH;
  425. list_add_tail(&urbp->queue_list, &furbp->queue_list);
  426. urbp->queued = 1;
  427. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  428. }
  429. static void uhci_delete_queued_urb(struct uhci *uhci, struct urb *urb)
  430. {
  431. struct urb_priv *urbp, *nurbp;
  432. struct list_head *head, *tmp;
  433. struct urb_priv *purbp;
  434. struct uhci_td *pltd;
  435. unsigned int toggle;
  436. unsigned long flags;
  437. urbp = urb->hcpriv;
  438. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  439. if (list_empty(&urbp->queue_list))
  440. goto out;
  441. nurbp = list_entry(urbp->queue_list.next, struct urb_priv, queue_list);
  442. /* Fix up the toggle for the next URB's */
  443. if (!urbp->queued)
  444. /* We set the toggle when we unlink */
  445. toggle = usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe));
  446. else {
  447. /* If we're in the middle of the queue, grab the toggle */
  448. /*  from the TD previous to us */
  449. purbp = list_entry(urbp->queue_list.prev, struct urb_priv,
  450. queue_list);
  451. pltd = list_entry(purbp->td_list.prev, struct uhci_td, list);
  452. toggle = uhci_toggle(pltd->info) ^ 1;
  453. }
  454. head = &urbp->queue_list;
  455. tmp = head->next;
  456. while (head != tmp) {
  457. struct urb_priv *turbp;
  458. turbp = list_entry(tmp, struct urb_priv, queue_list);
  459. tmp = tmp->next;
  460. if (!turbp->queued)
  461. break;
  462. toggle = uhci_fixup_toggle(turbp->urb, toggle);
  463. }
  464. usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
  465. usb_pipeout(urb->pipe), toggle);
  466. if (!urbp->queued) {
  467. nurbp->queued = 0;
  468. _uhci_insert_qh(uhci, uhci->skel_bulk_qh, nurbp->urb);
  469. } else {
  470. /* We're somewhere in the middle (or end). A bit trickier */
  471. /*  than the head scenario */
  472. purbp = list_entry(urbp->queue_list.prev, struct urb_priv,
  473. queue_list);
  474. pltd = list_entry(purbp->td_list.prev, struct uhci_td, list);
  475. if (nurbp->queued)
  476. pltd->link = nurbp->qh->dma_handle | UHCI_PTR_QH;
  477. else
  478. /* The next URB happens to be the beginning, so */
  479. /*  we're the last, end the chain */
  480. pltd->link = UHCI_PTR_TERM;
  481. }
  482. list_del_init(&urbp->queue_list);
  483. out:
  484. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  485. }
  486. static struct urb_priv *uhci_alloc_urb_priv(struct uhci *uhci, struct urb *urb)
  487. {
  488. struct urb_priv *urbp;
  489. urbp = kmem_cache_alloc(uhci_up_cachep, SLAB_ATOMIC);
  490. if (!urbp) {
  491. err("uhci_alloc_urb_priv: couldn't allocate memory for urb_privn");
  492. return NULL;
  493. }
  494. memset((void *)urbp, 0, sizeof(*urbp));
  495. urbp->inserttime = jiffies;
  496. urbp->fsbrtime = jiffies;
  497. urbp->urb = urb;
  498. urbp->dev = urb->dev;
  499. INIT_LIST_HEAD(&urbp->td_list);
  500. INIT_LIST_HEAD(&urbp->queue_list);
  501. INIT_LIST_HEAD(&urbp->complete_list);
  502. urb->hcpriv = urbp;
  503. if (urb->dev != uhci->rh.dev) {
  504. if (urb->transfer_buffer_length) {
  505. urbp->transfer_buffer_dma_handle = pci_map_single(uhci->dev,
  506. urb->transfer_buffer, urb->transfer_buffer_length,
  507. usb_pipein(urb->pipe) ? PCI_DMA_FROMDEVICE :
  508. PCI_DMA_TODEVICE);
  509. if (!urbp->transfer_buffer_dma_handle)
  510. return NULL;
  511. }
  512. if (usb_pipetype(urb->pipe) == PIPE_CONTROL && urb->setup_packet) {
  513. urbp->setup_packet_dma_handle = pci_map_single(uhci->dev,
  514. urb->setup_packet, sizeof(struct usb_ctrlrequest),
  515. PCI_DMA_TODEVICE);
  516. if (!urbp->setup_packet_dma_handle)
  517. return NULL;
  518. }
  519. }
  520. return urbp;
  521. }
  522. /*
  523.  * MUST be called with urb->lock acquired
  524.  */
  525. static void uhci_add_td_to_urb(struct urb *urb, struct uhci_td *td)
  526. {
  527. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  528. td->urb = urb;
  529. list_add_tail(&td->list, &urbp->td_list);
  530. }
  531. /*
  532.  * MUST be called with urb->lock acquired
  533.  */
  534. static void uhci_remove_td_from_urb(struct uhci_td *td)
  535. {
  536. if (list_empty(&td->list))
  537. return;
  538. list_del_init(&td->list);
  539. td->urb = NULL;
  540. }
  541. /*
  542.  * MUST be called with urb->lock acquired
  543.  */
  544. static void uhci_destroy_urb_priv(struct urb *urb)
  545. {
  546. struct list_head *head, *tmp;
  547. struct urb_priv *urbp;
  548. struct uhci *uhci;
  549. urbp = (struct urb_priv *)urb->hcpriv;
  550. if (!urbp)
  551. return;
  552. if (!urbp->dev || !urbp->dev->bus || !urbp->dev->bus->hcpriv) {
  553. warn("uhci_destroy_urb_priv: urb %p belongs to disconnected device or bus?", urb);
  554. return;
  555. }
  556. if (!list_empty(&urb->urb_list))
  557. warn("uhci_destroy_urb_priv: urb %p still on uhci->urb_list or uhci->remove_list", urb);
  558. if (!list_empty(&urbp->complete_list))
  559. warn("uhci_destroy_urb_priv: urb %p still on uhci->complete_list", urb);
  560. uhci = urbp->dev->bus->hcpriv;
  561. head = &urbp->td_list;
  562. tmp = head->next;
  563. while (tmp != head) {
  564. struct uhci_td *td = list_entry(tmp, struct uhci_td, list);
  565. tmp = tmp->next;
  566. uhci_remove_td_from_urb(td);
  567. uhci_remove_td(uhci, td);
  568. uhci_free_td(uhci, td);
  569. }
  570. if (urbp->setup_packet_dma_handle) {
  571. pci_unmap_single(uhci->dev, urbp->setup_packet_dma_handle,
  572. sizeof(struct usb_ctrlrequest), PCI_DMA_TODEVICE);
  573. urbp->setup_packet_dma_handle = 0;
  574. }
  575. if (urbp->transfer_buffer_dma_handle) {
  576. pci_unmap_single(uhci->dev, urbp->transfer_buffer_dma_handle,
  577. urb->transfer_buffer_length, usb_pipein(urb->pipe) ?
  578. PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE);
  579. urbp->transfer_buffer_dma_handle = 0;
  580. }
  581. urb->hcpriv = NULL;
  582. kmem_cache_free(uhci_up_cachep, urbp);
  583. }
  584. static void uhci_inc_fsbr(struct uhci *uhci, struct urb *urb)
  585. {
  586. unsigned long flags;
  587. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  588. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  589. if ((!(urb->transfer_flags & USB_NO_FSBR)) && !urbp->fsbr) {
  590. urbp->fsbr = 1;
  591. if (!uhci->fsbr++ && !uhci->fsbrtimeout)
  592. uhci->skel_term_qh->link = uhci->skel_hs_control_qh->dma_handle | UHCI_PTR_QH;
  593. }
  594. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  595. }
  596. static void uhci_dec_fsbr(struct uhci *uhci, struct urb *urb)
  597. {
  598. unsigned long flags;
  599. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  600. spin_lock_irqsave(&uhci->frame_list_lock, flags);
  601. if ((!(urb->transfer_flags & USB_NO_FSBR)) && urbp->fsbr) {
  602. urbp->fsbr = 0;
  603. if (!--uhci->fsbr)
  604. uhci->fsbrtimeout = jiffies + FSBR_DELAY;
  605. }
  606. spin_unlock_irqrestore(&uhci->frame_list_lock, flags);
  607. }
  608. /*
  609.  * Map status to standard result codes
  610.  *
  611.  * <status> is (td->status & 0xFE0000) [a.k.a. uhci_status_bits(td->status)]
  612.  * <dir_out> is True for output TDs and False for input TDs.
  613.  */
  614. static int uhci_map_status(int status, int dir_out)
  615. {
  616. if (!status)
  617. return 0;
  618. if (status & TD_CTRL_BITSTUFF) /* Bitstuff error */
  619. return -EPROTO;
  620. if (status & TD_CTRL_CRCTIMEO) { /* CRC/Timeout */
  621. if (dir_out)
  622. return -ETIMEDOUT;
  623. else
  624. return -EILSEQ;
  625. }
  626. if (status & TD_CTRL_NAK) /* NAK */
  627. return -ETIMEDOUT;
  628. if (status & TD_CTRL_BABBLE) /* Babble */
  629. return -EOVERFLOW;
  630. if (status & TD_CTRL_DBUFERR) /* Buffer error */
  631. return -ENOSR;
  632. if (status & TD_CTRL_STALLED) /* Stalled */
  633. return -EPIPE;
  634. if (status & TD_CTRL_ACTIVE) /* Active */
  635. return 0;
  636. return -EINVAL;
  637. }
  638. /*
  639.  * Control transfers
  640.  */
  641. static int uhci_submit_control(struct urb *urb)
  642. {
  643. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  644. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  645. struct uhci_td *td;
  646. struct uhci_qh *qh;
  647. unsigned long destination, status;
  648. int maxsze = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
  649. int len = urb->transfer_buffer_length;
  650. dma_addr_t data = urbp->transfer_buffer_dma_handle;
  651. /* The "pipe" thing contains the destination in bits 8--18 */
  652. destination = (urb->pipe & PIPE_DEVEP_MASK) | USB_PID_SETUP;
  653. /* 3 errors */
  654. status = (urb->pipe & TD_CTRL_LS) | TD_CTRL_ACTIVE | (3 << 27);
  655. /*
  656.  * Build the TD for the control request
  657.  */
  658. td = uhci_alloc_td(uhci, urb->dev);
  659. if (!td)
  660. return -ENOMEM;
  661. uhci_add_td_to_urb(urb, td);
  662. uhci_fill_td(td, status, destination | (7 << 21),
  663. urbp->setup_packet_dma_handle);
  664. /*
  665.  * If direction is "send", change the frame from SETUP (0x2D)
  666.  * to OUT (0xE1). Else change it from SETUP to IN (0x69).
  667.  */
  668. destination ^= (USB_PID_SETUP ^ usb_packetid(urb->pipe));
  669. if (!(urb->transfer_flags & USB_DISABLE_SPD))
  670. status |= TD_CTRL_SPD;
  671. /*
  672.  * Build the DATA TD's
  673.  */
  674. while (len > 0) {
  675. int pktsze = len;
  676. if (pktsze > maxsze)
  677. pktsze = maxsze;
  678. td = uhci_alloc_td(uhci, urb->dev);
  679. if (!td)
  680. return -ENOMEM;
  681. /* Alternate Data0/1 (start with Data1) */
  682. destination ^= TD_TOKEN_TOGGLE;
  683. uhci_add_td_to_urb(urb, td);
  684. uhci_fill_td(td, status, destination | ((pktsze - 1) << 21),
  685. data);
  686. data += pktsze;
  687. len -= pktsze;
  688. }
  689. /*
  690.  * Build the final TD for control status 
  691.  */
  692. td = uhci_alloc_td(uhci, urb->dev);
  693. if (!td)
  694. return -ENOMEM;
  695. /*
  696.  * It's IN if the pipe is an output pipe or we're not expecting
  697.  * data back.
  698.  */
  699. destination &= ~TD_TOKEN_PID_MASK;
  700. if (usb_pipeout(urb->pipe) || !urb->transfer_buffer_length)
  701. destination |= USB_PID_IN;
  702. else
  703. destination |= USB_PID_OUT;
  704. destination |= TD_TOKEN_TOGGLE; /* End in Data1 */
  705. status &= ~TD_CTRL_SPD;
  706. uhci_add_td_to_urb(urb, td);
  707. uhci_fill_td(td, status | TD_CTRL_IOC,
  708. destination | (UHCI_NULL_DATA_SIZE << 21), 0);
  709. qh = uhci_alloc_qh(uhci, urb->dev);
  710. if (!qh)
  711. return -ENOMEM;
  712. urbp->qh = qh;
  713. qh->urbp = urbp;
  714. /* Low speed or small transfers gets a different queue and treatment */
  715. if (urb->pipe & TD_CTRL_LS) {
  716. uhci_insert_tds_in_qh(qh, urb, 0);
  717. uhci_insert_qh(uhci, uhci->skel_ls_control_qh, urb);
  718. } else {
  719. uhci_insert_tds_in_qh(qh, urb, 1);
  720. uhci_insert_qh(uhci, uhci->skel_hs_control_qh, urb);
  721. uhci_inc_fsbr(uhci, urb);
  722. }
  723. return -EINPROGRESS;
  724. }
  725. static int usb_control_retrigger_status(struct urb *urb);
  726. static int uhci_result_control(struct urb *urb)
  727. {
  728. struct list_head *tmp, *head;
  729. struct urb_priv *urbp = urb->hcpriv;
  730. struct uhci_td *td;
  731. unsigned int status;
  732. int ret = 0;
  733. if (list_empty(&urbp->td_list))
  734. return -EINVAL;
  735. head = &urbp->td_list;
  736. if (urbp->short_control_packet) {
  737. tmp = head->prev;
  738. goto status_phase;
  739. }
  740. tmp = head->next;
  741. td = list_entry(tmp, struct uhci_td, list);
  742. /* The first TD is the SETUP phase, check the status, but skip */
  743. /*  the count */
  744. status = uhci_status_bits(td->status);
  745. if (status & TD_CTRL_ACTIVE)
  746. return -EINPROGRESS;
  747. if (status)
  748. goto td_error;
  749. urb->actual_length = 0;
  750. /* The rest of the TD's (but the last) are data */
  751. tmp = tmp->next;
  752. while (tmp != head && tmp->next != head) {
  753. td = list_entry(tmp, struct uhci_td, list);
  754. tmp = tmp->next;
  755. status = uhci_status_bits(td->status);
  756. if (status & TD_CTRL_ACTIVE)
  757. return -EINPROGRESS;
  758. urb->actual_length += uhci_actual_length(td->status);
  759. if (status)
  760. goto td_error;
  761. /* Check to see if we received a short packet */
  762. if (uhci_actual_length(td->status) < uhci_expected_length(td->info)) {
  763. if (urb->transfer_flags & USB_DISABLE_SPD) {
  764. ret = -EREMOTEIO;
  765. goto err;
  766. }
  767. if (uhci_packetid(td->info) == USB_PID_IN)
  768. return usb_control_retrigger_status(urb);
  769. else
  770. return 0;
  771. }
  772. }
  773. status_phase:
  774. td = list_entry(tmp, struct uhci_td, list);
  775. /* Control status phase */
  776. status = uhci_status_bits(td->status);
  777. #ifdef I_HAVE_BUGGY_APC_BACKUPS
  778. /* APC BackUPS Pro kludge */
  779. /* It tries to send all of the descriptor instead of the amount */
  780. /*  we requested */
  781. if (td->status & TD_CTRL_IOC && /* IOC is masked out by uhci_status_bits */
  782.     status & TD_CTRL_ACTIVE &&
  783.     status & TD_CTRL_NAK)
  784. return 0;
  785. #endif
  786. if (status & TD_CTRL_ACTIVE)
  787. return -EINPROGRESS;
  788. if (status)
  789. goto td_error;
  790. return 0;
  791. td_error:
  792. ret = uhci_map_status(status, uhci_packetout(td->info));
  793. if (ret == -EPIPE)
  794. /* endpoint has stalled - mark it halted */
  795. usb_endpoint_halt(urb->dev, uhci_endpoint(td->info),
  796.      uhci_packetout(td->info));
  797. err:
  798. if ((debug == 1 && ret != -EPIPE) || debug > 1) {
  799. /* Some debugging code */
  800. dbg("uhci_result_control() failed with status %x", status);
  801. if (errbuf) {
  802. /* Print the chain for debugging purposes */
  803. uhci_show_qh(urbp->qh, errbuf, ERRBUF_LEN, 0);
  804. lprintk(errbuf);
  805. }
  806. }
  807. return ret;
  808. }
  809. static int usb_control_retrigger_status(struct urb *urb)
  810. {
  811. struct list_head *tmp, *head;
  812. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  813. struct uhci *uhci = urb->dev->bus->hcpriv;
  814. urbp->short_control_packet = 1;
  815. /* Create a new QH to avoid pointer overwriting problems */
  816. uhci_remove_qh(uhci, urbp->qh);
  817. /* Delete all of the TD's except for the status TD at the end */
  818. head = &urbp->td_list;
  819. tmp = head->next;
  820. while (tmp != head && tmp->next != head) {
  821. struct uhci_td *td = list_entry(tmp, struct uhci_td, list);
  822. tmp = tmp->next;
  823. uhci_remove_td_from_urb(td);
  824. uhci_remove_td(uhci, td);
  825. uhci_free_td(uhci, td);
  826. }
  827. urbp->qh = uhci_alloc_qh(uhci, urb->dev);
  828. if (!urbp->qh) {
  829. err("unable to allocate new QH for control retrigger");
  830. return -ENOMEM;
  831. }
  832. urbp->qh->urbp = urbp;
  833. /* One TD, who cares about Breadth first? */
  834. uhci_insert_tds_in_qh(urbp->qh, urb, 0);
  835. /* Low speed or small transfers gets a different queue and treatment */
  836. if (urb->pipe & TD_CTRL_LS)
  837. uhci_insert_qh(uhci, uhci->skel_ls_control_qh, urb);
  838. else
  839. uhci_insert_qh(uhci, uhci->skel_hs_control_qh, urb);
  840. return -EINPROGRESS;
  841. }
  842. /*
  843.  * Interrupt transfers
  844.  */
  845. static int uhci_submit_interrupt(struct urb *urb)
  846. {
  847. struct uhci_td *td;
  848. unsigned long destination, status;
  849. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  850. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  851. if (urb->transfer_buffer_length > usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)))
  852. return -EINVAL;
  853. /* The "pipe" thing contains the destination in bits 8--18 */
  854. destination = (urb->pipe & PIPE_DEVEP_MASK) | usb_packetid(urb->pipe);
  855. status = (urb->pipe & TD_CTRL_LS) | TD_CTRL_ACTIVE | TD_CTRL_IOC;
  856. td = uhci_alloc_td(uhci, urb->dev);
  857. if (!td)
  858. return -ENOMEM;
  859. destination |= (usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe)) << TD_TOKEN_TOGGLE_SHIFT);
  860. destination |= ((urb->transfer_buffer_length - 1) << 21);
  861. usb_dotoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe));
  862. uhci_add_td_to_urb(urb, td);
  863. uhci_fill_td(td, status, destination, urbp->transfer_buffer_dma_handle);
  864. uhci_insert_td(uhci, uhci->skeltd[__interval_to_skel(urb->interval)], td);
  865. return -EINPROGRESS;
  866. }
  867. static int uhci_result_interrupt(struct urb *urb)
  868. {
  869. struct list_head *tmp, *head;
  870. struct urb_priv *urbp = urb->hcpriv;
  871. struct uhci_td *td;
  872. unsigned int status;
  873. int ret = 0;
  874. urb->actual_length = 0;
  875. head = &urbp->td_list;
  876. tmp = head->next;
  877. while (tmp != head) {
  878. td = list_entry(tmp, struct uhci_td, list);
  879. tmp = tmp->next;
  880. status = uhci_status_bits(td->status);
  881. if (status & TD_CTRL_ACTIVE)
  882. return -EINPROGRESS;
  883. urb->actual_length += uhci_actual_length(td->status);
  884. if (status)
  885. goto td_error;
  886. if (uhci_actual_length(td->status) < uhci_expected_length(td->info)) {
  887. if (urb->transfer_flags & USB_DISABLE_SPD) {
  888. ret = -EREMOTEIO;
  889. goto err;
  890. } else
  891. return 0;
  892. }
  893. }
  894. return 0;
  895. td_error:
  896. ret = uhci_map_status(status, uhci_packetout(td->info));
  897. if (ret == -EPIPE)
  898. /* endpoint has stalled - mark it halted */
  899. usb_endpoint_halt(urb->dev, uhci_endpoint(td->info),
  900.      uhci_packetout(td->info));
  901. err:
  902. if ((debug == 1 && ret != -EPIPE) || debug > 1) {
  903. /* Some debugging code */
  904. dbg("uhci_result_interrupt/bulk() failed with status %x",
  905. status);
  906. if (errbuf) {
  907. /* Print the chain for debugging purposes */
  908. if (urbp->qh)
  909. uhci_show_qh(urbp->qh, errbuf, ERRBUF_LEN, 0);
  910. else
  911. uhci_show_td(td, errbuf, ERRBUF_LEN, 0);
  912. lprintk(errbuf);
  913. }
  914. }
  915. return ret;
  916. }
  917. static void uhci_reset_interrupt(struct urb *urb)
  918. {
  919. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  920. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  921. struct uhci_td *td;
  922. unsigned long flags;
  923. spin_lock_irqsave(&urb->lock, flags);
  924. /* Root hub is special */
  925. if (urb->dev == uhci->rh.dev)
  926. goto out;
  927. td = list_entry(urbp->td_list.next, struct uhci_td, list);
  928. td->status = (td->status & 0x2F000000) | TD_CTRL_ACTIVE | TD_CTRL_IOC;
  929. td->info &= ~TD_TOKEN_TOGGLE;
  930. td->info |= (usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe)) << TD_TOKEN_TOGGLE_SHIFT);
  931. usb_dotoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe));
  932. out:
  933. urb->status = -EINPROGRESS;
  934. spin_unlock_irqrestore(&urb->lock, flags);
  935. }
  936. /*
  937.  * Bulk transfers
  938.  */
  939. static int uhci_submit_bulk(struct urb *urb, struct urb *eurb)
  940. {
  941. struct uhci_td *td;
  942. struct uhci_qh *qh;
  943. unsigned long destination, status;
  944. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  945. int maxsze = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
  946. int len = urb->transfer_buffer_length;
  947. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  948. dma_addr_t data = urbp->transfer_buffer_dma_handle;
  949. if (len < 0)
  950. return -EINVAL;
  951. /* Can't have low speed bulk transfers */
  952. if (urb->pipe & TD_CTRL_LS)
  953. return -EINVAL;
  954. /* The "pipe" thing contains the destination in bits 8--18 */
  955. destination = (urb->pipe & PIPE_DEVEP_MASK) | usb_packetid(urb->pipe);
  956. /* 3 errors */
  957. status = TD_CTRL_ACTIVE | (3 << TD_CTRL_C_ERR_SHIFT);
  958. if (!(urb->transfer_flags & USB_DISABLE_SPD))
  959. status |= TD_CTRL_SPD;
  960. /*
  961.  * Build the DATA TD's
  962.  */
  963. do { /* Allow zero length packets */
  964. int pktsze = len;
  965. if (pktsze > maxsze)
  966. pktsze = maxsze;
  967. td = uhci_alloc_td(uhci, urb->dev);
  968. if (!td)
  969. return -ENOMEM;
  970. uhci_add_td_to_urb(urb, td);
  971. uhci_fill_td(td, status, destination |
  972. (((pktsze - 1) & UHCI_NULL_DATA_SIZE) << 21) |
  973. (usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe),
  974.  usb_pipeout(urb->pipe)) << TD_TOKEN_TOGGLE_SHIFT),
  975. data);
  976. data += pktsze;
  977. len -= maxsze;
  978. usb_dotoggle(urb->dev, usb_pipeendpoint(urb->pipe),
  979. usb_pipeout(urb->pipe));
  980. } while (len > 0);
  981. /*
  982.  * USB_ZERO_PACKET means adding a 0-length packet, if
  983.  * direction is OUT and the transfer_length was an
  984.  * exact multiple of maxsze, hence
  985.  * (len = transfer_length - N * maxsze) == 0
  986.  * however, if transfer_length == 0, the zero packet
  987.  * was already prepared above.
  988.  */
  989. if (usb_pipeout(urb->pipe) && (urb->transfer_flags & USB_ZERO_PACKET) &&
  990.    !len && urb->transfer_buffer_length) {
  991. td = uhci_alloc_td(uhci, urb->dev);
  992. if (!td)
  993. return -ENOMEM;
  994. uhci_add_td_to_urb(urb, td);
  995. uhci_fill_td(td, status, destination |
  996. (UHCI_NULL_DATA_SIZE << 21) |
  997. (usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe),
  998.  usb_pipeout(urb->pipe)) << TD_TOKEN_TOGGLE_SHIFT),
  999. data);
  1000. usb_dotoggle(urb->dev, usb_pipeendpoint(urb->pipe),
  1001. usb_pipeout(urb->pipe));
  1002. }
  1003. /* Set the flag on the last packet */
  1004. td->status |= TD_CTRL_IOC;
  1005. qh = uhci_alloc_qh(uhci, urb->dev);
  1006. if (!qh)
  1007. return -ENOMEM;
  1008. urbp->qh = qh;
  1009. qh->urbp = urbp;
  1010. /* Always assume breadth first */
  1011. uhci_insert_tds_in_qh(qh, urb, 1);
  1012. if (urb->transfer_flags & USB_QUEUE_BULK && eurb)
  1013. uhci_append_queued_urb(uhci, eurb, urb);
  1014. else
  1015. uhci_insert_qh(uhci, uhci->skel_bulk_qh, urb);
  1016. uhci_inc_fsbr(uhci, urb);
  1017. return -EINPROGRESS;
  1018. }
  1019. /* We can use the result interrupt since they're identical */
  1020. #define uhci_result_bulk uhci_result_interrupt
  1021. /*
  1022.  * Isochronous transfers
  1023.  */
  1024. static int isochronous_find_limits(struct urb *urb, unsigned int *start, unsigned int *end)
  1025. {
  1026. struct urb *last_urb = NULL;
  1027. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1028. struct list_head *tmp, *head;
  1029. int ret = 0;
  1030. head = &uhci->urb_list;
  1031. tmp = head->next;
  1032. while (tmp != head) {
  1033. struct urb *u = list_entry(tmp, struct urb, urb_list);
  1034. tmp = tmp->next;
  1035. /* look for pending URB's with identical pipe handle */
  1036. if ((urb->pipe == u->pipe) && (urb->dev == u->dev) &&
  1037.     (u->status == -EINPROGRESS) && (u != urb)) {
  1038. if (!last_urb)
  1039. *start = u->start_frame;
  1040. last_urb = u;
  1041. }
  1042. }
  1043. if (last_urb) {
  1044. *end = (last_urb->start_frame + last_urb->number_of_packets) & 1023;
  1045. ret = 0;
  1046. } else
  1047. ret = -1; /* no previous urb found */
  1048. return ret;
  1049. }
  1050. static int isochronous_find_start(struct urb *urb)
  1051. {
  1052. int limits;
  1053. unsigned int start = 0, end = 0;
  1054. if (urb->number_of_packets > 900) /* 900? Why? */
  1055. return -EFBIG;
  1056. limits = isochronous_find_limits(urb, &start, &end);
  1057. if (urb->transfer_flags & USB_ISO_ASAP) {
  1058. if (limits) {
  1059. int curframe;
  1060. curframe = uhci_get_current_frame_number(urb->dev) % UHCI_NUMFRAMES;
  1061. urb->start_frame = (curframe + 10) % UHCI_NUMFRAMES;
  1062. } else
  1063. urb->start_frame = end;
  1064. } else {
  1065. urb->start_frame %= UHCI_NUMFRAMES;
  1066. /* FIXME: Sanity check */
  1067. }
  1068. return 0;
  1069. }
  1070. /*
  1071.  * Isochronous transfers
  1072.  */
  1073. static int uhci_submit_isochronous(struct urb *urb)
  1074. {
  1075. struct uhci_td *td;
  1076. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1077. int i, ret, framenum;
  1078. int status, destination;
  1079. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  1080. status = TD_CTRL_ACTIVE | TD_CTRL_IOS;
  1081. destination = (urb->pipe & PIPE_DEVEP_MASK) | usb_packetid(urb->pipe);
  1082. ret = isochronous_find_start(urb);
  1083. if (ret)
  1084. return ret;
  1085. framenum = urb->start_frame;
  1086. for (i = 0; i < urb->number_of_packets; i++, framenum++) {
  1087. if (!urb->iso_frame_desc[i].length)
  1088. continue;
  1089. td = uhci_alloc_td(uhci, urb->dev);
  1090. if (!td)
  1091. return -ENOMEM;
  1092. uhci_add_td_to_urb(urb, td);
  1093. uhci_fill_td(td, status, destination | ((urb->iso_frame_desc[i].length - 1) << 21),
  1094. urbp->transfer_buffer_dma_handle + urb->iso_frame_desc[i].offset);
  1095. if (i + 1 >= urb->number_of_packets)
  1096. td->status |= TD_CTRL_IOC;
  1097. uhci_insert_td_frame_list(uhci, td, framenum);
  1098. }
  1099. return -EINPROGRESS;
  1100. }
  1101. static int uhci_result_isochronous(struct urb *urb)
  1102. {
  1103. struct list_head *tmp, *head;
  1104. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  1105. int status;
  1106. int i, ret = 0;
  1107. urb->actual_length = 0;
  1108. i = 0;
  1109. head = &urbp->td_list;
  1110. tmp = head->next;
  1111. while (tmp != head) {
  1112. struct uhci_td *td = list_entry(tmp, struct uhci_td, list);
  1113. int actlength;
  1114. tmp = tmp->next;
  1115. if (td->status & TD_CTRL_ACTIVE)
  1116. return -EINPROGRESS;
  1117. actlength = uhci_actual_length(td->status);
  1118. urb->iso_frame_desc[i].actual_length = actlength;
  1119. urb->actual_length += actlength;
  1120. status = uhci_map_status(uhci_status_bits(td->status), usb_pipeout(urb->pipe));
  1121. urb->iso_frame_desc[i].status = status;
  1122. if (status) {
  1123. urb->error_count++;
  1124. ret = status;
  1125. }
  1126. i++;
  1127. }
  1128. return ret;
  1129. }
  1130. /*
  1131.  * MUST be called with uhci->urb_list_lock acquired
  1132.  */
  1133. static struct urb *uhci_find_urb_ep(struct uhci *uhci, struct urb *urb)
  1134. {
  1135. struct list_head *tmp, *head;
  1136. /* We don't match Isoc transfers since they are special */
  1137. if (usb_pipeisoc(urb->pipe))
  1138. return NULL;
  1139. head = &uhci->urb_list;
  1140. tmp = head->next;
  1141. while (tmp != head) {
  1142. struct urb *u = list_entry(tmp, struct urb, urb_list);
  1143. tmp = tmp->next;
  1144. if (u->dev == urb->dev && u->pipe == urb->pipe &&
  1145.     u->status == -EINPROGRESS)
  1146. return u;
  1147. }
  1148. return NULL;
  1149. }
  1150. static int uhci_submit_urb(struct urb *urb)
  1151. {
  1152. int ret = -EINVAL;
  1153. struct uhci *uhci;
  1154. unsigned long flags;
  1155. struct urb *eurb;
  1156. int bustime;
  1157. if (!urb)
  1158. return -EINVAL;
  1159. if (!urb->dev || !urb->dev->bus || !urb->dev->bus->hcpriv) {
  1160. warn("uhci_submit_urb: urb %p belongs to disconnected device or bus?", urb);
  1161. return -ENODEV;
  1162. }
  1163. uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1164. INIT_LIST_HEAD(&urb->urb_list);
  1165. usb_inc_dev_use(urb->dev);
  1166. spin_lock_irqsave(&uhci->urb_list_lock, flags);
  1167. spin_lock(&urb->lock);
  1168. if (urb->status == -EINPROGRESS || urb->status == -ECONNRESET ||
  1169.     urb->status == -ECONNABORTED) {
  1170. dbg("uhci_submit_urb: urb not available to submit (status = %d)", urb->status);
  1171. /* Since we can have problems on the out path */
  1172. spin_unlock(&urb->lock);
  1173. spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
  1174. usb_dec_dev_use(urb->dev);
  1175. return ret;
  1176. }
  1177. if (!uhci_alloc_urb_priv(uhci, urb)) {
  1178. ret = -ENOMEM;
  1179. goto out;
  1180. }
  1181. eurb = uhci_find_urb_ep(uhci, urb);
  1182. if (eurb && !(urb->transfer_flags & USB_QUEUE_BULK)) {
  1183. ret = -ENXIO;
  1184. goto out;
  1185. }
  1186. /* Short circuit the virtual root hub */
  1187. if (urb->dev == uhci->rh.dev) {
  1188. ret = rh_submit_urb(urb);
  1189. goto out;
  1190. }
  1191. switch (usb_pipetype(urb->pipe)) {
  1192. case PIPE_CONTROL:
  1193. ret = uhci_submit_control(urb);
  1194. break;
  1195. case PIPE_INTERRUPT:
  1196. if (urb->bandwidth == 0) { /* not yet checked/allocated */
  1197. bustime = usb_check_bandwidth(urb->dev, urb);
  1198. if (bustime < 0)
  1199. ret = bustime;
  1200. else {
  1201. ret = uhci_submit_interrupt(urb);
  1202. if (ret == -EINPROGRESS)
  1203. usb_claim_bandwidth(urb->dev, urb, bustime, 0);
  1204. }
  1205. } else /* bandwidth is already set */
  1206. ret = uhci_submit_interrupt(urb);
  1207. break;
  1208. case PIPE_BULK:
  1209. ret = uhci_submit_bulk(urb, eurb);
  1210. break;
  1211. case PIPE_ISOCHRONOUS:
  1212. if (urb->bandwidth == 0) { /* not yet checked/allocated */
  1213. if (urb->number_of_packets <= 0) {
  1214. ret = -EINVAL;
  1215. break;
  1216. }
  1217. bustime = usb_check_bandwidth(urb->dev, urb);
  1218. if (bustime < 0) {
  1219. ret = bustime;
  1220. break;
  1221. }
  1222. ret = uhci_submit_isochronous(urb);
  1223. if (ret == -EINPROGRESS)
  1224. usb_claim_bandwidth(urb->dev, urb, bustime, 1);
  1225. } else /* bandwidth is already set */
  1226. ret = uhci_submit_isochronous(urb);
  1227. break;
  1228. }
  1229. out:
  1230. urb->status = ret;
  1231. if (ret == -EINPROGRESS) {
  1232. /* We use _tail to make find_urb_ep more efficient */
  1233. list_add_tail(&urb->urb_list, &uhci->urb_list);
  1234. spin_unlock(&urb->lock);
  1235. spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
  1236. return 0;
  1237. }
  1238. uhci_unlink_generic(uhci, urb);
  1239. spin_unlock(&urb->lock);
  1240. spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
  1241. /* Only call completion if it was successful */
  1242. if (!ret)
  1243. uhci_call_completion(urb);
  1244. return ret;
  1245. }
  1246. /*
  1247.  * Return the result of a transfer
  1248.  *
  1249.  * MUST be called with urb_list_lock acquired
  1250.  */
  1251. static void uhci_transfer_result(struct uhci *uhci, struct urb *urb)
  1252. {
  1253. int ret = -EINVAL;
  1254. unsigned long flags;
  1255. struct urb_priv *urbp;
  1256. /* The root hub is special */
  1257. if (urb->dev == uhci->rh.dev)
  1258. return;
  1259. spin_lock_irqsave(&urb->lock, flags);
  1260. urbp = (struct urb_priv *)urb->hcpriv;
  1261. if (urb->status != -EINPROGRESS) {
  1262. info("uhci_transfer_result: called for URB %p not in flight?", urb);
  1263. goto out;
  1264. }
  1265. switch (usb_pipetype(urb->pipe)) {
  1266. case PIPE_CONTROL:
  1267. ret = uhci_result_control(urb);
  1268. break;
  1269. case PIPE_INTERRUPT:
  1270. ret = uhci_result_interrupt(urb);
  1271. break;
  1272. case PIPE_BULK:
  1273. ret = uhci_result_bulk(urb);
  1274. break;
  1275. case PIPE_ISOCHRONOUS:
  1276. ret = uhci_result_isochronous(urb);
  1277. break;
  1278. }
  1279. urbp->status = ret;
  1280. if (ret == -EINPROGRESS)
  1281. goto out;
  1282. switch (usb_pipetype(urb->pipe)) {
  1283. case PIPE_CONTROL:
  1284. case PIPE_BULK:
  1285. case PIPE_ISOCHRONOUS:
  1286. /* Release bandwidth for Interrupt or Isoc. transfers */
  1287. /* Spinlock needed ? */
  1288. if (urb->bandwidth)
  1289. usb_release_bandwidth(urb->dev, urb, 1);
  1290. uhci_unlink_generic(uhci, urb);
  1291. break;
  1292. case PIPE_INTERRUPT:
  1293. /* Interrupts are an exception */
  1294. if (urb->interval)
  1295. goto out_complete;
  1296. /* Release bandwidth for Interrupt or Isoc. transfers */
  1297. /* Spinlock needed ? */
  1298. if (urb->bandwidth)
  1299. usb_release_bandwidth(urb->dev, urb, 0);
  1300. uhci_unlink_generic(uhci, urb);
  1301. break;
  1302. default:
  1303. info("uhci_transfer_result: unknown pipe type %d for urb %pn",
  1304. usb_pipetype(urb->pipe), urb);
  1305. }
  1306. /* Remove it from uhci->urb_list */
  1307. list_del_init(&urb->urb_list);
  1308. out_complete:
  1309. uhci_add_complete(urb);
  1310. out:
  1311. spin_unlock_irqrestore(&urb->lock, flags);
  1312. }
  1313. /*
  1314.  * MUST be called with urb->lock acquired
  1315.  */
  1316. static void uhci_unlink_generic(struct uhci *uhci, struct urb *urb)
  1317. {
  1318. struct list_head *head, *tmp;
  1319. struct urb_priv *urbp = urb->hcpriv;
  1320. int prevactive = 1;
  1321. /* We can get called when urbp allocation fails, so check */
  1322. if (!urbp)
  1323. return;
  1324. uhci_dec_fsbr(uhci, urb); /* Safe since it checks */
  1325. /*
  1326.  * Now we need to find out what the last successful toggle was
  1327.  * so we can update the local data toggle for the next transfer
  1328.  *
  1329.  * There's 3 way's the last successful completed TD is found:
  1330.  *
  1331.  * 1) The TD is NOT active and the actual length < expected length
  1332.  * 2) The TD is NOT active and it's the last TD in the chain
  1333.  * 3) The TD is active and the previous TD is NOT active
  1334.  *
  1335.  * Control and Isochronous ignore the toggle, so this is safe
  1336.  * for all types
  1337.  */
  1338. head = &urbp->td_list;
  1339. tmp = head->next;
  1340. while (tmp != head) {
  1341. struct uhci_td *td = list_entry(tmp, struct uhci_td, list);
  1342. tmp = tmp->next;
  1343. if (!(td->status & TD_CTRL_ACTIVE) &&
  1344.     (uhci_actual_length(td->status) < uhci_expected_length(td->info) ||
  1345.     tmp == head))
  1346. usb_settoggle(urb->dev, uhci_endpoint(td->info),
  1347. uhci_packetout(td->info),
  1348. uhci_toggle(td->info) ^ 1);
  1349. else if ((td->status & TD_CTRL_ACTIVE) && !prevactive)
  1350. usb_settoggle(urb->dev, uhci_endpoint(td->info),
  1351. uhci_packetout(td->info),
  1352. uhci_toggle(td->info));
  1353. prevactive = td->status & TD_CTRL_ACTIVE;
  1354. }
  1355. uhci_delete_queued_urb(uhci, urb);
  1356. /* The interrupt loop will reclaim the QH's */
  1357. uhci_remove_qh(uhci, urbp->qh);
  1358. urbp->qh = NULL;
  1359. }
  1360. static int uhci_unlink_urb(struct urb *urb)
  1361. {
  1362. struct uhci *uhci;
  1363. unsigned long flags;
  1364. struct urb_priv *urbp = urb->hcpriv;
  1365. if (!urb)
  1366. return -EINVAL;
  1367. if (!urb->dev || !urb->dev->bus || !urb->dev->bus->hcpriv)
  1368. return -ENODEV;
  1369. uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1370. spin_lock_irqsave(&uhci->urb_list_lock, flags);
  1371. spin_lock(&urb->lock);
  1372. /* Release bandwidth for Interrupt or Isoc. transfers */
  1373. /* Spinlock needed ? */
  1374. if (urb->bandwidth) {
  1375. switch (usb_pipetype(urb->pipe)) {
  1376. case PIPE_INTERRUPT:
  1377. usb_release_bandwidth(urb->dev, urb, 0);
  1378. break;
  1379. case PIPE_ISOCHRONOUS:
  1380. usb_release_bandwidth(urb->dev, urb, 1);
  1381. break;
  1382. default:
  1383. break;
  1384. }
  1385. }
  1386. if (urb->status != -EINPROGRESS) {
  1387. spin_unlock(&urb->lock);
  1388. spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
  1389. return 0;
  1390. }
  1391. list_del_init(&urb->urb_list);
  1392. uhci_unlink_generic(uhci, urb);
  1393. /* Short circuit the virtual root hub */
  1394. if (urb->dev == uhci->rh.dev) {
  1395. rh_unlink_urb(urb);
  1396. spin_unlock(&urb->lock);
  1397. spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
  1398. uhci_call_completion(urb);
  1399. } else {
  1400. if (urb->transfer_flags & USB_ASYNC_UNLINK) {
  1401. urbp->status = urb->status = -ECONNABORTED;
  1402. spin_lock(&uhci->urb_remove_list_lock);
  1403. /* If we're the first, set the next interrupt bit */
  1404. if (list_empty(&uhci->urb_remove_list))
  1405. uhci_set_next_interrupt(uhci);
  1406. list_add(&urb->urb_list, &uhci->urb_remove_list);
  1407. spin_unlock(&uhci->urb_remove_list_lock);
  1408. spin_unlock(&urb->lock);
  1409. spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
  1410. } else {
  1411. urb->status = -ENOENT;
  1412. spin_unlock(&urb->lock);
  1413. spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
  1414. if (in_interrupt()) { /* wait at least 1 frame */
  1415. static int errorcount = 10;
  1416. if (errorcount--)
  1417. dbg("uhci_unlink_urb called from interrupt for urb %p", urb);
  1418. udelay(1000);
  1419. } else
  1420. schedule_timeout(1+1*HZ/1000); 
  1421. uhci_call_completion(urb);
  1422. }
  1423. }
  1424. return 0;
  1425. }
  1426. static int uhci_fsbr_timeout(struct uhci *uhci, struct urb *urb)
  1427. {
  1428. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  1429. struct list_head *head, *tmp;
  1430. int count = 0;
  1431. uhci_dec_fsbr(uhci, urb);
  1432. urbp->fsbr_timeout = 1;
  1433. /*
  1434.  * Ideally we would want to fix qh->element as well, but it's
  1435.  * read/write by the HC, so that can introduce a race. It's not
  1436.  * really worth the hassle
  1437.  */
  1438. head = &urbp->td_list;
  1439. tmp = head->next;
  1440. while (tmp != head) {
  1441. struct uhci_td *td = list_entry(tmp, struct uhci_td, list);
  1442. tmp = tmp->next;
  1443. /*
  1444.  * Make sure we don't do the last one (since it'll have the
  1445.  * TERM bit set) as well as we skip every so many TD's to
  1446.  * make sure it doesn't hog the bandwidth
  1447.  */
  1448. if (tmp != head && (count % DEPTH_INTERVAL) == (DEPTH_INTERVAL - 1))
  1449. td->link |= UHCI_PTR_DEPTH;
  1450. count++;
  1451. }
  1452. return 0;
  1453. }
  1454. /*
  1455.  * uhci_get_current_frame_number()
  1456.  *
  1457.  * returns the current frame number for a USB bus/controller.
  1458.  */
  1459. static int uhci_get_current_frame_number(struct usb_device *dev)
  1460. {
  1461. struct uhci *uhci = (struct uhci *)dev->bus->hcpriv;
  1462. return inw(uhci->io_addr + USBFRNUM);
  1463. }
  1464. struct usb_operations uhci_device_operations = {
  1465. uhci_alloc_dev,
  1466. uhci_free_dev,
  1467. uhci_get_current_frame_number,
  1468. uhci_submit_urb,
  1469. uhci_unlink_urb
  1470. };
  1471. /* Virtual Root Hub */
  1472. static __u8 root_hub_dev_des[] =
  1473. {
  1474.   0x12, /*  __u8  bLength; */
  1475. 0x01, /*  __u8  bDescriptorType; Device */
  1476. 0x00, /*  __u16 bcdUSB; v1.0 */
  1477. 0x01,
  1478. 0x09, /*  __u8  bDeviceClass; HUB_CLASSCODE */
  1479. 0x00, /*  __u8  bDeviceSubClass; */
  1480. 0x00, /*  __u8  bDeviceProtocol; */
  1481. 0x08, /*  __u8  bMaxPacketSize0; 8 Bytes */
  1482. 0x00, /*  __u16 idVendor; */
  1483. 0x00,
  1484. 0x00, /*  __u16 idProduct; */
  1485. 0x00,
  1486. 0x00, /*  __u16 bcdDevice; */
  1487. 0x00,
  1488. 0x00, /*  __u8  iManufacturer; */
  1489. 0x02, /*  __u8  iProduct; */
  1490. 0x01, /*  __u8  iSerialNumber; */
  1491. 0x01 /*  __u8  bNumConfigurations; */
  1492. };
  1493. /* Configuration descriptor */
  1494. static __u8 root_hub_config_des[] =
  1495. {
  1496. 0x09, /*  __u8  bLength; */
  1497. 0x02, /*  __u8  bDescriptorType; Configuration */
  1498. 0x19, /*  __u16 wTotalLength; */
  1499. 0x00,
  1500. 0x01, /*  __u8  bNumInterfaces; */
  1501. 0x01, /*  __u8  bConfigurationValue; */
  1502. 0x00, /*  __u8  iConfiguration; */
  1503. 0x40, /*  __u8  bmAttributes;
  1504. Bit 7: Bus-powered, 6: Self-powered,
  1505. Bit 5 Remote-wakeup, 4..0: resvd */
  1506. 0x00, /*  __u8  MaxPower; */
  1507. /* interface */
  1508. 0x09, /*  __u8  if_bLength; */
  1509. 0x04, /*  __u8  if_bDescriptorType; Interface */
  1510. 0x00, /*  __u8  if_bInterfaceNumber; */
  1511. 0x00, /*  __u8  if_bAlternateSetting; */
  1512. 0x01, /*  __u8  if_bNumEndpoints; */
  1513. 0x09, /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
  1514. 0x00, /*  __u8  if_bInterfaceSubClass; */
  1515. 0x00, /*  __u8  if_bInterfaceProtocol; */
  1516. 0x00, /*  __u8  if_iInterface; */
  1517. /* endpoint */
  1518. 0x07, /*  __u8  ep_bLength; */
  1519. 0x05, /*  __u8  ep_bDescriptorType; Endpoint */
  1520. 0x81, /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
  1521. 0x03, /*  __u8  ep_bmAttributes; Interrupt */
  1522. 0x08, /*  __u16 ep_wMaxPacketSize; 8 Bytes */
  1523. 0x00,
  1524. 0xff /*  __u8  ep_bInterval; 255 ms */
  1525. };
  1526. static __u8 root_hub_hub_des[] =
  1527. {
  1528. 0x09, /*  __u8  bLength; */
  1529. 0x29, /*  __u8  bDescriptorType; Hub-descriptor */
  1530. 0x02, /*  __u8  bNbrPorts; */
  1531. 0x00, /* __u16  wHubCharacteristics; */
  1532. 0x00,
  1533. 0x01, /*  __u8  bPwrOn2pwrGood; 2ms */
  1534. 0x00, /*  __u8  bHubContrCurrent; 0 mA */
  1535. 0x00, /*  __u8  DeviceRemovable; *** 7 Ports max *** */
  1536. 0xff /*  __u8  PortPwrCtrlMask; *** 7 ports max *** */
  1537. };
  1538. /* prepare Interrupt pipe transaction data; HUB INTERRUPT ENDPOINT */
  1539. static int rh_send_irq(struct urb *urb)
  1540. {
  1541. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1542. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  1543. unsigned int io_addr = uhci->io_addr;
  1544. unsigned long flags;
  1545. int i, len = 1;
  1546. __u16 data = 0;
  1547. spin_lock_irqsave(&urb->lock, flags);
  1548. for (i = 0; i < uhci->rh.numports; i++) {
  1549. data |= ((inw(io_addr + USBPORTSC1 + i * 2) & 0xa) > 0 ? (1 << (i + 1)) : 0);
  1550. len = (i + 1) / 8 + 1;
  1551. }
  1552. *(__u16 *) urb->transfer_buffer = cpu_to_le16(data);
  1553. urb->actual_length = len;
  1554. urbp->status = 0;
  1555. spin_unlock_irqrestore(&urb->lock, flags);
  1556. if ((data > 0) && (uhci->rh.send != 0)) {
  1557. dbg("root-hub INT complete: port1: %x port2: %x data: %x",
  1558. inw(io_addr + USBPORTSC1), inw(io_addr + USBPORTSC2), data);
  1559. uhci_call_completion(urb);
  1560. }
  1561. return 0;
  1562. }
  1563. /* Virtual Root Hub INTs are polled by this timer every "interval" ms */
  1564. static int rh_init_int_timer(struct urb *urb);
  1565. static void rh_int_timer_do(unsigned long ptr)
  1566. {
  1567. struct urb *urb = (struct urb *)ptr;
  1568. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1569. struct list_head list, *tmp, *head;
  1570. unsigned long flags;
  1571. if (uhci->rh.send)
  1572. rh_send_irq(urb);
  1573. INIT_LIST_HEAD(&list);
  1574. spin_lock_irqsave(&uhci->urb_list_lock, flags);
  1575. head = &uhci->urb_list;
  1576. tmp = head->next;
  1577. while (tmp != head) {
  1578. struct urb *u = list_entry(tmp, struct urb, urb_list);
  1579. struct urb_priv *up = (struct urb_priv *)u->hcpriv;
  1580. tmp = tmp->next;
  1581. spin_lock(&u->lock);
  1582. /* Check if the FSBR timed out */
  1583. if (up->fsbr && !up->fsbr_timeout && time_after_eq(jiffies, up->fsbrtime + IDLE_TIMEOUT))
  1584. uhci_fsbr_timeout(uhci, u);
  1585. /* Check if the URB timed out */
  1586. if (u->timeout && time_after_eq(jiffies, up->inserttime + u->timeout)) {
  1587. list_del(&u->urb_list);
  1588. list_add_tail(&u->urb_list, &list);
  1589. }
  1590. spin_unlock(&u->lock);
  1591. }
  1592. spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
  1593. head = &list;
  1594. tmp = head->next;
  1595. while (tmp != head) {
  1596. struct urb *u = list_entry(tmp, struct urb, urb_list);
  1597. tmp = tmp->next;
  1598. u->transfer_flags |= USB_ASYNC_UNLINK | USB_TIMEOUT_KILLED;
  1599. uhci_unlink_urb(u);
  1600. }
  1601. /* Really disable FSBR */
  1602. if (!uhci->fsbr && uhci->fsbrtimeout && time_after_eq(jiffies, uhci->fsbrtimeout)) {
  1603. uhci->fsbrtimeout = 0;
  1604. uhci->skel_term_qh->link = UHCI_PTR_TERM;
  1605. }
  1606. /* enter global suspend if nothing connected */
  1607. if (!uhci->is_suspended && !ports_active(uhci))
  1608. suspend_hc(uhci);
  1609. rh_init_int_timer(urb);
  1610. }
  1611. /* Root Hub INTs are polled by this timer */
  1612. static int rh_init_int_timer(struct urb *urb)
  1613. {
  1614. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1615. uhci->rh.interval = urb->interval;
  1616. init_timer(&uhci->rh.rh_int_timer);
  1617. uhci->rh.rh_int_timer.function = rh_int_timer_do;
  1618. uhci->rh.rh_int_timer.data = (unsigned long)urb;
  1619. uhci->rh.rh_int_timer.expires = jiffies + (HZ * (urb->interval < 30 ? 30 : urb->interval)) / 1000;
  1620. add_timer(&uhci->rh.rh_int_timer);
  1621. return 0;
  1622. }
  1623. #define OK(x) len = (x); break
  1624. #define CLR_RH_PORTSTAT(x) 
  1625. status = inw(io_addr + USBPORTSC1 + 2 * (wIndex-1)); 
  1626. status = (status & 0xfff5) & ~(x); 
  1627. outw(status, io_addr + USBPORTSC1 + 2 * (wIndex-1))
  1628. #define SET_RH_PORTSTAT(x) 
  1629. status = inw(io_addr + USBPORTSC1 + 2 * (wIndex-1)); 
  1630. status = (status & 0xfff5) | (x); 
  1631. outw(status, io_addr + USBPORTSC1 + 2 * (wIndex-1))
  1632. /* Root Hub Control Pipe */
  1633. static int rh_submit_urb(struct urb *urb)
  1634. {
  1635. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1636. unsigned int pipe = urb->pipe;
  1637. struct usb_ctrlrequest *cmd = (struct usb_ctrlrequest *)urb->setup_packet;
  1638. void *data = urb->transfer_buffer;
  1639. int leni = urb->transfer_buffer_length;
  1640. int len = 0;
  1641. int status = 0;
  1642. int stat = 0;
  1643. int i;
  1644. unsigned int io_addr = uhci->io_addr;
  1645. __u16 cstatus;
  1646. __u16 bmRType_bReq;
  1647. __u16 wValue;
  1648. __u16 wIndex;
  1649. __u16 wLength;
  1650. if (usb_pipetype(pipe) == PIPE_INTERRUPT) {
  1651. uhci->rh.urb = urb;
  1652. uhci->rh.send = 1;
  1653. uhci->rh.interval = urb->interval;
  1654. rh_init_int_timer(urb);
  1655. return -EINPROGRESS;
  1656. }
  1657. bmRType_bReq = cmd->bRequestType | cmd->bRequest << 8;
  1658. wValue = le16_to_cpu(cmd->wValue);
  1659. wIndex = le16_to_cpu(cmd->wIndex);
  1660. wLength = le16_to_cpu(cmd->wLength);
  1661. for (i = 0; i < 8; i++)
  1662. uhci->rh.c_p_r[i] = 0;
  1663. switch (bmRType_bReq) {
  1664. /* Request Destination:
  1665.    without flags: Device,
  1666.    RH_INTERFACE: interface,
  1667.    RH_ENDPOINT: endpoint,
  1668.    RH_CLASS means HUB here,
  1669.    RH_OTHER | RH_CLASS  almost ever means HUB_PORT here
  1670. */
  1671. case RH_GET_STATUS:
  1672. *(__u16 *)data = cpu_to_le16(1);
  1673. OK(2);
  1674. case RH_GET_STATUS | RH_INTERFACE:
  1675. *(__u16 *)data = cpu_to_le16(0);
  1676. OK(2);
  1677. case RH_GET_STATUS | RH_ENDPOINT:
  1678. *(__u16 *)data = cpu_to_le16(0);
  1679. OK(2);
  1680. case RH_GET_STATUS | RH_CLASS:
  1681. *(__u32 *)data = cpu_to_le32(0);
  1682. OK(4); /* hub power */
  1683. case RH_GET_STATUS | RH_OTHER | RH_CLASS:
  1684. status = inw(io_addr + USBPORTSC1 + 2 * (wIndex - 1));
  1685. cstatus = ((status & USBPORTSC_CSC) >> (1 - 0)) |
  1686. ((status & USBPORTSC_PEC) >> (3 - 1)) |
  1687. (uhci->rh.c_p_r[wIndex - 1] << (0 + 4));
  1688. status = (status & USBPORTSC_CCS) |
  1689. ((status & USBPORTSC_PE) >> (2 - 1)) |
  1690. ((status & USBPORTSC_SUSP) >> (12 - 2)) |
  1691. ((status & USBPORTSC_PR) >> (9 - 4)) |
  1692. (1 << 8) |      /* power on */
  1693. ((status & USBPORTSC_LSDA) << (-8 + 9));
  1694. *(__u16 *)data = cpu_to_le16(status);
  1695. *(__u16 *)(data + 2) = cpu_to_le16(cstatus);
  1696. OK(4);
  1697. case RH_CLEAR_FEATURE | RH_ENDPOINT:
  1698. switch (wValue) {
  1699. case RH_ENDPOINT_STALL:
  1700. OK(0);
  1701. }
  1702. break;
  1703. case RH_CLEAR_FEATURE | RH_CLASS:
  1704. switch (wValue) {
  1705. case RH_C_HUB_OVER_CURRENT:
  1706. OK(0); /* hub power over current */
  1707. }
  1708. break;
  1709. case RH_CLEAR_FEATURE | RH_OTHER | RH_CLASS:
  1710. switch (wValue) {
  1711. case RH_PORT_ENABLE:
  1712. CLR_RH_PORTSTAT(USBPORTSC_PE);
  1713. OK(0);
  1714. case RH_PORT_SUSPEND:
  1715. CLR_RH_PORTSTAT(USBPORTSC_SUSP);
  1716. OK(0);
  1717. case RH_PORT_POWER:
  1718. OK(0); /* port power */
  1719. case RH_C_PORT_CONNECTION:
  1720. SET_RH_PORTSTAT(USBPORTSC_CSC);
  1721. OK(0);
  1722. case RH_C_PORT_ENABLE:
  1723. SET_RH_PORTSTAT(USBPORTSC_PEC);
  1724. OK(0);
  1725. case RH_C_PORT_SUSPEND:
  1726. /*** WR_RH_PORTSTAT(RH_PS_PSSC); */
  1727. OK(0);
  1728. case RH_C_PORT_OVER_CURRENT:
  1729. OK(0); /* port power over current */
  1730. case RH_C_PORT_RESET:
  1731. uhci->rh.c_p_r[wIndex - 1] = 0;
  1732. OK(0);
  1733. }
  1734. break;
  1735. case RH_SET_FEATURE | RH_OTHER | RH_CLASS:
  1736. switch (wValue) {
  1737. case RH_PORT_SUSPEND:
  1738. SET_RH_PORTSTAT(USBPORTSC_SUSP);
  1739. OK(0);
  1740. case RH_PORT_RESET:
  1741. SET_RH_PORTSTAT(USBPORTSC_PR);
  1742. mdelay(50); /* USB v1.1 7.1.7.3 */
  1743. uhci->rh.c_p_r[wIndex - 1] = 1;
  1744. CLR_RH_PORTSTAT(USBPORTSC_PR);
  1745. udelay(10);
  1746. SET_RH_PORTSTAT(USBPORTSC_PE);
  1747. mdelay(10);
  1748. SET_RH_PORTSTAT(0xa);
  1749. OK(0);
  1750. case RH_PORT_POWER:
  1751. OK(0); /* port power ** */
  1752. case RH_PORT_ENABLE:
  1753. SET_RH_PORTSTAT(USBPORTSC_PE);
  1754. OK(0);
  1755. }
  1756. break;
  1757. case RH_SET_ADDRESS:
  1758. uhci->rh.devnum = wValue;
  1759. OK(0);
  1760. case RH_GET_DESCRIPTOR:
  1761. switch ((wValue & 0xff00) >> 8) {
  1762. case 0x01: /* device descriptor */
  1763. len = min_t(unsigned int, leni,
  1764.   min_t(unsigned int,
  1765.       sizeof(root_hub_dev_des), wLength));
  1766. memcpy(data, root_hub_dev_des, len);
  1767. OK(len);
  1768. case 0x02: /* configuration descriptor */
  1769. len = min_t(unsigned int, leni,
  1770.   min_t(unsigned int,
  1771.       sizeof(root_hub_config_des), wLength));
  1772. memcpy (data, root_hub_config_des, len);
  1773. OK(len);
  1774. case 0x03: /* string descriptors */
  1775. len = usb_root_hub_string (wValue & 0xff,
  1776. uhci->io_addr, "UHCI-alt",
  1777. data, wLength);
  1778. if (len > 0) {
  1779. OK(min_t(int, leni, len));
  1780. } else 
  1781. stat = -EPIPE;
  1782. }
  1783. break;
  1784. case RH_GET_DESCRIPTOR | RH_CLASS:
  1785. root_hub_hub_des[2] = uhci->rh.numports;
  1786. len = min_t(unsigned int, leni,
  1787.   min_t(unsigned int, sizeof(root_hub_hub_des), wLength));
  1788. memcpy(data, root_hub_hub_des, len);
  1789. OK(len);
  1790. case RH_GET_CONFIGURATION:
  1791. *(__u8 *)data = 0x01;
  1792. OK(1);
  1793. case RH_SET_CONFIGURATION:
  1794. OK(0);
  1795. case RH_GET_INTERFACE | RH_INTERFACE:
  1796. *(__u8 *)data = 0x00;
  1797. OK(1);
  1798. case RH_SET_INTERFACE | RH_INTERFACE:
  1799. OK(0);
  1800. default:
  1801. stat = -EPIPE;
  1802. }
  1803. urb->actual_length = len;
  1804. return stat;
  1805. }
  1806. /*
  1807.  * MUST be called with urb->lock acquired
  1808.  */
  1809. static int rh_unlink_urb(struct urb *urb)
  1810. {
  1811. struct uhci *uhci = (struct uhci *)urb->dev->bus->hcpriv;
  1812. if (uhci->rh.urb == urb) {
  1813. urb->status = -ENOENT;
  1814. uhci->rh.send = 0;
  1815. uhci->rh.urb = NULL;
  1816. del_timer(&uhci->rh.rh_int_timer);
  1817. }
  1818. return 0;
  1819. }
  1820. static void uhci_free_pending_qhs(struct uhci *uhci)
  1821. {
  1822. struct list_head *tmp, *head;
  1823. unsigned long flags;
  1824. spin_lock_irqsave(&uhci->qh_remove_list_lock, flags);
  1825. head = &uhci->qh_remove_list;
  1826. tmp = head->next;
  1827. while (tmp != head) {
  1828. struct uhci_qh *qh = list_entry(tmp, struct uhci_qh, remove_list);
  1829. tmp = tmp->next;
  1830. list_del_init(&qh->remove_list);
  1831. uhci_free_qh(uhci, qh);
  1832. }
  1833. spin_unlock_irqrestore(&uhci->qh_remove_list_lock, flags);
  1834. }
  1835. static void uhci_call_completion(struct urb *urb)
  1836. {
  1837. struct urb_priv *urbp;
  1838. struct usb_device *dev = urb->dev;
  1839. struct uhci *uhci = (struct uhci *)dev->bus->hcpriv;
  1840. int is_ring = 0, killed, resubmit_interrupt, status;
  1841. struct urb *nurb;
  1842. unsigned long flags;
  1843. spin_lock_irqsave(&urb->lock, flags);
  1844. urbp = (struct urb_priv *)urb->hcpriv;
  1845. if (!urbp || !urb->dev) {
  1846. spin_unlock_irqrestore(&urb->lock, flags);
  1847. return;
  1848. }
  1849. killed = (urb->status == -ENOENT || urb->status == -ECONNABORTED ||
  1850. urb->status == -ECONNRESET);
  1851. resubmit_interrupt = (usb_pipetype(urb->pipe) == PIPE_INTERRUPT &&
  1852. urb->interval);
  1853. nurb = urb->next;
  1854. if (nurb && !killed) {
  1855. int count = 0;
  1856. while (nurb && nurb != urb && count < MAX_URB_LOOP) {
  1857. if (nurb->status == -ENOENT ||
  1858.     nurb->status == -ECONNABORTED ||
  1859.     nurb->status == -ECONNRESET) {
  1860. killed = 1;
  1861. break;
  1862. }
  1863. nurb = nurb->next;
  1864. count++;
  1865. }
  1866. if (count == MAX_URB_LOOP)
  1867. err("uhci_call_completion: too many linked URB's, loop? (first loop)");
  1868. /* Check to see if chain is a ring */
  1869. is_ring = (nurb == urb);
  1870. }
  1871. if (urbp->transfer_buffer_dma_handle)
  1872. pci_dma_sync_single(uhci->dev, urbp->transfer_buffer_dma_handle,
  1873. urb->transfer_buffer_length, usb_pipein(urb->pipe) ?
  1874. PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE);
  1875. if (urbp->setup_packet_dma_handle)
  1876. pci_dma_sync_single(uhci->dev, urbp->setup_packet_dma_handle,
  1877. sizeof(struct usb_ctrlrequest), PCI_DMA_TODEVICE);
  1878. status = urbp->status;
  1879. if (!resubmit_interrupt || killed)
  1880. /* We don't need urb_priv anymore */
  1881. uhci_destroy_urb_priv(urb);
  1882. if (!killed)
  1883. urb->status = status;
  1884. urb->dev = NULL;
  1885. spin_unlock_irqrestore(&urb->lock, flags);
  1886. if (urb->complete)
  1887. urb->complete(urb);
  1888. if (resubmit_interrupt)
  1889. /* Recheck the status. The completion handler may have */
  1890. /*  unlinked the resubmitting interrupt URB */
  1891. killed = (urb->status == -ENOENT ||
  1892.   urb->status == -ECONNABORTED ||
  1893.   urb->status == -ECONNRESET);
  1894. if (resubmit_interrupt && !killed) {
  1895. urb->dev = dev;
  1896. uhci_reset_interrupt(urb);
  1897. } else {
  1898. if (is_ring && !killed) {
  1899. urb->dev = dev;
  1900. uhci_submit_urb(urb);
  1901. } else {
  1902. /* We decrement the usage count after we're done */
  1903. /*  with everything */
  1904. usb_dec_dev_use(dev);
  1905. }
  1906. }
  1907. }
  1908. static void uhci_finish_completion(struct uhci *uhci)
  1909. {
  1910. struct list_head *tmp, *head;
  1911. unsigned long flags;
  1912. spin_lock_irqsave(&uhci->complete_list_lock, flags);
  1913. head = &uhci->complete_list;
  1914. tmp = head->next;
  1915. while (tmp != head) {
  1916. struct urb_priv *urbp = list_entry(tmp, struct urb_priv, complete_list);
  1917. struct urb *urb = urbp->urb;
  1918. list_del_init(&urbp->complete_list);
  1919. spin_unlock_irqrestore(&uhci->complete_list_lock, flags);
  1920. uhci_call_completion(urb);
  1921. spin_lock_irqsave(&uhci->complete_list_lock, flags);
  1922. head = &uhci->complete_list;
  1923. tmp = head->next;
  1924. }
  1925. spin_unlock_irqrestore(&uhci->complete_list_lock, flags);
  1926. }
  1927. static void uhci_remove_pending_qhs(struct uhci *uhci)
  1928. {
  1929. struct list_head *tmp, *head;
  1930. unsigned long flags;
  1931. spin_lock_irqsave(&uhci->urb_remove_list_lock, flags);
  1932. head = &uhci->urb_remove_list;
  1933. tmp = head->next;
  1934. while (tmp != head) {
  1935. struct urb *urb = list_entry(tmp, struct urb, urb_list);
  1936. struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
  1937. tmp = tmp->next;
  1938. list_del_init(&urb->urb_list);
  1939. urbp->status = urb->status = -ECONNRESET;
  1940. uhci_add_complete(urb);
  1941. }
  1942. spin_unlock_irqrestore(&uhci->urb_remove_list_lock, flags);
  1943. }
  1944. static void uhci_interrupt(int irq, void *__uhci, struct pt_regs *regs)
  1945. {
  1946. struct uhci *uhci = __uhci;
  1947. unsigned int io_addr = uhci->io_addr;
  1948. unsigned short status;
  1949. struct list_head *tmp, *head;
  1950. /*
  1951.  * Read the interrupt status, and write it back to clear the
  1952.  * interrupt cause
  1953.  */
  1954. status = inw(io_addr + USBSTS);
  1955. if (!status) /* shared interrupt, not mine */
  1956. return;
  1957. outw(status, io_addr + USBSTS); /* Clear it */
  1958. if (status & ~(USBSTS_USBINT | USBSTS_ERROR | USBSTS_RD)) {
  1959. if (status & USBSTS_HSE)
  1960. err("%x: host system error, PCI problems?", io_addr);
  1961. if (status & USBSTS_HCPE)
  1962. err("%x: host controller process error. something bad happened", io_addr);
  1963. if ((status & USBSTS_HCH) && !uhci->is_suspended) {
  1964. err("%x: host controller halted. very bad", io_addr);
  1965. /* FIXME: Reset the controller, fix the offending TD */
  1966. }
  1967. }
  1968. if (status & USBSTS_RD)
  1969. wakeup_hc(uhci);
  1970. uhci_free_pending_qhs(uhci);
  1971. uhci_remove_pending_qhs(uhci);
  1972. uhci_clear_next_interrupt(uhci);
  1973. /* Walk the list of pending URB's to see which ones completed */
  1974. spin_lock(&uhci->urb_list_lock);
  1975. head = &uhci->urb_list;
  1976. tmp = head->next;
  1977. while (tmp != head) {
  1978. struct urb *urb = list_entry(tmp, struct urb, urb_list);
  1979. tmp = tmp->next;
  1980. /* Checks the status and does all of the magic necessary */
  1981. uhci_transfer_result(uhci, urb);
  1982. }
  1983. spin_unlock(&uhci->urb_list_lock);
  1984. uhci_finish_completion(uhci);
  1985. }
  1986. static void reset_hc(struct uhci *uhci)
  1987. {
  1988. unsigned int io_addr = uhci->io_addr;
  1989. /* Global reset for 50ms */
  1990. outw(USBCMD_GRESET, io_addr + USBCMD);
  1991. wait_ms(50);
  1992. outw(0, io_addr + USBCMD);
  1993. wait_ms(10);
  1994. }
  1995. static void suspend_hc(struct uhci *uhci)
  1996. {
  1997. unsigned int io_addr = uhci->io_addr;
  1998. dbg("%x: suspend_hc", io_addr);
  1999. outw(USBCMD_EGSM, io_addr + USBCMD);
  2000. uhci->is_suspended = 1;
  2001. }
  2002. static void wakeup_hc(struct uhci *uhci)
  2003. {
  2004. unsigned int io_addr = uhci->io_addr;
  2005. unsigned int status;
  2006. dbg("%x: wakeup_hc", io_addr);
  2007. outw(0, io_addr + USBCMD);
  2008. /* wait for EOP to be sent */
  2009. status = inw(io_addr + USBCMD);
  2010. while (status & USBCMD_FGR)
  2011. status = inw(io_addr + USBCMD);
  2012. uhci->is_suspended = 0;
  2013. /* Run and mark it configured with a 64-byte max packet */
  2014. outw(USBCMD_RS | USBCMD_CF | USBCMD_MAXP, io_addr + USBCMD);
  2015. }
  2016. static int ports_active(struct uhci *uhci)
  2017. {
  2018. unsigned int io_addr = uhci->io_addr;
  2019. int connection = 0;
  2020. int i;
  2021. for (i = 0; i < uhci->rh.numports; i++)
  2022. connection |= (inw(io_addr + USBPORTSC1 + i * 2) & 0x1);
  2023. return connection;
  2024. }
  2025. static void start_hc(struct uhci *uhci)
  2026. {
  2027. unsigned int io_addr = uhci->io_addr;
  2028. int timeout = 1000;
  2029. /*
  2030.  * Reset the HC - this will force us to get a
  2031.  * new notification of any already connected
  2032.  * ports due to the virtual disconnect that it
  2033.  * implies.
  2034.  */
  2035. outw(USBCMD_HCRESET, io_addr + USBCMD);
  2036. while (inw(io_addr + USBCMD) & USBCMD_HCRESET) {
  2037. if (!--timeout) {
  2038. printk(KERN_ERR "uhci: USBCMD_HCRESET timed out!n");
  2039. break;
  2040. }
  2041. }
  2042. /* Turn on all interrupts */
  2043. outw(USBINTR_TIMEOUT | USBINTR_RESUME | USBINTR_IOC | USBINTR_SP,
  2044. io_addr + USBINTR);
  2045. /* Start at frame 0 */
  2046. outw(0, io_addr + USBFRNUM);
  2047. outl(uhci->fl->dma_handle, io_addr + USBFLBASEADD);
  2048. /* Run and mark it configured with a 64-byte max packet */
  2049. outw(USBCMD_RS | USBCMD_CF | USBCMD_MAXP, io_addr + USBCMD);
  2050. }
  2051. #ifdef CONFIG_PROC_FS
  2052. static int uhci_num = 0;
  2053. #endif
  2054. static void free_uhci(struct uhci *uhci)
  2055. {
  2056. kfree(uhci);
  2057. }
  2058. /*
  2059.  * De-allocate all resources..
  2060.  */
  2061. static void release_uhci(struct uhci *uhci)
  2062. {
  2063. int i;
  2064. #ifdef CONFIG_PROC_FS
  2065. char buf[8];
  2066. #endif
  2067. if (uhci->irq >= 0) {
  2068. free_irq(uhci->irq, uhci);
  2069. uhci->irq = -1;
  2070. }
  2071. for (i = 0; i < UHCI_NUM_SKELQH; i++)
  2072. if (uhci->skelqh[i]) {
  2073. uhci_free_qh(uhci, uhci->skelqh[i]);
  2074. uhci->skelqh[i] = NULL;
  2075. }
  2076. for (i = 0; i < UHCI_NUM_SKELTD; i++)
  2077. if (uhci->skeltd[i]) {
  2078. uhci_free_td(uhci, uhci->skeltd[i]);
  2079. uhci->skeltd[i] = NULL;
  2080. }
  2081. if (uhci->qh_pool) {
  2082. pci_pool_destroy(uhci->qh_pool);
  2083. uhci->qh_pool = NULL;
  2084. }
  2085. if (uhci->td_pool) {
  2086. pci_pool_destroy(uhci->td_pool);
  2087. uhci->td_pool = NULL;
  2088. }
  2089. if (uhci->fl) {
  2090. pci_free_consistent(uhci->dev, sizeof(*uhci->fl), uhci->fl, uhci->fl->dma_handle);
  2091. uhci->fl = NULL;
  2092. }
  2093. if (uhci->bus) {
  2094. usb_free_bus(uhci->bus);
  2095. uhci->bus = NULL;
  2096. }
  2097. #ifdef CONFIG_PROC_FS
  2098. if (uhci->proc_entry) {
  2099. sprintf(buf, "hc%d", uhci->num);
  2100. remove_proc_entry(buf, uhci_proc_root);
  2101. uhci->proc_entry = NULL;
  2102. }
  2103. #endif
  2104. free_uhci(uhci);
  2105. }
  2106. /*
  2107.  * Allocate a frame list, and then setup the skeleton
  2108.  *
  2109.  * The hardware doesn't really know any difference
  2110.  * in the queues, but the order does matter for the
  2111.  * protocols higher up. The order is:
  2112.  *
  2113.  *  - any isochronous events handled before any
  2114.  *    of the queues. We don't do that here, because
  2115.  *    we'll create the actual TD entries on demand.
  2116.  *  - The first queue is the interrupt queue.
  2117.  *  - The second queue is the control queue, split into low and high speed
  2118.  *  - The third queue is bulk queue.
  2119.  *  - The fourth queue is the bandwidth reclamation queue, which loops back
  2120.  *    to the high speed control queue.
  2121.  */
  2122. static int alloc_uhci(struct pci_dev *dev, unsigned int io_addr, unsigned int io_size)
  2123. {
  2124. struct uhci *uhci;
  2125. int retval;
  2126. char buf[8], *bufp = buf;
  2127. int i, port;
  2128. struct usb_bus *bus;
  2129. dma_addr_t dma_handle;
  2130. #ifdef CONFIG_PROC_FS
  2131. struct proc_dir_entry *ent;
  2132. #endif
  2133. retval = -ENODEV;
  2134. if (pci_enable_device(dev) < 0) {
  2135. err("couldn't enable PCI device");
  2136. goto err_enable_device;
  2137. }
  2138. if (!dev->irq) {
  2139. err("found UHCI device with no IRQ assigned. check BIOS settings!");
  2140. goto err_invalid_irq;
  2141. }
  2142. if (!pci_dma_supported(dev, 0xFFFFFFFF)) {
  2143. err("PCI subsystem doesn't support 32 bit addressing?");
  2144. goto err_pci_dma_supported;
  2145. }
  2146. retval = -EBUSY;
  2147. if (!request_region(io_addr, io_size, "usb-uhci")) {
  2148. err("couldn't allocate I/O range %x - %x", io_addr,
  2149. io_addr + io_size - 1);
  2150. goto err_request_region;
  2151. }
  2152. pci_set_master(dev);
  2153. #ifndef __sparc__
  2154. sprintf(buf, "%d", dev->irq);
  2155. #else
  2156. bufp = __irq_itoa(dev->irq);
  2157. #endif
  2158. printk(KERN_INFO __FILE__ ": USB UHCI at I/O 0x%x, IRQ %sn",
  2159. io_addr, bufp);
  2160. if (pci_set_dma_mask(dev, 0xFFFFFFFF)) {
  2161. err("couldn't set PCI dma mask");
  2162. retval = -ENODEV;
  2163. goto err_pci_set_dma_mask;
  2164. }
  2165. uhci = kmalloc(sizeof(*uhci), GFP_KERNEL);
  2166. if (!uhci) {
  2167. err("couldn't allocate uhci structure");
  2168. retval = -ENOMEM;
  2169. goto err_alloc_uhci;
  2170. }
  2171. uhci->dev = dev;
  2172. uhci->irq = dev->irq;
  2173. uhci->io_addr = io_addr;
  2174. uhci->io_size = io_size;
  2175. pci_set_drvdata(dev, uhci);
  2176. #ifdef CONFIG_PROC_FS
  2177. uhci->num = uhci_num++;
  2178. sprintf(buf, "hc%d", uhci->num);
  2179. ent = create_proc_entry(buf, S_IFREG|S_IRUGO|S_IWUSR, uhci_proc_root);
  2180. if (!ent) {
  2181. err("couldn't create uhci proc entry");
  2182. retval = -ENOMEM;
  2183. goto err_create_proc_entry;
  2184. }
  2185. ent->data = uhci;
  2186. ent->proc_fops = &uhci_proc_operations;
  2187. ent->size = 0;
  2188. uhci->proc_entry = ent;
  2189. #endif
  2190. /* Reset here so we don't get any interrupts from an old setup */
  2191. /*  or broken setup */
  2192. reset_hc(uhci);
  2193. uhci->fsbr = 0;
  2194. uhci->fsbrtimeout = 0;
  2195. uhci->is_suspended = 0;
  2196. spin_lock_init(&uhci->qh_remove_list_lock);
  2197. INIT_LIST_HEAD(&uhci->qh_remove_list);
  2198. spin_lock_init(&uhci->urb_remove_list_lock);
  2199. INIT_LIST_HEAD(&uhci->urb_remove_list);
  2200. spin_lock_init(&uhci->urb_list_lock);
  2201. INIT_LIST_HEAD(&uhci->urb_list);
  2202. spin_lock_init(&uhci->complete_list_lock);
  2203. INIT_LIST_HEAD(&uhci->complete_list);
  2204. spin_lock_init(&uhci->frame_list_lock);
  2205. /* We need exactly one page (per UHCI specs), how convenient */
  2206. /* We assume that one page is atleast 4k (1024 frames * 4 bytes) */
  2207. #if PAGE_SIZE < (4 * 1024)
  2208. #error PAGE_SIZE is not atleast 4k
  2209. #endif
  2210. uhci->fl = pci_alloc_consistent(uhci->dev, sizeof(*uhci->fl), &dma_handle);
  2211. if (!uhci->fl) {
  2212. err("unable to allocate consistent memory for frame list");
  2213. goto err_alloc_fl;
  2214. }
  2215. memset((void *)uhci->fl, 0, sizeof(*uhci->fl));
  2216. uhci->fl->dma_handle = dma_handle;
  2217. uhci->td_pool = pci_pool_create("uhci_td", uhci->dev,
  2218. sizeof(struct uhci_td), 16, 0, GFP_DMA | GFP_ATOMIC);
  2219. if (!uhci->td_pool) {
  2220. err("unable to create td pci_pool");
  2221. goto err_create_td_pool;
  2222. }
  2223. uhci->qh_pool = pci_pool_create("uhci_qh", uhci->dev,
  2224. sizeof(struct uhci_qh), 16, 0, GFP_DMA | GFP_ATOMIC);
  2225. if (!uhci->qh_pool) {
  2226. err("unable to create qh pci_pool");
  2227. goto err_create_qh_pool;
  2228. }
  2229. bus = usb_alloc_bus(&uhci_device_operations);
  2230. if (!bus) {
  2231. err("unable to allocate bus");
  2232. goto err_alloc_bus;
  2233. }
  2234. uhci->bus = bus;
  2235. bus->bus_name = dev->slot_name;
  2236. bus->hcpriv = uhci;
  2237. usb_register_bus(uhci->bus);
  2238. /* Initialize the root hub */
  2239. /* UHCI specs says devices must have 2 ports, but goes on to say */
  2240. /*  they may have more but give no way to determine how many they */
  2241. /*  have. However, according to the UHCI spec, Bit 7 is always set */
  2242. /*  to 1. So we try to use this to our advantage */
  2243. for (port = 0; port < (uhci->io_size - 0x10) / 2; port++) {
  2244. unsigned int portstatus;
  2245. portstatus = inw(uhci->io_addr + 0x10 + (port * 2));
  2246. if (!(portstatus & 0x0080))
  2247. break;
  2248. }
  2249. if (debug)
  2250. info("detected %d ports", port);
  2251. /* This is experimental so anything less than 2 or greater than 8 is */
  2252. /*  something weird and we'll ignore it */
  2253. if (port < 2 || port > 8) {
  2254. info("port count misdetected? forcing to 2 ports");
  2255. port = 2;
  2256. }
  2257. uhci->rh.numports = port;
  2258. uhci->bus->root_hub = uhci->rh.dev = usb_alloc_dev(NULL, uhci->bus);
  2259. if (!uhci->rh.dev) {
  2260. err("unable to allocate root hub");
  2261. goto err_alloc_root_hub;
  2262. }
  2263. uhci->skeltd[0] = uhci_alloc_td(uhci, uhci->rh.dev);
  2264. if (!uhci->skeltd[0]) {
  2265. err("unable to allocate TD 0");
  2266. goto err_alloc_skeltd;
  2267. }
  2268. /*
  2269.  * 9 Interrupt queues; link int2 to int1, int4 to int2, etc
  2270.  * then link int1 to control and control to bulk
  2271.  */
  2272. for (i = 1; i < 9; i++) {
  2273. struct uhci_td *td;
  2274. td = uhci->skeltd[i] = uhci_alloc_td(uhci, uhci->rh.dev);
  2275. if (!td) {
  2276. err("unable to allocate TD %d", i);
  2277. goto err_alloc_skeltd;
  2278. }
  2279. uhci_fill_td(td, 0, (UHCI_NULL_DATA_SIZE << 21) | (0x7f << 8) | USB_PID_IN, 0);
  2280. td->link = uhci->skeltd[i - 1]->dma_handle;
  2281. }
  2282. uhci->skel_term_td = uhci_alloc_td(uhci, uhci->rh.dev);
  2283. if (!uhci->skel_term_td) {
  2284. err("unable to allocate skel TD term");
  2285. goto err_alloc_skeltd;
  2286. }
  2287. for (i = 0; i < UHCI_NUM_SKELQH; i++) {
  2288. uhci->skelqh[i] = uhci_alloc_qh(uhci, uhci->rh.dev);
  2289. if (!uhci->skelqh[i]) {
  2290. err("unable to allocate QH %d", i);
  2291. goto err_alloc_skelqh;
  2292. }
  2293. }
  2294. uhci_fill_td(uhci->skel_int1_td, 0, (UHCI_NULL_DATA_SIZE << 21) | (0x7f << 8) | USB_PID_IN, 0);
  2295. uhci->skel_int1_td->link = uhci->skel_ls_control_qh->dma_handle | UHCI_PTR_QH;
  2296. uhci->skel_ls_control_qh->link = uhci->skel_hs_control_qh->dma_handle | UHCI_PTR_QH;
  2297. uhci->skel_ls_control_qh->element = UHCI_PTR_TERM;
  2298. uhci->skel_hs_control_qh->link = uhci->skel_bulk_qh->dma_handle | UHCI_PTR_QH;
  2299. uhci->skel_hs_control_qh->element = UHCI_PTR_TERM;
  2300. uhci->skel_bulk_qh->link = uhci->skel_term_qh->dma_handle | UHCI_PTR_QH;
  2301. uhci->skel_bulk_qh->element = UHCI_PTR_TERM;
  2302. /* This dummy TD is to work around a bug in Intel PIIX controllers */
  2303. uhci_fill_td(uhci->skel_term_td, 0, (UHCI_NULL_DATA_SIZE << 21) | (0x7f << 8) | USB_PID_IN, 0);
  2304. uhci->skel_term_td->link = uhci->skel_term_td->dma_handle;
  2305. uhci->skel_term_qh->link = UHCI_PTR_TERM;
  2306. uhci->skel_term_qh->element = uhci->skel_term_td->dma_handle;
  2307. /*
  2308.  * Fill the frame list: make all entries point to
  2309.  * the proper interrupt queue.
  2310.  *
  2311.  * This is probably silly, but it's a simple way to
  2312.  * scatter the interrupt queues in a way that gives
  2313.  * us a reasonable dynamic range for irq latencies.
  2314.  */
  2315. for (i = 0; i < UHCI_NUMFRAMES; i++) {
  2316. int irq = 0;
  2317. if (i & 1) {
  2318. irq++;
  2319. if (i & 2) {
  2320. irq++;
  2321. if (i & 4) { 
  2322. irq++;
  2323. if (i & 8) { 
  2324. irq++;
  2325. if (i & 16) {
  2326. irq++;
  2327. if (i & 32) {
  2328. irq++;
  2329. if (i & 64)
  2330. irq++;
  2331. }
  2332. }
  2333. }
  2334. }
  2335. }
  2336. }
  2337. /* Only place we don't use the frame list routines */
  2338. uhci->fl->frame[i] =  uhci->skeltd[irq]->dma_handle;
  2339. }
  2340. start_hc(uhci);
  2341. if (request_irq(dev->irq, uhci_interrupt, SA_SHIRQ, "usb-uhci", uhci))
  2342. goto err_request_irq;
  2343. /* disable legacy emulation */
  2344. pci_write_config_word(uhci->dev, USBLEGSUP, USBLEGSUP_DEFAULT);
  2345. usb_connect(uhci->rh.dev);
  2346. if (usb_new_device(uhci->rh.dev) != 0) {
  2347. err("unable to start root hub");
  2348. retval = -ENOMEM;
  2349. goto err_start_root_hub;
  2350. }
  2351. return 0;
  2352. /*
  2353.  * error exits:
  2354.  */
  2355. err_start_root_hub:
  2356. free_irq(uhci->irq, uhci);
  2357. uhci->irq = -1;
  2358. err_request_irq:
  2359. for (i = 0; i < UHCI_NUM_SKELQH; i++)
  2360. if (uhci->skelqh[i]) {
  2361. uhci_free_qh(uhci, uhci->skelqh[i]);
  2362. uhci->skelqh[i] = NULL;
  2363. }
  2364. err_alloc_skelqh:
  2365. for (i = 0; i < UHCI_NUM_SKELTD; i++)
  2366. if (uhci->skeltd[i]) {
  2367. uhci_free_td(uhci, uhci->skeltd[i]);
  2368. uhci->skeltd[i] = NULL;
  2369. }
  2370. err_alloc_skeltd:
  2371. usb_free_dev(uhci->rh.dev);
  2372. uhci->rh.dev = NULL;
  2373. err_alloc_root_hub:
  2374. usb_free_bus(uhci->bus);
  2375. uhci->bus = NULL;
  2376. err_alloc_bus:
  2377. pci_pool_destroy(uhci->qh_pool);
  2378. uhci->qh_pool = NULL;
  2379. err_create_qh_pool:
  2380. pci_pool_destroy(uhci->td_pool);
  2381. uhci->td_pool = NULL;
  2382. err_create_td_pool:
  2383. pci_free_consistent(uhci->dev, sizeof(*uhci->fl), uhci->fl, uhci->fl->dma_handle);
  2384. uhci->fl = NULL;
  2385. err_alloc_fl:
  2386. #ifdef CONFIG_PROC_FS
  2387. remove_proc_entry(buf, uhci_proc_root);
  2388. uhci->proc_entry = NULL;
  2389. err_create_proc_entry:
  2390. free_uhci(uhci);
  2391. #endif
  2392. err_alloc_uhci:
  2393. err_pci_set_dma_mask:
  2394. release_region(io_addr, io_size);
  2395. err_request_region:
  2396. err_pci_dma_supported:
  2397. err_invalid_irq:
  2398. err_enable_device:
  2399. return retval;
  2400. }
  2401. static int __devinit uhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
  2402. {
  2403. int i;
  2404. /* Search for the IO base address.. */
  2405. for (i = 0; i < 6; i++) {
  2406. unsigned int io_addr = pci_resource_start(dev, i);
  2407. unsigned int io_size = pci_resource_len(dev, i);
  2408. /* IO address? */
  2409. if (!(pci_resource_flags(dev, i) & IORESOURCE_IO))
  2410. continue;
  2411. return alloc_uhci(dev, io_addr, io_size);
  2412. }
  2413. return -ENODEV;
  2414. }
  2415. static void __devexit uhci_pci_remove(struct pci_dev *dev)
  2416. {
  2417. struct uhci *uhci = pci_get_drvdata(dev);
  2418. if (uhci->bus->root_hub)
  2419. usb_disconnect(&uhci->bus->root_hub);
  2420. usb_deregister_bus(uhci->bus);
  2421. /*
  2422.  * At this point, we're guaranteed that no new connects can be made
  2423.  * to this bus since there are no more parents
  2424.  */
  2425. uhci_free_pending_qhs(uhci);
  2426. uhci_remove_pending_qhs(uhci);
  2427. reset_hc(uhci);
  2428. release_region(uhci->io_addr, uhci->io_size);
  2429. uhci_free_pending_qhs(uhci);
  2430. release_uhci(uhci);
  2431. }
  2432. #ifdef CONFIG_PM
  2433. static int uhci_pci_suspend(struct pci_dev *dev, u32 state)
  2434. {
  2435. suspend_hc((struct uhci *) pci_get_drvdata(dev));
  2436. return 0;
  2437. }
  2438. static int uhci_pci_resume(struct pci_dev *dev)
  2439. {
  2440. reset_hc((struct uhci *) pci_get_drvdata(dev));
  2441. start_hc((struct uhci *) pci_get_drvdata(dev));
  2442. return 0;
  2443. }
  2444. #endif
  2445. static const struct pci_device_id __devinitdata uhci_pci_ids[] = { {
  2446. /* handle any USB UHCI controller */
  2447. class:  ((PCI_CLASS_SERIAL_USB << 8) | 0x00),
  2448. class_mask:  ~0,
  2449. /* no matter who makes it */
  2450. vendor: PCI_ANY_ID,
  2451. device: PCI_ANY_ID,
  2452. subvendor: PCI_ANY_ID,
  2453. subdevice: PCI_ANY_ID,
  2454. }, { /* end: all zeroes */ }
  2455. };
  2456. MODULE_DEVICE_TABLE(pci, uhci_pci_ids);
  2457. static struct pci_driver uhci_pci_driver = {
  2458. name: "usb-uhci",
  2459. id_table: uhci_pci_ids,
  2460. probe: uhci_pci_probe,
  2461. remove: __devexit_p(uhci_pci_remove),
  2462. #ifdef CONFIG_PM
  2463. suspend: uhci_pci_suspend,
  2464. resume: uhci_pci_resume,
  2465. #endif /* PM */
  2466. };
  2467.  
  2468. static int __init uhci_hcd_init(void)
  2469. {
  2470. int retval = -ENOMEM;
  2471. info(DRIVER_DESC " " DRIVER_VERSION);
  2472. if (debug) {
  2473. errbuf = kmalloc(ERRBUF_LEN, GFP_KERNEL);
  2474. if (!errbuf)
  2475. goto errbuf_failed;
  2476. }
  2477. #ifdef CONFIG_PROC_FS
  2478. uhci_proc_root = create_proc_entry("driver/uhci", S_IFDIR, 0);
  2479. if (!uhci_proc_root)
  2480. goto proc_failed;
  2481. #endif
  2482. uhci_up_cachep = kmem_cache_create("uhci_urb_priv",
  2483. sizeof(struct urb_priv), 0, 0, NULL, NULL);
  2484. if (!uhci_up_cachep)
  2485. goto up_failed;
  2486. retval = pci_module_init(&uhci_pci_driver);
  2487. if (retval)
  2488. goto init_failed;
  2489. return 0;
  2490. init_failed:
  2491. if (kmem_cache_destroy(uhci_up_cachep))
  2492. printk(KERN_INFO "uhci: not all urb_priv's were freedn");
  2493. up_failed:
  2494. #ifdef CONFIG_PROC_FS
  2495. remove_proc_entry("uhci", 0);
  2496. proc_failed:
  2497. #endif
  2498. if (errbuf)
  2499. kfree(errbuf);
  2500. errbuf_failed:
  2501. return retval;
  2502. }
  2503. static void __exit uhci_hcd_cleanup(void) 
  2504. {
  2505. pci_unregister_driver(&uhci_pci_driver);
  2506. if (kmem_cache_destroy(uhci_up_cachep))
  2507. printk(KERN_INFO "uhci: not all urb_priv's were freedn");
  2508. #ifdef CONFIG_PROC_FS
  2509. remove_proc_entry("uhci", 0);
  2510. #endif
  2511. if (errbuf)
  2512. kfree(errbuf);
  2513. }
  2514. module_init(uhci_hcd_init);
  2515. module_exit(uhci_hcd_cleanup);
  2516. MODULE_AUTHOR(DRIVER_AUTHOR);
  2517. MODULE_DESCRIPTION(DRIVER_DESC);
  2518. MODULE_LICENSE("GPL");