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

Linux/Unix编程

开发平台:

Unix_Linux

  1. 26-Apr-2002
  2. The EHCI driver is used to talk to high speed USB 2.0 devices using
  3. USB 2.0-capable host controller hardware.  The USB 2.0 standard is
  4. compatible with the USB 1.1 standard. It defines three transfer speeds:
  5.     - "High Speed" 480 Mbit/sec (60 MByte/sec)
  6.     - "Full Speed" 12 Mbit/sec (1.5 MByte/sec)
  7.     - "Low Speed" 1.5 Mbit/sec
  8. USB 1.1 only addressed full speed and low speed.  High speed devices
  9. can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds. 
  10. USB 1.1 devices may also be used on USB 2.0 systems.  When plugged
  11. into an EHCI controller, they are given to a USB 1.1 "companion"
  12. controller, which is a OHCI or UHCI controller as normally used with
  13. such devices.  When USB 1.1 devices plug into USB 2.0 hubs, they
  14. interact with the EHCI controller through a "Transaction Translator"
  15. (TT) in the hub, which turns low or full speed transactions into
  16. high speed "split transactions" that don't waste transfer bandwidth.
  17. At this writing, this driver has been seen to work with implementations
  18. of EHCI from (in alphabetical order):  Intel, NEC, Philips, and VIA.
  19. At this writing, high speed devices are finally beginning to appear.
  20. While usb-storage devices have been available for some time (working
  21. quite speedily on the 2.4 version of this driver), hubs have only
  22. very recently become available.
  23. Note that USB 2.0 support involves more than just EHCI.  It requires
  24. other changes to the Linux-USB core APIs, including the hub driver,
  25. but those changes haven't needed to really change the basic "usbcore"
  26. APIs exposed to USB device drivers.
  27. - David Brownell
  28.   <dbrownell@users.sourceforge.net>
  29. FUNCTIONALITY
  30. This driver is regularly tested on x86 hardware, and has also been
  31. used on PPC hardware so big/little endianness issues should be gone.
  32. It's believed to do all the right PCI magic so that I/O works even on
  33. systems with interesting DMA mapping issues.
  34. At this writing the driver should comfortably handle all control and bulk
  35. transfers, including requests to USB 1.1 devices through transaction
  36. translators (TTs) in USB 2.0 hubs.  However, there some situations where
  37. the hub driver needs to clear TT error state, which it doesn't yet do.
  38. Interrupt transfer support is newly functional and not yet as robust as
  39. control and bulk traffic.  As yet there is no support for split transaction
  40. scheduling for interrupt transfers, which means among other things that
  41. connecting USB 1.1 hubs, keyboards, and mice to USB 2.0 hubs won't work.
  42. Connect them to USB 1.1 hubs, or to a root hub.
  43. Isochronous (ISO) transfer support is also newly functional.  No production
  44. high speed devices are available which would need it (though high quality
  45. webcams are in the works!).  Note that split transaction support for ISO
  46. transfers can't share much code with the code for high speed ISO transfers,
  47. since EHCI represents these with a different data structure.  So for now,
  48. most USB audio and video devices have the same restrictions as hubs, mice,
  49. and keyboards:  don't connect them using high speed USB hubs.
  50. The EHCI root hub code should hand off USB 1.1 devices to its companion
  51. controller.  This driver doesn't need to know anything about those
  52. drivers; a OHCI or UHCI driver that works already doesn't need to change
  53. just because the EHCI driver is also present.
  54. There are some issues with power management; suspend/resume doesn't
  55. behave quite right at the moment.
  56. USE BY
  57. Assuming you have an EHCI controller (on a PCI card or motherboard)
  58. and have compiled this driver as a module, load this like:
  59.     # modprobe ehci-hcd
  60. and remove it by:
  61.     # rmmod ehci-hcd
  62. You should also have a driver for a "companion controller", such as
  63. "ohci-hcd", "usb-ohci", "usb-uhci", or "uhci".  In case of any trouble
  64. with the EHCI driver, remove its module and then the driver for that
  65. companion controller will take over (at lower speed) all the devices
  66. that were previously handled by the EHCI driver.
  67. Module parameters (pass to "modprobe") include:
  68.     log2_irq_thresh (default 0):
  69. Log2 of default interrupt delay, in microframes.  The default
  70. value is 0, indicating 1 microframe (125 usec).  Maximum value
  71. is 6, indicating 2^6 = 64 microframes.  This controls how often
  72. the EHCI controller can issue interrupts.
  73. The EHCI interrupt handler just acknowledges interrupts and schedules
  74. a tasklet to handle whatever needs handling.  That keeps latencies low,
  75. no matter how often interrupts are issued.
  76. Device drivers shouldn't care whether they're running over EHCI or not,
  77. but they may want to check for "usb_device->speed == USB_SPEED_HIGH".
  78. High speed devices can do things that full speed (or low speed) ones
  79. can't, such as "high bandwidth" periodic (interrupt or ISO) transfers.
  80. Also, some values in device descriptors (such as polling intervals for
  81. periodic transfers) use different encodings when operating at high speed.
  82. PERFORMANCE
  83. USB 2.0 throughput is gated by two main factors:  how fast the host
  84. controller can process requests, and how fast devices can respond to
  85. them.  The 480 Mbit/sec "raw transfer rate" is obeyed by all devices,
  86. but aggregate throughput is also affected by issues like delays between
  87. individual high speed packets, driver intelligence, and of course the
  88. overall system load.  Latency is also a performance concern.
  89. Bulk transfers are most often used where throughput is an issue.  It's
  90. good to keep in mind that bulk transfers are always in 512 byte packets,
  91. and at most 13 of those fit into one USB 2.0 microframe.  Eight USB 2.0
  92. microframes fit in a USB 1.1 frame; a microframe is 1 msec/8 = 125 usec.
  93. Hardware Performance
  94. At this writing, individual USB 2.0 devices tend to max out at around
  95. 20 MByte/sec transfer rates.  This is of course subject to change;
  96. and some devices now go faster, while others go slower.
  97. The NEC implementation of EHCI seems to have a hardware bottleneck
  98. at around 28 MByte/sec aggregate transfer rate.  While this is clearly
  99. enough for a single device at 20 MByte/sec, putting three such devices
  100. onto one bus does not get you 60 MByte/sec.  The issue appears to be
  101. that the controller hardware won't do concurrent USB and PCI access,
  102. so that it's only trying six (or maybe seven) USB transactions each
  103. microframe rather than thirteen.  (Seems like a reasonable trade off
  104. for a product that beat all the others to market by over a year!)
  105. It's expected that newer implementations will better this, throwing
  106. more silicon real estate at the problem so that new motherboard chip
  107. sets will get closer to that 60 MByte/sec target.
  108. There's a minimum latency of one microframe (125 usec) for the host
  109. to receive interrupts from the EHCI controller indicating completion
  110. of requests.  That latency is tunable; there's a module option.  By
  111. default ehci-hcd driver uses the minimum latency, which means that if
  112. you issue a control or bulk request you can often expect to learn that
  113. it completed in less than 250 usec (depending on transfer size).
  114. Software Performance
  115. To get even 20 MByte/sec transfer rates, Linux-USB device drivers will
  116. need to keep the EHCI queue full.  That means issuing large requests,
  117. or using bulk queuing if a series of small requests needs to be issued.
  118. When drivers don't do that, their performance results will show it.
  119. In typical situations, a usb_bulk_msg() loop writing out 4 KB chunks is
  120. going to waste more than half the USB 2.0 bandwidth.  Delays between the
  121. I/O completion and the driver issuing the next request will take longer
  122. than the I/O.  If that same loop used 16 KB chunks, it'd be better; a
  123. sequence of 128 KB chunks would waste a lot less.
  124. But rather than depending on such large I/O buffers to make synchronous
  125. I/O be efficient, it's better to just queue all several (bulk) requests
  126. to the HC, and wait for them all to complete (or be canceled on error).
  127. Such URB queuing should work with all the USB 1.1 HC drivers too.
  128. TBD:  Interrupt and ISO transfer performance issues.  Those periodic
  129. transfers are fully scheduled, so the main issue is likely to be how
  130. to trigger "high bandwidth" modes.