Re: Questions about usb hub

Alan Stern <[email protected]>
Newsgroups gmane.linux.usb.devel
Message-ID <[email protected]>
Dave already answered some of these questions.  Here are my views:

On Sun, 1 Jul 2007, jidong xiao wrote:

> about device descriptor,according to usb spec 2.0,
> 1. A hub returns different descriptors based on whether it is
> operating at high speed or full/low speed.A hub can report three
> different sets of the descriptors.
> 2. A hub must operate at high-speed when its upstream facing port is
> connected at high-speed.The hub must operate at full speed when its
> upstream facing port is connected at full-speed.
> 
> Take root hub for example, how does the hub itself know whether its
> upstream facing port is connected at high-speed or
> full-speed?

Like Dave said, this notion makes no sense for root hubs since they 
don't have upstream ports.

>  Futhermore, if a host send a GET_DESCRIPTOR request to a
> hub,how does it know which set of descriptor should be reported?

In Linux, the root hub returns a descriptor suitable for high speed if 
the controller supports high-speed operation (i.e., if it is an EHCI 
controller).  Otherwise it returns a descriptor suitable for full 
speed.

> Let's see following section of code,sampled from hub_configure(),we
> need to judge bDeviceProtocol of the device descriptor, it can be
> 0,1,or 2, but it's the value reported by hub,how does the hub know
> which one should be reported when it received GET_DESCRIPTOR from the
> host.
> 
>     570         switch (hdev->descriptor.bDeviceProtocol) {
>     571                 case 0:
>     572                         break;
>     573                 case 1:
>     574                         dev_dbg(hub_dev, "Single TT\n");
>     575                         hub->tt.hub = hdev;
>     576                         break;
>     577                 case 2:
>     578                         ret = usb_set_interface(hdev, 0, 1);
>     579                         if (ret == 0) {
>     580                                 dev_dbg(hub_dev, "TT per port\n");
>     581                                 hub->tt.multi = 1;
>     582                         } else
>     583                                 dev_err(hub_dev, "Using single
> TT (err %d)\n",
>     584                                         ret);
>     ...

If the root hub doesn't operate at high speed then it returns 0.  If 
the root hub supports high speed then it returns 1.  See 
rh_call_control() in drivers/usb/core/hcd.c.

As far as I know, there are no root hubs with more than one TT.

Alan Stern


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.