On Tuesday 26 September 2006 7:57 am, Dmitry Antipov wrote:
> Hello,
> 
> I'm working with PXA27x hardware and going to check USB ethernet gadget 
> (RNDIS mode)
> with 2.6.18 on PC host. After a short investigation, I was stucked because:

Yes, there are bugs there ... I thought they'd been fixed, evidently not.
Minimally, as you noted, the test needs to accomodate a modular driver!
This particular patch won't work for 2.6.19-rc1, that code has moved into
the new "usb/core/generic.c" file ... could you update it?


> 
>   1) help on CONFIG_USB_ETH_RNDIS (taken from drivers/usb/gadget/Kconfig) 
> says that
>     RNDIS-aware configuration will be second (behind CDC);

I can't read it that way; helptext wouldn't have such details anyway.

>   2) gadget code (taken from drivers/usb/gadget/ether.c) says "list the RNDIS 
> config
>     first, to make Microsoft's drivers happy";

That's what it does, yes.

>   3) choose_configuration() from drivers/usb/core/hub.c will choose 2nd 
> configuration
>     even if CONFIG_USB_NET_RNDIS_HOST is enabled.

I don't read the code that way at all.  It _skips_ RNDIS unless
that symbol is defined.  (It should also care about the modular
version).  Linux doesn't care about sequencing (first, second, etc).


> I believe that the valid configuration order (if RNDIS is enabled) is RNDIS 
> 1st, CDC
> 2nd (mostly to be compatible with Microsoft stuff, as comment from 2) says). 
> But,
> if this is true, then choose_configuration() works wrong - if RNDIS support 
> is enabled,
> it should choose 1st configuration and relax about others.

Forget about sequencing.  Linux doesn't care.


> Moreover, since RNDIS host 
> support may be modular, CONFIG_USB_NET_RNDIS_HOST_MODULE should also be taken 
> into
> account. So, here is a tiny patch.
> 
> 
> --- 2.6.18/drivers/usb/core/hub.c     2006-09-22 14:49:57.000000000 +0400
> +++ 2.6.18.devel/drivers/usb/core/hub.c       2006-09-26 18:32:25.000000000 
> +0400
> @@ -1244,10 +1244,11 @@
>                               && desc->bInterfaceClass == USB_CLASS_COMM
>                               && desc->bInterfaceSubClass == 2
>                               && desc->bInterfaceProtocol == 0xff) {
> -#ifndef CONFIG_USB_NET_RNDIS_HOST
> -                     continue;
> -#else
> +#if defined(CONFIG_USB_NET_RNDIS_HOST) || 
> defined(CONFIG_USB_NET_RNDIS_HOST_MODULE)

Having use positive logic (#ifdef) is better than negative (#ifndef), yes.

>                       best = c;
> +                     break;

The "break" isn't appropriate though.  We still want to avoid RNDIS
(and other proprietary protocols) when possible ...

- Dave



> +#else
> +                     continue;
>   #endif
>               }
> 
> 

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to