All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
@ 2013-01-12 11:34 Wei Shuai
  2013-01-12 23:35 ` David Miller
       [not found] ` <1357990479-5836-1-git-send-email-cpuwolf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 2 replies; 11+ messages in thread
From: Wei Shuai @ 2013-01-12 11:34 UTC (permalink / raw)
  To: gregkh, alexey.orishko, bjorn; +Cc: linux-usb, netdev, Wei Shuai

Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. so I introduce a flag CDC_NCM_DRIVER_DATA_NOARP which is defined in driver_info:data. so later on, if more such buggy devices are found, they could use same flag to handle. 

Signed-off-by: Wei Shuai <cpuwolf@gmail.com>
---
 drivers/net/usb/cdc_ncm.c |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index 71b6e92..6093e07 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -55,6 +55,9 @@
 
 #define	DRIVER_VERSION				"14-Mar-2012"
 
+/* Flags for driver_info::data */
+#define CDC_NCM_DRIVER_DATA_NOARP  1
+
 static void cdc_ncm_txpath_bh(unsigned long param);
 static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx);
 static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *hr_timer);
@@ -573,6 +576,10 @@ static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf)
 		return -ENODEV;
 #endif
 
+	if (dev->driver_info->data & CDC_NCM_DRIVER_DATA_NOARP) {
+		/* some buggy device cannot do ARP*/
+		dev->net->flags |= IFF_NOARP;
+	}
 	/* NCM data altsetting is always 1 */
 	ret = cdc_ncm_bind_common(dev, intf, 1);
 
@@ -1155,6 +1162,21 @@ static const struct driver_info wwan_info = {
 	.tx_fixup = cdc_ncm_tx_fixup,
 };
 
+/* Same as wwan_info, but with IFF_NOARP  */
+static const struct driver_info wwan_noarp_info = {
+	.description = "Mobile Broadband Network Device (NO ARP)",
+	.flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET
+			| FLAG_WWAN,
+	.data = CDC_NCM_DRIVER_DATA_NOARP,
+	.bind = cdc_ncm_bind,
+	.unbind = cdc_ncm_unbind,
+	.check_connect = cdc_ncm_check_connect,
+	.manage_power = usbnet_manage_power,
+	.status = cdc_ncm_status,
+	.rx_fixup = cdc_ncm_rx_fixup,
+	.tx_fixup = cdc_ncm_tx_fixup,
+};
+
 static const struct usb_device_id cdc_devs[] = {
 	/* Ericsson MBM devices like F5521gw */
 	{ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
@@ -1194,6 +1216,13 @@ static const struct usb_device_id cdc_devs[] = {
 	  .driver_info = (unsigned long)&wwan_info,
 	},
 
+	/* Infineon(now Intel) HSPA Modem platform */
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x1519, 0x0443,
+		USB_CLASS_COMM,
+		USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
+	  .driver_info = (unsigned long)&wwan_noarp_info,
+	},
+
 	/* Generic CDC-NCM devices */
 	{ USB_INTERFACE_INFO(USB_CLASS_COMM,
 		USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
-- 
1.7.6.5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
  2013-01-12 11:34 [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform Wei Shuai
@ 2013-01-12 23:35 ` David Miller
  2013-01-14 17:19   ` Dan Williams
       [not found] ` <1357990479-5836-1-git-send-email-cpuwolf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  1 sibling, 1 reply; 11+ messages in thread
From: David Miller @ 2013-01-12 23:35 UTC (permalink / raw)
  To: cpuwolf; +Cc: gregkh, alexey.orishko, bjorn, linux-usb, netdev

From: Wei Shuai <cpuwolf@gmail.com>
Date: Sat, 12 Jan 2013 19:34:39 +0800

> Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. so I
> introduce a flag CDC_NCM_DRIVER_DATA_NOARP which is defined in
> driver_info:data. so later on, if more such buggy devices are found,
> they could use same flag to handle.

Is it no able to do ARP or, the more likely case, does broadcast
not work at all?

If it's the latter, IFF_NOARP is just making over the real problem.

I'm not applying this, no hardware device should set IFF_NOARP.
You probably really want IFF_POINTOPOINT or similar.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
  2013-01-12 23:35 ` David Miller
@ 2013-01-14 17:19   ` Dan Williams
  2013-01-14 18:34     ` David Miller
  2013-01-15 13:11     ` Wei Shuai
  0 siblings, 2 replies; 11+ messages in thread
From: Dan Williams @ 2013-01-14 17:19 UTC (permalink / raw)
  To: David Miller; +Cc: cpuwolf, gregkh, alexey.orishko, bjorn, linux-usb, netdev

On Sat, 2013-01-12 at 15:35 -0800, David Miller wrote:
> From: Wei Shuai <cpuwolf@gmail.com>
> Date: Sat, 12 Jan 2013 19:34:39 +0800
> 
> > Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. so I
> > introduce a flag CDC_NCM_DRIVER_DATA_NOARP which is defined in
> > driver_info:data. so later on, if more such buggy devices are found,
> > they could use same flag to handle.
> 
> Is it no able to do ARP or, the more likely case, does broadcast
> not work at all?
> 
> If it's the latter, IFF_NOARP is just making over the real problem.
> 
> I'm not applying this, no hardware device should set IFF_NOARP.
> You probably really want IFF_POINTOPOINT or similar.

IFF_NOARP is already done for other WWAN devices (sierra_net, hso,
cdc-ether, cdc-phonet, lg-vl600, etc) so there is some precedent.  Some
drivers (phonet, hso) set *both* POINTTOPOINT and NOARP.  Is that
redundant, and should all WWAN drivers be moved to only POINTTOPOINT?

(aside: usbnet has FLAG_POINTTOPOINT, but that's nothing to do with
IFF_POINTTOPOINT, it only controls whether the interface is named usbX
or ethX.  Confusing.)

Dan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
  2013-01-14 17:19   ` Dan Williams
@ 2013-01-14 18:34     ` David Miller
  2013-01-15  0:41       ` Peter Stuge
  2013-01-15  8:34       ` Bjørn Mork
  2013-01-15 13:11     ` Wei Shuai
  1 sibling, 2 replies; 11+ messages in thread
From: David Miller @ 2013-01-14 18:34 UTC (permalink / raw)
  To: dcbw; +Cc: cpuwolf, gregkh, alexey.orishko, bjorn, linux-usb, netdev

From: Dan Williams <dcbw@redhat.com>
Date: Mon, 14 Jan 2013 11:19:13 -0600

> On Sat, 2013-01-12 at 15:35 -0800, David Miller wrote:
>> From: Wei Shuai <cpuwolf@gmail.com>
>> Date: Sat, 12 Jan 2013 19:34:39 +0800
>> 
>> > Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. so I
>> > introduce a flag CDC_NCM_DRIVER_DATA_NOARP which is defined in
>> > driver_info:data. so later on, if more such buggy devices are found,
>> > they could use same flag to handle.
>> 
>> Is it no able to do ARP or, the more likely case, does broadcast
>> not work at all?
>> 
>> If it's the latter, IFF_NOARP is just making over the real problem.
>> 
>> I'm not applying this, no hardware device should set IFF_NOARP.
>> You probably really want IFF_POINTOPOINT or similar.
> 
> IFF_NOARP is already done for other WWAN devices (sierra_net, hso,
> cdc-ether, cdc-phonet, lg-vl600, etc) so there is some precedent.  Some
> drivers (phonet, hso) set *both* POINTTOPOINT and NOARP.  Is that
> redundant, and should all WWAN drivers be moved to only POINTTOPOINT?
> 
> (aside: usbnet has FLAG_POINTTOPOINT, but that's nothing to do with
> IFF_POINTTOPOINT, it only controls whether the interface is named usbX
> or ethX.  Confusing.)

I can't answer any of your questions unless you tell me what the
real limitation of these devices is.

For the second time, is the problem that these devices cannot
support broadcast packets properly?

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
  2013-01-14 18:34     ` David Miller
@ 2013-01-15  0:41       ` Peter Stuge
  2013-01-15  8:34       ` Bjørn Mork
  1 sibling, 0 replies; 11+ messages in thread
From: Peter Stuge @ 2013-01-15  0:41 UTC (permalink / raw)
  To: David Miller
  Cc: dcbw, cpuwolf, gregkh, alexey.orishko, bjorn, linux-usb, netdev

David Miller wrote:
> > should all WWAN drivers be moved to only POINTTOPOINT?
> 
> I can't answer any of your questions unless you tell me what the
> real limitation of these devices is.

It's rather about the network than any given devices, right?


//Peter

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
  2013-01-14 18:34     ` David Miller
  2013-01-15  0:41       ` Peter Stuge
@ 2013-01-15  8:34       ` Bjørn Mork
       [not found]         ` <87hamikfpc.fsf-lbf33ChDnrE/G1V5fR+Y7Q@public.gmane.org>
  1 sibling, 1 reply; 11+ messages in thread
From: Bjørn Mork @ 2013-01-15  8:34 UTC (permalink / raw)
  To: David Miller; +Cc: dcbw, cpuwolf, gregkh, alexey.orishko, linux-usb, netdev

David Miller <davem@davemloft.net> writes:
> From: Dan Williams <dcbw@redhat.com>
> 
>> IFF_NOARP is already done for other WWAN devices (sierra_net, hso,
>> cdc-ether, cdc-phonet, lg-vl600, etc) so there is some precedent.  Some
>> drivers (phonet, hso) set *both* POINTTOPOINT and NOARP.  Is that
>> redundant, and should all WWAN drivers be moved to only POINTTOPOINT?
>> 
>> (aside: usbnet has FLAG_POINTTOPOINT, but that's nothing to do with
>> IFF_POINTTOPOINT, it only controls whether the interface is named usbX
>> or ethX.  Confusing.)
>
> I can't answer any of your questions unless you tell me what the
> real limitation of these devices is.
>
> For the second time, is the problem that these devices cannot
> support broadcast packets properly?

The main problem is that these devices don't support ethernet.  They
support IP (v4 and _maybe_ v6) with an ethernet header.  Many of them
will do ARP (and IPv6 ND) as well to complete the picture, but some of
them don't and that's what these drivers try to deal with.

Note that most of the devices will run a DHCP server, so there is some
sort of IP broadcast support.  Whether that qualifies as proper ethernet
broadcast support is another question...

These devices are attempting to bridge an IP-only point-to-point
interface and an ethernet over USB interface, with the intention to make
the point-to-point interface look like ethernet to applications and
users. This is of course always going to be imperfect.  But I believe
that we should aim to help the firmware achive this goal when writing
drivers instead of working against it.  Setting IFF_NOARP and not
IFF_POINTTOPOINT is one way to do that.



Bjørn

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
  2013-01-14 17:19   ` Dan Williams
  2013-01-14 18:34     ` David Miller
@ 2013-01-15 13:11     ` Wei Shuai
  1 sibling, 0 replies; 11+ messages in thread
From: Wei Shuai @ 2013-01-15 13:11 UTC (permalink / raw)
  To: Dan Williams
  Cc: David Miller, Greg Kroah-Hartman, Alexey Orishko,
	Bjørn Mork, linux-usb, netdev

yes. usbnet has FLAG_POINTTOPOINT, but that's nothing to do with
IFF_POINTTOPOINT. At least we should do something to handle
relationship of these flags rather than only have different names.
or new flag FLAG_NOARP could be introduced to corresponding to IFF_NOARP.

2013/1/15 Dan Williams <dcbw@redhat.com>:
> On Sat, 2013-01-12 at 15:35 -0800, David Miller wrote:
>> From: Wei Shuai <cpuwolf@gmail.com>
>> Date: Sat, 12 Jan 2013 19:34:39 +0800
>>
>> > Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. so I
>> > introduce a flag CDC_NCM_DRIVER_DATA_NOARP which is defined in
>> > driver_info:data. so later on, if more such buggy devices are found,
>> > they could use same flag to handle.
>>
>> Is it no able to do ARP or, the more likely case, does broadcast
>> not work at all?
>>
>> If it's the latter, IFF_NOARP is just making over the real problem.
>>
>> I'm not applying this, no hardware device should set IFF_NOARP.
>> You probably really want IFF_POINTOPOINT or similar.
>
> IFF_NOARP is already done for other WWAN devices (sierra_net, hso,
> cdc-ether, cdc-phonet, lg-vl600, etc) so there is some precedent.  Some
> drivers (phonet, hso) set *both* POINTTOPOINT and NOARP.  Is that
> redundant, and should all WWAN drivers be moved to only POINTTOPOINT?
>
> (aside: usbnet has FLAG_POINTTOPOINT, but that's nothing to do with
> IFF_POINTTOPOINT, it only controls whether the interface is named usbX
> or ethX.  Confusing.)
>
> Dan
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
       [not found]         ` <87hamikfpc.fsf-lbf33ChDnrE/G1V5fR+Y7Q@public.gmane.org>
@ 2013-01-16 21:18           ` David Miller
  0 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2013-01-16 21:18 UTC (permalink / raw)
  To: bjorn-yOkvZcmFvRU
  Cc: dcbw-H+wXaHxf7aLQT0dZR+AlfA, cpuwolf-Re5JQEeQqe8AvxtiuMwx3w,
	gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	alexey.orishko-0IS4wlFg1OjSUeElwK9/Pw,
	linux-usb-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA

From: Bjørn Mork <bjorn-yOkvZcmFvRU@public.gmane.org>
Date: Tue, 15 Jan 2013 09:34:07 +0100

> The main problem is that these devices don't support ethernet.  They
> support IP (v4 and _maybe_ v6) with an ethernet header.  Many of them
> will do ARP (and IPv6 ND) as well to complete the picture, but some of
> them don't and that's what these drivers try to deal with.

Ok, in that case setting IFF_NOARP is in fact the right thing to do.
Thanks for describing the situation.

Someone please resubmit the patch to do that and I'll apply it.
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
       [not found] ` <1357990479-5836-1-git-send-email-cpuwolf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2013-01-16 21:45   ` Dan Williams
  2013-01-17  6:44     ` Wei Shuai
  0 siblings, 1 reply; 11+ messages in thread
From: Dan Williams @ 2013-01-16 21:45 UTC (permalink / raw)
  To: Wei Shuai
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	alexey.orishko-0IS4wlFg1OjSUeElwK9/Pw, bjorn-yOkvZcmFvRU,
	linux-usb-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA

On Sat, 2013-01-12 at 19:34 +0800, Wei Shuai wrote:
> Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. so I introduce a flag CDC_NCM_DRIVER_DATA_NOARP which is defined in driver_info:data. so later on, if more such buggy devices are found, they could use same flag to handle. 

So given that Dave now approves of IFF_NOARP, let's change your original
patch to add a FLAG_NOARP for the .flags structure instead of inventing
another mechanism for .data.

Dan

> Signed-off-by: Wei Shuai <cpuwolf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
>  drivers/net/usb/cdc_ncm.c |   29 +++++++++++++++++++++++++++++
>  1 files changed, 29 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
> index 71b6e92..6093e07 100644
> --- a/drivers/net/usb/cdc_ncm.c
> +++ b/drivers/net/usb/cdc_ncm.c
> @@ -55,6 +55,9 @@
>  
>  #define	DRIVER_VERSION				"14-Mar-2012"
>  
> +/* Flags for driver_info::data */
> +#define CDC_NCM_DRIVER_DATA_NOARP  1
> +
>  static void cdc_ncm_txpath_bh(unsigned long param);
>  static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx);
>  static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *hr_timer);
> @@ -573,6 +576,10 @@ static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf)
>  		return -ENODEV;
>  #endif
>  
> +	if (dev->driver_info->data & CDC_NCM_DRIVER_DATA_NOARP) {
> +		/* some buggy device cannot do ARP*/
> +		dev->net->flags |= IFF_NOARP;
> +	}
>  	/* NCM data altsetting is always 1 */
>  	ret = cdc_ncm_bind_common(dev, intf, 1);
>  
> @@ -1155,6 +1162,21 @@ static const struct driver_info wwan_info = {
>  	.tx_fixup = cdc_ncm_tx_fixup,
>  };
>  
> +/* Same as wwan_info, but with IFF_NOARP  */
> +static const struct driver_info wwan_noarp_info = {
> +	.description = "Mobile Broadband Network Device (NO ARP)",
> +	.flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET
> +			| FLAG_WWAN,
> +	.data = CDC_NCM_DRIVER_DATA_NOARP,
> +	.bind = cdc_ncm_bind,
> +	.unbind = cdc_ncm_unbind,
> +	.check_connect = cdc_ncm_check_connect,
> +	.manage_power = usbnet_manage_power,
> +	.status = cdc_ncm_status,
> +	.rx_fixup = cdc_ncm_rx_fixup,
> +	.tx_fixup = cdc_ncm_tx_fixup,
> +};
> +
>  static const struct usb_device_id cdc_devs[] = {
>  	/* Ericsson MBM devices like F5521gw */
>  	{ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
> @@ -1194,6 +1216,13 @@ static const struct usb_device_id cdc_devs[] = {
>  	  .driver_info = (unsigned long)&wwan_info,
>  	},
>  
> +	/* Infineon(now Intel) HSPA Modem platform */
> +	{ USB_DEVICE_AND_INTERFACE_INFO(0x1519, 0x0443,
> +		USB_CLASS_COMM,
> +		USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
> +	  .driver_info = (unsigned long)&wwan_noarp_info,
> +	},
> +
>  	/* Generic CDC-NCM devices */
>  	{ USB_INTERFACE_INFO(USB_CLASS_COMM,
>  		USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
  2013-01-16 21:45   ` Dan Williams
@ 2013-01-17  6:44     ` Wei Shuai
  2013-01-18 17:43       ` Dan Williams
  0 siblings, 1 reply; 11+ messages in thread
From: Wei Shuai @ 2013-01-17  6:44 UTC (permalink / raw)
  To: Dan Williams
  Cc: Greg Kroah-Hartman, Alexey Orishko, Bjørn Mork, linux-usb, netdev

OK, I will follow up. after add FLAG_NOARP, how should I handle
IFF_NOARP? will I do it in cdc_ncm.c or usb_net.c?

2013/1/17 Dan Williams <dcbw@redhat.com>:
> On Sat, 2013-01-12 at 19:34 +0800, Wei Shuai wrote:
>> Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. so I introduce a flag CDC_NCM_DRIVER_DATA_NOARP which is defined in driver_info:data. so later on, if more such buggy devices are found, they could use same flag to handle.
>
> So given that Dave now approves of IFF_NOARP, let's change your original
> patch to add a FLAG_NOARP for the .flags structure instead of inventing
> another mechanism for .data.
>
> Dan
>
>> Signed-off-by: Wei Shuai <cpuwolf@gmail.com>
>> ---
>>  drivers/net/usb/cdc_ncm.c |   29 +++++++++++++++++++++++++++++
>>  1 files changed, 29 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
>> index 71b6e92..6093e07 100644
>> --- a/drivers/net/usb/cdc_ncm.c
>> +++ b/drivers/net/usb/cdc_ncm.c
>> @@ -55,6 +55,9 @@
>>
>>  #define      DRIVER_VERSION                          "14-Mar-2012"
>>
>> +/* Flags for driver_info::data */
>> +#define CDC_NCM_DRIVER_DATA_NOARP  1
>> +
>>  static void cdc_ncm_txpath_bh(unsigned long param);
>>  static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx);
>>  static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *hr_timer);
>> @@ -573,6 +576,10 @@ static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf)
>>               return -ENODEV;
>>  #endif
>>
>> +     if (dev->driver_info->data & CDC_NCM_DRIVER_DATA_NOARP) {
>> +             /* some buggy device cannot do ARP*/
>> +             dev->net->flags |= IFF_NOARP;
>> +     }
>>       /* NCM data altsetting is always 1 */
>>       ret = cdc_ncm_bind_common(dev, intf, 1);
>>
>> @@ -1155,6 +1162,21 @@ static const struct driver_info wwan_info = {
>>       .tx_fixup = cdc_ncm_tx_fixup,
>>  };
>>
>> +/* Same as wwan_info, but with IFF_NOARP  */
>> +static const struct driver_info wwan_noarp_info = {
>> +     .description = "Mobile Broadband Network Device (NO ARP)",
>> +     .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET
>> +                     | FLAG_WWAN,
>> +     .data = CDC_NCM_DRIVER_DATA_NOARP,
>> +     .bind = cdc_ncm_bind,
>> +     .unbind = cdc_ncm_unbind,
>> +     .check_connect = cdc_ncm_check_connect,
>> +     .manage_power = usbnet_manage_power,
>> +     .status = cdc_ncm_status,
>> +     .rx_fixup = cdc_ncm_rx_fixup,
>> +     .tx_fixup = cdc_ncm_tx_fixup,
>> +};
>> +
>>  static const struct usb_device_id cdc_devs[] = {
>>       /* Ericsson MBM devices like F5521gw */
>>       { .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
>> @@ -1194,6 +1216,13 @@ static const struct usb_device_id cdc_devs[] = {
>>         .driver_info = (unsigned long)&wwan_info,
>>       },
>>
>> +     /* Infineon(now Intel) HSPA Modem platform */
>> +     { USB_DEVICE_AND_INTERFACE_INFO(0x1519, 0x0443,
>> +             USB_CLASS_COMM,
>> +             USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
>> +       .driver_info = (unsigned long)&wwan_noarp_info,
>> +     },
>> +
>>       /* Generic CDC-NCM devices */
>>       { USB_INTERFACE_INFO(USB_CLASS_COMM,
>>               USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
>
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform
  2013-01-17  6:44     ` Wei Shuai
@ 2013-01-18 17:43       ` Dan Williams
  0 siblings, 0 replies; 11+ messages in thread
From: Dan Williams @ 2013-01-18 17:43 UTC (permalink / raw)
  To: Wei Shuai
  Cc: Greg Kroah-Hartman, Alexey Orishko, Bjørn Mork, linux-usb, netdev

On Thu, 2013-01-17 at 14:44 +0800, Wei Shuai wrote:
> OK, I will follow up. after add FLAG_NOARP, how should I handle
> IFF_NOARP? will I do it in cdc_ncm.c or usb_net.c?

usbnet.c

Dan

> 2013/1/17 Dan Williams <dcbw@redhat.com>:
> > On Sat, 2013-01-12 at 19:34 +0800, Wei Shuai wrote:
> >> Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. so I introduce a flag CDC_NCM_DRIVER_DATA_NOARP which is defined in driver_info:data. so later on, if more such buggy devices are found, they could use same flag to handle.
> >
> > So given that Dave now approves of IFF_NOARP, let's change your original
> > patch to add a FLAG_NOARP for the .flags structure instead of inventing
> > another mechanism for .data.
> >
> > Dan
> >
> >> Signed-off-by: Wei Shuai <cpuwolf@gmail.com>
> >> ---
> >>  drivers/net/usb/cdc_ncm.c |   29 +++++++++++++++++++++++++++++
> >>  1 files changed, 29 insertions(+), 0 deletions(-)
> >>
> >> diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
> >> index 71b6e92..6093e07 100644
> >> --- a/drivers/net/usb/cdc_ncm.c
> >> +++ b/drivers/net/usb/cdc_ncm.c
> >> @@ -55,6 +55,9 @@
> >>
> >>  #define      DRIVER_VERSION                          "14-Mar-2012"
> >>
> >> +/* Flags for driver_info::data */
> >> +#define CDC_NCM_DRIVER_DATA_NOARP  1
> >> +
> >>  static void cdc_ncm_txpath_bh(unsigned long param);
> >>  static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx);
> >>  static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *hr_timer);
> >> @@ -573,6 +576,10 @@ static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf)
> >>               return -ENODEV;
> >>  #endif
> >>
> >> +     if (dev->driver_info->data & CDC_NCM_DRIVER_DATA_NOARP) {
> >> +             /* some buggy device cannot do ARP*/
> >> +             dev->net->flags |= IFF_NOARP;
> >> +     }
> >>       /* NCM data altsetting is always 1 */
> >>       ret = cdc_ncm_bind_common(dev, intf, 1);
> >>
> >> @@ -1155,6 +1162,21 @@ static const struct driver_info wwan_info = {
> >>       .tx_fixup = cdc_ncm_tx_fixup,
> >>  };
> >>
> >> +/* Same as wwan_info, but with IFF_NOARP  */
> >> +static const struct driver_info wwan_noarp_info = {
> >> +     .description = "Mobile Broadband Network Device (NO ARP)",
> >> +     .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET
> >> +                     | FLAG_WWAN,
> >> +     .data = CDC_NCM_DRIVER_DATA_NOARP,
> >> +     .bind = cdc_ncm_bind,
> >> +     .unbind = cdc_ncm_unbind,
> >> +     .check_connect = cdc_ncm_check_connect,
> >> +     .manage_power = usbnet_manage_power,
> >> +     .status = cdc_ncm_status,
> >> +     .rx_fixup = cdc_ncm_rx_fixup,
> >> +     .tx_fixup = cdc_ncm_tx_fixup,
> >> +};
> >> +
> >>  static const struct usb_device_id cdc_devs[] = {
> >>       /* Ericsson MBM devices like F5521gw */
> >>       { .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
> >> @@ -1194,6 +1216,13 @@ static const struct usb_device_id cdc_devs[] = {
> >>         .driver_info = (unsigned long)&wwan_info,
> >>       },
> >>
> >> +     /* Infineon(now Intel) HSPA Modem platform */
> >> +     { USB_DEVICE_AND_INTERFACE_INFO(0x1519, 0x0443,
> >> +             USB_CLASS_COMM,
> >> +             USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
> >> +       .driver_info = (unsigned long)&wwan_noarp_info,
> >> +     },
> >> +
> >>       /* Generic CDC-NCM devices */
> >>       { USB_INTERFACE_INFO(USB_CLASS_COMM,
> >>               USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
> >
> >
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2013-01-18 17:41 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-12 11:34 [PATCH] CDC_NCM adding support IFF_NOARP for infineon modem platform Wei Shuai
2013-01-12 23:35 ` David Miller
2013-01-14 17:19   ` Dan Williams
2013-01-14 18:34     ` David Miller
2013-01-15  0:41       ` Peter Stuge
2013-01-15  8:34       ` Bjørn Mork
     [not found]         ` <87hamikfpc.fsf-lbf33ChDnrE/G1V5fR+Y7Q@public.gmane.org>
2013-01-16 21:18           ` David Miller
2013-01-15 13:11     ` Wei Shuai
     [not found] ` <1357990479-5836-1-git-send-email-cpuwolf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-01-16 21:45   ` Dan Williams
2013-01-17  6:44     ` Wei Shuai
2013-01-18 17:43       ` Dan Williams

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.