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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 2001-2002 by David Brownell
  3.  * 
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of the GNU General Public License as published by the
  6.  * Free Software Foundation; either version 2 of the License, or (at your
  7.  * option) any later version.
  8.  *
  9.  * This program is distributed in the hope that it will be useful, but
  10.  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11.  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12.  * for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software Foundation,
  16.  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  */
  18. #include <linux/config.h>
  19. #include <linux/module.h>
  20. #include <linux/pci.h>
  21. #include <linux/kernel.h>
  22. #include <linux/delay.h>
  23. #include <linux/ioport.h>
  24. #include <linux/sched.h>
  25. #include <linux/slab.h>
  26. #include <linux/smp_lock.h>
  27. #include <linux/errno.h>
  28. #include <linux/kmod.h>
  29. #include <linux/init.h>
  30. #include <linux/timer.h>
  31. #include <linux/list.h>
  32. #include <linux/interrupt.h>
  33. #include <linux/completion.h>
  34. #include <linux/uts.h> /* for UTS_SYSNAME */
  35. #ifdef CONFIG_USB_DEBUG
  36. #define DEBUG
  37. #else
  38. #undef DEBUG
  39. #endif
  40. #include <linux/usb.h>
  41. #include "hcd.h"
  42. #include <asm/io.h>
  43. #include <asm/irq.h>
  44. #include <asm/system.h>
  45. #include <asm/unaligned.h>
  46. /*-------------------------------------------------------------------------*/
  47. /*
  48.  * USB Host Controller Driver framework
  49.  *
  50.  * Plugs into usbcore (usb_bus) and lets HCDs share code, minimizing
  51.  * HCD-specific behaviors/bugs.  Think of it as the "upper level" of
  52.  * some drivers, where the "lower level" is hardware-specific.
  53.  *
  54.  * This does error checks, tracks devices and urbs, and delegates to a
  55.  * "hc_driver" only for code (and data) that really needs to know about
  56.  * hardware differences.  That includes root hub registers, i/o queues,
  57.  * and so on ... but as little else as possible.
  58.  *
  59.  * Shared code includes most of the "root hub" code (these are emulated,
  60.  * though each HC's hardware works differently) and PCI glue, plus request
  61.  * tracking overhead.  The HCD code should only block on spinlocks or on
  62.  * hardware handshaking; blocking on software events (such as other kernel
  63.  * threads releasing resources, or completing actions) is all generic.
  64.  *
  65.  * Happens the USB 2.0 spec says this would be invisible inside the "USBD",
  66.  * and includes mostly a "HCDI" (HCD Interface) along with some APIs used
  67.  * only by the hub driver ... and that neither should be seen or used by
  68.  * usb client device drivers.
  69.  *
  70.  * Contributors of ideas or unattributed patches include: David Brownell,
  71.  * Roman Weissgaerber, Rory Bolt, ...
  72.  *
  73.  * HISTORY:
  74.  * 2002-sept Merge some 2.5 updates so we can share hardware level HCD
  75.  *  code between the 2.4.20+ and 2.5 trees.
  76.  * 2002-feb merge to 2.4.19
  77.  * 2001-12-12 Initial patch version for Linux 2.5.1 kernel.
  78.  */
  79. /*-------------------------------------------------------------------------*/
  80. /* host controllers we manage */
  81. static LIST_HEAD (hcd_list);
  82. /* used when updating list of hcds */
  83. static DECLARE_MUTEX (hcd_list_lock);
  84. /* used when updating hcd data */
  85. static spinlock_t hcd_data_lock = SPIN_LOCK_UNLOCKED;
  86. static struct usb_operations hcd_operations;
  87. /*-------------------------------------------------------------------------*/
  88. /*
  89.  * Sharable chunks of root hub code.
  90.  */
  91. /*-------------------------------------------------------------------------*/
  92. #define KERNEL_REL ((LINUX_VERSION_CODE >> 16) & 0x0ff)
  93. #define KERNEL_VER ((LINUX_VERSION_CODE >> 8) & 0x0ff)
  94. /* usb 2.0 root hub device descriptor */
  95. static const u8 usb2_rh_dev_descriptor [18] = {
  96. 0x12,       /*  __u8  bLength; */
  97. 0x01,       /*  __u8  bDescriptorType; Device */
  98. 0x00, 0x02, /*  __u16 bcdUSB; v2.0 */
  99. 0x09,     /*  __u8  bDeviceClass; HUB_CLASSCODE */
  100. 0x00,     /*  __u8  bDeviceSubClass; */
  101. 0x01,       /*  __u8  bDeviceProtocol; [ usb 2.0 single TT ]*/
  102. 0x08,       /*  __u8  bMaxPacketSize0; 8 Bytes */
  103. 0x00, 0x00, /*  __u16 idVendor; */
  104.   0x00, 0x00, /*  __u16 idProduct; */
  105. KERNEL_VER, KERNEL_REL, /*  __u16 bcdDevice */
  106. 0x03,       /*  __u8  iManufacturer; */
  107. 0x02,       /*  __u8  iProduct; */
  108. 0x01,       /*  __u8  iSerialNumber; */
  109. 0x01        /*  __u8  bNumConfigurations; */
  110. };
  111. /* no usb 2.0 root hub "device qualifier" descriptor: one speed only */
  112. /* usb 1.1 root hub device descriptor */
  113. static const u8 usb11_rh_dev_descriptor [18] = {
  114. 0x12,       /*  __u8  bLength; */
  115. 0x01,       /*  __u8  bDescriptorType; Device */
  116. 0x10, 0x01, /*  __u16 bcdUSB; v1.1 */
  117. 0x09,     /*  __u8  bDeviceClass; HUB_CLASSCODE */
  118. 0x00,     /*  __u8  bDeviceSubClass; */
  119. 0x00,       /*  __u8  bDeviceProtocol; [ low/full speeds only ] */
  120. 0x08,       /*  __u8  bMaxPacketSize0; 8 Bytes */
  121. 0x00, 0x00, /*  __u16 idVendor; */
  122.   0x00, 0x00, /*  __u16 idProduct; */
  123. KERNEL_VER, KERNEL_REL, /*  __u16 bcdDevice */
  124. 0x03,       /*  __u8  iManufacturer; */
  125. 0x02,       /*  __u8  iProduct; */
  126. 0x01,       /*  __u8  iSerialNumber; */
  127. 0x01        /*  __u8  bNumConfigurations; */
  128. };
  129. /*-------------------------------------------------------------------------*/
  130. /* Configuration descriptors for our root hubs */
  131. static const u8 fs_rh_config_descriptor [] = {
  132. /* one configuration */
  133. 0x09,       /*  __u8  bLength; */
  134. 0x02,       /*  __u8  bDescriptorType; Configuration */
  135. 0x19, 0x00, /*  __u16 wTotalLength; */
  136. 0x01,       /*  __u8  bNumInterfaces; (1) */
  137. 0x01,       /*  __u8  bConfigurationValue; */
  138. 0x00,       /*  __u8  iConfiguration; */
  139. 0x40,       /*  __u8  bmAttributes; 
  140.  Bit 7: Bus-powered,
  141.      6: Self-powered,
  142.      5 Remote-wakwup,
  143.      4..0: resvd */
  144. 0x00,       /*  __u8  MaxPower; */
  145.       
  146. /* USB 1.1:
  147.  * USB 2.0, single TT organization (mandatory):
  148.  * one interface, protocol 0
  149.  *
  150.  * USB 2.0, multiple TT organization (optional):
  151.  * two interfaces, protocols 1 (like single TT)
  152.  * and 2 (multiple TT mode) ... config is
  153.  * sometimes settable
  154.  * NOT IMPLEMENTED
  155.  */
  156. /* one interface */
  157. 0x09,       /*  __u8  if_bLength; */
  158. 0x04,       /*  __u8  if_bDescriptorType; Interface */
  159. 0x00,       /*  __u8  if_bInterfaceNumber; */
  160. 0x00,       /*  __u8  if_bAlternateSetting; */
  161. 0x01,       /*  __u8  if_bNumEndpoints; */
  162. 0x09,       /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
  163. 0x00,       /*  __u8  if_bInterfaceSubClass; */
  164. 0x00,       /*  __u8  if_bInterfaceProtocol; [usb1.1 or single tt] */
  165. 0x00,       /*  __u8  if_iInterface; */
  166.      
  167. /* one endpoint (status change endpoint) */
  168. 0x07,       /*  __u8  ep_bLength; */
  169. 0x05,       /*  __u8  ep_bDescriptorType; Endpoint */
  170. 0x81,       /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
  171.   0x03,       /*  __u8  ep_bmAttributes; Interrupt */
  172.   0x02, 0x00, /*  __u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
  173. 0xff        /*  __u8  ep_bInterval; (255ms -- usb 2.0 spec) */
  174. };
  175. static const u8 hs_rh_config_descriptor [] = {
  176. /* one configuration */
  177. 0x09,       /*  __u8  bLength; */
  178. 0x02,       /*  __u8  bDescriptorType; Configuration */
  179. 0x19, 0x00, /*  __u16 wTotalLength; */
  180. 0x01,       /*  __u8  bNumInterfaces; (1) */
  181. 0x01,       /*  __u8  bConfigurationValue; */
  182. 0x00,       /*  __u8  iConfiguration; */
  183. 0x40,       /*  __u8  bmAttributes; 
  184.  Bit 7: Bus-powered,
  185.      6: Self-powered,
  186.      5 Remote-wakwup,
  187.      4..0: resvd */
  188. 0x00,       /*  __u8  MaxPower; */
  189.       
  190. /* USB 1.1:
  191.  * USB 2.0, single TT organization (mandatory):
  192.  * one interface, protocol 0
  193.  *
  194.  * USB 2.0, multiple TT organization (optional):
  195.  * two interfaces, protocols 1 (like single TT)
  196.  * and 2 (multiple TT mode) ... config is
  197.  * sometimes settable
  198.  * NOT IMPLEMENTED
  199.  */
  200. /* one interface */
  201. 0x09,       /*  __u8  if_bLength; */
  202. 0x04,       /*  __u8  if_bDescriptorType; Interface */
  203. 0x00,       /*  __u8  if_bInterfaceNumber; */
  204. 0x00,       /*  __u8  if_bAlternateSetting; */
  205. 0x01,       /*  __u8  if_bNumEndpoints; */
  206. 0x09,       /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
  207. 0x00,       /*  __u8  if_bInterfaceSubClass; */
  208. 0x00,       /*  __u8  if_bInterfaceProtocol; [usb1.1 or single tt] */
  209. 0x00,       /*  __u8  if_iInterface; */
  210.      
  211. /* one endpoint (status change endpoint) */
  212. 0x07,       /*  __u8  ep_bLength; */
  213. 0x05,       /*  __u8  ep_bDescriptorType; Endpoint */
  214. 0x81,       /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
  215.   0x03,       /*  __u8  ep_bmAttributes; Interrupt */
  216.   0x02, 0x00, /*  __u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
  217. 0x0c        /*  __u8  ep_bInterval; (256ms -- usb 2.0 spec) */
  218. };
  219. /*-------------------------------------------------------------------------*/
  220. /*
  221.  * helper routine for returning string descriptors in UTF-16LE
  222.  * input can actually be ISO-8859-1; ASCII is its 7-bit subset
  223.  */
  224. static int ascii2utf (char *s, u8 *utf, int utfmax)
  225. {
  226. int retval;
  227. for (retval = 0; *s && utfmax > 1; utfmax -= 2, retval += 2) {
  228. *utf++ = *s++;
  229. *utf++ = 0;
  230. }
  231. return retval;
  232. }
  233. /*
  234.  * rh_string - provides manufacturer, product and serial strings for root hub
  235.  * @id: the string ID number (1: serial number, 2: product, 3: vendor)
  236.  * @pci_desc: PCI device descriptor for the relevant HC
  237.  * @type: string describing our driver 
  238.  * @data: return packet in UTF-16 LE
  239.  * @len: length of the return packet
  240.  *
  241.  * Produces either a manufacturer, product or serial number string for the
  242.  * virtual root hub device.
  243.  */
  244. static int rh_string (
  245. int id,
  246. struct usb_hcd *hcd,
  247. u8 *data,
  248. int len
  249. ) {
  250. char buf [100];
  251. // language ids
  252. if (id == 0) {
  253. *data++ = 4; *data++ = 3; /* 4 bytes string data */
  254. *data++ = 0; *data++ = 0; /* some language id */
  255. return 4;
  256. // serial number
  257. } else if (id == 1) {
  258. strcpy (buf, hcd->bus_name);
  259. // product description
  260. } else if (id == 2) {
  261.                 strcpy (buf, hcd->product_desc);
  262.   // id 3 == vendor description
  263. } else if (id == 3) {
  264.                 sprintf (buf, "%s %s %s", UTS_SYSNAME, UTS_RELEASE,
  265. hcd->description);
  266. // unsupported IDs --> "protocol stall"
  267. } else
  268.     return 0;
  269. data [0] = 2 + ascii2utf (buf, data + 2, len - 2);
  270. data [1] = 3; /* type == string */
  271. return data [0];
  272. }
  273. /* Root hub control transfers execute synchronously */
  274. static int rh_call_control (struct usb_hcd *hcd, struct urb *urb)
  275. {
  276. struct usb_ctrlrequest *cmd = (struct usb_ctrlrequest *) urb->setup_packet;
  277.   u16 typeReq, wValue, wIndex, wLength;
  278. const u8 *bufp = 0;
  279. u8 *ubuf = urb->transfer_buffer;
  280. int len = 0;
  281. typeReq  = (cmd->bRequestType << 8) | cmd->bRequest;
  282. wValue   = le16_to_cpu (cmd->wValue);
  283. wIndex   = le16_to_cpu (cmd->wIndex);
  284. wLength  = le16_to_cpu (cmd->wLength);
  285. if (wLength > urb->transfer_buffer_length)
  286. goto error;
  287. /* set up for success */
  288. urb->status = 0;
  289. urb->actual_length = wLength;
  290. switch (typeReq) {
  291. /* DEVICE REQUESTS */
  292. case DeviceRequest | USB_REQ_GET_STATUS:
  293. // DEVICE_REMOTE_WAKEUP
  294. ubuf [0] = 1; // selfpowered
  295. ubuf [1] = 0;
  296. /* FALLTHROUGH */
  297. case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
  298. case DeviceOutRequest | USB_REQ_SET_FEATURE:
  299. dbg ("no device features yet yet");
  300. break;
  301. case DeviceRequest | USB_REQ_GET_CONFIGURATION:
  302. ubuf [0] = 1;
  303. /* FALLTHROUGH */
  304. case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
  305. break;
  306. case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
  307. switch (wValue & 0xff00) {
  308. case USB_DT_DEVICE << 8:
  309. if (hcd->driver->flags & HCD_USB2)
  310. bufp = usb2_rh_dev_descriptor;
  311. else if (hcd->driver->flags & HCD_USB11)
  312. bufp = usb11_rh_dev_descriptor;
  313. else
  314. goto error;
  315. len = 18;
  316. break;
  317. case USB_DT_CONFIG << 8:
  318. if (hcd->driver->flags & HCD_USB2) {
  319. bufp = hs_rh_config_descriptor;
  320. len = sizeof hs_rh_config_descriptor;
  321. } else {
  322. bufp = fs_rh_config_descriptor;
  323. len = sizeof fs_rh_config_descriptor;
  324. }
  325. break;
  326. case USB_DT_STRING << 8:
  327. urb->actual_length = rh_string (
  328. wValue & 0xff, hcd,
  329. ubuf, wLength);
  330. break;
  331. default:
  332. goto error;
  333. }
  334. break;
  335. case DeviceRequest | USB_REQ_GET_INTERFACE:
  336. ubuf [0] = 0;
  337. /* FALLTHROUGH */
  338. case DeviceOutRequest | USB_REQ_SET_INTERFACE:
  339. break;
  340. case DeviceOutRequest | USB_REQ_SET_ADDRESS:
  341. // wValue == urb->dev->devaddr
  342. dbg ("%s root hub device address %d",
  343. hcd->bus_name, wValue);
  344. break;
  345. /* INTERFACE REQUESTS (no defined feature/status flags) */
  346. /* ENDPOINT REQUESTS */
  347. case EndpointRequest | USB_REQ_GET_STATUS:
  348. // ENDPOINT_HALT flag
  349. ubuf [0] = 0;
  350. ubuf [1] = 0;
  351. /* FALLTHROUGH */
  352. case EndpointOutRequest | USB_REQ_CLEAR_FEATURE:
  353. case EndpointOutRequest | USB_REQ_SET_FEATURE:
  354. dbg ("no endpoint features yet");
  355. break;
  356. /* CLASS REQUESTS (and errors) */
  357. default:
  358. /* non-generic request */
  359. urb->status = hcd->driver->hub_control (hcd,
  360. typeReq, wValue, wIndex,
  361. ubuf, wLength);
  362. break;
  363. error:
  364. /* "protocol stall" on error */
  365. urb->status = -EPIPE;
  366. dbg ("unsupported hub control message (maxchild %d)",
  367. urb->dev->maxchild);
  368. }
  369. if (urb->status) {
  370. urb->actual_length = 0;
  371. dbg ("CTRL: TypeReq=0x%x val=0x%x idx=0x%x len=%d ==> %d",
  372. typeReq, wValue, wIndex, wLength, urb->status);
  373. }
  374. if (bufp) {
  375. if (urb->transfer_buffer_length < len)
  376. len = urb->transfer_buffer_length;
  377. urb->actual_length = len;
  378. // always USB_DIR_IN, toward host
  379. memcpy (ubuf, bufp, len);
  380. }
  381. /* any errors get returned through the urb completion */
  382. usb_hcd_giveback_urb (hcd, urb);
  383. return 0;
  384. }
  385. /*-------------------------------------------------------------------------*/
  386. /*
  387.  * Root Hub interrupt transfers are synthesized with a timer.
  388.  * Completions are called in_interrupt() but not in_irq().
  389.  */
  390. static void rh_report_status (unsigned long ptr);
  391. static int rh_status_urb (struct usb_hcd *hcd, struct urb *urb) 
  392. {
  393. int len = 1 + (urb->dev->maxchild / 8);
  394. /* rh_timer protected by hcd_data_lock */
  395. if (timer_pending (&hcd->rh_timer)
  396. || urb->status != -EINPROGRESS
  397. || !HCD_IS_RUNNING (hcd->state)
  398. || urb->transfer_buffer_length < len) {
  399. dbg ("not queuing status urb, stat %d", urb->status);
  400. return -EINVAL;
  401. }
  402. urb->hcpriv = hcd; /* nonzero to indicate it's queued */
  403. init_timer (&hcd->rh_timer);
  404. hcd->rh_timer.function = rh_report_status;
  405. hcd->rh_timer.data = (unsigned long) urb;
  406. /* USB 2.0 spec says 256msec; this is close enough */
  407. hcd->rh_timer.expires = jiffies + HZ/4;
  408. add_timer (&hcd->rh_timer);
  409. return 0;
  410. }
  411. /* timer callback */
  412. static void rh_report_status (unsigned long ptr)
  413. {
  414. struct urb *urb;
  415. struct usb_hcd *hcd;
  416. int length;
  417. unsigned long flags;
  418. urb = (struct urb *) ptr;
  419. spin_lock_irqsave (&urb->lock, flags);
  420. if (!urb->dev) {
  421. spin_unlock_irqrestore (&urb->lock, flags);
  422. return;
  423. }
  424. hcd = urb->dev->bus->hcpriv;
  425. if (urb->status == -EINPROGRESS) {
  426. if (HCD_IS_RUNNING (hcd->state)) {
  427. length = hcd->driver->hub_status_data (hcd,
  428. urb->transfer_buffer);
  429. spin_unlock_irqrestore (&urb->lock, flags);
  430. if (length > 0) {
  431. urb->actual_length = length;
  432. urb->status = 0;
  433. urb->complete (urb);
  434. }
  435. spin_lock_irqsave (&hcd_data_lock, flags);
  436. urb->status = -EINPROGRESS;
  437. if (HCD_IS_RUNNING (hcd->state)
  438. && rh_status_urb (hcd, urb) != 0) {
  439. /* another driver snuck in? */
  440. dbg ("%s, can't resubmit roothub status urb?",
  441. hcd->bus_name);
  442. spin_unlock_irqrestore (&hcd_data_lock, flags);
  443. BUG ();
  444. }
  445. spin_unlock_irqrestore (&hcd_data_lock, flags);
  446. } else
  447. spin_unlock_irqrestore (&urb->lock, flags);
  448. } else {
  449. /* this urb's been unlinked */
  450. urb->hcpriv = 0;
  451. spin_unlock_irqrestore (&urb->lock, flags);
  452. usb_hcd_giveback_urb (hcd, urb);
  453. }
  454. }
  455. /*-------------------------------------------------------------------------*/
  456. static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb)
  457. {
  458. if (usb_pipeint (urb->pipe)) {
  459. int retval;
  460. unsigned long flags;
  461. spin_lock_irqsave (&hcd_data_lock, flags);
  462. retval = rh_status_urb (hcd, urb);
  463. spin_unlock_irqrestore (&hcd_data_lock, flags);
  464. return retval;
  465. }
  466. if (usb_pipecontrol (urb->pipe))
  467. return rh_call_control (hcd, urb);
  468. else
  469. return -EINVAL;
  470. }
  471. /*-------------------------------------------------------------------------*/
  472. static void rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb)
  473. {
  474. unsigned long flags;
  475. spin_lock_irqsave (&hcd_data_lock, flags);
  476. del_timer_sync (&hcd->rh_timer);
  477. hcd->rh_timer.data = 0;
  478. spin_unlock_irqrestore (&hcd_data_lock, flags);
  479. /* we rely on RH callback code not unlinking its URB! */
  480. usb_hcd_giveback_urb (hcd, urb);
  481. }
  482. /*-------------------------------------------------------------------------*/
  483. #ifdef CONFIG_PCI
  484. /* PCI-based HCs are normal, but custom bus glue should be ok */
  485. static void hcd_irq (int irq, void *__hcd, struct pt_regs *r);
  486. static void hc_died (struct usb_hcd *hcd);
  487. /*-------------------------------------------------------------------------*/
  488. /* configure so an HC device and id are always provided */
  489. /* always called with process context; sleeping is OK */
  490. /**
  491.  * usb_hcd_pci_probe - initialize PCI-based HCDs
  492.  * @dev: USB Host Controller being probed
  493.  * @id: pci hotplug id connecting controller to HCD framework
  494.  * Context: !in_interrupt()
  495.  *
  496.  * Allocates basic PCI resources for this USB host controller, and
  497.  * then invokes the start() method for the HCD associated with it
  498.  * through the hotplug entry's driver_data.
  499.  *
  500.  * Store this function in the HCD's struct pci_driver as probe().
  501.  */
  502. int usb_hcd_pci_probe (struct pci_dev *dev, const struct pci_device_id *id)
  503. {
  504. struct hc_driver *driver;
  505. unsigned long resource, len;
  506. void *base;
  507. struct usb_bus *bus;
  508. struct usb_hcd *hcd;
  509. int retval, region;
  510. char buf [8], *bufp = buf;
  511. if (!id || !(driver = (struct hc_driver *) id->driver_data))
  512. return -EINVAL;
  513. if (pci_enable_device (dev) < 0)
  514. return -ENODEV;
  515.         if (!dev->irq) {
  516.          err ("Found HC with no IRQ.  Check BIOS/PCI %s setup!",
  517. dev->slot_name);
  518.             return -ENODEV;
  519.         }
  520. if (driver->flags & HCD_MEMORY) { // EHCI, OHCI
  521. region = 0;
  522. resource = pci_resource_start (dev, 0);
  523. len = pci_resource_len (dev, 0);
  524. if (!request_mem_region (resource, len, driver->description)) {
  525. dbg ("controller already in use");
  526. return -EBUSY;
  527. }
  528. base = ioremap_nocache (resource, len);
  529. if (base == NULL) {
  530. dbg ("error mapping memory");
  531. retval = -EFAULT;
  532. clean_1:
  533. release_mem_region (resource, len);
  534. err ("init %s fail, %d", dev->slot_name, retval);
  535. return retval;
  536. }
  537. } else {  // UHCI
  538. resource = len = 0;
  539. for (region = 0; region < PCI_ROM_RESOURCE; region++) {
  540. if (!(pci_resource_flags (dev, region) & IORESOURCE_IO))
  541. continue;
  542. resource = pci_resource_start (dev, region);
  543. len = pci_resource_len (dev, region);
  544. if (request_region (resource, len,
  545. driver->description))
  546. break;
  547. }
  548. if (region == PCI_ROM_RESOURCE) {
  549. dbg ("no i/o regions available");
  550. return -EBUSY;
  551. }
  552. base = (void *) resource;
  553. }
  554. // driver->start(), later on, will transfer device from
  555. // control by SMM/BIOS to control by Linux (if needed)
  556. pci_set_master (dev);
  557. hcd = driver->hcd_alloc ();
  558. if (hcd == NULL){
  559. dbg ("hcd alloc fail");
  560. retval = -ENOMEM;
  561. clean_2:
  562. if (driver->flags & HCD_MEMORY) {
  563. iounmap (base);
  564. goto clean_1;
  565. } else {
  566. release_region (resource, len);
  567. err ("init %s fail, %d", dev->slot_name, retval);
  568. return retval;
  569. }
  570. }
  571. pci_set_drvdata(dev, hcd);
  572. hcd->driver = driver;
  573. hcd->description = driver->description;
  574. hcd->pdev = dev;
  575. info ("%s @ %s, %s", hcd->description,  dev->slot_name, dev->name);
  576. #ifndef __sparc__
  577. sprintf (buf, "%d", dev->irq);
  578. #else
  579. bufp = __irq_itoa(dev->irq);
  580. #endif
  581. if (request_irq (dev->irq, hcd_irq, SA_SHIRQ, hcd->description, hcd)
  582. != 0) {
  583. err ("request interrupt %s failed", bufp);
  584. retval = -EBUSY;
  585. clean_3:
  586. driver->hcd_free (hcd);
  587. goto clean_2;
  588. }
  589. hcd->irq = dev->irq;
  590. hcd->regs = base;
  591. hcd->region = region;
  592. info ("irq %s, %s %p", bufp,
  593. (driver->flags & HCD_MEMORY) ? "pci mem" : "io base",
  594. base);
  595. // FIXME simpler: make "bus" be that data, not pointer to it.
  596. bus = usb_alloc_bus (&hcd_operations);
  597. if (bus == NULL) {
  598. dbg ("usb_alloc_bus fail");
  599. retval = -ENOMEM;
  600. free_irq (dev->irq, hcd);
  601. goto clean_3;
  602. }
  603. hcd->bus = bus;
  604. hcd->bus_name = dev->slot_name; /* prefer bus->bus_name */
  605. bus->bus_name = dev->slot_name;
  606. hcd->product_desc = dev->name;
  607. bus->hcpriv = (void *) hcd;
  608. INIT_LIST_HEAD (&hcd->dev_list);
  609. INIT_LIST_HEAD (&hcd->hcd_list);
  610. down (&hcd_list_lock);
  611. list_add (&hcd->hcd_list, &hcd_list);
  612. up (&hcd_list_lock);
  613. usb_register_bus (bus);
  614. if ((retval = driver->start (hcd)) < 0)
  615. usb_hcd_pci_remove (dev);
  616. return retval;
  617. EXPORT_SYMBOL (usb_hcd_pci_probe);
  618. /* may be called without controller electrically present */
  619. /* may be called with controller, bus, and devices active */
  620. /**
  621.  * usb_hcd_pci_remove - shutdown processing for PCI-based HCDs
  622.  * @dev: USB Host Controller being removed
  623.  * Context: !in_interrupt()
  624.  *
  625.  * Reverses the effect of usb_hcd_pci_probe(), first invoking
  626.  * the HCD's stop() method.  It is always called from a thread
  627.  * context, normally "rmmod", "apmd", or something similar.
  628.  *
  629.  * Store this function in the HCD's struct pci_driver as remove().
  630.  */
  631. void usb_hcd_pci_remove (struct pci_dev *dev)
  632. {
  633. struct usb_hcd *hcd;
  634. struct usb_device *hub;
  635. hcd = pci_get_drvdata(dev);
  636. if (!hcd)
  637. return;
  638. info ("remove: %s, state %x", hcd->bus_name, hcd->state);
  639. if (in_interrupt ()) BUG ();
  640. hub = hcd->bus->root_hub;
  641. hcd->state = USB_STATE_QUIESCING;
  642. dbg ("%s: roothub graceful disconnect", hcd->bus_name);
  643. usb_disconnect (&hub);
  644. // usb_disconnect (&hcd->bus->root_hub);
  645. hcd->driver->stop (hcd);
  646. hcd->state = USB_STATE_HALT;
  647. free_irq (hcd->irq, hcd);
  648. if (hcd->driver->flags & HCD_MEMORY) {
  649. iounmap (hcd->regs);
  650. release_mem_region (pci_resource_start (dev, 0),
  651. pci_resource_len (dev, 0));
  652. } else {
  653. release_region (pci_resource_start (dev, hcd->region),
  654. pci_resource_len (dev, hcd->region));
  655. }
  656. down (&hcd_list_lock);
  657. list_del (&hcd->hcd_list);
  658. up (&hcd_list_lock);
  659. usb_deregister_bus (hcd->bus);
  660. usb_free_bus (hcd->bus);
  661. hcd->bus = NULL;
  662. hcd->driver->hcd_free (hcd);
  663. }
  664. EXPORT_SYMBOL (usb_hcd_pci_remove);
  665. #ifdef CONFIG_PM
  666. /*
  667.  * Some "sleep" power levels imply updating struct usb_driver
  668.  * to include a callback asking hcds to do their bit by checking
  669.  * if all the drivers can suspend.  Gets involved with remote wakeup.
  670.  *
  671.  * If there are pending urbs, then HCs will need to access memory,
  672.  * causing extra power drain.  New sleep()/wakeup() PM calls might
  673.  * be needed, beyond PCI suspend()/resume().  The root hub timer
  674.  * still be accessing memory though ...
  675.  *
  676.  * FIXME:  USB should have some power budgeting support working with
  677.  * all kinds of hubs.
  678.  *
  679.  * FIXME:  This assumes only D0->D3 suspend and D3->D0 resume.
  680.  * D1 and D2 states should do something, yes?
  681.  *
  682.  * FIXME:  Should provide generic enable_wake(), calling pci_enable_wake()
  683.  * for all supported states, so that USB remote wakeup can work for any
  684.  * devices that support it (and are connected via powered hubs).
  685.  *
  686.  * FIXME:  resume doesn't seem to work right any more...
  687.  */
  688. // 2.4 kernels have issued concurrent resumes (w/APM)
  689. // we defend against that error; PCI doesn't yet.
  690. /**
  691.  * usb_hcd_pci_suspend - power management suspend of a PCI-based HCD
  692.  * @dev: USB Host Controller being suspended
  693.  *
  694.  * Store this function in the HCD's struct pci_driver as suspend().
  695.  */
  696. int usb_hcd_pci_suspend (struct pci_dev *dev, u32 state)
  697. {
  698. struct usb_hcd *hcd;
  699. int retval;
  700. hcd = pci_get_drvdata(dev);
  701. info ("suspend %s to state %d", hcd->bus_name, state);
  702. pci_save_state (dev, hcd->pci_state);
  703. // FIXME for all connected devices, leaf-to-root:
  704. // driver->suspend()
  705. // proposed "new 2.5 driver model" will automate that
  706. /* driver may want to disable DMA etc */
  707. retval = hcd->driver->suspend (hcd, state);
  708. hcd->state = USB_STATE_SUSPENDED;
  709.   pci_set_power_state (dev, state);
  710. return retval;
  711. }
  712. EXPORT_SYMBOL (usb_hcd_pci_suspend);
  713. /**
  714.  * usb_hcd_pci_resume - power management resume of a PCI-based HCD
  715.  * @dev: USB Host Controller being resumed
  716.  *
  717.  * Store this function in the HCD's struct pci_driver as resume().
  718.  */
  719. int usb_hcd_pci_resume (struct pci_dev *dev)
  720. {
  721. struct usb_hcd *hcd;
  722. int retval;
  723. hcd = pci_get_drvdata(dev);
  724. info ("resume %s", hcd->bus_name);
  725. /* guard against multiple resumes (APM bug?) */
  726. atomic_inc (&hcd->resume_count);
  727. if (atomic_read (&hcd->resume_count) != 1) {
  728. err ("concurrent PCI resumes for %s", hcd->bus_name);
  729. retval = 0;
  730. goto done;
  731. }
  732. retval = -EBUSY;
  733. if (hcd->state != USB_STATE_SUSPENDED) {
  734. dbg ("can't resume, not suspended!");
  735. goto done;
  736. }
  737. hcd->state = USB_STATE_RESUMING;
  738. pci_set_power_state (dev, 0);
  739. pci_restore_state (dev, hcd->pci_state);
  740. retval = hcd->driver->resume (hcd);
  741. if (!HCD_IS_RUNNING (hcd->state)) {
  742. dbg ("resume %s failure, retval %d", hcd->bus_name, retval);
  743. hc_died (hcd);
  744. // FIXME:  recover, reset etc.
  745. } else {
  746. // FIXME for all connected devices, root-to-leaf:
  747. // driver->resume ();
  748. // proposed "new 2.5 driver model" will automate that
  749. }
  750. done:
  751. atomic_dec (&hcd->resume_count);
  752. return retval;
  753. }
  754. EXPORT_SYMBOL (usb_hcd_pci_resume);
  755. #endif /* CONFIG_PM */
  756. #endif
  757. /*-------------------------------------------------------------------------*/
  758. /*
  759.  * Generic HC operations.
  760.  */
  761. /*-------------------------------------------------------------------------*/
  762. /* called from khubd, or root hub init threads for hcd-private init */
  763. static int hcd_alloc_dev (struct usb_device *udev)
  764. {
  765. struct hcd_dev *dev;
  766. struct usb_hcd *hcd;
  767. unsigned long flags;
  768. if (!udev || udev->hcpriv)
  769. return -EINVAL;
  770. if (!udev->bus || !udev->bus->hcpriv)
  771. return -ENODEV;
  772. hcd = udev->bus->hcpriv;
  773. if (hcd->state == USB_STATE_QUIESCING)
  774. return -ENOLINK;
  775. dev = (struct hcd_dev *) kmalloc (sizeof *dev, GFP_KERNEL);
  776. if (dev == NULL)
  777. return -ENOMEM;
  778. memset (dev, 0, sizeof *dev);
  779. INIT_LIST_HEAD (&dev->dev_list);
  780. INIT_LIST_HEAD (&dev->urb_list);
  781. spin_lock_irqsave (&hcd_data_lock, flags);
  782. list_add (&dev->dev_list, &hcd->dev_list);
  783. // refcount is implicit
  784. udev->hcpriv = dev;
  785. spin_unlock_irqrestore (&hcd_data_lock, flags);
  786. return 0;
  787. }
  788. /*-------------------------------------------------------------------------*/
  789. static void hc_died (struct usb_hcd *hcd)
  790. {
  791. struct list_head *devlist, *urblist;
  792. struct hcd_dev *dev;
  793. struct urb *urb;
  794. unsigned long flags;
  795. /* flag every pending urb as done */
  796. spin_lock_irqsave (&hcd_data_lock, flags);
  797. list_for_each (devlist, &hcd->dev_list) {
  798. dev = list_entry (devlist, struct hcd_dev, dev_list);
  799. list_for_each (urblist, &dev->urb_list) {
  800. urb = list_entry (urblist, struct urb, urb_list);
  801. dbg ("shutdown %s urb %p pipe %x, current status %d",
  802. hcd->bus_name, urb, urb->pipe, urb->status);
  803. if (urb->status == -EINPROGRESS)
  804. urb->status = -ESHUTDOWN;
  805. }
  806. }
  807. urb = (struct urb *) hcd->rh_timer.data;
  808. if (urb)
  809. urb->status = -ESHUTDOWN;
  810. spin_unlock_irqrestore (&hcd_data_lock, flags);
  811. if (urb)
  812. rh_status_dequeue (hcd, urb);
  813. hcd->driver->stop (hcd);
  814. }
  815. /*-------------------------------------------------------------------------*/
  816. static void urb_unlink (struct urb *urb)
  817. {
  818. unsigned long flags;
  819. struct usb_device *dev;
  820. /* Release any periodic transfer bandwidth */
  821. if (urb->bandwidth)
  822. usb_release_bandwidth (urb->dev, urb,
  823. usb_pipeisoc (urb->pipe));
  824. /* clear all state linking urb to this dev (and hcd) */
  825. spin_lock_irqsave (&hcd_data_lock, flags);
  826. list_del_init (&urb->urb_list);
  827. dev = urb->dev;
  828. urb->dev = NULL;
  829. usb_dec_dev_use (dev);
  830. spin_unlock_irqrestore (&hcd_data_lock, flags);
  831. }
  832. /* may be called in any context with a valid urb->dev usecount */
  833. /* caller surrenders "ownership" of urb */
  834. static int hcd_submit_urb (struct urb *urb)
  835. {
  836. int status;
  837. struct usb_hcd *hcd;
  838. struct hcd_dev *dev;
  839. unsigned long flags;
  840. int pipe, temp, max;
  841. int mem_flags;
  842. if (!urb || urb->hcpriv || !urb->complete)
  843. return -EINVAL;
  844. urb->status = -EINPROGRESS;
  845. urb->actual_length = 0;
  846. urb->bandwidth = 0;
  847. INIT_LIST_HEAD (&urb->urb_list);
  848. if (!urb->dev || !urb->dev->bus || urb->dev->devnum <= 0)
  849. return -ENODEV;
  850. hcd = urb->dev->bus->hcpriv;
  851. dev = urb->dev->hcpriv;
  852. if (!hcd || !dev)
  853. return -ENODEV;
  854. /* can't submit new urbs when quiescing, halted, ... */
  855. if (hcd->state == USB_STATE_QUIESCING || !HCD_IS_RUNNING (hcd->state))
  856. return -ESHUTDOWN;
  857. pipe = urb->pipe;
  858. temp = usb_pipetype (urb->pipe);
  859. if (usb_endpoint_halted (urb->dev, usb_pipeendpoint (pipe),
  860. usb_pipeout (pipe)))
  861. return -EPIPE;
  862. /* NOTE: 2.5 passes this value explicitly in submit() */
  863. mem_flags = in_interrupt () ? GFP_ATOMIC : GFP_KERNEL;
  864. /* FIXME there should be a sharable lock protecting us against
  865.  * config/altsetting changes and disconnects, kicking in here.
  866.  */
  867. /* Sanity check, so HCDs can rely on clean data */
  868. max = usb_maxpacket (urb->dev, pipe, usb_pipeout (pipe));
  869. if (max <= 0) {
  870. err ("bogus endpoint (bad maxpacket)");
  871. return -EINVAL;
  872. }
  873. /* "high bandwidth" mode, 1-3 packets/uframe? */
  874. if (urb->dev->speed == USB_SPEED_HIGH) {
  875. int mult;
  876. switch (temp) {
  877. case PIPE_ISOCHRONOUS:
  878. case PIPE_INTERRUPT:
  879. mult = 1 + ((max >> 11) & 0x03);
  880. max &= 0x03ff;
  881. max *= mult;
  882. }
  883. }
  884. /* periodic transfers limit size per frame/uframe */
  885. switch (temp) {
  886. case PIPE_ISOCHRONOUS: {
  887. int n, len;
  888. if (urb->number_of_packets <= 0)     
  889. return -EINVAL;
  890. for (n = 0; n < urb->number_of_packets; n++) {
  891. len = urb->iso_frame_desc [n].length;
  892. if (len < 0 || len > max) 
  893. return -EINVAL;
  894. }
  895. }
  896. break;
  897. case PIPE_INTERRUPT:
  898. if (urb->transfer_buffer_length > max)
  899. return -EINVAL;
  900. }
  901. /* the I/O buffer must usually be mapped/unmapped */
  902. if (urb->transfer_buffer_length < 0)
  903. return -EINVAL;
  904. // FIXME set urb->transfer_dma and/or setup_dma 
  905. if (urb->next) {
  906. warn ("use explicit queuing not urb->next");
  907. return -EINVAL;
  908. }
  909. #ifdef DEBUG
  910. /* stuff that drivers shouldn't do, but which shouldn't
  911.  * cause problems in HCDs if they get it wrong.
  912.  */
  913. {
  914. unsigned int orig_flags = urb->transfer_flags;
  915. unsigned int allowed;
  916. /* enforce simple/standard policy */
  917. allowed = USB_ASYNC_UNLINK; // affects later unlinks
  918. allowed |= USB_NO_FSBR; // only affects UHCI
  919. switch (temp) {
  920. case PIPE_CONTROL:
  921. allowed |= USB_DISABLE_SPD;
  922. break;
  923. case PIPE_BULK:
  924. allowed |= USB_DISABLE_SPD | USB_QUEUE_BULK
  925. | USB_ZERO_PACKET | URB_NO_INTERRUPT;
  926. break;
  927. case PIPE_INTERRUPT:
  928. allowed |= USB_DISABLE_SPD;
  929. break;
  930. case PIPE_ISOCHRONOUS:
  931. allowed |= USB_ISO_ASAP;
  932. break;
  933. }
  934. urb->transfer_flags &= allowed;
  935. /* fail if submitter gave bogus flags */
  936. if (urb->transfer_flags != orig_flags) {
  937. err ("BOGUS urb flags, %x --> %x",
  938. orig_flags, urb->transfer_flags);
  939. return -EINVAL;
  940. }
  941. }
  942. #endif
  943. /*
  944.  * Force periodic transfer intervals to be legal values that are
  945.  * a power of two (so HCDs don't need to).
  946.  *
  947.  * FIXME want bus->{intr,iso}_sched_horizon values here.  Each HC
  948.  * supports different values... this uses EHCI/UHCI defaults (and
  949.  * EHCI can use smaller non-default values).
  950.  */
  951. switch (temp) {
  952. case PIPE_ISOCHRONOUS:
  953. case PIPE_INTERRUPT:
  954. /* too small? */
  955. if (urb->interval <= 0)
  956. return -EINVAL;
  957. /* too big? */
  958. switch (urb->dev->speed) {
  959. case USB_SPEED_HIGH: /* units are microframes */
  960. // NOTE usb handles 2^15
  961. if (urb->interval > (1024 * 8))
  962. urb->interval = 1024 * 8;
  963. temp = 1024 * 8;
  964. break;
  965. case USB_SPEED_FULL: /* units are frames/msec */
  966. case USB_SPEED_LOW:
  967. if (temp == PIPE_INTERRUPT) {
  968. if (urb->interval > 255)
  969. return -EINVAL;
  970. // NOTE ohci only handles up to 32
  971. temp = 128;
  972. } else {
  973. if (urb->interval > 1024)
  974. urb->interval = 1024;
  975. // NOTE usb and ohci handle up to 2^15
  976. temp = 1024;
  977. }
  978. break;
  979. default:
  980. return -EINVAL;
  981. }
  982. /* power of two? */
  983. while (temp > urb->interval)
  984. temp >>= 1;
  985. urb->interval = temp;
  986. }
  987. /*
  988.  * FIXME:  make urb timeouts be generic, keeping the HCD cores
  989.  * as simple as possible.
  990.  */
  991. // NOTE:  a generic device/urb monitoring hook would go here.
  992. // hcd_monitor_hook(MONITOR_URB_SUBMIT, urb)
  993. // It would catch submission paths for all urbs.
  994. /*
  995.  * Atomically queue the urb,  first to our records, then to the HCD.
  996.  * Access to urb->status is controlled by urb->lock ... changes on
  997.  * i/o completion (normal or fault) or unlinking.
  998.  */
  999. // FIXME:  verify that quiescing hc works right (RH cleans up)
  1000. spin_lock_irqsave (&hcd_data_lock, flags);
  1001. if (HCD_IS_RUNNING (hcd->state) && hcd->state != USB_STATE_QUIESCING) {
  1002. usb_inc_dev_use (urb->dev);
  1003. list_add (&urb->urb_list, &dev->urb_list);
  1004. status = 0;
  1005. } else {
  1006. INIT_LIST_HEAD (&urb->urb_list);
  1007. status = -ESHUTDOWN;
  1008. }
  1009. spin_unlock_irqrestore (&hcd_data_lock, flags);
  1010. if (status)
  1011. return status;
  1012. if (urb->dev == hcd->bus->root_hub)
  1013. status = rh_urb_enqueue (hcd, urb);
  1014. else
  1015. status = hcd->driver->urb_enqueue (hcd, urb, mem_flags);
  1016. /* urb->dev got nulled if hcd called giveback for us
  1017.  * NOTE: ref to urb->dev is a race without (2.5) refcounting,
  1018.  * unless driver only returns status when it didn't giveback 
  1019.  */
  1020. if (status && urb->dev)
  1021. urb_unlink (urb);
  1022. return status;
  1023. }
  1024. /*-------------------------------------------------------------------------*/
  1025. /* called in any context */
  1026. static int hcd_get_frame_number (struct usb_device *udev)
  1027. {
  1028. struct usb_hcd *hcd = (struct usb_hcd *)udev->bus->hcpriv;
  1029. return hcd->driver->get_frame_number (hcd);
  1030. }
  1031. /*-------------------------------------------------------------------------*/
  1032. struct completion_splice { // modified urb context:
  1033. /* did we complete? */
  1034. struct completion done;
  1035. /* original urb data */
  1036. void (*complete)(struct urb *);
  1037. void *context;
  1038. };
  1039. static void unlink_complete (struct urb *urb)
  1040. {
  1041. struct completion_splice *splice;
  1042. splice = (struct completion_splice *) urb->context;
  1043. /* issue original completion call */
  1044. urb->complete = splice->complete;
  1045. urb->context = splice->context;
  1046. urb->complete (urb);
  1047. /* then let the synchronous unlink call complete */
  1048. complete (&splice->done);
  1049. }
  1050. /*
  1051.  * called in any context; note ASYNC_UNLINK restrictions
  1052.  *
  1053.  * caller guarantees urb won't be recycled till both unlink()
  1054.  * and the urb's completion function return
  1055.  */
  1056. static int hcd_unlink_urb (struct urb *urb)
  1057. {
  1058. struct hcd_dev *dev;
  1059. struct usb_hcd *hcd = 0;
  1060. unsigned long flags;
  1061. struct completion_splice splice;
  1062. int retval;
  1063. if (!urb)
  1064. return -EINVAL;
  1065. /*
  1066.  * we contend for urb->status with the hcd core,
  1067.  * which changes it while returning the urb.
  1068.  *
  1069.  * Caller guaranteed that the urb pointer hasn't been freed, and
  1070.  * that it was submitted.  But as a rule it can't know whether or
  1071.  * not it's already been unlinked ... so we respect the reversed
  1072.  * lock sequence needed for the usb_hcd_giveback_urb() code paths
  1073.  * (urb lock, then hcd_data_lock) in case some other CPU is now
  1074.  * unlinking it.
  1075.  */
  1076. spin_lock_irqsave (&urb->lock, flags);
  1077. spin_lock (&hcd_data_lock);
  1078. if (!urb->hcpriv || urb->transfer_flags & USB_TIMEOUT_KILLED) {
  1079. retval = -EINVAL;
  1080. goto done;
  1081. }
  1082. if (!urb->dev || !urb->dev->bus) {
  1083. retval = -ENODEV;
  1084. goto done;
  1085. }
  1086. /* giveback clears dev; non-null means it's linked at this level */
  1087. dev = urb->dev->hcpriv;
  1088. hcd = urb->dev->bus->hcpriv;
  1089. if (!dev || !hcd) {
  1090. retval = -ENODEV;
  1091. goto done;
  1092. }
  1093. /* For non-periodic transfers, any status except -EINPROGRESS means
  1094.  * the HCD has already started to unlink this URB from the hardware.
  1095.  * In that case, there's no more work to do.
  1096.  *
  1097.  * For periodic transfers, this is the only way to trigger unlinking
  1098.  * from the hardware.  Since we (currently) overload urb->status to
  1099.  * tell the driver to unlink, error status might get clobbered ...
  1100.  * unless that transfer hasn't yet restarted.  One such case is when
  1101.  * the URB gets unlinked from its completion handler.
  1102.  *
  1103.  * FIXME use an URB_UNLINKED flag to match URB_TIMEOUT_KILLED
  1104.  */
  1105. switch (usb_pipetype (urb->pipe)) {
  1106. case PIPE_CONTROL:
  1107. case PIPE_BULK:
  1108. if (urb->status != -EINPROGRESS) {
  1109. retval = -EINVAL;
  1110. goto done;
  1111. }
  1112. }
  1113. /* maybe set up to block on completion notification */
  1114. if ((urb->transfer_flags & USB_TIMEOUT_KILLED))
  1115. urb->status = -ETIMEDOUT;
  1116. else if (!(urb->transfer_flags & USB_ASYNC_UNLINK)) {
  1117. if (in_interrupt ()) {
  1118. dbg ("non-async unlink in_interrupt");
  1119. retval = -EWOULDBLOCK;
  1120. goto done;
  1121. }
  1122. /* synchronous unlink: block till we see the completion */
  1123. init_completion (&splice.done);
  1124. splice.complete = urb->complete;
  1125. splice.context = urb->context;
  1126. urb->complete = unlink_complete;
  1127. urb->context = &splice;
  1128. urb->status = -ENOENT;
  1129. } else {
  1130. /* asynchronous unlink */
  1131. urb->status = -ECONNRESET;
  1132. }
  1133. spin_unlock (&hcd_data_lock);
  1134. spin_unlock_irqrestore (&urb->lock, flags);
  1135. if (urb == (struct urb *) hcd->rh_timer.data) {
  1136. rh_status_dequeue (hcd, urb);
  1137. retval = 0;
  1138. } else {
  1139. retval = hcd->driver->urb_dequeue (hcd, urb);
  1140. // FIXME:  if retval and we tried to splice, whoa!!
  1141. if (retval && urb->status == -ENOENT) err ("whoa! retval %d", retval);
  1142. }
  1143.      /* block till giveback, if needed */
  1144. if (!(urb->transfer_flags & (USB_ASYNC_UNLINK|USB_TIMEOUT_KILLED))
  1145. && HCD_IS_RUNNING (hcd->state)
  1146. && !retval) {
  1147. dbg ("%s: wait for giveback urb %p",
  1148. hcd->bus_name, urb);
  1149. wait_for_completion (&splice.done);
  1150. } else if ((urb->transfer_flags & USB_ASYNC_UNLINK) && retval == 0) {
  1151. return -EINPROGRESS;
  1152. }
  1153. goto bye;
  1154. done:
  1155. spin_unlock (&hcd_data_lock);
  1156. spin_unlock_irqrestore (&urb->lock, flags);
  1157. bye:
  1158. if (retval)
  1159. dbg ("%s: hcd_unlink_urb fail %d",
  1160.     hcd ? hcd->bus_name : "(no bus?)",
  1161.     retval);
  1162. return retval;
  1163. }
  1164. /*-------------------------------------------------------------------------*/
  1165. /* called by khubd, rmmod, apmd, or other thread for hcd-private cleanup */
  1166. // FIXME:  likely best to have explicit per-setting (config+alt)
  1167. // setup primitives in the usbcore-to-hcd driver API, so nothing
  1168. // is implicit.  kernel 2.5 needs a bunch of config cleanup...
  1169. static int hcd_free_dev (struct usb_device *udev)
  1170. {
  1171. struct hcd_dev *dev;
  1172. struct usb_hcd *hcd;
  1173. unsigned long flags;
  1174. if (!udev || !udev->hcpriv)
  1175. return -EINVAL;
  1176. if (!udev->bus || !udev->bus->hcpriv)
  1177. return -ENODEV;
  1178. // should udev->devnum == -1 ??
  1179. dev = udev->hcpriv;
  1180. hcd = udev->bus->hcpriv;
  1181. /* device driver problem with refcounts? */
  1182. if (!list_empty (&dev->urb_list)) {
  1183. dbg ("free busy dev, %s devnum %d (bug!)",
  1184. hcd->bus_name, udev->devnum);
  1185. return -EINVAL;
  1186. }
  1187. hcd->driver->free_config (hcd, udev);
  1188. spin_lock_irqsave (&hcd_data_lock, flags);
  1189. list_del (&dev->dev_list);
  1190. udev->hcpriv = NULL;
  1191. spin_unlock_irqrestore (&hcd_data_lock, flags);
  1192. kfree (dev);
  1193. return 0;
  1194. }
  1195. static struct usb_operations hcd_operations = {
  1196. allocate: hcd_alloc_dev,
  1197. get_frame_number: hcd_get_frame_number,
  1198. submit_urb: hcd_submit_urb,
  1199. unlink_urb: hcd_unlink_urb,
  1200. deallocate: hcd_free_dev,
  1201. };
  1202. /*-------------------------------------------------------------------------*/
  1203. static void hcd_irq (int irq, void *__hcd, struct pt_regs * r)
  1204. {
  1205. struct usb_hcd *hcd = __hcd;
  1206. int start = hcd->state;
  1207. if (unlikely (hcd->state == USB_STATE_HALT)) /* irq sharing? */
  1208. return;
  1209. hcd->driver->irq (hcd);
  1210. if (hcd->state != start && hcd->state == USB_STATE_HALT)
  1211. hc_died (hcd);
  1212. }
  1213. /*-------------------------------------------------------------------------*/
  1214. /**
  1215.  * usb_hcd_giveback_urb - return URB from HCD to device driver
  1216.  * @hcd: host controller returning the URB
  1217.  * @urb: urb being returned to the USB device driver.
  1218.  * Context: in_interrupt()
  1219.  *
  1220.  * This hands the URB from HCD to its USB device driver, using its
  1221.  * completion function.  The HCD has freed all per-urb resources
  1222.  * (and is done using urb->hcpriv).  It also released all HCD locks;
  1223.  * the device driver won't cause deadlocks if it resubmits this URB,
  1224.  * and won't confuse things by modifying and resubmitting this one.
  1225.  * Bandwidth and other resources will be deallocated.
  1226.  *
  1227.  * HCDs must not use this for periodic URBs that are still scheduled
  1228.  * and will be reissued.  They should just call their completion handlers
  1229.  * until the urb is returned to the device driver by unlinking.
  1230.  *
  1231.  * NOTE that no urb->next processing is done, even for isochronous URBs.
  1232.  * ISO streaming functionality can be achieved by having completion handlers
  1233.  * re-queue URBs.  Such explicit queuing doesn't discard error reports.
  1234.  */
  1235. void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb)
  1236. {
  1237. urb_unlink (urb);
  1238. // NOTE:  a generic device/urb monitoring hook would go here.
  1239. // hcd_monitor_hook(MONITOR_URB_FINISH, urb, dev)
  1240. // It would catch exit/unlink paths for all urbs, but non-exit
  1241. // completions for periodic urbs need hooks inside the HCD.
  1242. // hcd_monitor_hook(MONITOR_URB_UPDATE, urb, dev)
  1243. if (urb->status)
  1244. dbg ("giveback urb %p status %d len %d",
  1245. urb, urb->status, urb->actual_length);
  1246. // FIXME unmap urb->transfer_dma and/or setup_dma 
  1247. /* pass ownership to the completion handler */
  1248. urb->complete (urb);
  1249. }
  1250. EXPORT_SYMBOL (usb_hcd_giveback_urb);