uhci.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:73k
源码类别:

嵌入式Linux

开发平台:

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