* [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis @ 2014-09-24 6:48 Heiko Schocher 2014-09-24 9:38 ` Michal Nazarewicz 2014-09-24 12:25 ` Lars Melin 0 siblings, 2 replies; 8+ messages in thread From: Heiko Schocher @ 2014-09-24 6:48 UTC (permalink / raw) To: linux-usb Cc: Heiko Schocher, Felipe Balbi, Greg Kroah-Hartman, linux-kernel, Oliver Neukum, netdev, linux-api, Andrzej Pietrasiewicz, Michal Nazarewicz, Kyungmin Park, Dan Carpenter, Macpaul Lin use the values for RNDIS over Ethernet as defined in http://www.usb.org/developers/defined_class (search for RDNIS): - baseclass: 0xef (miscellaneous) - subclass: 0x04 - protocol: 0x01 with this setings the file in Documentation/usb/linux.inf is obsolete. Signed-off-by: Heiko Schocher <hs@denx.de> --- Cc: Felipe Balbi <balbi@ti.com> Cc: Greg Kroah-Hartman <gregkh@suse.de> Cc: linux-usb@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: Oliver Neukum <oliver@neukum.name> Cc: netdev@vger.kernel.org Cc: linux-api@vger.kernel.org Cc: Andrzej Pietrasiewicz <andrzej.p@samsung.com> Cc: Michal Nazarewicz <mina86@mina86.com> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Dan Carpenter <dan.carpenter@oracle.com> Cc: Macpaul Lin <macpaul@gmail.com> Tested with the "USB Compliance test suite which runs Windows", see: http://www.usb.org/developers/tools/usb20_tools/#usb20cv drivers/net/usb/cdc_ether.c | 6 +++--- drivers/usb/core/generic.c | 6 +++--- drivers/usb/gadget/function/f_rndis.c | 6 +++--- include/uapi/linux/usb/cdc.h | 3 +++ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 2a32d91..9c216c2 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c @@ -35,9 +35,9 @@ static int is_rndis(struct usb_interface_descriptor *desc) { - return (desc->bInterfaceClass == USB_CLASS_COMM && - desc->bInterfaceSubClass == 2 && - desc->bInterfaceProtocol == 0xff); + return (desc->bInterfaceClass == USB_CLASS_MISC && + desc->bInterfaceSubClass == USB_CDC_SUBCLASS_RNDIS && + desc->bInterfaceProtocol == USB_CDC_RNDIS_PROTO_ETH); } static int is_activesync(struct usb_interface_descriptor *desc) diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index 358ca8d..a2a4e05 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c @@ -28,9 +28,9 @@ static inline const char *plural(int n) static int is_rndis(struct usb_interface_descriptor *desc) { - return desc->bInterfaceClass == USB_CLASS_COMM - && desc->bInterfaceSubClass == 2 - && desc->bInterfaceProtocol == 0xff; + return desc->bInterfaceClass == USB_CLASS_MISC + && desc->bInterfaceSubClass == USB_CDC_SUBCLASS_RNDIS + && desc->bInterfaceProtocol == USB_CDC_RNDIS_PROTO_ETH; } static int is_activesync(struct usb_interface_descriptor *desc) diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c index ddb09dc..cc06046 100644 --- a/drivers/usb/gadget/function/f_rndis.c +++ b/drivers/usb/gadget/function/f_rndis.c @@ -117,9 +117,9 @@ static struct usb_interface_descriptor rndis_control_intf = { /* .bInterfaceNumber = DYNAMIC */ /* status endpoint is optional; this could be patched later */ .bNumEndpoints = 1, - .bInterfaceClass = USB_CLASS_COMM, - .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM, - .bInterfaceProtocol = USB_CDC_ACM_PROTO_VENDOR, + .bInterfaceClass = USB_CLASS_MISC, + .bInterfaceSubClass = USB_CDC_SUBCLASS_RNDIS, + .bInterfaceProtocol = USB_CDC_RNDIS_PROTO_ETH, /* .iInterface = DYNAMIC */ }; diff --git a/include/uapi/linux/usb/cdc.h b/include/uapi/linux/usb/cdc.h index b6a9cdd..8e8fc85 100644 --- a/include/uapi/linux/usb/cdc.h +++ b/include/uapi/linux/usb/cdc.h @@ -12,6 +12,7 @@ #include <linux/types.h> #define USB_CDC_SUBCLASS_ACM 0x02 +#define USB_CDC_SUBCLASS_RNDIS 0x04 #define USB_CDC_SUBCLASS_ETHERNET 0x06 #define USB_CDC_SUBCLASS_WHCM 0x08 #define USB_CDC_SUBCLASS_DMM 0x09 @@ -31,6 +32,8 @@ #define USB_CDC_ACM_PROTO_AT_CDMA 6 #define USB_CDC_ACM_PROTO_VENDOR 0xff +#define USB_CDC_RNDIS_PROTO_ETH 1 + #define USB_CDC_PROTO_EEM 7 #define USB_CDC_NCM_PROTO_NTB 1 -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis 2014-09-24 6:48 [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis Heiko Schocher @ 2014-09-24 9:38 ` Michal Nazarewicz 2014-09-24 13:12 ` Heiko Schocher 2014-09-24 12:25 ` Lars Melin 1 sibling, 1 reply; 8+ messages in thread From: Michal Nazarewicz @ 2014-09-24 9:38 UTC (permalink / raw) To: Heiko Schocher, linux-usb Cc: Heiko Schocher, Felipe Balbi, Greg Kroah-Hartman, linux-kernel, Oliver Neukum, netdev, linux-api, Andrzej Pietrasiewicz, Kyungmin Park, Dan Carpenter, Macpaul Lin On Wed, Sep 24 2014, Heiko Schocher <hs@denx.de> wrote: > use the values for RNDIS over Ethernet as defined in > http://www.usb.org/developers/defined_class > (search for RDNIS): > > - baseclass: 0xef (miscellaneous) > - subclass: 0x04 > - protocol: 0x01 > > with this setings the file in Documentation/usb/linux.inf is > obsolete. > > Signed-off-by: Heiko Schocher <hs@denx.de> > > --- > > Cc: Felipe Balbi <balbi@ti.com> > Cc: Greg Kroah-Hartman <gregkh@suse.de> > Cc: linux-usb@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Cc: Oliver Neukum <oliver@neukum.name> > Cc: netdev@vger.kernel.org > Cc: linux-api@vger.kernel.org > Cc: Andrzej Pietrasiewicz <andrzej.p@samsung.com> > Cc: Michal Nazarewicz <mina86@mina86.com> > Cc: Kyungmin Park <kyungmin.park@samsung.com> > Cc: Dan Carpenter <dan.carpenter@oracle.com> > Cc: Macpaul Lin <macpaul@gmail.com> > > Tested with the "USB Compliance test suite which runs Windows", see: > http://www.usb.org/developers/tools/usb20_tools/#usb20cv > > drivers/net/usb/cdc_ether.c | 6 +++--- > drivers/usb/core/generic.c | 6 +++--- > drivers/usb/gadget/function/f_rndis.c | 6 +++--- > include/uapi/linux/usb/cdc.h | 3 +++ > 4 files changed, 12 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c > index 2a32d91..9c216c2 100644 > --- a/drivers/net/usb/cdc_ether.c > +++ b/drivers/net/usb/cdc_ether.c > @@ -35,9 +35,9 @@ > > static int is_rndis(struct usb_interface_descriptor *desc) > { > - return (desc->bInterfaceClass == USB_CLASS_COMM && > - desc->bInterfaceSubClass == 2 && > - desc->bInterfaceProtocol == 0xff); > + return (desc->bInterfaceClass == USB_CLASS_MISC && > + desc->bInterfaceSubClass == USB_CDC_SUBCLASS_RNDIS && > + desc->bInterfaceProtocol == USB_CDC_RNDIS_PROTO_ETH); > } Does that mean that new kernels will stop working with old RNDIs gadgets because they stop recognising them as RNDIS? I feel like this function should accept both, i.e.: return (desc->bInterfaceClass == USB_CLASS_COMM && desc->bInterfaceSubClass == 2 && desc->bInterfaceProtocol == 0xff) || (desc->bInterfaceClass == USB_CLASS_MISC && desc->bInterfaceSubClass == USB_CDC_SUBCLASS_RNDIS && desc->bInterfaceProtocol == USB_CDC_RNDIS_PROTO_ETH); > > static int is_activesync(struct usb_interface_descriptor *desc) > diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c > index 358ca8d..a2a4e05 100644 > --- a/drivers/usb/core/generic.c > +++ b/drivers/usb/core/generic.c > @@ -28,9 +28,9 @@ static inline const char *plural(int n) > > static int is_rndis(struct usb_interface_descriptor *desc) > { > - return desc->bInterfaceClass == USB_CLASS_COMM > - && desc->bInterfaceSubClass == 2 > - && desc->bInterfaceProtocol == 0xff; > + return desc->bInterfaceClass == USB_CLASS_MISC > + && desc->bInterfaceSubClass == USB_CDC_SUBCLASS_RNDIS > + && desc->bInterfaceProtocol == USB_CDC_RNDIS_PROTO_ETH; > } Ditto. > > static int is_activesync(struct usb_interface_descriptor *desc) > diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c > index ddb09dc..cc06046 100644 > --- a/drivers/usb/gadget/function/f_rndis.c > +++ b/drivers/usb/gadget/function/f_rndis.c > @@ -117,9 +117,9 @@ static struct usb_interface_descriptor rndis_control_intf = { > /* .bInterfaceNumber = DYNAMIC */ > /* status endpoint is optional; this could be patched later */ > .bNumEndpoints = 1, > - .bInterfaceClass = USB_CLASS_COMM, > - .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM, > - .bInterfaceProtocol = USB_CDC_ACM_PROTO_VENDOR, > + .bInterfaceClass = USB_CLASS_MISC, > + .bInterfaceSubClass = USB_CDC_SUBCLASS_RNDIS, > + .bInterfaceProtocol = USB_CDC_RNDIS_PROTO_ETH, > /* .iInterface = DYNAMIC */ > }; > > diff --git a/include/uapi/linux/usb/cdc.h b/include/uapi/linux/usb/cdc.h > index b6a9cdd..8e8fc85 100644 > --- a/include/uapi/linux/usb/cdc.h > +++ b/include/uapi/linux/usb/cdc.h > @@ -12,6 +12,7 @@ > #include <linux/types.h> > > #define USB_CDC_SUBCLASS_ACM 0x02 > +#define USB_CDC_SUBCLASS_RNDIS 0x04 > #define USB_CDC_SUBCLASS_ETHERNET 0x06 > #define USB_CDC_SUBCLASS_WHCM 0x08 > #define USB_CDC_SUBCLASS_DMM 0x09 > @@ -31,6 +32,8 @@ > #define USB_CDC_ACM_PROTO_AT_CDMA 6 > #define USB_CDC_ACM_PROTO_VENDOR 0xff > > +#define USB_CDC_RNDIS_PROTO_ETH 1 > + > #define USB_CDC_PROTO_EEM 7 > > #define USB_CDC_NCM_PROTO_NTB 1 -- Best regards, _ _ .o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o ..o | Computer Science, Michał “mina86” Nazarewicz (o o) ooo +--<mpn@google.com>--<xmpp:mina86@jabber.org>--ooO--(_)--Ooo-- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis 2014-09-24 9:38 ` Michal Nazarewicz @ 2014-09-24 13:12 ` Heiko Schocher 0 siblings, 0 replies; 8+ messages in thread From: Heiko Schocher @ 2014-09-24 13:12 UTC (permalink / raw) To: Michal Nazarewicz Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, linux-kernel, netdev, linux-api, Andrzej Pietrasiewicz, Kyungmin Park, Dan Carpenter, Macpaul Lin Hello Michal, Am 24.09.2014 11:38, schrieb Michal Nazarewicz: > On Wed, Sep 24 2014, Heiko Schocher<hs@denx.de> wrote: >> use the values for RNDIS over Ethernet as defined in >> http://www.usb.org/developers/defined_class >> (search for RDNIS): >> >> - baseclass: 0xef (miscellaneous) >> - subclass: 0x04 >> - protocol: 0x01 >> >> with this setings the file in Documentation/usb/linux.inf is >> obsolete. >> >> Signed-off-by: Heiko Schocher<hs@denx.de> >> >> --- >> >> Cc: Felipe Balbi<balbi@ti.com> >> Cc: Greg Kroah-Hartman<gregkh@suse.de> >> Cc: linux-usb@vger.kernel.org >> Cc: linux-kernel@vger.kernel.org >> Cc: Oliver Neukum<oliver@neukum.name> >> Cc: netdev@vger.kernel.org >> Cc: linux-api@vger.kernel.org >> Cc: Andrzej Pietrasiewicz<andrzej.p@samsung.com> >> Cc: Michal Nazarewicz<mina86@mina86.com> >> Cc: Kyungmin Park<kyungmin.park@samsung.com> >> Cc: Dan Carpenter<dan.carpenter@oracle.com> >> Cc: Macpaul Lin<macpaul@gmail.com> >> >> Tested with the "USB Compliance test suite which runs Windows", see: >> http://www.usb.org/developers/tools/usb20_tools/#usb20cv >> >> drivers/net/usb/cdc_ether.c | 6 +++--- >> drivers/usb/core/generic.c | 6 +++--- >> drivers/usb/gadget/function/f_rndis.c | 6 +++--- >> include/uapi/linux/usb/cdc.h | 3 +++ >> 4 files changed, 12 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c >> index 2a32d91..9c216c2 100644 >> --- a/drivers/net/usb/cdc_ether.c >> +++ b/drivers/net/usb/cdc_ether.c >> @@ -35,9 +35,9 @@ >> >> static int is_rndis(struct usb_interface_descriptor *desc) >> { >> - return (desc->bInterfaceClass == USB_CLASS_COMM&& >> - desc->bInterfaceSubClass == 2&& >> - desc->bInterfaceProtocol == 0xff); >> + return (desc->bInterfaceClass == USB_CLASS_MISC&& >> + desc->bInterfaceSubClass == USB_CDC_SUBCLASS_RNDIS&& >> + desc->bInterfaceProtocol == USB_CDC_RNDIS_PROTO_ETH); >> } > > Does that mean that new kernels will stop working with old RNDIs > gadgets because they stop recognising them as RNDIS? I feel like this > function should accept both, i.e.: Hmm.. I am not a usb guru ... but I think, yes, you are right. I add this to a v2 (if this patch has a chance to go in mainline). Thanks! bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis 2014-09-24 6:48 [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis Heiko Schocher 2014-09-24 9:38 ` Michal Nazarewicz @ 2014-09-24 12:25 ` Lars Melin 2014-09-24 13:12 ` Heiko Schocher 1 sibling, 1 reply; 8+ messages in thread From: Lars Melin @ 2014-09-24 12:25 UTC (permalink / raw) To: Heiko Schocher, linux-usb Cc: Felipe Balbi, Greg Kroah-Hartman, linux-kernel, Oliver Neukum, netdev, linux-api, Andrzej Pietrasiewicz, Michal Nazarewicz, Kyungmin Park, Dan Carpenter, Macpaul Lin On 2014-09-24 13:48, Heiko Schocher wrote: > use the values for RNDIS over Ethernet as defined in > http://www.usb.org/developers/defined_class > (search for RDNIS): > > - baseclass: 0xef (miscellaneous) > - subclass: 0x04 > - protocol: 0x01 > That is usb class, it is not the same thing as communication device class. > --- a/include/uapi/linux/usb/cdc.h > +++ b/include/uapi/linux/usb/cdc.h > @@ -12,6 +12,7 @@ > #include <linux/types.h> > > #define USB_CDC_SUBCLASS_ACM 0x02 > +#define USB_CDC_SUBCLASS_RNDIS 0x04 No, no, no. There is no CDC_SUBCLASS_RNDIS and you can not define one over an already used cdc subclass number, 0x04 is Multi-Channel Control Model ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis 2014-09-24 12:25 ` Lars Melin @ 2014-09-24 13:12 ` Heiko Schocher 2014-09-24 14:22 ` Lars Melin 0 siblings, 1 reply; 8+ messages in thread From: Heiko Schocher @ 2014-09-24 13:12 UTC (permalink / raw) To: Lars Melin Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, linux-kernel, netdev, linux-api, Andrzej Pietrasiewicz, Michal Nazarewicz, Kyungmin Park, Dan Carpenter, Macpaul Lin Hello Lars, Am 24.09.2014 14:25, schrieb Lars Melin: > On 2014-09-24 13:48, Heiko Schocher wrote: >> use the values for RNDIS over Ethernet as defined in >> http://www.usb.org/developers/defined_class >> (search for RDNIS): >> >> - baseclass: 0xef (miscellaneous) >> - subclass: 0x04 >> - protocol: 0x01 >> > That is usb class, it is not the same thing as communication device class. >> --- a/include/uapi/linux/usb/cdc.h >> +++ b/include/uapi/linux/usb/cdc.h >> @@ -12,6 +12,7 @@ >> #include <linux/types.h> >> #define USB_CDC_SUBCLASS_ACM 0x02 >> +#define USB_CDC_SUBCLASS_RNDIS 0x04 > No, no, no. > There is no CDC_SUBCLASS_RNDIS and you can not define one over an already used cdc subclass number, 0x04 is Multi-Channel Control Model Ah, ok, so I have to define this values in a new header file, as there is no current file for the USB_CLASS_MISC defines? Or is there a proper place for them? BTW: where do I find the "cdc subclass number, 0x04 is Multi-Channel Control Model" define? bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis 2014-09-24 13:12 ` Heiko Schocher @ 2014-09-24 14:22 ` Lars Melin 2014-09-29 12:11 ` Heiko Schocher 0 siblings, 1 reply; 8+ messages in thread From: Lars Melin @ 2014-09-24 14:22 UTC (permalink / raw) To: hs Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, linux-kernel, netdev, linux-api, Andrzej Pietrasiewicz, Michal Nazarewicz, Kyungmin Park, Dan Carpenter, Macpaul Lin On 2014-09-24 20:12, Heiko Schocher wrote: > Hello Lars, > > Am 24.09.2014 14:25, schrieb Lars Melin: >> On 2014-09-24 13:48, Heiko Schocher wrote: >>> use the values for RNDIS over Ethernet as defined in >>> http://www.usb.org/developers/defined_class >>> (search for RDNIS): >>> >>> - baseclass: 0xef (miscellaneous) >>> - subclass: 0x04 >>> - protocol: 0x01 >>> >> That is usb class, it is not the same thing as communication device >> class. >>> --- a/include/uapi/linux/usb/cdc.h >>> +++ b/include/uapi/linux/usb/cdc.h >>> @@ -12,6 +12,7 @@ >>> #include <linux/types.h> >>> #define USB_CDC_SUBCLASS_ACM 0x02 >>> +#define USB_CDC_SUBCLASS_RNDIS 0x04 >> No, no, no. >> There is no CDC_SUBCLASS_RNDIS and you can not define one over an >> already used cdc subclass number, 0x04 is Multi-Channel Control Model > > Ah, ok, so I have to define this values in a new header file, as there > is no current file for the USB_CLASS_MISC defines? Or is there a proper > place for them? > > BTW: where do I find the "cdc subclass number, 0x04 is Multi-Channel > Control Model" define? > > bye, > Heiko You can still find the original specification usbcdc11.pdf on the net if you google for it, it has been pulled from usb.org where you could download it until a few years ago. It is old but covers a lot of what you need to know. Linux has afaik only the cdc.h definition file, everything else is coded by class/subclass in respectively drivers when needed. 02/02/ff or e0/01/03 are the most common interface attribute for rndis, both of them together with a data interface with attributes 0a/00/00. Please check the whitelisting in drivers/net/usb/rndis_host.c and also blacklistings in other net drivers under the same path, it should give you an idea how to bind an interface to a specific driver by interface attributes and/or usb vid:pid. You should be able to do the same for your particular device. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis 2014-09-24 14:22 ` Lars Melin @ 2014-09-29 12:11 ` Heiko Schocher 2014-09-29 16:05 ` Lars Melin 0 siblings, 1 reply; 8+ messages in thread From: Heiko Schocher @ 2014-09-29 12:11 UTC (permalink / raw) To: Lars Melin Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, linux-kernel, netdev, linux-api, Andrzej Pietrasiewicz, Michal Nazarewicz, Kyungmin Park, Dan Carpenter, Macpaul Lin, Meier, Roger Hello Lars, sorry for my late answer ... Am 24.09.2014 16:22, schrieb Lars Melin: > On 2014-09-24 20:12, Heiko Schocher wrote: >> Hello Lars, >> >> Am 24.09.2014 14:25, schrieb Lars Melin: >>> On 2014-09-24 13:48, Heiko Schocher wrote: >>>> use the values for RNDIS over Ethernet as defined in >>>> http://www.usb.org/developers/defined_class >>>> (search for RDNIS): >>>> >>>> - baseclass: 0xef (miscellaneous) >>>> - subclass: 0x04 >>>> - protocol: 0x01 >>>> >>> That is usb class, it is not the same thing as communication device class. >>>> --- a/include/uapi/linux/usb/cdc.h >>>> +++ b/include/uapi/linux/usb/cdc.h >>>> @@ -12,6 +12,7 @@ >>>> #include <linux/types.h> >>>> #define USB_CDC_SUBCLASS_ACM 0x02 >>>> +#define USB_CDC_SUBCLASS_RNDIS 0x04 >>> No, no, no. >>> There is no CDC_SUBCLASS_RNDIS and you can not define one over an already used cdc subclass number, 0x04 is Multi-Channel Control Model >> >> Ah, ok, so I have to define this values in a new header file, as there >> is no current file for the USB_CLASS_MISC defines? Or is there a proper >> place for them? >> >> BTW: where do I find the "cdc subclass number, 0x04 is Multi-Channel >> Control Model" define? >> >> bye, >> Heiko > > You can still find the original specification usbcdc11.pdf on the net if you google for it, it has been pulled from usb.org where you could download it until a few years ago. > It is old but covers a lot of what you need to know. Hmm.. maybe I am to dummy for finding this docment... http://www.usb.org/results?q=usbcdc11.pdf&submit=Search does not find this document ... could you send me a direct link? I found with the above search: http://www.usb.org/developers/defined_class and this site, exactly describes the values for RNDIS over ethernet, as my patch changes [1] > Linux has afaik only the cdc.h definition file, everything else is coded by class/subclass in respectively drivers when needed. why not in header files? I thought, magical values are not welcome in source code ... As for the is_rndis() function case, this function is defined in 2 places: - drivers/net/usb/cdc_ether.c - drivers/usb/core/generic.c Has this a special reason? This seems suboptimal to me ... > 02/02/ff or e0/01/03 are the most common interface attribute for rndis, both of them together with a data interface with attributes 0a/00/00. I must admit, I am not a USB nor a RNDIS expert ... > Please check the whitelisting in drivers/net/usb/rndis_host.c and also blacklistings in other net drivers under the same path, it should give you an idea how to bind an interface to a specific driver by interface attributes and/or usb vid:pid. > You should be able to do the same for your particular device. Hmm.. I did not understand you here ... so, one step back: I got from a customer this patch (in a similiar version) and he did tests with [3] and saw, that a board which runs linux, is seen in [3] with the values [2] ... so he changed the values in drivers/usb/gadget/function/f_rndis.c to the values [1], which are documented in [4] and with them the test [3] is happy ... and the file "Documentation/usb/linux.inf" is not longer needed on the windows pc! So he (and at the end I too) thought, that this is the proper way to make [3] happy ... (maybe [3] is incorrect ? ) Is current ML code correct? And if yes, why? If the values [2] in current ML linux are correct, could you say me, where they are documented? (and sorry for my stupid questions ...) Thanks! bye, Heiko [1] values which my patch sets for RNDIS over ethernet - baseclass: 0xef (miscellaneous) - subclass: 0x04 - protocol: 0x01 [2] currently used values for RNDIS over ethernet - baseclass: 0x02 (USB_CLASS_COMM) - subclass: 0x02 - protocol: 0xff [3] "USB Compliance test suite which runs Windows", see: http://www.usb.org/developers/tools/usb20_tools/#usb20cv [4] http://www.usb.org/developers/defined_class -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis 2014-09-29 12:11 ` Heiko Schocher @ 2014-09-29 16:05 ` Lars Melin 0 siblings, 0 replies; 8+ messages in thread From: Lars Melin @ 2014-09-29 16:05 UTC (permalink / raw) To: hs Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, linux-kernel, netdev, linux-api, Andrzej Pietrasiewicz, Michal Nazarewicz, Kyungmin Park, Dan Carpenter, Macpaul Lin, Meier, Roger On 2014-09-29 19:11, Heiko Schocher wrote: > Hello Lars, > > sorry for my late answer ... > > Am 24.09.2014 16:22, schrieb Lars Melin: >> On 2014-09-24 20:12, Heiko Schocher wrote: >>> Hello Lars, >>> >>> Am 24.09.2014 14:25, schrieb Lars Melin: >>>> On 2014-09-24 13:48, Heiko Schocher wrote: >>>>> use the values for RNDIS over Ethernet as defined in >>>>> http://www.usb.org/developers/defined_class >>>>> (search for RDNIS): >>>>> >>>>> - baseclass: 0xef (miscellaneous) >>>>> - subclass: 0x04 >>>>> - protocol: 0x01 >>>>> >>>> That is usb class, it is not the same thing as communication device >>>> class. >>>>> --- a/include/uapi/linux/usb/cdc.h >>>>> +++ b/include/uapi/linux/usb/cdc.h >>>>> @@ -12,6 +12,7 @@ >>>>> #include <linux/types.h> >>>>> #define USB_CDC_SUBCLASS_ACM 0x02 >>>>> +#define USB_CDC_SUBCLASS_RNDIS 0x04 >>>> No, no, no. >>>> There is no CDC_SUBCLASS_RNDIS and you can not define one over an >>>> already used cdc subclass number, 0x04 is Multi-Channel Control Model >>> >>> Ah, ok, so I have to define this values in a new header file, as there >>> is no current file for the USB_CLASS_MISC defines? Or is there a proper >>> place for them? >>> >>> BTW: where do I find the "cdc subclass number, 0x04 is Multi-Channel >>> Control Model" define? >>> >>> bye, >>> Heiko >> >> You can still find the original specification usbcdc11.pdf on the net >> if you google for it, it has been pulled from usb.org where you could >> download it until a few years ago. >> It is old but covers a lot of what you need to know. > > Hmm.. maybe I am to dummy for finding this docment... > > http://www.usb.org/results?q=usbcdc11.pdf&submit=Search > > does not find this document ... could you send me a direct link? > > I found with the above search: > > http://www.usb.org/developers/defined_class I don't know if it is a good idea to provide a link here to a document which usb.org has made unavailable, I told you to google for the file name , not to search for it on usb.org > and this site, exactly describes the values for RNDIS over ethernet, > as my patch changes [1] > >> Linux has afaik only the cdc.h definition file, everything else is >> coded by class/subclass in respectively drivers when needed. > > why not in header files? I thought, magical values are not welcome > in source code ... > I was wrong, usb class definitions are included in ../include/uapi/linux/usb/ch9.h > As for the is_rndis() function case, this function is defined in > 2 places: > > - drivers/net/usb/cdc_ether.c > - drivers/usb/core/generic.c > > Has this a special reason? This seems suboptimal to me ... Yes it has, but the core driver is not an interface driver so it is not of relevance in this case. cdc_ether handles interfaces of device connected to the usb bus, not interfaces of gadget devices created by linux. > I got from a customer this patch (in a similiar version) and > he did tests with [3] and saw, that a board which runs linux, > is seen in [3] with the values [2] ... so he changed the > values in drivers/usb/gadget/function/f_rndis.c to the > values [1], which are documented in [4] and with them > the test [3] is happy ... and the file > "Documentation/usb/linux.inf" is not longer needed on the > windows pc! > The patch from your customer removed the most common rndis interface attributes and substituted them with one of many other interface attributes which Microsoft uses, this is not the right way of doing it. Why did he patch ../core/generic.c and ../net/usb/cdc_ether.c if he wants to change the interface attributes of g_rndis? Lars ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-09-29 16:05 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-09-24 6:48 [PATCH] usb: gadget: f_rndis: fix usb_interface_descriptor for rndis Heiko Schocher 2014-09-24 9:38 ` Michal Nazarewicz 2014-09-24 13:12 ` Heiko Schocher 2014-09-24 12:25 ` Lars Melin 2014-09-24 13:12 ` Heiko Schocher 2014-09-24 14:22 ` Lars Melin 2014-09-29 12:11 ` Heiko Schocher 2014-09-29 16:05 ` Lars Melin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).