From patchwork Tue Aug 20 22:18:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Charles.Hyde@dellteam.com X-Patchwork-Id: 1150416 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=dellteam.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=dellteam.com header.i=@dellteam.com header.b="VutQFxB9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46ClZ91C4Vz9s3Z for ; Wed, 21 Aug 2019 08:18:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730944AbfHTWSz (ORCPT ); Tue, 20 Aug 2019 18:18:55 -0400 Received: from mx0b-00154904.pphosted.com ([148.163.137.20]:16864 "EHLO mx0b-00154904.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727358AbfHTWSz (ORCPT ); Tue, 20 Aug 2019 18:18:55 -0400 Received: from pps.filterd (m0170394.ppops.net [127.0.0.1]) by mx0b-00154904.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7KMFHj8004945; Tue, 20 Aug 2019 18:18:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dellteam.com; h=from : to : cc : subject : date : message-id : content-type : content-transfer-encoding : mime-version; s=smtpout1; bh=t1ntUWnyKU7vtk8aQ3sHa2w2l3X2idBxHhft0DoTAhE=; b=VutQFxB9oue4jcCDC4Y3nkkfwgyD2kzLQSGECgot99xO4xmj/vKf1tHu+Fxwyjc8Lzt0 xiW+DvaV+w3lXLvyeCvuq4HFv2MWt7DuX18EcXXlweu63CXJlOZVAaYxJwY6kN2BjQ6Z KDpfIrBQIq5zTxbGfLK7OEvP2NtOcYZKBhfDhIbSccKtu2Dzv4xrIQEdJbxfJndtQAv4 7Q9L3eHaFVdrKNhV2taPO2+ZGZLw3w2uC0SdE0qrAlT5ouJ21tmzgOkVyRPquJ3+UiVf eavWsdfINFmNs8iTDHO7/VpTEK2fIviKt+5/7U9HL8Fofen1F8KhcEMZMsXPBFKO4kSM Mw== Received: from mx0b-00154901.pphosted.com (mx0b-00154901.pphosted.com [67.231.157.37]) by mx0b-00154904.pphosted.com with ESMTP id 2ugh3g2h3j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Aug 2019 18:18:53 -0400 Received: from pps.filterd (m0144102.ppops.net [127.0.0.1]) by mx0b-00154901.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7KMHQ2g022625; Tue, 20 Aug 2019 18:18:52 -0400 Received: from ausxippc110.us.dell.com (AUSXIPPC110.us.dell.com [143.166.85.200]) by mx0b-00154901.pphosted.com with ESMTP id 2ugsex8221-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Aug 2019 18:18:52 -0400 X-LoopCount0: from 10.166.132.133 X-PREM-Routing: D-Outbound X-IronPort-AV: E=Sophos;i="5.60,349,1549951200"; d="scan'208";a="846157333" From: To: , CC: , , , , Subject: [RFC 1/4] Add usb_get_address and usb_set_address support Thread-Topic: [RFC 1/4] Add usb_get_address and usb_set_address support Thread-Index: AQHVV6TlN6JhPmp8+EufEIlfFi8+LA== Date: Tue, 20 Aug 2019 22:18:42 +0000 Message-ID: <1566339522507.45056@Dellteam.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.177.90.69] MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-08-20_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200205 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200204 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The core USB driver message.c is missing get/set address functionality that stops ifconfig from being able to push MAC addresses out to USB based ethernet devices. Without this functionality, some USB devices stop responding to ethernet packets when using ifconfig to change MAC addresses. This has been tested with a Dell Universal Dock D6000. Signed-off-by: Charles Hyde Cc: Mario Limonciello Cc: Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org --- drivers/usb/core/message.c | 59 ++++++++++++++++++++++++++++++++++++++ include/linux/usb.h | 3 ++ 2 files changed, 62 insertions(+) diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 5adf489428aa..eea775234b09 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -1085,6 +1085,65 @@ int usb_clear_halt(struct usb_device *dev, int pipe) } EXPORT_SYMBOL_GPL(usb_clear_halt); +/** + * usb_get_address - + * @dev: device whose endpoint is halted + * @mac: buffer for containing + * Context: !in_interrupt () + * + * This will attempt to get the six byte MAC address from a USB device's + * ethernet controller using GET_NET_ADDRESS command. + * + * This call is synchronous, and may not be used in an interrupt context. + * + * Return: Zero on success, or else the status code returned by the + * underlying usb_control_msg() call. + */ +int usb_get_address(struct usb_device *dev, unsigned char * mac) +{ + int ret = -ENOMEM; + unsigned char *tbuf = kmalloc(256, GFP_NOIO); + + if (!tbuf) + return -ENOMEM; + + ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), + USB_CDC_GET_NET_ADDRESS, + USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, + 0, USB_REQ_SET_ADDRESS, tbuf, 256, + USB_CTRL_GET_TIMEOUT); + if (ret == 6) + memcpy(mac, tbuf, 6); + + kfree(tbuf); + return ret; +} +EXPORT_SYMBOL_GPL(usb_get_address); + +/** + * usb_set_address - + * @dev: device whose endpoint is halted + * @mac: desired MAC address in network address order + * Context: !in_interrupt () + * + * This will attempt to set a six byte MAC address to the USB device's ethernet + * controller using SET_NET_ADDRESS command. + * + * This call is synchronous, and may not be used in an interrupt context. + * + * Return: Zero on success, or else the status code returned by the + * underlying usb_control_msg() call. + */ +int usb_set_address(struct usb_device *dev, unsigned char *mac) +{ + return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), + USB_CDC_SET_NET_ADDRESS, + USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, + 0, USB_REQ_SET_ADDRESS, mac, 6, + USB_CTRL_SET_TIMEOUT); +} +EXPORT_SYMBOL_GPL(usb_set_address); + static int create_intf_ep_devs(struct usb_interface *intf) { struct usb_device *udev = interface_to_usbdev(intf); diff --git a/include/linux/usb.h b/include/linux/usb.h index e87826e23d59..862c979d9821 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -1806,6 +1806,9 @@ static inline int usb_get_ptm_status(struct usb_device *dev, void *data) extern int usb_string(struct usb_device *dev, int index, char *buf, size_t size); +extern int usb_get_address(struct usb_device *dev, unsigned char * mac); +extern int usb_set_address(struct usb_device *dev, unsigned char * mac); + /* wrappers that also update important state inside usbcore */ extern int usb_clear_halt(struct usb_device *dev, int pipe); extern int usb_reset_configuration(struct usb_device *dev); From patchwork Tue Aug 20 22:21:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Charles.Hyde@dellteam.com X-Patchwork-Id: 1150417 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=dellteam.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=dellteam.com header.i=@dellteam.com header.b="FAg8ZxlC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Clcw4LFhz9s3Z for ; Wed, 21 Aug 2019 08:21:20 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730964AbfHTWVT (ORCPT ); Tue, 20 Aug 2019 18:21:19 -0400 Received: from mx0a-00154904.pphosted.com ([148.163.133.20]:2906 "EHLO mx0a-00154904.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727358AbfHTWVT (ORCPT ); Tue, 20 Aug 2019 18:21:19 -0400 Received: from pps.filterd (m0170389.ppops.net [127.0.0.1]) by mx0a-00154904.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7KMFDso015677; Tue, 20 Aug 2019 18:21:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dellteam.com; h=from : to : cc : subject : date : message-id : content-type : content-transfer-encoding : mime-version; s=smtpout1; bh=B+wXgXgTvN363It3lsd6rFsNGvZA0bT1QIBC3//VrxE=; b=FAg8ZxlCtzuDLEDiRTUgY2+YnIvn+T7FkoRG+AMawpBnPjIcU8mx3dfx8qGQgfWIoscL 26jpiBsCo8ltV/9D0qWsJ9d/gprui8nHqcMU0z6YTVzr+PV6eu8RazC5T+w4XJVWHJ7C mJb1jd2hOi79e6qVyX5rkjOIkQHw9dOYq7v4L7sp1eif7GQz5oicznj1wAdtI3QNf7Dh tjNuyS/LFKoq0hRjJWyLZUrtTlQTSy9AG6KIsDsgpuszoVg//j3A9KEDtB0JNw70z2pf HCi4EAkEddVgv9g7QI9UFcUVqt9RM83wmCxj4rHDLR9A0oMyKxgRpFQA4MJicY5veGdu rQ== Received: from mx0b-00154901.pphosted.com (mx0b-00154901.pphosted.com [67.231.157.37]) by mx0a-00154904.pphosted.com with ESMTP id 2ug0d16b0h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Aug 2019 18:21:06 -0400 Received: from pps.filterd (m0144104.ppops.net [127.0.0.1]) by mx0b-00154901.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7KMI5S2026865; Tue, 20 Aug 2019 18:21:05 -0400 Received: from ausc60ps301.us.dell.com (ausc60ps301.us.dell.com [143.166.148.206]) by mx0b-00154901.pphosted.com with ESMTP id 2ugpb7jjju-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Aug 2019 18:21:05 -0400 X-LoopCount0: from 10.166.132.132 X-PREM-Routing: D-Outbound X-IronPort-AV: E=Sophos;i="5.60,349,1549951200"; d="scan'208";a="1346990097" From: To: , CC: , , , , Subject: [RFC 2/4] Allow cdc_ncm to set MAC address in hardware Thread-Topic: [RFC 2/4] Allow cdc_ncm to set MAC address in hardware Thread-Index: AQHVV6VMi2mBgTVez06jTeC7fFTbBw== Date: Tue, 20 Aug 2019 22:21:03 +0000 Message-ID: <1566339663476.54366@Dellteam.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.177.90.69] MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-08-20_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200205 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200204 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds support for pushing a MAC address out to USB based ethernet controllers driven by cdc_ncm. With this change, ifconfig can now set the device's MAC address. For example, the Dell Universal Dock D6000 is driven by cdc_ncm. The D6000 can now have its MAC address set by ifconfig, as it can be done in Windows. This was tested with a D6000 using ifconfig. Signed-off-by: Charles Hyde Cc: Mario Limonciello Cc: Oliver Neukum Cc: netdev@vger.kernel.org Cc: linux-usb@vger.kernel.org --- drivers/net/usb/cdc_ncm.c | 20 +++++++++++++++++++- drivers/net/usb/usbnet.c | 37 ++++++++++++++++++++++++++++--------- include/linux/usb/usbnet.h | 1 + 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index 50c05d0f44cb..f77c8672f972 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -750,6 +750,24 @@ int cdc_ncm_change_mtu(struct net_device *net, int new_mtu) } EXPORT_SYMBOL_GPL(cdc_ncm_change_mtu); +/* Provide method to push MAC address to the USB device's ethernet controller. + */ +int cdc_ncm_set_mac_addr(struct net_device *net, void *p) +{ + struct usbnet *dev = netdev_priv(net); + struct sockaddr *addr = p; + + memcpy(dev->net->dev_addr, addr->sa_data, ETH_ALEN); + /* + * Try to push the MAC address out to the device. Ignore any errors, + * to be compatible with prior versions of this source. + */ + usbnet_set_ethernet_addr(dev); + + return eth_mac_addr(net, p); +} +EXPORT_SYMBOL_GPL(cdc_ncm_set_mac_addr); + static const struct net_device_ops cdc_ncm_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, @@ -757,7 +775,7 @@ static const struct net_device_ops cdc_ncm_netdev_ops = { .ndo_tx_timeout = usbnet_tx_timeout, .ndo_get_stats64 = usbnet_get_stats64, .ndo_change_mtu = cdc_ncm_change_mtu, - .ndo_set_mac_address = eth_mac_addr, + .ndo_set_mac_address = cdc_ncm_set_mac_addr, .ndo_validate_addr = eth_validate_addr, }; diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 72514c46b478..72bdac34b0ee 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -149,20 +149,39 @@ int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress) int tmp = -1, ret; unsigned char buf [13]; - ret = usb_string(dev->udev, iMACAddress, buf, sizeof buf); - if (ret == 12) - tmp = hex2bin(dev->net->dev_addr, buf, 6); - if (tmp < 0) { - dev_dbg(&dev->udev->dev, - "bad MAC string %d fetch, %d\n", iMACAddress, tmp); - if (ret >= 0) - ret = -EINVAL; - return ret; + ret = usb_get_address(dev->udev, buf); + if (ret == 6) + memcpy(dev->net->dev_addr, buf, 6); + else if (ret < 0) { + ret = usb_string(dev->udev, iMACAddress, buf, sizeof buf); + if (ret == 12) + tmp = hex2bin(dev->net->dev_addr, buf, 6); + if (tmp < 0) { + dev_dbg(&dev->udev->dev, + "bad MAC string %d fetch, %d\n", iMACAddress, + tmp); + if (ret >= 0) + ret = -EINVAL; + return ret; + } } return 0; } EXPORT_SYMBOL_GPL(usbnet_get_ethernet_addr); +int usbnet_set_ethernet_addr(struct usbnet *dev) +{ + int ret; + + ret = usb_set_address(dev->udev, dev->net->dev_addr); + if (ret < 0) { + dev_dbg(&dev->udev->dev, + "bad MAC address put, %d\n", ret); + } + return ret; +} +EXPORT_SYMBOL_GPL(usbnet_set_ethernet_addr); + static void intr_complete (struct urb *urb) { struct usbnet *dev = urb->context; diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index d8860f2d0976..f2b2c5ab5493 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h @@ -258,6 +258,7 @@ extern int usbnet_change_mtu(struct net_device *net, int new_mtu); extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); extern int usbnet_get_ethernet_addr(struct usbnet *, int); +extern int usbnet_set_ethernet_addr(struct usbnet *); extern void usbnet_defer_kevent(struct usbnet *, int); extern void usbnet_skb_return(struct usbnet *, struct sk_buff *); extern void usbnet_unlink_rx_urbs(struct usbnet *); From patchwork Tue Aug 20 22:22:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Charles.Hyde@dellteam.com X-Patchwork-Id: 1150418 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=dellteam.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=dellteam.com header.i=@dellteam.com header.b="fBFU8ACz"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Clf81Lqfz9s3Z for ; Wed, 21 Aug 2019 08:22:24 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730966AbfHTWWW (ORCPT ); Tue, 20 Aug 2019 18:22:22 -0400 Received: from mx0a-00154904.pphosted.com ([148.163.133.20]:22710 "EHLO mx0a-00154904.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727358AbfHTWWW (ORCPT ); Tue, 20 Aug 2019 18:22:22 -0400 Received: from pps.filterd (m0170390.ppops.net [127.0.0.1]) by mx0a-00154904.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7KMLKUh031014; Tue, 20 Aug 2019 18:22:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dellteam.com; h=from : to : cc : subject : date : message-id : content-type : content-transfer-encoding : mime-version; s=smtpout1; bh=qmAnrRGHMMYWyrXBxMC7oZF7obTugelH4zmgxwm12Tw=; b=fBFU8ACzu3N/+3GeYJIqiJqM1S2yt2qe5gv9P2SAioChL879kGvrUGkhagX4f1PjrXOF vVq3Hz+FAiQ4bMZs6hj2EOF5N3ZFHeK94yxfg1Kinn7m1hGXLAI9nH8FjXLdVsSUtKDm RDxfcuyPwjkrd+gPGJTewp7g50RmPPUOtrc6TXPyO+L+Jh1XpOcQWnAqwo08NNbuzSjJ gjTXAAiQdUgAdRx3LxajrFvoY88grmC8rHrlrgcgcqy9zhZXaV8RkfEVTLE/zCkuV8zA LAze0ZvU96E5i2homy1pCHnvp4/RmPO126OIQUIr5DSd3VYwLeq0MoynbNZRFlNkVn1h KQ== Received: from mx0a-00154901.pphosted.com (mx0a-00154901.pphosted.com [67.231.149.39]) by mx0a-00154904.pphosted.com with ESMTP id 2ugfdm2vv5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Aug 2019 18:22:21 -0400 Received: from pps.filterd (m0142693.ppops.net [127.0.0.1]) by mx0a-00154901.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7KMI47i097576; Tue, 20 Aug 2019 18:22:21 -0400 Received: from ausc60pc101.us.dell.com (ausc60pc101.us.dell.com [143.166.85.206]) by mx0a-00154901.pphosted.com with ESMTP id 2ugp98tt15-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Aug 2019 18:22:21 -0400 X-LoopCount0: from 10.166.132.128 X-PREM-Routing: D-Outbound X-IronPort-AV: E=Sophos;i="5.60,349,1549951200"; d="scan'208";a="1455945352" From: To: , CC: , , , , Subject: [RFC 3/4] Move ACPI functionality out of r8152 driver Thread-Topic: [RFC 3/4] Move ACPI functionality out of r8152 driver Thread-Index: AQHVV6Wmg1QvoyTvokGSVMHHZMBMTw== Date: Tue, 20 Aug 2019 22:22:18 +0000 Message-ID: <1566339738195.2913@Dellteam.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.177.90.69] MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-08-20_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200205 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200205 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This change moves ACPI functionality out of the Realtek r8152 driver to its own source and header file, making it available to other drivers as needed now and into the future. At the time this ACPI snippet was introduced in 2016, only the Realtek driver made use of it in support of Dell's enterprise IT policy efforts. There comes now a need for this same support in a different driver, also in support of Dell's enterprise IT policy efforts. Signed-off-by: Charles Hyde Cc: Mario Limonciello Cc: Realtek linux nic maintainers Cc: linux-usb@vger.kernel.org Cc: linux-acpi@vger.kernel.org --- drivers/net/usb/r8152.c | 44 ++++------------------------------------- lib/Makefile | 3 ++- 2 files changed, 6 insertions(+), 41 deletions(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 0cc03a9ff545..b1dba3400b74 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -23,6 +23,7 @@ #include #include #include +#include /* Information for net-next */ #define NETNEXT_VERSION "09" @@ -1175,12 +1176,7 @@ static int rtl8152_set_mac_address(struct net_device *netdev, void *p) */ static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) { - acpi_status status; - struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; - union acpi_object *obj; - int ret = -EINVAL; u32 ocp_data; - unsigned char buf[6]; /* test for -AD variant of RTL8153 */ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); @@ -1201,39 +1197,7 @@ static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) return -ENODEV; } } - - /* returns _AUXMAC_#AABBCCDDEEFF# */ - status = acpi_evaluate_object(NULL, "\\_SB.AMAC", NULL, &buffer); - obj = (union acpi_object *)buffer.pointer; - if (!ACPI_SUCCESS(status)) - return -ENODEV; - if (obj->type != ACPI_TYPE_BUFFER || obj->string.length != 0x17) { - netif_warn(tp, probe, tp->netdev, - "Invalid buffer for pass-thru MAC addr: (%d, %d)\n", - obj->type, obj->string.length); - goto amacout; - } - if (strncmp(obj->string.pointer, "_AUXMAC_#", 9) != 0 || - strncmp(obj->string.pointer + 0x15, "#", 1) != 0) { - netif_warn(tp, probe, tp->netdev, - "Invalid header when reading pass-thru MAC addr\n"); - goto amacout; - } - ret = hex2bin(buf, obj->string.pointer + 9, 6); - if (!(ret == 0 && is_valid_ether_addr(buf))) { - netif_warn(tp, probe, tp->netdev, - "Invalid MAC for pass-thru MAC addr: %d, %pM\n", - ret, buf); - ret = -EINVAL; - goto amacout; - } - memcpy(sa->sa_data, buf, 6); - netif_info(tp, probe, tp->netdev, - "Using pass-thru MAC addr %pM\n", sa->sa_data); - -amacout: - kfree(obj); - return ret; + return get_acpi_mac_passthru(&tp->intf->dev, sa); } static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa) @@ -4309,10 +4273,10 @@ static int rtl8152_post_reset(struct usb_interface *intf) if (!tp) return 0; - /* reset the MAC adddress in case of policy change */ + /* reset the MAC address in case of policy change */ if (determine_ethernet_addr(tp, &sa) >= 0) { rtnl_lock(); - dev_set_mac_address (tp->netdev, &sa, NULL); + dev_set_mac_address(tp->netdev, &sa, NULL); rtnl_unlock(); } diff --git a/lib/Makefile b/lib/Makefile index 29c02a924973..a902bec0ac65 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -35,7 +35,8 @@ lib-y := ctype.o string.o vsprintf.o cmdline.o \ flex_proportions.o ratelimit.o show_mem.o \ is_single_threaded.o plist.o decompress.o kobject_uevent.o \ earlycpio.o seq_buf.o siphash.o dec_and_lock.o \ - nmi_backtrace.o nodemask.o win_minmax.o memcat_p.o + nmi_backtrace.o nodemask.o win_minmax.o memcat_p.o \ + acpi_mac_passthru.o lib-$(CONFIG_PRINTK) += dump_stack.o lib-$(CONFIG_MMU) += ioremap.o From patchwork Tue Aug 20 22:23:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Charles.Hyde@dellteam.com X-Patchwork-Id: 1150419 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=dellteam.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=dellteam.com header.i=@dellteam.com header.b="PoR/yfkx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46ClgF0qwnz9s3Z for ; Wed, 21 Aug 2019 08:23:21 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730932AbfHTWXU (ORCPT ); Tue, 20 Aug 2019 18:23:20 -0400 Received: from mx0a-00154904.pphosted.com ([148.163.133.20]:40560 "EHLO mx0a-00154904.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727358AbfHTWXT (ORCPT ); Tue, 20 Aug 2019 18:23:19 -0400 Received: from pps.filterd (m0170390.ppops.net [127.0.0.1]) by mx0a-00154904.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7KMLLSG031038; Tue, 20 Aug 2019 18:23:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dellteam.com; h=from : to : cc : subject : date : message-id : content-type : content-transfer-encoding : mime-version; s=smtpout1; bh=Y6k0CXvcStQUDgctYziXK5EGTdaIgQ5HuRwJxvV3x7g=; b=PoR/yfkxhBL5vT6OC+yodv/kx2LmTvL/QwGiy9ZM4HkASSmq8G/vhDfR3YoPl5PJfMQr AB/osjC75PZsrvO17jmPONYBrs+u+q3swf8a3WqH4ha0CEmGEznQ76qL/i9THOlWmqjE tpEdSUY15PhjuJsfpzGbKqXCEKyqCdffTPmXBDKZmlWVljnUERk3lAM8BUjH0wAUn3Ed YoVY+plq3S/NY2koFHzGvOacR7ng3MyOhX/H7pXW/+TlcunJVpCvQQ6GiqTMTwvuLlA2 1gcfyU0neO1CbQ68u2fF90p5gEjZ1Ml3IAG7VwzeU9tgNkTLBGuZz9W36n3xC+x4ct6s sA== Received: from mx0a-00154901.pphosted.com (mx0a-00154901.pphosted.com [67.231.149.39]) by mx0a-00154904.pphosted.com with ESMTP id 2ugfdm2vx7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Aug 2019 18:23:18 -0400 Received: from pps.filterd (m0090351.ppops.net [127.0.0.1]) by mx0b-00154901.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7KMNIEI137858; Tue, 20 Aug 2019 18:23:18 -0400 Received: from ausc60ps301.us.dell.com (ausc60ps301.us.dell.com [143.166.148.206]) by mx0b-00154901.pphosted.com with ESMTP id 2ugr58s5jn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Aug 2019 18:23:18 -0400 X-LoopCount0: from 10.166.132.130 X-PREM-Routing: D-Outbound X-IronPort-AV: E=Sophos;i="5.60,349,1549951200"; d="scan'208";a="1346990510" From: To: , CC: , , , , Subject: [RFC 4/4] net: cdc_ncm: Add ACPI MAC address pass through functionality Thread-Topic: [RFC 4/4] net: cdc_ncm: Add ACPI MAC address pass through functionality Thread-Index: AQHVV6XcyyL7dINtZEiggXCPIGXHZw== Date: Tue, 20 Aug 2019 22:23:15 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.177.90.69] MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-08-20_11:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=856 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200206 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=983 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200205 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 Cc: Mario Limonciello Cc: Oliver Neukum Cc: linux-usb@vger.kernel.org --- drivers/net/usb/cdc_ncm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index f77c8672f972..1f046acca6fc 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -52,6 +52,7 @@ #include #include #include +#include #if IS_ENABLED(CONFIG_USB_NET_CDC_MBIM) static bool prefer_mbim = true; @@ -930,11 +931,18 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_ usb_set_intfdata(ctx->control, dev); if (ctx->ether_desc) { + struct sockaddr sa; + temp = usbnet_get_ethernet_addr(dev, ctx->ether_desc->iMACAddress); if (temp) { dev_dbg(&intf->dev, "failed to get mac address\n"); goto error2; } + if (get_acpi_mac_passthru(&intf->dev, &sa) == 0) { + memcpy(dev->net->dev_addr, sa.sa_data, ETH_ALEN); + if (usbnet_set_ethernet_addr(dev) < 0) + usbnet_get_ethernet_addr(dev, ctx->ether_desc->iMACAddress); + } dev_info(&intf->dev, "MAC-Address: %pM\n", dev->net->dev_addr); }