All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oliver Neukum <oneukum@suse.com>
To: Charles.Hyde@dellteam.com, lenb@kernel.org, rjw@rjwysocki.net
Cc: Mario.Limonciello@dell.com, nic_swsd@realtek.com,
	linux-acpi@vger.kernel.org, linux-usb@vger.kernel.org
Subject: Re: [PATCH 3/3] net: cdc_ncm: Add ACPI MAC address pass through functionality
Date: Mon, 02 Sep 2019 11:49:19 +0200	[thread overview]
Message-ID: <1567417759.2469.5.camel@suse.com> (raw)
In-Reply-To: <b24465a706744d99a7c1682f05a24784@AUSX13MPS307.AMER.DELL.COM>

Am Freitag, den 30.08.2019, 19:38 +0000 schrieb
Charles.Hyde@dellteam.com:
> This change adds support to cdc_ncm for ACPI MAC address pass through
> functionality that also exists in the Realtek r8152 driver.  This is in
> support of Dell's Universal Dock D6000, to give it the same feature
> capability as is currently available in Windows and advertized on Dell's
> product web site.
> 
> Signed-off-by: Charles Hyde <charles.hyde@dellteam.com>
> Cc: Mario Limonciello <mario.limonciello@dell.com>
> Cc: Oliver Neukum <oliver@neukum.org>
> Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
> Cc: Len Brown <lenb@kernel.org>
> Cc: linux-usb@vger.kernel.org
> Cc: linux-acpi@vger.kernel.org
> ---
>  drivers/net/usb/cdc_ncm.c | 67 +++++++++++++++++++++++++++++++++++++--
>  1 file changed, 64 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
> index 85093579612f..11a04dc2298d 100644
> --- a/drivers/net/usb/cdc_ncm.c
> +++ b/drivers/net/usb/cdc_ncm.c
> @@ -52,6 +52,7 @@
>  #include <linux/usb/usbnet.h>
>  #include <linux/usb/cdc.h>
>  #include <linux/usb/cdc_ncm.h>
> +#include <acpi/acpi_mac_passthru.h>
>  
>  #if IS_ENABLED(CONFIG_USB_NET_CDC_MBIM)
>  static bool prefer_mbim = true;
> @@ -984,11 +985,30 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
>  	usb_set_intfdata(ctx->control, dev);
>  
>  	if (ctx->ether_desc) {
> -		temp = usbnet_get_ethernet_addr(dev, ctx->ether_desc->iMACAddress);
> +		struct sockaddr sa;
> +
> +		temp = cdc_ncm_get_ethernet_address(dev, ctx);
>  		if (temp) {
>  			dev_dbg(&intf->dev, "failed to get mac address\n");
>  			goto error2;
>  		}
> +
> +		/* Check for a Dell Universal Dock D6000 before checking if
> +		 * ACPI supports MAC address pass through.
> +		 */
> +		if (!strstr(dev->udev->product, "D6000"))
> +			goto skip_acpi_mapt_in_bind;
> +
> +		if (get_acpi_mac_passthru(sa.sa_data) != 0)
> +			goto skip_acpi_mapt_in_bind;
> +
> +		if (memcmp(dev->net->dev_addr, sa.sa_data, ETH_ALEN) == 0)
> +			goto skip_acpi_mapt_in_bind;
> +
> +		if (cdc_ncm_set_ethernet_address(dev, &sa) == 0)
> +			memcpy(dev->net->dev_addr, sa.sa_data, ETH_ALEN);
> +
> +skip_acpi_mapt_in_bind:
>  		dev_info(&intf->dev, "MAC-Address: %pM\n", dev->net->dev_addr);
>  	}
>  
> @@ -1716,6 +1736,47 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)
>  	}
>  }
>  
> +static int cdc_ncm_resume(struct usb_interface *intf)
> +{
> +	struct usbnet *dev = usb_get_intfdata(intf);
> +	struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
> +	int ret;
> +
> +	ret = usbnet_resume(intf);
> +	if (ret != 0)
> +		goto error2;
> +
> +	if (ctx->ether_desc) {
> +		struct sockaddr sa;
> +
> +		if (cdc_ncm_get_ethernet_address(dev, ctx)) {
> +			dev_dbg(&intf->dev, "failed to get mac address\n");
> +			goto error2;
> +		}
> +
> +		/* Check for a Dell Universal Dock D6000 before checking if
> +		 * ACPI supports MAC address pass through.
> +		 */
> +		if (!strstr(dev->udev->product, "D6000"))
> +			goto skip_acpi_mapt_in_resume;

This is too ugly. Use a flag for the need to restore the MAC.
And have you consider the case somebody triggers a reset through
usbfs? It looks to me like you should encapsulate the restoration
of the MAC and also use it in post_reset()

	Regards
		Oliver


  reply	other threads:[~2019-09-02  9:49 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-30 19:38 [PATCH 3/3] net: cdc_ncm: Add ACPI MAC address pass through functionality Charles.Hyde
2019-09-02  9:49 ` Oliver Neukum [this message]
2019-09-03 17:50   ` Charles.Hyde
2019-09-03 17:57     ` Mario.Limonciello
  -- strict thread matches above, loose matches on Subject: below --
2019-09-05 21:01 Charles.Hyde
2019-09-06  2:13 ` Chunfeng Yun
2019-09-06 13:25   ` chip.programmer
2019-09-06  7:59 ` Bjørn Mork
2019-09-06 15:23   ` Dan Williams

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=1567417759.2469.5.camel@suse.com \
    --to=oneukum@suse.com \
    --cc=Charles.Hyde@dellteam.com \
    --cc=Mario.Limonciello@dell.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=nic_swsd@realtek.com \
    --cc=rjw@rjwysocki.net \
    /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 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.