USB drivers
M. Warner Losh
imp at bsdimp.com
Fri Aug 6 22:13:15 PDT 2004
In message: <41124C8B.2060902 at tellme3times.com>
Chris <chris at tellme3times.com> writes:
: M. Warner Losh wrote:
:
: >
: >You misunerstand what's actually happening. There's no case in the
: >tree where two drivers are attached, at the same time, to the same
: >device node. There's only one set of pointers. However, with USB,
: >there can be reasons why multiple things can attach to the same
: >driver. The usb code tries to do smart things for devices that have
: >multiple configurations.
: >
: >With USB and multi-function devices, here's the code that we use:
: >
: > /* First try with device specific drivers. */
: > probe and attach driver with a config # of -1 (usegeneric = 0)
: > return if successful
: > /* Next try with interface drivers. */
: > foreach valid configuration
: > foreach interface
: > probe and attach driver
: > /* Finally try the generic driver. */
: > probe and attach driver with a config # of -1 (usegeneric = 1)
: > return if successful
: >
: >I'm not familiar with the specific instance of ulpt and unlpt.
: >
: >
:
:
: You are right I do not understand. All I know is that when the system
: boots, at some point a test is done to see if their are USB devices. If
: devices exist then attach drivers.
True.
: What I am trying to determine is why my multifunction printer/scanner
: receives only one of the two drivers. Is it because the printer does
: not respond properly? Is it because the printer is not defined? I have
: many questions here.
Yes. Usb is a little complicated in this area, and there are a number
of details that are hard to get right. It wouldn't surprise me if the
current set of drivers are less than completely optimal.
: I looked in the following and just see the code for that specific
: device. It does not test for multifunction devices. I do not see any
: code that follows the logic above.
:
: src/sys/dev/usb/ulpt.c
: src/sys/dev/usb/uscanner.c
: src/sys/dev/usb/usbdevs
True. The above code is from usb/usb_subr.c in
usbd_probe_and_attach().
: If you can point me in the right direction, or to some documents on USB
: driver writing I will try to figure this out. Any help would be
: appreciated. I will get this to work because I need both and the effort
: required to switch is just not convenient.
I think that the first thing that should be done is to look at the usb
configuration. /usr/ports/sysutils/udesc_dump is a good place to
start to investigate things. Also, the usb mindshare book is good to
understand usb and the layers of the configuation onion. There's a
book in the works that should help, but I'm afraid that I can't say
more than that at this time.
Warner
More information about the freebsd-current
mailing list