On Sat, 15 May 2004, fengwei yin wrote:
> >You have to do this for _all_ the data you send to or receive from _every_
> >USB device?
>
> Yes,I think all the data send/receive from USB device will be swap.
>
> > What happens if the transfer buffer length isn't a multiple
> >of 4?
>
> Sorry,I don't know how to set transfer buffer length(It should be in device
> driver?).
That's right, it is set by the device driver, not the controller driver.
Suppose the device driver wants to send 3 bytes: "ABC". The controller
driver needs to reverse that into "\000CBA" but it can't, because the
buffer is only 3 bytes long and it needs 4 bytes. So what do you do?
> Is there any difference between internal hub and external hub?
> I found that they ALL used usb_control_msg to get port status.
> So I thought that they(in/external hub) ALl were treated as USB device.
> Am I right?
No.
The hub driver does use usb_control_msg() to get the port status, that
much is right. For external hubs, this results in a USB message sent to
the hub and its response received in the transfer buffer. But that
doesn't happen with the internal hub. With the internal hub, the HCD
reads the port status from the controller's registers and stores the
values directly into the transfer buffer. There's no USB communication
involved.
All this happens in rh_submit_urb() in usb-ohci.c. The part of interest
to you is these two lines:
case RH_GET_STATUS | RH_OTHER | RH_CLASS:
*(__u32 *) data_buf = cpu_to_le32 (RD_RH_PORTSTAT); OK (4);
My guess is that the data fetched by RD_RH_PORTSTAT comes from the
controller in the wrong format. Then you interchange the wPortStatus
and wPortChanged fields so it looks right -- but then everything from an
external hub looks wrong.
Alan Stern
-------------------------------------------------------
This SF.Net email is sponsored by: SourceForge.net Broadband
Sign-up now for SourceForge Broadband and get the fastest
6.0/768 connection for only $19.95/mo for the first 3 months!
http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel