Subject: Re: [PATCH] USB: Added USB_ETH_RNDIS to use instead of CONFIG_USB_ETH_RNDIS

From: Randy Dunlap <[email-masked]>
Date: Mon, 30 Nov 2009 22:43:16 -0800

Michal Nazarewicz wrote:
> From: Michal Nazarewicz <[email-masked]>
> 
> If g_ether and g_multi are both built CONFIG_USB_ETH_RNDIS symbol
> may be redefined in the later and, whats even worse, g_ether's settings
> may affect g_multi's.  This adds a USB_ETH_RNDIS symbol defined at the
> beginning of ether.c and multi.c according toproper KConfig settings.
> 
> Signed-off-by: Michal Nazarewicz <[email-masked]>
> Cc: Marek Szyprowski <[email-masked]>
> ---
>  drivers/usb/gadget/ether.c   |   16 ++++++++++++----
>  drivers/usb/gadget/multi.c   |   13 ++++++++-----
>  drivers/usb/gadget/u_ether.h |    2 +-
>  3 files changed, 21 insertions(+), 10 deletions(-)
> 
>> On Wed, 25 Nov 2009 12:59:46 +0100 Michal Nazarewicz wrote:
>>> CONFIG_USB_ETH_RNDIS may be defined when g_ether is built causing
>>> warning when multi.c tries to redefine its value.  Changed to first
>>> undefine CONFIG_USB_ETH_RNDIS in multi.c.
> 
> On Sat, 28 Nov 2009 19:34:29 +0100, Randy Dunlap wrote:
>> Is there no kconfig way to solve this?
>> You shouldn't be messing with kconfig symbols in source files...
> 
> Messing with KConfig symbols was less intrusive method of fixing the
> warning but if anyone feels like it's not the proper method here's
> another patch.

This is a little better -- thanks.
Acked-by: Randy Dunlap <[email-masked]>

> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
> index 167cb2a..141372b 100644
> --- a/drivers/usb/gadget/ether.c
> +++ b/drivers/usb/gadget/ether.c
> @@ -25,6 +25,14 @@
>  #include <linux/kernel.h>
>  #include <linux/utsname.h>
> 
> +
> +#if defined USB_ETH_RNDIS
> +#  undef USB_ETH_RNDIS
> +#endif
> +#ifdef CONFIG_USB_ETH_RNDIS
> +#  define USB_ETH_RNDIS y
> +#endif
> +
>  #include "u_ether.h"
> 
> 
> @@ -66,7 +74,7 @@
>  #define DRIVER_DESC		"Ethernet Gadget"
>  #define DRIVER_VERSION		"Memorial Day 2008"
> 
> -#ifdef CONFIG_USB_ETH_RNDIS
> +#ifdef USB_ETH_RNDIS
>  #define PREFIX			"RNDIS/"
>  #else
>  #define PREFIX			""
> @@ -87,7 +95,7 @@
> 
>  static inline bool has_rndis(void)
>  {
> -#ifdef	CONFIG_USB_ETH_RNDIS
> +#ifdef	USB_ETH_RNDIS
>  	return true;
>  #else
>  	return false;
> @@ -110,7 +118,7 @@ static inline bool has_rndis(void)
> 
>  #include "f_ecm.c"
>  #include "f_subset.c"
> -#ifdef	CONFIG_USB_ETH_RNDIS
> +#ifdef	USB_ETH_RNDIS
>  #include "f_rndis.c"
>  #include "rndis.c"
>  #endif
> @@ -251,7 +259,7 @@ static struct usb_configuration rndis_config_driver = {
> 
>  /*-------------------------------------------------------------------------*/
> 
> -#ifdef CONFIG_USB_ETH_EEM
> +#ifdef USB_ETH_EEM
>  static int use_eem = 1;
>  #else
>  static int use_eem;
> diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c
> index 64711fe..4295601 100644
> --- a/drivers/usb/gadget/multi.c
> +++ b/drivers/usb/gadget/multi.c
> @@ -26,8 +26,11 @@
>  #include <linux/utsname.h>
> 
> 
> -#if defined CONFIG_USB_G_MULTI_RNDIS
> -#  define CONFIG_USB_ETH_RNDIS y
> +#if defined USB_ETH_RNDIS
> +#  undef USB_ETH_RNDIS
> +#endif
> +#ifdef CONFIG_USB_ETH_RNDIS
> +#  define USB_ETH_RNDIS y
>  #endif
> 
> 
> @@ -59,7 +62,7 @@
> 
>  #include "f_ecm.c"
>  #include "f_subset.c"
> -#ifdef CONFIG_USB_ETH_RNDIS
> +#ifdef USB_ETH_RNDIS
>  #  include "f_rndis.c"
>  #  include "rndis.c"
>  #endif
> @@ -150,7 +153,7 @@ FSG_MODULE_PARAMETERS(/* no prefix */, mod_data);
>  static struct fsg_common *fsg_common;
> 
> 
> -#ifdef CONFIG_USB_ETH_RNDIS
> +#ifdef USB_ETH_RNDIS
> 
>  static int __init rndis_do_config(struct usb_configuration *c)
>  {
> @@ -292,7 +295,7 @@ static int __init multi_bind(struct usb_composite_dev *cdev)
>  	strings_dev[STRING_PRODUCT_IDX].id = status;
>  	device_desc.iProduct = status;
> 
> -#ifdef CONFIG_USB_ETH_RNDIS
> +#ifdef USB_ETH_RNDIS
>  	/* register our first configuration */
>  	status = usb_add_config(cdev, &rndis_config_driver);
>  	if (status < 0)
> diff --git a/drivers/usb/gadget/u_ether.h b/drivers/usb/gadget/u_ether.h
> index 91b39ff..fd55f45 100644
> --- a/drivers/usb/gadget/u_ether.h
> +++ b/drivers/usb/gadget/u_ether.h
> @@ -112,7 +112,7 @@ int geth_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]);
>  int ecm_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]);
>  int eem_bind_config(struct usb_configuration *c);
> 
> -#ifdef CONFIG_USB_ETH_RNDIS
> +#ifdef USB_ETH_RNDIS
> 
>  int rndis_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]);
> 

There are still some g_multi build problems.
The following patch is also needed -- please apply.

---
From: Randy Dunlap <[email-masked]>

USB_G_MULTI uses block and net interface functions, so make it
depend on both of those.  Otherwise there are lots of build errors.

Fix USB_G_MULTI config help text typos and copy/paste error.

Signed-off-by: Randy Dunlap <[email-masked]>
---
 drivers/usb/gadget/Kconfig |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

--- linux-next-20091130.orig/drivers/usb/gadget/Kconfig
+++ linux-next-20091130/drivers/usb/gadget/Kconfig
@@ -814,16 +814,17 @@ config USB_CDC_COMPOSITE
 
 config USB_G_MULTI
 	tristate "Multifunction Composite Gadget (EXPERIMENTAL)"
+	depends on BLOCK && NET
 	help
 	  The Multifunction Composite Gadget provides Ethernet (RNDIS
 	  and/or CDC Ethernet), mass storage and ACM serial link
 	  interfaces.
 
-	  You will be asked too choose which of the two configurations are
+	  You will be asked to choose which of the two configurations is
 	  to be available in the gadget.  At least one configuration must
-	  be choosen to make gadget usable.  Selecting more then one
+	  be chosen to make the gadget usable.  Selecting more than one
 	  configuration will prevent Windows from automatically detecting
-	  the gadget as a composite gadget an INF file will be needed to
+	  the gadget as a composite gadget, so an INF file will be needed to
 	  use the gadget.
 
 	  Say "y" to link the driver statically, or "m" to build a
@@ -836,8 +837,8 @@ config USB_G_MULTI_RNDIS
 	help
 	  This option enables a configuration with RNDIS, CDC Serial and
 	  Mass Storage functions available in the Multifunction Composite
-	  Gadget.  This is configuration dedicated for Windows since RNDIS
-	  is Microsfot's protocol.
+	  Gadget.  This is the configuration dedicated for Windows since RNDIS
+	  is Microsoft's protocol.
 
 	  If unsure, say "y".
 
@@ -848,8 +849,7 @@ config USB_G_MULTI_CDC
 	help
 	  This option enables a configuration with CDC Ethernet (ECM), CDC
 	  Serial and Mass Storage functions available in the Multifunction
-	  Composite Gadget.  This is configuration dedicated for Windows
-	  since RNDIS is Microsfot's protocol.
+	  Composite Gadget.
 
 	  If unsure, say "y".