public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Mrkiko Rs <mrkiko.rs@gmail.com>
To: "Bjørn Mork" <bjorn@mork.no>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	Sami Farin <hvtaifwkbgefbaei@gmail.com>,
	Aleksander Morgado <aleksander@aleksander.es>
Subject: Re: [PATCH net,stable] net: cdc_mbim: add "NDP to end" quirk for Huawei E3372
Date: Sat, 5 Dec 2015 23:58:15 +0100	[thread overview]
Message-ID: <8754131851115884428@unknownmsgid> (raw)
In-Reply-To: <189443314.16051.1449346620265.JavaMail.mobile-sync@iodf83>

Unfortunately I found a typo: spefication should be specification. Sorry.

Inviato da iPhone

> Il giorno 05/dic/2015, alle ore 13:02, "Bjørn Mork" <bjorn@mork.no> ha scritto:
>
> The Huawei E3372 (12d1:157d) needs this quirk in MBIM mode
> as well. Allow this by forcing the NTB to contain only a
> single NDP, and add a device specific entry for this ID.
>
> Due to the way Huawei use device IDs, this might be applied
> to other modems as well.  It is assumed that those modems
> will be based on the same firmware and will need this quirk
> too.  If not, it will still not harm normal usage, although
> multiplexing performance could be impacted.
>
> Cc: Enrico Mioso <mrkiko.rs@gmail.com>
> Reported-by: Sami Farin <hvtaifwkbgefbaei@gmail.com>
> Signed-off-by: Bjørn Mork <bjorn@mork.no>
> ---
> drivers/net/usb/cdc_mbim.c | 26 +++++++++++++++++++++++++-
> drivers/net/usb/cdc_ncm.c  | 10 +++++++++-
> 2 files changed, 34 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
> index bbde9884ab8a..8973abdec9f6 100644
> --- a/drivers/net/usb/cdc_mbim.c
> +++ b/drivers/net/usb/cdc_mbim.c
> @@ -158,7 +158,7 @@ static int cdc_mbim_bind(struct usbnet *dev, struct usb_interface *intf)
>    if (!cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting))
>        goto err;
>
> -    ret Íc_ncm_bind_common(dev, intf, data_altsetting, 0);
> +    ret Íc_ncm_bind_common(dev, intf, data_altsetting, dev->driver_info->data);
>    if (ret)
>        goto err;
>
> @@ -582,6 +582,26 @@ static const struct driver_info cdc_mbim_info_zlp ={
>    .tx_fixup = cdc_mbim_tx_fixup,
> };
>
> +/* The spefication explicitly allows NDPs to be placed anywhere in the
> + * frame, but some devices fail unless the NDP is placed after the IP
> + * packets.  Using the CDC_NCM_FLAG_NDP_TO_END flags to force this
> + * behaviour.
> + *
> + * Note: The current implementation of this feature restricts each NTB
> + * to a single NDP, implying that multiplexed sessions cannot share an
> + * NTB. This might affect performace for multiplexed sessions.
> + */
> +static const struct driver_info cdc_mbim_info_ndp_to_end = {
> +    .description = "CDC MBIM",
> +    .flags = FLAG_NO_SETINT | FLAG_MULTI_PACKET | FLAG_WWAN,
> +    .bind = cdc_mbim_bind,
> +    .unbind = cdc_mbim_unbind,
> +    .manage_power = cdc_mbim_manage_power,
> +    .rx_fixup = cdc_mbim_rx_fixup,
> +    .tx_fixup = cdc_mbim_tx_fixup,
> +    .data = CDC_NCM_FLAG_NDP_TO_END,
> +};
> +
> static const struct usb_device_id mbim_devs[] = {
>    /* This duplicate NCM entry is intentional. MBIM devices can
>     * be disguised as NCM by default, and this is necessary to
> @@ -597,6 +617,10 @@ static const struct usb_device_id mbim_devs[] = {
>    { USB_VENDOR_AND_INTERFACE_INFO(0x0bdb, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
>      .driver_info = (unsigned long)&cdc_mbim_info,
>    },
> +    /* Huawei E3372 fails unless NDP comes after the IP packets */
> +    { USB_DEVICE_AND_INTERFACE_INFO(0x12d1, 0x157d, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
> +      .driver_info = (unsigned long)&cdc_mbim_info_ndp_to_end,
> +    },
>    /* default entry */
>    { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
>      .driver_info = (unsigned long)&cdc_mbim_info_zlp,
> diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
> index 3b1ba8237768..1e9843a41168 100644
> --- a/drivers/net/usb/cdc_ncm.c
> +++ b/drivers/net/usb/cdc_ncm.c
> @@ -955,10 +955,18 @@ static struct usb_cdc_ncm_ndp16 *cdc_ncm_ndp(struct cdc_ncm_ctx *ctx, struct sk_
>    * NTH16 header as we would normally do. NDP isn't written to the SKB yet, and
>    * the wNdpIndex field in the header is actually not consistent with reality. It will be later.
>    */
> -    if (ctx->drvflags & CDC_NCM_FLAG_NDP_TO_END)
> +    if (ctx->drvflags & CDC_NCM_FLAG_NDP_TO_END) {
>        if (ctx->delayed_ndp16->dwSignature == sign)
>            return ctx->delayed_ndp16;
>
> +        /* We can only push a single NDP to the end. Return
> +         * NULL to send what we've already got and queue this
> +         * skb for later.
> +         */
> +        else if (ctx->delayed_ndp16->dwSignature)
> +            return NULL;
> +    }
> +
>    /* follow the chain of NDPs, looking for a match */
>    while (ndpoffset) {
>        ndp16 = (struct usb_cdc_ncm_ndp16 *)(skb->data + ndpoffset);
> --
> 2.1.4
>

       reply	other threads:[~2015-12-05 22:58 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <189443314.16051.1449346620265.JavaMail.mobile-sync@iodf83>
2015-12-05 22:58 ` Mrkiko Rs [this message]
2015-12-05 12:01 [PATCH net,stable] net: cdc_mbim: add "NDP to end" quirk for Huawei E3372 Bjørn Mork
     [not found] ` <1449316910-8009-1-git-send-email-bjorn-yOkvZcmFvRU@public.gmane.org>
2015-12-05 22:47   ` Enrico Mioso
2015-12-06  4:36   ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8754131851115884428@unknownmsgid \
    --to=mrkiko.rs@gmail.com \
    --cc=aleksander@aleksander.es \
    --cc=bjorn@mork.no \
    --cc=hvtaifwkbgefbaei@gmail.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox